{"version":3,"sources":["../src/index.ts","../src/session.ts","../src/tools.ts","../src/providers/in-memory.ts"],"sourcesContent":["export type {\n  AudioInputChunk,\n  AudioOutputChunk,\n  JsonObject,\n  RealtimeFunctionToolDefinition,\n  ToolConfirmationDecision,\n  ToolConfirmationPolicy,\n  ToolConfirmationRequest,\n  ToolConfirmationResolver,\n  VoiceAuthConfig,\n  VoiceBridgeCommand,\n  VoiceBridgeEvent,\n  VoiceConnectionState,\n  VoiceEvent,\n  VoiceEventHandler,\n  VoiceProvider,\n  VoiceProviderConnectOptions,\n  VoiceSession,\n  VoiceSessionConfig,\n  VoiceSessionMetadata,\n  VoiceTool,\n  VoiceToolCall,\n  VoiceToolContext,\n  VoiceToolExecutionError,\n  VoiceToolExecutionResult,\n  VoiceToolResult,\n  VoiceTransport,\n  VoiceTransportConnectOptions,\n  VoiceTransportEvent,\n  VoiceTransportEventHandler,\n  VoiceTransportSendEvent,\n} from \"./types.js\";\n\nexport { createVoiceSession, normalizeVoiceProviderError } from \"./session.js\";\nexport type { VoiceSessionControllerOptions } from \"./session.js\";\n\nexport {\n  agentToolToVoiceTool,\n  executeVoiceToolCall,\n  ggAiToolToRealtimeFunctionTool,\n  ggAiToolToVoiceTool,\n  voiceToolToRealtimeFunctionTool,\n} from \"./tools.js\";\nexport type { ExecuteVoiceToolCallOptions, VoiceToolSource } from \"./tools.js\";\n\nexport { createInMemoryVoiceProvider } from \"./providers/in-memory.js\";\nexport type {\n  InMemoryVoiceProvider,\n  InMemoryVoiceProviderOptions,\n  InMemoryVoiceSession,\n} from \"./providers/in-memory.js\";\n\nexport type {\n  OpenUrlRequest,\n  PlatformAudioAdapter,\n  PlatformNotification,\n  PlatformSecureTokenStore,\n  PlatformUrlOpener,\n  RelayHttpClient,\n  RelayRequest,\n  RelayResponse,\n} from \"./platform.js\";\n","import type {\n  AudioInputChunk,\n  JsonObject,\n  VoiceConnectionState,\n  VoiceEvent,\n  VoiceEventHandler,\n  VoiceSession,\n  VoiceSessionConfig,\n  VoiceSessionMetadata,\n  VoiceToolResult,\n  VoiceTransport,\n  VoiceTransportEvent,\n} from \"./types.js\";\n\nexport interface VoiceSessionControllerOptions {\n  readonly id: string;\n  readonly provider: string;\n  readonly transport?: VoiceTransport;\n  readonly metadata?: VoiceSessionMetadata;\n  readonly onSendToolResult?: (result: VoiceToolResult, signal?: AbortSignal) => Promise<void>;\n  readonly onSendAudio?: (chunk: AudioInputChunk, signal?: AbortSignal) => Promise<void>;\n  readonly onSendText?: (text: string, signal?: AbortSignal) => Promise<void>;\n  readonly onUpdateConfig?: (\n    config: Partial<VoiceSessionConfig>,\n    signal?: AbortSignal,\n  ) => Promise<void>;\n  readonly onClose?: (reason?: string) => Promise<void>;\n}\n\nexport function createVoiceSession(options: VoiceSessionControllerOptions): VoiceSession {\n  return new VoiceSessionController(options);\n}\n\nexport function normalizeVoiceProviderError(error: unknown): Error {\n  if (error instanceof Error) {\n    return error;\n  }\n  if (typeof error === \"string\") {\n    return new Error(error);\n  }\n  return new Error(\"Voice provider error\", { cause: error });\n}\n\nclass VoiceSessionController implements VoiceSession {\n  readonly id: string;\n  readonly provider: string;\n  readonly metadata: VoiceSessionMetadata;\n  #state: VoiceConnectionState = \"connected\";\n  #handlers = new Set<VoiceEventHandler>();\n  #unsubscribeTransport?: () => void;\n  #options: VoiceSessionControllerOptions;\n\n  constructor(options: VoiceSessionControllerOptions) {\n    this.id = options.id;\n    this.provider = options.provider;\n    this.metadata = options.metadata ?? { sessionId: options.id, provider: options.provider };\n    this.#options = options;\n    this.#unsubscribeTransport = options.transport?.onEvent((event) => {\n      this.#handleTransportEvent(event);\n    });\n  }\n\n  get state(): VoiceConnectionState {\n    return this.#state;\n  }\n\n  onEvent(handler: VoiceEventHandler): () => void {\n    this.#handlers.add(handler);\n    return () => {\n      this.#handlers.delete(handler);\n    };\n  }\n\n  async sendAudio(chunk: AudioInputChunk, signal?: AbortSignal): Promise<void> {\n    await this.#options.onSendAudio?.(chunk, signal);\n    await this.#options.transport?.send({ type: \"audio\", chunk }, signal);\n  }\n\n  async sendText(text: string, signal?: AbortSignal): Promise<void> {\n    await this.#options.onSendText?.(text, signal);\n    await this.#options.transport?.send({ type: \"text\", text }, signal);\n  }\n\n  async sendToolResult(result: VoiceToolResult, signal?: AbortSignal): Promise<void> {\n    await this.#options.onSendToolResult?.(result, signal);\n    await this.#options.transport?.send({ type: \"tool_result\", result }, signal);\n    this.#emit({ type: \"tool_result_sent\", result });\n  }\n\n  async updateConfig(config: Partial<VoiceSessionConfig>, signal?: AbortSignal): Promise<void> {\n    await this.#options.onUpdateConfig?.(config, signal);\n    await this.#options.transport?.send({ type: \"config\", config }, signal);\n  }\n\n  async close(reason?: string): Promise<void> {\n    if (this.#state === \"closed\" || this.#state === \"closing\") {\n      return;\n    }\n    this.#state = \"closing\";\n    await this.#options.onClose?.(reason);\n    await this.#options.transport?.close(reason);\n    this.#unsubscribeTransport?.();\n    this.#state = \"closed\";\n    this.#emit({ type: \"closed\", reason });\n  }\n\n  #handleTransportEvent(event: VoiceTransportEvent): void {\n    if (event.type === \"raw\") {\n      return;\n    }\n    if (event.type === \"closed\") {\n      this.#state = \"closed\";\n    }\n    this.#emit(event);\n  }\n\n  #emit(event: VoiceEvent): void {\n    const handlers = [...this.#handlers];\n    for (const handler of handlers) {\n      handler(event);\n    }\n  }\n}\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { AgentTool, ToolContext, ToolExecuteResult } from \"@kenkaiiii/gg-agent\";\nimport type { Tool } from \"@kenkaiiii/gg-ai\";\nimport { z } from \"zod\";\nimport type {\n  JsonObject,\n  RealtimeFunctionToolDefinition,\n  ToolConfirmationDecision,\n  VoiceTool,\n  VoiceToolCall,\n  VoiceToolContext,\n  VoiceToolExecutionError,\n  VoiceToolExecutionResult,\n  VoiceToolResult,\n} from \"./types.js\";\n\ntype ZodParseResult = { success: true; data: unknown } | { success: false; error: z.ZodError };\n\nexport type VoiceToolSource = VoiceTool | AgentTool | Tool;\n\nexport interface ExecuteVoiceToolCallOptions {\n  readonly tools: readonly VoiceTool[];\n  readonly call: VoiceToolCall;\n  readonly signal?: AbortSignal;\n  readonly confirmation?: VoiceToolContext[\"confirmation\"];\n  readonly onUpdate?: VoiceToolContext[\"onUpdate\"];\n}\n\nexport function ggAiToolToRealtimeFunctionTool(tool: Tool): RealtimeFunctionToolDefinition {\n  return {\n    type: \"function\",\n    name: tool.name,\n    description: tool.description,\n    parameters: tool.rawInputSchema ?? zodToJsonSchemaObject(tool.parameters),\n  };\n}\n\nexport function voiceToolToRealtimeFunctionTool(tool: VoiceTool): RealtimeFunctionToolDefinition {\n  return {\n    type: \"function\",\n    name: tool.name,\n    description: tool.description,\n    parameters: tool.parameters,\n  };\n}\n\nexport function ggAiToolToVoiceTool(tool: Tool): VoiceTool {\n  return {\n    name: tool.name,\n    description: tool.description,\n    parameters: tool.rawInputSchema ?? zodToJsonSchemaObject(tool.parameters),\n  };\n}\n\nexport function agentToolToVoiceTool<T extends z.ZodType>(tool: AgentTool<T>): VoiceTool {\n  return {\n    name: tool.name,\n    description: tool.description,\n    parameters: tool.rawInputSchema ?? zodToJsonSchemaObject(tool.parameters),\n    async execute(args, context): Promise<VoiceToolExecutionResult> {\n      const parsed = tool.parameters.safeParse(args) as ZodParseResult;\n      if (!parsed.success) {\n        return {\n          error: \"Invalid tool arguments\",\n          issues: parsed.error.issues,\n        };\n      }\n\n      const agentContext: ToolContext = {\n        signal: context.signal,\n        toolCallId: context.toolCallId,\n        onUpdate: context.onUpdate,\n      };\n      const result = await tool.execute(parsed.data as z.infer<T>, agentContext);\n      return normalizeAgentToolResult(result);\n    },\n  };\n}\n\nexport async function executeVoiceToolCall(\n  options: ExecuteVoiceToolCallOptions,\n): Promise<VoiceToolResult> {\n  const tool = options.tools.find((candidate) => candidate.name === options.call.name);\n  if (!tool) {\n    return createErrorResult(options.call, {\n      type: \"tool_not_found\",\n      message: `Tool not found: ${options.call.name}`,\n    });\n  }\n\n  const confirmation = await resolveConfirmation(tool, options.call, options.confirmation);\n  if (!confirmation.approved) {\n    return createErrorResult(options.call, {\n      type: \"tool_confirmation_denied\",\n      message: confirmation.reason,\n    });\n  }\n\n  if (!tool.execute) {\n    return createErrorResult(options.call, {\n      type: \"tool_execution_failed\",\n      message: `Tool has no executor: ${tool.name}`,\n    });\n  }\n\n  try {\n    const abortController = new AbortController();\n    const signal = options.signal ?? abortController.signal;\n    const content = await tool.execute(options.call.args, {\n      signal,\n      toolCallId: options.call.id,\n      confirmation: options.confirmation,\n      onUpdate: options.onUpdate,\n    });\n    return {\n      toolCallId: options.call.id,\n      name: options.call.name,\n      content,\n    };\n  } catch (error) {\n    return createErrorResult(options.call, {\n      type: \"tool_execution_failed\",\n      message: error instanceof Error ? error.message : \"Tool execution failed\",\n      cause: error,\n    });\n  }\n}\n\nfunction zodToJsonSchemaObject(schema: z.ZodType): JsonObject {\n  const jsonSchema = z.toJSONSchema(schema) as JsonObject;\n  const { $schema: _schema, ...rest } = jsonSchema;\n  return rest;\n}\n\nfunction normalizeAgentToolResult(result: ToolExecuteResult): VoiceToolExecutionResult {\n  if (typeof result === \"string\") {\n    return result;\n  }\n  if (typeof result.content === \"string\") {\n    if (result.details === undefined) {\n      return result.content;\n    }\n    return { content: result.content, details: result.details };\n  }\n  return { content: result.content, details: result.details };\n}\n\nasync function resolveConfirmation(\n  tool: VoiceTool,\n  call: VoiceToolCall,\n  confirmation: VoiceToolContext[\"confirmation\"],\n): Promise<ToolConfirmationDecision> {\n  const policy = tool.confirmation ?? \"never\";\n  if (policy === \"never\") {\n    return { approved: true };\n  }\n  if (policy === \"destructive\" && !tool.destructive) {\n    return { approved: true };\n  }\n  if (typeof policy === \"function\") {\n    return policy({ call, tool });\n  }\n  if (!confirmation) {\n    return {\n      approved: false,\n      reason: `Tool requires confirmation: ${tool.name}`,\n    };\n  }\n  return confirmation({ call, tool });\n}\n\nfunction createErrorResult(call: VoiceToolCall, error: VoiceToolExecutionError): VoiceToolResult {\n  const content: JsonObject = {\n    error: error.message,\n    type: error.type,\n  };\n  return {\n    toolCallId: call.id,\n    name: call.name,\n    content,\n    isError: true,\n  };\n}\n","import type {\n  AudioInputChunk,\n  VoiceEvent,\n  VoiceEventHandler,\n  VoiceProvider,\n  VoiceProviderConnectOptions,\n  VoiceSession,\n  VoiceSessionConfig,\n  VoiceToolCall,\n  VoiceToolResult,\n} from \"../types.js\";\n\nexport interface InMemoryVoiceProviderOptions {\n  readonly now?: () => Date;\n  readonly idFactory?: () => string;\n}\n\nexport interface InMemoryVoiceProvider extends Omit<VoiceProvider, \"connect\"> {\n  readonly sessions: readonly InMemoryVoiceSession[];\n  connect(options: VoiceProviderConnectOptions): Promise<InMemoryVoiceSession>;\n}\n\nexport interface InMemoryVoiceSession extends VoiceSession {\n  emit(event: VoiceEvent): void;\n  readonly sentAudio: readonly AudioInputChunk[];\n  readonly sentText: readonly string[];\n  readonly sentToolResults: readonly VoiceToolResult[];\n  triggerToolCall(call: VoiceToolCall): void;\n}\n\nexport function createInMemoryVoiceProvider(\n  options: InMemoryVoiceProviderOptions = {},\n): InMemoryVoiceProvider {\n  const sessions: InMemorySession[] = [];\n  const now = options.now ?? (() => new Date());\n  const idFactory = options.idFactory ?? (() => `voice_${sessions.length + 1}`);\n\n  return {\n    name: \"in-memory\",\n    get sessions() {\n      return sessions;\n    },\n    async connect(connectOptions: VoiceProviderConnectOptions): Promise<InMemoryVoiceSession> {\n      const id = idFactory();\n      const session = new InMemorySession(id, connectOptions.session, now);\n      sessions.push(session);\n      session.emit({\n        type: \"session_started\",\n        session: session.metadata,\n      });\n      return session;\n    },\n  };\n}\n\nclass InMemorySession implements InMemoryVoiceSession {\n  readonly id: string;\n  readonly provider = \"in-memory\";\n  readonly metadata;\n  #state: VoiceSession[\"state\"] = \"connected\";\n  #handlers = new Set<VoiceEventHandler>();\n  #sentAudio: AudioInputChunk[] = [];\n  #sentText: string[] = [];\n  #sentToolResults: VoiceToolResult[] = [];\n\n  constructor(id: string, config: VoiceSessionConfig, now: () => Date) {\n    this.id = id;\n    this.metadata = {\n      sessionId: id,\n      provider: \"in-memory\",\n      model: config.model,\n      createdAt: now().toISOString(),\n    };\n  }\n\n  get state(): VoiceSession[\"state\"] {\n    return this.#state;\n  }\n\n  get sentAudio(): readonly AudioInputChunk[] {\n    return this.#sentAudio;\n  }\n\n  get sentText(): readonly string[] {\n    return this.#sentText;\n  }\n\n  get sentToolResults(): readonly VoiceToolResult[] {\n    return this.#sentToolResults;\n  }\n\n  onEvent(handler: VoiceEventHandler): () => void {\n    this.#handlers.add(handler);\n    return () => {\n      this.#handlers.delete(handler);\n    };\n  }\n\n  async sendAudio(chunk: AudioInputChunk): Promise<void> {\n    this.#sentAudio.push(chunk);\n  }\n\n  async sendText(text: string): Promise<void> {\n    this.#sentText.push(text);\n    this.emit({ type: \"input_transcript_done\", text });\n  }\n\n  async sendToolResult(result: VoiceToolResult): Promise<void> {\n    this.#sentToolResults.push(result);\n    this.emit({ type: \"tool_result_sent\", result });\n  }\n\n  async updateConfig(_config: Partial<VoiceSessionConfig>): Promise<void> {}\n\n  async close(reason?: string): Promise<void> {\n    if (this.#state === \"closed\") {\n      return;\n    }\n    this.#state = \"closed\";\n    this.emit({ type: \"closed\", reason });\n  }\n\n  emit(event: VoiceEvent): void {\n    const handlers = [...this.#handlers];\n    for (const handler of handlers) {\n      handler(event);\n    }\n  }\n\n  triggerToolCall(call: VoiceToolCall): void {\n    this.emit({ type: \"tool_call\", call });\n  }\n}\n"],"mappings":"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","names":[]}