@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/vercel-ai.ts"],"names":[],"mappings":"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","file":"vercel-ai.cjs","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","import type {\n IAgent,\n IAgentService,\n FullAgentConfig,\n AgentResult,\n AgentEvent,\n Message,\n RunOptions,\n StructuredOutputConfig,\n ToolDefinition,\n VercelAIBackendOptions,\n ModelInfo,\n ValidationResult,\n JSONValue,\n PermissionRequest as UnifiedPermissionRequest,\n PermissionDecision,\n} from \"../types.js\";\nimport { getTextContent, ErrorCode, classifyAgentError, isRecoverableErrorCode } from \"../types.js\";\nimport { BaseAgent } from \"../base-agent.js\";\nimport { DisposedError, DependencyError, AbortError, ToolExecutionError } from \"../errors.js\";\nimport { zodToJsonSchema } from \"../utils/schema.js\";\nimport type { IPermissionStore } from \"../permission-store.js\";\n\nexport type { VercelAIBackendOptions } from \"../types.js\";\n\n// ─── Local Type Definitions (matching Vercel AI SDK v6 shapes) ──\n// Avoids requiring the SDK to be installed at compile time.\n\n/** @internal Vercel AI SDK tool result */\ninterface SDKToolDefinition {\n description: string;\n inputSchema: unknown;\n execute?: (input: unknown, options: unknown) => Promise<unknown>;\n needsApproval?: boolean | ((input: unknown, options: unknown) => Promise<boolean>);\n}\n\n/** @internal Vercel AI SDK v6 generateText result */\ninterface SDKGenerateTextResult {\n text: string;\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>;\n toolResults: Array<{ toolCallId: string; toolName: string; output: unknown }>;\n steps: Array<{\n text: string;\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>;\n toolResults: Array<{ toolCallId: string; toolName: string; output: unknown }>;\n usage: { inputTokens?: number; outputTokens?: number };\n finishReason: string;\n }>;\n totalUsage: { inputTokens?: number; outputTokens?: number };\n finishReason: string;\n response: { messages: unknown[] };\n}\n\n/** @internal Vercel AI SDK generateObject result */\ninterface SDKGenerateObjectResult {\n object: unknown;\n usage: { inputTokens?: number; outputTokens?: number };\n}\n\n/** @internal Vercel AI SDK streamText result */\ninterface SDKStreamTextResult {\n fullStream: AsyncIterable<SDKStreamPart>;\n totalUsage: PromiseLike<{ inputTokens?: number; outputTokens?: number }>;\n text: PromiseLike<string>;\n}\n\n/** @internal Vercel AI SDK v6 stream part union */\ntype SDKStreamPart =\n | { type: \"text-delta\"; text: string }\n | { type: \"tool-call\"; toolCallId: string; toolName: string; input: unknown }\n | { type: \"tool-result\"; toolCallId: string; toolName: string; output: unknown }\n | { type: \"tool-error\"; toolCallId: string; toolName: string; error: unknown }\n | { type: \"reasoning-start\" }\n | { type: \"reasoning-end\" }\n | { type: \"reasoning-delta\"; text: string }\n | { type: \"finish-step\"; usage: { inputTokens?: number; outputTokens?: number }; finishReason: string }\n | { type: \"finish\"; finishReason: string; totalUsage: { inputTokens?: number; outputTokens?: number } }\n | { type: \"error\"; error: unknown }\n | { type: string };\n\n/** @internal Vercel AI SDK LanguageModel — opaque type from SDK */\ntype SDKLanguageModel = Record<string, unknown>;\n\n/** @internal SDK module shape */\ninterface SDKModule {\n generateText: (options: Record<string, unknown>) => Promise<SDKGenerateTextResult>;\n streamText: (options: Record<string, unknown>) => SDKStreamTextResult;\n generateObject: (options: Record<string, unknown>) => Promise<SDKGenerateObjectResult>;\n tool: (options: Record<string, unknown>) => SDKToolDefinition;\n jsonSchema: (schema: unknown) => unknown;\n stepCountIs: (count: number) => unknown;\n}\n\n/** @internal OpenAI-compatible module shape */\ninterface SDKCompatModule {\n createOpenAICompatible: (options: Record<string, unknown>) => {\n chatModel: (modelId: string) => SDKLanguageModel;\n languageModel: (modelId: string) => SDKLanguageModel;\n };\n}\n\n// ─── Dynamic SDK Loader ─────────────────────────────────────────\n\n/** Module-level mocks set by _injectSDK()/_injectCompat() for testing */\nlet _sdkMock: SDKModule | null = null;\nlet _compatMock: SDKCompatModule | null = null;\n\n/** Load the Vercel AI 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(\"ai\")) as SDKModule;\n } catch {\n throw new DependencyError(\"ai\");\n }\n}\n\n/** Load the OpenAI-compatible module. Checks module-level mock first, then dynamic import. */\nasync function loadCompat(): Promise<SDKCompatModule> {\n if (_compatMock) return _compatMock;\n try {\n // @ts-ignore — peer dependency, not present at compile time\n return (await import(\"@ai-sdk/openai-compatible\")) as SDKCompatModule;\n } catch {\n throw new DependencyError(\"@ai-sdk/openai-compatible\");\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: inject mock compat module */\nexport function _injectCompat(mock: SDKCompatModule | null): void {\n _compatMock = mock;\n}\n\n/** @internal For testing: reset injected SDK */\nexport function _resetSDK(): void {\n _sdkMock = null;\n _compatMock = null;\n}\n\n// ─── Constants ──────────────────────────────────────────────────\n\nconst DEFAULT_BASE_URL = \"https://openrouter.ai/api/v1\";\nconst DEFAULT_PROVIDER = \"openrouter\";\nconst DEFAULT_MAX_TURNS = 10;\n\n// ─── Tool Mapping ───────────────────────────────────────────────\n\nfunction mapToolsToSDK(\n sdk: SDKModule,\n tools: ToolDefinition[],\n config: FullAgentConfig,\n sessionApprovals: Set<string>,\n permissionStore: IPermissionStore | undefined,\n signal: AbortSignal,\n): Record<string, SDKToolDefinition> {\n const toolMap: Record<string, SDKToolDefinition> = {};\n const supervisor = config.supervisor;\n\n for (const ourTool of tools) {\n const jsonSchema = zodToJsonSchema(ourTool.parameters);\n\n toolMap[ourTool.name] = sdk.tool({\n description: ourTool.description,\n inputSchema: sdk.jsonSchema(jsonSchema),\n execute: wrapToolExecute(ourTool, supervisor, sessionApprovals, permissionStore, signal),\n ...(ourTool.needsApproval && supervisor?.onPermission\n ? {\n needsApproval: async (_input: Record<string, unknown>) => {\n // If already approved via store, skip\n if (permissionStore && await permissionStore.isApproved(ourTool.name)) return false;\n // If already session-approved, skip\n if (sessionApprovals.has(ourTool.name)) return false;\n return true; // will be handled in execute wrapper\n },\n }\n : {}),\n });\n }\n\n // M1: Inject built-in ask_user tool when supervisor.onAskUser is provided\n if (supervisor?.onAskUser) {\n const onAskUser = supervisor.onAskUser;\n toolMap[\"ask_user\"] = sdk.tool({\n description: \"Ask the user a question and wait for their response\",\n inputSchema: sdk.jsonSchema({\n type: \"object\",\n properties: {\n question: { type: \"string\", description: \"The question to ask the user\" },\n },\n required: [\"question\"],\n }),\n execute: async (args: { question: string }) => {\n const response = await onAskUser(\n { question: args.question, allowFreeform: true },\n signal,\n );\n return response.answer;\n },\n });\n }\n\n return toolMap;\n}\n\nfunction wrapToolExecute(\n ourTool: ToolDefinition,\n supervisor: FullAgentConfig[\"supervisor\"],\n sessionApprovals: Set<string>,\n permissionStore: IPermissionStore | undefined,\n signal: AbortSignal,\n): (args: unknown, options?: { toolCallId?: string }) => Promise<JSONValue> {\n return async (args: unknown, options?: { toolCallId?: string }): Promise<JSONValue> => {\n // Permission check for tools with needsApproval\n if (ourTool.needsApproval && supervisor?.onPermission) {\n // Check store first, then fall back to sessionApprovals set\n const storeApproved = permissionStore && await permissionStore.isApproved(ourTool.name);\n if (!storeApproved && !sessionApprovals.has(ourTool.name)) {\n const request: UnifiedPermissionRequest = {\n toolName: ourTool.name,\n toolArgs: (args ?? {}) as Record<string, unknown>,\n toolCallId: options?.toolCallId,\n };\n\n const decision: PermissionDecision = await supervisor.onPermission(\n request,\n signal,\n );\n\n if (!decision.allowed) {\n throw new ToolExecutionError(\n ourTool.name,\n decision.reason ?? \"Permission denied\",\n );\n }\n\n // Persist approval to store if available\n if (permissionStore && decision.scope) {\n await permissionStore.approve(ourTool.name, decision.scope);\n }\n\n // Cache session-scoped approvals in memory\n if (decision.scope === \"session\" || decision.scope === \"always\" || decision.scope === \"project\") {\n sessionApprovals.add(ourTool.name);\n }\n\n // Use modified input if provided\n if (decision.modifiedInput) {\n args = decision.modifiedInput;\n }\n }\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await ourTool.execute(args as any);\n return result as JSONValue;\n } catch (e) {\n if (e instanceof ToolExecutionError) throw e;\n throw new ToolExecutionError(\n ourTool.name,\n e instanceof Error ? e.message : String(e),\n );\n }\n };\n}\n\n// ─── Message Conversion ─────────────────────────────────────────\n\nfunction messagesToSDK(messages: Message[]): Array<Record<string, unknown>> {\n return messages.map((msg) => {\n switch (msg.role) {\n case \"user\":\n return { role: \"user\", content: getTextContent(msg.content) };\n case \"assistant\": {\n let content = getTextContent(msg.content);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const thinking = (msg as any).thinking as string | undefined;\n if (thinking) {\n content = `[reasoning: ${thinking}]\\n${content}`;\n }\n const mapped: Record<string, unknown> = { role: \"assistant\", content };\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n mapped.toolCalls = msg.toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: tc.args,\n }));\n }\n return mapped;\n }\n case \"system\":\n return { role: \"system\", content: msg.content };\n case \"tool\": {\n if (msg.toolResults && msg.toolResults.length > 0) {\n return {\n role: \"tool\",\n toolResults: msg.toolResults.map((tr) => ({\n toolCallId: tr.toolCallId,\n name: tr.name,\n result: tr.result,\n isError: tr.isError ?? false,\n })),\n };\n }\n return { role: \"tool\", content: msg.content ?? \"\" };\n }\n default:\n return { role: \"user\", content: \"\" };\n }\n });\n}\n\n// ─── Event Mapping (fullStream → AgentEvent) ────────────────────\n\nfunction mapStreamPart(part: SDKStreamPart): AgentEvent | null {\n switch (part.type) {\n case \"text-delta\": {\n const p = part as Extract<SDKStreamPart, { type: \"text-delta\" }>;\n return { type: \"text_delta\", text: p.text ?? \"\" };\n }\n\n case \"tool-call\": {\n const p = part as Extract<SDKStreamPart, { type: \"tool-call\" }>;\n return {\n type: \"tool_call_start\",\n toolCallId: String(p.toolCallId ?? \"\"),\n toolName: p.toolName ?? \"unknown\",\n args: (p.input ?? {}) as JSONValue,\n };\n }\n\n case \"tool-result\": {\n const p = part as Extract<SDKStreamPart, { type: \"tool-result\" }>;\n return {\n type: \"tool_call_end\",\n toolCallId: String(p.toolCallId ?? \"\"),\n toolName: p.toolName ?? \"unknown\",\n result: (p.output ?? null) as JSONValue,\n };\n }\n\n case \"tool-error\": {\n const p = part as Extract<SDKStreamPart, { type: \"tool-error\" }>;\n return {\n type: \"error\",\n error: p.error instanceof Error\n ? p.error.message\n : String(p.error ?? \"Tool execution failed\"),\n recoverable: true,\n code: ErrorCode.TOOL_EXECUTION,\n };\n }\n\n case \"reasoning-start\":\n return { type: \"thinking_start\" };\n\n case \"reasoning-end\":\n return { type: \"thinking_end\" };\n\n case \"reasoning-delta\": {\n const p = part as Extract<SDKStreamPart, { type: \"reasoning-delta\" }>;\n return { type: \"thinking_delta\", text: p.text ?? \"\" };\n }\n\n case \"finish-step\": {\n const p = part as Extract<SDKStreamPart, { type: \"finish-step\" }>;\n return {\n type: \"usage_update\",\n promptTokens: Number(p.usage?.inputTokens ?? 0),\n completionTokens: Number(p.usage?.outputTokens ?? 0),\n };\n }\n\n case \"error\": {\n const p = part as Extract<SDKStreamPart, { type: \"error\" }>;\n const errorMsg = p.error instanceof Error\n ? p.error.message\n : String(p.error ?? \"Unknown error\");\n const code = classifyAgentError(errorMsg);\n return {\n type: \"error\",\n error: errorMsg,\n recoverable: isRecoverableErrorCode(code),\n code,\n };\n }\n\n default:\n return null;\n }\n}\n\n// ─── VercelAIAgent ──────────────────────────────────────────────\n\nclass VercelAIAgent extends BaseAgent {\n protected readonly backendName = \"vercel-ai\";\n private readonly backendOptions: VercelAIBackendOptions;\n private readonly sessionApprovals = new Set<string>();\n private model: SDKLanguageModel | null = null;\n\n constructor(\n config: FullAgentConfig,\n backendOptions: VercelAIBackendOptions,\n ) {\n super(config);\n this.backendOptions = backendOptions;\n }\n\n private async getModel(options: RunOptions): Promise<SDKLanguageModel> {\n const requestedModel = options.model;\n const defaultModel = this.config.model;\n\n // If same as default/cached, reuse\n if (requestedModel === defaultModel && this.model) return this.model;\n\n const compat = await loadCompat();\n const provider = compat.createOpenAICompatible({\n name: this.backendOptions.provider ?? DEFAULT_PROVIDER,\n baseURL: this.backendOptions.baseUrl ?? DEFAULT_BASE_URL,\n apiKey: this.backendOptions.apiKey,\n });\n\n const model = provider.chatModel(requestedModel);\n // Cache only when using default model\n if (requestedModel === defaultModel) {\n this.model = model;\n }\n return model;\n }\n\n private async getSDKTools(signal: AbortSignal, options?: RunOptions): Promise<Record<string, SDKToolDefinition>> {\n const sdk = await loadSDK();\n const tools = this.resolveTools(options);\n return mapToolsToSDK(sdk, tools, this.config, this.sessionApprovals, this.config.permissionStore, signal);\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 model = await this.getModel(options);\n const tools = await this.getSDKTools(signal, options);\n const maxTurns = this.config.maxTurns ?? DEFAULT_MAX_TURNS;\n\n const sdkMessages = messagesToSDK(messages);\n const hasTools = Object.keys(tools).length > 0;\n\n const result: SDKGenerateTextResult = await sdk.generateText({\n model,\n system: this.config.systemPrompt,\n messages: sdkMessages,\n tools: hasTools ? tools : undefined,\n stopWhen: sdk.stepCountIs(maxTurns),\n abortSignal: signal,\n ...(this.config.modelParams?.temperature !== undefined && {\n temperature: this.config.modelParams.temperature,\n }),\n ...(this.config.modelParams?.maxTokens !== undefined && {\n maxTokens: this.config.modelParams.maxTokens,\n }),\n ...(this.config.modelParams?.topP !== undefined && {\n topP: this.config.modelParams.topP,\n }),\n ...(this.config.providerOptions && {\n providerOptions: this.config.providerOptions,\n }),\n });\n\n // Collect all tool calls across all steps\n const toolCalls: AgentResult[\"toolCalls\"] = [];\n for (const step of result.steps) {\n for (const tc of step.toolCalls) {\n const matchingResult = step.toolResults.find(\n (tr) => tr.toolCallId === tc.toolCallId,\n );\n toolCalls.push({\n toolName: tc.toolName,\n args: (tc.input ?? {}) as JSONValue,\n result: (matchingResult?.output ?? null) as JSONValue,\n approved: true,\n });\n }\n }\n\n const usage = {\n promptTokens: Number(result.totalUsage?.inputTokens ?? 0),\n completionTokens: Number(result.totalUsage?.outputTokens ?? 0),\n };\n\n // In multi-step flows, result.text includes intermediate reasoning from all steps.\n // Use only the last step's text as the final output.\n const lastStep = result.steps.length > 0 ? result.steps[result.steps.length - 1] : null;\n const outputText = lastStep?.text || null;\n\n return {\n output: outputText,\n structuredOutput: undefined as AgentResult[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(outputText\n ? [{ role: \"assistant\" as const, content: outputText }]\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 model = await this.getModel(options);\n\n const sdkMessages = messagesToSDK(messages);\n const jsonSchema = zodToJsonSchema(schema.schema);\n\n const result: SDKGenerateObjectResult = await sdk.generateObject({\n model,\n system: this.config.systemPrompt,\n messages: sdkMessages,\n schema: sdk.jsonSchema(jsonSchema),\n schemaName: schema.name,\n schemaDescription: schema.description,\n abortSignal: signal,\n ...(this.config.modelParams?.temperature !== undefined && {\n temperature: this.config.modelParams.temperature,\n }),\n ...(this.config.modelParams?.maxTokens !== undefined && {\n maxTokens: this.config.modelParams.maxTokens,\n }),\n ...(this.config.providerOptions && {\n providerOptions: this.config.providerOptions,\n }),\n });\n\n // Validate and parse through our zod schema\n let structuredOutput: T | undefined;\n try {\n structuredOutput = schema.schema.parse(result.object);\n } catch {\n // If zod validation fails, leave undefined\n }\n\n const usage = {\n promptTokens: Number(result.usage?.inputTokens ?? 0),\n completionTokens: Number(result.usage?.outputTokens ?? 0),\n };\n\n return {\n output: JSON.stringify(result.object),\n structuredOutput: structuredOutput as AgentResult<T>[\"structuredOutput\"],\n toolCalls: [],\n messages: [\n ...messages,\n ...(result.object != null\n ? [{ role: \"assistant\" as const, content: JSON.stringify(result.object) }]\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 model = await this.getModel(options);\n const tools = await this.getSDKTools(signal, options);\n const maxTurns = this.config.maxTurns ?? DEFAULT_MAX_TURNS;\n\n const sdkMessages = messagesToSDK(messages);\n const hasTools = Object.keys(tools).length > 0;\n\n const result: SDKStreamTextResult = sdk.streamText({\n model,\n system: this.config.systemPrompt,\n messages: sdkMessages,\n tools: hasTools ? tools : undefined,\n stopWhen: sdk.stepCountIs(maxTurns),\n abortSignal: signal,\n ...(this.config.modelParams?.temperature !== undefined && {\n temperature: this.config.modelParams.temperature,\n }),\n ...(this.config.modelParams?.maxTokens !== undefined && {\n maxTokens: this.config.modelParams.maxTokens,\n }),\n ...(this.config.modelParams?.topP !== undefined && {\n topP: this.config.modelParams.topP,\n }),\n ...(this.config.providerOptions && {\n providerOptions: this.config.providerOptions,\n }),\n });\n\n let finalText = \"\";\n\n try {\n for await (const part of result.fullStream) {\n if (signal.aborted) throw new AbortError();\n\n const event = mapStreamPart(part as SDKStreamPart);\n if (event) yield event;\n\n if ((part as SDKStreamPart).type === \"text-delta\") {\n finalText += (part as Extract<SDKStreamPart, { type: \"text-delta\" }>).text ?? \"\";\n }\n\n // When a step finishes with tool calls, the text accumulated so far is\n // intermediate reasoning (e.g. \"Let me search...\"). Reset so that only\n // the final step's text becomes the output.\n if ((part as SDKStreamPart).type === \"finish-step\") {\n const p = part as Extract<SDKStreamPart, { type: \"finish-step\" }>;\n if (p.finishReason === \"tool-calls\") {\n finalText = \"\";\n }\n }\n }\n\n // Emit final usage from totalUsage\n const totalUsage = await result.totalUsage;\n yield {\n type: \"usage_update\",\n promptTokens: Number(totalUsage?.inputTokens ?? 0),\n completionTokens: Number(totalUsage?.outputTokens ?? 0),\n };\n\n const hasStreamed = finalText.length > 0;\n yield {\n type: \"done\",\n finalOutput: hasStreamed ? null : (finalText || null),\n ...(hasStreamed ? { streamed: true } : {}),\n };\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n throw e;\n }\n }\n\n override dispose(): void {\n this.sessionApprovals.clear();\n this.model = null;\n super.dispose();\n }\n}\n\n// ─── VercelAIAgentService ───────────────────────────────────────\n\nclass VercelAIAgentService implements IAgentService {\n readonly name = \"vercel-ai\";\n private disposed = false;\n private readonly options: VercelAIBackendOptions;\n\n constructor(options: VercelAIBackendOptions) {\n this.options = options;\n }\n\n createAgent(config: FullAgentConfig): IAgent {\n if (this.disposed) throw new DisposedError(\"VercelAIAgentService\");\n return new VercelAIAgent(config, this.options);\n }\n\n async listModels(): Promise<ModelInfo[]> {\n if (this.disposed) throw new DisposedError(\"VercelAIAgentService\");\n\n const baseUrl = (this.options.baseUrl || \"https://api.openai.com/v1\").replace(/\\/+$/, \"\");\n\n try {\n const res = await globalThis.fetch(`${baseUrl}/models`, {\n headers: {\n Authorization: `Bearer ${this.options.apiKey}`,\n // OpenRouter requires HTTP-Referer for API access\n \"HTTP-Referer\": \"https://github.com/nicepkg/agent-sdk\",\n },\n });\n\n if (!res.ok) {\n return [];\n }\n\n const body = await res.json() as Record<string, unknown>;\n\n // OpenAI-compatible format: { data: [{ id, name?, description?, context_length? }] }\n if (body.data && Array.isArray(body.data)) {\n return (body.data as Array<Record<string, unknown>>)\n .filter((m) => typeof m.id === \"string\")\n .map((m) => ({\n id: m.id as string,\n ...(typeof m.name === \"string\" && { name: m.name }),\n ...(typeof m.description === \"string\" && { description: m.description }),\n ...(typeof m.context_length === \"number\" && { contextWindow: m.context_length }),\n }));\n }\n\n // Some providers return a flat array of model objects\n if (Array.isArray(body)) {\n return (body as Array<Record<string, unknown>>)\n .filter((m) => typeof m.id === \"string\")\n .map((m) => ({\n id: m.id as string,\n ...(typeof m.name === \"string\" && { name: m.name }),\n ...(typeof m.description === \"string\" && { description: m.description }),\n ...(typeof m.context_length === \"number\" && { contextWindow: m.context_length }),\n }));\n }\n\n return [];\n } catch {\n return [];\n }\n }\n\n async validate(): Promise<ValidationResult> {\n if (this.disposed) throw new DisposedError(\"VercelAIAgentService\");\n\n const errors: string[] = [];\n\n if (!this.options.apiKey) {\n errors.push(\"apiKey is required for Vercel AI backend.\");\n }\n\n try {\n await loadSDK();\n } catch (e) {\n errors.push(e instanceof Error ? e.message : String(e));\n }\n\n try {\n await loadCompat();\n } catch (e) {\n errors.push(e instanceof Error ? e.message : String(e));\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 }\n}\n\n// ─── Factory ────────────────────────────────────────────────────\n\n/** Create Vercel AI SDK backend service. */\nexport function createVercelAIService(\n options: VercelAIBackendOptions,\n): IAgentService {\n return new VercelAIAgentService(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/vercel-ai.ts"],"names":[],"mappings":"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","file":"vercel-ai.cjs","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","import type {\n IAgent,\n IAgentService,\n FullAgentConfig,\n AgentResult,\n AgentEvent,\n Message,\n RunOptions,\n StructuredOutputConfig,\n ToolDefinition,\n VercelAIBackendOptions,\n ModelInfo,\n ValidationResult,\n JSONValue,\n PermissionRequest as UnifiedPermissionRequest,\n PermissionDecision,\n} from \"../types.js\";\nimport { getTextContent, ErrorCode, classifyAgentError, isRecoverableErrorCode } from \"../types.js\";\nimport { BaseAgent } from \"../base-agent.js\";\nimport { DisposedError, DependencyError, AbortError, ToolExecutionError } from \"../errors.js\";\nimport { zodToJsonSchema } from \"../utils/schema.js\";\nimport type { IPermissionStore } from \"../permission-store.js\";\n\nexport type { VercelAIBackendOptions } from \"../types.js\";\n\n// ─── Local Type Definitions (matching Vercel AI SDK v6 shapes) ──\n// Avoids requiring the SDK to be installed at compile time.\n\n/** @internal Vercel AI SDK tool result */\ninterface SDKToolDefinition {\n description: string;\n inputSchema: unknown;\n execute?: (input: unknown, options: unknown) => Promise<unknown>;\n needsApproval?: boolean | ((input: unknown, options: unknown) => Promise<boolean>);\n}\n\n/** @internal Vercel AI SDK v6 generateText result */\ninterface SDKGenerateTextResult {\n text: string;\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>;\n toolResults: Array<{ toolCallId: string; toolName: string; output: unknown }>;\n steps: Array<{\n text: string;\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>;\n toolResults: Array<{ toolCallId: string; toolName: string; output: unknown }>;\n usage: { inputTokens?: number; outputTokens?: number };\n finishReason: string;\n }>;\n totalUsage: { inputTokens?: number; outputTokens?: number };\n finishReason: string;\n response: { messages: unknown[] };\n}\n\n/** @internal Vercel AI SDK generateObject result */\ninterface SDKGenerateObjectResult {\n object: unknown;\n usage: { inputTokens?: number; outputTokens?: number };\n}\n\n/** @internal Vercel AI SDK streamText result */\ninterface SDKStreamTextResult {\n fullStream: AsyncIterable<SDKStreamPart>;\n totalUsage: PromiseLike<{ inputTokens?: number; outputTokens?: number }>;\n text: PromiseLike<string>;\n}\n\n/** @internal Vercel AI SDK v6 stream part union */\ntype SDKStreamPart =\n | { type: \"text-delta\"; text: string }\n | { type: \"tool-call\"; toolCallId: string; toolName: string; input: unknown }\n | { type: \"tool-result\"; toolCallId: string; toolName: string; output: unknown }\n | { type: \"tool-error\"; toolCallId: string; toolName: string; error: unknown }\n | { type: \"reasoning-start\" }\n | { type: \"reasoning-end\" }\n | { type: \"reasoning-delta\"; text: string }\n | { type: \"finish-step\"; usage: { inputTokens?: number; outputTokens?: number }; finishReason: string }\n | { type: \"finish\"; finishReason: string; totalUsage: { inputTokens?: number; outputTokens?: number } }\n | { type: \"error\"; error: unknown }\n | { type: string };\n\n/** @internal Vercel AI SDK LanguageModel — opaque type from SDK */\ntype SDKLanguageModel = Record<string, unknown>;\n\n/** @internal SDK module shape */\ninterface SDKModule {\n generateText: (options: Record<string, unknown>) => Promise<SDKGenerateTextResult>;\n streamText: (options: Record<string, unknown>) => SDKStreamTextResult;\n generateObject: (options: Record<string, unknown>) => Promise<SDKGenerateObjectResult>;\n tool: (options: Record<string, unknown>) => SDKToolDefinition;\n jsonSchema: (schema: unknown) => unknown;\n stepCountIs: (count: number) => unknown;\n}\n\n/** @internal OpenAI-compatible module shape */\ninterface SDKCompatModule {\n createOpenAICompatible: (options: Record<string, unknown>) => {\n chatModel: (modelId: string) => SDKLanguageModel;\n languageModel: (modelId: string) => SDKLanguageModel;\n };\n}\n\n// ─── Dynamic SDK Loader ─────────────────────────────────────────\n\n/** Module-level mocks set by _injectSDK()/_injectCompat() for testing */\nlet _sdkMock: SDKModule | null = null;\nlet _compatMock: SDKCompatModule | null = null;\n\n/** Load the Vercel AI 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(\"ai\")) as SDKModule;\n } catch {\n throw new DependencyError(\"ai\");\n }\n}\n\n/** Load the OpenAI-compatible module. Checks module-level mock first, then dynamic import. */\nasync function loadCompat(): Promise<SDKCompatModule> {\n if (_compatMock) return _compatMock;\n try {\n // @ts-ignore — peer dependency, not present at compile time\n return (await import(\"@ai-sdk/openai-compatible\")) as SDKCompatModule;\n } catch {\n throw new DependencyError(\"@ai-sdk/openai-compatible\");\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: inject mock compat module */\nexport function _injectCompat(mock: SDKCompatModule | null): void {\n _compatMock = mock;\n}\n\n/** @internal For testing: reset injected SDK */\nexport function _resetSDK(): void {\n _sdkMock = null;\n _compatMock = null;\n}\n\n// ─── Constants ──────────────────────────────────────────────────\n\nconst DEFAULT_BASE_URL = \"https://openrouter.ai/api/v1\";\nconst DEFAULT_PROVIDER = \"openrouter\";\nconst DEFAULT_MAX_TURNS = 10;\n\n// ─── Tool Mapping ───────────────────────────────────────────────\n\nfunction mapToolsToSDK(\n sdk: SDKModule,\n tools: ToolDefinition[],\n config: FullAgentConfig,\n sessionApprovals: Set<string>,\n permissionStore: IPermissionStore | undefined,\n signal: AbortSignal,\n): Record<string, SDKToolDefinition> {\n const toolMap: Record<string, SDKToolDefinition> = {};\n const supervisor = config.supervisor;\n\n for (const ourTool of tools) {\n const jsonSchema = zodToJsonSchema(ourTool.parameters);\n\n toolMap[ourTool.name] = sdk.tool({\n description: ourTool.description,\n inputSchema: sdk.jsonSchema(jsonSchema),\n execute: wrapToolExecute(ourTool, supervisor, sessionApprovals, permissionStore, signal),\n ...(ourTool.needsApproval && supervisor?.onPermission\n ? {\n needsApproval: async (_input: Record<string, unknown>) => {\n // If already approved via store, skip\n if (permissionStore && await permissionStore.isApproved(ourTool.name)) return false;\n // If already session-approved, skip\n if (sessionApprovals.has(ourTool.name)) return false;\n return true; // will be handled in execute wrapper\n },\n }\n : {}),\n });\n }\n\n // M1: Inject built-in ask_user tool when supervisor.onAskUser is provided\n if (supervisor?.onAskUser) {\n const onAskUser = supervisor.onAskUser;\n toolMap[\"ask_user\"] = sdk.tool({\n description: \"Ask the user a question and wait for their response\",\n inputSchema: sdk.jsonSchema({\n type: \"object\",\n properties: {\n question: { type: \"string\", description: \"The question to ask the user\" },\n },\n required: [\"question\"],\n }),\n execute: async (args: { question: string }) => {\n const response = await onAskUser(\n { question: args.question, allowFreeform: true },\n signal,\n );\n return response.answer;\n },\n });\n }\n\n return toolMap;\n}\n\nfunction wrapToolExecute(\n ourTool: ToolDefinition,\n supervisor: FullAgentConfig[\"supervisor\"],\n sessionApprovals: Set<string>,\n permissionStore: IPermissionStore | undefined,\n signal: AbortSignal,\n): (args: unknown, options?: { toolCallId?: string }) => Promise<JSONValue> {\n return async (args: unknown, options?: { toolCallId?: string }): Promise<JSONValue> => {\n // Permission check for tools with needsApproval\n if (ourTool.needsApproval && supervisor?.onPermission) {\n // Check store first, then fall back to sessionApprovals set\n const storeApproved = permissionStore && await permissionStore.isApproved(ourTool.name);\n if (!storeApproved && !sessionApprovals.has(ourTool.name)) {\n const request: UnifiedPermissionRequest = {\n toolName: ourTool.name,\n toolArgs: (args ?? {}) as Record<string, unknown>,\n toolCallId: options?.toolCallId,\n };\n\n const decision: PermissionDecision = await supervisor.onPermission(\n request,\n signal,\n );\n\n if (!decision.allowed) {\n throw new ToolExecutionError(\n ourTool.name,\n decision.reason ?? \"Permission denied\",\n );\n }\n\n // Persist approval to store if available\n if (permissionStore && decision.scope) {\n await permissionStore.approve(ourTool.name, decision.scope);\n }\n\n // Cache session-scoped approvals in memory\n if (decision.scope === \"session\" || decision.scope === \"always\" || decision.scope === \"project\") {\n sessionApprovals.add(ourTool.name);\n }\n\n // Use modified input if provided\n if (decision.modifiedInput) {\n args = decision.modifiedInput;\n }\n }\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await ourTool.execute(args as any);\n return result as JSONValue;\n } catch (e) {\n if (e instanceof ToolExecutionError) throw e;\n throw new ToolExecutionError(\n ourTool.name,\n e instanceof Error ? e.message : String(e),\n );\n }\n };\n}\n\n// ─── Message Conversion ─────────────────────────────────────────\n\nfunction messagesToSDK(messages: Message[]): Array<Record<string, unknown>> {\n return messages.map((msg) => {\n switch (msg.role) {\n case \"user\":\n return { role: \"user\", content: getTextContent(msg.content) };\n case \"assistant\": {\n let content = getTextContent(msg.content);\n const thinking = msg.thinking;\n if (thinking) {\n content = `[reasoning: ${thinking}]\\n${content}`;\n }\n const mapped: Record<string, unknown> = { role: \"assistant\", content };\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n mapped.toolCalls = msg.toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.name,\n args: tc.args,\n }));\n }\n return mapped;\n }\n case \"system\":\n return { role: \"system\", content: msg.content };\n case \"tool\": {\n if (msg.toolResults && msg.toolResults.length > 0) {\n return {\n role: \"tool\",\n toolResults: msg.toolResults.map((tr) => ({\n toolCallId: tr.toolCallId,\n name: tr.name,\n result: tr.result,\n isError: tr.isError ?? false,\n })),\n };\n }\n return { role: \"tool\", content: msg.content ?? \"\" };\n }\n default:\n return { role: \"user\", content: \"\" };\n }\n });\n}\n\n// ─── Event Mapping (fullStream → AgentEvent) ────────────────────\n\nfunction mapStreamPart(part: SDKStreamPart): AgentEvent | null {\n switch (part.type) {\n case \"text-delta\": {\n const p = part as Extract<SDKStreamPart, { type: \"text-delta\" }>;\n return { type: \"text_delta\", text: p.text ?? \"\" };\n }\n\n case \"tool-call\": {\n const p = part as Extract<SDKStreamPart, { type: \"tool-call\" }>;\n return {\n type: \"tool_call_start\",\n toolCallId: String(p.toolCallId ?? \"\"),\n toolName: p.toolName ?? \"unknown\",\n args: (p.input ?? {}) as JSONValue,\n };\n }\n\n case \"tool-result\": {\n const p = part as Extract<SDKStreamPart, { type: \"tool-result\" }>;\n return {\n type: \"tool_call_end\",\n toolCallId: String(p.toolCallId ?? \"\"),\n toolName: p.toolName ?? \"unknown\",\n result: (p.output ?? null) as JSONValue,\n };\n }\n\n case \"tool-error\": {\n const p = part as Extract<SDKStreamPart, { type: \"tool-error\" }>;\n return {\n type: \"error\",\n error: p.error instanceof Error\n ? p.error.message\n : String(p.error ?? \"Tool execution failed\"),\n recoverable: true,\n code: ErrorCode.TOOL_EXECUTION,\n };\n }\n\n case \"reasoning-start\":\n return { type: \"thinking_start\" };\n\n case \"reasoning-end\":\n return { type: \"thinking_end\" };\n\n case \"reasoning-delta\": {\n const p = part as Extract<SDKStreamPart, { type: \"reasoning-delta\" }>;\n return { type: \"thinking_delta\", text: p.text ?? \"\" };\n }\n\n case \"finish-step\": {\n const p = part as Extract<SDKStreamPart, { type: \"finish-step\" }>;\n return {\n type: \"usage_update\",\n promptTokens: Number(p.usage?.inputTokens ?? 0),\n completionTokens: Number(p.usage?.outputTokens ?? 0),\n };\n }\n\n case \"error\": {\n const p = part as Extract<SDKStreamPart, { type: \"error\" }>;\n const errorMsg = p.error instanceof Error\n ? p.error.message\n : String(p.error ?? \"Unknown error\");\n const code = classifyAgentError(errorMsg);\n return {\n type: \"error\",\n error: errorMsg,\n recoverable: isRecoverableErrorCode(code),\n code,\n };\n }\n\n default:\n return null;\n }\n}\n\n// ─── VercelAIAgent ──────────────────────────────────────────────\n\nclass VercelAIAgent extends BaseAgent {\n protected readonly backendName = \"vercel-ai\";\n private readonly backendOptions: VercelAIBackendOptions;\n private readonly sessionApprovals = new Set<string>();\n private model: SDKLanguageModel | null = null;\n\n constructor(\n config: FullAgentConfig,\n backendOptions: VercelAIBackendOptions,\n ) {\n super(config);\n this.backendOptions = backendOptions;\n }\n\n private async getModel(options: RunOptions): Promise<SDKLanguageModel> {\n const requestedModel = options.model;\n const defaultModel = this.config.model;\n\n // If same as default/cached, reuse\n if (requestedModel === defaultModel && this.model) return this.model;\n\n const compat = await loadCompat();\n const provider = compat.createOpenAICompatible({\n name: this.backendOptions.provider ?? DEFAULT_PROVIDER,\n baseURL: this.backendOptions.baseUrl ?? DEFAULT_BASE_URL,\n apiKey: this.backendOptions.apiKey,\n });\n\n const model = provider.chatModel(requestedModel);\n // Cache only when using default model\n if (requestedModel === defaultModel) {\n this.model = model;\n }\n return model;\n }\n\n private async getSDKTools(signal: AbortSignal, options?: RunOptions): Promise<Record<string, SDKToolDefinition>> {\n const sdk = await loadSDK();\n const tools = this.resolveTools(options);\n return mapToolsToSDK(sdk, tools, this.config, this.sessionApprovals, this.config.permissionStore, signal);\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 model = await this.getModel(options);\n const tools = await this.getSDKTools(signal, options);\n const maxTurns = this.config.maxTurns ?? DEFAULT_MAX_TURNS;\n\n const sdkMessages = messagesToSDK(messages);\n const hasTools = Object.keys(tools).length > 0;\n\n const result: SDKGenerateTextResult = await sdk.generateText({\n model,\n system: this.config.systemPrompt,\n messages: sdkMessages,\n tools: hasTools ? tools : undefined,\n stopWhen: sdk.stepCountIs(maxTurns),\n abortSignal: signal,\n ...(this.config.modelParams?.temperature !== undefined && {\n temperature: this.config.modelParams.temperature,\n }),\n ...(this.config.modelParams?.maxTokens !== undefined && {\n maxTokens: this.config.modelParams.maxTokens,\n }),\n ...(this.config.modelParams?.topP !== undefined && {\n topP: this.config.modelParams.topP,\n }),\n ...(this.config.providerOptions && {\n providerOptions: this.config.providerOptions,\n }),\n });\n\n // Collect all tool calls across all steps\n const toolCalls: AgentResult[\"toolCalls\"] = [];\n for (const step of result.steps) {\n for (const tc of step.toolCalls) {\n const matchingResult = step.toolResults.find(\n (tr) => tr.toolCallId === tc.toolCallId,\n );\n toolCalls.push({\n toolName: tc.toolName,\n args: (tc.input ?? {}) as JSONValue,\n result: (matchingResult?.output ?? null) as JSONValue,\n approved: true,\n });\n }\n }\n\n const usage = {\n promptTokens: Number(result.totalUsage?.inputTokens ?? 0),\n completionTokens: Number(result.totalUsage?.outputTokens ?? 0),\n };\n\n // In multi-step flows, result.text includes intermediate reasoning from all steps.\n // Use only the last step's text as the final output.\n const lastStep = result.steps.length > 0 ? result.steps[result.steps.length - 1] : null;\n const outputText = lastStep?.text || null;\n\n return {\n output: outputText,\n structuredOutput: undefined as AgentResult[\"structuredOutput\"],\n toolCalls,\n messages: [\n ...messages,\n ...(outputText\n ? [{ role: \"assistant\" as const, content: outputText }]\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 model = await this.getModel(options);\n\n const sdkMessages = messagesToSDK(messages);\n const jsonSchema = zodToJsonSchema(schema.schema);\n\n const result: SDKGenerateObjectResult = await sdk.generateObject({\n model,\n system: this.config.systemPrompt,\n messages: sdkMessages,\n schema: sdk.jsonSchema(jsonSchema),\n schemaName: schema.name,\n schemaDescription: schema.description,\n abortSignal: signal,\n ...(this.config.modelParams?.temperature !== undefined && {\n temperature: this.config.modelParams.temperature,\n }),\n ...(this.config.modelParams?.maxTokens !== undefined && {\n maxTokens: this.config.modelParams.maxTokens,\n }),\n ...(this.config.providerOptions && {\n providerOptions: this.config.providerOptions,\n }),\n });\n\n // Validate and parse through our zod schema\n let structuredOutput: T | undefined;\n try {\n structuredOutput = schema.schema.parse(result.object);\n } catch {\n // If zod validation fails, leave undefined\n }\n\n const usage = {\n promptTokens: Number(result.usage?.inputTokens ?? 0),\n completionTokens: Number(result.usage?.outputTokens ?? 0),\n };\n\n return {\n output: JSON.stringify(result.object),\n structuredOutput: structuredOutput as AgentResult<T>[\"structuredOutput\"],\n toolCalls: [],\n messages: [\n ...messages,\n ...(result.object != null\n ? [{ role: \"assistant\" as const, content: JSON.stringify(result.object) }]\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 model = await this.getModel(options);\n const tools = await this.getSDKTools(signal, options);\n const maxTurns = this.config.maxTurns ?? DEFAULT_MAX_TURNS;\n\n const sdkMessages = messagesToSDK(messages);\n const hasTools = Object.keys(tools).length > 0;\n\n const result: SDKStreamTextResult = sdk.streamText({\n model,\n system: this.config.systemPrompt,\n messages: sdkMessages,\n tools: hasTools ? tools : undefined,\n stopWhen: sdk.stepCountIs(maxTurns),\n abortSignal: signal,\n ...(this.config.modelParams?.temperature !== undefined && {\n temperature: this.config.modelParams.temperature,\n }),\n ...(this.config.modelParams?.maxTokens !== undefined && {\n maxTokens: this.config.modelParams.maxTokens,\n }),\n ...(this.config.modelParams?.topP !== undefined && {\n topP: this.config.modelParams.topP,\n }),\n ...(this.config.providerOptions && {\n providerOptions: this.config.providerOptions,\n }),\n });\n\n let finalText = \"\";\n let lastFinishReason: string | undefined;\n\n try {\n for await (const part of result.fullStream) {\n if (signal.aborted) throw new AbortError();\n\n const event = mapStreamPart(part as SDKStreamPart);\n if (event) yield event;\n\n if ((part as SDKStreamPart).type === \"text-delta\") {\n finalText += (part as Extract<SDKStreamPart, { type: \"text-delta\" }>).text ?? \"\";\n }\n\n // When a step finishes with tool calls, the text accumulated so far is\n // intermediate reasoning (e.g. \"Let me search...\"). Reset so that only\n // the final step's text becomes the output.\n if ((part as SDKStreamPart).type === \"finish-step\") {\n const p = part as Extract<SDKStreamPart, { type: \"finish-step\" }>;\n lastFinishReason = p.finishReason;\n if (p.finishReason === \"tool-calls\") {\n finalText = \"\";\n }\n }\n\n // The final `finish` part carries the overall finishReason\n if ((part as SDKStreamPart).type === \"finish\") {\n const p = part as Extract<SDKStreamPart, { type: \"finish\" }>;\n lastFinishReason = p.finishReason;\n }\n }\n\n // Emit final usage from totalUsage\n const totalUsage = await result.totalUsage;\n yield {\n type: \"usage_update\",\n promptTokens: Number(totalUsage?.inputTokens ?? 0),\n completionTokens: Number(totalUsage?.outputTokens ?? 0),\n };\n\n const hasStreamed = finalText.length > 0;\n yield {\n type: \"done\",\n finalOutput: hasStreamed ? null : (finalText || null),\n ...(hasStreamed ? { streamed: true } : {}),\n ...(lastFinishReason ? { finishReason: lastFinishReason } : {}),\n };\n } catch (e) {\n if (signal.aborted) throw new AbortError();\n throw e;\n }\n }\n\n override dispose(): void {\n this.sessionApprovals.clear();\n this.model = null;\n super.dispose();\n }\n}\n\n// ─── VercelAIAgentService ───────────────────────────────────────\n\nclass VercelAIAgentService implements IAgentService {\n readonly name = \"vercel-ai\";\n private disposed = false;\n private readonly options: VercelAIBackendOptions;\n\n constructor(options: VercelAIBackendOptions) {\n this.options = options;\n }\n\n createAgent(config: FullAgentConfig): IAgent {\n if (this.disposed) throw new DisposedError(\"VercelAIAgentService\");\n return new VercelAIAgent(config, this.options);\n }\n\n async listModels(): Promise<ModelInfo[]> {\n if (this.disposed) throw new DisposedError(\"VercelAIAgentService\");\n\n const baseUrl = (this.options.baseUrl || \"https://api.openai.com/v1\").replace(/\\/+$/, \"\");\n\n try {\n const res = await globalThis.fetch(`${baseUrl}/models`, {\n headers: {\n Authorization: `Bearer ${this.options.apiKey}`,\n // OpenRouter requires HTTP-Referer for API access\n \"HTTP-Referer\": \"https://github.com/nicepkg/agent-sdk\",\n },\n });\n\n if (!res.ok) {\n return [];\n }\n\n const body = await res.json() as Record<string, unknown>;\n\n // OpenAI-compatible format: { data: [{ id, name?, description?, context_length? }] }\n if (body.data && Array.isArray(body.data)) {\n return (body.data as Array<Record<string, unknown>>)\n .filter((m) => typeof m.id === \"string\")\n .map((m) => ({\n id: m.id as string,\n ...(typeof m.name === \"string\" && { name: m.name }),\n ...(typeof m.description === \"string\" && { description: m.description }),\n ...(typeof m.context_length === \"number\" && { contextWindow: m.context_length }),\n }));\n }\n\n // Some providers return a flat array of model objects\n if (Array.isArray(body)) {\n return (body as Array<Record<string, unknown>>)\n .filter((m) => typeof m.id === \"string\")\n .map((m) => ({\n id: m.id as string,\n ...(typeof m.name === \"string\" && { name: m.name }),\n ...(typeof m.description === \"string\" && { description: m.description }),\n ...(typeof m.context_length === \"number\" && { contextWindow: m.context_length }),\n }));\n }\n\n return [];\n } catch {\n return [];\n }\n }\n\n async validate(): Promise<ValidationResult> {\n if (this.disposed) throw new DisposedError(\"VercelAIAgentService\");\n\n const errors: string[] = [];\n\n if (!this.options.apiKey) {\n errors.push(\"apiKey is required for Vercel AI backend.\");\n }\n\n try {\n await loadSDK();\n } catch (e) {\n errors.push(e instanceof Error ? e.message : String(e));\n }\n\n try {\n await loadCompat();\n } catch (e) {\n errors.push(e instanceof Error ? e.message : String(e));\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 }\n}\n\n// ─── Factory ────────────────────────────────────────────────────\n\n/** Create Vercel AI SDK backend service. */\nexport function createVercelAIService(\n options: VercelAIBackendOptions,\n): IAgentService {\n return new VercelAIAgentService(options);\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { I as IAgentService } from '../agent-DxY68NZL.cjs';
2
- import { V as VercelAIBackendOptions } from '../backends-BSrsBYFn.cjs';
1
+ import { I as IAgentService } from '../agent-C6H2CgJA.cjs';
2
+ import { V as VercelAIBackendOptions } from '../backends-Cno0gZjy.cjs';
3
3
  import 'zod';
