assistant-stream 0.3.15 → 0.3.17

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 (234) hide show
  1. package/README.md +6 -4
  2. package/dist/core/AssistantStream.d.ts +35 -31
  3. package/dist/core/AssistantStream.d.ts.map +1 -1
  4. package/dist/core/AssistantStream.js +39 -37
  5. package/dist/core/AssistantStream.js.map +1 -1
  6. package/dist/core/AssistantStreamChunk.d.ts +71 -78
  7. package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
  8. package/dist/core/AssistantStreamChunk.js +0 -2
  9. package/dist/core/accumulators/AssistantMessageStream.d.ts +15 -11
  10. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
  11. package/dist/core/accumulators/AssistantMessageStream.js +52 -48
  12. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
  13. package/dist/core/accumulators/TimingTracker.d.ts +15 -11
  14. package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
  15. package/dist/core/accumulators/TimingTracker.js +36 -43
  16. package/dist/core/accumulators/TimingTracker.js.map +1 -1
  17. package/dist/core/accumulators/assistant-message-accumulator.d.ts +21 -11
  18. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
  19. package/dist/core/accumulators/assistant-message-accumulator.js +349 -390
  20. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  21. package/dist/core/converters/toGenericMessages.d.ts +49 -47
  22. package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
  23. package/dist/core/converters/toGenericMessages.js +122 -136
  24. package/dist/core/converters/toGenericMessages.js.map +1 -1
  25. package/dist/core/modules/assistant-stream.d.ts +62 -66
  26. package/dist/core/modules/assistant-stream.d.ts.map +1 -1
  27. package/dist/core/modules/assistant-stream.js +176 -182
  28. package/dist/core/modules/assistant-stream.js.map +1 -1
  29. package/dist/core/modules/text.d.ts +11 -7
  30. package/dist/core/modules/text.d.ts.map +1 -1
  31. package/dist/core/modules/text.js +45 -45
  32. package/dist/core/modules/text.js.map +1 -1
  33. package/dist/core/modules/tool-call.d.ts +15 -11
  34. package/dist/core/modules/tool-call.d.ts.map +1 -1
  35. package/dist/core/modules/tool-call.js +81 -96
  36. package/dist/core/modules/tool-call.js.map +1 -1
  37. package/dist/core/object/ObjectStreamAccumulator.d.ts +13 -9
  38. package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
  39. package/dist/core/object/ObjectStreamAccumulator.js +44 -52
  40. package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
  41. package/dist/core/object/ObjectStreamResponse.d.ts +12 -8
  42. package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
  43. package/dist/core/object/ObjectStreamResponse.js +52 -71
  44. package/dist/core/object/ObjectStreamResponse.js.map +1 -1
  45. package/dist/core/object/createObjectStream.d.ts +14 -8
  46. package/dist/core/object/createObjectStream.d.ts.map +1 -1
  47. package/dist/core/object/createObjectStream.js +50 -47
  48. package/dist/core/object/createObjectStream.js.map +1 -1
  49. package/dist/core/object/types.d.ts +14 -11
  50. package/dist/core/object/types.d.ts.map +1 -1
  51. package/dist/core/object/types.js +0 -2
  52. package/dist/core/serialization/PlainText.d.ts +11 -7
  53. package/dist/core/serialization/PlainText.d.ts.map +1 -1
  54. package/dist/core/serialization/PlainText.js +40 -48
  55. package/dist/core/serialization/PlainText.js.map +1 -1
  56. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +11 -7
  57. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
  58. package/dist/core/serialization/assistant-transport/AssistantTransport.js +102 -117
  59. package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
  60. package/dist/core/serialization/data-stream/DataStream.d.ts +11 -7
  61. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
  62. package/dist/core/serialization/data-stream/DataStream.js +320 -371
  63. package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
  64. package/dist/core/serialization/data-stream/chunk-types.d.ts +101 -100
  65. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
  66. package/dist/core/serialization/data-stream/chunk-types.js +27 -23
  67. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
  68. package/dist/core/serialization/data-stream/serialization.d.ts +9 -5
  69. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
  70. package/dist/core/serialization/data-stream/serialization.js +23 -24
  71. package/dist/core/serialization/data-stream/serialization.js.map +1 -1
  72. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +15 -12
  73. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
  74. package/dist/core/serialization/ui-message-stream/UIMessageStream.js +205 -228
  75. package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
  76. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +68 -65
  77. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
  78. package/dist/core/serialization/ui-message-stream/chunk-types.js +0 -2
  79. package/dist/core/tool/ToolCallReader.d.ts +34 -30
  80. package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
  81. package/dist/core/tool/ToolCallReader.js +264 -317
  82. package/dist/core/tool/ToolCallReader.js.map +1 -1
  83. package/dist/core/tool/ToolExecutionStream.d.ts +20 -17
  84. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
  85. package/dist/core/tool/ToolExecutionStream.js +123 -146
  86. package/dist/core/tool/ToolExecutionStream.js.map +1 -1
  87. package/dist/core/tool/ToolResponse.d.ts +41 -41
  88. package/dist/core/tool/ToolResponse.d.ts.map +1 -1
  89. package/dist/core/tool/ToolResponse.js +50 -56
  90. package/dist/core/tool/ToolResponse.js.map +1 -1
  91. package/dist/core/tool/schema-utils.d.ts +19 -15
  92. package/dist/core/tool/schema-utils.d.ts.map +1 -1
  93. package/dist/core/tool/schema-utils.js +50 -84
  94. package/dist/core/tool/schema-utils.js.map +1 -1
  95. package/dist/core/tool/tool-types.d.ts +103 -122
  96. package/dist/core/tool/tool-types.d.ts.map +1 -1
  97. package/dist/core/tool/tool-types.js +0 -2
  98. package/dist/core/tool/toolResultStream.d.ts +11 -9
  99. package/dist/core/tool/toolResultStream.d.ts.map +1 -1
  100. package/dist/core/tool/toolResultStream.js +127 -157
  101. package/dist/core/tool/toolResultStream.js.map +1 -1
  102. package/dist/core/tool/type-path-utils.d.ts +8 -19
  103. package/dist/core/tool/type-path-utils.d.ts.map +1 -1
  104. package/dist/core/tool/type-path-utils.js +0 -2
  105. package/dist/core/utils/Counter.d.ts +6 -3
  106. package/dist/core/utils/Counter.d.ts.map +1 -1
  107. package/dist/core/utils/Counter.js +10 -6
  108. package/dist/core/utils/Counter.js.map +1 -1
  109. package/dist/core/utils/generateId.d.ts +4 -1
  110. package/dist/core/utils/generateId.d.ts.map +1 -1
  111. package/dist/core/utils/generateId.js +5 -1
  112. package/dist/core/utils/generateId.js.map +1 -1
  113. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +15 -11
  114. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
  115. package/dist/core/utils/stream/AssistantMetaTransformStream.js +38 -42
  116. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
  117. package/dist/core/utils/stream/AssistantTransformStream.d.ts +11 -8
  118. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
  119. package/dist/core/utils/stream/AssistantTransformStream.js +37 -35
  120. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
  121. package/dist/core/utils/stream/LineDecoderStream.d.ts +6 -3
  122. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
  123. package/dist/core/utils/stream/LineDecoderStream.js +23 -26
  124. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
  125. package/dist/core/utils/stream/PipeableTransformStream.d.ts +5 -2
  126. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
  127. package/dist/core/utils/stream/PipeableTransformStream.js +14 -10
  128. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
  129. package/dist/core/utils/stream/SSE.d.ts +10 -6
  130. package/dist/core/utils/stream/SSE.d.ts.map +1 -1
  131. package/dist/core/utils/stream/SSE.js +79 -91
  132. package/dist/core/utils/stream/SSE.js.map +1 -1
  133. package/dist/core/utils/stream/UnderlyingReadable.d.ts +7 -4
  134. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
  135. package/dist/core/utils/stream/UnderlyingReadable.js +0 -2
  136. package/dist/core/utils/stream/merge.d.ts +11 -7
  137. package/dist/core/utils/stream/merge.d.ts.map +1 -1
  138. package/dist/core/utils/stream/merge.js +68 -170
  139. package/dist/core/utils/stream/merge.js.map +1 -1
  140. package/dist/core/utils/stream/path-utils.d.ts +11 -7
  141. package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
  142. package/dist/core/utils/stream/path-utils.js +46 -52
  143. package/dist/core/utils/stream/path-utils.js.map +1 -1
  144. package/dist/core/utils/types.d.ts +109 -113
  145. package/dist/core/utils/types.d.ts.map +1 -1
  146. package/dist/core/utils/types.js +0 -2
  147. package/dist/core/utils/withPromiseOrValue.d.ts +4 -1
  148. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
  149. package/dist/core/utils/withPromiseOrValue.js +12 -15
  150. package/dist/core/utils/withPromiseOrValue.js.map +1 -1
  151. package/dist/index.d.ts +23 -24
  152. package/dist/index.js +16 -16
  153. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
  154. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
  155. package/dist/resumable/ResumableStreamContext.d.ts +28 -24
  156. package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
  157. package/dist/resumable/ResumableStreamContext.js +99 -114
  158. package/dist/resumable/ResumableStreamContext.js.map +1 -1
  159. package/dist/resumable/constants.d.ts +4 -1
  160. package/dist/resumable/constants.d.ts.map +1 -1
  161. package/dist/resumable/constants.js +5 -1
  162. package/dist/resumable/constants.js.map +1 -1
  163. package/dist/resumable/createResumableAssistantStreamResponse.d.ts +22 -21
  164. package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
  165. package/dist/resumable/createResumableAssistantStreamResponse.js +25 -32
  166. package/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -1
  167. package/dist/resumable/errors.d.ts +8 -5
  168. package/dist/resumable/errors.d.ts.map +1 -1
  169. package/dist/resumable/errors.js +14 -12
  170. package/dist/resumable/errors.js.map +1 -1
  171. package/dist/resumable/index.d.ts +7 -7
  172. package/dist/resumable/index.js +5 -5
  173. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +14 -10
  174. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
  175. package/dist/resumable/stores/InMemoryResumableStreamStore.js +159 -193
  176. package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
  177. package/dist/resumable/stores/ioredis.d.ts +9 -5
  178. package/dist/resumable/stores/ioredis.d.ts.map +1 -1
  179. package/dist/resumable/stores/ioredis.js +70 -82
  180. package/dist/resumable/stores/ioredis.js.map +1 -1
  181. package/dist/resumable/stores/redis-impl.d.ts +51 -48
  182. package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
  183. package/dist/resumable/stores/redis-impl.js +176 -176
  184. package/dist/resumable/stores/redis-impl.js.map +1 -1
  185. package/dist/resumable/stores/redis.d.ts +31 -28
  186. package/dist/resumable/stores/redis.d.ts.map +1 -1
  187. package/dist/resumable/stores/redis.js +87 -95
  188. package/dist/resumable/stores/redis.js.map +1 -1
  189. package/dist/resumable/types.d.ts +29 -26
  190. package/dist/resumable/types.d.ts.map +1 -1
  191. package/dist/resumable/types.js +0 -2
  192. package/dist/utils/AsyncIterableStream.d.ts +5 -2
  193. package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
  194. package/dist/utils/AsyncIterableStream.js +17 -16
  195. package/dist/utils/AsyncIterableStream.js.map +1 -1
  196. package/dist/utils/json/fix-json.d.ts +4 -1
  197. package/dist/utils/json/fix-json.d.ts.map +1 -1
  198. package/dist/utils/json/fix-json.js +286 -380
  199. package/dist/utils/json/fix-json.js.map +1 -1
  200. package/dist/utils/json/is-json.d.ts +8 -4
  201. package/dist/utils/json/is-json.d.ts.map +1 -1
  202. package/dist/utils/json/is-json.js +13 -21
  203. package/dist/utils/json/is-json.js.map +1 -1
  204. package/dist/utils/json/json-value.d.ts +7 -4
  205. package/dist/utils/json/json-value.d.ts.map +1 -1
  206. package/dist/utils/json/json-value.js +0 -2
  207. package/dist/utils/json/parse-partial-json-object.d.ts +11 -8
  208. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
  209. package/dist/utils/json/parse-partial-json-object.js +50 -62
  210. package/dist/utils/json/parse-partial-json-object.js.map +1 -1
  211. package/dist/utils/promiseWithResolvers.d.ts +7 -4
  212. package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
  213. package/dist/utils/promiseWithResolvers.js +17 -10
  214. package/dist/utils/promiseWithResolvers.js.map +1 -1
  215. package/dist/utils.d.ts +6 -6
  216. package/dist/utils.js +5 -5
  217. package/package.json +3 -3
  218. package/src/core/modules/assistant-stream.test.ts +104 -0
  219. package/src/core/modules/assistant-stream.ts +13 -4
  220. package/dist/core/AssistantStreamChunk.js.map +0 -1
  221. package/dist/core/object/types.js.map +0 -1
  222. package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
  223. package/dist/core/tool/tool-types.js.map +0 -1
  224. package/dist/core/tool/type-path-utils.js.map +0 -1
  225. package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
  226. package/dist/core/utils/types.js.map +0 -1
  227. package/dist/index.d.ts.map +0 -1
  228. package/dist/index.js.map +0 -1
  229. package/dist/resumable/index.d.ts.map +0 -1
  230. package/dist/resumable/index.js.map +0 -1
  231. package/dist/resumable/types.js.map +0 -1
  232. package/dist/utils/json/json-value.js.map +0 -1
  233. package/dist/utils.d.ts.map +0 -1
  234. package/dist/utils.js.map +0 -1
