@witqq/agent-sdk 0.7.0 → 0.8.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/README.md +140 -34
- package/dist/{types-CqvUAYxt.d.cts → agent-CW9XbmG_.d.ts} +137 -102
- package/dist/{types-CqvUAYxt.d.ts → agent-DxY68NZL.d.cts} +137 -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 +329 -97
- 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 +329 -97
- package/dist/backends/copilot.js.map +1 -1
- package/dist/backends/vercel-ai.cjs +294 -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 +294 -61
- package/dist/backends/vercel-ai.js.map +1 -1
- package/dist/backends-BSrsBYFn.d.cts +39 -0
- package/dist/backends-BSrsBYFn.d.ts +39 -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 +736 -746
- 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 +736 -725
- 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 +25 -2
- package/dist/chat/core.cjs.map +1 -1
- package/dist/chat/core.d.cts +30 -381
- package/dist/chat/core.d.ts +30 -381
- package/dist/chat/core.js +24 -3
- 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 +1199 -1008
- 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 +1196 -987
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/react/theme.css +2517 -0
- package/dist/chat/react.cjs +2003 -1153
- package/dist/chat/react.cjs.map +1 -1
- package/dist/chat/react.d.cts +590 -121
- package/dist/chat/react.d.ts +590 -121
- package/dist/chat/react.js +1984 -1151
- package/dist/chat/react.js.map +1 -1
- package/dist/chat/runtime.cjs +401 -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 +401 -186
- package/dist/chat/runtime.js.map +1 -1
- package/dist/chat/server.cjs +2234 -209
- 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 +2221 -210
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/sessions.cjs +25 -43
- 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 +25 -43
- package/dist/chat/sessions.js.map +1 -1
- package/dist/chat/sqlite.cjs +441 -0
- package/dist/chat/sqlite.cjs.map +1 -0
- package/dist/chat/sqlite.d.cts +128 -0
- package/dist/chat/sqlite.d.ts +128 -0
- package/dist/chat/sqlite.js +435 -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 +19 -10
- package/dist/chat/storage.cjs.map +1 -1
- package/dist/chat/storage.d.cts +11 -5
- package/dist/chat/storage.d.ts +11 -5
- package/dist/chat/storage.js +19 -10
- 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-C1JnJGVR.d.ts} +28 -23
- package/dist/{in-process-transport-DG-w5G6k.d.cts → in-process-transport-C7DSqPyX.d.cts} +28 -23
- package/dist/index.cjs +340 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +292 -123
- package/dist/index.d.ts +292 -123
- package/dist/index.js +334 -47
- 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 +383 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.cts +132 -0
- package/dist/testing.d.ts +132 -0
- package/dist/testing.js +377 -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-Cdh3M0tS.d.cts} +5 -4
- package/dist/{transport-D1OaUgRk.d.ts → transport-Ciap4PWK.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-DRgd_9R7.d.cts +363 -0
- package/dist/types-ajANVzf7.d.ts +363 -0
- package/package.json +31 -6
- 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/testing/mock-agent-service.ts","../src/chat/types.ts","../src/testing/mock-data.ts","../src/testing/mock-runtime.ts","../src/testing/mock-chat-client.ts"],"names":[],"mappings":"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","file":"testing.js","sourcesContent":["/**\n * Mock IAgentService factory for testing.\n */\nimport type {\n IAgentService,\n IAgent,\n FullAgentConfig,\n ModelInfo,\n ValidationResult,\n AgentResult,\n AgentEvent,\n Message,\n MessageContent,\n RunOptions,\n StructuredOutputConfig,\n AgentState,\n} from \"../types.js\";\n\n/** Options for createMockAgentService. */\nexport interface MockAgentServiceOptions {\n /** Service name. Default: \"mock\". */\n name?: string;\n /** Models to return from listModels(). */\n models?: ModelInfo[];\n /** Custom validation result. Default: { valid: true, errors: [] }. */\n validationResult?: ValidationResult;\n /** Custom run handler. Default: returns \"Mock response\". */\n onRun?: (prompt: MessageContent, options?: RunOptions) => Promise<AgentResult>;\n /** Custom stream handler. Default: yields text_delta + result events. */\n onStream?: (prompt: MessageContent, options?: RunOptions) => AsyncIterable<AgentEvent>;\n}\n\nclass MockAgent implements IAgent {\n readonly sessionId: string | undefined = undefined;\n private _state: AgentState = \"idle\";\n private readonly _config: FullAgentConfig;\n private readonly _onRun?: MockAgentServiceOptions[\"onRun\"];\n private readonly _onStream?: MockAgentServiceOptions[\"onStream\"];\n\n constructor(config: FullAgentConfig, options?: MockAgentServiceOptions) {\n this._config = config;\n this._onRun = options?.onRun;\n this._onStream = options?.onStream;\n }\n\n async run(prompt: MessageContent, options: RunOptions): Promise<AgentResult> {\n if (this._onRun) return this._onRun(prompt, options);\n return { output: \"Mock response\", structuredOutput: undefined, toolCalls: [], messages: [], usage: { promptTokens: 10, completionTokens: 5 } };\n }\n\n async runWithContext(messages: Message[], options: RunOptions): Promise<AgentResult> {\n const lastMsg = messages[messages.length - 1];\n const text = typeof lastMsg?.content === \"string\" ? lastMsg.content : \"context\";\n return this.run(text, options);\n }\n\n async runStructured<T>(\n prompt: MessageContent,\n _schema: StructuredOutputConfig<T>,\n options: RunOptions,\n ): Promise<AgentResult<T>> {\n const base = await this.run(prompt, options);\n return { ...base, structuredOutput: undefined as unknown as T extends void ? undefined : T };\n }\n\n async *stream(prompt: MessageContent, options: RunOptions): AsyncIterable<AgentEvent> {\n if (this._onStream) {\n yield* this._onStream(prompt, options);\n return;\n }\n yield { type: \"text_delta\", text: \"Mock \" };\n yield { type: \"text_delta\", text: \"response\" };\n yield { type: \"done\", finalOutput: \"Mock response\" };\n }\n\n async *streamWithContext(messages: Message[], options: RunOptions): AsyncIterable<AgentEvent> {\n const lastMsg = messages[messages.length - 1];\n const text = typeof lastMsg?.content === \"string\" ? lastMsg.content : \"context\";\n yield* this.stream(text, options);\n }\n\n abort(): void {\n this._state = \"idle\";\n }\n\n async interrupt(): Promise<void> {\n this._state = \"idle\";\n }\n\n getState(): AgentState {\n return this._state;\n }\n\n getConfig(): Readonly<FullAgentConfig> {\n return this._config;\n }\n\n dispose(): void {\n this._state = \"disposed\";\n }\n}\n\n/**\n * Create a mock IAgentService for testing agent-level code.\n *\n * ```ts\n * const service = createMockAgentService({ name: \"test\" });\n * const agent = service.createAgent({ model: \"gpt-5-mini\" });\n * const result = await agent.run(\"Hello\");\n * ```\n */\nexport function createMockAgentService(options: MockAgentServiceOptions = {}): IAgentService {\n const name = options.name ?? \"mock\";\n return {\n name,\n createAgent(config: FullAgentConfig): IAgent {\n return new MockAgent(config, options);\n },\n async listModels(): Promise<ModelInfo[]> {\n return options.models ?? [\n { id: \"mock-model-1\", name: \"Mock Model 1\" },\n { id: \"mock-model-2\", name: \"Mock Model 2\" },\n ];\n },\n async validate(): Promise<ValidationResult> {\n return options.validationResult ?? { valid: true, errors: [] };\n },\n async dispose(): Promise<void> {\n // no-op\n },\n };\n}\n","/**\n * @witqq/agent-sdk — Chat domain types\n *\n * All type definitions and interfaces for the chat layer.\n * Pure types + ChatId generation (tightly coupled to branded type).\n */\n\nimport type { UsageData, ToolDefinition, ErrorCode } from \"../types.js\";\nimport type { AuthToken } from \"../auth/types.js\";\n\n// ─── Unique ID ─────────────────────────────────────────────────\n\n/** Branded type for unique identifiers */\nexport type ChatId = string & { readonly __brand: \"ChatId\" };\n\n/**\n * Generate a new unique ChatId (crypto.randomUUID-based)\n * @returns Branded ChatId string\n */\nexport function createChatId(): ChatId {\n return crypto.randomUUID() as ChatId;\n}\n\n/** UUID v4 pattern for ChatId validation */\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/**\n * Cast a string to ChatId with UUID format validation.\n * Use this instead of manual `as ChatId` type assertions.\n *\n * @param value - String to validate and cast\n * @returns Branded ChatId\n * @throws {TypeError} If value is not a valid UUID v4 format\n */\nexport function toChatId(value: string): ChatId {\n if (!UUID_RE.test(value)) {\n throw new TypeError(`Invalid ChatId: \"${value}\" is not a valid UUID`);\n }\n return value as ChatId;\n}\n\n/**\n * Accepts either a plain string or branded ChatId for API convenience.\n * Use this in public API signatures so consumers don't need `as ChatId` casts.\n */\nexport type ChatIdLike = string | ChatId;\n\n// ─── Status Types ──────────────────────────────────────────────\n\n/** Lifecycle status of a message part (text, reasoning, etc.) */\nexport type PartStatus = \"pending\" | \"streaming\" | \"complete\" | \"error\";\n/** Lifecycle status of a tool call within a message */\nexport type ToolCallStatus = \"pending\" | \"running\" | \"requires_approval\" | \"complete\" | \"error\" | \"denied\";\n/** Lifecycle status of an entire message */\nexport type MessageStatus = \"pending\" | \"streaming\" | \"complete\" | \"error\" | \"cancelled\";\n/** Lifecycle status of a chat session */\nexport type SessionStatus = \"active\";\n/** Lifecycle status of the chat runtime */\nexport type RuntimeStatus = \"idle\" | \"streaming\" | \"error\" | \"disposed\";\n\n// ─── Message Parts (union) ─────────────────────────────────────\n\n/** Plain text content part */\nexport interface TextPart { type: \"text\"; text: string; status: PartStatus; }\n/** Model reasoning/thinking content part */\nexport interface ReasoningPart { type: \"reasoning\"; text: string; status: PartStatus; }\n/** Tool invocation part with call ID, arguments, optional result */\nexport interface ToolCallPart { type: \"tool_call\"; toolCallId: string; name: string; args: unknown; result?: unknown; status: ToolCallStatus; error?: string; }\n/** Source reference part (URL citation) */\nexport interface SourcePart { type: \"source\"; url: string; title?: string; status: PartStatus; }\n/** File attachment part (base64-encoded data) */\nexport interface FilePart { type: \"file\"; name: string; mimeType: string; data: string; status: PartStatus; }\n/** Union of all message part types */\nexport type MessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart;\n\n// ─── Chat Message ──────────────────────────────────────────────\n\n/** Role of message author */\nexport type ChatRole = \"user\" | \"assistant\" | \"system\";\n\n/** Metadata attached to messages — useful preset for the TMetadata generic */\nexport interface ChatMessageMetadata {\n model?: string;\n backend?: string;\n usage?: UsageData;\n isSummary?: boolean;\n estimatedTokens?: number;\n custom?: Record<string, unknown>;\n}\n\n/** Message status */\nexport type ChatMessageStatus = MessageStatus;\n\n/** A single chat message — the fundamental unit of conversation */\nexport interface ChatMessage<TMetadata = unknown> {\n id: ChatId;\n role: ChatRole;\n parts: MessagePart[];\n metadata?: TMetadata;\n createdAt: string;\n updatedAt?: string;\n status: MessageStatus;\n}\n\n// ─── Supporting Types ──────────────────────────────────────────\n\n// ─── Chat Session ──────────────────────────────────────────────\n\n/** Session configuration snapshot */\nexport interface ChatSessionConfig {\n model: string;\n backend: string;\n systemPrompt?: string;\n temperature?: number;\n maxTokens?: number;\n}\n\n/**\n * Session metadata tracking usage statistics and custom extensions.\n *\n * Updated automatically by session stores on each `addMessage()` call.\n * The generic `TCustom` parameter allows type-safe application-specific\n * metadata via the `custom` field.\n *\n * @typeParam TCustom - Shape of the `custom` field (defaults to `Record<string, unknown>`)\n */\nexport interface ChatSessionMetadata<TCustom extends Record<string, unknown> = Record<string, unknown>> {\n /** Number of messages in the session (updated by session store) */\n messageCount: number;\n /** Total token count across all messages in the session */\n totalTokens: number;\n /** Optional tags for session categorization and filtering */\n tags?: string[];\n /** Application-specific metadata — typed via the TCustom generic parameter */\n custom?: TCustom;\n}\n\n/** Chat session — a conversation with ordered messages (pure serializable data) */\nexport interface ChatSession<TCustom extends Record<string, unknown> = Record<string, unknown>> {\n id: ChatId;\n title?: string;\n messages: ChatMessage[];\n config: ChatSessionConfig;\n metadata: ChatSessionMetadata<TCustom>;\n status: SessionStatus;\n createdAt: string;\n updatedAt: string;\n backendSessionId?: string;\n}\n\n/**\n * Reactive wrapper around ChatSession — provides subscribe/getSnapshot for\n * React useSyncExternalStore integration and lastMessage convenience getter.\n * Session stores may optionally return ObservableSession instances.\n */\nexport interface ObservableSession<TCustom extends Record<string, unknown> = Record<string, unknown>>\n extends ChatSession<TCustom> {\n /** Subscribe to session changes (for React useSyncExternalStore) */\n subscribe(callback: () => void): () => void;\n /** Get immutable snapshot of session state (for React useSyncExternalStore) */\n getSnapshot(): ChatSession<TCustom>;\n /** Last message in the session */\n readonly lastMessage: ChatMessage | undefined;\n}\n\n/** Lightweight session info for listing (without full message array) */\nexport interface SessionInfo {\n id: ChatId;\n title?: string;\n status: SessionStatus;\n messageCount: number;\n lastMessage?: ChatMessage;\n createdAt: string;\n updatedAt: string;\n}\n\n// ─── Chat Events ───────────────────────────────────────────────\n\n/** Events emitted during chat operation */\nexport type ChatEvent =\n | { type: \"message:start\"; messageId: ChatId; role: ChatRole }\n | { type: \"message:delta\"; messageId: ChatId; text: string }\n | { type: \"message:complete\"; messageId: ChatId; message: ChatMessage }\n | {\n type: \"tool:start\";\n messageId: ChatId;\n toolCallId: string;\n toolName: string;\n args: Record<string, unknown>;\n }\n | {\n type: \"tool:complete\";\n messageId: ChatId;\n toolCallId: string;\n toolName: string;\n result: unknown;\n isError?: boolean;\n }\n | { type: \"thinking:start\"; messageId: ChatId }\n | { type: \"thinking:delta\"; messageId: ChatId; text: string }\n | { type: \"thinking:end\"; messageId: ChatId }\n | {\n type: \"permission:request\";\n messageId: ChatId;\n toolName: string;\n toolArgs: Record<string, unknown>;\n }\n | {\n type: \"permission:response\";\n messageId: ChatId;\n toolName: string;\n allowed: boolean;\n }\n | {\n type: \"usage\";\n promptTokens: number;\n completionTokens: number;\n model?: string;\n }\n | { type: \"session:created\"; sessionId: ChatId }\n | { type: \"session:updated\"; sessionId: ChatId }\n | {\n type: \"error\";\n error: string;\n recoverable: boolean;\n code?: ErrorCode;\n messageId?: ChatId;\n }\n | { type: \"typing:start\" }\n | { type: \"typing:end\" }\n | { type: \"heartbeat\" }\n | { type: \"done\"; finalOutput?: string };\n\n/** All possible ChatEvent type strings */\nexport type ChatEventType = ChatEvent[\"type\"];\n\n// ─── Chat Middleware ───────────────────────────────────────────\n\n/** Context passed to ChatMiddleware hooks */\nexport interface ChatMiddlewareContext {\n sessionId: ChatId;\n signal: AbortSignal;\n}\n\n/** Runtime-level middleware for the send/receive lifecycle.\n * Different from EventMiddleware which operates at the event bus level. */\nexport interface ChatMiddleware {\n /** Transform message before sending to backend. Return null to reject the send. */\n onBeforeSend?(message: ChatMessage, context: ChatMiddlewareContext): ChatMessage | null | Promise<ChatMessage | null>;\n /** Transform/intercept stream events */\n onEvent?(event: ChatEvent, context: ChatMiddlewareContext): ChatEvent | null | Promise<ChatEvent | null>;\n /** Transform completed message after receiving from backend */\n onAfterReceive?(message: ChatMessage, context: ChatMiddlewareContext): ChatMessage | Promise<ChatMessage>;\n /** Intercept errors — return null to suppress, return error to propagate */\n onError?(error: Error, context: ChatMiddlewareContext): Error | null | Promise<Error | null>;\n}\n\n// ─── Chat Provider Abstraction ─────────────────────────────────\n\n/** Options for sending a message to a provider */\nexport interface SendMessageOptions {\n signal?: AbortSignal;\n /** Model to use for this request. Required for server-side runtime.send(). */\n model?: string;\n /** Per-call system prompt override (forwarded to the backend agent) */\n systemPrompt?: string;\n context?: Record<string, unknown>;\n /** Additional tools to include in this request */\n tools?: ToolDefinition[];\n}\n\n/** Options for runtime.send() — requires backend routing info */\nexport interface RuntimeSendOptions {\n /** Backend to route this request to (key in backends map) */\n backend: string;\n /** Authentication credentials for the backend factory */\n credentials: AuthToken;\n /** Model to use for this request */\n model: string;\n /** Per-call system prompt override (forwarded to the backend agent) */\n systemPrompt?: string;\n /** Abort signal */\n signal?: AbortSignal;\n /** Request-scoped context */\n context?: Record<string, unknown>;\n /** Additional tools */\n tools?: ToolDefinition[];\n}\n\n/**\n * @deprecated IChatProvider has been inlined into IChatBackend.\n * Import IChatBackend from \"@witqq/agent-sdk/chat/backends\" instead.\n * Kept as type alias for backward compatibility.\n */\nexport type IChatProvider = import(\"./backends/types.js\").IChatBackend;\n\n// ─── Factory Functions ─────────────────────────────────────────\n\n/**\n * Create a simple text ChatMessage.\n *\n * @param text - Message text content\n * @param role - Message role (default: \"user\")\n * @returns A complete ChatMessage with a single TextPart\n */\nexport function createTextMessage(text: string, role: ChatRole = \"user\"): ChatMessage {\n return {\n id: createChatId(),\n role,\n parts: [{ type: \"text\", text, status: \"complete\" }],\n createdAt: new Date().toISOString(),\n status: \"complete\",\n };\n}\n\n/** Type guard: checks if a session has reactive API (subscribe/getSnapshot) */\nexport function isObservableSession<TCustom extends Record<string, unknown> = Record<string, unknown>>(\n session: ChatSession<TCustom>,\n): session is ObservableSession<TCustom> {\n return \"subscribe\" in session && typeof (session as ObservableSession<TCustom>).subscribe === \"function\"\n && \"getSnapshot\" in session && typeof (session as ObservableSession<TCustom>).getSnapshot === \"function\";\n}\n","/**\n * Mock data factories for creating test ChatSession and ChatMessage instances.\n */\nimport type { ChatSession, ChatMessage, MessagePart, ChatSessionConfig, ChatId } from \"../chat/core.js\";\nimport { createChatId } from \"../chat/core.js\";\n\n/** Options for createMockSession. */\nexport interface MockSessionOptions {\n id?: string;\n title?: string;\n messages?: ChatMessage[];\n config?: Partial<ChatSessionConfig>;\n metadata?: Record<string, unknown>;\n status?: \"active\";\n}\n\n/** Options for createMockMessage. */\nexport interface MockMessageOptions {\n id?: string;\n role?: \"user\" | \"assistant\" | \"system\";\n text?: string;\n parts?: MessagePart[];\n status?: \"pending\" | \"streaming\" | \"complete\" | \"error\";\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Create a mock ChatSession for testing.\n *\n * ```ts\n * const session = createMockSession({ title: \"Test chat\" });\n * ```\n */\nexport function createMockSession(options: MockSessionOptions = {}): ChatSession {\n const id = (options.id ?? createChatId()) as ChatId;\n const now = new Date().toISOString();\n return {\n id,\n title: options.title ?? \"Test Session\",\n messages: options.messages ?? [],\n config: {\n model: options.config?.model ?? \"test-model\",\n backend: options.config?.backend ?? \"test-backend\",\n systemPrompt: options.config?.systemPrompt ?? \"\",\n },\n metadata: {\n messageCount: options.messages?.length ?? 0,\n totalTokens: 0,\n custom: options.metadata ?? {},\n },\n status: options.status ?? \"active\",\n createdAt: now,\n updatedAt: now,\n };\n}\n\n/**\n * Create a mock ChatMessage for testing.\n *\n * ```ts\n * const msg = createMockMessage({ role: \"user\", text: \"Hello\" });\n * ```\n */\nexport function createMockMessage(options: MockMessageOptions = {}): ChatMessage {\n const id = createChatId();\n const parts: MessagePart[] = options.parts ?? (options.text\n ? [{ type: \"text\" as const, text: options.text, status: \"complete\" as const }]\n : [{ type: \"text\" as const, text: \"Test message\", status: \"complete\" as const }]);\n const now = new Date().toISOString();\n return {\n id,\n role: options.role ?? \"user\",\n parts,\n status: options.status ?? \"complete\",\n createdAt: now,\n metadata: options.metadata ?? {},\n };\n}\n","/**\n * Mock IChatRuntime factory for testing chat runtime consumers.\n */\nimport type { IChatRuntime, BackendInfo } from \"../chat/runtime.js\";\nimport type { CreateSessionOptions, SessionListOptions } from \"../chat/sessions.js\";\nimport type { ChatSession, ChatEvent, ChatIdLike, ChatMiddleware, RuntimeStatus } from \"../chat/core.js\";\nimport type { RuntimeSendOptions } from \"../chat/types.js\";\nimport type { ContextStats } from \"../chat/context.js\";\nimport type { ToolDefinition, ModelInfo } from \"../types.js\";\nimport { createChatId, toChatId } from \"../chat/core.js\";\nimport { createMockSession, createMockMessage } from \"./mock-data.js\";\n\n/** Options for createMockRuntime. */\nexport interface MockRuntimeOptions {\n /** Default backend name. Default: \"mock\". */\n defaultBackend?: string;\n /** Default model. */\n defaultModel?: string;\n /** Pre-seeded sessions. */\n sessions?: ChatSession[];\n /** Models to return from listModels(). */\n models?: ModelInfo[];\n /** Custom send handler. When not provided, yields a single text_delta + done event. */\n onSend?: (sessionId: ChatIdLike, message: string, options?: RuntimeSendOptions) => AsyncIterable<ChatEvent>;\n}\n\n/**\n * Create a mock IChatRuntime for testing chat UI hooks and components.\n *\n * ```ts\n * const runtime = createMockRuntime({ defaultModel: \"gpt-5-mini\" });\n * const session = await runtime.createSession({});\n * ```\n */\nexport function createMockRuntime(options: MockRuntimeOptions = {}): IChatRuntime {\n const sessions = new Map<string, ChatSession>();\n const tools = new Map<string, ToolDefinition>();\n const middleware: ChatMiddleware[] = [];\n const sessionListeners = new Set<() => void>();\n let currentBackend = options.defaultBackend ?? \"mock\";\n let status: RuntimeStatus = \"idle\";\n\n // Seed initial sessions\n for (const s of options.sessions ?? []) {\n sessions.set(s.id, s);\n }\n\n function notifySessionChange() {\n for (const cb of sessionListeners) {\n try { cb(); } catch { /* isolated */ }\n }\n }\n\n const runtime: IChatRuntime = {\n get status() { return status; },\n get registeredTools() { return tools as ReadonlyMap<string, ToolDefinition>; },\n\n async createSession(opts: CreateSessionOptions): Promise<ChatSession> {\n const session = createMockSession({\n title: opts.title,\n config: {\n model: opts.config?.model ?? \"mock-model\",\n backend: opts.config?.backend ?? currentBackend,\n systemPrompt: opts.config?.systemPrompt,\n },\n metadata: opts.custom as Record<string, unknown>,\n });\n sessions.set(session.id, session);\n notifySessionChange();\n return session;\n },\n\n async getSession(id: ChatIdLike): Promise<ChatSession | null> {\n return sessions.get(toChatId(String(id))) ?? null;\n },\n\n async listSessions(_opts?: SessionListOptions): Promise<ChatSession[]> {\n return [...sessions.values()];\n },\n\n async deleteSession(id: ChatIdLike): Promise<void> {\n sessions.delete(toChatId(String(id)));\n notifySessionChange();\n },\n\n send(sessionId: ChatIdLike, message: string, sendOpts?: RuntimeSendOptions): AsyncIterable<ChatEvent> {\n if (options.onSend) return options.onSend(sessionId, message, sendOpts);\n // Default: yield a simple response\n async function* defaultStream(): AsyncIterable<ChatEvent> {\n const msgId = createChatId();\n yield { type: \"message:start\", messageId: msgId } as ChatEvent;\n yield { type: \"message:delta\", text: \"Mock reply\" } as ChatEvent;\n yield { type: \"message:complete\", messageId: msgId } as ChatEvent;\n yield { type: \"done\", finalOutput: \"Mock reply\" } as ChatEvent;\n // Add assistant message to session\n const session = sessions.get(toChatId(String(sessionId)));\n if (session) {\n session.messages.push(createMockMessage({ role: \"assistant\", text: \"Mock reply\" }));\n session.metadata.messageCount = session.messages.length;\n }\n notifySessionChange();\n }\n return defaultStream();\n },\n\n abort(): void { /* no-op */ },\n\n async listModels(): Promise<ModelInfo[]> {\n return options.models ?? [{ id: \"mock-model\", name: \"Mock Model\" }];\n },\n\n async listBackends(): Promise<BackendInfo[]> {\n return [{ name: currentBackend }];\n },\n\n onSessionChange(callback: () => void): () => void {\n sessionListeners.add(callback);\n return () => { sessionListeners.delete(callback); };\n },\n\n registerTool(tool: ToolDefinition): void {\n tools.set(tool.name, tool);\n },\n\n removeTool(name: string): void {\n tools.delete(name);\n },\n\n use(mw: ChatMiddleware): void {\n middleware.push(mw);\n },\n\n removeMiddleware(mw: ChatMiddleware): void {\n const idx = middleware.indexOf(mw);\n if (idx >= 0) middleware.splice(idx, 1);\n },\n\n async getContextStats(_sessionId: ChatIdLike): Promise<ContextStats | null> {\n return null;\n },\n\n async dispose(): Promise<void> {\n status = \"disposed\";\n sessions.clear();\n tools.clear();\n middleware.length = 0;\n sessionListeners.clear();\n },\n };\n\n return runtime;\n}\n","/**\n * Mock IChatClient factory for testing remote chat client consumers.\n */\nimport type { IChatClient, BackendInfo } from \"../chat/runtime.js\";\nimport type { CreateSessionOptions, SessionListOptions } from \"../chat/sessions.js\";\nimport type { ChatSession, ChatEvent, ChatId, ChatIdLike, SendMessageOptions, RuntimeStatus } from \"../chat/core.js\";\nimport type { ProviderConfig } from \"../chat/provider-types.js\";\nimport type { ModelInfo } from \"../types.js\";\nimport type { ContextStats } from \"../chat/context.js\";\nimport { createChatId, toChatId } from \"../chat/core.js\";\nimport { createMockSession, createMockMessage } from \"./mock-data.js\";\n\n/** Options for createMockChatClient. */\nexport interface MockChatClientOptions {\n /** Pre-seeded sessions. */\n sessions?: ChatSession[];\n /** Models to return from listModels(). */\n models?: ModelInfo[];\n /** Providers to return from listProviders(). */\n providers?: ProviderConfig[];\n /** Custom send handler. */\n onSend?: (sessionId: ChatIdLike, message: string, options?: SendMessageOptions) => AsyncIterable<ChatEvent>;\n}\n\n/**\n * Create a mock IChatClient for testing React hooks that talk to RemoteChatClient.\n *\n * ```ts\n * const client = createMockChatClient({ providers: [{ id: \"p1\", backend: \"copilot\", model: \"gpt-5-mini\", label: \"GPT Mini\", createdAt: \"\" }] });\n * const providers = await client.listProviders();\n * ```\n */\nexport function createMockChatClient(options: MockChatClientOptions = {}): IChatClient {\n const sessions = new Map<string, ChatSession>();\n const providers = new Map<string, ProviderConfig>();\n const sessionListeners = new Set<() => void>();\n const selectionListeners = new Set<(providerId: string | null) => void>();\n let activeSessionId: ChatId | null = null;\n let selectedProviderId: string | null = null;\n let status: RuntimeStatus = \"idle\";\n\n // Seed sessions\n for (const s of options.sessions ?? []) {\n sessions.set(s.id, s);\n }\n // Seed providers\n for (const p of options.providers ?? []) {\n providers.set(p.id, p);\n }\n\n function notifySessionChange() {\n for (const cb of sessionListeners) {\n try { cb(); } catch { /* isolated */ }\n }\n }\n\n const client: IChatClient = {\n get status() { return status; },\n get activeSessionId() { return activeSessionId; },\n\n async createSession(opts: CreateSessionOptions): Promise<ChatSession> {\n const session = createMockSession({\n title: opts.title,\n config: {\n model: opts.config?.model ?? \"mock-model\",\n backend: opts.config?.backend ?? \"mock\",\n systemPrompt: opts.config?.systemPrompt,\n },\n });\n sessions.set(session.id, session);\n activeSessionId = session.id;\n notifySessionChange();\n return session;\n },\n\n async getSession(id: ChatIdLike): Promise<ChatSession | null> {\n return sessions.get(toChatId(String(id))) ?? null;\n },\n\n async listSessions(_opts?: SessionListOptions): Promise<ChatSession[]> {\n return [...sessions.values()];\n },\n\n async deleteSession(id: ChatIdLike): Promise<void> {\n sessions.delete(toChatId(String(id)));\n if (activeSessionId === String(id)) activeSessionId = null;\n notifySessionChange();\n },\n\n async switchSession(id: ChatIdLike): Promise<ChatSession> {\n const session = sessions.get(toChatId(String(id)));\n if (!session) throw new Error(`Session ${id} not found`);\n activeSessionId = session.id;\n return session;\n },\n\n send(sessionId: ChatIdLike, message: string, sendOpts?: SendMessageOptions): AsyncIterable<ChatEvent> {\n if (options.onSend) return options.onSend(sessionId, message, sendOpts);\n async function* defaultStream(): AsyncIterable<ChatEvent> {\n const msgId = createChatId();\n yield { type: \"message:start\", messageId: msgId } as ChatEvent;\n yield { type: \"message:delta\", text: \"Mock reply\" } as ChatEvent;\n yield { type: \"message:complete\", messageId: msgId } as ChatEvent;\n yield { type: \"done\", finalOutput: \"Mock reply\" } as ChatEvent;\n const session = sessions.get(toChatId(String(sessionId)));\n if (session) {\n session.messages.push(createMockMessage({ role: \"assistant\", text: \"Mock reply\" }));\n session.metadata.messageCount = session.messages.length;\n }\n notifySessionChange();\n }\n return defaultStream();\n },\n\n abort(): void { /* no-op */ },\n\n // ── Provider Selection ──\n get selectedProviderId() { return selectedProviderId; },\n selectProvider(providerId: string): void {\n selectedProviderId = providerId;\n for (const cb of selectionListeners) {\n try { cb(providerId); } catch { /* isolated */ }\n }\n },\n onSelectionChange(callback: (providerId: string | null) => void): () => void {\n selectionListeners.add(callback);\n return () => { selectionListeners.delete(callback); };\n },\n\n async listModels(): Promise<ModelInfo[]> {\n return options.models ?? [{ id: \"mock-model\", name: \"Mock Model\" }];\n },\n\n async listBackends(): Promise<BackendInfo[]> {\n return [{ name: \"mock\" }];\n },\n\n onSessionChange(callback: () => void): () => void {\n sessionListeners.add(callback);\n return () => { sessionListeners.delete(callback); };\n },\n\n async getContextStats(_sessionId: ChatIdLike): Promise<ContextStats | null> {\n return null;\n },\n\n // ── Provider CRUD ──\n async listProviders(): Promise<ProviderConfig[]> {\n return [...providers.values()];\n },\n\n async createProvider(config: Omit<ProviderConfig, \"id\" | \"createdAt\">): Promise<ProviderConfig> {\n const provider: ProviderConfig = {\n ...config,\n id: createChatId(),\n createdAt: Date.now(),\n };\n providers.set(provider.id, provider);\n return provider;\n },\n\n async updateProvider(id: string, changes: Partial<Omit<ProviderConfig, \"id\" | \"createdAt\">>): Promise<void> {\n const existing = providers.get(id);\n if (!existing) throw new Error(`Provider ${id} not found`);\n providers.set(id, { ...existing, ...changes });\n },\n\n async deleteProvider(id: string): Promise<void> {\n providers.delete(id);\n },\n\n async dispose(): Promise<void> {\n status = \"disposed\";\n sessions.clear();\n providers.clear();\n sessionListeners.clear();\n selectionListeners.clear();\n },\n };\n\n return client;\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { A as AuthToken } from './types-BxggH0Yh.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Token storage abstraction and default filesystem implementation.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** Token storage interface for server-side token management */
|
|
8
|
+
interface ITokenStore {
|
|
9
|
+
/** Save a token for a provider. Overwrites if exists. */
|
|
10
|
+
save(provider: string, token: AuthToken): Promise<void>;
|
|
11
|
+
/** Load a previously saved token. Returns null if not found. */
|
|
12
|
+
load(provider: string): Promise<AuthToken | null>;
|
|
13
|
+
/** Remove a specific provider's token. */
|
|
14
|
+
clear(provider: string): Promise<void>;
|
|
15
|
+
/** Remove all stored tokens. */
|
|
16
|
+
clearAll(): Promise<void>;
|
|
17
|
+
/** List provider names that have saved tokens. */
|
|
18
|
+
list(): Promise<string[]>;
|
|
19
|
+
/** Release any resources held by this store (optional). */
|
|
20
|
+
dispose?(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/** In-memory token store for testing and ephemeral use */
|
|
23
|
+
declare class InMemoryTokenStore implements ITokenStore {
|
|
24
|
+
private readonly tokens;
|
|
25
|
+
save(provider: string, token: AuthToken): Promise<void>;
|
|
26
|
+
load(provider: string): Promise<AuthToken | null>;
|
|
27
|
+
clear(provider: string): Promise<void>;
|
|
28
|
+
clearAll(): Promise<void>;
|
|
29
|
+
list(): Promise<string[]>;
|
|
30
|
+
}
|
|
31
|
+
/** Options for FileTokenStore */
|
|
32
|
+
interface FileTokenStoreOptions {
|
|
33
|
+
/** Directory to store token JSON files. Default: ".tokens" in cwd */
|
|
34
|
+
directory: string;
|
|
35
|
+
}
|
|
36
|
+
/** Filesystem-based token store using JSON files (one per provider) */
|
|
37
|
+
declare class FileTokenStore implements ITokenStore {
|
|
38
|
+
private readonly dir;
|
|
39
|
+
constructor(options: FileTokenStoreOptions);
|
|
40
|
+
save(provider: string, token: AuthToken): Promise<void>;
|
|
41
|
+
load(provider: string): Promise<AuthToken | null>;
|
|
42
|
+
clear(provider: string): Promise<void>;
|
|
43
|
+
clearAll(): Promise<void>;
|
|
44
|
+
list(): Promise<string[]>;
|
|
45
|
+
private filePath;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { FileTokenStore as F, type ITokenStore as I, type FileTokenStoreOptions as a, InMemoryTokenStore as b };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { A as AuthToken } from './types-4vbcmPTp.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Token storage abstraction and default filesystem implementation.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** Token storage interface for server-side token management */
|
|
8
|
+
interface ITokenStore {
|
|
9
|
+
/** Save a token for a provider. Overwrites if exists. */
|
|
10
|
+
save(provider: string, token: AuthToken): Promise<void>;
|
|
11
|
+
/** Load a previously saved token. Returns null if not found. */
|
|
12
|
+
load(provider: string): Promise<AuthToken | null>;
|
|
13
|
+
/** Remove a specific provider's token. */
|
|
14
|
+
clear(provider: string): Promise<void>;
|
|
15
|
+
/** Remove all stored tokens. */
|
|
16
|
+
clearAll(): Promise<void>;
|
|
17
|
+
/** List provider names that have saved tokens. */
|
|
18
|
+
list(): Promise<string[]>;
|
|
19
|
+
/** Release any resources held by this store (optional). */
|
|
20
|
+
dispose?(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/** In-memory token store for testing and ephemeral use */
|
|
23
|
+
declare class InMemoryTokenStore implements ITokenStore {
|
|
24
|
+
private readonly tokens;
|
|
25
|
+
save(provider: string, token: AuthToken): Promise<void>;
|
|
26
|
+
load(provider: string): Promise<AuthToken | null>;
|
|
27
|
+
clear(provider: string): Promise<void>;
|
|
28
|
+
clearAll(): Promise<void>;
|
|
29
|
+
list(): Promise<string[]>;
|
|
30
|
+
}
|
|
31
|
+
/** Options for FileTokenStore */
|
|
32
|
+
interface FileTokenStoreOptions {
|
|
33
|
+
/** Directory to store token JSON files. Default: ".tokens" in cwd */
|
|
34
|
+
directory: string;
|
|
35
|
+
}
|
|
36
|
+
/** Filesystem-based token store using JSON files (one per provider) */
|
|
37
|
+
declare class FileTokenStore implements ITokenStore {
|
|
38
|
+
private readonly dir;
|
|
39
|
+
constructor(options: FileTokenStoreOptions);
|
|
40
|
+
save(provider: string, token: AuthToken): Promise<void>;
|
|
41
|
+
load(provider: string): Promise<AuthToken | null>;
|
|
42
|
+
clear(provider: string): Promise<void>;
|
|
43
|
+
clearAll(): Promise<void>;
|
|
44
|
+
list(): Promise<string[]>;
|
|
45
|
+
private filePath;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { FileTokenStore as F, type ITokenStore as I, type FileTokenStoreOptions as a, InMemoryTokenStore as b };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChatEvent } from './
|
|
1
|
+
import { a as ChatEvent } from './types-DRgd_9R7.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @witqq/agent-sdk/chat/backends/transport
|
|
@@ -21,11 +21,12 @@ interface IChatTransport {
|
|
|
21
21
|
/** Whether the transport is still open */
|
|
22
22
|
readonly isOpen: boolean;
|
|
23
23
|
}
|
|
24
|
-
/** Writable HTTP response interface (Node
|
|
24
|
+
/** Writable HTTP response interface — minimal type satisfied by Express, Fastify (raw), and Node http.ServerResponse without casts. */
|
|
25
25
|
interface WritableResponse {
|
|
26
|
-
writeHead(statusCode: number, headers
|
|
26
|
+
writeHead(statusCode: number, headers?: Record<string, string | string[]>): unknown;
|
|
27
|
+
setHeader(name: string, value: string): unknown;
|
|
27
28
|
write(chunk: string): boolean;
|
|
28
|
-
end():
|
|
29
|
+
end(body?: string): unknown;
|
|
29
30
|
readonly writableEnded: boolean;
|
|
30
31
|
}
|
|
31
32
|
/** Minimal interface for detecting client disconnection */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChatEvent } from './
|
|
1
|
+
import { a as ChatEvent } from './types-ajANVzf7.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @witqq/agent-sdk/chat/backends/transport
|
|
@@ -21,11 +21,12 @@ interface IChatTransport {
|
|
|
21
21
|
/** Whether the transport is still open */
|
|
22
22
|
readonly isOpen: boolean;
|
|
23
23
|
}
|
|
24
|
-
/** Writable HTTP response interface (Node
|
|
24
|
+
/** Writable HTTP response interface — minimal type satisfied by Express, Fastify (raw), and Node http.ServerResponse without casts. */
|
|
25
25
|
interface WritableResponse {
|
|
26
|
-
writeHead(statusCode: number, headers
|
|
26
|
+
writeHead(statusCode: number, headers?: Record<string, string | string[]>): unknown;
|
|
27
|
+
setHeader(name: string, value: string): unknown;
|
|
27
28
|
write(chunk: string): boolean;
|
|
28
|
-
end():
|
|
29
|
+
end(body?: string): unknown;
|
|
29
30
|
readonly writableEnded: boolean;
|
|
30
31
|
}
|
|
31
32
|
/** Minimal interface for detecting client disconnection */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AgentSDKError } from './errors-
|
|
1
|
+
import { A as AgentSDKError } from './errors-CmVvczxZ.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Base auth token returned by all auth providers.
|
|
@@ -42,6 +42,8 @@ interface AuthToken {
|
|
|
42
42
|
interface CopilotAuthToken extends AuthToken {
|
|
43
43
|
/** GitHub user login associated with the token */
|
|
44
44
|
login?: string;
|
|
45
|
+
/** Refresh token for obtaining new access tokens (present when GitHub App has expiring tokens) */
|
|
46
|
+
refreshToken?: string;
|
|
45
47
|
}
|
|
46
48
|
/**
|
|
47
49
|
* Claude-specific token (OAuth+PKCE, expires in 8h).
|
|
@@ -138,4 +140,4 @@ declare class TokenExchangeError extends AuthError {
|
|
|
138
140
|
constructor(message: string, options?: ErrorOptions);
|
|
139
141
|
}
|
|
140
142
|
|
|
141
|
-
export { type AuthToken as A, type
|
|
143
|
+
export { type AuthToken as A, type CopilotAuthToken as C, type DeviceFlowResult as D, type OAuthFlowOptions as O, TokenExchangeError as T, type OAuthFlowResult as a, type ClaudeAuthToken as b, AccessDeniedError as c, AuthError as d, DeviceCodeExpiredError as e };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AgentSDKError } from './errors-
|
|
1
|
+
import { A as AgentSDKError } from './errors-CmVvczxZ.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Base auth token returned by all auth providers.
|
|
@@ -42,6 +42,8 @@ interface AuthToken {
|
|
|
42
42
|
interface CopilotAuthToken extends AuthToken {
|
|
43
43
|
/** GitHub user login associated with the token */
|
|
44
44
|
login?: string;
|
|
45
|
+
/** Refresh token for obtaining new access tokens (present when GitHub App has expiring tokens) */
|
|
46
|
+
refreshToken?: string;
|
|
45
47
|
}
|
|
46
48
|
/**
|
|
47
49
|
* Claude-specific token (OAuth+PKCE, expires in 8h).
|
|
@@ -138,4 +140,4 @@ declare class TokenExchangeError extends AuthError {
|
|
|
138
140
|
constructor(message: string, options?: ErrorOptions);
|
|
139
141
|
}
|
|
140
142
|
|
|
141
|
-
export { type AuthToken as A, type
|
|
143
|
+
export { type AuthToken as A, type CopilotAuthToken as C, type DeviceFlowResult as D, type OAuthFlowOptions as O, TokenExchangeError as T, type OAuthFlowResult as a, type ClaudeAuthToken as b, AccessDeniedError as c, AuthError as d, DeviceCodeExpiredError as e };
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import { M as ModelInfo, F as FullAgentConfig, I as IAgentService, T as ToolDefinition, U as UsageData } from './agent-DxY68NZL.cjs';
|
|
2
|
+
import { E as ErrorCode } from './errors-C-so0M4t.cjs';
|
|
3
|
+
import { A as AuthToken } from './types-4vbcmPTp.cjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @witqq/agent-sdk/chat/backends/types
|
|
7
|
+
*
|
|
8
|
+
* IChatBackend — core backend interface for sending/streaming messages.
|
|
9
|
+
* IResumableBackend — extends IChatBackend with session resume support.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** Options for creating a backend adapter */
|
|
13
|
+
interface BackendAdapterOptions {
|
|
14
|
+
/** Agent configuration (model, systemPrompt, tools, etc.) */
|
|
15
|
+
agentConfig: FullAgentConfig;
|
|
16
|
+
/** Pre-created agent service (if adapter should not own lifecycle) */
|
|
17
|
+
agentService?: IAgentService;
|
|
18
|
+
/** Factory for lazy service creation (called on first use, not at construction) */
|
|
19
|
+
agentServiceFactory?: () => IAgentService;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Core chat backend — send, stream, models, validate, dispose.
|
|
23
|
+
* All backends implement this. Resume support is optional.
|
|
24
|
+
*
|
|
25
|
+
* Note: `agentService` is intentionally NOT on this interface.
|
|
26
|
+
* It's an implementation detail exposed on BaseBackendAdapter for
|
|
27
|
+
* advanced consumers who need direct service access.
|
|
28
|
+
*/
|
|
29
|
+
interface IChatBackend {
|
|
30
|
+
/** Backend name (e.g. "copilot", "claude", "vercel-ai") */
|
|
31
|
+
readonly name: string;
|
|
32
|
+
/** Send a message and receive a complete response */
|
|
33
|
+
sendMessage(session: ChatSession, message: string, options?: SendMessageOptions): Promise<ChatMessage>;
|
|
34
|
+
/** Stream a message response as ChatEvents */
|
|
35
|
+
streamMessage(session: ChatSession, message: string, options?: SendMessageOptions): AsyncIterable<ChatEvent>;
|
|
36
|
+
/** List available models */
|
|
37
|
+
listModels(): Promise<ModelInfo[]>;
|
|
38
|
+
/** Validate backend configuration/credentials */
|
|
39
|
+
validate(): Promise<{
|
|
40
|
+
valid: boolean;
|
|
41
|
+
errors: string[];
|
|
42
|
+
}>;
|
|
43
|
+
/** Dispose resources */
|
|
44
|
+
dispose(): Promise<void>;
|
|
45
|
+
/** Current effective model */
|
|
46
|
+
readonly currentModel: string | undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Extended backend with session resume capabilities.
|
|
50
|
+
* Only backends with persistent sessions (Copilot, Claude) implement this.
|
|
51
|
+
* Use `isResumableBackend()` to type-narrow at runtime.
|
|
52
|
+
*/
|
|
53
|
+
interface IResumableBackend extends IChatBackend {
|
|
54
|
+
/** Whether this adapter supports session resume */
|
|
55
|
+
canResume(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Resume a previous session by its backend session ID.
|
|
58
|
+
* Streams events from the resumed session.
|
|
59
|
+
* @throws ChatError with SESSION_EXPIRED if session is no longer valid
|
|
60
|
+
* @throws ChatError with SESSION_NOT_FOUND if session ID is unknown
|
|
61
|
+
*/
|
|
62
|
+
resume(session: ChatSession, backendSessionId: string, options?: SendMessageOptions): AsyncIterable<ChatEvent>;
|
|
63
|
+
/** The backend session ID from the last stream, or null if not yet streamed */
|
|
64
|
+
readonly backendSessionId: string | null;
|
|
65
|
+
}
|
|
66
|
+
/** Type guard: checks if a backend adapter supports session resume */
|
|
67
|
+
declare function isResumableBackend(adapter: IChatBackend): adapter is IResumableBackend;
|
|
68
|
+
|
|
69
|
+
/** Branded type for unique identifiers */
|
|
70
|
+
type ChatId = string & {
|
|
71
|
+
readonly __brand: "ChatId";
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Generate a new unique ChatId (crypto.randomUUID-based)
|
|
75
|
+
* @returns Branded ChatId string
|
|
76
|
+
*/
|
|
77
|
+
declare function createChatId(): ChatId;
|
|
78
|
+
/**
|
|
79
|
+
* Cast a string to ChatId with UUID format validation.
|
|
80
|
+
* Use this instead of manual `as ChatId` type assertions.
|
|
81
|
+
*
|
|
82
|
+
* @param value - String to validate and cast
|
|
83
|
+
* @returns Branded ChatId
|
|
84
|
+
* @throws {TypeError} If value is not a valid UUID v4 format
|
|
85
|
+
*/
|
|
86
|
+
declare function toChatId(value: string): ChatId;
|
|
87
|
+
/**
|
|
88
|
+
* Accepts either a plain string or branded ChatId for API convenience.
|
|
89
|
+
* Use this in public API signatures so consumers don't need `as ChatId` casts.
|
|
90
|
+
*/
|
|
91
|
+
type ChatIdLike = string | ChatId;
|
|
92
|
+
/** Lifecycle status of a message part (text, reasoning, etc.) */
|
|
93
|
+
type PartStatus = "pending" | "streaming" | "complete" | "error";
|
|
94
|
+
/** Lifecycle status of a tool call within a message */
|
|
95
|
+
type ToolCallStatus = "pending" | "running" | "requires_approval" | "complete" | "error" | "denied";
|
|
96
|
+
/** Lifecycle status of an entire message */
|
|
97
|
+
type MessageStatus = "pending" | "streaming" | "complete" | "error" | "cancelled";
|
|
98
|
+
/** Lifecycle status of a chat session */
|
|
99
|
+
type SessionStatus = "active";
|
|
100
|
+
/** Lifecycle status of the chat runtime */
|
|
101
|
+
type RuntimeStatus = "idle" | "streaming" | "error" | "disposed";
|
|
102
|
+
/** Plain text content part */
|
|
103
|
+
interface TextPart {
|
|
104
|
+
type: "text";
|
|
105
|
+
text: string;
|
|
106
|
+
status: PartStatus;
|
|
107
|
+
}
|
|
108
|
+
/** Model reasoning/thinking content part */
|
|
109
|
+
interface ReasoningPart {
|
|
110
|
+
type: "reasoning";
|
|
111
|
+
text: string;
|
|
112
|
+
status: PartStatus;
|
|
113
|
+
}
|
|
114
|
+
/** Tool invocation part with call ID, arguments, optional result */
|
|
115
|
+
interface ToolCallPart {
|
|
116
|
+
type: "tool_call";
|
|
117
|
+
toolCallId: string;
|
|
118
|
+
name: string;
|
|
119
|
+
args: unknown;
|
|
120
|
+
result?: unknown;
|
|
121
|
+
status: ToolCallStatus;
|
|
122
|
+
error?: string;
|
|
123
|
+
}
|
|
124
|
+
/** Source reference part (URL citation) */
|
|
125
|
+
interface SourcePart {
|
|
126
|
+
type: "source";
|
|
127
|
+
url: string;
|
|
128
|
+
title?: string;
|
|
129
|
+
status: PartStatus;
|
|
130
|
+
}
|
|
131
|
+
/** File attachment part (base64-encoded data) */
|
|
132
|
+
interface FilePart {
|
|
133
|
+
type: "file";
|
|
134
|
+
name: string;
|
|
135
|
+
mimeType: string;
|
|
136
|
+
data: string;
|
|
137
|
+
status: PartStatus;
|
|
138
|
+
}
|
|
139
|
+
/** Union of all message part types */
|
|
140
|
+
type MessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart;
|
|
141
|
+
/** Role of message author */
|
|
142
|
+
type ChatRole = "user" | "assistant" | "system";
|
|
143
|
+
/** Metadata attached to messages — useful preset for the TMetadata generic */
|
|
144
|
+
interface ChatMessageMetadata {
|
|
145
|
+
model?: string;
|
|
146
|
+
backend?: string;
|
|
147
|
+
usage?: UsageData;
|
|
148
|
+
isSummary?: boolean;
|
|
149
|
+
estimatedTokens?: number;
|
|
150
|
+
custom?: Record<string, unknown>;
|
|
151
|
+
}
|
|
152
|
+
/** Message status */
|
|
153
|
+
type ChatMessageStatus = MessageStatus;
|
|
154
|
+
/** A single chat message — the fundamental unit of conversation */
|
|
155
|
+
interface ChatMessage<TMetadata = unknown> {
|
|
156
|
+
id: ChatId;
|
|
157
|
+
role: ChatRole;
|
|
158
|
+
parts: MessagePart[];
|
|
159
|
+
metadata?: TMetadata;
|
|
160
|
+
createdAt: string;
|
|
161
|
+
updatedAt?: string;
|
|
162
|
+
status: MessageStatus;
|
|
163
|
+
}
|
|
164
|
+
/** Session configuration snapshot */
|
|
165
|
+
interface ChatSessionConfig {
|
|
166
|
+
model: string;
|
|
167
|
+
backend: string;
|
|
168
|
+
systemPrompt?: string;
|
|
169
|
+
temperature?: number;
|
|
170
|
+
maxTokens?: number;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Session metadata tracking usage statistics and custom extensions.
|
|
174
|
+
*
|
|
175
|
+
* Updated automatically by session stores on each `addMessage()` call.
|
|
176
|
+
* The generic `TCustom` parameter allows type-safe application-specific
|
|
177
|
+
* metadata via the `custom` field.
|
|
178
|
+
*
|
|
179
|
+
* @typeParam TCustom - Shape of the `custom` field (defaults to `Record<string, unknown>`)
|
|
180
|
+
*/
|
|
181
|
+
interface ChatSessionMetadata<TCustom extends Record<string, unknown> = Record<string, unknown>> {
|
|
182
|
+
/** Number of messages in the session (updated by session store) */
|
|
183
|
+
messageCount: number;
|
|
184
|
+
/** Total token count across all messages in the session */
|
|
185
|
+
totalTokens: number;
|
|
186
|
+
/** Optional tags for session categorization and filtering */
|
|
187
|
+
tags?: string[];
|
|
188
|
+
/** Application-specific metadata — typed via the TCustom generic parameter */
|
|
189
|
+
custom?: TCustom;
|
|
190
|
+
}
|
|
191
|
+
/** Chat session — a conversation with ordered messages (pure serializable data) */
|
|
192
|
+
interface ChatSession<TCustom extends Record<string, unknown> = Record<string, unknown>> {
|
|
193
|
+
id: ChatId;
|
|
194
|
+
title?: string;
|
|
195
|
+
messages: ChatMessage[];
|
|
196
|
+
config: ChatSessionConfig;
|
|
197
|
+
metadata: ChatSessionMetadata<TCustom>;
|
|
198
|
+
status: SessionStatus;
|
|
199
|
+
createdAt: string;
|
|
200
|
+
updatedAt: string;
|
|
201
|
+
backendSessionId?: string;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Reactive wrapper around ChatSession — provides subscribe/getSnapshot for
|
|
205
|
+
* React useSyncExternalStore integration and lastMessage convenience getter.
|
|
206
|
+
* Session stores may optionally return ObservableSession instances.
|
|
207
|
+
*/
|
|
208
|
+
interface ObservableSession<TCustom extends Record<string, unknown> = Record<string, unknown>> extends ChatSession<TCustom> {
|
|
209
|
+
/** Subscribe to session changes (for React useSyncExternalStore) */
|
|
210
|
+
subscribe(callback: () => void): () => void;
|
|
211
|
+
/** Get immutable snapshot of session state (for React useSyncExternalStore) */
|
|
212
|
+
getSnapshot(): ChatSession<TCustom>;
|
|
213
|
+
/** Last message in the session */
|
|
214
|
+
readonly lastMessage: ChatMessage | undefined;
|
|
215
|
+
}
|
|
216
|
+
/** Lightweight session info for listing (without full message array) */
|
|
217
|
+
interface SessionInfo {
|
|
218
|
+
id: ChatId;
|
|
219
|
+
title?: string;
|
|
220
|
+
status: SessionStatus;
|
|
221
|
+
messageCount: number;
|
|
222
|
+
lastMessage?: ChatMessage;
|
|
223
|
+
createdAt: string;
|
|
224
|
+
updatedAt: string;
|
|
225
|
+
}
|
|
226
|
+
/** Events emitted during chat operation */
|
|
227
|
+
type ChatEvent = {
|
|
228
|
+
type: "message:start";
|
|
229
|
+
messageId: ChatId;
|
|
230
|
+
role: ChatRole;
|
|
231
|
+
} | {
|
|
232
|
+
type: "message:delta";
|
|
233
|
+
messageId: ChatId;
|
|
234
|
+
text: string;
|
|
235
|
+
} | {
|
|
236
|
+
type: "message:complete";
|
|
237
|
+
messageId: ChatId;
|
|
238
|
+
message: ChatMessage;
|
|
239
|
+
} | {
|
|
240
|
+
type: "tool:start";
|
|
241
|
+
messageId: ChatId;
|
|
242
|
+
toolCallId: string;
|
|
243
|
+
toolName: string;
|
|
244
|
+
args: Record<string, unknown>;
|
|
245
|
+
} | {
|
|
246
|
+
type: "tool:complete";
|
|
247
|
+
messageId: ChatId;
|
|
248
|
+
toolCallId: string;
|
|
249
|
+
toolName: string;
|
|
250
|
+
result: unknown;
|
|
251
|
+
isError?: boolean;
|
|
252
|
+
} | {
|
|
253
|
+
type: "thinking:start";
|
|
254
|
+
messageId: ChatId;
|
|
255
|
+
} | {
|
|
256
|
+
type: "thinking:delta";
|
|
257
|
+
messageId: ChatId;
|
|
258
|
+
text: string;
|
|
259
|
+
} | {
|
|
260
|
+
type: "thinking:end";
|
|
261
|
+
messageId: ChatId;
|
|
262
|
+
} | {
|
|
263
|
+
type: "permission:request";
|
|
264
|
+
messageId: ChatId;
|
|
265
|
+
toolName: string;
|
|
266
|
+
toolArgs: Record<string, unknown>;
|
|
267
|
+
} | {
|
|
268
|
+
type: "permission:response";
|
|
269
|
+
messageId: ChatId;
|
|
270
|
+
toolName: string;
|
|
271
|
+
allowed: boolean;
|
|
272
|
+
} | {
|
|
273
|
+
type: "usage";
|
|
274
|
+
promptTokens: number;
|
|
275
|
+
completionTokens: number;
|
|
276
|
+
model?: string;
|
|
277
|
+
} | {
|
|
278
|
+
type: "session:created";
|
|
279
|
+
sessionId: ChatId;
|
|
280
|
+
} | {
|
|
281
|
+
type: "session:updated";
|
|
282
|
+
sessionId: ChatId;
|
|
283
|
+
} | {
|
|
284
|
+
type: "error";
|
|
285
|
+
error: string;
|
|
286
|
+
recoverable: boolean;
|
|
287
|
+
code?: ErrorCode;
|
|
288
|
+
messageId?: ChatId;
|
|
289
|
+
} | {
|
|
290
|
+
type: "typing:start";
|
|
291
|
+
} | {
|
|
292
|
+
type: "typing:end";
|
|
293
|
+
} | {
|
|
294
|
+
type: "heartbeat";
|
|
295
|
+
} | {
|
|
296
|
+
type: "done";
|
|
297
|
+
finalOutput?: string;
|
|
298
|
+
};
|
|
299
|
+
/** All possible ChatEvent type strings */
|
|
300
|
+
type ChatEventType = ChatEvent["type"];
|
|
301
|
+
/** Context passed to ChatMiddleware hooks */
|
|
302
|
+
interface ChatMiddlewareContext {
|
|
303
|
+
sessionId: ChatId;
|
|
304
|
+
signal: AbortSignal;
|
|
305
|
+
}
|
|
306
|
+
/** Runtime-level middleware for the send/receive lifecycle.
|
|
307
|
+
* Different from EventMiddleware which operates at the event bus level. */
|
|
308
|
+
interface ChatMiddleware {
|
|
309
|
+
/** Transform message before sending to backend. Return null to reject the send. */
|
|
310
|
+
onBeforeSend?(message: ChatMessage, context: ChatMiddlewareContext): ChatMessage | null | Promise<ChatMessage | null>;
|
|
311
|
+
/** Transform/intercept stream events */
|
|
312
|
+
onEvent?(event: ChatEvent, context: ChatMiddlewareContext): ChatEvent | null | Promise<ChatEvent | null>;
|
|
313
|
+
/** Transform completed message after receiving from backend */
|
|
314
|
+
onAfterReceive?(message: ChatMessage, context: ChatMiddlewareContext): ChatMessage | Promise<ChatMessage>;
|
|
315
|
+
/** Intercept errors — return null to suppress, return error to propagate */
|
|
316
|
+
onError?(error: Error, context: ChatMiddlewareContext): Error | null | Promise<Error | null>;
|
|
317
|
+
}
|
|
318
|
+
/** Options for sending a message to a provider */
|
|
319
|
+
interface SendMessageOptions {
|
|
320
|
+
signal?: AbortSignal;
|
|
321
|
+
/** Model to use for this request. Required for server-side runtime.send(). */
|
|
322
|
+
model?: string;
|
|
323
|
+
/** Per-call system prompt override (forwarded to the backend agent) */
|
|
324
|
+
systemPrompt?: string;
|
|
325
|
+
context?: Record<string, unknown>;
|
|
326
|
+
/** Additional tools to include in this request */
|
|
327
|
+
tools?: ToolDefinition[];
|
|
328
|
+
}
|
|
329
|
+
/** Options for runtime.send() — requires backend routing info */
|
|
330
|
+
interface RuntimeSendOptions {
|
|
331
|
+
/** Backend to route this request to (key in backends map) */
|
|
332
|
+
backend: string;
|
|
333
|
+
/** Authentication credentials for the backend factory */
|
|
334
|
+
credentials: AuthToken;
|
|
335
|
+
/** Model to use for this request */
|
|
336
|
+
model: string;
|
|
337
|
+
/** Per-call system prompt override (forwarded to the backend agent) */
|
|
338
|
+
systemPrompt?: string;
|
|
339
|
+
/** Abort signal */
|
|
340
|
+
signal?: AbortSignal;
|
|
341
|
+
/** Request-scoped context */
|
|
342
|
+
context?: Record<string, unknown>;
|
|
343
|
+
/** Additional tools */
|
|
344
|
+
tools?: ToolDefinition[];
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* @deprecated IChatProvider has been inlined into IChatBackend.
|
|
348
|
+
* Import IChatBackend from "@witqq/agent-sdk/chat/backends" instead.
|
|
349
|
+
* Kept as type alias for backward compatibility.
|
|
350
|
+
*/
|
|
351
|
+
type IChatProvider = IChatBackend;
|
|
352
|
+
/**
|
|
353
|
+
* Create a simple text ChatMessage.
|
|
354
|
+
*
|
|
355
|
+
* @param text - Message text content
|
|
356
|
+
* @param role - Message role (default: "user")
|
|
357
|
+
* @returns A complete ChatMessage with a single TextPart
|
|
358
|
+
*/
|
|
359
|
+
declare function createTextMessage(text: string, role?: ChatRole): ChatMessage;
|
|
360
|
+
/** Type guard: checks if a session has reactive API (subscribe/getSnapshot) */
|
|
361
|
+
declare function isObservableSession<TCustom extends Record<string, unknown> = Record<string, unknown>>(session: ChatSession<TCustom>): session is ObservableSession<TCustom>;
|
|
362
|
+
|
|
363
|
+
export { type ChatSessionMetadata as A, type BackendAdapterOptions as B, type ChatEventType as C, type FilePart as F, type IChatBackend as I, type MessageStatus as M, type ObservableSession as O, type PartStatus as P, type RuntimeStatus as R, type SendMessageOptions as S, type ToolCallStatus as T, type ChatEvent as a, type ChatId as b, type ChatMessage as c, type IResumableBackend as d, type ChatMiddleware as e, type ChatIdLike as f, type ChatSession as g, type RuntimeSendOptions as h, isResumableBackend as i, type ChatSessionConfig as j, type ChatMessageMetadata as k, type ChatMessageStatus as l, type ChatMiddlewareContext as m, type ChatRole as n, type IChatProvider as o, type MessagePart as p, type ReasoningPart as q, type SessionInfo as r, type SessionStatus as s, type SourcePart as t, type TextPart as u, type ToolCallPart as v, createChatId as w, createTextMessage as x, isObservableSession as y, toChatId as z };
|