assistant-stream 0.3.15 → 0.3.16

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 (232) 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 +174 -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/dist/core/AssistantStreamChunk.js.map +0 -1
  219. package/dist/core/object/types.js.map +0 -1
  220. package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
  221. package/dist/core/tool/tool-types.js.map +0 -1
  222. package/dist/core/tool/type-path-utils.js.map +0 -1
  223. package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
  224. package/dist/core/utils/types.js.map +0 -1
  225. package/dist/index.d.ts.map +0 -1
  226. package/dist/index.js.map +0 -1
  227. package/dist/resumable/index.d.ts.map +0 -1
  228. package/dist/resumable/index.js.map +0 -1
  229. package/dist/resumable/types.js.map +0 -1
  230. package/dist/utils/json/json-value.js.map +0 -1
  231. package/dist/utils.d.ts.map +0 -1
  232. package/dist/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCallReader.js","sourceRoot":"","sources":["../../../src/core/tool/ToolCallReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolCallReader.js","names":[],"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 type {\n ToolCallArgsReader,\n ToolCallReader,\n ToolCallResponseReader,\n} from \"./tool-types\";\nimport type { DeepPartial, TypeAtPath, TypePath } from \"./type-path-utils\";\nimport type { ToolResponse } from \"./ToolResponse\";\nimport { asAsyncIterableStream } from \"../../utils/AsyncIterableStream\";\nimport type {\n AsyncIterableStream,\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"../../utils\";\n\n// TODO: remove dispose\n\nfunction getField<T>(obj: T, fieldPath: (string | number)[]): unknown {\n let current: unknown = obj;\n for (const key of fieldPath) {\n if (current === undefined || current === null) {\n return undefined;\n }\n current = current[key as keyof typeof current];\n }\n return current;\n}\n\ninterface Handle {\n update(args: unknown): void;\n dispose(): void;\n}\n\nclass GetHandle<T, TValue> implements Handle {\n private resolve: (value: TValue) => void;\n private reject: (reason: unknown) => void;\n private disposed = false;\n private fieldPath: (string | number)[];\n\n constructor(\n resolve: (value: TValue) => 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 as TValue);\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<unknown>;\n private disposed = false;\n private fieldPath: (string | number)[];\n\n constructor(\n controller: ReadableStreamDefaultController<unknown>,\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<unknown>;\n private disposed = false;\n private fieldPath: (string | number)[];\n private lastValue: string | undefined = undefined;\n\n constructor(\n controller: ReadableStreamDefaultController<unknown>,\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<unknown>;\n private disposed = false;\n private fieldPath: (string | number)[];\n private processedIndexes = new Set<number>();\n\n constructor(\n controller: ReadableStreamDefaultController<unknown>,\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);\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 extends ReadonlyJSONObject>\n implements ToolCallArgsReader<T>\n{\n private argTextDeltas: ReadableStream<string>;\n private handles: Set<Handle> = new Set();\n private args: unknown = 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<TypeAtPath<T, PathT>>((resolve, reject) => {\n const handle = new GetHandle<T, TypeAtPath<T, PathT>>(\n resolve,\n reject,\n fieldPath,\n );\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 as TypeAtPath<T, PathT>);\n return;\n }\n }\n\n this.handles.add(handle);\n handle.update(this.args);\n });\n }\n\n streamValues<PathT extends TypePath<T>>(\n ...fieldPath: PathT\n ): AsyncIterableStream<DeepPartial<TypeAtPath<T, PathT>>> {\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<DeepPartial<TypeAtPath<T, PathT>>>({\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 return asAsyncIterableStream(stream) as any;\n }\n\n streamText<PathT extends TypePath<T>>(\n ...fieldPath: PathT\n ): TypeAtPath<T, PathT> extends string & infer U\n ? AsyncIterableStream<U>\n : never {\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<unknown>({\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 return asAsyncIterableStream(stream) as any;\n }\n\n forEach<PathT extends TypePath<T>>(\n ...fieldPath: PathT\n ): TypeAtPath<T, PathT> extends Array<infer U>\n ? AsyncIterableStream<U>\n : never {\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<unknown>({\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 return asAsyncIterableStream(stream) as any;\n }\n}\n\nexport class ToolCallResponseReaderImpl<TResult extends ReadonlyJSONValue>\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<\n TArgs extends ReadonlyJSONObject,\n TResult extends ReadonlyJSONValue,\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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"}
