{"version":3,"sources":["../../src/anthropic/index.ts","../../src/anthropic/anthropic.provider.ts","../../src/durable/types.ts","../../src/errors.ts","../../src/send-result.ts","../../src/types.ts","../../src/anthropic/anthropic.transformer.ts","../../src/anthropic/anthropic.vault.ts","../../src/anthropic/tool-result.ts","../../src/anthropic/anthropic-parser.ts"],"sourcesContent":["export {\n  type AnthropicProviderConfig,\n  createAnthropicProvider,\n} from \"./anthropic.provider\";\nexport { toContentBlocks } from \"./anthropic.transformer\";\nexport {\n  mapEvent as mapAnthropicEvent,\n  ResponseAccumulator as AnthropicResponseAccumulator,\n} from \"./anthropic-parser\";\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","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  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"],"mappings":"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","names":["auth","Anthropic"]}