4
4
  import '../errors-C-so0M4t.cjs';
5
5
 
@@ -1,5 +1,5 @@
1
- import { I as IAgentService } from '../agent-CW9XbmG_.js';
2
- import { V as VercelAIBackendOptions } from '../backends-BSrsBYFn.js';
1
+ import { I as IAgentService } from '../agent-F7oB6eKp.js';
2
+ import { V as VercelAIBackendOptions } from '../backends-Cno0gZjy.js';
3
3
  import 'zod';
4
4
  import '../errors-C-so0M4t.js';
5
5
 
@@ -939,6 +939,7 @@ var VercelAIAgent = class extends BaseAgent {
939
939
  }
940
940
  });
941
941
  let finalText = "";
942
+ let lastFinishReason;
942
943
  try {
943
944
  for await (const part of result.fullStream) {
944
945
  if (signal.aborted) throw new AbortError();
@@ -949,10 +950,15 @@ var VercelAIAgent = class extends BaseAgent {
949
950
  }
950
951
  if (part.type === "finish-step") {
951
952
  const p = part;
953
+ lastFinishReason = p.finishReason;
952
954
  if (p.finishReason === "tool-calls") {
953
955
  finalText = "";
954
956
  }
955
957
  }
958
+ if (part.type === "finish") {
959
+ const p = part;
960
+ lastFinishReason = p.finishReason;
961
+ }
956
962
  }
957
963
  const totalUsage = await result.totalUsage;
958
964
  yield {
@@ -964,7 +970,8 @@ var VercelAIAgent = class extends BaseAgent {
964
970
  yield {
965
971
  type: "done",
966
972
  finalOutput: hasStreamed ? null : finalText || null,
967
- ...hasStreamed ? { streamed: true } : {}
973
+ ...hasStreamed ? { streamed: true } : {},
974
+ ...lastFinishReason ? { finishReason: lastFinishReason } : {}
968
975
  };
969
976
  } catch (e) {
970
977
  if (signal.aborted) throw new AbortError();