@@ -1,26 +1,29 @@
1
- import type { AssistantStreamChunk } from "../AssistantStreamChunk.js";
2
- import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream.js";
3
- import type { ReadonlyJSONObject, ReadonlyJSONValue } from "../../utils/json/json-value.js";
1
+ import { ReadonlyJSONObject, ReadonlyJSONValue } from "../../utils/json/json-value.js";
2
+ import { ToolCallReader } from "./tool-types.js";
4
3
  import { ToolResponse } from "./ToolResponse.js";
5
- import type { ToolCallReader } from "./tool-types.js";
4
+ import { AssistantStreamChunk } from "../AssistantStreamChunk.js";
5
+ import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream.js";
6
+
7
+ //#region src/core/tool/ToolExecutionStream.d.ts
6
8
  type ToolCallback = (toolCall: {
7
- toolCallId: string;
8
- toolName: string;
9
- args: ReadonlyJSONObject;
9
+ toolCallId: string;
10
+ toolName: string;
11
+ args: ReadonlyJSONObject;
10
12
  }) => Promise<ToolResponse<ReadonlyJSONValue>> | ToolResponse<ReadonlyJSONValue> | undefined;
11
13
  type ToolStreamCallback = <TArgs extends ReadonlyJSONObject = ReadonlyJSONObject, TResult extends ReadonlyJSONValue = ReadonlyJSONValue>(toolCall: {
12
- reader: ToolCallReader<TArgs, TResult>;
13
- toolCallId: string;
14
- toolName: string;
14
+ reader: ToolCallReader<TArgs, TResult>;
15
+ toolCallId: string;
16
+ toolName: string;
15
17
  }) => void;
16
18
  type ToolExecutionOptions = {
17
- execute: ToolCallback;
18
- streamCall: ToolStreamCallback;
19
- onExecutionStart?: ((toolCallId: string, toolName: string) => void) | undefined;
20
- onExecutionEnd?: ((toolCallId: string, toolName: string) => void) | undefined;
19
+ execute: ToolCallback;
20
+ streamCall: ToolStreamCallback;
21
+ onExecutionStart?: ((toolCallId: string, toolName: string) => void) | undefined;
22
+ onExecutionEnd?: ((toolCallId: string, toolName: string) => void) | undefined;
21
23
  };
