assistant-stream 0.3.24 → 0.3.26

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 (147) hide show
  1. package/README.md +4 -1
  2. package/dist/core/AssistantStream.d.ts +0 -1
  3. package/dist/core/AssistantStream.d.ts.map +1 -1
  4. package/dist/core/AssistantStreamChunk.d.ts +24 -12
  5. package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
  6. package/dist/core/accumulators/AssistantMessageStream.d.ts +0 -1
  7. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
  8. package/dist/core/accumulators/TimingTracker.d.ts +0 -1
  9. package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
  10. package/dist/core/accumulators/assistant-message-accumulator.d.ts +3 -9
  11. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
  12. package/dist/core/accumulators/assistant-message-accumulator.js +6 -1
  13. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  14. package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
  15. package/dist/core/converters/toGenericMessages.js +2 -1
  16. package/dist/core/converters/toGenericMessages.js.map +1 -1
  17. package/dist/core/modules/assistant-stream.d.ts +13 -7
  18. package/dist/core/modules/assistant-stream.d.ts.map +1 -1
  19. package/dist/core/modules/text.d.ts +0 -1
  20. package/dist/core/modules/text.d.ts.map +1 -1
  21. package/dist/core/modules/tool-call.d.ts +0 -1
  22. package/dist/core/modules/tool-call.d.ts.map +1 -1
  23. package/dist/core/object/ObjectStreamAccumulator.d.ts +1 -1
  24. package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
  25. package/dist/core/object/ObjectStreamResponse.d.ts +0 -1
  26. package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
  27. package/dist/core/object/ObjectStreamResponse.js +1 -1
  28. package/dist/core/object/ObjectStreamResponse.js.map +1 -1
  29. package/dist/core/object/createObjectStream.d.ts +2 -5
  30. package/dist/core/object/createObjectStream.d.ts.map +1 -1
  31. package/dist/core/object/types.d.ts +1 -0
  32. package/dist/core/object/types.d.ts.map +1 -1
  33. package/dist/core/serialization/PlainText.d.ts +0 -1
  34. package/dist/core/serialization/PlainText.d.ts.map +1 -1
  35. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +0 -1
  36. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
  37. package/dist/core/serialization/assistant-transport/AssistantTransport.js +2 -52
  38. package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
  39. package/dist/core/serialization/data-stream/DataStream.d.ts +0 -1
  40. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
  41. package/dist/core/serialization/data-stream/chunk-types.d.ts +1 -2
  42. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
  43. package/dist/core/serialization/data-stream/serialization.d.ts +0 -1
  44. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
  45. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +0 -1
  46. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
  47. package/dist/core/serialization/ui-message-stream/UIMessageStream.js +66 -53
  48. package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
  49. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +0 -1
  50. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
  51. package/dist/core/tool/ToolCallReader.d.ts +1 -0
  52. package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
  53. package/dist/core/tool/ToolExecutionStream.d.ts +0 -1
  54. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
  55. package/dist/core/tool/ToolResponse.d.ts +6 -4
  56. package/dist/core/tool/ToolResponse.d.ts.map +1 -1
  57. package/dist/core/tool/schema-utils.d.ts +0 -1
  58. package/dist/core/tool/schema-utils.d.ts.map +1 -1
  59. package/dist/core/tool/tool-types.d.ts +71 -31
  60. package/dist/core/tool/tool-types.d.ts.map +1 -1
  61. package/dist/core/tool/toolResultStream.d.ts +3 -2
  62. package/dist/core/tool/toolResultStream.d.ts.map +1 -1
  63. package/dist/core/tool/type-path-utils.d.ts +2 -2
  64. package/dist/core/tool/type-path-utils.d.ts.map +1 -1
  65. package/dist/core/utils/Counter.d.ts.map +1 -1
  66. package/dist/core/utils/generateId.d.ts.map +1 -1
  67. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +0 -1
  68. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
  69. package/dist/core/utils/stream/AssistantTransformStream.d.ts +0 -1
  70. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
  71. package/dist/core/utils/stream/LineDecoderStream.d.ts +1 -0
  72. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
  73. package/dist/core/utils/stream/LineDecoderStream.js +19 -6
  74. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
  75. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
  76. package/dist/core/utils/stream/SSE.d.ts +0 -1
  77. package/dist/core/utils/stream/SSE.d.ts.map +1 -1
  78. package/dist/core/utils/stream/SSE.js +2 -52
  79. package/dist/core/utils/stream/SSE.js.map +1 -1
  80. package/dist/core/utils/stream/SSEEventDecoder.d.ts +27 -0
  81. package/dist/core/utils/stream/SSEEventDecoder.d.ts.map +1 -0
  82. package/dist/core/utils/stream/SSEEventDecoder.js +84 -0
  83. package/dist/core/utils/stream/SSEEventDecoder.js.map +1 -0
  84. package/dist/core/utils/stream/SSEEventDecoderStream.d.ts +13 -0
  85. package/dist/core/utils/stream/SSEEventDecoderStream.d.ts.map +1 -0
  86. package/dist/core/utils/stream/SSEEventDecoderStream.js +24 -0
  87. package/dist/core/utils/stream/SSEEventDecoderStream.js.map +1 -0
  88. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
  89. package/dist/core/utils/stream/merge.d.ts +0 -1
  90. package/dist/core/utils/stream/merge.d.ts.map +1 -1
  91. package/dist/core/utils/stream/path-utils.d.ts +0 -1
  92. package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
  93. package/dist/core/utils/types.d.ts +16 -8
  94. package/dist/core/utils/types.d.ts.map +1 -1
  95. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
  96. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +3 -3
  97. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -1
  98. package/dist/resumable/ResumableStreamContext.d.ts +0 -1
  99. package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
  100. package/dist/resumable/constants.d.ts.map +1 -1
  101. package/dist/resumable/createResumableAssistantStreamResponse.d.ts +6 -4
  102. package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
  103. package/dist/resumable/errors.d.ts.map +1 -1
  104. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +0 -1
  105. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
  106. package/dist/resumable/stores/InMemoryResumableStreamStore.js +2 -1
  107. package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
  108. package/dist/resumable/stores/ioredis.d.ts +0 -1
  109. package/dist/resumable/stores/ioredis.d.ts.map +1 -1
  110. package/dist/resumable/stores/redis-impl.d.ts +2 -2
  111. package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
  112. package/dist/resumable/stores/redis.d.ts +0 -1
  113. package/dist/resumable/stores/redis.d.ts.map +1 -1
  114. package/dist/resumable/types.d.ts.map +1 -1
  115. package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
  116. package/dist/utils/json/fix-json.d.ts.map +1 -1
  117. package/dist/utils/json/json-value.d.ts.map +1 -1
  118. package/dist/utils/json/parse-partial-json-object.d.ts +0 -1
  119. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
  120. package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
  121. package/dist/utils.d.ts +2 -1
  122. package/dist/utils.js +2 -1
  123. package/package.json +5 -5
  124. package/src/core/AssistantStreamChunk.ts +2 -0
  125. package/src/core/accumulators/assistant-message-accumulator.test.ts +63 -0
  126. package/src/core/accumulators/assistant-message-accumulator.ts +15 -1
  127. package/src/core/object/ObjectStream.test.ts +20 -0
  128. package/src/core/object/ObjectStreamResponse.test.ts +32 -0
  129. package/src/core/object/ObjectStreamResponse.ts +6 -1
  130. package/src/core/serialization/assistant-transport/AssistantTransport.test.ts +41 -0
  131. package/src/core/serialization/assistant-transport/AssistantTransport.ts +6 -70
  132. package/src/core/serialization/ui-message-stream/UIMessageStream.test.ts +212 -4
  133. package/src/core/serialization/ui-message-stream/UIMessageStream.ts +62 -71
  134. package/src/core/tool/tool-types.ts +4 -0
  135. package/src/core/utils/stream/LineDecoderStream.test.ts +26 -2
  136. package/src/core/utils/stream/LineDecoderStream.ts +21 -11
  137. package/src/core/utils/stream/SSE.ts +6 -70
  138. package/src/core/utils/stream/SSEEventDecoder.test.ts +146 -0
  139. package/src/core/utils/stream/SSEEventDecoder.ts +109 -0
  140. package/src/core/utils/stream/SSEEventDecoderStream.test.ts +42 -0
  141. package/src/core/utils/stream/SSEEventDecoderStream.ts +34 -0
  142. package/src/utils.ts +4 -0
  143. package/dist/utils/json/is-json.d.ts +0 -9
  144. package/dist/utils/json/is-json.d.ts.map +0 -1
  145. package/dist/utils/json/is-json.js +0 -17
  146. package/dist/utils/json/is-json.js.map +0 -1
  147. package/src/utils/json/is-json.ts +0 -43
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantTransport.d.ts","names":[],"sources":["../../../../src/core/serialization/assistant-transport/AssistantTransport.ts"],"mappings":";;;;;;;AASA;;cAAa,yBAAA,SACH,uBAAA,CAAwB,oBAAA,EAAsB,UAAA,CAAW,WAAA,cACtD,sBAAA;EAEX,OAAA,EAAO,OAAA;;;;;;;cA8FI,yBAAA,SAAkC,uBAAA,CAC7C,UAAA,CAAW,WAAA,GACX,oBAAA"}
1
+ {"version":3,"file":"AssistantTransport.d.ts","names":[],"sources":["../../../../src/core/serialization/assistant-transport/AssistantTransport.ts"],"mappings":";;;;;;;;cAYa,kCACH,wBAAwB,sBAAsB,WAAW,yBACtD;EAEX,SAAO;;;;;;;cA4BI,kCAAkC,wBAC7C,WAAW,cACX"}
@@ -1,5 +1,5 @@
1
1
  import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream.js";
