assistant-stream 0.1.5 → 0.1.7

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 +2 -1
  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,339 @@
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/tool/ToolCallReader.ts
21
+ var ToolCallReader_exports = {};
22
+ __export(ToolCallReader_exports, {
23
+ ToolCallArgsReaderImpl: () => ToolCallArgsReaderImpl,
24
+ ToolCallReaderImpl: () => ToolCallReaderImpl,
25
+ ToolCallResponseReaderImpl: () => ToolCallResponseReaderImpl
26
+ });
27
+ module.exports = __toCommonJS(ToolCallReader_exports);
28
+ var import_promiseWithResolvers = require("../../utils/promiseWithResolvers.js");
29
+ var import_parse_partial_json_object = require("../../utils/json/parse-partial-json-object.js");
30
+ function getField(obj, fieldPath) {
31
+ let current = obj;
32
+ for (const key of fieldPath) {
33
+ if (current === void 0 || current === null) {
34
+ return void 0;
35
+ }
36
+ current = current[key];
37
+ }
38
+ return current;
39
+ }
40
+ var GetHandle = class {
41
+ resolve;
42
+ reject;
43
+ disposed = false;
44
+ fieldPath;
45
+ constructor(resolve, reject, fieldPath) {
46
+ this.resolve = resolve;
47
+ this.reject = reject;
48
+ this.fieldPath = fieldPath;
49
+ }
50
+ update(args) {
51
+ if (this.disposed) return;
52
+ try {
53
+ if ((0, import_parse_partial_json_object.getPartialJsonObjectFieldState)(
54
+ args,
55
+ this.fieldPath
56
+ ) === "complete") {
57
+ const value = getField(args, this.fieldPath);
58
+ if (value !== void 0) {
59
+ this.resolve(value);
60
+ this.dispose();
61
+ }
62
+ }
63
+ } catch (e) {
64
+ this.reject(e);
65
+ this.dispose();
66
+ }
67
+ }
68
+ dispose() {
69
+ this.disposed = true;
70
+ }
71
+ };
72
+ var StreamValuesHandle = class {
73
+ controller;
74
+ disposed = false;
75
+ fieldPath;
76
+ constructor(controller, fieldPath) {
77
+ this.controller = controller;
78
+ this.fieldPath = fieldPath;
79
+ }
80
+ update(args) {
81
+ if (this.disposed) return;
82
+ try {
83
+ const value = getField(args, this.fieldPath);
84
+ if (value !== void 0) {
85
+ this.controller.enqueue(value);
86
+ }
87
+ if ((0, import_parse_partial_json_object.getPartialJsonObjectFieldState)(
88
+ args,
89
+ this.fieldPath
90
+ ) === "complete") {
91
+ this.controller.close();
92
+ this.dispose();
93
+ }
94
+ } catch (e) {
95
+ this.controller.error(e);
96
+ this.dispose();
97
+ }
98
+ }
99
+ dispose() {
100
+ this.disposed = true;
101
+ }
102
+ };
103
+ var StreamTextHandle = class {
104
+ controller;
105
+ disposed = false;
106
+ fieldPath;
107
+ lastValue = void 0;
108
+ constructor(controller, fieldPath) {
109
+ this.controller = controller;
110
+ this.fieldPath = fieldPath;
111
+ }
112
+ update(args) {
113
+ if (this.disposed) return;
114
+ try {
115
+ const value = getField(args, this.fieldPath);
116
+ if (value !== void 0 && typeof value === "string") {
117
+ const delta = value.substring(this.lastValue?.length || 0);
118
+ this.lastValue = value;
119
+ this.controller.enqueue(delta);
120
+ }
121
+ if ((0, import_parse_partial_json_object.getPartialJsonObjectFieldState)(
122
+ args,
123
+ this.fieldPath
124
+ ) === "complete") {
125
+ this.controller.close();
126
+ this.dispose();
127
+ }
128
+ } catch (e) {
129
+ this.controller.error(e);
130
+ this.dispose();
131
+ }
132
+ }
133
+ dispose() {
134
+ this.disposed = true;
135
+ }
136
+ };
137
+ var ForEachHandle = class {
138
+ controller;
139
+ disposed = false;
140
+ fieldPath;
141
+ processedIndexes = /* @__PURE__ */ new Set();
142
+ constructor(controller, fieldPath) {
143
+ this.controller = controller;
144
+ this.fieldPath = fieldPath;
145
+ }
146
+ update(args) {
147
+ if (this.disposed) return;
148
+ try {
149
+ const array = getField(args, this.fieldPath);
150
+ if (!Array.isArray(array)) {
151
+ return;
152
+ }
153
+ for (let i = 0; i < array.length; i++) {
154
+ if (!this.processedIndexes.has(i)) {
155
+ const elementPath = [...this.fieldPath, i];
156
+ if ((0, import_parse_partial_json_object.getPartialJsonObjectFieldState)(
157
+ args,
158
+ elementPath
159
+ ) === "complete") {
160
+ this.controller.enqueue(array[i]);
161
+ this.processedIndexes.add(i);
162
+ }
163
+ }
164
+ }
165
+ if ((0, import_parse_partial_json_object.getPartialJsonObjectFieldState)(
166
+ args,
167
+ this.fieldPath
168
+ ) === "complete") {
169
+ this.controller.close();
170
+ this.dispose();
171
+ }
172
+ } catch (e) {
173
+ this.controller.error(e);
174
+ this.dispose();
175
+ }
176
+ }
177
+ dispose() {
178
+ this.disposed = true;
179
+ }
180
+ };
181
+ var ToolCallArgsReaderImpl = class {
182
+ argTextDeltas;
183
+ handles = /* @__PURE__ */ new Set();
184
+ args = (0, import_parse_partial_json_object.parsePartialJsonObject)("");
185
+ constructor(argTextDeltas) {
186
+ this.argTextDeltas = argTextDeltas;
187
+ this.processStream();
188
+ }
189
+ async processStream() {
190
+ try {
191
+ let accumulatedText = "";
192
+ const reader = this.argTextDeltas.getReader();
193
+ while (true) {
194
+ const { value, done } = await reader.read();
195
+ if (done) break;
196
+ accumulatedText += value;
197
+ const parsedArgs = (0, import_parse_partial_json_object.parsePartialJsonObject)(accumulatedText);
198
+ if (parsedArgs !== void 0) {
199
+ this.args = parsedArgs;
200
+ for (const handle of this.handles) {
201
+ handle.update(parsedArgs);
202
+ }
203
+ }
204
+ }
205
+ } catch (error) {
206
+ console.error("Error processing argument stream:", error);
207
+ for (const handle of this.handles) {
208
+ handle.dispose();
209
+ }
210
+ }
211
+ }
212
+ get(...fieldPath) {
213
+ return new Promise((resolve, reject) => {
214
+ const handle = new GetHandle(resolve, reject, fieldPath);
215
+ if (this.args && (0, import_parse_partial_json_object.getPartialJsonObjectFieldState)(
216
+ this.args,
217
+ fieldPath
218
+ ) === "complete") {
219
+ const value = getField(this.args, fieldPath);
220
+ if (value !== void 0) {
221
+ resolve(value);
222
+ return;
223
+ }
224
+ }
225
+ this.handles.add(handle);
226
+ handle.update(this.args);
227
+ });
228
+ }
229
+ streamValues(...fieldPath) {
230
+ const simplePath = fieldPath;
231
+ const stream = new ReadableStream({
232
+ start: (controller) => {
233
+ const handle = new StreamValuesHandle(controller, simplePath);
234
+ this.handles.add(handle);
235
+ handle.update(this.args);
236
+ },
237
+ cancel: () => {
238
+ for (const handle of this.handles) {
239
+ if (handle instanceof StreamValuesHandle) {
240
+ handle.dispose();
241
+ this.handles.delete(handle);
242
+ break;
243
+ }
244
+ }
245
+ }
246
+ });
247
+ return stream;
248
+ }
249
+ streamText(...fieldPath) {
250
+ const simplePath = fieldPath;
251
+ const stream = new ReadableStream({
252
+ start: (controller) => {
253
+ const handle = new StreamTextHandle(controller, simplePath);
254
+ this.handles.add(handle);
255
+ handle.update(this.args);
256
+ },
257
+ cancel: () => {
258
+ for (const handle of this.handles) {
259
+ if (handle instanceof StreamTextHandle) {
260
+ handle.dispose();
261
+ this.handles.delete(handle);
262
+ break;
263
+ }
264
+ }
265
+ }
266
+ });
267
+ return stream;
268
+ }
269
+ forEach(...fieldPath) {
270
+ const simplePath = fieldPath;
271
+ const stream = new ReadableStream({
272
+ start: (controller) => {
273
+ const handle = new ForEachHandle(controller, simplePath);
274
+ this.handles.add(handle);
275
+ handle.update(this.args);
276
+ },
277
+ cancel: () => {
278
+ for (const handle of this.handles) {
279
+ if (handle instanceof ForEachHandle) {
280
+ handle.dispose();
281
+ this.handles.delete(handle);
282
+ break;
283
+ }
284
+ }
285
+ }
286
+ });
287
+ return stream;
288
+ }
289
+ };
290
+ var ToolCallResponseReaderImpl = class {
291
+ constructor(promise) {
292
+ this.promise = promise;
293
+ }
294
+ get() {
295
+ return this.promise;
296
+ }
297
+ };
298
+ var ToolCallReaderImpl = class {
299
+ args;
300
+ response;
301
+ writable;
302
+ resolve;
303
+ argsText = "";
304
+ constructor() {
305
+ const stream = new TransformStream();
306
+ this.writable = stream.writable;
307
+ this.args = new ToolCallArgsReaderImpl(stream.readable);
308
+ const { promise, resolve } = (0, import_promiseWithResolvers.promiseWithResolvers)();
309
+ this.resolve = resolve;
310
+ this.response = new ToolCallResponseReaderImpl(promise);
311
+ }
312
+ async appendArgsTextDelta(text) {
313
+ const writer = this.writable.getWriter();
314
+ try {
315
+ await writer.write(text);
316
+ } catch (err) {
317
+ console.warn(err);
318
+ } finally {
319
+ writer.releaseLock();
320
+ }
321
+ this.argsText += text;
322
+ }
323
+ setResponse(value) {
324
+ this.resolve(value);
325
+ }
326
+ result = {
327
+ get: async () => {
328
+ const response = await this.response.get();
329
+ return response.result;
330
+ }
331
+ };
332
+ };
333
+ // Annotate the CommonJS export names for ESM import in node:
334
+ 0 && (module.exports = {
335
+ ToolCallArgsReaderImpl,
336
+ ToolCallReaderImpl,
337
+ ToolCallResponseReaderImpl
338
+ });
339
+ //# sourceMappingURL=ToolCallReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/tool/ToolCallReader.ts"],"sourcesContent":["import { promiseWithResolvers } from \"../../utils/promiseWithResolvers\";\nimport {\n parsePartialJsonObject,\n getPartialJsonObjectFieldState,\n} from \"../../utils/json/parse-partial-json-object\";\nimport {\n ToolCallArgsReader,\n ToolCallReader,\n ToolCallResponseReader,\n} from \"./tool-types\";\nimport { TypeAtPath, TypePath } from \"./type-path-utils\";\nimport { ToolResponse } from \"./ToolResponse\";\n\n// TODO: remove dispose\n\nfunction getField<T>(obj: T, fieldPath: (string | number)[]): any {\n let current: any = obj;\n for (const key of fieldPath) {\n if (current === undefined || current === null) {\n return undefined;\n }\n current = current[key as string | number];\n }\n return current;\n}\n\ninterface Handle {\n update(args: unknown): void;\n dispose(): void;\n}\n\nclass GetHandle<T> implements Handle {\n private resolve: (value: any) => void;\n private reject: (reason: unknown) => void;\n private disposed = false;\n private fieldPath: (string | number)[];\n\n constructor(\n resolve: (value: any) => void,\n reject: (reason: unknown) => void,\n fieldPath: (string | number)[],\n ) {\n this.resolve = resolve;\n this.reject = reject;\n this.fieldPath = fieldPath;\n }\n\n update(args: unknown): void {\n if (this.disposed) return;\n\n try {\n // Check if the field is complete\n if (\n getPartialJsonObjectFieldState(\n args as Record<string, unknown>,\n this.fieldPath,\n ) === \"complete\"\n ) {\n const value = getField(args as T, this.fieldPath);\n if (value !== undefined) {\n this.resolve(value);\n this.dispose();\n }\n }\n } catch (e) {\n this.reject(e);\n this.dispose();\n }\n }\n\n dispose(): void {\n this.disposed = true;\n }\n}\n\nclass StreamValuesHandle<T> implements Handle {\n private controller: ReadableStreamDefaultController<any>;\n private disposed = false;\n private fieldPath: (string | number)[];\n\n constructor(\n controller: ReadableStreamDefaultController<any>,\n fieldPath: (string | number)[],\n ) {\n this.controller = controller;\n this.fieldPath = fieldPath;\n }\n\n update(args: unknown): void {\n if (this.disposed) return;\n\n try {\n const value = getField(args as T, this.fieldPath);\n\n if (value !== undefined) {\n this.controller.enqueue(value);\n }\n\n // Check if the field is complete, if so close the stream\n if (\n getPartialJsonObjectFieldState(\n args as Record<string, unknown>,\n this.fieldPath,\n ) === \"complete\"\n ) {\n this.controller.close();\n this.dispose();\n }\n } catch (e) {\n this.controller.error(e);\n this.dispose();\n }\n }\n\n dispose(): void {\n this.disposed = true;\n }\n}\n\nclass StreamTextHandle<T> implements Handle {\n private controller: ReadableStreamDefaultController<any>;\n private disposed = false;\n private fieldPath: (string | number)[];\n private lastValue: any = undefined;\n\n constructor(\n controller: ReadableStreamDefaultController<any>,\n fieldPath: (string | number)[],\n ) {\n this.controller = controller;\n this.fieldPath = fieldPath;\n }\n\n update(args: unknown): void {\n if (this.disposed) return;\n\n try {\n const value = getField(args as T, this.fieldPath);\n\n if (value !== undefined && typeof value === \"string\") {\n const delta = value.substring(this.lastValue?.length || 0);\n this.lastValue = value;\n this.controller.enqueue(delta);\n }\n\n // Check if the field is complete, if so close the stream\n if (\n getPartialJsonObjectFieldState(\n args as Record<string, unknown>,\n this.fieldPath,\n ) === \"complete\"\n ) {\n this.controller.close();\n this.dispose();\n }\n } catch (e) {\n this.controller.error(e);\n this.dispose();\n }\n }\n\n dispose(): void {\n this.disposed = true;\n }\n}\n\nclass ForEachHandle<T> implements Handle {\n private controller: ReadableStreamDefaultController<any>;\n private disposed = false;\n private fieldPath: (string | number)[];\n private processedIndexes = new Set<number>();\n\n constructor(\n controller: ReadableStreamDefaultController<any>,\n fieldPath: (string | number)[],\n ) {\n this.controller = controller;\n this.fieldPath = fieldPath;\n }\n\n update(args: unknown): void {\n if (this.disposed) return;\n\n try {\n const array = getField(args as T, this.fieldPath) as unknown as any[];\n\n if (!Array.isArray(array)) {\n return;\n }\n\n // Check each array element and emit completed ones that haven't been processed\n for (let i = 0; i < array.length; i++) {\n if (!this.processedIndexes.has(i)) {\n const elementPath = [...this.fieldPath, i];\n if (\n getPartialJsonObjectFieldState(\n args as Record<string, unknown>,\n elementPath,\n ) === \"complete\"\n ) {\n this.controller.enqueue(array[i]);\n this.processedIndexes.add(i);\n }\n }\n }\n\n // Check if the entire array is complete\n if (\n getPartialJsonObjectFieldState(\n args as Record<string, unknown>,\n this.fieldPath,\n ) === \"complete\"\n ) {\n this.controller.close();\n this.dispose();\n }\n } catch (e) {\n this.controller.error(e);\n this.dispose();\n }\n }\n\n dispose(): void {\n this.disposed = true;\n }\n}\n\n// Implementation of ToolCallReader that uses stream of partial JSON\nexport class ToolCallArgsReaderImpl<T> implements ToolCallArgsReader<T> {\n private argTextDeltas: ReadableStream<string>;\n private handles: Set<Handle> = new Set();\n private args: any = parsePartialJsonObject(\"\");\n\n constructor(argTextDeltas: ReadableStream<string>) {\n this.argTextDeltas = argTextDeltas;\n this.processStream();\n }\n\n private async processStream(): Promise<void> {\n try {\n let accumulatedText = \"\";\n const reader = this.argTextDeltas.getReader();\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n accumulatedText += value;\n const parsedArgs = parsePartialJsonObject(accumulatedText);\n\n if (parsedArgs !== undefined) {\n this.args = parsedArgs;\n // Notify all handles of the updated args\n for (const handle of this.handles) {\n handle.update(parsedArgs);\n }\n }\n }\n } catch (error) {\n console.error(\"Error processing argument stream:\", error);\n // Notify handles of the error\n for (const handle of this.handles) {\n handle.dispose();\n }\n }\n }\n\n get<PathT extends TypePath<T>>(\n ...fieldPath: PathT\n ): Promise<TypeAtPath<T, PathT>> {\n return new Promise<any>((resolve, reject) => {\n const handle = new GetHandle<T>(resolve, reject, fieldPath);\n\n // Check if the field is already complete in current args\n if (\n this.args &&\n getPartialJsonObjectFieldState(\n this.args as Record<string, unknown>,\n fieldPath,\n ) === \"complete\"\n ) {\n const value = getField(this.args as T, fieldPath);\n if (value !== undefined) {\n resolve(value);\n return;\n }\n }\n\n this.handles.add(handle);\n handle.update(this.args);\n });\n }\n\n streamValues<PathT extends TypePath<T>>(...fieldPath: PathT): any {\n // Use a type assertion to convert the complex TypePath to a simple array\n const simplePath = fieldPath as unknown as (string | number)[];\n\n const stream = new ReadableStream<any>({\n start: (controller) => {\n const handle = new StreamValuesHandle<T>(controller, simplePath);\n this.handles.add(handle);\n\n // Check current args immediately\n handle.update(this.args);\n },\n cancel: () => {\n // Find and dispose the corresponding handle\n for (const handle of this.handles) {\n if (handle instanceof StreamValuesHandle) {\n handle.dispose();\n this.handles.delete(handle);\n break;\n }\n }\n },\n });\n\n // For type compatibility, cast the stream to the required type\n return stream as any;\n }\n\n streamText<PathT extends TypePath<T>>(...fieldPath: PathT): any {\n // Use a type assertion to convert the complex TypePath to a simple array\n const simplePath = fieldPath as unknown as (string | number)[];\n\n const stream = new ReadableStream<any>({\n start: (controller) => {\n const handle = new StreamTextHandle<T>(controller, simplePath);\n this.handles.add(handle);\n\n // Check current args immediately\n handle.update(this.args);\n },\n cancel: () => {\n // Find and dispose the corresponding handle\n for (const handle of this.handles) {\n if (handle instanceof StreamTextHandle) {\n handle.dispose();\n this.handles.delete(handle);\n break;\n }\n }\n },\n });\n\n // For type compatibility, cast the stream to the required type\n return stream as any;\n }\n\n forEach<PathT extends TypePath<T>>(...fieldPath: PathT): any {\n // Use a type assertion to convert the complex TypePath to a simple array\n const simplePath = fieldPath as unknown as (string | number)[];\n\n const stream = new ReadableStream<any>({\n start: (controller) => {\n const handle = new ForEachHandle<T>(controller, simplePath);\n this.handles.add(handle);\n\n // Check current args immediately\n handle.update(this.args);\n },\n cancel: () => {\n // Find and dispose the corresponding handle\n for (const handle of this.handles) {\n if (handle instanceof ForEachHandle) {\n handle.dispose();\n this.handles.delete(handle);\n break;\n }\n }\n },\n });\n\n // For type compatibility, cast the stream to the required type\n return stream as any;\n }\n}\n\nexport class ToolCallResponseReaderImpl<TResult>\n implements ToolCallResponseReader<TResult>\n{\n constructor(private readonly promise: Promise<ToolResponse<TResult>>) {}\n\n public get() {\n return this.promise;\n }\n}\n\nexport class ToolCallReaderImpl<TArgs, TResult>\n implements ToolCallReader<TArgs, TResult>\n{\n public readonly args: ToolCallArgsReaderImpl<TArgs>;\n public readonly response: ToolCallResponseReaderImpl<TResult>;\n private readonly writable: WritableStream<string>;\n private readonly resolve: (value: ToolResponse<TResult>) => void;\n\n public argsText: string = \"\";\n\n constructor() {\n const stream = new TransformStream<string, string>();\n this.writable = stream.writable;\n this.args = new ToolCallArgsReaderImpl<TArgs>(stream.readable);\n\n const { promise, resolve } = promiseWithResolvers<ToolResponse<TResult>>();\n this.resolve = resolve;\n this.response = new ToolCallResponseReaderImpl<TResult>(promise);\n }\n\n async appendArgsTextDelta(text: string): Promise<void> {\n const writer = this.writable.getWriter();\n try {\n await writer.write(text);\n } catch (err) {\n console.warn(err);\n } finally {\n writer.releaseLock();\n }\n\n this.argsText += text;\n }\n\n setResponse(value: ToolResponse<TResult>): void {\n this.resolve(value);\n }\n\n result = {\n get: async () => {\n const response = await this.response.get();\n return response.result;\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,315 @@
1
+ // src/core/tool/ToolCallReader.ts
2
+ import { promiseWithResolvers } from "../../utils/promiseWithResolvers.mjs";
3
+ import {
4
+ parsePartialJsonObject,
5
+ getPartialJsonObjectFieldState
6
+ } from "../../utils/json/parse-partial-json-object.mjs";
7
+ function getField(obj, fieldPath) {
8
+ let current = obj;
9
+ for (const key of fieldPath) {
10
+ if (current === void 0 || current === null) {
11
+ return void 0;
12
+ }
13
+ current = current[key];
14
+ }
15
+ return current;
16
+ }
17
+ var GetHandle = class {
18
+ resolve;
19
+ reject;
20
+ disposed = false;
21
+ fieldPath;
22
+ constructor(resolve, reject, fieldPath) {
23
+ this.resolve = resolve;
24
+ this.reject = reject;
25
+ this.fieldPath = fieldPath;
26
+ }
27
+ update(args) {
28
+ if (this.disposed) return;
29
+ try {
30
+ if (getPartialJsonObjectFieldState(
31
+ args,
32
+ this.fieldPath
33
+ ) === "complete") {
34
+ const value = getField(args, this.fieldPath);
35
+ if (value !== void 0) {
36
+ this.resolve(value);
37
+ this.dispose();
38
+ }
39
+ }
40
+ } catch (e) {
41
+ this.reject(e);
42
+ this.dispose();
43
+ }
44
+ }
45
+ dispose() {
46
+ this.disposed = true;
47
+ }
48
+ };
49
+ var StreamValuesHandle = class {
50
+ controller;
51
+ disposed = false;
52
+ fieldPath;
53
+ constructor(controller, fieldPath) {
54
+ this.controller = controller;
55
+ this.fieldPath = fieldPath;
56
+ }
57
+ update(args) {
58
+ if (this.disposed) return;
59
+ try {
60
+ const value = getField(args, this.fieldPath);
61
+ if (value !== void 0) {
62
+ this.controller.enqueue(value);
63
+ }
64
+ if (getPartialJsonObjectFieldState(
65
+ args,
66
+ this.fieldPath
67
+ ) === "complete") {
68
+ this.controller.close();
69
+ this.dispose();
70
+ }
71
+ } catch (e) {
72
+ this.controller.error(e);
73
+ this.dispose();
74
+ }
75
+ }
76
+ dispose() {
77
+ this.disposed = true;
78
+ }
79
+ };
80
+ var StreamTextHandle = class {
81
+ controller;
82
+ disposed = false;
83
+ fieldPath;
84
+ lastValue = void 0;
85
+ constructor(controller, fieldPath) {
86
+ this.controller = controller;
87
+ this.fieldPath = fieldPath;
88
+ }
89
+ update(args) {
90
+ if (this.disposed) return;
91
+ try {
92
+ const value = getField(args, this.fieldPath);
93
+ if (value !== void 0 && typeof value === "string") {
94
+ const delta = value.substring(this.lastValue?.length || 0);
95
+ this.lastValue = value;
96
+ this.controller.enqueue(delta);
97
+ }
98
+ if (getPartialJsonObjectFieldState(
99
+ args,
100
+ this.fieldPath
101
+ ) === "complete") {
102
+ this.controller.close();
103
+ this.dispose();
104
+ }
105
+ } catch (e) {
106
+ this.controller.error(e);
107
+ this.dispose();
108
+ }
109
+ }
110
+ dispose() {
111
+ this.disposed = true;
112
+ }
113
+ };
114
+ var ForEachHandle = class {
115
+ controller;
116
+ disposed = false;
117
+ fieldPath;
118
+ processedIndexes = /* @__PURE__ */ new Set();
119
+ constructor(controller, fieldPath) {
120
+ this.controller = controller;
121
+ this.fieldPath = fieldPath;
122
+ }
123
+ update(args) {
124
+ if (this.disposed) return;
125
+ try {
126
+ const array = getField(args, this.fieldPath);
127
+ if (!Array.isArray(array)) {
128
+ return;
129
+ }
130
+ for (let i = 0; i < array.length; i++) {
131
+ if (!this.processedIndexes.has(i)) {
132
+ const elementPath = [...this.fieldPath, i];
133
+ if (getPartialJsonObjectFieldState(
134
+ args,
135
+ elementPath
136
+ ) === "complete") {
137
+ this.controller.enqueue(array[i]);
138
+ this.processedIndexes.add(i);
139
+ }
140
+ }
141
+ }
142
+ if (getPartialJsonObjectFieldState(
143
+ args,
144
+ this.fieldPath
145
+ ) === "complete") {
146
+ this.controller.close();
147
+ this.dispose();
148
+ }
149
+ } catch (e) {
150
+ this.controller.error(e);
151
+ this.dispose();
152
+ }
153
+ }
154
+ dispose() {
155
+ this.disposed = true;
156
+ }
157
+ };
158
+ var ToolCallArgsReaderImpl = class {
159
+ argTextDeltas;
160
+ handles = /* @__PURE__ */ new Set();
161
+ args = parsePartialJsonObject("");
162
+ constructor(argTextDeltas) {
163
+ this.argTextDeltas = argTextDeltas;
164
+ this.processStream();
165
+ }
166
+ async processStream() {
167
+ try {
168
+ let accumulatedText = "";
169
+ const reader = this.argTextDeltas.getReader();
170
+ while (true) {
171
+ const { value, done } = await reader.read();
172
+ if (done) break;
173
+ accumulatedText += value;
174
+ const parsedArgs = parsePartialJsonObject(accumulatedText);
175
+ if (parsedArgs !== void 0) {
176
+ this.args = parsedArgs;
177
+ for (const handle of this.handles) {
178
+ handle.update(parsedArgs);
179
+ }
180
+ }
181
+ }
182
+ } catch (error) {
183
+ console.error("Error processing argument stream:", error);
184
+ for (const handle of this.handles) {
185
+ handle.dispose();
186
+ }
187
+ }
188
+ }
189
+ get(...fieldPath) {
190
+ return new Promise((resolve, reject) => {
191
+ const handle = new GetHandle(resolve, reject, fieldPath);
192
+ if (this.args && getPartialJsonObjectFieldState(
193
+ this.args,
194
+ fieldPath
195
+ ) === "complete") {
196
+ const value = getField(this.args, fieldPath);
197
+ if (value !== void 0) {
198
+ resolve(value);
199
+ return;
200
+ }
201
+ }
202
+ this.handles.add(handle);
203
+ handle.update(this.args);
204
+ });
205
+ }
206
+ streamValues(...fieldPath) {
207
+ const simplePath = fieldPath;
208
+ const stream = new ReadableStream({
209
+ start: (controller) => {
210
+ const handle = new StreamValuesHandle(controller, simplePath);
211
+ this.handles.add(handle);
212
+ handle.update(this.args);
213
+ },
214
+ cancel: () => {
215
+ for (const handle of this.handles) {
216
+ if (handle instanceof StreamValuesHandle) {
217
+ handle.dispose();
218
+ this.handles.delete(handle);
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ });
224
+ return stream;
225
+ }
226
+ streamText(...fieldPath) {
227
+ const simplePath = fieldPath;
228
+ const stream = new ReadableStream({
229
+ start: (controller) => {
230
+ const handle = new StreamTextHandle(controller, simplePath);
231
+ this.handles.add(handle);
232
+ handle.update(this.args);
233
+ },
234
+ cancel: () => {
235
+ for (const handle of this.handles) {
236
+ if (handle instanceof StreamTextHandle) {
237
+ handle.dispose();
238
+ this.handles.delete(handle);
239
+ break;
240
+ }
241
+ }
242
+ }
243
+ });
244
+ return stream;
245
+ }
246
+ forEach(...fieldPath) {
247
+ const simplePath = fieldPath;
248
+ const stream = new ReadableStream({
249
+ start: (controller) => {
250
+ const handle = new ForEachHandle(controller, simplePath);
251
+ this.handles.add(handle);
252
+ handle.update(this.args);
253
+ },
254
+ cancel: () => {
255
+ for (const handle of this.handles) {
256
+ if (handle instanceof ForEachHandle) {
257
+ handle.dispose();
258
+ this.handles.delete(handle);
259
+ break;
260
+ }
261
+ }
262
+ }
263
+ });
264
+ return stream;
265
+ }
266
+ };
267
+ var ToolCallResponseReaderImpl = class {
268
+ constructor(promise) {
269
+ this.promise = promise;
270
+ }
271
+ get() {
272
+ return this.promise;
273
+ }
274
+ };
275
+ var ToolCallReaderImpl = class {
276
+ args;
277
+ response;
278
+ writable;
279
+ resolve;
280
+ argsText = "";
281
+ constructor() {
282
+ const stream = new TransformStream();
283
+ this.writable = stream.writable;
284
+ this.args = new ToolCallArgsReaderImpl(stream.readable);
285
+ const { promise, resolve } = promiseWithResolvers();
286
+ this.resolve = resolve;
287
+ this.response = new ToolCallResponseReaderImpl(promise);
288
+ }
289
+ async appendArgsTextDelta(text) {
290
+ const writer = this.writable.getWriter();
291
+ try {
292
+ await writer.write(text);
293
+ } catch (err) {
294
+ console.warn(err);
295
+ } finally {
296
+ writer.releaseLock();
297
+ }
298
+ this.argsText += text;
299
+ }
300
+ setResponse(value) {
301
+ this.resolve(value);
302
+ }
303
+ result = {
304
+ get: async () => {
305
+ const response = await this.response.get();
306
+ return response.result;
307
+ }
308
+ };
309
+ };
310
+ export {
311
+ ToolCallArgsReaderImpl,
312
+ ToolCallReaderImpl,
313
+ ToolCallResponseReaderImpl
314
+ };
315
+ //# sourceMappingURL=ToolCallReader.mjs.map