@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.
Files changed (147) hide show
  1. package/README.md +140 -34
  2. package/dist/{types-CqvUAYxt.d.cts → agent-CW9XbmG_.d.ts} +137 -102
  3. package/dist/{types-CqvUAYxt.d.ts → agent-DxY68NZL.d.cts} +137 -102
  4. package/dist/auth/index.cjs +72 -1
  5. package/dist/auth/index.cjs.map +1 -1
  6. package/dist/auth/index.d.cts +21 -154
  7. package/dist/auth/index.d.ts +21 -154
  8. package/dist/auth/index.js +72 -1
  9. package/dist/auth/index.js.map +1 -1
  10. package/dist/backends/claude.cjs +480 -261
  11. package/dist/backends/claude.cjs.map +1 -1
  12. package/dist/backends/claude.d.cts +3 -1
  13. package/dist/backends/claude.d.ts +3 -1
  14. package/dist/backends/claude.js +480 -261
  15. package/dist/backends/claude.js.map +1 -1
  16. package/dist/backends/copilot.cjs +329 -97
  17. package/dist/backends/copilot.cjs.map +1 -1
  18. package/dist/backends/copilot.d.cts +12 -4
  19. package/dist/backends/copilot.d.ts +12 -4
  20. package/dist/backends/copilot.js +329 -97
  21. package/dist/backends/copilot.js.map +1 -1
  22. package/dist/backends/vercel-ai.cjs +294 -61
  23. package/dist/backends/vercel-ai.cjs.map +1 -1
  24. package/dist/backends/vercel-ai.d.cts +3 -1
  25. package/dist/backends/vercel-ai.d.ts +3 -1
  26. package/dist/backends/vercel-ai.js +294 -61
  27. package/dist/backends/vercel-ai.js.map +1 -1
  28. package/dist/backends-BSrsBYFn.d.cts +39 -0
  29. package/dist/backends-BSrsBYFn.d.ts +39 -0
  30. package/dist/chat/accumulator.cjs +1 -1
  31. package/dist/chat/accumulator.cjs.map +1 -1
  32. package/dist/chat/accumulator.d.cts +5 -2
  33. package/dist/chat/accumulator.d.ts +5 -2
  34. package/dist/chat/accumulator.js +1 -1
  35. package/dist/chat/accumulator.js.map +1 -1
  36. package/dist/chat/backends.cjs +736 -746
  37. package/dist/chat/backends.cjs.map +1 -1
  38. package/dist/chat/backends.d.cts +10 -6
  39. package/dist/chat/backends.d.ts +10 -6
  40. package/dist/chat/backends.js +736 -725
  41. package/dist/chat/backends.js.map +1 -1
  42. package/dist/chat/context.cjs +50 -0
  43. package/dist/chat/context.cjs.map +1 -1
  44. package/dist/chat/context.d.cts +27 -3
  45. package/dist/chat/context.d.ts +27 -3
  46. package/dist/chat/context.js +50 -0
  47. package/dist/chat/context.js.map +1 -1
  48. package/dist/chat/core.cjs +25 -2
  49. package/dist/chat/core.cjs.map +1 -1
  50. package/dist/chat/core.d.cts +30 -381
  51. package/dist/chat/core.d.ts +30 -381
  52. package/dist/chat/core.js +24 -3
  53. package/dist/chat/core.js.map +1 -1
  54. package/dist/chat/errors.cjs +48 -26
  55. package/dist/chat/errors.cjs.map +1 -1
  56. package/dist/chat/errors.d.cts +6 -31
  57. package/dist/chat/errors.d.ts +6 -31
  58. package/dist/chat/errors.js +48 -25
  59. package/dist/chat/errors.js.map +1 -1
  60. package/dist/chat/events.cjs.map +1 -1
  61. package/dist/chat/events.d.cts +6 -2
  62. package/dist/chat/events.d.ts +6 -2
  63. package/dist/chat/events.js.map +1 -1
  64. package/dist/chat/index.cjs +1199 -1008
  65. package/dist/chat/index.cjs.map +1 -1
  66. package/dist/chat/index.d.cts +35 -10
  67. package/dist/chat/index.d.ts +35 -10
  68. package/dist/chat/index.js +1196 -987
  69. package/dist/chat/index.js.map +1 -1
  70. package/dist/chat/react/theme.css +2517 -0
  71. package/dist/chat/react.cjs +2003 -1153
  72. package/dist/chat/react.cjs.map +1 -1
  73. package/dist/chat/react.d.cts +590 -121
  74. package/dist/chat/react.d.ts +590 -121
  75. package/dist/chat/react.js +1984 -1151
  76. package/dist/chat/react.js.map +1 -1
  77. package/dist/chat/runtime.cjs +401 -186
  78. package/dist/chat/runtime.cjs.map +1 -1
  79. package/dist/chat/runtime.d.cts +92 -28
  80. package/dist/chat/runtime.d.ts +92 -28
  81. package/dist/chat/runtime.js +401 -186
  82. package/dist/chat/runtime.js.map +1 -1
  83. package/dist/chat/server.cjs +2234 -209
  84. package/dist/chat/server.cjs.map +1 -1
  85. package/dist/chat/server.d.cts +451 -90
  86. package/dist/chat/server.d.ts +451 -90
  87. package/dist/chat/server.js +2221 -210
  88. package/dist/chat/server.js.map +1 -1
  89. package/dist/chat/sessions.cjs +25 -43
  90. package/dist/chat/sessions.cjs.map +1 -1
  91. package/dist/chat/sessions.d.cts +37 -118
  92. package/dist/chat/sessions.d.ts +37 -118
  93. package/dist/chat/sessions.js +25 -43
  94. package/dist/chat/sessions.js.map +1 -1
  95. package/dist/chat/sqlite.cjs +441 -0
  96. package/dist/chat/sqlite.cjs.map +1 -0
  97. package/dist/chat/sqlite.d.cts +128 -0
  98. package/dist/chat/sqlite.d.ts +128 -0
  99. package/dist/chat/sqlite.js +435 -0
  100. package/dist/chat/sqlite.js.map +1 -0
  101. package/dist/chat/state.cjs +14 -1
  102. package/dist/chat/state.cjs.map +1 -1
  103. package/dist/chat/state.d.cts +5 -2
  104. package/dist/chat/state.d.ts +5 -2
  105. package/dist/chat/state.js +14 -1
  106. package/dist/chat/state.js.map +1 -1
  107. package/dist/chat/storage.cjs +19 -10
  108. package/dist/chat/storage.cjs.map +1 -1
  109. package/dist/chat/storage.d.cts +11 -5
  110. package/dist/chat/storage.d.ts +11 -5
  111. package/dist/chat/storage.js +19 -10
  112. package/dist/chat/storage.js.map +1 -1
  113. package/dist/errors-C-so0M4t.d.cts +33 -0
  114. package/dist/errors-C-so0M4t.d.ts +33 -0
  115. package/dist/errors-CmVvczxZ.d.cts +28 -0
  116. package/dist/errors-CmVvczxZ.d.ts +28 -0
  117. package/dist/{in-process-transport-C2oPTYs6.d.ts → in-process-transport-C1JnJGVR.d.ts} +28 -23
  118. package/dist/{in-process-transport-DG-w5G6k.d.cts → in-process-transport-C7DSqPyX.d.cts} +28 -23
  119. package/dist/index.cjs +340 -46
  120. package/dist/index.cjs.map +1 -1
  121. package/dist/index.d.cts +292 -123
  122. package/dist/index.d.ts +292 -123
  123. package/dist/index.js +334 -47
  124. package/dist/index.js.map +1 -1
  125. package/dist/provider-types-PTSlRPNB.d.cts +39 -0
  126. package/dist/provider-types-PTSlRPNB.d.ts +39 -0
  127. package/dist/refresh-manager-B81PpYBr.d.cts +153 -0
  128. package/dist/refresh-manager-Dlv_iNZi.d.ts +153 -0
  129. package/dist/testing.cjs +383 -0
  130. package/dist/testing.cjs.map +1 -0
  131. package/dist/testing.d.cts +132 -0
  132. package/dist/testing.d.ts +132 -0
  133. package/dist/testing.js +377 -0
  134. package/dist/testing.js.map +1 -0
  135. package/dist/token-store-CSUBgYwn.d.ts +48 -0
  136. package/dist/token-store-CuC4hB9Z.d.cts +48 -0
  137. package/dist/{transport-DX1Nhm4N.d.cts → transport-Cdh3M0tS.d.cts} +5 -4
  138. package/dist/{transport-D1OaUgRk.d.ts → transport-Ciap4PWK.d.ts} +5 -4
  139. package/dist/{types-CGF7AEX1.d.cts → types-4vbcmPTp.d.cts} +4 -2
  140. package/dist/{types-Bh5AhqD-.d.ts → types-BxggH0Yh.d.ts} +4 -2
  141. package/dist/types-DRgd_9R7.d.cts +363 -0
  142. package/dist/types-ajANVzf7.d.ts +363 -0
  143. package/package.json +31 -6
  144. package/dist/errors-BDLbNu9w.d.cts +0 -13
  145. package/dist/errors-BDLbNu9w.d.ts +0 -13
  146. package/dist/types-DLZzlJxt.d.ts +0 -39
  147. package/dist/types-tE0CXwBl.d.cts +0 -39
