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.
Files changed (87) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/agent/ag-ui/chat-ui-chunk-browser-encoder.d.ts.map +1 -1
  3. package/esm/src/agent/ag-ui/chat-ui-chunk-browser-encoder.js +59 -0
  4. package/esm/src/agent/ag-ui/handler.d.ts.map +1 -1
  5. package/esm/src/agent/ag-ui/handler.js +12 -2
  6. package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.d.ts +30 -0
  7. package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.d.ts.map +1 -1
  8. package/esm/src/agent/ag-ui/runtime-chat-stream-encoder.js +108 -0
  9. package/esm/src/agent/ag-ui/runtime-handler.d.ts.map +1 -1
  10. package/esm/src/agent/ag-ui/runtime-handler.js +7 -1
  11. package/esm/src/agent/hosted/chat-execution-runtime.d.ts +4 -0
  12. package/esm/src/agent/hosted/chat-execution-runtime.d.ts.map +1 -1
  13. package/esm/src/agent/hosted/chat-execution-runtime.js +6 -0
  14. package/esm/src/agent/hosted/chat-runtime-contract.d.ts +14 -0
  15. package/esm/src/agent/hosted/chat-runtime-contract.d.ts.map +1 -1
  16. package/esm/src/agent/project/agent-runtime.d.ts.map +1 -1
  17. package/esm/src/agent/project/agent-runtime.js +3 -0
  18. package/esm/src/agent/react/index.d.ts +2 -0
  19. package/esm/src/agent/react/index.d.ts.map +1 -1
  20. package/esm/src/agent/react/index.js +1 -0
  21. package/esm/src/agent/react/use-agent-metadata.d.ts +42 -0
  22. package/esm/src/agent/react/use-agent-metadata.d.ts.map +1 -0
  23. package/esm/src/agent/react/use-agent-metadata.js +133 -0
  24. package/esm/src/agent/react/use-chat/streaming/handler.d.ts.map +1 -1
  25. package/esm/src/agent/react/use-chat/streaming/handler.js +41 -16
  26. package/esm/src/agent/react/use-chat/streaming/types.d.ts +1 -1
  27. package/esm/src/agent/react/use-chat/streaming/types.d.ts.map +1 -1
  28. package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
  29. package/esm/src/agent/react/use-chat/use-chat.js +9 -4
  30. package/esm/src/agent/react/use-chat/utils.d.ts +1 -1
  31. package/esm/src/agent/react/use-chat/utils.d.ts.map +1 -1
  32. package/esm/src/agent/react/use-chat/utils.js +2 -1
  33. package/esm/src/agent/runtime/agent-definition.d.ts +2 -0
  34. package/esm/src/agent/runtime/agent-definition.d.ts.map +1 -1
  35. package/esm/src/agent/runtime/agent-definition.js +9 -0
  36. package/esm/src/agent/runtime/agent-markdown-adapter.d.ts.map +1 -1
  37. package/esm/src/agent/runtime/agent-markdown-adapter.js +1 -0
  38. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  39. package/esm/src/agent/runtime/index.js +63 -1
  40. package/esm/src/agent/streaming/chat-ui-message-stream.d.ts +14 -0
  41. package/esm/src/agent/streaming/chat-ui-message-stream.d.ts.map +1 -1
  42. package/esm/src/agent/streaming/chat-ui-message-stream.js +10 -4
  43. package/esm/src/agent/types.d.ts +4 -0
  44. package/esm/src/agent/types.d.ts.map +1 -1
  45. package/esm/src/channels/control-plane.d.ts +8 -0
  46. package/esm/src/channels/control-plane.d.ts.map +1 -1
  47. package/esm/src/channels/control-plane.js +18 -3
  48. package/esm/src/chat/ag-ui.d.ts +2 -0
  49. package/esm/src/chat/ag-ui.d.ts.map +1 -1
  50. package/esm/src/chat/ag-ui.js +5 -1
  51. package/esm/src/chat/chat-ui-message-helpers.d.ts +2 -0
  52. package/esm/src/chat/chat-ui-message-helpers.d.ts.map +1 -1
  53. package/esm/src/chat/chat-ui-message-helpers.js +73 -2
  54. package/esm/src/chat/index.d.ts +1 -0
  55. package/esm/src/chat/index.d.ts.map +1 -1
  56. package/esm/src/chat/index.js +1 -0
  57. package/esm/src/chat/protocol.d.ts +16 -0
  58. package/esm/src/chat/protocol.d.ts.map +1 -1
  59. package/esm/src/chat/types.d.ts +45 -0
  60. package/esm/src/chat/types.d.ts.map +1 -1
  61. package/esm/src/chat/types.js +15 -0
  62. package/esm/src/eval/model-comparison.d.ts.map +1 -1
  63. package/esm/src/eval/model-comparison.js +26 -6
  64. package/esm/src/react/components/chat/chat/composition/agent-avatar.d.ts +16 -0
  65. package/esm/src/react/components/chat/chat/composition/agent-avatar.d.ts.map +1 -0
  66. package/esm/src/react/components/chat/chat/composition/agent-avatar.js +24 -0
  67. package/esm/src/react/components/chat/chat/composition/api.d.ts +1 -0
  68. package/esm/src/react/components/chat/chat/composition/api.d.ts.map +1 -1
  69. package/esm/src/react/components/chat/chat/composition/api.js +1 -0
  70. package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts.map +1 -1
  71. package/esm/src/react/components/chat/chat/composition/chat-message-list.js +16 -1
  72. package/esm/src/react/components/chat/chat/composition/message.d.ts.map +1 -1
  73. package/esm/src/react/components/chat/chat/composition/message.js +10 -2
  74. package/esm/src/react/components/chat/chat/index.d.ts +1 -1
  75. package/esm/src/react/components/chat/chat/index.d.ts.map +1 -1
  76. package/esm/src/react/components/chat/chat/index.js +1 -1
  77. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  78. package/esm/src/server/handlers/dev/framework-candidates.generated.js +56 -2
  79. package/esm/src/server/handlers/request/public-agent-metadata.handler.d.ts +10 -0
  80. package/esm/src/server/handlers/request/public-agent-metadata.handler.d.ts.map +1 -0
  81. package/esm/src/server/handlers/request/public-agent-metadata.handler.js +52 -0
  82. package/esm/src/server/runtime-handler/index.d.ts +1 -1
  83. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  84. package/esm/src/server/runtime-handler/index.js +3 -0
  85. package/esm/src/utils/version-constant.d.ts +1 -1
  86. package/esm/src/utils/version-constant.js +1 -1
  87. 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":"AASA,OAAO,KAAK,EAKV,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AA8BpB,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
