@witqq/agent-sdk 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/{agent-DxY68NZL.d.cts → agent-C6H2CgJA.d.cts} +2 -0
  2. package/dist/{agent-CW9XbmG_.d.ts → agent-F7oB6eKp.d.ts} +2 -0
  3. package/dist/backends/claude.cjs.map +1 -1
  4. package/dist/backends/claude.d.cts +2 -2
  5. package/dist/backends/claude.d.ts +2 -2
  6. package/dist/backends/claude.js.map +1 -1
  7. package/dist/backends/copilot.cjs +8 -15
  8. package/dist/backends/copilot.cjs.map +1 -1
  9. package/dist/backends/copilot.d.cts +2 -2
  10. package/dist/backends/copilot.d.ts +2 -2
  11. package/dist/backends/copilot.js +8 -15
  12. package/dist/backends/copilot.js.map +1 -1
  13. package/dist/backends/mock-llm.cjs +719 -0
  14. package/dist/backends/mock-llm.cjs.map +1 -0
  15. package/dist/backends/mock-llm.d.cts +37 -0
  16. package/dist/backends/mock-llm.d.ts +37 -0
  17. package/dist/backends/mock-llm.js +717 -0
  18. package/dist/backends/mock-llm.js.map +1 -0
  19. package/dist/backends/vercel-ai.cjs +8 -1
  20. package/dist/backends/vercel-ai.cjs.map +1 -1
  21. package/dist/backends/vercel-ai.d.cts +2 -2
  22. package/dist/backends/vercel-ai.d.ts +2 -2
  23. package/dist/backends/vercel-ai.js +8 -1
  24. package/dist/backends/vercel-ai.js.map +1 -1
  25. package/dist/backends-Cno0gZjy.d.cts +114 -0
  26. package/dist/backends-Cno0gZjy.d.ts +114 -0
  27. package/dist/chat/accumulator.cjs.map +1 -1
  28. package/dist/chat/accumulator.d.cts +2 -2
  29. package/dist/chat/accumulator.d.ts +2 -2
  30. package/dist/chat/accumulator.js.map +1 -1
  31. package/dist/chat/backends.cjs +350 -77
  32. package/dist/chat/backends.cjs.map +1 -1
  33. package/dist/chat/backends.d.cts +7 -7
  34. package/dist/chat/backends.d.ts +7 -7
  35. package/dist/chat/backends.js +349 -78
  36. package/dist/chat/backends.js.map +1 -1
  37. package/dist/chat/context.d.cts +2 -2
  38. package/dist/chat/context.d.ts +2 -2
  39. package/dist/chat/core.cjs +35 -25
  40. package/dist/chat/core.cjs.map +1 -1
  41. package/dist/chat/core.d.cts +15 -5
  42. package/dist/chat/core.d.ts +15 -5
  43. package/dist/chat/core.js +35 -26
  44. package/dist/chat/core.js.map +1 -1
  45. package/dist/chat/events.d.cts +2 -2
  46. package/dist/chat/events.d.ts +2 -2
  47. package/dist/chat/index.cjs +418 -122
  48. package/dist/chat/index.cjs.map +1 -1
  49. package/dist/chat/index.d.cts +7 -7
  50. package/dist/chat/index.d.ts +7 -7
  51. package/dist/chat/index.js +418 -124
  52. package/dist/chat/index.js.map +1 -1
  53. package/dist/chat/react.cjs +216 -12
  54. package/dist/chat/react.cjs.map +1 -1
  55. package/dist/chat/react.d.cts +78 -4
  56. package/dist/chat/react.d.ts +78 -4
  57. package/dist/chat/react.js +215 -13
  58. package/dist/chat/react.js.map +1 -1
  59. package/dist/chat/runtime.cjs +6 -2
  60. package/dist/chat/runtime.cjs.map +1 -1
  61. package/dist/chat/runtime.d.cts +2 -2
  62. package/dist/chat/runtime.d.ts +2 -2
  63. package/dist/chat/runtime.js +6 -2
  64. package/dist/chat/runtime.js.map +1 -1
  65. package/dist/chat/server.cjs +15 -5
  66. package/dist/chat/server.cjs.map +1 -1
  67. package/dist/chat/server.d.cts +3 -3
  68. package/dist/chat/server.d.ts +3 -3
  69. package/dist/chat/server.js +15 -5
  70. package/dist/chat/server.js.map +1 -1
  71. package/dist/chat/sessions.cjs +39 -23
  72. package/dist/chat/sessions.cjs.map +1 -1
  73. package/dist/chat/sessions.d.cts +2 -2
  74. package/dist/chat/sessions.d.ts +2 -2
  75. package/dist/chat/sessions.js +40 -24
  76. package/dist/chat/sessions.js.map +1 -1
  77. package/dist/chat/sqlite.cjs +95 -0
  78. package/dist/chat/sqlite.cjs.map +1 -1
  79. package/dist/chat/sqlite.d.cts +39 -3
  80. package/dist/chat/sqlite.d.ts +39 -3
  81. package/dist/chat/sqlite.js +93 -1
  82. package/dist/chat/sqlite.js.map +1 -1
  83. package/dist/chat/state.d.cts +2 -2
  84. package/dist/chat/state.d.ts +2 -2
  85. package/dist/chat/storage.cjs +39 -23
  86. package/dist/chat/storage.cjs.map +1 -1
  87. package/dist/chat/storage.d.cts +7 -3
  88. package/dist/chat/storage.d.ts +7 -3
  89. package/dist/chat/storage.js +40 -24
  90. package/dist/chat/storage.js.map +1 -1
  91. package/dist/{in-process-transport-C1JnJGVR.d.ts → in-process-transport-7EIit9Xk.d.ts} +51 -17
  92. package/dist/{in-process-transport-C7DSqPyX.d.cts → in-process-transport-Ct9YcX8I.d.cts} +51 -17
  93. package/dist/index.cjs +14 -14
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.d.cts +4 -2
  96. package/dist/index.d.ts +4 -2
  97. package/dist/index.js +13 -13
  98. package/dist/index.js.map +1 -1
  99. package/dist/testing.cjs +724 -0
  100. package/dist/testing.cjs.map +1 -1
  101. package/dist/testing.d.cts +14 -2
  102. package/dist/testing.d.ts +14 -2
  103. package/dist/testing.js +724 -0
  104. package/dist/testing.js.map +1 -1
  105. package/dist/{transport-Cdh3M0tS.d.cts → transport-DLWCN18G.d.cts} +1 -1
  106. package/dist/{transport-Ciap4PWK.d.ts → transport-DsuS-GeM.d.ts} +1 -1
  107. package/dist/{types-ajANVzf7.d.ts → types-DgtI1hzh.d.ts} +2 -1
  108. package/dist/{types-DRgd_9R7.d.cts → types-DkSXALKg.d.cts} +2 -1
  109. package/package.json +18 -7
  110. package/LICENSE +0 -21
  111. package/README.md +0 -1054
  112. package/dist/backends-BSrsBYFn.d.cts +0 -39
  113. package/dist/backends-BSrsBYFn.d.ts +0 -39
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/errors.ts","../../src/types/guards.ts","../../src/errors.ts","../../src/base-agent.ts","../../src/utils/schema.ts","../../src/backends/shared.ts","../../src/backends/claude.ts"],"names":["text","opts"],"mappings":"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","file":"claude.js","sourcesContent":["// ─── Unified Error Code Enum ───────────────────────────────────\n\n/** Unified error codes for all SDK errors — single source of truth. */\nexport enum ErrorCode {\n // Auth\n AUTH_EXPIRED = \"AUTH_EXPIRED\",\n AUTH_INVALID = \"AUTH_INVALID\",\n\n // Rate limiting\n RATE_LIMIT = \"RATE_LIMIT\",\n\n // Network\n NETWORK = \"NETWORK\",\n TIMEOUT = \"TIMEOUT\",\n\n // Provider\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MODEL_NOT_FOUND = \"MODEL_NOT_FOUND\",\n MODEL_OVERLOADED = \"MODEL_OVERLOADED\",\n CONTEXT_OVERFLOW = \"CONTEXT_OVERFLOW\",\n\n // Input / Response\n INVALID_INPUT = \"INVALID_INPUT\",\n INVALID_RESPONSE = \"INVALID_RESPONSE\",\n\n // SDK internal\n REENTRANCY = \"REENTRANCY\",\n DISPOSED = \"DISPOSED\",\n ABORTED = \"ABORTED\",\n INVALID_TRANSITION = \"INVALID_TRANSITION\",\n DEPENDENCY_MISSING = \"DEPENDENCY_MISSING\",\n BACKEND_NOT_INSTALLED = \"BACKEND_NOT_INSTALLED\",\n\n // Tool\n TOOL_EXECUTION = \"TOOL_EXECUTION\",\n PERMISSION_DENIED = \"PERMISSION_DENIED\",\n\n // Session\n SESSION_NOT_FOUND = \"SESSION_NOT_FOUND\",\n SESSION_EXPIRED = \"SESSION_EXPIRED\",\n\n // Provider resolution\n PROVIDER_NOT_FOUND = \"PROVIDER_NOT_FOUND\",\n AUTH_REQUIRED = \"AUTH_REQUIRED\",\n\n // Storage (generic)\n STORAGE_ERROR = \"STORAGE_ERROR\",\n // Storage (specific)\n STORAGE_NOT_FOUND = \"STORAGE_NOT_FOUND\",\n STORAGE_DUPLICATE_KEY = \"STORAGE_DUPLICATE_KEY\",\n STORAGE_IO_ERROR = \"STORAGE_IO_ERROR\",\n STORAGE_SERIALIZATION_ERROR = \"STORAGE_SERIALIZATION_ERROR\",\n}\n\n// ─── Classification ────────────────────────────────────────────\n\n/** Error codes that are typically recoverable (retry-safe) */\nconst RECOVERABLE_CODES = new Set<ErrorCode>([\n ErrorCode.TIMEOUT,\n ErrorCode.RATE_LIMIT,\n ErrorCode.NETWORK,\n ErrorCode.TOOL_EXECUTION,\n ErrorCode.MODEL_OVERLOADED,\n ErrorCode.PROVIDER_ERROR,\n]);\n\n/** Check if an error code is recoverable */\nexport function isRecoverableErrorCode(code: ErrorCode): boolean {\n return RECOVERABLE_CODES.has(code);\n}\n\n/** Classify an error message string into an ErrorCode */\nexport function classifyAgentError(error: string | Error): ErrorCode {\n const msg = (error instanceof Error ? error.message : error).toLowerCase();\n\n if (msg.includes(\"timeout\") || msg.includes(\"timed out\") || msg.includes(\"timedout\") || msg.includes(\"etimedout\")) {\n return ErrorCode.TIMEOUT;\n }\n\n if (msg.includes(\"rate limit\") || msg.includes(\"rate_limit\") || msg.includes(\"429\") || msg.includes(\"too many requests\")) {\n return ErrorCode.RATE_LIMIT;\n }\n\n if (msg.includes(\"unauthorized\") || msg.includes(\"401\") || msg.includes(\"auth\") && (msg.includes(\"expired\") || msg.includes(\"invalid\") || msg.includes(\"denied\") || msg.includes(\"failed\"))) {\n return ErrorCode.AUTH_EXPIRED;\n }\n\n if (msg.includes(\"econnrefused\") || msg.includes(\"econnreset\") || msg.includes(\"enotfound\") || msg.includes(\"network\") || msg.includes(\"fetch failed\") || msg.includes(\"socket hang up\")) {\n return ErrorCode.NETWORK;\n }\n\n if (msg.includes(\"subprocess\") || msg.includes(\"process exited\") || msg.includes(\"spawn\") || msg.includes(\"enoent\") || msg.includes(\"killed\")) {\n return ErrorCode.DEPENDENCY_MISSING;\n }\n\n if (msg.includes(\"abort\") || msg.includes(\"cancel\")) {\n return ErrorCode.ABORTED;\n }\n\n if (msg.includes(\"500\") || msg.includes(\"502\") || msg.includes(\"503\") || msg.includes(\"internal server error\") || msg.includes(\"service unavailable\") || msg.includes(\"bad gateway\") || msg.includes(\"overloaded\")) {\n return ErrorCode.PROVIDER_ERROR;\n }\n\n return ErrorCode.PROVIDER_ERROR;\n}\n","import type { ToolDeclaration, ToolDefinition } from \"./tools.js\";\nimport type { MessageContent, ContentPart } from \"./messages.js\";\n\n/** Type guard: checks if a ToolDeclaration has an execute function (i.e., is a ToolDefinition) */\nexport function isToolDefinition(\n tool: ToolDeclaration,\n): tool is ToolDefinition {\n return \"execute\" in tool && typeof (tool as ToolDefinition).execute === \"function\";\n}\n\n/** Type guard: checks if MessageContent is plain string */\nexport function isTextContent(content: MessageContent): content is string {\n return typeof content === \"string\";\n}\n\n/** Type guard: checks if MessageContent is multi-part array */\nexport function isMultiPartContent(\n content: MessageContent,\n): content is ContentPart[] {\n return Array.isArray(content);\n}\n\n/** Extract text from MessageContent regardless of format */\nexport function getTextContent(content: MessageContent): string {\n if (typeof content === \"string\") return content;\n return content\n .filter((p): p is Extract<ContentPart, { type: \"text\" }> => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\");\n}\n","import { ErrorCode } from \"./types/errors.js\";\n\n/** Options for constructing an AgentSDKError */\nexport interface AgentSDKErrorOptions extends ErrorOptions {\n /** Machine-readable error code */\n code?: string;\n /** Whether this error is retryable (default: false) */\n retryable?: boolean;\n /** HTTP status code hint (e.g. 401, 429, 500) */\n httpStatus?: number;\n}\n\n/** Base error class for agent-sdk.\n *\n * Use `AgentSDKError.is(err)` for reliable cross-module `instanceof` checks\n * (works across separately bundled entry points where `instanceof` may fail). */\nexport class AgentSDKError extends Error {\n /** @internal Marker for cross-bundle identity checks */\n readonly _agentSDKError = true as const;\n /** Machine-readable error code. Prefer values from the ErrorCode enum. */\n readonly code?: string;\n /** Whether this error is safe to retry */\n readonly retryable: boolean;\n /** HTTP status code hint for error classification */\n readonly httpStatus?: number;\n\n constructor(message: string, options?: AgentSDKErrorOptions) {\n super(message, options);\n this.name = \"AgentSDKError\";\n this.code = options?.code;\n this.retryable = options?.retryable ?? false;\n this.httpStatus = options?.httpStatus;\n }\n\n /** Check if an error is an AgentSDKError (works across bundled copies) */\n static is(error: unknown): error is AgentSDKError {\n return (\n error instanceof Error &&\n \"_agentSDKError\" in error &&\n (error as AgentSDKError)._agentSDKError === true\n );\n }\n}\n\n/** Thrown when agent.run() is called while already running (M8 re-entrancy guard) */\nexport class ReentrancyError extends AgentSDKError {\n constructor() {\n super(\"Agent is already running. Await the current run before starting another.\", {\n code: ErrorCode.REENTRANCY,\n });\n this.name = \"ReentrancyError\";\n }\n}\n\n/** Thrown when an operation is attempted on a disposed agent/service */\nexport class DisposedError extends AgentSDKError {\n constructor(entity: string) {\n super(`${entity} has been disposed and cannot be used.`, {\n code: ErrorCode.DISPOSED,\n });\n this.name = \"DisposedError\";\n }\n}\n\n/** Thrown when a backend is not found in the registry */\nexport class BackendNotFoundError extends AgentSDKError {\n constructor(backend: string) {\n super(\n `Unknown backend: \"${backend}\". ` +\n `Built-in: copilot, claude, vercel-ai. ` +\n `Custom: use registerBackend() first.`,\n { code: ErrorCode.BACKEND_NOT_INSTALLED },\n );\n this.name = \"BackendNotFoundError\";\n }\n}\n\n/** Thrown when a backend is already registered */\nexport class BackendAlreadyRegisteredError extends AgentSDKError {\n constructor(backend: string) {\n super(`Backend \"${backend}\" is already registered. Use a different name or unregister first.`);\n this.name = \"BackendAlreadyRegisteredError\";\n }\n}\n\n/** Thrown when subprocess management fails */\nexport class SubprocessError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, { ...options, code: ErrorCode.DEPENDENCY_MISSING });\n this.name = \"SubprocessError\";\n }\n}\n\n/** Thrown when a required peer dependency is not installed */\nexport class DependencyError extends AgentSDKError {\n public readonly packageName: string;\n\n constructor(packageName: string) {\n super(`${packageName} is not installed. Install it: npm install ${packageName}`, {\n code: ErrorCode.DEPENDENCY_MISSING,\n });\n this.name = \"DependencyError\";\n this.packageName = packageName;\n }\n}\n\n/** Thrown when an agent run is aborted */\nexport class AbortError extends AgentSDKError {\n constructor() {\n super(\"Agent run was aborted.\", { code: ErrorCode.ABORTED });\n this.name = \"AbortError\";\n }\n}\n\n/** Thrown when a tool execution fails */\nexport class ToolExecutionError extends AgentSDKError {\n public readonly toolName: string;\n\n constructor(toolName: string, message: string, options?: ErrorOptions) {\n super(`Tool \"${toolName}\" failed: ${message}`, { ...options, code: ErrorCode.TOOL_EXECUTION });\n this.name = \"ToolExecutionError\";\n this.toolName = toolName;\n }\n}\n\n/** Thrown when a stream has no activity within the configured timeout */\nexport class ActivityTimeoutError extends AgentSDKError {\n constructor(timeoutMs: number) {\n super(`Stream activity timeout: no event received within ${timeoutMs}ms.`, {\n code: ErrorCode.TIMEOUT,\n retryable: true,\n });\n this.name = \"ActivityTimeoutError\";\n }\n}\n\n/** Thrown when structured output parsing fails */\nexport class StructuredOutputError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(`Structured output error: ${message}`, { ...options, code: ErrorCode.INVALID_RESPONSE });\n this.name = \"StructuredOutputError\";\n }\n}\n","import type {\n IAgent,\n FullAgentConfig,\n AgentState,\n AgentResult,\n AgentEvent,\n MessageContent,\n Message,\n RunOptions,\n RetryConfig,\n StructuredOutputConfig,\n UsageData,\n ToolDefinition,\n StreamMiddleware,\n StreamContext,\n} from \"./types.js\";\nimport { ReentrancyError, DisposedError, AbortError, ActivityTimeoutError } from \"./errors.js\";\nimport { AgentSDKError } from \"./errors.js\";\nimport { isRecoverableErrorCode } from \"./types/errors.js\";\n\n/** Abstract base agent with shared lifecycle logic.\n * Concrete backends extend this and implement the protected _run/_stream methods. */\nexport abstract class BaseAgent implements IAgent {\n protected state: AgentState = \"idle\";\n protected abortController: AbortController | null = null;\n protected readonly config: FullAgentConfig;\n private _cleanupExternalSignal: (() => void) | null = null;\n private _streamMiddleware: StreamMiddleware[] = [];\n\n /** Backend identifier (e.g. \"copilot\", \"claude\", \"vercel-ai\") */\n protected abstract readonly backendName: string;\n\n /** CLI session ID for persistent mode. Override in backends that support it. */\n get sessionId(): string | undefined {\n return undefined;\n }\n\n constructor(config: FullAgentConfig) {\n this.config = Object.freeze({ ...config });\n }\n\n // ─── Public Interface ─────────────────────────────────────────\n\n async run(\n prompt: MessageContent,\n options: RunOptions,\n ): Promise<AgentResult> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n const result = await this.withRetry(\n () => this.executeRun(messages, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async runWithContext(\n messages: Message[],\n options: RunOptions,\n ): Promise<AgentResult> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const result = await this.withRetry(\n () => this.executeRun(messages, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async runStructured<T>(\n prompt: MessageContent,\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n ): Promise<AgentResult<T>> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n const result = await this.withRetry(\n () => this.executeRunStructured(messages, schema, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async *stream(\n prompt: MessageContent,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"streaming\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n yield* this.streamWithRetry(\n () => this.applyStreamPipeline(this.executeStream(messages, options, ac.signal), options, ac),\n options,\n );\n } finally {\n this.cleanupRun();\n }\n }\n\n async *streamWithContext(\n messages: Message[],\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"streaming\";\n\n try {\n yield* this.streamWithRetry(\n () => this.applyStreamPipeline(this.executeStream(messages, options, ac.signal), options, ac),\n options,\n );\n } finally {\n this.cleanupRun();\n }\n }\n\n /** Register a stream middleware. Applied in registration order after built-in transforms. */\n addStreamMiddleware(middleware: StreamMiddleware): void {\n this.guardDisposed();\n this._streamMiddleware.push(middleware);\n }\n\n /** Apply built-in transforms (enrich→timeout→heartbeat) then custom middleware */\n private async *applyStreamPipeline(\n source: AsyncIterable<AgentEvent>,\n options: RunOptions,\n ac: AbortController,\n ): AsyncIterable<AgentEvent> {\n // Built-in pipeline\n let stream: AsyncIterable<AgentEvent> = this.enrichStream(source, options);\n stream = this.activityTimeoutStream(stream, options?.activityTimeoutMs, ac);\n stream = this.heartbeatStream(stream);\n\n // Custom middleware\n if (this._streamMiddleware.length > 0) {\n const ctx: StreamContext = {\n model: options.model,\n backend: this.backendName,\n abortController: ac,\n config: Object.freeze({ ...this.config }),\n };\n for (const mw of this._streamMiddleware) {\n stream = mw(stream, ctx);\n }\n }\n\n yield* stream;\n }\n\n abort(): void {\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n\n /** Default interrupt — falls back to abort(). Backends may override with graceful shutdown. */\n async interrupt(): Promise<void> {\n this.abort();\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getConfig(): Readonly<FullAgentConfig> {\n return this.config;\n }\n\n /** Mark agent as disposed. Override to add cleanup. */\n dispose(): void {\n this._cleanupExternalSignal?.();\n this._cleanupExternalSignal = null;\n this.abort();\n this.state = \"disposed\";\n }\n\n // ─── Abstract Methods (implemented by backends) ───────────────\n\n /** Execute a blocking run. Backend implements the actual LLM call. */\n protected abstract executeRun(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult>;\n\n /** Execute a structured output run. Backend implements parsing. */\n protected abstract executeRunStructured<T>(\n messages: Message[],\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult<T>>;\n\n /** Execute a streaming run. Backend yields events. */\n protected abstract executeStream(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent>;\n\n // ─── Retry Logic ─────────────────────────────────────────────\n\n /** Check if an error should be retried given the retry configuration. */\n private isRetryableError(error: unknown, retry: RetryConfig): boolean {\n // Abort and reentrancy errors are never retryable\n if (error instanceof AbortError || error instanceof ReentrancyError || error instanceof DisposedError) {\n return false;\n }\n if (AgentSDKError.is(error)) {\n // If specific retryable error codes configured, check against them\n if (retry.retryableErrors && retry.retryableErrors.length > 0 && error.code) {\n return retry.retryableErrors.includes(error.code as typeof retry.retryableErrors[number]);\n }\n // Otherwise check the retryable flag or recoverable code\n if (error.retryable) return true;\n if (error.code) return isRecoverableErrorCode(error.code as Parameters<typeof isRecoverableErrorCode>[0]);\n }\n return false;\n }\n\n /** Execute a function with retry logic per RetryConfig. */\n private async withRetry<T>(\n fn: () => Promise<T>,\n options: RunOptions,\n ): Promise<T> {\n const retry = options?.retry;\n if (!retry || !retry.maxRetries || retry.maxRetries <= 0) {\n return fn();\n }\n\n const maxRetries = retry.maxRetries;\n const initialDelay = retry.initialDelayMs ?? 1000;\n const multiplier = retry.backoffMultiplier ?? 2;\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n if (attempt >= maxRetries || !this.isRetryableError(err, retry)) {\n throw err;\n }\n // Exponential backoff\n const delay = initialDelay * Math.pow(multiplier, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n // Check abort between retries\n if (options?.signal?.aborted || this.abortController?.signal.aborted) {\n throw err;\n }\n }\n }\n throw lastError;\n }\n\n /** Execute a stream factory with pre-stream retry: retries until first event, then committed. */\n private async *streamWithRetry(\n factory: () => AsyncIterable<AgentEvent>,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n const retry = options?.retry;\n if (!retry || !retry.maxRetries || retry.maxRetries <= 0) {\n yield* factory();\n return;\n }\n\n const maxRetries = retry.maxRetries;\n const initialDelay = retry.initialDelayMs ?? 1000;\n const multiplier = retry.backoffMultiplier ?? 2;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const stream = factory();\n const iterator = stream[Symbol.asyncIterator]();\n // Try to get first event — this is the \"pre-stream\" phase\n const first = await iterator.next();\n if (first.done) return;\n // First event received — stream committed, no more retries\n yield first.value;\n // Yield remaining events\n while (true) {\n const next = await iterator.next();\n if (next.done) break;\n yield next.value;\n }\n return;\n } catch (err) {\n if (attempt >= maxRetries || !this.isRetryableError(err, retry)) {\n throw err;\n }\n const delay = initialDelay * Math.pow(multiplier, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n if (options?.signal?.aborted || this.abortController?.signal.aborted) {\n throw err;\n }\n }\n }\n }\n\n // ─── CallOptions Resolution ──────────────────────────────────\n\n /** Resolve tools to use for this call (per-call override > config default) */\n protected resolveTools(options?: RunOptions): ToolDefinition[] {\n return options?.tools ?? this.config.tools ?? [];\n }\n\n // ─── Usage Enrichment ───────────────────────────────────────────\n\n /** Enrich result usage with model/backend and fire onUsage callback */\n private enrichAndNotifyUsage(result: AgentResult<unknown>, options: RunOptions): void {\n if (result.usage) {\n result.usage = {\n ...result.usage,\n model: options.model,\n backend: this.backendName,\n };\n this.callOnUsage(result.usage);\n }\n }\n\n /** Wrap a stream to enrich usage_update events and fire onUsage callback */\n private async *enrichStream(\n source: AsyncIterable<AgentEvent>,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n const model = options.model;\n for await (const event of source) {\n if (event.type === \"usage_update\") {\n const usage: UsageData = {\n promptTokens: event.promptTokens,\n completionTokens: event.completionTokens,\n model,\n backend: this.backendName,\n };\n this.callOnUsage(usage);\n yield { type: \"usage_update\", ...usage };\n } else {\n yield event;\n }\n }\n }\n\n /** Fire onUsage callback (fire-and-forget: errors logged, not propagated) */\n private callOnUsage(usage: UsageData): void {\n if (!this.config.onUsage) return;\n try {\n this.config.onUsage(usage);\n } catch (e) {\n console.warn(\n \"[agent-sdk] onUsage callback error:\",\n e instanceof Error ? e.message : String(e),\n );\n }\n }\n\n // ─── Heartbeat ───────────────────────────────────────────────\n\n /** Wrap a stream to emit heartbeat events at configured intervals.\n * When heartbeatInterval is not set, passes through directly. */\n private async *heartbeatStream(\n source: AsyncIterable<AgentEvent>,\n ): AsyncIterable<AgentEvent> {\n const interval = this.config.heartbeatInterval;\n if (!interval || interval <= 0) {\n yield* source;\n return;\n }\n\n const iterator = source[Symbol.asyncIterator]();\n let pendingEvent: Promise<IteratorResult<AgentEvent>> | null = null;\n let heartbeatResolve: (() => void) | null = null;\n\n const timer = setInterval(() => {\n if (heartbeatResolve) {\n const resolve = heartbeatResolve;\n heartbeatResolve = null;\n resolve();\n }\n }, interval);\n\n try {\n while (true) {\n if (!pendingEvent) {\n pendingEvent = iterator.next();\n }\n\n const heartbeatPromise = new Promise<void>((resolve) => {\n heartbeatResolve = resolve;\n });\n\n const eventDone = pendingEvent.then(\n (r) => ({ kind: \"event\" as const, result: r }),\n );\n const heartbeatDone = heartbeatPromise.then(\n () => ({ kind: \"heartbeat\" as const }),\n );\n\n const winner = await Promise.race([eventDone, heartbeatDone]);\n\n if (winner.kind === \"heartbeat\") {\n yield { type: \"heartbeat\" };\n } else {\n pendingEvent = null;\n heartbeatResolve = null;\n if (winner.result.done) break;\n yield winner.result.value;\n }\n }\n } finally {\n clearInterval(timer);\n heartbeatResolve = null;\n }\n }\n\n // ─── Activity Timeout ────────────────────────────────────────\n\n /** Wrap a stream to abort on inactivity. Resets timer on every event.\n * When timeoutMs is not set, passes through directly. */\n private async *activityTimeoutStream(\n source: AsyncIterable<AgentEvent>,\n timeoutMs: number | undefined,\n ac: AbortController,\n ): AsyncIterable<AgentEvent> {\n if (!timeoutMs || timeoutMs <= 0) {\n yield* source;\n return;\n }\n\n const iterator = source[Symbol.asyncIterator]();\n let timerId: ReturnType<typeof setTimeout> | undefined;\n try {\n while (true) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n timerId = setTimeout(() => reject(new ActivityTimeoutError(timeoutMs)), timeoutMs);\n });\n const result = await Promise.race([iterator.next(), timeoutPromise]);\n clearTimeout(timerId);\n if (result.done) break;\n yield result.value;\n }\n } catch (err) {\n if (err instanceof ActivityTimeoutError) {\n ac.abort(err);\n }\n throw err;\n } finally {\n clearTimeout(timerId);\n }\n }\n\n // ─── Guards ───────────────────────────────────────────────────\n\n protected guardReentrancy(): void {\n if (this.state === \"running\" || this.state === \"streaming\") {\n throw new ReentrancyError();\n }\n }\n\n protected guardDisposed(): void {\n if (this.state === \"disposed\") {\n throw new DisposedError(\"Agent\");\n }\n }\n\n /** Throw AbortError if signal is already aborted */\n protected checkAbort(signal: AbortSignal): void {\n if (signal.aborted) {\n throw new AbortError();\n }\n }\n\n // ─── Internal Helpers ─────────────────────────────────────────\n\n /** Clean up after a run completes (success, error, or abort). */\n private cleanupRun(): void {\n this._cleanupExternalSignal?.();\n this._cleanupExternalSignal = null;\n this.state = \"idle\";\n this.abortController = null;\n }\n\n private createAbortController(externalSignal?: AbortSignal): AbortController {\n const ac = new AbortController();\n this.abortController = ac;\n this._cleanupExternalSignal = null;\n\n if (externalSignal) {\n if (externalSignal.aborted) {\n ac.abort();\n } else {\n const listener = () => ac.abort();\n externalSignal.addEventListener(\"abort\", listener, { once: true });\n this._cleanupExternalSignal = () => externalSignal.removeEventListener(\"abort\", listener);\n }\n }\n\n return ac;\n }\n}\n","import type { z } from \"zod\";\n\n/** Convert a Zod schema to JSON Schema.\n * Detection order: toJSONSchema() (Zod v4) → jsonSchema() (Zod v3.24+) → _def extraction (Zod v3 legacy). */\nexport function zodToJsonSchema(schema: z.ZodType): Record<string, unknown> {\n const schemaAny = schema as unknown as Record<string, unknown>;\n\n // Zod v4: toJSONSchema()\n if (\"toJSONSchema\" in schema && typeof schemaAny.toJSONSchema === \"function\") {\n return (schemaAny.toJSONSchema as () => Record<string, unknown>)();\n }\n\n // Zod v3.24+: jsonSchema()\n if (\"jsonSchema\" in schema && typeof schemaAny.jsonSchema === \"function\") {\n return (schemaAny.jsonSchema as () => Record<string, unknown>)();\n }\n\n // Zod v3 legacy: _def.typeName extraction\n return extractSchemaFromDef(schema);\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction extractSchemaFromDef(schema: z.ZodType): Record<string, unknown> {\n const def = (schema as unknown as { _def: Record<string, any> })._def;\n const typeName = def.typeName as string;\n\n switch (typeName) {\n case \"ZodString\":\n return { type: \"string\" };\n case \"ZodNumber\":\n return { type: \"number\" };\n case \"ZodBoolean\":\n return { type: \"boolean\" };\n case \"ZodNull\":\n return { type: \"null\" };\n case \"ZodArray\":\n return {\n type: \"array\",\n items: extractSchemaFromDef(def.type as z.ZodType),\n };\n case \"ZodObject\": {\n const shape = (schema as unknown as { shape: Record<string, z.ZodType> }).shape;\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n const valueDef = (value as unknown as { _def: Record<string, any> })._def;\n if (valueDef.typeName === \"ZodOptional\") {\n properties[key] = extractSchemaFromDef(valueDef.innerType as z.ZodType);\n } else {\n properties[key] = extractSchemaFromDef(value);\n required.push(key);\n }\n }\n\n return {\n type: \"object\",\n properties,\n ...(required.length > 0 ? { required } : {}),\n };\n }\n case \"ZodOptional\":\n return extractSchemaFromDef(def.innerType as z.ZodType);\n case \"ZodEnum\":\n return { type: \"string\", enum: def.values as string[] };\n default:\n return {};\n }\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","/**\n * Shared utilities for CLI backends (Copilot, Claude).\n * Extracted to avoid duplication between copilot.ts and claude.ts.\n */\nimport type { Message, JSONValue } from \"../types.js\";\nimport { getTextContent } from \"../types.js\";\n\n/** Extract the last user message as plain text */\nexport function extractLastUserPrompt(messages: Message[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === \"user\") {\n return getTextContent(msg.content);\n }\n }\n return \"\";\n}\n\nfunction serializeToolCall(tc: { name: string; args: JSONValue }): string {\n const args = typeof tc.args === \"string\" ? tc.args : JSON.stringify(tc.args);\n return ` Tool call: ${tc.name}(${args})`;\n}\n\nfunction serializeToolResult(tr: { name: string; result: JSONValue; isError?: boolean }): string {\n const result = typeof tr.result === \"string\" ? tr.result : JSON.stringify(tr.result);\n const prefix = tr.isError ? \"[ERROR] \" : \"\";\n return ` ${tr.name} → ${prefix}${result}`;\n}\n\n/** Build prompt with conversation history for CLI backends that create fresh sessions */\nexport function buildContextualPrompt(messages: Message[]): string {\n if (messages.length <= 1) {\n return extractLastUserPrompt(messages);\n }\n\n const history = messages.slice(0, -1).map((msg) => {\n if (msg.role === \"user\") {\n return `User: ${msg.content ? getTextContent(msg.content) : \"\"}`;\n }\n if (msg.role === \"tool\" && msg.toolResults) {\n const results = msg.toolResults.map(serializeToolResult).join(\"\\n\");\n return `Tool results:\\n${results}`;\n }\n if (msg.role === \"assistant\") {\n const parts: string[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const thinking = (msg as any).thinking as string | undefined;\n if (thinking) {\n parts.push(`[reasoning: ${thinking}]`);\n }\n const text = msg.content ? getTextContent(msg.content) : \"\";\n if (text) parts.push(text);\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n parts.push(msg.toolCalls.map(serializeToolCall).join(\"\\n\"));\n }\n return `Assistant: ${parts.join(\"\\n\")}`;\n }\n const text = msg.content ? getTextContent(msg.content) : \"\";\n return `${msg.role}: ${text}`;\n }).join(\"\\n\");\n\n const lastPrompt = extractLastUserPrompt(messages);\n\n return `Conversation history:\\n${history}\\n\\nUser: ${lastPrompt}`;\n}\n","import type {\n IAgent,\n IAgentService,\n FullAgentConfig,\n AgentResult,\n AgentEvent,\n Message,\n RunOptions,\n StructuredOutputConfig,\n ToolDefinition,\n ClaudeBackendOptions,\n ModelInfo,\n ValidationResult,\n JSONValue,\n PermissionRequest as UnifiedPermissionRequest,\n PermissionDecision,\n PermissionScope,\n UserInputRequest,\n UserInputResponse,\n SupervisorHooks,\n} from \"../types.js\";\nimport { classifyAgentError, isRecoverableErrorCode } from \"../types.js\";\nimport { BaseAgent } from \"../base-agent.js\";\nimport { DisposedError, SubprocessError, AbortError } from \"../errors.js\";\nimport { zodToJsonSchema } from \"../utils/schema.js\";\nimport { extractLastUserPrompt, buildContextualPrompt } from \"./shared.js\";\n\nexport type { ClaudeBackendOptions } from \"../types.js\";\n\n// ─── Local Type Definitions (matching @anthropic-ai/claude-agent-sdk shapes) ──\n// Avoids requiring the SDK to be installed at compile time.\n\n/** @internal Claude SDK PermissionUpdate destination */\ntype PermissionUpdateDestination =\n | \"userSettings\"\n | \"projectSettings\"\n | \"localSettings\"\n | \"session\"\n | \"cliArg\";\n\n/** @internal Claude SDK PermissionUpdate */\ninterface SDKPermissionUpdate {\n type: \"addRules\" | \"replaceRules\" | \"removeRules\" | \"setMode\" | \"addDirectories\" | \"removeDirectories\";\n destination: PermissionUpdateDestination;\n [key: string]: unknown;\n}\n\n/** @internal Claude SDK PermissionResult */\ntype SDKPermissionResult =\n | {\n behavior: \"allow\";\n updatedInput?: Record<string, unknown>;\n updatedPermissions?: SDKPermissionUpdate[];\n toolUseID?: string;\n }\n | {\n behavior: \"deny\";\n message: string;\n interrupt?: boolean;\n toolUseID?: string;\n };\n\n/** @internal Claude SDK CanUseTool callback */\ntype SDKCanUseTool = (\n toolName: string,\n input: Record<string, unknown>,\n options: {\n signal: AbortSignal;\n suggestions?: SDKPermissionUpdate[];\n blockedPath?: string;\n decisionReason?: string;\n toolUseID: string;\n agentID?: string;\n },\n) => Promise<SDKPermissionResult>;\n\n/** @internal MCP server name used when registering agent-sdk tools */\nconst MCP_SERVER_NAME = \"agent-sdk-tools\";\nconst MCP_TOOL_PREFIX = `mcp__${MCP_SERVER_NAME}__`;\n\n/** @internal Claude Code MCP tool naming convention: mcp__<server>__<tool> */\nfunction mcpToolName(toolName: string): string {\n return `${MCP_TOOL_PREFIX}${toolName}`;\n}\n\n/** @internal Strip MCP prefix to recover original tool name */\nfunction stripMcpPrefix(name: string): string {\n return name.startsWith(MCP_TOOL_PREFIX) ? name.slice(MCP_TOOL_PREFIX.length) : name;\n}\n\n/**\n * Claude CLI built-in tool names that should be filtered from AgentEvent stream.\n * These are internal tools handled by the CLI runtime, not user-registered tools.\n * Matches Copilot behavior where ask_user is callback-only, never exposed as tool events.\n */\nconst CLAUDE_INTERNAL_TOOL_NAMES = new Set([\"AskUserQuestion\"]);\n\n/** @internal Claude SDK Options */\ninterface SDKOptions {\n abortController?: AbortController;\n allowedTools?: string[];\n canUseTool?: SDKCanUseTool;\n cwd?: string;\n disallowedTools?: string[];\n env?: { [envVar: string]: string | undefined };\n includePartialMessages?: boolean;\n maxTurns?: number;\n model?: string;\n outputFormat?: { type: \"json_schema\"; schema: Record<string, unknown> };\n pathToClaudeCodeExecutable?: string;\n permissionMode?: string;\n persistSession?: boolean;\n resume?: string;\n sessionId?: string;\n systemPrompt?:\n | string\n | { type: \"preset\"; preset: \"claude_code\"; append?: string };\n tools?: string[];\n mcpServers?: Record<string, unknown>;\n}\n\n/** @internal Claude SDK ModelInfo */\ninterface SDKModelInfo {\n value: string;\n displayName: string;\n description: string;\n}\n\n/** @internal Claude SDK ResultSuccess */\ninterface SDKResultSuccess {\n type: \"result\";\n subtype: \"success\";\n result: string;\n structured_output?: unknown;\n num_turns: number;\n total_cost_usd: number;\n usage: Record<string, number>;\n modelUsage: Record<string, { inputTokens: number; outputTokens: number }>;\n session_id: string;\n}\n\n/** @internal Claude SDK ResultError */\ninterface SDKResultError {\n type: \"result\";\n subtype: string;\n errors: string[];\n is_error: boolean;\n usage: Record<string, number>;\n modelUsage: Record<string, { inputTokens: number; outputTokens: number }>;\n session_id: string;\n}\n\n/** @internal Claude SDK message union */\ninterface SDKMessage {\n type: string;\n subtype?: string;\n [key: string]: unknown;\n}\n\n/** @internal Claude SDK Query interface — AsyncGenerator<SDKMessage> with control methods */\ninterface SDKQuery extends AsyncGenerator<SDKMessage, void> {\n close(): void;\n interrupt(): Promise<void>;\n supportedModels(): Promise<SDKModelInfo[]>;\n}\n\n/** @internal SDK's MCP tool definition */\ninterface SDKMcpToolDefinition {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n handler: (args: Record<string, unknown>, extra: unknown) => Promise<{ content: Array<{ type: string; text: string }> }>;\n}\n\n/** @internal SDK server config */\ninterface SDKMcpServerConfigWithInstance {\n type: \"sdk\";\n name: string;\n instance: unknown;\n}\n\n/** @internal */\ntype SDKModule = {\n query: (params: { prompt: string; options?: SDKOptions }) => SDKQuery;\n createSdkMcpServer: (options: {\n name: string;\n version?: string;\n tools?: SDKMcpToolDefinition[];\n }) => SDKMcpServerConfigWithInstance;\n tool: (\n name: string,\n description: string,\n inputSchema: Record<string, unknown>,\n handler: (args: Record<string, unknown>, extra: unknown) => Promise<{ content: Array<{ type: string; text: string }> }>,\n ) => SDKMcpToolDefinition;\n};\n\n// ─── Dynamic SDK Loader ─────────────────────────────────────────\n\n/** Module-level mock set by _injectSDK() for testing */\nlet _sdkMock: SDKModule | null = null;\n\n/** Load the Claude SDK. Checks module-level mock first, then dynamic import. */\nasync function loadSDK(): Promise<SDKModule> {\n if (_sdkMock) return _sdkMock;\n try {\n // @ts-ignore — peer dependency, not present at compile time\n return (await import(\"@anthropic-ai/claude-agent-sdk\")) as SDKModule;\n } catch {\n throw new SubprocessError(\n \"@anthropic-ai/claude-agent-sdk is not installed. Install it: npm install @anthropic-ai/claude-agent-sdk\",\n );\n }\n}\n\n/** @internal For testing: inject mock SDK module */\nexport function _injectSDK(mock: SDKModule | null): void {\n _sdkMock = mock;\n}\n\n/** @internal For testing: reset injected SDK */\nexport function _resetSDK(): void {\n _sdkMock = null;\n}\n\n// ─── Known Models ───────────────────────────────────────────────\n\nconst ANTHROPIC_MODELS_URL = \"https://api.anthropic.com/v1/models\";\nconst ANTHROPIC_API_VERSION = \"2023-06-01\";\nconst ANTHROPIC_OAUTH_BETA = \"oauth-2025-04-20\";\n\n// ─── Tool Mapping ───────────────────────────────────────────────\n\n/**\n * Normalize Claude's AskUserQuestion input format to UserInputRequest.\n * Claude sends: { questions: [{ question, options?: [{ label }] }] }\n * SDK expects: { question, choices?, allowFreeform? }\n */\nfunction normalizeAskUserInput(args: Record<string, unknown>): UserInputRequest {\n // Direct format (already normalized or simple question)\n if (typeof args.question === \"string\") {\n return {\n question: args.question,\n choices: Array.isArray(args.choices) ? args.choices as string[] : undefined,\n allowFreeform: args.allowFreeform !== false,\n };\n }\n\n // Claude's nested format: { questions: [{ question, options?: [{ label }] }] }\n const questions = args.questions as Array<{\n question: string;\n options?: Array<{ label: string }>;\n }> | undefined;\n\n if (questions && questions.length > 0) {\n const first = questions[0];\n return {\n question: first.question,\n choices: first.options?.map((o) => o.label),\n allowFreeform: true,\n };\n }\n\n // Fallback: stringify the entire input as the question\n return { question: JSON.stringify(args), allowFreeform: true };\n}\n\nfunction buildMcpServer(\n sdk: SDKModule,\n tools: ToolDefinition[],\n toolResultCapture?: Map<string, JSONValue>,\n onAskUser?: SupervisorHooks[\"onAskUser\"],\n): SDKMcpServerConfigWithInstance | undefined {\n if (tools.length === 0 && !onAskUser) return undefined;\n\n const mcpTools = tools.map((tool) => {\n // Claude SDK's tool() expects a Zod raw shape ({key: z.string(), ...}),\n // not a JSON Schema object. Extract .shape from ZodObject.\n const zodSchema = tool.parameters as { shape?: Record<string, unknown> };\n const inputSchema = zodSchema.shape ?? zodToJsonSchema(tool.parameters) as Record<string, unknown>;\n return sdk.tool(\n tool.name,\n tool.description ?? \"\",\n inputSchema,\n async (args: Record<string, unknown>) => {\n const result = await tool.execute(args);\n if (toolResultCapture) {\n toolResultCapture.set(tool.name, result as JSONValue);\n }\n return {\n content: [\n {\n type: \"text\" as const,\n text: typeof result === \"string\" ? result : JSON.stringify(result),\n },\n ],\n };\n },\n );\n });\n\n // Inject ask_user MCP tool when onAskUser callback is configured\n if (onAskUser) {\n const askUserTool = sdk.tool(\n \"ask_user\",\n \"Ask the user a question and wait for their response\",\n {\n question: { type: \"string\", description: \"The question to ask the user\" },\n choices: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Optional list of choices for multiple choice\",\n },\n questions: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n question: { type: \"string\" },\n options: { type: \"array\", items: { type: \"object\", properties: { label: { type: \"string\" } } } },\n },\n },\n description: \"Alternative nested question format\",\n },\n },\n async (args: Record<string, unknown>) => {\n const normalized = normalizeAskUserInput(args);\n // No parent signal available in MCP tool context; provide a standalone controller\n const response: UserInputResponse = await onAskUser(normalized, AbortSignal.timeout(300_000));\n return {\n content: [{ type: \"text\" as const, text: response.answer }],\n };\n },\n );\n mcpTools.push(askUserTool);\n }\n\n return sdk.createSdkMcpServer({\n name: MCP_SERVER_NAME,\n version: \"1.0.0\",\n tools: mcpTools,\n });\n}\n\n// ─── Permission Mapping ─────────────────────────────────────────\n\n/** Map our PermissionScope to Claude SDK's PermissionUpdateDestination */\nfunction scopeToDestination(scope: PermissionScope): PermissionUpdateDestination {\n switch (scope) {\n case \"once\":\n return \"session\";\n case \"session\":\n return \"session\";\n case \"project\":\n return \"projectSettings\";\n case \"always\":\n return \"userSettings\";\n }\n}\n\n/** Map Claude SDK suggestions to our PermissionScope */\nfunction destinationToScope(dest: PermissionUpdateDestination): PermissionScope {\n switch (dest) {\n case \"session\":\n case \"cliArg\":\n return \"session\";\n case \"projectSettings\":\n case \"localSettings\":\n return \"project\";\n case \"userSettings\":\n return \"always\";\n }\n}\n\n/** Extract best suggestedScope from SDK's PermissionUpdate[] */\nfunction extractSuggestedScope(\n suggestions?: SDKPermissionUpdate[],\n): PermissionScope | undefined {\n if (!suggestions || suggestions.length === 0) return undefined;\n // Use the destination of the first suggestion as the scope hint\n return destinationToScope(suggestions[0].destination);\n}\n\nfunction buildCanUseTool(\n config: FullAgentConfig,\n): SDKCanUseTool | undefined {\n const onPermission = config.supervisor?.onPermission;\n if (!onPermission) return undefined;\n\n const permissionStore = config.permissionStore;\n\n return async (\n rawToolName: string,\n input: Record<string, unknown>,\n options,\n ): Promise<SDKPermissionResult> => {\n const toolName = stripMcpPrefix(rawToolName);\n // Check store first — if already approved, skip callback\n if (permissionStore && await permissionStore.isApproved(toolName)) {\n return {\n behavior: \"allow\",\n toolUseID: options.toolUseID,\n };\n }\n\n const unifiedRequest: UnifiedPermissionRequest = {\n toolName,\n toolArgs: input,\n toolCallId: options.toolUseID,\n suggestedScope: extractSuggestedScope(options.suggestions),\n rawSDKRequest: { toolName, input, ...options },\n };\n\n const decision: PermissionDecision = await onPermission(\n unifiedRequest,\n options.signal,\n );\n\n if (decision.allowed) {\n // Persist approval to store\n if (permissionStore && decision.scope) {\n await permissionStore.approve(toolName, decision.scope);\n }\n\n const result: SDKPermissionResult = {\n behavior: \"allow\",\n toolUseID: options.toolUseID,\n };\n if (decision.modifiedInput) {\n (result as { updatedInput?: Record<string, unknown> }).updatedInput =\n decision.modifiedInput;\n }\n // Map scope decision to SDK's updatedPermissions\n if (decision.scope && decision.scope !== \"once\" && options.suggestions) {\n (result as { updatedPermissions?: SDKPermissionUpdate[] }).updatedPermissions =\n options.suggestions.map((s) => ({\n ...s,\n destination: scopeToDestination(decision.scope!),\n }));\n }\n return result;\n }\n\n return {\n behavior: \"deny\",\n message: decision.reason ?? \"Permission denied\",\n toolUseID: options.toolUseID,\n };\n };\n}\n\n// ─── Usage Aggregation Helper ───────────────────────────────────\n\nfunction aggregateUsage(\n modelUsage?: Record<string, { inputTokens: number; outputTokens: number }>,\n): { promptTokens: number; completionTokens: number } {\n let promptTokens = 0;\n let completionTokens = 0;\n for (const u of Object.values(modelUsage ?? {})) {\n promptTokens += u.inputTokens ?? 0;\n completionTokens += u.outputTokens ?? 0;\n }\n return { promptTokens, completionTokens };\n}\n\n// ─── Event Mapping ──────────────────────────────────────────────\n\n/**\n * Tracks tool call IDs to tool names for Claude backend.\n *\n * The Claude SDK emits tool_use blocks (with `id` and `name`) in assistant messages,\n * but tool_use_summary messages only carry `tool_name` (and optionally\n * `preceding_tool_use_ids`). This tracker correlates start/end events using a\n * per-tool-name FIFO queue to handle parallel calls to the same tool.\n */\nclass ClaudeToolCallTracker {\n private queues = new Map<string, string[]>();\n\n trackStart(toolCallId: string, toolName: string): void {\n if (!this.queues.has(toolName)) {\n this.queues.set(toolName, []);\n }\n this.queues.get(toolName)!.push(toolCallId);\n }\n\n /** Peek at the current tool call ID for a tool name (does not consume) */\n peekToolCallId(toolName: string): string {\n const queue = this.queues.get(toolName);\n if (!queue || queue.length === 0) return \"\";\n return queue[0];\n }\n\n /** Consume and return the first tool call ID for a tool name */\n consumeToolCallId(toolName: string): string {\n const queue = this.queues.get(toolName);\n if (!queue || queue.length === 0) return \"\";\n return queue.shift()!;\n }\n\n clear(): void {\n this.queues.clear();\n }\n}\n\nfunction mapSDKMessage(msg: SDKMessage, thinkingBlockIndices?: Set<number>, toolCallTracker?: ClaudeToolCallTracker): AgentEvent | AgentEvent[] | null {\n switch (msg.type) {\n case \"assistant\": {\n // Full assistant message — contains BetaMessage with content blocks\n const betaMessage = msg.message as {\n content?: Array<{\n type: string;\n text?: string;\n name?: string;\n input?: unknown;\n id?: string;\n }>;\n } | undefined;\n if (!betaMessage?.content) return null;\n\n const events: AgentEvent[] = [];\n\n // Emit tool_call_start for each tool_use block\n // NOTE: Text content is NOT extracted here — during streaming it arrives\n // via content_block_delta events, and during executeRun it comes from\n // the result message. Emitting text from assistant messages would cause\n // duplication.\n for (const block of betaMessage.content) {\n if (block.type === \"tool_use\") {\n const toolCallId = String(block.id ?? \"\");\n const toolName = stripMcpPrefix(block.name ?? \"unknown\");\n // Filter out internal Claude CLI tools (e.g. AskUserQuestion)\n if (CLAUDE_INTERNAL_TOOL_NAMES.has(toolName)) continue;\n if (toolCallTracker) {\n toolCallTracker.trackStart(toolCallId, toolName);\n }\n events.push({\n type: \"tool_call_start\",\n toolCallId,\n toolName,\n args: (block.input as JSONValue) ?? {},\n });\n }\n }\n\n return events.length > 0 ? events : null;\n }\n\n case \"user\": {\n // User messages with tool_use_result indicate tool completion\n const toolResult = msg.tool_use_result as JSONValue | undefined;\n // Extract tool name from the message context if available\n if (toolResult !== undefined) {\n // The user message after tool execution — emit tool_call_end\n // tool_name may not be in user messages, but we can infer from context\n return null; // Handled via tool_use_summary below\n }\n return null;\n }\n\n case \"tool_use_summary\": {\n // Emitted after tool execution — contains summary of tool results\n const summary = msg.summary as string | undefined;\n const toolName = stripMcpPrefix((msg.tool_name as string | undefined) ?? \"unknown\");\n // Filter out internal Claude CLI tools (e.g. AskUserQuestion)\n if (CLAUDE_INTERNAL_TOOL_NAMES.has(toolName)) return null;\n // Resolve toolCallId: prefer preceding_tool_use_ids, fall back to tracker\n const precedingIds = msg.preceding_tool_use_ids as string[] | undefined;\n let toolCallId = \"\";\n if (precedingIds && precedingIds.length > 0) {\n toolCallId = precedingIds[0];\n // Consume from tracker to keep queue in sync\n if (toolCallTracker) toolCallTracker.consumeToolCallId(toolName);\n } else if (toolCallTracker) {\n toolCallId = toolCallTracker.consumeToolCallId(toolName);\n }\n // Always emit tool_call_end — summary may be empty\n return {\n type: \"tool_call_end\",\n toolCallId,\n toolName,\n result: (summary ?? null) as JSONValue,\n };\n }\n\n case \"stream_event\": {\n // Partial streaming events — BetaRawMessageStreamEvent\n const event = msg.event as {\n type: string;\n delta?: { type: string; text?: string; thinking?: string };\n content_block?: { type: string; name?: string; id?: string };\n index?: number;\n } | undefined;\n if (!event) return null;\n\n // Thinking block deltas — emit thinking_delta instead of text_delta\n if (\n event.type === \"content_block_delta\" &&\n event.index !== undefined &&\n thinkingBlockIndices?.has(event.index)\n ) {\n const thinkingText = String(event.delta?.thinking ?? event.delta?.text ?? \"\");\n if (thinkingText) {\n return { type: \"thinking_delta\", text: thinkingText };\n }\n return null;\n }\n\n if (\n event.type === \"content_block_delta\" &&\n event.delta?.type === \"text_delta\" &&\n event.delta.text\n ) {\n return { type: \"text_delta\", text: event.delta.text };\n }\n\n if (event.type === \"content_block_start\" && event.content_block?.type === \"thinking\") {\n if (thinkingBlockIndices && event.index !== undefined) {\n thinkingBlockIndices.add(event.index);\n }\n return { type: \"thinking_start\" };\n }\n\n if (event.type === \"content_block_stop\" && event.index !== undefined && thinkingBlockIndices?.has(event.index)) {\n thinkingBlockIndices.delete(event.index);\n return { type: \"thinking_end\" };\n }\n\n return null;\n }\n\n case \"tool_progress\": {\n // Heartbeat while tool is executing — not a new tool call\n return null;\n }\n\n case \"result\": {\n if (msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n return {\n type: \"usage_update\",\n ...aggregateUsage(r.modelUsage),\n };\n }\n if (msg.is_error) {\n const r = msg as unknown as SDKResultError;\n const errorMsg = r.errors?.join(\"; \") ?? \"Unknown error\";\n const code = classifyAgentError(errorMsg);\n return {\n type: \"error\",\n error: errorMsg,\n recoverable: isRecoverableErrorCode(code),\n code,\n };\n }\n return null;\n }\n\n default:\n return null;\n }\n}\n\n// ─── ClaudeAgent ────────────────────────────────────────────────\n\nclass ClaudeAgent extends BaseAgent {\n protected readonly backendName = \"claude\";\n private readonly options: ClaudeBackendOptions;\n private readonly tools: ToolDefinition[];\n private readonly canUseTool: SDKCanUseTool | undefined;\n private readonly isPersistent: boolean;\n private _sessionId: string | undefined;\n private activeQuery: SDKQuery | null = null;\n\n constructor(config: FullAgentConfig, options: ClaudeBackendOptions) {\n super(config);\n this.options = options;\n this.tools = config.tools ?? [];\n this.canUseTool = buildCanUseTool(config);\n this.isPersistent = config.sessionMode === \"persistent\";\n\n // Restore session ID from stored identifier for session resume after server restart.\n // buildQueryOptions() uses _sessionId to set opts.resume when isPersistent.\n if (options.resumeSessionId) {\n this._sessionId = options.resumeSessionId;\n }\n }\n\n override get sessionId(): string | undefined {\n return this._sessionId;\n }\n\n override async interrupt(): Promise<void> {\n try {\n if (this.activeQuery) {\n await this.activeQuery.interrupt();\n }\n } catch {\n // fire-and-forget: SDK interrupt errors should not prevent abort\n } finally {\n this.abort();\n }\n }\n\n /** Clear persistent session state after an error so next call starts fresh */\n private clearPersistentSession(): void {\n this._sessionId = undefined;\n }\n\n private emitSessionInfo(sessionId: string): AgentEvent {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n const transcriptPath = home\n ? `${home}/.claude/projects/.session/sessions/${sessionId}/conversation.jsonl`\n : undefined;\n return { type: \"session_info\", sessionId, transcriptPath, backend: \"claude\" };\n }\n\n private buildQueryOptions(signal: AbortSignal, options: RunOptions): SDKOptions {\n const ac = new AbortController();\n // Link external signal → SDK's abort controller\n signal.addEventListener(\"abort\", () => ac.abort(), { once: true });\n\n const opts: SDKOptions = {\n abortController: ac,\n model: options.model,\n maxTurns: this.options.maxTurns,\n cwd: this.options.workingDirectory,\n pathToClaudeCodeExecutable: this.options.cliPath,\n persistSession: this.isPersistent,\n includePartialMessages: true,\n canUseTool: this.canUseTool,\n };\n\n // Resume persistent session on subsequent calls\n if (this.isPersistent && this._sessionId) {\n opts.resume = this._sessionId;\n }\n\n if (this.config.systemPrompt) {\n opts.systemPrompt = this.config.systemPrompt;\n }\n\n if (this.options.oauthToken || this.options.env) {\n opts.env = {\n ...process.env,\n ...(this.options.env ?? {}),\n ...(this.options.oauthToken\n ? { CLAUDE_CODE_OAUTH_TOKEN: this.options.oauthToken }\n : {}),\n };\n }\n\n // Auto-set permissionMode when canUseTool is configured so Claude CLI\n // actually invokes the callback instead of using built-in rules.\n if (opts.canUseTool && !opts.permissionMode) {\n opts.permissionMode = \"default\";\n }\n\n // When availableTools is set, restrict built-in tool availability.\n // opts.tools controls which tools are available (Bash, Read, Edit, etc.).\n // opts.allowedTools only auto-approves permissions but does NOT restrict availability.\n // MCP tool names are added to allowedTools later by buildMcpConfig().\n if (this.config.availableTools) {\n opts.tools = [...this.config.availableTools];\n }\n\n return opts;\n }\n\n private async buildMcpConfig(\n opts: SDKOptions,\n toolResultCapture?: Map<string, JSONValue>,\n ): Promise<SDKOptions> {\n const onAskUser = this.config.supervisor?.onAskUser;\n if (this.tools.length === 0 && !onAskUser) return opts;\n\n const sdk = await loadSDK();\n const mcpServer = buildMcpServer(sdk, this.tools, toolResultCapture, onAskUser);\n if (mcpServer) {\n opts.mcpServers = {\n [MCP_SERVER_NAME]: mcpServer,\n };\n // Auto-allow MCP tools so Claude Code invokes them without blocking.\n // Claude Code names MCP tools as mcp__<server>__<tool>.\n const mcpToolNames = this.tools.map((t) => mcpToolName(t.name));\n if (onAskUser) {\n mcpToolNames.push(mcpToolName(\"ask_user\"));\n }\n opts.allowedTools = [...(opts.allowedTools ?? []), ...mcpToolNames];\n }\n\n // When onAskUser is configured, block built-in AskUserQuestion so Claude uses our MCP tool\n if (onAskUser) {\n opts.disallowedTools = [...(opts.disallowedTools ?? []), \"AskUserQuestion\"];\n }\n\n return opts;\n }\n\n // ─── Retry Helpers (shared across executeRun/RunStructured/Stream) ──\n\n /** Setup a retry query: clear session, rebuild with full history */\n private async prepareRetryQuery(\n sdk: SDKModule,\n messages: Message[],\n signal: AbortSignal,\n options: RunOptions,\n toolResultCapture: Map<string, JSONValue>,\n modifyOpts?: (opts: SDKOptions) => void,\n ): Promise<SDKQuery> {\n this.clearPersistentSession();\n const retryPrompt = buildContextualPrompt(messages);\n let retryOpts = this.buildQueryOptions(signal, options);\n toolResultCapture.clear();\n retryOpts = await this.buildMcpConfig(retryOpts, toolResultCapture);\n modifyOpts?.(retryOpts);\n const retryQ = sdk.query({ prompt: retryPrompt, options: retryOpts });\n this.activeQuery = retryQ;\n return retryQ;\n }\n\n /** Extract tool_use blocks from an assistant SDK message into toolCalls array */\n private collectToolCallsFromMessage(\n msg: SDKMessage,\n toolCalls: AgentResult[\"toolCalls\"],\n toolResultCapture: Map<string, JSONValue>,\n ): void {\n if (msg.type !== \"assistant\") return;\n const betaMessage = msg.message as {\n content?: Array<{ type: string; name?: string; input?: unknown }>;\n } | undefined;\n if (!betaMessage?.content) return;\n for (const block of betaMessage.content) {\n if (block.type === \"tool_use\") {\n const toolName = stripMcpPrefix(block.name ?? \"unknown\");\n if (CLAUDE_INTERNAL_TOOL_NAMES.has(toolName)) continue;\n toolCalls.push({\n toolName,\n args: (block.input as JSONValue) ?? {},\n result: toolResultCapture.get(toolName) ?? null,\n approved: true,\n });\n }\n }\n }\n\n /** Back-fill tool results from capture map on summary/result messages */\n private backfillToolResults(\n msg: SDKMessage,\n toolCalls: AgentResult[\"toolCalls\"],\n toolResultCapture: Map<string, JSONValue>,\n ): void {\n if (msg.type !== \"tool_use_summary\" && msg.type !== \"result\") return;\n for (const tc of toolCalls) {\n if (tc.result === null) {\n const captured = toolResultCapture.get(tc.toolName);\n if (captured !== undefined) tc.result = captured;\n }\n }\n }\n\n /** Wrap retry inner loop with shared error handling */\n private async withRetryErrorHandling<T>(\n signal: AbortSignal,\n fn: () => Promise<T>,\n ): Promise<T> {\n try {\n return await fn();\n } catch (retryError) {\n if (this.isPersistent) this.clearPersistentSession();\n if (signal.aborted) throw new AbortError();\n throw retryError;\n } finally {\n this.activeQuery = null;\n }\n }\n\n // ─── executeRun ─────────────────────────────────────────────────\n\n protected async executeRun(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult> {\n this.checkAbort(signal);\n\n const sdk = await loadSDK();\n const isResuming = this.isPersistent && this._sessionId !== undefined;\n const prompt = isResuming\n ? extractLastUserPrompt(messages)\n : buildContextualPrompt(messages);\n let opts = this.buildQueryOptions(signal, options);\n const toolResultCapture = new Map<string, JSONValue>();\n opts = await this.buildMcpConfig(opts, toolResultCapture);\n\n const q = sdk.query({ prompt, options: opts });\n this.activeQuery = q;\n const toolCalls: AgentResult[\"toolCalls\"] = [];\n let output: string | null = null;\n let usage: AgentResult[\"usage\"];\n\n try {\n for await (const msg of q) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n\n // Capture result and session_id\n if (msg.type === \"result\") {\n if (msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n }\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n if (isResuming && this.isPersistent) {\n const retryQ = await this.prepareRetryQuery(sdk, messages, signal, options, toolResultCapture);\n toolCalls.length = 0;\n output = null;\n return this.withRetryErrorHandling(signal, async () => {\n for await (const msg of retryQ) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n if (msg.type === \"result\") {\n if (msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n }\n return {\n output,\n structuredOutput: undefined as AgentResult[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n });\n }\n if (this.isPersistent) this.clearPersistentSession();\n throw e;\n } finally {\n this.activeQuery = null;\n }\n\n return {\n output,\n structuredOutput: undefined as AgentResult[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n }\n\n // ─── executeRunStructured ───────────────────────────────────────\n\n protected async executeRunStructured<T>(\n messages: Message[],\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult<T>> {\n this.checkAbort(signal);\n\n const sdk = await loadSDK();\n const isResuming = this.isPersistent && this._sessionId !== undefined;\n const prompt = isResuming\n ? extractLastUserPrompt(messages)\n : buildContextualPrompt(messages);\n let opts = this.buildQueryOptions(signal, options);\n const toolResultCapture = new Map<string, JSONValue>();\n opts = await this.buildMcpConfig(opts, toolResultCapture);\n\n // Claude SDK has native structured output via outputFormat\n const jsonSchema = zodToJsonSchema(schema.schema);\n opts.outputFormat = {\n type: \"json_schema\",\n schema: jsonSchema as Record<string, unknown>,\n };\n\n const q = sdk.query({ prompt, options: opts });\n this.activeQuery = q;\n const toolCalls: AgentResult[\"toolCalls\"] = [];\n let output: string | null = null;\n let structuredOutput: T | undefined;\n let usage: AgentResult[\"usage\"];\n\n try {\n for await (const msg of q) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n\n // Claude SDK returns parsed structured_output when using outputFormat\n if (r.structured_output !== undefined) {\n try {\n structuredOutput = schema.schema.parse(r.structured_output);\n } catch {\n // Fallback: try parsing result string\n try {\n structuredOutput = schema.schema.parse(JSON.parse(r.result));\n } catch {\n // Leave undefined\n }\n }\n } else if (r.result) {\n // Fallback: parse from result string\n try {\n const jsonMatch = r.result.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n const raw = jsonMatch ? jsonMatch[1]!.trim() : r.result.trim();\n structuredOutput = schema.schema.parse(JSON.parse(raw));\n } catch {\n // Leave undefined\n }\n }\n\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.type === \"result\" && msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n if (isResuming && this.isPersistent) {\n const retryQ = await this.prepareRetryQuery(\n sdk, messages, signal, options, toolResultCapture,\n (opts) => { opts.outputFormat = { type: \"json_schema\", schema: jsonSchema as Record<string, unknown> }; },\n );\n toolCalls.length = 0;\n output = null;\n structuredOutput = undefined;\n return this.withRetryErrorHandling(signal, async () => {\n for await (const msg of retryQ) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n if (r.structured_output !== undefined) {\n try { structuredOutput = schema.schema.parse(r.structured_output); } catch {\n try { structuredOutput = schema.schema.parse(JSON.parse(r.result)); } catch {\n // Leave undefined\n }\n }\n } else if (r.result) {\n try {\n const jsonMatch = r.result.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n const raw = jsonMatch ? jsonMatch[1]!.trim() : r.result.trim();\n structuredOutput = schema.schema.parse(JSON.parse(raw));\n } catch {\n // Leave undefined\n }\n }\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.type === \"result\" && msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n return {\n output,\n structuredOutput: structuredOutput as AgentResult<T>[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n });\n }\n if (this.isPersistent) this.clearPersistentSession();\n throw e;\n } finally {\n this.activeQuery = null;\n }\n\n return {\n output,\n structuredOutput: structuredOutput as AgentResult<T>[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n }\n\n // ─── executeStream ──────────────────────────────────────────────\n\n protected async *executeStream(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent> {\n this.checkAbort(signal);\n\n const sdk = await loadSDK();\n const isResuming = this.isPersistent && this._sessionId !== undefined;\n const prompt = isResuming\n ? extractLastUserPrompt(messages)\n : buildContextualPrompt(messages);\n let opts = this.buildQueryOptions(signal, options);\n // Capture actual tool results from MCP handler execution\n const toolResultCapture = new Map<string, JSONValue>();\n opts = await this.buildMcpConfig(opts, toolResultCapture);\n\n const q = sdk.query({ prompt, options: opts });\n this.activeQuery = q;\n const thinkingBlockIndices = new Set<number>();\n const toolCallTracker = new ClaudeToolCallTracker();\n // Track pending tool calls to emit tool_call_end for tools without tool_use_summary\n const pendingStreamToolCalls = new Map<string, string>();\n let hasStreamedText = false;\n\n try {\n for await (const msg of q) {\n if (signal.aborted) throw new AbortError();\n\n const events = mapSDKMessage(msg, thinkingBlockIndices, toolCallTracker);\n if (events) {\n const mapped = Array.isArray(events) ? events : [events];\n for (const e of mapped) {\n // Track tool_call_start for fallback emission\n if (e.type === \"tool_call_start\") {\n pendingStreamToolCalls.set(e.toolCallId, e.toolName);\n }\n // Enrich tool_call_end with captured actual result instead of summary text\n if (e.type === \"tool_call_end\" && toolResultCapture.has(e.toolName)) {\n e.result = toolResultCapture.get(e.toolName)!;\n toolResultCapture.delete(e.toolName);\n pendingStreamToolCalls.delete(e.toolCallId);\n } else if (e.type === \"tool_call_end\") {\n pendingStreamToolCalls.delete(e.toolCallId);\n }\n if (e.type === \"text_delta\") hasStreamedText = true;\n yield e;\n }\n }\n\n // Capture session_id and emit done event on result\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n // Emit tool_call_end for any tools that executed but never got tool_use_summary\n for (const [toolCallId, toolName] of pendingStreamToolCalls) {\n if (toolResultCapture.has(toolName)) {\n yield {\n type: \"tool_call_end\" as const,\n toolCallId,\n toolName,\n result: toolResultCapture.get(toolName)!,\n };\n toolResultCapture.delete(toolName);\n }\n }\n pendingStreamToolCalls.clear();\n if (r.session_id) {\n if (this.isPersistent) {\n this._sessionId = r.session_id;\n }\n yield this.emitSessionInfo(r.session_id);\n }\n yield {\n type: \"done\",\n finalOutput: hasStreamedText ? null : r.result,\n ...(hasStreamedText ? { streamed: true } : {}),\n };\n }\n }\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n // Single retry on resume failure: clear session, rebuild with full history\n if (isResuming && this.isPersistent) {\n const retryQ = await this.prepareRetryQuery(sdk, messages, signal, options, toolResultCapture);\n const retryThinkingBlockIndices = new Set<number>();\n const retryToolCallTracker = new ClaudeToolCallTracker();\n const retryPendingToolCalls = new Map<string, string>();\n let retryHasStreamedText = false;\n try {\n for await (const msg of retryQ) {\n if (signal.aborted) throw new AbortError();\n const retryEvents = mapSDKMessage(msg, retryThinkingBlockIndices, retryToolCallTracker);\n if (retryEvents) {\n const mapped = Array.isArray(retryEvents) ? retryEvents : [retryEvents];\n for (const ev of mapped) {\n if (ev.type === \"tool_call_start\") {\n retryPendingToolCalls.set(ev.toolCallId, ev.toolName);\n }\n if (ev.type === \"tool_call_end\" && toolResultCapture.has(ev.toolName)) {\n ev.result = toolResultCapture.get(ev.toolName)!;\n toolResultCapture.delete(ev.toolName);\n retryPendingToolCalls.delete(ev.toolCallId);\n } else if (ev.type === \"tool_call_end\") {\n retryPendingToolCalls.delete(ev.toolCallId);\n }\n if (ev.type === \"text_delta\") retryHasStreamedText = true;\n yield ev;\n }\n }\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n for (const [toolCallId, toolName] of retryPendingToolCalls) {\n if (toolResultCapture.has(toolName)) {\n yield {\n type: \"tool_call_end\" as const,\n toolCallId,\n toolName,\n result: toolResultCapture.get(toolName)!,\n };\n toolResultCapture.delete(toolName);\n }\n }\n retryPendingToolCalls.clear();\n if (r.session_id) {\n if (this.isPersistent) {\n this._sessionId = r.session_id;\n }\n yield this.emitSessionInfo(r.session_id);\n }\n yield {\n type: \"done\",\n finalOutput: retryHasStreamedText ? null : r.result,\n ...(retryHasStreamedText ? { streamed: true } : {}),\n };\n }\n }\n } catch (retryError) {\n if (this.isPersistent) this.clearPersistentSession();\n if (signal.aborted) throw new AbortError();\n throw retryError;\n } finally {\n this.activeQuery = null;\n }\n return;\n }\n if (this.isPersistent) this.clearPersistentSession();\n throw e;\n } finally {\n this.activeQuery = null;\n }\n }\n\n override dispose(): void {\n this._sessionId = undefined;\n super.dispose();\n }\n}\n\n// ─── Helpers ────────────────────────────────────────────────────\n\nclass ClaudeAgentService implements IAgentService {\n readonly name = \"claude\";\n private disposed = false;\n private readonly options: ClaudeBackendOptions;\n private cachedModels: ModelInfo[] | null = null;\n\n constructor(options: ClaudeBackendOptions) {\n this.options = options;\n }\n\n createAgent(config: FullAgentConfig): IAgent {\n if (this.disposed) throw new DisposedError(\"ClaudeAgentService\");\n return new ClaudeAgent(config, this.options);\n }\n\n async listModels(): Promise<ModelInfo[]> {\n if (this.disposed) throw new DisposedError(\"ClaudeAgentService\");\n if (this.cachedModels) return this.cachedModels;\n\n const token = this.options.oauthToken;\n if (!token) {\n return [];\n }\n\n const res = await globalThis.fetch(\n `${ANTHROPIC_MODELS_URL}?limit=100`,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n \"anthropic-version\": ANTHROPIC_API_VERSION,\n \"anthropic-beta\": ANTHROPIC_OAUTH_BETA,\n },\n },\n );\n\n if (!res.ok) {\n return [];\n }\n\n const body = (await res.json()) as {\n data?: Array<{ id: string; display_name?: string; max_input_tokens?: number }>;\n };\n\n if (!body.data || body.data.length === 0) {\n return [];\n }\n\n this.cachedModels = body.data.map((m) => ({\n id: m.id,\n name: m.display_name,\n provider: \"claude\",\n ...(m.max_input_tokens != null && { contextWindow: m.max_input_tokens }),\n }));\n return this.cachedModels;\n }\n\n async validate(): Promise<ValidationResult> {\n if (this.disposed) throw new DisposedError(\"ClaudeAgentService\");\n\n const errors: string[] = [];\n try {\n await loadSDK();\n } catch (e) {\n errors.push(\n e instanceof Error ? e.message : String(e),\n );\n return { valid: false, errors };\n }\n\n // Verify CLI is accessible by attempting a minimal query\n try {\n const sdk = await loadSDK();\n const q = sdk.query({\n prompt: \"echo test\",\n options: {\n model: \"claude-sonnet-4-20250514\",\n pathToClaudeCodeExecutable: this.options.cliPath,\n cwd: this.options.workingDirectory,\n persistSession: false,\n maxTurns: 1,\n permissionMode: \"plan\",\n },\n });\n // Wait for first message (auth check)\n const first = await q.next();\n q.close();\n if (first.done) {\n errors.push(\"Claude CLI returned no messages — may not be authenticated.\");\n }\n } catch (e) {\n errors.push(\n `Failed to connect to Claude CLI: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n return { valid: errors.length === 0, errors };\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n this.cachedModels = null;\n }\n}\n\n// ─── Factory ────────────────────────────────────────────────────\n\n/** Create Claude CLI backend service. */\nexport function createClaudeService(\n options: ClaudeBackendOptions,\n): IAgentService {\n return new ClaudeAgentService(options);\n}\n"]}
1
+ {"version":3,"sources":["../../src/types/errors.ts","../../src/types/guards.ts","../../src/errors.ts","../../src/base-agent.ts","../../src/utils/schema.ts","../../src/backends/shared.ts","../../src/backends/claude.ts"],"names":["text","opts"],"mappings":"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","file":"claude.js","sourcesContent":["// ─── Unified Error Code Enum ───────────────────────────────────\n\n/** Unified error codes for all SDK errors — single source of truth. */\nexport enum ErrorCode {\n // Auth\n AUTH_EXPIRED = \"AUTH_EXPIRED\",\n AUTH_INVALID = \"AUTH_INVALID\",\n\n // Rate limiting\n RATE_LIMIT = \"RATE_LIMIT\",\n\n // Network\n NETWORK = \"NETWORK\",\n TIMEOUT = \"TIMEOUT\",\n\n // Provider\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MODEL_NOT_FOUND = \"MODEL_NOT_FOUND\",\n MODEL_OVERLOADED = \"MODEL_OVERLOADED\",\n CONTEXT_OVERFLOW = \"CONTEXT_OVERFLOW\",\n\n // Input / Response\n INVALID_INPUT = \"INVALID_INPUT\",\n INVALID_RESPONSE = \"INVALID_RESPONSE\",\n\n // SDK internal\n REENTRANCY = \"REENTRANCY\",\n DISPOSED = \"DISPOSED\",\n ABORTED = \"ABORTED\",\n INVALID_TRANSITION = \"INVALID_TRANSITION\",\n DEPENDENCY_MISSING = \"DEPENDENCY_MISSING\",\n BACKEND_NOT_INSTALLED = \"BACKEND_NOT_INSTALLED\",\n\n // Tool\n TOOL_EXECUTION = \"TOOL_EXECUTION\",\n PERMISSION_DENIED = \"PERMISSION_DENIED\",\n\n // Session\n SESSION_NOT_FOUND = \"SESSION_NOT_FOUND\",\n SESSION_EXPIRED = \"SESSION_EXPIRED\",\n\n // Provider resolution\n PROVIDER_NOT_FOUND = \"PROVIDER_NOT_FOUND\",\n AUTH_REQUIRED = \"AUTH_REQUIRED\",\n\n // Storage (generic)\n STORAGE_ERROR = \"STORAGE_ERROR\",\n // Storage (specific)\n STORAGE_NOT_FOUND = \"STORAGE_NOT_FOUND\",\n STORAGE_DUPLICATE_KEY = \"STORAGE_DUPLICATE_KEY\",\n STORAGE_IO_ERROR = \"STORAGE_IO_ERROR\",\n STORAGE_SERIALIZATION_ERROR = \"STORAGE_SERIALIZATION_ERROR\",\n}\n\n// ─── Classification ────────────────────────────────────────────\n\n/** Error codes that are typically recoverable (retry-safe) */\nconst RECOVERABLE_CODES = new Set<ErrorCode>([\n ErrorCode.TIMEOUT,\n ErrorCode.RATE_LIMIT,\n ErrorCode.NETWORK,\n ErrorCode.TOOL_EXECUTION,\n ErrorCode.MODEL_OVERLOADED,\n ErrorCode.PROVIDER_ERROR,\n]);\n\n/** Check if an error code is recoverable */\nexport function isRecoverableErrorCode(code: ErrorCode): boolean {\n return RECOVERABLE_CODES.has(code);\n}\n\n/** Classify an error message string into an ErrorCode */\nexport function classifyAgentError(error: string | Error): ErrorCode {\n const msg = (error instanceof Error ? error.message : error).toLowerCase();\n\n if (msg.includes(\"timeout\") || msg.includes(\"timed out\") || msg.includes(\"timedout\") || msg.includes(\"etimedout\")) {\n return ErrorCode.TIMEOUT;\n }\n\n if (msg.includes(\"rate limit\") || msg.includes(\"rate_limit\") || msg.includes(\"429\") || msg.includes(\"too many requests\")) {\n return ErrorCode.RATE_LIMIT;\n }\n\n if (msg.includes(\"unauthorized\") || msg.includes(\"401\") || msg.includes(\"auth\") && (msg.includes(\"expired\") || msg.includes(\"invalid\") || msg.includes(\"denied\") || msg.includes(\"failed\"))) {\n return ErrorCode.AUTH_EXPIRED;\n }\n\n if (msg.includes(\"econnrefused\") || msg.includes(\"econnreset\") || msg.includes(\"enotfound\") || msg.includes(\"network\") || msg.includes(\"fetch failed\") || msg.includes(\"socket hang up\")) {\n return ErrorCode.NETWORK;\n }\n\n if (msg.includes(\"subprocess\") || msg.includes(\"process exited\") || msg.includes(\"spawn\") || msg.includes(\"enoent\") || msg.includes(\"killed\")) {\n return ErrorCode.DEPENDENCY_MISSING;\n }\n\n if (msg.includes(\"abort\") || msg.includes(\"cancel\")) {\n return ErrorCode.ABORTED;\n }\n\n if (msg.includes(\"500\") || msg.includes(\"502\") || msg.includes(\"503\") || msg.includes(\"internal server error\") || msg.includes(\"service unavailable\") || msg.includes(\"bad gateway\") || msg.includes(\"overloaded\")) {\n return ErrorCode.PROVIDER_ERROR;\n }\n\n return ErrorCode.PROVIDER_ERROR;\n}\n","import type { ToolDeclaration, ToolDefinition } from \"./tools.js\";\nimport type { MessageContent, ContentPart } from \"./messages.js\";\n\n/** Type guard: checks if a ToolDeclaration has an execute function (i.e., is a ToolDefinition) */\nexport function isToolDefinition(\n tool: ToolDeclaration,\n): tool is ToolDefinition {\n return \"execute\" in tool && typeof (tool as ToolDefinition).execute === \"function\";\n}\n\n/** Type guard: checks if MessageContent is plain string */\nexport function isTextContent(content: MessageContent): content is string {\n return typeof content === \"string\";\n}\n\n/** Type guard: checks if MessageContent is multi-part array */\nexport function isMultiPartContent(\n content: MessageContent,\n): content is ContentPart[] {\n return Array.isArray(content);\n}\n\n/** Extract text from MessageContent regardless of format */\nexport function getTextContent(content: MessageContent): string {\n if (typeof content === \"string\") return content;\n return content\n .filter((p): p is Extract<ContentPart, { type: \"text\" }> => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\");\n}\n","import { ErrorCode } from \"./types/errors.js\";\n\n/** Options for constructing an AgentSDKError */\nexport interface AgentSDKErrorOptions extends ErrorOptions {\n /** Machine-readable error code */\n code?: string;\n /** Whether this error is retryable (default: false) */\n retryable?: boolean;\n /** HTTP status code hint (e.g. 401, 429, 500) */\n httpStatus?: number;\n}\n\n/** Base error class for agent-sdk.\n *\n * Use `AgentSDKError.is(err)` for reliable cross-module `instanceof` checks\n * (works across separately bundled entry points where `instanceof` may fail). */\nexport class AgentSDKError extends Error {\n /** @internal Marker for cross-bundle identity checks */\n readonly _agentSDKError = true as const;\n /** Machine-readable error code. Prefer values from the ErrorCode enum. */\n readonly code?: string;\n /** Whether this error is safe to retry */\n readonly retryable: boolean;\n /** HTTP status code hint for error classification */\n readonly httpStatus?: number;\n\n constructor(message: string, options?: AgentSDKErrorOptions) {\n super(message, options);\n this.name = \"AgentSDKError\";\n this.code = options?.code;\n this.retryable = options?.retryable ?? false;\n this.httpStatus = options?.httpStatus;\n }\n\n /** Check if an error is an AgentSDKError (works across bundled copies) */\n static is(error: unknown): error is AgentSDKError {\n return (\n error instanceof Error &&\n \"_agentSDKError\" in error &&\n (error as AgentSDKError)._agentSDKError === true\n );\n }\n}\n\n/** Thrown when agent.run() is called while already running (M8 re-entrancy guard) */\nexport class ReentrancyError extends AgentSDKError {\n constructor() {\n super(\"Agent is already running. Await the current run before starting another.\", {\n code: ErrorCode.REENTRANCY,\n });\n this.name = \"ReentrancyError\";\n }\n}\n\n/** Thrown when an operation is attempted on a disposed agent/service */\nexport class DisposedError extends AgentSDKError {\n constructor(entity: string) {\n super(`${entity} has been disposed and cannot be used.`, {\n code: ErrorCode.DISPOSED,\n });\n this.name = \"DisposedError\";\n }\n}\n\n/** Thrown when a backend is not found in the registry */\nexport class BackendNotFoundError extends AgentSDKError {\n constructor(backend: string) {\n super(\n `Unknown backend: \"${backend}\". ` +\n `Built-in: copilot, claude, vercel-ai. ` +\n `Custom: use registerBackend() first.`,\n { code: ErrorCode.BACKEND_NOT_INSTALLED },\n );\n this.name = \"BackendNotFoundError\";\n }\n}\n\n/** Thrown when a backend is already registered */\nexport class BackendAlreadyRegisteredError extends AgentSDKError {\n constructor(backend: string) {\n super(`Backend \"${backend}\" is already registered. Use a different name or unregister first.`);\n this.name = \"BackendAlreadyRegisteredError\";\n }\n}\n\n/** Thrown when subprocess management fails */\nexport class SubprocessError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, { ...options, code: ErrorCode.DEPENDENCY_MISSING });\n this.name = \"SubprocessError\";\n }\n}\n\n/** Thrown when a required peer dependency is not installed */\nexport class DependencyError extends AgentSDKError {\n public readonly packageName: string;\n\n constructor(packageName: string) {\n super(`${packageName} is not installed. Install it: npm install ${packageName}`, {\n code: ErrorCode.DEPENDENCY_MISSING,\n });\n this.name = \"DependencyError\";\n this.packageName = packageName;\n }\n}\n\n/** Thrown when an agent run is aborted */\nexport class AbortError extends AgentSDKError {\n constructor() {\n super(\"Agent run was aborted.\", { code: ErrorCode.ABORTED });\n this.name = \"AbortError\";\n }\n}\n\n/** Thrown when a tool execution fails */\nexport class ToolExecutionError extends AgentSDKError {\n public readonly toolName: string;\n\n constructor(toolName: string, message: string, options?: ErrorOptions) {\n super(`Tool \"${toolName}\" failed: ${message}`, { ...options, code: ErrorCode.TOOL_EXECUTION });\n this.name = \"ToolExecutionError\";\n this.toolName = toolName;\n }\n}\n\n/** Thrown when a stream has no activity within the configured timeout */\nexport class ActivityTimeoutError extends AgentSDKError {\n constructor(timeoutMs: number) {\n super(`Stream activity timeout: no event received within ${timeoutMs}ms.`, {\n code: ErrorCode.TIMEOUT,\n retryable: true,\n });\n this.name = \"ActivityTimeoutError\";\n }\n}\n\n/** Thrown when structured output parsing fails */\nexport class StructuredOutputError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(`Structured output error: ${message}`, { ...options, code: ErrorCode.INVALID_RESPONSE });\n this.name = \"StructuredOutputError\";\n }\n}\n","import type {\n IAgent,\n FullAgentConfig,\n AgentState,\n AgentResult,\n AgentEvent,\n MessageContent,\n Message,\n RunOptions,\n RetryConfig,\n StructuredOutputConfig,\n UsageData,\n ToolDefinition,\n StreamMiddleware,\n StreamContext,\n} from \"./types.js\";\nimport { ReentrancyError, DisposedError, AbortError, ActivityTimeoutError } from \"./errors.js\";\nimport { AgentSDKError } from \"./errors.js\";\nimport { isRecoverableErrorCode } from \"./types/errors.js\";\n\n/** Abstract base agent with shared lifecycle logic.\n * Concrete backends extend this and implement the protected _run/_stream methods. */\nexport abstract class BaseAgent implements IAgent {\n protected state: AgentState = \"idle\";\n protected abortController: AbortController | null = null;\n protected readonly config: FullAgentConfig;\n private _cleanupExternalSignal: (() => void) | null = null;\n private _streamMiddleware: StreamMiddleware[] = [];\n\n /** Backend identifier (e.g. \"copilot\", \"claude\", \"vercel-ai\") */\n protected abstract readonly backendName: string;\n\n /** CLI session ID for persistent mode. Override in backends that support it. */\n get sessionId(): string | undefined {\n return undefined;\n }\n\n constructor(config: FullAgentConfig) {\n this.config = Object.freeze({ ...config });\n }\n\n // ─── Public Interface ─────────────────────────────────────────\n\n async run(\n prompt: MessageContent,\n options: RunOptions,\n ): Promise<AgentResult> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n const result = await this.withRetry(\n () => this.executeRun(messages, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async runWithContext(\n messages: Message[],\n options: RunOptions,\n ): Promise<AgentResult> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const result = await this.withRetry(\n () => this.executeRun(messages, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async runStructured<T>(\n prompt: MessageContent,\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n ): Promise<AgentResult<T>> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n const result = await this.withRetry(\n () => this.executeRunStructured(messages, schema, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async *stream(\n prompt: MessageContent,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"streaming\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n yield* this.streamWithRetry(\n () => this.applyStreamPipeline(this.executeStream(messages, options, ac.signal), options, ac),\n options,\n );\n } finally {\n this.cleanupRun();\n }\n }\n\n async *streamWithContext(\n messages: Message[],\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"streaming\";\n\n try {\n yield* this.streamWithRetry(\n () => this.applyStreamPipeline(this.executeStream(messages, options, ac.signal), options, ac),\n options,\n );\n } finally {\n this.cleanupRun();\n }\n }\n\n /** Register a stream middleware. Applied in registration order after built-in transforms. */\n addStreamMiddleware(middleware: StreamMiddleware): void {\n this.guardDisposed();\n this._streamMiddleware.push(middleware);\n }\n\n /** Apply built-in transforms (enrich→timeout→heartbeat) then custom middleware */\n private async *applyStreamPipeline(\n source: AsyncIterable<AgentEvent>,\n options: RunOptions,\n ac: AbortController,\n ): AsyncIterable<AgentEvent> {\n // Built-in pipeline\n let stream: AsyncIterable<AgentEvent> = this.enrichStream(source, options);\n stream = this.activityTimeoutStream(stream, options?.activityTimeoutMs, ac);\n stream = this.heartbeatStream(stream);\n\n // Custom middleware\n if (this._streamMiddleware.length > 0) {\n const ctx: StreamContext = {\n model: options.model,\n backend: this.backendName,\n abortController: ac,\n config: Object.freeze({ ...this.config }),\n };\n for (const mw of this._streamMiddleware) {\n stream = mw(stream, ctx);\n }\n }\n\n yield* stream;\n }\n\n abort(): void {\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n\n /** Default interrupt — falls back to abort(). Backends may override with graceful shutdown. */\n async interrupt(): Promise<void> {\n this.abort();\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getConfig(): Readonly<FullAgentConfig> {\n return this.config;\n }\n\n /** Mark agent as disposed. Override to add cleanup. */\n dispose(): void {\n this._cleanupExternalSignal?.();\n this._cleanupExternalSignal = null;\n this.abort();\n this.state = \"disposed\";\n }\n\n // ─── Abstract Methods (implemented by backends) ───────────────\n\n /** Execute a blocking run. Backend implements the actual LLM call. */\n protected abstract executeRun(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult>;\n\n /** Execute a structured output run. Backend implements parsing. */\n protected abstract executeRunStructured<T>(\n messages: Message[],\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult<T>>;\n\n /** Execute a streaming run. Backend yields events. */\n protected abstract executeStream(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent>;\n\n // ─── Retry Logic ─────────────────────────────────────────────\n\n /** Check if an error should be retried given the retry configuration. */\n private isRetryableError(error: unknown, retry: RetryConfig): boolean {\n // Abort and reentrancy errors are never retryable\n if (error instanceof AbortError || error instanceof ReentrancyError || error instanceof DisposedError) {\n return false;\n }\n if (AgentSDKError.is(error)) {\n // If specific retryable error codes configured, check against them\n if (retry.retryableErrors && retry.retryableErrors.length > 0 && error.code) {\n return retry.retryableErrors.includes(error.code as typeof retry.retryableErrors[number]);\n }\n // Otherwise check the retryable flag or recoverable code\n if (error.retryable) return true;\n if (error.code) return isRecoverableErrorCode(error.code as Parameters<typeof isRecoverableErrorCode>[0]);\n }\n return false;\n }\n\n /** Execute a function with retry logic per RetryConfig. */\n private async withRetry<T>(\n fn: () => Promise<T>,\n options: RunOptions,\n ): Promise<T> {\n const retry = options?.retry;\n if (!retry || !retry.maxRetries || retry.maxRetries <= 0) {\n return fn();\n }\n\n const maxRetries = retry.maxRetries;\n const initialDelay = retry.initialDelayMs ?? 1000;\n const multiplier = retry.backoffMultiplier ?? 2;\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n if (attempt >= maxRetries || !this.isRetryableError(err, retry)) {\n throw err;\n }\n // Exponential backoff\n const delay = initialDelay * Math.pow(multiplier, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n // Check abort between retries\n if (options?.signal?.aborted || this.abortController?.signal.aborted) {\n throw err;\n }\n }\n }\n throw lastError;\n }\n\n /** Execute a stream factory with pre-stream retry: retries until first event, then committed. */\n private async *streamWithRetry(\n factory: () => AsyncIterable<AgentEvent>,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n const retry = options?.retry;\n if (!retry || !retry.maxRetries || retry.maxRetries <= 0) {\n yield* factory();\n return;\n }\n\n const maxRetries = retry.maxRetries;\n const initialDelay = retry.initialDelayMs ?? 1000;\n const multiplier = retry.backoffMultiplier ?? 2;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const stream = factory();\n const iterator = stream[Symbol.asyncIterator]();\n // Try to get first event — this is the \"pre-stream\" phase\n const first = await iterator.next();\n if (first.done) return;\n // First event received — stream committed, no more retries\n yield first.value;\n // Yield remaining events\n while (true) {\n const next = await iterator.next();\n if (next.done) break;\n yield next.value;\n }\n return;\n } catch (err) {\n if (attempt >= maxRetries || !this.isRetryableError(err, retry)) {\n throw err;\n }\n const delay = initialDelay * Math.pow(multiplier, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n if (options?.signal?.aborted || this.abortController?.signal.aborted) {\n throw err;\n }\n }\n }\n }\n\n // ─── CallOptions Resolution ──────────────────────────────────\n\n /** Resolve tools to use for this call (per-call override > config default) */\n protected resolveTools(options?: RunOptions): ToolDefinition[] {\n return options?.tools ?? this.config.tools ?? [];\n }\n\n // ─── Usage Enrichment ───────────────────────────────────────────\n\n /** Enrich result usage with model/backend and fire onUsage callback */\n private enrichAndNotifyUsage(result: AgentResult<unknown>, options: RunOptions): void {\n if (result.usage) {\n result.usage = {\n ...result.usage,\n model: options.model,\n backend: this.backendName,\n };\n this.callOnUsage(result.usage);\n }\n }\n\n /** Wrap a stream to enrich usage_update events and fire onUsage callback */\n private async *enrichStream(\n source: AsyncIterable<AgentEvent>,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n const model = options.model;\n for await (const event of source) {\n if (event.type === \"usage_update\") {\n const usage: UsageData = {\n promptTokens: event.promptTokens,\n completionTokens: event.completionTokens,\n model,\n backend: this.backendName,\n };\n this.callOnUsage(usage);\n yield { type: \"usage_update\", ...usage };\n } else {\n yield event;\n }\n }\n }\n\n /** Fire onUsage callback (fire-and-forget: errors logged, not propagated) */\n private callOnUsage(usage: UsageData): void {\n if (!this.config.onUsage) return;\n try {\n this.config.onUsage(usage);\n } catch (e) {\n console.warn(\n \"[agent-sdk] onUsage callback error:\",\n e instanceof Error ? e.message : String(e),\n );\n }\n }\n\n // ─── Heartbeat ───────────────────────────────────────────────\n\n /** Wrap a stream to emit heartbeat events at configured intervals.\n * When heartbeatInterval is not set, passes through directly. */\n private async *heartbeatStream(\n source: AsyncIterable<AgentEvent>,\n ): AsyncIterable<AgentEvent> {\n const interval = this.config.heartbeatInterval;\n if (!interval || interval <= 0) {\n yield* source;\n return;\n }\n\n const iterator = source[Symbol.asyncIterator]();\n let pendingEvent: Promise<IteratorResult<AgentEvent>> | null = null;\n let heartbeatResolve: (() => void) | null = null;\n\n const timer = setInterval(() => {\n if (heartbeatResolve) {\n const resolve = heartbeatResolve;\n heartbeatResolve = null;\n resolve();\n }\n }, interval);\n\n try {\n while (true) {\n if (!pendingEvent) {\n pendingEvent = iterator.next();\n }\n\n const heartbeatPromise = new Promise<void>((resolve) => {\n heartbeatResolve = resolve;\n });\n\n const eventDone = pendingEvent.then(\n (r) => ({ kind: \"event\" as const, result: r }),\n );\n const heartbeatDone = heartbeatPromise.then(\n () => ({ kind: \"heartbeat\" as const }),\n );\n\n const winner = await Promise.race([eventDone, heartbeatDone]);\n\n if (winner.kind === \"heartbeat\") {\n yield { type: \"heartbeat\" };\n } else {\n pendingEvent = null;\n heartbeatResolve = null;\n if (winner.result.done) break;\n yield winner.result.value;\n }\n }\n } finally {\n clearInterval(timer);\n heartbeatResolve = null;\n }\n }\n\n // ─── Activity Timeout ────────────────────────────────────────\n\n /** Wrap a stream to abort on inactivity. Resets timer on every event.\n * When timeoutMs is not set, passes through directly. */\n private async *activityTimeoutStream(\n source: AsyncIterable<AgentEvent>,\n timeoutMs: number | undefined,\n ac: AbortController,\n ): AsyncIterable<AgentEvent> {\n if (!timeoutMs || timeoutMs <= 0) {\n yield* source;\n return;\n }\n\n const iterator = source[Symbol.asyncIterator]();\n let timerId: ReturnType<typeof setTimeout> | undefined;\n try {\n while (true) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n timerId = setTimeout(() => reject(new ActivityTimeoutError(timeoutMs)), timeoutMs);\n });\n const result = await Promise.race([iterator.next(), timeoutPromise]);\n clearTimeout(timerId);\n if (result.done) break;\n yield result.value;\n }\n } catch (err) {\n if (err instanceof ActivityTimeoutError) {\n ac.abort(err);\n }\n throw err;\n } finally {\n clearTimeout(timerId);\n }\n }\n\n // ─── Guards ───────────────────────────────────────────────────\n\n protected guardReentrancy(): void {\n if (this.state === \"running\" || this.state === \"streaming\") {\n throw new ReentrancyError();\n }\n }\n\n protected guardDisposed(): void {\n if (this.state === \"disposed\") {\n throw new DisposedError(\"Agent\");\n }\n }\n\n /** Throw AbortError if signal is already aborted */\n protected checkAbort(signal: AbortSignal): void {\n if (signal.aborted) {\n throw new AbortError();\n }\n }\n\n // ─── Internal Helpers ─────────────────────────────────────────\n\n /** Clean up after a run completes (success, error, or abort). */\n private cleanupRun(): void {\n this._cleanupExternalSignal?.();\n this._cleanupExternalSignal = null;\n this.state = \"idle\";\n this.abortController = null;\n }\n\n private createAbortController(externalSignal?: AbortSignal): AbortController {\n const ac = new AbortController();\n this.abortController = ac;\n this._cleanupExternalSignal = null;\n\n if (externalSignal) {\n if (externalSignal.aborted) {\n ac.abort();\n } else {\n const listener = () => ac.abort();\n externalSignal.addEventListener(\"abort\", listener, { once: true });\n this._cleanupExternalSignal = () => externalSignal.removeEventListener(\"abort\", listener);\n }\n }\n\n return ac;\n }\n}\n","import type { z } from \"zod\";\n\n/** Convert a Zod schema to JSON Schema.\n * Detection order: toJSONSchema() (Zod v4) → jsonSchema() (Zod v3.24+) → _def extraction (Zod v3 legacy). */\nexport function zodToJsonSchema(schema: z.ZodType): Record<string, unknown> {\n const schemaAny = schema as unknown as Record<string, unknown>;\n\n // Zod v4: toJSONSchema()\n if (\"toJSONSchema\" in schema && typeof schemaAny.toJSONSchema === \"function\") {\n return (schemaAny.toJSONSchema as () => Record<string, unknown>)();\n }\n\n // Zod v3.24+: jsonSchema()\n if (\"jsonSchema\" in schema && typeof schemaAny.jsonSchema === \"function\") {\n return (schemaAny.jsonSchema as () => Record<string, unknown>)();\n }\n\n // Zod v3 legacy: _def.typeName extraction\n return extractSchemaFromDef(schema);\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction extractSchemaFromDef(schema: z.ZodType): Record<string, unknown> {\n const def = (schema as unknown as { _def: Record<string, any> })._def;\n const typeName = def.typeName as string;\n\n switch (typeName) {\n case \"ZodString\":\n return { type: \"string\" };\n case \"ZodNumber\":\n return { type: \"number\" };\n case \"ZodBoolean\":\n return { type: \"boolean\" };\n case \"ZodNull\":\n return { type: \"null\" };\n case \"ZodArray\":\n return {\n type: \"array\",\n items: extractSchemaFromDef(def.type as z.ZodType),\n };\n case \"ZodObject\": {\n const shape = (schema as unknown as { shape: Record<string, z.ZodType> }).shape;\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n const valueDef = (value as unknown as { _def: Record<string, any> })._def;\n if (valueDef.typeName === \"ZodOptional\") {\n properties[key] = extractSchemaFromDef(valueDef.innerType as z.ZodType);\n } else {\n properties[key] = extractSchemaFromDef(value);\n required.push(key);\n }\n }\n\n return {\n type: \"object\",\n properties,\n ...(required.length > 0 ? { required } : {}),\n };\n }\n case \"ZodOptional\":\n return extractSchemaFromDef(def.innerType as z.ZodType);\n case \"ZodEnum\":\n return { type: \"string\", enum: def.values as string[] };\n default:\n return {};\n }\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","/**\n * Shared utilities for CLI backends (Copilot, Claude).\n * Extracted to avoid duplication between copilot.ts and claude.ts.\n */\nimport type { Message, JSONValue } from \"../types.js\";\nimport { getTextContent } from \"../types.js\";\n\n/** Extract the last user message as plain text */\nexport function extractLastUserPrompt(messages: Message[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === \"user\") {\n return getTextContent(msg.content);\n }\n }\n return \"\";\n}\n\nfunction serializeToolCall(tc: { name: string; args: JSONValue }): string {\n const args = typeof tc.args === \"string\" ? tc.args : JSON.stringify(tc.args);\n return ` Tool call: ${tc.name}(${args})`;\n}\n\nfunction serializeToolResult(tr: { name: string; result: JSONValue; isError?: boolean }): string {\n const result = typeof tr.result === \"string\" ? tr.result : JSON.stringify(tr.result);\n const prefix = tr.isError ? \"[ERROR] \" : \"\";\n return ` ${tr.name} → ${prefix}${result}`;\n}\n\n/** Build prompt with conversation history for CLI backends that create fresh sessions */\nexport function buildContextualPrompt(messages: Message[]): string {\n if (messages.length <= 1) {\n return extractLastUserPrompt(messages);\n }\n\n const history = messages.slice(0, -1).map((msg) => {\n if (msg.role === \"user\") {\n return `User: ${msg.content ? getTextContent(msg.content) : \"\"}`;\n }\n if (msg.role === \"tool\" && msg.toolResults) {\n const results = msg.toolResults.map(serializeToolResult).join(\"\\n\");\n return `Tool results:\\n${results}`;\n }\n if (msg.role === \"assistant\") {\n const parts: string[] = [];\n const thinking = msg.thinking;\n if (thinking) {\n parts.push(`[reasoning: ${thinking}]`);\n }\n const text = msg.content ? getTextContent(msg.content) : \"\";\n if (text) parts.push(text);\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n parts.push(msg.toolCalls.map(serializeToolCall).join(\"\\n\"));\n }\n return `Assistant: ${parts.join(\"\\n\")}`;\n }\n const text = msg.content ? getTextContent(msg.content) : \"\";\n return `${msg.role}: ${text}`;\n }).join(\"\\n\");\n\n const lastPrompt = extractLastUserPrompt(messages);\n\n return `Conversation history:\\n${history}\\n\\nUser: ${lastPrompt}`;\n}\n","import type {\n IAgent,\n IAgentService,\n FullAgentConfig,\n AgentResult,\n AgentEvent,\n Message,\n RunOptions,\n StructuredOutputConfig,\n ToolDefinition,\n ClaudeBackendOptions,\n ModelInfo,\n ValidationResult,\n JSONValue,\n PermissionRequest as UnifiedPermissionRequest,\n PermissionDecision,\n PermissionScope,\n UserInputRequest,\n UserInputResponse,\n SupervisorHooks,\n} from \"../types.js\";\nimport { classifyAgentError, isRecoverableErrorCode } from \"../types.js\";\nimport { BaseAgent } from \"../base-agent.js\";\nimport { DisposedError, SubprocessError, AbortError } from \"../errors.js\";\nimport { zodToJsonSchema } from \"../utils/schema.js\";\nimport { extractLastUserPrompt, buildContextualPrompt } from \"./shared.js\";\n\nexport type { ClaudeBackendOptions } from \"../types.js\";\n\n// ─── Local Type Definitions (matching @anthropic-ai/claude-agent-sdk shapes) ──\n// Avoids requiring the SDK to be installed at compile time.\n\n/** @internal Claude SDK PermissionUpdate destination */\ntype PermissionUpdateDestination =\n | \"userSettings\"\n | \"projectSettings\"\n | \"localSettings\"\n | \"session\"\n | \"cliArg\";\n\n/** @internal Claude SDK PermissionUpdate */\ninterface SDKPermissionUpdate {\n type: \"addRules\" | \"replaceRules\" | \"removeRules\" | \"setMode\" | \"addDirectories\" | \"removeDirectories\";\n destination: PermissionUpdateDestination;\n [key: string]: unknown;\n}\n\n/** @internal Claude SDK PermissionResult */\ntype SDKPermissionResult =\n | {\n behavior: \"allow\";\n updatedInput?: Record<string, unknown>;\n updatedPermissions?: SDKPermissionUpdate[];\n toolUseID?: string;\n }\n | {\n behavior: \"deny\";\n message: string;\n interrupt?: boolean;\n toolUseID?: string;\n };\n\n/** @internal Claude SDK CanUseTool callback */\ntype SDKCanUseTool = (\n toolName: string,\n input: Record<string, unknown>,\n options: {\n signal: AbortSignal;\n suggestions?: SDKPermissionUpdate[];\n blockedPath?: string;\n decisionReason?: string;\n toolUseID: string;\n agentID?: string;\n },\n) => Promise<SDKPermissionResult>;\n\n/** @internal MCP server name used when registering agent-sdk tools */\nconst MCP_SERVER_NAME = \"agent-sdk-tools\";\nconst MCP_TOOL_PREFIX = `mcp__${MCP_SERVER_NAME}__`;\n\n/** @internal Claude Code MCP tool naming convention: mcp__<server>__<tool> */\nfunction mcpToolName(toolName: string): string {\n return `${MCP_TOOL_PREFIX}${toolName}`;\n}\n\n/** @internal Strip MCP prefix to recover original tool name */\nfunction stripMcpPrefix(name: string): string {\n return name.startsWith(MCP_TOOL_PREFIX) ? name.slice(MCP_TOOL_PREFIX.length) : name;\n}\n\n/**\n * Claude CLI built-in tool names that should be filtered from AgentEvent stream.\n * These are internal tools handled by the CLI runtime, not user-registered tools.\n * Matches Copilot behavior where ask_user is callback-only, never exposed as tool events.\n */\nconst CLAUDE_INTERNAL_TOOL_NAMES = new Set([\"AskUserQuestion\"]);\n\n/** @internal Claude SDK Options */\ninterface SDKOptions {\n abortController?: AbortController;\n allowedTools?: string[];\n canUseTool?: SDKCanUseTool;\n cwd?: string;\n disallowedTools?: string[];\n env?: { [envVar: string]: string | undefined };\n includePartialMessages?: boolean;\n maxTurns?: number;\n model?: string;\n outputFormat?: { type: \"json_schema\"; schema: Record<string, unknown> };\n pathToClaudeCodeExecutable?: string;\n permissionMode?: string;\n persistSession?: boolean;\n resume?: string;\n sessionId?: string;\n systemPrompt?:\n | string\n | { type: \"preset\"; preset: \"claude_code\"; append?: string };\n tools?: string[];\n mcpServers?: Record<string, unknown>;\n}\n\n/** @internal Claude SDK ModelInfo */\ninterface SDKModelInfo {\n value: string;\n displayName: string;\n description: string;\n}\n\n/** @internal Claude SDK ResultSuccess */\ninterface SDKResultSuccess {\n type: \"result\";\n subtype: \"success\";\n result: string;\n structured_output?: unknown;\n num_turns: number;\n total_cost_usd: number;\n usage: Record<string, number>;\n modelUsage: Record<string, { inputTokens: number; outputTokens: number }>;\n session_id: string;\n}\n\n/** @internal Claude SDK ResultError */\ninterface SDKResultError {\n type: \"result\";\n subtype: string;\n errors: string[];\n is_error: boolean;\n usage: Record<string, number>;\n modelUsage: Record<string, { inputTokens: number; outputTokens: number }>;\n session_id: string;\n}\n\n/** @internal Claude SDK message union */\ninterface SDKMessage {\n type: string;\n subtype?: string;\n [key: string]: unknown;\n}\n\n/** @internal Claude SDK Query interface — AsyncGenerator<SDKMessage> with control methods */\ninterface SDKQuery extends AsyncGenerator<SDKMessage, void> {\n close(): void;\n interrupt(): Promise<void>;\n supportedModels(): Promise<SDKModelInfo[]>;\n}\n\n/** @internal SDK's MCP tool definition */\ninterface SDKMcpToolDefinition {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n handler: (args: Record<string, unknown>, extra: unknown) => Promise<{ content: Array<{ type: string; text: string }> }>;\n}\n\n/** @internal SDK server config */\ninterface SDKMcpServerConfigWithInstance {\n type: \"sdk\";\n name: string;\n instance: unknown;\n}\n\n/** @internal */\ntype SDKModule = {\n query: (params: { prompt: string; options?: SDKOptions }) => SDKQuery;\n createSdkMcpServer: (options: {\n name: string;\n version?: string;\n tools?: SDKMcpToolDefinition[];\n }) => SDKMcpServerConfigWithInstance;\n tool: (\n name: string,\n description: string,\n inputSchema: Record<string, unknown>,\n handler: (args: Record<string, unknown>, extra: unknown) => Promise<{ content: Array<{ type: string; text: string }> }>,\n ) => SDKMcpToolDefinition;\n};\n\n// ─── Dynamic SDK Loader ─────────────────────────────────────────\n\n/** Module-level mock set by _injectSDK() for testing */\nlet _sdkMock: SDKModule | null = null;\n\n/** Load the Claude SDK. Checks module-level mock first, then dynamic import. */\nasync function loadSDK(): Promise<SDKModule> {\n if (_sdkMock) return _sdkMock;\n try {\n // @ts-ignore — peer dependency, not present at compile time\n return (await import(\"@anthropic-ai/claude-agent-sdk\")) as SDKModule;\n } catch {\n throw new SubprocessError(\n \"@anthropic-ai/claude-agent-sdk is not installed. Install it: npm install @anthropic-ai/claude-agent-sdk\",\n );\n }\n}\n\n/** @internal For testing: inject mock SDK module */\nexport function _injectSDK(mock: SDKModule | null): void {\n _sdkMock = mock;\n}\n\n/** @internal For testing: reset injected SDK */\nexport function _resetSDK(): void {\n _sdkMock = null;\n}\n\n// ─── Known Models ───────────────────────────────────────────────\n\nconst ANTHROPIC_MODELS_URL = \"https://api.anthropic.com/v1/models\";\nconst ANTHROPIC_API_VERSION = \"2023-06-01\";\nconst ANTHROPIC_OAUTH_BETA = \"oauth-2025-04-20\";\n\n// ─── Tool Mapping ───────────────────────────────────────────────\n\n/**\n * Normalize Claude's AskUserQuestion input format to UserInputRequest.\n * Claude sends: { questions: [{ question, options?: [{ label }] }] }\n * SDK expects: { question, choices?, allowFreeform? }\n */\nfunction normalizeAskUserInput(args: Record<string, unknown>): UserInputRequest {\n // Direct format (already normalized or simple question)\n if (typeof args.question === \"string\") {\n return {\n question: args.question,\n choices: Array.isArray(args.choices) ? args.choices as string[] : undefined,\n allowFreeform: args.allowFreeform !== false,\n };\n }\n\n // Claude's nested format: { questions: [{ question, options?: [{ label }] }] }\n const questions = args.questions as Array<{\n question: string;\n options?: Array<{ label: string }>;\n }> | undefined;\n\n if (questions && questions.length > 0) {\n const first = questions[0];\n return {\n question: first.question,\n choices: first.options?.map((o) => o.label),\n allowFreeform: true,\n };\n }\n\n // Fallback: stringify the entire input as the question\n return { question: JSON.stringify(args), allowFreeform: true };\n}\n\nfunction buildMcpServer(\n sdk: SDKModule,\n tools: ToolDefinition[],\n toolResultCapture?: Map<string, JSONValue>,\n onAskUser?: SupervisorHooks[\"onAskUser\"],\n): SDKMcpServerConfigWithInstance | undefined {\n if (tools.length === 0 && !onAskUser) return undefined;\n\n const mcpTools = tools.map((tool) => {\n // Claude SDK's tool() expects a Zod raw shape ({key: z.string(), ...}),\n // not a JSON Schema object. Extract .shape from ZodObject.\n const zodSchema = tool.parameters as { shape?: Record<string, unknown> };\n const inputSchema = zodSchema.shape ?? zodToJsonSchema(tool.parameters) as Record<string, unknown>;\n return sdk.tool(\n tool.name,\n tool.description ?? \"\",\n inputSchema,\n async (args: Record<string, unknown>) => {\n const result = await tool.execute(args);\n if (toolResultCapture) {\n toolResultCapture.set(tool.name, result as JSONValue);\n }\n return {\n content: [\n {\n type: \"text\" as const,\n text: typeof result === \"string\" ? result : JSON.stringify(result),\n },\n ],\n };\n },\n );\n });\n\n // Inject ask_user MCP tool when onAskUser callback is configured\n if (onAskUser) {\n const askUserTool = sdk.tool(\n \"ask_user\",\n \"Ask the user a question and wait for their response\",\n {\n question: { type: \"string\", description: \"The question to ask the user\" },\n choices: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Optional list of choices for multiple choice\",\n },\n questions: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n question: { type: \"string\" },\n options: { type: \"array\", items: { type: \"object\", properties: { label: { type: \"string\" } } } },\n },\n },\n description: \"Alternative nested question format\",\n },\n },\n async (args: Record<string, unknown>) => {\n const normalized = normalizeAskUserInput(args);\n // No parent signal available in MCP tool context; provide a standalone controller\n const response: UserInputResponse = await onAskUser(normalized, AbortSignal.timeout(300_000));\n return {\n content: [{ type: \"text\" as const, text: response.answer }],\n };\n },\n );\n mcpTools.push(askUserTool);\n }\n\n return sdk.createSdkMcpServer({\n name: MCP_SERVER_NAME,\n version: \"1.0.0\",\n tools: mcpTools,\n });\n}\n\n// ─── Permission Mapping ─────────────────────────────────────────\n\n/** Map our PermissionScope to Claude SDK's PermissionUpdateDestination */\nfunction scopeToDestination(scope: PermissionScope): PermissionUpdateDestination {\n switch (scope) {\n case \"once\":\n return \"session\";\n case \"session\":\n return \"session\";\n case \"project\":\n return \"projectSettings\";\n case \"always\":\n return \"userSettings\";\n }\n}\n\n/** Map Claude SDK suggestions to our PermissionScope */\nfunction destinationToScope(dest: PermissionUpdateDestination): PermissionScope {\n switch (dest) {\n case \"session\":\n case \"cliArg\":\n return \"session\";\n case \"projectSettings\":\n case \"localSettings\":\n return \"project\";\n case \"userSettings\":\n return \"always\";\n }\n}\n\n/** Extract best suggestedScope from SDK's PermissionUpdate[] */\nfunction extractSuggestedScope(\n suggestions?: SDKPermissionUpdate[],\n): PermissionScope | undefined {\n if (!suggestions || suggestions.length === 0) return undefined;\n // Use the destination of the first suggestion as the scope hint\n return destinationToScope(suggestions[0].destination);\n}\n\nfunction buildCanUseTool(\n config: FullAgentConfig,\n): SDKCanUseTool | undefined {\n const onPermission = config.supervisor?.onPermission;\n if (!onPermission) return undefined;\n\n const permissionStore = config.permissionStore;\n\n return async (\n rawToolName: string,\n input: Record<string, unknown>,\n options,\n ): Promise<SDKPermissionResult> => {\n const toolName = stripMcpPrefix(rawToolName);\n // Check store first — if already approved, skip callback\n if (permissionStore && await permissionStore.isApproved(toolName)) {\n return {\n behavior: \"allow\",\n toolUseID: options.toolUseID,\n };\n }\n\n const unifiedRequest: UnifiedPermissionRequest = {\n toolName,\n toolArgs: input,\n toolCallId: options.toolUseID,\n suggestedScope: extractSuggestedScope(options.suggestions),\n rawSDKRequest: { toolName, input, ...options },\n };\n\n const decision: PermissionDecision = await onPermission(\n unifiedRequest,\n options.signal,\n );\n\n if (decision.allowed) {\n // Persist approval to store\n if (permissionStore && decision.scope) {\n await permissionStore.approve(toolName, decision.scope);\n }\n\n const result: SDKPermissionResult = {\n behavior: \"allow\",\n toolUseID: options.toolUseID,\n };\n if (decision.modifiedInput) {\n (result as { updatedInput?: Record<string, unknown> }).updatedInput =\n decision.modifiedInput;\n }\n // Map scope decision to SDK's updatedPermissions\n if (decision.scope && decision.scope !== \"once\" && options.suggestions) {\n (result as { updatedPermissions?: SDKPermissionUpdate[] }).updatedPermissions =\n options.suggestions.map((s) => ({\n ...s,\n destination: scopeToDestination(decision.scope!),\n }));\n }\n return result;\n }\n\n return {\n behavior: \"deny\",\n message: decision.reason ?? \"Permission denied\",\n toolUseID: options.toolUseID,\n };\n };\n}\n\n// ─── Usage Aggregation Helper ───────────────────────────────────\n\nfunction aggregateUsage(\n modelUsage?: Record<string, { inputTokens: number; outputTokens: number }>,\n): { promptTokens: number; completionTokens: number } {\n let promptTokens = 0;\n let completionTokens = 0;\n for (const u of Object.values(modelUsage ?? {})) {\n promptTokens += u.inputTokens ?? 0;\n completionTokens += u.outputTokens ?? 0;\n }\n return { promptTokens, completionTokens };\n}\n\n// ─── Event Mapping ──────────────────────────────────────────────\n\n/**\n * Tracks tool call IDs to tool names for Claude backend.\n *\n * The Claude SDK emits tool_use blocks (with `id` and `name`) in assistant messages,\n * but tool_use_summary messages only carry `tool_name` (and optionally\n * `preceding_tool_use_ids`). This tracker correlates start/end events using a\n * per-tool-name FIFO queue to handle parallel calls to the same tool.\n */\nclass ClaudeToolCallTracker {\n private queues = new Map<string, string[]>();\n\n trackStart(toolCallId: string, toolName: string): void {\n if (!this.queues.has(toolName)) {\n this.queues.set(toolName, []);\n }\n this.queues.get(toolName)!.push(toolCallId);\n }\n\n /** Peek at the current tool call ID for a tool name (does not consume) */\n peekToolCallId(toolName: string): string {\n const queue = this.queues.get(toolName);\n if (!queue || queue.length === 0) return \"\";\n return queue[0];\n }\n\n /** Consume and return the first tool call ID for a tool name */\n consumeToolCallId(toolName: string): string {\n const queue = this.queues.get(toolName);\n if (!queue || queue.length === 0) return \"\";\n return queue.shift()!;\n }\n\n clear(): void {\n this.queues.clear();\n }\n}\n\nfunction mapSDKMessage(msg: SDKMessage, thinkingBlockIndices?: Set<number>, toolCallTracker?: ClaudeToolCallTracker): AgentEvent | AgentEvent[] | null {\n switch (msg.type) {\n case \"assistant\": {\n // Full assistant message — contains BetaMessage with content blocks\n const betaMessage = msg.message as {\n content?: Array<{\n type: string;\n text?: string;\n name?: string;\n input?: unknown;\n id?: string;\n }>;\n } | undefined;\n if (!betaMessage?.content) return null;\n\n const events: AgentEvent[] = [];\n\n // Emit tool_call_start for each tool_use block\n // NOTE: Text content is NOT extracted here — during streaming it arrives\n // via content_block_delta events, and during executeRun it comes from\n // the result message. Emitting text from assistant messages would cause\n // duplication.\n for (const block of betaMessage.content) {\n if (block.type === \"tool_use\") {\n const toolCallId = String(block.id ?? \"\");\n const toolName = stripMcpPrefix(block.name ?? \"unknown\");\n // Filter out internal Claude CLI tools (e.g. AskUserQuestion)\n if (CLAUDE_INTERNAL_TOOL_NAMES.has(toolName)) continue;\n if (toolCallTracker) {\n toolCallTracker.trackStart(toolCallId, toolName);\n }\n events.push({\n type: \"tool_call_start\",\n toolCallId,\n toolName,\n args: (block.input as JSONValue) ?? {},\n });\n }\n }\n\n return events.length > 0 ? events : null;\n }\n\n case \"user\": {\n // User messages with tool_use_result indicate tool completion\n const toolResult = msg.tool_use_result as JSONValue | undefined;\n // Extract tool name from the message context if available\n if (toolResult !== undefined) {\n // The user message after tool execution — emit tool_call_end\n // tool_name may not be in user messages, but we can infer from context\n return null; // Handled via tool_use_summary below\n }\n return null;\n }\n\n case \"tool_use_summary\": {\n // Emitted after tool execution — contains summary of tool results\n const summary = msg.summary as string | undefined;\n const toolName = stripMcpPrefix((msg.tool_name as string | undefined) ?? \"unknown\");\n // Filter out internal Claude CLI tools (e.g. AskUserQuestion)\n if (CLAUDE_INTERNAL_TOOL_NAMES.has(toolName)) return null;\n // Resolve toolCallId: prefer preceding_tool_use_ids, fall back to tracker\n const precedingIds = msg.preceding_tool_use_ids as string[] | undefined;\n let toolCallId = \"\";\n if (precedingIds && precedingIds.length > 0) {\n toolCallId = precedingIds[0];\n // Consume from tracker to keep queue in sync\n if (toolCallTracker) toolCallTracker.consumeToolCallId(toolName);\n } else if (toolCallTracker) {\n toolCallId = toolCallTracker.consumeToolCallId(toolName);\n }\n // Always emit tool_call_end — summary may be empty\n return {\n type: \"tool_call_end\",\n toolCallId,\n toolName,\n result: (summary ?? null) as JSONValue,\n };\n }\n\n case \"stream_event\": {\n // Partial streaming events — BetaRawMessageStreamEvent\n const event = msg.event as {\n type: string;\n delta?: { type: string; text?: string; thinking?: string };\n content_block?: { type: string; name?: string; id?: string };\n index?: number;\n } | undefined;\n if (!event) return null;\n\n // Thinking block deltas — emit thinking_delta instead of text_delta\n if (\n event.type === \"content_block_delta\" &&\n event.index !== undefined &&\n thinkingBlockIndices?.has(event.index)\n ) {\n const thinkingText = String(event.delta?.thinking ?? event.delta?.text ?? \"\");\n if (thinkingText) {\n return { type: \"thinking_delta\", text: thinkingText };\n }\n return null;\n }\n\n if (\n event.type === \"content_block_delta\" &&\n event.delta?.type === \"text_delta\" &&\n event.delta.text\n ) {\n return { type: \"text_delta\", text: event.delta.text };\n }\n\n if (event.type === \"content_block_start\" && event.content_block?.type === \"thinking\") {\n if (thinkingBlockIndices && event.index !== undefined) {\n thinkingBlockIndices.add(event.index);\n }\n return { type: \"thinking_start\" };\n }\n\n if (event.type === \"content_block_stop\" && event.index !== undefined && thinkingBlockIndices?.has(event.index)) {\n thinkingBlockIndices.delete(event.index);\n return { type: \"thinking_end\" };\n }\n\n return null;\n }\n\n case \"tool_progress\": {\n // Heartbeat while tool is executing — not a new tool call\n return null;\n }\n\n case \"result\": {\n if (msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n return {\n type: \"usage_update\",\n ...aggregateUsage(r.modelUsage),\n };\n }\n if (msg.is_error) {\n const r = msg as unknown as SDKResultError;\n const errorMsg = r.errors?.join(\"; \") ?? \"Unknown error\";\n const code = classifyAgentError(errorMsg);\n return {\n type: \"error\",\n error: errorMsg,\n recoverable: isRecoverableErrorCode(code),\n code,\n };\n }\n return null;\n }\n\n default:\n return null;\n }\n}\n\n// ─── ClaudeAgent ────────────────────────────────────────────────\n\nclass ClaudeAgent extends BaseAgent {\n protected readonly backendName = \"claude\";\n private readonly options: ClaudeBackendOptions;\n private readonly tools: ToolDefinition[];\n private readonly canUseTool: SDKCanUseTool | undefined;\n private readonly isPersistent: boolean;\n private _sessionId: string | undefined;\n private activeQuery: SDKQuery | null = null;\n\n constructor(config: FullAgentConfig, options: ClaudeBackendOptions) {\n super(config);\n this.options = options;\n this.tools = config.tools ?? [];\n this.canUseTool = buildCanUseTool(config);\n this.isPersistent = config.sessionMode === \"persistent\";\n\n // Restore session ID from stored identifier for session resume after server restart.\n // buildQueryOptions() uses _sessionId to set opts.resume when isPersistent.\n if (options.resumeSessionId) {\n this._sessionId = options.resumeSessionId;\n }\n }\n\n override get sessionId(): string | undefined {\n return this._sessionId;\n }\n\n override async interrupt(): Promise<void> {\n try {\n if (this.activeQuery) {\n await this.activeQuery.interrupt();\n }\n } catch {\n // fire-and-forget: SDK interrupt errors should not prevent abort\n } finally {\n this.abort();\n }\n }\n\n /** Clear persistent session state after an error so next call starts fresh */\n private clearPersistentSession(): void {\n this._sessionId = undefined;\n }\n\n private emitSessionInfo(sessionId: string): AgentEvent {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n const transcriptPath = home\n ? `${home}/.claude/projects/.session/sessions/${sessionId}/conversation.jsonl`\n : undefined;\n return { type: \"session_info\", sessionId, transcriptPath, backend: \"claude\" };\n }\n\n private buildQueryOptions(signal: AbortSignal, options: RunOptions): SDKOptions {\n const ac = new AbortController();\n // Link external signal → SDK's abort controller\n signal.addEventListener(\"abort\", () => ac.abort(), { once: true });\n\n const opts: SDKOptions = {\n abortController: ac,\n model: options.model,\n maxTurns: this.options.maxTurns,\n cwd: this.options.workingDirectory,\n pathToClaudeCodeExecutable: this.options.cliPath,\n persistSession: this.isPersistent,\n includePartialMessages: true,\n canUseTool: this.canUseTool,\n };\n\n // Resume persistent session on subsequent calls\n if (this.isPersistent && this._sessionId) {\n opts.resume = this._sessionId;\n }\n\n if (this.config.systemPrompt) {\n opts.systemPrompt = this.config.systemPrompt;\n }\n\n if (this.options.oauthToken || this.options.env) {\n opts.env = {\n ...process.env,\n ...(this.options.env ?? {}),\n ...(this.options.oauthToken\n ? { CLAUDE_CODE_OAUTH_TOKEN: this.options.oauthToken }\n : {}),\n };\n }\n\n // Auto-set permissionMode when canUseTool is configured so Claude CLI\n // actually invokes the callback instead of using built-in rules.\n if (opts.canUseTool && !opts.permissionMode) {\n opts.permissionMode = \"default\";\n }\n\n // When availableTools is set, restrict built-in tool availability.\n // opts.tools controls which tools are available (Bash, Read, Edit, etc.).\n // opts.allowedTools only auto-approves permissions but does NOT restrict availability.\n // MCP tool names are added to allowedTools later by buildMcpConfig().\n if (this.config.availableTools) {\n opts.tools = [...this.config.availableTools];\n }\n\n return opts;\n }\n\n private async buildMcpConfig(\n opts: SDKOptions,\n toolResultCapture?: Map<string, JSONValue>,\n ): Promise<SDKOptions> {\n const onAskUser = this.config.supervisor?.onAskUser;\n if (this.tools.length === 0 && !onAskUser) return opts;\n\n const sdk = await loadSDK();\n const mcpServer = buildMcpServer(sdk, this.tools, toolResultCapture, onAskUser);\n if (mcpServer) {\n opts.mcpServers = {\n [MCP_SERVER_NAME]: mcpServer,\n };\n // Auto-allow MCP tools so Claude Code invokes them without blocking.\n // Claude Code names MCP tools as mcp__<server>__<tool>.\n const mcpToolNames = this.tools.map((t) => mcpToolName(t.name));\n if (onAskUser) {\n mcpToolNames.push(mcpToolName(\"ask_user\"));\n }\n opts.allowedTools = [...(opts.allowedTools ?? []), ...mcpToolNames];\n }\n\n // When onAskUser is configured, block built-in AskUserQuestion so Claude uses our MCP tool\n if (onAskUser) {\n opts.disallowedTools = [...(opts.disallowedTools ?? []), \"AskUserQuestion\"];\n }\n\n return opts;\n }\n\n // ─── Retry Helpers (shared across executeRun/RunStructured/Stream) ──\n\n /** Setup a retry query: clear session, rebuild with full history */\n private async prepareRetryQuery(\n sdk: SDKModule,\n messages: Message[],\n signal: AbortSignal,\n options: RunOptions,\n toolResultCapture: Map<string, JSONValue>,\n modifyOpts?: (opts: SDKOptions) => void,\n ): Promise<SDKQuery> {\n this.clearPersistentSession();\n const retryPrompt = buildContextualPrompt(messages);\n let retryOpts = this.buildQueryOptions(signal, options);\n toolResultCapture.clear();\n retryOpts = await this.buildMcpConfig(retryOpts, toolResultCapture);\n modifyOpts?.(retryOpts);\n const retryQ = sdk.query({ prompt: retryPrompt, options: retryOpts });\n this.activeQuery = retryQ;\n return retryQ;\n }\n\n /** Extract tool_use blocks from an assistant SDK message into toolCalls array */\n private collectToolCallsFromMessage(\n msg: SDKMessage,\n toolCalls: AgentResult[\"toolCalls\"],\n toolResultCapture: Map<string, JSONValue>,\n ): void {\n if (msg.type !== \"assistant\") return;\n const betaMessage = msg.message as {\n content?: Array<{ type: string; name?: string; input?: unknown }>;\n } | undefined;\n if (!betaMessage?.content) return;\n for (const block of betaMessage.content) {\n if (block.type === \"tool_use\") {\n const toolName = stripMcpPrefix(block.name ?? \"unknown\");\n if (CLAUDE_INTERNAL_TOOL_NAMES.has(toolName)) continue;\n toolCalls.push({\n toolName,\n args: (block.input as JSONValue) ?? {},\n result: toolResultCapture.get(toolName) ?? null,\n approved: true,\n });\n }\n }\n }\n\n /** Back-fill tool results from capture map on summary/result messages */\n private backfillToolResults(\n msg: SDKMessage,\n toolCalls: AgentResult[\"toolCalls\"],\n toolResultCapture: Map<string, JSONValue>,\n ): void {\n if (msg.type !== \"tool_use_summary\" && msg.type !== \"result\") return;\n for (const tc of toolCalls) {\n if (tc.result === null) {\n const captured = toolResultCapture.get(tc.toolName);\n if (captured !== undefined) tc.result = captured;\n }\n }\n }\n\n /** Wrap retry inner loop with shared error handling */\n private async withRetryErrorHandling<T>(\n signal: AbortSignal,\n fn: () => Promise<T>,\n ): Promise<T> {\n try {\n return await fn();\n } catch (retryError) {\n if (this.isPersistent) this.clearPersistentSession();\n if (signal.aborted) throw new AbortError();\n throw retryError;\n } finally {\n this.activeQuery = null;\n }\n }\n\n // ─── executeRun ─────────────────────────────────────────────────\n\n protected async executeRun(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult> {\n this.checkAbort(signal);\n\n const sdk = await loadSDK();\n const isResuming = this.isPersistent && this._sessionId !== undefined;\n const prompt = isResuming\n ? extractLastUserPrompt(messages)\n : buildContextualPrompt(messages);\n let opts = this.buildQueryOptions(signal, options);\n const toolResultCapture = new Map<string, JSONValue>();\n opts = await this.buildMcpConfig(opts, toolResultCapture);\n\n const q = sdk.query({ prompt, options: opts });\n this.activeQuery = q;\n const toolCalls: AgentResult[\"toolCalls\"] = [];\n let output: string | null = null;\n let usage: AgentResult[\"usage\"];\n\n try {\n for await (const msg of q) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n\n // Capture result and session_id\n if (msg.type === \"result\") {\n if (msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n }\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n if (isResuming && this.isPersistent) {\n const retryQ = await this.prepareRetryQuery(sdk, messages, signal, options, toolResultCapture);\n toolCalls.length = 0;\n output = null;\n return this.withRetryErrorHandling(signal, async () => {\n for await (const msg of retryQ) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n if (msg.type === \"result\") {\n if (msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n }\n return {\n output,\n structuredOutput: undefined as AgentResult[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n });\n }\n if (this.isPersistent) this.clearPersistentSession();\n throw e;\n } finally {\n this.activeQuery = null;\n }\n\n return {\n output,\n structuredOutput: undefined as AgentResult[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n }\n\n // ─── executeRunStructured ───────────────────────────────────────\n\n protected async executeRunStructured<T>(\n messages: Message[],\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult<T>> {\n this.checkAbort(signal);\n\n const sdk = await loadSDK();\n const isResuming = this.isPersistent && this._sessionId !== undefined;\n const prompt = isResuming\n ? extractLastUserPrompt(messages)\n : buildContextualPrompt(messages);\n let opts = this.buildQueryOptions(signal, options);\n const toolResultCapture = new Map<string, JSONValue>();\n opts = await this.buildMcpConfig(opts, toolResultCapture);\n\n // Claude SDK has native structured output via outputFormat\n const jsonSchema = zodToJsonSchema(schema.schema);\n opts.outputFormat = {\n type: \"json_schema\",\n schema: jsonSchema as Record<string, unknown>,\n };\n\n const q = sdk.query({ prompt, options: opts });\n this.activeQuery = q;\n const toolCalls: AgentResult[\"toolCalls\"] = [];\n let output: string | null = null;\n let structuredOutput: T | undefined;\n let usage: AgentResult[\"usage\"];\n\n try {\n for await (const msg of q) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n\n // Claude SDK returns parsed structured_output when using outputFormat\n if (r.structured_output !== undefined) {\n try {\n structuredOutput = schema.schema.parse(r.structured_output);\n } catch {\n // Fallback: try parsing result string\n try {\n structuredOutput = schema.schema.parse(JSON.parse(r.result));\n } catch {\n // Leave undefined\n }\n }\n } else if (r.result) {\n // Fallback: parse from result string\n try {\n const jsonMatch = r.result.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n const raw = jsonMatch ? jsonMatch[1]!.trim() : r.result.trim();\n structuredOutput = schema.schema.parse(JSON.parse(raw));\n } catch {\n // Leave undefined\n }\n }\n\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.type === \"result\" && msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n if (isResuming && this.isPersistent) {\n const retryQ = await this.prepareRetryQuery(\n sdk, messages, signal, options, toolResultCapture,\n (opts) => { opts.outputFormat = { type: \"json_schema\", schema: jsonSchema as Record<string, unknown> }; },\n );\n toolCalls.length = 0;\n output = null;\n structuredOutput = undefined;\n return this.withRetryErrorHandling(signal, async () => {\n for await (const msg of retryQ) {\n this.collectToolCallsFromMessage(msg, toolCalls, toolResultCapture);\n this.backfillToolResults(msg, toolCalls, toolResultCapture);\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n output = r.result;\n if (r.structured_output !== undefined) {\n try { structuredOutput = schema.schema.parse(r.structured_output); } catch {\n try { structuredOutput = schema.schema.parse(JSON.parse(r.result)); } catch {\n // Leave undefined\n }\n }\n } else if (r.result) {\n try {\n const jsonMatch = r.result.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n const raw = jsonMatch ? jsonMatch[1]!.trim() : r.result.trim();\n structuredOutput = schema.schema.parse(JSON.parse(raw));\n } catch {\n // Leave undefined\n }\n }\n usage = aggregateUsage(r.modelUsage);\n if (this.isPersistent && r.session_id) {\n this._sessionId = r.session_id;\n }\n } else if (msg.type === \"result\" && msg.is_error) {\n const r = msg as unknown as SDKResultError;\n throw new Error(\n `Claude query failed: ${r.errors?.join(\"; \") ?? \"unknown error\"}`,\n );\n }\n }\n return {\n output,\n structuredOutput: structuredOutput as AgentResult<T>[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n });\n }\n if (this.isPersistent) this.clearPersistentSession();\n throw e;\n } finally {\n this.activeQuery = null;\n }\n\n return {\n output,\n structuredOutput: structuredOutput as AgentResult<T>[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(output !== null\n ? [{ role: \"assistant\" as const, content: output }]\n : []),\n ],\n usage,\n };\n }\n\n // ─── executeStream ──────────────────────────────────────────────\n\n protected async *executeStream(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent> {\n this.checkAbort(signal);\n\n const sdk = await loadSDK();\n const isResuming = this.isPersistent && this._sessionId !== undefined;\n const prompt = isResuming\n ? extractLastUserPrompt(messages)\n : buildContextualPrompt(messages);\n let opts = this.buildQueryOptions(signal, options);\n // Capture actual tool results from MCP handler execution\n const toolResultCapture = new Map<string, JSONValue>();\n opts = await this.buildMcpConfig(opts, toolResultCapture);\n\n const q = sdk.query({ prompt, options: opts });\n this.activeQuery = q;\n const thinkingBlockIndices = new Set<number>();\n const toolCallTracker = new ClaudeToolCallTracker();\n // Track pending tool calls to emit tool_call_end for tools without tool_use_summary\n const pendingStreamToolCalls = new Map<string, string>();\n let hasStreamedText = false;\n\n try {\n for await (const msg of q) {\n if (signal.aborted) throw new AbortError();\n\n const events = mapSDKMessage(msg, thinkingBlockIndices, toolCallTracker);\n if (events) {\n const mapped = Array.isArray(events) ? events : [events];\n for (const e of mapped) {\n // Track tool_call_start for fallback emission\n if (e.type === \"tool_call_start\") {\n pendingStreamToolCalls.set(e.toolCallId, e.toolName);\n }\n // Enrich tool_call_end with captured actual result instead of summary text\n if (e.type === \"tool_call_end\" && toolResultCapture.has(e.toolName)) {\n e.result = toolResultCapture.get(e.toolName)!;\n toolResultCapture.delete(e.toolName);\n pendingStreamToolCalls.delete(e.toolCallId);\n } else if (e.type === \"tool_call_end\") {\n pendingStreamToolCalls.delete(e.toolCallId);\n }\n if (e.type === \"text_delta\") hasStreamedText = true;\n yield e;\n }\n }\n\n // Capture session_id and emit done event on result\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n // Emit tool_call_end for any tools that executed but never got tool_use_summary\n for (const [toolCallId, toolName] of pendingStreamToolCalls) {\n if (toolResultCapture.has(toolName)) {\n yield {\n type: \"tool_call_end\" as const,\n toolCallId,\n toolName,\n result: toolResultCapture.get(toolName)!,\n };\n toolResultCapture.delete(toolName);\n }\n }\n pendingStreamToolCalls.clear();\n if (r.session_id) {\n if (this.isPersistent) {\n this._sessionId = r.session_id;\n }\n yield this.emitSessionInfo(r.session_id);\n }\n yield {\n type: \"done\",\n finalOutput: hasStreamedText ? null : r.result,\n ...(hasStreamedText ? { streamed: true } : {}),\n };\n }\n }\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n // Single retry on resume failure: clear session, rebuild with full history\n if (isResuming && this.isPersistent) {\n const retryQ = await this.prepareRetryQuery(sdk, messages, signal, options, toolResultCapture);\n const retryThinkingBlockIndices = new Set<number>();\n const retryToolCallTracker = new ClaudeToolCallTracker();\n const retryPendingToolCalls = new Map<string, string>();\n let retryHasStreamedText = false;\n try {\n for await (const msg of retryQ) {\n if (signal.aborted) throw new AbortError();\n const retryEvents = mapSDKMessage(msg, retryThinkingBlockIndices, retryToolCallTracker);\n if (retryEvents) {\n const mapped = Array.isArray(retryEvents) ? retryEvents : [retryEvents];\n for (const ev of mapped) {\n if (ev.type === \"tool_call_start\") {\n retryPendingToolCalls.set(ev.toolCallId, ev.toolName);\n }\n if (ev.type === \"tool_call_end\" && toolResultCapture.has(ev.toolName)) {\n ev.result = toolResultCapture.get(ev.toolName)!;\n toolResultCapture.delete(ev.toolName);\n retryPendingToolCalls.delete(ev.toolCallId);\n } else if (ev.type === \"tool_call_end\") {\n retryPendingToolCalls.delete(ev.toolCallId);\n }\n if (ev.type === \"text_delta\") retryHasStreamedText = true;\n yield ev;\n }\n }\n if (msg.type === \"result\" && msg.subtype === \"success\") {\n const r = msg as unknown as SDKResultSuccess;\n for (const [toolCallId, toolName] of retryPendingToolCalls) {\n if (toolResultCapture.has(toolName)) {\n yield {\n type: \"tool_call_end\" as const,\n toolCallId,\n toolName,\n result: toolResultCapture.get(toolName)!,\n };\n toolResultCapture.delete(toolName);\n }\n }\n retryPendingToolCalls.clear();\n if (r.session_id) {\n if (this.isPersistent) {\n this._sessionId = r.session_id;\n }\n yield this.emitSessionInfo(r.session_id);\n }\n yield {\n type: \"done\",\n finalOutput: retryHasStreamedText ? null : r.result,\n ...(retryHasStreamedText ? { streamed: true } : {}),\n };\n }\n }\n } catch (retryError) {\n if (this.isPersistent) this.clearPersistentSession();\n if (signal.aborted) throw new AbortError();\n throw retryError;\n } finally {\n this.activeQuery = null;\n }\n return;\n }\n if (this.isPersistent) this.clearPersistentSession();\n throw e;\n } finally {\n this.activeQuery = null;\n }\n }\n\n override dispose(): void {\n this._sessionId = undefined;\n super.dispose();\n }\n}\n\n// ─── Helpers ────────────────────────────────────────────────────\n\nclass ClaudeAgentService implements IAgentService {\n readonly name = \"claude\";\n private disposed = false;\n private readonly options: ClaudeBackendOptions;\n private cachedModels: ModelInfo[] | null = null;\n\n constructor(options: ClaudeBackendOptions) {\n this.options = options;\n }\n\n createAgent(config: FullAgentConfig): IAgent {\n if (this.disposed) throw new DisposedError(\"ClaudeAgentService\");\n return new ClaudeAgent(config, this.options);\n }\n\n async listModels(): Promise<ModelInfo[]> {\n if (this.disposed) throw new DisposedError(\"ClaudeAgentService\");\n if (this.cachedModels) return this.cachedModels;\n\n const token = this.options.oauthToken;\n if (!token) {\n return [];\n }\n\n const res = await globalThis.fetch(\n `${ANTHROPIC_MODELS_URL}?limit=100`,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n \"anthropic-version\": ANTHROPIC_API_VERSION,\n \"anthropic-beta\": ANTHROPIC_OAUTH_BETA,\n },\n },\n );\n\n if (!res.ok) {\n return [];\n }\n\n const body = (await res.json()) as {\n data?: Array<{ id: string; display_name?: string; max_input_tokens?: number }>;\n };\n\n if (!body.data || body.data.length === 0) {\n return [];\n }\n\n this.cachedModels = body.data.map((m) => ({\n id: m.id,\n name: m.display_name,\n provider: \"claude\",\n ...(m.max_input_tokens != null && { contextWindow: m.max_input_tokens }),\n }));\n return this.cachedModels;\n }\n\n async validate(): Promise<ValidationResult> {\n if (this.disposed) throw new DisposedError(\"ClaudeAgentService\");\n\n const errors: string[] = [];\n try {\n await loadSDK();\n } catch (e) {\n errors.push(\n e instanceof Error ? e.message : String(e),\n );\n return { valid: false, errors };\n }\n\n // Verify CLI is accessible by attempting a minimal query\n try {\n const sdk = await loadSDK();\n const q = sdk.query({\n prompt: \"echo test\",\n options: {\n model: \"claude-sonnet-4-20250514\",\n pathToClaudeCodeExecutable: this.options.cliPath,\n cwd: this.options.workingDirectory,\n persistSession: false,\n maxTurns: 1,\n permissionMode: \"plan\",\n },\n });\n // Wait for first message (auth check)\n const first = await q.next();\n q.close();\n if (first.done) {\n errors.push(\"Claude CLI returned no messages — may not be authenticated.\");\n }\n } catch (e) {\n errors.push(\n `Failed to connect to Claude CLI: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n return { valid: errors.length === 0, errors };\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n this.cachedModels = null;\n }\n}\n\n// ─── Factory ────────────────────────────────────────────────────\n\n/** Create Claude CLI backend service. */\nexport function createClaudeService(\n options: ClaudeBackendOptions,\n): IAgentService {\n return new ClaudeAgentService(options);\n}\n"]}