@@ -1,435 +1,84 @@
1
- import { T as ToolDefinition, d as ModelInfo, U as UsageData, A as AgentEvent, M as Message, e as ToolResult } from '../types-CqvUAYxt.js';
1
+ import { c as ChatMessage, v as ToolCallPart, a as ChatEvent, g as ChatSession, F as FilePart, p as MessagePart, q as ReasoningPart, t as SourcePart, u as TextPart, b as ChatId } from '../types-ajANVzf7.js';
2
+ export { C as ChatEventType, f as ChatIdLike, k as ChatMessageMetadata, l as ChatMessageStatus, e as ChatMiddleware, m as ChatMiddlewareContext, n as ChatRole, j as ChatSessionConfig, A as ChatSessionMetadata, o as IChatProvider, M as MessageStatus, O as ObservableSession, P as PartStatus, h as RuntimeSendOptions, R as RuntimeStatus, S as SendMessageOptions, r as SessionInfo, s as SessionStatus, T as ToolCallStatus, w as createChatId, x as createTextMessage, y as isObservableSession, z as toChatId } from '../types-ajANVzf7.js';
3
+ import { A as AgentEvent, d as Message, e as ToolResult } from '../agent-CW9XbmG_.js';
4
+ import '../errors-C-so0M4t.js';
5
+ import '../types-BxggH0Yh.js';
6
+ import '../errors-CmVvczxZ.js';
2
7
  import 'zod';