+ {"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 handleStart(parsed, state) {
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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
- onUpdate?.(getBuildParts(), state.messageId);
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,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,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
+ {"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,CAmZnE"}
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) => (m.id === oldId ? { ...m, id, parts } : 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: { model: serverModel } }]);
190
+ setMessages((prev) => [...prev, { id, role: "assistant", parts, metadata }]);
188
191
  return;
189
192
  }
190
- setMessages((prev) => prev.map((m) => (m.id === currentMessageIdRef.current ? { ...m, parts } : 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,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,WAAW,CAM/F"}
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;;;;;;;;;;;;;;;;GAenD,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,CA6BhC;AAkBD,4CAA4C;AAC5C,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qCAAqC,GAC3C,iBAAiB,EAAE,CA2CrB"}
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,CAuCP;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"}
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":"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"}
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
- sendSSE(controller, encoder, { type: "message-finish" });
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;AAa7B,kEAAkE;AAClE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,gBAAgB,CAAC;IAC/B,eAAe,EAAE,gBAAgB,CAAC;IAClC,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE;YACjB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC;QACF,kBAAkB,EAAE;YAClB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,eAAe,CAAC,EAAE,MAAM,CAAC;SAC1B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,yBAAyB,CAAC,gBAAgB,GAAG,eAAe,IAAI;IAC1E,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACjD,cAAc,EAAE,KAAK,CAAC;IACtB,eAAe,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACjD,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,gBAAgB,CAAC;CAChC,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,0BAA0B,CAAC,gBAAgB,GAAG,eAAe,IAAI;IAC3E,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACrC,eAAe,CAAC,EAAE,CAChB,KAAK,EAAE;QAAE,IAAI,EAAE,6BAA6B,CAAA;KAAE,KAC3C,gBAAgB,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAClF,CAAC;AAsbF,sDAAsD;AACtD,wBAAgB,uCAAuC,CAAC,gBAAgB,GAAG,eAAe,EACxF,KAAK,EAAE;IAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;CAAE,EAC7C,OAAO,GAAE,0BAA0B,CAAC,gBAAgB,CAAM,GACzD,aAAa,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAiGpD"}
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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"}