assistant-stream 0.2.0 → 0.2.1

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 (129) hide show
  1. package/dist/ai-sdk/index.d.ts +5 -0
  2. package/dist/ai-sdk/index.d.ts.map +1 -0
  3. package/dist/ai-sdk/language-model.d.ts +6 -0
  4. package/dist/ai-sdk/language-model.d.ts.map +1 -0
  5. package/dist/ai-sdk.d.ts +3 -0
  6. package/dist/ai-sdk.d.ts.map +1 -0
  7. package/dist/core/AssistantStream.d.ts +12 -0
  8. package/dist/core/AssistantStream.d.ts.map +1 -0
  9. package/dist/core/AssistantStreamChunk.d.ts +64 -0
  10. package/dist/core/AssistantStreamChunk.d.ts.map +1 -0
  11. package/dist/core/accumulators/AssistantMessageStream.d.ts +13 -0
  12. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -0
  13. package/dist/core/accumulators/assistant-message-accumulator.d.ts +8 -0
  14. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -0
  15. package/dist/core/index.d.ts +11 -0
  16. package/dist/core/index.d.ts.map +1 -0
  17. package/dist/core/modules/assistant-stream.d.ts +31 -0
  18. package/dist/core/modules/assistant-stream.d.ts.map +1 -0
  19. package/dist/core/modules/text.d.ts +9 -0
  20. package/dist/core/modules/text.d.ts.map +1 -0
  21. package/dist/core/modules/tool-call.d.ts +13 -0
  22. package/dist/core/modules/tool-call.d.ts.map +1 -0
  23. package/dist/core/serialization/PlainText.d.ts +11 -0
  24. package/dist/core/serialization/PlainText.d.ts.map +1 -0
  25. package/dist/core/serialization/data-stream/DataStream.d.ts +11 -0
  26. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -0
  27. package/dist/core/serialization/data-stream/chunk-types.d.ts +86 -0
  28. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -0
  29. package/dist/core/serialization/data-stream/serialization.d.ts +8 -0
  30. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -0
  31. package/dist/core/tool/ToolCallReader.d.ts +33 -0
  32. package/dist/core/tool/ToolCallReader.d.ts.map +1 -0
  33. package/dist/core/tool/ToolExecutionStream.d.ts +24 -0
  34. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -0
  35. package/dist/core/tool/ToolResponse.d.ts +17 -0
  36. package/dist/core/tool/ToolResponse.d.ts.map +1 -0
  37. package/dist/core/tool/index.d.ts +6 -0
  38. package/dist/core/tool/index.d.ts.map +1 -0
  39. package/dist/core/tool/tool-types.d.ts +76 -0
  40. package/dist/core/tool/tool-types.d.ts.map +1 -0
  41. package/dist/core/tool/toolResultStream.d.ts +6 -0
  42. package/dist/core/tool/toolResultStream.d.ts.map +1 -0
  43. package/dist/core/tool/type-path-utils.d.ts +23 -0
  44. package/dist/core/tool/type-path-utils.d.ts.map +1 -0
  45. package/dist/core/utils/Counter.d.ts +5 -0
  46. package/dist/core/utils/Counter.d.ts.map +1 -0
  47. package/dist/core/utils/generateId.d.ts +2 -0
  48. package/dist/core/utils/generateId.d.ts.map +1 -0
  49. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +20 -0
  50. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -0
  51. package/dist/core/utils/stream/AssistantTransformStream.d.ts +15 -0
  52. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -0
  53. package/dist/core/utils/stream/LineDecoderStream.d.ts +5 -0
  54. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -0
  55. package/dist/core/utils/stream/PipeableTransformStream.d.ts +4 -0
  56. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -0
  57. package/dist/core/utils/stream/UnderlyingReadable.d.ts +6 -0
  58. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -0
  59. package/dist/core/utils/stream/merge.d.ts +9 -0
  60. package/dist/core/utils/stream/merge.d.ts.map +1 -0
  61. package/dist/core/utils/stream/path-utils.d.ts +12 -0
  62. package/dist/core/utils/stream/path-utils.d.ts.map +1 -0
  63. package/dist/core/utils/types.d.ts +102 -0
  64. package/dist/core/utils/types.d.ts.map +1 -0
  65. package/dist/core/utils/withPromiseOrValue.d.ts +2 -0
  66. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -0
  67. package/dist/index.d.ts +2 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/utils/AsyncIterableStream.d.ts +3 -0
  70. package/dist/utils/AsyncIterableStream.d.ts.map +1 -0
  71. package/dist/utils/json/fix-json.d.ts +2 -0
  72. package/dist/utils/json/fix-json.d.ts.map +1 -0
  73. package/dist/utils/json/is-json.d.ts +5 -0
  74. package/dist/utils/json/is-json.d.ts.map +1 -0
  75. package/dist/utils/json/json-value.d.ts +6 -0
  76. package/dist/utils/json/json-value.d.ts.map +1 -0
  77. package/dist/utils/json/parse-partial-json-object.d.ts +14 -0
  78. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -0
  79. package/dist/utils/json/parse-partial-json-object.test.d.ts +2 -0
  80. package/dist/utils/json/parse-partial-json-object.test.d.ts.map +1 -0
  81. package/dist/utils/promiseWithResolvers.d.ts +6 -0
  82. package/dist/utils/promiseWithResolvers.d.ts.map +1 -0
  83. package/dist/utils.d.ts +4 -0
  84. package/dist/utils.d.ts.map +1 -0
  85. package/package.json +3 -2
  86. package/src/ai-sdk/index.ts +204 -0
  87. package/src/ai-sdk/language-model.ts +122 -0
  88. package/src/ai-sdk.ts +2 -0
  89. package/src/core/AssistantStream.ts +39 -0
  90. package/src/core/AssistantStreamChunk.ts +93 -0
  91. package/src/core/accumulators/AssistantMessageStream.ts +56 -0
  92. package/src/core/accumulators/assistant-message-accumulator.ts +394 -0
  93. package/src/core/index.ts +17 -0
  94. package/src/core/modules/assistant-stream.ts +264 -0
  95. package/src/core/modules/text.ts +64 -0
  96. package/src/core/modules/tool-call.ts +105 -0
  97. package/src/core/serialization/PlainText.ts +68 -0
  98. package/src/core/serialization/data-stream/DataStream.ts +355 -0
  99. package/src/core/serialization/data-stream/chunk-types.ts +93 -0
  100. package/src/core/serialization/data-stream/serialization.ts +32 -0
  101. package/src/core/tool/ToolCallReader.ts +432 -0
  102. package/src/core/tool/ToolExecutionStream.ts +180 -0
  103. package/src/core/tool/ToolResponse.ts +31 -0
  104. package/src/core/tool/index.ts +8 -0
  105. package/src/core/tool/tool-types.ts +107 -0
  106. package/src/core/tool/toolResultStream.ts +119 -0
  107. package/src/core/tool/type-path-utils.ts +36 -0
  108. package/src/core/utils/Counter.ts +7 -0
  109. package/src/core/utils/generateId.tsx +6 -0
  110. package/src/core/utils/stream/AssistantMetaTransformStream.ts +74 -0
  111. package/src/core/utils/stream/AssistantTransformStream.ts +74 -0
  112. package/src/core/utils/stream/LineDecoderStream.ts +29 -0
  113. package/src/core/utils/stream/PipeableTransformStream.ts +10 -0
  114. package/src/core/utils/stream/UnderlyingReadable.ts +5 -0
  115. package/src/core/utils/stream/merge.ts +212 -0
  116. package/src/core/utils/stream/path-utils.ts +71 -0
  117. package/src/core/utils/types.ts +150 -0
  118. package/src/core/utils/withPromiseOrValue.ts +20 -0
  119. package/src/index.ts +1 -0
  120. package/src/utils/AsyncIterableStream.ts +24 -0
  121. package/src/utils/json/fix-json.ts +488 -0
  122. package/src/utils/json/is-json.ts +43 -0
  123. package/src/utils/json/json-value.ts +13 -0
  124. package/src/utils/json/parse-partial-json-object.test.ts +225 -0
  125. package/src/utils/json/parse-partial-json-object.ts +103 -0
  126. package/src/utils/promiseWithResolvers.ts +10 -0
  127. package/src/utils.ts +13 -0
  128. package/utils/README.md +0 -1
  129. package/utils/package.json +0 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Counter.d.ts","sourceRoot":"","sources":["../../../src/core/utils/Counter.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;IACX,KAAK,SAAM;IAElB,EAAE;CAGH"}