3
8
 
4
9
  /**
5
- * @witqq/agent-sdk/chat/core
6
- *
7
- * Foundational chat types and utilities: ChatMessage, ChatSession, ChatEvent,
8
- * IChatProvider, type guards, and AgentEvent↔ChatEvent bridge functions.
10
+ * @witqq/agent-sdk — Chat utility functions
9
11
  */
10
12
 
11
- /** Branded type for unique identifiers */
12
- type ChatId = string & {
13
- readonly __brand: "ChatId";
14
- };
15
- /**
16
- * Generate a new unique ChatId (crypto.randomUUID-based)
17
- * @returns Branded ChatId string
18
- */
19
- declare function createChatId(): ChatId;
20
- /**
21
- * Cast a string to ChatId with UUID format validation.
22
- * Use this instead of manual `as ChatId` type assertions.
23
- *
24
- * @param value - String to validate and cast
25
- * @returns Branded ChatId
26
- * @throws {TypeError} If value is not a valid UUID v4 format
27
- *
28
- * @example
29
- * ```ts
30
- * const id = toChatId("550e8400-e29b-41d4-a716-446655440000");
31
- * ```
32
- */
33
- declare function toChatId(value: string): ChatId;
34
- /**
35
- * Accepts either a plain string or branded ChatId for API convenience.
36
- * Use this in public API signatures so consumers don't need `as ChatId` casts.
37
- */
38
- type ChatIdLike = string | ChatId;
39
- /** Lifecycle status of a message part (text, reasoning, etc.) */
40
- type PartStatus = "pending" | "streaming" | "complete" | "error";
41
- /** Lifecycle status of a tool call within a message */
42
- type ToolCallStatus = "pending" | "running" | "requires_approval" | "complete" | "error" | "denied";
43
- /** Lifecycle status of an entire message */
44
- type MessageStatus = "pending" | "streaming" | "complete" | "error" | "cancelled";
45
- /** Lifecycle status of a chat session */
46
- type SessionStatus = "active" | "archived";
47
- /** Lifecycle status of the chat runtime */
48
- type RuntimeStatus = "idle" | "streaming" | "error" | "disposed";
49
- /** Plain text content part */
50
- interface TextPart {
51
- type: "text";
52
- text: string;
53
- status: PartStatus;
54
- }
55
- /** Model reasoning/thinking content part */
56
- interface ReasoningPart {
57
- type: "reasoning";
58
- text: string;
59
- status: PartStatus;
60
- }
61
- /** Tool invocation part with call ID, arguments, optional result */
62
- interface ToolCallPart {
63
- type: "tool_call";
64
- toolCallId: string;
65
- name: string;
66
- args: unknown;
67
- result?: unknown;
68
- status: ToolCallStatus;
69
- error?: string;
70
- }
71
- /** Source reference part (URL citation) */
72
- interface SourcePart {
73
- type: "source";
74
- url: string;
75
- title?: string;
76
- status: PartStatus;
77
- }
78
- /** File attachment part (base64-encoded data) */
79
- interface FilePart {
80
- type: "file";
81
- name: string;
82
- mimeType: string;
83
- data: string;
84
- status: PartStatus;
85
- }
86
- /** Union of all message part types */
87
- type MessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart;
88
- /** Role of message author */
89
- type ChatRole = "user" | "assistant" | "system";
90
- /** Metadata attached to messages — useful preset for the TMetadata generic */
91
- interface ChatMessageMetadata {
92
- model?: string;
93
- backend?: string;
94
- usage?: UsageData;
95
- isSummary?: boolean;
96
- isArchived?: boolean;
97
- estimatedTokens?: number;
98
- custom?: Record<string, unknown>;
99
- }
100
- /** Message status */
101
- type ChatMessageStatus = MessageStatus;
102
- /** A single chat message — the fundamental unit of conversation */
103
- interface ChatMessage<TMetadata = unknown> {
104
- id: ChatId;
105
- role: ChatRole;
106
- parts: MessagePart[];
107
- metadata?: TMetadata;
108
- createdAt: string;
109
- updatedAt?: string;
110
- status: MessageStatus;
111
- }
112
13
  /**
113
14
  * Join all TextPart texts in a message
114
- * @param message - The chat message to extract text from
115
- * @returns Concatenated text content
116
15
  */
