agents 0.0.0-ca5cdf0 → 0.0.0-cb5957e
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 +255 -27
- package/dist/_esm-LV5FJ3HK.js +3922 -0
- package/dist/_esm-LV5FJ3HK.js.map +1 -0
- package/dist/ai-chat-agent.d.ts +12 -7
- package/dist/ai-chat-agent.js +462 -48
- package/dist/ai-chat-agent.js.map +1 -1
- package/dist/ai-chat-v5-migration.d.ts +152 -0
- package/dist/ai-chat-v5-migration.js +20 -0
- package/dist/ai-chat-v5-migration.js.map +1 -0
- package/dist/ai-react.d.ts +68 -70
- package/dist/ai-react.js +252 -99
- package/dist/ai-react.js.map +1 -1
- package/dist/ai-types.d.ts +37 -19
- package/dist/ai-types.js +7 -0
- package/dist/ccip-CMBYN64O.js +15 -0
- package/dist/ccip-CMBYN64O.js.map +1 -0
- package/dist/chunk-254F4GDT.js +1343 -0
- package/dist/chunk-254F4GDT.js.map +1 -0
- package/dist/chunk-3OT2NNEW.js +941 -0
- package/dist/chunk-3OT2NNEW.js.map +1 -0
- package/dist/chunk-5Y6BEZDY.js +276 -0
- package/dist/chunk-5Y6BEZDY.js.map +1 -0
- package/dist/chunk-BER7KXUJ.js +18 -0
- package/dist/chunk-BER7KXUJ.js.map +1 -0
- package/dist/chunk-JJBFIGUC.js +5202 -0
- package/dist/chunk-JJBFIGUC.js.map +1 -0
- package/dist/chunk-PR4QN5HX.js +43 -0
- package/dist/chunk-PR4QN5HX.js.map +1 -0
- package/dist/{chunk-NKZZ66QY.js → chunk-QEVM4BVL.js} +5 -5
- package/dist/chunk-QEVM4BVL.js.map +1 -0
- package/dist/chunk-TYAY6AU6.js +159 -0
- package/dist/chunk-TYAY6AU6.js.map +1 -0
- package/dist/chunk-UJVEAURM.js +150 -0
- package/dist/chunk-UJVEAURM.js.map +1 -0
- package/dist/{chunk-767EASBA.js → chunk-Z44WASMA.js} +11 -3
- package/dist/chunk-Z44WASMA.js.map +1 -0
- package/dist/client-DVoPb3-C.d.ts +5120 -0
- package/dist/client.d.ts +2 -2
- package/dist/client.js +3 -1
- package/dist/codemode/ai.d.ts +25 -0
- package/dist/codemode/ai.js +5112 -0
- package/dist/codemode/ai.js.map +1 -0
- package/dist/index.d.ts +196 -51
- package/dist/index.js +14 -4
- package/dist/mcp/client.d.ts +10 -1053
- package/dist/mcp/client.js +2 -1
- package/dist/mcp/do-oauth-client-provider.d.ts +1 -0
- package/dist/mcp/do-oauth-client-provider.js +2 -1
- package/dist/mcp/index.d.ts +58 -63
- package/dist/mcp/index.js +953 -637
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/x402.d.ts +39 -0
- package/dist/mcp/x402.js +3195 -0
- package/dist/mcp/x402.js.map +1 -0
- package/dist/mcp-BH1fJeiU.d.ts +58 -0
- package/dist/observability/index.d.ts +34 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/react.d.ts +18 -10
- package/dist/react.js +107 -7
- package/dist/react.js.map +1 -1
- package/dist/schedule.d.ts +79 -5
- package/dist/schedule.js +17 -2
- package/dist/schedule.js.map +1 -1
- package/dist/secp256k1-M22GZP2U.js +2193 -0
- package/dist/secp256k1-M22GZP2U.js.map +1 -0
- package/package.json +38 -9
- package/src/index.ts +949 -175
- package/dist/chunk-4CIGD73X.js +0 -791
- package/dist/chunk-4CIGD73X.js.map +0 -1
- package/dist/chunk-767EASBA.js.map +0 -1
- package/dist/chunk-E3LCYPCB.js +0 -469
- package/dist/chunk-E3LCYPCB.js.map +0 -1
- package/dist/chunk-NKZZ66QY.js.map +0 -1
package/dist/ai-chat-agent.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
autoTransformMessages
|
|
3
|
+
} from "./chunk-UJVEAURM.js";
|
|
1
4
|
import {
|
|
2
5
|
Agent
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-254F4GDT.js";
|
|
7
|
+
import "./chunk-3OT2NNEW.js";
|
|
8
|
+
import "./chunk-Z44WASMA.js";
|
|
9
|
+
import "./chunk-QEVM4BVL.js";
|
|
10
|
+
import "./chunk-BER7KXUJ.js";
|
|
11
|
+
import "./chunk-PR4QN5HX.js";
|
|
7
12
|
|
|
8
13
|
// src/ai-chat-agent.ts
|
|
9
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
getToolName,
|
|
16
|
+
isToolUIPart,
|
|
17
|
+
parsePartialJson
|
|
18
|
+
} from "ai";
|
|
10
19
|
var decoder = new TextDecoder();
|
|
11
20
|
var AIChatAgent = class extends Agent {
|
|
12
21
|
constructor(ctx, env) {
|
|
@@ -16,9 +25,10 @@ var AIChatAgent = class extends Agent {
|
|
|
16
25
|
message text not null,
|
|
17
26
|
created_at datetime default current_timestamp
|
|
18
27
|
)`;
|
|
19
|
-
|
|
28
|
+
const rawMessages = (this.sql`select * from cf_ai_chat_agent_messages` || []).map((row) => {
|
|
20
29
|
return JSON.parse(row.message);
|
|
21
30
|
});
|
|
31
|
+
this.messages = autoTransformMessages(rawMessages);
|
|
22
32
|
this._chatMessageAbortControllers = /* @__PURE__ */ new Map();
|
|
23
33
|
}
|
|
24
34
|
_broadcastChatMessage(message, exclude) {
|
|
@@ -32,7 +42,7 @@ var AIChatAgent = class extends Agent {
|
|
|
32
42
|
} catch (_error) {
|
|
33
43
|
return;
|
|
34
44
|
}
|
|
35
|
-
if (data.type === "cf_agent_use_chat_request" && data.init.method === "POST") {
|
|
45
|
+
if (data.type === "cf_agent_use_chat_request" /* CF_AGENT_USE_CHAT_REQUEST */ && data.init.method === "POST") {
|
|
36
46
|
const {
|
|
37
47
|
// method,
|
|
38
48
|
// keepalive,
|
|
@@ -45,25 +55,41 @@ var AIChatAgent = class extends Agent {
|
|
|
45
55
|
// duplex
|
|
46
56
|
} = data.init;
|
|
47
57
|
const { messages } = JSON.parse(body);
|
|
58
|
+
const transformedMessages = autoTransformMessages(messages);
|
|
48
59
|
this._broadcastChatMessage(
|
|
49
60
|
{
|
|
50
|
-
messages,
|
|
51
|
-
type: "cf_agent_chat_messages"
|
|
61
|
+
messages: transformedMessages,
|
|
62
|
+
type: "cf_agent_chat_messages" /* CF_AGENT_CHAT_MESSAGES */
|
|
52
63
|
},
|
|
53
64
|
[connection.id]
|
|
54
65
|
);
|
|
55
|
-
await this.persistMessages(
|
|
66
|
+
await this.persistMessages(transformedMessages, [connection.id]);
|
|
67
|
+
this.observability?.emit(
|
|
68
|
+
{
|
|
69
|
+
displayMessage: "Chat message request",
|
|
70
|
+
id: data.id,
|
|
71
|
+
payload: {},
|
|
72
|
+
timestamp: Date.now(),
|
|
73
|
+
type: "message:request"
|
|
74
|
+
},
|
|
75
|
+
this.ctx
|
|
76
|
+
);
|
|
56
77
|
const chatMessageId = data.id;
|
|
57
78
|
const abortSignal = this._getAbortSignal(chatMessageId);
|
|
58
79
|
return this._tryCatchChat(async () => {
|
|
59
80
|
const response = await this.onChatMessage(
|
|
60
|
-
async (
|
|
61
|
-
const finalMessages = appendResponseMessages({
|
|
62
|
-
messages,
|
|
63
|
-
responseMessages: response2.messages
|
|
64
|
-
});
|
|
65
|
-
await this.persistMessages(finalMessages, [connection.id]);
|
|
81
|
+
async (_finishResult) => {
|
|
66
82
|
this._removeAbortController(chatMessageId);
|
|
83
|
+
this.observability?.emit(
|
|
84
|
+
{
|
|
85
|
+
displayMessage: "Chat message response",
|
|
86
|
+
id: data.id,
|
|
87
|
+
payload: {},
|
|
88
|
+
timestamp: Date.now(),
|
|
89
|
+
type: "message:response"
|
|
90
|
+
},
|
|
91
|
+
this.ctx
|
|
92
|
+
);
|
|
67
93
|
},
|
|
68
94
|
abortSignal ? { abortSignal } : void 0
|
|
69
95
|
);
|
|
@@ -78,26 +104,27 @@ var AIChatAgent = class extends Agent {
|
|
|
78
104
|
body: "No response was generated by the agent.",
|
|
79
105
|
done: true,
|
|
80
106
|
id: data.id,
|
|
81
|
-
type: "cf_agent_use_chat_response"
|
|
107
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
82
108
|
},
|
|
83
109
|
[connection.id]
|
|
84
110
|
);
|
|
85
111
|
}
|
|
86
112
|
});
|
|
87
113
|
}
|
|
88
|
-
if (data.type === "cf_agent_chat_clear") {
|
|
114
|
+
if (data.type === "cf_agent_chat_clear" /* CF_AGENT_CHAT_CLEAR */) {
|
|
89
115
|
this._destroyAbortControllers();
|
|
90
116
|
this.sql`delete from cf_ai_chat_agent_messages`;
|
|
91
117
|
this.messages = [];
|
|
92
118
|
this._broadcastChatMessage(
|
|
93
119
|
{
|
|
94
|
-
type: "cf_agent_chat_clear"
|
|
120
|
+
type: "cf_agent_chat_clear" /* CF_AGENT_CHAT_CLEAR */
|
|
95
121
|
},
|
|
96
122
|
[connection.id]
|
|
97
123
|
);
|
|
98
|
-
} else if (data.type === "cf_agent_chat_messages") {
|
|
99
|
-
|
|
100
|
-
|
|
124
|
+
} else if (data.type === "cf_agent_chat_messages" /* CF_AGENT_CHAT_MESSAGES */) {
|
|
125
|
+
const transformedMessages = autoTransformMessages(data.messages);
|
|
126
|
+
await this.persistMessages(transformedMessages, [connection.id]);
|
|
127
|
+
} else if (data.type === "cf_agent_chat_request_cancel" /* CF_AGENT_CHAT_REQUEST_CANCEL */) {
|
|
101
128
|
this._cancelChatRequest(data.id);
|
|
102
129
|
}
|
|
103
130
|
}
|
|
@@ -133,24 +160,11 @@ var AIChatAgent = class extends Agent {
|
|
|
133
160
|
);
|
|
134
161
|
}
|
|
135
162
|
/**
|
|
136
|
-
* Save messages on the server side
|
|
163
|
+
* Save messages on the server side
|
|
137
164
|
* @param messages Chat messages to save
|
|
138
165
|
*/
|
|
139
166
|
async saveMessages(messages) {
|
|
140
167
|
await this.persistMessages(messages);
|
|
141
|
-
const response = await this.onChatMessage(async ({ response: response2 }) => {
|
|
142
|
-
const finalMessages = appendResponseMessages({
|
|
143
|
-
messages,
|
|
144
|
-
responseMessages: response2.messages
|
|
145
|
-
});
|
|
146
|
-
await this.persistMessages(finalMessages, []);
|
|
147
|
-
});
|
|
148
|
-
if (response) {
|
|
149
|
-
for await (const chunk of response.body) {
|
|
150
|
-
decoder.decode(chunk);
|
|
151
|
-
}
|
|
152
|
-
response.body?.cancel();
|
|
153
|
-
}
|
|
154
168
|
}
|
|
155
169
|
async persistMessages(messages, excludeBroadcastIds = []) {
|
|
156
170
|
this.sql`delete from cf_ai_chat_agent_messages`;
|
|
@@ -161,28 +175,428 @@ var AIChatAgent = class extends Agent {
|
|
|
161
175
|
this._broadcastChatMessage(
|
|
162
176
|
{
|
|
163
177
|
messages,
|
|
164
|
-
type: "cf_agent_chat_messages"
|
|
178
|
+
type: "cf_agent_chat_messages" /* CF_AGENT_CHAT_MESSAGES */
|
|
165
179
|
},
|
|
166
180
|
excludeBroadcastIds
|
|
167
181
|
);
|
|
168
182
|
}
|
|
169
183
|
async _reply(id, response) {
|
|
170
184
|
return this._tryCatchChat(async () => {
|
|
171
|
-
|
|
172
|
-
const body = decoder.decode(chunk);
|
|
185
|
+
if (!response.body) {
|
|
173
186
|
this._broadcastChatMessage({
|
|
174
|
-
body,
|
|
175
|
-
done:
|
|
187
|
+
body: "",
|
|
188
|
+
done: true,
|
|
176
189
|
id,
|
|
177
|
-
type: "cf_agent_use_chat_response"
|
|
190
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
178
191
|
});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const reader = response.body.getReader();
|
|
195
|
+
const message = {
|
|
196
|
+
id: `assistant_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`,
|
|
197
|
+
// default
|
|
198
|
+
role: "assistant",
|
|
199
|
+
parts: []
|
|
200
|
+
};
|
|
201
|
+
let activeTextParts = {};
|
|
202
|
+
let activeReasoningParts = {};
|
|
203
|
+
const partialToolCalls = {};
|
|
204
|
+
function updateDynamicToolPart(options) {
|
|
205
|
+
const part = message.parts.find(
|
|
206
|
+
(part2) => part2.type === "dynamic-tool" && part2.toolCallId === options.toolCallId
|
|
207
|
+
);
|
|
208
|
+
const anyOptions = options;
|
|
209
|
+
const anyPart = part;
|
|
210
|
+
if (part != null) {
|
|
211
|
+
part.state = options.state;
|
|
212
|
+
anyPart.toolName = options.toolName;
|
|
213
|
+
anyPart.input = anyOptions.input;
|
|
214
|
+
anyPart.output = anyOptions.output;
|
|
215
|
+
anyPart.errorText = anyOptions.errorText;
|
|
216
|
+
anyPart.rawInput = anyOptions.rawInput ?? anyPart.rawInput;
|
|
217
|
+
anyPart.preliminary = anyOptions.preliminary;
|
|
218
|
+
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
|
219
|
+
part.callProviderMetadata = anyOptions.providerMetadata;
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
message.parts.push({
|
|
223
|
+
type: "dynamic-tool",
|
|
224
|
+
toolName: options.toolName,
|
|
225
|
+
toolCallId: options.toolCallId,
|
|
226
|
+
state: options.state,
|
|
227
|
+
input: anyOptions.input,
|
|
228
|
+
output: anyOptions.output,
|
|
229
|
+
errorText: anyOptions.errorText,
|
|
230
|
+
preliminary: anyOptions.preliminary,
|
|
231
|
+
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function updateToolPart(options) {
|
|
236
|
+
const part = message.parts.find(
|
|
237
|
+
(part2) => isToolUIPart(part2) && part2.toolCallId === options.toolCallId
|
|
238
|
+
);
|
|
239
|
+
const anyOptions = options;
|
|
240
|
+
const anyPart = part;
|
|
241
|
+
if (part != null) {
|
|
242
|
+
part.state = options.state;
|
|
243
|
+
anyPart.input = anyOptions.input;
|
|
244
|
+
anyPart.output = anyOptions.output;
|
|
245
|
+
anyPart.errorText = anyOptions.errorText;
|
|
246
|
+
anyPart.rawInput = anyOptions.rawInput;
|
|
247
|
+
anyPart.preliminary = anyOptions.preliminary;
|
|
248
|
+
anyPart.providerExecuted = anyOptions.providerExecuted ?? part.providerExecuted;
|
|
249
|
+
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
|
250
|
+
part.callProviderMetadata = anyOptions.providerMetadata;
|
|
251
|
+
}
|
|
252
|
+
} else {
|
|
253
|
+
message.parts.push({
|
|
254
|
+
type: `tool-${options.toolName}`,
|
|
255
|
+
toolCallId: options.toolCallId,
|
|
256
|
+
state: options.state,
|
|
257
|
+
input: anyOptions.input,
|
|
258
|
+
output: anyOptions.output,
|
|
259
|
+
rawInput: anyOptions.rawInput,
|
|
260
|
+
errorText: anyOptions.errorText,
|
|
261
|
+
providerExecuted: anyOptions.providerExecuted,
|
|
262
|
+
preliminary: anyOptions.preliminary,
|
|
263
|
+
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
async function updateMessageMetadata(metadata) {
|
|
268
|
+
if (metadata != null) {
|
|
269
|
+
const mergedMetadata = message.metadata != null ? { ...message.metadata, ...metadata } : metadata;
|
|
270
|
+
message.metadata = mergedMetadata;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
try {
|
|
274
|
+
while (true) {
|
|
275
|
+
const { done, value } = await reader.read();
|
|
276
|
+
if (done) {
|
|
277
|
+
this._broadcastChatMessage({
|
|
278
|
+
body: "",
|
|
279
|
+
done: true,
|
|
280
|
+
id,
|
|
281
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
282
|
+
});
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
const chunk = decoder.decode(value);
|
|
286
|
+
const contentType = response.headers.get("content-type") || "";
|
|
287
|
+
const isSSE = contentType.includes("text/event-stream");
|
|
288
|
+
if (isSSE) {
|
|
289
|
+
const lines = chunk.split("\n");
|
|
290
|
+
for (const line of lines) {
|
|
291
|
+
if (line.startsWith("data: ") && line !== "data: [DONE]") {
|
|
292
|
+
try {
|
|
293
|
+
const data = JSON.parse(line.slice(6));
|
|
294
|
+
switch (data.type) {
|
|
295
|
+
case "text-start": {
|
|
296
|
+
const textPart = {
|
|
297
|
+
type: "text",
|
|
298
|
+
text: "",
|
|
299
|
+
providerMetadata: data.providerMetadata,
|
|
300
|
+
state: "streaming"
|
|
301
|
+
};
|
|
302
|
+
activeTextParts[data.id] = textPart;
|
|
303
|
+
message.parts.push(textPart);
|
|
304
|
+
break;
|
|
305
|
+
}
|
|
306
|
+
case "text-delta": {
|
|
307
|
+
const textPart = activeTextParts[data.id];
|
|
308
|
+
textPart.text += data.delta;
|
|
309
|
+
textPart.providerMetadata = data.providerMetadata ?? textPart.providerMetadata;
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
case "text-end": {
|
|
313
|
+
const textPart = activeTextParts[data.id];
|
|
314
|
+
textPart.state = "done";
|
|
315
|
+
textPart.providerMetadata = data.providerMetadata ?? textPart.providerMetadata;
|
|
316
|
+
delete activeTextParts[data.id];
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
case "reasoning-start": {
|
|
320
|
+
const reasoningPart = {
|
|
321
|
+
type: "reasoning",
|
|
322
|
+
text: "",
|
|
323
|
+
providerMetadata: data.providerMetadata,
|
|
324
|
+
state: "streaming"
|
|
325
|
+
};
|
|
326
|
+
activeReasoningParts[data.id] = reasoningPart;
|
|
327
|
+
message.parts.push(reasoningPart);
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
case "reasoning-delta": {
|
|
331
|
+
const reasoningPart = activeReasoningParts[data.id];
|
|
332
|
+
reasoningPart.text += data.delta;
|
|
333
|
+
reasoningPart.providerMetadata = data.providerMetadata ?? reasoningPart.providerMetadata;
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
case "reasoning-end": {
|
|
337
|
+
const reasoningPart = activeReasoningParts[data.id];
|
|
338
|
+
reasoningPart.providerMetadata = data.providerMetadata ?? reasoningPart.providerMetadata;
|
|
339
|
+
reasoningPart.state = "done";
|
|
340
|
+
delete activeReasoningParts[data.id];
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
case "file": {
|
|
344
|
+
message.parts.push({
|
|
345
|
+
type: "file",
|
|
346
|
+
mediaType: data.mediaType,
|
|
347
|
+
url: data.url
|
|
348
|
+
});
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
case "source-url": {
|
|
352
|
+
message.parts.push({
|
|
353
|
+
type: "source-url",
|
|
354
|
+
sourceId: data.sourceId,
|
|
355
|
+
url: data.url,
|
|
356
|
+
title: data.title,
|
|
357
|
+
providerMetadata: data.providerMetadata
|
|
358
|
+
});
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
case "source-document": {
|
|
362
|
+
message.parts.push({
|
|
363
|
+
type: "source-document",
|
|
364
|
+
sourceId: data.sourceId,
|
|
365
|
+
mediaType: data.mediaType,
|
|
366
|
+
title: data.title,
|
|
367
|
+
filename: data.filename,
|
|
368
|
+
providerMetadata: data.providerMetadata
|
|
369
|
+
});
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
case "tool-input-start": {
|
|
373
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
374
|
+
partialToolCalls[data.toolCallId] = {
|
|
375
|
+
text: "",
|
|
376
|
+
toolName: data.toolName,
|
|
377
|
+
index: toolInvocations.length,
|
|
378
|
+
dynamic: data.dynamic
|
|
379
|
+
};
|
|
380
|
+
if (data.dynamic) {
|
|
381
|
+
updateDynamicToolPart({
|
|
382
|
+
toolCallId: data.toolCallId,
|
|
383
|
+
toolName: data.toolName,
|
|
384
|
+
state: "input-streaming",
|
|
385
|
+
input: void 0
|
|
386
|
+
});
|
|
387
|
+
} else {
|
|
388
|
+
updateToolPart({
|
|
389
|
+
toolCallId: data.toolCallId,
|
|
390
|
+
toolName: data.toolName,
|
|
391
|
+
state: "input-streaming",
|
|
392
|
+
input: void 0
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
case "tool-input-delta": {
|
|
398
|
+
const partialToolCall = partialToolCalls[data.toolCallId];
|
|
399
|
+
partialToolCall.text += data.inputTextDelta;
|
|
400
|
+
const { value: partialArgs } = await parsePartialJson(
|
|
401
|
+
partialToolCall.text
|
|
402
|
+
);
|
|
403
|
+
if (partialToolCall.dynamic) {
|
|
404
|
+
updateDynamicToolPart({
|
|
405
|
+
toolCallId: data.toolCallId,
|
|
406
|
+
toolName: partialToolCall.toolName,
|
|
407
|
+
state: "input-streaming",
|
|
408
|
+
input: partialArgs
|
|
409
|
+
});
|
|
410
|
+
} else {
|
|
411
|
+
updateToolPart({
|
|
412
|
+
toolCallId: data.toolCallId,
|
|
413
|
+
toolName: partialToolCall.toolName,
|
|
414
|
+
state: "input-streaming",
|
|
415
|
+
input: partialArgs
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
break;
|
|
419
|
+
}
|
|
420
|
+
case "tool-input-available": {
|
|
421
|
+
if (data.dynamic) {
|
|
422
|
+
updateDynamicToolPart({
|
|
423
|
+
toolCallId: data.toolCallId,
|
|
424
|
+
toolName: data.toolName,
|
|
425
|
+
state: "input-available",
|
|
426
|
+
input: data.input,
|
|
427
|
+
providerMetadata: data.providerMetadata
|
|
428
|
+
});
|
|
429
|
+
} else {
|
|
430
|
+
updateToolPart({
|
|
431
|
+
toolCallId: data.toolCallId,
|
|
432
|
+
toolName: data.toolName,
|
|
433
|
+
state: "input-available",
|
|
434
|
+
input: data.input,
|
|
435
|
+
providerExecuted: data.providerExecuted,
|
|
436
|
+
providerMetadata: data.providerMetadata
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
case "tool-input-error": {
|
|
442
|
+
if (data.dynamic) {
|
|
443
|
+
updateDynamicToolPart({
|
|
444
|
+
toolCallId: data.toolCallId,
|
|
445
|
+
toolName: data.toolName,
|
|
446
|
+
state: "output-error",
|
|
447
|
+
input: data.input,
|
|
448
|
+
errorText: data.errorText,
|
|
449
|
+
providerMetadata: data.providerMetadata
|
|
450
|
+
});
|
|
451
|
+
} else {
|
|
452
|
+
updateToolPart({
|
|
453
|
+
toolCallId: data.toolCallId,
|
|
454
|
+
toolName: data.toolName,
|
|
455
|
+
state: "output-error",
|
|
456
|
+
input: void 0,
|
|
457
|
+
rawInput: data.input,
|
|
458
|
+
errorText: data.errorText,
|
|
459
|
+
providerExecuted: data.providerExecuted,
|
|
460
|
+
providerMetadata: data.providerMetadata
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
case "tool-output-available": {
|
|
466
|
+
if (data.dynamic) {
|
|
467
|
+
const toolInvocations = message.parts.filter(
|
|
468
|
+
(part) => part.type === "dynamic-tool"
|
|
469
|
+
);
|
|
470
|
+
const toolInvocation = toolInvocations.find(
|
|
471
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
472
|
+
);
|
|
473
|
+
if (!toolInvocation)
|
|
474
|
+
throw new Error("Tool invocation not found");
|
|
475
|
+
updateDynamicToolPart({
|
|
476
|
+
toolCallId: data.toolCallId,
|
|
477
|
+
toolName: toolInvocation.toolName,
|
|
478
|
+
state: "output-available",
|
|
479
|
+
input: toolInvocation.input,
|
|
480
|
+
output: data.output,
|
|
481
|
+
preliminary: data.preliminary
|
|
482
|
+
});
|
|
483
|
+
} else {
|
|
484
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
485
|
+
const toolInvocation = toolInvocations.find(
|
|
486
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
487
|
+
);
|
|
488
|
+
if (!toolInvocation)
|
|
489
|
+
throw new Error("Tool invocation not found");
|
|
490
|
+
updateToolPart({
|
|
491
|
+
toolCallId: data.toolCallId,
|
|
492
|
+
toolName: getToolName(toolInvocation),
|
|
493
|
+
state: "output-available",
|
|
494
|
+
input: toolInvocation.input,
|
|
495
|
+
output: data.output,
|
|
496
|
+
providerExecuted: data.providerExecuted,
|
|
497
|
+
preliminary: data.preliminary
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
break;
|
|
501
|
+
}
|
|
502
|
+
case "tool-output-error": {
|
|
503
|
+
if (data.dynamic) {
|
|
504
|
+
const toolInvocations = message.parts.filter(
|
|
505
|
+
(part) => part.type === "dynamic-tool"
|
|
506
|
+
);
|
|
507
|
+
const toolInvocation = toolInvocations.find(
|
|
508
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
509
|
+
);
|
|
510
|
+
if (!toolInvocation)
|
|
511
|
+
throw new Error("Tool invocation not found");
|
|
512
|
+
updateDynamicToolPart({
|
|
513
|
+
toolCallId: data.toolCallId,
|
|
514
|
+
toolName: toolInvocation.toolName,
|
|
515
|
+
state: "output-error",
|
|
516
|
+
input: toolInvocation.input,
|
|
517
|
+
errorText: data.errorText
|
|
518
|
+
});
|
|
519
|
+
} else {
|
|
520
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
521
|
+
const toolInvocation = toolInvocations.find(
|
|
522
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
523
|
+
);
|
|
524
|
+
if (!toolInvocation)
|
|
525
|
+
throw new Error("Tool invocation not found");
|
|
526
|
+
updateToolPart({
|
|
527
|
+
toolCallId: data.toolCallId,
|
|
528
|
+
toolName: getToolName(toolInvocation),
|
|
529
|
+
state: "output-error",
|
|
530
|
+
input: toolInvocation.input,
|
|
531
|
+
rawInput: "rawInput" in toolInvocation ? toolInvocation.rawInput : void 0,
|
|
532
|
+
errorText: data.errorText
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
case "start-step": {
|
|
538
|
+
message.parts.push({ type: "step-start" });
|
|
539
|
+
break;
|
|
540
|
+
}
|
|
541
|
+
case "finish-step": {
|
|
542
|
+
activeTextParts = {};
|
|
543
|
+
activeReasoningParts = {};
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
case "start": {
|
|
547
|
+
if (data.messageId != null) {
|
|
548
|
+
message.id = data.messageId;
|
|
549
|
+
}
|
|
550
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
553
|
+
case "finish": {
|
|
554
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
555
|
+
break;
|
|
556
|
+
}
|
|
557
|
+
case "message-metadata": {
|
|
558
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
559
|
+
break;
|
|
560
|
+
}
|
|
561
|
+
case "error": {
|
|
562
|
+
this._broadcastChatMessage({
|
|
563
|
+
error: true,
|
|
564
|
+
body: data.errorText ?? JSON.stringify(data),
|
|
565
|
+
done: false,
|
|
566
|
+
id,
|
|
567
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
568
|
+
});
|
|
569
|
+
break;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
this._broadcastChatMessage({
|
|
573
|
+
body: JSON.stringify(data),
|
|
574
|
+
done: false,
|
|
575
|
+
id,
|
|
576
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
577
|
+
});
|
|
578
|
+
} catch (_e) {
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
} else {
|
|
583
|
+
if (chunk.length > 0) {
|
|
584
|
+
message.parts.push({ type: "text", text: chunk });
|
|
585
|
+
this._broadcastChatMessage({
|
|
586
|
+
body: JSON.stringify({ type: "text-delta", delta: chunk }),
|
|
587
|
+
done: false,
|
|
588
|
+
id,
|
|
589
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
} finally {
|
|
595
|
+
reader.releaseLock();
|
|
596
|
+
}
|
|
597
|
+
if (message.parts.length > 0) {
|
|
598
|
+
await this.persistMessages([...this.messages, message]);
|
|
179
599
|
}
|
|
180
|
-
this._broadcastChatMessage({
|
|
181
|
-
body: "",
|
|
182
|
-
done: true,
|
|
183
|
-
id,
|
|
184
|
-
type: "cf_agent_use_chat_response"
|
|
185
|
-
});
|
|
186
600
|
});
|
|
187
601
|
}
|
|
188
602
|
/**
|