{"version":3,"sources":["../src/index.ts","../src/durable/cloudflare.ts","../src/errors.ts","../src/send-result.ts","../src/types.ts","../src/vault/local-vault.ts","../src/vault/memory-vault-store.ts","../src/anthropic/anthropic.provider.ts","../src/durable/types.ts","../src/anthropic/anthropic.transformer.ts","../src/anthropic/anthropic.vault.ts","../src/anthropic/tool-result.ts","../src/anthropic/anthropic-parser.ts","../src/openai/openai.provider.ts","../src/openai/openai.transformer.ts","../src/openai/tool-result.ts","../src/openai/openai-parser.ts","../src/openai/sigv4-fetch.ts"],"sourcesContent":["export {\n  type CloudflareBackendOptions,\n  cloudflare,\n} from \"./durable/cloudflare\";\nexport type {\n  EdgeObserveParams,\n  EdgeObserver,\n} from \"./durable/types\";\nexport * from \"./errors\";\nexport * from \"./send-result\";\nexport * from \"./types\";\nexport type {\n  Credential,\n  CredentialInfo,\n  Vault,\n  VaultOptions,\n  VaultStore,\n} from \"./vault/index\";\nexport { createMemoryVaultStore } from \"./vault/index\";\n\nimport { createAnthropicProvider } from \"./anthropic/index\";\nimport { createOpenAIProvider } from \"./openai/index\";\n\nexport const thalamus = {\n  anthropic: createAnthropicProvider,\n  openai: createOpenAIProvider,\n} as const;\n\nexport { createAnthropicProvider, createOpenAIProvider };\n","import type { EdgeObserveParams, EdgeObserver } from \"./types\";\n\nexport interface WebhookConfig {\n  url: string;\n  secret: string;\n}\n\nexport interface CloudflareBackendOptions {\n  url: string;\n  apiKey?: string;\n  webhook: WebhookConfig;\n}\n\nexport interface CloudflareEdgeObserver extends EdgeObserver {\n  readonly webhook: WebhookConfig;\n}\n\nexport function cloudflare(\n  options: CloudflareBackendOptions,\n): CloudflareEdgeObserver {\n  const base = options.url.replace(/\\/+$/, \"\");\n  const headers: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n    ...(options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}),\n  };\n\n  return {\n    webhook: options.webhook,\n\n    async observe(params: EdgeObserveParams) {\n      const res = await fetch(`${base}/observe`, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify(params),\n      });\n      if (!res.ok) {\n        throw new Error(`cloudflare observe failed: ${res.status}`);\n      }\n    },\n\n    async stop(sessionId: string) {\n      const res = await fetch(\n        `${base}/observe/${encodeURIComponent(sessionId)}`,\n        { method: \"DELETE\", headers },\n      );\n      if (!res.ok && res.status !== 404) {\n        throw new Error(`cloudflare stop failed: ${res.status}`);\n      }\n    },\n  };\n}\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 {\n  Response,\n  SendResult,\n  StreamCallbacks,\n  StreamPart,\n} from \"./types\";\n\nexport const CALLBACK_MAP: Record<StreamPart[\"type\"], keyof StreamCallbacks> = {\n  \"text-delta\": \"onTextDelta\",\n  thinking: \"onThinking\",\n  refusal: \"onRefusal\",\n  \"tool-use-start\": \"onToolUseStart\",\n  \"tool-use-delta\": \"onToolUseDelta\",\n  \"tool-use-done\": \"onToolUseDone\",\n  \"tool-use-result\": \"onToolUseResult\",\n  \"mcp-tools-discovered\": \"onMcpToolsDiscovered\",\n  \"step-start\": \"onStepStart\",\n  \"step-done\": \"onStepDone\",\n  \"status-change\": \"onStatusChange\",\n  \"stream-start\": \"onStreamStart\",\n  finish: \"onFinish\",\n  error: \"onError\",\n  \"provider-event\": \"onProviderEvent\",\n};\n\nexport interface SendResultOptions {\n  autoStart?: boolean;\n}\n\nclass SendResultImpl implements SendResult {\n  private _promise: Promise<Response> | null = null;\n  private _sessionIdResolve!: (id: string) => void;\n  private readonly _sessionId: Promise<string>;\n\n  constructor(\n    private readonly source: AsyncIterable<StreamPart>,\n    readonly runId: string,\n    private readonly callbacks?: StreamCallbacks,\n    options?: SendResultOptions,\n  ) {\n    this._sessionId = new Promise<string>((resolve) => {\n      this._sessionIdResolve = resolve;\n    });\n\n    if (options?.autoStart) {\n      this._promise = this.run();\n    }\n  }\n\n  get sessionId(): Promise<string> {\n    this._promise ??= this.run();\n    return this._sessionId;\n  }\n\n  get response(): Promise<Response> {\n    this._promise ??= this.run();\n    return this._promise;\n  }\n\n  // biome-ignore lint/suspicious/noThenProperty: intentional PromiseLike implementation\n  then<TResult1 = Response, TResult2 = never>(\n    onfulfilled?:\n      | ((value: Response) => TResult1 | PromiseLike<TResult1>)\n      | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n  ): Promise<TResult1 | TResult2> {\n    return this.response.then(onfulfilled, onrejected);\n  }\n\n  async text(): Promise<string> {\n    return (await this.response).content;\n  }\n\n  private async run(): Promise<Response> {\n    for await (const part of this.source) {\n      if (part.type === \"stream-start\" && part.sessionId) {\n        this._sessionIdResolve(part.sessionId);\n      }\n      await this.dispatch(part);\n      if (part.type === \"finish\") return part.response;\n      if (part.type === \"error\") throw part.error;\n    }\n    throw new Error(\"Stream ended without a finish event\");\n  }\n\n  private async dispatch(part: StreamPart): Promise<void> {\n    if (!this.callbacks) return;\n    await this.callbacks.onPart?.(part);\n    const key = CALLBACK_MAP[part.type];\n    const cb = this.callbacks[key] as\n      | ((part: StreamPart) => void | Promise<void>)\n      | undefined;\n    if (cb) await cb(part);\n  }\n}\n\nexport function createSendResult(\n  source: AsyncIterable<StreamPart>,\n  runId: string,\n  callbacks?: StreamCallbacks,\n  options?: SendResultOptions,\n): SendResult {\n  return new SendResultImpl(source, runId, callbacks, options);\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 type {\n  Credential,\n  CredentialInfo,\n  Vault,\n  VaultStore,\n} from \"./vault.interface\";\n\nexport class LocalVault implements Vault {\n  readonly id: string;\n  readonly provider: string;\n  private readonly store: VaultStore;\n\n  constructor(id: string, provider: string, store: VaultStore) {\n    this.id = id;\n    this.provider = provider;\n    this.store = store;\n  }\n\n  async add(name: string, credential: Credential): Promise<void> {\n    await this.store.set(this.id, name, credential);\n  }\n\n  async update(name: string, credential: Credential): Promise<void> {\n    await this.store.set(this.id, name, credential);\n  }\n\n  async remove(name: string): Promise<void> {\n    await this.store.remove(this.id, name);\n  }\n\n  async list(): Promise<CredentialInfo[]> {\n    const all = await this.store.getAll(this.id);\n    return all.map((c) => ({\n      name: c.name,\n      type: c.type,\n      status: c.status,\n      expiresAt: c.expiresAt,\n      createdAt: c.createdAt,\n      updatedAt: c.updatedAt,\n    }));\n  }\n\n  async destroy(): Promise<void> {\n    await this.store.removeVault(this.id);\n  }\n}\n","import type {\n  Credential,\n  StoredCredential,\n  VaultOptions,\n  VaultRecord,\n  VaultStore,\n} from \"./vault.interface\";\n\nlet counter = 0;\n\nexport function createMemoryVaultStore(): VaultStore {\n  const vaults = new Map<string, VaultRecord>();\n  const credentials = new Map<string, Map<string, StoredCredential>>();\n\n  return {\n    async createVault(options: VaultOptions): Promise<VaultRecord> {\n      const record: VaultRecord = {\n        id: `vlt_mem_${++counter}`,\n        name: options.name,\n        metadata: options.metadata,\n        createdAt: new Date().toISOString(),\n      };\n      vaults.set(record.id, record);\n      return { ...record };\n    },\n\n    async getVault(vaultId) {\n      const vault = vaults.get(vaultId);\n      return vault ? { ...vault } : null;\n    },\n\n    async updateVaultMetadata(vaultId, metadata) {\n      const vault = vaults.get(vaultId);\n      if (vault) {\n        vault.metadata = { ...vault.metadata, ...metadata };\n      }\n    },\n\n    async removeVault(vaultId) {\n      vaults.delete(vaultId);\n      credentials.delete(vaultId);\n    },\n\n    async set(vaultId, name, credential: Credential) {\n      let vaultCreds = credentials.get(vaultId);\n      if (!vaultCreds) {\n        vaultCreds = new Map();\n        credentials.set(vaultId, vaultCreds);\n      }\n      const now = new Date().toISOString();\n      const stored: StoredCredential = {\n        name,\n        type: credential.type,\n        credential,\n        status: \"active\",\n        expiresAt:\n          credential.type === \"oauth\" ? credential.expiresAt : undefined,\n        createdAt: now,\n        updatedAt: now,\n      };\n      vaultCreds.set(name, stored);\n    },\n\n    async get(vaultId, name) {\n      const stored = credentials.get(vaultId)?.get(name);\n      return stored ? { ...stored } : null;\n    },\n\n    async getAll(vaultId) {\n      const vaultCreds = credentials.get(vaultId);\n      if (!vaultCreds) return [];\n      return [...vaultCreds.values()].map((c) => ({ ...c }));\n    },\n\n    async remove(vaultId, name) {\n      credentials.get(vaultId)?.delete(name);\n    },\n  };\n}\n","import Anthropic, { APIError, APIUserAbortError } from \"@anthropic-ai/sdk\";\nimport type {\n  BetaManagedAgentsEventParams,\n  BetaManagedAgentsStreamSessionEvents,\n  BetaManagedAgentsUserCustomToolResultEventParams,\n  BetaManagedAgentsUserMessageEventParams,\n  BetaManagedAgentsUserToolConfirmationEventParams,\n  EventSendParams,\n} from \"@anthropic-ai/sdk/resources/beta/sessions\";\nimport type { SessionCreateParams } from \"@anthropic-ai/sdk/resources/beta/sessions/sessions\";\nimport type { CloudflareEdgeObserver } from \"../durable/cloudflare\";\nimport {\n  type DurabilityBackend,\n  type DurableBackend,\n  type EdgeObserver,\n  isEdgeObserver,\n  type SessionCheckpoint,\n} from \"../durable/types\";\nimport { AbortedError, SessionExpiredError, ThalamusError } from \"../errors\";\nimport { createSendResult } from \"../send-result\";\nimport {\n  ANTHROPIC,\n  type Provider,\n  type RequestParams,\n  type Response,\n  type SendResult,\n  type SessionEventsFactory,\n  type SessionOptions,\n  type StreamingProvider,\n  type StreamPart,\n  type ToolResult,\n  type WebhookProvider,\n  type WebhookSendResult,\n} from \"../types\";\nimport type { Vault, VaultOptions } from \"../vault/vault.interface\";\nimport { toContentBlocks } from \"./anthropic.transformer\";\nimport { AnthropicVault } from \"./anthropic.vault\";\nimport { mapEvent, ResponseAccumulator } from \"./anthropic-parser\";\nimport { toAnthropicToolResultContent } from \"./tool-result\";\n\nfunction mapStreamError(err: unknown, sessionId?: string): ThalamusError {\n  if (err instanceof APIUserAbortError) {\n    return new AbortedError({ provider: ANTHROPIC, sessionId, cause: err });\n  }\n\n  if (sessionId && err instanceof APIError) {\n    const status = err.status;\n    if (status === 404 || status === 410) {\n      return new SessionExpiredError(\n        `Session ${sessionId} has expired or been archived`,\n        { provider: ANTHROPIC, sessionId, cause: err },\n      );\n    }\n  }\n\n  if (err instanceof ThalamusError) return err;\n\n  return new ThalamusError(String(err), {\n    provider: ANTHROPIC,\n    isRetryable: false,\n    cause: err,\n  });\n}\n\n/**\n * SSE drops manifest as many error types (TypeError, ECONNRESET, socket hang up,\n * proxy timeouts, etc.) that can't be exhaustively listed. We invert the check:\n * only abort and application-level errors are terminal; everything else is\n * treated as a transient transport failure worth retrying.\n */\nfunction isTransientStreamError(err: unknown, signal?: AbortSignal): boolean {\n  if (signal?.aborted) return false;\n  if (err instanceof APIUserAbortError) return false;\n  if (err instanceof ThalamusError) return false;\n  return true;\n}\n\nfunction buildSendEvents(\n  params: RequestParams,\n): BetaManagedAgentsEventParams[] {\n  if (params.toolResults?.length) {\n    return params.toolResults.map(toSessionEvent);\n  }\n\n  const event: BetaManagedAgentsUserMessageEventParams = {\n    type: \"user.message\",\n    content: params.messages.flatMap((msg) => toContentBlocks(msg.content)),\n  };\n  return [event];\n}\n\nfunction toSessionEvent(\n  tr: ToolResult,\n):\n  | BetaManagedAgentsUserToolConfirmationEventParams\n  | BetaManagedAgentsUserCustomToolResultEventParams {\n  if (tr.approved !== undefined) {\n    return {\n      type: \"user.tool_confirmation\" as const,\n      tool_use_id: tr.toolUseId,\n      result: tr.approved ? (\"allow\" as const) : (\"deny\" as const),\n    };\n  }\n  return {\n    type: \"user.custom_tool_result\" as const,\n    custom_tool_use_id: tr.toolUseId,\n    content: toAnthropicToolResultContent(tr.content),\n  };\n}\n\ntype AnthropicDirectConfig = {\n  apiKey: string;\n  awsRegion?: never;\n  awsWorkspaceId?: never;\n};\n\ntype AnthropicAwsApiKeyConfig = {\n  awsRegion: string;\n  awsWorkspaceId?: string;\n  apiKey: string;\n};\n\ntype AnthropicBaseConfig = {\n  agentId: string;\n  environmentId: string;\n  onSessionEvents?: SessionEventsFactory;\n  durable?: DurableBackend;\n};\n\nexport type AnthropicProviderConfig = AnthropicBaseConfig &\n  (AnthropicDirectConfig | AnthropicAwsApiKeyConfig);\n\nasync function createClient(\n  config: AnthropicProviderConfig,\n): Promise<Anthropic> {\n  if (\"awsRegion\" in config) {\n    if (!config.awsRegion?.trim()) {\n      throw new Error(\"AWS Anthropic provider requires a non-empty awsRegion\");\n    }\n\n    if (!config.apiKey?.trim()) {\n      throw new Error(\n        \"AWS Anthropic provider requires apiKey when awsRegion is set\",\n      );\n    }\n\n    const { AnthropicAws } = await import(\"@anthropic-ai/aws-sdk\");\n\n    return new AnthropicAws({\n      awsRegion: config.awsRegion,\n      workspaceId: config.awsWorkspaceId,\n      apiKey: config.apiKey,\n    }) as unknown as Anthropic;\n  }\n\n  return new Anthropic({ apiKey: config.apiKey });\n}\n\nconst MAX_RECONNECT_RETRIES = 3;\n\nclass AnthropicProvider {\n  readonly provider = ANTHROPIC;\n  readonly runtimeId: string;\n\n  private client?: Anthropic;\n  private readonly config: AnthropicProviderConfig;\n  private readonly agentId: string;\n  private readonly environmentId: string;\n\n  constructor(config: AnthropicProviderConfig) {\n    this.config = config;\n    this.agentId = config.agentId;\n    this.environmentId = config.environmentId;\n    this.runtimeId = config.agentId;\n\n    if (\n      config.durable &&\n      config.onSessionEvents &&\n      !isEdgeObserver(config.durable)\n    ) {\n      this.recoverActiveSessions().catch(() => {});\n    }\n  }\n\n  private async getClient(): Promise<Anthropic> {\n    this.client ??= await createClient(this.config);\n    return this.client;\n  }\n\n  send(params: RequestParams): SendResult | Promise<WebhookSendResult> {\n    const runId = crypto.randomUUID();\n    if (this.edgeObserver) {\n      return this.sendViaWebhook(params, runId);\n    }\n    const callbacks = this.config.onSessionEvents\n      ? this.config.onSessionEvents(params.sessionId ?? \"<<pending>>\", runId)\n      : undefined;\n    return createSendResult(this.runStream(params, runId), runId, callbacks, {\n      autoStart: !!this.config.onSessionEvents,\n    });\n  }\n\n  private async sendViaWebhook(\n    params: RequestParams,\n    runId: string,\n  ): Promise<WebhookSendResult> {\n    const client = await this.getClient();\n    const sessionId =\n      params.sessionId ??\n      (await this.createSession({\n        vaultIds: params.vaultIds,\n        providerOptions: params.providerOptions,\n      }));\n    await this.edgeObserve(client, sessionId, runId, params);\n    return { sessionId, runId };\n  }\n\n  private async dispatch(\n    client: Anthropic,\n    sessionId: string,\n    params: RequestParams,\n    signal?: AbortSignal,\n  ): Promise<void> {\n    const events = buildSendEvents(params);\n    const sendParams: EventSendParams = { events };\n    await client.beta.sessions.events.send(sessionId, sendParams, { signal });\n  }\n\n  private async getStatus(\n    client: Anthropic,\n    sessionId: string,\n  ): Promise<string> {\n    const session = await client.beta.sessions.retrieve(sessionId);\n    return session.status;\n  }\n\n  /**\n   * Iterates raw provider events, deduplicates by ID, maps to StreamParts.\n   * Shared by both live SSE and historical catch-up paths.\n   * Optional onEvent callback fires after each new event (used for checkpointing).\n   */\n  private async *consumeEvents(\n    source: AsyncIterable<{ id: string }>,\n    seenIds: Set<string>,\n    acc: ResponseAccumulator,\n    onEvent?: (eventId: string) => Promise<void>,\n  ): AsyncGenerator<StreamPart> {\n    for await (const raw of source) {\n      if (seenIds.has(raw.id)) continue;\n      seenIds.add(raw.id);\n      yield* mapEvent(raw as BetaManagedAgentsStreamSessionEvents, acc);\n      if (onEvent) await onEvent(raw.id);\n      if (acc.done) return;\n    }\n  }\n\n  /**\n   * Wraps SSE observation with auto-reconnect on transient network failures.\n   * Accumulator and seenIds live for the duration of one send() call to\n   * survive TCP resets / proxy timeouts without losing events.\n   *\n   * @param onConnected Called once after the first SSE connection opens.\n   *   Callers pass dispatch() here so events are sent only after SSE is live,\n   *   avoiding the race where dispatch fires before the stream is open.\n   */\n  private async *resilientObserve(\n    client: Anthropic,\n    sessionId: string,\n    runId: string,\n    signal?: AbortSignal,\n    onConnected?: () => Promise<void>,\n    initialSeenIds?: Set<string>,\n  ): AsyncIterable<StreamPart> {\n    const seenIds = initialSeenIds ?? new Set<string>();\n    const acc = new ResponseAccumulator();\n    const backend = this.checkpointBackend;\n    const onEvent = backend\n      ? (eventId: string) =>\n          backend.save({\n            sessionId,\n            provider: \"anthropic\",\n            lastEventId: eventId,\n            createdAt: Date.now(),\n            runId,\n          })\n      : undefined;\n    let retries = 0;\n    let connected = false;\n\n    while (retries <= MAX_RECONNECT_RETRIES) {\n      try {\n        const sseStream = await client.beta.sessions.events.stream(\n          sessionId,\n          undefined,\n          { signal },\n        );\n\n        if (!connected) {\n          if (onConnected) await onConnected();\n          connected = true;\n        } else {\n          try {\n            const missed = await client.beta.sessions.events.list(sessionId);\n            yield* this.consumeEvents(missed, seenIds, acc, onEvent);\n            if (acc.done) {\n              if (backend) await backend.remove(sessionId);\n              yield { type: \"finish\", response: acc.toResponse(sessionId) };\n              return;\n            }\n          } catch {\n            // List failed — still worth tailing SSE\n          }\n        }\n\n        yield* this.consumeEvents(sseStream, seenIds, acc, onEvent);\n        if (backend) await backend.remove(sessionId);\n        yield { type: \"finish\", response: acc.toResponse(sessionId) };\n        return;\n      } catch (err) {\n        if (!isTransientStreamError(err, signal)) throw err;\n\n        retries++;\n        if (retries > MAX_RECONNECT_RETRIES) throw err;\n      }\n    }\n  }\n\n  /**\n   * Recovers sessions that were active before a process restart.\n   * Fires onSessionEvents callbacks for missed events, then resumes live\n   * observation for sessions that are still running.\n   */\n  private async recoverActiveSessions(): Promise<void> {\n    const backend = this.checkpointBackend;\n    const { onSessionEvents } = this.config;\n    if (!backend || !onSessionEvents) return;\n\n    const active = await backend.getActive();\n    const client = await this.getClient();\n\n    await Promise.allSettled(\n      active.map(async (checkpoint) => {\n        try {\n          const status = await this.getStatus(client, checkpoint.sessionId);\n\n          if (status === \"running\" || status === \"idle\") {\n            const { runId } = checkpoint;\n            const callbacks = onSessionEvents(checkpoint.sessionId, runId);\n            const stream = this.recoverStream(\n              client,\n              checkpoint,\n              runId,\n              status === \"running\",\n            );\n            const result = createSendResult(stream, runId, callbacks, {\n              autoStart: true,\n            });\n            result.response.catch(async (err) => {\n              console.error(\n                `[thalamus] recovery stream failed for ${checkpoint.sessionId}:`,\n                err instanceof Error ? err.message : err,\n              );\n              await backend.remove(checkpoint.sessionId).catch(() => {});\n            });\n          } else {\n            await backend.remove(checkpoint.sessionId);\n          }\n        } catch {\n          await backend.remove(checkpoint.sessionId).catch(() => {});\n        }\n      }),\n    );\n  }\n\n  /**\n   * Generates a stream for a recovered session: fetches all historical events,\n   * skips ones already delivered (up to checkpoint.lastEventId), then resumes\n   * live SSE if the session is still running.\n   */\n  private async *recoverStream(\n    client: Anthropic,\n    checkpoint: SessionCheckpoint,\n    runId: string,\n    stillRunning: boolean,\n  ): AsyncIterable<StreamPart> {\n    const { sessionId, lastEventId } = checkpoint;\n    const backend = this.checkpointBackend;\n    const seenIds = new Set<string>();\n    const acc = new ResponseAccumulator();\n    const onEvent = backend\n      ? (eventId: string) =>\n          backend.save({\n            sessionId,\n            provider: \"anthropic\",\n            lastEventId: eventId,\n            createdAt: Date.now(),\n            runId,\n          })\n      : undefined;\n\n    yield { type: \"stream-start\", sessionId };\n\n    const sseStream = stillRunning\n      ? await client.beta.sessions.events.stream(sessionId)\n      : undefined;\n\n    const allEvents = await client.beta.sessions.events.list(sessionId);\n    let pastCheckpoint = false;\n\n    for await (const raw of allEvents) {\n      seenIds.add(raw.id);\n      if (!pastCheckpoint) {\n        if (raw.id === lastEventId) pastCheckpoint = true;\n        continue;\n      }\n      yield* mapEvent(raw as BetaManagedAgentsStreamSessionEvents, acc);\n      if (onEvent) await onEvent(raw.id);\n      if (acc.done) break;\n    }\n\n    if (sseStream && !acc.done) {\n      yield* this.consumeEvents(sseStream, seenIds, acc, onEvent);\n    }\n\n    if (backend) await backend.remove(sessionId);\n    yield { type: \"finish\", response: acc.toResponse(sessionId) };\n  }\n\n  private get edgeObserver(): CloudflareEdgeObserver | null {\n    return this.config.durable && isEdgeObserver(this.config.durable)\n      ? (this.config.durable as CloudflareEdgeObserver)\n      : null;\n  }\n\n  private get checkpointBackend(): DurabilityBackend | null {\n    return this.config.durable && !isEdgeObserver(this.config.durable)\n      ? this.config.durable\n      : null;\n  }\n\n  private async edgeObserve(\n    client: Anthropic,\n    sessionId: string,\n    runId: string,\n    params: RequestParams,\n  ): Promise<void> {\n    const observer = this.edgeObserver!;\n\n    await observer.observe({\n      sessionId,\n      runId,\n      streamUrl: `${client.baseURL}/v1/sessions/${sessionId}/events/stream`,\n      headers: {\n        \"x-api-key\": client.apiKey ?? \"\",\n        \"anthropic-version\": \"2023-06-01\",\n        \"anthropic-beta\": \"managed-agents-2026-04-01\",\n        ...(\"awsRegion\" in this.config && this.config.awsWorkspaceId\n          ? { \"anthropic-workspace-id\": this.config.awsWorkspaceId }\n          : {}),\n      },\n      provider: \"anthropic\",\n      webhook: {\n        ...observer.webhook,\n        metadata: params.webhookMetadata,\n      },\n    });\n\n    await this.dispatch(client, sessionId, params);\n  }\n\n  private async *runStream(\n    params: RequestParams,\n    runId: string,\n  ): AsyncIterable<StreamPart> {\n    try {\n      const client = await this.getClient();\n      const sessionId =\n        params.sessionId ??\n        (await this.createSession({\n          vaultIds: params.vaultIds,\n          providerOptions: params.providerOptions,\n        }));\n\n      yield { type: \"stream-start\", sessionId };\n\n      const signal = params.abortSignal ?? undefined;\n      yield* this.resilientObserve(client, sessionId, runId, signal, () =>\n        this.dispatch(client, sessionId, params, signal),\n      );\n    } catch (err) {\n      const error = mapStreamError(err, params.sessionId);\n      yield { type: \"error\", error };\n    }\n  }\n\n  async createSession(options?: SessionOptions): Promise<string> {\n    const client = await this.getClient();\n    const params: SessionCreateParams = {\n      agent: this.agentId,\n      environment_id: this.environmentId,\n      ...(options?.vaultIds?.length ? { vault_ids: options.vaultIds } : {}),\n      ...options?.providerOptions,\n    };\n    const session = await client.beta.sessions.create(params);\n    return session.id;\n  }\n\n  async endSession(_sessionId: string): Promise<void> {\n    // Anthropic sessions are managed server-side; no explicit teardown needed.\n  }\n\n  async createVault(options: VaultOptions): Promise<Vault> {\n    const client = await this.getClient();\n    const result = await client.beta.vaults.create({\n      display_name: options.name,\n      metadata: options.metadata,\n    });\n    return new AnthropicVault(result.id, client, this.agentId);\n  }\n\n  async getVault(vaultId: string): Promise<Vault> {\n    const client = await this.getClient();\n    await client.beta.vaults.retrieve(vaultId);\n    return new AnthropicVault(vaultId, client, this.agentId);\n  }\n}\n\nexport function createAnthropicProvider(\n  config: AnthropicProviderConfig & { durable: EdgeObserver },\n): WebhookProvider;\nexport function createAnthropicProvider(\n  config: AnthropicProviderConfig,\n): StreamingProvider;\nexport function createAnthropicProvider(\n  config: AnthropicProviderConfig,\n): StreamingProvider | WebhookProvider {\n  return new AnthropicProvider(config) as StreamingProvider | WebhookProvider;\n}\n","export interface SessionCheckpoint {\n  sessionId: string;\n  provider: string;\n  lastEventId: string;\n  createdAt: number;\n  runId: string;\n  metadata?: Record<string, string>;\n}\n\n/** Checkpoint-based durability — stores event cursors in an external store. */\nexport interface DurabilityBackend {\n  save(checkpoint: SessionCheckpoint): Promise<void>;\n  remove(sessionId: string): Promise<void>;\n  getActive(): Promise<SessionCheckpoint[]>;\n}\n\n/* ------------------------------------------------------------------ */\n/*  Edge observer — holds SSE connections at the edge on behalf of     */\n/*  the application (e.g. Cloudflare Durable Objects).                 */\n/* ------------------------------------------------------------------ */\n\nexport interface EdgeObserveParams {\n  sessionId: string;\n  /** Unique identifier for this `send()` invocation. Forwarded in every webhook event. */\n  runId: string;\n  streamUrl: string;\n  headers: Record<string, string>;\n  provider: string;\n  webhook: {\n    url: string;\n    secret: string;\n    metadata?: Record<string, string>;\n  };\n}\n\n/** Edge-proxy durability — SSE lives outside the consumer process, events delivered via webhook. */\nexport interface EdgeObserver {\n  observe(params: EdgeObserveParams): Promise<void>;\n  stop(sessionId: string): Promise<void>;\n}\n\n/* ------------------------------------------------------------------ */\n/*  Unified type                                                       */\n/* ------------------------------------------------------------------ */\n\nexport type DurableBackend = DurabilityBackend | EdgeObserver;\n\nexport function isEdgeObserver(\n  backend: DurableBackend,\n): backend is EdgeObserver {\n  return \"observe\" in backend && \"stop\" in backend && !(\"save\" in backend);\n}\n","import type {\n  BetaManagedAgentsDocumentBlock,\n  BetaManagedAgentsImageBlock,\n  BetaManagedAgentsTextBlock,\n} from \"@anthropic-ai/sdk/resources/beta/sessions\";\nimport type { Message } from \"../types\";\n\ntype ContentBlock =\n  | BetaManagedAgentsTextBlock\n  | BetaManagedAgentsImageBlock\n  | BetaManagedAgentsDocumentBlock;\n\n/**\n * Converts a Message's content to Anthropic content blocks.\n */\nexport function toContentBlocks(content: Message[\"content\"]): ContentBlock[] {\n  if (typeof content === \"string\") {\n    return [{ type: \"text\", text: content }];\n  }\n\n  const blocks: ContentBlock[] = [];\n  for (const part of content) {\n    switch (part.type) {\n      case \"text\":\n        blocks.push({ type: \"text\", text: part.text });\n        break;\n      case \"image\":\n        blocks.push({\n          type: \"image\",\n          source: {\n            type: \"base64\",\n            media_type: part.mediaType,\n            data: part.data,\n          },\n        });\n        break;\n      case \"image-url\":\n        blocks.push({ type: \"image\", source: { type: \"url\", url: part.url } });\n        break;\n      case \"file\":\n        blocks.push({\n          type: \"document\",\n          source: {\n            type: \"base64\",\n            media_type: part.mediaType,\n            data: part.data,\n          },\n          title: part.name ?? null,\n        });\n        break;\n    }\n  }\n\n  return blocks;\n}\n","import type Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n  BetaManagedAgentsCredential,\n  BetaManagedAgentsMCPOAuthCreateParams,\n  BetaManagedAgentsStaticBearerCreateParams,\n  CredentialCreateParams,\n} from \"@anthropic-ai/sdk/resources/beta/vaults/credentials\";\nimport { ANTHROPIC } from \"../types\";\nimport type {\n  Credential,\n  CredentialInfo,\n  Vault,\n} from \"../vault/vault.interface\";\n\nexport class AnthropicVault implements Vault {\n  readonly id: string;\n  readonly provider = ANTHROPIC;\n\n  private readonly client: Anthropic;\n  private readonly agentId: string;\n\n  constructor(id: string, client: Anthropic, agentId: string) {\n    this.id = id;\n    this.client = client;\n    this.agentId = agentId;\n  }\n\n  private async resolveMcpServerUrl(name: string): Promise<string> {\n    const agent = await this.client.beta.agents.retrieve(this.agentId);\n    const server = (agent.mcp_servers ?? []).find((s) => s.name === name);\n    if (!server) {\n      const available = (agent.mcp_servers ?? []).map((s) => s.name).join(\", \");\n      throw new Error(\n        `No MCP server named \"${name}\" on agent ${this.agentId}. Available: ${available}`,\n      );\n    }\n    return server.url;\n  }\n\n  private toAuth(\n    serverUrl: string,\n    credential: Credential,\n  ): CredentialCreateParams[\"auth\"] {\n    if (credential.type === \"bearer\") {\n      const auth: BetaManagedAgentsStaticBearerCreateParams = {\n        type: \"static_bearer\",\n        mcp_server_url: serverUrl,\n        token: credential.token,\n      };\n      return auth;\n    }\n\n    const auth: BetaManagedAgentsMCPOAuthCreateParams = {\n      type: \"mcp_oauth\",\n      mcp_server_url: serverUrl,\n      access_token: credential.accessToken,\n      ...(credential.expiresAt ? { expires_at: credential.expiresAt } : {}),\n      ...(credential.refresh && {\n        refresh: {\n          refresh_token: credential.refresh.refreshToken,\n          token_endpoint: credential.refresh.tokenEndpoint,\n          client_id: credential.refresh.clientId,\n          token_endpoint_auth: credential.refresh.clientSecret\n            ? {\n                type: \"client_secret_basic\" as const,\n                client_secret: credential.refresh.clientSecret,\n              }\n            : { type: \"none\" as const },\n          scope: credential.refresh.scopes,\n        },\n      }),\n    };\n    return auth;\n  }\n\n  async add(name: string, credential: Credential): Promise<void> {\n    const url = await this.resolveMcpServerUrl(name);\n    await this.client.beta.vaults.credentials.create(this.id, {\n      display_name: name,\n      auth: this.toAuth(url, credential),\n    });\n  }\n\n  async update(name: string, credential: Credential): Promise<void> {\n    await this.remove(name);\n    await this.add(name, credential);\n  }\n\n  async remove(name: string): Promise<void> {\n    const creds: BetaManagedAgentsCredential[] = [];\n    for await (const c of this.client.beta.vaults.credentials.list(this.id)) {\n      creds.push(c);\n    }\n    const match = creds.find((c) => c.display_name === name);\n    if (!match) {\n      throw new Error(`Credential \"${name}\" not found in vault ${this.id}`);\n    }\n    await this.client.beta.vaults.credentials.delete(match.id, {\n      vault_id: this.id,\n    });\n  }\n\n  async list(): Promise<CredentialInfo[]> {\n    const result: CredentialInfo[] = [];\n    for await (const c of this.client.beta.vaults.credentials.list(this.id)) {\n      result.push({\n        name: c.display_name ?? \"\",\n        type: c.auth?.type === \"static_bearer\" ? \"bearer\" : \"oauth\",\n        status: \"active\" as const,\n        createdAt: c.created_at,\n        updatedAt: c.updated_at,\n      });\n    }\n    return result;\n  }\n\n  async destroy(): Promise<void> {\n    await this.client.beta.vaults.delete(this.id);\n  }\n}\n","import type {\n  BetaManagedAgentsAgentMCPToolResultEvent,\n  BetaManagedAgentsAgentToolResultEvent,\n  BetaManagedAgentsDocumentBlock,\n  BetaManagedAgentsImageBlock,\n  BetaManagedAgentsTextBlock,\n} from \"@anthropic-ai/sdk/resources/beta/sessions\";\nimport type { ToolResultContent } from \"../types\";\n\n/** Content block on `agent.tool_result` / `agent.mcp_tool_result` (SDK 0.98+). */\nexport type AnthropicToolResultContentBlock = NonNullable<\n  BetaManagedAgentsAgentToolResultEvent[\"content\"]\n>[number];\n\nfunction mapImageBlock(block: BetaManagedAgentsImageBlock): ToolResultContent {\n  const { source } = block;\n  if (source.type === \"base64\") {\n    return {\n      type: \"media\",\n      mediaType: source.media_type,\n      data: source.data,\n    };\n  }\n  if (source.type === \"url\") {\n    return {\n      type: \"media\",\n      mediaType: \"image/*\",\n      data: source.url,\n      name: source.url,\n    };\n  }\n  return {\n    type: \"unknown\",\n    providerType: \"image\",\n    data: block as unknown as Record<string, unknown>,\n  };\n}\n\nfunction mapDocumentBlock(\n  block: BetaManagedAgentsDocumentBlock,\n): ToolResultContent {\n  const { source } = block;\n  if (source.type === \"base64\") {\n    return {\n      type: \"media\",\n      mediaType: source.media_type,\n      data: source.data,\n      name: block.title ?? undefined,\n    };\n  }\n  if (source.type === \"text\") {\n    return { type: \"text\", text: source.data };\n  }\n  if (source.type === \"url\") {\n    return {\n      type: \"media\",\n      mediaType: \"application/octet-stream\",\n      data: source.url,\n      name: block.title ?? source.url,\n    };\n  }\n  return {\n    type: \"unknown\",\n    providerType: \"document\",\n    data: block as unknown as Record<string, unknown>,\n  };\n}\n\nexport function parseAnthropicToolResultContent(\n  blocks: readonly AnthropicToolResultContentBlock[] | null | undefined,\n): ToolResultContent[] {\n  if (!blocks?.length) return [];\n\n  return blocks.flatMap((block): ToolResultContent[] => {\n    switch (block.type) {\n      case \"text\":\n        return [{ type: \"text\", text: block.text }];\n      case \"search_result\": {\n        const excerpts = block.content.map((c) => c.text).filter(Boolean);\n        return [\n          {\n            type: \"citation\",\n            url: block.source,\n            title: block.title,\n            excerpts: excerpts.length > 0 ? excerpts : undefined,\n          },\n        ];\n      }\n      case \"image\":\n        return [mapImageBlock(block)];\n      case \"document\":\n        return [mapDocumentBlock(block)];\n      default:\n        return [\n          {\n            type: \"unknown\",\n            providerType: (block as { type: string }).type,\n            data: block as unknown as Record<string, unknown>,\n          },\n        ];\n    }\n  });\n}\n\nexport function toolResultFromAgentToolResultEvent(\n  event: Pick<\n    BetaManagedAgentsAgentToolResultEvent,\n    \"content\" | \"is_error\" | \"tool_use_id\"\n  >,\n): { content: ToolResultContent[]; isError?: boolean } {\n  return {\n    content: parseAnthropicToolResultContent(event.content),\n    isError: event.is_error ? true : undefined,\n  };\n}\n\nexport function toolResultFromMcpToolResultEvent(\n  event: Pick<\n    BetaManagedAgentsAgentMCPToolResultEvent,\n    \"content\" | \"is_error\" | \"mcp_tool_use_id\"\n  >,\n): { content: ToolResultContent[]; isError?: boolean } {\n  return {\n    content: parseAnthropicToolResultContent(event.content),\n    isError: event.is_error ? true : undefined,\n  };\n}\n\n/** Thalamus {@link ToolResultContent} → plain string for provider APIs that only accept text. */\nexport function flattenToolResultText(content: ToolResultContent[]): string {\n  const parts: string[] = [];\n  for (const block of content) {\n    switch (block.type) {\n      case \"text\":\n        if (block.text) parts.push(block.text);\n        break;\n      case \"citation\": {\n        const head = block.title\n          ? block.url\n            ? `[${block.title}](${block.url})`\n            : block.title\n          : block.url;\n        const excerpt = block.excerpts?.[0];\n        parts.push(excerpt ? `${head}: ${excerpt}` : head);\n        break;\n      }\n      case \"json\":\n        parts.push(JSON.stringify(block.value));\n        break;\n      case \"media\":\n        parts.push(block.name ?? `[${block.mediaType}]`);\n        break;\n      case \"unknown\":\n        parts.push(JSON.stringify(block.data));\n        break;\n    }\n  }\n  return parts.join(\"\\n\\n\");\n}\n\n/** Map unified content back for `user.custom_tool_result`. */\nexport function toAnthropicToolResultContent(\n  content: ToolResultContent[],\n): BetaManagedAgentsTextBlock[] {\n  return [{ type: \"text\", text: flattenToolResultText(content) }];\n}\n","import type {\n  BetaManagedAgentsAgentCustomToolUseEvent,\n  BetaManagedAgentsAgentMCPToolResultEvent,\n  BetaManagedAgentsAgentMCPToolUseEvent,\n  BetaManagedAgentsAgentMessageEvent,\n  BetaManagedAgentsAgentToolResultEvent,\n  BetaManagedAgentsAgentToolUseEvent,\n  BetaManagedAgentsSessionErrorEvent,\n  BetaManagedAgentsSessionStatusIdleEvent,\n  BetaManagedAgentsSpanModelRequestEndEvent,\n  BetaManagedAgentsStreamSessionEvents,\n} from \"@anthropic-ai/sdk/resources/beta/sessions\";\nimport { ThalamusError } from \"../errors\";\nimport {\n  type ActionRequired,\n  ANTHROPIC,\n  type Response,\n  type StreamPart,\n  type Usage,\n} from \"../types\";\nimport {\n  toolResultFromAgentToolResultEvent,\n  toolResultFromMcpToolResultEvent,\n} from \"./tool-result\";\n\ntype StopReason = BetaManagedAgentsSessionStatusIdleEvent[\"stop_reason\"];\n\nexport function mapStopReason(reason: StopReason): Response[\"finishReason\"] {\n  switch (reason.type) {\n    case \"end_turn\":\n      return \"stop\";\n    case \"requires_action\":\n      return \"requires-action\";\n    case \"retries_exhausted\":\n      return \"error\";\n    default:\n      return \"other\";\n  }\n}\n\nexport function mapSessionError(raw: unknown): ThalamusError {\n  const obj = raw as { message?: string; type?: string } | null;\n  const msg = obj?.message ?? String(raw);\n  const isAuth = obj?.type === \"authentication_error\";\n  return new ThalamusError(msg, { provider: ANTHROPIC, isRetryable: !isAuth });\n}\n\nexport class ResponseAccumulator {\n  content = \"\";\n  finishReason: Response[\"finishReason\"] = \"stop\";\n  usage: Usage | undefined;\n  actionsRequired: ActionRequired[] = [];\n  done = false;\n  stepIndex = 0;\n  /** `agent.mcp_tool_use.id` → `mcp_server_name` for later `agent.mcp_tool_result`. */\n  mcpServerByToolUseId = new Map<string, string>();\n\n  toResponse(sessionId: string): Response {\n    return {\n      content: this.content,\n      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: BetaManagedAgentsStreamSessionEvents,\n  acc: ResponseAccumulator,\n): Generator<StreamPart> {\n  switch (event.type) {\n    case \"agent.message\": {\n      const e = event as BetaManagedAgentsAgentMessageEvent;\n      for (const block of e.content) {\n        if (block.type === \"text\") {\n          acc.content += block.text;\n          yield { type: \"text-delta\", text: block.text };\n        }\n      }\n      break;\n    }\n\n    case \"agent.thinking\": {\n      yield { type: \"thinking\", text: \"\" };\n      break;\n    }\n\n    case \"agent.tool_use\": {\n      const e = event as BetaManagedAgentsAgentToolUseEvent;\n      yield {\n        type: \"tool-use-start\",\n        toolName: e.name,\n        toolUseId: e.id,\n        source: { type: \"builtin\" },\n      };\n      yield {\n        type: \"tool-use-done\",\n        toolName: e.name,\n        toolUseId: e.id,\n        input: e.input,\n        source: { type: \"builtin\" },\n      };\n      break;\n    }\n    case \"agent.tool_result\": {\n      const e = event as BetaManagedAgentsAgentToolResultEvent;\n      const result = toolResultFromAgentToolResultEvent(e);\n      yield {\n        type: \"tool-use-result\",\n        toolUseId: e.tool_use_id,\n        content: result.content,\n        isError: result.isError,\n        source: { type: \"builtin\" },\n      };\n      break;\n    }\n    case \"agent.mcp_tool_use\": {\n      const e = event as BetaManagedAgentsAgentMCPToolUseEvent;\n      acc.mcpServerByToolUseId.set(e.id, e.mcp_server_name ?? \"\");\n      yield {\n        type: \"tool-use-start\",\n        toolName: e.name,\n        toolUseId: e.id,\n        source: {\n          type: \"mcp\",\n          serverName: e.mcp_server_name ?? \"\",\n        },\n      };\n      yield {\n        type: \"tool-use-done\",\n        toolName: e.name,\n        toolUseId: e.id,\n        input: e.input,\n        source: {\n          type: \"mcp\",\n          serverName: e.mcp_server_name ?? \"\",\n        },\n      };\n      break;\n    }\n    case \"agent.mcp_tool_result\": {\n      const e = event as BetaManagedAgentsAgentMCPToolResultEvent;\n      const result = toolResultFromMcpToolResultEvent(e);\n      const serverName = acc.mcpServerByToolUseId.get(e.mcp_tool_use_id) ?? \"\";\n      yield {\n        type: \"tool-use-result\",\n        toolUseId: e.mcp_tool_use_id,\n        content: result.content,\n        isError: result.isError,\n        source: { type: \"mcp\", serverName },\n      };\n      break;\n    }\n    case \"agent.custom_tool_use\": {\n      const e = event as BetaManagedAgentsAgentCustomToolUseEvent;\n      acc.actionsRequired.push({\n        type: \"tool-confirmation\",\n        toolUseId: e.id,\n        toolName: e.name,\n        input: e.input as Record<string, unknown>,\n      });\n      acc.finishReason = \"requires-action\";\n      break;\n    }\n\n    case \"session.status_running\": {\n      yield { type: \"status-change\", status: \"running\" };\n      break;\n    }\n    case \"session.status_rescheduled\": {\n      yield { type: \"status-change\", status: \"retrying\" };\n      break;\n    }\n    case \"session.status_idle\": {\n      const e = event as BetaManagedAgentsSessionStatusIdleEvent;\n      yield { type: \"status-change\", status: \"idle\" };\n      acc.finishReason = mapStopReason(e.stop_reason);\n      acc.done = true;\n      break;\n    }\n    case \"session.status_terminated\": {\n      throw new ThalamusError(\"Session terminated\", {\n        provider: ANTHROPIC,\n        isRetryable: false,\n      });\n    }\n\n    case \"session.error\": {\n      const e = event as BetaManagedAgentsSessionErrorEvent;\n      throw mapSessionError(e.error);\n    }\n\n    case \"span.model_request_start\": {\n      yield { type: \"step-start\", stepIndex: acc.stepIndex };\n      break;\n    }\n    case \"span.model_request_end\": {\n      const e = event as BetaManagedAgentsSpanModelRequestEndEvent;\n      if (e.model_usage) {\n        acc.usage = {\n          inputTokens:\n            (acc.usage?.inputTokens ?? 0) + e.model_usage.input_tokens,\n          outputTokens:\n            (acc.usage?.outputTokens ?? 0) + e.model_usage.output_tokens,\n          totalTokens:\n            (acc.usage?.totalTokens ?? 0) +\n            e.model_usage.input_tokens +\n            e.model_usage.output_tokens,\n        };\n      }\n      yield { type: \"step-done\", stepIndex: acc.stepIndex };\n      acc.stepIndex++;\n      break;\n    }\n\n    default: {\n      yield {\n        type: \"provider-event\",\n        provider: ANTHROPIC,\n        event: event.type,\n        data: event as unknown as Record<string, unknown>,\n      };\n      break;\n    }\n  }\n}\n","import OpenAI, { APIError, APIUserAbortError } from \"openai\";\nimport type {\n  ResponseCreateParamsStreaming,\n  ResponseInput,\n  ResponseStreamEvent,\n} from \"openai/resources/responses/responses\";\nimport type { CloudflareEdgeObserver } from \"../durable/cloudflare\";\nimport {\n  type DurabilityBackend,\n  type DurableBackend,\n  type EdgeObserver,\n  isEdgeObserver,\n  type SessionCheckpoint,\n} from \"../durable/types\";\nimport {\n  AbortedError,\n  ProviderAuthError,\n  ProviderRateLimitError,\n  ProviderResponseError,\n  ProviderUnavailableError,\n  ThalamusError,\n} from \"../errors\";\nimport { createSendResult } from \"../send-result\";\nimport {\n  type McpServerConfig,\n  OPENAI,\n  type Provider,\n  type RequestParams,\n  type Response,\n  type SendResult,\n  type SessionEventsFactory,\n  type SessionOptions,\n  type StreamingProvider,\n  type StreamPart,\n  type WebhookProvider,\n  type WebhookSendResult,\n} from \"../types\";\nimport { LocalVault } from \"../vault/local-vault\";\nimport type {\n  Credential,\n  Vault,\n  VaultOptions,\n  VaultStore,\n} from \"../vault/vault.interface\";\nimport { openaiTransformer } from \"./openai.transformer\";\nimport { mapEvent, ResponseAccumulator } from \"./openai-parser\";\nimport { createSigV4Fetch } from \"./sigv4-fetch\";\nimport { toOpenAIToolResultOutput } from \"./tool-result\";\n\nexport function mapError(error: unknown, provider: string): Error {\n  if (error instanceof APIUserAbortError) {\n    return new AbortedError({ provider, cause: error });\n  }\n\n  const msg = error instanceof Error ? error.message : String(error);\n  const code = error instanceof APIError ? (error.code ?? \"\") : \"\";\n  if (\n    code === \"invalid_api_key\" ||\n    msg.toLowerCase().includes(\"unauthorized\")\n  ) {\n    return new ProviderAuthError(msg, { provider, cause: error });\n  }\n  if (\n    code === \"rate_limit_exceeded\" ||\n    msg.toLowerCase().includes(\"rate limit\")\n  ) {\n    return new ProviderRateLimitError(msg, { provider, cause: error });\n  }\n  if (\n    msg.toLowerCase().includes(\"unavailable\") ||\n    msg.toLowerCase().includes(\"503\")\n  ) {\n    return new ProviderUnavailableError(msg, { provider, cause: error });\n  }\n  return new ProviderResponseError(msg, { provider, cause: error });\n}\n\n/**\n * SSE drops manifest as many error types (TypeError, ECONNRESET, socket hang up,\n * proxy timeouts, etc.) that can't be exhaustively listed. We invert the check:\n * only abort, application-level, and permanent API errors are terminal;\n * everything else is treated as a transient transport failure worth retrying.\n */\nfunction isTransientStreamError(err: unknown, signal?: AbortSignal): boolean {\n  if (signal?.aborted) return false;\n  if (err instanceof APIUserAbortError) return false;\n  if (err instanceof ThalamusError) return false;\n  if (err instanceof APIError && err.status >= 400 && err.status < 500) {\n    return false;\n  }\n  return true;\n}\n\ntype OpenAIDirectConfig = {\n  apiKey: string;\n  awsRegion?: never;\n  awsBedrockApiKey?: never;\n  awsCredentials?: never;\n};\n\ntype OpenAIBedrockApiKeyConfig = {\n  awsRegion: string;\n  awsBedrockApiKey: string;\n  apiKey?: never;\n  awsCredentials?: never;\n};\n\ntype OpenAIBedrockSigV4Config = {\n  awsRegion: string;\n  awsCredentials: {\n    accessKeyId: string;\n    secretAccessKey: string;\n    sessionToken?: string;\n  };\n  apiKey?: never;\n  awsBedrockApiKey?: never;\n};\n\ntype OpenAIBaseConfig = {\n  model?: string;\n  promptId?: string;\n  instructions?: string;\n  mcpServers?: McpServerConfig[];\n  vaultStore?: VaultStore;\n  onSessionEvents?: SessionEventsFactory;\n  durable?: DurableBackend;\n};\n\nfunction mapApprovalPolicy(policy: McpServerConfig[\"approvalPolicy\"]): unknown {\n  if (!policy || typeof policy === \"string\") return policy;\n  return { never: { tool_names: policy.except } };\n}\n\n// OpenAI SDK (v6.37) doesn't export MCP tool types yet — using untyped records\n// matching the wire format from https://developers.openai.com/docs/guides/tools-connectors-mcp\nfunction toMcpTools(\n  servers: McpServerConfig[],\n  credentials?: Map<string, Credential>,\n): Record<string, unknown>[] {\n  return servers.map((server) => {\n    const tool: Record<string, unknown> = {\n      type: \"mcp\",\n      server_label: server.name,\n      server_url: server.url,\n    };\n\n    // Vault credential takes priority over static server.authorization\n    const cred = credentials?.get(server.name);\n    if (cred) {\n      tool.authorization =\n        cred.type === \"bearer\" ? cred.token : cred.accessToken;\n    } else if (server.authorization) {\n      tool.authorization = server.authorization;\n    }\n\n    if (server.allowedTools) {\n      tool.allowed_tools = server.allowedTools;\n    }\n    if (server.approvalPolicy) {\n      tool.require_approval = mapApprovalPolicy(server.approvalPolicy);\n    }\n    return tool;\n  });\n}\n\nconst MAX_RECONNECT_RETRIES = 3;\n\nexport type OpenAIProviderConfig = OpenAIBaseConfig &\n  (OpenAIDirectConfig | OpenAIBedrockApiKeyConfig | OpenAIBedrockSigV4Config);\n\nfunction buildOpenAIClient(config: OpenAIProviderConfig): OpenAI {\n  if (!(\"awsRegion\" in config) || !config.awsRegion) {\n    return new OpenAI({ apiKey: config.apiKey });\n  }\n\n  const baseURL = `https://bedrock-mantle.${config.awsRegion}.api.aws/v1`;\n\n  if (\"awsBedrockApiKey\" in config && config.awsBedrockApiKey) {\n    return new OpenAI({ baseURL, apiKey: config.awsBedrockApiKey });\n  }\n\n  if (\"awsCredentials\" in config && config.awsCredentials) {\n    return new OpenAI({\n      baseURL,\n      apiKey: \"bedrock-sigv4\",\n      fetch: createSigV4Fetch({\n        region: config.awsRegion,\n        credentials: config.awsCredentials,\n      }),\n    });\n  }\n\n  return new OpenAI({ baseURL, apiKey: \"bedrock\" });\n}\n\nclass OpenAIProvider {\n  readonly provider = OPENAI;\n  readonly runtimeId: string;\n\n  private readonly client: OpenAI;\n  private readonly model: string;\n  private readonly instructions?: string;\n  private readonly useConversations: boolean;\n  private readonly mcpServers: McpServerConfig[];\n  private readonly vaultStore?: VaultStore;\n  private readonly onSessionEvents?: SessionEventsFactory;\n  private readonly config: OpenAIProviderConfig;\n\n  private get edgeObserver(): CloudflareEdgeObserver | null {\n    return this.config.durable && isEdgeObserver(this.config.durable)\n      ? (this.config.durable as CloudflareEdgeObserver)\n      : null;\n  }\n\n  private get checkpointBackend(): DurabilityBackend | null {\n    return this.config.durable && !isEdgeObserver(this.config.durable)\n      ? this.config.durable\n      : null;\n  }\n\n  constructor(config: OpenAIProviderConfig) {\n    this.config = config;\n    this.runtimeId = config.promptId ?? \"inline\";\n    this.model = config.model ?? \"gpt-4o\";\n    this.instructions = config.instructions;\n    this.client = buildOpenAIClient(config);\n    this.useConversations = !(\"awsRegion\" in config && config.awsRegion);\n    this.mcpServers = config.mcpServers ?? [];\n    this.vaultStore = config.vaultStore;\n    this.onSessionEvents = config.onSessionEvents;\n\n    if (\n      config.durable &&\n      config.onSessionEvents &&\n      !isEdgeObserver(config.durable)\n    ) {\n      this.recoverActiveSessions().catch(() => {});\n    }\n  }\n\n  send(params: RequestParams): SendResult | Promise<WebhookSendResult> {\n    const runId = crypto.randomUUID();\n    if (this.edgeObserver) {\n      return this.sendViaWebhook(params, runId);\n    }\n    const callbacks = this.onSessionEvents\n      ? this.onSessionEvents(params.sessionId ?? \"<<pending>>\", runId)\n      : undefined;\n    return createSendResult(this.runStream(params, runId), runId, callbacks, {\n      autoStart: !!this.onSessionEvents,\n    });\n  }\n\n  private async sendViaWebhook(\n    params: RequestParams,\n    runId: string,\n  ): Promise<WebhookSendResult> {\n    const sessionParams = await this.resolveSessionParams(params.sessionId);\n    const credentials = params.vaultIds?.length\n      ? await this.resolveCredentials(params.vaultIds)\n      : undefined;\n    const mcpTools =\n      this.mcpServers.length > 0\n        ? toMcpTools(this.mcpServers, credentials)\n        : undefined;\n    const sessionId = await this.edgeObserve(\n      params,\n      runId,\n      sessionParams,\n      mcpTools,\n    );\n    return { sessionId, runId };\n  }\n\n  private async resolveSessionParams(\n    sessionId?: string,\n  ): Promise<Record<string, unknown>> {\n    if (this.useConversations) {\n      const id = sessionId ?? (await this.client.conversations.create()).id;\n      return { conversation: { id } };\n    }\n    return sessionId ? { previous_response_id: sessionId } : {};\n  }\n\n  private buildInput(params: RequestParams): ResponseInput {\n    let input: ResponseInput = openaiTransformer.toInput(\n      params.messages,\n    ) as ResponseInput;\n\n    if (params.toolResults?.length) {\n      const toolInputs: ResponseInput = params.toolResults.map((tr) => {\n        if (tr.approved !== undefined) {\n          return {\n            type: \"mcp_approval_response\" as const,\n            approval_request_id: tr.toolUseId,\n            approve: tr.approved,\n          };\n        }\n        return {\n          type: \"function_call_output\" as const,\n          call_id: tr.toolUseId,\n          output: toOpenAIToolResultOutput(tr.content),\n        };\n      });\n      input = [...toolInputs, ...input];\n    }\n\n    return input;\n  }\n\n  private async *dispatchAndObserve(\n    params: RequestParams,\n    sessionParams: Record<string, unknown>,\n    mcpTools: Record<string, unknown>[] | undefined,\n    signal?: AbortSignal,\n  ): AsyncIterable<StreamPart> {\n    const input = this.buildInput(params);\n\n    const rawStream = await this.client.responses.create(\n      {\n        model: this.model,\n        input,\n        stream: true,\n        ...(this.instructions ? { instructions: this.instructions } : {}),\n        ...(mcpTools ? { tools: mcpTools } : {}),\n        ...sessionParams,\n        ...params.providerOptions,\n      } as ResponseCreateParamsStreaming,\n      { signal },\n    );\n\n    const acc = new ResponseAccumulator();\n    for await (const rawEvent of rawStream) {\n      yield* mapEvent(rawEvent, acc);\n    }\n\n    const response = acc.toResponse();\n    yield { type: \"finish\", response };\n  }\n\n  private async *resumeObservation(\n    responseId: string,\n    afterSequenceNumber: number,\n    signal?: AbortSignal,\n  ): AsyncIterable<ResponseStreamEvent> {\n    const rawStream = (await this.client.responses.retrieve(\n      responseId,\n      {\n        stream: true as const,\n        ...(afterSequenceNumber >= 0\n          ? { starting_after: afterSequenceNumber }\n          : {}),\n      },\n      { signal },\n    )) as AsyncIterable<ResponseStreamEvent>;\n\n    yield* rawStream;\n  }\n\n  private async getStatus(responseId: string): Promise<string | undefined> {\n    const response = await this.client.responses.retrieve(responseId);\n    return response.status;\n  }\n\n  /**\n   * Wraps dispatch+observe with auto-reconnect on transient network failures.\n   * OpenAI combines dispatch and observe in a single responses.create() call,\n   * so the first attempt dispatches; retries resume via responses.retrieve()\n   * with starting_after (cursor-based, no event duplication from the API).\n   *\n   * Dedup by sequence_number guards against overlapping events if the API\n   * sends a partial replay on resume.\n   */\n  private async *resilientDispatchAndObserve(\n    params: RequestParams,\n    runId: string,\n    sessionParams: Record<string, unknown>,\n    mcpTools: Record<string, unknown>[] | undefined,\n    signal?: AbortSignal,\n  ): AsyncIterable<StreamPart> {\n    const acc = new ResponseAccumulator();\n    const backend = this.checkpointBackend;\n    const input = this.buildInput(params);\n    let lastSequenceNumber = -1;\n    let responseId: string | undefined;\n    let retries = 0;\n\n    const createParams = {\n      model: this.model,\n      input,\n      ...(this.instructions ? { instructions: this.instructions } : {}),\n      ...(mcpTools ? { tools: mcpTools } : {}),\n      ...sessionParams,\n      ...params.providerOptions,\n    };\n\n    while (retries <= MAX_RECONNECT_RETRIES) {\n      try {\n        let rawStream: AsyncIterable<ResponseStreamEvent>;\n\n        if (responseId) {\n          rawStream = this.resumeObservation(\n            responseId,\n            lastSequenceNumber,\n            signal,\n          );\n        } else {\n          rawStream = await this.client.responses.create(\n            {\n              ...createParams,\n              stream: true,\n              ...(backend ? { background: true } : {}),\n            } as ResponseCreateParamsStreaming,\n            { signal },\n          );\n        }\n\n        for await (const rawEvent of rawStream) {\n          if (\n            \"sequence_number\" in rawEvent &&\n            typeof rawEvent.sequence_number === \"number\"\n          ) {\n            if (rawEvent.sequence_number <= lastSequenceNumber) continue;\n            lastSequenceNumber = rawEvent.sequence_number;\n          }\n          if (rawEvent.type === \"response.created\") {\n            responseId = rawEvent.response.id;\n          }\n          yield* mapEvent(rawEvent, acc);\n          if (backend && responseId) {\n            await backend.save({\n              sessionId: acc.sessionId ?? responseId,\n              provider: \"openai\",\n              lastEventId: String(lastSequenceNumber),\n              createdAt: Date.now(),\n              runId,\n              metadata: { responseId },\n            });\n          }\n        }\n\n        if (backend && responseId) {\n          await backend.remove(acc.sessionId ?? responseId);\n        }\n        yield { type: \"finish\", response: acc.toResponse() };\n        return;\n      } catch (err) {\n        if (!isTransientStreamError(err, signal)) throw err;\n        if (!responseId) throw err;\n\n        retries++;\n        if (retries > MAX_RECONNECT_RETRIES) throw err;\n      }\n    }\n  }\n\n  /**\n   * Recovers sessions that were active before a process restart.\n   * Fires onSessionEvents callbacks for missed events, then resumes live\n   * observation for sessions that are still running.\n   */\n  private async recoverActiveSessions(): Promise<void> {\n    const backend = this.checkpointBackend;\n    const { onSessionEvents } = this.config;\n    if (!backend || !onSessionEvents) return;\n\n    const active = await backend.getActive();\n\n    await Promise.allSettled(\n      active.map(async (checkpoint) => {\n        const responseId = checkpoint.metadata?.responseId;\n        if (!responseId) {\n          await backend.remove(checkpoint.sessionId);\n          return;\n        }\n\n        try {\n          const status = await this.getStatus(responseId);\n\n          if (\n            status === \"cancelled\" ||\n            status === \"failed\" ||\n            status === \"incomplete\"\n          ) {\n            await backend.remove(checkpoint.sessionId);\n            return;\n          }\n\n          const { runId } = checkpoint;\n          const callbacks = onSessionEvents(checkpoint.sessionId, runId);\n          const stream = this.recoverStream(checkpoint, runId, responseId);\n          const result = createSendResult(stream, runId, callbacks, {\n            autoStart: true,\n          });\n          result.response.catch(async (err) => {\n            console.error(\n              `[thalamus] recovery stream failed for ${checkpoint.sessionId}:`,\n              err instanceof Error ? err.message : err,\n            );\n            await backend.remove(checkpoint.sessionId).catch(() => {});\n          });\n        } catch (err) {\n          console.error(\n            `[thalamus] recovery failed for ${checkpoint.sessionId}:`,\n            err instanceof Error ? err.message : err,\n          );\n          await backend.remove(checkpoint.sessionId).catch(() => {});\n        }\n      }),\n    );\n  }\n\n  /**\n   * Generates a stream for a recovered session: resumes observation from the\n   * last known sequence number, deduplicates, and checkpoints as it goes.\n   * Requires the original response to have been created with `background: true`.\n   */\n  private async *recoverStream(\n    checkpoint: SessionCheckpoint,\n    runId: string,\n    responseId: string,\n  ): AsyncIterable<StreamPart> {\n    const { sessionId } = checkpoint;\n    const backend = this.checkpointBackend;\n    const acc = new ResponseAccumulator();\n    let lastSequenceNumber = Number(checkpoint.lastEventId) || -1;\n    let retries = 0;\n\n    yield { type: \"stream-start\", sessionId };\n\n    while (retries <= MAX_RECONNECT_RETRIES) {\n      try {\n        const rawStream = this.resumeObservation(\n          responseId,\n          lastSequenceNumber,\n        );\n\n        for await (const rawEvent of rawStream) {\n          if (\n            \"sequence_number\" in rawEvent &&\n            typeof rawEvent.sequence_number === \"number\"\n          ) {\n            if (rawEvent.sequence_number <= lastSequenceNumber) continue;\n            lastSequenceNumber = rawEvent.sequence_number;\n          }\n          yield* mapEvent(rawEvent, acc);\n          if (backend) {\n            await backend.save({\n              sessionId,\n              provider: \"openai\",\n              lastEventId: String(lastSequenceNumber),\n              createdAt: Date.now(),\n              runId,\n              metadata: { responseId },\n            });\n          }\n        }\n\n        if (backend) await backend.remove(sessionId);\n        yield { type: \"finish\", response: acc.toResponse() };\n        return;\n      } catch (err) {\n        if (!isTransientStreamError(err)) throw err;\n\n        retries++;\n        if (retries > MAX_RECONNECT_RETRIES) throw err;\n      }\n    }\n  }\n\n  private async edgeObserve(\n    params: RequestParams,\n    runId: string,\n    sessionParams: Record<string, unknown>,\n    mcpTools: Record<string, unknown>[] | undefined,\n  ): Promise<string> {\n    const observer = this.edgeObserver!;\n    const input = this.buildInput(params);\n\n    const initStream = await this.client.responses.create({\n      model: this.model,\n      input,\n      stream: true,\n      background: true,\n      ...(this.instructions ? { instructions: this.instructions } : {}),\n      ...(mcpTools ? { tools: mcpTools } : {}),\n      ...sessionParams,\n      ...params.providerOptions,\n    } as ResponseCreateParamsStreaming);\n\n    let responseId: string | undefined;\n    let lastSeqNo = -1;\n    for await (const event of initStream as AsyncIterable<ResponseStreamEvent>) {\n      if (\n        \"sequence_number\" in event &&\n        typeof event.sequence_number === \"number\"\n      ) {\n        lastSeqNo = event.sequence_number;\n      }\n      if (event.type === \"response.created\") {\n        responseId = event.response.id;\n        break;\n      }\n    }\n\n    if (!responseId) {\n      throw new ThalamusError(\n        \"edge observe: no responseId from initial stream\",\n        { provider: OPENAI, isRetryable: false },\n      );\n    }\n\n    const startingAfter = lastSeqNo >= 0 ? `&starting_after=${lastSeqNo}` : \"\";\n    await observer.observe({\n      sessionId: responseId,\n      runId,\n      streamUrl: `${this.client.baseURL}/responses/${responseId}?stream=true${startingAfter}`,\n      headers: {\n        Authorization: `Bearer ${this.client.apiKey}`,\n      },\n      provider: \"openai\",\n      webhook: {\n        ...observer.webhook,\n        metadata: params.webhookMetadata,\n      },\n    });\n\n    return responseId;\n  }\n\n  private async *runStream(\n    params: RequestParams,\n    runId: string,\n  ): AsyncIterable<StreamPart> {\n    try {\n      const sessionParams = await this.resolveSessionParams(params.sessionId);\n\n      const credentials = params.vaultIds?.length\n        ? await this.resolveCredentials(params.vaultIds)\n        : undefined;\n\n      const mcpTools =\n        this.mcpServers.length > 0\n          ? toMcpTools(this.mcpServers, credentials)\n          : undefined;\n\n      const signal = params.abortSignal ?? undefined;\n\n      yield* this.resilientDispatchAndObserve(\n        params,\n        runId,\n        sessionParams,\n        mcpTools,\n        signal,\n      );\n    } catch (err) {\n      const mapped =\n        err instanceof ThalamusError ? err : (mapError(err, OPENAI) as Error);\n      yield { type: \"error\", error: mapped };\n    }\n  }\n\n  async createVault(options: VaultOptions): Promise<Vault> {\n    if (!this.vaultStore) {\n      throw new ThalamusError(\n        \"Pass a vaultStore to createOpenAIProvider() to use vault operations\",\n        {\n          provider: OPENAI,\n          isRetryable: false,\n        },\n      );\n    }\n    const record = await this.vaultStore.createVault(options);\n    return new LocalVault(record.id, OPENAI, this.vaultStore);\n  }\n\n  async getVault(vaultId: string): Promise<Vault> {\n    if (!this.vaultStore) {\n      throw new ThalamusError(\n        \"vaultStore is required for OpenAI vault support\",\n        {\n          provider: OPENAI,\n          isRetryable: false,\n        },\n      );\n    }\n    const record = await this.vaultStore.getVault(vaultId);\n    if (!record) {\n      throw new ThalamusError(`Vault not found: ${vaultId}`, {\n        provider: OPENAI,\n        isRetryable: false,\n      });\n    }\n    return new LocalVault(record.id, OPENAI, this.vaultStore);\n  }\n\n  private async resolveCredentials(\n    vaultIds: string[],\n  ): Promise<Map<string, Credential>> {\n    if (!this.vaultStore) {\n      throw new ThalamusError(\n        \"vaultStore is required to resolve vault credentials\",\n        { provider: OPENAI, isRetryable: false },\n      );\n    }\n    const merged = new Map<string, Credential>();\n    for (const vid of vaultIds) {\n      const stored = await this.vaultStore.getAll(vid);\n      for (const s of stored) {\n        if (!merged.has(s.name)) {\n          merged.set(s.name, s.credential);\n        }\n      }\n    }\n    return merged;\n  }\n\n  async createSession(_options?: SessionOptions): Promise<string> {\n    return crypto.randomUUID();\n  }\n\n  async endSession(_sessionId: string): Promise<void> {\n    // No-op for stateless provider.\n  }\n}\n\nexport function createOpenAIProvider(\n  config: OpenAIProviderConfig & { durable: EdgeObserver },\n): WebhookProvider;\nexport function createOpenAIProvider(\n  config: OpenAIProviderConfig,\n): StreamingProvider;\nexport function createOpenAIProvider(\n  config: OpenAIProviderConfig,\n): StreamingProvider | WebhookProvider {\n  return new OpenAIProvider(config) as StreamingProvider | WebhookProvider;\n}\n","import { type Message, MessageRole } from \"../types\";\n\ntype OpenAIInputContent =\n  | { type: \"input_text\"; text: string }\n  | { type: \"input_image\"; image_url: string }\n  | { type: \"input_file\"; file_data: string; filename?: string };\n\ntype OpenAIInputMessage = {\n  role: \"user\" | \"system\" | \"assistant\";\n  content: string | OpenAIInputContent[];\n};\n\nexport const openaiTransformer = {\n  toInput(messages: Message[]): OpenAIInputMessage[] {\n    return messages.map((msg) => {\n      const role =\n        msg.role === MessageRole.USER\n          ? \"user\"\n          : msg.role === MessageRole.SYSTEM\n            ? \"system\"\n            : \"assistant\";\n\n      if (typeof msg.content === \"string\")\n        return { role, content: msg.content } as OpenAIInputMessage;\n\n      const parts: OpenAIInputContent[] = [];\n      for (const part of msg.content) {\n        switch (part.type) {\n          case \"text\":\n            parts.push({ type: \"input_text\", text: part.text });\n            break;\n          case \"image-url\":\n            parts.push({ type: \"input_image\", image_url: part.url });\n            break;\n          case \"image\":\n            parts.push({\n              type: \"input_image\",\n              image_url: `data:${part.mediaType};base64,${part.data}`,\n            });\n            break;\n          case \"file\":\n            parts.push({\n              type: \"input_file\",\n              file_data: `data:${part.mediaType};base64,${part.data}`,\n              ...(part.name ? { filename: part.name } : {}),\n            });\n            break;\n        }\n      }\n\n      return { role, content: parts } as OpenAIInputMessage;\n    });\n  },\n};\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","export interface SigV4FetchOptions {\n  region: string;\n  credentials: {\n    accessKeyId: string;\n    secretAccessKey: string;\n    sessionToken?: string;\n  };\n}\n\ntype Fetch = (\n  input: string | URL | Request,\n  init?: RequestInit,\n) => Promise<Response>;\n\n/**\n * Creates a custom fetch function that signs requests with AWS SigV4.\n * Requires optional peer deps: @smithy/signature-v4, @aws-crypto/sha256-js\n */\nexport function createSigV4Fetch(options: SigV4FetchOptions): Fetch {\n  const { region, credentials } = options;\n\n  return async (\n    input: string | URL | Request,\n    init?: RequestInit,\n  ): Promise<Response> => {\n    // Dynamic imports — optional peer deps, types unavailable at compile time\n    let SignatureV4: any;\n    let Sha256: any;\n    try {\n      SignatureV4 = (\n        await import(/* webpackIgnore: true */ \"@smithy/signature-v4\")\n      ).SignatureV4;\n      Sha256 = (await import(/* webpackIgnore: true */ \"@aws-crypto/sha256-js\"))\n        .Sha256;\n    } catch {\n      throw new Error(\n        \"SigV4 auth requires @smithy/signature-v4 and @aws-crypto/sha256-js. \" +\n          \"Install them: pnpm add @smithy/signature-v4 @aws-crypto/sha256-js\",\n      );\n    }\n\n    const signer = new SignatureV4({\n      service: \"bedrock\",\n      region,\n      credentials,\n      sha256: Sha256,\n    });\n\n    const url = new URL(\n      typeof input === \"string\"\n        ? input\n        : input instanceof URL\n          ? input.href\n          : input.url,\n    );\n    const body = init?.body ? String(init.body) : undefined;\n\n    const headers: Record<string, string> = {};\n    if (init?.headers) {\n      const h = init.headers;\n      if (h instanceof Headers) {\n        h.forEach((v, k) => {\n          headers[k] = v;\n        });\n      } else if (Array.isArray(h)) {\n        for (const [k, v] of h) headers[k] = v;\n      } else {\n        Object.assign(headers, h);\n      }\n    }\n\n    const signed = await signer.sign({\n      method: init?.method ?? \"GET\",\n      protocol: url.protocol,\n      hostname: url.hostname,\n      port: url.port ? Number(url.port) : undefined,\n      path: url.pathname + url.search,\n      headers: { ...headers, host: url.host },\n      body,\n    });\n\n    return globalThis.fetch(input, {\n      ...init,\n      headers: signed.headers,\n    });\n  };\n}\n"],"mappings":"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","names":["MessageRole","auth","Anthropic","ResponseAccumulator","mapEvent","isTransientStreamError","MAX_RECONNECT_RETRIES","OpenAI","ResponseAccumulator","mapEvent"]}