117
16
  declare function getMessageText(message: ChatMessage): string;
118
17
  /**
119
18
  * Filter all ToolCallParts from a message
120
- * @param message - The chat message to extract tool calls from
121
- * @returns Array of ToolCallPart
122
19
  */
123
20
  declare function getMessageToolCalls(message: ChatMessage): ToolCallPart[];
124
21
  /**
125
22
  * Join all ReasoningPart texts in a message
126
- * @param message - The chat message to extract reasoning from
127
- * @returns Concatenated reasoning content
128
23
  */
129
24
  declare function getMessageReasoning(message: ChatMessage): string;
130
- /** Options for sending a message */
131
- interface SendOpts {
132
- sessionId?: string;
133
- model?: string;
134
- signal?: AbortSignal;
135
- metadata?: Record<string, unknown>;
136
- }
137
- /** Options for creating a new session */
138
- interface CreateSessionOpts {
139
- id?: string;
140
- title?: string;
141
- model?: string;
142
- metadata?: Record<string, unknown>;
143
- }
144
- /** Options for listing sessions with pagination */
145
- interface ListOpts {
146
- limit?: number;
147
- offset?: number;
148
- status?: SessionStatus;
149
- }
150
- /** Options for backend execution (model, tokens, tools) */
151
- interface BackendOpts {
152
- model: string;
153
- signal?: AbortSignal;
154
- systemPrompt?: string;
155
- temperature?: number;
156
- maxTokens?: number;
157
- tools?: Record<string, unknown>;
158
- providerOptions?: Record<string, unknown>;
159
- }
160
- /** Context passed to tool execute functions */
161
- interface ToolContext {
162
- sessionId: string;
163
- userId?: string;
164
- signal: AbortSignal;
165
- }
166
- /** Configuration for creating a chat runtime */
167
- interface ChatRuntimeConfig {
168
- backend: string;
169
- model?: string;
170
- apiKey?: string;
171
- baseUrl?: string;
172
- context?: {
173
- maxTokens?: number;
174
- reserveTokens?: number;
175
- strategy?: "sliding" | "summarize" | "truncate";
176
- };
177
- retry?: {
178
- maxRetries?: number;
179
- initialDelay?: number;
180
- backoffFactor?: number;
181
- };
182
- providerOptions?: Record<string, unknown>;
183
- }
184
- /** Session configuration snapshot */
185
- interface ChatSessionConfig {
186
- model: string;
187
- backend: string;
188
- systemPrompt?: string;
189
- temperature?: number;
190
- maxTokens?: number;
191
- }
192
- /** Session metadata */
193
- interface ChatSessionMetadata<TCustom extends Record<string, unknown> = Record<string, unknown>> {
194
- messageCount: number;
195
- totalTokens: number;
196
- tags?: string[];
197
- custom?: TCustom;
198
- }
199
- /** Chat session — a conversation with ordered messages */
200
- interface ChatSession<TCustom extends Record<string, unknown> = Record<string, unknown>> {
201
- id: ChatId;
202
- title?: string;
203
- messages: ChatMessage[];
204
- config: ChatSessionConfig;
205
- metadata: ChatSessionMetadata<TCustom>;
206
- status: SessionStatus;
207
- createdAt: string;
208
- updatedAt: string;
209
- backendSessionId?: string;
210
- /** Subscribe to session changes (for React useSyncExternalStore) */
211
- subscribe?(callback: () => void): () => void;
212
- /** Get immutable snapshot of session state (for React useSyncExternalStore) */
213
- getSnapshot?(): ChatSession<TCustom>;
214
- /** Last message in the session */
215
- readonly lastMessage?: ChatMessage;
216
- }
217
- /** Lightweight session info for listing (without full message array) */
218
- interface SessionInfo {
219
- id: ChatId;
220
- title?: string;
221
- status: SessionStatus;
222
- messageCount: number;
223
- lastMessage?: ChatMessage;
224
- createdAt: string;
225
- updatedAt: string;
226
- }
227
- /** Events emitted during chat operation */
228
- type ChatEvent = {
229
- type: "message:start";
230
- messageId: ChatId;
231
- role: ChatRole;
232
- } | {
233
- type: "message:delta";
234
- messageId: ChatId;
235
- text: string;
236
- } | {
237
- type: "message:complete";
238
- messageId: ChatId;
239
- message: ChatMessage;
240
- } | {
241
- type: "tool:start";
242
- messageId: ChatId;
243
- toolCallId: string;
244
- toolName: string;
245
- args: Record<string, unknown>;
246
- } | {
247
- type: "tool:complete";
248
- messageId: ChatId;
249
- toolCallId: string;
250
- toolName: string;
251
- result: unknown;
252
- isError?: boolean;
253
- } | {
254
- type: "thinking:start";
255
- messageId: ChatId;
256
- } | {
257
- type: "thinking:delta";
258
- messageId: ChatId;
259
- text: string;
260
- } | {
261
- type: "thinking:end";
262
- messageId: ChatId;
263
- } | {
264
- type: "permission:request";
265
- messageId: ChatId;
266
- toolName: string;
267
- toolArgs: Record<string, unknown>;
268
- } | {
269
- type: "permission:response";
270
- messageId: ChatId;
271
- toolName: string;
272
- allowed: boolean;
273
- } | {
274
- type: "usage";
275
- promptTokens: number;
276
- completionTokens: number;
277
- model?: string;
278
- } | {
279
- type: "session:created";
280
- sessionId: ChatId;
281
- } | {
282
- type: "session:updated";
283
- sessionId: ChatId;
284
- } | {
285
- type: "error";
286
- error: string;
287
- recoverable: boolean;
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 */
310
- onBeforeSend?(message: ChatMessage, context: ChatMiddlewareContext): ChatMessage | Promise<ChatMessage>;
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?: string;
322
- context?: Record<string, unknown>;
323
- /** Additional tools to include in this request */
324
- tools?: ToolDefinition[];
325
- }
326
- /** Abstract chat provider — wraps an IAgentService for chat use */
327
- interface IChatProvider {
328
- readonly name: string;
329
- sendMessage(session: ChatSession, message: string, options?: SendMessageOptions): Promise<ChatMessage>;
330
- streamMessage(session: ChatSession, message: string, options?: SendMessageOptions): AsyncIterable<ChatEvent>;
331
- listModels(): Promise<ModelInfo[]>;
332
- validate(): Promise<{
333
- valid: boolean;
334
- errors: string[];
335
- }>;
336
- dispose(): Promise<void>;
337
- }
25
+
338
26
  /**
339
- * Check if a value is a ChatMessage
340
- * @param value - Value to check
341
- * @returns True if value has ChatMessage shape
27
+ * @witqq/agent-sdk Chat type guards
342
28
  */
