@witqq/agent-sdk 0.7.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.
- package/dist/{types-CqvUAYxt.d.ts → agent-C6H2CgJA.d.cts} +139 -102
- package/dist/{types-CqvUAYxt.d.cts → agent-F7oB6eKp.d.ts} +139 -102
- package/dist/auth/index.cjs +72 -1
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +21 -154
- package/dist/auth/index.d.ts +21 -154
- package/dist/auth/index.js +72 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/backends/claude.cjs +480 -261
- package/dist/backends/claude.cjs.map +1 -1
- package/dist/backends/claude.d.cts +3 -1
- package/dist/backends/claude.d.ts +3 -1
- package/dist/backends/claude.js +480 -261
- package/dist/backends/claude.js.map +1 -1
- package/dist/backends/copilot.cjs +337 -112
- package/dist/backends/copilot.cjs.map +1 -1
- package/dist/backends/copilot.d.cts +12 -4
- package/dist/backends/copilot.d.ts +12 -4
- package/dist/backends/copilot.js +337 -112
- package/dist/backends/copilot.js.map +1 -1
- package/dist/backends/mock-llm.cjs +719 -0
- package/dist/backends/mock-llm.cjs.map +1 -0
- package/dist/backends/mock-llm.d.cts +37 -0
- package/dist/backends/mock-llm.d.ts +37 -0
- package/dist/backends/mock-llm.js +717 -0
- package/dist/backends/mock-llm.js.map +1 -0
- package/dist/backends/vercel-ai.cjs +301 -61
- package/dist/backends/vercel-ai.cjs.map +1 -1
- package/dist/backends/vercel-ai.d.cts +3 -1
- package/dist/backends/vercel-ai.d.ts +3 -1
- package/dist/backends/vercel-ai.js +301 -61
- package/dist/backends/vercel-ai.js.map +1 -1
- package/dist/backends-Cno0gZjy.d.cts +114 -0
- package/dist/backends-Cno0gZjy.d.ts +114 -0
- package/dist/chat/accumulator.cjs +1 -1
- package/dist/chat/accumulator.cjs.map +1 -1
- package/dist/chat/accumulator.d.cts +5 -2
- package/dist/chat/accumulator.d.ts +5 -2
- package/dist/chat/accumulator.js +1 -1
- package/dist/chat/accumulator.js.map +1 -1
- package/dist/chat/backends.cjs +1084 -821
- package/dist/chat/backends.cjs.map +1 -1
- package/dist/chat/backends.d.cts +10 -6
- package/dist/chat/backends.d.ts +10 -6
- package/dist/chat/backends.js +1082 -800
- package/dist/chat/backends.js.map +1 -1
- package/dist/chat/context.cjs +50 -0
- package/dist/chat/context.cjs.map +1 -1
- package/dist/chat/context.d.cts +27 -3
- package/dist/chat/context.d.ts +27 -3
- package/dist/chat/context.js +50 -0
- package/dist/chat/context.js.map +1 -1
- package/dist/chat/core.cjs +60 -27
- package/dist/chat/core.cjs.map +1 -1
- package/dist/chat/core.d.cts +41 -382
- package/dist/chat/core.d.ts +41 -382
- package/dist/chat/core.js +58 -28
- package/dist/chat/core.js.map +1 -1
- package/dist/chat/errors.cjs +48 -26
- package/dist/chat/errors.cjs.map +1 -1
- package/dist/chat/errors.d.cts +6 -31
- package/dist/chat/errors.d.ts +6 -31
- package/dist/chat/errors.js +48 -25
- package/dist/chat/errors.js.map +1 -1
- package/dist/chat/events.cjs.map +1 -1
- package/dist/chat/events.d.cts +6 -2
- package/dist/chat/events.d.ts +6 -2
- package/dist/chat/events.js.map +1 -1
- package/dist/chat/index.cjs +1612 -1125
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +35 -10
- package/dist/chat/index.d.ts +35 -10
- package/dist/chat/index.js +1600 -1097
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/react/theme.css +2517 -0
- package/dist/chat/react.cjs +2212 -1158
- package/dist/chat/react.cjs.map +1 -1
- package/dist/chat/react.d.cts +665 -122
- package/dist/chat/react.d.ts +665 -122
- package/dist/chat/react.js +2191 -1156
- package/dist/chat/react.js.map +1 -1
- package/dist/chat/runtime.cjs +405 -186
- package/dist/chat/runtime.cjs.map +1 -1
- package/dist/chat/runtime.d.cts +92 -28
- package/dist/chat/runtime.d.ts +92 -28
- package/dist/chat/runtime.js +405 -186
- package/dist/chat/runtime.js.map +1 -1
- package/dist/chat/server.cjs +2247 -212
- package/dist/chat/server.cjs.map +1 -1
- package/dist/chat/server.d.cts +451 -90
- package/dist/chat/server.d.ts +451 -90
- package/dist/chat/server.js +2234 -213
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/sessions.cjs +64 -66
- package/dist/chat/sessions.cjs.map +1 -1
- package/dist/chat/sessions.d.cts +37 -118
- package/dist/chat/sessions.d.ts +37 -118
- package/dist/chat/sessions.js +65 -67
- package/dist/chat/sessions.js.map +1 -1
- package/dist/chat/sqlite.cjs +536 -0
- package/dist/chat/sqlite.cjs.map +1 -0
- package/dist/chat/sqlite.d.cts +164 -0
- package/dist/chat/sqlite.d.ts +164 -0
- package/dist/chat/sqlite.js +527 -0
- package/dist/chat/sqlite.js.map +1 -0
- package/dist/chat/state.cjs +14 -1
- package/dist/chat/state.cjs.map +1 -1
- package/dist/chat/state.d.cts +5 -2
- package/dist/chat/state.d.ts +5 -2
- package/dist/chat/state.js +14 -1
- package/dist/chat/state.js.map +1 -1
- package/dist/chat/storage.cjs +58 -33
- package/dist/chat/storage.cjs.map +1 -1
- package/dist/chat/storage.d.cts +18 -8
- package/dist/chat/storage.d.ts +18 -8
- package/dist/chat/storage.js +59 -34
- package/dist/chat/storage.js.map +1 -1
- package/dist/errors-C-so0M4t.d.cts +33 -0
- package/dist/errors-C-so0M4t.d.ts +33 -0
- package/dist/errors-CmVvczxZ.d.cts +28 -0
- package/dist/errors-CmVvczxZ.d.ts +28 -0
- package/dist/{in-process-transport-C2oPTYs6.d.ts → in-process-transport-7EIit9Xk.d.ts} +72 -33
- package/dist/{in-process-transport-DG-w5G6k.d.cts → in-process-transport-Ct9YcX8I.d.cts} +72 -33
- package/dist/index.cjs +354 -60
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +294 -123
- package/dist/index.d.ts +294 -123
- package/dist/index.js +347 -60
- package/dist/index.js.map +1 -1
- package/dist/provider-types-PTSlRPNB.d.cts +39 -0
- package/dist/provider-types-PTSlRPNB.d.ts +39 -0
- package/dist/refresh-manager-B81PpYBr.d.cts +153 -0
- package/dist/refresh-manager-Dlv_iNZi.d.ts +153 -0
- package/dist/testing.cjs +1107 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.cts +144 -0
- package/dist/testing.d.ts +144 -0
- package/dist/testing.js +1101 -0
- package/dist/testing.js.map +1 -0
- package/dist/token-store-CSUBgYwn.d.ts +48 -0
- package/dist/token-store-CuC4hB9Z.d.cts +48 -0
- package/dist/{transport-DX1Nhm4N.d.cts → transport-DLWCN18G.d.cts} +5 -4
- package/dist/{transport-D1OaUgRk.d.ts → transport-DsuS-GeM.d.ts} +5 -4
- package/dist/{types-CGF7AEX1.d.cts → types-4vbcmPTp.d.cts} +4 -2
- package/dist/{types-Bh5AhqD-.d.ts → types-BxggH0Yh.d.ts} +4 -2
- package/dist/types-DgtI1hzh.d.ts +364 -0
- package/dist/types-DkSXALKg.d.cts +364 -0
- package/package.json +41 -5
- package/LICENSE +0 -21
- package/README.md +0 -948
- package/dist/errors-BDLbNu9w.d.cts +0 -13
- package/dist/errors-BDLbNu9w.d.ts +0 -13
- package/dist/types-DLZzlJxt.d.ts +0 -39
- package/dist/types-tE0CXwBl.d.cts +0 -39
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/errors.ts","../../src/errors.ts","../../src/base-agent.ts","../../src/backends/mock-llm.ts"],"names":[],"mappings":"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","file":"mock-llm.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 { ErrorCode } from \"./types/errors.js\";\n\n/** Options for constructing an AgentSDKError */\nexport interface AgentSDKErrorOptions extends ErrorOptions {\n /** Machine-readable error code */\n code?: string;\n /** Whether this error is retryable (default: false) */\n retryable?: boolean;\n /** HTTP status code hint (e.g. 401, 429, 500) */\n httpStatus?: number;\n}\n\n/** Base error class for agent-sdk.\n *\n * Use `AgentSDKError.is(err)` for reliable cross-module `instanceof` checks\n * (works across separately bundled entry points where `instanceof` may fail). */\nexport class AgentSDKError extends Error {\n /** @internal Marker for cross-bundle identity checks */\n readonly _agentSDKError = true as const;\n /** Machine-readable error code. Prefer values from the ErrorCode enum. */\n readonly code?: string;\n /** Whether this error is safe to retry */\n readonly retryable: boolean;\n /** HTTP status code hint for error classification */\n readonly httpStatus?: number;\n\n constructor(message: string, options?: AgentSDKErrorOptions) {\n super(message, options);\n this.name = \"AgentSDKError\";\n this.code = options?.code;\n this.retryable = options?.retryable ?? false;\n this.httpStatus = options?.httpStatus;\n }\n\n /** Check if an error is an AgentSDKError (works across bundled copies) */\n static is(error: unknown): error is AgentSDKError {\n return (\n error instanceof Error &&\n \"_agentSDKError\" in error &&\n (error as AgentSDKError)._agentSDKError === true\n );\n }\n}\n\n/** Thrown when agent.run() is called while already running (M8 re-entrancy guard) */\nexport class ReentrancyError extends AgentSDKError {\n constructor() {\n super(\"Agent is already running. Await the current run before starting another.\", {\n code: ErrorCode.REENTRANCY,\n });\n this.name = \"ReentrancyError\";\n }\n}\n\n/** Thrown when an operation is attempted on a disposed agent/service */\nexport class DisposedError extends AgentSDKError {\n constructor(entity: string) {\n super(`${entity} has been disposed and cannot be used.`, {\n code: ErrorCode.DISPOSED,\n });\n this.name = \"DisposedError\";\n }\n}\n\n/** Thrown when a backend is not found in the registry */\nexport class BackendNotFoundError extends AgentSDKError {\n constructor(backend: string) {\n super(\n `Unknown backend: \"${backend}\". ` +\n `Built-in: copilot, claude, vercel-ai. ` +\n `Custom: use registerBackend() first.`,\n { code: ErrorCode.BACKEND_NOT_INSTALLED },\n );\n this.name = \"BackendNotFoundError\";\n }\n}\n\n/** Thrown when a backend is already registered */\nexport class BackendAlreadyRegisteredError extends AgentSDKError {\n constructor(backend: string) {\n super(`Backend \"${backend}\" is already registered. Use a different name or unregister first.`);\n this.name = \"BackendAlreadyRegisteredError\";\n }\n}\n\n/** Thrown when subprocess management fails */\nexport class SubprocessError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, { ...options, code: ErrorCode.DEPENDENCY_MISSING });\n this.name = \"SubprocessError\";\n }\n}\n\n/** Thrown when a required peer dependency is not installed */\nexport class DependencyError extends AgentSDKError {\n public readonly packageName: string;\n\n constructor(packageName: string) {\n super(`${packageName} is not installed. Install it: npm install ${packageName}`, {\n code: ErrorCode.DEPENDENCY_MISSING,\n });\n this.name = \"DependencyError\";\n this.packageName = packageName;\n }\n}\n\n/** Thrown when an agent run is aborted */\nexport class AbortError extends AgentSDKError {\n constructor() {\n super(\"Agent run was aborted.\", { code: ErrorCode.ABORTED });\n this.name = \"AbortError\";\n }\n}\n\n/** Thrown when a tool execution fails */\nexport class ToolExecutionError extends AgentSDKError {\n public readonly toolName: string;\n\n constructor(toolName: string, message: string, options?: ErrorOptions) {\n super(`Tool \"${toolName}\" failed: ${message}`, { ...options, code: ErrorCode.TOOL_EXECUTION });\n this.name = \"ToolExecutionError\";\n this.toolName = toolName;\n }\n}\n\n/** Thrown when a stream has no activity within the configured timeout */\nexport class ActivityTimeoutError extends AgentSDKError {\n constructor(timeoutMs: number) {\n super(`Stream activity timeout: no event received within ${timeoutMs}ms.`, {\n code: ErrorCode.TIMEOUT,\n retryable: true,\n });\n this.name = \"ActivityTimeoutError\";\n }\n}\n\n/** Thrown when structured output parsing fails */\nexport class StructuredOutputError extends AgentSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(`Structured output error: ${message}`, { ...options, code: ErrorCode.INVALID_RESPONSE });\n this.name = \"StructuredOutputError\";\n }\n}\n","import type {\n IAgent,\n FullAgentConfig,\n AgentState,\n AgentResult,\n AgentEvent,\n MessageContent,\n Message,\n RunOptions,\n RetryConfig,\n StructuredOutputConfig,\n UsageData,\n ToolDefinition,\n StreamMiddleware,\n StreamContext,\n} from \"./types.js\";\nimport { ReentrancyError, DisposedError, AbortError, ActivityTimeoutError } from \"./errors.js\";\nimport { AgentSDKError } from \"./errors.js\";\nimport { isRecoverableErrorCode } from \"./types/errors.js\";\n\n/** Abstract base agent with shared lifecycle logic.\n * Concrete backends extend this and implement the protected _run/_stream methods. */\nexport abstract class BaseAgent implements IAgent {\n protected state: AgentState = \"idle\";\n protected abortController: AbortController | null = null;\n protected readonly config: FullAgentConfig;\n private _cleanupExternalSignal: (() => void) | null = null;\n private _streamMiddleware: StreamMiddleware[] = [];\n\n /** Backend identifier (e.g. \"copilot\", \"claude\", \"vercel-ai\") */\n protected abstract readonly backendName: string;\n\n /** CLI session ID for persistent mode. Override in backends that support it. */\n get sessionId(): string | undefined {\n return undefined;\n }\n\n constructor(config: FullAgentConfig) {\n this.config = Object.freeze({ ...config });\n }\n\n // ─── Public Interface ─────────────────────────────────────────\n\n async run(\n prompt: MessageContent,\n options: RunOptions,\n ): Promise<AgentResult> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n const result = await this.withRetry(\n () => this.executeRun(messages, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async runWithContext(\n messages: Message[],\n options: RunOptions,\n ): Promise<AgentResult> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const result = await this.withRetry(\n () => this.executeRun(messages, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async runStructured<T>(\n prompt: MessageContent,\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n ): Promise<AgentResult<T>> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"running\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n const result = await this.withRetry(\n () => this.executeRunStructured(messages, schema, options, ac.signal), options,\n );\n this.enrichAndNotifyUsage(result, options);\n return result;\n } finally {\n this.cleanupRun();\n }\n }\n\n async *stream(\n prompt: MessageContent,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"streaming\";\n\n try {\n const messages: Message[] = [{ role: \"user\", content: prompt }];\n yield* this.streamWithRetry(\n () => this.applyStreamPipeline(this.executeStream(messages, options, ac.signal), options, ac),\n options,\n );\n } finally {\n this.cleanupRun();\n }\n }\n\n async *streamWithContext(\n messages: Message[],\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n this.guardReentrancy();\n this.guardDisposed();\n\n const ac = this.createAbortController(options?.signal);\n this.state = \"streaming\";\n\n try {\n yield* this.streamWithRetry(\n () => this.applyStreamPipeline(this.executeStream(messages, options, ac.signal), options, ac),\n options,\n );\n } finally {\n this.cleanupRun();\n }\n }\n\n /** Register a stream middleware. Applied in registration order after built-in transforms. */\n addStreamMiddleware(middleware: StreamMiddleware): void {\n this.guardDisposed();\n this._streamMiddleware.push(middleware);\n }\n\n /** Apply built-in transforms (enrich→timeout→heartbeat) then custom middleware */\n private async *applyStreamPipeline(\n source: AsyncIterable<AgentEvent>,\n options: RunOptions,\n ac: AbortController,\n ): AsyncIterable<AgentEvent> {\n // Built-in pipeline\n let stream: AsyncIterable<AgentEvent> = this.enrichStream(source, options);\n stream = this.activityTimeoutStream(stream, options?.activityTimeoutMs, ac);\n stream = this.heartbeatStream(stream);\n\n // Custom middleware\n if (this._streamMiddleware.length > 0) {\n const ctx: StreamContext = {\n model: options.model,\n backend: this.backendName,\n abortController: ac,\n config: Object.freeze({ ...this.config }),\n };\n for (const mw of this._streamMiddleware) {\n stream = mw(stream, ctx);\n }\n }\n\n yield* stream;\n }\n\n abort(): void {\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n\n /** Default interrupt — falls back to abort(). Backends may override with graceful shutdown. */\n async interrupt(): Promise<void> {\n this.abort();\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getConfig(): Readonly<FullAgentConfig> {\n return this.config;\n }\n\n /** Mark agent as disposed. Override to add cleanup. */\n dispose(): void {\n this._cleanupExternalSignal?.();\n this._cleanupExternalSignal = null;\n this.abort();\n this.state = \"disposed\";\n }\n\n // ─── Abstract Methods (implemented by backends) ───────────────\n\n /** Execute a blocking run. Backend implements the actual LLM call. */\n protected abstract executeRun(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult>;\n\n /** Execute a structured output run. Backend implements parsing. */\n protected abstract executeRunStructured<T>(\n messages: Message[],\n schema: StructuredOutputConfig<T>,\n options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult<T>>;\n\n /** Execute a streaming run. Backend yields events. */\n protected abstract executeStream(\n messages: Message[],\n options: RunOptions,\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent>;\n\n // ─── Retry Logic ─────────────────────────────────────────────\n\n /** Check if an error should be retried given the retry configuration. */\n private isRetryableError(error: unknown, retry: RetryConfig): boolean {\n // Abort and reentrancy errors are never retryable\n if (error instanceof AbortError || error instanceof ReentrancyError || error instanceof DisposedError) {\n return false;\n }\n if (AgentSDKError.is(error)) {\n // If specific retryable error codes configured, check against them\n if (retry.retryableErrors && retry.retryableErrors.length > 0 && error.code) {\n return retry.retryableErrors.includes(error.code as typeof retry.retryableErrors[number]);\n }\n // Otherwise check the retryable flag or recoverable code\n if (error.retryable) return true;\n if (error.code) return isRecoverableErrorCode(error.code as Parameters<typeof isRecoverableErrorCode>[0]);\n }\n return false;\n }\n\n /** Execute a function with retry logic per RetryConfig. */\n private async withRetry<T>(\n fn: () => Promise<T>,\n options: RunOptions,\n ): Promise<T> {\n const retry = options?.retry;\n if (!retry || !retry.maxRetries || retry.maxRetries <= 0) {\n return fn();\n }\n\n const maxRetries = retry.maxRetries;\n const initialDelay = retry.initialDelayMs ?? 1000;\n const multiplier = retry.backoffMultiplier ?? 2;\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n if (attempt >= maxRetries || !this.isRetryableError(err, retry)) {\n throw err;\n }\n // Exponential backoff\n const delay = initialDelay * Math.pow(multiplier, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n // Check abort between retries\n if (options?.signal?.aborted || this.abortController?.signal.aborted) {\n throw err;\n }\n }\n }\n throw lastError;\n }\n\n /** Execute a stream factory with pre-stream retry: retries until first event, then committed. */\n private async *streamWithRetry(\n factory: () => AsyncIterable<AgentEvent>,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n const retry = options?.retry;\n if (!retry || !retry.maxRetries || retry.maxRetries <= 0) {\n yield* factory();\n return;\n }\n\n const maxRetries = retry.maxRetries;\n const initialDelay = retry.initialDelayMs ?? 1000;\n const multiplier = retry.backoffMultiplier ?? 2;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const stream = factory();\n const iterator = stream[Symbol.asyncIterator]();\n // Try to get first event — this is the \"pre-stream\" phase\n const first = await iterator.next();\n if (first.done) return;\n // First event received — stream committed, no more retries\n yield first.value;\n // Yield remaining events\n while (true) {\n const next = await iterator.next();\n if (next.done) break;\n yield next.value;\n }\n return;\n } catch (err) {\n if (attempt >= maxRetries || !this.isRetryableError(err, retry)) {\n throw err;\n }\n const delay = initialDelay * Math.pow(multiplier, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n if (options?.signal?.aborted || this.abortController?.signal.aborted) {\n throw err;\n }\n }\n }\n }\n\n // ─── CallOptions Resolution ──────────────────────────────────\n\n /** Resolve tools to use for this call (per-call override > config default) */\n protected resolveTools(options?: RunOptions): ToolDefinition[] {\n return options?.tools ?? this.config.tools ?? [];\n }\n\n // ─── Usage Enrichment ───────────────────────────────────────────\n\n /** Enrich result usage with model/backend and fire onUsage callback */\n private enrichAndNotifyUsage(result: AgentResult<unknown>, options: RunOptions): void {\n if (result.usage) {\n result.usage = {\n ...result.usage,\n model: options.model,\n backend: this.backendName,\n };\n this.callOnUsage(result.usage);\n }\n }\n\n /** Wrap a stream to enrich usage_update events and fire onUsage callback */\n private async *enrichStream(\n source: AsyncIterable<AgentEvent>,\n options: RunOptions,\n ): AsyncIterable<AgentEvent> {\n const model = options.model;\n for await (const event of source) {\n if (event.type === \"usage_update\") {\n const usage: UsageData = {\n promptTokens: event.promptTokens,\n completionTokens: event.completionTokens,\n model,\n backend: this.backendName,\n };\n this.callOnUsage(usage);\n yield { type: \"usage_update\", ...usage };\n } else {\n yield event;\n }\n }\n }\n\n /** Fire onUsage callback (fire-and-forget: errors logged, not propagated) */\n private callOnUsage(usage: UsageData): void {\n if (!this.config.onUsage) return;\n try {\n this.config.onUsage(usage);\n } catch (e) {\n console.warn(\n \"[agent-sdk] onUsage callback error:\",\n e instanceof Error ? e.message : String(e),\n );\n }\n }\n\n // ─── Heartbeat ───────────────────────────────────────────────\n\n /** Wrap a stream to emit heartbeat events at configured intervals.\n * When heartbeatInterval is not set, passes through directly. */\n private async *heartbeatStream(\n source: AsyncIterable<AgentEvent>,\n ): AsyncIterable<AgentEvent> {\n const interval = this.config.heartbeatInterval;\n if (!interval || interval <= 0) {\n yield* source;\n return;\n }\n\n const iterator = source[Symbol.asyncIterator]();\n let pendingEvent: Promise<IteratorResult<AgentEvent>> | null = null;\n let heartbeatResolve: (() => void) | null = null;\n\n const timer = setInterval(() => {\n if (heartbeatResolve) {\n const resolve = heartbeatResolve;\n heartbeatResolve = null;\n resolve();\n }\n }, interval);\n\n try {\n while (true) {\n if (!pendingEvent) {\n pendingEvent = iterator.next();\n }\n\n const heartbeatPromise = new Promise<void>((resolve) => {\n heartbeatResolve = resolve;\n });\n\n const eventDone = pendingEvent.then(\n (r) => ({ kind: \"event\" as const, result: r }),\n );\n const heartbeatDone = heartbeatPromise.then(\n () => ({ kind: \"heartbeat\" as const }),\n );\n\n const winner = await Promise.race([eventDone, heartbeatDone]);\n\n if (winner.kind === \"heartbeat\") {\n yield { type: \"heartbeat\" };\n } else {\n pendingEvent = null;\n heartbeatResolve = null;\n if (winner.result.done) break;\n yield winner.result.value;\n }\n }\n } finally {\n clearInterval(timer);\n heartbeatResolve = null;\n }\n }\n\n // ─── Activity Timeout ────────────────────────────────────────\n\n /** Wrap a stream to abort on inactivity. Resets timer on every event.\n * When timeoutMs is not set, passes through directly. */\n private async *activityTimeoutStream(\n source: AsyncIterable<AgentEvent>,\n timeoutMs: number | undefined,\n ac: AbortController,\n ): AsyncIterable<AgentEvent> {\n if (!timeoutMs || timeoutMs <= 0) {\n yield* source;\n return;\n }\n\n const iterator = source[Symbol.asyncIterator]();\n let timerId: ReturnType<typeof setTimeout> | undefined;\n try {\n while (true) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n timerId = setTimeout(() => reject(new ActivityTimeoutError(timeoutMs)), timeoutMs);\n });\n const result = await Promise.race([iterator.next(), timeoutPromise]);\n clearTimeout(timerId);\n if (result.done) break;\n yield result.value;\n }\n } catch (err) {\n if (err instanceof ActivityTimeoutError) {\n ac.abort(err);\n }\n throw err;\n } finally {\n clearTimeout(timerId);\n }\n }\n\n // ─── Guards ───────────────────────────────────────────────────\n\n protected guardReentrancy(): void {\n if (this.state === \"running\" || this.state === \"streaming\") {\n throw new ReentrancyError();\n }\n }\n\n protected guardDisposed(): void {\n if (this.state === \"disposed\") {\n throw new DisposedError(\"Agent\");\n }\n }\n\n /** Throw AbortError if signal is already aborted */\n protected checkAbort(signal: AbortSignal): void {\n if (signal.aborted) {\n throw new AbortError();\n }\n }\n\n // ─── Internal Helpers ─────────────────────────────────────────\n\n /** Clean up after a run completes (success, error, or abort). */\n private cleanupRun(): void {\n this._cleanupExternalSignal?.();\n this._cleanupExternalSignal = null;\n this.state = \"idle\";\n this.abortController = null;\n }\n\n private createAbortController(externalSignal?: AbortSignal): AbortController {\n const ac = new AbortController();\n this.abortController = ac;\n this._cleanupExternalSignal = null;\n\n if (externalSignal) {\n if (externalSignal.aborted) {\n ac.abort();\n } else {\n const listener = () => ac.abort();\n externalSignal.addEventListener(\"abort\", listener, { once: true });\n this._cleanupExternalSignal = () => externalSignal.removeEventListener(\"abort\", listener);\n }\n }\n\n return ac;\n }\n}\n","/**\n * Mock LLM backend — a fully functional backend for automated testing.\n *\n * Implements IAgentService using BaseAgent, providing configurable response\n * modes (echo, static, scripted, error) with full streaming support.\n * Unlike the lightweight testing mock (createMockAgentService), this backend\n * participates in the full BaseAgent lifecycle: retry, heartbeat, activity\n * timeout, middleware pipeline, and usage enrichment.\n *\n * Advanced capabilities:\n * - Latency simulation (fixed or random delay)\n * - Streaming chunk control (chunk size, inter-chunk delay)\n * - Configurable finishReason in done events\n * - Permission simulation (auto-approve, deny, or delegate to supervisor)\n */\nimport { BaseAgent } from \"../base-agent.js\";\nimport { AgentSDKError } from \"../errors.js\";\nimport type {\n IAgentService,\n IAgent,\n FullAgentConfig,\n ModelInfo,\n ValidationResult,\n AgentResult,\n AgentEvent,\n Message,\n RunOptions,\n StructuredOutputConfig,\n MockLLMBackendOptions,\n MockLLMResponseMode,\n MockLLMLatency,\n MockLLMStreamingOptions,\n MockLLMPermissionOptions,\n MockLLMToolCall,\n JSONValue,\n} from \"../types.js\";\n\n// ─── Helpers ────────────────────────────────────────────────────\n\n/** Extract the user's prompt text from the last message */\nfunction extractPrompt(messages: Message[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === \"user\") {\n return typeof msg.content === \"string\"\n ? msg.content\n : msg.content\n .filter((p) => p.type === \"text\")\n .map((p) => (p as { type: \"text\"; text: string }).text)\n .join(\"\");\n }\n }\n return \"\";\n}\n\n/** Resolve the response text for the given mode and call index */\nfunction resolveResponse(\n mode: MockLLMResponseMode,\n messages: Message[],\n callIndex: number,\n): string {\n switch (mode.type) {\n case \"echo\":\n return extractPrompt(messages);\n case \"static\":\n return mode.response;\n case \"scripted\": {\n if (mode.loop) {\n return mode.responses[callIndex % mode.responses.length];\n }\n if (callIndex < mode.responses.length) {\n return mode.responses[callIndex];\n }\n return mode.responses[mode.responses.length - 1];\n }\n case \"error\":\n throw new AgentSDKError(mode.error, {\n code: mode.code ?? \"backend_error\",\n retryable: mode.recoverable ?? false,\n });\n }\n}\n\n/** Apply latency delay if configured */\nasync function applyLatency(\n latency: MockLLMLatency | undefined,\n signal: AbortSignal,\n): Promise<void> {\n if (!latency) return;\n const ms =\n latency.type === \"fixed\"\n ? latency.ms\n : latency.minMs + Math.random() * (latency.maxMs - latency.minMs);\n if (ms <= 0) return;\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n };\n if (signal.aborted) {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/** Split text into chunks based on streaming options */\nfunction chunkText(\n text: string,\n streaming: MockLLMStreamingOptions | undefined,\n): string[] {\n if (streaming?.chunkSize && streaming.chunkSize > 0) {\n const chunks: string[] = [];\n for (let i = 0; i < text.length; i += streaming.chunkSize) {\n chunks.push(text.slice(i, i + streaming.chunkSize));\n }\n return chunks;\n }\n // Default: word-boundary splitting\n return text.split(/(\\s+)/).filter(Boolean);\n}\n\n/** Delay between stream chunks if configured */\nasync function chunkDelay(\n streaming: MockLLMStreamingOptions | undefined,\n signal: AbortSignal,\n): Promise<void> {\n const ms = streaming?.chunkDelayMs;\n if (!ms || ms <= 0) return;\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n };\n if (signal.aborted) {\n clearTimeout(timer);\n reject(new Error(\"aborted\"));\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n// ─── MockLLMAgent ──────────────────────────────────────────────\n\nclass MockLLMAgent extends BaseAgent {\n protected readonly backendName = \"mock-llm\";\n private readonly mode: MockLLMResponseMode;\n private readonly latency: MockLLMLatency | undefined;\n private readonly streaming: MockLLMStreamingOptions | undefined;\n private readonly finishReason: string;\n private readonly permissions: MockLLMPermissionOptions | undefined;\n private readonly toolCallConfigs: MockLLMToolCall[];\n private readonly configuredStructuredOutput: unknown;\n private callIndex = 0;\n\n constructor(config: FullAgentConfig, options: MockLLMBackendOptions) {\n super(config);\n this.mode = options.mode ?? { type: \"echo\" };\n this.latency = options.latency;\n this.streaming = options.streaming;\n this.finishReason = options.finishReason ?? \"stop\";\n this.permissions = options.permissions;\n this.toolCallConfigs = options.toolCalls ?? [];\n this.configuredStructuredOutput = options.structuredOutput;\n }\n\n protected async executeRun(\n messages: Message[],\n _options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult> {\n this.checkAbort(signal);\n await applyLatency(this.latency, signal);\n this.checkAbort(signal);\n\n const idx = this.callIndex++;\n const output = resolveResponse(this.mode, messages, idx);\n const toolCalls = this.toolCallConfigs.map((tc) => ({\n toolName: tc.toolName,\n args: (tc.args ?? {}) as JSONValue,\n result: (tc.result ?? null) as JSONValue,\n approved: true,\n }));\n\n return {\n output,\n structuredOutput: undefined,\n toolCalls,\n messages: [\n ...messages,\n { role: \"assistant\" as const, content: output },\n ],\n usage: { promptTokens: 10, completionTokens: output.length },\n };\n }\n\n protected async executeRunStructured<T>(\n messages: Message[],\n _schema: StructuredOutputConfig<T>,\n _options: RunOptions,\n signal: AbortSignal,\n ): Promise<AgentResult<T>> {\n this.checkAbort(signal);\n await applyLatency(this.latency, signal);\n this.checkAbort(signal);\n\n const idx = this.callIndex++;\n const output = resolveResponse(this.mode, messages, idx);\n\n let parsed: T;\n if (this.configuredStructuredOutput !== undefined) {\n parsed = this.configuredStructuredOutput as T;\n } else {\n try {\n parsed = JSON.parse(output) as T;\n } catch {\n parsed = output as unknown as T;\n }\n }\n\n return {\n output,\n structuredOutput: parsed as T extends void ? undefined : T,\n toolCalls: [],\n messages: [\n ...messages,\n { role: \"assistant\" as const, content: output },\n ],\n usage: { promptTokens: 10, completionTokens: output.length },\n };\n }\n\n protected async *executeStream(\n messages: Message[],\n _options: RunOptions,\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent> {\n this.checkAbort(signal);\n await applyLatency(this.latency, signal);\n this.checkAbort(signal);\n\n // Permission simulation — emit before generating response\n if (this.permissions) {\n yield* this.simulatePermissions(signal);\n }\n\n // Tool call simulation — emit tool_call_start/end pairs\n if (this.toolCallConfigs.length > 0) {\n yield* this.simulateToolCalls(signal);\n }\n\n const idx = this.callIndex++;\n const output = resolveResponse(this.mode, messages, idx);\n\n const chunks = chunkText(output, this.streaming);\n for (let i = 0; i < chunks.length; i++) {\n this.checkAbort(signal);\n if (i > 0) {\n await chunkDelay(this.streaming, signal);\n }\n yield { type: \"text_delta\", text: chunks[i] };\n }\n\n yield {\n type: \"usage_update\",\n promptTokens: 10,\n completionTokens: output.length,\n };\n\n yield {\n type: \"done\",\n finalOutput: output,\n finishReason: this.finishReason,\n };\n }\n\n private async *simulateToolCalls(\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent> {\n for (let i = 0; i < this.toolCallConfigs.length; i++) {\n this.checkAbort(signal);\n const tc = this.toolCallConfigs[i];\n const toolCallId = tc.toolCallId ?? `mock-tc-${i}`;\n\n yield {\n type: \"tool_call_start\",\n toolCallId,\n toolName: tc.toolName,\n args: (tc.args ?? {}) as JSONValue,\n };\n\n yield {\n type: \"tool_call_end\",\n toolCallId,\n toolName: tc.toolName,\n result: (tc.result ?? null) as JSONValue,\n };\n }\n }\n\n private async *simulatePermissions(\n signal: AbortSignal,\n ): AsyncIterable<AgentEvent> {\n const perms = this.permissions!;\n for (const toolName of perms.toolNames) {\n this.checkAbort(signal);\n\n const request = {\n toolName,\n toolArgs: {},\n };\n\n yield { type: \"permission_request\", request };\n\n // Determine decision\n if (perms.denyTools?.includes(toolName)) {\n yield {\n type: \"permission_response\",\n toolName,\n decision: { allowed: false, reason: \"Denied by mock configuration\" },\n };\n } else if (perms.autoApprove) {\n yield {\n type: \"permission_response\",\n toolName,\n decision: { allowed: true, scope: \"once\" as const },\n };\n } else {\n // Delegate to supervisor callback if available\n const supervisor = this.getConfig().supervisor;\n if (supervisor?.onPermission) {\n const decision = await supervisor.onPermission(request, signal);\n yield { type: \"permission_response\", toolName, decision };\n } else {\n // No supervisor — auto-approve (headless mode)\n yield {\n type: \"permission_response\",\n toolName,\n decision: { allowed: true, scope: \"once\" as const },\n };\n }\n }\n }\n }\n}\n\n// ─── MockLLMService ─────────────────────────────────────────────\n\nclass MockLLMService implements IAgentService {\n readonly name = \"mock-llm\";\n private readonly options: MockLLMBackendOptions;\n private readonly models: ModelInfo[];\n\n constructor(options: MockLLMBackendOptions = {}) {\n this.options = options;\n this.models = (options.models ?? [\n { id: \"mock-fast\", name: \"Mock Fast\" },\n { id: \"mock-quality\", name: \"Mock Quality\" },\n ]).map((m) => ({\n id: m.id,\n name: m.name,\n description: m.description,\n }));\n }\n\n createAgent(config: FullAgentConfig): IAgent {\n return new MockLLMAgent(config, this.options);\n }\n\n async listModels(): Promise<ModelInfo[]> {\n return this.models;\n }\n\n async validate(): Promise<ValidationResult> {\n return { valid: true, errors: [] };\n }\n\n async dispose(): Promise<void> {\n // no-op — mock has no resources to release\n }\n}\n\n// ─── Public API ─────────────────────────────────────────────────\n\n/** Create a mock LLM backend service for automated testing.\n *\n * Unlike the lightweight `createMockAgentService` (from `@witqq/agent-sdk/testing`),\n * this backend extends `BaseAgent` and participates in the full agent lifecycle:\n * retry, heartbeat, activity timeout, middleware pipeline, and usage enrichment.\n *\n * @example\n * ```ts\n * import { createMockLLMService } from \"@witqq/agent-sdk/mock-llm\";\n *\n * // Basic echo mode\n * const service = createMockLLMService({ mode: { type: \"echo\" } });\n *\n * // With latency simulation and streaming control\n * const realisticService = createMockLLMService({\n * mode: { type: \"static\", response: \"Hello!\" },\n * latency: { type: \"fixed\", ms: 100 },\n * streaming: { chunkSize: 5, chunkDelayMs: 10 },\n * finishReason: \"stop\",\n * });\n *\n * // With permission simulation\n * const permService = createMockLLMService({\n * mode: { type: \"echo\" },\n * permissions: { toolNames: [\"bash\", \"file_write\"], autoApprove: true },\n * });\n * ```\n */\nexport function createMockLLMService(\n options: MockLLMBackendOptions = {},\n): IAgentService {\n return new MockLLMService(options);\n}\n\nexport type {\n MockLLMBackendOptions,\n MockLLMResponseMode,\n MockLLMLatency,\n MockLLMStreamingOptions,\n MockLLMPermissionOptions,\n MockLLMToolCall,\n};\n"]}
|