{"version":3,"sources":["../../src/openai/parser.ts","../../src/errors.ts","../../src/types.ts","../../src/openai/tool-result.ts","../../src/openai/openai-parser.ts"],"sourcesContent":["export {\n  mapEvent as mapOpenAIEvent,\n  ResponseAccumulator as OpenAIResponseAccumulator,\n} from \"./openai-parser\";\n","export class ThalamusError extends Error {\n  readonly provider: string;\n  readonly isRetryable: boolean;\n  override readonly cause?: unknown;\n\n  constructor(\n    message: string,\n    options: { provider: string; isRetryable: boolean; cause?: unknown },\n  ) {\n    super(message, { cause: options.cause });\n    this.name = \"ThalamusError\";\n    this.provider = options.provider;\n    this.isRetryable = options.isRetryable;\n    this.cause = options.cause;\n  }\n}\n\nexport class ProviderAuthError extends ThalamusError {\n  constructor(message: string, options: { provider: string; cause?: unknown }) {\n    super(message, { ...options, isRetryable: false });\n    this.name = \"ProviderAuthError\";\n  }\n}\n\nexport class ProviderRateLimitError extends ThalamusError {\n  readonly retryAfterMs?: number;\n\n  constructor(\n    message: string,\n    options: { provider: string; retryAfterMs?: number; cause?: unknown },\n  ) {\n    super(message, { ...options, isRetryable: true });\n    this.name = \"ProviderRateLimitError\";\n    this.retryAfterMs = options.retryAfterMs;\n  }\n}\n\nexport class ProviderUnavailableError extends ThalamusError {\n  constructor(message: string, options: { provider: string; cause?: unknown }) {\n    super(message, { ...options, isRetryable: true });\n    this.name = \"ProviderUnavailableError\";\n  }\n}\n\nexport class ProviderResponseError extends ThalamusError {\n  constructor(message: string, options: { provider: string; cause?: unknown }) {\n    super(message, { ...options, isRetryable: false });\n    this.name = \"ProviderResponseError\";\n  }\n}\n\nexport class SessionExpiredError extends ThalamusError {\n  readonly sessionId: string;\n\n  constructor(\n    message: string,\n    options: { provider: string; sessionId: string; cause?: unknown },\n  ) {\n    super(message, { ...options, isRetryable: true });\n    this.name = \"SessionExpiredError\";\n    this.sessionId = options.sessionId;\n  }\n}\n\nexport class VaultError extends ThalamusError {\n  constructor(message: string, options: { provider: string; cause?: unknown }) {\n    super(message, { ...options, isRetryable: false });\n    this.name = \"VaultError\";\n  }\n}\n\nexport class VaultNotFoundError extends VaultError {\n  readonly vaultId: string;\n\n  constructor(vaultId: string, options: { provider: string; cause?: unknown }) {\n    super(`Vault ${vaultId} not found`, options);\n    this.name = \"VaultNotFoundError\";\n    this.vaultId = vaultId;\n  }\n}\n\nexport class CredentialExpiredError extends VaultError {\n  readonly serverName: string;\n  readonly vaultId: string;\n\n  constructor(\n    serverName: string,\n    vaultId: string,\n    options: { provider: string; cause?: unknown },\n  ) {\n    super(\n      `Credential for ${serverName} in vault ${vaultId} is expired with no refresh config`,\n      options,\n    );\n    this.name = \"CredentialExpiredError\";\n    this.serverName = serverName;\n    this.vaultId = vaultId;\n  }\n}\n\nexport class AbortedError extends ThalamusError {\n  readonly sessionId?: string;\n\n  constructor(options: {\n    provider: string;\n    sessionId?: string;\n    cause?: unknown;\n  }) {\n    super(\"Operation aborted\", { ...options, isRetryable: false });\n    this.name = \"AbortedError\";\n    this.sessionId = options.sessionId;\n  }\n}\n\nexport class McpServerError extends ThalamusError {\n  readonly serverName: string;\n  readonly statusCode?: number;\n\n  constructor(\n    serverName: string,\n    options: { provider: string; statusCode?: number; cause?: unknown },\n  ) {\n    const retryable =\n      options.statusCode !== undefined && options.statusCode >= 500;\n    super(\n      `MCP server ${serverName} error${options.statusCode ? ` (${options.statusCode})` : \"\"}`,\n      { ...options, isRetryable: retryable },\n    );\n    this.name = \"McpServerError\";\n    this.serverName = serverName;\n    this.statusCode = options.statusCode;\n  }\n}\n","import type { Vault, VaultOptions } from \"./vault/vault.interface\";\n\nexport enum MessageRole {\n  USER = \"user\",\n  ASSISTANT = \"assistant\",\n  SYSTEM = \"system\",\n}\n\nexport type ContentPart =\n  | { type: \"text\"; text: string }\n  | { type: \"image\"; data: string; mediaType: string }\n  | { type: \"image-url\"; url: string }\n  | { type: \"file\"; data: string; mediaType: string; name?: string };\n\nexport interface Message {\n  role: MessageRole;\n  content: string | ContentPart[];\n}\n\n/** Normalized tool output; provider parsers map into this shape. */\nexport type ToolResultContent =\n  | { type: \"text\"; text: string }\n  | {\n      type: \"citation\";\n      url: string;\n      title?: string;\n      excerpts?: string[];\n    }\n  | { type: \"json\"; value: unknown }\n  | {\n      type: \"media\";\n      mediaType: string;\n      data: string;\n      name?: string;\n    }\n  | {\n      type: \"unknown\";\n      providerType: string;\n      data: Record<string, unknown>;\n    };\n\nexport interface ToolResult {\n  toolUseId: string;\n  content: ToolResultContent[];\n  isError?: boolean;\n  approved?: boolean;\n}\n\nexport interface RequestParams {\n  /** Messages for this turn. May include system, user, and assistant messages. */\n  messages: Message[];\n  /** Opaque session identifier returned by a prior response. Absent means start a new session. */\n  sessionId?: string;\n  /** Vault IDs to bind to this request (credentials available to MCP servers). */\n  vaultIds?: string[];\n  /** Approval responses or tool outputs from a previous requires-action turn. */\n  toolResults?: ToolResult[];\n  /** Pass-through options forwarded directly to the underlying provider SDK call. */\n  providerOptions?: Record<string, unknown>;\n  /** When fired, the SDK closes the connection and the operation yields an `AbortedError`. */\n  abortSignal?: AbortSignal;\n  /** Metadata forwarded in the webhook payload for routing/context on the receiving end. */\n  webhookMetadata?: Record<string, string>;\n}\n\nexport interface SessionOptions {\n  vaultIds?: string[];\n  providerOptions?: Record<string, unknown>;\n}\n\nexport interface Usage {\n  inputTokens?: number;\n  outputTokens?: number;\n  totalTokens?: number;\n}\n\nexport type ToolSource =\n  | { type: \"builtin\" }\n  | { type: \"custom\" }\n  | { type: \"mcp\"; serverName: string };\n\nexport type McpApprovalPolicy = \"always\" | \"never\" | { except: string[] };\n\nexport interface McpServerConfig {\n  name: string;\n  url: string;\n  authorization?: string;\n  allowedTools?: string[];\n  approvalPolicy?: McpApprovalPolicy;\n}\n\nexport interface McpToolDef {\n  name: string;\n  description?: string;\n  inputSchema?: Record<string, unknown>;\n}\n\nexport type ActionRequired =\n  | {\n      type: \"tool-confirmation\";\n      toolUseId: string;\n      toolName: string;\n      input?: Record<string, unknown>;\n    }\n  | {\n      type: \"mcp-approval\";\n      toolUseId: string;\n      toolName: string;\n      serverName: string;\n      input?: Record<string, unknown>;\n    };\n\nexport interface Response {\n  content: string;\n  /** Session identifier to pass as `sessionId` on the next turn to continue the conversation. */\n  sessionId?: string;\n  finishReason:\n    | \"stop\"\n    | \"length\"\n    | \"error\"\n    | \"requires-action\"\n    | \"refused\"\n    | \"other\";\n  usage?: Usage;\n  actionsRequired?: ActionRequired[];\n}\n\nexport type AgentStatus = \"running\" | \"queued\" | \"retrying\" | \"idle\";\n\nexport type StreamPart =\n  | { type: \"text-delta\"; text: string }\n  | { type: \"refusal\"; text: string }\n  | { type: \"thinking\"; text: string }\n  | {\n      type: \"tool-use-start\";\n      toolName: string;\n      toolUseId: string;\n      source?: ToolSource;\n    }\n  | { type: \"tool-use-delta\"; toolUseId: string; argumentsDelta: string }\n  | {\n      type: \"tool-use-done\";\n      toolName: string;\n      toolUseId: string;\n      input?: Record<string, unknown>;\n      source?: ToolSource;\n    }\n  | {\n      type: \"tool-use-result\";\n      toolUseId: string;\n      content: ToolResultContent[];\n      isError?: boolean;\n      source?: ToolSource;\n    }\n  | {\n      type: \"mcp-tools-discovered\";\n      serverName: string;\n      tools: McpToolDef[];\n    }\n  | { type: \"step-start\"; stepIndex: number }\n  | { type: \"step-done\"; stepIndex: number }\n  | { type: \"status-change\"; status: AgentStatus }\n  | { type: \"stream-start\"; sessionId?: string }\n  | { type: \"finish\"; response: Response }\n  | { type: \"error\"; error: Error }\n  | {\n      type: \"provider-event\";\n      provider: string;\n      event: string;\n      data: Record<string, unknown>;\n    };\n\nexport interface StreamCallbacks {\n  /** Fires for every stream part, before type-specific callbacks. */\n  onPart?: (part: StreamPart) => void | Promise<void>;\n  onTextDelta?: (\n    part: Extract<StreamPart, { type: \"text-delta\" }>,\n  ) => void | Promise<void>;\n  onThinking?: (\n    part: Extract<StreamPart, { type: \"thinking\" }>,\n  ) => void | Promise<void>;\n  onRefusal?: (\n    part: Extract<StreamPart, { type: \"refusal\" }>,\n  ) => void | Promise<void>;\n  onToolUseStart?: (\n    part: Extract<StreamPart, { type: \"tool-use-start\" }>,\n  ) => void | Promise<void>;\n  onToolUseDelta?: (\n    part: Extract<StreamPart, { type: \"tool-use-delta\" }>,\n  ) => void | Promise<void>;\n  onToolUseDone?: (\n    part: Extract<StreamPart, { type: \"tool-use-done\" }>,\n  ) => void | Promise<void>;\n  onToolUseResult?: (\n    part: Extract<StreamPart, { type: \"tool-use-result\" }>,\n  ) => void | Promise<void>;\n  onMcpToolsDiscovered?: (\n    part: Extract<StreamPart, { type: \"mcp-tools-discovered\" }>,\n  ) => void | Promise<void>;\n  onStepStart?: (\n    part: Extract<StreamPart, { type: \"step-start\" }>,\n  ) => void | Promise<void>;\n  onStepDone?: (\n    part: Extract<StreamPart, { type: \"step-done\" }>,\n  ) => void | Promise<void>;\n  onStatusChange?: (\n    part: Extract<StreamPart, { type: \"status-change\" }>,\n  ) => void | Promise<void>;\n  onStreamStart?: (\n    part: Extract<StreamPart, { type: \"stream-start\" }>,\n  ) => void | Promise<void>;\n  onFinish?: (\n    part: Extract<StreamPart, { type: \"finish\" }>,\n  ) => void | Promise<void>;\n  onError?: (\n    part: Extract<StreamPart, { type: \"error\" }>,\n  ) => void | Promise<void>;\n  onProviderEvent?: (\n    part: Extract<StreamPart, { type: \"provider-event\" }>,\n  ) => void | Promise<void>;\n}\n\nexport interface SendResult extends PromiseLike<Response> {\n  /** Unique identifier for this `send()` invocation. Known synchronously. */\n  readonly runId: string;\n  readonly sessionId: Promise<string>;\n  readonly response: Promise<Response>;\n  text(): Promise<string>;\n}\n\nexport interface WebhookSendResult {\n  sessionId: string;\n  /** Unique identifier for this `send()` invocation, also present in every webhook event. */\n  runId: string;\n}\n\nexport type SessionEventsFactory = (\n  sessionId: string,\n  runId: string,\n) => StreamCallbacks;\n\ninterface BaseProvider {\n  readonly provider: string;\n  readonly runtimeId: string;\n  createVault(options: VaultOptions): Promise<Vault>;\n  getVault(vaultId: string): Promise<Vault>;\n  createSession(options?: SessionOptions): Promise<string>;\n  endSession(sessionId: string): Promise<void>;\n}\n\nexport interface StreamingProvider extends BaseProvider {\n  send(params: RequestParams): SendResult;\n}\n\nexport interface WebhookProvider extends BaseProvider {\n  send(params: RequestParams): Promise<WebhookSendResult>;\n}\n\nexport type Provider = StreamingProvider | WebhookProvider;\n\nexport const ANTHROPIC = \"anthropic\" as const;\nexport const OPENAI = \"openai\" as const;\n","import { flattenToolResultText } from \"../anthropic/tool-result\";\nimport type { ToolResultContent } from \"../types\";\n\nexport function parseOpenAIToolResultOutput(\n  output: string | null | undefined,\n): ToolResultContent[] {\n  if (output == null || output === \"\") return [];\n  return [{ type: \"text\", text: output }];\n}\n\nexport function toOpenAIToolResultOutput(content: ToolResultContent[]): string {\n  return flattenToolResultText(content);\n}\n","import type {\n  ResponseMcpCallArgumentsDeltaEvent,\n  ResponseOutputItem,\n  ResponseOutputItemAddedEvent,\n  ResponseOutputItemDoneEvent,\n  ResponseStreamEvent,\n} from \"openai/resources/responses/responses\";\nimport {\n  ProviderAuthError,\n  ProviderRateLimitError,\n  ProviderResponseError,\n  ProviderUnavailableError,\n  ThalamusError,\n} from \"../errors\";\nimport {\n  type ActionRequired,\n  OPENAI,\n  type Response,\n  type StreamPart,\n  type Usage,\n} from \"../types\";\nimport { parseOpenAIToolResultOutput } from \"./tool-result\";\n\nfunction mapStreamErrorEvent(event: {\n  code?: string | null;\n  message?: string;\n}): Error {\n  const msg = event.message ?? \"Stream error\";\n  const code = event.code ?? \"\";\n  if (\n    code === \"invalid_api_key\" ||\n    msg.toLowerCase().includes(\"unauthorized\")\n  ) {\n    return new ProviderAuthError(msg, { provider: OPENAI, cause: event });\n  }\n  if (\n    code === \"rate_limit_exceeded\" ||\n    msg.toLowerCase().includes(\"rate limit\")\n  ) {\n    return new ProviderRateLimitError(msg, { provider: OPENAI, cause: event });\n  }\n  if (\n    msg.toLowerCase().includes(\"unavailable\") ||\n    msg.toLowerCase().includes(\"503\")\n  ) {\n    return new ProviderUnavailableError(msg, {\n      provider: OPENAI,\n      cause: event,\n    });\n  }\n  return new ProviderResponseError(msg, { provider: OPENAI, cause: event });\n}\n\nexport class ResponseAccumulator {\n  content = \"\";\n  sessionId: string | undefined;\n  conversationId: string | undefined;\n  finishReason: Response[\"finishReason\"] = \"stop\";\n  usage: Usage | undefined;\n  actionsRequired: ActionRequired[] = [];\n  done = false;\n  stepIndex = 0;\n\n  toResponse(): Response {\n    return {\n      content: this.content,\n      sessionId: this.conversationId ?? this.sessionId,\n      finishReason: this.finishReason,\n      usage: this.usage,\n      actionsRequired:\n        this.actionsRequired.length > 0 ? this.actionsRequired : undefined,\n    };\n  }\n}\n\nexport function* mapEvent(\n  event: ResponseStreamEvent,\n  acc: ResponseAccumulator,\n): Generator<StreamPart> {\n  switch (event.type) {\n    case \"response.created\": {\n      acc.sessionId = event.response.id;\n      acc.conversationId = event.response.conversation?.id;\n      yield {\n        type: \"stream-start\",\n        sessionId: acc.conversationId ?? acc.sessionId,\n      };\n      break;\n    }\n    case \"response.in_progress\": {\n      yield { type: \"status-change\", status: \"running\" };\n      yield { type: \"step-start\", stepIndex: acc.stepIndex };\n      break;\n    }\n    case \"response.completed\": {\n      if (event.response.usage) {\n        acc.usage = {\n          inputTokens: event.response.usage.input_tokens,\n          outputTokens: event.response.usage.output_tokens,\n          totalTokens: event.response.usage.total_tokens,\n        };\n      }\n      if (!acc.content) {\n        acc.content = event.response.output_text;\n      }\n      yield { type: \"step-done\", stepIndex: acc.stepIndex };\n      acc.stepIndex++;\n      acc.done = true;\n      break;\n    }\n    case \"response.failed\": {\n      acc.finishReason = \"error\";\n      throw new ThalamusError(\n        event.response.error?.message ?? \"Response failed\",\n        { provider: OPENAI, isRetryable: false },\n      );\n    }\n    case \"response.incomplete\": {\n      acc.finishReason = \"length\";\n      break;\n    }\n\n    case \"response.output_text.delta\": {\n      acc.content += event.delta;\n      yield { type: \"text-delta\", text: event.delta };\n      break;\n    }\n\n    case \"response.refusal.delta\": {\n      acc.finishReason = \"refused\";\n      yield { type: \"refusal\", text: event.delta };\n      break;\n    }\n\n    case \"response.reasoning_summary_text.delta\": {\n      yield { type: \"thinking\", text: event.delta };\n      break;\n    }\n\n    case \"response.output_item.added\": {\n      const e = event as ResponseOutputItemAddedEvent;\n      if (e.item.type === \"function_call\") {\n        yield {\n          type: \"tool-use-start\",\n          toolName: e.item.name,\n          toolUseId: e.item.call_id,\n          source: { type: \"builtin\" },\n        };\n      } else if (e.item.type === \"mcp_call\") {\n        const item = e.item as ResponseOutputItem.McpCall;\n        yield {\n          type: \"tool-use-start\",\n          toolName: item.name,\n          toolUseId: item.id,\n          source: { type: \"mcp\", serverName: item.server_label },\n        };\n      }\n      break;\n    }\n    case \"response.function_call_arguments.delta\": {\n      yield {\n        type: \"tool-use-delta\",\n        toolUseId: event.item_id,\n        argumentsDelta: event.delta,\n      };\n      break;\n    }\n    case \"response.mcp_call_arguments.delta\": {\n      const e = event as ResponseMcpCallArgumentsDeltaEvent;\n      yield {\n        type: \"tool-use-delta\",\n        toolUseId: e.item_id,\n        argumentsDelta: e.delta,\n      };\n      break;\n    }\n    case \"response.output_item.done\": {\n      const e = event as ResponseOutputItemDoneEvent;\n      if (e.item.type === \"function_call\") {\n        yield {\n          type: \"tool-use-done\",\n          toolName: e.item.name,\n          toolUseId: e.item.call_id,\n          input: JSON.parse(e.item.arguments || \"{}\"),\n          source: { type: \"builtin\" },\n        };\n      } else if (e.item.type === \"mcp_list_tools\") {\n        const item = e.item as ResponseOutputItem.McpListTools;\n        yield {\n          type: \"mcp-tools-discovered\",\n          serverName: item.server_label,\n          tools: (item.tools ?? []).map((t) => ({\n            name: t.name,\n            description: t.description ?? undefined,\n            inputSchema: t.input_schema as Record<string, unknown> | undefined,\n          })),\n        };\n      } else if (e.item.type === \"mcp_call\") {\n        const item = e.item as ResponseOutputItem.McpCall;\n        yield {\n          type: \"tool-use-done\",\n          toolName: item.name,\n          toolUseId: item.id,\n          input: JSON.parse(item.arguments || \"{}\"),\n          source: { type: \"mcp\", serverName: item.server_label },\n        };\n        yield {\n          type: \"tool-use-result\",\n          toolUseId: item.id,\n          content: parseOpenAIToolResultOutput(item.output),\n          source: { type: \"mcp\", serverName: item.server_label },\n        };\n      } else if (e.item.type === \"mcp_approval_request\") {\n        const item = e.item as ResponseOutputItem.McpApprovalRequest;\n        acc.finishReason = \"requires-action\";\n        acc.actionsRequired.push({\n          type: \"mcp-approval\",\n          toolUseId: item.id,\n          toolName: item.name,\n          serverName: item.server_label,\n          input: JSON.parse(item.arguments || \"{}\"),\n        });\n      }\n      break;\n    }\n\n    case \"error\": {\n      throw mapStreamErrorEvent(\n        event as { code?: string | null; message?: string },\n      );\n    }\n\n    default: {\n      yield {\n        type: \"provider-event\",\n        provider: OPENAI,\n        event: event.type,\n        data: event as unknown as Record<string, unknown>,\n      };\n      break;\n    }\n  }\n}\n"],"mappings":"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","names":[]}