29
+
30
+ /** Check if a value is a ChatMessage */
343
31
  declare function isChatMessage(value: unknown): value is ChatMessage;
344
- /**
345
- * Check if a value is a ChatSession
346
- * @param value - Value to check
347
- * @returns True if value has ChatSession shape
348
- */
32
+ /** Check if a value is a ChatSession */
349
33
  declare function isChatSession(value: unknown): value is ChatSession;
350
- /**
351
- * Check if a value is a MessagePart
352
- * @param value - Value to check
353
- * @returns True if value has MessagePart shape
354
- */
34
+ /** Check if a value is a MessagePart */
355
35
  declare function isMessagePart(value: unknown): value is MessagePart;
356
- /**
357
- * Check if a value is a TextPart
358
- * @param value - Value to check
359
- * @returns True if value is a TextPart
360
- */
36
+ /** Check if a value is a TextPart */
361
37
  declare function isTextPart(value: unknown): value is TextPart;
362
- /**
363
- * Check if a value is a ToolCallPart
364
- * @param value - Value to check
365
- * @returns True if value is a ToolCallPart
366
- */
38
+ /** Check if a value is a ToolCallPart */
367
39
  declare function isToolCallPart(value: unknown): value is ToolCallPart;
368
- /**
369
- * Check if a value is a ReasoningPart
370
- * @param value - Value to check
371
- * @returns True if value is a ReasoningPart
372
- */
40
+ /** Check if a value is a ReasoningPart */
373
41
  declare function isReasoningPart(value: unknown): value is ReasoningPart;
