{"version":3,"sources":["../src/types/chrome-api.types.ts","../src/types/library.types.ts","../src/types/index.ts","../src/utils/session-storage.ts","../src/utils/quota-manager.ts","../src/core/session-manager.ts","../src/utils/availability.ts","../src/core/prompt-client.ts","../src/core/index.ts","../src/index.ts","../src/structured/schema-generator.ts","../src/structured/structured-prompt.ts","../src/structured/zod-helpers.ts","../src/function-calling/function-registry.ts","../src/function-calling/function-executor.ts","../src/function-calling/function-prompt-builder.ts","../src/agents/basic-agent.ts","../src/agents/advanced-agent.ts","../src/agents/agent-utils.ts","../src/streaming/stream-processor.ts","../src/streaming/stream-renderers.ts","../src/utils/error-handling.ts"],"names":["PromptAPIError","QuotaExceededError","SessionError","StructuredOutputError","FunctionCallError","SessionStorage","QuotaTracker","SessionManager","result","status","PromptClient","z","args"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Native Chrome Prompt API type definitions\n * Based on: https://developer.chrome.com/docs/ai/prompt-api\n */\n\nexport type MessageRole = 'system' | 'user' | 'assistant';\nexport type LanguageModelAvailability = \"available\" | \"unavailable\" | \"downloadable\" | \"downloading\"\n\nexport interface InitialPrompt {\n  role: MessageRole;\n  content: string;\n}\n\nexport interface LanguageModelCreateOptions {\n  signal?: AbortSignal;\n  monitor?: (monitor: LanguageModelMonitor) => void;\n  systemPrompt?: string;\n  initialPrompts?: InitialPrompt[];\n  topK?: number;\n  temperature?: number;\n}\n\nexport interface LanguageModelMonitor {\n  addEventListener(\n    type: 'downloadprogress',\n    listener: (event: DownloadProgressEvent) => void\n  ): void;\n  removeEventListener(\n    type: 'downloadprogress',\n    listener: (event: DownloadProgressEvent) => void\n  ): void;\n}\n\nexport interface DownloadProgressEvent extends Event {\n  loaded: number;\n  total: number;\n}\n\nexport interface LanguageModel {\n  availability(): Promise<LanguageModelAvailability>\n  create(options?: LanguageModelCreateOptions): Promise<LanguageModel>;\n  prompt(input: string, options?: PromptOptions): Promise<string>;\n  promptStreaming(input: string, options?: PromptOptions): ReadableStream<string>;\n  countPromptTokens(input: string, options?: PromptOptions): Promise<number>;\n  readonly maxTokens: number;\n  readonly tokensSoFar: number;\n  readonly tokensLeft: number;\n  clone(): Promise<LanguageModel>;\n  destroy(): void;\n}\n\nexport interface PromptOptions {\n  signal?: AbortSignal;\n}\n\nexport interface LanguageModelCapabilities {\n  available: 'readily' | 'after-download' | 'no';\n  defaultTopK?: number;\n  maxTopK?: number;\n  defaultTemperature?: number;\n}\n\nexport interface AILanguageModelFactory {\n  create(options?: LanguageModelCreateOptions): Promise<LanguageModel>;\n  capabilities(): Promise<LanguageModelCapabilities>;\n}\n\n// Global AI interface\nexport interface WindowAI {\n  languageModel?: AILanguageModelFactory;\n}\n\ndeclare global {\n  interface Window {\n    ai?: WindowAI;\n    LanguageModel?: LanguageModel;\n  }\n}\n\n// Session quota tracking (extended from base LanguageModel)\nexport interface SessionQuota {\n  maxTokens: number;\n  tokensSoFar: number;\n  tokensLeft: number;\n}\n\n// Availability status\nexport type AvailabilityStatus = 'available' | 'unavailable' | 'downloadable' | 'downloading';\n\n","/**\n * Library-specific type definitions\n */\n\nimport type { ZodType } from 'zod';\nimport type { InitialPrompt, MessageRole } from './chrome-api.types';\n\n// Session Management\nexport interface PromptAPIConfig {\n  systemPrompt?: string;\n  temperature?: number;\n  topK?: number;\n  initialPrompts?: InitialPrompt[];\n}\n\nexport interface SessionOptions extends PromptAPIConfig {\n  sessionId?: string;\n  enablePersistence?: boolean;\n}\n\nexport interface SessionData {\n  id: string;\n  initialPrompts: InitialPrompt[];\n  topK: number;\n  temperature: number;\n  createdAt: number;\n  updatedAt: number;\n}\n\n// Streaming\nexport interface StreamingOptions {\n  signal?: AbortSignal;\n  onChunk?: (chunk: string) => void;\n  onComplete?: (result: string) => void;\n  onError?: (error: Error) => void;\n}\n\nexport type RenderMode = 'word' | 'sentence' | 'chunk';\n\nexport interface StreamRenderOptions {\n  mode: RenderMode;\n  onUpdate: (text: string) => void;\n  debounceMs?: number;\n}\n\n// Structured Output\nexport interface SchemaDefinition {\n  type: string;\n  properties?: Record<string, SchemaDefinition>;\n  items?: SchemaDefinition;\n  required?: string[];\n  enum?: string[];\n  description?: string;\n}\n\nexport type SchemaOutput<T> = T;\n\nexport interface StructuredPromptOptions<T> {\n  schema: ZodType<T> | SchemaDefinition;\n  maxRetries?: number;\n  systemPrompt?: string;\n  signal?: AbortSignal;\n}\n\n// Function Calling\nexport interface FunctionParameter {\n  type: string;\n  description?: string;\n  enum?: string[];\n  items?: FunctionParameter;\n  properties?: Record<string, FunctionParameter>;\n  required?: string[];\n}\n\nexport interface FunctionDefinition {\n  name: string;\n  description: string;\n  parameters: FunctionParameter;\n  handler: (...args: unknown[]) => Promise<unknown> | unknown;\n}\n\nexport interface FunctionCall {\n  name: string;\n  arguments: Record<string, unknown>;\n}\n\nexport interface ToolResult {\n  success: boolean;\n  result?: unknown;\n  error?: string;\n}\n\n// Agent Types\nexport type TaskStatus = 'idle' | 'running' | 'completed' | 'failed' | 'stopped';\n\nexport interface AgentStep {\n  iteration: number;\n  thought?: string;\n  action?: FunctionCall;\n  observation?: ToolResult;\n  timestamp: number;\n}\n\nexport interface AgentConfig {\n  maxIterations: number;\n  functions?: FunctionDefinition[];\n  systemPrompt?: string;\n  onStep?: (step: AgentStep) => void;\n  stopCondition?: (steps: AgentStep[]) => boolean;\n}\n\nexport interface AdvancedAgentConfig extends AgentConfig {\n  planningPrompt?: string;\n  reflectionPrompt?: string;\n  maxReflections?: number;\n  enablePlanning?: boolean;\n}\n\nexport interface AgentResult {\n  status: TaskStatus;\n  steps: AgentStep[];\n  finalAnswer?: string;\n  error?: Error;\n  iterations: number;\n}\n\nexport interface AgentPlan {\n  steps: string[];\n  dependencies: Record<number, number[]>;\n}\n\n// Error Types\nexport class PromptAPIError extends Error {\n  public override readonly cause?: unknown;\n  \n  constructor(\n    message: string,\n    public readonly code?: string,\n    cause?: unknown\n  ) {\n    super(message);\n    this.name = 'PromptAPIError';\n    this.cause = cause;\n  }\n}\n\nexport class QuotaExceededError extends PromptAPIError {\n  constructor(message: string) {\n    super(message, 'QUOTA_EXCEEDED');\n    this.name = 'QuotaExceededError';\n  }\n}\n\nexport class SessionError extends PromptAPIError {\n  constructor(message: string, cause?: unknown) {\n    super(message, 'SESSION_ERROR', cause);\n    this.name = 'SessionError';\n  }\n}\n\nexport class StructuredOutputError extends PromptAPIError {\n  constructor(message: string, cause?: unknown) {\n    super(message, 'STRUCTURED_OUTPUT_ERROR', cause);\n    this.name = 'StructuredOutputError';\n  }\n}\n\nexport class FunctionCallError extends PromptAPIError {\n  constructor(message: string, cause?: unknown) {\n    super(message, 'FUNCTION_CALL_ERROR', cause);\n    this.name = 'FunctionCallError';\n  }\n}\n\n// Utility Types\nexport interface ConversationMessage {\n  role: MessageRole;\n  content: string;\n  timestamp?: number;\n}\n\nexport interface QuotaInfo {\n  maxTokens: number;\n  tokensUsed: number;\n  tokensRemaining: number;\n  percentageUsed: number;\n}\n\n","/**\n * Type definitions exports\n */\n\nexport * from './chrome-api.types';\nexport * from './library.types';\n\n","/**\n * Session persistence utilities using localStorage\n */\n\nimport type { SessionData, InitialPrompt } from '../types';\nimport { SessionError } from '../types';\n\nconst STORAGE_KEY_PREFIX = 'prompt-api-session-';\nconst STORAGE_INDEX_KEY = 'prompt-api-sessions-index';\n\nexport interface SessionStorageOptions {\n  ttl?: number; // Time to live in milliseconds\n  compress?: boolean;\n}\n\nexport class SessionStorage {\n  private isAvailable: boolean;\n\n  constructor() {\n    this.isAvailable = this.checkStorageAvailability();\n  }\n\n  private checkStorageAvailability(): boolean {\n    try {\n      if (typeof window === 'undefined' || !window.localStorage) {\n        return false;\n      }\n\n      const testKey = '__test__';\n      localStorage.setItem(testKey, 'test');\n      localStorage.removeItem(testKey);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  save(sessionId: string, data: SessionData, options: SessionStorageOptions = {}): void {\n    if (!this.isAvailable) {\n      console.warn('localStorage not available, session will not be persisted');\n      return;\n    }\n\n    try {\n      const storageData = {\n        ...data,\n        expiresAt: options.ttl ? Date.now() + options.ttl : null,\n      };\n\n      const serialized = JSON.stringify(storageData);\n      const key = STORAGE_KEY_PREFIX + sessionId;\n\n      localStorage.setItem(key, serialized);\n      this.updateIndex(sessionId);\n    } catch (error) {\n      throw new SessionError('Failed to save session to storage', error);\n    }\n  }\n\n  load(sessionId: string): SessionData | null {\n    if (!this.isAvailable) {\n      return null;\n    }\n\n    try {\n      const key = STORAGE_KEY_PREFIX + sessionId;\n      const serialized = localStorage.getItem(key);\n\n      if (!serialized) {\n        return null;\n      }\n\n      const data = JSON.parse(serialized);\n\n      // Check if expired\n      if (data.expiresAt && Date.now() > data.expiresAt) {\n        this.delete(sessionId);\n        return null;\n      }\n\n      return {\n        id: data.id,\n        initialPrompts: data.initialPrompts,\n        topK: data.topK,\n        temperature: data.temperature,\n        createdAt: data.createdAt,\n        updatedAt: data.updatedAt,\n      };\n    } catch (error) {\n      throw new SessionError('Failed to load session from storage', error);\n    }\n  }\n\n  delete(sessionId: string): void {\n    if (!this.isAvailable) {\n      return;\n    }\n\n    try {\n      const key = STORAGE_KEY_PREFIX + sessionId;\n      localStorage.removeItem(key);\n      this.removeFromIndex(sessionId);\n    } catch (error) {\n      console.warn('Failed to delete session:', error);\n    }\n  }\n\n  list(): string[] {\n    if (!this.isAvailable) {\n      return [];\n    }\n\n    try {\n      const index = localStorage.getItem(STORAGE_INDEX_KEY);\n      if (!index) {\n        return [];\n      }\n\n      return JSON.parse(index);\n    } catch {\n      return [];\n    }\n  }\n\n  cleanup(olderThan?: number): number {\n    if (!this.isAvailable) {\n      return 0;\n    }\n\n    const sessionIds = this.list();\n    let cleanedCount = 0;\n    const cutoffTime = olderThan ? Date.now() - olderThan : null;\n\n    for (const sessionId of sessionIds) {\n      const data = this.load(sessionId);\n\n      if (!data) {\n        cleanedCount++;\n        continue;\n      }\n\n      if (cutoffTime && data.updatedAt < cutoffTime) {\n        this.delete(sessionId);\n        cleanedCount++;\n      }\n    }\n\n    return cleanedCount;\n  }\n\n  clear(): void {\n    if (!this.isAvailable) {\n      return;\n    }\n\n    const sessionIds = this.list();\n    for (const sessionId of sessionIds) {\n      this.delete(sessionId);\n    }\n\n    localStorage.removeItem(STORAGE_INDEX_KEY);\n  }\n\n  private updateIndex(sessionId: string): void {\n    const sessions = this.list();\n    if (!sessions.includes(sessionId)) {\n      sessions.push(sessionId);\n      localStorage.setItem(STORAGE_INDEX_KEY, JSON.stringify(sessions));\n    }\n  }\n\n  private removeFromIndex(sessionId: string): void {\n    const sessions = this.list();\n    const filtered = sessions.filter((id) => id !== sessionId);\n    localStorage.setItem(STORAGE_INDEX_KEY, JSON.stringify(filtered));\n  }\n\n  getStorageSize(): number {\n    if (!this.isAvailable) {\n      return 0;\n    }\n\n    const sessionIds = this.list();\n    let totalSize = 0;\n\n    for (const sessionId of sessionIds) {\n      const key = STORAGE_KEY_PREFIX + sessionId;\n      const value = localStorage.getItem(key);\n      if (value) {\n        totalSize += new Blob([value]).size;\n      }\n    }\n\n    return totalSize;\n  }\n}\n\nexport function generateSessionId(): string {\n  return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n\nexport function compressHistory(prompts: InitialPrompt[], maxLength = 10): InitialPrompt[] {\n  if (prompts.length <= maxLength) {\n    return prompts;\n  }\n\n  // Keep system prompts and the most recent messages\n  const systemPrompts = prompts.filter((p) => p.role === 'system');\n  const otherPrompts = prompts.filter((p) => p.role !== 'system');\n  const recentPrompts = otherPrompts.slice(-maxLength + systemPrompts.length);\n\n  return [...systemPrompts, ...recentPrompts];\n}\n\n","/**\n * Quota tracking and management utilities\n */\n\nimport type { QuotaInfo, LanguageModel } from '../types';\nimport { QuotaExceededError } from '../types';\n\nexport class QuotaTracker {\n  constructor(private session: LanguageModel) {}\n\n  getQuotaInfo(): QuotaInfo {\n    const maxTokens = this.session.maxTokens;\n    const tokensUsed = this.session.tokensSoFar;\n    const tokensRemaining = this.session.tokensLeft;\n\n    return {\n      maxTokens,\n      tokensUsed,\n      tokensRemaining,\n      percentageUsed: (tokensUsed / maxTokens) * 100,\n    };\n  }\n\n  hasAvailableQuota(minimumTokens = 100): boolean {\n    return this.session.tokensLeft >= minimumTokens;\n  }\n\n  getQuotaWarningLevel(): 'safe' | 'warning' | 'critical' | 'exhausted' {\n    const info = this.getQuotaInfo();\n\n    if (info.percentageUsed >= 100) {\n      return 'exhausted';\n    }\n\n    if (info.percentageUsed >= 90) {\n      return 'critical';\n    }\n\n    if (info.percentageUsed >= 70) {\n      return 'warning';\n    }\n\n    return 'safe';\n  }\n\n  shouldWarnUser(): boolean {\n    const level = this.getQuotaWarningLevel();\n    return level === 'warning' || level === 'critical';\n  }\n\n  throwIfExhausted(): void {\n    if (this.getQuotaWarningLevel() === 'exhausted') {\n      throw new QuotaExceededError(\n        'Session quota exhausted. Please create a new session or clone the current one.'\n      );\n    }\n  }\n\n  getCleanupSuggestion(): string {\n    const level = this.getQuotaWarningLevel();\n    const info = this.getQuotaInfo();\n\n    switch (level) {\n      case 'exhausted':\n        return 'Quota fully exhausted. Create a new session immediately.';\n      case 'critical':\n        return `Only ${info.tokensRemaining} tokens remaining. Consider cloning the session soon.`;\n      case 'warning':\n        return `${info.percentageUsed.toFixed(1)}% of quota used. Plan to refresh the session.`;\n      default:\n        return 'Quota usage is healthy.';\n    }\n  }\n\n  async estimatePromptCost(prompt: string): Promise<number> {\n    try {\n      return await this.session.countPromptTokens(prompt);\n    } catch (error) {\n      // Fallback estimation (rough approximation: ~4 chars per token)\n      return Math.ceil(prompt.length / 4);\n    }\n  }\n\n  async canAffordPrompt(prompt: string): Promise<boolean> {\n    const estimatedCost = await this.estimatePromptCost(prompt);\n    return this.session.tokensLeft >= estimatedCost;\n  }\n}\n\nexport function calculateRemainingMessages(\n  quotaInfo: QuotaInfo,\n  averageMessageLength = 500\n): number {\n  // Rough estimation: ~4 chars per token, accounting for both input and output\n  const estimatedTokensPerMessage = Math.ceil((averageMessageLength * 2) / 4);\n  return Math.floor(quotaInfo.tokensRemaining / estimatedTokensPerMessage);\n}\n\nexport function formatQuotaInfo(info: QuotaInfo): string {\n  return `Quota: ${info.tokensUsed}/${info.maxTokens} tokens used (${info.percentageUsed.toFixed(1)}%)`;\n}\n\n","/**\n * Session management for Chrome Prompt API\n */\n\nimport type {\n  LanguageModel,\n  SessionOptions,\n  SessionData,\n  PromptOptions,\n} from '../types';\nimport { SessionError } from '../types';\nimport { SessionStorage, generateSessionId, compressHistory } from '../utils/session-storage';\nimport { QuotaTracker } from '../utils/quota-manager';\n\nexport class SessionManager {\n  private session: LanguageModel | undefined;\n  private sessionId: string;\n  private storage: SessionStorage;\n  private quotaTracker: QuotaTracker | null = null;\n  private enablePersistence: boolean;\n\n  constructor(\n    sessionId?: string,\n    options: { enablePersistence?: boolean } = {}\n  ) {\n    this.sessionId = sessionId || generateSessionId();\n    this.storage = new SessionStorage();\n    this.enablePersistence = options.enablePersistence ?? true;\n  }\n\n  async create(options: SessionOptions = {}): Promise<LanguageModel> {\n    try {\n      // Get default parameters\n      const sessionOptions = {\n        topK: options.topK ?? 3,\n        temperature: options.temperature ?? 0.7,\n        initialPrompts: options.initialPrompts ?? [],\n      };\n\n      // Add system prompt if provided\n      if (options.systemPrompt) {\n        sessionOptions.initialPrompts.unshift({\n          role: 'system' as const,\n          content: options.systemPrompt,\n        });\n      }\n\n      this.session = await window?.LanguageModel?.create(sessionOptions);\n      if (!this.session) {\n        throw new SessionError('Failed to create session');\n      }\n      this.quotaTracker = new QuotaTracker(this.session);\n\n      // Save session data if persistence is enabled\n      if (this.enablePersistence) {\n        this.saveSessionData({\n          id: this.sessionId,\n          initialPrompts: sessionOptions.initialPrompts,\n          topK: sessionOptions.topK,\n          temperature: sessionOptions.temperature,\n          createdAt: Date.now(),\n          updatedAt: Date.now(),\n        });\n      }\n\n      return this.session;\n    } catch (error) {\n      throw new SessionError('Failed to create session', error);\n    }\n  }\n\n  async restore(sessionId: string): Promise<LanguageModel> {\n    const sessionData = this.storage.load(sessionId);\n\n    if (!sessionData) {\n      throw new SessionError(`Session ${sessionId} not found in storage`);\n    }\n\n    this.sessionId = sessionId;\n\n    return this.create({\n      topK: sessionData.topK,\n      temperature: sessionData.temperature,\n      initialPrompts: sessionData.initialPrompts,\n    });\n  }\n\n  async clone(): Promise<SessionManager> {\n    if (!this.session) {\n      throw new SessionError('No active session to clone');\n    }\n\n    try {\n      const clonedSession = await this.session.clone();\n      const newManager = new SessionManager(undefined, {\n        enablePersistence: this.enablePersistence,\n      });\n      newManager.session = clonedSession;\n      newManager.quotaTracker = new QuotaTracker(clonedSession);\n\n      return newManager;\n    } catch (error) {\n      throw new SessionError('Failed to clone session', error);\n    }\n  }\n\n  async prompt(input: string, options?: PromptOptions): Promise<string> {\n    if (!this.session) {\n      throw new SessionError('No active session. Call create() first.');\n    }\n\n    try {\n      this.quotaTracker?.throwIfExhausted();\n\n      const result = await this.session.prompt(input, options);\n\n      // Update session history if persistence is enabled\n      if (this.enablePersistence) {\n        this.updateHistory(input, result);\n      }\n\n      return result;\n    } catch (error) {\n      throw new SessionError('Failed to prompt session', error);\n    }\n  }\n\n  promptStreaming(input: string, options?: PromptOptions): ReadableStream<string> {\n    if (!this.session) {\n      throw new SessionError('No active session. Call create() first.');\n    }\n\n    this.quotaTracker?.throwIfExhausted();\n\n    return this.session.promptStreaming(input, options);\n  }\n\n  async countTokens(input: string): Promise<number> {\n    if (!this.session) {\n      throw new SessionError('No active session. Call create() first.');\n    }\n\n    return this.session.countPromptTokens(input);\n  }\n\n  getQuotaTracker(): QuotaTracker {\n    if (!this.quotaTracker) {\n      throw new SessionError('No active session');\n    }\n    return this.quotaTracker;\n  }\n\n  getSession(): LanguageModel | undefined {\n    return this.session;\n  }\n\n  getSessionId(): string {\n    return this.sessionId;\n  }\n\n  destroy(): void {\n    if (this.session) {\n      this.session.destroy();\n      this.session = undefined;\n      this.quotaTracker = null;\n    }\n  }\n\n  private saveSessionData(data: SessionData): void {\n    try {\n      this.storage.save(this.sessionId, data);\n    } catch (error) {\n      console.warn('Failed to save session data:', error);\n    }\n  }\n\n  private updateHistory(userPrompt: string, assistantResponse: string): void {\n    try {\n      const sessionData = this.storage.load(this.sessionId);\n      if (!sessionData) return;\n\n      sessionData.initialPrompts.push(\n        { role: 'user', content: userPrompt },\n        { role: 'assistant', content: assistantResponse }\n      );\n\n      // Compress history to avoid localStorage limits\n      sessionData.initialPrompts = compressHistory(sessionData.initialPrompts, 20);\n      sessionData.updatedAt = Date.now();\n\n      this.storage.save(this.sessionId, sessionData);\n    } catch (error) {\n      console.warn('Failed to update session history:', error);\n    }\n  }\n}\n\n","/**\n * Availability detection and model readiness utilities\n */\n\nimport type { AvailabilityStatus } from '../types';\nimport { PromptAPIError } from '../types';\n\nexport async function checkPromptAPIAvailability(): Promise<AvailabilityStatus> {\n  if (typeof window === 'undefined' || !window.LanguageModel) {\n    return 'unavailable';\n  }\n\n  try {\n    const availability = await window.LanguageModel.availability();\n\n    if (availability === 'available') {\n      return 'available';\n    }\n\n    if (availability === 'downloadable') {\n      return 'downloadable';\n    }\n\n    if (availability === 'downloading') {\n      return 'downloading';\n    }\n\n    return 'unavailable';\n  } catch (error) {\n    console.warn('Failed to check Prompt API availability:', error);\n    return 'unavailable';\n  }\n}\n\nexport interface WaitForModelOptions {\n  timeout?: number;\n  signal?: AbortSignal;\n}\n\nexport async function waitForModelReady(\n  options: WaitForModelOptions = {}\n): Promise<void> {\n  const { timeout = 300000, signal } = options;\n\n  const status = await checkPromptAPIAvailability();\n\n  if (status === 'unavailable') {\n    throw new PromptAPIError(\n      'Prompt API is not available in this browser. Please use Chrome 128+ with the origin trial token.'\n    );\n  }\n\n  if (status === 'available') {\n    return;\n  }\n\n  // Model needs to be downloaded\n  return new Promise((resolve, reject) => {\n    const timeoutId = timeout\n      ? setTimeout(() => {\n        reject(new PromptAPIError('Model download timeout exceeded'));\n      }, timeout)\n      : null;\n\n    try {\n      if (signal?.aborted) {\n        if (timeoutId) clearTimeout(timeoutId);\n        reject(new PromptAPIError('Model download aborted'));\n        return;\n      }\n\n      const availability = checkPromptAPIAvailability();\n      availability.then((status) => {\n        if (status === 'available') {\n          if (timeoutId) clearTimeout(timeoutId);\n          resolve();\n          return;\n        }\n      }).catch((error) => {\n        reject(error);\n      });\n\n    } catch (error) {\n      if (timeoutId) clearTimeout(timeoutId);\n      reject(error);\n    }\n\n    signal?.addEventListener('abort', () => {\n      if (timeoutId) clearTimeout(timeoutId);\n      reject(new PromptAPIError('Model download aborted'));\n    });\n  });\n}\n\nexport function isFeatureAvailable(_feature: 'streaming' | 'structured'): boolean {\n  // All features are available if the base API is available\n  // This is a placeholder for future feature detection\n  return typeof window !== 'undefined' && !!window.ai?.languageModel;\n}\n\n","/**\n * High-level client for Chrome Prompt API\n */\n\nimport type {\n  AvailabilityStatus,\n  SessionOptions,\n} from '../types';\nimport { PromptAPIError } from '../types';\nimport { SessionManager } from './session-manager';\nimport {\n  checkPromptAPIAvailability,\n  waitForModelReady,\n  type WaitForModelOptions,\n} from '../utils/availability';\n\nexport class PromptClient {\n  private sessions: Map<string, SessionManager> = new Map();\n  private isInitialized = false;\n\n  async initialize(options?: WaitForModelOptions): Promise<void> {\n    const status = await checkPromptAPIAvailability();\n\n    if (status === 'unavailable') {\n      throw new PromptAPIError(\n        'Prompt API is not available. Please use Chrome 128+ with the origin trial enabled.'\n      );\n    }\n\n    if (status === 'downloading') {\n      await waitForModelReady(options);\n    }\n\n    this.isInitialized = true;\n  }\n\n  async checkAvailability(): Promise<AvailabilityStatus> {\n    return checkPromptAPIAvailability();\n  }\n\n  async createSession(options?: SessionOptions): Promise<SessionManager> {\n    if (!this.isInitialized) {\n      await this.initialize();\n    }\n\n    const sessionId = options?.sessionId;\n    const manager = new SessionManager(sessionId, {\n      enablePersistence: options?.enablePersistence,\n    });\n\n    await manager.create(options);\n\n    const id = manager.getSessionId();\n    this.sessions.set(id, manager);\n\n    return manager;\n  }\n\n  async restoreSession(sessionId: string): Promise<SessionManager> {\n    if (!this.isInitialized) {\n      await this.initialize();\n    }\n\n    const manager = new SessionManager(sessionId);\n    await manager.restore(sessionId);\n\n    this.sessions.set(sessionId, manager);\n\n    return manager;\n  }\n\n  getSession(sessionId: string): SessionManager | undefined {\n    return this.sessions.get(sessionId);\n  }\n\n  destroySession(sessionId: string): void {\n    const manager = this.sessions.get(sessionId);\n    if (manager) {\n      manager.destroy();\n      this.sessions.delete(sessionId);\n    }\n  }\n\n  destroyAllSessions(): void {\n    for (const [id, manager] of this.sessions.entries()) {\n      manager.destroy();\n      this.sessions.delete(id);\n    }\n  }\n\n  getActiveSessions(): string[] {\n    return Array.from(this.sessions.keys());\n  }\n\n  isReady(): boolean {\n    return this.isInitialized;\n  }\n}\n\n// Singleton instance for convenience\nlet defaultClient: PromptClient | null = null;\n\nexport function getDefaultClient(): PromptClient {\n  if (!defaultClient) {\n    defaultClient = new PromptClient();\n  }\n  return defaultClient;\n}\n\n","/**\n * Core module exports\n */\n\nexport * from './session-manager';\nexport * from './prompt-client';\n\n","/**\n * Main entry point for use-prompt-api library\n * \n * This library provides a comprehensive TypeScript wrapper for Chrome's built-in\n * Prompt API with advanced features including structured output, function calling,\n * and agentic workflows.\n * \n * @example\n * ```typescript\n * import { PromptClient } from '@ahnopologetic/use-prompt-api';\n * \n * const client = new PromptClient();\n * await client.initialize();\n * \n * const session = await client.createSession({\n *   systemPrompt: 'You are a helpful assistant',\n *   temperature: 0.7\n * });\n * \n * const response = await session.prompt('Hello!');\n * ```\n */\n\n// Core API\nexport { SessionManager } from './core/session-manager';\nexport { PromptClient, getDefaultClient } from './core/prompt-client';\n\n// Structured Output\nexport { generateSchema, schemaToString, createSchemaPrompt } from './structured/schema-generator';\nexport { promptWithStructure, promptWithStructureStreaming } from './structured/structured-prompt';\nexport * from './structured/zod-helpers';\n\n// Function Calling\nexport {\n  FunctionRegistry,\n  createFunctionDefinition,\n  createParameters,\n  builtInFunctions,\n} from './function-calling/function-registry';\nexport {\n  executeFunctionCall,\n  executeFunctionCalls,\n  formatToolResult,\n  formatToolResults,\n} from './function-calling/function-executor';\nexport {\n  buildFunctionSystemPrompt,\n  buildFewShotExamples,\n  parseFunctionCall,\n  formatFunctionResult,\n  createFunctionCallingPrompt,\n} from './function-calling/function-prompt-builder';\n\n// Agents\nexport { BasicAgent } from './agents/basic-agent';\nexport { AdvancedAgent } from './agents/advanced-agent';\nexport {\n  createAgent,\n  createAdvancedAgent,\n  isTaskComplete,\n  formatAgentHistory,\n  extractFinalAnswer,\n  countFunctionCalls,\n  getSuccessfulSteps,\n  getFailedSteps,\n  hasErrors,\n  StoppingConditions,\n  createRetryStrategy,\n} from './agents/agent-utils';\n\n// Streaming\nexport { StreamProcessor, collectStream, streamToAsyncIterator } from './streaming/stream-processor';\nexport {\n  StreamRenderer,\n  createStreamRenderer,\n  bufferStream,\n  debounceStream,\n  streamWords,\n  streamSentences,\n} from './streaming/stream-renderers';\n\n// Utilities\nexport {\n  checkPromptAPIAvailability,\n  waitForModelReady,\n  isFeatureAvailable,\n  type WaitForModelOptions,\n} from './utils/availability';\nexport {\n  isPromptAPIAvailable,\n  createError,\n  getErrorMessage,\n  withRetry,\n  createRecoverySuggestion,\n} from './utils/error-handling';\nexport { QuotaTracker, calculateRemainingMessages, formatQuotaInfo } from './utils/quota-manager';\nexport {\n  SessionStorage,\n  generateSessionId,\n  compressHistory,\n  type SessionStorageOptions,\n} from './utils/session-storage';\n\n// Type exports\nexport type {\n  // Chrome API types\n  MessageRole,\n  InitialPrompt,\n  LanguageModelCreateOptions,\n  LanguageModel,\n  LanguageModelCapabilities,\n  AvailabilityStatus,\n  SessionQuota,\n  // Library types\n  PromptAPIConfig,\n  SessionOptions,\n  SessionData,\n  StreamingOptions,\n  RenderMode,\n  StreamRenderOptions,\n  SchemaDefinition,\n  SchemaOutput,\n  StructuredPromptOptions,\n  FunctionParameter,\n  FunctionDefinition,\n  FunctionCall,\n  ToolResult,\n  TaskStatus,\n  AgentStep,\n  AgentConfig,\n  AdvancedAgentConfig,\n  AgentResult,\n  AgentPlan,\n  ConversationMessage,\n  QuotaInfo,\n} from './types';\n\n// Error exports\nexport {\n  PromptAPIError,\n  QuotaExceededError,\n  SessionError,\n  StructuredOutputError,\n  FunctionCallError,\n} from './types';\n\n","/**\n * Schema generation utilities for structured output\n */\n\nimport type { ZodType } from 'zod';\nimport type { SchemaDefinition } from '../types';\n\nexport function generateSchema<T>(zodSchema: ZodType<T>): SchemaDefinition {\n  // This is a simplified schema generator\n  // In production, you'd use a library like zod-to-json-schema\n  const schema = zodSchemaToJsonSchema(zodSchema);\n  return schema;\n}\n\nfunction zodSchemaToJsonSchema(zodSchema: ZodType): SchemaDefinition {\n  // Access the internal _def property to get schema information\n  const def = (zodSchema as unknown as { _def: { typeName: string } })._def;\n\n  switch (def.typeName) {\n    case 'ZodString':\n      return { type: 'string' };\n\n    case 'ZodNumber':\n      return { type: 'number' };\n\n    case 'ZodBoolean':\n      return { type: 'boolean' };\n\n    case 'ZodArray': {\n      const arrayDef = def as unknown as { type: ZodType };\n      return {\n        type: 'array',\n        items: zodSchemaToJsonSchema(arrayDef.type),\n      };\n    }\n\n    case 'ZodObject': {\n      const objectDef = def as unknown as {\n        shape: () => Record<string, ZodType>;\n      };\n      const shape = objectDef.shape();\n      const properties: Record<string, SchemaDefinition> = {};\n      const required: string[] = [];\n\n      for (const [key, value] of Object.entries(shape)) {\n        properties[key] = zodSchemaToJsonSchema(value);\n        \n        // Check if optional\n        const valueDef = (value as unknown as { _def: { typeName: string } })._def;\n        if (valueDef.typeName !== 'ZodOptional') {\n          required.push(key);\n        }\n      }\n\n      return {\n        type: 'object',\n        properties,\n        required: required.length > 0 ? required : undefined,\n      };\n    }\n\n    case 'ZodEnum': {\n      const enumDef = def as unknown as { values: string[] };\n      return {\n        type: 'string',\n        enum: enumDef.values,\n      };\n    }\n\n    case 'ZodOptional': {\n      const optionalDef = def as unknown as { innerType: ZodType };\n      return zodSchemaToJsonSchema(optionalDef.innerType);\n    }\n\n    case 'ZodNullable': {\n      const nullableDef = def as unknown as { innerType: ZodType };\n      return zodSchemaToJsonSchema(nullableDef.innerType);\n    }\n\n    case 'ZodUnion': {\n      const unionDef = def as unknown as { options: ZodType[] };\n      // For simplicity, return the first option's schema\n      // In production, you'd want to handle this more sophisticatedly\n      return zodSchemaToJsonSchema(unionDef.options[0]!);\n    }\n\n    default:\n      console.warn(`Unsupported Zod type: ${def.typeName}`);\n      return { type: 'string' };\n  }\n}\n\nexport function schemaToString(schema: SchemaDefinition, indent = 0): string {\n  const spaces = '  '.repeat(indent);\n  \n  if (schema.type === 'object' && schema.properties) {\n    const props = Object.entries(schema.properties)\n      .map(([key, value]) => {\n        const required = schema.required?.includes(key) ? '' : '?';\n        return `${spaces}  ${key}${required}: ${schemaToString(value, indent + 1)}`;\n      })\n      .join('\\n');\n    \n    return `{\\n${props}\\n${spaces}}`;\n  }\n  \n  if (schema.type === 'array' && schema.items) {\n    return `Array<${schemaToString(schema.items, indent)}>`;\n  }\n  \n  if (schema.enum) {\n    return schema.enum.map(v => `\"${v}\"`).join(' | ');\n  }\n  \n  return schema.type;\n}\n\nexport function createSchemaPrompt(schema: SchemaDefinition): string {\n  return `You must respond with valid JSON matching this exact schema:\n${JSON.stringify(schema, null, 2)}\n\nRules:\n- Respond ONLY with the JSON object, no additional text\n- Ensure all required fields are present\n- Follow the exact structure and types specified\n- Do not include any markdown formatting or code blocks`;\n}\n\n","/**\n * Structured output prompting utilities\n */\n\nimport type { ZodType } from 'zod';\nimport type { SessionManager } from '../core';\nimport type { SchemaDefinition, StructuredPromptOptions } from '../types';\nimport { StructuredOutputError } from '../types';\nimport { generateSchema, createSchemaPrompt } from './schema-generator';\n\nexport async function promptWithStructure<T>(\n  session: SessionManager,\n  prompt: string,\n  options: StructuredPromptOptions<T>\n): Promise<T> {\n  const { schema, maxRetries = 3, systemPrompt, signal } = options;\n\n  // Convert Zod schema to JSON schema if needed\n  const jsonSchema: SchemaDefinition =\n    'parse' in schema ? generateSchema(schema as ZodType<T>) : (schema as SchemaDefinition);\n\n  // Create schema-aware prompt\n  const schemaInstructions = createSchemaPrompt(jsonSchema);\n  const fullPrompt = `${schemaInstructions}\\n\\nUser Request: ${prompt}`;\n\n  // Add system prompt if provided\n  if (systemPrompt) {\n    const currentSession = session.getSession();\n    if (currentSession) {\n      // Note: We can't modify system prompt after creation,\n      // so we prepend it to the user prompt instead\n      // In a real implementation, you'd want to create a new session with the system prompt\n    }\n  }\n\n  let lastError: Error | null = null;\n\n  for (let attempt = 0; attempt < maxRetries; attempt++) {\n    try {\n      const response = await session.prompt(fullPrompt, { signal });\n      const parsed = parseJSONResponse<T>(response);\n\n      // Validate with Zod if schema is a Zod type\n      if ('parse' in schema) {\n        const zodSchema = schema as ZodType<T>;\n        return zodSchema.parse(parsed);\n      }\n\n      return parsed;\n    } catch (error) {\n      lastError = error as Error;\n\n      if (attempt < maxRetries - 1) {\n        // Provide feedback to the model about the error\n        const errorFeedback = `The previous response was invalid. Error: ${lastError.message}. Please try again with valid JSON.`;\n        await session.prompt(errorFeedback, { signal });\n      }\n    }\n  }\n\n  throw new StructuredOutputError(\n    `Failed to get valid structured output after ${maxRetries} attempts`,\n    lastError\n  );\n}\n\nexport async function promptWithStructureStreaming<T>(\n  session: SessionManager,\n  prompt: string,\n  options: StructuredPromptOptions<T> & {\n    onPartial?: (partial: Partial<T>) => void;\n  }\n): Promise<T> {\n  const { schema, signal, onPartial } = options;\n\n  const jsonSchema: SchemaDefinition =\n    'parse' in schema ? generateSchema(schema as ZodType<T>) : (schema as SchemaDefinition);\n\n  const schemaInstructions = createSchemaPrompt(jsonSchema);\n  const fullPrompt = `${schemaInstructions}\\n\\nUser Request: ${prompt}`;\n\n  const stream = session.promptStreaming(fullPrompt, { signal });\n  let accumulated = '';\n\n  const reader = stream.getReader();\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n\n      if (done) break;\n\n      accumulated = value;\n\n      // Try to parse partial JSON\n      if (onPartial) {\n        try {\n          const partial = parsePartialJSON<T>(accumulated);\n          if (partial) {\n            onPartial(partial);\n          }\n        } catch {\n          // Ignore parsing errors for partial content\n        }\n      }\n    }\n\n    const parsed = parseJSONResponse<T>(accumulated);\n\n    if ('parse' in schema) {\n      const zodSchema = schema as ZodType<T>;\n      return zodSchema.parse(parsed);\n    }\n\n    return parsed;\n  } finally {\n    reader.releaseLock();\n  }\n}\n\nfunction parseJSONResponse<T>(response: string): T {\n  // Remove markdown code blocks if present\n  let cleaned = response.trim();\n\n  // Remove ```json and ``` wrappers\n  cleaned = cleaned.replace(/^```json?\\s*/i, '').replace(/```\\s*$/, '');\n\n  // Try to find JSON object or array\n  const jsonMatch = cleaned.match(/(\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])/);\n  if (jsonMatch) {\n    cleaned = jsonMatch[1]!;\n  }\n\n  try {\n    return JSON.parse(cleaned) as T;\n  } catch (error) {\n    throw new StructuredOutputError(\n      `Failed to parse JSON response: ${(error as Error).message}. Response: ${cleaned.substring(0, 200)}`\n    );\n  }\n}\n\nfunction parsePartialJSON<T>(text: string): Partial<T> | null {\n  // Try to parse incomplete JSON by adding closing braces\n  let cleaned = text.trim();\n  cleaned = cleaned.replace(/^```json?\\s*/i, '');\n\n  // Count opening and closing braces\n  const openBraces = (cleaned.match(/\\{/g) || []).length;\n  const closeBraces = (cleaned.match(/\\}/g) || []).length;\n\n  // Add missing closing braces\n  if (openBraces > closeBraces) {\n    cleaned += '}'.repeat(openBraces - closeBraces);\n  }\n\n  try {\n    return JSON.parse(cleaned) as Partial<T>;\n  } catch {\n    return null;\n  }\n}\n\n","/**\n * Common Zod schema helpers and utilities\n */\n\nimport { z } from 'zod';\n\n// Common schemas\nexport const urlSchema = z.string().url();\nexport const emailSchema = z.string().email();\nexport const dateStringSchema = z.string().datetime();\nexport const uuidSchema = z.string().uuid();\n\n// Schema builders\nexport function listSchema<T extends z.ZodType>(itemSchema: T) {\n  return z.object({\n    items: z.array(itemSchema),\n    total: z.number(),\n  });\n}\n\nexport function categorizedSchema<T extends z.ZodType>(\n  itemSchema: T,\n  categories: string[]\n) {\n  return z.object({\n    category: z.enum(categories as [string, ...string[]]),\n    items: z.array(itemSchema),\n  });\n}\n\nexport function sentimentSchema() {\n  return z.object({\n    sentiment: z.enum(['positive', 'negative', 'neutral']),\n    score: z.number().min(-1).max(1),\n    reasoning: z.string().optional(),\n  });\n}\n\nexport function extractionSchema<T extends z.ZodType>(dataSchema: T) {\n  return z.object({\n    extracted: dataSchema,\n    confidence: z.number().min(0).max(1),\n    source: z.string().optional(),\n  });\n}\n\nexport function summarySchema() {\n  return z.object({\n    summary: z.string(),\n    keyPoints: z.array(z.string()),\n    length: z.enum(['brief', 'medium', 'detailed']),\n  });\n}\n\nexport function classificationSchema<T extends string>(labels: T[]) {\n  return z.object({\n    label: z.enum(labels as [T, ...T[]]),\n    confidence: z.number().min(0).max(1),\n    alternatives: z\n      .array(\n        z.object({\n          label: z.enum(labels as [T, ...T[]]),\n          confidence: z.number(),\n        })\n      )\n      .optional(),\n  });\n}\n\n// Utility function to create structured output helper\nexport function createStructuredOutput<T>(schema: z.ZodType<T>) {\n  return {\n    schema,\n    validate: (data: unknown): T => schema.parse(data),\n    safeParse: (data: unknown) => schema.safeParse(data),\n    shape: schema,\n  };\n}\n\n// Example schemas\nexport const personSchema = z.object({\n  name: z.string(),\n  age: z.number().optional(),\n  email: emailSchema.optional(),\n  address: z\n    .object({\n      street: z.string(),\n      city: z.string(),\n      country: z.string(),\n      zipCode: z.string().optional(),\n    })\n    .optional(),\n});\n\nexport const articleSchema = z.object({\n  title: z.string(),\n  author: z.string(),\n  publishDate: dateStringSchema,\n  content: z.string(),\n  tags: z.array(z.string()),\n  metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const taskSchema = z.object({\n  id: uuidSchema,\n  title: z.string(),\n  description: z.string(),\n  status: z.enum(['todo', 'in-progress', 'done', 'cancelled']),\n  priority: z.enum(['low', 'medium', 'high', 'urgent']),\n  dueDate: dateStringSchema.optional(),\n  assignee: z.string().optional(),\n});\n\n","/**\n * Function registry for managing available functions\n */\n\nimport type { FunctionDefinition, FunctionParameter } from '../types';\nimport { FunctionCallError } from '../types';\n\nexport class FunctionRegistry {\n  private functions: Map<string, FunctionDefinition> = new Map();\n\n  register(definition: FunctionDefinition): void {\n    if (this.functions.has(definition.name)) {\n      console.warn(`Function ${definition.name} already registered, overwriting`);\n    }\n\n    this.functions.set(definition.name, definition);\n  }\n\n  registerMultiple(definitions: FunctionDefinition[]): void {\n    for (const definition of definitions) {\n      this.register(definition);\n    }\n  }\n\n  unregister(name: string): void {\n    this.functions.delete(name);\n  }\n\n  get(name: string): FunctionDefinition | undefined {\n    return this.functions.get(name);\n  }\n\n  has(name: string): boolean {\n    return this.functions.has(name);\n  }\n\n  list(): FunctionDefinition[] {\n    return Array.from(this.functions.values());\n  }\n\n  listNames(): string[] {\n    return Array.from(this.functions.keys());\n  }\n\n  clear(): void {\n    this.functions.clear();\n  }\n\n  toJSON(): Array<{\n    name: string;\n    description: string;\n    parameters: FunctionParameter;\n  }> {\n    return this.list().map(({ name, description, parameters }) => ({\n      name,\n      description,\n      parameters,\n    }));\n  }\n}\n\n// Helper function to create function definitions from TypeScript functions\nexport function createFunctionDefinition(\n  name: string,\n  description: string,\n  parameters: FunctionParameter,\n  handler: (...args: unknown[]) => Promise<unknown> | unknown\n): FunctionDefinition {\n  return {\n    name,\n    description,\n    parameters,\n    handler,\n  };\n}\n\n// Helper to create parameter schema\nexport function createParameters(\n  properties: Record<string, Omit<FunctionParameter, 'type'> & { type: string }>,\n  required: string[] = []\n): FunctionParameter {\n  return {\n    type: 'object',\n    properties,\n    required: required.length > 0 ? required : Object.keys(properties),\n  };\n}\n\n// Example function definitions\nexport const builtInFunctions = {\n  getCurrentTime: createFunctionDefinition(\n    'getCurrentTime',\n    'Get the current time in ISO format',\n    {\n      type: 'object',\n      properties: {},\n    },\n    () => new Date().toISOString()\n  ),\n\n  calculateMath: createFunctionDefinition(\n    'calculateMath',\n    'Perform mathematical calculations',\n    createParameters({\n      expression: {\n        type: 'string',\n        description: 'Mathematical expression to evaluate (e.g., \"2 + 2\", \"10 * 5\")',\n      },\n    }),\n    async (...args: unknown[]) => {\n      const { expression } = args[0] as { expression: string };\n      try {\n        // Note: In production, use a safe math parser library\n        // This is simplified for demonstration\n        const sanitized = expression.replace(/[^0-9+\\-*/().\\s]/g, '');\n        // eslint-disable-next-line no-eval\n        const result = eval(sanitized);\n        return { result };\n      } catch (error) {\n        throw new FunctionCallError('Invalid mathematical expression', error);\n      }\n    }\n  ),\n};\n\n","/**\n * Function execution utilities\n */\n\nimport type { FunctionCall, ToolResult } from '../types';\nimport { FunctionRegistry } from './function-registry';\n\nexport async function executeFunctionCall(\n  call: FunctionCall,\n  registry: FunctionRegistry\n): Promise<ToolResult> {\n  const { name, arguments: args } = call;\n\n  const definition = registry.get(name);\n\n  if (!definition) {\n    return {\n      success: false,\n      error: `Function \"${name}\" not found in registry`,\n    };\n  }\n\n  try {\n    // Validate arguments against schema\n    const validationError = validateArguments(args, definition.parameters);\n    if (validationError) {\n      return {\n        success: false,\n        error: validationError,\n      };\n    }\n\n    // Execute the function\n    const result = await definition.handler(args);\n\n    return {\n      success: true,\n      result,\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nfunction validateArguments(\n  args: Record<string, unknown>,\n  parameters: { type: string; properties?: Record<string, unknown>; required?: string[] }\n): string | null {\n  if (parameters.type !== 'object') {\n    return 'Parameters must be an object';\n  }\n\n  const { properties, required = [] } = parameters;\n\n  if (!properties) {\n    return null;\n  }\n\n  // Check required fields\n  for (const field of required) {\n    if (!(field in args)) {\n      return `Missing required parameter: ${field}`;\n    }\n  }\n\n  // Basic type validation (can be expanded)\n  for (const key of Object.keys(args)) {\n    if (!(key in properties)) {\n      console.warn(`Unexpected parameter: ${key}`);\n    }\n  }\n\n  return null;\n}\n\nexport async function executeFunctionCalls(\n  calls: FunctionCall[],\n  registry: FunctionRegistry\n): Promise<ToolResult[]> {\n  const results: ToolResult[] = [];\n\n  for (const call of calls) {\n    const result = await executeFunctionCall(call, registry);\n    results.push(result);\n  }\n\n  return results;\n}\n\nexport function formatToolResult(result: ToolResult): string {\n  if (result.success) {\n    return JSON.stringify(result.result, null, 2);\n  }\n\n  return `Error: ${result.error}`;\n}\n\nexport function formatToolResults(results: ToolResult[], calls: FunctionCall[]): string {\n  return results\n    .map((result, index) => {\n      const call = calls[index];\n      return `Function: ${call?.name}\\nResult: ${formatToolResult(result)}`;\n    })\n    .join('\\n\\n');\n}\n\n","/**\n * Prompt building utilities for function calling\n */\n\nimport { FunctionRegistry } from './function-registry';\n\nexport function buildFunctionSystemPrompt(registry: FunctionRegistry): string {\n  const functions = registry.toJSON();\n\n  if (functions.length === 0) {\n    return '';\n  }\n\n  const functionsJson = JSON.stringify(functions, null, 2);\n\n  return `You are a helpful assistant with access to the following functions:\n\n${functionsJson}\n\nWhen you need to use a function, respond with a JSON object in this exact format:\n{\n  \"functionCall\": {\n    \"name\": \"function_name\",\n    \"arguments\": {\n      \"param1\": \"value1\",\n      \"param2\": \"value2\"\n    }\n  },\n  \"reasoning\": \"Why you're calling this function\"\n}\n\nIf you don't need to call a function, respond normally without the functionCall object.\n\nRules:\n- Only use functions that are listed above\n- Ensure all required parameters are provided\n- Use the exact function and parameter names as specified\n- If a function call fails, you'll receive an error message and can try again`;\n}\n\nexport function buildFewShotExamples(): string {\n  return `Example 1:\nUser: What time is it?\nAssistant: {\n  \"functionCall\": {\n    \"name\": \"getCurrentTime\",\n    \"arguments\": {}\n  },\n  \"reasoning\": \"User wants to know the current time\"\n}\n\nExample 2:\nUser: Calculate 15 * 7\nAssistant: {\n  \"functionCall\": {\n    \"name\": \"calculateMath\",\n    \"arguments\": {\n      \"expression\": \"15 * 7\"\n    }\n  },\n  \"reasoning\": \"User wants to perform a calculation\"\n}\n\nExample 3:\nUser: Hello, how are you?\nAssistant: Hello! I'm doing well, thank you for asking. How can I help you today?\n`;\n}\n\nexport function parseFunctionCall(response: string): {\n  functionCall?: { name: string; arguments: Record<string, unknown> };\n  reasoning?: string;\n  regularResponse?: string;\n} {\n  try {\n    // Try to extract JSON from the response\n    const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n    if (!jsonMatch) {\n      return { regularResponse: response };\n    }\n\n    const parsed = JSON.parse(jsonMatch[0]);\n\n    if (parsed.functionCall) {\n      return {\n        functionCall: parsed.functionCall,\n        reasoning: parsed.reasoning,\n      };\n    }\n\n    return { regularResponse: response };\n  } catch {\n    return { regularResponse: response };\n  }\n}\n\nexport function formatFunctionResult(\n  functionName: string,\n  result: unknown,\n  success: boolean\n): string {\n  if (success) {\n    return `Function \"${functionName}\" executed successfully. Result: ${JSON.stringify(result, null, 2)}`;\n  }\n\n  return `Function \"${functionName}\" failed with error: ${result}`;\n}\n\nexport function createFunctionCallingPrompt(\n  userMessage: string,\n  registry: FunctionRegistry,\n  includeFewShot = false\n): string {\n  const systemPrompt = buildFunctionSystemPrompt(registry);\n  const fewShot = includeFewShot ? `\\n\\n${buildFewShotExamples()}` : '';\n\n  return `${systemPrompt}${fewShot}\n\nUser: ${userMessage}`;\n}\n\n","/**\n * Basic agent for multi-turn task execution\n */\n\nimport type { AgentConfig, AgentResult, AgentStep, TaskStatus } from '../types';\nimport { SessionManager } from '../core';\nimport { FunctionRegistry } from '../function-calling/function-registry';\nimport { executeFunctionCall } from '../function-calling/function-executor';\nimport {\n  buildFunctionSystemPrompt,\n  parseFunctionCall,\n  formatFunctionResult,\n} from '../function-calling/function-prompt-builder';\n\nexport class BasicAgent {\n  protected session: SessionManager | null = null;\n  protected registry: FunctionRegistry;\n  protected status: TaskStatus = 'idle';\n  protected steps: AgentStep[] = [];\n  protected shouldStop = false;\n\n  constructor(protected config: AgentConfig) {\n    this.registry = new FunctionRegistry();\n    if (config.functions) {\n      this.registry.registerMultiple(config.functions);\n    }\n  }\n\n  async run(task: string): Promise<AgentResult> {\n    this.status = 'running';\n    this.steps = [];\n    this.shouldStop = false;\n\n    try {\n      // Create session with system prompt\n      this.session = new SessionManager();\n      const systemPrompt = this.buildSystemPrompt();\n\n      await this.session.create({\n        systemPrompt,\n        enablePersistence: false,\n      });\n\n      // Initial task prompt\n      let currentPrompt = task;\n      let iteration = 0;\n\n      while (iteration < this.config.maxIterations && !this.shouldStop) {\n        iteration++;\n\n        const step: AgentStep = {\n          iteration,\n          timestamp: Date.now(),\n        };\n\n        // Get model response\n        const response = await this.session.prompt(currentPrompt);\n        \n        // Parse for function calls\n        const parsed = parseFunctionCall(response);\n\n        if (parsed.functionCall) {\n          // Function call detected\n          step.thought = parsed.reasoning;\n          step.action = parsed.functionCall;\n\n          // Execute function\n          const result = await executeFunctionCall(parsed.functionCall, this.registry);\n          step.observation = result;\n\n          // Prepare next prompt with function result\n          const formattedResult = formatFunctionResult(\n            parsed.functionCall.name,\n            result.result || result.error,\n            result.success\n          );\n\n          currentPrompt = `${formattedResult}\\n\\nContinue with the task. If the task is complete, respond with your final answer without calling any functions.`;\n        } else {\n          // No function call - regular response\n          step.thought = parsed.regularResponse;\n\n          // Check if task is complete\n          if (\n            this.config.stopCondition\n              ? this.config.stopCondition(this.steps)\n              : this.isTaskComplete(parsed.regularResponse || '')\n          ) {\n            this.steps.push(step);\n            this.status = 'completed';\n\n            if (this.config.onStep) {\n              this.config.onStep(step);\n            }\n\n            return {\n              status: 'completed',\n              steps: this.steps,\n              finalAnswer: parsed.regularResponse,\n              iterations: iteration,\n            };\n          }\n\n          // Task not complete, continue\n          currentPrompt = 'Continue with the task.';\n        }\n\n        this.steps.push(step);\n\n        if (this.config.onStep) {\n          this.config.onStep(step);\n        }\n      }\n\n      // Max iterations reached\n      this.status = this.shouldStop ? 'stopped' : 'completed';\n\n      return {\n        status: this.status,\n        steps: this.steps,\n        finalAnswer: this.steps[this.steps.length - 1]?.thought,\n        iterations: iteration,\n      };\n    } catch (error) {\n      this.status = 'failed';\n      return {\n        status: 'failed',\n        steps: this.steps,\n        error: error as Error,\n        iterations: this.steps.length,\n      };\n    } finally {\n      if (this.session) {\n        this.session.destroy();\n        this.session = null;\n      }\n    }\n  }\n\n  stop(): void {\n    this.shouldStop = true;\n  }\n\n  getStatus(): TaskStatus {\n    return this.status;\n  }\n\n  getSteps(): AgentStep[] {\n    return this.steps;\n  }\n\n  protected buildSystemPrompt(): string {\n    const functionPrompt = buildFunctionSystemPrompt(this.registry);\n    const basePrompt =\n      this.config.systemPrompt ||\n      'You are a helpful AI assistant. Complete the given task step by step.';\n\n    if (functionPrompt) {\n      return `${basePrompt}\\n\\n${functionPrompt}`;\n    }\n\n    return basePrompt;\n  }\n\n  protected isTaskComplete(response: string): boolean {\n    // Simple heuristic: check for completion indicators\n    const completionIndicators = [\n      'task is complete',\n      'task complete',\n      'finished',\n      'done',\n      'completed',\n      'final answer',\n    ];\n\n    const lowerResponse = response.toLowerCase();\n    return completionIndicators.some((indicator) => lowerResponse.includes(indicator));\n  }\n}\n\n","/**\n * Advanced agent with planning and reflection capabilities\n */\n\nimport type { AdvancedAgentConfig, AgentResult, AgentPlan } from '../types';\nimport { BasicAgent } from './basic-agent';\n\nexport class AdvancedAgent extends BasicAgent {\n  private currentPlan: AgentPlan | null = null;\n  private reflectionCount = 0;\n\n  constructor(protected override config: AdvancedAgentConfig) {\n    super(config);\n  }\n\n  async runWithPlanning(task: string): Promise<AgentResult> {\n    if (!this.config.enablePlanning) {\n      return this.run(task);\n    }\n\n    this.status = 'running';\n    this.steps = [];\n    this.shouldStop = false;\n\n    try {\n      // Create session\n      this.session = await this.createPlanningSession();\n\n      // Phase 1: Planning\n      this.currentPlan = await this.createPlan(task);\n\n      // Phase 2: Execution with reflection\n      const result = await this.executeWithReflection(task);\n\n      return result;\n    } catch (error) {\n      this.status = 'failed';\n      return {\n        status: 'failed',\n        steps: this.steps,\n        error: error as Error,\n        iterations: this.steps.length,\n      };\n    } finally {\n      if (this.session) {\n        this.session.destroy();\n        this.session = null;\n      }\n    }\n  }\n\n  async reflect(): Promise<string> {\n    if (!this.session || this.steps.length === 0) {\n      return 'No steps to reflect on';\n    }\n\n    const reflectionPrompt =\n      this.config.reflectionPrompt ||\n      `Review the steps taken so far and provide:\n1. What has been accomplished\n2. What challenges were encountered\n3. What should be done differently\n4. Next recommended actions\n\nSteps taken:\n${this.formatStepsForReflection()}`;\n\n    const reflection = await this.session.prompt(reflectionPrompt);\n    this.reflectionCount++;\n\n    return reflection;\n  }\n\n  async replan(task: string): Promise<AgentPlan> {\n    if (!this.session) {\n      throw new Error('No active session for replanning');\n    }\n\n    const replanPrompt = `Based on the reflection and current progress, create a new plan to complete the task: \"${task}\"\n\nCurrent progress:\n${this.formatStepsForReflection()}\n\nCreate a revised step-by-step plan.`;\n\n    const planResponse = await this.session.prompt(replanPrompt);\n    this.currentPlan = this.parsePlan(planResponse);\n\n    return this.currentPlan;\n  }\n\n  private async createPlanningSession() {\n    const manager = new (await import('../core')).SessionManager();\n    const systemPrompt = this.buildPlanningSystemPrompt();\n\n    await manager.create({\n      systemPrompt,\n      enablePersistence: false,\n    });\n\n    return manager;\n  }\n\n  private async createPlan(task: string): Promise<AgentPlan> {\n    if (!this.session) {\n      throw new Error('No active session');\n    }\n\n    const planningPrompt =\n      this.config.planningPrompt ||\n      `Create a detailed step-by-step plan to accomplish this task: \"${task}\"\n\nBreak it down into clear, actionable steps. For each step, specify:\n1. What needs to be done\n2. What resources or functions might be needed\n3. Dependencies on other steps`;\n\n    const planResponse = await this.session.prompt(planningPrompt);\n    return this.parsePlan(planResponse);\n  }\n\n  private async executeWithReflection(task: string): Promise<AgentResult> {\n    const maxReflections = this.config.maxReflections || 2;\n\n    let result = await this.run(task);\n\n    // Reflect and adjust if not successful\n    while (\n      result.status !== 'completed' &&\n      this.reflectionCount < maxReflections &&\n      !this.shouldStop\n    ) {\n      const reflection = await this.reflect();\n\n      // Create a continuation prompt based on reflection\n      const continuationPrompt = `Previous attempt was not fully successful. \n\nReflection:\n${reflection}\n\nPlease continue with the task: \"${task}\"`;\n\n      // Continue execution\n      result = await this.run(continuationPrompt);\n    }\n\n    return result;\n  }\n\n  private buildPlanningSystemPrompt(): string {\n    const basePrompt = super.buildSystemPrompt();\n    const planningAddition = `\n\nYou are also capable of:\n- Creating detailed plans before execution\n- Reflecting on your progress\n- Adjusting your approach based on feedback\n- Breaking complex tasks into manageable steps`;\n\n    return basePrompt + planningAddition;\n  }\n\n  private parsePlan(planText: string): AgentPlan {\n    // Simple plan parsing - extract numbered steps\n    const stepRegex = /(\\d+)\\.\\s*([^\\n]+)/g;\n    const steps: string[] = [];\n    let match;\n\n    while ((match = stepRegex.exec(planText)) !== null) {\n      steps.push(match[2]!.trim());\n    }\n\n    // Build simple sequential dependencies\n    const dependencies: Record<number, number[]> = {};\n    for (let i = 1; i < steps.length; i++) {\n      dependencies[i] = [i - 1];\n    }\n\n    return { steps, dependencies };\n  }\n\n  private formatStepsForReflection(): string {\n    return this.steps\n      .map((step) => {\n        let formatted = `Step ${step.iteration}:`;\n        if (step.thought) formatted += `\\n  Thought: ${step.thought}`;\n        if (step.action) formatted += `\\n  Action: ${step.action.name}`;\n        if (step.observation) {\n          formatted += `\\n  Result: ${step.observation.success ? 'Success' : 'Failed'}`;\n        }\n        return formatted;\n      })\n      .join('\\n\\n');\n  }\n\n  getCurrentPlan(): AgentPlan | null {\n    return this.currentPlan;\n  }\n\n  getReflectionCount(): number {\n    return this.reflectionCount;\n  }\n}\n\n","/**\n * Utility functions for agents\n */\n\nimport type { AgentConfig, AgentStep, AdvancedAgentConfig } from '../types';\nimport { BasicAgent } from './basic-agent';\nimport { AdvancedAgent } from './advanced-agent';\n\nexport function createAgent(config: AgentConfig): BasicAgent {\n  return new BasicAgent(config);\n}\n\nexport function createAdvancedAgent(config: AdvancedAgentConfig): AdvancedAgent {\n  return new AdvancedAgent(config);\n}\n\nexport function isTaskComplete(steps: AgentStep[]): boolean {\n  if (steps.length === 0) return false;\n\n  const lastStep = steps[steps.length - 1];\n  \n  // Check if last step has a thought without an action\n  if (lastStep?.thought && !lastStep.action) {\n    return true;\n  }\n\n  // Check if last action was successful\n  if (lastStep?.observation?.success) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function formatAgentHistory(steps: AgentStep[]): string {\n  return steps\n    .map((step) => {\n      let output = `=== Step ${step.iteration} ===\\n`;\n      \n      if (step.thought) {\n        output += `Thought: ${step.thought}\\n`;\n      }\n      \n      if (step.action) {\n        output += `Action: ${step.action.name}\\n`;\n        output += `Arguments: ${JSON.stringify(step.action.arguments, null, 2)}\\n`;\n      }\n      \n      if (step.observation) {\n        output += `Observation: ${step.observation.success ? 'Success' : 'Failed'}\\n`;\n        if (step.observation.result) {\n          output += `Result: ${JSON.stringify(step.observation.result, null, 2)}\\n`;\n        }\n        if (step.observation.error) {\n          output += `Error: ${step.observation.error}\\n`;\n        }\n      }\n      \n      return output;\n    })\n    .join('\\n');\n}\n\nexport function extractFinalAnswer(steps: AgentStep[]): string | undefined {\n  // Look for the last step with a thought and no action\n  for (let i = steps.length - 1; i >= 0; i--) {\n    const step = steps[i];\n    if (step?.thought && !step.action) {\n      return step.thought;\n    }\n  }\n\n  return undefined;\n}\n\nexport function countFunctionCalls(steps: AgentStep[]): number {\n  return steps.filter((step) => step.action !== undefined).length;\n}\n\nexport function getSuccessfulSteps(steps: AgentStep[]): AgentStep[] {\n  return steps.filter((step) => step.observation?.success !== false);\n}\n\nexport function getFailedSteps(steps: AgentStep[]): AgentStep[] {\n  return steps.filter((step) => step.observation?.success === false);\n}\n\nexport function hasErrors(steps: AgentStep[]): boolean {\n  return steps.some((step) => step.observation?.success === false);\n}\n\n// Predefined stopping conditions\nexport const StoppingConditions = {\n  maxFunctionCalls: (max: number) => (steps: AgentStep[]) => {\n    return countFunctionCalls(steps) >= max;\n  },\n\n  keywordDetected: (keywords: string[]) => (steps: AgentStep[]) => {\n    const lastStep = steps[steps.length - 1];\n    if (!lastStep?.thought) return false;\n\n    const thought = lastStep.thought.toLowerCase();\n    return keywords.some((keyword) => thought.includes(keyword.toLowerCase()));\n  },\n\n  noProgressAfter: (iterations: number) => (steps: AgentStep[]) => {\n    if (steps.length < iterations) return false;\n\n    const recentSteps = steps.slice(-iterations);\n    const allFailed = recentSteps.every((step) => step.observation?.success === false);\n\n    return allFailed;\n  },\n\n  answerProvided: () => (steps: AgentStep[]) => {\n    return isTaskComplete(steps);\n  },\n};\n\n// Error recovery strategies\nexport function createRetryStrategy(maxRetries = 3) {\n  let retries = 0;\n\n  return (step: AgentStep): string | null => {\n    if (step.observation?.success === false && retries < maxRetries) {\n      retries++;\n      return `The previous action failed. Error: ${step.observation.error}. Please try a different approach (attempt ${retries}/${maxRetries}).`;\n    }\n\n    if (retries >= maxRetries) {\n      return 'Max retries reached. Please provide your best answer based on the information available.';\n    }\n\n    retries = 0; // Reset on success\n    return null;\n  };\n}\n\n","/**\n * Stream processing utilities for LLM responses\n */\n\nimport type { StreamingOptions } from '../types';\nimport { PromptAPIError } from '../types';\n\nexport class StreamProcessor {\n  private reader: ReadableStreamDefaultReader<string> | null = null;\n  private controller: AbortController;\n  private accumulated = '';\n\n  constructor(\n    private stream: ReadableStream<string>,\n    private options: StreamingOptions = {}\n  ) {\n    this.controller = new AbortController();\n\n    // Wire up external abort signal if provided\n    if (options.signal) {\n      options.signal.addEventListener('abort', () => this.abort());\n    }\n  }\n\n  async process(): Promise<string> {\n    this.reader = this.stream.getReader();\n    const { onChunk, onComplete, onError } = this.options;\n\n    try {\n      while (true) {\n        const { done, value } = await this.reader.read();\n\n        if (this.controller.signal.aborted) {\n          throw new PromptAPIError('Stream processing aborted');\n        }\n\n        if (done) {\n          break;\n        }\n\n        this.accumulated = value;\n\n        if (onChunk) {\n          onChunk(value);\n        }\n      }\n\n      if (onComplete) {\n        onComplete(this.accumulated);\n      }\n\n      return this.accumulated;\n    } catch (error) {\n      if (onError) {\n        onError(error as Error);\n      }\n      throw error;\n    } finally {\n      this.reader.releaseLock();\n      this.reader = null;\n    }\n  }\n\n  async *iterate(): AsyncIterableIterator<string> {\n    this.reader = this.stream.getReader();\n\n    try {\n      while (true) {\n        const { done, value } = await this.reader.read();\n\n        if (this.controller.signal.aborted) {\n          throw new PromptAPIError('Stream processing aborted');\n        }\n\n        if (done) {\n          break;\n        }\n\n        this.accumulated = value;\n        yield value;\n      }\n    } finally {\n      this.reader.releaseLock();\n      this.reader = null;\n    }\n  }\n\n  getPartialResult(): string {\n    return this.accumulated;\n  }\n\n  abort(): void {\n    this.controller.abort();\n    if (this.reader) {\n      this.reader.cancel();\n    }\n  }\n\n  isAborted(): boolean {\n    return this.controller.signal.aborted;\n  }\n}\n\nexport async function collectStream(stream: ReadableStream<string>): Promise<string> {\n  const processor = new StreamProcessor(stream);\n  return processor.process();\n}\n\nexport async function* streamToAsyncIterator(\n  stream: ReadableStream<string>\n): AsyncIterableIterator<string> {\n  const processor = new StreamProcessor(stream);\n  yield* processor.iterate();\n}\n\n","/**\n * Stream rendering utilities for UI updates\n */\n\nimport type { RenderMode, StreamRenderOptions } from '../types';\n\nexport class StreamRenderer {\n  private buffer = '';\n  private lastUpdate = 0;\n  private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n  constructor(private options: StreamRenderOptions) {}\n\n  processChunk(chunk: string): void {\n    this.buffer = chunk;\n\n    const now = Date.now();\n    const { debounceMs = 50 } = this.options;\n\n    // Debounce updates to avoid excessive renders\n    if (this.debounceTimer) {\n      clearTimeout(this.debounceTimer);\n    }\n\n    if (now - this.lastUpdate >= debounceMs) {\n      this.render();\n    } else {\n      this.debounceTimer = setTimeout(() => this.render(), debounceMs);\n    }\n  }\n\n  complete(): void {\n    if (this.debounceTimer) {\n      clearTimeout(this.debounceTimer);\n    }\n    this.render();\n  }\n\n  private render(): void {\n    const { mode, onUpdate } = this.options;\n    const text = this.formatForMode(this.buffer, mode);\n    onUpdate(text);\n    this.lastUpdate = Date.now();\n  }\n\n  private formatForMode(text: string, mode: RenderMode): string {\n    switch (mode) {\n      case 'word':\n        return text;\n\n      case 'sentence': {\n        // Only show complete sentences\n        const sentences = text.match(/[^.!?]+[.!?]+/g) || [];\n        return sentences.join(' ');\n      }\n\n      case 'chunk':\n      default:\n        return text;\n    }\n  }\n}\n\nexport function createStreamRenderer(\n  stream: ReadableStream<string>,\n  options: StreamRenderOptions\n): StreamRenderer {\n  const renderer = new StreamRenderer(options);\n\n  (async () => {\n    const reader = stream.getReader();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n          renderer.complete();\n          break;\n        }\n        renderer.processChunk(value);\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  })();\n\n  return renderer;\n}\n\nexport async function* bufferStream(\n  stream: ReadableStream<string>,\n  bufferSize: number\n): AsyncIterableIterator<string> {\n  const reader = stream.getReader();\n  let buffer = '';\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n\n      if (done) {\n        if (buffer.length > 0) {\n          yield buffer;\n        }\n        break;\n      }\n\n      buffer = value;\n\n      // Yield when buffer reaches size or on sentence boundaries\n      const lastSentence = buffer.lastIndexOf('. ');\n      if (buffer.length >= bufferSize && lastSentence > 0) {\n        yield buffer.substring(0, lastSentence + 1);\n        buffer = buffer.substring(lastSentence + 1);\n      }\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\nexport function debounceStream(\n  stream: ReadableStream<string>,\n  delay: number\n): ReadableStream<string> {\n  let timeoutId: ReturnType<typeof setTimeout> | null = null;\n  let latestValue = '';\n\n  return new ReadableStream<string>({\n    async start(controller) {\n      const reader = stream.getReader();\n\n      try {\n        while (true) {\n          const { done, value } = await reader.read();\n\n          if (done) {\n            if (timeoutId) {\n              clearTimeout(timeoutId);\n            }\n            if (latestValue) {\n              controller.enqueue(latestValue);\n            }\n            controller.close();\n            break;\n          }\n\n          latestValue = value;\n\n          if (timeoutId) {\n            clearTimeout(timeoutId);\n          }\n\n          timeoutId = setTimeout(() => {\n            controller.enqueue(latestValue);\n            timeoutId = null;\n          }, delay);\n        }\n      } finally {\n        reader.releaseLock();\n      }\n    },\n  });\n}\n\n// Word-by-word streaming utility\nexport async function* streamWords(\n  stream: ReadableStream<string>\n): AsyncIterableIterator<string> {\n  const reader = stream.getReader();\n  let previousText = '';\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n\n      if (done) {\n        break;\n      }\n\n      // Extract new words\n      const currentWords = value.split(/\\s+/);\n      const previousWords = previousText.split(/\\s+/);\n\n      for (let i = previousWords.length; i < currentWords.length; i++) {\n        const word = currentWords[i];\n        if (word) {\n          yield word;\n        }\n      }\n\n      previousText = value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\n// Sentence-by-sentence streaming utility\nexport async function* streamSentences(\n  stream: ReadableStream<string>\n): AsyncIterableIterator<string> {\n  const reader = stream.getReader();\n  let buffer = '';\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n\n      if (done) {\n        if (buffer.trim()) {\n          yield buffer;\n        }\n        break;\n      }\n\n      buffer = value;\n\n      // Extract complete sentences\n      const sentenceRegex = /[^.!?]+[.!?]+/g;\n      const sentences = buffer.match(sentenceRegex);\n\n      if (sentences && sentences.length > 0) {\n        for (const sentence of sentences) {\n          yield sentence;\n        }\n\n        // Keep incomplete sentence in buffer\n        const lastSentenceEnd = buffer.lastIndexOf(sentences[sentences.length - 1]!);\n        buffer = buffer.substring(\n          lastSentenceEnd + sentences[sentences.length - 1]!.length\n        );\n      }\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\n","/**\n * Error handling utilities\n */\n\nimport {\n  PromptAPIError,\n  QuotaExceededError,\n  SessionError,\n  StructuredOutputError,\n  FunctionCallError,\n} from '../types';\n\nexport function isPromptAPIAvailable(): boolean {\n  return typeof window !== 'undefined' && 'ai' in window && !!window.ai?.languageModel;\n}\n\nexport function createError(\n  type: 'prompt' | 'quota' | 'session' | 'structured' | 'function',\n  message: string,\n  cause?: unknown\n): PromptAPIError {\n  switch (type) {\n    case 'quota':\n      return new QuotaExceededError(message);\n    case 'session':\n      return new SessionError(message, cause);\n    case 'structured':\n      return new StructuredOutputError(message, cause);\n    case 'function':\n      return new FunctionCallError(message, cause);\n    default:\n      return new PromptAPIError(message, undefined, cause);\n  }\n}\n\nexport function getErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return String(error);\n}\n\nexport function withRetry<T>(\n  fn: () => Promise<T>,\n  options: {\n    maxAttempts?: number;\n    delay?: number;\n    backoff?: boolean;\n    shouldRetry?: (error: unknown) => boolean;\n  } = {}\n): Promise<T> {\n  const {\n    maxAttempts = 3,\n    delay = 1000,\n    backoff = true,\n    shouldRetry = () => true,\n  } = options;\n\n  return new Promise((resolve, reject) => {\n    let attempt = 0;\n\n    const execute = async () => {\n      try {\n        const result = await fn();\n        resolve(result);\n      } catch (error) {\n        attempt++;\n\n        if (attempt >= maxAttempts || !shouldRetry(error)) {\n          reject(error);\n          return;\n        }\n\n        const waitTime = backoff ? delay * Math.pow(2, attempt - 1) : delay;\n        setTimeout(execute, waitTime);\n      }\n    };\n\n    execute();\n  });\n}\n\nexport function createRecoverySuggestion(error: PromptAPIError): string {\n  if (error instanceof QuotaExceededError) {\n    return 'Try creating a new session or clearing old conversation history.';\n  }\n\n  if (error instanceof SessionError) {\n    return 'Try reinitializing the session or checking if the API is available.';\n  }\n\n  if (error instanceof StructuredOutputError) {\n    return 'Try simplifying your schema or providing more specific instructions.';\n  }\n\n  if (error instanceof FunctionCallError) {\n    return 'Check your function definition and ensure parameters are correctly specified.';\n  }\n\n  return 'Please check the error details and try again.';\n}\n\n"]}