@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
package/dist/chat/core.d.ts
CHANGED
|
@@ -1,435 +1,84 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
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 {
|
|
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/
|
|
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
|