374
- /**
375
- * Check if a value is a SourcePart
376
- * @param value - Value to check
377
- * @returns True if value is a SourcePart
378
- */
42
+ /** Check if a value is a SourcePart */
379
43
  declare function isSourcePart(value: unknown): value is SourcePart;
380
- /**
381
- * Check if a value is a FilePart
382
- * @param value - Value to check
383
- * @returns True if value is a FilePart
384
- */
44
+ /** Check if a value is a FilePart */
385
45
  declare function isFilePart(value: unknown): value is FilePart;
46
+ /** Check if a value is a ChatEvent */
47
+ declare function isChatEvent(value: unknown): value is ChatEvent;
48
+
386
49
  /**
387
- * Check if a value is a ChatEvent
388
- * @param value - Value to check
389
- * @returns True if value has a valid ChatEvent type
50
+ * @witqq/agent-sdk AgentEvent ChatEvent bridge
390
51
  */
391
- declare function isChatEvent(value: unknown): value is ChatEvent;
52
+
392
53
  /**
393
54
  * Map a single AgentEvent to a ChatEvent (or null if no mapping)
394
- * @param event - The AgentEvent to convert
395
- * @param messageId - ChatId to associate with the event
396
- * @returns Corresponding ChatEvent or null if unmappable
397
55
  */
