veryfront 0.1.981 → 0.1.983
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/esm/deno.js +1 -1
- package/esm/src/agent/ag-ui/chat-ui-chunk-browser-encoder.d.ts.map +1 -1
- package/esm/src/agent/ag-ui/chat-ui-chunk-browser-encoder.js +59 -0
- package/esm/src/agent/ag-ui/handler.d.ts.map +1 -1
- package/esm/src/agent/ag-ui/handler.js +12 -2
- package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.d.ts +30 -0
- package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.d.ts.map +1 -1
- package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.js +108 -0
- package/esm/src/agent/ag-ui/runtime-handler.d.ts.map +1 -1
- package/esm/src/agent/ag-ui/runtime-handler.js +7 -1
- package/esm/src/agent/hosted/chat-execution-runtime.d.ts +4 -0
- package/esm/src/agent/hosted/chat-execution-runtime.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-execution-runtime.js +6 -0
- package/esm/src/agent/hosted/chat-runtime-contract.d.ts +14 -0
- package/esm/src/agent/hosted/chat-runtime-contract.d.ts.map +1 -1
- package/esm/src/agent/project/agent-runtime.d.ts.map +1 -1
- package/esm/src/agent/project/agent-runtime.js +3 -0
- package/esm/src/agent/react/index.d.ts +2 -0
- package/esm/src/agent/react/index.d.ts.map +1 -1
- package/esm/src/agent/react/index.js +1 -0
- package/esm/src/agent/react/use-agent-metadata.d.ts +42 -0
- package/esm/src/agent/react/use-agent-metadata.d.ts.map +1 -0
- package/esm/src/agent/react/use-agent-metadata.js +133 -0
- package/esm/src/agent/react/use-chat/streaming/handler.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/streaming/handler.js +41 -16
- package/esm/src/agent/react/use-chat/streaming/types.d.ts +1 -1
- package/esm/src/agent/react/use-chat/streaming/types.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/use-chat.js +9 -4
- package/esm/src/agent/react/use-chat/utils.d.ts +1 -1
- package/esm/src/agent/react/use-chat/utils.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/utils.js +2 -1
- package/esm/src/agent/runtime/agent-definition.d.ts +2 -0
- package/esm/src/agent/runtime/agent-definition.d.ts.map +1 -1
- package/esm/src/agent/runtime/agent-definition.js +9 -0
- package/esm/src/agent/runtime/agent-markdown-adapter.d.ts.map +1 -1
- package/esm/src/agent/runtime/agent-markdown-adapter.js +1 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +63 -1
- package/esm/src/agent/streaming/chat-ui-message-stream.d.ts +14 -0
- package/esm/src/agent/streaming/chat-ui-message-stream.d.ts.map +1 -1
- package/esm/src/agent/streaming/chat-ui-message-stream.js +10 -4
- package/esm/src/agent/types.d.ts +4 -0
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/channels/control-plane.d.ts +8 -0
- package/esm/src/channels/control-plane.d.ts.map +1 -1
- package/esm/src/channels/control-plane.js +18 -3
- package/esm/src/chat/ag-ui.d.ts +2 -0
- package/esm/src/chat/ag-ui.d.ts.map +1 -1
- package/esm/src/chat/ag-ui.js +5 -1
- package/esm/src/chat/chat-ui-message-helpers.d.ts +2 -0
- package/esm/src/chat/chat-ui-message-helpers.d.ts.map +1 -1
- package/esm/src/chat/chat-ui-message-helpers.js +73 -2
- package/esm/src/chat/index.d.ts +1 -0
- package/esm/src/chat/index.d.ts.map +1 -1
- package/esm/src/chat/index.js +1 -0
- package/esm/src/chat/protocol.d.ts +16 -0
- package/esm/src/chat/protocol.d.ts.map +1 -1
- package/esm/src/chat/types.d.ts +45 -0
- package/esm/src/chat/types.d.ts.map +1 -1
- package/esm/src/chat/types.js +15 -0
- package/esm/src/eval/model-comparison.d.ts.map +1 -1
- package/esm/src/eval/model-comparison.js +26 -6
- package/esm/src/react/components/chat/chat/composition/agent-avatar.d.ts +16 -0
- package/esm/src/react/components/chat/chat/composition/agent-avatar.d.ts.map +1 -0
- package/esm/src/react/components/chat/chat/composition/agent-avatar.js +24 -0
- package/esm/src/react/components/chat/chat/composition/api.d.ts +1 -0
- package/esm/src/react/components/chat/chat/composition/api.d.ts.map +1 -1
- package/esm/src/react/components/chat/chat/composition/api.js +1 -0
- package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts.map +1 -1
- package/esm/src/react/components/chat/chat/composition/chat-message-list.js +16 -1
- package/esm/src/react/components/chat/chat/composition/message.d.ts.map +1 -1
- package/esm/src/react/components/chat/chat/composition/message.js +10 -2
- package/esm/src/react/components/chat/chat/index.d.ts +1 -1
- package/esm/src/react/components/chat/chat/index.d.ts.map +1 -1
- package/esm/src/react/components/chat/chat/index.js +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.js +56 -2
- package/esm/src/server/handlers/request/public-agent-metadata.handler.d.ts +10 -0
- package/esm/src/server/handlers/request/public-agent-metadata.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/public-agent-metadata.handler.js +52 -0
- package/esm/src/server/runtime-handler/index.d.ts +1 -1
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +3 -0
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { useEffect, useState } from "../../../react/react.js";
|
|
2
|
+
import { ensureError } from "../../errors/veryfront-error.js";
|
|
3
|
+
function isRecord(value) {
|
|
4
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
function getRequiredString(record, key) {
|
|
7
|
+
const value = record[key];
|
|
8
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
9
|
+
throw new Error(`Invalid agent metadata: ${key} is required`);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
function getNullableString(record, key) {
|
|
14
|
+
const value = record[key];
|
|
15
|
+
if (value === undefined || value === null)
|
|
16
|
+
return null;
|
|
17
|
+
if (typeof value !== "string") {
|
|
18
|
+
throw new Error(`Invalid agent metadata: ${key} must be a string`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function normalizeSuggestion(value) {
|
|
23
|
+
if (!isRecord(value)) {
|
|
24
|
+
throw new Error("Invalid agent metadata: suggestion must be an object");
|
|
25
|
+
}
|
|
26
|
+
if (value.type === "task") {
|
|
27
|
+
return {
|
|
28
|
+
type: "task",
|
|
29
|
+
id: getRequiredString(value, "id"),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (value.type !== "prompt") {
|
|
33
|
+
throw new Error("Invalid agent metadata: unsupported suggestion type");
|
|
34
|
+
}
|
|
35
|
+
if (typeof value.id === "string") {
|
|
36
|
+
return {
|
|
37
|
+
id: getRequiredString(value, "id"),
|
|
38
|
+
type: "prompt",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
type: "prompt",
|
|
43
|
+
title: getRequiredString(value, "title"),
|
|
44
|
+
prompt: getRequiredString(value, "prompt"),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function normalizeSuggestions(value) {
|
|
48
|
+
if (value === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (!isRecord(value)) {
|
|
51
|
+
throw new Error("Invalid agent metadata: suggestions must be an object");
|
|
52
|
+
}
|
|
53
|
+
const rawSuggestions = value.suggestions;
|
|
54
|
+
if (!Array.isArray(rawSuggestions)) {
|
|
55
|
+
throw new Error("Invalid agent metadata: suggestions must be an array");
|
|
56
|
+
}
|
|
57
|
+
const welcomeMessage = value.welcomeMessage;
|
|
58
|
+
return {
|
|
59
|
+
...(typeof welcomeMessage === "string" && welcomeMessage.trim().length > 0
|
|
60
|
+
? { welcomeMessage }
|
|
61
|
+
: {}),
|
|
62
|
+
suggestions: rawSuggestions.map(normalizeSuggestion),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** Normalize the wire response from /api/agents/:id. */
|
|
66
|
+
export function normalizeAgentMetadataResponse(value) {
|
|
67
|
+
if (!isRecord(value) || !isRecord(value.agent)) {
|
|
68
|
+
throw new Error("Invalid agent metadata response");
|
|
69
|
+
}
|
|
70
|
+
const agent = value.agent;
|
|
71
|
+
return {
|
|
72
|
+
id: getRequiredString(agent, "id"),
|
|
73
|
+
name: getRequiredString(agent, "name"),
|
|
74
|
+
description: getNullableString(agent, "description"),
|
|
75
|
+
avatarUrl: getNullableString(agent, "avatar_url"),
|
|
76
|
+
suggestions: normalizeSuggestions(agent.suggestions),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Return prompt text suggestions that the current Chat component can render. */
|
|
80
|
+
export function getAgentPromptSuggestions(agent) {
|
|
81
|
+
return agent?.suggestions?.suggestions.flatMap((suggestion) => {
|
|
82
|
+
if (suggestion.type !== "prompt" || !("prompt" in suggestion))
|
|
83
|
+
return [];
|
|
84
|
+
return [suggestion.prompt];
|
|
85
|
+
}) ?? [];
|
|
86
|
+
}
|
|
87
|
+
/** React hook for browser-safe source-defined agent metadata. */
|
|
88
|
+
export function useAgentMetadata(agentId) {
|
|
89
|
+
const [agent, setAgent] = useState(null);
|
|
90
|
+
const [isLoading, setIsLoading] = useState(Boolean(agentId));
|
|
91
|
+
const [error, setError] = useState(null);
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (!agentId) {
|
|
94
|
+
setAgent(null);
|
|
95
|
+
setIsLoading(false);
|
|
96
|
+
setError(null);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const resolvedAgentId = agentId;
|
|
100
|
+
const abortController = new AbortController();
|
|
101
|
+
setIsLoading(true);
|
|
102
|
+
setError(null);
|
|
103
|
+
async function loadAgentMetadata() {
|
|
104
|
+
try {
|
|
105
|
+
const response = await fetch(`/api/agents/${encodeURIComponent(resolvedAgentId)}`, {
|
|
106
|
+
headers: { accept: "application/json" },
|
|
107
|
+
signal: abortController.signal,
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
throw new Error(`Agent metadata request failed: ${response.status}`);
|
|
111
|
+
}
|
|
112
|
+
const nextAgent = normalizeAgentMetadataResponse(await response.json());
|
|
113
|
+
setAgent(nextAgent);
|
|
114
|
+
}
|
|
115
|
+
catch (caught) {
|
|
116
|
+
if (caught instanceof Error && caught.name === "AbortError")
|
|
117
|
+
return;
|
|
118
|
+
setAgent(null);
|
|
119
|
+
setError(ensureError(caught));
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
if (!abortController.signal.aborted) {
|
|
123
|
+
setIsLoading(false);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
void loadAgentMetadata();
|
|
128
|
+
return () => {
|
|
129
|
+
abortController.abort();
|
|
130
|
+
};
|
|
131
|
+
}, [agentId]);
|
|
132
|
+
return { agent, isLoading, error };
|
|
133
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/agent/react/use-chat/streaming/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/agent/react/use-chat/streaming/handler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAKV,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAgCpB,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createAgUiChatEventDecoderState, decodeAgUiSseChunk, flushAgUiSseChunk, } from "../../../../chat/ag-ui.js";
|
|
2
|
+
import { normalizeChatMessageMetadata } from "../../../../chat/chat-ui-message-helpers.js";
|
|
2
3
|
import { createAssistantMessage, generateClientId } from "../utils.js";
|
|
3
4
|
import { buildCurrentParts } from "./parts-builder.js";
|
|
4
5
|
function createStreamingState() {
|
|
@@ -11,6 +12,7 @@ function createStreamingState() {
|
|
|
11
12
|
dataParts: [],
|
|
12
13
|
currentTextId: "",
|
|
13
14
|
messageId: "",
|
|
15
|
+
messageMetadata: {},
|
|
14
16
|
partOrderCounter: 0,
|
|
15
17
|
currentStep: 0,
|
|
16
18
|
};
|
|
@@ -101,7 +103,7 @@ function processStreamEvent(parsed, state, callbacks, getBuildParts) {
|
|
|
101
103
|
const { onMessage, onData, onUpdate, onToolCall } = callbacks;
|
|
102
104
|
switch (parsed.type) {
|
|
103
105
|
case "message-start":
|
|
104
|
-
handleStart(parsed, state);
|
|
106
|
+
handleStart(parsed, state, callbacks.onUpdate, getBuildParts);
|
|
105
107
|
return;
|
|
106
108
|
case "step-start":
|
|
107
109
|
handleStepStart(parsed, state, callbacks.onUpdate, getBuildParts);
|
|
@@ -161,9 +163,13 @@ function processChatStreamEvent(event, state, callbacks, getBuildParts) {
|
|
|
161
163
|
const { onMessage, onData, onUpdate, onToolCall } = callbacks;
|
|
162
164
|
switch (event.type) {
|
|
163
165
|
case "start":
|
|
164
|
-
handleStart(event, state);
|
|
166
|
+
handleStart(event, state, callbacks.onUpdate, getBuildParts);
|
|
165
167
|
return;
|
|
166
168
|
case "message-metadata":
|
|
169
|
+
mergeMessageMetadata(state, event.messageMetadata);
|
|
170
|
+
if (state.messageId) {
|
|
171
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
172
|
+
}
|
|
167
173
|
onData(event.messageMetadata);
|
|
168
174
|
return;
|
|
169
175
|
case "start-step":
|
|
@@ -222,13 +228,32 @@ function processChatStreamEvent(event, state, callbacks, getBuildParts) {
|
|
|
222
228
|
return;
|
|
223
229
|
}
|
|
224
230
|
}
|
|
225
|
-
function
|
|
231
|
+
function mergeMessageMetadata(state, value) {
|
|
232
|
+
state.messageMetadata = {
|
|
233
|
+
...state.messageMetadata,
|
|
234
|
+
...normalizeChatMessageMetadata(value),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function emitUpdate(state, onUpdate, getBuildParts) {
|
|
238
|
+
if (!state.messageId) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
onUpdate?.(getBuildParts(), state.messageId, state.messageMetadata);
|
|
242
|
+
}
|
|
243
|
+
function handleStart(parsed, state, onUpdate, getBuildParts) {
|
|
226
244
|
state.messageId = typeof parsed.messageId === "string" ? parsed.messageId : "";
|
|
227
245
|
state.textBlocks.clear();
|
|
228
246
|
state.toolCalls.clear();
|
|
229
247
|
state.reasoningBlocks.clear();
|
|
230
248
|
state.messageParts.length = 0;
|
|
231
249
|
state.dataParts.length = 0;
|
|
250
|
+
state.messageMetadata = {};
|
|
251
|
+
if ("messageMetadata" in parsed) {
|
|
252
|
+
mergeMessageMetadata(state, parsed.messageMetadata);
|
|
253
|
+
}
|
|
254
|
+
if (state.messageId && Object.keys(state.messageMetadata).length > 0) {
|
|
255
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
256
|
+
}
|
|
232
257
|
}
|
|
233
258
|
function handleTextStart(parsed, state) {
|
|
234
259
|
state.currentTextId = parsed.id || generateClientId("text");
|
|
@@ -253,7 +278,7 @@ function handleTextDelta(parsed, state, onUpdate, getBuildParts) {
|
|
|
253
278
|
if (block.order === null) {
|
|
254
279
|
block.order = state.partOrderCounter++;
|
|
255
280
|
}
|
|
256
|
-
|
|
281
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
257
282
|
}
|
|
258
283
|
function handleTextEnd(parsed, state) {
|
|
259
284
|
const textId = parsed.id || state.currentTextId;
|
|
@@ -279,7 +304,7 @@ function handleDataPart(parsed, state, onUpdate, getBuildParts) {
|
|
|
279
304
|
data: parsed.data,
|
|
280
305
|
},
|
|
281
306
|
});
|
|
282
|
-
|
|
307
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
283
308
|
}
|
|
284
309
|
function isRenderableDataPartType(type) {
|
|
285
310
|
return type !== "data-state-snapshot" &&
|
|
@@ -300,7 +325,7 @@ function handleToolInputStart(parsed, state, onUpdate, getBuildParts) {
|
|
|
300
325
|
order: state.partOrderCounter++,
|
|
301
326
|
};
|
|
302
327
|
state.toolCalls.set(toolCallId, toolCall);
|
|
303
|
-
|
|
328
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
304
329
|
}
|
|
305
330
|
function handleToolInputDelta(parsed, state, onUpdate, getBuildParts) {
|
|
306
331
|
const toolCallId = parsed.toolCallId;
|
|
@@ -308,7 +333,7 @@ function handleToolInputDelta(parsed, state, onUpdate, getBuildParts) {
|
|
|
308
333
|
if (!toolCall)
|
|
309
334
|
return;
|
|
310
335
|
toolCall.inputText += (parsed.inputTextDelta ?? parsed.delta ?? "");
|
|
311
|
-
|
|
336
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
312
337
|
}
|
|
313
338
|
function handleToolInputAvailable(parsed, state, onUpdate, onToolCall, getBuildParts) {
|
|
314
339
|
const toolCallId = parsed.toolCallId;
|
|
@@ -360,7 +385,7 @@ function handleToolInputAvailable(parsed, state, onUpdate, onToolCall, getBuildP
|
|
|
360
385
|
input: toolCall.input,
|
|
361
386
|
});
|
|
362
387
|
}
|
|
363
|
-
|
|
388
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
364
389
|
}
|
|
365
390
|
function handleToolOutputAvailable(parsed, state, onUpdate, getBuildParts) {
|
|
366
391
|
const toolCallId = parsed.toolCallId;
|
|
@@ -375,7 +400,7 @@ function handleToolOutputAvailable(parsed, state, onUpdate, getBuildParts) {
|
|
|
375
400
|
toolName: toolCall.toolName,
|
|
376
401
|
result: toolCall.output,
|
|
377
402
|
});
|
|
378
|
-
|
|
403
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
379
404
|
}
|
|
380
405
|
function handleToolError(parsed, state, onUpdate, getBuildParts) {
|
|
381
406
|
const toolCallId = parsed.toolCallId;
|
|
@@ -386,7 +411,7 @@ function handleToolError(parsed, state, onUpdate, getBuildParts) {
|
|
|
386
411
|
toolCall.error = parsed.errorText;
|
|
387
412
|
if (parsed.dynamic === true)
|
|
388
413
|
toolCall.dynamic = true;
|
|
389
|
-
|
|
414
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
390
415
|
}
|
|
391
416
|
function handleReasoningStart(parsed, state, onUpdate, getBuildParts) {
|
|
392
417
|
if (!state.messageId) {
|
|
@@ -400,7 +425,7 @@ function handleReasoningStart(parsed, state, onUpdate, getBuildParts) {
|
|
|
400
425
|
order: state.partOrderCounter++,
|
|
401
426
|
};
|
|
402
427
|
state.reasoningBlocks.set(reasoningId, reasoning);
|
|
403
|
-
|
|
428
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
404
429
|
}
|
|
405
430
|
function handleReasoningDelta(parsed, state, onUpdate, getBuildParts) {
|
|
406
431
|
const reasoningId = parsed.id;
|
|
@@ -408,7 +433,7 @@ function handleReasoningDelta(parsed, state, onUpdate, getBuildParts) {
|
|
|
408
433
|
if (!reasoning)
|
|
409
434
|
return;
|
|
410
435
|
reasoning.text += (parsed.delta ?? "");
|
|
411
|
-
|
|
436
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
412
437
|
}
|
|
413
438
|
function handleReasoningEnd(parsed, state, onUpdate, getBuildParts) {
|
|
414
439
|
const reasoningId = parsed.id;
|
|
@@ -429,7 +454,7 @@ function handleReasoningEnd(parsed, state, onUpdate, getBuildParts) {
|
|
|
429
454
|
...(typeof reasoning.redactedData === "string" ? { redactedData: reasoning.redactedData } : {}),
|
|
430
455
|
state: "done",
|
|
431
456
|
});
|
|
432
|
-
|
|
457
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
433
458
|
}
|
|
434
459
|
function handleStepStart(_parsed, state, onUpdate, getBuildParts) {
|
|
435
460
|
const stepIndex = state.currentStep;
|
|
@@ -439,7 +464,7 @@ function handleStepStart(_parsed, state, onUpdate, getBuildParts) {
|
|
|
439
464
|
order: state.partOrderCounter++,
|
|
440
465
|
};
|
|
441
466
|
state.steps.set(stepIndex, step);
|
|
442
|
-
|
|
467
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
443
468
|
}
|
|
444
469
|
function handleStepEnd(_parsed, state, onUpdate, getBuildParts) {
|
|
445
470
|
const step = state.steps.get(state.currentStep);
|
|
@@ -449,11 +474,11 @@ function handleStepEnd(_parsed, state, onUpdate, getBuildParts) {
|
|
|
449
474
|
step.order = state.partOrderCounter++;
|
|
450
475
|
}
|
|
451
476
|
state.currentStep++;
|
|
452
|
-
|
|
477
|
+
emitUpdate(state, onUpdate, getBuildParts);
|
|
453
478
|
}
|
|
454
479
|
function handleFinish(state, onMessage, getBuildParts) {
|
|
455
480
|
const finalParts = getBuildParts();
|
|
456
481
|
if (finalParts.length > 0) {
|
|
457
|
-
onMessage(createAssistantMessage(state.messageId, finalParts));
|
|
482
|
+
onMessage(createAssistantMessage(state.messageId, finalParts, state.messageMetadata));
|
|
458
483
|
}
|
|
459
484
|
}
|
|
@@ -2,7 +2,7 @@ import type { ChatMessage, ChatMessagePart, ChatToolState, OnToolCallArg } from
|
|
|
2
2
|
export interface StreamingCallbacks {
|
|
3
3
|
onMessage: (message: ChatMessage) => void;
|
|
4
4
|
onData: (data: unknown) => void;
|
|
5
|
-
onUpdate?: (parts: ChatMessagePart[], messageId: string) => void;
|
|
5
|
+
onUpdate?: (parts: ChatMessagePart[], messageId: string, metadata?: ChatMessage["metadata"]) => void;
|
|
6
6
|
onToolCall?: (arg: OnToolCallArg) => void;
|
|
7
7
|
}
|
|
8
8
|
export interface StreamingToolCall {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/src/agent/react/use-chat/streaming/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9F,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/src/agent/react/use-chat/streaming/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9F,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,eAAe,EAAE,EACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,KAC/B,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-chat.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/use-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAEV,WAAW,EAGX,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,KAAK,oBAAoB,GAAG,OAAO,2BAA2B,CAAC;AAE/D,wDAAwD;AACxD,UAAU,MAAM;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,sEAAsE;AACtE,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAIR;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GACrC,oBAAoB,CAGtB;AAOD,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"use-chat.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/use-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAEV,WAAW,EAGX,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,KAAK,oBAAoB,GAAG,OAAO,2BAA2B,CAAC;AAE/D,wDAAwD;AACxD,UAAU,MAAM;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,sEAAsE;AACtE,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAIR;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GACrC,oBAAoB,CAGtB;AAOD,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CA8ZnE"}
|
|
@@ -172,22 +172,27 @@ export function useChat(options = {}) {
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
},
|
|
175
|
-
onUpdate: (parts, messageId) => {
|
|
175
|
+
onUpdate: (parts, messageId, messageMetadata) => {
|
|
176
176
|
const id = messageId ?? streamingMessageId;
|
|
177
|
+
const metadata = { ...messageMetadata, model: serverModel };
|
|
177
178
|
if (messageId && messageId !== currentMessageIdRef.current) {
|
|
178
179
|
const oldId = currentMessageIdRef.current;
|
|
179
180
|
currentMessageIdRef.current = messageId;
|
|
180
181
|
if (hasAddedStreamingMessage) {
|
|
181
|
-
setMessages((prev) => prev.map((m) =>
|
|
182
|
+
setMessages((prev) => prev.map((m) => m.id === oldId
|
|
183
|
+
? { ...m, id, parts, metadata: { ...m.metadata, ...metadata } }
|
|
184
|
+
: m));
|
|
182
185
|
return;
|
|
183
186
|
}
|
|
184
187
|
}
|
|
185
188
|
if (!hasAddedStreamingMessage) {
|
|
186
189
|
hasAddedStreamingMessage = true;
|
|
187
|
-
setMessages((prev) => [...prev, { id, role: "assistant", parts, metadata
|
|
190
|
+
setMessages((prev) => [...prev, { id, role: "assistant", parts, metadata }]);
|
|
188
191
|
return;
|
|
189
192
|
}
|
|
190
|
-
setMessages((prev) => prev.map((m) =>
|
|
193
|
+
setMessages((prev) => prev.map((m) => m.id === currentMessageIdRef.current
|
|
194
|
+
? { ...m, parts, metadata: { ...m.metadata, ...metadata } }
|
|
195
|
+
: m));
|
|
191
196
|
},
|
|
192
197
|
onToolCall: options.onToolCall,
|
|
193
198
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ChatMessage, ChatMessagePart } from "./types.js";
|
|
2
2
|
export declare function generateClientId(prefix: string): string;
|
|
3
|
-
export declare function createAssistantMessage(messageId: string, parts: ChatMessagePart[]): ChatMessage;
|
|
3
|
+
export declare function createAssistantMessage(messageId: string, parts: ChatMessagePart[], metadata?: ChatMessage["metadata"]): ChatMessage;
|
|
4
4
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EAAE,EACxB,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,GACjC,WAAW,CAOb"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export function generateClientId(prefix) {
|
|
2
2
|
return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
3
3
|
}
|
|
4
|
-
export function createAssistantMessage(messageId, parts) {
|
|
4
|
+
export function createAssistantMessage(messageId, parts, metadata) {
|
|
5
5
|
return {
|
|
6
6
|
id: messageId || generateClientId("msg"),
|
|
7
7
|
role: "assistant",
|
|
8
8
|
parts,
|
|
9
|
+
...(metadata && Object.keys(metadata).length > 0 ? { metadata } : {}),
|
|
9
10
|
};
|
|
10
11
|
}
|
|
@@ -20,6 +20,7 @@ export declare const getRuntimeAgentMarkdownDefinitionSchema: () => import("../.
|
|
|
20
20
|
id: import("../../internal-agents/schema.js").Schema<string>;
|
|
21
21
|
name: import("../../internal-agents/schema.js").Schema<string>;
|
|
22
22
|
description: import("../../internal-agents/schema.js").Schema<string>;
|
|
23
|
+
avatarUrl: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
23
24
|
instructions: import("../../internal-agents/schema.js").Schema<string>;
|
|
24
25
|
thinking: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
25
26
|
enabled: import("../../internal-agents/schema.js").Schema<boolean>;
|
|
@@ -42,6 +43,7 @@ export declare const runtimeAgentMarkdownDefinitionSchema: import("../../interna
|
|
|
42
43
|
id: import("../../internal-agents/schema.js").Schema<string>;
|
|
43
44
|
name: import("../../internal-agents/schema.js").Schema<string>;
|
|
44
45
|
description: import("../../internal-agents/schema.js").Schema<string>;
|
|
46
|
+
avatarUrl: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
45
47
|
instructions: import("../../internal-agents/schema.js").Schema<string>;
|
|
46
48
|
thinking: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
47
49
|
enabled: import("../../internal-agents/schema.js").Schema<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-definition.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-definition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,wDAAwD;AACxD,eAAO,MAAM,mCAAmC;;;GAK/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;GAAkD,CAAC;AAEhG,oDAAoD;AACpD,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAClD,UAAU,CAAC,OAAO,mCAAmC,CAAC,CACvD,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,uCAAuC
|
|
1
|
+
{"version":3,"file":"agent-definition.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-definition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,wDAAwD;AACxD,eAAO,MAAM,mCAAmC;;;GAK/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;GAAkD,CAAC;AAEhG,oDAAoD;AACpD,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAClD,UAAU,CAAC,OAAO,mCAAmC,CAAC,CACvD,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;GAgBnD,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,oCAAoC,uCAAuC,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;GAEhD,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,8BAA8B,GAAG,WAAW,CACtD,UAAU,CAAC,OAAO,uCAAuC,CAAC,CAC3D,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,iDAAiD;;;GAK7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8CAA8C;;;GAE1D,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,wCAAwC,GAAG,WAAW,CAChE,UAAU,CAAC,OAAO,iDAAiD,CAAC,CACrE,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,qCAAqC,GAAG;IAClD,KAAK,EAAE,8BAA8B,CAAC;IACtC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AA+DF,mDAAmD;AACnD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,GAC9C,8BAA8B,CAqChC;AAkBD,4CAA4C;AAC5C,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qCAAqC,GAC3C,iBAAiB,EAAE,CA2CrB"}
|
|
@@ -17,6 +17,7 @@ export const getRuntimeAgentMarkdownDefinitionSchema = defineSchema((v) => v.obj
|
|
|
17
17
|
id: v.string().min(1),
|
|
18
18
|
name: v.string().min(1),
|
|
19
19
|
description: v.string(),
|
|
20
|
+
avatarUrl: v.string().url().optional(),
|
|
20
21
|
instructions: v.string(),
|
|
21
22
|
thinking: getRuntimeAgentThinkingConfigSchema().optional(),
|
|
22
23
|
model: v.string().min(1).optional(),
|
|
@@ -101,6 +102,13 @@ export function parseRuntimeAgentMarkdownDefinition(input) {
|
|
|
101
102
|
const { attrs, body } = extract(parsedInput.content);
|
|
102
103
|
const name = typeof attrs.name === "string" && attrs.name.trim() ? attrs.name : parsedInput.id;
|
|
103
104
|
const description = typeof attrs.description === "string" ? attrs.description : "";
|
|
105
|
+
const avatarUrl = typeof attrs["avatar-url"] === "string" && attrs["avatar-url"].trim()
|
|
106
|
+
? attrs["avatar-url"]
|
|
107
|
+
: typeof attrs.avatarUrl === "string" && attrs.avatarUrl.trim()
|
|
108
|
+
? attrs.avatarUrl
|
|
109
|
+
: typeof attrs.avatar_url === "string" && attrs.avatar_url.trim()
|
|
110
|
+
? attrs.avatar_url
|
|
111
|
+
: undefined;
|
|
104
112
|
const model = typeof attrs.model === "string" && attrs.model.trim() ? attrs.model : undefined;
|
|
105
113
|
const thinking = parseThinking(attrs.thinking);
|
|
106
114
|
const temperature = typeof attrs.temperature === "number" ? attrs.temperature : undefined;
|
|
@@ -114,6 +122,7 @@ export function parseRuntimeAgentMarkdownDefinition(input) {
|
|
|
114
122
|
id: parsedInput.id,
|
|
115
123
|
name,
|
|
116
124
|
description,
|
|
125
|
+
...(avatarUrl ? { avatarUrl } : {}),
|
|
117
126
|
instructions: body.trim(),
|
|
118
127
|
...(model ? { model } : {}),
|
|
119
128
|
...(thinking ? { thinking } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-markdown-adapter.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-markdown-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAK5E,yDAAyD;AACzD,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,8BAA8B,GACzC,KAAK,
|
|
1
|
+
{"version":3,"file":"agent-markdown-adapter.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-markdown-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAK5E,yDAAyD;AACzD,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,8BAA8B,GACzC,KAAK,CAwCP;AAED,iDAAiD;AACjD,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,KAAK,GAClB,8BAA8B,GAAG,IAAI,CAEvC;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,KAAK,GAAG,OAAO,CAExE"}
|
|
@@ -25,6 +25,7 @@ export function createRuntimeAgentFromMarkdownDefinition(definition) {
|
|
|
25
25
|
id: definition.id,
|
|
26
26
|
name: definition.name,
|
|
27
27
|
description: definition.description,
|
|
28
|
+
...(definition.avatarUrl ? { avatarUrl: definition.avatarUrl } : {}),
|
|
28
29
|
system: definition.instructions,
|
|
29
30
|
...(definition.model ? { model: definition.model } : {}),
|
|
30
31
|
...(definition.temperature === undefined ? {} : { temperature: definition.temperature }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAGlB,KAAK,OAAO,EAGZ,KAAK,QAAQ,EAGd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwDpE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,8BAA8B,EAC9B,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC5E,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,KAAK,+BAA+B,GACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,62 @@ import { resolveTemperatureParameter } from "./model-capabilities.js";
|
|
|
51
51
|
import { applySkillDelegationOverridesToToolInput, extractSkillDelegationOverrides, } from "./skill-delegation-overrides.js";
|
|
52
52
|
import { resolveAgentModelTransport } from "./model-transport.js";
|
|
53
53
|
const logger = serverLogger.component("agent");
|
|
54
|
+
function buildStreamFinishUsage(usage) {
|
|
55
|
+
if (!usage) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
inputTokens: usage.promptTokens,
|
|
60
|
+
outputTokens: usage.completionTokens,
|
|
61
|
+
totalTokens: usage.totalTokens,
|
|
62
|
+
...(usage.cachedInputTokens !== undefined
|
|
63
|
+
? { cachedInputTokens: usage.cachedInputTokens }
|
|
64
|
+
: {}),
|
|
65
|
+
...(usage.cacheCreationInputTokens !== undefined
|
|
66
|
+
? { cacheCreationInputTokens: usage.cacheCreationInputTokens }
|
|
67
|
+
: {}),
|
|
68
|
+
...(usage.cacheReadInputTokens !== undefined
|
|
69
|
+
? { cacheReadInputTokens: usage.cacheReadInputTokens }
|
|
70
|
+
: {}),
|
|
71
|
+
...(usage.reasoningTokens !== undefined ? { reasoningTokens: usage.reasoningTokens } : {}),
|
|
72
|
+
...(usage.billableInputTokens !== undefined
|
|
73
|
+
? { billableInputTokens: usage.billableInputTokens }
|
|
74
|
+
: {}),
|
|
75
|
+
...(usage.billableOutputTokens !== undefined
|
|
76
|
+
? { billableOutputTokens: usage.billableOutputTokens }
|
|
77
|
+
: {}),
|
|
78
|
+
...(usage.costUsd !== undefined ? { costUsd: usage.costUsd } : {}),
|
|
79
|
+
...(usage.providerInputCostUsd !== undefined
|
|
80
|
+
? { providerInputCostUsd: usage.providerInputCostUsd }
|
|
81
|
+
: {}),
|
|
82
|
+
...(usage.providerOutputCostUsd !== undefined
|
|
83
|
+
? { providerOutputCostUsd: usage.providerOutputCostUsd }
|
|
84
|
+
: {}),
|
|
85
|
+
...(usage.providerCostUsd !== undefined ? { providerCostUsd: usage.providerCostUsd } : {}),
|
|
86
|
+
...(usage.veryfrontInputChargeUsd !== undefined
|
|
87
|
+
? { veryfrontInputChargeUsd: usage.veryfrontInputChargeUsd }
|
|
88
|
+
: {}),
|
|
89
|
+
...(usage.veryfrontOutputChargeUsd !== undefined
|
|
90
|
+
? { veryfrontOutputChargeUsd: usage.veryfrontOutputChargeUsd }
|
|
91
|
+
: {}),
|
|
92
|
+
...(usage.veryfrontChargeUsd !== undefined
|
|
93
|
+
? { veryfrontChargeUsd: usage.veryfrontChargeUsd }
|
|
94
|
+
: {}),
|
|
95
|
+
...(usage.veryfrontBilledUsd !== undefined
|
|
96
|
+
? { veryfrontBilledUsd: usage.veryfrontBilledUsd }
|
|
97
|
+
: {}),
|
|
98
|
+
...(usage.costCredits !== undefined ? { costCredits: usage.costCredits } : {}),
|
|
99
|
+
...(usage.costSource !== undefined ? { costSource: usage.costSource } : {}),
|
|
100
|
+
...(usage.billingMode !== undefined ? { billingMode: usage.billingMode } : {}),
|
|
101
|
+
...(usage.usageCaptureStatus !== undefined
|
|
102
|
+
? { usageCaptureStatus: usage.usageCaptureStatus }
|
|
103
|
+
: {}),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function getResponseFinishReason(response) {
|
|
107
|
+
const finishReason = response.metadata?.finishReason;
|
|
108
|
+
return typeof finishReason === "string" && finishReason.length > 0 ? finishReason : undefined;
|
|
109
|
+
}
|
|
54
110
|
function shouldHideProjectToolAfterAgentWriteSuccess(toolName) {
|
|
55
111
|
return toolName === "create_agent" || toolName === "update_agent";
|
|
56
112
|
}
|
|
@@ -266,7 +322,13 @@ export class AgentRuntime {
|
|
|
266
322
|
throwIfAborted(streamAbortSignal);
|
|
267
323
|
callbacks?.onFinish?.(response);
|
|
268
324
|
throwIfAborted(streamAbortSignal);
|
|
269
|
-
|
|
325
|
+
const finishUsage = buildStreamFinishUsage(response.usage);
|
|
326
|
+
const finishReason = getResponseFinishReason(response);
|
|
327
|
+
sendSSE(controller, encoder, {
|
|
328
|
+
type: "message-finish",
|
|
329
|
+
...(finishReason ? { finishReason } : {}),
|
|
330
|
+
...(finishUsage ? { totalUsage: finishUsage } : {}),
|
|
331
|
+
});
|
|
270
332
|
closeSSEStream(controller);
|
|
271
333
|
}
|
|
272
334
|
catch (error) {
|
|
@@ -18,6 +18,20 @@ export type ChatUiMessageStreamFinishPart = {
|
|
|
18
18
|
textTokens?: number;
|
|
19
19
|
reasoningTokens?: number;
|
|
20
20
|
};
|
|
21
|
+
billableInputTokens?: number;
|
|
22
|
+
billableOutputTokens?: number;
|
|
23
|
+
costUsd?: number;
|
|
24
|
+
providerInputCostUsd?: number;
|
|
25
|
+
providerOutputCostUsd?: number;
|
|
26
|
+
providerCostUsd?: number;
|
|
27
|
+
veryfrontInputChargeUsd?: number;
|
|
28
|
+
veryfrontOutputChargeUsd?: number;
|
|
29
|
+
veryfrontChargeUsd?: number;
|
|
30
|
+
veryfrontBilledUsd?: number;
|
|
31
|
+
costCredits?: number;
|
|
32
|
+
costSource?: "gateway" | "missing" | "partial";
|
|
33
|
+
billingMode?: "direct" | "deferred";
|
|
34
|
+
usageCaptureStatus?: "complete" | "partial" | "missing";
|
|
21
35
|
};
|
|
22
36
|
};
|
|
23
37
|
/** Public API contract for chat UI message stream finish. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-ui-message-stream.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/streaming/chat-ui-message-stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,eAAe,EAChB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-ui-message-stream.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/streaming/chat-ui-message-stream.ts"],"names":[],"mappings":"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"}
|