@@ -1,169 +1,139 @@
1
1
  import { ToolResponse } from "./ToolResponse.js";
2
2
  import { ToolExecutionStream } from "./ToolExecutionStream.js";
3
+ //#region src/core/tool/toolResultStream.ts
3
4
  const isStandardSchemaV1 = (schema) => {
4
- return (typeof schema === "object" &&
5
- schema !== null &&
6
- "~standard" in schema &&
7
- schema["~standard"].version === 1);
5
+ return typeof schema === "object" && schema !== null && "~standard" in schema && schema["~standard"].version === 1;
8
6
  };
9
7
  function getToolResponse(tools, abortSignal, toolCall, human) {
10
- const tool = tools?.[toolCall.toolName];
11
- if (!tool?.execute)
12
- return undefined;
13
- const getResult = async (toolExecute) => {
14
- // Check if already aborted before starting
15
- if (abortSignal.aborted) {
16
- return new ToolResponse({
17
- result: "Tool execution was cancelled.",
18
- isError: true,
19
- });
20
- }
21
- let executeFn = toolExecute;
22
- if (isStandardSchemaV1(tool.parameters)) {
23
- let result = tool.parameters["~standard"].validate(toolCall.args);
24
- if (result instanceof Promise)
25
- result = await result;
26
- if (result.issues) {
27
- executeFn =
28
- tool.experimental_onSchemaValidationError ??
29
- (() => {
30
- throw new Error(`Function parameter validation failed. ${JSON.stringify(result.issues)}`);
31
- });
32
- }
33
- }
34
- // Create abort promise that resolves after 2 microtasks
35
- // This gives tools that handle abort a chance to win the race
36
- const abortPromise = new Promise((resolve) => {
37
- const onAbort = () => {
38
- queueMicrotask(() => {
39
- queueMicrotask(() => {
40
- resolve(new ToolResponse({
41
- result: "Tool execution was cancelled.",
42
- isError: true,
43
- }));
44
- });
45
- });
46
- };
47
- if (abortSignal.aborted) {
48
- onAbort();
49
- }
50
- else {
51
- abortSignal.addEventListener("abort", onAbort, { once: true });
52
- }
53
- });
54
- const executePromise = (async () => {
55
- const result = (await executeFn(toolCall.args, {
56
- toolCallId: toolCall.toolCallId,
57
- abortSignal,
58
- human: (payload) => human(toolCall.toolCallId, payload),
59
- }));
60
- const response = ToolResponse.toResponse(result);
61
- if (tool.toModelOutput &&
62
- !response.isError &&
63
- response.modelContent === undefined) {
64
- try {
65
- const modelContent = await tool.toModelOutput({
66
- toolCallId: toolCall.toolCallId,
67
- input: toolCall.args,
68
- output: response.result,
69
- });
70
- return new ToolResponse({
71
- result: response.result,
72
- artifact: response.artifact,
73
- isError: response.isError,
74
- messages: response.messages,
75
- modelContent,
76
- });
77
- }
78
- catch (e) {
79
- console.warn(`[assistant-stream] tool "${toolCall.toolName}" toModelOutput threw; falling back to default projection.`, e);
80
- }
81
- }
82
- return response;
83
- })();
84
- return Promise.race([executePromise, abortPromise]);
85
- };
86
- return getResult(tool.execute);
8
+ const tool = tools?.[toolCall.toolName];
9
+ if (!tool?.execute) return void 0;
10
+ const getResult = async (toolExecute) => {
11
+ if (abortSignal.aborted) return new ToolResponse({
12
+ result: "Tool execution was cancelled.",
13
+ isError: true
14
+ });
15
+ let executeFn = toolExecute;
16
+ if (isStandardSchemaV1(tool.parameters)) {
17
+ let result = tool.parameters["~standard"].validate(toolCall.args);
18
+ if (result instanceof Promise) result = await result;
19
+ if (result.issues) executeFn = tool.experimental_onSchemaValidationError ?? (() => {
20
+ throw new Error(`Function parameter validation failed. ${JSON.stringify(result.issues)}`);
21
+ });
22
+ }
23
+ const abortPromise = new Promise((resolve) => {
24
+ const onAbort = () => {
25
+ queueMicrotask(() => {
26
+ queueMicrotask(() => {
27
+ resolve(new ToolResponse({
28
+ result: "Tool execution was cancelled.",
29
+ isError: true
30
+ }));
31
+ });
32
+ });
33
+ };
34
+ if (abortSignal.aborted) onAbort();
35
+ else abortSignal.addEventListener("abort", onAbort, { once: true });
36
+ });
37
+ const executePromise = (async () => {
38
+ const result = await executeFn(toolCall.args, {
39
+ toolCallId: toolCall.toolCallId,
40
+ abortSignal,
41
+ human: (payload) => human(toolCall.toolCallId, payload)
42
+ });
43
+ const response = ToolResponse.toResponse(result);
44
+ if (tool.toModelOutput && !response.isError && response.modelContent === void 0) try {
45
+ const modelContent = await tool.toModelOutput({
46
+ toolCallId: toolCall.toolCallId,
47
+ input: toolCall.args,
48
+ output: response.result
49
+ });
50
+ return new ToolResponse({
51
+ result: response.result,
52
+ artifact: response.artifact,
53
+ isError: response.isError,
54
+ messages: response.messages,
55
+ modelContent
56
+ });
57
+ } catch (e) {
58
+ console.warn(`[assistant-stream] tool "${toolCall.toolName}" toModelOutput threw; falling back to default projection.`, e);
59
+ }
60
+ return response;
61
+ })();
62
+ return Promise.race([executePromise, abortPromise]);
63
+ };
64
+ return getResult(tool.execute);
87
65
  }