398
56
  declare function agentEventToChatEvent(event: AgentEvent, messageId: ChatId): ChatEvent | null;
399
57
  /**
400
58
  * Convert AgentEvent async iterable to ChatEvent async iterable
401
- * @param events - Source agent events
402
- * @param messageId - ChatId to associate with converted events
403
- * @returns Async iterable of ChatEvent (nulls filtered out)
404
59
  */
405
60
  declare function adaptAgentEvents(events: AsyncIterable<AgentEvent>, messageId: ChatId): AsyncIterable<ChatEvent>;
406
61
  /**
407
62
  * Map a ChatEvent back to an AgentEvent for accumulator consumption.
408
- * Returns null for events that don't map to accumulator-relevant AgentEvents
409
- * (e.g. message:start, message:complete, usage, permission:*, heartbeat).
410
- *
411
- * @param event - The ChatEvent to convert
412
- * @returns Corresponding AgentEvent or null if not accumulator-relevant
63
+ * Returns null for events that don't map to accumulator-relevant AgentEvents.
413
64
  */
414
65
  declare function chatEventToAgentEvent(event: ChatEvent): AgentEvent | null;
66
+
67
+ /**
68
+ * @witqq/agent-sdk — ChatMessage ↔ agent-sdk Message conversion
69
+ */
70
+
415
71
  /**
416
72
  * Convert a ChatMessage to agent-sdk Message format
417
- * @param message - The ChatMessage to convert
418
- * @returns agent-sdk Message
419
73
  */
420
74
  declare function toAgentMessage(message: ChatMessage): Message;
421
75
  /**
422
76
  * Convert an agent-sdk Message to ChatMessage
423
- * @param message - The agent-sdk Message to convert
424
- * @param id - Optional ChatId (auto-generated if omitted)
425
- * @returns ChatMessage with status "complete"
426
77
  */
427
78
  declare function fromAgentMessage(message: Message, id?: ChatId): ChatMessage;
428
79
  /**
429
80
  * Extract ToolResults from ToolCallParts that have results
430
- * @param message - The ChatMessage to extract results from
431
- * @returns Array of ToolResult for completed tool calls
432
81
  */
433
82
  declare function extractToolResults(message: ChatMessage): ToolResult[];
434
83
 
435
- export { type BackendOpts, type ChatEvent, type ChatEventType, type ChatId, type ChatIdLike, type ChatMessage, type ChatMessageMetadata, type ChatMessageStatus, type ChatMiddleware, type ChatMiddlewareContext, type ChatRole, type ChatRuntimeConfig, type ChatSession, type ChatSessionConfig, type ChatSessionMetadata, type CreateSessionOpts, type FilePart, type IChatProvider, type ListOpts, type MessagePart, type MessageStatus, type PartStatus, type ReasoningPart, type RuntimeStatus, type SendMessageOptions, type SendOpts, type SessionInfo, type SessionStatus, type SourcePart, type TextPart, type ToolCallPart, type ToolCallStatus, type ToolContext, adaptAgentEvents, agentEventToChatEvent, chatEventToAgentEvent, createChatId, extractToolResults, fromAgentMessage, getMessageReasoning, getMessageText, getMessageToolCalls, isChatEvent, isChatMessage, isChatSession, isFilePart, isMessagePart, isReasoningPart, isSourcePart, isTextPart, isToolCallPart, toAgentMessage, toChatId };
84
+ export { ChatEvent, ChatId, ChatMessage, ChatSession, FilePart, MessagePart, ReasoningPart, SourcePart, TextPart, ToolCallPart, adaptAgentEvents, agentEventToChatEvent, chatEventToAgentEvent, extractToolResults, fromAgentMessage, getMessageReasoning, getMessageText, getMessageToolCalls, isChatEvent, isChatMessage, isChatSession, isFilePart, isMessagePart, isReasoningPart, isSourcePart, isTextPart, isToolCallPart, toAgentMessage };
package/dist/chat/core.js CHANGED
@@ -1,4 +1,4 @@
1
- // src/chat/core.ts
1
+ // src/chat/types.ts
2
2
  function createChatId() {
3
3
  return crypto.randomUUID();
4
4
  }