@@ -0,0 +1,2 @@
1
+ export declare const generateId: (size?: number) => string;
2
+ //# sourceMappingURL=generateId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateId.d.ts","sourceRoot":"","sources":["../../../src/core/utils/generateId.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,2BAGtB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { AssistantStreamChunk, PartInit } from "../../AssistantStreamChunk";
2
+ /**
3
+ * For chunk types that are associated with a part,
4
+ * we require a non‑nullable meta field.
5
+ */
6
+ export type AssistantMetaStreamChunk = (AssistantStreamChunk & {
7
+ type: "text-delta" | "part-finish";
8
+ meta: PartInit;
9
+ }) | (AssistantStreamChunk & {
10
+ type: "result" | "tool-call-args-text-finish";
11
+ meta: PartInit & {
12
+ type: "tool-call";
13
+ };
14
+ }) | (AssistantStreamChunk & {
15
+ type: Exclude<AssistantStreamChunk["type"], "text-delta" | "result" | "tool-call-args-text-finish" | "part-finish">;
16
+ });
17
+ export declare class AssistantMetaTransformStream extends TransformStream<AssistantStreamChunk, AssistantMetaStreamChunk> {
18
+ constructor();
19
+ }
20
+ //# sourceMappingURL=AssistantMetaTransformStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantMetaTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,QAAQ,GAAG,4BAA4B,CAAC;IAC9C,IAAI,EAAE,QAAQ,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACxC,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,OAAO,CACX,oBAAoB,CAAC,MAAM,CAAC,EAC5B,YAAY,GAAG,QAAQ,GAAG,4BAA4B,GAAG,aAAa,CACvE,CAAC;CACH,CAAC,CAAC;AACP,qBAAa,4BAA6B,SAAQ,eAAe,CAC/D,oBAAoB,EACpB,wBAAwB,CACzB;;CAiDA"}
@@ -0,0 +1,15 @@
1
+ import { AssistantStreamChunk } from "../../AssistantStreamChunk";
2
+ import { AssistantStreamController } from "../../modules/assistant-stream";
3
+ type AssistantTransformerFlushCallback = (controller: AssistantStreamController) => void | PromiseLike<void>;
4
+ type AssistantTransformerStartCallback = (controller: AssistantStreamController) => void | PromiseLike<void>;
5
+ type AssistantTransformerTransformCallback<I> = (chunk: I, controller: AssistantStreamController) => void | PromiseLike<void>;
6
+ type AssistantTransformer<I> = {
7
+ flush?: AssistantTransformerFlushCallback;
8
+ start?: AssistantTransformerStartCallback;
9
+ transform?: AssistantTransformerTransformCallback<I>;
10
+ };
11
+ export declare class AssistantTransformStream<I> extends TransformStream<I, AssistantStreamChunk> {
12
+ constructor(transformer: AssistantTransformer<I>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<AssistantStreamChunk>);
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=AssistantTransformStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/AssistantTransformStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACL,yBAAyB,EAE1B,MAAM,gCAAgC,CAAC;AAExC,KAAK,iCAAiC,GAAG,CACvC,UAAU,EAAE,yBAAyB,KAClC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAE9B,KAAK,iCAAiC,GAAG,CACvC,UAAU,EAAE,yBAAyB,KAClC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAE9B,KAAK,qCAAqC,CAAC,CAAC,IAAI,CAC9C,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,yBAAyB,KAClC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAE9B,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,KAAK,CAAC,EAAE,iCAAiC,CAAC;IAC1C,KAAK,CAAC,EAAE,iCAAiC,CAAC;IAC1C,SAAS,CAAC,EAAE,qCAAqC,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF,qBAAa,wBAAwB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAC9D,CAAC,EACD,oBAAoB,CACrB;gBAEG,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC,EACpC,gBAAgB,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EACrC,gBAAgB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC;CAyC3D"}
@@ -0,0 +1,5 @@
1
+ export declare class LineDecoderStream extends TransformStream<string, string> {
2
+ private buffer;
3
+ constructor();
4
+ }
5
+ //# sourceMappingURL=LineDecoderStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineDecoderStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;IACpE,OAAO,CAAC,MAAM,CAAM;;CA2BrB"}
@@ -0,0 +1,4 @@
1
+ export declare class PipeableTransformStream<I, O> extends TransformStream<I, O> {
2
+ constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>);
3
+ }
4
+ //# sourceMappingURL=PipeableTransformStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PipeableTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1D,SAAS,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC;CAQ1E"}
@@ -0,0 +1,6 @@
1
+ export type UnderlyingReadable<TController> = {
2
+ start?: (controller: TController) => void;
3
+ pull?: (controller: TController) => void | PromiseLike<void>;
4
+ cancel?: UnderlyingSourceCancelCallback;
5
+ };
6
+ //# sourceMappingURL=UnderlyingReadable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnderlyingReadable.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/UnderlyingReadable.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,CAAC,WAAW,IAAI;IAC5C,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,8BAA8B,CAAC;CACzC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AssistantStreamChunk } from "../../AssistantStreamChunk";
2
+ export declare const createMergeStream: () => {
3
+ readable: ReadableStream<AssistantStreamChunk>;
4
+ isSealed(): boolean;
5
+ seal(): void;
6
+ addStream(stream: ReadableStream<AssistantStreamChunk>): void;
7
+ enqueue(chunk: AssistantStreamChunk): void;
8
+ };
9
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAQlE,eAAO,MAAM,iBAAiB;;;;sBA0ER,cAAc,CAAC,oBAAoB,CAAC;mBAUvC,oBAAoB;CAWtC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { AssistantStreamChunk } from "../../AssistantStreamChunk";
2
+ import { Counter } from "../Counter";
3
+ export declare class PathAppendEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
4
+ constructor(idx: number);
5
+ }
6
+ export declare class PathAppendDecoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
7
+ constructor(idx: number);
8
+ }
9
+ export declare class PathMergeEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
10
+ constructor(counter: Counter);
11
+ }
12
+ //# sourceMappingURL=path-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,GAAG,EAAE,MAAM;CAUxB;AAED,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,GAAG,EAAE,MAAM;CAiBxB;AAED,qBAAa,gBAAiB,SAAQ,eAAe,CACnD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,OAAO,EAAE,OAAO;CAwB7B"}
@@ -0,0 +1,102 @@
1
+ import { ReadonlyJSONObject, ReadonlyJSONValue } from "../../utils/json/json-value";
2
+ type TextStatus = {
3
+ type: "running";
4
+ } | {
5
+ type: "complete";
6
+ reason: "stop" | "unknown";
7
+ } | {
8
+ type: "incomplete";
9
+ reason: "cancelled" | "length" | "content-filter" | "other";
10
+ };
11
+ export type TextPart = {
12
+ type: "text";
13
+ text: string;
14
+ status: TextStatus;
15
+ };
16
+ export type ReasoningPart = {
17
+ type: "reasoning";
18
+ text: string;
19
+ status: TextStatus;
20
+ };
21
+ type ToolCallStatus = {
22
+ type: "running";
23
+ isArgsComplete: boolean;
24
+ } | {
25
+ type: "requires-action";
26
+ reason: "tool-call-result";
27
+ } | {
28
+ type: "complete";
29
+ reason: "stop" | "unknown";
30
+ } | {
31
+ type: "incomplete";
32
+ reason: "cancelled" | "length" | "content-filter" | "other";
33
+ };
34
+ export type ToolCallPart = {
35
+ type: "tool-call";
36
+ state: "partial-call" | "call" | "result";
37
+ status: ToolCallStatus;
38
+ toolCallId: string;
39
+ toolName: string;
40
+ argsText: string;
41
+ args: ReadonlyJSONObject;
42
+ artifact?: unknown;
43
+ result?: ReadonlyJSONValue;
44
+ isError?: boolean;
45
+ };
46
+ export type SourcePart = {
47
+ type: "source";
48
+ sourceType: "url";
49
+ id: string;
50
+ url: string;
51
+ title?: string;
52
+ };
53
+ export type FilePart = {
54
+ type: "file";
55
+ data: string;
56
+ mimeType: string;
57
+ };
58
+ export type AssistantMessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart;
59
+ type AssistantMessageStepUsage = {
60
+ promptTokens: number;
61
+ completionTokens: number;
62
+ };
63
+ type AssistantMessageStepMetadata = {
64
+ state: "started";
65
+ messageId: string;
66
+ } | {
67
+ state: "finished";
68
+ messageId: string;
69
+ finishReason: "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
70
+ usage?: AssistantMessageStepUsage;
71
+ isContinued: boolean;
72
+ };
73
+ export type AssistantMessageStatus = {
74
+ type: "running";
75
+ } | {
76
+ type: "requires-action";
77
+ reason: "tool-calls";
78
+ } | {
79
+ type: "complete";
80
+ reason: "stop" | "unknown";
81
+ } | {
82
+ type: "incomplete";
83
+ reason: "cancelled" | "tool-calls" | "length" | "content-filter" | "other" | "error";
84
+ error?: ReadonlyJSONValue;
85
+ };
86
+ export type AssistantMessage = {
87
+ role: "assistant";
88
+ status: AssistantMessageStatus;
89
+ parts: AssistantMessagePart[];
90
+ /**
91
+ * @deprecated Use `parts` instead.
92
+ */
93
+ content: AssistantMessagePart[];
94
+ metadata: {
95
+ unstable_data: ReadonlyJSONValue[];
96
+ unstable_annotations: ReadonlyJSONValue[];
97
+ steps: AssistantMessageStepMetadata[];
98
+ custom: Record<string, unknown>;
99
+ };
100
+ };
101
+ export {};
102
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/utils/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function withPromiseOrValue<T>(callback: () => T | PromiseLike<T>, thenHandler: (value: T) => PromiseLike<void> | void, catchHandler: (error: unknown) => PromiseLike<void> | void): PromiseLike<void> | void;
2
+ //# sourceMappingURL=withPromiseOrValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withPromiseOrValue.d.ts","sourceRoot":"","sources":["../../../src/core/utils/withPromiseOrValue.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAClC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EACnD,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GACzD,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAe1B"}
@@ -0,0 +1,2 @@
1
+ export * from "./core";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;
2
+ export declare function asAsyncIterableStream<T>(source: ReadableStream<T>): AsyncIterableStream<T>;
3
+ //# sourceMappingURL=AsyncIterableStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncIterableStream.d.ts","sourceRoot":"","sources":["../../src/utils/AsyncIterableStream.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAiB1E,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,mBAAmB,CAAC,CAAC,CAAC,CAIxB"}
@@ -0,0 +1,2 @@
1
+ export declare function fixJson(input: string): [string, string[]];
2
+ //# sourceMappingURL=fix-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-json.d.ts","sourceRoot":"","sources":["../../../src/utils/json/fix-json.ts"],"names":[],"mappings":"AA+DA,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAwazD"}
@@ -0,0 +1,5 @@
1
+ import { ReadonlyJSONArray, ReadonlyJSONObject, ReadonlyJSONValue } from "./json-value";
2
+ export declare function isJSONValue(value: unknown): value is ReadonlyJSONValue;
3
+ export declare function isJSONArray(value: unknown): value is ReadonlyJSONArray;
4
+ export declare function isJSONObject(value: unknown): value is ReadonlyJSONObject;
5
+ //# sourceMappingURL=is-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-json.d.ts","sourceRoot":"","sources":["../../../src/utils/json/is-json.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAqBtE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAEtE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CASxE"}
@@ -0,0 +1,6 @@
1
+ export type ReadonlyJSONValue = null | string | number | boolean | ReadonlyJSONObject | ReadonlyJSONArray;
2
+ export type ReadonlyJSONObject = {
3
+ readonly [key: string]: ReadonlyJSONValue;
4
+ };
5
+ export type ReadonlyJSONArray = readonly ReadonlyJSONValue[];
6
+ //# sourceMappingURL=json-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-value.d.ts","sourceRoot":"","sources":["../../../src/utils/json/json-value.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { ReadonlyJSONObject } from "./json-value";
2
+ declare const PARTIAL_JSON_OBJECT_META_SYMBOL: unique symbol;
3
+ type FieldState = "complete" | "partial";
4
+ type PartialJsonObjectMeta = {
5
+ state: "complete" | "partial";
6
+ partialPath: string[];
7
+ };
8
+ export declare const getPartialJsonObjectMeta: (obj: Record<symbol, unknown>) => PartialJsonObjectMeta | undefined;
9
+ export declare const parsePartialJsonObject: (json: string) => (ReadonlyJSONObject & {
10
+ [PARTIAL_JSON_OBJECT_META_SYMBOL]: PartialJsonObjectMeta;
11
+ }) | undefined;
12
+ export declare const getPartialJsonObjectFieldState: (obj: Record<string, unknown>, fieldPath: (string | number)[]) => FieldState;
13
+ export {};
14
+ //# sourceMappingURL=parse-partial-json-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-partial-json-object.d.ts","sourceRoot":"","sources":["../../../src/utils/json/parse-partial-json-object.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,QAAA,MAAM,+BAA+B,eAEpC,CAAC;AAEF,KAAK,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEzC,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,qBAAqB,GAAG,SAE1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,KAEV,CAAC,kBAAkB,GAAG;IACpB,CAAC,+BAA+B,CAAC,EAAE,qBAAqB,CAAC;CAC1D,CAAC,GACF,SAgCH,CAAC;AAmCF,eAAO,MAAM,8BAA8B,GACzC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAC7B,UAKF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parse-partial-json-object.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-partial-json-object.test.d.ts","sourceRoot":"","sources":["../../../src/utils/json/parse-partial-json-object.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare const promiseWithResolvers: <T>() => {
2
+ promise: Promise<T>;
3
+ resolve: (value: T | PromiseLike<T>) => void;
4
+ reject: (reason?: unknown) => void;
5
+ };
6
+ //# sourceMappingURL=promiseWithResolvers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseWithResolvers.d.ts","sourceRoot":"","sources":["../../src/utils/promiseWithResolvers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,GAAa,CAAC;;qBACvB,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI;sBAC1B,OAAO,KAAK,IAAI;CAOxC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { parsePartialJsonObject, getPartialJsonObjectFieldState, } from "./utils/json/parse-partial-json-object";
2
+ export { type AsyncIterableStream, asAsyncIterableStream, } from "./utils/AsyncIterableStream";
3
+ export type { ReadonlyJSONValue, ReadonlyJSONArray, ReadonlyJSONObject, } from "./utils/json/json-value";
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-stream",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -22,6 +22,7 @@
22
22
  "types": "./dist/index.d.ts",
