agents 0.0.0-75614c2 → 0.0.0-75865eb
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 +465 -46
- 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 +246 -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-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-767EASBA.js → chunk-C2OEBJZ2.js} +14 -7
- 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-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-XGMKNUJA.js +1343 -0
- package/dist/chunk-XGMKNUJA.js.map +1 -0
- package/dist/chunk-ZMMHNOMZ.js +942 -0
- package/dist/chunk-ZMMHNOMZ.js.map +1 -0
- package/dist/client-D1Fa-xS_.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 +5200 -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 -781
- 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 +44 -11
- package/src/index.ts +949 -175
- package/dist/chunk-767EASBA.js.map +0 -1
- package/dist/chunk-CGWTDCBQ.js +0 -791
- package/dist/chunk-CGWTDCBQ.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-XGMKNUJA.js";
|
|
7
|
+
import "./chunk-ZMMHNOMZ.js";
|
|
8
|
+
import "./chunk-C2OEBJZ2.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,16 @@ 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
|
-
|
|
142
|
-
const
|
|
143
|
-
messages,
|
|
144
|
-
responseMessages: response2.messages
|
|
168
|
+
await this._tryCatchChat(async () => {
|
|
169
|
+
const response = await this.onChatMessage(() => {
|
|
145
170
|
});
|
|
146
|
-
|
|
171
|
+
if (response) this._reply(crypto.randomUUID(), response);
|
|
147
172
|
});
|
|
148
|
-
if (response) {
|
|
149
|
-
for await (const chunk of response.body) {
|
|
150
|
-
decoder.decode(chunk);
|
|
151
|
-
}
|
|
152
|
-
response.body?.cancel();
|
|
153
|
-
}
|
|
154
173
|
}
|
|
155
174
|
async persistMessages(messages, excludeBroadcastIds = []) {
|
|
156
175
|
this.sql`delete from cf_ai_chat_agent_messages`;
|
|
@@ -161,28 +180,428 @@ var AIChatAgent = class extends Agent {
|
|
|
161
180
|
this._broadcastChatMessage(
|
|
162
181
|
{
|
|
163
182
|
messages,
|
|
164
|
-
type: "cf_agent_chat_messages"
|
|
183
|
+
type: "cf_agent_chat_messages" /* CF_AGENT_CHAT_MESSAGES */
|
|
165
184
|
},
|
|
166
185
|
excludeBroadcastIds
|
|
167
186
|
);
|
|
168
187
|
}
|
|
169
188
|
async _reply(id, response) {
|
|
170
189
|
return this._tryCatchChat(async () => {
|
|
171
|
-
|
|
172
|
-
const body = decoder.decode(chunk);
|
|
190
|
+
if (!response.body) {
|
|
173
191
|
this._broadcastChatMessage({
|
|
174
|
-
body,
|
|
175
|
-
done:
|
|
192
|
+
body: "",
|
|
193
|
+
done: true,
|
|
176
194
|
id,
|
|
177
|
-
type: "cf_agent_use_chat_response"
|
|
195
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
178
196
|
});
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const reader = response.body.getReader();
|
|
200
|
+
const message = {
|
|
201
|
+
id: `assistant_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`,
|
|
202
|
+
// default
|
|
203
|
+
role: "assistant",
|
|
204
|
+
parts: []
|
|
205
|
+
};
|
|
206
|
+
let activeTextParts = {};
|
|
207
|
+
let activeReasoningParts = {};
|
|
208
|
+
const partialToolCalls = {};
|
|
209
|
+
function updateDynamicToolPart(options) {
|
|
210
|
+
const part = message.parts.find(
|
|
211
|
+
(part2) => part2.type === "dynamic-tool" && part2.toolCallId === options.toolCallId
|
|
212
|
+
);
|
|
213
|
+
const anyOptions = options;
|
|
214
|
+
const anyPart = part;
|
|
215
|
+
if (part != null) {
|
|
216
|
+
part.state = options.state;
|
|
217
|
+
anyPart.toolName = options.toolName;
|
|
218
|
+
anyPart.input = anyOptions.input;
|
|
219
|
+
anyPart.output = anyOptions.output;
|
|
220
|
+
anyPart.errorText = anyOptions.errorText;
|
|
221
|
+
anyPart.rawInput = anyOptions.rawInput ?? anyPart.rawInput;
|
|
222
|
+
anyPart.preliminary = anyOptions.preliminary;
|
|
223
|
+
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
|
224
|
+
part.callProviderMetadata = anyOptions.providerMetadata;
|
|
225
|
+
}
|
|
226
|
+
} else {
|
|
227
|
+
message.parts.push({
|
|
228
|
+
type: "dynamic-tool",
|
|
229
|
+
toolName: options.toolName,
|
|
230
|
+
toolCallId: options.toolCallId,
|
|
231
|
+
state: options.state,
|
|
232
|
+
input: anyOptions.input,
|
|
233
|
+
output: anyOptions.output,
|
|
234
|
+
errorText: anyOptions.errorText,
|
|
235
|
+
preliminary: anyOptions.preliminary,
|
|
236
|
+
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function updateToolPart(options) {
|
|
241
|
+
const part = message.parts.find(
|
|
242
|
+
(part2) => isToolUIPart(part2) && part2.toolCallId === options.toolCallId
|
|
243
|
+
);
|
|
244
|
+
const anyOptions = options;
|
|
245
|
+
const anyPart = part;
|
|
246
|
+
if (part != null) {
|
|
247
|
+
part.state = options.state;
|
|
248
|
+
anyPart.input = anyOptions.input;
|
|
249
|
+
anyPart.output = anyOptions.output;
|
|
250
|
+
anyPart.errorText = anyOptions.errorText;
|
|
251
|
+
anyPart.rawInput = anyOptions.rawInput;
|
|
252
|
+
anyPart.preliminary = anyOptions.preliminary;
|
|
253
|
+
anyPart.providerExecuted = anyOptions.providerExecuted ?? part.providerExecuted;
|
|
254
|
+
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
|
255
|
+
part.callProviderMetadata = anyOptions.providerMetadata;
|
|
256
|
+
}
|
|
257
|
+
} else {
|
|
258
|
+
message.parts.push({
|
|
259
|
+
type: `tool-${options.toolName}`,
|
|
260
|
+
toolCallId: options.toolCallId,
|
|
261
|
+
state: options.state,
|
|
262
|
+
input: anyOptions.input,
|
|
263
|
+
output: anyOptions.output,
|
|
264
|
+
rawInput: anyOptions.rawInput,
|
|
265
|
+
errorText: anyOptions.errorText,
|
|
266
|
+
providerExecuted: anyOptions.providerExecuted,
|
|
267
|
+
preliminary: anyOptions.preliminary,
|
|
268
|
+
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function updateMessageMetadata(metadata) {
|
|
273
|
+
if (metadata != null) {
|
|
274
|
+
const mergedMetadata = message.metadata != null ? { ...message.metadata, ...metadata } : metadata;
|
|
275
|
+
message.metadata = mergedMetadata;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
while (true) {
|
|
280
|
+
const { done, value } = await reader.read();
|
|
281
|
+
if (done) {
|
|
282
|
+
this._broadcastChatMessage({
|
|
283
|
+
body: "",
|
|
284
|
+
done: true,
|
|
285
|
+
id,
|
|
286
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
287
|
+
});
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
const chunk = decoder.decode(value);
|
|
291
|
+
const contentType = response.headers.get("content-type") || "";
|
|
292
|
+
const isSSE = contentType.includes("text/event-stream");
|
|
293
|
+
if (isSSE) {
|
|
294
|
+
const lines = chunk.split("\n");
|
|
295
|
+
for (const line of lines) {
|
|
296
|
+
if (line.startsWith("data: ") && line !== "data: [DONE]") {
|
|
297
|
+
try {
|
|
298
|
+
const data = JSON.parse(line.slice(6));
|
|
299
|
+
switch (data.type) {
|
|
300
|
+
case "text-start": {
|
|
301
|
+
const textPart = {
|
|
302
|
+
type: "text",
|
|
303
|
+
text: "",
|
|
304
|
+
providerMetadata: data.providerMetadata,
|
|
305
|
+
state: "streaming"
|
|
306
|
+
};
|
|
307
|
+
activeTextParts[data.id] = textPart;
|
|
308
|
+
message.parts.push(textPart);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
case "text-delta": {
|
|
312
|
+
const textPart = activeTextParts[data.id];
|
|
313
|
+
textPart.text += data.delta;
|
|
314
|
+
textPart.providerMetadata = data.providerMetadata ?? textPart.providerMetadata;
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
case "text-end": {
|
|
318
|
+
const textPart = activeTextParts[data.id];
|
|
319
|
+
textPart.state = "done";
|
|
320
|
+
textPart.providerMetadata = data.providerMetadata ?? textPart.providerMetadata;
|
|
321
|
+
delete activeTextParts[data.id];
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
case "reasoning-start": {
|
|
325
|
+
const reasoningPart = {
|
|
326
|
+
type: "reasoning",
|
|
327
|
+
text: "",
|
|
328
|
+
providerMetadata: data.providerMetadata,
|
|
329
|
+
state: "streaming"
|
|
330
|
+
};
|
|
331
|
+
activeReasoningParts[data.id] = reasoningPart;
|
|
332
|
+
message.parts.push(reasoningPart);
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
case "reasoning-delta": {
|
|
336
|
+
const reasoningPart = activeReasoningParts[data.id];
|
|
337
|
+
reasoningPart.text += data.delta;
|
|
338
|
+
reasoningPart.providerMetadata = data.providerMetadata ?? reasoningPart.providerMetadata;
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
case "reasoning-end": {
|
|
342
|
+
const reasoningPart = activeReasoningParts[data.id];
|
|
343
|
+
reasoningPart.providerMetadata = data.providerMetadata ?? reasoningPart.providerMetadata;
|
|
344
|
+
reasoningPart.state = "done";
|
|
345
|
+
delete activeReasoningParts[data.id];
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
case "file": {
|
|
349
|
+
message.parts.push({
|
|
350
|
+
type: "file",
|
|
351
|
+
mediaType: data.mediaType,
|
|
352
|
+
url: data.url
|
|
353
|
+
});
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
case "source-url": {
|
|
357
|
+
message.parts.push({
|
|
358
|
+
type: "source-url",
|
|
359
|
+
sourceId: data.sourceId,
|
|
360
|
+
url: data.url,
|
|
361
|
+
title: data.title,
|
|
362
|
+
providerMetadata: data.providerMetadata
|
|
363
|
+
});
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
366
|
+
case "source-document": {
|
|
367
|
+
message.parts.push({
|
|
368
|
+
type: "source-document",
|
|
369
|
+
sourceId: data.sourceId,
|
|
370
|
+
mediaType: data.mediaType,
|
|
371
|
+
title: data.title,
|
|
372
|
+
filename: data.filename,
|
|
373
|
+
providerMetadata: data.providerMetadata
|
|
374
|
+
});
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case "tool-input-start": {
|
|
378
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
379
|
+
partialToolCalls[data.toolCallId] = {
|
|
380
|
+
text: "",
|
|
381
|
+
toolName: data.toolName,
|
|
382
|
+
index: toolInvocations.length,
|
|
383
|
+
dynamic: data.dynamic
|
|
384
|
+
};
|
|
385
|
+
if (data.dynamic) {
|
|
386
|
+
updateDynamicToolPart({
|
|
387
|
+
toolCallId: data.toolCallId,
|
|
388
|
+
toolName: data.toolName,
|
|
389
|
+
state: "input-streaming",
|
|
390
|
+
input: void 0
|
|
391
|
+
});
|
|
392
|
+
} else {
|
|
393
|
+
updateToolPart({
|
|
394
|
+
toolCallId: data.toolCallId,
|
|
395
|
+
toolName: data.toolName,
|
|
396
|
+
state: "input-streaming",
|
|
397
|
+
input: void 0
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
case "tool-input-delta": {
|
|
403
|
+
const partialToolCall = partialToolCalls[data.toolCallId];
|
|
404
|
+
partialToolCall.text += data.inputTextDelta;
|
|
405
|
+
const { value: partialArgs } = await parsePartialJson(
|
|
406
|
+
partialToolCall.text
|
|
407
|
+
);
|
|
408
|
+
if (partialToolCall.dynamic) {
|
|
409
|
+
updateDynamicToolPart({
|
|
410
|
+
toolCallId: data.toolCallId,
|
|
411
|
+
toolName: partialToolCall.toolName,
|
|
412
|
+
state: "input-streaming",
|
|
413
|
+
input: partialArgs
|
|
414
|
+
});
|
|
415
|
+
} else {
|
|
416
|
+
updateToolPart({
|
|
417
|
+
toolCallId: data.toolCallId,
|
|
418
|
+
toolName: partialToolCall.toolName,
|
|
419
|
+
state: "input-streaming",
|
|
420
|
+
input: partialArgs
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
case "tool-input-available": {
|
|
426
|
+
if (data.dynamic) {
|
|
427
|
+
updateDynamicToolPart({
|
|
428
|
+
toolCallId: data.toolCallId,
|
|
429
|
+
toolName: data.toolName,
|
|
430
|
+
state: "input-available",
|
|
431
|
+
input: data.input,
|
|
432
|
+
providerMetadata: data.providerMetadata
|
|
433
|
+
});
|
|
434
|
+
} else {
|
|
435
|
+
updateToolPart({
|
|
436
|
+
toolCallId: data.toolCallId,
|
|
437
|
+
toolName: data.toolName,
|
|
438
|
+
state: "input-available",
|
|
439
|
+
input: data.input,
|
|
440
|
+
providerExecuted: data.providerExecuted,
|
|
441
|
+
providerMetadata: data.providerMetadata
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
case "tool-input-error": {
|
|
447
|
+
if (data.dynamic) {
|
|
448
|
+
updateDynamicToolPart({
|
|
449
|
+
toolCallId: data.toolCallId,
|
|
450
|
+
toolName: data.toolName,
|
|
451
|
+
state: "output-error",
|
|
452
|
+
input: data.input,
|
|
453
|
+
errorText: data.errorText,
|
|
454
|
+
providerMetadata: data.providerMetadata
|
|
455
|
+
});
|
|
456
|
+
} else {
|
|
457
|
+
updateToolPart({
|
|
458
|
+
toolCallId: data.toolCallId,
|
|
459
|
+
toolName: data.toolName,
|
|
460
|
+
state: "output-error",
|
|
461
|
+
input: void 0,
|
|
462
|
+
rawInput: data.input,
|
|
463
|
+
errorText: data.errorText,
|
|
464
|
+
providerExecuted: data.providerExecuted,
|
|
465
|
+
providerMetadata: data.providerMetadata
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
case "tool-output-available": {
|
|
471
|
+
if (data.dynamic) {
|
|
472
|
+
const toolInvocations = message.parts.filter(
|
|
473
|
+
(part) => part.type === "dynamic-tool"
|
|
474
|
+
);
|
|
475
|
+
const toolInvocation = toolInvocations.find(
|
|
476
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
477
|
+
);
|
|
478
|
+
if (!toolInvocation)
|
|
479
|
+
throw new Error("Tool invocation not found");
|
|
480
|
+
updateDynamicToolPart({
|
|
481
|
+
toolCallId: data.toolCallId,
|
|
482
|
+
toolName: toolInvocation.toolName,
|
|
483
|
+
state: "output-available",
|
|
484
|
+
input: toolInvocation.input,
|
|
485
|
+
output: data.output,
|
|
486
|
+
preliminary: data.preliminary
|
|
487
|
+
});
|
|
488
|
+
} else {
|
|
489
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
490
|
+
const toolInvocation = toolInvocations.find(
|
|
491
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
492
|
+
);
|
|
493
|
+
if (!toolInvocation)
|
|
494
|
+
throw new Error("Tool invocation not found");
|
|
495
|
+
updateToolPart({
|
|
496
|
+
toolCallId: data.toolCallId,
|
|
497
|
+
toolName: getToolName(toolInvocation),
|
|
498
|
+
state: "output-available",
|
|
499
|
+
input: toolInvocation.input,
|
|
500
|
+
output: data.output,
|
|
501
|
+
providerExecuted: data.providerExecuted,
|
|
502
|
+
preliminary: data.preliminary
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
break;
|
|
506
|
+
}
|
|
507
|
+
case "tool-output-error": {
|
|
508
|
+
if (data.dynamic) {
|
|
509
|
+
const toolInvocations = message.parts.filter(
|
|
510
|
+
(part) => part.type === "dynamic-tool"
|
|
511
|
+
);
|
|
512
|
+
const toolInvocation = toolInvocations.find(
|
|
513
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
514
|
+
);
|
|
515
|
+
if (!toolInvocation)
|
|
516
|
+
throw new Error("Tool invocation not found");
|
|
517
|
+
updateDynamicToolPart({
|
|
518
|
+
toolCallId: data.toolCallId,
|
|
519
|
+
toolName: toolInvocation.toolName,
|
|
520
|
+
state: "output-error",
|
|
521
|
+
input: toolInvocation.input,
|
|
522
|
+
errorText: data.errorText
|
|
523
|
+
});
|
|
524
|
+
} else {
|
|
525
|
+
const toolInvocations = message.parts.filter(isToolUIPart);
|
|
526
|
+
const toolInvocation = toolInvocations.find(
|
|
527
|
+
(invocation) => invocation.toolCallId === data.toolCallId
|
|
528
|
+
);
|
|
529
|
+
if (!toolInvocation)
|
|
530
|
+
throw new Error("Tool invocation not found");
|
|
531
|
+
updateToolPart({
|
|
532
|
+
toolCallId: data.toolCallId,
|
|
533
|
+
toolName: getToolName(toolInvocation),
|
|
534
|
+
state: "output-error",
|
|
535
|
+
input: toolInvocation.input,
|
|
536
|
+
rawInput: "rawInput" in toolInvocation ? toolInvocation.rawInput : void 0,
|
|
537
|
+
errorText: data.errorText
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
break;
|
|
541
|
+
}
|
|
542
|
+
case "start-step": {
|
|
543
|
+
message.parts.push({ type: "step-start" });
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
case "finish-step": {
|
|
547
|
+
activeTextParts = {};
|
|
548
|
+
activeReasoningParts = {};
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
case "start": {
|
|
552
|
+
if (data.messageId != null) {
|
|
553
|
+
message.id = data.messageId;
|
|
554
|
+
}
|
|
555
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
556
|
+
break;
|
|
557
|
+
}
|
|
558
|
+
case "finish": {
|
|
559
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
case "message-metadata": {
|
|
563
|
+
await updateMessageMetadata(data.messageMetadata);
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
case "error": {
|
|
567
|
+
this._broadcastChatMessage({
|
|
568
|
+
error: true,
|
|
569
|
+
body: data.errorText ?? JSON.stringify(data),
|
|
570
|
+
done: false,
|
|
571
|
+
id,
|
|
572
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
573
|
+
});
|
|
574
|
+
break;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
this._broadcastChatMessage({
|
|
578
|
+
body: JSON.stringify(data),
|
|
579
|
+
done: false,
|
|
580
|
+
id,
|
|
581
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
582
|
+
});
|
|
583
|
+
} catch (_e) {
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
} else {
|
|
588
|
+
if (chunk.length > 0) {
|
|
589
|
+
message.parts.push({ type: "text", text: chunk });
|
|
590
|
+
this._broadcastChatMessage({
|
|
591
|
+
body: JSON.stringify({ type: "text-delta", delta: chunk }),
|
|
592
|
+
done: false,
|
|
593
|
+
id,
|
|
594
|
+
type: "cf_agent_use_chat_response" /* CF_AGENT_USE_CHAT_RESPONSE */
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
} finally {
|
|
600
|
+
reader.releaseLock();
|
|
601
|
+
}
|
|
602
|
+
if (message.parts.length > 0) {
|
|
603
|
+
await this.persistMessages([...this.messages, message]);
|
|
179
604
|
}
|
|
180
|
-
this._broadcastChatMessage({
|
|
181
|
-
body: "",
|
|
182
|
-
done: true,
|
|
183
|
-
id,
|
|
184
|
-
type: "cf_agent_use_chat_response"
|
|
185
|
-
});
|
|
186
605
|
});
|
|
187
606
|
}
|
|
188
607
|
/**
|