@@ -9,6 +9,20 @@ function toChatId(value) {
9
9
  }
10
10
  return value;
11
11
  }
12
+ function createTextMessage(text, role = "user") {
13
+ return {
14
+ id: createChatId(),
15
+ role,
16
+ parts: [{ type: "text", text, status: "complete" }],
17
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
18
+ status: "complete"
19
+ };
20
+ }
21
+ function isObservableSession(session) {
22
+ return "subscribe" in session && typeof session.subscribe === "function" && "getSnapshot" in session && typeof session.getSnapshot === "function";
23
+ }
24
+
25
+ // src/chat/chat-utils.ts
12
26
  function getMessageText(message) {
13
27
  return message.parts.filter((p) => p.type === "text").map((p) => p.text).join("");
14
28
  }
@@ -18,6 +32,8 @@ function getMessageToolCalls(message) {
18
32
  function getMessageReasoning(message) {
19
33
  return message.parts.filter((p) => p.type === "reasoning").map((p) => p.text).join("");
20
34
  }
35
+
36
+ // src/chat/guards.ts
21
37
  function isChatMessage(value) {
22
38
  if (typeof value !== "object" || value === null) return false;
23
39
  const obj = value;
@@ -83,6 +99,8 @@ function isChatEvent(value) {
83
99
  ];
84
100
  return validTypes.includes(obj.type);
85
101
  }
102
+
103
+ // src/chat/bridge.ts
86
104
  function agentEventToChatEvent(event, messageId) {
87
105
  switch (event.type) {
88
106
  case "text_delta":
@@ -135,6 +153,7 @@ function agentEventToChatEvent(event, messageId) {
135
153
  type: "error",
136
154
  error: event.error,
137
155
  recoverable: event.recoverable,
156
+ code: event.code,
138
157
  messageId
139
158
  };
140
159
  case "heartbeat":
@@ -181,11 +200,13 @@ function chatEventToAgentEvent(event) {
181
200
  result: event.result
182
201
  };
183
202
  case "error":
184
- return { type: "error", error: event.error, recoverable: event.recoverable };
203
+ return { type: "error", error: event.error, recoverable: event.recoverable, code: event.code };
185
204
  default:
186
205
  return null;
187
206
  }
188
207
  }
208
+
209
+ // src/chat/conversion.ts
189
210
  function toAgentMessage(message) {
190
211
  const textContent = getMessageText(message);
191
212
  const toolCallParts = getMessageToolCalls(message);
@@ -256,6 +277,6 @@ function extractToolResults(message) {
256
277
  }));
257
278
  }
258
279
 
259
- export { adaptAgentEvents, agentEventToChatEvent, chatEventToAgentEvent, createChatId, extractToolResults, fromAgentMessage, getMessageReasoning, getMessageText, getMessageToolCalls, isChatEvent, isChatMessage, isChatSession, isFilePart, isMessagePart, isReasoningPart, isSourcePart, isTextPart, isToolCallPart, toAgentMessage, toChatId };
280
+ export { adaptAgentEvents, agentEventToChatEvent, chatEventToAgentEvent, createChatId, createTextMessage, extractToolResults, fromAgentMessage, getMessageReasoning, getMessageText, getMessageToolCalls, isChatEvent, isChatMessage, isChatSession, isFilePart, isMessagePart, isObservableSession, isReasoningPart, isSourcePart, isTextPart, isToolCallPart, toAgentMessage, toChatId };
260
281
  //# sourceMappingURL=core.js.map
261
282
  //# sourceMappingURL=core.js.map