23
23
  "files": [
24
24
  "dist",
25
+ "src",
25
26
  "ai-sdk",
26
27
  "utils",
27
28
  "README.md"
@@ -44,7 +45,7 @@
44
45
  "homepage": "https://www.assistant-ui.com/",
45
46
  "repository": {
46
47
  "type": "git",
47
- "url": "git+https://github.com/assistant-ui/assistant-ui.git"
48
+ "url": "https://github.com/assistant-ui/assistant-ui/tree/main/packages/assistant-stream"
48
49
  },
49
50
  "bugs": {
50
51
  "url": "https://github.com/assistant-ui/assistant-ui/issues"
@@ -0,0 +1,204 @@
1
+ import type { TextStreamPart, ObjectStreamPart, Tool } from "ai";
2
+ import { AssistantStream } from "../core/AssistantStream";
3
+ import { AssistantTransformStream } from "../core/utils/stream/AssistantTransformStream";
4
+ import { ToolCallStreamController } from "../core/modules/tool-call";
5
+ import { ReadonlyJSONValue } from "../utils/json/json-value";
6
+
7
+ export const fromStreamText = (
8
+ stream: ReadableStream<TextStreamPart<Record<string, Tool>>>,
9
+ ): AssistantStream => {
10
+ const toolControllers = new Map<string, ToolCallStreamController>();
11
+ let currentToolCallArgsText: ToolCallStreamController | undefined;
12
+
13
+ const endCurrentToolCallArgsText = () => {
14
+ if (!currentToolCallArgsText) return;
15
+ currentToolCallArgsText.argsText.close();
16
+ currentToolCallArgsText = undefined;
17
+ };
18
+
19
+ const transformer = new AssistantTransformStream<
20
+ TextStreamPart<Record<string, Tool>>
21
+ >({
22
+ transform(chunk, controller) {
23
+ const { type } = chunk;
24
+
25
+ if (
26
+ type !== "tool-call-delta" &&
27
+ type !== "tool-call" &&
28
+ type !== "error" &&
29
+ (type as string) !== "tool-result"
30
+ ) {
31
+ endCurrentToolCallArgsText();
32
+ }
33
+
34
+ switch (type) {
35
+ case "text-delta": {
36
+ const { textDelta } = chunk;
37
+ controller.appendText(textDelta);
38
+ break;
39
+ }
40
+ case "reasoning": {
41
+ const { textDelta } = chunk;
42
+ controller.appendReasoning(textDelta);
43
+ break;
44
+ }
45
+ case "tool-call-streaming-start": {
46
+ const { toolCallId, toolName } = chunk;
47
+ currentToolCallArgsText = controller.addToolCallPart({
48
+ toolCallId,
49
+ toolName,
50
+ });
51
+ toolControllers.set(toolCallId, currentToolCallArgsText);
52
+ break;
53
+ }
54
+ case "tool-call-delta": {
55
+ const { toolCallId, argsTextDelta } = chunk;
56
+ const toolController = toolControllers.get(toolCallId);
57
+ if (!toolController) throw new Error("Tool call not found");
58
+ toolController.argsText.append(argsTextDelta);
59
+ break;
60
+ }
61
+ case "tool-result" as string: {
62
+ const { toolCallId, result } = chunk as unknown as {
63
+ toolCallId: string;
64
+ result: ReadonlyJSONValue;
65
+ };
66
+ const toolController = toolControllers.get(toolCallId);
67
+ if (!toolController) throw new Error("Tool call not found");
68
+ toolController.setResponse({
69
+ result,
70
+ });
71
+ toolController.close();
72
+ toolControllers.delete(toolCallId);
73
+ break;
74
+ }
75
+ case "tool-call": {
76
+ const { toolCallId, toolName, args } = chunk;
77
+ const toolController = controller.addToolCallPart({
78
+ toolCallId,
79
+ toolName,
80
+ });
81
+ toolController.argsText.append(JSON.stringify(args));
82
+ toolController.argsText.close();
83
+ toolControllers.set(toolCallId, toolController);
84
+ break;
85
+ }
86
+
87
+ case "step-start":
88
+ controller.enqueue({
89
+ type: "step-start",
90
+ path: [],
91
+ messageId: chunk.messageId,
92
+ });
93
+ break;
94
+ case "step-finish":
95
+ controller.enqueue({
96
+ type: "step-finish",
97
+ path: [],
98
+ finishReason: chunk.finishReason,
99
+ usage: chunk.usage,
100
+ isContinued: chunk.isContinued,
101
+ });
102
+ break;
103
+ case "error":
104
+ controller.enqueue({
105
+ type: "error",
106
+ path: [],
107
+ error: String(chunk.error),
108
+ });
109
+ break;
110
+
111
+ case "finish": {
112
+ controller.enqueue({
113
+ type: "message-finish",
114
+ path: [],
115
+ finishReason: chunk.finishReason,
116
+ usage: chunk.usage,
117
+ });
118
+ break;
119
+ }
120
+
121
+ case "source":
122
+ controller.appendSource({
123
+ type: "source",
124
+ ...chunk.source,
125
+ });
126
+ break;
127
+
128
+ case "file":
129
+ controller.appendFile({
130
+ type: "file",
131
+ mimeType: chunk.mimeType,
132
+ data: chunk.base64,
133
+ });
134
+ break;
135
+
136
+ case "reasoning-signature":
137
+ case "redacted-reasoning":
138
+ // ignore these for now
139
+ break;
140
+
141
+ default: {
142
+ const unhandledType: never = type;
143
+ throw new Error(`Unhandled chunk type: ${unhandledType}`);
144
+ }
145
+ }
146
+ },
147
+ flush() {
148
+ for (const toolController of toolControllers.values()) {
149
+ toolController.close();
150
+ }
151
+ toolControllers.clear();
152
+ },
153
+ });
154
+
155
+ return stream.pipeThrough(transformer);
156
+ };
157
+
158
+ export const fromStreamObject = (
159
+ stream: ReadableStream<ObjectStreamPart<unknown>>,
160
+ toolName: string,
161
+ ): AssistantStream => {
162
+ let toolCall!: ToolCallStreamController;
163
+ const transformer = new AssistantTransformStream<ObjectStreamPart<unknown>>({
164
+ start(controller) {
165
+ toolCall = controller.addToolCallPart(toolName);
166
+ },
167
+ transform(chunk, controller) {
168
+ const { type } = chunk;
169
+ switch (type) {
170
+ case "text-delta": {
171
+ const { textDelta } = chunk;
172
+ toolCall.argsText.append(textDelta);
173
+ break;
174
+ }
175
+ case "finish": {
176
+ toolCall.argsText.close();
177
+ toolCall.setResponse({
178
+ result: "{}",
179
+ });
180
+ break;
181
+ }
182
+
183
+ case "object":
184
+ break;
185
+
186
+ case "error": {
187
+ controller.enqueue({
188
+ type: "error",
189
+ path: [],
190
+ error: String(chunk.error),
191
+ });
192
+ break;
193
+ }
194
+
195
+ default: {
196
+ const unhandledType: never = type;
197
+ throw new Error(`Unhandled chunk type: ${unhandledType}`);
198
+ }
199
+ }
200
+ },
201
+ });
202
+
203
+ return stream.pipeThrough(transformer);
204
+ };