@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
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import * as fs from 'fs';
1
+ import * as fsp from 'fs/promises';
2
2
  import * as path from 'path';
3
3
  import * as os from 'os';
4
4
 
@@ -782,40 +782,40 @@ var FilePermissionStore = class {
782
782
  this.filePath = path.resolve(filePath);
783
783
  }
784
784
  async isApproved(toolName) {
785
- const data = this.readFile();
785
+ const data = await this.readStore();
786
786
  return toolName in data.approvals;
787
787
  }
788
788
  async approve(toolName, scope) {
789
789
  if (scope === "once") return;
790
- const data = this.readFile();
790
+ const data = await this.readStore();
791
791
  data.approvals[toolName] = { scope, timestamp: Date.now() };
792
- this.writeFileAtomic(data);
792
+ await this.writeStoreAtomic(data);
793
793
  }
794
794
  async revoke(toolName) {
795
- const data = this.readFile();
795
+ const data = await this.readStore();
796
796
  delete data.approvals[toolName];
797
- this.writeFileAtomic(data);
797
+ await this.writeStoreAtomic(data);
798
798
  }
799
799
  async clear() {
800
- this.writeFileAtomic({ approvals: {} });
800
+ await this.writeStoreAtomic({ approvals: {} });
801
801
  }
802
802
  async dispose() {
803
803
  }
