@kortyx/stream 0.15.6 → 0.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @chatbot-core/types
2
2
 
3
+ ## [0.15.7](https://github.com/kortyx-io/kortyx/compare/stream-v0.15.6...stream-v0.15.7) (2026-10-26)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **evals:** capture direct tool results with workflow attribution ([#401](https://github.com/kortyx-io/kortyx/issues/401)) ([f7a746c](https://github.com/kortyx-io/kortyx/commit/f7a746ce3addedfc79fd57ef6f6ab1e1ee5e1f60))
9
+
3
10
  ## [0.15.6](https://github.com/kortyx-io/kortyx/compare/stream-v0.15.5...stream-v0.15.6) (2026-10-16)
4
11
 
5
12
 
@@ -65,6 +65,36 @@ declare const StreamChunkSchema: z.ZodUnion<readonly [z.ZodObject<{
65
65
  content: z.ZodUnknown;
66
66
  }, z.core.$strip>, z.ZodObject<{
67
67
  type: z.ZodLiteral<"tool-call-start">;
68
+ execution: z.ZodOptional<z.ZodObject<{
69
+ callingMode: z.ZodEnum<{
70
+ direct: "direct";
71
+ model: "model";
72
+ }>;
73
+ attemptId: z.ZodString;
74
+ executed: z.ZodBoolean;
75
+ outcome: z.ZodOptional<z.ZodEnum<{
76
+ success: "success";
77
+ denied: "denied";
78
+ fault: "fault";
79
+ cancelled: "cancelled";
80
+ }>>;
81
+ workflowId: z.ZodOptional<z.ZodString>;
82
+ nodeId: z.ZodOptional<z.ZodString>;
83
+ workflowRevisionId: z.ZodOptional<z.ZodString>;
84
+ runId: z.ZodOptional<z.ZodString>;
85
+ invocationId: z.ZodOptional<z.ZodString>;
86
+ parentInvocationId: z.ZodOptional<z.ZodString>;
87
+ branchId: z.ZodOptional<z.ZodString>;
88
+ inputOmitted: z.ZodOptional<z.ZodString>;
89
+ resultOmitted: z.ZodOptional<z.ZodString>;
90
+ source: z.ZodOptional<z.ZodObject<{
91
+ runId: z.ZodOptional<z.ZodString>;
92
+ invocationId: z.ZodOptional<z.ZodString>;
93
+ branchId: z.ZodOptional<z.ZodString>;
94
+ toolCallId: z.ZodString;
95
+ attemptId: z.ZodString;
96
+ }, z.core.$strip>>;
97
+ }, z.core.$strip>>;
68
98
  tool: z.ZodString;
69
99
  toolCallId: z.ZodString;
70
100
  node: z.ZodOptional<z.ZodString>;
@@ -73,6 +103,36 @@ declare const StreamChunkSchema: z.ZodUnion<readonly [z.ZodObject<{
73
103
  input: z.ZodOptional<z.ZodUnknown>;
74
104
  }, z.core.$strip>, z.ZodObject<{
75
105
  type: z.ZodLiteral<"tool-call-result">;
106
+ execution: z.ZodOptional<z.ZodObject<{
107
+ callingMode: z.ZodEnum<{
108
+ direct: "direct";
109
+ model: "model";
110
+ }>;
111
+ attemptId: z.ZodString;
112
+ executed: z.ZodBoolean;
113
+ outcome: z.ZodOptional<z.ZodEnum<{
114
+ success: "success";
115
+ denied: "denied";
116
+ fault: "fault";
117
+ cancelled: "cancelled";
118
+ }>>;
119
+ workflowId: z.ZodOptional<z.ZodString>;
120
+ nodeId: z.ZodOptional<z.ZodString>;
121
+ workflowRevisionId: z.ZodOptional<z.ZodString>;
122
+ runId: z.ZodOptional<z.ZodString>;
123
+ invocationId: z.ZodOptional<z.ZodString>;
124
+ parentInvocationId: z.ZodOptional<z.ZodString>;
125
+ branchId: z.ZodOptional<z.ZodString>;
126
+ inputOmitted: z.ZodOptional<z.ZodString>;
127
+ resultOmitted: z.ZodOptional<z.ZodString>;
128
+ source: z.ZodOptional<z.ZodObject<{
129
+ runId: z.ZodOptional<z.ZodString>;
130
+ invocationId: z.ZodOptional<z.ZodString>;
131
+ branchId: z.ZodOptional<z.ZodString>;
132
+ toolCallId: z.ZodString;
133
+ attemptId: z.ZodString;
134
+ }, z.core.$strip>>;
135
+ }, z.core.$strip>>;
76
136
  tool: z.ZodString;
77
137
  toolCallId: z.ZodString;
78
138
  node: z.ZodOptional<z.ZodString>;
package/dist/browser.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { C as ConsumeStreamHandlers, F as FinalizedChatContentPiece, b as FinalizedChatMessage, S as StreamChunk, d as StreamFromRouteArgs, a as StructuredDataChunk, f as StructuredStreamAccumulator, g as StructuredStreamState, h as applyStructuredChunk, i as consumeStream, j as createFinalizedChatMessageAccumulator, k as createStructuredStreamAccumulator, l as failureChunk, p as projectInterruptPiece, r as readStream, m as reduceStructuredChunks, s as streamError, n as streamFromRoute } from './browser-DfnlUdJ9.js';
1
+ export { C as ConsumeStreamHandlers, F as FinalizedChatContentPiece, b as FinalizedChatMessage, S as StreamChunk, d as StreamFromRouteArgs, a as StructuredDataChunk, f as StructuredStreamAccumulator, g as StructuredStreamState, h as applyStructuredChunk, i as consumeStream, j as createFinalizedChatMessageAccumulator, k as createStructuredStreamAccumulator, l as failureChunk, p as projectInterruptPiece, r as readStream, m as reduceStructuredChunks, s as streamError, n as streamFromRoute } from './browser-CgOtOpNa.js';
2
2
  import '@kortyx/core/errors';
3
3
  import 'zod';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as StreamChunk, a as StructuredDataChunk } from './browser-DfnlUdJ9.js';
2
- export { C as ConsumeStreamHandlers, F as FinalizedChatContentPiece, b as FinalizedChatMessage, c as StreamChunkSchema, d as StreamFromRouteArgs, e as StructuredDataChunkSchema, f as StructuredStreamAccumulator, g as StructuredStreamState, h as applyStructuredChunk, i as consumeStream, j as createFinalizedChatMessageAccumulator, k as createStructuredStreamAccumulator, l as failureChunk, p as projectInterruptPiece, r as readStream, m as reduceStructuredChunks, s as streamError, n as streamFromRoute } from './browser-DfnlUdJ9.js';
1
+ import { S as StreamChunk, a as StructuredDataChunk } from './browser-CgOtOpNa.js';
2
+ export { C as ConsumeStreamHandlers, F as FinalizedChatContentPiece, b as FinalizedChatMessage, c as StreamChunkSchema, d as StreamFromRouteArgs, e as StructuredDataChunkSchema, f as StructuredStreamAccumulator, g as StructuredStreamState, h as applyStructuredChunk, i as consumeStream, j as createFinalizedChatMessageAccumulator, k as createStructuredStreamAccumulator, l as failureChunk, p as projectInterruptPiece, r as readStream, m as reduceStructuredChunks, s as streamError, n as streamFromRoute } from './browser-CgOtOpNa.js';
3
3
  import '@kortyx/core/errors';
4
4
  import 'zod';
5
5
 
package/dist/index.js CHANGED
@@ -678,6 +678,28 @@ var StructuredDataChunkSchema = import_zod.z.union([
678
678
  ]);
679
679
 
680
680
  // src/types/stream-chunk.ts
681
+ var toolExecution = import_zod2.z.object({
682
+ callingMode: import_zod2.z.enum(["direct", "model"]),
683
+ attemptId: import_zod2.z.string(),
684
+ executed: import_zod2.z.boolean(),
685
+ outcome: import_zod2.z.enum(["success", "denied", "fault", "cancelled"]).optional(),
686
+ workflowId: import_zod2.z.string().optional(),
687
+ nodeId: import_zod2.z.string().optional(),
688
+ workflowRevisionId: import_zod2.z.string().optional(),
689
+ runId: import_zod2.z.string().optional(),
690
+ invocationId: import_zod2.z.string().optional(),
691
+ parentInvocationId: import_zod2.z.string().optional(),
692
+ branchId: import_zod2.z.string().optional(),
693
+ inputOmitted: import_zod2.z.string().optional(),
694
+ resultOmitted: import_zod2.z.string().optional(),
695
+ source: import_zod2.z.object({
696
+ runId: import_zod2.z.string().optional(),
697
+ invocationId: import_zod2.z.string().optional(),
698
+ branchId: import_zod2.z.string().optional(),
699
+ toolCallId: import_zod2.z.string(),
700
+ attemptId: import_zod2.z.string()
701
+ }).optional()
702
+ });
681
703
  var StreamChunkSchema = import_zod2.z.union([
682
704
  import_zod2.z.object({
683
705
  type: import_zod2.z.literal("session"),
@@ -742,6 +764,7 @@ var StreamChunkSchema = import_zod2.z.union([
742
764
  }),
743
765
  import_zod2.z.object({
744
766
  type: import_zod2.z.literal("tool-call-start"),
767
+ execution: toolExecution.optional(),
745
768
  tool: import_zod2.z.string(),
746
769
  toolCallId: import_zod2.z.string(),
747
770
  node: import_zod2.z.string().optional(),
@@ -751,6 +774,7 @@ var StreamChunkSchema = import_zod2.z.union([
751
774
  }),
752
775
  import_zod2.z.object({
753
776
  type: import_zod2.z.literal("tool-call-result"),
777
+ execution: toolExecution.optional(),
754
778
  tool: import_zod2.z.string(),
755
779
  toolCallId: import_zod2.z.string(),
756
780
  node: import_zod2.z.string().optional(),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/failure.ts","../src/client/consume-stream.ts","../src/client/read-stream.ts","../src/client/stream-from-route.ts","../src/server/collect-stream.ts","../src/server/collect-buffered-stream.ts","../src/server/json-to-sse.ts","../src/server/create-stream-response.ts","../src/server/to-sse.ts","../src/structured/apply-structured-chunk.ts","../src/structured/structured-stream-accumulator.ts","../src/structured/finalized-chat-message.ts","../src/types/stream-chunk.ts","../src/types/structured-data/index.ts"],"sourcesContent":["export * from \"./failure\";\n// release-test: 2026-01-22\n// packages/stream/src/index.ts\n\n// client\nexport * from \"./client/consume-stream\";\nexport * from \"./client/read-stream\";\nexport * from \"./client/stream-from-route\";\n\n// server\nexport * from \"./server/collect-buffered-stream\";\nexport * from \"./server/collect-stream\";\nexport * from \"./server/create-stream-response\";\nexport * from \"./server/to-sse\";\nexport * from \"./structured/apply-structured-chunk\";\nexport * from \"./structured/finalized-chat-message\";\nexport * from \"./structured/structured-stream-accumulator\";\nexport * from \"./types/stream-chunk\";\nexport * from \"./types/structured-data\";\n","import {\n errorFromFailure,\n isFailureDescriptor,\n type SerializedFailureDescriptor,\n serializeFailure,\n} from \"@kortyx/core/errors\";\n\nexport function failureChunk(error: unknown): {\n type: \"error\";\n message: string;\n failure: SerializedFailureDescriptor;\n} {\n const failure = serializeFailure(error);\n return { type: \"error\", message: failure.message, failure };\n}\n\nexport function streamError(chunk: {\n message: string;\n failure?: unknown;\n}): Error {\n return isFailureDescriptor(chunk.failure)\n ? errorFromFailure(chunk.failure)\n : new Error(chunk.message || \"Stream error.\");\n}\n","import { streamError } from \"../failure\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\n\nexport interface ConsumeStreamHandlers {\n onChunk?: (\n chunk: StreamChunk,\n ) => undefined | boolean | Promise<boolean | undefined>;\n onDone?: () => void | Promise<void>;\n onError?: (error: Error, chunk?: StreamChunk) => void | Promise<void>;\n}\n\nconst toError = (value: unknown): Error =>\n value instanceof Error ? value : new Error(String(value));\n\n/**\n * Consume a stream of StreamChunk events with callback handlers.\n * Returns when a `done` chunk is seen, the stream ends, or `onChunk` returns `false`.\n */\nexport async function consumeStream(\n stream: AsyncIterable<StreamChunk>,\n handlers: ConsumeStreamHandlers = {},\n): Promise<void> {\n const callDone = async () => {\n await handlers.onDone?.();\n };\n\n try {\n for await (const chunk of stream) {\n const shouldContinue = await handlers.onChunk?.(chunk);\n\n if (chunk.type === \"error\") {\n await handlers.onError?.(streamError(chunk), chunk);\n }\n\n if (chunk.type === \"done\" || shouldContinue === false) {\n await callDone();\n return;\n }\n }\n\n await callDone();\n } catch (error) {\n const normalized = toError(error);\n await handlers.onError?.(normalized);\n throw normalized;\n }\n}\n","// packages/stream/src/client/read-stream.ts\nimport {\n isFailureDescriptor,\n KortyxError,\n serializeFailure,\n} from \"@kortyx/core/errors\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\n\n/**\n * Reads a server-sent event (SSE) Response body and yields StreamChunk objects.\n */\nexport async function* readStream(\n body: ReadableStream<Uint8Array> | null,\n): AsyncGenerator<StreamChunk, void, void> {\n if (!body) return;\n\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n let sawData = false;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer = (buffer + decoder.decode(value, { stream: true })).replaceAll(\n \"\\r\\n\",\n \"\\n\",\n );\n const parts = buffer.split(\"\\n\\n\");\n buffer = parts.pop() as string;\n\n for (const part of parts) {\n if (!part.startsWith(\"data: \")) continue;\n sawData = true;\n const payload = part.slice(6);\n if (payload.trim() === \"[DONE]\") return;\n try {\n const chunk = JSON.parse(payload) as StreamChunk;\n if (\n !chunk ||\n typeof chunk !== \"object\" ||\n typeof chunk.type !== \"string\"\n )\n throw new Error(\"Invalid event\");\n if (chunk.type === \"error\") {\n if (\n typeof chunk.message !== \"string\" ||\n (chunk.failure !== undefined &&\n !isFailureDescriptor(chunk.failure))\n )\n throw new Error(\"Invalid failure event\");\n if (chunk.failure) chunk.failure = serializeFailure(chunk.failure);\n }\n yield chunk;\n if (chunk.type === \"done\") return;\n } catch (err) {\n throw new KortyxError(\n \"MALFORMED_STREAM\",\n \"Invalid JSON or event in stream.\",\n {\n category: \"transport\",\n retryable: false,\n safeMessage: \"The response stream contained an invalid event.\",\n cause: err,\n },\n );\n }\n }\n }\n if (buffer.trim() || sawData)\n throw new KortyxError(\n \"TRUNCATED_STREAM\",\n \"Stream ended with an incomplete event.\",\n {\n category: \"transport\",\n retryable: null,\n safeMessage: \"The response stream ended before an event completed.\",\n },\n );\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n}\n","import {\n errorFromFailure,\n isFailureDescriptor,\n KortyxError,\n} from \"@kortyx/core/errors\";\nimport { failureChunk } from \"../failure\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\nimport { readStream } from \"./read-stream\";\n\nexport interface StreamFromRouteArgs<TBody = unknown> {\n endpoint: string;\n body: TBody;\n method?: string | undefined;\n fetchImpl?: typeof fetch;\n headers?: Record<string, string> | undefined;\n signal?: AbortSignal | undefined;\n}\n\nconst readErrorMessage = async (response: Response): Promise<Error> => {\n let message = `Request failed (${response.status})`;\n try {\n const payload = (await response.json()) as unknown;\n if (\n payload &&\n typeof payload === \"object\" &&\n \"failure\" in payload &&\n isFailureDescriptor(payload.failure)\n )\n return errorFromFailure(payload.failure);\n if (\n payload &&\n typeof payload === \"object\" &&\n \"error\" in payload &&\n typeof (payload as { error?: unknown }).error === \"string\"\n ) {\n message = (payload as { error: string }).error;\n }\n } catch {}\n return new KortyxError(\"HTTP_REQUEST_FAILED\", message, {\n category: \"transport\",\n status: response.status,\n safeMessage: message,\n });\n};\n\nexport async function* streamFromRoute<TBody = unknown>(\n args: StreamFromRouteArgs<TBody>,\n): AsyncGenerator<StreamChunk, void, void> {\n const fetchFn = args.fetchImpl ?? globalThis.fetch;\n if (!fetchFn) {\n yield { type: \"error\", message: \"No fetch implementation available.\" };\n yield { type: \"done\" };\n return;\n }\n\n let response: Response;\n try {\n response = await fetchFn(args.endpoint, {\n method: args.method ?? \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(args.headers ?? {}),\n },\n body: JSON.stringify(args.body),\n ...(args.signal ? { signal: args.signal } : {}),\n });\n } catch (error) {\n if (args.signal?.aborted) throw error;\n yield failureChunk(\n new KortyxError(\"NETWORK_ERROR\", \"Network request failed.\", {\n category: \"transport\",\n cause: error,\n safeMessage: \"The request could not reach the server.\",\n }),\n );\n yield { type: \"done\" };\n return;\n }\n\n if (!response.ok) {\n yield failureChunk(await readErrorMessage(response));\n yield { type: \"done\" };\n return;\n }\n\n yield* readStream(response.body);\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\n\n/**\n * Collects a streamed chat response into an array.\n * Useful for non-streaming HTTP responses or server actions.\n */\nexport async function collectStream(\n stream: AsyncIterable<StreamChunk>,\n): Promise<StreamChunk[]> {\n const chunks: StreamChunk[] = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return chunks;\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport type { StructuredDataChunk } from \"../types/structured-data\";\nimport { collectStream } from \"./collect-stream\";\n\nexport interface BufferedStreamResult {\n chunks: StreamChunk[];\n text: string;\n structured: StructuredDataChunk[];\n}\n\nconst getTextStreamId = (\n chunk: Extract<StreamChunk, { type: \"text-delta\" }>,\n) => {\n const opId =\n typeof chunk.opId === \"string\" && chunk.opId.length > 0\n ? chunk.opId\n : undefined;\n const segmentId =\n typeof chunk.segmentId === \"string\" && chunk.segmentId.length > 0\n ? chunk.segmentId\n : undefined;\n\n if (opId && segmentId) return `${opId}:${segmentId}`;\n return segmentId || opId || chunk.id || chunk.node;\n};\n\nconst appendTextDelta = (\n text: string,\n delta: string,\n streamId: string | undefined,\n lastStreamId: string | undefined,\n) => {\n if (\n streamId &&\n lastStreamId &&\n streamId !== lastStreamId &&\n text.length > 0 &&\n !/\\s$/.test(text) &&\n !/^\\s/.test(delta)\n ) {\n return `${text} ${delta}`;\n }\n\n return text + delta;\n};\n\n/**\n * Derive convenient buffered fields from raw chunks.\n * `text-delta` is preferred; `message` is fallback when no text deltas exist.\n */\nexport function summarizeStreamChunks(\n chunks: StreamChunk[],\n): Omit<BufferedStreamResult, \"chunks\"> {\n let sawTextDelta = false;\n let text = \"\";\n let lastTextStreamId: string | undefined;\n const messageFallback: string[] = [];\n const structured: StructuredDataChunk[] = [];\n\n for (const chunk of chunks) {\n if (chunk.type === \"text-delta\") {\n sawTextDelta = true;\n const streamId = getTextStreamId(chunk);\n text = appendTextDelta(text, chunk.delta, streamId, lastTextStreamId);\n if (streamId) lastTextStreamId = streamId;\n continue;\n }\n\n if (chunk.type === \"message\") {\n messageFallback.push(chunk.content ?? \"\");\n continue;\n }\n\n if (chunk.type === \"structured-data\") {\n structured.push(chunk as StructuredDataChunk);\n }\n }\n\n if (!sawTextDelta && messageFallback.length > 0) {\n text = messageFallback.join(\"\");\n }\n\n return { text, structured };\n}\n\n/**\n * Collect a stream and return both raw chunks and buffered convenience fields.\n */\nexport async function collectBufferedStream(\n stream: AsyncIterable<StreamChunk>,\n): Promise<BufferedStreamResult> {\n const chunks = await collectStream(stream);\n return {\n chunks,\n ...summarizeStreamChunks(chunks),\n };\n}\n","// packages/stream/src/server/json-to-sse.ts\nexport class JsonToSseTransformStream extends TransformStream<unknown, string> {\n constructor() {\n super({\n transform(part, controller) {\n controller.enqueue(`data: ${JSON.stringify(part)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue(\"data: [DONE]\\n\\n\");\n },\n });\n }\n}\n","import { failureChunk } from \"../failure\";\n// packages/stream/src/server/create-stream-response.ts\nimport type { StreamChunk } from \"../types/stream-chunk\";\nimport { JsonToSseTransformStream } from \"./json-to-sse\";\n\nexport const STREAM_HEADERS = {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n connection: \"keep-alive\",\n \"x-accel-buffering\": \"no\",\n};\n\n/** Bridge stream cancellation to the source, including Node execution streams. */\nexport function createStreamResponse(\n stream: AsyncIterable<StreamChunk>,\n): Response {\n let cancelled = false;\n const iterator = stream[Symbol.asyncIterator]();\n const readable = new ReadableStream<StreamChunk>({\n async start(controller) {\n try {\n while (!cancelled) {\n const next = await iterator.next();\n if (cancelled || next.done) break;\n controller.enqueue(next.value);\n }\n } catch (error) {\n if (!cancelled) {\n controller.enqueue(failureChunk(error));\n controller.enqueue({ type: \"done\" });\n }\n } finally {\n if (!cancelled) controller.close();\n }\n },\n cancel() {\n cancelled = true;\n // Destroying an active Kortyx stream signals its transient execution controller.\n (\n stream as AsyncIterable<StreamChunk> & { destroy?: () => void }\n ).destroy?.();\n void Promise.resolve(iterator.return?.()).catch(() => {});\n },\n });\n return new Response(\n readable\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n { headers: STREAM_HEADERS },\n );\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport { createStreamResponse } from \"./create-stream-response\";\n\n/**\n * Friendly alias for createStreamResponse.\n */\nexport function toSSE(stream: AsyncIterable<StreamChunk>): Response {\n return createStreamResponse(stream);\n}\n","import type { StructuredDataChunk } from \"../types/structured-data\";\n\nexport type StructuredStreamState<TData = unknown> = {\n streamId: string;\n dataType: string;\n status: \"streaming\" | \"done\";\n data: TData;\n node?: string;\n id?: string;\n schemaId?: string;\n schemaVersion?: string;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isArrayIndex = (value: string): boolean => /^\\d+$/.test(value);\n\nconst describeValue = (value: unknown): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n};\n\nconst parsePath = (path: string): string[] => {\n if (path.length === 0) {\n throw new Error(\n \"Structured chunk path must be a non-empty dot-separated string.\",\n );\n }\n\n const parts = path.split(\".\");\n if (parts.some((part) => part.length === 0)) {\n throw new Error(\n `Structured chunk path \"${path}\" must not contain empty segments.`,\n );\n }\n\n return parts;\n};\n\nconst cloneContainerForPart = (args: {\n current: unknown;\n part: string;\n path: string;\n traversed: string[];\n}): Record<string, unknown> | unknown[] => {\n const expected = isArrayIndex(args.part) ? \"array\" : \"object\";\n const location =\n args.traversed.length === 0 ? \"<root>\" : args.traversed.join(\".\");\n\n if (args.current === undefined) {\n return expected === \"array\" ? [] : {};\n }\n\n if (expected === \"array\") {\n if (Array.isArray(args.current)) return [...args.current];\n throw new Error(\n `Structured path conflict at ${location} for \"${args.path}\": expected array container, received ${describeValue(args.current)}.`,\n );\n }\n\n if (isPlainObject(args.current)) return { ...args.current };\n\n throw new Error(\n `Structured path conflict at ${location} for \"${args.path}\": expected object container, received ${describeValue(args.current)}.`,\n );\n};\n\nconst updateByParts = (args: {\n input: unknown;\n parts: string[];\n path: string;\n updateLeaf: (current: unknown) => unknown;\n traversed?: string[];\n}): unknown => {\n const traversed = args.traversed ?? [];\n const [part, ...rest] = args.parts as [string, ...string[]];\n\n const container = cloneContainerForPart({\n current: args.input,\n part,\n path: args.path,\n traversed,\n });\n\n const currentChild = Array.isArray(container)\n ? container[Number(part)]\n : container[part];\n const nextChild =\n rest.length === 0\n ? args.updateLeaf(currentChild)\n : updateByParts({\n input: currentChild,\n parts: rest,\n path: args.path,\n updateLeaf: args.updateLeaf,\n traversed: [...traversed, part],\n });\n\n if (Array.isArray(container)) {\n container[Number(part)] = nextChild;\n } else {\n container[part] = nextChild;\n }\n\n return container;\n};\n\nexport function applyStructuredChunk<TData = unknown>(\n current: StructuredStreamState<TData> | undefined,\n chunk: StructuredDataChunk,\n): StructuredStreamState<TData> {\n if (current && current.streamId !== chunk.streamId) {\n throw new Error(\n `Structured chunk streamId mismatch: expected ${current.streamId}, received ${chunk.streamId}.`,\n );\n }\n\n if (current?.status === \"done\") {\n throw new Error(\n `Structured stream ${chunk.streamId} already completed with a final chunk.`,\n );\n }\n\n const nextBase = {\n streamId: chunk.streamId,\n dataType: chunk.dataType,\n status: chunk.kind === \"final\" ? (\"done\" as const) : (\"streaming\" as const),\n ...(chunk.node ? { node: chunk.node } : {}),\n ...(chunk.id ? { id: chunk.id } : {}),\n ...(chunk.schemaId ? { schemaId: chunk.schemaId } : {}),\n ...(chunk.schemaVersion ? { schemaVersion: chunk.schemaVersion } : {}),\n };\n\n if (chunk.kind === \"final\") {\n return {\n ...nextBase,\n data: chunk.data as TData,\n };\n }\n\n const path = chunk.path;\n const pathParts = parsePath(path);\n const previousData = current?.data;\n\n if (chunk.kind === \"set\") {\n return {\n ...nextBase,\n data: updateByParts({\n input: previousData,\n parts: pathParts,\n path,\n updateLeaf: () => chunk.value,\n }) as TData,\n };\n }\n\n if (chunk.kind === \"append\") {\n return {\n ...nextBase,\n data: updateByParts({\n input: previousData,\n parts: pathParts,\n path,\n updateLeaf: (existing) => {\n if (existing === undefined) return [...chunk.items];\n if (!Array.isArray(existing)) {\n throw new Error(\n `Structured append requires path \"${path}\" to target an array, received ${describeValue(existing)}.`,\n );\n }\n return [...existing, ...chunk.items];\n },\n }) as TData,\n };\n }\n\n return {\n ...nextBase,\n data: updateByParts({\n input: previousData,\n parts: pathParts,\n path,\n updateLeaf: (existing) => {\n if (existing === undefined) return chunk.delta;\n if (typeof existing !== \"string\") {\n throw new Error(\n `Structured text-delta requires path \"${path}\" to target a string, received ${describeValue(existing)}.`,\n );\n }\n return existing + chunk.delta;\n },\n }) as TData,\n };\n}\n\nexport function reduceStructuredChunks<TData = unknown>(\n chunks: StructuredDataChunk[],\n): Record<string, StructuredStreamState<TData>> {\n return chunks.reduce<Record<string, StructuredStreamState<TData>>>(\n (acc, chunk) => {\n acc[chunk.streamId] = applyStructuredChunk(acc[chunk.streamId], chunk);\n return acc;\n },\n {},\n );\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport type { StructuredDataChunk } from \"../types/structured-data\";\nimport {\n applyStructuredChunk,\n type StructuredStreamState,\n} from \"./apply-structured-chunk\";\n\nexport type StructuredStreamAccumulator<TData = unknown> = {\n apply: (chunk: StructuredDataChunk) => StructuredStreamState<TData>;\n applyStreamChunk: (\n chunk: StreamChunk,\n ) => StructuredStreamState<TData> | undefined;\n get: (streamId: string) => StructuredStreamState<TData> | undefined;\n has: (streamId: string) => boolean;\n delete: (streamId: string) => boolean;\n clear: () => void;\n size: () => number;\n entries: () => Array<[string, StructuredStreamState<TData>]>;\n values: () => StructuredStreamState<TData>[];\n toRecord: () => Record<string, StructuredStreamState<TData>>;\n};\n\nconst isStructuredDataChunk = (\n chunk: StreamChunk,\n): chunk is StructuredDataChunk => chunk.type === \"structured-data\";\n\nexport function createStructuredStreamAccumulator<TData = unknown>(\n initialChunks: Iterable<StructuredDataChunk> = [],\n): StructuredStreamAccumulator<TData> {\n const states = new Map<string, StructuredStreamState<TData>>();\n\n const apply = (chunk: StructuredDataChunk): StructuredStreamState<TData> => {\n const nextState = applyStructuredChunk(states.get(chunk.streamId), chunk);\n states.set(chunk.streamId, nextState);\n return nextState;\n };\n\n for (const chunk of initialChunks) {\n apply(chunk);\n }\n\n return {\n apply,\n applyStreamChunk: (chunk) => {\n if (chunk.type === \"structured-data-invalidated\") {\n states.delete(chunk.streamId);\n return undefined;\n }\n if (!isStructuredDataChunk(chunk)) return undefined;\n return apply(chunk);\n },\n get: (streamId) => states.get(streamId),\n has: (streamId) => states.has(streamId),\n delete: (streamId) => states.delete(streamId),\n clear: () => {\n states.clear();\n },\n size: () => states.size,\n entries: () => Array.from(states.entries()),\n values: () => Array.from(states.values()),\n toRecord: () => Object.fromEntries(states.entries()),\n };\n}\n","import type { FailureDescriptor } from \"@kortyx/core/errors\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\nimport type { StructuredStreamState } from \"./apply-structured-chunk\";\nimport { createStructuredStreamAccumulator } from \"./structured-stream-accumulator\";\n\nexport type FinalizedChatContentPiece =\n | { id: string; type: \"text\"; content: string }\n | {\n id: string;\n type: \"structured\";\n data: StructuredStreamState<Record<string, unknown>>;\n }\n | { id: string; type: \"error\"; content: string; failure?: FailureDescriptor }\n | {\n id: string;\n type: \"interrupt\";\n resumeToken: string;\n requestId: string;\n kind: \"text\" | \"choice\" | \"multi-choice\" | \"custom\";\n question?: string;\n multiple: boolean;\n options: Array<{ id: string; label: string; description?: string }>;\n schemaId?: string;\n schemaVersion?: string;\n contract?: string;\n request?: unknown;\n interruptId?: string;\n meta?: Record<string, unknown>;\n };\n\nexport type FinalizedChatMessage = {\n id: string;\n role: \"assistant\";\n content: string;\n contentPieces: FinalizedChatContentPiece[];\n checkpointId?: string;\n checkpointTurnIndex?: number;\n};\n\ntype TextChunk = Extract<\n StreamChunk,\n { type: \"text-start\" | \"text-delta\" | \"text-end\" }\n>;\ntype InterruptChunk = Extract<StreamChunk, { type: \"interrupt\" }>;\n\nconst textStreamKey = (chunk: TextChunk): string => {\n const op = chunk.opId?.trim();\n const segment = chunk.segmentId?.trim();\n if (segment) return op ? `${op}:${segment}` : segment;\n if (op) return `${op}:${chunk.node ?? \"__unknown__\"}`;\n return chunk.node ?? \"__unknown__\";\n};\n\n/** Shared default interrupt projection for server snapshots and React. */\nexport function projectInterruptPiece(\n chunk: InterruptChunk,\n id: string,\n): Extract<FinalizedChatContentPiece, { type: \"interrupt\" }> {\n const input = chunk.input;\n const schemaId = chunk.schemaId ?? input.schemaId;\n const schemaVersion = chunk.schemaVersion ?? input.schemaVersion;\n const interruptId = chunk.id ?? input.id;\n return {\n id,\n type: \"interrupt\",\n resumeToken: chunk.resumeToken,\n requestId: chunk.requestId,\n kind: input.kind,\n ...(input.question !== undefined ? { question: input.question } : {}),\n multiple: input.multiple,\n options: (input.options ?? []).map((option) => ({\n id: option.id,\n label: option.label,\n ...(option.description ? { description: option.description } : {}),\n })),\n ...(schemaId ? { schemaId } : {}),\n ...(schemaVersion ? { schemaVersion } : {}),\n ...(input.kind === \"custom\" && input.contract\n ? { contract: input.contract }\n : {}),\n ...(input.kind === \"custom\" ? { request: input.request } : {}),\n ...(interruptId ? { interruptId } : {}),\n ...(input.meta || chunk.meta\n ? { meta: { ...(input.meta ?? {}), ...(chunk.meta ?? {}) } }\n : {}),\n };\n}\n\n/** Accumulates emitted UI chunks without consuming the HTTP response. */\nexport function createFinalizedChatMessageAccumulator(clientTurnId: string) {\n const pieces: FinalizedChatContentPiece[] = [];\n const textIndexes = new Map<string, number>();\n const structured =\n createStructuredStreamAccumulator<Record<string, unknown>>();\n let sawTextDelta = false;\n let checkpoint: { id: string; turnIndex: number } | undefined;\n\n const ensureText = (key: string) => {\n const existing = textIndexes.get(key);\n if (existing !== undefined) return existing;\n const index = pieces.length;\n pieces.push({\n id: `${clientTurnId}:text:${key}`,\n type: \"text\",\n content: \"\",\n });\n textIndexes.set(key, index);\n return index;\n };\n\n return {\n apply(chunk: StreamChunk): void {\n switch (chunk.type) {\n case \"checkpoint\":\n checkpoint = { id: chunk.id, turnIndex: chunk.turnIndex };\n break;\n case \"text-start\":\n ensureText(textStreamKey(chunk));\n break;\n case \"text-delta\": {\n sawTextDelta = true;\n const index = ensureText(textStreamKey(chunk));\n const current = pieces[index] as Extract<\n FinalizedChatContentPiece,\n { type: \"text\" }\n >;\n pieces[index] = {\n ...current,\n content: current.content + chunk.delta,\n };\n break;\n }\n case \"message\":\n if (!sawTextDelta) {\n pieces.push({\n id: `${clientTurnId}:message:${pieces.length}`,\n type: \"text\",\n content: chunk.content,\n });\n }\n break;\n case \"structured-data\": {\n const data = structured.apply(chunk);\n const id = `${clientTurnId}:structured:${chunk.streamId}`;\n const index = pieces.findIndex((piece) => piece.id === id);\n const piece = { id, type: \"structured\", data } as const;\n if (index < 0) pieces.push(piece);\n else pieces[index] = piece;\n break;\n }\n case \"structured-data-invalidated\": {\n structured.delete(chunk.streamId);\n const index = pieces.findIndex(\n (piece) =>\n piece.id === `${clientTurnId}:structured:${chunk.streamId}`,\n );\n if (index >= 0) pieces.splice(index, 1);\n break;\n }\n case \"interrupt\":\n pieces.push(\n projectInterruptPiece(\n chunk,\n `${clientTurnId}:interrupt:${chunk.requestId}`,\n ),\n );\n break;\n case \"error\":\n pieces.push({\n id: `${clientTurnId}:error:${pieces.length}`,\n type: \"error\",\n content: chunk.message,\n ...(chunk.failure ? { failure: chunk.failure } : {}),\n });\n break;\n }\n },\n message(): FinalizedChatMessage {\n const contentPieces = pieces.filter(\n (piece) => piece.type !== \"text\" || piece.content.length > 0,\n );\n return {\n id: `${clientTurnId}:assistant`,\n role: \"assistant\",\n content: contentPieces\n .filter(\n (\n piece,\n ): piece is Extract<FinalizedChatContentPiece, { type: \"text\" }> =>\n piece.type === \"text\",\n )\n .map((piece) => piece.content)\n .join(\"\"),\n contentPieces: contentPieces.map((piece) => ({ ...piece })),\n ...(checkpoint\n ? {\n checkpointId: checkpoint.id,\n checkpointTurnIndex: checkpoint.turnIndex,\n }\n : {}),\n };\n },\n };\n}\n","import {\n type FailureDescriptor,\n isFailureDescriptor,\n serializeFailure,\n} from \"@kortyx/core/errors\";\nimport { z } from \"zod\";\nimport { StructuredDataChunkSchema } from \"./structured-data\";\n\nexport const StreamChunkSchema = z.union([\n z.object({\n type: z.literal(\"session\"),\n sessionId: z.string(),\n }),\n z.object({\n type: z.literal(\"checkpoint\"),\n id: z.string(),\n sessionId: z.string(),\n turnIndex: z.number().int().nonnegative(),\n label: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"structured-data-invalidated\"),\n streamId: z.string(),\n checkpointId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"trace\"),\n traceId: z.string(),\n spanId: z.string(),\n runId: z.string(),\n rootSpanName: z.literal(\"kortyx.run\"),\n }),\n z.object({\n type: z.literal(\"status\"),\n message: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"message\"),\n content: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-start\"),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-delta\"),\n delta: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-end\"),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"tool-result\"),\n tool: z.string().optional(),\n node: z.string().optional(),\n content: z.unknown(),\n }),\n z.object({\n type: z.literal(\"tool-call-start\"),\n tool: z.string(),\n toolCallId: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n input: z.unknown().optional(),\n }),\n z.object({\n type: z.literal(\"tool-call-result\"),\n tool: z.string(),\n toolCallId: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n content: z.unknown(),\n structuredContent: z.unknown().optional(),\n isError: z.boolean().optional(),\n }),\n z.object({\n type: z.literal(\"tool-call-error\"),\n diagnosticId: z.uuid().optional(),\n failure: z\n .custom<FailureDescriptor>(isFailureDescriptor)\n .transform(serializeFailure)\n .optional(),\n tool: z.string(),\n toolCallId: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n message: z.string(),\n }),\n // Interrupt request chunk (used to render interactive options in UI)\n z.object({\n type: z.literal(\"interrupt\"),\n requestId: z.string(),\n resumeToken: z.string(),\n workflow: z.string().optional(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n input: z.discriminatedUnion(\"kind\", [\n // Text input: question optional, no options\n z.object({\n kind: z.literal(\"text\"),\n multiple: z.boolean(),\n question: z.string().optional(),\n id: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n options: z.array(z.never()).optional(),\n }),\n z.object({\n kind: z.literal(\"custom\"),\n multiple: z.literal(false),\n question: z.string().optional(),\n contract: z.string().optional(),\n request: z.unknown(),\n id: z.string().optional(),\n schemaId: z.string(),\n schemaVersion: z.string(),\n meta: z.record(z.string(), z.unknown()).optional(),\n options: z.array(z.never()).optional(),\n }),\n // Choice/multi-choice: question + options required\n z.object({\n kind: z.enum([\"choice\", \"multi-choice\"]),\n multiple: z.boolean(),\n question: z.string(),\n id: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n options: z.array(\n z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n }),\n ),\n }),\n ]),\n meta: z.record(z.string(), z.unknown()).optional(),\n }),\n StructuredDataChunkSchema,\n z.object({\n type: z.literal(\"transition\"),\n transitionTo: z.string(),\n payload: z.any().optional(),\n }),\n z.object({\n type: z.literal(\"limit-reached\"),\n runId: z.string(),\n limit: z.enum([\n \"maxNodeExecutions\",\n \"maxModelPasses\",\n \"maxToolCalls\",\n \"maxChildInvocations\",\n ]),\n maximum: z.number(),\n consumed: z.number(),\n }),\n z.object({\n type: z.literal(\"cancelled\"),\n runId: z.string(),\n reason: z.string(),\n }),\n z.object({ type: z.literal(\"done\"), data: z.any().optional() }),\n z.object({\n type: z.literal(\"error\"),\n diagnosticId: z.uuid().optional(),\n message: z.string(),\n failure: z\n .custom<FailureDescriptor>(isFailureDescriptor)\n .transform(serializeFailure)\n .optional(),\n }),\n]);\n\nexport type StreamChunk = z.infer<typeof StreamChunkSchema>;\n","import { z } from \"zod\";\n\nconst StructuredDataBase = z.object({\n type: z.literal(\"structured-data\"),\n streamId: z.string(),\n dataType: z.string(),\n kind: z.enum([\"set\", \"append\", \"text-delta\", \"final\"]),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n id: z.string().optional(),\n node: z.string().optional(),\n});\n\nconst StructuredSetChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"set\"),\n path: z.string().min(1),\n value: z.unknown(),\n});\n\nconst StructuredAppendChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"append\"),\n path: z.string().min(1),\n items: z.array(z.unknown()),\n});\n\nconst StructuredTextDeltaChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"text-delta\"),\n path: z.string().min(1),\n delta: z.string(),\n});\n\nconst StructuredFinalChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"final\"),\n data: z.unknown(),\n});\n\nexport const StructuredDataChunkSchema = z.union([\n StructuredSetChunkSchema,\n StructuredAppendChunkSchema,\n StructuredTextDeltaChunkSchema,\n StructuredFinalChunkSchema,\n]);\n\nexport type StructuredDataChunk = z.infer<typeof StructuredDataChunkSchema>;\n"],"mappings":"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","names":["import_errors","import_errors","piece","import_errors","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/failure.ts","../src/client/consume-stream.ts","../src/client/read-stream.ts","../src/client/stream-from-route.ts","../src/server/collect-stream.ts","../src/server/collect-buffered-stream.ts","../src/server/json-to-sse.ts","../src/server/create-stream-response.ts","../src/server/to-sse.ts","../src/structured/apply-structured-chunk.ts","../src/structured/structured-stream-accumulator.ts","../src/structured/finalized-chat-message.ts","../src/types/stream-chunk.ts","../src/types/structured-data/index.ts"],"sourcesContent":["export * from \"./failure\";\n// release-test: 2026-01-22\n// packages/stream/src/index.ts\n\n// client\nexport * from \"./client/consume-stream\";\nexport * from \"./client/read-stream\";\nexport * from \"./client/stream-from-route\";\n\n// server\nexport * from \"./server/collect-buffered-stream\";\nexport * from \"./server/collect-stream\";\nexport * from \"./server/create-stream-response\";\nexport * from \"./server/to-sse\";\nexport * from \"./structured/apply-structured-chunk\";\nexport * from \"./structured/finalized-chat-message\";\nexport * from \"./structured/structured-stream-accumulator\";\nexport * from \"./types/stream-chunk\";\nexport * from \"./types/structured-data\";\n","import {\n errorFromFailure,\n isFailureDescriptor,\n type SerializedFailureDescriptor,\n serializeFailure,\n} from \"@kortyx/core/errors\";\n\nexport function failureChunk(error: unknown): {\n type: \"error\";\n message: string;\n failure: SerializedFailureDescriptor;\n} {\n const failure = serializeFailure(error);\n return { type: \"error\", message: failure.message, failure };\n}\n\nexport function streamError(chunk: {\n message: string;\n failure?: unknown;\n}): Error {\n return isFailureDescriptor(chunk.failure)\n ? errorFromFailure(chunk.failure)\n : new Error(chunk.message || \"Stream error.\");\n}\n","import { streamError } from \"../failure\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\n\nexport interface ConsumeStreamHandlers {\n onChunk?: (\n chunk: StreamChunk,\n ) => undefined | boolean | Promise<boolean | undefined>;\n onDone?: () => void | Promise<void>;\n onError?: (error: Error, chunk?: StreamChunk) => void | Promise<void>;\n}\n\nconst toError = (value: unknown): Error =>\n value instanceof Error ? value : new Error(String(value));\n\n/**\n * Consume a stream of StreamChunk events with callback handlers.\n * Returns when a `done` chunk is seen, the stream ends, or `onChunk` returns `false`.\n */\nexport async function consumeStream(\n stream: AsyncIterable<StreamChunk>,\n handlers: ConsumeStreamHandlers = {},\n): Promise<void> {\n const callDone = async () => {\n await handlers.onDone?.();\n };\n\n try {\n for await (const chunk of stream) {\n const shouldContinue = await handlers.onChunk?.(chunk);\n\n if (chunk.type === \"error\") {\n await handlers.onError?.(streamError(chunk), chunk);\n }\n\n if (chunk.type === \"done\" || shouldContinue === false) {\n await callDone();\n return;\n }\n }\n\n await callDone();\n } catch (error) {\n const normalized = toError(error);\n await handlers.onError?.(normalized);\n throw normalized;\n }\n}\n","// packages/stream/src/client/read-stream.ts\nimport {\n isFailureDescriptor,\n KortyxError,\n serializeFailure,\n} from \"@kortyx/core/errors\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\n\n/**\n * Reads a server-sent event (SSE) Response body and yields StreamChunk objects.\n */\nexport async function* readStream(\n body: ReadableStream<Uint8Array> | null,\n): AsyncGenerator<StreamChunk, void, void> {\n if (!body) return;\n\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n let sawData = false;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer = (buffer + decoder.decode(value, { stream: true })).replaceAll(\n \"\\r\\n\",\n \"\\n\",\n );\n const parts = buffer.split(\"\\n\\n\");\n buffer = parts.pop() as string;\n\n for (const part of parts) {\n if (!part.startsWith(\"data: \")) continue;\n sawData = true;\n const payload = part.slice(6);\n if (payload.trim() === \"[DONE]\") return;\n try {\n const chunk = JSON.parse(payload) as StreamChunk;\n if (\n !chunk ||\n typeof chunk !== \"object\" ||\n typeof chunk.type !== \"string\"\n )\n throw new Error(\"Invalid event\");\n if (chunk.type === \"error\") {\n if (\n typeof chunk.message !== \"string\" ||\n (chunk.failure !== undefined &&\n !isFailureDescriptor(chunk.failure))\n )\n throw new Error(\"Invalid failure event\");\n if (chunk.failure) chunk.failure = serializeFailure(chunk.failure);\n }\n yield chunk;\n if (chunk.type === \"done\") return;\n } catch (err) {\n throw new KortyxError(\n \"MALFORMED_STREAM\",\n \"Invalid JSON or event in stream.\",\n {\n category: \"transport\",\n retryable: false,\n safeMessage: \"The response stream contained an invalid event.\",\n cause: err,\n },\n );\n }\n }\n }\n if (buffer.trim() || sawData)\n throw new KortyxError(\n \"TRUNCATED_STREAM\",\n \"Stream ended with an incomplete event.\",\n {\n category: \"transport\",\n retryable: null,\n safeMessage: \"The response stream ended before an event completed.\",\n },\n );\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n}\n","import {\n errorFromFailure,\n isFailureDescriptor,\n KortyxError,\n} from \"@kortyx/core/errors\";\nimport { failureChunk } from \"../failure\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\nimport { readStream } from \"./read-stream\";\n\nexport interface StreamFromRouteArgs<TBody = unknown> {\n endpoint: string;\n body: TBody;\n method?: string | undefined;\n fetchImpl?: typeof fetch;\n headers?: Record<string, string> | undefined;\n signal?: AbortSignal | undefined;\n}\n\nconst readErrorMessage = async (response: Response): Promise<Error> => {\n let message = `Request failed (${response.status})`;\n try {\n const payload = (await response.json()) as unknown;\n if (\n payload &&\n typeof payload === \"object\" &&\n \"failure\" in payload &&\n isFailureDescriptor(payload.failure)\n )\n return errorFromFailure(payload.failure);\n if (\n payload &&\n typeof payload === \"object\" &&\n \"error\" in payload &&\n typeof (payload as { error?: unknown }).error === \"string\"\n ) {\n message = (payload as { error: string }).error;\n }\n } catch {}\n return new KortyxError(\"HTTP_REQUEST_FAILED\", message, {\n category: \"transport\",\n status: response.status,\n safeMessage: message,\n });\n};\n\nexport async function* streamFromRoute<TBody = unknown>(\n args: StreamFromRouteArgs<TBody>,\n): AsyncGenerator<StreamChunk, void, void> {\n const fetchFn = args.fetchImpl ?? globalThis.fetch;\n if (!fetchFn) {\n yield { type: \"error\", message: \"No fetch implementation available.\" };\n yield { type: \"done\" };\n return;\n }\n\n let response: Response;\n try {\n response = await fetchFn(args.endpoint, {\n method: args.method ?? \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(args.headers ?? {}),\n },\n body: JSON.stringify(args.body),\n ...(args.signal ? { signal: args.signal } : {}),\n });\n } catch (error) {\n if (args.signal?.aborted) throw error;\n yield failureChunk(\n new KortyxError(\"NETWORK_ERROR\", \"Network request failed.\", {\n category: \"transport\",\n cause: error,\n safeMessage: \"The request could not reach the server.\",\n }),\n );\n yield { type: \"done\" };\n return;\n }\n\n if (!response.ok) {\n yield failureChunk(await readErrorMessage(response));\n yield { type: \"done\" };\n return;\n }\n\n yield* readStream(response.body);\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\n\n/**\n * Collects a streamed chat response into an array.\n * Useful for non-streaming HTTP responses or server actions.\n */\nexport async function collectStream(\n stream: AsyncIterable<StreamChunk>,\n): Promise<StreamChunk[]> {\n const chunks: StreamChunk[] = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return chunks;\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport type { StructuredDataChunk } from \"../types/structured-data\";\nimport { collectStream } from \"./collect-stream\";\n\nexport interface BufferedStreamResult {\n chunks: StreamChunk[];\n text: string;\n structured: StructuredDataChunk[];\n}\n\nconst getTextStreamId = (\n chunk: Extract<StreamChunk, { type: \"text-delta\" }>,\n) => {\n const opId =\n typeof chunk.opId === \"string\" && chunk.opId.length > 0\n ? chunk.opId\n : undefined;\n const segmentId =\n typeof chunk.segmentId === \"string\" && chunk.segmentId.length > 0\n ? chunk.segmentId\n : undefined;\n\n if (opId && segmentId) return `${opId}:${segmentId}`;\n return segmentId || opId || chunk.id || chunk.node;\n};\n\nconst appendTextDelta = (\n text: string,\n delta: string,\n streamId: string | undefined,\n lastStreamId: string | undefined,\n) => {\n if (\n streamId &&\n lastStreamId &&\n streamId !== lastStreamId &&\n text.length > 0 &&\n !/\\s$/.test(text) &&\n !/^\\s/.test(delta)\n ) {\n return `${text} ${delta}`;\n }\n\n return text + delta;\n};\n\n/**\n * Derive convenient buffered fields from raw chunks.\n * `text-delta` is preferred; `message` is fallback when no text deltas exist.\n */\nexport function summarizeStreamChunks(\n chunks: StreamChunk[],\n): Omit<BufferedStreamResult, \"chunks\"> {\n let sawTextDelta = false;\n let text = \"\";\n let lastTextStreamId: string | undefined;\n const messageFallback: string[] = [];\n const structured: StructuredDataChunk[] = [];\n\n for (const chunk of chunks) {\n if (chunk.type === \"text-delta\") {\n sawTextDelta = true;\n const streamId = getTextStreamId(chunk);\n text = appendTextDelta(text, chunk.delta, streamId, lastTextStreamId);\n if (streamId) lastTextStreamId = streamId;\n continue;\n }\n\n if (chunk.type === \"message\") {\n messageFallback.push(chunk.content ?? \"\");\n continue;\n }\n\n if (chunk.type === \"structured-data\") {\n structured.push(chunk as StructuredDataChunk);\n }\n }\n\n if (!sawTextDelta && messageFallback.length > 0) {\n text = messageFallback.join(\"\");\n }\n\n return { text, structured };\n}\n\n/**\n * Collect a stream and return both raw chunks and buffered convenience fields.\n */\nexport async function collectBufferedStream(\n stream: AsyncIterable<StreamChunk>,\n): Promise<BufferedStreamResult> {\n const chunks = await collectStream(stream);\n return {\n chunks,\n ...summarizeStreamChunks(chunks),\n };\n}\n","// packages/stream/src/server/json-to-sse.ts\nexport class JsonToSseTransformStream extends TransformStream<unknown, string> {\n constructor() {\n super({\n transform(part, controller) {\n controller.enqueue(`data: ${JSON.stringify(part)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue(\"data: [DONE]\\n\\n\");\n },\n });\n }\n}\n","import { failureChunk } from \"../failure\";\n// packages/stream/src/server/create-stream-response.ts\nimport type { StreamChunk } from \"../types/stream-chunk\";\nimport { JsonToSseTransformStream } from \"./json-to-sse\";\n\nexport const STREAM_HEADERS = {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n connection: \"keep-alive\",\n \"x-accel-buffering\": \"no\",\n};\n\n/** Bridge stream cancellation to the source, including Node execution streams. */\nexport function createStreamResponse(\n stream: AsyncIterable<StreamChunk>,\n): Response {\n let cancelled = false;\n const iterator = stream[Symbol.asyncIterator]();\n const readable = new ReadableStream<StreamChunk>({\n async start(controller) {\n try {\n while (!cancelled) {\n const next = await iterator.next();\n if (cancelled || next.done) break;\n controller.enqueue(next.value);\n }\n } catch (error) {\n if (!cancelled) {\n controller.enqueue(failureChunk(error));\n controller.enqueue({ type: \"done\" });\n }\n } finally {\n if (!cancelled) controller.close();\n }\n },\n cancel() {\n cancelled = true;\n // Destroying an active Kortyx stream signals its transient execution controller.\n (\n stream as AsyncIterable<StreamChunk> & { destroy?: () => void }\n ).destroy?.();\n void Promise.resolve(iterator.return?.()).catch(() => {});\n },\n });\n return new Response(\n readable\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n { headers: STREAM_HEADERS },\n );\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport { createStreamResponse } from \"./create-stream-response\";\n\n/**\n * Friendly alias for createStreamResponse.\n */\nexport function toSSE(stream: AsyncIterable<StreamChunk>): Response {\n return createStreamResponse(stream);\n}\n","import type { StructuredDataChunk } from \"../types/structured-data\";\n\nexport type StructuredStreamState<TData = unknown> = {\n streamId: string;\n dataType: string;\n status: \"streaming\" | \"done\";\n data: TData;\n node?: string;\n id?: string;\n schemaId?: string;\n schemaVersion?: string;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isArrayIndex = (value: string): boolean => /^\\d+$/.test(value);\n\nconst describeValue = (value: unknown): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n};\n\nconst parsePath = (path: string): string[] => {\n if (path.length === 0) {\n throw new Error(\n \"Structured chunk path must be a non-empty dot-separated string.\",\n );\n }\n\n const parts = path.split(\".\");\n if (parts.some((part) => part.length === 0)) {\n throw new Error(\n `Structured chunk path \"${path}\" must not contain empty segments.`,\n );\n }\n\n return parts;\n};\n\nconst cloneContainerForPart = (args: {\n current: unknown;\n part: string;\n path: string;\n traversed: string[];\n}): Record<string, unknown> | unknown[] => {\n const expected = isArrayIndex(args.part) ? \"array\" : \"object\";\n const location =\n args.traversed.length === 0 ? \"<root>\" : args.traversed.join(\".\");\n\n if (args.current === undefined) {\n return expected === \"array\" ? [] : {};\n }\n\n if (expected === \"array\") {\n if (Array.isArray(args.current)) return [...args.current];\n throw new Error(\n `Structured path conflict at ${location} for \"${args.path}\": expected array container, received ${describeValue(args.current)}.`,\n );\n }\n\n if (isPlainObject(args.current)) return { ...args.current };\n\n throw new Error(\n `Structured path conflict at ${location} for \"${args.path}\": expected object container, received ${describeValue(args.current)}.`,\n );\n};\n\nconst updateByParts = (args: {\n input: unknown;\n parts: string[];\n path: string;\n updateLeaf: (current: unknown) => unknown;\n traversed?: string[];\n}): unknown => {\n const traversed = args.traversed ?? [];\n const [part, ...rest] = args.parts as [string, ...string[]];\n\n const container = cloneContainerForPart({\n current: args.input,\n part,\n path: args.path,\n traversed,\n });\n\n const currentChild = Array.isArray(container)\n ? container[Number(part)]\n : container[part];\n const nextChild =\n rest.length === 0\n ? args.updateLeaf(currentChild)\n : updateByParts({\n input: currentChild,\n parts: rest,\n path: args.path,\n updateLeaf: args.updateLeaf,\n traversed: [...traversed, part],\n });\n\n if (Array.isArray(container)) {\n container[Number(part)] = nextChild;\n } else {\n container[part] = nextChild;\n }\n\n return container;\n};\n\nexport function applyStructuredChunk<TData = unknown>(\n current: StructuredStreamState<TData> | undefined,\n chunk: StructuredDataChunk,\n): StructuredStreamState<TData> {\n if (current && current.streamId !== chunk.streamId) {\n throw new Error(\n `Structured chunk streamId mismatch: expected ${current.streamId}, received ${chunk.streamId}.`,\n );\n }\n\n if (current?.status === \"done\") {\n throw new Error(\n `Structured stream ${chunk.streamId} already completed with a final chunk.`,\n );\n }\n\n const nextBase = {\n streamId: chunk.streamId,\n dataType: chunk.dataType,\n status: chunk.kind === \"final\" ? (\"done\" as const) : (\"streaming\" as const),\n ...(chunk.node ? { node: chunk.node } : {}),\n ...(chunk.id ? { id: chunk.id } : {}),\n ...(chunk.schemaId ? { schemaId: chunk.schemaId } : {}),\n ...(chunk.schemaVersion ? { schemaVersion: chunk.schemaVersion } : {}),\n };\n\n if (chunk.kind === \"final\") {\n return {\n ...nextBase,\n data: chunk.data as TData,\n };\n }\n\n const path = chunk.path;\n const pathParts = parsePath(path);\n const previousData = current?.data;\n\n if (chunk.kind === \"set\") {\n return {\n ...nextBase,\n data: updateByParts({\n input: previousData,\n parts: pathParts,\n path,\n updateLeaf: () => chunk.value,\n }) as TData,\n };\n }\n\n if (chunk.kind === \"append\") {\n return {\n ...nextBase,\n data: updateByParts({\n input: previousData,\n parts: pathParts,\n path,\n updateLeaf: (existing) => {\n if (existing === undefined) return [...chunk.items];\n if (!Array.isArray(existing)) {\n throw new Error(\n `Structured append requires path \"${path}\" to target an array, received ${describeValue(existing)}.`,\n );\n }\n return [...existing, ...chunk.items];\n },\n }) as TData,\n };\n }\n\n return {\n ...nextBase,\n data: updateByParts({\n input: previousData,\n parts: pathParts,\n path,\n updateLeaf: (existing) => {\n if (existing === undefined) return chunk.delta;\n if (typeof existing !== \"string\") {\n throw new Error(\n `Structured text-delta requires path \"${path}\" to target a string, received ${describeValue(existing)}.`,\n );\n }\n return existing + chunk.delta;\n },\n }) as TData,\n };\n}\n\nexport function reduceStructuredChunks<TData = unknown>(\n chunks: StructuredDataChunk[],\n): Record<string, StructuredStreamState<TData>> {\n return chunks.reduce<Record<string, StructuredStreamState<TData>>>(\n (acc, chunk) => {\n acc[chunk.streamId] = applyStructuredChunk(acc[chunk.streamId], chunk);\n return acc;\n },\n {},\n );\n}\n","import type { StreamChunk } from \"../types/stream-chunk\";\nimport type { StructuredDataChunk } from \"../types/structured-data\";\nimport {\n applyStructuredChunk,\n type StructuredStreamState,\n} from \"./apply-structured-chunk\";\n\nexport type StructuredStreamAccumulator<TData = unknown> = {\n apply: (chunk: StructuredDataChunk) => StructuredStreamState<TData>;\n applyStreamChunk: (\n chunk: StreamChunk,\n ) => StructuredStreamState<TData> | undefined;\n get: (streamId: string) => StructuredStreamState<TData> | undefined;\n has: (streamId: string) => boolean;\n delete: (streamId: string) => boolean;\n clear: () => void;\n size: () => number;\n entries: () => Array<[string, StructuredStreamState<TData>]>;\n values: () => StructuredStreamState<TData>[];\n toRecord: () => Record<string, StructuredStreamState<TData>>;\n};\n\nconst isStructuredDataChunk = (\n chunk: StreamChunk,\n): chunk is StructuredDataChunk => chunk.type === \"structured-data\";\n\nexport function createStructuredStreamAccumulator<TData = unknown>(\n initialChunks: Iterable<StructuredDataChunk> = [],\n): StructuredStreamAccumulator<TData> {\n const states = new Map<string, StructuredStreamState<TData>>();\n\n const apply = (chunk: StructuredDataChunk): StructuredStreamState<TData> => {\n const nextState = applyStructuredChunk(states.get(chunk.streamId), chunk);\n states.set(chunk.streamId, nextState);\n return nextState;\n };\n\n for (const chunk of initialChunks) {\n apply(chunk);\n }\n\n return {\n apply,\n applyStreamChunk: (chunk) => {\n if (chunk.type === \"structured-data-invalidated\") {\n states.delete(chunk.streamId);\n return undefined;\n }\n if (!isStructuredDataChunk(chunk)) return undefined;\n return apply(chunk);\n },\n get: (streamId) => states.get(streamId),\n has: (streamId) => states.has(streamId),\n delete: (streamId) => states.delete(streamId),\n clear: () => {\n states.clear();\n },\n size: () => states.size,\n entries: () => Array.from(states.entries()),\n values: () => Array.from(states.values()),\n toRecord: () => Object.fromEntries(states.entries()),\n };\n}\n","import type { FailureDescriptor } from \"@kortyx/core/errors\";\nimport type { StreamChunk } from \"../types/stream-chunk\";\nimport type { StructuredStreamState } from \"./apply-structured-chunk\";\nimport { createStructuredStreamAccumulator } from \"./structured-stream-accumulator\";\n\nexport type FinalizedChatContentPiece =\n | { id: string; type: \"text\"; content: string }\n | {\n id: string;\n type: \"structured\";\n data: StructuredStreamState<Record<string, unknown>>;\n }\n | { id: string; type: \"error\"; content: string; failure?: FailureDescriptor }\n | {\n id: string;\n type: \"interrupt\";\n resumeToken: string;\n requestId: string;\n kind: \"text\" | \"choice\" | \"multi-choice\" | \"custom\";\n question?: string;\n multiple: boolean;\n options: Array<{ id: string; label: string; description?: string }>;\n schemaId?: string;\n schemaVersion?: string;\n contract?: string;\n request?: unknown;\n interruptId?: string;\n meta?: Record<string, unknown>;\n };\n\nexport type FinalizedChatMessage = {\n id: string;\n role: \"assistant\";\n content: string;\n contentPieces: FinalizedChatContentPiece[];\n checkpointId?: string;\n checkpointTurnIndex?: number;\n};\n\ntype TextChunk = Extract<\n StreamChunk,\n { type: \"text-start\" | \"text-delta\" | \"text-end\" }\n>;\ntype InterruptChunk = Extract<StreamChunk, { type: \"interrupt\" }>;\n\nconst textStreamKey = (chunk: TextChunk): string => {\n const op = chunk.opId?.trim();\n const segment = chunk.segmentId?.trim();\n if (segment) return op ? `${op}:${segment}` : segment;\n if (op) return `${op}:${chunk.node ?? \"__unknown__\"}`;\n return chunk.node ?? \"__unknown__\";\n};\n\n/** Shared default interrupt projection for server snapshots and React. */\nexport function projectInterruptPiece(\n chunk: InterruptChunk,\n id: string,\n): Extract<FinalizedChatContentPiece, { type: \"interrupt\" }> {\n const input = chunk.input;\n const schemaId = chunk.schemaId ?? input.schemaId;\n const schemaVersion = chunk.schemaVersion ?? input.schemaVersion;\n const interruptId = chunk.id ?? input.id;\n return {\n id,\n type: \"interrupt\",\n resumeToken: chunk.resumeToken,\n requestId: chunk.requestId,\n kind: input.kind,\n ...(input.question !== undefined ? { question: input.question } : {}),\n multiple: input.multiple,\n options: (input.options ?? []).map((option) => ({\n id: option.id,\n label: option.label,\n ...(option.description ? { description: option.description } : {}),\n })),\n ...(schemaId ? { schemaId } : {}),\n ...(schemaVersion ? { schemaVersion } : {}),\n ...(input.kind === \"custom\" && input.contract\n ? { contract: input.contract }\n : {}),\n ...(input.kind === \"custom\" ? { request: input.request } : {}),\n ...(interruptId ? { interruptId } : {}),\n ...(input.meta || chunk.meta\n ? { meta: { ...(input.meta ?? {}), ...(chunk.meta ?? {}) } }\n : {}),\n };\n}\n\n/** Accumulates emitted UI chunks without consuming the HTTP response. */\nexport function createFinalizedChatMessageAccumulator(clientTurnId: string) {\n const pieces: FinalizedChatContentPiece[] = [];\n const textIndexes = new Map<string, number>();\n const structured =\n createStructuredStreamAccumulator<Record<string, unknown>>();\n let sawTextDelta = false;\n let checkpoint: { id: string; turnIndex: number } | undefined;\n\n const ensureText = (key: string) => {\n const existing = textIndexes.get(key);\n if (existing !== undefined) return existing;\n const index = pieces.length;\n pieces.push({\n id: `${clientTurnId}:text:${key}`,\n type: \"text\",\n content: \"\",\n });\n textIndexes.set(key, index);\n return index;\n };\n\n return {\n apply(chunk: StreamChunk): void {\n switch (chunk.type) {\n case \"checkpoint\":\n checkpoint = { id: chunk.id, turnIndex: chunk.turnIndex };\n break;\n case \"text-start\":\n ensureText(textStreamKey(chunk));\n break;\n case \"text-delta\": {\n sawTextDelta = true;\n const index = ensureText(textStreamKey(chunk));\n const current = pieces[index] as Extract<\n FinalizedChatContentPiece,\n { type: \"text\" }\n >;\n pieces[index] = {\n ...current,\n content: current.content + chunk.delta,\n };\n break;\n }\n case \"message\":\n if (!sawTextDelta) {\n pieces.push({\n id: `${clientTurnId}:message:${pieces.length}`,\n type: \"text\",\n content: chunk.content,\n });\n }\n break;\n case \"structured-data\": {\n const data = structured.apply(chunk);\n const id = `${clientTurnId}:structured:${chunk.streamId}`;\n const index = pieces.findIndex((piece) => piece.id === id);\n const piece = { id, type: \"structured\", data } as const;\n if (index < 0) pieces.push(piece);\n else pieces[index] = piece;\n break;\n }\n case \"structured-data-invalidated\": {\n structured.delete(chunk.streamId);\n const index = pieces.findIndex(\n (piece) =>\n piece.id === `${clientTurnId}:structured:${chunk.streamId}`,\n );\n if (index >= 0) pieces.splice(index, 1);\n break;\n }\n case \"interrupt\":\n pieces.push(\n projectInterruptPiece(\n chunk,\n `${clientTurnId}:interrupt:${chunk.requestId}`,\n ),\n );\n break;\n case \"error\":\n pieces.push({\n id: `${clientTurnId}:error:${pieces.length}`,\n type: \"error\",\n content: chunk.message,\n ...(chunk.failure ? { failure: chunk.failure } : {}),\n });\n break;\n }\n },\n message(): FinalizedChatMessage {\n const contentPieces = pieces.filter(\n (piece) => piece.type !== \"text\" || piece.content.length > 0,\n );\n return {\n id: `${clientTurnId}:assistant`,\n role: \"assistant\",\n content: contentPieces\n .filter(\n (\n piece,\n ): piece is Extract<FinalizedChatContentPiece, { type: \"text\" }> =>\n piece.type === \"text\",\n )\n .map((piece) => piece.content)\n .join(\"\"),\n contentPieces: contentPieces.map((piece) => ({ ...piece })),\n ...(checkpoint\n ? {\n checkpointId: checkpoint.id,\n checkpointTurnIndex: checkpoint.turnIndex,\n }\n : {}),\n };\n },\n };\n}\n","import {\n type FailureDescriptor,\n isFailureDescriptor,\n serializeFailure,\n} from \"@kortyx/core/errors\";\nimport { z } from \"zod\";\nimport { StructuredDataChunkSchema } from \"./structured-data\";\n\n/** Attribution and capture diagnostics; arbitrary runtime/transport fields are stripped. */\nconst toolExecution = z.object({\n callingMode: z.enum([\"direct\", \"model\"]),\n attemptId: z.string(),\n executed: z.boolean(),\n outcome: z.enum([\"success\", \"denied\", \"fault\", \"cancelled\"]).optional(),\n workflowId: z.string().optional(),\n nodeId: z.string().optional(),\n workflowRevisionId: z.string().optional(),\n runId: z.string().optional(),\n invocationId: z.string().optional(),\n parentInvocationId: z.string().optional(),\n branchId: z.string().optional(),\n inputOmitted: z.string().optional(),\n resultOmitted: z.string().optional(),\n source: z\n .object({\n runId: z.string().optional(),\n invocationId: z.string().optional(),\n branchId: z.string().optional(),\n toolCallId: z.string(),\n attemptId: z.string(),\n })\n .optional(),\n});\n\nexport const StreamChunkSchema = z.union([\n z.object({\n type: z.literal(\"session\"),\n sessionId: z.string(),\n }),\n z.object({\n type: z.literal(\"checkpoint\"),\n id: z.string(),\n sessionId: z.string(),\n turnIndex: z.number().int().nonnegative(),\n label: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"structured-data-invalidated\"),\n streamId: z.string(),\n checkpointId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"trace\"),\n traceId: z.string(),\n spanId: z.string(),\n runId: z.string(),\n rootSpanName: z.literal(\"kortyx.run\"),\n }),\n z.object({\n type: z.literal(\"status\"),\n message: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"message\"),\n content: z.string(),\n node: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-start\"),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-delta\"),\n delta: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"text-end\"),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n segmentId: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"tool-result\"),\n tool: z.string().optional(),\n node: z.string().optional(),\n content: z.unknown(),\n }),\n z.object({\n type: z.literal(\"tool-call-start\"),\n execution: toolExecution.optional(),\n tool: z.string(),\n toolCallId: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n input: z.unknown().optional(),\n }),\n z.object({\n type: z.literal(\"tool-call-result\"),\n execution: toolExecution.optional(),\n tool: z.string(),\n toolCallId: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n content: z.unknown(),\n structuredContent: z.unknown().optional(),\n isError: z.boolean().optional(),\n }),\n z.object({\n type: z.literal(\"tool-call-error\"),\n diagnosticId: z.uuid().optional(),\n failure: z\n .custom<FailureDescriptor>(isFailureDescriptor)\n .transform(serializeFailure)\n .optional(),\n tool: z.string(),\n toolCallId: z.string(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n message: z.string(),\n }),\n // Interrupt request chunk (used to render interactive options in UI)\n z.object({\n type: z.literal(\"interrupt\"),\n requestId: z.string(),\n resumeToken: z.string(),\n workflow: z.string().optional(),\n node: z.string().optional(),\n id: z.string().optional(),\n opId: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n input: z.discriminatedUnion(\"kind\", [\n // Text input: question optional, no options\n z.object({\n kind: z.literal(\"text\"),\n multiple: z.boolean(),\n question: z.string().optional(),\n id: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n options: z.array(z.never()).optional(),\n }),\n z.object({\n kind: z.literal(\"custom\"),\n multiple: z.literal(false),\n question: z.string().optional(),\n contract: z.string().optional(),\n request: z.unknown(),\n id: z.string().optional(),\n schemaId: z.string(),\n schemaVersion: z.string(),\n meta: z.record(z.string(), z.unknown()).optional(),\n options: z.array(z.never()).optional(),\n }),\n // Choice/multi-choice: question + options required\n z.object({\n kind: z.enum([\"choice\", \"multi-choice\"]),\n multiple: z.boolean(),\n question: z.string(),\n id: z.string().optional(),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n options: z.array(\n z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n }),\n ),\n }),\n ]),\n meta: z.record(z.string(), z.unknown()).optional(),\n }),\n StructuredDataChunkSchema,\n z.object({\n type: z.literal(\"transition\"),\n transitionTo: z.string(),\n payload: z.any().optional(),\n }),\n z.object({\n type: z.literal(\"limit-reached\"),\n runId: z.string(),\n limit: z.enum([\n \"maxNodeExecutions\",\n \"maxModelPasses\",\n \"maxToolCalls\",\n \"maxChildInvocations\",\n ]),\n maximum: z.number(),\n consumed: z.number(),\n }),\n z.object({\n type: z.literal(\"cancelled\"),\n runId: z.string(),\n reason: z.string(),\n }),\n z.object({ type: z.literal(\"done\"), data: z.any().optional() }),\n z.object({\n type: z.literal(\"error\"),\n diagnosticId: z.uuid().optional(),\n message: z.string(),\n failure: z\n .custom<FailureDescriptor>(isFailureDescriptor)\n .transform(serializeFailure)\n .optional(),\n }),\n]);\n\nexport type StreamChunk = z.infer<typeof StreamChunkSchema>;\n","import { z } from \"zod\";\n\nconst StructuredDataBase = z.object({\n type: z.literal(\"structured-data\"),\n streamId: z.string(),\n dataType: z.string(),\n kind: z.enum([\"set\", \"append\", \"text-delta\", \"final\"]),\n schemaId: z.string().optional(),\n schemaVersion: z.string().optional(),\n id: z.string().optional(),\n node: z.string().optional(),\n});\n\nconst StructuredSetChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"set\"),\n path: z.string().min(1),\n value: z.unknown(),\n});\n\nconst StructuredAppendChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"append\"),\n path: z.string().min(1),\n items: z.array(z.unknown()),\n});\n\nconst StructuredTextDeltaChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"text-delta\"),\n path: z.string().min(1),\n delta: z.string(),\n});\n\nconst StructuredFinalChunkSchema = StructuredDataBase.extend({\n kind: z.literal(\"final\"),\n data: z.unknown(),\n});\n\nexport const StructuredDataChunkSchema = z.union([\n StructuredSetChunkSchema,\n StructuredAppendChunkSchema,\n StructuredTextDeltaChunkSchema,\n StructuredFinalChunkSchema,\n]);\n\nexport type StructuredDataChunk = z.infer<typeof StructuredDataChunkSchema>;\n"],"mappings":"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","names":["import_errors","import_errors","piece","import_errors","import_zod"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kortyx/stream",
3
- "version": "0.15.6",
3
+ "version": "0.15.7",
4
4
  "private": false,
5
5
  "description": "Streaming primitives for Kortyx.",
6
6
  "keywords": [
@@ -37,15 +37,15 @@
37
37
  "CHANGELOG.md"
38
38
  ],
39
39
  "dependencies": {
40
- "zod": "^4.3.6",
40
+ "zod": "^4.6.6",
41
41
  "@kortyx/core": "0.15.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "turbo": "2.9.14",
45
45
  "typescript": "5.9.3",
46
46
  "tsup": "^8.5.1",
47
- "vitest": "^4.1.11",
48
- "@vitest/coverage-v8": "^4.1.11"
47
+ "vitest": "^4.1.12",
48
+ "@vitest/coverage-v8": "^4.1.12"
49
49
  },
50
50
  "repository": {
51
51
  "type": "git",