assistant-stream 0.1.6 → 0.1.8

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 (261) hide show
  1. package/dist/ai-sdk/index.d.ts +5 -0
  2. package/dist/ai-sdk/index.d.ts.map +1 -0
  3. package/dist/ai-sdk/index.js +199 -0
  4. package/dist/ai-sdk/index.js.map +1 -0
  5. package/dist/ai-sdk/index.mjs +173 -0
  6. package/dist/ai-sdk/index.mjs.map +1 -0
  7. package/dist/ai-sdk/language-model.d.ts +6 -0
  8. package/dist/ai-sdk/language-model.d.ts.map +1 -0
  9. package/dist/ai-sdk/language-model.js +131 -0
  10. package/dist/ai-sdk/language-model.js.map +1 -0
  11. package/dist/ai-sdk/language-model.mjs +106 -0
  12. package/dist/ai-sdk/language-model.mjs.map +1 -0
  13. package/dist/ai-sdk.d.ts +3 -24
  14. package/dist/ai-sdk.d.ts.map +1 -0
  15. package/dist/ai-sdk.js +5 -782
  16. package/dist/ai-sdk.js.map +1 -1
  17. package/dist/ai-sdk.mjs +4 -276
  18. package/dist/ai-sdk.mjs.map +1 -1
  19. package/dist/core/AssistantStream.d.ts +12 -0
  20. package/dist/core/AssistantStream.d.ts.map +1 -0
  21. package/dist/core/AssistantStream.js +46 -0
  22. package/dist/core/AssistantStream.js.map +1 -0
  23. package/dist/core/AssistantStream.mjs +21 -0
  24. package/dist/core/AssistantStream.mjs.map +1 -0
  25. package/dist/core/AssistantStreamChunk.d.ts +64 -0
  26. package/dist/core/AssistantStreamChunk.d.ts.map +1 -0
  27. package/dist/core/AssistantStreamChunk.js +19 -0
  28. package/dist/core/AssistantStreamChunk.js.map +1 -0
  29. package/dist/core/AssistantStreamChunk.mjs +1 -0
  30. package/dist/core/AssistantStreamChunk.mjs.map +1 -0
  31. package/dist/core/accumulators/AssistantMessageStream.d.ts +13 -0
  32. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -0
  33. package/dist/core/accumulators/AssistantMessageStream.js +79 -0
  34. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -0
  35. package/dist/core/accumulators/AssistantMessageStream.mjs +54 -0
  36. package/dist/core/accumulators/AssistantMessageStream.mjs.map +1 -0
  37. package/dist/core/accumulators/assistant-message-accumulator.d.ts +8 -0
  38. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -0
  39. package/dist/core/accumulators/assistant-message-accumulator.js +334 -0
  40. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -0
  41. package/dist/core/accumulators/assistant-message-accumulator.mjs +309 -0
  42. package/dist/core/accumulators/assistant-message-accumulator.mjs.map +1 -0
  43. package/dist/core/index.d.ts +11 -0
  44. package/dist/core/index.d.ts.map +1 -0
  45. package/dist/core/index.js +55 -0
  46. package/dist/core/index.js.map +1 -0
  47. package/dist/core/index.mjs +26 -0
  48. package/dist/core/index.mjs.map +1 -0
  49. package/dist/core/modules/assistant-stream.d.ts +31 -0
  50. package/dist/core/modules/assistant-stream.d.ts.map +1 -0
  51. package/dist/core/modules/assistant-stream.js +224 -0
  52. package/dist/core/modules/assistant-stream.js.map +1 -0
  53. package/dist/core/modules/assistant-stream.mjs +202 -0
  54. package/dist/core/modules/assistant-stream.mjs.map +1 -0
  55. package/dist/core/modules/text.d.ts +9 -0
  56. package/dist/core/modules/text.d.ts.map +1 -0
  57. package/dist/core/modules/text.js +78 -0
  58. package/dist/core/modules/text.js.map +1 -0
  59. package/dist/core/modules/text.mjs +52 -0
  60. package/dist/core/modules/text.mjs.map +1 -0
  61. package/dist/core/modules/tool-call.d.ts +13 -0
  62. package/dist/core/modules/tool-call.d.ts.map +1 -0
  63. package/dist/core/modules/tool-call.js +110 -0
  64. package/dist/core/modules/tool-call.js.map +1 -0
  65. package/dist/core/modules/tool-call.mjs +84 -0
  66. package/dist/core/modules/tool-call.mjs.map +1 -0
  67. package/dist/core/serialization/PlainText.d.ts +11 -0
  68. package/dist/core/serialization/PlainText.d.ts.map +1 -0
  69. package/dist/core/serialization/PlainText.js +70 -0
  70. package/dist/core/serialization/PlainText.js.map +1 -0
  71. package/dist/core/serialization/PlainText.mjs +44 -0
  72. package/dist/core/serialization/PlainText.mjs.map +1 -0
  73. package/dist/core/serialization/data-stream/DataStream.d.ts +11 -0
  74. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -0
  75. package/dist/core/serialization/data-stream/DataStream.js +332 -0
  76. package/dist/core/serialization/data-stream/DataStream.js.map +1 -0
  77. package/dist/core/serialization/data-stream/DataStream.mjs +311 -0
  78. package/dist/core/serialization/data-stream/DataStream.mjs.map +1 -0
  79. package/dist/core/serialization/data-stream/chunk-types.d.ts +86 -0
  80. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -0
  81. package/dist/core/serialization/data-stream/chunk-types.js +49 -0
  82. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -0
  83. package/dist/core/serialization/data-stream/chunk-types.mjs +24 -0
  84. package/dist/core/serialization/data-stream/chunk-types.mjs.map +1 -0
  85. package/dist/core/serialization/data-stream/serialization.d.ts +8 -0
  86. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -0
  87. package/dist/core/serialization/data-stream/serialization.js +56 -0
  88. package/dist/core/serialization/data-stream/serialization.js.map +1 -0
  89. package/dist/core/serialization/data-stream/serialization.mjs +30 -0
  90. package/dist/core/serialization/data-stream/serialization.mjs.map +1 -0
  91. package/dist/core/tool/ToolCallReader.d.ts +33 -0
  92. package/dist/core/tool/ToolCallReader.d.ts.map +1 -0
  93. package/dist/core/tool/ToolCallReader.js +339 -0
  94. package/dist/core/tool/ToolCallReader.js.map +1 -0
  95. package/dist/core/tool/ToolCallReader.mjs +315 -0
  96. package/dist/core/tool/ToolCallReader.mjs.map +1 -0
  97. package/dist/core/tool/ToolExecutionStream.d.ts +24 -0
  98. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -0
  99. package/dist/core/tool/ToolExecutionStream.js +165 -0
  100. package/dist/core/tool/ToolExecutionStream.js.map +1 -0
  101. package/dist/core/tool/ToolExecutionStream.mjs +132 -0
  102. package/dist/core/tool/ToolExecutionStream.mjs.map +1 -0
  103. package/dist/core/tool/ToolResponse.d.ts +17 -0
  104. package/dist/core/tool/ToolResponse.d.ts.map +1 -0
  105. package/dist/core/tool/ToolResponse.js +47 -0
  106. package/dist/core/tool/ToolResponse.js.map +1 -0
  107. package/dist/core/tool/ToolResponse.mjs +22 -0
  108. package/dist/core/tool/ToolResponse.mjs.map +1 -0
  109. package/dist/core/tool/index.d.ts +6 -0
  110. package/dist/core/tool/index.d.ts.map +1 -0
  111. package/dist/core/tool/index.js +39 -0
  112. package/dist/core/tool/index.js.map +1 -0
  113. package/dist/core/tool/index.mjs +14 -0
  114. package/dist/core/tool/index.mjs.map +1 -0
  115. package/dist/core/tool/tool-types.d.ts +76 -0
  116. package/dist/core/tool/tool-types.d.ts.map +1 -0
  117. package/dist/core/tool/tool-types.js +19 -0
  118. package/dist/core/tool/tool-types.js.map +1 -0
  119. package/dist/core/tool/tool-types.mjs +1 -0
  120. package/dist/core/tool/tool-types.mjs.map +1 -0
  121. package/dist/core/tool/toolResultStream.d.ts +6 -0
  122. package/dist/core/tool/toolResultStream.d.ts.map +1 -0
  123. package/dist/core/tool/toolResultStream.js +104 -0
  124. package/dist/core/tool/toolResultStream.js.map +1 -0
  125. package/dist/core/tool/toolResultStream.mjs +78 -0
  126. package/dist/core/tool/toolResultStream.mjs.map +1 -0
  127. package/dist/core/tool/type-path-utils.d.ts +23 -0
  128. package/dist/core/tool/type-path-utils.d.ts.map +1 -0
  129. package/dist/core/tool/type-path-utils.js +19 -0
  130. package/dist/core/tool/type-path-utils.js.map +1 -0
  131. package/dist/core/tool/type-path-utils.mjs +1 -0
  132. package/dist/core/tool/type-path-utils.mjs.map +1 -0
  133. package/dist/core/utils/Counter.d.ts +5 -0
  134. package/dist/core/utils/Counter.d.ts.map +1 -0
  135. package/dist/core/utils/Counter.js +36 -0
  136. package/dist/core/utils/Counter.js.map +1 -0
  137. package/dist/core/utils/Counter.mjs +11 -0
  138. package/dist/core/utils/Counter.mjs.map +1 -0
  139. package/dist/core/utils/generateId.d.ts +2 -0
  140. package/dist/core/utils/generateId.d.ts.map +1 -0
  141. package/dist/core/utils/generateId.js +35 -0
  142. package/dist/core/utils/generateId.js.map +1 -0
  143. package/dist/core/utils/generateId.mjs +10 -0
  144. package/dist/core/utils/generateId.mjs.map +1 -0
  145. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +20 -0
  146. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -0
  147. package/dist/core/utils/stream/AssistantMetaTransformStream.js +69 -0
  148. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -0
  149. package/dist/core/utils/stream/AssistantMetaTransformStream.mjs +44 -0
  150. package/dist/core/utils/stream/AssistantMetaTransformStream.mjs.map +1 -0
  151. package/dist/core/utils/stream/AssistantTransformStream.d.ts +15 -0
  152. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -0
  153. package/dist/core/utils/stream/AssistantTransformStream.js +69 -0
  154. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -0
  155. package/dist/core/utils/stream/AssistantTransformStream.mjs +46 -0
  156. package/dist/core/utils/stream/AssistantTransformStream.mjs.map +1 -0
  157. package/dist/core/utils/stream/LineDecoderStream.d.ts +5 -0
  158. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -0
  159. package/dist/core/utils/stream/LineDecoderStream.js +52 -0
  160. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -0
  161. package/dist/core/utils/stream/LineDecoderStream.mjs +27 -0
  162. package/dist/core/utils/stream/LineDecoderStream.mjs.map +1 -0
  163. package/dist/core/utils/stream/PipeableTransformStream.d.ts +4 -0
  164. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -0
  165. package/dist/core/utils/stream/PipeableTransformStream.js +40 -0
  166. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -0
  167. package/dist/core/utils/stream/PipeableTransformStream.mjs +15 -0
  168. package/dist/core/utils/stream/PipeableTransformStream.mjs.map +1 -0
  169. package/dist/core/utils/stream/UnderlyingReadable.d.ts +6 -0
  170. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -0
  171. package/dist/core/utils/stream/UnderlyingReadable.js +19 -0
  172. package/dist/core/utils/stream/UnderlyingReadable.js.map +1 -0
  173. package/dist/core/utils/stream/UnderlyingReadable.mjs +1 -0
  174. package/dist/core/utils/stream/UnderlyingReadable.mjs.map +1 -0
  175. package/dist/core/utils/stream/merge.d.ts +9 -0
  176. package/dist/core/utils/stream/merge.d.ts.map +1 -0
  177. package/dist/core/utils/stream/merge.js +110 -0
  178. package/dist/core/utils/stream/merge.js.map +1 -0
  179. package/dist/core/utils/stream/merge.mjs +85 -0
  180. package/dist/core/utils/stream/merge.mjs.map +1 -0
  181. package/dist/core/utils/stream/path-utils.d.ts +12 -0
  182. package/dist/core/utils/stream/path-utils.d.ts.map +1 -0
  183. package/dist/core/utils/stream/path-utils.js +88 -0
  184. package/dist/core/utils/stream/path-utils.js.map +1 -0
  185. package/dist/core/utils/stream/path-utils.mjs +61 -0
  186. package/dist/core/utils/stream/path-utils.mjs.map +1 -0
  187. package/dist/core/utils/types.d.ts +102 -0
  188. package/dist/core/utils/types.d.ts.map +1 -0
  189. package/dist/core/utils/types.js +19 -0
  190. package/dist/core/utils/types.js.map +1 -0
  191. package/dist/core/utils/types.mjs +1 -0
  192. package/dist/core/utils/types.mjs.map +1 -0
  193. package/dist/core/utils/withPromiseOrValue.d.ts +2 -0
  194. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -0
  195. package/dist/core/utils/withPromiseOrValue.js +42 -0
  196. package/dist/core/utils/withPromiseOrValue.js.map +1 -0
  197. package/dist/core/utils/withPromiseOrValue.mjs +17 -0
  198. package/dist/core/utils/withPromiseOrValue.mjs.map +1 -0
  199. package/dist/index.d.ts +2 -153
  200. package/dist/index.d.ts.map +1 -0
  201. package/dist/index.js +3 -2318
  202. package/dist/index.js.map +1 -1
  203. package/dist/index.mjs +2 -957
  204. package/dist/index.mjs.map +1 -1
  205. package/dist/utils/AsyncIterableStream.d.ts +3 -0
  206. package/dist/utils/AsyncIterableStream.d.ts.map +1 -0
  207. package/dist/utils/AsyncIterableStream.js +46 -0
  208. package/dist/utils/AsyncIterableStream.js.map +1 -0
  209. package/dist/utils/AsyncIterableStream.mjs +21 -0
  210. package/dist/utils/AsyncIterableStream.mjs.map +1 -0
  211. package/dist/utils/json/fix-json.d.ts +2 -0
  212. package/dist/utils/json/fix-json.d.ts.map +1 -0
  213. package/dist/{chunk-PQLDKUPN.mjs → utils/json/fix-json.js} +28 -66
  214. package/dist/utils/json/fix-json.js.map +1 -0
  215. package/dist/utils/json/fix-json.mjs +362 -0
  216. package/dist/utils/json/fix-json.mjs.map +1 -0
  217. package/dist/utils/json/is-json.d.ts +5 -0
  218. package/dist/utils/json/is-json.d.ts.map +1 -0
  219. package/dist/utils/json/is-json.js +56 -0
  220. package/dist/utils/json/is-json.js.map +1 -0
  221. package/dist/utils/json/is-json.mjs +29 -0
  222. package/dist/utils/json/is-json.mjs.map +1 -0
  223. package/dist/utils/json/json-value.d.ts +6 -0
  224. package/dist/utils/json/json-value.d.ts.map +1 -0
  225. package/dist/utils/json/json-value.js +19 -0
  226. package/dist/utils/json/json-value.js.map +1 -0
  227. package/dist/utils/json/json-value.mjs +1 -0
  228. package/dist/utils/json/json-value.mjs.map +1 -0
  229. package/dist/utils/json/parse-partial-json-object.d.ts +14 -0
  230. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -0
  231. package/dist/utils/json/parse-partial-json-object.js +102 -0
  232. package/dist/utils/json/parse-partial-json-object.js.map +1 -0
  233. package/dist/utils/json/parse-partial-json-object.mjs +65 -0
  234. package/dist/utils/json/parse-partial-json-object.mjs.map +1 -0
  235. package/dist/utils/json/parse-partial-json-object.test.d.ts +2 -0
  236. package/dist/utils/json/parse-partial-json-object.test.d.ts.map +1 -0
  237. package/dist/utils/promiseWithResolvers.d.ts +6 -0
  238. package/dist/utils/promiseWithResolvers.d.ts.map +1 -0
  239. package/dist/utils/promiseWithResolvers.js +40 -0
  240. package/dist/utils/promiseWithResolvers.js.map +1 -0
  241. package/dist/utils/promiseWithResolvers.mjs +15 -0
  242. package/dist/utils/promiseWithResolvers.mjs.map +1 -0
  243. package/dist/utils.d.ts +4 -16
  244. package/dist/utils.d.ts.map +1 -0
  245. package/dist/utils.js +5 -451
  246. package/dist/utils.js.map +1 -1
  247. package/dist/utils.mjs +7 -21
  248. package/dist/utils.mjs.map +1 -1
  249. package/package.json +12 -27
  250. package/dist/AsyncIterableStream-C3C8ZoXv.d.mts +0 -4
  251. package/dist/AsyncIterableStream-C3C8ZoXv.d.ts +0 -4
  252. package/dist/ai-sdk.d.mts +0 -24
  253. package/dist/assistant-stream-ISFjQ0mQ.d.mts +0 -225
  254. package/dist/assistant-stream-kAoIMgvk.d.ts +0 -225
  255. package/dist/chunk-EDE6WQ2R.mjs +0 -943
  256. package/dist/chunk-EDE6WQ2R.mjs.map +0 -1
  257. package/dist/chunk-PQLDKUPN.mjs.map +0 -1
  258. package/dist/index.d.mts +0 -153
  259. package/dist/json-value-Ch5eKkQ_.d.mts +0 -7
  260. package/dist/json-value-Ch5eKkQ_.d.ts +0 -7
  261. package/dist/utils.d.mts +0 -16
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/core/serialization/data-stream/DataStream.ts
21
+ var DataStream_exports = {};
22
+ __export(DataStream_exports, {
23
+ DataStreamDecoder: () => DataStreamDecoder,
24
+ DataStreamEncoder: () => DataStreamEncoder
25
+ });
26
+ module.exports = __toCommonJS(DataStream_exports);
27
+ var import_AssistantTransformStream = require("../../utils/stream/AssistantTransformStream.js");
28
+ var import_PipeableTransformStream = require("../../utils/stream/PipeableTransformStream.js");
29
+ var import_chunk_types = require("./chunk-types.js");
30
+ var import_LineDecoderStream = require("../../utils/stream/LineDecoderStream.js");
31
+ var import_serialization = require("./serialization.js");
32
+ var import_AssistantMetaTransformStream = require("../../utils/stream/AssistantMetaTransformStream.js");
33
+ var DataStreamEncoder = class extends import_PipeableTransformStream.PipeableTransformStream {
34
+ headers = new Headers({
35
+ "Content-Type": "text/plain; charset=utf-8",
36
+ "x-vercel-ai-data-stream": "v1"
37
+ });
38
+ constructor() {
39
+ super((readable) => {
40
+ const transform = new TransformStream({
41
+ transform(chunk, controller) {
42
+ const type = chunk.type;
43
+ switch (type) {
44
+ case "part-start": {
45
+ const part = chunk.part;
46
+ if (part.type === "tool-call") {
47
+ const { type: type2, ...value } = part;
48
+ controller.enqueue({
49
+ type: import_chunk_types.DataStreamStreamChunkType.StartToolCall,
50
+ value
51
+ });
52
+ }
53
+ if (part.type === "source") {
54
+ const { type: type2, ...value } = part;
55
+ controller.enqueue({
56
+ type: import_chunk_types.DataStreamStreamChunkType.Source,
57
+ value
58
+ });
59
+ }
60
+ break;
61
+ }
62
+ case "text-delta": {
63
+ const part = chunk.meta;
64
+ switch (part.type) {
65
+ case "text": {
66
+ controller.enqueue({
67
+ type: import_chunk_types.DataStreamStreamChunkType.TextDelta,
68
+ value: chunk.textDelta
69
+ });
70
+ break;
71
+ }
72
+ case "reasoning": {
73
+ controller.enqueue({
74
+ type: import_chunk_types.DataStreamStreamChunkType.ReasoningDelta,
75
+ value: chunk.textDelta
76
+ });
77
+ break;
78
+ }
79
+ case "tool-call": {
80
+ controller.enqueue({
81
+ type: import_chunk_types.DataStreamStreamChunkType.ToolCallArgsTextDelta,
82
+ value: {
83
+ toolCallId: part.toolCallId,
84
+ argsTextDelta: chunk.textDelta
85
+ }
86
+ });
87
+ break;
88
+ }
89
+ default:
90
+ throw new Error(
91
+ `Unsupported part type for text-delta: ${part.type}`
92
+ );
93
+ }
94
+ break;
95
+ }
96
+ case "result": {
97
+ const part = chunk.meta;
98
+ if (part.type !== "tool-call") {
99
+ throw new Error(
100
+ `Result chunk on non-tool-call part not supported: ${part.type}`
101
+ );
102
+ }
103
+ controller.enqueue({
104
+ type: import_chunk_types.DataStreamStreamChunkType.ToolCallResult,
105
+ value: {
106
+ toolCallId: part.toolCallId,
107
+ result: chunk.result,
108
+ artifact: chunk.artifact,
109
+ ...chunk.isError ? { isError: chunk.isError } : {}
110
+ }
111
+ });
112
+ break;
113
+ }
114
+ case "step-start": {
115
+ const { type: type2, ...value } = chunk;
116
+ controller.enqueue({
117
+ type: import_chunk_types.DataStreamStreamChunkType.StartStep,
118
+ value
119
+ });
120
+ break;
121
+ }
122
+ case "step-finish": {
123
+ const { type: type2, ...value } = chunk;
124
+ controller.enqueue({
125
+ type: import_chunk_types.DataStreamStreamChunkType.FinishStep,
126
+ value
127
+ });
128
+ break;
129
+ }
130
+ case "message-finish": {
131
+ const { type: type2, ...value } = chunk;
132
+ controller.enqueue({
133
+ type: import_chunk_types.DataStreamStreamChunkType.FinishMessage,
134
+ value
135
+ });
136
+ break;
137
+ }
138
+ case "error": {
139
+ controller.enqueue({
140
+ type: import_chunk_types.DataStreamStreamChunkType.Error,
141
+ value: chunk.error
142
+ });
143
+ break;
144
+ }
145
+ case "annotations": {
146
+ controller.enqueue({
147
+ type: import_chunk_types.DataStreamStreamChunkType.Annotation,
148
+ value: chunk.annotations
149
+ });
150
+ break;
151
+ }
152
+ case "data": {
153
+ controller.enqueue({
154
+ type: import_chunk_types.DataStreamStreamChunkType.Data,
155
+ value: chunk.data
156
+ });
157
+ break;
158
+ }
159
+ // TODO ignore for now
160
+ // in the future, we should create a handler that waits for text parts to finish before continuing
161
+ case "tool-call-args-text-finish":
162
+ case "part-finish":
163
+ break;
164
+ default: {
165
+ const exhaustiveCheck = type;
166
+ throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);
167
+ }
168
+ }
169
+ }
170
+ });
171
+ return readable.pipeThrough(new import_AssistantMetaTransformStream.AssistantMetaTransformStream()).pipeThrough(transform).pipeThrough(new import_serialization.DataStreamChunkEncoder()).pipeThrough(new TextEncoderStream());
172
+ });
173
+ }
174
+ };
175
+ var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
176
+ import_chunk_types.DataStreamStreamChunkType.StartToolCall,
177
+ import_chunk_types.DataStreamStreamChunkType.ToolCall,
178
+ import_chunk_types.DataStreamStreamChunkType.TextDelta,
179
+ import_chunk_types.DataStreamStreamChunkType.ReasoningDelta,
180
+ import_chunk_types.DataStreamStreamChunkType.Source,
181
+ import_chunk_types.DataStreamStreamChunkType.Error,
182
+ import_chunk_types.DataStreamStreamChunkType.FinishStep,
183
+ import_chunk_types.DataStreamStreamChunkType.FinishMessage
184
+ ];
185
+ var DataStreamDecoder = class extends import_PipeableTransformStream.PipeableTransformStream {
186
+ constructor() {
187
+ super((readable) => {
188
+ const toolCallControllers = /* @__PURE__ */ new Map();
189
+ let activeToolCallArgsText;
190
+ const transform = new import_AssistantTransformStream.AssistantTransformStream({
191
+ transform(chunk, controller) {
192
+ const { type, value } = chunk;
193
+ if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {
194
+ activeToolCallArgsText?.close();
195
+ activeToolCallArgsText = void 0;
196
+ }
197
+ switch (type) {
198
+ case import_chunk_types.DataStreamStreamChunkType.ReasoningDelta:
199
+ controller.appendReasoning(value);
200
+ break;
201
+ case import_chunk_types.DataStreamStreamChunkType.TextDelta:
202
+ controller.appendText(value);
203
+ break;
204
+ case import_chunk_types.DataStreamStreamChunkType.StartToolCall: {
205
+ const { toolCallId, toolName } = value;
206
+ const toolCallController = controller.addToolCallPart({
207
+ toolCallId,
208
+ toolName
209
+ });
210
+ toolCallControllers.set(toolCallId, toolCallController);
211
+ activeToolCallArgsText = toolCallController.argsText;
212
+ break;
213
+ }
214
+ case import_chunk_types.DataStreamStreamChunkType.ToolCallArgsTextDelta: {
215
+ const { toolCallId, argsTextDelta } = value;
216
+ const toolCallController = toolCallControllers.get(toolCallId);
217
+ if (!toolCallController)
218
+ throw new Error(
219
+ "Encountered tool call with unknown id: " + toolCallId
220
+ );
221
+ toolCallController.argsText.append(argsTextDelta);
222
+ break;
223
+ }
224
+ case import_chunk_types.DataStreamStreamChunkType.ToolCallResult: {
225
+ const { toolCallId, artifact, result, isError } = value;
226
+ const toolCallController = toolCallControllers.get(toolCallId);
227
+ if (!toolCallController)
228
+ throw new Error(
229
+ "Encountered tool call result with unknown id: " + toolCallId
230
+ );
231
+ toolCallController.setResponse({
232
+ artifact,
233
+ result,
234
+ isError
235
+ });
236
+ break;
237
+ }
238
+ case import_chunk_types.DataStreamStreamChunkType.ToolCall: {
239
+ const { toolCallId, toolName, args } = value;
240
+ let toolCallController = toolCallControllers.get(toolCallId);
241
+ if (toolCallController) {
242
+ toolCallController.argsText.close();
243
+ } else {
244
+ toolCallController = controller.addToolCallPart({
245
+ toolCallId,
246
+ toolName,
247
+ args
248
+ });
249
+ toolCallControllers.set(toolCallId, toolCallController);
250
+ }
251
+ break;
252
+ }
253
+ case import_chunk_types.DataStreamStreamChunkType.FinishMessage:
254
+ controller.enqueue({
255
+ type: "message-finish",
256
+ path: [],
257
+ ...value
258
+ });
259
+ break;
260
+ case import_chunk_types.DataStreamStreamChunkType.StartStep:
261
+ controller.enqueue({
262
+ type: "step-start",
263
+ path: [],
264
+ ...value
265
+ });
266
+ break;
267
+ case import_chunk_types.DataStreamStreamChunkType.FinishStep:
268
+ controller.enqueue({
269
+ type: "step-finish",
270
+ path: [],
271
+ ...value
272
+ });
273
+ break;
274
+ case import_chunk_types.DataStreamStreamChunkType.Data:
275
+ controller.enqueue({
276
+ type: "data",
277
+ path: [],
278
+ data: value
279
+ });
280
+ break;
281
+ case import_chunk_types.DataStreamStreamChunkType.Annotation:
282
+ controller.enqueue({
283
+ type: "annotations",
284
+ path: [],
285
+ annotations: value
286
+ });
287
+ break;
288
+ case import_chunk_types.DataStreamStreamChunkType.Source:
289
+ controller.appendSource({
290
+ type: "source",
291
+ ...value
292
+ });
293
+ break;
294
+ case import_chunk_types.DataStreamStreamChunkType.Error:
295
+ controller.enqueue({
296
+ type: "error",
297
+ path: [],
298
+ error: value
299
+ });
300
+ break;
301
+ case import_chunk_types.DataStreamStreamChunkType.File:
302
+ controller.appendFile({
303
+ type: "file",
304
+ ...value
305
+ });
306
+ break;
307
+ case import_chunk_types.DataStreamStreamChunkType.ReasoningSignature:
308
+ case import_chunk_types.DataStreamStreamChunkType.RedactedReasoning:
309
+ break;
310
+ default: {
311
+ const exhaustiveCheck = type;
312
+ throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
313
+ }
314
+ }
315
+ },
316
+ flush() {
317
+ activeToolCallArgsText?.close();
318
+ activeToolCallArgsText = void 0;
319
+ toolCallControllers.forEach((controller) => controller.close());
320
+ toolCallControllers.clear();
321
+ }
322
+ });
323
+ return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new import_LineDecoderStream.LineDecoderStream()).pipeThrough(new import_serialization.DataStreamChunkDecoder()).pipeThrough(transform);
324
+ });
325
+ }
326
+ };
327
+ // Annotate the CommonJS export names for ESM import in node:
328
+ 0 && (module.exports = {
329
+ DataStreamDecoder,
330
+ DataStreamEncoder
331
+ });
332
+ //# sourceMappingURL=DataStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { ToolCallStreamController } from \"../../modules/tool-call\";\nimport { AssistantTransformStream } from \"../../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport { DataStreamChunk, DataStreamStreamChunkType } from \"./chunk-types\";\nimport { LineDecoderStream } from \"../../utils/stream/LineDecoderStream\";\nimport {\n DataStreamChunkDecoder,\n DataStreamChunkEncoder,\n} from \"./serialization\";\nimport {\n AssistantMetaStreamChunk,\n AssistantMetaTransformStream,\n} from \"../../utils/stream/AssistantMetaTransformStream\";\nimport { TextStreamController } from \"../../modules/text\";\nimport { AssistantStreamEncoder } from \"../../AssistantStream\";\n\nexport class DataStreamEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n });\n\n constructor() {\n super((readable) => {\n const transform = new TransformStream<\n AssistantMetaStreamChunk,\n DataStreamChunk\n >({\n transform(chunk, controller) {\n const type = chunk.type;\n switch (type) {\n case \"part-start\": {\n const part = chunk.part;\n if (part.type === \"tool-call\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartToolCall,\n value,\n });\n }\n if (part.type === \"source\") {\n const { type, ...value } = part;\n controller.enqueue({\n type: DataStreamStreamChunkType.Source,\n value,\n });\n }\n break;\n }\n case \"text-delta\": {\n const part = chunk.meta;\n switch (part.type) {\n case \"text\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.TextDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"reasoning\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.ReasoningDelta,\n value: chunk.textDelta,\n });\n break;\n }\n case \"tool-call\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallArgsTextDelta,\n value: {\n toolCallId: part.toolCallId,\n argsTextDelta: chunk.textDelta,\n },\n });\n break;\n }\n default:\n throw new Error(\n `Unsupported part type for text-delta: ${part.type}`,\n );\n }\n break;\n }\n case \"result\": {\n // Only tool-call parts can have results.\n const part = chunk.meta;\n if (part.type !== \"tool-call\") {\n throw new Error(\n `Result chunk on non-tool-call part not supported: ${part.type}`,\n );\n }\n controller.enqueue({\n type: DataStreamStreamChunkType.ToolCallResult,\n value: {\n toolCallId: part.toolCallId,\n result: chunk.result,\n artifact: chunk.artifact,\n ...(chunk.isError ? { isError: chunk.isError } : {}),\n },\n });\n break;\n }\n case \"step-start\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.StartStep,\n value,\n });\n break;\n }\n case \"step-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishStep,\n value,\n });\n break;\n }\n case \"message-finish\": {\n const { type, ...value } = chunk;\n controller.enqueue({\n type: DataStreamStreamChunkType.FinishMessage,\n value,\n });\n break;\n }\n case \"error\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Error,\n value: chunk.error,\n });\n break;\n }\n case \"annotations\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Annotation,\n value: chunk.annotations,\n });\n break;\n }\n case \"data\": {\n controller.enqueue({\n type: DataStreamStreamChunkType.Data,\n value: chunk.data,\n });\n break;\n }\n\n // TODO ignore for now\n // in the future, we should create a handler that waits for text parts to finish before continuing\n case \"tool-call-args-text-finish\":\n case \"part-finish\":\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n });\n\n return readable\n .pipeThrough(new AssistantMetaTransformStream())\n .pipeThrough(transform)\n .pipeThrough(new DataStreamChunkEncoder())\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\nconst TOOL_CALL_ARGS_CLOSING_CHUNKS = [\n DataStreamStreamChunkType.StartToolCall,\n DataStreamStreamChunkType.ToolCall,\n DataStreamStreamChunkType.TextDelta,\n DataStreamStreamChunkType.ReasoningDelta,\n DataStreamStreamChunkType.Source,\n DataStreamStreamChunkType.Error,\n DataStreamStreamChunkType.FinishStep,\n DataStreamStreamChunkType.FinishMessage,\n];\n\nexport class DataStreamDecoder extends PipeableTransformStream<\n Uint8Array,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n const toolCallControllers = new Map<string, ToolCallStreamController>();\n let activeToolCallArgsText: TextStreamController | undefined;\n const transform = new AssistantTransformStream<DataStreamChunk>({\n transform(chunk, controller) {\n const { type, value } = chunk;\n\n if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n }\n\n switch (type) {\n case DataStreamStreamChunkType.ReasoningDelta:\n controller.appendReasoning(value);\n break;\n\n case DataStreamStreamChunkType.TextDelta:\n controller.appendText(value);\n break;\n\n case DataStreamStreamChunkType.StartToolCall: {\n const { toolCallId, toolName } = value;\n const toolCallController = controller.addToolCallPart({\n toolCallId,\n toolName,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n\n activeToolCallArgsText = toolCallController.argsText;\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallArgsTextDelta: {\n const { toolCallId, argsTextDelta } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call with unknown id: \" + toolCallId,\n );\n toolCallController.argsText.append(argsTextDelta);\n break;\n }\n\n case DataStreamStreamChunkType.ToolCallResult: {\n const { toolCallId, artifact, result, isError } = value;\n const toolCallController = toolCallControllers.get(toolCallId);\n if (!toolCallController)\n throw new Error(\n \"Encountered tool call result with unknown id: \" + toolCallId,\n );\n toolCallController.setResponse({\n artifact,\n result,\n isError,\n });\n break;\n }\n\n case DataStreamStreamChunkType.ToolCall: {\n const { toolCallId, toolName, args } = value;\n\n let toolCallController = toolCallControllers.get(toolCallId);\n if (toolCallController) {\n toolCallController.argsText.close();\n } else {\n toolCallController = controller.addToolCallPart({\n toolCallId,\n toolName,\n args,\n });\n toolCallControllers.set(toolCallId, toolCallController);\n }\n break;\n }\n\n case DataStreamStreamChunkType.FinishMessage:\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.StartStep:\n controller.enqueue({\n type: \"step-start\",\n path: [],\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.FinishStep:\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n ...value,\n });\n break;\n case DataStreamStreamChunkType.Data:\n controller.enqueue({\n type: \"data\",\n path: [],\n data: value,\n });\n break;\n\n case DataStreamStreamChunkType.Annotation:\n controller.enqueue({\n type: \"annotations\",\n path: [],\n annotations: value,\n });\n break;\n\n case DataStreamStreamChunkType.Source:\n controller.appendSource({\n type: \"source\",\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.Error:\n controller.enqueue({\n type: \"error\",\n path: [],\n error: value,\n });\n break;\n\n case DataStreamStreamChunkType.File:\n controller.appendFile({\n type: \"file\",\n ...value,\n });\n break;\n\n case DataStreamStreamChunkType.ReasoningSignature:\n case DataStreamStreamChunkType.RedactedReasoning:\n // ignore these for now\n break;\n\n default: {\n const exhaustiveCheck: never = type;\n throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n flush() {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n toolCallControllers.forEach((controller) => controller.close());\n toolCallControllers.clear();\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new DataStreamChunkDecoder())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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","names":["type"]}
@@ -0,0 +1,311 @@
1
+ // src/core/serialization/data-stream/DataStream.ts
2
+ import { AssistantTransformStream } from "../../utils/stream/AssistantTransformStream.mjs";
3
+ import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream.mjs";
4
+ import { DataStreamStreamChunkType } from "./chunk-types.mjs";
5
+ import { LineDecoderStream } from "../../utils/stream/LineDecoderStream.mjs";
6
+ import {
7
+ DataStreamChunkDecoder,
8
+ DataStreamChunkEncoder
9
+ } from "./serialization.mjs";
10
+ import {
11
+ AssistantMetaTransformStream
12
+ } from "../../utils/stream/AssistantMetaTransformStream.mjs";
13
+ var DataStreamEncoder = class extends PipeableTransformStream {
14
+ headers = new Headers({
15
+ "Content-Type": "text/plain; charset=utf-8",
16
+ "x-vercel-ai-data-stream": "v1"
17
+ });
18
+ constructor() {
19
+ super((readable) => {
20
+ const transform = new TransformStream({
21
+ transform(chunk, controller) {
22
+ const type = chunk.type;
23
+ switch (type) {
24
+ case "part-start": {
25
+ const part = chunk.part;
26
+ if (part.type === "tool-call") {
27
+ const { type: type2, ...value } = part;
28
+ controller.enqueue({
29
+ type: DataStreamStreamChunkType.StartToolCall,
30
+ value
31
+ });
32
+ }
33
+ if (part.type === "source") {
34
+ const { type: type2, ...value } = part;
35
+ controller.enqueue({
36
+ type: DataStreamStreamChunkType.Source,
37
+ value
38
+ });
39
+ }
40
+ break;
41
+ }
42
+ case "text-delta": {
43
+ const part = chunk.meta;
44
+ switch (part.type) {
45
+ case "text": {
46
+ controller.enqueue({
47
+ type: DataStreamStreamChunkType.TextDelta,
48
+ value: chunk.textDelta
49
+ });
50
+ break;
51
+ }
52
+ case "reasoning": {
53
+ controller.enqueue({
54
+ type: DataStreamStreamChunkType.ReasoningDelta,
55
+ value: chunk.textDelta
56
+ });
57
+ break;
58
+ }
59
+ case "tool-call": {
60
+ controller.enqueue({
61
+ type: DataStreamStreamChunkType.ToolCallArgsTextDelta,
62
+ value: {
63
+ toolCallId: part.toolCallId,
64
+ argsTextDelta: chunk.textDelta
65
+ }
66
+ });
67
+ break;
68
+ }
69
+ default:
70
+ throw new Error(
71
+ `Unsupported part type for text-delta: ${part.type}`
72
+ );
73
+ }
74
+ break;
75
+ }
76
+ case "result": {
77
+ const part = chunk.meta;
78
+ if (part.type !== "tool-call") {
79
+ throw new Error(
80
+ `Result chunk on non-tool-call part not supported: ${part.type}`
81
+ );
82
+ }
83
+ controller.enqueue({
84
+ type: DataStreamStreamChunkType.ToolCallResult,
85
+ value: {
86
+ toolCallId: part.toolCallId,
87
+ result: chunk.result,
88
+ artifact: chunk.artifact,
89
+ ...chunk.isError ? { isError: chunk.isError } : {}
90
+ }
91
+ });
92
+ break;
93
+ }
94
+ case "step-start": {
95
+ const { type: type2, ...value } = chunk;
96
+ controller.enqueue({
97
+ type: DataStreamStreamChunkType.StartStep,
98
+ value
99
+ });
100
+ break;
101
+ }
102
+ case "step-finish": {
103
+ const { type: type2, ...value } = chunk;
104
+ controller.enqueue({
105
+ type: DataStreamStreamChunkType.FinishStep,
106
+ value
107
+ });
108
+ break;
109
+ }
110
+ case "message-finish": {
111
+ const { type: type2, ...value } = chunk;
112
+ controller.enqueue({
113
+ type: DataStreamStreamChunkType.FinishMessage,
114
+ value
115
+ });
116
+ break;
117
+ }
118
+ case "error": {
119
+ controller.enqueue({
120
+ type: DataStreamStreamChunkType.Error,
121
+ value: chunk.error
122
+ });
123
+ break;
124
+ }
125
+ case "annotations": {
126
+ controller.enqueue({
127
+ type: DataStreamStreamChunkType.Annotation,
128
+ value: chunk.annotations
129
+ });
130
+ break;
131
+ }
132
+ case "data": {
133
+ controller.enqueue({
134
+ type: DataStreamStreamChunkType.Data,
135
+ value: chunk.data
136
+ });
137
+ break;
138
+ }
139
+ // TODO ignore for now
140
+ // in the future, we should create a handler that waits for text parts to finish before continuing
141
+ case "tool-call-args-text-finish":
142
+ case "part-finish":
143
+ break;
144
+ default: {
145
+ const exhaustiveCheck = type;
146
+ throw new Error(`Unsupported chunk type: ${exhaustiveCheck}`);
147
+ }
148
+ }
149
+ }
150
+ });
151
+ return readable.pipeThrough(new AssistantMetaTransformStream()).pipeThrough(transform).pipeThrough(new DataStreamChunkEncoder()).pipeThrough(new TextEncoderStream());
152
+ });
153
+ }
154
+ };
155
+ var TOOL_CALL_ARGS_CLOSING_CHUNKS = [
156
+ DataStreamStreamChunkType.StartToolCall,
157
+ DataStreamStreamChunkType.ToolCall,
158
+ DataStreamStreamChunkType.TextDelta,
159
+ DataStreamStreamChunkType.ReasoningDelta,
160
+ DataStreamStreamChunkType.Source,
161
+ DataStreamStreamChunkType.Error,
162
+ DataStreamStreamChunkType.FinishStep,
163
+ DataStreamStreamChunkType.FinishMessage
164
+ ];
165
+ var DataStreamDecoder = class extends PipeableTransformStream {
166
+ constructor() {
167
+ super((readable) => {
168
+ const toolCallControllers = /* @__PURE__ */ new Map();
169
+ let activeToolCallArgsText;
170
+ const transform = new AssistantTransformStream({
171
+ transform(chunk, controller) {
172
+ const { type, value } = chunk;
173
+ if (TOOL_CALL_ARGS_CLOSING_CHUNKS.includes(type)) {
174
+ activeToolCallArgsText?.close();
175
+ activeToolCallArgsText = void 0;
176
+ }
177
+ switch (type) {
178
+ case DataStreamStreamChunkType.ReasoningDelta:
179
+ controller.appendReasoning(value);
180
+ break;
181
+ case DataStreamStreamChunkType.TextDelta:
182
+ controller.appendText(value);
183
+ break;
184
+ case DataStreamStreamChunkType.StartToolCall: {
185
+ const { toolCallId, toolName } = value;
186
+ const toolCallController = controller.addToolCallPart({
187
+ toolCallId,
188
+ toolName
189
+ });
190
+ toolCallControllers.set(toolCallId, toolCallController);
191
+ activeToolCallArgsText = toolCallController.argsText;
192
+ break;
193
+ }
194
+ case DataStreamStreamChunkType.ToolCallArgsTextDelta: {
195
+ const { toolCallId, argsTextDelta } = value;
196
+ const toolCallController = toolCallControllers.get(toolCallId);
197
+ if (!toolCallController)
198
+ throw new Error(
199
+ "Encountered tool call with unknown id: " + toolCallId
200
+ );
201
+ toolCallController.argsText.append(argsTextDelta);
202
+ break;
203
+ }
204
+ case DataStreamStreamChunkType.ToolCallResult: {
205
+ const { toolCallId, artifact, result, isError } = value;
206
+ const toolCallController = toolCallControllers.get(toolCallId);
207
+ if (!toolCallController)
208
+ throw new Error(
209
+ "Encountered tool call result with unknown id: " + toolCallId
210
+ );
211
+ toolCallController.setResponse({
212
+ artifact,
213
+ result,
214
+ isError
215
+ });
216
+ break;
217
+ }
218
+ case DataStreamStreamChunkType.ToolCall: {
219
+ const { toolCallId, toolName, args } = value;
220
+ let toolCallController = toolCallControllers.get(toolCallId);
221
+ if (toolCallController) {
222
+ toolCallController.argsText.close();
223
+ } else {
224
+ toolCallController = controller.addToolCallPart({
225
+ toolCallId,
226
+ toolName,
227
+ args
228
+ });
229
+ toolCallControllers.set(toolCallId, toolCallController);
230
+ }
231
+ break;
232
+ }
233
+ case DataStreamStreamChunkType.FinishMessage:
234
+ controller.enqueue({
235
+ type: "message-finish",
236
+ path: [],
237
+ ...value
238
+ });
239
+ break;
240
+ case DataStreamStreamChunkType.StartStep:
241
+ controller.enqueue({
242
+ type: "step-start",
243
+ path: [],
244
+ ...value
245
+ });
246
+ break;
247
+ case DataStreamStreamChunkType.FinishStep:
248
+ controller.enqueue({
249
+ type: "step-finish",
250
+ path: [],
251
+ ...value
252
+ });
253
+ break;
254
+ case DataStreamStreamChunkType.Data:
255
+ controller.enqueue({
256
+ type: "data",
257
+ path: [],
258
+ data: value
259
+ });
260
+ break;
261
+ case DataStreamStreamChunkType.Annotation:
262
+ controller.enqueue({
263
+ type: "annotations",
264
+ path: [],
265
+ annotations: value
266
+ });
267
+ break;
268
+ case DataStreamStreamChunkType.Source:
269
+ controller.appendSource({
270
+ type: "source",
271
+ ...value
272
+ });
273
+ break;
274
+ case DataStreamStreamChunkType.Error:
275
+ controller.enqueue({
276
+ type: "error",
277
+ path: [],
278
+ error: value
279
+ });
280
+ break;
281
+ case DataStreamStreamChunkType.File:
282
+ controller.appendFile({
283
+ type: "file",
284
+ ...value
285
+ });
286
+ break;
287
+ case DataStreamStreamChunkType.ReasoningSignature:
288
+ case DataStreamStreamChunkType.RedactedReasoning:
289
+ break;
290
+ default: {
291
+ const exhaustiveCheck = type;
292
+ throw new Error(`unsupported chunk type: ${exhaustiveCheck}`);
293
+ }
294
+ }
295
+ },
296
+ flush() {
297
+ activeToolCallArgsText?.close();
298
+ activeToolCallArgsText = void 0;
299
+ toolCallControllers.forEach((controller) => controller.close());
300
+ toolCallControllers.clear();
301
+ }
302
+ });
303
+ return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new DataStreamChunkDecoder()).pipeThrough(transform);
304
+ });
305
+ }
306
+ };
307
+ export {
308
+ DataStreamDecoder,
309
+ DataStreamEncoder
310
+ };
311
+ //# sourceMappingURL=DataStream.mjs.map