804
- readFile() {
804
+ async readStore() {
805
805
  try {
806
- const raw = fs.readFileSync(this.filePath, "utf-8");
806
+ const raw = await fsp.readFile(this.filePath, "utf-8");
807
807
  const parsed = JSON.parse(raw);
808
808
  if (parsed && typeof parsed.approvals === "object") return parsed;
809
809
  } catch {
810
810
  }
811
811
  return { approvals: {} };
812
812
  }
813
- writeFileAtomic(data) {
813
+ async writeStoreAtomic(data) {
814
814
  const dir = path.dirname(this.filePath);
815
- fs.mkdirSync(dir, { recursive: true });
815
+ await fsp.mkdir(dir, { recursive: true });
816
816
  const tmpPath = this.filePath + `.tmp.${process.pid}.${Date.now()}`;
817
- fs.writeFileSync(tmpPath, JSON.stringify(data, null, 2), "utf-8");
818
- fs.renameSync(tmpPath, this.filePath);
817
+ await fsp.writeFile(tmpPath, JSON.stringify(data, null, 2), "utf-8");
818
+ await fsp.rename(tmpPath, this.filePath);
819
819
  }
820
820
  };
821
821
  var CompositePermissionStore = class {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/errors.ts","../src/types/guards.ts","../src/errors.ts","../src/registry.ts","../src/base-agent.ts","../src/utils/schema.ts","../src/utils/messages.ts","../src/permission-store.ts"],"names":["ErrorCode","resolve"],"mappings":"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","file":"index.js","sourcesContent":["// ─── Unified Error Code Enum ───────────────────────────────────\n\n/** Unified error codes for all SDK errors — single source of truth. */\nexport enum ErrorCode {\n // Auth\n AUTH_EXPIRED = \"AUTH_EXPIRED\",\n AUTH_INVALID = \"AUTH_INVALID\",\n\n // Rate limiting\n RATE_LIMIT = \"RATE_LIMIT\",\n\n // Network\n NETWORK = \"NETWORK\",\n TIMEOUT = \"TIMEOUT\",\n\n // Provider\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MODEL_NOT_FOUND = \"MODEL_NOT_FOUND\",\n MODEL_OVERLOADED = \"MODEL_OVERLOADED\",\n CONTEXT_OVERFLOW = \"CONTEXT_OVERFLOW\",\n\n // Input / Response\n INVALID_INPUT = \"INVALID_INPUT\",\n INVALID_RESPONSE = \"INVALID_RESPONSE\",\n\n // SDK internal\n REENTRANCY = \"REENTRANCY\",\n DISPOSED = \"DISPOSED\",\n ABORTED = \"ABORTED\",\n INVALID_TRANSITION = \"INVALID_TRANSITION\",\n DEPENDENCY_MISSING = \"DEPENDENCY_MISSING\",\n BACKEND_NOT_INSTALLED = \"BACKEND_NOT_INSTALLED\",\n\n // Tool\n TOOL_EXECUTION = \"TOOL_EXECUTION\",\n PERMISSION_DENIED = \"PERMISSION_DENIED\",\n\n // Session\n SESSION_NOT_FOUND = \"SESSION_NOT_FOUND\",\n SESSION_EXPIRED = \"SESSION_EXPIRED\",\n\n // Provider resolution\n PROVIDER_NOT_FOUND = \"PROVIDER_NOT_FOUND\",\n AUTH_REQUIRED = \"AUTH_REQUIRED\",\n\n // Storage (generic)\n STORAGE_ERROR = \"STORAGE_ERROR\",\n // Storage (specific)\n STORAGE_NOT_FOUND = \"STORAGE_NOT_FOUND\",\n STORAGE_DUPLICATE_KEY = \"STORAGE_DUPLICATE_KEY\",\n STORAGE_IO_ERROR = \"STORAGE_IO_ERROR\",\n STORAGE_SERIALIZATION_ERROR = \"STORAGE_SERIALIZATION_ERROR\",\n}\n\n// ─── Classification ────────────────────────────────────────────\n\n/** Error codes that are typically recoverable (retry-safe) */\nconst RECOVERABLE_CODES = new Set<ErrorCode>([\n ErrorCode.TIMEOUT,\n ErrorCode.RATE_LIMIT,\n ErrorCode.NETWORK,\n ErrorCode.TOOL_EXECUTION,\n ErrorCode.MODEL_OVERLOADED,\n ErrorCode.PROVIDER_ERROR,\n]);\n\n/** Check if an error code is recoverable */\nexport function isRecoverableErrorCode(code: ErrorCode): boolean {\n return RECOVERABLE_CODES.has(code);\n}\n\n/** Classify an error message string into an ErrorCode */\nexport function classifyAgentError(error: string | Error): ErrorCode {\n const msg = (error instanceof Error ? error.message : error).toLowerCase();\n\n if (msg.includes(\"timeout\") || msg.includes(\"timed out\") || msg.includes(\"timedout\") || msg.includes(\"etimedout\")) {\n return ErrorCode.TIMEOUT;\n }\n\n if (msg.includes(\"rate limit\") || msg.includes(\"rate_limit\") || msg.includes(\"429\") || msg.includes(\"too many requests\")) {\n return ErrorCode.RATE_LIMIT;\n }\n\n if (msg.includes(\"unauthorized\") || msg.includes(\"401\") || msg.includes(\"auth\") && (msg.includes(\"expired\") || msg.includes(\"invalid\") || msg.includes(\"denied\") || msg.includes(\"failed\"))) {\n return ErrorCode.AUTH_EXPIRED;\n }\n\n if (msg.includes(\"econnrefused\") || msg.includes(\"econnreset\") || msg.includes(\"enotfound\") || msg.includes(\"network\") || msg.includes(\"fetch failed\") || msg.includes(\"socket hang up\")) {\n return ErrorCode.NETWORK;\n }\n\n if (msg.includes(\"subprocess\") || msg.includes(\"process exited\") || msg.includes(\"spawn\") || msg.includes(\"enoent\") || msg.includes(\"killed\")) {\n return ErrorCode.DEPENDENCY_MISSING;\n }\n\n if (msg.includes(\"abort\") || msg.includes(\"cancel\")) {\n return ErrorCode.ABORTED;\n }\n\n if (msg.includes(\"500\") || msg.includes(\"502\") || msg.includes(\"503\") || msg.includes(\"internal server error\") || msg.includes(\"service unavailable\") || msg.includes(\"bad gateway\") || msg.includes(\"overloaded\")) {\n return ErrorCode.PROVIDER_ERROR;\n }\n\n return ErrorCode.PROVIDER_ERROR;\n}\n","import type { ToolDeclaration, ToolDefinition } from \"./tools.js\";\nimport type { MessageContent, ContentPart } from \"./messages.js\";\n\n/** Type guard: checks if a ToolDeclaration has an execute function (i.e., is a ToolDefinition) */\nexport function isToolDefinition(\n tool: ToolDeclaration,\n): tool is ToolDefinition {\n return \"execute\" in tool && typeof (tool as ToolDefinition).execute === \"function\";\n}\n\n/** Type guard: checks if MessageContent is plain string */\nexport function isTextContent(content: MessageContent): content is string {\n return typeof content === \"string\";\n}\n\n/** Type guard: checks if MessageContent is multi-part array */\nexport function isMultiPartContent(\n content: MessageContent,\n): content is ContentPart[] {\n return Array.isArray(content);\n}\n\n/** Extract text from MessageContent regardless of format */\nexport function getTextContent(content: MessageContent): string {\n if (typeof content === \"string\") return content;\n return content\n .filter((p): p is Extract<ContentPart, { type: \"text\" }> => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\");\n}\n","import { ErrorCode } from \"./types/errors.js\";\n\n/** Options for constructing an AgentSDKError */\nexport interface AgentSDKErrorOptions extends ErrorOptions {\n /** Machine-readable error code */\n code?: string;\n /** Whether this error is retryable (default: false) */\n retryable?: boolean;\n /** HTTP status code hint (e.g. 401, 429, 500) */\n httpStatus?: number;\n}\n\n/** Base error class for agent-sdk.\n *\n * Use `AgentSDKError.is(err)` for reliable cross-module `instanceof` checks\n * (works across separately bundled entry points where `instanceof` may fail). */\nexport class AgentSDKError extends Error {\n /** @internal Marker for cross-bundle identity checks */\n readonly _agentSDKError = true as const;\n /** Machine-readable error code. Prefer values from the ErrorCode enum. */\n readonly code?: string;\n /** Whether this error is safe to retry */\n readonly retryable: boolean;\n /** HTTP status code hint for error classification */\n readonly httpStatus?: number;\n\n constructor(message: string, options?: AgentSDKErrorOptions) {\n super(message, options);\n this.name = \"AgentSDKError\";\n this.code = options?.code;\n this.retryable = options?.retryable ?? false;\n this.httpStatus = options?.httpStatus;\n }\n\n /** Check if an error is an AgentSDKError (works across bundled copies) */\n static is(error: unknown): error is AgentSDKError {\n return (\n error instanceof Error &&\n \"_agentSDKError\" in error &&\n (error as AgentSDKError)._agentSDKError === true\n );\n }\n}\n\n/** Thrown when agent.run() is called while already running (M8 re-entrancy guard) */\nexport class ReentrancyError extends AgentSDKError {\n constructor() {\n super(\"Agent is already running. Await the current run before starting another.\", {\n code: ErrorCode.REENTRANCY,\n });\n this.name = \"ReentrancyError\";\n }\n}\n\n/** Thrown when an operation is attempted on a disposed agent/service */\nexport class DisposedError extends AgentSDKError {\n constructor(entity: string) {\n super(`${entity} has been disposed and cannot be used.`, {\n code: ErrorCode.DISPOSED,\n });\n this.name = \"DisposedError\";\n }\n}\n\n/** Thrown when a backend is not found in the registry */\nexport class BackendNotFoundError extends AgentSDKError {\n constructor(backend: string) {\n super(\n `Unknown backend: \"${backend}\". ` +\n `Built-in: copilot, claude, vercel-ai. ` +\n `Custom: use registerBackend() first.`,\n { code: ErrorCode.BACKEND_NOT_INSTALLED },\n );\n this.name = \"BackendNotFoundError\";\n }\n}\n\n/** Thrown when a backend is already registered */\nexport class BackendAlreadyRegisteredError extends AgentSDKError {\n constructor(backend: string) {\n super(`Backend \"${backend}\" is already registered. Use a different name or unregister first.`);\n this.name = \"BackendAlreadyRegisteredError\";\n }\n}\n\n/** Thrown when subprocess management fails */\nexport class SubprocessError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, { ...options, code: ErrorCode.DEPENDENCY_MISSING });\n this.name = \"SubprocessError\";\n }\n}\n\n/** Thrown when a required peer dependency is not installed */\nexport class DependencyError extends AgentSDKError {\n public readonly packageName: string;\n\n constructor(packageName: string) {\n super(`${packageName} is not installed. Install it: npm install ${packageName}`, {\n code: ErrorCode.DEPENDENCY_MISSING,\n });\n this.name = \"DependencyError\";\n this.packageName = packageName;\n }\n}\n\n/** Thrown when an agent run is aborted */\nexport class AbortError extends AgentSDKError {\n constructor() {\n super(\"Agent run was aborted.\", { code: ErrorCode.ABORTED });\n this.name = \"AbortError\";\n }\n}\n\n/** Thrown when a tool execution fails */\nexport class ToolExecutionError extends AgentSDKError {\n public readonly toolName: string;\n\n constructor(toolName: string, message: string, options?: ErrorOptions) {\n super(`Tool \"${toolName}\" failed: ${message}`, { ...options, code: ErrorCode.TOOL_EXECUTION });\n this.name = \"ToolExecutionError\";\n this.toolName = toolName;\n }\n}\n\n/** Thrown when a stream has no activity within the configured timeout */\nexport class ActivityTimeoutError extends AgentSDKError {\n constructor(timeoutMs: number) {\n super(`Stream activity timeout: no event received within ${timeoutMs}ms.`, {\n code: ErrorCode.TIMEOUT,\n retryable: true,\n });\n this.name = \"ActivityTimeoutError\";\n }\n}\n\n/** Thrown when structured output parsing fails */\nexport class StructuredOutputError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(`Structured output error: ${message}`, { ...options, code: ErrorCode.INVALID_RESPONSE });\n this.name = \"StructuredOutputError\";\n }\n}\n","import type {\n IAgentService,\n CopilotBackendOptions,\n ClaudeBackendOptions,\n VercelAIBackendOptions,\n} from \"./types.js\";\nimport {\n BackendNotFoundError,\n BackendAlreadyRegisteredError,\n} from \"./errors.js\";\n\n// ─── Backend Factory Types ──────────────────────────────────────\n\n/** Factory function that creates a backend service from options */\nexport type BackendFactory<TOptions = unknown> = (\n options: TOptions,\n) => IAgentService | Promise<IAgentService>;\n\n/** Map of built-in backend names to their options types */\nexport interface BackendOptionsMap {\n copilot: CopilotBackendOptions;\n claude: ClaudeBackendOptions;\n \"vercel-ai\": VercelAIBackendOptions;\n}\n\n/** All known backend names (built-in + custom) */\nexport type BuiltinBackendName = keyof BackendOptionsMap;\n\n// ─── Registry ───────────────────────────────────────────────────\n\ninterface RegistryEntry {\n factory: BackendFactory;\n /** Whether this is a built-in backend loaded lazily */\n builtin: boolean;\n}\n\nconst registry = new Map<string, RegistryEntry>();\n\n/** Cached service instances keyed by \"backend:configId\" */\nconst serviceCache = new Map<string, IAgentService>();\n\nfunction configCacheKey(name: string, configId: string): string {\n return `${name}:${configId}`;\n}\n\n/** Register a custom backend factory */\nexport function registerBackend<TOptions = unknown>(\n name: string,\n factory: BackendFactory<TOptions>,\n): void {\n if (registry.has(name)) {\n throw new BackendAlreadyRegisteredError(name);\n }\n registry.set(name, { factory: factory as BackendFactory, builtin: false });\n}\n\n/** Unregister a backend (primarily for testing) */\nexport function unregisterBackend(name: string): boolean {\n return registry.delete(name);\n}\n\n/** Check if a backend is registered (eagerly or lazily) */\nexport function hasBackend(name: string): boolean {\n return registry.has(name) || lazyLoaders.has(name);\n}\n\n/** List all registered backend names (eager + lazy) */\nexport function listBackends(): string[] {\n const names = new Set<string>(registry.keys());\n for (const name of lazyLoaders.keys()) {\n names.add(name);\n }\n return [...names];\n}\n\n/** Reset registry to initial state (for testing) */\nexport function resetRegistry(): void {\n registry.clear();\n serviceCache.clear();\n}\n\n/** Dispose all cached service instances for a backend, or a single named config.\n * Returns the number of instances disposed. */\nexport async function disposeBackend(\n name: string,\n configId?: string,\n): Promise<number> {\n if (configId !== undefined) {\n const key = configCacheKey(name, configId);\n const svc = serviceCache.get(key);\n if (!svc) return 0;\n serviceCache.delete(key);\n await svc.dispose();\n return 1;\n }\n const prefix = `${name}:`;\n const toDispose: IAgentService[] = [];\n for (const [key, svc] of serviceCache) {\n if (key.startsWith(prefix)) {\n toDispose.push(svc);\n serviceCache.delete(key);\n }\n }\n await Promise.all(toDispose.map((s) => s.dispose()));\n return toDispose.length;\n}\n\n/** List all active config IDs for a backend */\nexport function listConfigs(name: string): string[] {\n const prefix = `${name}:`;\n const ids: string[] = [];\n for (const key of serviceCache.keys()) {\n if (key.startsWith(prefix)) {\n ids.push(key.slice(prefix.length));\n }\n }\n return ids;\n}\n\n// ─── Lazy Backend Loader Registry ───────────────────────────────\n\n/** Lazy loader: async function that returns a BackendFactory */\ntype LazyBackendLoader = () => Promise<BackendFactory>;\n\n/** Map of backend name → lazy loader. Extensible via registerLazyBackend(). */\nconst lazyLoaders = new Map<string, LazyBackendLoader>([\n [\n \"copilot\",\n async () => {\n const mod = await import(\"./backends/copilot.js\");\n return (opts: unknown) =>\n mod.createCopilotService(opts as CopilotBackendOptions);\n },\n ],\n [\n \"claude\",\n async () => {\n const mod = await import(\"./backends/claude.js\");\n return (opts: unknown) =>\n mod.createClaudeService(opts as ClaudeBackendOptions);\n },\n ],\n [\n \"vercel-ai\",\n async () => {\n const mod = await import(\"./backends/vercel-ai.js\");\n return (opts: unknown) =>\n mod.createVercelAIService(opts as VercelAIBackendOptions);\n },\n ],\n]);\n\n/**\n * Register a lazy-loaded backend. The loader is called once on first use,\n * then the resulting factory is cached in the main registry.\n * Use this for backends that have heavy dependencies (peer deps, native modules).\n */\nexport function registerLazyBackend(\n name: string,\n loader: () => Promise<BackendFactory>,\n): void {\n lazyLoaders.set(name, loader);\n}\n\n// ─── Type-Safe Factory (B6) ─────────────────────────────────────\n\n/** Create a backend service with type-safe options.\n * When `configId` is provided, the service instance is cached and reused\n * on subsequent calls with the same name+configId pair. Without configId,\n * a new instance is created every call. */\nexport async function createAgentService<K extends BuiltinBackendName>(\n name: K,\n options: BackendOptionsMap[K],\n configId?: string,\n): Promise<IAgentService>;\nexport async function createAgentService(\n name: string,\n options: unknown,\n configId?: string,\n): Promise<IAgentService>;\nexport async function createAgentService(\n name: string,\n options: unknown,\n configId?: string,\n): Promise<IAgentService> {\n // Named config: check instance cache first\n if (configId !== undefined) {\n const key = configCacheKey(name, configId);\n const cached = serviceCache.get(key);\n if (cached) return cached;\n const service = await createServiceInstance(name, options);\n serviceCache.set(key, service);\n return service;\n }\n\n // Default (no configId): create fresh instance every call\n return createServiceInstance(name, options);\n}\n\nasync function createServiceInstance(\n name: string,\n options: unknown,\n): Promise<IAgentService> {\n // Check eager registry first\n const entry = registry.get(name);\n if (entry) {\n return entry.factory(options);\n }\n\n // Try lazy-loaded backend\n const loader = lazyLoaders.get(name);\n if (loader) {\n const factory = await loader();\n // Cache factory in eager registry for future calls\n registry.set(name, { factory, builtin: true });\n return factory(options);\n }\n\n throw new BackendNotFoundError(name);\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 { Message, MessageContent } from \"../types.js\";\nimport { getTextContent } from \"../types.js\";\n\n/** Convert our Message[] to a flat prompt string (for CLIs that accept text) */\nexport function messagesToPrompt(messages: Message[]): string {\n return messages\n .map((msg) => {\n switch (msg.role) {\n case \"user\":\n return contentToText(msg.content);\n case \"assistant\":\n return contentToText(msg.content);\n case \"system\":\n return msg.content;\n case \"tool\":\n return msg.content ?? \"\";\n }\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n\n/** Convert MessageContent to plain text */\nexport function contentToText(content: MessageContent): string {\n return getTextContent(content);\n}\n\n/** Build a system prompt with optional structured output instruction */\nexport function buildSystemPrompt(\n base: string,\n schemaInstruction?: string,\n): string {\n if (!schemaInstruction) return base;\n return `${base}\\n\\n${schemaInstruction}`;\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport type { PermissionScope } from \"./types.js\";\n\n// ─── Interface ──────────────────────────────────────────────────\n\n/** Pluggable store for persisting permission (scope) decisions across runs. */\nexport interface IPermissionStore {\n /** Check if tool is already approved */\n isApproved(toolName: string): Promise<boolean>;\n\n /** Store an approval decision */\n approve(toolName: string, scope: PermissionScope): Promise<void>;\n\n /** Revoke approval for a tool */\n revoke(toolName: string): Promise<void>;\n\n /** Clear all approvals */\n clear(): Promise<void>;\n\n /** Dispose resources */\n dispose(): Promise<void>;\n}\n\n// ─── InMemoryPermissionStore ────────────────────────────────────\n\n/** In-memory store — approvals live until process exits (or dispose). */\nexport class InMemoryPermissionStore implements IPermissionStore {\n private approvals = new Map<string, PermissionScope>();\n\n async isApproved(toolName: string): Promise<boolean> {\n return this.approvals.has(toolName);\n }\n\n async approve(toolName: string, scope: PermissionScope): Promise<void> {\n if (scope === \"once\") return; // \"once\" means don't persist\n this.approvals.set(toolName, scope);\n }\n\n async revoke(toolName: string): Promise<void> {\n this.approvals.delete(toolName);\n }\n\n async clear(): Promise<void> {\n this.approvals.clear();\n }\n\n async dispose(): Promise<void> {\n this.approvals.clear();\n }\n}\n\n// ─── FilePermissionStore ────────────────────────────────────────\n\ninterface FileStoreEntry {\n scope: PermissionScope;\n timestamp: number;\n}\n\ninterface FileStoreData {\n approvals: Record<string, FileStoreEntry>;\n}\n\n/** File-backed store — reads/writes a JSON file for persistent approvals. */\nexport class FilePermissionStore implements IPermissionStore {\n private readonly filePath: string;\n\n constructor(filePath: string) {\n this.filePath = path.resolve(filePath);\n }\n\n async isApproved(toolName: string): Promise<boolean> {\n const data = this.readFile();\n return toolName in data.approvals;\n }\n\n async approve(toolName: string, scope: PermissionScope): Promise<void> {\n if (scope === \"once\") return;\n const data = this.readFile();\n data.approvals[toolName] = { scope, timestamp: Date.now() };\n this.writeFileAtomic(data);\n }\n\n async revoke(toolName: string): Promise<void> {\n const data = this.readFile();\n delete data.approvals[toolName];\n this.writeFileAtomic(data);\n }\n\n async clear(): Promise<void> {\n this.writeFileAtomic({ approvals: {} });\n }\n\n async dispose(): Promise<void> {\n // No resources to release\n }\n\n private readFile(): FileStoreData {\n try {\n const raw = fs.readFileSync(this.filePath, \"utf-8\");\n const parsed = JSON.parse(raw) as FileStoreData;\n if (parsed && typeof parsed.approvals === \"object\") return parsed;\n } catch {\n // File doesn't exist or is invalid — start fresh\n }\n return { approvals: {} };\n }\n\n private writeFileAtomic(data: FileStoreData): void {\n const dir = path.dirname(this.filePath);\n fs.mkdirSync(dir, { recursive: true });\n const tmpPath = this.filePath + `.tmp.${process.pid}.${Date.now()}`;\n fs.writeFileSync(tmpPath, JSON.stringify(data, null, 2), \"utf-8\");\n fs.renameSync(tmpPath, this.filePath);\n }\n}\n\n// ─── CompositePermissionStore ───────────────────────────────────\n\n/**\n * Composes multiple stores — checks in order, routes writes by scope.\n *\n * - \"session\" → sessionStore (in-memory)\n * - \"project\" → projectStore (file-based in project directory)\n * - \"always\" → userStore (file-based in user home)\n */\nexport class CompositePermissionStore implements IPermissionStore {\n private readonly sessionStore: IPermissionStore;\n private readonly projectStore: IPermissionStore;\n private readonly userStore: IPermissionStore;\n\n constructor(\n sessionStore: IPermissionStore,\n projectStore: IPermissionStore,\n userStore?: IPermissionStore,\n ) {\n this.sessionStore = sessionStore;\n this.projectStore = projectStore;\n this.userStore = userStore ?? projectStore;\n }\n\n async isApproved(toolName: string): Promise<boolean> {\n return (\n (await this.sessionStore.isApproved(toolName)) ||\n (await this.projectStore.isApproved(toolName)) ||\n (await this.userStore.isApproved(toolName))\n );\n }\n\n async approve(toolName: string, scope: PermissionScope): Promise<void> {\n if (scope === \"once\") return;\n if (scope === \"session\") {\n await this.sessionStore.approve(toolName, scope);\n } else if (scope === \"project\") {\n await this.projectStore.approve(toolName, scope);\n } else {\n // \"always\" → user-level store\n await this.userStore.approve(toolName, scope);\n }\n }\n\n async revoke(toolName: string): Promise<void> {\n await this.sessionStore.revoke(toolName);\n await this.projectStore.revoke(toolName);\n await this.userStore.revoke(toolName);\n }\n\n async clear(): Promise<void> {\n await this.sessionStore.clear();\n await this.projectStore.clear();\n await this.userStore.clear();\n }\n\n async dispose(): Promise<void> {\n await this.sessionStore.dispose();\n await this.projectStore.dispose();\n if (this.userStore !== this.projectStore) {\n await this.userStore.dispose();\n }\n }\n}\n\n// ─── Helpers ────────────────────────────────────────────────────\n\n/** Create a default composite store with separate project and user-level persistence. */\nexport function createDefaultPermissionStore(\n projectDir?: string,\n): CompositePermissionStore {\n const sessionStore = new InMemoryPermissionStore();\n const projectPath = projectDir\n ? path.join(projectDir, \".agent-sdk\", \"permissions.json\")\n : path.join(process.cwd(), \".agent-sdk\", \"permissions.json\");\n const userPath = path.join(os.homedir(), \".agent-sdk\", \"permissions.json\");\n const projectStore = new FilePermissionStore(projectPath);\n const userStore = new FilePermissionStore(userPath);\n return new CompositePermissionStore(sessionStore, projectStore, userStore);\n}\n"]}
1
+ {"version":3,"sources":["../src/types/errors.ts","../src/types/guards.ts","../src/errors.ts","../src/registry.ts","../src/base-agent.ts","../src/utils/schema.ts","../src/utils/messages.ts","../src/permission-store.ts"],"names":["ErrorCode","resolve"],"mappings":";;;;;AAGO,IAAK,SAAA,qBAAAA,UAAAA,KAAL;AAEL,EAAAA,WAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,WAAA,cAAA,CAAA,GAAe,cAAA;AAGf,EAAAA,WAAA,YAAA,CAAA,GAAa,YAAA;AAGb,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AAGV,EAAAA,WAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,WAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,WAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,WAAA,kBAAA,CAAA,GAAmB,kBAAA;AAGnB,EAAAA,WAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,WAAA,kBAAA,CAAA,GAAmB,kBAAA;AAGnB,EAAAA,WAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,WAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,WAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,WAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,WAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,WAAA,uBAAA,CAAA,GAAwB,uBAAA;AAGxB,EAAAA,WAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,WAAA,mBAAA,CAAA,GAAoB,mBAAA;AAGpB,EAAAA,WAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,WAAA,iBAAA,CAAA,GAAkB,iBAAA;AAGlB,EAAAA,WAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,WAAA,eAAA,CAAA,GAAgB,eAAA;AAGhB,EAAAA,WAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,WAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,WAAA,uBAAA,CAAA,GAAwB,uBAAA;AACxB,EAAAA,WAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,WAAA,6BAAA,CAAA,GAA8B,6BAAA;AAhDpB,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AAsDZ,IAAM,iBAAA,uBAAwB,GAAA,CAAe;AAAA,EAC3C,SAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AACF,CAAC,CAAA;AAGM,SAAS,uBAAuB,IAAA,EAA0B;AAC/D,EAAA,OAAO,iBAAA,CAAkB,IAAI,IAAI,CAAA;AACnC;AAGO,SAAS,mBAAmB,KAAA,EAAkC;AACnE,EAAA,MAAM,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,WAAA,EAAY;AAEzE,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,IAAK,IAAI,QAAA,CAAS,WAAW,CAAA,IAAK,GAAA,CAAI,SAAS,UAAU,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACjH,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,IAAK,IAAI,QAAA,CAAS,YAAY,CAAA,IAAK,GAAA,CAAI,SAAS,KAAK,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,mBAAmB,CAAA,EAAG;AACxH,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,cAAc,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,KAAM,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,CAAA,EAAI;AAC3L,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,SAAS,cAAc,CAAA,IAAK,IAAI,QAAA,CAAS,YAAY,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,WAAW,KAAK,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,cAAc,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACxL,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,QAAA,CAAS,YAAY,KAAK,GAAA,CAAI,QAAA,CAAS,gBAAgB,CAAA,IAAK,GAAA,CAAI,SAAS,OAAO,CAAA,IAAK,IAAI,QAAA,CAAS,QAAQ,KAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC7I,IAAA,OAAO,oBAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAI,QAAA,CAAS,OAAO,KAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,uBAAuB,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,qBAAqB,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,aAAa,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,EAAG;AAClN,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,OAAO,gBAAA;AACT;;;ACpGO,SAAS,iBACd,IAAA,EACwB;AACxB,EAAA,OAAO,SAAA,IAAa,IAAA,IAAQ,OAAQ,IAAA,CAAwB,OAAA,KAAY,UAAA;AAC1E;AAGO,SAAS,cAAc,OAAA,EAA4C;AACxE,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA;AAC5B;AAGO,SAAS,mBACd,OAAA,EAC0B;AAC1B,EAAA,OAAO,KAAA,CAAM,QAAQ,OAAO,CAAA;AAC9B;AAGO,SAAS,eAAe,OAAA,EAAiC;AAC9D,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,OAAO,OAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAmD,EAAE,IAAA,KAAS,MAAM,CAAA,CAC5E,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CACjB,KAAK,IAAI,CAAA;AACd;;;ACbO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA;AAAA,EAE9B,cAAA,GAAiB,IAAA;AAAA;AAAA,EAEjB,IAAA;AAAA;AAAA,EAEA,SAAA;AAAA;AAAA,EAEA,UAAA;AAAA,EAET,WAAA,CAAY,SAAiB,OAAA,EAAgC;AAC3D,IAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AACZ,IAAA,IAAA,CAAK,OAAO,OAAA,EAAS,IAAA;AACrB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAS,SAAA,IAAa,KAAA;AACvC,IAAA,IAAA,CAAK,aAAa,OAAA,EAAS,UAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,OAAO,GAAG,KAAA,EAAwC;AAChD,IAAA,OACE,KAAA,YAAiB,KAAA,IACjB,gBAAA,IAAoB,KAAA,IACnB,MAAwB,cAAA,KAAmB,IAAA;AAAA,EAEhD;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA,EACjD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,0EAAA,EAA4E;AAAA,MAChF,IAAA,EAAA,YAAA;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,IAAM,aAAA,GAAN,cAA4B,aAAA,CAAc;AAAA,EAC/C,YAAY,MAAA,EAAgB;AAC1B,IAAA,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,sCAAA,CAAA,EAA0C;AAAA,MACvD,IAAA,EAAA,UAAA;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAGO,IAAM,oBAAA,GAAN,cAAmC,aAAA,CAAc;AAAA,EACtD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA;AAAA,MACE,qBAAqB,OAAO,CAAA,6EAAA,CAAA;AAAA,MAG5B,EAAE,IAAA,EAAA,uBAAA;AAAsC,KAC1C;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AAGO,IAAM,6BAAA,GAAN,cAA4C,aAAA,CAAc;AAAA,EAC/D,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,OAAO,CAAA,kEAAA,CAAoE,CAAA;AAC7F,IAAA,IAAA,CAAK,IAAA,GAAO,+BAAA;AAAA,EACd;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA,EACjD,WAAA,CAAY,SAAiB,OAAA,EAAwB;AACnD,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,qDAAoC,CAAA;AACjE,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA,EACjC,WAAA;AAAA,EAEhB,YAAY,WAAA,EAAqB;AAC/B,IAAA,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA,2CAAA,EAA8C,WAAW,CAAA,CAAA,EAAI;AAAA,MAC/E,IAAA,EAAA,oBAAA;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AACF;AAGO,IAAM,UAAA,GAAN,cAAyB,aAAA,CAAc;AAAA,EAC5C,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,wBAAA,EAA0B,EAAE,IAAA,EAAA,SAAA,gBAAyB,CAAA;AAC3D,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;AAAA,EACd;AACF;AAGO,IAAM,kBAAA,GAAN,cAAiC,aAAA,CAAc;AAAA,EACpC,QAAA;AAAA,EAEhB,WAAA,CAAY,QAAA,EAAkB,OAAA,EAAiB,OAAA,EAAwB;AACrE,IAAA,KAAA,CAAM,CAAA,MAAA,EAAS,QAAQ,CAAA,UAAA,EAAa,OAAO,IAAI,EAAE,GAAG,OAAA,EAAS,IAAA,EAAA,gBAAA,uBAAgC,CAAA;AAC7F,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AACF;AAGO,IAAM,oBAAA,GAAN,cAAmC,aAAA,CAAc;AAAA,EACtD,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA,CAAM,CAAA,kDAAA,EAAqD,SAAS,CAAA,GAAA,CAAA,EAAO;AAAA,MACzE,IAAA,EAAA,SAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AAGO,IAAM,qBAAA,GAAN,cAAoC,aAAA,CAAc;AAAA,EACvD,WAAA,CAAY,SAAiB,OAAA,EAAwB;AACnD,IAAA,KAAA,CAAM,4BAA4B,OAAO,CAAA,CAAA,EAAI,EAAE,GAAG,OAAA,EAAS,iDAAkC,CAAA;AAC7F,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;;;AC1GA,IAAM,QAAA,uBAAe,GAAA,EAA2B;AAGhD,IAAM,YAAA,uBAAmB,GAAA,EAA2B;AAEpD,SAAS,cAAA,CAAe,MAAc,QAAA,EAA0B;AAC9D,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAC5B;AAGO,SAAS,eAAA,CACd,MACA,OAAA,EACM;AACN,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,8BAA8B,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,QAAA,CAAS,IAAI,IAAA,EAAM,EAAE,OAAA,EAAoC,OAAA,EAAS,OAAO,CAAA;AAC3E;AAGO,SAAS,kBAAkB,IAAA,EAAuB;AACvD,EAAA,OAAO,QAAA,CAAS,OAAO,IAAI,CAAA;AAC7B;AAGO,SAAS,WAAW,IAAA,EAAuB;AAChD,EAAA,OAAO,SAAS,GAAA,CAAI,IAAI,CAAA,IAAK,WAAA,CAAY,IAAI,IAAI,CAAA;AACnD;AAGO,SAAS,YAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAY,QAAA,CAAS,MAAM,CAAA;AAC7C,EAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,IAAA,EAAK,EAAG;AACrC,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA;AAClB;AAGO,SAAS,aAAA,GAAsB;AACpC,EAAA,QAAA,CAAS,KAAA,EAAM;AACf,EAAA,YAAA,CAAa,KAAA,EAAM;AACrB;AAIA,eAAsB,cAAA,CACpB,MACA,QAAA,EACiB;AACjB,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,IAAA,EAAM,QAAQ,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,KAAK,OAAO,CAAA;AACjB,IAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,IAAA,MAAM,IAAI,OAAA,EAAQ;AAClB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,GAAG,IAAI,CAAA,CAAA,CAAA;AACtB,EAAA,MAAM,YAA6B,EAAC;AACpC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,YAAA,EAAc;AACrC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,MAAA,SAAA,CAAU,KAAK,GAAG,CAAA;AAClB,MAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,MAAM,OAAA,CAAQ,IAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,EAAS,CAAC,CAAA;AACnD,EAAA,OAAO,SAAA,CAAU,MAAA;AACnB;AAGO,SAAS,YAAY,IAAA,EAAwB;AAClD,EAAA,MAAM,MAAA,GAAS,GAAG,IAAI,CAAA,CAAA,CAAA;AACtB,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,GAAA,IAAO,YAAA,CAAa,IAAA,EAAK,EAAG;AACrC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,MAAA,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAQA,IAAM,WAAA,uBAAkB,GAAA,CAA+B;AAAA,EACrD;AAAA,IACE,SAAA;AAAA,IACA,YAAY;AACV,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,uBAAuB,CAAA;AAChD,MAAA,OAAO,CAAC,IAAA,KACN,GAAA,CAAI,oBAAA,CAAqB,IAA6B,CAAA;AAAA,IAC1D;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA;AAAA,IACA,YAAY;AACV,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,sBAAsB,CAAA;AAC/C,MAAA,OAAO,CAAC,IAAA,KACN,GAAA,CAAI,mBAAA,CAAoB,IAA4B,CAAA;AAAA,IACxD;AAAA,GACF;AAAA,EACA;AAAA,IACE,WAAA;AAAA,IACA,YAAY;AACV,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,yBAAyB,CAAA;AAClD,MAAA,OAAO,CAAC,IAAA,KACN,GAAA,CAAI,qBAAA,CAAsB,IAA8B,CAAA;AAAA,IAC5D;AAAA;AAEJ,CAAC,CAAA;AAOM,SAAS,mBAAA,CACd,MACA,MAAA,EACM;AACN,EAAA,WAAA,CAAY,GAAA,CAAI,MAAM,MAAM,CAAA;AAC9B;AAkBA,eAAsB,kBAAA,CACpB,IAAA,EACA,OAAA,EACA,QAAA,EACwB;AAExB,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,IAAA,EAAM,QAAQ,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,IAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAsB,IAAA,EAAM,OAAO,CAAA;AACzD,IAAA,YAAA,CAAa,GAAA,CAAI,KAAK,OAAO,CAAA;AAC7B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,OAAO,qBAAA,CAAsB,MAAM,OAAO,CAAA;AAC5C;AAEA,eAAe,qBAAA,CACb,MACA,OAAA,EACwB;AAExB,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAC/B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACnC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,EAAO;AAE7B,IAAA,QAAA,CAAS,IAAI,IAAA,EAAM,EAAE,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAC7C,IAAA,OAAO,QAAQ,OAAO,CAAA;AAAA,EACxB;AAEA,EAAA,MAAM,IAAI,qBAAqB,IAAI,CAAA;AACrC;;;ACrMO,IAAe,YAAf,MAA2C;AAAA,EACtC,KAAA,GAAoB,MAAA;AAAA,EACpB,eAAA,GAA0C,IAAA;AAAA,EACjC,MAAA;AAAA,EACX,sBAAA,GAA8C,IAAA;AAAA,EAC9C,oBAAwC,EAAC;AAAA;AAAA,EAMjD,IAAI,SAAA,GAAgC;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,YAAY,MAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,QAAQ,CAAA;AAAA,EAC3C;AAAA;AAAA,EAIA,MAAM,GAAA,CACJ,MAAA,EACA,OAAA,EACsB;AACtB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,WAAsB,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA;AAAA,QACxB,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,OAAA,EAAS,GAAG,MAAM,CAAA;AAAA,QAAG;AAAA,OACvD;AACA,MAAA,IAAA,CAAK,oBAAA,CAAqB,QAAQ,OAAO,CAAA;AACzC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,QAAA,EACA,OAAA,EACsB;AACtB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA;AAAA,QACxB,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,OAAA,EAAS,GAAG,MAAM,CAAA;AAAA,QAAG;AAAA,OACvD;AACA,MAAA,IAAA,CAAK,oBAAA,CAAqB,QAAQ,OAAO,CAAA;AACzC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,MAAA,EACA,MAAA,EACA,OAAA,EACyB;AACzB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,WAAsB,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA;AAAA,QACxB,MAAM,IAAA,CAAK,oBAAA,CAAqB,UAAU,MAAA,EAAQ,OAAA,EAAS,GAAG,MAAM,CAAA;AAAA,QAAG;AAAA,OACzE;AACA,MAAA,IAAA,CAAK,oBAAA,CAAqB,QAAQ,OAAO,CAAA;AACzC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,OAAO,MAAA,CACL,MAAA,EACA,OAAA,EAC2B;AAC3B,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,WAAsB,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAA;AAC9D,MAAA,OAAO,IAAA,CAAK,eAAA;AAAA,QACV,MAAM,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,OAAA,EAAS,EAAA,CAAG,MAAM,CAAA,EAAG,OAAA,EAAS,EAAE,CAAA;AAAA,QAC5F;AAAA,OACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,OAAO,iBAAA,CACL,QAAA,EACA,OAAA,EAC2B;AAC3B,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,eAAA;AAAA,QACV,MAAM,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,OAAA,EAAS,EAAA,CAAG,MAAM,CAAA,EAAG,OAAA,EAAS,EAAE,CAAA;AAAA,QAC5F;AAAA,OACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA;AAAA,EAGA,oBAAoB,UAAA,EAAoC;AACtD,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,iBAAA,CAAkB,KAAK,UAAU,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,OAAe,mBAAA,CACb,MAAA,EACA,OAAA,EACA,EAAA,EAC2B;AAE3B,IAAA,IAAI,MAAA,GAAoC,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AACzE,IAAA,MAAA,GAAS,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,OAAA,EAAS,mBAAmB,EAAE,CAAA;AAC1E,IAAA,MAAA,GAAS,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAGpC,IAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,MAAM,GAAA,GAAqB;AAAA,QACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,eAAA,EAAiB,EAAA;AAAA,QACjB,QAAQ,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,IAAA,CAAK,QAAQ;AAAA,OAC1C;AACA,MAAA,KAAA,MAAW,EAAA,IAAM,KAAK,iBAAA,EAAmB;AACvC,QAAA,MAAA,GAAS,EAAA,CAAG,QAAQ,GAAG,CAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAA,GAA2B;AAC/B,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACb;AAAA,EAEA,QAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,SAAA,GAAuC;AACrC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,sBAAA,IAAyB;AAC9B,IAAA,IAAA,CAAK,sBAAA,GAAyB,IAAA;AAC9B,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,UAAA;AAAA,EACf;AAAA;AAAA;AAAA,EA6BQ,gBAAA,CAAiB,OAAgB,KAAA,EAA6B;AAEpE,IAAA,IAAI,KAAA,YAAiB,UAAA,IAAc,KAAA,YAAiB,eAAA,IAAmB,iBAAiB,aAAA,EAAe;AACrG,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAA,CAAc,EAAA,CAAG,KAAK,CAAA,EAAG;AAE3B,MAAA,IAAI,MAAM,eAAA,IAAmB,KAAA,CAAM,gBAAgB,MAAA,GAAS,CAAA,IAAK,MAAM,IAAA,EAAM;AAC3E,QAAA,OAAO,KAAA,CAAM,eAAA,CAAgB,QAAA,CAAS,KAAA,CAAM,IAA4C,CAAA;AAAA,MAC1F;AAEA,MAAA,IAAI,KAAA,CAAM,WAAW,OAAO,IAAA;AAC5B,MAAA,IAAI,KAAA,CAAM,IAAA,EAAM,OAAO,sBAAA,CAAuB,MAAM,IAAoD,CAAA;AAAA,IAC1G;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAc,SAAA,CACZ,EAAA,EACA,OAAA,EACY;AACZ,IAAA,MAAM,QAAQ,OAAA,EAAS,KAAA;AACvB,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAM,UAAA,IAAc,KAAA,CAAM,cAAc,CAAA,EAAG;AACxD,MAAA,OAAO,EAAA,EAAG;AAAA,IACZ;AAEA,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,MAAM,YAAA,GAAe,MAAM,cAAA,IAAkB,GAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,IAAqB,CAAA;AAC9C,IAAA,IAAI,SAAA;AAEJ,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,UAAA,EAAY,OAAA,EAAA,EAAW;AACtD,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,EAAA,EAAG;AAAA,MAClB,SAAS,GAAA,EAAK;AACZ,QAAA,SAAA,GAAY,GAAA;AACZ,QAAA,IAAI,WAAW,UAAA,IAAc,CAAC,KAAK,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/D,UAAA,MAAM,GAAA;AAAA,QACR;AAEA,QAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,YAAY,OAAO,CAAA;AACzD,QAAA,MAAM,IAAI,OAAA,CAAQ,CAACC,aAAY,UAAA,CAAWA,QAAAA,EAAS,KAAK,CAAC,CAAA;AAEzD,QAAA,IAAI,SAAS,MAAA,EAAQ,OAAA,IAAW,IAAA,CAAK,eAAA,EAAiB,OAAO,OAAA,EAAS;AACpE,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA;AAAA,EACR;AAAA;AAAA,EAGA,OAAe,eAAA,CACb,OAAA,EACA,OAAA,EAC2B;AAC3B,IAAA,MAAM,QAAQ,OAAA,EAAS,KAAA;AACvB,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAM,UAAA,IAAc,KAAA,CAAM,cAAc,CAAA,EAAG;AACxD,MAAA,OAAO,OAAA,EAAQ;AACf,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,MAAM,YAAA,GAAe,MAAM,cAAA,IAAkB,GAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,IAAqB,CAAA;AAE9C,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,UAAA,EAAY,OAAA,EAAA,EAAW;AACtD,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,OAAA,EAAQ;AACvB,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAE;AAE9C,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,QAAA,IAAI,MAAM,IAAA,EAAM;AAEhB,QAAA,MAAM,KAAA,CAAM,KAAA;AAEZ,QAAA,OAAO,IAAA,EAAM;AACX,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,UAAA,IAAI,KAAK,IAAA,EAAM;AACf,UAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACb;AACA,QAAA;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,WAAW,UAAA,IAAc,CAAC,KAAK,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/D,UAAA,MAAM,GAAA;AAAA,QACR;AACA,QAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,YAAY,OAAO,CAAA;AACzD,QAAA,MAAM,IAAI,OAAA,CAAQ,CAACA,aAAY,UAAA,CAAWA,QAAAA,EAAS,KAAK,CAAC,CAAA;AACzD,QAAA,IAAI,SAAS,MAAA,EAAQ,OAAA,IAAW,IAAA,CAAK,eAAA,EAAiB,OAAO,OAAA,EAAS;AACpE,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAKU,aAAa,OAAA,EAAwC;AAC7D,IAAA,OAAO,OAAA,EAAS,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,SAAS,EAAC;AAAA,EACjD;AAAA;AAAA;AAAA,EAKQ,oBAAA,CAAqB,QAA8B,OAAA,EAA2B;AACpF,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACb,GAAG,MAAA,CAAO,KAAA;AAAA,QACV,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,SAAS,IAAA,CAAK;AAAA,OAChB;AACA,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,OAAe,YAAA,CACb,MAAA,EACA,OAAA,EAC2B;AAC3B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,MAAA,IAAI,KAAA,CAAM,SAAS,cAAA,EAAgB;AACjC,QAAA,MAAM,KAAA,GAAmB;AAAA,UACvB,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,UACxB,KAAA;AAAA,UACA,SAAS,IAAA,CAAK;AAAA,SAChB;AACA,QAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AACtB,QAAA,MAAM,EAAE,IAAA,EAAM,cAAA,EAAgB,GAAG,KAAA,EAAM;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGQ,YAAY,KAAA,EAAwB;AAC1C,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS;AAC1B,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA,IAC3B,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,qCAAA;AAAA,QACA,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC;AAAA,OAC3C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,gBACb,MAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,iBAAA;AAC7B,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,IAAY,CAAA,EAAG;AAC9B,MAAA,OAAO,MAAA;AACP,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAE;AAC9C,IAAA,IAAI,YAAA,GAA2D,IAAA;AAC/D,IAAA,IAAI,gBAAA,GAAwC,IAAA;AAE5C,IAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,MAAMA,QAAAA,GAAU,gBAAA;AAChB,QAAA,gBAAA,GAAmB,IAAA;AACnB,QAAAA,QAAAA,EAAQ;AAAA,MACV;AAAA,IACF,GAAG,QAAQ,CAAA;AAEX,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,YAAA,GAAe,SAAS,IAAA,EAAK;AAAA,QAC/B;AAEA,QAAA,MAAM,gBAAA,GAAmB,IAAI,OAAA,CAAc,CAACA,QAAAA,KAAY;AACtD,UAAA,gBAAA,GAAmBA,QAAAA;AAAA,QACrB,CAAC,CAAA;AAED,QAAA,MAAM,YAAY,YAAA,CAAa,IAAA;AAAA,UAC7B,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,OAAA,EAAkB,QAAQ,CAAA,EAAE;AAAA,SAC9C;AACA,QAAA,MAAM,gBAAgB,gBAAA,CAAiB,IAAA;AAAA,UACrC,OAAO,EAAE,IAAA,EAAM,WAAA,EAAqB;AAAA,SACtC;AAEA,QAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,KAAK,CAAC,SAAA,EAAW,aAAa,CAAC,CAAA;AAE5D,QAAA,IAAI,MAAA,CAAO,SAAS,WAAA,EAAa;AAC/B,UAAA,MAAM,EAAE,MAAM,WAAA,EAAY;AAAA,QAC5B,CAAA,MAAO;AACL,UAAA,YAAA,GAAe,IAAA;AACf,UAAA,gBAAA,GAAmB,IAAA;AACnB,UAAA,IAAI,MAAA,CAAO,OAAO,IAAA,EAAM;AACxB,UAAA,MAAM,OAAO,MAAA,CAAO,KAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,gBAAA,GAAmB,IAAA;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,qBAAA,CACb,MAAA,EACA,SAAA,EACA,EAAA,EAC2B;AAC3B,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,IAAa,CAAA,EAAG;AAChC,MAAA,OAAO,MAAA;AACP,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAE;AAC9C,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,cAAA,GAAiB,IAAI,OAAA,CAAe,CAAC,GAAG,MAAA,KAAW;AACvD,UAAA,OAAA,GAAU,UAAA,CAAW,MAAM,MAAA,CAAO,IAAI,qBAAqB,SAAS,CAAC,GAAG,SAAS,CAAA;AAAA,QACnF,CAAC,CAAA;AACD,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,QAAA,CAAS,IAAA,EAAK,EAAG,cAAc,CAAC,CAAA;AACnE,QAAA,YAAA,CAAa,OAAO,CAAA;AACpB,QAAA,IAAI,OAAO,IAAA,EAAM;AACjB,QAAA,MAAM,MAAA,CAAO,KAAA;AAAA,MACf;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,oBAAA,EAAsB;AACvC,QAAA,EAAA,CAAG,MAAM,GAAG,CAAA;AAAA,MACd;AACA,MAAA,MAAM,GAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB;AAAA,EACF;AAAA;AAAA,EAIU,eAAA,GAAwB;AAChC,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,SAAA,IAAa,IAAA,CAAK,UAAU,WAAA,EAAa;AAC1D,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B;AAAA,EACF;AAAA,EAEU,aAAA,GAAsB;AAC9B,IAAA,IAAI,IAAA,CAAK,UAAU,UAAA,EAAY;AAC7B,MAAA,MAAM,IAAI,cAAc,OAAO,CAAA;AAAA,IACjC;AAAA,EACF;AAAA;AAAA,EAGU,WAAW,MAAA,EAA2B;AAC9C,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,MAAM,IAAI,UAAA,EAAW;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA,EAKQ,UAAA,GAAmB;AACzB,IAAA,IAAA,CAAK,sBAAA,IAAyB;AAC9B,IAAA,IAAA,CAAK,sBAAA,GAAyB,IAAA;AAC9B,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA;AACb,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,EACzB;AAAA,EAEQ,sBAAsB,cAAA,EAA+C;AAC3E,IAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,IAAA,IAAA,CAAK,eAAA,GAAkB,EAAA;AACvB,IAAA,IAAA,CAAK,sBAAA,GAAyB,IAAA;AAE9B,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,QAAA,EAAA,CAAG,KAAA,EAAM;AAAA,MACX,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,KAAA,EAAM;AAChC,QAAA,cAAA,CAAe,iBAAiB,OAAA,EAAS,QAAA,EAAU,EAAE,IAAA,EAAM,MAAM,CAAA;AACjE,QAAA,IAAA,CAAK,sBAAA,GAAyB,MAAM,cAAA,CAAe,mBAAA,CAAoB,SAAS,QAAQ,CAAA;AAAA,MAC1F;AAAA,IACF;AAEA,IAAA,OAAO,EAAA;AAAA,EACT;AACF;;;AChhBO,SAAS,gBAAgB,MAAA,EAA4C;AAC1E,EAAA,MAAM,SAAA,GAAY,MAAA;AAGlB,EAAA,IAAI,cAAA,IAAkB,MAAA,IAAU,OAAO,SAAA,CAAU,iBAAiB,UAAA,EAAY;AAC5E,IAAA,OAAQ,UAAU,YAAA,EAA+C;AAAA,EACnE;AAGA,EAAA,IAAI,YAAA,IAAgB,MAAA,IAAU,OAAO,SAAA,CAAU,eAAe,UAAA,EAAY;AACxE,IAAA,OAAQ,UAAU,UAAA,EAA6C;AAAA,EACjE;AAGA,EAAA,OAAO,qBAAqB,MAAM,CAAA;AACpC;AAGA,SAAS,qBAAqB,MAAA,EAA4C;AACxE,EAAA,MAAM,MAAO,MAAA,CAAoD,IAAA;AACjE,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AAErB,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC1B,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC1B,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,MAAM,SAAA,EAAU;AAAA,IAC3B,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IACxB,KAAK,UAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,oBAAA,CAAqB,GAAA,CAAI,IAAiB;AAAA,OACnD;AAAA,IACF,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,QAAS,MAAA,CAA2D,KAAA;AAC1E,MAAA,MAAM,aAAsC,EAAC;AAC7C,MAAA,MAAM,WAAqB,EAAC;AAE5B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,QAAA,MAAM,WAAY,KAAA,CAAmD,IAAA;AACrE,QAAA,IAAI,QAAA,CAAS,aAAa,aAAA,EAAe;AACvC,UAAA,UAAA,CAAW,GAAG,CAAA,GAAI,oBAAA,CAAqB,QAAA,CAAS,SAAsB,CAAA;AAAA,QACxE,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,GAAG,CAAA,GAAI,oBAAA,CAAqB,KAAK,CAAA;AAC5C,UAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,QACnB;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA;AAAA,QACA,GAAI,QAAA,CAAS,MAAA,GAAS,IAAI,EAAE,QAAA,KAAa;AAAC,OAC5C;AAAA,IACF;AAAA,IACA,KAAK,aAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,IAAI,SAAsB,CAAA;AAAA,IACxD,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,IAAI,MAAA,EAAmB;AAAA,IACxD;AACE,MAAA,OAAO,EAAC;AAAA;AAEd;;;AChEO,SAAS,iBAAiB,QAAA,EAA6B;AAC5D,EAAA,OAAO,QAAA,CACJ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,IAAA,QAAQ,IAAI,IAAA;AAAM,MAChB,KAAK,MAAA;AACH,QAAA,OAAO,aAAA,CAAc,IAAI,OAAO,CAAA;AAAA,MAClC,KAAK,WAAA;AACH,QAAA,OAAO,aAAA,CAAc,IAAI,OAAO,CAAA;AAAA,MAClC,KAAK,QAAA;AACH,QAAA,OAAO,GAAA,CAAI,OAAA;AAAA,MACb,KAAK,MAAA;AACH,QAAA,OAAO,IAAI,OAAA,IAAW,EAAA;AAAA;AAC1B,EACF,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,MAAM,CAAA;AAChB;AAGO,SAAS,cAAc,OAAA,EAAiC;AAC7D,EAAA,OAAO,eAAe,OAAO,CAAA;AAC/B;AAGO,SAAS,iBAAA,CACd,MACA,iBAAA,EACQ;AACR,EAAA,IAAI,CAAC,mBAAmB,OAAO,IAAA;AAC/B,EAAA,OAAO,GAAG,IAAI;;AAAA,EAAO,iBAAiB,CAAA,CAAA;AACxC;ACNO,IAAM,0BAAN,MAA0D;AAAA,EACvD,SAAA,uBAAgB,GAAA,EAA6B;AAAA,EAErD,MAAM,WAAW,QAAA,EAAoC;AACnD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,OAAA,CAAQ,QAAA,EAAkB,KAAA,EAAuC;AACrE,IAAA,IAAI,UAAU,MAAA,EAAQ;AACtB,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,OAAO,QAAA,EAAiC;AAC5C,IAAA,IAAA,CAAK,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EACvB;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EACvB;AACF;AAcO,IAAM,sBAAN,MAAsD;AAAA,EAC1C,QAAA;AAAA,EAEjB,YAAY,QAAA,EAAkB;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAgB,aAAQ,QAAQ,CAAA;AAAA,EACvC;AAAA,EAEA,MAAM,WAAW,QAAA,EAAoC;AACnD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,EAAU;AAClC,IAAA,OAAO,YAAY,IAAA,CAAK,SAAA;AAAA,EAC1B;AAAA,EAEA,MAAM,OAAA,CAAQ,QAAA,EAAkB,KAAA,EAAuC;AACrE,IAAA,IAAI,UAAU,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,EAAU;AAClC,IAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,GAAI,EAAE,OAAO,SAAA,EAAW,IAAA,CAAK,KAAI,EAAE;AAC1D,IAAA,MAAM,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,OAAO,QAAA,EAAiC;AAC5C,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,EAAU;AAClC,IAAA,OAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAC9B,IAAA,MAAM,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,KAAK,gBAAA,CAAiB,EAAE,SAAA,EAAW,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,MAAM,OAAA,GAAyB;AAAA,EAE/B;AAAA,EAEA,MAAc,SAAA,GAAoC;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAU,GAAA,CAAA,QAAA,CAAS,IAAA,CAAK,UAAU,OAAO,CAAA;AACrD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,MAAA,IAAI,MAAA,IAAU,OAAO,MAAA,CAAO,SAAA,KAAc,UAAU,OAAO,MAAA;AAAA,IAC7D,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,EAAE,SAAA,EAAW,EAAC,EAAE;AAAA,EACzB;AAAA,EAEA,MAAc,iBAAiB,IAAA,EAAoC;AACjE,IAAA,MAAM,GAAA,GAAW,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AACtC,IAAA,MAAU,GAAA,CAAA,KAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,QAAA,GAAW,CAAA,KAAA,EAAQ,QAAQ,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AACjE,IAAA,MAAU,GAAA,CAAA,SAAA,CAAU,SAAS,IAAA,CAAK,SAAA,CAAU,MAAM,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AACnE,IAAA,MAAU,GAAA,CAAA,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAAA,EACzC;AACF;AAWO,IAAM,2BAAN,MAA2D;AAAA,EAC/C,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EAEjB,WAAA,CACE,YAAA,EACA,YAAA,EACA,SAAA,EACA;AACA,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,YAAY,SAAA,IAAa,YAAA;AAAA,EAChC;AAAA,EAEA,MAAM,WAAW,QAAA,EAAoC;AACnD,IAAA,OACG,MAAM,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,QAAQ,KAC3C,MAAM,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,QAAQ,CAAA,IAC3C,MAAM,IAAA,CAAK,SAAA,CAAU,WAAW,QAAQ,CAAA;AAAA,EAE7C;AAAA,EAEA,MAAM,OAAA,CAAQ,QAAA,EAAkB,KAAA,EAAuC;AACrE,IAAA,IAAI,UAAU,MAAA,EAAQ;AACtB,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,QAAA,EAAU,KAAK,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,UAAU,SAAA,EAAW;AAC9B,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,QAAA,EAAU,KAAK,CAAA;AAAA,IACjD,CAAA,MAAO;AAEL,MAAA,MAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,QAAA,EAAU,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAA,EAAiC;AAC5C,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,QAAQ,CAAA;AACvC,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,QAAQ,CAAA;AACvC,IAAA,MAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,CAAK,aAAa,KAAA,EAAM;AAC9B,IAAA,MAAM,IAAA,CAAK,aAAa,KAAA,EAAM;AAC9B,IAAA,MAAM,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EAC7B;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,MAAM,IAAA,CAAK,aAAa,OAAA,EAAQ;AAChC,IAAA,MAAM,IAAA,CAAK,aAAa,OAAA,EAAQ;AAChC,IAAA,IAAI,IAAA,CAAK,SAAA,KAAc,IAAA,CAAK,YAAA,EAAc;AACxC,MAAA,MAAM,IAAA,CAAK,UAAU,OAAA,EAAQ;AAAA,IAC/B;AAAA,EACF;AACF;AAKO,SAAS,6BACd,UAAA,EAC0B;AAC1B,EAAA,MAAM,YAAA,GAAe,IAAI,uBAAA,EAAwB;AACjD,EAAA,MAAM,WAAA,GAAc,UAAA,GACX,IAAA,CAAA,IAAA,CAAK,UAAA,EAAY,YAAA,EAAc,kBAAkB,CAAA,GACjD,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,YAAA,EAAc,kBAAkB,CAAA;AAC7D,EAAA,MAAM,QAAA,GAAgB,IAAA,CAAA,IAAA,CAAQ,EAAA,CAAA,OAAA,EAAQ,EAAG,cAAc,kBAAkB,CAAA;AACzE,EAAA,MAAM,YAAA,GAAe,IAAI,mBAAA,CAAoB,WAAW,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,IAAI,mBAAA,CAAoB,QAAQ,CAAA;AAClD,EAAA,OAAO,IAAI,wBAAA,CAAyB,YAAA,EAAc,YAAA,EAAc,SAAS,CAAA;AAC3E","file":"index.js","sourcesContent":["// ─── Unified Error Code Enum ───────────────────────────────────\n\n/** Unified error codes for all SDK errors — single source of truth. */\nexport enum ErrorCode {\n // Auth\n AUTH_EXPIRED = \"AUTH_EXPIRED\",\n AUTH_INVALID = \"AUTH_INVALID\",\n\n // Rate limiting\n RATE_LIMIT = \"RATE_LIMIT\",\n\n // Network\n NETWORK = \"NETWORK\",\n TIMEOUT = \"TIMEOUT\",\n\n // Provider\n PROVIDER_ERROR = \"PROVIDER_ERROR\",\n MODEL_NOT_FOUND = \"MODEL_NOT_FOUND\",\n MODEL_OVERLOADED = \"MODEL_OVERLOADED\",\n CONTEXT_OVERFLOW = \"CONTEXT_OVERFLOW\",\n\n // Input / Response\n INVALID_INPUT = \"INVALID_INPUT\",\n INVALID_RESPONSE = \"INVALID_RESPONSE\",\n\n // SDK internal\n REENTRANCY = \"REENTRANCY\",\n DISPOSED = \"DISPOSED\",\n ABORTED = \"ABORTED\",\n INVALID_TRANSITION = \"INVALID_TRANSITION\",\n DEPENDENCY_MISSING = \"DEPENDENCY_MISSING\",\n BACKEND_NOT_INSTALLED = \"BACKEND_NOT_INSTALLED\",\n\n // Tool\n TOOL_EXECUTION = \"TOOL_EXECUTION\",\n PERMISSION_DENIED = \"PERMISSION_DENIED\",\n\n // Session\n SESSION_NOT_FOUND = \"SESSION_NOT_FOUND\",\n SESSION_EXPIRED = \"SESSION_EXPIRED\",\n\n // Provider resolution\n PROVIDER_NOT_FOUND = \"PROVIDER_NOT_FOUND\",\n AUTH_REQUIRED = \"AUTH_REQUIRED\",\n\n // Storage (generic)\n STORAGE_ERROR = \"STORAGE_ERROR\",\n // Storage (specific)\n STORAGE_NOT_FOUND = \"STORAGE_NOT_FOUND\",\n STORAGE_DUPLICATE_KEY = \"STORAGE_DUPLICATE_KEY\",\n STORAGE_IO_ERROR = \"STORAGE_IO_ERROR\",\n STORAGE_SERIALIZATION_ERROR = \"STORAGE_SERIALIZATION_ERROR\",\n}\n\n// ─── Classification ────────────────────────────────────────────\n\n/** Error codes that are typically recoverable (retry-safe) */\nconst RECOVERABLE_CODES = new Set<ErrorCode>([\n ErrorCode.TIMEOUT,\n ErrorCode.RATE_LIMIT,\n ErrorCode.NETWORK,\n ErrorCode.TOOL_EXECUTION,\n ErrorCode.MODEL_OVERLOADED,\n ErrorCode.PROVIDER_ERROR,\n]);\n\n/** Check if an error code is recoverable */\nexport function isRecoverableErrorCode(code: ErrorCode): boolean {\n return RECOVERABLE_CODES.has(code);\n}\n\n/** Classify an error message string into an ErrorCode */\nexport function classifyAgentError(error: string | Error): ErrorCode {\n const msg = (error instanceof Error ? error.message : error).toLowerCase();\n\n if (msg.includes(\"timeout\") || msg.includes(\"timed out\") || msg.includes(\"timedout\") || msg.includes(\"etimedout\")) {\n return ErrorCode.TIMEOUT;\n }\n\n if (msg.includes(\"rate limit\") || msg.includes(\"rate_limit\") || msg.includes(\"429\") || msg.includes(\"too many requests\")) {\n return ErrorCode.RATE_LIMIT;\n }\n\n if (msg.includes(\"unauthorized\") || msg.includes(\"401\") || msg.includes(\"auth\") && (msg.includes(\"expired\") || msg.includes(\"invalid\") || msg.includes(\"denied\") || msg.includes(\"failed\"))) {\n return ErrorCode.AUTH_EXPIRED;\n }\n\n if (msg.includes(\"econnrefused\") || msg.includes(\"econnreset\") || msg.includes(\"enotfound\") || msg.includes(\"network\") || msg.includes(\"fetch failed\") || msg.includes(\"socket hang up\")) {\n return ErrorCode.NETWORK;\n }\n\n if (msg.includes(\"subprocess\") || msg.includes(\"process exited\") || msg.includes(\"spawn\") || msg.includes(\"enoent\") || msg.includes(\"killed\")) {\n return ErrorCode.DEPENDENCY_MISSING;\n }\n\n if (msg.includes(\"abort\") || msg.includes(\"cancel\")) {\n return ErrorCode.ABORTED;\n }\n\n if (msg.includes(\"500\") || msg.includes(\"502\") || msg.includes(\"503\") || msg.includes(\"internal server error\") || msg.includes(\"service unavailable\") || msg.includes(\"bad gateway\") || msg.includes(\"overloaded\")) {\n return ErrorCode.PROVIDER_ERROR;\n }\n\n return ErrorCode.PROVIDER_ERROR;\n}\n","import type { ToolDeclaration, ToolDefinition } from \"./tools.js\";\nimport type { MessageContent, ContentPart } from \"./messages.js\";\n\n/** Type guard: checks if a ToolDeclaration has an execute function (i.e., is a ToolDefinition) */\nexport function isToolDefinition(\n tool: ToolDeclaration,\n): tool is ToolDefinition {\n return \"execute\" in tool && typeof (tool as ToolDefinition).execute === \"function\";\n}\n\n/** Type guard: checks if MessageContent is plain string */\nexport function isTextContent(content: MessageContent): content is string {\n return typeof content === \"string\";\n}\n\n/** Type guard: checks if MessageContent is multi-part array */\nexport function isMultiPartContent(\n content: MessageContent,\n): content is ContentPart[] {\n return Array.isArray(content);\n}\n\n/** Extract text from MessageContent regardless of format */\nexport function getTextContent(content: MessageContent): string {\n if (typeof content === \"string\") return content;\n return content\n .filter((p): p is Extract<ContentPart, { type: \"text\" }> => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\");\n}\n","import { ErrorCode } from \"./types/errors.js\";\n\n/** Options for constructing an AgentSDKError */\nexport interface AgentSDKErrorOptions extends ErrorOptions {\n /** Machine-readable error code */\n code?: string;\n /** Whether this error is retryable (default: false) */\n retryable?: boolean;\n /** HTTP status code hint (e.g. 401, 429, 500) */\n httpStatus?: number;\n}\n\n/** Base error class for agent-sdk.\n *\n * Use `AgentSDKError.is(err)` for reliable cross-module `instanceof` checks\n * (works across separately bundled entry points where `instanceof` may fail). */\nexport class AgentSDKError extends Error {\n /** @internal Marker for cross-bundle identity checks */\n readonly _agentSDKError = true as const;\n /** Machine-readable error code. Prefer values from the ErrorCode enum. */\n readonly code?: string;\n /** Whether this error is safe to retry */\n readonly retryable: boolean;\n /** HTTP status code hint for error classification */\n readonly httpStatus?: number;\n\n constructor(message: string, options?: AgentSDKErrorOptions) {\n super(message, options);\n this.name = \"AgentSDKError\";\n this.code = options?.code;\n this.retryable = options?.retryable ?? false;\n this.httpStatus = options?.httpStatus;\n }\n\n /** Check if an error is an AgentSDKError (works across bundled copies) */\n static is(error: unknown): error is AgentSDKError {\n return (\n error instanceof Error &&\n \"_agentSDKError\" in error &&\n (error as AgentSDKError)._agentSDKError === true\n );\n }\n}\n\n/** Thrown when agent.run() is called while already running (M8 re-entrancy guard) */\nexport class ReentrancyError extends AgentSDKError {\n constructor() {\n super(\"Agent is already running. Await the current run before starting another.\", {\n code: ErrorCode.REENTRANCY,\n });\n this.name = \"ReentrancyError\";\n }\n}\n\n/** Thrown when an operation is attempted on a disposed agent/service */\nexport class DisposedError extends AgentSDKError {\n constructor(entity: string) {\n super(`${entity} has been disposed and cannot be used.`, {\n code: ErrorCode.DISPOSED,\n });\n this.name = \"DisposedError\";\n }\n}\n\n/** Thrown when a backend is not found in the registry */\nexport class BackendNotFoundError extends AgentSDKError {\n constructor(backend: string) {\n super(\n `Unknown backend: \"${backend}\". ` +\n `Built-in: copilot, claude, vercel-ai. ` +\n `Custom: use registerBackend() first.`,\n { code: ErrorCode.BACKEND_NOT_INSTALLED },\n );\n this.name = \"BackendNotFoundError\";\n }\n}\n\n/** Thrown when a backend is already registered */\nexport class BackendAlreadyRegisteredError extends AgentSDKError {\n constructor(backend: string) {\n super(`Backend \"${backend}\" is already registered. Use a different name or unregister first.`);\n this.name = \"BackendAlreadyRegisteredError\";\n }\n}\n\n/** Thrown when subprocess management fails */\nexport class SubprocessError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, { ...options, code: ErrorCode.DEPENDENCY_MISSING });\n this.name = \"SubprocessError\";\n }\n}\n\n/** Thrown when a required peer dependency is not installed */\nexport class DependencyError extends AgentSDKError {\n public readonly packageName: string;\n\n constructor(packageName: string) {\n super(`${packageName} is not installed. Install it: npm install ${packageName}`, {\n code: ErrorCode.DEPENDENCY_MISSING,\n });\n this.name = \"DependencyError\";\n this.packageName = packageName;\n }\n}\n\n/** Thrown when an agent run is aborted */\nexport class AbortError extends AgentSDKError {\n constructor() {\n super(\"Agent run was aborted.\", { code: ErrorCode.ABORTED });\n this.name = \"AbortError\";\n }\n}\n\n/** Thrown when a tool execution fails */\nexport class ToolExecutionError extends AgentSDKError {\n public readonly toolName: string;\n\n constructor(toolName: string, message: string, options?: ErrorOptions) {\n super(`Tool \"${toolName}\" failed: ${message}`, { ...options, code: ErrorCode.TOOL_EXECUTION });\n this.name = \"ToolExecutionError\";\n this.toolName = toolName;\n }\n}\n\n/** Thrown when a stream has no activity within the configured timeout */\nexport class ActivityTimeoutError extends AgentSDKError {\n constructor(timeoutMs: number) {\n super(`Stream activity timeout: no event received within ${timeoutMs}ms.`, {\n code: ErrorCode.TIMEOUT,\n retryable: true,\n });\n this.name = \"ActivityTimeoutError\";\n }\n}\n\n/** Thrown when structured output parsing fails */\nexport class StructuredOutputError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(`Structured output error: ${message}`, { ...options, code: ErrorCode.INVALID_RESPONSE });\n this.name = \"StructuredOutputError\";\n }\n}\n","import type {\n IAgentService,\n CopilotBackendOptions,\n ClaudeBackendOptions,\n VercelAIBackendOptions,\n} from \"./types.js\";\nimport {\n BackendNotFoundError,\n BackendAlreadyRegisteredError,\n} from \"./errors.js\";\n\n// ─── Backend Factory Types ──────────────────────────────────────\n\n/** Factory function that creates a backend service from options */\nexport type BackendFactory<TOptions = unknown> = (\n options: TOptions,\n) => IAgentService | Promise<IAgentService>;\n\n/** Map of built-in backend names to their options types */\nexport interface BackendOptionsMap {\n copilot: CopilotBackendOptions;\n claude: ClaudeBackendOptions;\n \"vercel-ai\": VercelAIBackendOptions;\n}\n\n/** All known backend names (built-in + custom) */\nexport type BuiltinBackendName = keyof BackendOptionsMap;\n\n// ─── Registry ───────────────────────────────────────────────────\n\ninterface RegistryEntry {\n factory: BackendFactory;\n /** Whether this is a built-in backend loaded lazily */\n builtin: boolean;\n}\n\nconst registry = new Map<string, RegistryEntry>();\n\n/** Cached service instances keyed by \"backend:configId\" */\nconst serviceCache = new Map<string, IAgentService>();\n\nfunction configCacheKey(name: string, configId: string): string {\n return `${name}:${configId}`;\n}\n\n/** Register a custom backend factory */\nexport function registerBackend<TOptions = unknown>(\n name: string,\n factory: BackendFactory<TOptions>,\n): void {\n if (registry.has(name)) {\n throw new BackendAlreadyRegisteredError(name);\n }\n registry.set(name, { factory: factory as BackendFactory, builtin: false });\n}\n\n/** Unregister a backend (primarily for testing) */\nexport function unregisterBackend(name: string): boolean {\n return registry.delete(name);\n}\n\n/** Check if a backend is registered (eagerly or lazily) */\nexport function hasBackend(name: string): boolean {\n return registry.has(name) || lazyLoaders.has(name);\n}\n\n/** List all registered backend names (eager + lazy) */\nexport function listBackends(): string[] {\n const names = new Set<string>(registry.keys());\n for (const name of lazyLoaders.keys()) {\n names.add(name);\n }\n return [...names];\n}\n\n/** Reset registry to initial state (for testing) */\nexport function resetRegistry(): void {\n registry.clear();\n serviceCache.clear();\n}\n\n/** Dispose all cached service instances for a backend, or a single named config.\n * Returns the number of instances disposed. */\nexport async function disposeBackend(\n name: string,\n configId?: string,\n): Promise<number> {\n if (configId !== undefined) {\n const key = configCacheKey(name, configId);\n const svc = serviceCache.get(key);\n if (!svc) return 0;\n serviceCache.delete(key);\n await svc.dispose();\n return 1;\n }\n const prefix = `${name}:`;\n const toDispose: IAgentService[] = [];\n for (const [key, svc] of serviceCache) {\n if (key.startsWith(prefix)) {\n toDispose.push(svc);\n serviceCache.delete(key);\n }\n }\n await Promise.all(toDispose.map((s) => s.dispose()));\n return toDispose.length;\n}\n\n/** List all active config IDs for a backend */\nexport function listConfigs(name: string): string[] {\n const prefix = `${name}:`;\n const ids: string[] = [];\n for (const key of serviceCache.keys()) {\n if (key.startsWith(prefix)) {\n ids.push(key.slice(prefix.length));\n }\n }\n return ids;\n}\n\n// ─── Lazy Backend Loader Registry ───────────────────────────────\n\n/** Lazy loader: async function that returns a BackendFactory */\ntype LazyBackendLoader = () => Promise<BackendFactory>;\n\n/** Map of backend name → lazy loader. Extensible via registerLazyBackend(). */\nconst lazyLoaders = new Map<string, LazyBackendLoader>([\n [\n \"copilot\",\n async () => {\n const mod = await import(\"./backends/copilot.js\");\n return (opts: unknown) =>\n mod.createCopilotService(opts as CopilotBackendOptions);\n },\n ],\n [\n \"claude\",\n async () => {\n const mod = await import(\"./backends/claude.js\");\n return (opts: unknown) =>\n mod.createClaudeService(opts as ClaudeBackendOptions);\n },\n ],\n [\n \"vercel-ai\",\n async () => {\n const mod = await import(\"./backends/vercel-ai.js\");\n return (opts: unknown) =>\n mod.createVercelAIService(opts as VercelAIBackendOptions);\n },\n ],\n]);\n\n/**\n * Register a lazy-loaded backend. The loader is called once on first use,\n * then the resulting factory is cached in the main registry.\n * Use this for backends that have heavy dependencies (peer deps, native modules).\n */\nexport function registerLazyBackend(\n name: string,\n loader: () => Promise<BackendFactory>,\n): void {\n lazyLoaders.set(name, loader);\n}\n\n// ─── Type-Safe Factory (B6) ─────────────────────────────────────\n\n/** Create a backend service with type-safe options.\n * When `configId` is provided, the service instance is cached and reused\n * on subsequent calls with the same name+configId pair. Without configId,\n * a new instance is created every call. */\nexport async function createAgentService<K extends BuiltinBackendName>(\n name: K,\n options: BackendOptionsMap[K],\n configId?: string,\n): Promise<IAgentService>;\nexport async function createAgentService(\n name: string,\n options: unknown,\n configId?: string,\n): Promise<IAgentService>;\nexport async function createAgentService(\n name: string,\n options: unknown,\n configId?: string,\n): Promise<IAgentService> {\n // Named config: check instance cache first\n if (configId !== undefined) {\n const key = configCacheKey(name, configId);\n const cached = serviceCache.get(key);\n if (cached) return cached;\n const service = await createServiceInstance(name, options);\n serviceCache.set(key, service);\n return service;\n }\n\n // Default (no configId): create fresh instance every call\n return createServiceInstance(name, options);\n}\n\nasync function createServiceInstance(\n name: string,\n options: unknown,\n): Promise<IAgentService> {\n // Check eager registry first\n const entry = registry.get(name);\n if (entry) {\n return entry.factory(options);\n }\n\n // Try lazy-loaded backend\n const loader = lazyLoaders.get(name);\n if (loader) {\n const factory = await loader();\n // Cache factory in eager registry for future calls\n registry.set(name, { factory, builtin: true });\n return factory(options);\n }\n\n throw new BackendNotFoundError(name);\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 { Message, MessageContent } from \"../types.js\";\nimport { getTextContent } from \"../types.js\";\n\n/** Convert our Message[] to a flat prompt string (for CLIs that accept text) */\nexport function messagesToPrompt(messages: Message[]): string {\n return messages\n .map((msg) => {\n switch (msg.role) {\n case \"user\":\n return contentToText(msg.content);\n case \"assistant\":\n return contentToText(msg.content);\n case \"system\":\n return msg.content;\n case \"tool\":\n return msg.content ?? \"\";\n }\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n\n/** Convert MessageContent to plain text */\nexport function contentToText(content: MessageContent): string {\n return getTextContent(content);\n}\n\n/** Build a system prompt with optional structured output instruction */\nexport function buildSystemPrompt(\n base: string,\n schemaInstruction?: string,\n): string {\n if (!schemaInstruction) return base;\n return `${base}\\n\\n${schemaInstruction}`;\n}\n","import * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport type { PermissionScope } from \"./types.js\";\n\n// ─── Interface ──────────────────────────────────────────────────\n\n/** Pluggable store for persisting permission (scope) decisions across runs. */\nexport interface IPermissionStore {\n /** Check if tool is already approved */\n isApproved(toolName: string): Promise<boolean>;\n\n /** Store an approval decision */\n approve(toolName: string, scope: PermissionScope): Promise<void>;\n\n /** Revoke approval for a tool */\n revoke(toolName: string): Promise<void>;\n\n /** Clear all approvals */\n clear(): Promise<void>;\n\n /** Dispose resources */\n dispose(): Promise<void>;\n}\n\n// ─── InMemoryPermissionStore ────────────────────────────────────\n\n/** In-memory store — approvals live until process exits (or dispose). */\nexport class InMemoryPermissionStore implements IPermissionStore {\n private approvals = new Map<string, PermissionScope>();\n\n async isApproved(toolName: string): Promise<boolean> {\n return this.approvals.has(toolName);\n }\n\n async approve(toolName: string, scope: PermissionScope): Promise<void> {\n if (scope === \"once\") return; // \"once\" means don't persist\n this.approvals.set(toolName, scope);\n }\n\n async revoke(toolName: string): Promise<void> {\n this.approvals.delete(toolName);\n }\n\n async clear(): Promise<void> {\n this.approvals.clear();\n }\n\n async dispose(): Promise<void> {\n this.approvals.clear();\n }\n}\n\n// ─── FilePermissionStore ────────────────────────────────────────\n\ninterface FileStoreEntry {\n scope: PermissionScope;\n timestamp: number;\n}\n\ninterface FileStoreData {\n approvals: Record<string, FileStoreEntry>;\n}\n\n/** File-backed store — reads/writes a JSON file for persistent approvals. */\nexport class FilePermissionStore implements IPermissionStore {\n private readonly filePath: string;\n\n constructor(filePath: string) {\n this.filePath = path.resolve(filePath);\n }\n\n async isApproved(toolName: string): Promise<boolean> {\n const data = await this.readStore();\n return toolName in data.approvals;\n }\n\n async approve(toolName: string, scope: PermissionScope): Promise<void> {\n if (scope === \"once\") return;\n const data = await this.readStore();\n data.approvals[toolName] = { scope, timestamp: Date.now() };\n await this.writeStoreAtomic(data);\n }\n\n async revoke(toolName: string): Promise<void> {\n const data = await this.readStore();\n delete data.approvals[toolName];\n await this.writeStoreAtomic(data);\n }\n\n async clear(): Promise<void> {\n await this.writeStoreAtomic({ approvals: {} });\n }\n\n async dispose(): Promise<void> {\n // No resources to release\n }\n\n private async readStore(): Promise<FileStoreData> {\n try {\n const raw = await fsp.readFile(this.filePath, \"utf-8\");\n const parsed = JSON.parse(raw) as FileStoreData;\n if (parsed && typeof parsed.approvals === \"object\") return parsed;\n } catch {\n // File doesn't exist or is invalid — start fresh\n }\n return { approvals: {} };\n }\n\n private async writeStoreAtomic(data: FileStoreData): Promise<void> {\n const dir = path.dirname(this.filePath);\n await fsp.mkdir(dir, { recursive: true });\n const tmpPath = this.filePath + `.tmp.${process.pid}.${Date.now()}`;\n await fsp.writeFile(tmpPath, JSON.stringify(data, null, 2), \"utf-8\");\n await fsp.rename(tmpPath, this.filePath);\n }\n}\n\n// ─── CompositePermissionStore ───────────────────────────────────\n\n/**\n * Composes multiple stores — checks in order, routes writes by scope.\n *\n * - \"session\" → sessionStore (in-memory)\n * - \"project\" → projectStore (file-based in project directory)\n * - \"always\" → userStore (file-based in user home)\n */\nexport class CompositePermissionStore implements IPermissionStore {\n private readonly sessionStore: IPermissionStore;\n private readonly projectStore: IPermissionStore;\n private readonly userStore: IPermissionStore;\n\n constructor(\n sessionStore: IPermissionStore,\n projectStore: IPermissionStore,\n userStore?: IPermissionStore,\n ) {\n this.sessionStore = sessionStore;\n this.projectStore = projectStore;\n this.userStore = userStore ?? projectStore;\n }\n\n async isApproved(toolName: string): Promise<boolean> {\n return (\n (await this.sessionStore.isApproved(toolName)) ||\n (await this.projectStore.isApproved(toolName)) ||\n (await this.userStore.isApproved(toolName))\n );\n }\n\n async approve(toolName: string, scope: PermissionScope): Promise<void> {\n if (scope === \"once\") return;\n if (scope === \"session\") {\n await this.sessionStore.approve(toolName, scope);\n } else if (scope === \"project\") {\n await this.projectStore.approve(toolName, scope);\n } else {\n // \"always\" → user-level store\n await this.userStore.approve(toolName, scope);\n }\n }\n\n async revoke(toolName: string): Promise<void> {\n await this.sessionStore.revoke(toolName);\n await this.projectStore.revoke(toolName);\n await this.userStore.revoke(toolName);\n }\n\n async clear(): Promise<void> {\n await this.sessionStore.clear();\n await this.projectStore.clear();\n await this.userStore.clear();\n }\n\n async dispose(): Promise<void> {\n await this.sessionStore.dispose();\n await this.projectStore.dispose();\n if (this.userStore !== this.projectStore) {\n await this.userStore.dispose();\n }\n }\n}\n\n// ─── Helpers ────────────────────────────────────────────────────\n\n/** Create a default composite store with separate project and user-level persistence. */\nexport function createDefaultPermissionStore(\n projectDir?: string,\n): CompositePermissionStore {\n const sessionStore = new InMemoryPermissionStore();\n const projectPath = projectDir\n ? path.join(projectDir, \".agent-sdk\", \"permissions.json\")\n : path.join(process.cwd(), \".agent-sdk\", \"permissions.json\");\n const userPath = path.join(os.homedir(), \".agent-sdk\", \"permissions.json\");\n const projectStore = new FilePermissionStore(projectPath);\n const userStore = new FilePermissionStore(userPath);\n return new CompositePermissionStore(sessionStore, projectStore, userStore);\n}\n"]}