2
- import { LineDecoderStream } from "../../utils/stream/LineDecoderStream.js";
2
+ import { SSEEventDecoderStream } from "../../utils/stream/SSEEventDecoderStream.js";
3
3
  //#region src/core/serialization/assistant-transport/AssistantTransport.ts
4
4
  /**
5
5
  * AssistantTransportEncoder encodes AssistantStreamChunks into SSE format
@@ -24,56 +24,6 @@ var AssistantTransportEncoder = class extends PipeableTransformStream {
24
24
  });
25
25
  }
26
26
  };
27
- var SSEEventStream = class extends TransformStream {
28
- constructor() {
29
- let eventBuffer = {};
30
- let dataLines = [];
31
- super({
32
- start() {
33
- eventBuffer = {};
34
- dataLines = [];
35
- },
36
- transform(line, controller) {
37
- if (line.startsWith(":")) return;
38
- if (line === "") {
39
- if (dataLines.length > 0) controller.enqueue({
40
- event: eventBuffer.event || "message",
41
- data: dataLines.join("\n"),
42
- id: eventBuffer.id,
43
- retry: eventBuffer.retry
44
- });
45
- eventBuffer = {};
46
- dataLines = [];
47
- return;
48
- }
49
- const [field, ...rest] = line.split(":");
50
- const value = rest.join(":").trimStart();
51
- switch (field) {
52
- case "event":
53
- eventBuffer.event = value;
54
- break;
55
- case "data":
56
- dataLines.push(value);
57
- break;
58
- case "id":
59
- eventBuffer.id = value;
60
- break;
61
- case "retry":
62
- eventBuffer.retry = Number(value);
63
- break;
64
- }
65
- },
66
- flush(controller) {
67
- if (dataLines.length > 0) controller.enqueue({
68
- event: eventBuffer.event || "message",
69
- data: dataLines.join("\n"),
70
- id: eventBuffer.id,
71
- retry: eventBuffer.retry
72
- });
73
- }
74
- });
75
- }
76
- };
77
27
  /**
78
28
  * AssistantTransportDecoder decodes SSE format into AssistantStreamChunks.
79
29
  * It stops decoding when it encounters [DONE].
@@ -82,7 +32,7 @@ var AssistantTransportDecoder = class extends PipeableTransformStream {
82
32
  constructor() {
83
33
  super((readable) => {
84
34
  let receivedDone = false;
85
- return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new SSEEventStream()).pipeThrough(new TransformStream({
35
+ return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new SSEEventDecoderStream()).pipeThrough(new TransformStream({
86
36
  transform(event, controller) {
87
37
  switch (event.event) {
88
38
  case "message":
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantTransport.js","names":[],"sources":["../../../../src/core/serialization/assistant-transport/AssistantTransport.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport { LineDecoderStream } from \"../../utils/stream/LineDecoderStream\";\nimport type { AssistantStreamEncoder } from \"../../AssistantStream\";\n\n/**\n * AssistantTransportEncoder encodes AssistantStreamChunks into SSE format\n * and emits [DONE] when the stream completes.\n */\nexport class AssistantTransportEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n constructor() {\n super((readable) => {\n return readable\n .pipeThrough(\n new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue(\"data: [DONE]\\n\\n\");\n },\n }),\n )\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\ntype SSEEvent = {\n event: string;\n data: string;\n id?: string | undefined;\n retry?: number | undefined;\n};\n\nclass SSEEventStream extends TransformStream<string, SSEEvent> {\n constructor() {\n let eventBuffer: Partial<SSEEvent> = {};\n let dataLines: string[] = [];\n\n super({\n start() {\n eventBuffer = {};\n dataLines = [];\n },\n transform(line, controller) {\n if (line.startsWith(\":\")) return; // Ignore comments\n\n if (line === \"\") {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n eventBuffer = {};\n dataLines = [];\n return;\n }\n\n const [field, ...rest] = line.split(\":\");\n const value = rest.join(\":\").trimStart();\n\n switch (field) {\n case \"event\":\n eventBuffer.event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n eventBuffer.id = value;\n break;\n case \"retry\":\n eventBuffer.retry = Number(value);\n break;\n }\n },\n flush(controller) {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n },\n });\n }\n}\n\n/**\n * AssistantTransportDecoder decodes SSE format into AssistantStreamChunks.\n * It stops decoding when it encounters [DONE].\n */\nexport class AssistantTransportDecoder extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n let receivedDone = false;\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new SSEEventStream())\n .pipeThrough(\n new TransformStream<SSEEvent, AssistantStreamChunk>({\n transform(event, controller) {\n switch (event.event) {\n case \"message\":\n if (event.data === \"[DONE]\") {\n // Mark that we received [DONE]\n receivedDone = true;\n // Stop processing when we encounter [DONE]\n controller.terminate();\n } else {\n controller.enqueue(JSON.parse(event.data));\n }\n break;\n default:\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n },\n flush() {\n if (!receivedDone) {\n throw new Error(\n \"Stream ended abruptly without receiving [DONE] marker\",\n );\n }\n },\n }),\n );\n });\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,4BAAb,cACU,wBAEV;CACE,UAAU,IAAI,QAAQ;EACpB,gBAAgB;EAChB,iBAAiB;EACjB,YAAY;CACd,CAAC;CAED,cAAc;EACZ,OAAO,aAAa;GAClB,OAAO,SACJ,YACC,IAAI,gBAA8C;IAChD,UAAU,OAAO,YAAY;KAC3B,WAAW,QAAQ,SAAS,KAAK,UAAU,KAAK,EAAE,KAAK;IACzD;IACA,MAAM,YAAY;KAChB,WAAW,QAAQ,kBAAkB;IACvC;GACF,CAAC,CACH,CAAC,CACA,YAAY,IAAI,kBAAkB,CAAC;EACxC,CAAC;CACH;AACF;AASA,IAAM,iBAAN,cAA6B,gBAAkC;CAC7D,cAAc;EACZ,IAAI,cAAiC,CAAC;EACtC,IAAI,YAAsB,CAAC;EAE3B,MAAM;GACJ,QAAQ;IACN,cAAc,CAAC;IACf,YAAY,CAAC;GACf;GACA,UAAU,MAAM,YAAY;IAC1B,IAAI,KAAK,WAAW,GAAG,GAAG;IAE1B,IAAI,SAAS,IAAI;KACf,IAAI,UAAU,SAAS,GACrB,WAAW,QAAQ;MACjB,OAAO,YAAY,SAAS;MAC5B,MAAM,UAAU,KAAK,IAAI;MACzB,IAAI,YAAY;MAChB,OAAO,YAAY;KACrB,CAAC;KAEH,cAAc,CAAC;KACf,YAAY,CAAC;KACb;IACF;IAEA,MAAM,CAAC,OAAO,GAAG,QAAQ,KAAK,MAAM,GAAG;IACvC,MAAM,QAAQ,KAAK,KAAK,GAAG,CAAC,CAAC,UAAU;IAEvC,QAAQ,OAAR;KACE,KAAK;MACH,YAAY,QAAQ;MACpB;KACF,KAAK;MACH,UAAU,KAAK,KAAK;MACpB;KACF,KAAK;MACH,YAAY,KAAK;MACjB;KACF,KAAK;MACH,YAAY,QAAQ,OAAO,KAAK;MAChC;IACJ;GACF;GACA,MAAM,YAAY;IAChB,IAAI,UAAU,SAAS,GACrB,WAAW,QAAQ;KACjB,OAAO,YAAY,SAAS;KAC5B,MAAM,UAAU,KAAK,IAAI;KACzB,IAAI,YAAY;KAChB,OAAO,YAAY;IACrB,CAAC;GAEL;EACF,CAAC;CACH;AACF;;;;;AAMA,IAAa,4BAAb,cAA+C,wBAG7C;CACA,cAAc;EACZ,OAAO,aAAa;GAClB,IAAI,eAAe;GAEnB,OAAO,SACJ,YAAY,IAAI,kBAAkB,CAAC,CAAC,CACpC,YAAY,IAAI,kBAAkB,CAAC,CAAC,CACpC,YAAY,IAAI,eAAe,CAAC,CAAC,CACjC,YACC,IAAI,gBAAgD;IAClD,UAAU,OAAO,YAAY;KAC3B,QAAQ,MAAM,OAAd;MACE,KAAK;OACH,IAAI,MAAM,SAAS,UAAU;QAE3B,eAAe;QAEf,WAAW,UAAU;OACvB,OACE,WAAW,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC;OAE3C;MACF,SACE,MAAM,IAAI,MAAM,2BAA2B,MAAM,OAAO;KAC5D;IACF;IACA,QAAQ;KACN,IAAI,CAAC,cACH,MAAM,IAAI,MACR,uDACF;IAEJ;GACF,CAAC,CACH;EACJ,CAAC;CACH;AACF"}
1
+ {"version":3,"file":"AssistantTransport.js","names":[],"sources":["../../../../src/core/serialization/assistant-transport/AssistantTransport.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport {\n SSEEventDecoderStream,\n type PipelineSSEEvent,\n} from \"../../utils/stream/SSEEventDecoderStream\";\nimport type { AssistantStreamEncoder } from \"../../AssistantStream\";\n\n/**\n * AssistantTransportEncoder encodes AssistantStreamChunks into SSE format\n * and emits [DONE] when the stream completes.\n */\nexport class AssistantTransportEncoder\n extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>>\n implements AssistantStreamEncoder\n{\n headers = new Headers({\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n constructor() {\n super((readable) => {\n return readable\n .pipeThrough(\n new TransformStream<AssistantStreamChunk, string>({\n transform(chunk, controller) {\n controller.enqueue(`data: ${JSON.stringify(chunk)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue(\"data: [DONE]\\n\\n\");\n },\n }),\n )\n .pipeThrough(new TextEncoderStream());\n });\n }\n}\n\n/**\n * AssistantTransportDecoder decodes SSE format into AssistantStreamChunks.\n * It stops decoding when it encounters [DONE].\n */\nexport class AssistantTransportDecoder extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> {\n constructor() {\n super((readable) => {\n let receivedDone = false;\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new SSEEventDecoderStream())\n .pipeThrough(\n new TransformStream<PipelineSSEEvent, AssistantStreamChunk>({\n transform(event, controller) {\n switch (event.event) {\n case \"message\":\n if (event.data === \"[DONE]\") {\n // Mark that we received [DONE]\n receivedDone = true;\n // Stop processing when we encounter [DONE]\n controller.terminate();\n } else {\n controller.enqueue(JSON.parse(event.data));\n }\n break;\n default:\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n },\n flush() {\n if (!receivedDone) {\n throw new Error(\n \"Stream ended abruptly without receiving [DONE] marker\",\n );\n }\n },\n }),\n );\n });\n }\n}\n"],"mappings":";;;;;;;AAYA,IAAa,4BAAb,cACU,wBAEV;CACE,UAAU,IAAI,QAAQ;EACpB,gBAAgB;EAChB,iBAAiB;EACjB,YAAY;CACd,CAAC;CAED,cAAc;EACZ,OAAO,aAAa;GAClB,OAAO,SACJ,YACC,IAAI,gBAA8C;IAChD,UAAU,OAAO,YAAY;KAC3B,WAAW,QAAQ,SAAS,KAAK,UAAU,KAAK,EAAE,KAAK;IACzD;IACA,MAAM,YAAY;KAChB,WAAW,QAAQ,kBAAkB;IACvC;GACF,CAAC,CACH,CAAC,CACA,YAAY,IAAI,kBAAkB,CAAC;EACxC,CAAC;CACH;AACF;;;;;AAMA,IAAa,4BAAb,cAA+C,wBAG7C;CACA,cAAc;EACZ,OAAO,aAAa;GAClB,IAAI,eAAe;GAEnB,OAAO,SACJ,YAAY,IAAI,kBAAkB,CAAC,CAAC,CACpC,YAAY,IAAI,sBAAsB,CAAC,CAAC,CACxC,YACC,IAAI,gBAAwD;IAC1D,UAAU,OAAO,YAAY;KAC3B,QAAQ,MAAM,OAAd;MACE,KAAK;OACH,IAAI,MAAM,SAAS,UAAU;QAE3B,eAAe;QAEf,WAAW,UAAU;OACvB,OACE,WAAW,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC;OAE3C;MACF,SACE,MAAM,IAAI,MAAM,2BAA2B,MAAM,OAAO;KAC5D;IACF;IACA,QAAQ;KACN,IAAI,CAAC,cACH,MAAM,IAAI,MACR,uDACF;IAEJ;GACF,CAAC,CACH;EACJ,CAAC;CACH;AACF"}
@@ -1,7 +1,6 @@
1
1
  import { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
2
2
  import { AssistantStreamEncoder } from "../../AssistantStream.js";
3
3
  import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream.js";
4
-
5
4
  //#region src/core/serialization/data-stream/DataStream.d.ts
6
5
  declare class DataStreamEncoder extends PipeableTransformStream<AssistantStreamChunk, Uint8Array<ArrayBuffer>> implements AssistantStreamEncoder {
7
6
  headers: Headers;
@@ -1 +1 @@
1
- {"version":3,"file":"DataStream.d.ts","names":[],"sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"mappings":";;;;;cAiBa,iBAAA,SACH,uBAAA,CAAwB,oBAAA,EAAsB,UAAA,CAAW,WAAA,cACtD,sBAAA;EAEX,OAAA,EAAO,OAAA;;;cA2MI,iBAAA,SAA0B,uBAAA,CACrC,UAAA,CAAW,WAAA,GACX,oBAAA"}
1
+ {"version":3,"file":"DataStream.d.ts","names":[],"sources":["../../../../src/core/serialization/data-stream/DataStream.ts"],"mappings":";;;;cAiBa,0BACH,wBAAwB,sBAAsB,WAAW,yBACtD;EAEX,SAAO;;;cA2MI,0BAA0B,wBACrC,WAAW,cACX"}
@@ -1,11 +1,10 @@
1
1
  import { ReadonlyJSONObject, ReadonlyJSONValue } from "../../../utils/json/json-value.js";
2
2
  import { ObjectStreamOperation } from "../../object/types.js";
3
-
4
3
  //#region src/core/serialization/data-stream/chunk-types.d.ts
5
4
  type DataStreamChunk = { [K in DataStreamStreamChunkType]: {
6
5
  type: K;
7
6
  value: DataStreamStreamChunkValue[K];
8
- } }[DataStreamStreamChunkType];
7
+ }; }[DataStreamStreamChunkType];
9
8
  type LanguageModelV1FinishReason = "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
10
9
  type LanguageModelV1Usage = {
11
10
  inputTokens: number;
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-types.d.ts","names":[],"sources":["../../../../src/core/serialization/data-stream/chunk-types.ts"],"mappings":";;;;KAMY,eAAA,WACJ,yBAAA;EACJ,IAAA,EAAM,CAAA;EACN,KAAA,EAAO,0BAAA,CAA2B,CAAA;AAAA,IAEpC,yBAAA;AAAA,KAEG,2BAAA;AAAA,KASA,oBAAA;EACH,WAAA;EACA,YAAY;AAAA;AAAA,aAGF,yBAAA;EACV,SAAA;EACA,IAAA;EACA,KAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,aAAA;EACA,UAAA;EACA,SAAA;EACA,cAAA;EACA,MAAA;EACA,iBAAA;EACA,kBAAA;EACA,IAAA;EAEA,wBAAA;EACA,YAAA;EACA,iBAAA;EACA,WAAA;AAAA;AAAA,KAEG,0BAAA;EAAA,CACF,yBAAA,CAA0B,SAAA;EAAA,CAC1B,yBAAA,CAA0B,IAAA,GAAO,iBAAA;EAAA,CACjC,yBAAA,CAA0B,UAAA,GAAa,iBAAA;EAAA,CACvC,yBAAA,CAA0B,QAAA;IACzB,UAAA;IACA,QAAA;IACA,IAAA,EAAM,kBAAA;EAAA;EAAA,CAEP,yBAAA,CAA0B,aAAA;IACzB,UAAA;IACA,QAAA;IACA,QAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,qBAAA;IACzB,UAAA;IACA,aAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,cAAA;IACzB,UAAA;IACA,MAAA,EAAQ,iBAAA;IAGR,QAAA,GAAW,iBAAA;IACX,OAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,KAAA;EAAA,CAC1B,yBAAA,CAA0B,UAAA;IACzB,YAAA,EAAc,2BAAA;IACd,KAAA,EAAO,oBAAA;IACP,WAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,aAAA;IACzB,YAAA,EAAc,2BAAA;IACd,KAAA,EAAO,oBAAA;EAAA;EAAA,CAER,yBAAA,CAA0B,SAAA;IACzB,SAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,cAAA;EAAA,CAC1B,yBAAA,CAA0B,MAAA;IACzB,UAAA;IACA,EAAA;IACA,GAAA;IACA,KAAA;IACA,QAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,iBAAA;IAAsB,IAAA;EAAA;EAAA,CAChD,yBAAA,CAA0B,kBAAA;IAAuB,SAAA;EAAA;EAAA,CACjD,yBAAA,CAA0B,IAAA;IAAS,IAAA;IAAc,QAAA;EAAA;EAAA,CAGjD,yBAAA,CAA0B,wBAAA,GAA2B,qBAAA;EAAA,CACrD,yBAAA,CAA0B,YAAA;IACzB,SAAA;IACA,QAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,iBAAA;IACzB,cAAA;IACA,QAAA;EAAA;EAAA,CAED,yBAAA,CAA0B,WAAA;IACzB,IAAA;IACA,IAAA,EAAM,iBAAA;IACN,QAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"chunk-types.d.ts","names":[],"sources":["../../../../src/core/serialization/data-stream/chunk-types.ts"],"mappings":";;;KAMY,qBACT,KAAK;EACJ,MAAM;EACN,OAAO,2BAA2B;KAEpC;KAEG;KASA;EACH;EACA;;aAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;KAEG;GACF,0BAA0B;GAC1B,0BAA0B,OAAO;GACjC,0BAA0B,aAAa;GACvC,0BAA0B;IACzB;IACA;IACA,MAAM;;GAEP,0BAA0B;IACzB;IACA;IACA;;GAED,0BAA0B;IACzB;IACA;;GAED,0BAA0B;IACzB;IACA,QAAQ;IAGR,WAAW;IACX;;GAED,0BAA0B;GAC1B,0BAA0B;IACzB,cAAc;IACd,OAAO;IACP;;GAED,0BAA0B;IACzB,cAAc;IACd,OAAO;;GAER,0BAA0B;IACzB;;GAED,0BAA0B;GAC1B,0BAA0B;IACzB;IACA;IACA;IACA;IACA;;GAED,0BAA0B;IAAsB;;GAChD,0BAA0B;IAAuB;;GACjD,0BAA0B;IAAS;IAAc;;GAGjD,0BAA0B,2BAA2B;GACrD,0BAA0B;IACzB;IACA;;GAED,0BAA0B;IACzB;IACA;;GAED,0BAA0B;IACzB;IACA,MAAM;IACN"}
@@ -1,5 +1,4 @@
1
1
  import { DataStreamChunk } from "./chunk-types.js";
2
-
3
2
  //#region src/core/serialization/data-stream/serialization.d.ts
4
3
  declare class DataStreamChunkEncoder extends TransformStream<DataStreamChunk, string> {
5
4
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"serialization.d.ts","names":[],"sources":["../../../../src/core/serialization/data-stream/serialization.ts"],"mappings":";;;cAEa,sBAAA,SAA+B,eAAe,CACzD,eAAA;;;cAYW,sBAAA,SAA+B,eAAe,SAEzD,eAAA"}
1
+ {"version":3,"file":"serialization.d.ts","names":[],"sources":["../../../../src/core/serialization/data-stream/serialization.ts"],"mappings":";;cAEa,+BAA+B,gBAC1C;;;cAYW,+BAA+B,wBAE1C"}
@@ -1,7 +1,6 @@
1
1
  import { AssistantStreamChunk } from "../../AssistantStreamChunk.js";
2
2
  import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream.js";
3
3
  import { UIMessageStreamChunk, UIMessageStreamDataChunk } from "./chunk-types.js";
4
-
5
4
  //#region src/core/serialization/ui-message-stream/UIMessageStream.d.ts
6
5
  type UIMessageStreamDecoderOptions = {
7
6
  onData?: (data: {
@@ -1 +1 @@
1
- {"version":3,"file":"UIMessageStream.d.ts","names":[],"sources":["../../../../src/core/serialization/ui-message-stream/UIMessageStream.ts"],"mappings":";;;;;KAcY,6BAAA;EACV,MAAA,IAAU,IAAA;IACR,IAAA;IACA,IAAA;IACA,IAAA;IACA,SAAA;EAAA;AAAA;;;;cA6ES,sBAAA,SAA+B,uBAAA,CAC1C,UAAA,CAAW,WAAA,GACX,oBAAA;cAEY,OAAA,GAAS,6BAAA;AAAA"}
1
+ {"version":3,"file":"UIMessageStream.d.ts","names":[],"sources":["../../../../src/core/serialization/ui-message-stream/UIMessageStream.ts"],"mappings":";;;;KAiBY;EACV,UAAU;IACR;IACA;IACA;IACA;;;;;;cAWS,+BAA+B,wBAC1C,WAAW,cACX;cAEY,UAAS"}
@@ -1,58 +1,8 @@
1
1
  import { AssistantTransformStream } from "../../utils/stream/AssistantTransformStream.js";
2
2
  import { PipeableTransformStream } from "../../utils/stream/PipeableTransformStream.js";
3
- import { LineDecoderStream } from "../../utils/stream/LineDecoderStream.js";
4
3
  import { generateId } from "../../utils/generateId.js";
4
+ import { SSEEventDecoderStream } from "../../utils/stream/SSEEventDecoderStream.js";
5
5
  //#region src/core/serialization/ui-message-stream/UIMessageStream.ts
6
- var SSEEventStream = class extends TransformStream {
7
- constructor() {
8
- let eventBuffer = {};
9
- let dataLines = [];
10
- super({
11
- start() {
12
- eventBuffer = {};
13
- dataLines = [];
14
- },
15
- transform(line, controller) {
16
- if (line.startsWith(":")) return;
17
- if (line === "") {
18
- if (dataLines.length > 0) controller.enqueue({
19
- event: eventBuffer.event || "message",
20
- data: dataLines.join("\n"),
21
- id: eventBuffer.id,
22
- retry: eventBuffer.retry
23
- });
24
- eventBuffer = {};
25
- dataLines = [];
26
- return;
27
- }
28
- const [field, ...rest] = line.split(":");
29
- const value = rest.join(":").trimStart();
30
- switch (field) {
31
- case "event":
32
- eventBuffer.event = value;
33
- break;
34
- case "data":
35
- dataLines.push(value);
36
- break;
37
- case "id":
38
- eventBuffer.id = value;
39
- break;
40
- case "retry":
41
- eventBuffer.retry = Number(value);
42
- break;
43
- }
44
- },
45
- flush(controller) {
46
- if (dataLines.length > 0) controller.enqueue({
47
- event: eventBuffer.event || "message",
48
- data: dataLines.join("\n"),
49
- id: eventBuffer.id,
50
- retry: eventBuffer.retry
51
- });
52
- }
53
- });
54
- }
55
- };
56
6
  const isDataChunk = (chunk) => chunk.type.startsWith("data-");
57
7
  /**
58
8
  * Decodes AI SDK v6 UI Message Stream format into AssistantStreamChunks.
@@ -189,7 +139,7 @@ var UIMessageStreamDecoder = class extends PipeableTransformStream {
189
139
  toolCallControllers.clear();
190
140
  }
191
141
  });
192
- return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new LineDecoderStream()).pipeThrough(new SSEEventStream()).pipeThrough(new TransformStream({
142
+ return readable.pipeThrough(new TextDecoderStream()).pipeThrough(new SSEEventDecoderStream()).pipeThrough(new TransformStream({
193
143
  transform(event, controller) {
194
144
  if (event.event !== "message") throw new Error(`Unknown SSE event type: ${event.event}`);
195
145
  if (event.data === "[DONE]") {
@@ -197,7 +147,70 @@ var UIMessageStreamDecoder = class extends PipeableTransformStream {
197
147
  controller.terminate();
198
148
  return;
199
149
  }
200
- controller.enqueue(JSON.parse(event.data));
150
+ const chunk = JSON.parse(event.data);
151
+ if (chunk.type === "text-delta" && chunk.textDelta === void 0) {
152
+ const { delta, ...rest } = chunk;
153
+ controller.enqueue({
154
+ ...rest,
155
+ textDelta: delta ?? ""
156
+ });
157
+ return;
158
+ }
159
+ if (chunk.type === "start") {
160
+ controller.enqueue({
161
+ ...chunk,
162
+ messageId: chunk.messageId ?? generateId()
163
+ });
164
+ return;
165
+ }
166
+ if (chunk.type === "source-url") {
167
+ controller.enqueue({
168
+ type: "source",
169
+ source: {
170
+ sourceType: "url",
171
+ id: chunk.sourceId,
172
+ url: chunk.url,
173
+ ...chunk.title && { title: chunk.title }
174
+ }
175
+ });
176
+ return;
177
+ }
178
+ if (chunk.type === "source" && chunk.source == null) return;
179
+ if (chunk.type === "file" && chunk.file == null) {
180
+ if (chunk.url === void 0) return;
181
+ controller.enqueue({
182
+ type: "file",
183
+ file: {
184
+ mimeType: chunk.mediaType,
185
+ data: chunk.url
186
+ }
187
+ });
188
+ return;
189
+ }
190
+ if (chunk.type === "finish-step") {
191
+ controller.enqueue({
192
+ ...chunk,
193
+ finishReason: chunk.finishReason ?? "unknown",
194
+ usage: chunk.usage ?? {
195
+ inputTokens: 0,
196
+ outputTokens: 0
197
+ },
198
+ isContinued: chunk.isContinued ?? false
199
+ });
200
+ return;
201
+ }
202
+ if (chunk.type === "finish") {
203
+ controller.enqueue({
204
+ ...chunk,
205
+ finishReason: chunk.finishReason ?? "unknown",
206
+ usage: chunk.usage ?? {
207
+ inputTokens: 0,
208
+ outputTokens: 0
209
+ }
210
+ });
211
+ return;
212
+ }
213
+ controller.enqueue(chunk);
201
214
  },
202
215
  flush() {
203
216
  if (!receivedDone) throw new Error("Stream ended abruptly without receiving [DONE] marker");
@@ -1 +1 @@
1
- {"version":3,"file":"UIMessageStream.js","names":[],"sources":["../../../../src/core/serialization/ui-message-stream/UIMessageStream.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport type { ToolCallStreamController } from \"../../modules/tool-call\";\nimport type { TextStreamController } from \"../../modules/text\";\nimport { AssistantTransformStream } from \"../../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport { LineDecoderStream } from \"../../utils/stream/LineDecoderStream\";\nimport type {\n UIMessageStreamChunk,\n UIMessageStreamDataChunk,\n} from \"./chunk-types\";\nimport { generateId } from \"../../utils/generateId\";\n\nexport type { UIMessageStreamChunk, UIMessageStreamDataChunk };\n\nexport type UIMessageStreamDecoderOptions = {\n onData?: (data: {\n type: string;\n name: string;\n data: unknown;\n transient?: boolean;\n }) => void;\n};\n\ntype SSEEvent = {\n event: string;\n data: string;\n id?: string | undefined;\n retry?: number | undefined;\n};\n\nclass SSEEventStream extends TransformStream<string, SSEEvent> {\n constructor() {\n let eventBuffer: Partial<SSEEvent> = {};\n let dataLines: string[] = [];\n\n super({\n start() {\n eventBuffer = {};\n dataLines = [];\n },\n transform(line, controller) {\n if (line.startsWith(\":\")) return;\n\n if (line === \"\") {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n eventBuffer = {};\n dataLines = [];\n return;\n }\n\n const [field, ...rest] = line.split(\":\");\n const value = rest.join(\":\").trimStart();\n\n switch (field) {\n case \"event\":\n eventBuffer.event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n eventBuffer.id = value;\n break;\n case \"retry\":\n eventBuffer.retry = Number(value);\n break;\n }\n },\n flush(controller) {\n if (dataLines.length > 0) {\n controller.enqueue({\n event: eventBuffer.event || \"message\",\n data: dataLines.join(\"\\n\"),\n id: eventBuffer.id,\n retry: eventBuffer.retry,\n });\n }\n },\n });\n }\n}\n\nconst isDataChunk = (\n chunk: UIMessageStreamChunk,\n): chunk is UIMessageStreamDataChunk => chunk.type.startsWith(\"data-\");\n\n/**\n * Decodes AI SDK v6 UI Message Stream format into AssistantStreamChunks.\n */\nexport class UIMessageStreamDecoder extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> {\n constructor(options: UIMessageStreamDecoderOptions = {}) {\n super((readable) => {\n const toolCallControllers = new Map<string, ToolCallStreamController>();\n let activeToolCallArgsText: TextStreamController | undefined;\n let currentMessageId: string | undefined;\n let receivedDone = false;\n\n const transform = new AssistantTransformStream<UIMessageStreamChunk>({\n transform(chunk, controller) {\n const type = chunk.type;\n\n if (isDataChunk(chunk)) {\n const name = chunk.type.slice(5);\n\n if (options.onData) {\n options.onData({\n type: chunk.type,\n name,\n data: chunk.data,\n ...(chunk.transient !== undefined && {\n transient: chunk.transient,\n }),\n });\n }\n\n if (!chunk.transient) {\n controller.enqueue({\n type: \"data\",\n path: [],\n data: [{ name, data: chunk.data }],\n });\n }\n return;\n }\n\n switch (type) {\n case \"start\":\n currentMessageId = chunk.messageId;\n controller.enqueue({\n type: \"step-start\",\n path: [],\n messageId: chunk.messageId,\n });\n break;\n\n case \"text-start\":\n case \"text-end\":\n case \"reasoning-start\":\n case \"reasoning-end\":\n break;\n\n case \"text-delta\":\n controller.appendText(chunk.textDelta);\n break;\n\n case \"reasoning-delta\":\n controller.appendReasoning(chunk.delta);\n break;\n\n case \"source\":\n controller.appendSource({\n type: \"source\",\n sourceType: chunk.source.sourceType,\n id: chunk.source.id,\n url: chunk.source.url,\n ...(chunk.source.title && { title: chunk.source.title }),\n });\n break;\n\n case \"file\":\n controller.appendFile({\n type: \"file\",\n mimeType: chunk.file.mimeType,\n data: chunk.file.data,\n });\n break;\n\n case \"tool-call-start\": {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n\n if (toolCallControllers.has(chunk.toolCallId)) {\n throw new Error(\n `Encountered duplicate tool call id: ${chunk.toolCallId}`,\n );\n }\n\n const toolCallController = controller.addToolCallPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n });\n toolCallControllers.set(chunk.toolCallId, toolCallController);\n activeToolCallArgsText = toolCallController.argsText;\n break;\n }\n\n case \"tool-call-delta\":\n activeToolCallArgsText?.append(chunk.argsText);\n break;\n\n case \"tool-call-end\":\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n break;\n\n case \"tool-result\": {\n const toolCallController = toolCallControllers.get(\n chunk.toolCallId,\n );\n if (!toolCallController) {\n throw new Error(\n `Encountered tool result with unknown id: ${chunk.toolCallId}`,\n );\n }\n toolCallController.setResponse({\n result: chunk.result,\n isError: chunk.isError ?? false,\n ...(chunk.messages !== undefined\n ? { messages: chunk.messages }\n : {}),\n });\n break;\n }\n\n case \"start-step\":\n controller.enqueue({\n type: \"step-start\",\n path: [],\n messageId: chunk.messageId ?? currentMessageId ?? generateId(),\n });\n break;\n\n case \"finish-step\":\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n isContinued: chunk.isContinued,\n });\n break;\n\n case \"finish\":\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n });\n break;\n\n case \"error\":\n controller.enqueue({\n type: \"error\",\n path: [],\n error: chunk.errorText,\n });\n break;\n\n default:\n // ignore unknown types for forward compatibility\n break;\n }\n },\n flush() {\n activeToolCallArgsText?.close();\n toolCallControllers.forEach((ctrl) => ctrl.close());\n toolCallControllers.clear();\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new LineDecoderStream())\n .pipeThrough(new SSEEventStream())\n .pipeThrough(\n new TransformStream<SSEEvent, UIMessageStreamChunk>({\n transform(event, controller) {\n if (event.event !== \"message\") {\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n\n if (event.data === \"[DONE]\") {\n receivedDone = true;\n controller.terminate();\n return;\n }\n\n controller.enqueue(JSON.parse(event.data));\n },\n flush() {\n if (!receivedDone) {\n throw new Error(\n \"Stream ended abruptly without receiving [DONE] marker\",\n );\n }\n },\n }),\n )\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"UIMessageStream.js","names":[],"sources":["../../../../src/core/serialization/ui-message-stream/UIMessageStream.ts"],"sourcesContent":["import type { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport type { ToolCallStreamController } from \"../../modules/tool-call\";\nimport type { TextStreamController } from \"../../modules/text\";\nimport { AssistantTransformStream } from \"../../utils/stream/AssistantTransformStream\";\nimport { PipeableTransformStream } from \"../../utils/stream/PipeableTransformStream\";\nimport {\n SSEEventDecoderStream,\n type PipelineSSEEvent,\n} from \"../../utils/stream/SSEEventDecoderStream\";\nimport type {\n UIMessageStreamChunk,\n UIMessageStreamDataChunk,\n} from \"./chunk-types\";\nimport { generateId } from \"../../utils/generateId\";\n\nexport type { UIMessageStreamChunk, UIMessageStreamDataChunk };\n\nexport type UIMessageStreamDecoderOptions = {\n onData?: (data: {\n type: string;\n name: string;\n data: unknown;\n transient?: boolean;\n }) => void;\n};\n\nconst isDataChunk = (\n chunk: UIMessageStreamChunk,\n): chunk is UIMessageStreamDataChunk => chunk.type.startsWith(\"data-\");\n\n/**\n * Decodes AI SDK v6 UI Message Stream format into AssistantStreamChunks.\n */\nexport class UIMessageStreamDecoder extends PipeableTransformStream<\n Uint8Array<ArrayBuffer>,\n AssistantStreamChunk\n> {\n constructor(options: UIMessageStreamDecoderOptions = {}) {\n super((readable) => {\n const toolCallControllers = new Map<string, ToolCallStreamController>();\n let activeToolCallArgsText: TextStreamController | undefined;\n let currentMessageId: string | undefined;\n let receivedDone = false;\n\n const transform = new AssistantTransformStream<UIMessageStreamChunk>({\n transform(chunk, controller) {\n const type = chunk.type;\n\n if (isDataChunk(chunk)) {\n const name = chunk.type.slice(5);\n\n if (options.onData) {\n options.onData({\n type: chunk.type,\n name,\n data: chunk.data,\n ...(chunk.transient !== undefined && {\n transient: chunk.transient,\n }),\n });\n }\n\n if (!chunk.transient) {\n controller.enqueue({\n type: \"data\",\n path: [],\n data: [{ name, data: chunk.data }],\n });\n }\n return;\n }\n\n switch (type) {\n case \"start\":\n currentMessageId = chunk.messageId;\n controller.enqueue({\n type: \"step-start\",\n path: [],\n messageId: chunk.messageId,\n });\n break;\n\n case \"text-start\":\n case \"text-end\":\n case \"reasoning-start\":\n case \"reasoning-end\":\n break;\n\n case \"text-delta\":\n controller.appendText(chunk.textDelta);\n break;\n\n case \"reasoning-delta\":\n controller.appendReasoning(chunk.delta);\n break;\n\n case \"source\":\n controller.appendSource({\n type: \"source\",\n sourceType: chunk.source.sourceType,\n id: chunk.source.id,\n url: chunk.source.url,\n ...(chunk.source.title && { title: chunk.source.title }),\n });\n break;\n\n case \"file\":\n controller.appendFile({\n type: \"file\",\n mimeType: chunk.file.mimeType,\n data: chunk.file.data,\n });\n break;\n\n case \"tool-call-start\": {\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n\n if (toolCallControllers.has(chunk.toolCallId)) {\n throw new Error(\n `Encountered duplicate tool call id: ${chunk.toolCallId}`,\n );\n }\n\n const toolCallController = controller.addToolCallPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n });\n toolCallControllers.set(chunk.toolCallId, toolCallController);\n activeToolCallArgsText = toolCallController.argsText;\n break;\n }\n\n case \"tool-call-delta\":\n activeToolCallArgsText?.append(chunk.argsText);\n break;\n\n case \"tool-call-end\":\n activeToolCallArgsText?.close();\n activeToolCallArgsText = undefined;\n break;\n\n case \"tool-result\": {\n const toolCallController = toolCallControllers.get(\n chunk.toolCallId,\n );\n if (!toolCallController) {\n throw new Error(\n `Encountered tool result with unknown id: ${chunk.toolCallId}`,\n );\n }\n toolCallController.setResponse({\n result: chunk.result,\n isError: chunk.isError ?? false,\n ...(chunk.messages !== undefined\n ? { messages: chunk.messages }\n : {}),\n });\n break;\n }\n\n case \"start-step\":\n controller.enqueue({\n type: \"step-start\",\n path: [],\n messageId: chunk.messageId ?? currentMessageId ?? generateId(),\n });\n break;\n\n case \"finish-step\":\n controller.enqueue({\n type: \"step-finish\",\n path: [],\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n isContinued: chunk.isContinued,\n });\n break;\n\n case \"finish\":\n controller.enqueue({\n type: \"message-finish\",\n path: [],\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n });\n break;\n\n case \"error\":\n controller.enqueue({\n type: \"error\",\n path: [],\n error: chunk.errorText,\n });\n break;\n\n default:\n // ignore unknown types for forward compatibility\n break;\n }\n },\n flush() {\n activeToolCallArgsText?.close();\n toolCallControllers.forEach((ctrl) => ctrl.close());\n toolCallControllers.clear();\n },\n });\n\n return readable\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new SSEEventDecoderStream())\n .pipeThrough(\n new TransformStream<PipelineSSEEvent, UIMessageStreamChunk>({\n transform(event, controller) {\n if (event.event !== \"message\") {\n throw new Error(`Unknown SSE event type: ${event.event}`);\n }\n\n if (event.data === \"[DONE]\") {\n receivedDone = true;\n controller.terminate();\n return;\n }\n\n const chunk = JSON.parse(event.data);\n if (\n chunk.type === \"text-delta\" &&\n chunk.textDelta === undefined\n ) {\n const { delta, ...rest } = chunk;\n controller.enqueue({ ...rest, textDelta: delta ?? \"\" });\n return;\n }\n if (chunk.type === \"start\") {\n controller.enqueue({\n ...chunk,\n messageId: chunk.messageId ?? generateId(),\n });\n return;\n }\n if (chunk.type === \"source-url\") {\n controller.enqueue({\n type: \"source\",\n source: {\n sourceType: \"url\",\n id: chunk.sourceId,\n url: chunk.url,\n ...(chunk.title && { title: chunk.title }),\n },\n });\n return;\n }\n if (chunk.type === \"source\" && chunk.source == null) return;\n if (chunk.type === \"file\" && chunk.file == null) {\n if (chunk.url === undefined) return;\n controller.enqueue({\n type: \"file\",\n file: { mimeType: chunk.mediaType, data: chunk.url },\n });\n return;\n }\n if (chunk.type === \"finish-step\") {\n controller.enqueue({\n ...chunk,\n finishReason: chunk.finishReason ?? \"unknown\",\n usage: chunk.usage ?? { inputTokens: 0, outputTokens: 0 },\n isContinued: chunk.isContinued ?? false,\n });\n return;\n }\n if (chunk.type === \"finish\") {\n controller.enqueue({\n ...chunk,\n finishReason: chunk.finishReason ?? \"unknown\",\n usage: chunk.usage ?? { inputTokens: 0, outputTokens: 0 },\n });\n return;\n }\n\n controller.enqueue(chunk);\n },\n flush() {\n if (!receivedDone) {\n throw new Error(\n \"Stream ended abruptly without receiving [DONE] marker\",\n );\n }\n },\n }),\n )\n .pipeThrough(transform);\n });\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { ReadonlyJSONValue } from "../../../utils/json/json-value.js";
2
-
3
2
  //#region src/core/serialization/ui-message-stream/chunk-types.d.ts
4
3
  type FinishReason = "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
5
4
  type Usage = {
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-types.d.ts","names":[],"sources":["../../../../src/core/serialization/ui-message-stream/chunk-types.ts"],"mappings":";;;KAEK,YAAA;AAAA,KASA,KAAA;EACH,WAAA;EACA,YAAY;AAAA;AAAA,KAGF,oBAAA;EACN,IAAA;EAAe,SAAA;AAAA;EACf,IAAA;EAAoB,EAAA;AAAA;EACpB,IAAA;EAAoB,SAAA;AAAA;EACpB,IAAA;AAAA;EACA,IAAA;EAAyB,EAAA;AAAA;EACzB,IAAA;EAAyB,KAAA;AAAA;EACzB,IAAA;AAAA;EAEA,IAAA;EACA,MAAA;IAAU,UAAA;IAAmB,EAAA;IAAY,GAAA;IAAa,KAAA;EAAA;AAAA;EAEtD,IAAA;EAAc,IAAA;IAAQ,QAAA;IAAkB,IAAA;EAAA;AAAA;EAExC,IAAA;EACA,EAAA;EACA,UAAA;EACA,QAAA;AAAA;EAEA,IAAA;EAAyB,QAAA;AAAA;EACzB,IAAA;AAAA;EAEA,IAAA;EACA,UAAA;EACA,MAAA,EAAQ,iBAAA;EACR,OAAA;EACA,QAAA,GAAW,iBAAA;AAAA;EAEX,IAAA;EAAoB,SAAA;AAAA;EAEpB,IAAA;EACA,YAAA,EAAc,YAAA;EACd,KAAA,EAAO,KAAA;EACP,WAAA;AAAA;EAEA,IAAA;EAAgB,YAAA,EAAc,YAAA;EAAc,KAAA,EAAO,KAAA;AAAA;EACnD,IAAA;EAAe,SAAA;AAAA,IACjB,wBAAA;AAAA,KAEQ,wBAAA;EACV,IAAA;EACA,EAAA;EACA,IAAA,EAAM,iBAAiB;EACvB,SAAA;AAAA"}
1
+ {"version":3,"file":"chunk-types.d.ts","names":[],"sources":["../../../../src/core/serialization/ui-message-stream/chunk-types.ts"],"mappings":";;KAEK;KASA;EACH;EACA;;KAGU;EACN;EAAe;;EACf;EAAoB;;EACpB;EAAoB;;EACpB;;EACA;EAAyB;;EACzB;EAAyB;;EACzB;;EAEA;EACA;IAAU;IAAmB;IAAY;IAAa;;;EAEtD;EAAc;IAAQ;IAAkB;;;EAExC;EACA;EACA;EACA;;EAEA;EAAyB;;EACzB;;EAEA;EACA;EACA,QAAQ;EACR;EACA,WAAW;;EAEX;EAAoB;;EAEpB;EACA,cAAc;EACd,OAAO;EACP;;EAEA;EAAgB,cAAc;EAAc,OAAO;;EACnD;EAAe;IACjB;KAEQ;EACV;EACA;EACA,MAAM;EACN"}
@@ -3,6 +3,7 @@ import { AsyncIterableStream } from "../../utils/AsyncIterableStream.js";
3
3
  import { DeepPartial, TypeAtPath, TypePath } from "./type-path-utils.js";
4
4
  import { ToolCallArgsReader, ToolCallReader, ToolCallResponseReader } from "./tool-types.js";
5
5
  import { ToolResponse } from "./ToolResponse.js";
6
+ import "../../utils.js";
6
7
  //#region src/core/tool/ToolCallReader.d.ts
7
8
  declare class ToolCallArgsReaderImpl<T extends ReadonlyJSONObject> implements ToolCallArgsReader<T> {
8
9
  private argTextDeltas;
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCallReader.d.ts","names":[],"sources":["../../../src/core/tool/ToolCallReader.ts"],"mappings":";;;;;;cA0Qa,sBAAA,WACD,kBAAA,aACC,kBAAA,CAAmB,CAAA;EAAA,QACtB,aAAA;EAAA,QACA,OAAA;EAAA,QACA,IAAA;EAAA,QACA,QAAA;cAEI,aAAA,EAAe,cAAA;EAAA,QAKb,aAAA;EA+Bd,GAAA,eAAkB,QAAA,CAAS,CAAA,MACtB,SAAA,EAAW,KAAA,GACb,OAAA,CAAQ,UAAA,CAAW,CAAA,EAAG,KAAA;EAiCzB,YAAA,eAA2B,QAAA,CAAS,CAAA,MAC/B,SAAA,EAAW,KAAA,GACb,mBAAA,CAAoB,WAAA,CAAY,UAAA,CAAW,CAAA,EAAG,KAAA;EA4BjD,UAAA,eAAyB,QAAA,CAAS,CAAA,MAC7B,SAAA,EAAW,KAAA,GACb,UAAA,CAAW,CAAA,EAAG,KAAA,+BACb,mBAAA,CAAoB,CAAA;EA6BxB,OAAA,eAAsB,QAAA,CAAS,CAAA,MAC1B,SAAA,EAAW,KAAA,GACb,WAAA,CAAY,UAAA,CAAW,CAAA,EAAG,KAAA,WAAgB,KAAA,YACzC,mBAAA,CAAoB,CAAA;AAAA;AAAA,cA8Bb,0BAAA,iBACK,iBAAA,aACL,sBAAA,CAAuB,OAAA;EAAA,iBACL,OAAA;cAAA,OAAA,EAAS,OAAA,CAAQ,YAAA,CAAa,OAAA;EAEpD,GAAA,IAAG,OAAA,CAAA,YAAA,CAAA,OAAA;AAAA;AAAA,cAKC,kBAAA,eACG,kBAAA,kBACE,iBAAA,aACL,cAAA,CAAe,KAAA,EAAO,OAAA;EAAA,SACjB,IAAA,EAAM,sBAAA,CAAuB,KAAA;EAAA,SAC7B,QAAA,EAAU,0BAAA,CAA2B,OAAA;EAAA,iBACpC,QAAA;EAAA,iBACA,OAAA;EAEV,QAAA;;EAYD,mBAAA,CAAoB,IAAA,WAAe,OAAA;EAanC,cAAA,IAAkB,OAAA;EAWxB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,OAAA;EAIhC,MAAA"}
1
+ {"version":3,"file":"ToolCallReader.d.ts","names":[],"sources":["../../../src/core/tool/ToolCallReader.ts"],"mappings":";;;;;;;cA0Qa,uBACX,UAAU,+BACC,mBAAmB;UACtB;UACA;UACA;UACA;cAEI,eAAe;UAKb;EA+Bd,IAAI,cAAc,SAAS,OACtB,WAAW,QACb,QAAQ,WAAW,GAAG;EAiCzB,aAAa,cAAc,SAAS,OAC/B,WAAW,QACb,oBAAoB,YAAY,WAAW,GAAG;EA4BjD,WAAW,cAAc,SAAS,OAC7B,WAAW,QACb,WAAW,GAAG,+BAA+B,KAC5C,oBAAoB;EA6BxB,QAAQ,cAAc,SAAS,OAC1B,WAAW,QACb,YAAY,WAAW,GAAG,gBAAgB,YAAY,KACrD,oBAAoB;;cA8Bb,2BACX,gBAAgB,8BACL,uBAAuB;mBACL;cAAA,SAAS,QAAQ,aAAa;EAEpD,OAAG,QAAA,aAAA;;cAKC,mBACX,cAAc,oBACd,gBAAgB,8BACL,eAAe,OAAO;WACjB,MAAM,uBAAuB;WAC7B,UAAU,2BAA2B;mBACpC;mBACA;EAEV;;EAYD,oBAAoB,eAAe;EAanC,kBAAkB;EAWxB,YAAY,OAAO,aAAa;EAIhC"}
@@ -3,7 +3,6 @@ import { ToolCallReader } from "./tool-types.js";
3
3
  import { ToolResponse } from "./ToolResponse.js";
4
4
  import { AssistantStreamChunk } from "../AssistantStreamChunk.js";
5
5
  import { PipeableTransformStream } from "../utils/stream/PipeableTransformStream.js";
6
-
7
6
  //#region src/core/tool/ToolExecutionStream.d.ts
8
7
  type ToolCallback = (toolCall: {
9
8
  toolCallId: string;
@@ -1 +1 @@
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
+ {"version":3,"file":"ToolExecutionStream.d.ts","names":[],"sources":["../../../src/core/tool/ToolExecutionStream.ts"],"mappings":";;;;;;KAgBK,gBAAgB;EACnB;EACA;EACA,MAAM;MAEJ,QAAQ,aAAa,sBACrB,aAAa;KAGZ,sBACH,cAAc,qBAAqB,oBACnC,gBAAgB,oBAAoB,mBACpC;EACA,QAAQ,eAAe,OAAO;EAC9B;EACA;;KAGG;EACH,SAAS;EACT,YAAY;EACZ,qBACM,oBAAoB;EAE1B,mBAAmB,oBAAoB;;cAG5B,4BAA4B,wBACvC,sBACA;cAEY,SAAS"}
@@ -1,20 +1,21 @@
1
1
  import { ReadonlyJSONValue } from "../../utils/json/json-value.js";
2
2
  import { ToolModelContentPart } from "./tool-types.js";
3
-
4
3
  //#region src/core/tool/ToolResponse.d.ts
5
4
  declare const TOOL_RESPONSE_SYMBOL: unique symbol;
6
5
  /**
7
6
  * Shape accepted anywhere a {@link ToolResponse} can be returned.
8
7
  */
9
8
  type ToolResponseLike<TResult> = {
10
- /** UI-visible tool result value. */result: TResult;
9
+ /** UI-visible tool result value. */
10
+ result: TResult;
11
11
  /**
12
12
  * Optional UI-only artifact associated with the result.
13
13
  *
14
14
  * Artifacts are useful for large or structured data that should be available
15
15
  * to renderers without necessarily being sent back to the model.
16
16
  */
17
- artifact?: ReadonlyJSONValue | undefined; /** Marks the tool result as an error result. */
17
+ artifact?: ReadonlyJSONValue | undefined;
18
+ /** Marks the tool result as an error result. */
18
19
  isError?: boolean | undefined;
19
20
  /**
20
21
  * Explicit model-visible content to send back after the tool call.
@@ -22,7 +23,8 @@ type ToolResponseLike<TResult> = {
22
23
  * When omitted, assistant-ui derives model output from `result` or a tool's
23
24
  * {@link ToolModelOutputFunction}.
24
25
  */
25
- modelContent?: readonly ToolModelContentPart[] | undefined; /** Optional provider-specific message payload associated with the tool result. */
26
+ modelContent?: readonly ToolModelContentPart[] | undefined;
27
+ /** Optional provider-specific message payload associated with the tool result. */
26
28
  messages?: ReadonlyJSONValue | undefined;
27
29
  };
28
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ToolResponse.d.ts","names":[],"sources":["../../../src/core/tool/ToolResponse.ts"],"mappings":";;;;cAOM,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"}
1
+ {"version":3,"file":"ToolResponse.d.ts","names":[],"sources":["../../../src/core/tool/ToolResponse.ts"],"mappings":";;;cAOM;;;;KAKM,iBAAiB;;EAE3B,QAAQ;;;;;;;EAOR,WAAW;;EAEX;;;;;;;EAOA,wBAAwB;;EAExB,WAAW;;;;;;;;;;;;;;;;;;cAmBA,aAAa;OACnB;WAII,WAAW;WACX,QAAQ;WACR;WACA,wBAAwB;WACxB,WAAW;cAER,SAAS,iBAAiB;UAc9B,OAAO,aACb,eACC,OAAO,aAAa;;;;;;;;SAahB,WAAW,cAAc,oBAAoB"}
@@ -1,7 +1,6 @@
1
1
  import { JSONSchema7 } from "../../node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.js";
2
2
  import { ProviderOptions, Tool } from "./tool-types.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
-
5
4
  //#region src/core/tool/schema-utils.d.ts
6
5
  /**
7
6
  * Type for a tool definition with JSON Schema parameters.
@@ -1 +1 @@
1
- {"version":3,"file":"schema-utils.d.ts","names":[],"sources":["../../../src/core/tool/schema-utils.ts"],"mappings":";;;;;;;AAOA;KAAY,cAAA;EACV,WAAA;EACA,UAAA,EAAY,WAAA;EACZ,eAAA,GAAkB,eAAe;AAAA;AAAA,KAGvB,wBAAA;EAHV;;;AAAiC;AAGnC;;EAOE,MAAA,IAAU,IAAA,UAAc,IAAA,EAAM,IAAI;AAAA;;;;;;AAAA;AA8CpC;;;iBAAgB,YAAA,CACd,MAAA,EAAQ,gBAAA,GAAmB,WAAA,GAC1B,WAAA;;;;;iBA+Ca,mBAAA,CAAoB,MAAA,EAAQ,WAAA,GAAc,WAAW;;;;;AA/CvD;AA+Cd;;;;iBA2CgB,iBAAA,CACd,KAAA,EAAO,MAAA,SAAe,IAAA,eACtB,OAAA,GAAS,wBAAA,GACR,MAAA,SAAe,cAAA"}
1
+ {"version":3,"file":"schema-utils.d.ts","names":[],"sources":["../../../src/core/tool/schema-utils.ts"],"mappings":";;;;;;;KAOY;EACV;EACA,YAAY;EACZ,kBAAkB;;KAGR;;;;;;;EAOV,UAAU,cAAc,MAAM;;;;;;;;;;;iBA8ChB,aACd,QAAQ,mBAAmB,cAC1B;;;;;iBA+Ca,oBAAoB,QAAQ,cAAc;;;;;;;;;;iBA2C1C,kBACd,OAAO,eAAe,mBACtB,UAAS,2BACR,eAAe"}