22
- export declare class ToolExecutionStream extends PipeableTransformStream<AssistantStreamChunk, AssistantStreamChunk> {
23
- constructor(options: ToolExecutionOptions);
24
+ declare class ToolExecutionStream extends PipeableTransformStream<AssistantStreamChunk, AssistantStreamChunk> {
25
+ constructor(options: ToolExecutionOptions);
24
26
  }
25
- export {};
27
+ //#endregion
28
+ export { ToolExecutionStream };
26
29
  //# sourceMappingURL=ToolExecutionStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolExecutionStream.d.ts","sourceRoot":"","sources":["../../../src/core/tool/ToolExecutionStream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mCAAgC;AAKpE,OAAO,EAAE,uBAAuB,EAAE,mDAAgD;AAClF,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,uCAAoC;AACrC,OAAO,EAAE,YAAY,EAAE,0BAAuB;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAqB;AAEnD,KAAK,YAAY,GAAG,CAAC,QAAQ,EAAE;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;CAC1B,KACG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,GACxC,YAAY,CAAC,iBAAiB,CAAC,GAC/B,SAAS,CAAC;AAEd,KAAK,kBAAkB,GAAG,CACxB,KAAK,SAAS,kBAAkB,GAAG,kBAAkB,EACrD,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,EACrD,QAAQ,EAAE;IACV,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,KAAK,IAAI,CAAC;AAEX,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,gBAAgB,CAAC,EACb,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAChD,SAAS,CAAC;IACd,cAAc,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC/E,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,uBAAuB,CAC9D,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,OAAO,EAAE,oBAAoB;CA8K1C"}
1
+ {"version":3,"file":"ToolExecutionStream.d.ts","names":[],"sources":["../../../src/core/tool/ToolExecutionStream.ts"],"mappings":";;;;;;;KAgBK,YAAA,IAAgB,QAAA;EACnB,UAAA;EACA,QAAA;EACA,IAAA,EAAM,kBAAA;AAAA,MAEJ,OAAA,CAAQ,YAAA,CAAa,iBAAA,KACrB,YAAA,CAAa,iBAAA;AAAA,KAGZ,kBAAA,kBACW,kBAAA,GAAqB,kBAAA,kBACnB,iBAAA,GAAoB,iBAAA,EACpC,QAAA;EACA,MAAA,EAAQ,cAAA,CAAe,KAAA,EAAO,OAAA;EAC9B,UAAA;EACA,QAAA;AAAA;AAAA,KAGG,oBAAA;EACH,OAAA,EAAS,YAAA;EACT,UAAA,EAAY,kBAAkB;EAC9B,gBAAA,KACM,UAAA,UAAoB,QAAA;EAE1B,cAAA,KAAmB,UAAA,UAAoB,QAAA;AAAA;AAAA,cAG5B,mBAAA,SAA4B,uBAAA,CACvC,oBAAA,EACA,oBAAA;cAEY,OAAA,EAAS,oBAAA;AAAA"}
@@ -1,151 +1,128 @@
1
- import sjson from "secure-json-parse";
2
- import { AssistantMetaTransformStream, } from "../utils/stream/AssistantMetaTransformStream.js";
3
1
  import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream.js";
2
+ import { AssistantMetaTransformStream } from "../utils/stream/AssistantMetaTransformStream.js";
4
3
  import { ToolResponse } from "./ToolResponse.js";
5
4
  import { withPromiseOrValue } from "../utils/withPromiseOrValue.js";
6
5
  import { ToolCallReaderImpl } from "./ToolCallReader.js";
7
- export class ToolExecutionStream extends PipeableTransformStream {
8
- constructor(options) {
9
- const toolCallPromises = new Map();
10
- const toolCallControllers = new Map();
11
- super((readable) => {
12
- const transform = new TransformStream({
13
- transform(chunk, controller) {
14
- // forward everything
15
- if (chunk.type !== "part-finish" || chunk.meta.type !== "tool-call") {
16
- controller.enqueue(chunk);
17
- }
18
- const type = chunk.type;
19
- switch (type) {
20
- case "part-start":
21
- if (chunk.part.type === "tool-call") {
22
- const reader = new ToolCallReaderImpl();
23
- toolCallControllers.set(chunk.part.toolCallId, reader);
24
- options.streamCall({
25
- reader,
26
- toolCallId: chunk.part.toolCallId,
27
- toolName: chunk.part.toolName,
28
- });
29
- }
30
- break;
31
- case "text-delta": {
32
- if (chunk.meta.type === "tool-call") {
33
- const toolCallId = chunk.meta.toolCallId;
34
- const controller = toolCallControllers.get(toolCallId);
35
- if (!controller)
36
- throw new Error("No controller found for tool call");
37
- controller.appendArgsTextDelta(chunk.textDelta);
38
- }
39
- break;
40
- }
41
- case "result": {
42
- if (chunk.meta.type !== "tool-call")
43
- break;
44
- const { toolCallId } = chunk.meta;
45
- const controller = toolCallControllers.get(toolCallId);
46
- if (!controller)
47
- throw new Error("No controller found for tool call");
48
- controller.setResponse(new ToolResponse({
49
- result: chunk.result,
50
- artifact: chunk.artifact,
51
- isError: chunk.isError,
52
- modelContent: chunk.modelContent,
53
- }));
54
- break;
55
- }
56
- case "tool-call-args-text-finish": {
57
- if (chunk.meta.type !== "tool-call")
58
- break;
59
- const { toolCallId, toolName } = chunk.meta;
60
- const streamController = toolCallControllers.get(toolCallId);
61
- if (!streamController)
62
- throw new Error("No controller found for tool call");
63
- let isExecuting = false;
64
- const promise = withPromiseOrValue(() => {
65
- let args;
66
- try {
67
- args = sjson.parse(streamController.argsText);
68
- }
69
- catch (e) {
70
- throw new Error(`Function parameter parsing failed. ${JSON.stringify(e.message)}`);
71
- }
72
- const executeResult = options.execute({
73
- toolCallId,
74
- toolName,
75
- args,
76
- });
77
- // Only mark as executing if the tool has frontend execution
78
- if (executeResult !== undefined) {
79
- isExecuting = true;
80
- options.onExecutionStart?.(toolCallId, toolName);
81
- }
82
- return executeResult;
83
- }, (c) => {
84
- if (isExecuting) {
85
- options.onExecutionEnd?.(toolCallId, toolName);
86
- }
87
- if (c === undefined)
88
- return;
89
- // TODO how to handle new ToolResult({ result: undefined })?
90
- const result = new ToolResponse({
91
- artifact: c.artifact,
92
- result: c.result,
93
- isError: c.isError,
94
- messages: c.messages,
95
- modelContent: c.modelContent,
96
- });
97
- streamController.setResponse(result);
98
- controller.enqueue({
99
- type: "result",
100
- path: chunk.path,
101
- ...result,
102
- });
103
- }, (e) => {
104
- if (isExecuting) {
105
- options.onExecutionEnd?.(toolCallId, toolName);
106
- }
107
- const result = new ToolResponse({
108
- result: String(e),
109
- isError: true,
110
- });
111
- streamController.setResponse(result);
112
- controller.enqueue({
113
- type: "result",
114
- path: chunk.path,
115
- ...result,
116
- });
117
- });
118
- if (promise) {
119
- toolCallPromises.set(toolCallId, promise);
120
- }
121
- break;
122
- }
123
- case "part-finish": {
124
- if (chunk.meta.type !== "tool-call")
125
- break;
126
- const { toolCallId } = chunk.meta;
127
- const toolCallPromise = toolCallPromises.get(toolCallId);
128
- if (toolCallPromise) {
129
- toolCallPromise.then(() => {
130
- toolCallPromises.delete(toolCallId);
131
- toolCallControllers.delete(toolCallId);
132
- controller.enqueue(chunk);
133
- });
134
- }
135
- else {
136
- controller.enqueue(chunk);
137
- }
138
- }
139
- }
140
- },
141
- async flush() {
142
- await Promise.all(toolCallPromises.values());
143
- },
144
- });
145
- return readable
146
- .pipeThrough(new AssistantMetaTransformStream())
147
- .pipeThrough(transform);
148
- });
149
- }
150
- }
6
+ import sjson from "secure-json-parse";
7
+ //#region src/core/tool/ToolExecutionStream.ts
8
+ var ToolExecutionStream = class extends PipeableTransformStream {
9
+ constructor(options) {
10
+ const toolCallPromises = /* @__PURE__ */ new Map();
11
+ const toolCallControllers = /* @__PURE__ */ new Map();
12
+ super((readable) => {
13
+ const transform = new TransformStream({
14
+ transform(chunk, controller) {
15
+ if (chunk.type !== "part-finish" || chunk.meta.type !== "tool-call") controller.enqueue(chunk);
16
+ switch (chunk.type) {
17
+ case "part-start":
18
+ if (chunk.part.type === "tool-call") {
19
+ const reader = new ToolCallReaderImpl();
20
+ toolCallControllers.set(chunk.part.toolCallId, reader);
21
+ options.streamCall({
22
+ reader,
23
+ toolCallId: chunk.part.toolCallId,
24
+ toolName: chunk.part.toolName
25
+ });
26
+ }
27
+ break;
28
+ case "text-delta":
29
+ if (chunk.meta.type === "tool-call") {
30
+ const toolCallId = chunk.meta.toolCallId;
31
+ const controller = toolCallControllers.get(toolCallId);
32
+ if (!controller) throw new Error("No controller found for tool call");
33
+ controller.appendArgsTextDelta(chunk.textDelta);
34
+ }
35
+ break;
36
+ case "result": {
37
+ if (chunk.meta.type !== "tool-call") break;
38
+ const { toolCallId } = chunk.meta;
39
+ const controller = toolCallControllers.get(toolCallId);
40
+ if (!controller) throw new Error("No controller found for tool call");
41
+ controller.setResponse(new ToolResponse({
42
+ result: chunk.result,
43
+ artifact: chunk.artifact,
44
+ isError: chunk.isError,
45
+ modelContent: chunk.modelContent
46
+ }));
47
+ break;
48
+ }
49
+ case "tool-call-args-text-finish": {
50
+ if (chunk.meta.type !== "tool-call") break;
51
+ const { toolCallId, toolName } = chunk.meta;
52
+ const streamController = toolCallControllers.get(toolCallId);
53
+ if (!streamController) throw new Error("No controller found for tool call");
54
+ let isExecuting = false;
55
+ const promise = withPromiseOrValue(() => {
56
+ let args;
57
+ try {
58
+ args = sjson.parse(streamController.argsText);
59
+ } catch (e) {
60
+ throw new Error(`Function parameter parsing failed. ${JSON.stringify(e.message)}`);
61
+ }
62
+ const executeResult = options.execute({
63
+ toolCallId,
64
+ toolName,
65
+ args
66
+ });
67
+ if (executeResult !== void 0) {
68
+ isExecuting = true;
69
+ options.onExecutionStart?.(toolCallId, toolName);
70
+ }
71
+ return executeResult;
72
+ }, (c) => {
73
+ if (isExecuting) options.onExecutionEnd?.(toolCallId, toolName);
74
+ if (c === void 0) return;
75
+ const result = new ToolResponse({
76
+ artifact: c.artifact,
77
+ result: c.result,
78
+ isError: c.isError,
79
+ messages: c.messages,
80
+ modelContent: c.modelContent
81
+ });
82
+ streamController.setResponse(result);
83
+ controller.enqueue({
84
+ type: "result",
85
+ path: chunk.path,
86
+ ...result
87
+ });
88
+ }, (e) => {
89
+ if (isExecuting) options.onExecutionEnd?.(toolCallId, toolName);
90
+ const result = new ToolResponse({
91
+ result: String(e),
92
+ isError: true
93
+ });
94
+ streamController.setResponse(result);
95
+ controller.enqueue({
96
+ type: "result",
97
+ path: chunk.path,
98
+ ...result
99
+ });
100
+ });
101
+ if (promise) toolCallPromises.set(toolCallId, promise);
102
+ break;
103
+ }
104
+ case "part-finish": {
105
+ if (chunk.meta.type !== "tool-call") break;
106
+ const { toolCallId } = chunk.meta;
107
+ const toolCallPromise = toolCallPromises.get(toolCallId);
108
+ if (toolCallPromise) toolCallPromise.then(() => {
109
+ toolCallPromises.delete(toolCallId);
110
+ toolCallControllers.delete(toolCallId);
111
+ controller.enqueue(chunk);
112
+ });
113
+ else controller.enqueue(chunk);
114
+ }
115
+ }
116
+ },
117
+ async flush() {
118
+ await Promise.all(toolCallPromises.values());
119
+ }
120
+ });
121
+ return readable.pipeThrough(new AssistantMetaTransformStream()).pipeThrough(transform);
122
+ });
123
+ }
124
+ };
125
+ //#endregion
126
+ export { ToolExecutionStream };
127
+
151
128
  //# sourceMappingURL=ToolExecutionStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolExecutionStream.js","sourceRoot":"","sources":["../../../src/core/tool/ToolExecutionStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolExecutionStream.js","names":[],"sources":["../../../src/core/tool/ToolExecutionStream.ts"],"sourcesContent":["import sjson from \"secure-json-parse\";\nimport type { AssistantStreamChunk } from \"../AssistantStreamChunk\";\nimport {\n type AssistantMetaStreamChunk,\n AssistantMetaTransformStream,\n} from \"../utils/stream/AssistantMetaTransformStream\";\nimport { PipeableTransformStream } from \"../utils/stream/PipeableTransformStream\";\nimport type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"../../utils/json/json-value\";\nimport { ToolResponse } from \"./ToolResponse\";\nimport { withPromiseOrValue } from \"../utils/withPromiseOrValue\";\nimport { ToolCallReaderImpl } from \"./ToolCallReader\";\nimport type { ToolCallReader } from \"./tool-types\";\n\ntype ToolCallback = (toolCall: {\n toolCallId: string;\n toolName: string;\n args: ReadonlyJSONObject;\n}) =>\n | Promise<ToolResponse<ReadonlyJSONValue>>\n | ToolResponse<ReadonlyJSONValue>\n | undefined;\n\ntype ToolStreamCallback = <\n TArgs extends ReadonlyJSONObject = ReadonlyJSONObject,\n TResult extends ReadonlyJSONValue = ReadonlyJSONValue,\n>(toolCall: {\n reader: ToolCallReader<TArgs, TResult>;\n toolCallId: string;\n toolName: string;\n}) => void;\n\ntype ToolExecutionOptions = {\n execute: ToolCallback;\n streamCall: ToolStreamCallback;\n onExecutionStart?:\n | ((toolCallId: string, toolName: string) => void)\n | undefined;\n onExecutionEnd?: ((toolCallId: string, toolName: string) => void) | undefined;\n};\n\nexport class ToolExecutionStream extends PipeableTransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(options: ToolExecutionOptions) {\n const toolCallPromises = new Map<string, PromiseLike<void>>();\n const toolCallControllers = new Map<\n string,\n ToolCallReaderImpl<ReadonlyJSONObject, ReadonlyJSONValue>\n >();\n\n super((readable) => {\n const transform = new TransformStream<\n AssistantMetaStreamChunk,\n AssistantStreamChunk\n >({\n transform(chunk, controller) {\n // forward everything\n if (chunk.type !== \"part-finish\" || chunk.meta.type !== \"tool-call\") {\n controller.enqueue(chunk);\n }\n\n const type = chunk.type;\n\n switch (type) {\n case \"part-start\":\n if (chunk.part.type === \"tool-call\") {\n const reader = new ToolCallReaderImpl<\n ReadonlyJSONObject,\n ReadonlyJSONValue\n >();\n toolCallControllers.set(chunk.part.toolCallId, reader);\n\n options.streamCall({\n reader,\n toolCallId: chunk.part.toolCallId,\n toolName: chunk.part.toolName,\n });\n }\n break;\n case \"text-delta\": {\n if (chunk.meta.type === \"tool-call\") {\n const toolCallId = chunk.meta.toolCallId;\n\n const controller = toolCallControllers.get(toolCallId);\n if (!controller)\n throw new Error(\"No controller found for tool call\");\n controller.appendArgsTextDelta(chunk.textDelta);\n }\n break;\n }\n case \"result\": {\n if (chunk.meta.type !== \"tool-call\") break;\n\n const { toolCallId } = chunk.meta;\n const controller = toolCallControllers.get(toolCallId);\n if (!controller)\n throw new Error(\"No controller found for tool call\");\n controller.setResponse(\n new ToolResponse({\n result: chunk.result,\n artifact: chunk.artifact,\n isError: chunk.isError,\n modelContent: chunk.modelContent,\n }),\n );\n break;\n }\n case \"tool-call-args-text-finish\": {\n if (chunk.meta.type !== \"tool-call\") break;\n\n const { toolCallId, toolName } = chunk.meta;\n const streamController = toolCallControllers.get(toolCallId)!;\n if (!streamController)\n throw new Error(\"No controller found for tool call\");\n\n let isExecuting = false;\n const promise = withPromiseOrValue(\n () => {\n let args: ReadonlyJSONObject;\n try {\n args = sjson.parse(\n streamController.argsText,\n ) as ReadonlyJSONObject;\n } catch (e) {\n throw new Error(\n `Function parameter parsing failed. ${JSON.stringify((e as Error).message)}`,\n );\n }\n\n const executeResult = options.execute({\n toolCallId,\n toolName,\n args,\n });\n\n // Only mark as executing if the tool has frontend execution\n if (executeResult !== undefined) {\n isExecuting = true;\n options.onExecutionStart?.(toolCallId, toolName);\n }\n\n return executeResult;\n },\n (c) => {\n if (isExecuting) {\n options.onExecutionEnd?.(toolCallId, toolName);\n }\n\n if (c === undefined) return;\n\n // TODO how to handle new ToolResult({ result: undefined })?\n const result = new ToolResponse({\n artifact: c.artifact,\n result: c.result,\n isError: c.isError,\n messages: c.messages,\n modelContent: c.modelContent,\n });\n streamController.setResponse(result);\n controller.enqueue({\n type: \"result\",\n path: chunk.path,\n ...result,\n });\n },\n (e) => {\n if (isExecuting) {\n options.onExecutionEnd?.(toolCallId, toolName);\n }\n\n const result = new ToolResponse({\n result: String(e),\n isError: true,\n });\n\n streamController.setResponse(result);\n controller.enqueue({\n type: \"result\",\n path: chunk.path,\n ...result,\n });\n },\n );\n if (promise) {\n toolCallPromises.set(toolCallId, promise);\n }\n break;\n }\n\n case \"part-finish\": {\n if (chunk.meta.type !== \"tool-call\") break;\n\n const { toolCallId } = chunk.meta;\n const toolCallPromise = toolCallPromises.get(toolCallId);\n if (toolCallPromise) {\n toolCallPromise.then(() => {\n toolCallPromises.delete(toolCallId);\n toolCallControllers.delete(toolCallId);\n\n controller.enqueue(chunk);\n });\n } else {\n controller.enqueue(chunk);\n }\n }\n }\n },\n async flush() {\n await Promise.all(toolCallPromises.values());\n },\n });\n\n return readable\n .pipeThrough(new AssistantMetaTransformStream())\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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"}
@@ -1,30 +1,29 @@
1
- import type { ReadonlyJSONValue } from "../../utils/json/json-value.js";
2
- import type { ToolModelContentPart } from "./tool-types.js";
1
+ import { ReadonlyJSONValue } from "../../utils/json/json-value.js";
2
+ import { ToolModelContentPart } from "./tool-types.js";
3
+
4
+ //#region src/core/tool/ToolResponse.d.ts
3
5
  declare const TOOL_RESPONSE_SYMBOL: unique symbol;
4
6
  /**
5
7
  * Shape accepted anywhere a {@link ToolResponse} can be returned.
6
8
  */
7
- export type ToolResponseLike<TResult> = {
8
- /** UI-visible tool result value. */
9
- result: TResult;
10
- /**
11
- * Optional UI-only artifact associated with the result.
12
- *
13
- * Artifacts are useful for large or structured data that should be available
14
- * to renderers without necessarily being sent back to the model.
15
- */
16
- artifact?: ReadonlyJSONValue | undefined;
17
- /** Marks the tool result as an error result. */
18
- isError?: boolean | undefined;
19
- /**
20
- * Explicit model-visible content to send back after the tool call.
21
- *
22
- * When omitted, assistant-ui derives model output from `result` or a tool's
23
- * {@link ToolModelOutputFunction}.
24
- */
25
- modelContent?: readonly ToolModelContentPart[] | undefined;
26
- /** Optional provider-specific message payload associated with the tool result. */
27
- messages?: ReadonlyJSONValue | undefined;
9
+ type ToolResponseLike<TResult> = {
10
+ /** UI-visible tool result value. */result: TResult;
11
+ /**
12
+ * Optional UI-only artifact associated with the result.
13
+ *
14
+ * Artifacts are useful for large or structured data that should be available
15
+ * to renderers without necessarily being sent back to the model.
16
+ */
17
+ artifact?: ReadonlyJSONValue | undefined; /** Marks the tool result as an error result. */
18
+ isError?: boolean | undefined;
19
+ /**
20
+ * Explicit model-visible content to send back after the tool call.
21
+ *
22
+ * When omitted, assistant-ui derives model output from `result` or a tool's
23
+ * {@link ToolModelOutputFunction}.
24
+ */
25
+ modelContent?: readonly ToolModelContentPart[] | undefined; /** Optional provider-specific message payload associated with the tool result. */
26
+ messages?: ReadonlyJSONValue | undefined;
28
27
  };
29
28
  /**
30
29
  * Tool result wrapper for separating UI-visible output from model-visible
@@ -42,23 +41,24 @@ export type ToolResponseLike<TResult> = {
42
41
  * });
43
42
  * ```
44
43
  */
45
- export declare class ToolResponse<TResult> {
46
- get [TOOL_RESPONSE_SYMBOL](): boolean;
47
- readonly artifact?: ReadonlyJSONValue;
48
- readonly result: TResult;
49
- readonly isError: boolean;
50
- readonly modelContent?: readonly ToolModelContentPart[];
51
- readonly messages?: ReadonlyJSONValue;
52
- constructor(options: ToolResponseLike<TResult>);
53
- static [Symbol.hasInstance](obj: unknown): obj is ToolResponse<ReadonlyJSONValue>;
54
- /**
55
- * Converts a plain tool return value into a {@link ToolResponse}.
56
- *
57
- * Existing `ToolResponse` instances are returned unchanged. `undefined`
58
- * becomes the string `"<no result>"` so downstream protocol chunks always
59
- * carry a concrete result.
60
- */
61
- static toResponse(result: any | ToolResponse<any>): ToolResponse<any>;
44
+ declare class ToolResponse<TResult> {
45
+ get [TOOL_RESPONSE_SYMBOL](): boolean;
46
+ readonly artifact?: ReadonlyJSONValue;
47
+ readonly result: TResult;
48
+ readonly isError: boolean;
49
+ readonly modelContent?: readonly ToolModelContentPart[];
50
+ readonly messages?: ReadonlyJSONValue;
51
+ constructor(options: ToolResponseLike<TResult>);
52
+ static [Symbol.hasInstance](obj: unknown): obj is ToolResponse<ReadonlyJSONValue>;
53
+ /**
54
+ * Converts a plain tool return value into a {@link ToolResponse}.
55
+ *
56
+ * Existing `ToolResponse` instances are returned unchanged. `undefined`
57
+ * becomes the string `"<no result>"` so downstream protocol chunks always
58
+ * carry a concrete result.
59
+ */
60
+ static toResponse(result: any | ToolResponse<any>): ToolResponse<any>;
62
61
  }
63
- export {};
62
+ //#endregion
63
+ export { ToolResponse, ToolResponseLike };
64
64
  //# sourceMappingURL=ToolResponse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolResponse.d.ts","sourceRoot":"","sources":["../../../src/core/tool/ToolResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uCAAoC;AACrE,OAAO,KAAK,EACV,oBAAoB,EAErB,wBAAqB;AAEtB,QAAA,MAAM,oBAAoB,eAAkC,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI;IACtC,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzC,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,CAAC;IAC3D,kFAAkF;IAClF,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAY,CAAC,OAAO;IAC/B,IAAI,CAAC,oBAAoB,CAAC,YAEzB;IAED,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;gBAE1B,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAc9C,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CACzB,GAAG,EAAE,OAAO,GACX,GAAG,IAAI,YAAY,CAAC,iBAAiB,CAAC;IAMzC;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;CAQtE"}
1
+ {"version":3,"file":"ToolResponse.d.ts","names":[],"sources":["../../../src/core/tool/ToolResponse.ts"],"mappings":";;;;cAMM,oBAAA;;AAFgB;;KAOV,gBAAA;EALgD,oCAO1D,MAAA,EAAQ,OAAA;EAFE;;;;;;EASV,QAAA,GAAW,iBAAA,cAWiB;EAT5B,OAAA;EAX2B;;;;;;EAkB3B,YAAA,YAAwB,oBAAA,gBAAA;EAExB,QAAA,GAAW,iBAAA;AAAA;;AAAiB;AAmB9B;;;;;;;;;;;;;;cAAa,YAAA;EAAA,KACN,oBAAA;EAAA,SAII,QAAA,GAAW,iBAAA;EAAA,SACX,MAAA,EAAQ,OAAA;EAAA,SACR,OAAA;EAAA,SACA,YAAA,YAAwB,oBAAA;EAAA,SACxB,QAAA,GAAW,iBAAA;cAER,OAAA,EAAS,gBAAA,CAAiB,OAAA;EAAA,QAc9B,MAAA,CAAO,WAAA,EACb,GAAA,YACC,GAAA,IAAO,YAAA,CAAa,iBAAA;EApBd;;;;;;;EAAA,OAiCF,UAAA,CAAW,MAAA,QAAc,YAAA,QAAoB,YAAA;AAAA"}