88
66
  function getToolStreamResponse(tools, abortSignal, reader, context, human) {
89
- tools?.[context.toolName]?.streamCall?.(reader, {
90
- toolCallId: context.toolCallId,
91
- abortSignal,
92
- human: (payload) => human(context.toolCallId, payload),
93
- });
67
+ tools?.[context.toolName]?.streamCall?.(reader, {
68
+ toolCallId: context.toolCallId,
69
+ abortSignal,
70
+ human: (payload) => human(context.toolCallId, payload)
71
+ });
94
72
  }
95
- export async function unstable_runPendingTools(message, tools, abortSignal, human) {
96
- const toolCallPromises = message.parts
97
- .filter((part) => part.type === "tool-call")
98
- .map(async (part) => {
99
- const promiseOrUndefined = getToolResponse(tools, abortSignal, part, human ??
100
- (async () => {
101
- throw new Error("Tool human input is not supported in this context");
102
- }));
103
- if (promiseOrUndefined) {
104
- const result = await promiseOrUndefined;
105
- return {
106
- toolCallId: part.toolCallId,
107
- result,
108
- };
109
- }
110
- return null;
111
- });
112
- const toolCallResults = (await Promise.all(toolCallPromises)).filter((result) => result !== null);
113
- if (toolCallResults.length === 0) {
114
- return message;
115
- }
116
- const toolCallResultsById = toolCallResults.reduce((acc, { toolCallId, result }) => {
117
- acc[toolCallId] = result;
118
- return acc;
119
- }, {});
120
- const updatedParts = message.parts.map((p) => {
121
- if (p.type === "tool-call") {
122
- const toolResponse = toolCallResultsById[p.toolCallId];
123
- if (toolResponse) {
124
- return {
125
- ...p,
126
- state: "result",
127
- ...(toolResponse.artifact !== undefined
128
- ? { artifact: toolResponse.artifact }
129
- : {}),
130
- ...(toolResponse.modelContent !== undefined
131
- ? { modelContent: toolResponse.modelContent }
132
- : {}),
133
- result: toolResponse.result,
134
- isError: toolResponse.isError,
135
- };
136
- }
137
- }
138
- return p;
139
- });
140
- return {
141
- ...message,
142
- parts: updatedParts,
143
- content: updatedParts,
144
- };
73
+ async function unstable_runPendingTools(message, tools, abortSignal, human) {
74
+ const toolCallPromises = message.parts.filter((part) => part.type === "tool-call").map(async (part) => {
75
+ const promiseOrUndefined = getToolResponse(tools, abortSignal, part, human ?? (async () => {
76
+ throw new Error("Tool human input is not supported in this context");
77
+ }));
78
+ if (promiseOrUndefined) {
79
+ const result = await promiseOrUndefined;
80
+ return {
81
+ toolCallId: part.toolCallId,
82
+ result
83
+ };
84
+ }
85
+ return null;
86
+ });
87
+ const toolCallResults = (await Promise.all(toolCallPromises)).filter((result) => result !== null);
88
+ if (toolCallResults.length === 0) return message;
89
+ const toolCallResultsById = toolCallResults.reduce((acc, { toolCallId, result }) => {
90
+ acc[toolCallId] = result;
91
+ return acc;
92
+ }, {});
93
+ const updatedParts = message.parts.map((p) => {
94
+ if (p.type === "tool-call") {
95
+ const toolResponse = toolCallResultsById[p.toolCallId];
96
+ if (toolResponse) return {
97
+ ...p,
98
+ state: "result",
99
+ ...toolResponse.artifact !== void 0 ? { artifact: toolResponse.artifact } : {},
100
+ ...toolResponse.modelContent !== void 0 ? { modelContent: toolResponse.modelContent } : {},
101
+ result: toolResponse.result,
102
+ isError: toolResponse.isError
103
+ };
104
+ }
105
+ return p;
106
+ });
107
+ return {
108
+ ...message,
109
+ parts: updatedParts,
110
+ content: updatedParts
111
+ };
145
112
  }
146
113
  /**
147
- * Transform stream that executes frontend tools and appends tool results.
148
- *
149
- * The transform watches streamed tool-call arguments, runs the matching
150
- * frontend tool once its arguments are complete, and emits a result chunk for
151
- * the tool call. Backend and human tools pass through according to their tool
152
- * definition.
153
- *
154
- * @param tools Tool registry or function returning the current registry.
155
- * @param abortSignal Signal, or signal getter, used for the current run.
156
- * @param human Callback used to resolve human-tool requests from UI input.
157
- * @param options Optional execution lifecycle callbacks.
158
- */
159
- export function toolResultStream(tools, abortSignal, human, options) {
160
- const toolsFn = typeof tools === "function" ? tools : () => tools;
161
- const abortSignalFn = typeof abortSignal === "function" ? abortSignal : () => abortSignal;
162
- return new ToolExecutionStream({
163
- execute: (toolCall) => getToolResponse(toolsFn(), abortSignalFn(), toolCall, human),
164
- streamCall: ({ reader, ...context }) => getToolStreamResponse(toolsFn(), abortSignalFn(), reader, context, human),
165
- onExecutionStart: options?.onExecutionStart,
166
- onExecutionEnd: options?.onExecutionEnd,
167
- });
114
+ * Transform stream that executes frontend tools and appends tool results.
115
+ *
116
+ * The transform watches streamed tool-call arguments, runs the matching
117
+ * frontend tool once its arguments are complete, and emits a result chunk for
118
+ * the tool call. Backend and human tools pass through according to their tool
119
+ * definition.
120
+ *
121
+ * @param tools Tool registry or function returning the current registry.
122
+ * @param abortSignal Signal, or signal getter, used for the current run.
123
+ * @param human Callback used to resolve human-tool requests from UI input.
124
+ * @param options Optional execution lifecycle callbacks.
125
+ */
126
+ function toolResultStream(tools, abortSignal, human, options) {
127
+ const toolsFn = typeof tools === "function" ? tools : () => tools;
128
+ const abortSignalFn = typeof abortSignal === "function" ? abortSignal : () => abortSignal;
129
+ return new ToolExecutionStream({
130
+ execute: (toolCall) => getToolResponse(toolsFn(), abortSignalFn(), toolCall, human),
131
+ streamCall: ({ reader, ...context }) => getToolStreamResponse(toolsFn(), abortSignalFn(), reader, context, human),
132
+ onExecutionStart: options?.onExecutionStart,
133
+ onExecutionEnd: options?.onExecutionEnd
134
+ });
168
135
  }
136
+ //#endregion
137
+ export { toolResultStream, unstable_runPendingTools };
138
+
169
139
  //# sourceMappingURL=toolResultStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolResultStream.js","sourceRoot":"","sources":["../../../src/core/tool/toolResultStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolResultStream.js","names":[],"sources":["../../../src/core/tool/toolResultStream.ts"],"sourcesContent":["import type { Tool, ToolCallReader, ToolExecuteFunction } from \"./tool-types\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { ToolResponse } from \"./ToolResponse\";\nimport { ToolExecutionStream } from \"./ToolExecutionStream\";\nimport type { AssistantMessage } from \"../utils/types\";\nimport type { ReadonlyJSONObject, ReadonlyJSONValue } from \"../../utils\";\n\nconst isStandardSchemaV1 = (\n schema: unknown,\n): schema is StandardSchemaV1<unknown> => {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"~standard\" in schema &&\n (schema as StandardSchemaV1<unknown>)[\"~standard\"].version === 1\n );\n};\n\nfunction getToolResponse(\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n toolCall: {\n toolCallId: string;\n toolName: string;\n args: ReadonlyJSONObject;\n },\n human: (toolCallId: string, payload: unknown) => Promise<unknown>,\n) {\n const tool = tools?.[toolCall.toolName];\n if (!tool?.execute) return undefined;\n\n const getResult = async (\n toolExecute: ToolExecuteFunction<ReadonlyJSONObject, unknown>,\n ): Promise<ToolResponse<ReadonlyJSONValue>> => {\n // Check if already aborted before starting\n if (abortSignal.aborted) {\n return new ToolResponse({\n result: \"Tool execution was cancelled.\",\n isError: true,\n });\n }\n\n let executeFn = toolExecute;\n\n if (isStandardSchemaV1(tool.parameters)) {\n let result = tool.parameters[\"~standard\"].validate(toolCall.args);\n if (result instanceof Promise) result = await result;\n\n if (result.issues) {\n executeFn =\n tool.experimental_onSchemaValidationError ??\n (() => {\n throw new Error(\n `Function parameter validation failed. ${JSON.stringify(result.issues)}`,\n );\n });\n }\n }\n\n // Create abort promise that resolves after 2 microtasks\n // This gives tools that handle abort a chance to win the race\n const abortPromise = new Promise<ToolResponse<ReadonlyJSONValue>>(\n (resolve) => {\n const onAbort = () => {\n queueMicrotask(() => {\n queueMicrotask(() => {\n resolve(\n new ToolResponse({\n result: \"Tool execution was cancelled.\",\n isError: true,\n }),\n );\n });\n });\n };\n if (abortSignal.aborted) {\n onAbort();\n } else {\n abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n }\n },\n );\n\n const executePromise = (async () => {\n const result = (await executeFn(toolCall.args, {\n toolCallId: toolCall.toolCallId,\n abortSignal,\n human: (payload: unknown) => human(toolCall.toolCallId, payload),\n })) as unknown as ReadonlyJSONValue;\n const response = ToolResponse.toResponse(result);\n if (\n tool.toModelOutput &&\n !response.isError &&\n response.modelContent === undefined\n ) {\n try {\n const modelContent = await tool.toModelOutput({\n toolCallId: toolCall.toolCallId,\n input: toolCall.args,\n output: response.result,\n });\n return new ToolResponse({\n result: response.result,\n artifact: response.artifact,\n isError: response.isError,\n messages: response.messages,\n modelContent,\n });\n } catch (e) {\n console.warn(\n `[assistant-stream] tool \"${toolCall.toolName}\" toModelOutput threw; falling back to default projection.`,\n e,\n );\n }\n }\n return response;\n })();\n\n return Promise.race([executePromise, abortPromise]);\n };\n\n return getResult(tool.execute);\n}\n\nfunction getToolStreamResponse(\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n reader: ToolCallReader<any, ReadonlyJSONValue>,\n context: {\n toolCallId: string;\n toolName: string;\n },\n human: (toolCallId: string, payload: unknown) => Promise<unknown>,\n) {\n tools?.[context.toolName]?.streamCall?.(reader, {\n toolCallId: context.toolCallId,\n abortSignal,\n human: (payload: unknown) => human(context.toolCallId, payload),\n });\n}\n\nexport async function unstable_runPendingTools(\n message: AssistantMessage,\n tools: Record<string, Tool> | undefined,\n abortSignal: AbortSignal,\n human: (toolCallId: string, payload: unknown) => Promise<unknown>,\n) {\n const toolCallPromises = message.parts\n .filter((part) => part.type === \"tool-call\")\n .map(async (part) => {\n const promiseOrUndefined = getToolResponse(\n tools,\n abortSignal,\n part,\n human ??\n (async () => {\n throw new Error(\n \"Tool human input is not supported in this context\",\n );\n }),\n );\n if (promiseOrUndefined) {\n const result = await promiseOrUndefined;\n return {\n toolCallId: part.toolCallId,\n result,\n };\n }\n return null;\n });\n\n const toolCallResults = (await Promise.all(toolCallPromises)).filter(\n (result) => result !== null,\n ) as { toolCallId: string; result: ToolResponse<ReadonlyJSONValue> }[];\n\n if (toolCallResults.length === 0) {\n return message;\n }\n\n const toolCallResultsById = toolCallResults.reduce(\n (acc, { toolCallId, result }) => {\n acc[toolCallId] = result;\n return acc;\n },\n {} as Record<string, ToolResponse<ReadonlyJSONValue>>,\n );\n\n const updatedParts = message.parts.map((p) => {\n if (p.type === \"tool-call\") {\n const toolResponse = toolCallResultsById[p.toolCallId];\n if (toolResponse) {\n return {\n ...p,\n state: \"result\" as const,\n ...(toolResponse.artifact !== undefined\n ? { artifact: toolResponse.artifact }\n : {}),\n ...(toolResponse.modelContent !== undefined\n ? { modelContent: toolResponse.modelContent }\n : {}),\n result: toolResponse.result as ReadonlyJSONValue,\n isError: toolResponse.isError,\n };\n }\n }\n return p;\n });\n\n return {\n ...message,\n parts: updatedParts,\n content: updatedParts,\n };\n}\n\nexport type ToolResultStreamOptions = {\n /** Called immediately before a frontend tool's `execute` function runs. */\n onExecutionStart?: (toolCallId: string, toolName: string) => void;\n /** Called after frontend tool execution finishes or fails. */\n onExecutionEnd?: (toolCallId: string, toolName: string) => void;\n};\n\n/**\n * Transform stream that executes frontend tools and appends tool results.\n *\n * The transform watches streamed tool-call arguments, runs the matching\n * frontend tool once its arguments are complete, and emits a result chunk for\n * the tool call. Backend and human tools pass through according to their tool\n * definition.\n *\n * @param tools Tool registry or function returning the current registry.\n * @param abortSignal Signal, or signal getter, used for the current run.\n * @param human Callback used to resolve human-tool requests from UI input.\n * @param options Optional execution lifecycle callbacks.\n */\nexport function toolResultStream(\n tools:\n | Record<string, Tool>\n | (() => Record<string, Tool> | undefined)\n | undefined,\n abortSignal: AbortSignal | (() => AbortSignal),\n human: (toolCallId: string, payload: unknown) => Promise<unknown>,\n options?: ToolResultStreamOptions,\n) {\n const toolsFn = typeof tools === \"function\" ? tools : () => tools;\n const abortSignalFn =\n typeof abortSignal === \"function\" ? abortSignal : () => abortSignal;\n return new ToolExecutionStream({\n execute: (toolCall) =>\n getToolResponse(toolsFn(), abortSignalFn(), toolCall, human),\n streamCall: ({ reader, ...context }) =>\n getToolStreamResponse(toolsFn(), abortSignalFn(), reader, context, human),\n onExecutionStart: options?.onExecutionStart,\n onExecutionEnd: options?.onExecutionEnd,\n });\n}\n"],"mappings":"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"}
@@ -1,23 +1,12 @@
1
+ //#region src/core/tool/type-path-utils.d.ts
1
2
  type AsNumber<K> = K extends `${infer N extends number}` ? N | K : never;
2
3
  type TupleIndex<T extends readonly any[]> = Exclude<keyof T, keyof any[]>;
3
4
  type ObjectKey<T> = keyof T & (string | number);
4
- export type TypePath<T> = [] | (0 extends 1 & T ? any[] : T extends object ? T extends readonly any[] ? number extends T["length"] ? {
5
- [K in TupleIndex<T>]: [AsNumber<K>, ...TypePath<T[K]>];
6
- }[TupleIndex<T>] : [
7
- number,
8
- ...TypePath<T[number]>
9
- ] : {
10
- [K in ObjectKey<T>]: [K, ...TypePath<T[K]>];
11
- }[ObjectKey<T>] : [
12
- ]);
13
- export type TypeAtPath<T, P extends readonly any[]> = P extends [
14
- infer Head,
15
- ...infer Rest
16
- ] ? Head extends keyof T ? TypeAtPath<T[Head], Rest> : never : T;
17
- export type DeepPartial<T> = T extends readonly any[] ? readonly DeepPartial<T[number]>[] : T extends {
18
- [key: string]: any;
19
- } ? {
20
- readonly [K in keyof T]?: DeepPartial<T[K]>;
21
- } : T;
22
- export {};
5
+ type TypePath<T> = [] | (0 extends 1 & T ? any[] : T extends object ? T extends readonly any[] ? number extends T["length"] ? { [K in TupleIndex<T>]: [AsNumber<K>, ...TypePath<T[K]>] }[TupleIndex<T>] : [number, ...TypePath<T[number]>] : { [K in ObjectKey<T>]: [K, ...TypePath<T[K]>] }[ObjectKey<T>] : []);
6
+ type TypeAtPath<T, P extends readonly any[]> = P extends [infer Head, ...infer Rest] ? Head extends keyof T ? TypeAtPath<T[Head], Rest> : never : T;
7
+ type DeepPartial<T> = T extends readonly any[] ? readonly DeepPartial<T[number]>[] : T extends {
8
+ [key: string]: any;
9
+ } ? { readonly [K in keyof T]?: DeepPartial<T[K]> } : T;
10
+ //#endregion
11
+ export { DeepPartial, TypeAtPath, TypePath };
23
12
  //# sourceMappingURL=type-path-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type-path-utils.d.ts","sourceRoot":"","sources":["../../../src/core/tool/type-path-utils.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzE,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;AAC1E,KAAK,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAClB,EAAE,GACF,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GACZ,GAAG,EAAE,GACL,CAAC,SAAS,MAAM,GACd,CAAC,SAAS,SAAS,GAAG,EAAE,GACtB,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,GAExB;KACG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACvD,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAEhB;IAAC,MAAM;IAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAAC,GAElC;KAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAE/D;CAAE,CAAC,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS;IAC9D,MAAM,IAAI;IACV,GAAG,MAAM,IAAI;CACd,GACG,IAAI,SAAS,MAAM,CAAC,GAClB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GACzB,KAAK,GACP,CAAC,CAAC;AAEN,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,EAAE,GACjD,SAAS,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GACjC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAC9B;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC/C,CAAC,CAAC"}
1
+ {"version":3,"file":"type-path-utils.d.ts","names":[],"sources":["../../../src/core/tool/type-path-utils.ts"],"mappings":";KAAK,QAAA,MAAc,CAAA,uCAAwC,CAAA,GAAI,CAAA;AAAA,KAC1D,UAAA,6BAAuC,OAAO,OAAO,CAAA;AAAA,KACrD,SAAA,YAAqB,CAAC;AAAA,KAEf,QAAA,0BAEO,CAAA,WAEX,CAAA,kBACE,CAAA,yCACiB,CAAA,qBAGL,UAAA,CAAW,CAAA,KAAM,QAAA,CAAS,CAAA,MAAO,QAAA,CAAS,CAAA,CAAE,CAAA,MAClD,UAAA,CAAW,CAAA,iBAED,QAAA,CAAS,CAAA,qBAEf,SAAA,CAAU,CAAA,KAAM,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,CAAA,MAAO,SAAA,CAAU,CAAA;AAAA,KAI1D,UAAA,gCAA0C,CAAA,uCAIlD,IAAA,eAAmB,CAAA,GACjB,UAAA,CAAW,CAAA,CAAE,IAAA,GAAO,IAAA,YAEtB,CAAA;AAAA,KAEQ,WAAA,MAAiB,CAAA,mCAChB,WAAA,CAAY,CAAA,cACrB,CAAA;EAAA,CAAa,GAAA;AAAA,2BACY,CAAA,IAAK,WAAA,CAAY,CAAA,CAAE,CAAA,OAC1C,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=type-path-utils.js.map
@@ -1,5 +1,8 @@
1
- export declare class Counter {
2
- value: number;
3
- up(): number;
1
+ //#region src/core/utils/Counter.d.ts
2
+ declare class Counter {
3
+ value: number;
4
+ up(): number;
4
5
  }
6
+ //#endregion
7
+ export { Counter };
5
8
  //# sourceMappingURL=Counter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Counter.d.ts","sourceRoot":"","sources":["../../../src/core/utils/Counter.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;IACX,KAAK,SAAM;IAElB,EAAE;CAGH"}
1
+ {"version":3,"file":"Counter.d.ts","names":[],"sources":["../../../src/core/utils/Counter.ts"],"mappings":";cAAa,OAAA;EACJ,KAAA;EAEP,EAAE,CAAA;AAAA"}
@@ -1,7 +1,11 @@
1
- export class Counter {
2
- value = -1;
3
- up() {
4
- return ++this.value;
5
- }
6
- }
1
+ //#region src/core/utils/Counter.ts
2
+ var Counter = class {
3
+ value = -1;
4
+ up() {
5
+ return ++this.value;
6
+ }
7
+ };
8
+ //#endregion
9
+ export { Counter };
10
+
7
11
  //# sourceMappingURL=Counter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Counter.js","sourceRoot":"","sources":["../../../src/core/utils/Counter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,OAAO;IACX,KAAK,GAAG,CAAC,CAAC,CAAC;IAElB,EAAE;QACA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"Counter.js","names":[],"sources":["../../../src/core/utils/Counter.ts"],"sourcesContent":["export class Counter {\n public value = -1;\n\n up() {\n return ++this.value;\n }\n}\n"],"mappings":";AAAA,IAAa,UAAb,MAAqB;CACnB,QAAe;CAEf,KAAK;EACH,OAAO,EAAE,KAAK;CAChB;AACF"}
@@ -1,2 +1,5 @@
1
- export declare const generateId: (size?: number) => string;
1
+ //#region src/core/utils/generateId.d.ts
2
+ declare const generateId: (size?: number) => string;
3
+ //#endregion
4
+ export { generateId };
2
5
  //# sourceMappingURL=generateId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateId.d.ts","sourceRoot":"","sources":["../../../src/core/utils/generateId.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,2BAGtB,CAAC"}
1
+ {"version":3,"file":"generateId.d.ts","names":[],"sources":["../../../src/core/utils/generateId.ts"],"mappings":";cAEa,UAAA,GAAU,IAAA"}
@@ -1,3 +1,7 @@
1
1
  import { customAlphabet } from "nanoid/non-secure";
2
- export const generateId = customAlphabet("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 7);
2
+ //#region src/core/utils/generateId.ts
3
+ const generateId = customAlphabet("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 7);
4
+ //#endregion
5
+ export { generateId };
6
+
3
7
  //# sourceMappingURL=generateId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateId.js","sourceRoot":"","sources":["../../../src/core/utils/generateId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CACtC,gEAAgE,EAChE,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"generateId.js","names":[],"sources":["../../../src/core/utils/generateId.ts"],"sourcesContent":["import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n"],"mappings":";;AAEA,MAAa,aAAa,eACxB,kEACA,CACF"}
@@ -1,20 +1,24 @@
1
- import type { AssistantStreamChunk, PartInit } from "../../AssistantStreamChunk.js";
1
+ import { AssistantStreamChunk, PartInit } from "../../AssistantStreamChunk.js";
2
+
3
+ //#region src/core/utils/stream/AssistantMetaTransformStream.d.ts
2
4
  /**
3
5
  * For chunk types that are associated with a part,
4
6
  * we require a non‑nullable meta field.
5
7
  */
6
- export type AssistantMetaStreamChunk = (AssistantStreamChunk & {
7
- type: "text-delta" | "part-finish";
8
- meta: PartInit;
8
+ type AssistantMetaStreamChunk = (AssistantStreamChunk & {
9
+ type: "text-delta" | "part-finish";
10
+ meta: PartInit;
9
11
  }) | (AssistantStreamChunk & {
10
- type: "result" | "tool-call-args-text-finish";
11
- meta: PartInit & {
12
- type: "tool-call";
13
- };
12
+ type: "result" | "tool-call-args-text-finish";
13
+ meta: PartInit & {
14
+ type: "tool-call";
15
+ };
14
16
  }) | (AssistantStreamChunk & {
15
- type: Exclude<AssistantStreamChunk["type"], "text-delta" | "result" | "tool-call-args-text-finish" | "part-finish">;
17
+ type: Exclude<AssistantStreamChunk["type"], "text-delta" | "result" | "tool-call-args-text-finish" | "part-finish">;
16
18
  });
17
- export declare class AssistantMetaTransformStream extends TransformStream<AssistantStreamChunk, AssistantMetaStreamChunk> {
18
- constructor();
19
+ declare class AssistantMetaTransformStream extends TransformStream<AssistantStreamChunk, AssistantMetaStreamChunk> {
20
+ constructor();
19
21
  }
22
+ //#endregion
23
+ export { AssistantMetaStreamChunk, AssistantMetaTransformStream };
20
24
  //# sourceMappingURL=AssistantMetaTransformStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantMetaTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,QAAQ,EACT,sCAAmC;AAEpC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,QAAQ,GAAG,4BAA4B,CAAC;IAC9C,IAAI,EAAE,QAAQ,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACxC,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,OAAO,CACX,oBAAoB,CAAC,MAAM,CAAC,EAC5B,YAAY,GAAG,QAAQ,GAAG,4BAA4B,GAAG,aAAa,CACvE,CAAC;CACH,CAAC,CAAC;AACP,qBAAa,4BAA6B,SAAQ,eAAe,CAC/D,oBAAoB,EACpB,wBAAwB,CACzB;;CAiDA"}
1
+ {"version":3,"file":"AssistantMetaTransformStream.d.ts","names":[],"sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"mappings":";;;;;AASA;;KAAY,wBAAA,IACP,oBAAA;EACC,IAAA;EACA,IAAA,EAAM,QAAA;AAAA,MAEP,oBAAA;EACC,IAAA;EACA,IAAA,EAAM,QAAA;IAAa,IAAA;EAAA;AAAA,MAEpB,oBAAA;EACC,IAAA,EAAM,OAAA,CACJ,oBAAA;AAAA;AAAA,cAIK,4BAAA,SAAqC,eAAA,CAChD,oBAAA,EACA,wBAAA"}
@@ -1,43 +1,39 @@
1
- export class AssistantMetaTransformStream extends TransformStream {
2
- constructor() {
3
- // We use an array to record parts as they are introduced.
4
- const parts = [];
5
- super({
6
- transform(chunk, controller) {
7
- // For chunks that introduce a new part.
8
- if (chunk.type === "part-start") {
9
- if (chunk.path.length !== 0) {
10
- controller.error(new Error("Nested parts are not supported"));
11
- return;
12
- }
13
- parts.push(chunk.part);
14
- controller.enqueue(chunk);
15
- return;
16
- }
17
- // For chunks that expect an associated part.
18
- if (chunk.type === "text-delta" ||
19
- chunk.type === "result" ||
20
- chunk.type === "part-finish" ||
21
- chunk.type === "tool-call-args-text-finish") {
22
- if (chunk.path.length !== 1) {
23
- controller.error(new Error(`${chunk.type} chunks must have a path of length 1`));
24
- return;
25
- }
26
- const idx = chunk.path[0];
27
- if (idx < 0 || idx >= parts.length) {
28
- controller.error(new Error(`Invalid path index: ${idx}`));
29
- return;
30
- }
31
- const part = parts[idx];
32
- controller.enqueue({
33
- ...chunk,
34
- meta: part, // TODO
35
- });
36
- return;
37
- }
38
- controller.enqueue(chunk);
39
- },
40
- });
41
- }
42
- }
1
+ //#region src/core/utils/stream/AssistantMetaTransformStream.ts
2
+ var AssistantMetaTransformStream = class extends TransformStream {
3
+ constructor() {
4
+ const parts = [];
5
+ super({ transform(chunk, controller) {
6
+ if (chunk.type === "part-start") {
7
+ if (chunk.path.length !== 0) {
8
+ controller.error(/* @__PURE__ */ new Error("Nested parts are not supported"));
9
+ return;
10
+ }
11
+ parts.push(chunk.part);
12
+ controller.enqueue(chunk);
13
+ return;
14
+ }
15
+ if (chunk.type === "text-delta" || chunk.type === "result" || chunk.type === "part-finish" || chunk.type === "tool-call-args-text-finish") {
16
+ if (chunk.path.length !== 1) {
17
+ controller.error(/* @__PURE__ */ new Error(`${chunk.type} chunks must have a path of length 1`));
18
+ return;
19
+ }
20
+ const idx = chunk.path[0];
21
+ if (idx < 0 || idx >= parts.length) {
22
+ controller.error(/* @__PURE__ */ new Error(`Invalid path index: ${idx}`));
23
+ return;
24
+ }
25
+ const part = parts[idx];
26
+ controller.enqueue({
27
+ ...chunk,
28
+ meta: part
29
+ });
30
+ return;
31
+ }
32
+ controller.enqueue(chunk);
33
+ } });
34
+ }
35
+ };
36
+ //#endregion
37
+ export { AssistantMetaTransformStream };
38
+
43
39
  //# sourceMappingURL=AssistantMetaTransformStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantMetaTransformStream.js","sourceRoot":"","sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"names":[],"mappings":"AAwBA,MAAM,OAAO,4BAA6B,SAAQ,eAGjD;IACC;QACE,0DAA0D;QAC1D,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,KAAK,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,UAAU;gBACzB,wCAAwC;gBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC5B,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBAC9D,OAAO;oBACT,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBAED,6CAA6C;gBAC7C,IACE,KAAK,CAAC,IAAI,KAAK,YAAY;oBAC3B,KAAK,CAAC,IAAI,KAAK,QAAQ;oBACvB,KAAK,CAAC,IAAI,KAAK,aAAa;oBAC5B,KAAK,CAAC,IAAI,KAAK,4BAA4B,EAC3C,CAAC;oBACD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC5B,UAAU,CAAC,KAAK,CACd,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,sCAAsC,CAAC,CAC/D,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;oBAC3B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACnC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;wBAC1D,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAE,CAAC;oBAEzB,UAAU,CAAC,OAAO,CAAC;wBACjB,GAAG,KAAK;wBACR,IAAI,EAAE,IAAW,EAAE,OAAO;qBAC3B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"AssistantMetaTransformStream.js","names":[],"sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"sourcesContent":["import type {\n AssistantStreamChunk,\n PartInit,\n} from \"../../AssistantStreamChunk\";\n\n/**\n * For chunk types that are associated with a part,\n * we require a non‑nullable meta field.\n */\nexport type AssistantMetaStreamChunk =\n | (AssistantStreamChunk & {\n type: \"text-delta\" | \"part-finish\";\n meta: PartInit;\n })\n | (AssistantStreamChunk & {\n type: \"result\" | \"tool-call-args-text-finish\";\n meta: PartInit & { type: \"tool-call\" };\n })\n | (AssistantStreamChunk & {\n type: Exclude<\n AssistantStreamChunk[\"type\"],\n \"text-delta\" | \"result\" | \"tool-call-args-text-finish\" | \"part-finish\"\n >;\n });\nexport class AssistantMetaTransformStream extends TransformStream<\n AssistantStreamChunk,\n AssistantMetaStreamChunk\n> {\n constructor() {\n // We use an array to record parts as they are introduced.\n const parts: PartInit[] = [];\n\n super({\n transform(chunk, controller) {\n // For chunks that introduce a new part.\n if (chunk.type === \"part-start\") {\n if (chunk.path.length !== 0) {\n controller.error(new Error(\"Nested parts are not supported\"));\n return;\n }\n parts.push(chunk.part);\n controller.enqueue(chunk);\n return;\n }\n\n // For chunks that expect an associated part.\n if (\n chunk.type === \"text-delta\" ||\n chunk.type === \"result\" ||\n chunk.type === \"part-finish\" ||\n chunk.type === \"tool-call-args-text-finish\"\n ) {\n if (chunk.path.length !== 1) {\n controller.error(\n new Error(`${chunk.type} chunks must have a path of length 1`),\n );\n return;\n }\n const idx = chunk.path[0]!;\n if (idx < 0 || idx >= parts.length) {\n controller.error(new Error(`Invalid path index: ${idx}`));\n return;\n }\n const part = parts[idx]!;\n\n controller.enqueue({\n ...chunk,\n meta: part as any, // TODO\n });\n return;\n }\n\n controller.enqueue(chunk);\n },\n });\n }\n}\n"],"mappings":";AAwBA,IAAa,+BAAb,cAAkD,gBAGhD;CACA,cAAc;EAEZ,MAAM,QAAoB,CAAC;EAE3B,MAAM,EACJ,UAAU,OAAO,YAAY;GAE3B,IAAI,MAAM,SAAS,cAAc;IAC/B,IAAI,MAAM,KAAK,WAAW,GAAG;KAC3B,WAAW,sBAAM,IAAI,MAAM,gCAAgC,CAAC;KAC5D;IACF;IACA,MAAM,KAAK,MAAM,IAAI;IACrB,WAAW,QAAQ,KAAK;IACxB;GACF;GAGA,IACE,MAAM,SAAS,gBACf,MAAM,SAAS,YACf,MAAM,SAAS,iBACf,MAAM,SAAS,8BACf;IACA,IAAI,MAAM,KAAK,WAAW,GAAG;KAC3B,WAAW,sBACT,IAAI,MAAM,GAAG,MAAM,KAAK,qCAAqC,CAC/D;KACA;IACF;IACA,MAAM,MAAM,MAAM,KAAK;IACvB,IAAI,MAAM,KAAK,OAAO,MAAM,QAAQ;KAClC,WAAW,sBAAM,IAAI,MAAM,uBAAuB,KAAK,CAAC;KACxD;IACF;IACA,MAAM,OAAO,MAAM;IAEnB,WAAW,QAAQ;KACjB,GAAG;KACH,MAAM;IACR,CAAC;IACD;GACF;GAEA,WAAW,QAAQ,KAAK;EAC1B,EACF,CAAC;CACH;AACF"}