agents 0.0.0-5ebaeb2 → 0.0.0-629836
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 +103 -5
- package/dist/_esm-LV5FJ3HK.js +3922 -0
- package/dist/_esm-LV5FJ3HK.js.map +1 -0
- package/dist/ai-chat-agent.d.ts +3 -1
- package/dist/ai-chat-agent.js +375 -58
- package/dist/ai-chat-agent.js.map +1 -1
- package/dist/ai-chat-v5-migration.js +1 -0
- package/dist/ai-react.d.ts +8 -1
- package/dist/ai-react.js +151 -111
- package/dist/ai-react.js.map +1 -1
- package/dist/ai-types.d.ts +1 -0
- package/dist/ai-types.js +2 -1
- package/dist/ccip-CMBYN64O.js +15 -0
- package/dist/ccip-CMBYN64O.js.map +1 -0
- package/dist/chunk-5Y6BEZDY.js +276 -0
- package/dist/chunk-5Y6BEZDY.js.map +1 -0
- package/dist/{chunk-AVYJQSLW.js → chunk-BER7KXUJ.js} +2 -1
- package/dist/chunk-BER7KXUJ.js.map +1 -0
- package/dist/{chunk-LL2AFX7V.js → chunk-C2OEBJZ2.js} +10 -6
- package/dist/chunk-C2OEBJZ2.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-TYAY6AU6.js +159 -0
- package/dist/chunk-TYAY6AU6.js.map +1 -0
- package/dist/{chunk-IJPBZOSS.js → chunk-XGMKNUJA.js} +97 -50
- package/dist/chunk-XGMKNUJA.js.map +1 -0
- package/dist/{chunk-VYENMKFS.js → chunk-ZMMHNOMZ.js} +400 -70
- package/dist/chunk-ZMMHNOMZ.js.map +1 -0
- package/dist/{client-CcIORE73.d.ts → client-C8tswVoM.d.ts} +891 -250
- package/dist/client.js +2 -1
- package/dist/codemode/ai.d.ts +25 -0
- package/dist/codemode/ai.js +5200 -0
- package/dist/codemode/ai.js.map +1 -0
- package/dist/index.d.ts +25 -32
- package/dist/index.js +5 -4
- package/dist/mcp/client.d.ts +2 -1
- package/dist/mcp/client.js +2 -1
- package/dist/mcp/do-oauth-client-provider.js +2 -1
- package/dist/mcp/index.d.ts +16 -34
- package/dist/mcp/index.js +253 -183
- 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 +12 -24
- package/dist/observability/index.js +5 -4
- package/dist/react.d.ts +10 -6
- package/dist/react.js +101 -3
- package/dist/react.js.map +1 -1
- package/dist/schedule.js +2 -0
- 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 +27 -10
- package/src/index.ts +141 -57
- package/dist/chunk-AVYJQSLW.js.map +0 -1
- package/dist/chunk-IJPBZOSS.js.map +0 -1
- package/dist/chunk-LL2AFX7V.js.map +0 -1
- package/dist/chunk-VYENMKFS.js.map +0 -1
package/dist/ai-chat-agent.js
CHANGED
|
@@ -3,13 +3,19 @@ import {
|
|
|
3
3
|
} from "./chunk-UJVEAURM.js";
|
|
4
4
|
import {
|
|
5
5
|
Agent
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-XGMKNUJA.js";
|
|
7
|
+
import "./chunk-ZMMHNOMZ.js";
|
|
8
|
+
import "./chunk-C2OEBJZ2.js";
|
|
9
9
|
import "./chunk-QEVM4BVL.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-BER7KXUJ.js";
|
|
11
|
+
import "./chunk-PR4QN5HX.js";
|
|
11
12
|
|
|
12
13
|
// src/ai-chat-agent.ts
|
|
14
|
+
import {
|
|
15
|
+
getToolName,
|
|
16
|
+
isToolUIPart,
|
|
17
|
+
parsePartialJson
|
|
18
|
+
} from "ai";
|
|
13
19
|
var decoder = new TextDecoder();
|
|
14
20
|
var AIChatAgent = class extends Agent {
|
|
15
21
|
constructor(ctx, env) {
|
|
@@ -19,15 +25,24 @@ var AIChatAgent = class extends Agent {
|
|
|
19
25
|
message text not null,
|
|
20
26
|
created_at datetime default current_timestamp
|
|
21
27
|
)`;
|
|
22
|
-
const rawMessages =
|
|
23
|
-
return JSON.parse(row.message);
|
|
24
|
-
});
|
|
28
|
+
const rawMessages = this._loadMessagesFromDb();
|
|
25
29
|
this.messages = autoTransformMessages(rawMessages);
|
|
26
30
|
this._chatMessageAbortControllers = /* @__PURE__ */ new Map();
|
|
27
31
|
}
|
|
28
32
|
_broadcastChatMessage(message, exclude) {
|
|
29
33
|
this.broadcast(JSON.stringify(message), exclude);
|
|
30
34
|
}
|
|
35
|
+
_loadMessagesFromDb() {
|
|
36
|
+
const rows = this.sql`select * from cf_ai_chat_agent_messages order by created_at` || [];
|
|
37
|
+
return rows.map((row) => {
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(row.message);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error(`Failed to parse message ${row.id}:`, error);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}).filter((msg) => msg !== null);
|
|
45
|
+
}
|
|
31
46
|
async onMessage(connection, message) {
|
|
32
47
|
if (typeof message === "string") {
|
|
33
48
|
let data;
|
|
@@ -127,9 +142,7 @@ var AIChatAgent = class extends Agent {
|
|
|
127
142
|
return this._tryCatchChat(() => {
|
|
128
143
|
const url = new URL(request.url);
|
|
129
144
|
if (url.pathname.endsWith("/get-messages")) {
|
|
130
|
-
const messages =
|
|
131
|
-
return JSON.parse(row.message);
|
|
132
|
-
});
|
|
145
|
+
const messages = this._loadMessagesFromDb();
|
|
133
146
|
return Response.json(messages);
|
|
134
147
|
}
|
|
135
148
|
return super.onRequest(request);
|
|
@@ -159,13 +172,22 @@ var AIChatAgent = class extends Agent {
|
|
|
159
172
|
*/
|
|
160
173
|
async saveMessages(messages) {
|
|
161
174
|
await this.persistMessages(messages);
|
|
175
|
+
await this._tryCatchChat(async () => {
|
|
176
|
+
const response = await this.onChatMessage(() => {
|
|
177
|
+
});
|
|
178
|
+
if (response) this._reply(crypto.randomUUID(), response);
|
|
179
|
+
});
|
|
162
180
|
}
|
|
163
181
|
async persistMessages(messages, excludeBroadcastIds = []) {
|
|
164
|
-
this.sql`delete from cf_ai_chat_agent_messages`;
|
|
165
182
|
for (const message of messages) {
|
|
166
|
-
this.sql`
|
|
183
|
+
this.sql`
|
|
184
|
+
insert into cf_ai_chat_agent_messages (id, message)
|
|
185
|
+
values (${message.id}, ${JSON.stringify(message)})
|
|
186
|
+
on conflict(id) do update set message = excluded.message
|
|
187
|
+
`;
|
|
167
188
|
}
|
|
168
|
-
|
|
189
|
+
const persisted = this._loadMessagesFromDb();
|
|
190
|
+
this.messages = autoTransformMessages(persisted);
|
|
169
191
|
this._broadcastChatMessage(
|
|
170
192
|
{
|
|
171
193
|
messages,
|
|
@@ -186,8 +208,84 @@ var AIChatAgent = class extends Agent {
|
|
|
186
208
|
return;
|
|
187
209
|
}
|
|
188
210
|
const reader = response.body.getReader();
|
|
189
|
-
|
|
190
|
-
|
|
211
|
+
const message = {
|
|
212
|
+
id: `assistant_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`,
|
|
213
|
+
// default
|
|
214
|
+
role: "assistant",
|
|
215
|
+
parts: []
|
|
216
|
+
};
|
|
217
|
+
let activeTextParts = {};
|
|
218
|
+
let activeReasoningParts = {};
|
|
219
|
+
const partialToolCalls = {};
|
|
220
|
+
function updateDynamicToolPart(options) {
|
|
221
|
+
const part = message.parts.find(
|
|
222
|
+
(part2) => part2.type === "dynamic-tool" && part2.toolCallId === options.toolCallId
|
|
223
|
+
);
|
|
224
|
+
const anyOptions = options;
|
|
225
|
+
const anyPart = part;
|
|
226
|
+
if (part != null) {
|
|
227
|
+
part.state = options.state;
|
|
228
|
+
anyPart.toolName = options.toolName;
|
|
229
|
+
anyPart.input = anyOptions.input;
|
|
230
|
+
anyPart.output = anyOptions.output;
|
|
231
|
+
anyPart.errorText = anyOptions.errorText;
|
|
232
|
+
anyPart.rawInput = anyOptions.rawInput ?? anyPart.rawInput;
|
|
233
|
+
anyPart.preliminary = anyOptions.preliminary;
|
|
234
|
+
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
|
235
|
+
part.callProviderMetadata = anyOptions.providerMetadata;
|
|
236
|
+
}
|
|
237
|
+
} else {
|
|
238
|
+
message.parts.push({
|
|
239
|
+
type: "dynamic-tool",
|
|
240
|
+
toolName: options.toolName,
|
|
241
|
+
toolCallId: options.toolCallId,
|
|
242
|
+
state: options.state,
|
|
243
|
+
input: anyOptions.input,
|
|
244
|
+
output: anyOptions.output,
|
|
245
|
+
errorText: anyOptions.errorText,
|
|
246
|
+
preliminary: anyOptions.preliminary,
|
|
247
|
+
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function updateToolPart(options) {
|
|
252
|
+
const part = message.parts.find(
|
|
253
|
+
(part2) => isToolUIPart(part2) && part2.toolCallId === options.toolCallId
|
|
254
|
+
);
|
|
255
|
+
const anyOptions = options;
|
|
256
|
+
const anyPart = part;
|
|
257
|
+
if (part != null) {
|
|
258
|
+
part.state = options.state;
|
|
259
|
+
anyPart.input = anyOptions.input;
|
|
260
|
+
anyPart.output = anyOptions.output;
|
|
261
|
+
anyPart.errorText = anyOptions.errorText;
|
|
262
|
+
anyPart.rawInput = anyOptions.rawInput;
|
|
263
|
+
anyPart.preliminary = anyOptions.preliminary;
|
|
264
|
+
anyPart.providerExecuted = anyOptions.providerExecuted ?? part.providerExecuted;
|
|
265
|
+
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
|
266
|
+
part.callProviderMetadata = anyOptions.providerMetadata;
|
|
267
|
+
}
|
|
268
|
+
} else {
|
|
269
|
+
message.parts.push({
|
|
270
|
+
type: `tool-${options.toolName}`,
|
|
271
|
+
toolCallId: options.toolCallId,
|
|
272
|
+
state: options.state,
|
|
273
|
+
input: anyOptions.input,
|
|
274
|
+
output: anyOptions.output,
|
|
275
|
+
rawInput: anyOptions.rawInput,
|
|
276
|
+
errorText: anyOptions.errorText,
|
|
277
|
+
providerExecuted: anyOptions.providerExecuted,
|
|
278
|
+
preliminary: anyOptions.preliminary,
|
|
279
|
+
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async function updateMessageMetadata(metadata) {
|
|
284
|
+
if (metadata != null) {
|
|
285
|
+
const mergedMetadata = message.metadata != null ? { ...message.metadata, ...metadata } : metadata;
|
|
286
|
+
message.metadata = mergedMetadata;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
191
289
|
try {
|
|
192
290
|
while (true) {
|
|
193
291
|
const { done, value } = await reader.read();
|
|
@@ -210,33 +308,270 @@ var AIChatAgent = class extends Agent {
|
|
|
210
308
|
try {
|
|
211
309
|
const data = JSON.parse(line.slice(6));
|
|
212
310
|
switch (data.type) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
311
|
+
case "text-start": {
|
|
312
|
+
const textPart = {
|
|
313
|
+
type: "text",
|
|
314
|
+
text: "",
|
|
315
|
+
providerMetadata: data.providerMetadata,
|
|
316
|
+
state: "streaming"
|
|
317
|
+
};
|
|
318
|
+
activeTextParts[data.id] = textPart;
|
|
319
|
+
message.parts.push(textPart);
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
case "text-delta": {
|
|
323
|
+
const textPart = activeTextParts[data.id];
|
|
324
|
+
textPart.text += data.delta;
|
|
325
|
+
textPart.providerMetadata = data.providerMetadata ?? textPart.providerMetadata;
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
case "text-end": {
|
|
329
|
+
const textPart = activeTextParts[data.id];
|
|
330
|
+
textPart.state = "done";
|
|
331
|
+
textPart.providerMetadata = data.providerMetadata ?? textPart.providerMetadata;
|
|
332
|
+
delete activeTextParts[data.id];
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
case "reasoning-start": {
|
|
336
|
+
const reasoningPart = {
|
|
337
|
+
type: "reasoning",
|
|
338
|
+
text: "",
|
|
339
|
+
providerMetadata: data.providerMetadata,
|
|
340
|
+
state: "streaming"
|
|
341
|
+
};
|
|
342
|
+
activeReasoningParts[data.id] = reasoningPart;
|
|
343
|
+
message.parts.push(reasoningPart);
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
case "reasoning-delta": {
|
|
347
|
+
const reasoningPart = activeReasoningParts[data.id];
|
|
348
|
+
reasoningPart.text += data.delta;
|
|
349
|
+
reasoningPart.providerMetadata = data.providerMetadata ?? reasoningPart.providerMetadata;
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
case "reasoning-end": {
|
|
353
|
+
const reasoningPart = activeReasoningParts[data.id];
|
|
354
|
+
reasoningPart.providerMetadata = data.providerMetadata ?? reasoningPart.providerMetadata;
|
|
355
|
+
reasoningPart.state = "done";
|
|
356
|
+
delete activeReasoningParts[data.id];
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
case "file": {
|
|
360
|
+
message.parts.push({
|
|
361
|
+
type: "file",
|
|
362
|
+
mediaType: data.mediaType,
|
|
363
|
+
url: data.url
|
|
364
|
+
});
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
case "source-url": {
|
|
368
|
+
message.parts.push({
|
|
369
|
+
type: "source-url",
|
|
370
|
+
sourceId: data.sourceId,
|
|
371
|
+
url: data.url,
|
|
372
|
+
title: data.title,
|
|
373
|
+
providerMetadata: data.providerMetadata
|
|
374
|
+
});
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case "source-document": {
|
|
378
|
+
message.parts.push({
|
|
379
|
+
type: "source-document",
|
|
380
|
+
sourceId: data.sourceId,
|
|
381
|
+
mediaType: data.mediaType,
|
|
382
|
+
title: data.title,
|
|
383
|
+
filename: data.filename,
|
|
384
|
+
providerMetadata: data.providerMetadata
|
|
223
385
|
});
|
|
224
386
|
break;
|
|
225
387
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
388
|
+
case "tool-input-start": {
|
|
389
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
390
|
+
partialToolCalls[data.toolCallId] = {
|
|
391
|
+
text: "",
|
|
392
|
+
toolName: data.toolName,
|
|
393
|
+
index: toolInvocations.length,
|
|
394
|
+
dynamic: data.dynamic
|
|
395
|
+
};
|
|
396
|
+
if (data.dynamic) {
|
|
397
|
+
updateDynamicToolPart({
|
|
398
|
+
toolCallId: data.toolCallId,
|
|
399
|
+
toolName: data.toolName,
|
|
400
|
+
state: "input-streaming",
|
|
401
|
+
input: void 0
|
|
402
|
+
});
|
|
403
|
+
} else {
|
|
404
|
+
updateToolPart({
|
|
405
|
+
toolCallId: data.toolCallId,
|
|
406
|
+
toolName: data.toolName,
|
|
407
|
+
state: "input-streaming",
|
|
408
|
+
input: void 0
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
case "tool-input-delta": {
|
|
414
|
+
const partialToolCall = partialToolCalls[data.toolCallId];
|
|
415
|
+
partialToolCall.text += data.inputTextDelta;
|
|
416
|
+
const { value: partialArgs } = await parsePartialJson(
|
|
417
|
+
partialToolCall.text
|
|
418
|
+
);
|
|
419
|
+
if (partialToolCall.dynamic) {
|
|
420
|
+
updateDynamicToolPart({
|
|
421
|
+
toolCallId: data.toolCallId,
|
|
422
|
+
toolName: partialToolCall.toolName,
|
|
423
|
+
state: "input-streaming",
|
|
424
|
+
input: partialArgs
|
|
425
|
+
});
|
|
426
|
+
} else {
|
|
427
|
+
updateToolPart({
|
|
428
|
+
toolCallId: data.toolCallId,
|
|
429
|
+
toolName: partialToolCall.toolName,
|
|
430
|
+
state: "input-streaming",
|
|
431
|
+
input: partialArgs
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
case "tool-input-available": {
|
|
437
|
+
if (data.dynamic) {
|
|
438
|
+
updateDynamicToolPart({
|
|
439
|
+
toolCallId: data.toolCallId,
|
|
440
|
+
toolName: data.toolName,
|
|
441
|
+
state: "input-available",
|
|
442
|
+
input: data.input,
|
|
443
|
+
providerMetadata: data.providerMetadata
|
|
444
|
+
});
|
|
445
|
+
} else {
|
|
446
|
+
updateToolPart({
|
|
447
|
+
toolCallId: data.toolCallId,
|
|
448
|
+
toolName: data.toolName,
|
|
449
|
+
state: "input-available",
|
|
450
|
+
input: data.input,
|
|
451
|
+
providerExecuted: data.providerExecuted,
|
|
452
|
+
providerMetadata: data.providerMetadata
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
case "tool-input-error": {
|
|
458
|
+
if (data.dynamic) {
|
|
459
|
+
updateDynamicToolPart({
|
|
460
|
+
toolCallId: data.toolCallId,
|
|
461
|
+
toolName: data.toolName,
|
|
462
|
+
state: "output-error",
|
|
463
|
+
input: data.input,
|
|
464
|
+
errorText: data.errorText,
|
|
465
|
+
providerMetadata: data.providerMetadata
|
|
466
|
+
});
|
|
467
|
+
} else {
|
|
468
|
+
updateToolPart({
|
|
469
|
+
toolCallId: data.toolCallId,
|
|
470
|
+
toolName: data.toolName,
|
|
471
|
+
state: "output-error",
|
|
472
|
+
input: void 0,
|
|
473
|
+
rawInput: data.input,
|
|
474
|
+
errorText: data.errorText,
|
|
475
|
+
providerExecuted: data.providerExecuted,
|
|
476
|
+
providerMetadata: data.providerMetadata
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
break;
|
|
480
|
+
}
|
|
229
481
|
case "tool-output-available": {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
482
|
+
if (data.dynamic) {
|
|
483
|
+
const toolInvocations = message.parts.filter(
|
|
484
|
+
(part) => part.type === "dynamic-tool"
|
|
485
|
+
);
|
|
486
|
+
const toolInvocation = toolInvocations.find(
|
|
487
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
488
|
+
);
|
|
489
|
+
if (!toolInvocation)
|
|
490
|
+
throw new Error("Tool invocation not found");
|
|
491
|
+
updateDynamicToolPart({
|
|
492
|
+
toolCallId: data.toolCallId,
|
|
493
|
+
toolName: toolInvocation.toolName,
|
|
494
|
+
state: "output-available",
|
|
495
|
+
input: toolInvocation.input,
|
|
496
|
+
output: data.output,
|
|
497
|
+
preliminary: data.preliminary
|
|
498
|
+
});
|
|
499
|
+
} else {
|
|
500
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
501
|
+
const toolInvocation = toolInvocations.find(
|
|
502
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
503
|
+
);
|
|
504
|
+
if (!toolInvocation)
|
|
505
|
+
throw new Error("Tool invocation not found");
|
|
506
|
+
updateToolPart({
|
|
507
|
+
toolCallId: data.toolCallId,
|
|
508
|
+
toolName: getToolName(toolInvocation),
|
|
509
|
+
state: "output-available",
|
|
510
|
+
input: toolInvocation.input,
|
|
511
|
+
output: data.output,
|
|
512
|
+
providerExecuted: data.providerExecuted,
|
|
513
|
+
preliminary: data.preliminary
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
break;
|
|
517
|
+
}
|
|
518
|
+
case "tool-output-error": {
|
|
519
|
+
if (data.dynamic) {
|
|
520
|
+
const toolInvocations = message.parts.filter(
|
|
521
|
+
(part) => part.type === "dynamic-tool"
|
|
522
|
+
);
|
|
523
|
+
const toolInvocation = toolInvocations.find(
|
|
524
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
525
|
+
);
|
|
526
|
+
if (!toolInvocation)
|
|
527
|
+
throw new Error("Tool invocation not found");
|
|
528
|
+
updateDynamicToolPart({
|
|
529
|
+
toolCallId: data.toolCallId,
|
|
530
|
+
toolName: toolInvocation.toolName,
|
|
531
|
+
state: "output-error",
|
|
532
|
+
input: toolInvocation.input,
|
|
533
|
+
errorText: data.errorText
|
|
534
|
+
});
|
|
535
|
+
} else {
|
|
536
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
537
|
+
const toolInvocation = toolInvocations.find(
|
|
538
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
539
|
+
);
|
|
540
|
+
if (!toolInvocation)
|
|
541
|
+
throw new Error("Tool invocation not found");
|
|
542
|
+
updateToolPart({
|
|
543
|
+
toolCallId: data.toolCallId,
|
|
544
|
+
toolName: getToolName(toolInvocation),
|
|
545
|
+
state: "output-error",
|
|
546
|
+
input: toolInvocation.input,
|
|
547
|
+
rawInput: "rawInput" in toolInvocation ? toolInvocation.rawInput : void 0,
|
|
548
|
+
errorText: data.errorText
|
|
239
549
|
});
|
|
550
|
+
}
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
553
|
+
case "start-step": {
|
|
554
|
+
message.parts.push({ type: "step-start" });
|
|
555
|
+
break;
|
|
556
|
+
}
|
|
557
|
+
case "finish-step": {
|
|
558
|
+
activeTextParts = {};
|
|
559
|
+
activeReasoningParts = {};
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
case "start": {
|
|
563
|
+
if (data.messageId != null) {
|
|
564
|
+
message.id = data.messageId;
|
|
565
|
+
}
|
|
566
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
567
|
+
break;
|
|
568
|
+
}
|
|
569
|
+
case "finish": {
|
|
570
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
571
|
+
break;
|
|
572
|
+
}
|
|
573
|
+
case "message-metadata": {
|
|
574
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
240
575
|
break;
|
|
241
576
|
}
|
|
242
577
|
case "error": {
|
|
@@ -247,10 +582,6 @@ var AIChatAgent = class extends Agent {
|
|
|
247
582
|
id,
|
|
248
583
|
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
249
584
|
});
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
case "text-delta": {
|
|
253
|
-
if (data.delta) fullResponseText += data.delta;
|
|
254
585
|
break;
|
|
255
586
|
}
|
|
256
587
|
}
|
|
@@ -266,7 +597,7 @@ var AIChatAgent = class extends Agent {
|
|
|
266
597
|
}
|
|
267
598
|
} else {
|
|
268
599
|
if (chunk.length > 0) {
|
|
269
|
-
|
|
600
|
+
message.parts.push({ type: "text", text: chunk });
|
|
270
601
|
this._broadcastChatMessage({
|
|
271
602
|
body: JSON.stringify({ type: "text-delta", delta: chunk }),
|
|
272
603
|
done: false,
|
|
@@ -279,22 +610,8 @@ var AIChatAgent = class extends Agent {
|
|
|
279
610
|
} finally {
|
|
280
611
|
reader.releaseLock();
|
|
281
612
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
messageParts.push(t);
|
|
285
|
-
});
|
|
286
|
-
if (fullResponseText.trim()) {
|
|
287
|
-
messageParts.push({ type: "text", text: fullResponseText });
|
|
288
|
-
}
|
|
289
|
-
if (messageParts.length > 0) {
|
|
290
|
-
await this.persistMessages([
|
|
291
|
-
...this.messages,
|
|
292
|
-
{
|
|
293
|
-
id: `assistant_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`,
|
|
294
|
-
role: "assistant",
|
|
295
|
-
parts: messageParts
|
|
296
|
-
}
|
|
297
|
-
]);
|
|
613
|
+
if (message.parts.length > 0) {
|
|
614
|
+
await this.persistMessages([...this.messages, message]);
|
|
298
615
|
}
|
|
299
616
|
});
|
|
300
617
|
}
|