@anvia/client 1.6.0 → 1.8.0

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.
@@ -0,0 +1,156 @@
1
+ // src/transport/streams.ts
2
+ /** A malformed JSONL line or SSE data payload that could not be parsed as JSON. */
3
+ var EventStreamParseError = class extends Error {
4
+ format;
5
+ /** The raw JSONL line or joined SSE `data` payload. */
6
+ raw;
7
+ /** 1-based physical line number of the malformed JSONL line. */
8
+ line;
9
+ /** SSE event name of the malformed frame. */
10
+ event;
11
+ /** SSE last event ID in effect when the malformed frame was dispatched. */
12
+ lastEventId;
13
+ constructor(options) {
14
+ super(`Malformed ${options.format === "sse" ? "SSE" : "JSONL"} frame: invalid JSON.`, { cause: options.cause });
15
+ this.name = "EventStreamParseError";
16
+ this.format = options.format;
17
+ this.raw = options.raw;
18
+ this.line = options.line;
19
+ this.event = options.event;
20
+ this.lastEventId = options.lastEventId;
21
+ }
22
+ };
23
+ async function* readJsonlStream(stream, options = {}) {
24
+ let lineNumber = 0;
25
+ for await (const line of readLines(stream)) {
26
+ lineNumber += 1;
27
+ const raw = line.trim();
28
+ if (raw.length === 0) continue;
29
+ const parsed = parseJson(raw, options, () => ({
30
+ format: "jsonl",
31
+ raw,
32
+ line: lineNumber
33
+ }));
34
+ if (parsed.ok) yield parsed.value;
35
+ }
36
+ }
37
+ async function* readSseStream(stream, options = {}) {
38
+ for await (const frame of readSseFrames(stream, options)) yield frame.data;
39
+ }
40
+ async function* readSseFrames(stream, options = {}) {
41
+ let data = [];
42
+ let event = "";
43
+ let lastEventId = "";
44
+ let retry;
45
+ function dispatch() {
46
+ const raw = data.join("\n");
47
+ const name = event === "" ? "message" : event;
48
+ const hasData = data.length > 0;
49
+ data = [];
50
+ event = "";
51
+ if (!hasData || raw.trim().length === 0) return void 0;
52
+ const parsed = parseJson(raw, options, () => ({
53
+ format: "sse",
54
+ raw,
55
+ event: name,
56
+ lastEventId
57
+ }));
58
+ if (!parsed.ok) return void 0;
59
+ const frame = {
60
+ data: parsed.value,
61
+ event: name,
62
+ lastEventId
63
+ };
64
+ if (retry !== void 0) frame.retry = retry;
65
+ return frame;
66
+ }
67
+ for await (const line of readLines(stream)) {
68
+ if (line === "") {
69
+ const frame = dispatch();
70
+ if (frame !== void 0) yield frame;
71
+ continue;
72
+ }
73
+ if (line.startsWith(":")) continue;
74
+ const separator = line.indexOf(":");
75
+ const field = separator === -1 ? line : line.slice(0, separator);
76
+ let value = separator === -1 ? "" : line.slice(separator + 1);
77
+ if (value.startsWith(" ")) value = value.slice(1);
78
+ if (field === "data") data.push(value);
79
+ else if (field === "event") event = value;
80
+ else if (field === "id") {
81
+ if (!value.includes("\0")) lastEventId = value;
82
+ } else if (field === "retry") {
83
+ if (/^\d+$/.test(value)) retry = Number(value);
84
+ }
85
+ }
86
+ const frame = dispatch();
87
+ if (frame !== void 0) yield frame;
88
+ }
89
+ /** Splits a byte stream into lines terminated by CRLF, LF, or a bare CR. */
90
+ async function* readLines(stream) {
91
+ const reader = stream.getReader();
92
+ const decoder = new TextDecoder();
93
+ let buffer = "";
94
+ let skipLeadingLf = false;
95
+ let completed = false;
96
+ function* split(text) {
97
+ let chunk = text;
98
+ if (skipLeadingLf && chunk.length > 0) {
99
+ skipLeadingLf = false;
100
+ if (chunk.startsWith("\n")) chunk = chunk.slice(1);
101
+ }
102
+ let start = 0;
103
+ let index = buffer.length;
104
+ buffer += chunk;
105
+ for (; index < buffer.length; index += 1) {
106
+ const char = buffer.charCodeAt(index);
107
+ if (char !== 10 && char !== 13) continue;
108
+ yield buffer.slice(start, index);
109
+ if (char === 13) {
110
+ if (index + 1 === buffer.length) skipLeadingLf = true;
111
+ else if (buffer.charCodeAt(index + 1) === 10) index += 1;
112
+ }
113
+ start = index + 1;
114
+ }
115
+ buffer = buffer.slice(start);
116
+ }
117
+ try {
118
+ while (true) {
119
+ const next = await reader.read();
120
+ if (next.done) {
121
+ completed = true;
122
+ break;
123
+ }
124
+ yield* split(decoder.decode(next.value, { stream: true }));
125
+ }
126
+ yield* split(decoder.decode());
127
+ if (buffer.length > 0) yield buffer;
128
+ } finally {
129
+ if (!completed) await cancelReader(reader);
130
+ reader.releaseLock();
131
+ }
132
+ }
133
+ function parseJson(raw, options, details) {
134
+ try {
135
+ return {
136
+ ok: true,
137
+ value: JSON.parse(raw)
138
+ };
139
+ } catch (cause) {
140
+ const error = new EventStreamParseError({
141
+ ...details(),
142
+ cause
143
+ });
144
+ options.onParseError?.(error);
145
+ if (options.strict === true) throw error;
146
+ return { ok: false };
147
+ }
148
+ }
149
+ async function cancelReader(reader) {
150
+ try {
151
+ await reader.cancel();
152
+ } catch {}
153
+ }
154
+ export { readSseStream as i, readJsonlStream as n, readSseFrames as r, EventStreamParseError as t };
155
+
156
+ //# sourceMappingURL=streams-BXxF27Hp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streams-BXxF27Hp.js","names":[],"sources":["../src/transport/streams.ts"],"sourcesContent":["import type { EventStreamFormat } from \"./types\";\n\n/** A malformed JSONL line or SSE data payload that could not be parsed as JSON. */\nexport class EventStreamParseError extends Error {\n readonly format: EventStreamFormat;\n /** The raw JSONL line or joined SSE `data` payload. */\n readonly raw: string;\n /** 1-based physical line number of the malformed JSONL line. */\n readonly line: number | undefined;\n /** SSE event name of the malformed frame. */\n readonly event: string | undefined;\n /** SSE last event ID in effect when the malformed frame was dispatched. */\n readonly lastEventId: string | undefined;\n\n constructor(options: {\n format: EventStreamFormat;\n raw: string;\n cause: unknown;\n line?: number;\n event?: string;\n lastEventId?: string;\n }) {\n super(`Malformed ${options.format === \"sse\" ? \"SSE\" : \"JSONL\"} frame: invalid JSON.`, {\n cause: options.cause,\n });\n this.name = \"EventStreamParseError\";\n this.format = options.format;\n this.raw = options.raw;\n this.line = options.line;\n this.event = options.event;\n this.lastEventId = options.lastEventId;\n }\n}\n\nexport type EventStreamReadOptions = {\n /**\n * Receives frames whose payload is not valid JSON. Malformed frames are skipped and the\n * stream continues. Throwing from this callback aborts the stream with that error.\n */\n onParseError?: (error: EventStreamParseError) => void;\n /** Throw the parse error instead of skipping malformed frames. */\n strict?: boolean;\n};\n\n/** A dispatched Server-Sent Event with its parsed JSON payload. */\nexport type SseFrame<TEvent> = {\n data: TEvent;\n /** Event name from the `event:` field, `\"message\"` when absent. */\n event: string;\n /** Last event ID set by an `id:` field in this or an earlier frame, `\"\"` when none. */\n lastEventId: string;\n /** Most recent valid `retry:` reconnection time in milliseconds. */\n retry?: number;\n};\n\nexport async function* readJsonlStream<TEvent>(\n stream: ReadableStream<Uint8Array>,\n options: EventStreamReadOptions = {},\n): AsyncIterable<TEvent> {\n let lineNumber = 0;\n for await (const line of readLines(stream)) {\n lineNumber += 1;\n const raw = line.trim();\n if (raw.length === 0) continue;\n const parsed = parseJson(raw, options, () => ({ format: \"jsonl\", raw, line: lineNumber }));\n if (parsed.ok) yield parsed.value as TEvent;\n }\n}\n\nexport async function* readSseStream<TEvent>(\n stream: ReadableStream<Uint8Array>,\n options: EventStreamReadOptions = {},\n): AsyncIterable<TEvent> {\n for await (const frame of readSseFrames<TEvent>(stream, options)) yield frame.data;\n}\n\nexport async function* readSseFrames<TEvent>(\n stream: ReadableStream<Uint8Array>,\n options: EventStreamReadOptions = {},\n): AsyncIterable<SseFrame<TEvent>> {\n let data: string[] = [];\n let event = \"\";\n let lastEventId = \"\";\n let retry: number | undefined;\n\n function dispatch(): SseFrame<TEvent> | undefined {\n const raw = data.join(\"\\n\");\n const name = event === \"\" ? \"message\" : event;\n const hasData = data.length > 0;\n data = [];\n event = \"\";\n // Whitespace-only payloads (for example `data:` heartbeats) carry no JSON event.\n if (!hasData || raw.trim().length === 0) return undefined;\n const parsed = parseJson(raw, options, () => ({\n format: \"sse\",\n raw,\n event: name,\n lastEventId,\n }));\n if (!parsed.ok) return undefined;\n const frame: SseFrame<TEvent> = { data: parsed.value as TEvent, event: name, lastEventId };\n if (retry !== undefined) frame.retry = retry;\n return frame;\n }\n\n for await (const line of readLines(stream)) {\n if (line === \"\") {\n const frame = dispatch();\n if (frame !== undefined) yield frame;\n continue;\n }\n if (line.startsWith(\":\")) continue;\n const separator = line.indexOf(\":\");\n const field = separator === -1 ? line : line.slice(0, separator);\n let value = separator === -1 ? \"\" : line.slice(separator + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n if (field === \"data\") {\n data.push(value);\n } else if (field === \"event\") {\n event = value;\n } else if (field === \"id\") {\n if (!value.includes(\"\\0\")) lastEventId = value;\n } else if (field === \"retry\") {\n if (/^\\d+$/.test(value)) retry = Number(value);\n }\n }\n // Leniently dispatch a final event that was not followed by a blank line.\n const frame = dispatch();\n if (frame !== undefined) yield frame;\n}\n\n/** Splits a byte stream into lines terminated by CRLF, LF, or a bare CR. */\nasync function* readLines(stream: ReadableStream<Uint8Array>): AsyncIterable<string> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let skipLeadingLf = false;\n let completed = false;\n\n function* split(text: string): Iterable<string> {\n let chunk = text;\n if (skipLeadingLf && chunk.length > 0) {\n skipLeadingLf = false;\n if (chunk.startsWith(\"\\n\")) chunk = chunk.slice(1);\n }\n let start = 0;\n let index = buffer.length;\n buffer += chunk;\n for (; index < buffer.length; index += 1) {\n const char = buffer.charCodeAt(index);\n if (char !== 10 && char !== 13) continue;\n yield buffer.slice(start, index);\n if (char === 13) {\n if (index + 1 === buffer.length) skipLeadingLf = true;\n else if (buffer.charCodeAt(index + 1) === 10) index += 1;\n }\n start = index + 1;\n }\n buffer = buffer.slice(start);\n }\n\n try {\n while (true) {\n const next = await reader.read();\n if (next.done) {\n completed = true;\n break;\n }\n yield* split(decoder.decode(next.value, { stream: true }));\n }\n yield* split(decoder.decode());\n if (buffer.length > 0) yield buffer;\n } finally {\n if (!completed) await cancelReader(reader);\n reader.releaseLock();\n }\n}\n\nfunction parseJson(\n raw: string,\n options: EventStreamReadOptions,\n details: () => Omit<ConstructorParameters<typeof EventStreamParseError>[0], \"cause\">,\n): { ok: true; value: unknown } | { ok: false } {\n try {\n return { ok: true, value: JSON.parse(raw) };\n } catch (cause) {\n const error = new EventStreamParseError({ ...details(), cause });\n options.onParseError?.(error);\n if (options.strict === true) throw error;\n return { ok: false };\n }\n}\n\nasync function cancelReader(reader: ReadableStreamDefaultReader<Uint8Array>): Promise<void> {\n try {\n await reader.cancel();\n } catch {\n // The request may already have been aborted by its owner.\n }\n}\n"],"mappings":"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"}
@@ -1,91 +1,2 @@
1
- type EventStreamFormat = "jsonl" | "sse";
2
- type EventTransportSendOptions<TRequest> = {
3
- request: TRequest;
4
- abortSignal?: AbortSignal;
5
- headers?: HeadersInit;
6
- };
7
- type EventTransport<TRequest, TEvent> = {
8
- send(options: EventTransportSendOptions<TRequest>): AsyncIterable<TEvent>;
9
- };
10
-
11
- /** A malformed JSONL line or SSE data payload that could not be parsed as JSON. */
12
- declare class EventStreamParseError extends Error {
13
- readonly format: EventStreamFormat;
14
- /** The raw JSONL line or joined SSE `data` payload. */
15
- readonly raw: string;
16
- /** 1-based physical line number of the malformed JSONL line. */
17
- readonly line: number | undefined;
18
- /** SSE event name of the malformed frame. */
19
- readonly event: string | undefined;
20
- /** SSE last event ID in effect when the malformed frame was dispatched. */
21
- readonly lastEventId: string | undefined;
22
- constructor(options: {
23
- format: EventStreamFormat;
24
- raw: string;
25
- cause: unknown;
26
- line?: number;
27
- event?: string;
28
- lastEventId?: string;
29
- });
30
- }
31
- type EventStreamReadOptions = {
32
- /**
33
- * Receives frames whose payload is not valid JSON. Malformed frames are skipped and the
34
- * stream continues. Throwing from this callback aborts the stream with that error.
35
- */
36
- onParseError?: (error: EventStreamParseError) => void;
37
- /** Throw the parse error instead of skipping malformed frames. */
38
- strict?: boolean;
39
- };
40
- /** A dispatched Server-Sent Event with its parsed JSON payload. */
41
- type SseFrame<TEvent> = {
42
- data: TEvent;
43
- /** Event name from the `event:` field, `"message"` when absent. */
44
- event: string;
45
- /** Last event ID set by an `id:` field in this or an earlier frame, `""` when none. */
46
- lastEventId: string;
47
- /** Most recent valid `retry:` reconnection time in milliseconds. */
48
- retry?: number;
49
- };
50
- declare function readJsonlStream<TEvent>(stream: ReadableStream<Uint8Array>, options?: EventStreamReadOptions): AsyncIterable<TEvent>;
51
- declare function readSseStream<TEvent>(stream: ReadableStream<Uint8Array>, options?: EventStreamReadOptions): AsyncIterable<TEvent>;
52
- declare function readSseFrames<TEvent>(stream: ReadableStream<Uint8Array>, options?: EventStreamReadOptions): AsyncIterable<SseFrame<TEvent>>;
53
-
54
- type FetchEventStreamOptions = Omit<RequestInit, "headers"> & {
55
- input: string | URL | Request;
56
- format?: EventStreamFormat | "auto";
57
- fetch?: typeof fetch;
58
- headers?: HeadersInit;
59
- validateResponse?: (response: Response) => void;
60
- onParseError?: EventStreamReadOptions["onParseError"];
61
- };
62
- declare class EventStreamHttpError extends Error {
63
- readonly response: Response;
64
- readonly body: string;
65
- constructor(response: Response, body: string);
66
- }
67
- declare function fetchEventStream<TEvent>(options: FetchEventStreamOptions): AsyncIterable<TEvent>;
68
-
69
- type EventTransportContext<TRequest> = EventTransportSendOptions<TRequest>;
70
- type EventTransportBodyContext<TRequest> = Omit<EventTransportContext<TRequest>, "headers"> & {
71
- headers: Headers;
72
- };
73
- type CreateFetchEventTransportOptions<TRequest, TEvent> = {
74
- endpoint: string | URL | ((context: EventTransportContext<TRequest>) => string | URL);
75
- method?: string;
76
- format?: EventStreamFormat | "auto";
77
- fetch?: typeof fetch;
78
- headers?: HeadersInit | ((context: EventTransportContext<TRequest>) => HeadersInit | Promise<HeadersInit>);
79
- body?: (context: EventTransportBodyContext<TRequest>) => BodyInit | null | undefined | Promise<BodyInit | null | undefined>;
80
- init?: Omit<RequestInit, "body" | "headers" | "method" | "signal">;
81
- mapEvent?: (event: unknown) => TEvent;
82
- validateResponse?: (response: Response) => void;
83
- /** Receives malformed frames that were skipped instead of aborting the stream. */
84
- onParseError?: FetchEventStreamOptions["onParseError"];
85
- };
86
- declare function createFetchEventTransport<TRequest, TEvent = unknown>(options: CreateFetchEventTransportOptions<TRequest, TEvent>): EventTransport<TRequest, TEvent>;
87
- declare function createDirectEventTransport<TRequest, TEvent>(options: {
88
- handler(context: EventTransportContext<TRequest>): AsyncIterable<TEvent>;
89
- }): EventTransport<TRequest, TEvent>;
90
-
91
- export { type CreateFetchEventTransportOptions, type EventStreamFormat, EventStreamHttpError, EventStreamParseError, type EventStreamReadOptions, type EventTransport, type EventTransportSendOptions, type FetchEventStreamOptions, type SseFrame, createDirectEventTransport, createFetchEventTransport, fetchEventStream, readJsonlStream, readSseFrames, readSseStream };
1
+ import { a as FetchEventStreamOptions, c as EventStreamReadOptions, d as readSseFrames, f as readSseStream, h as EventTransportSendOptions, i as EventStreamHttpError, l as SseFrame, m as EventTransport, n as createDirectEventTransport, o as fetchEventStream, p as EventStreamFormat, r as createFetchEventTransport, s as EventStreamParseError, t as CreateFetchEventTransportOptions, u as readJsonlStream } from "../event-transport-rXxwo4BK.js";
2
+ export { type CreateFetchEventTransportOptions, type EventStreamFormat, EventStreamHttpError, EventStreamParseError, type EventStreamReadOptions, type EventTransport, type EventTransportSendOptions, type FetchEventStreamOptions, type SseFrame, createDirectEventTransport, createFetchEventTransport, fetchEventStream, readJsonlStream, readSseFrames, readSseStream };
@@ -1,23 +1,3 @@
1
- import {
2
- EventStreamHttpError,
3
- createDirectEventTransport,
4
- createFetchEventTransport,
5
- fetchEventStream
6
- } from "../chunk-RK5U6WVJ.js";
7
- import {
8
- EventStreamParseError,
9
- readJsonlStream,
10
- readSseFrames,
11
- readSseStream
12
- } from "../chunk-PD72KNCV.js";
13
- export {
14
- EventStreamHttpError,
15
- EventStreamParseError,
16
- createDirectEventTransport,
17
- createFetchEventTransport,
18
- fetchEventStream,
19
- readJsonlStream,
20
- readSseFrames,
21
- readSseStream
22
- };
23
- //# sourceMappingURL=index.js.map
1
+ import { i as fetchEventStream, n as createFetchEventTransport, r as EventStreamHttpError, t as createDirectEventTransport } from "../event-transport-CcP1zaST.js";
2
+ import { i as readSseStream, n as readJsonlStream, r as readSseFrames, t as EventStreamParseError } from "../streams-BXxF27Hp.js";
3
+ export { EventStreamHttpError, EventStreamParseError, createDirectEventTransport, createFetchEventTransport, fetchEventStream, readJsonlStream, readSseFrames, readSseStream };
@@ -0,0 +1,348 @@
1
+ import { CompletionSource, ContextUsage, ImageDetail, JsonObject, JsonValue, Message, ProviderToolCall, ReasoningContentType, ReasoningDetail, ToolResultContentPart, Usage } from "@anvia/core/completion";
2
+ import { AgentInteractionRequest, AgentInteractionResponse } from "@anvia/core/agent/interactions";
3
+ import { GuardrailDecisionRecord } from "@anvia/core/guardrails";
4
+ import { MemoryCompactionInfo } from "@anvia/core/memory";
5
+ declare const CLIENT_STREAM_PROTOCOL: "anvia.client.v3";
6
+ type ClientDataMap = Record<string, JsonValue>;
7
+ type ClientMetadata = JsonObject;
8
+ type ClientDataSchema<T extends JsonValue = JsonValue> = {
9
+ safeParse(value: unknown): {
10
+ success: true;
11
+ data: T;
12
+ } | {
13
+ success: false;
14
+ error?: unknown;
15
+ };
16
+ };
17
+ type ClientDataSchemas<TData extends ClientDataMap> = { [Name in keyof TData]: ClientDataSchema<TData[Name]>; };
18
+ type ClientMetadataSchema<TMetadata extends JsonObject = JsonObject> = ClientDataSchema<TMetadata>;
19
+ type UIMessageRole = "system" | "user" | "assistant" | "tool";
20
+ type ClientStreamError = {
21
+ name?: string;
22
+ message: string;
23
+ code?: string;
24
+ retryable?: boolean;
25
+ details?: JsonValue;
26
+ };
27
+ type UIError = ClientStreamError;
28
+ type UIMessageGeneration = {
29
+ runId?: string;
30
+ status?: "completed" | "blocked" | "suspended" | "cancelled" | "error";
31
+ usage?: Usage;
32
+ contextUsage?: ContextUsage;
33
+ trace?: {
34
+ observer: string;
35
+ traceId?: string;
36
+ observationId?: string;
37
+ };
38
+ memoryCompaction?: MemoryCompactionInfo;
39
+ };
40
+ type UIMessage<Metadata extends JsonObject = JsonObject, Data extends ClientDataMap = ClientDataMap> = Readonly<{
41
+ id: string;
42
+ role: UIMessageRole;
43
+ parts: readonly UIMessagePart<Data>[];
44
+ modelMessageId?: string;
45
+ metadata?: Metadata;
46
+ generation?: UIMessageGeneration;
47
+ }>;
48
+ type UIAttachment = {
49
+ id: string;
50
+ type: "image" | "document" | "file";
51
+ name?: string;
52
+ mediaType?: string;
53
+ url?: string;
54
+ data?: string;
55
+ text?: string;
56
+ detail?: ImageDetail;
57
+ metadata?: JsonValue;
58
+ };
59
+ type CreateUIAttachment = Omit<UIAttachment, "id"> & {
60
+ id?: string;
61
+ };
62
+ type UIDataPart<Data extends ClientDataMap> = { [Name in keyof Data & string]: {
63
+ id: string;
64
+ type: "data";
65
+ name: Name;
66
+ data: Data[Name];
67
+ }; }[keyof Data & string];
68
+ type UIToolMessagePartBase = {
69
+ id: string;
70
+ type: "tool";
71
+ toolName: string;
72
+ toolCallId: string;
73
+ callId?: string;
74
+ internalCallId?: string;
75
+ turn?: number;
76
+ signature?: string;
77
+ };
78
+ type UIToolMessagePart = (UIToolMessagePartBase & {
79
+ state: "input-streaming";
80
+ input: string;
81
+ }) | (UIToolMessagePartBase & {
82
+ state: "input-available";
83
+ input: JsonValue;
84
+ }) | (UIToolMessagePartBase & {
85
+ state: "output-available";
86
+ input: JsonValue;
87
+ output: JsonValue;
88
+ resultContent?: readonly ToolResultContentPart[];
89
+ }) | (UIToolMessagePartBase & {
90
+ state: "error";
91
+ input: JsonValue;
92
+ error: UIError;
93
+ });
94
+ type UIMessagePart<Data extends ClientDataMap = ClientDataMap> = {
95
+ id: string;
96
+ type: "text";
97
+ text: string;
98
+ signature?: string;
99
+ } | {
100
+ id: string;
101
+ type: "reasoning";
102
+ text: string;
103
+ reasoningId?: string;
104
+ content?: readonly ReasoningDetail[];
105
+ } | UIToolMessagePart | {
106
+ id: string;
107
+ type: "source";
108
+ source: CompletionSource;
109
+ } | UIDataPart<Data> | {
110
+ id: string;
111
+ type: "attachment";
112
+ attachment: UIAttachment;
113
+ } | {
114
+ id: string;
115
+ type: "error";
116
+ error: UIError;
117
+ };
118
+ type ClientStreamCursor = {
119
+ streamId: string;
120
+ after: number;
121
+ };
122
+ type ClientStreamRequest<Metadata extends JsonObject = JsonObject> = {
123
+ type: "messages";
124
+ messages: readonly Message[];
125
+ metadata?: Metadata;
126
+ resume?: ClientStreamCursor;
127
+ } | {
128
+ type: "interaction_response";
129
+ interactionId: string;
130
+ response: AgentInteractionResponse;
131
+ metadata?: Metadata;
132
+ resume?: ClientStreamCursor;
133
+ };
134
+ type ClientCompletionRequest<Metadata extends JsonObject = JsonObject> = {
135
+ prompt: string;
136
+ metadata?: Metadata;
137
+ };
138
+ type ClientStreamScope = {
139
+ agentId?: string;
140
+ agentName?: string;
141
+ parentRunId?: string;
142
+ parentToolName?: string;
143
+ parentToolCallId?: string;
144
+ parentInternalToolCallId?: string;
145
+ };
146
+ type ClientInteraction = Readonly<{
147
+ request: AgentInteractionRequest;
148
+ runId: string;
149
+ status: "pending" | "responded" | "cancelled";
150
+ }>;
151
+ type ClientStreamEventBase = {
152
+ runId: string;
153
+ turn?: number;
154
+ scope?: ClientStreamScope;
155
+ };
156
+ type ClientDataEvent<TData extends ClientDataMap> = { [Name in keyof TData & string]: {
157
+ type: "data";
158
+ name: Name;
159
+ data: TData[Name];
160
+ transient?: boolean;
161
+ }; }[keyof TData & string];
162
+ type ClientStandardStreamEvent<Metadata extends JsonObject, Data extends ClientDataMap> = {
163
+ type: "run_start";
164
+ source: "completion" | "agent";
165
+ metadata?: Metadata;
166
+ } | {
167
+ type: "turn_start";
168
+ } | {
169
+ type: "generation_start";
170
+ model?: {
171
+ provider: string;
172
+ modelId: string;
173
+ };
174
+ } | {
175
+ /** Discards an unfinished generation attempt while retaining message identity. */
176
+ type: "message_reset";
177
+ messageId: string;
178
+ } | {
179
+ type: "message_start";
180
+ messageId: string;
181
+ role: "assistant";
182
+ metadata?: Metadata;
183
+ } | {
184
+ type: "text_start";
185
+ messageId: string;
186
+ partId: string;
187
+ } | {
188
+ type: "text_delta";
189
+ messageId: string;
190
+ partId: string;
191
+ delta: string;
192
+ } | {
193
+ type: "text_end";
194
+ messageId: string;
195
+ partId: string;
196
+ text?: string;
197
+ signature?: string;
198
+ } | {
199
+ type: "reasoning_start";
200
+ messageId: string;
201
+ partId: string;
202
+ reasoningId?: string;
203
+ } | {
204
+ type: "reasoning_delta";
205
+ messageId: string;
206
+ partId: string;
207
+ delta: string;
208
+ contentType?: ReasoningContentType;
209
+ signature?: string;
210
+ } | {
211
+ type: "reasoning_end";
212
+ messageId: string;
213
+ partId: string;
214
+ text?: string;
215
+ content?: readonly ReasoningDetail[];
216
+ } | {
217
+ type: "tool_call_start";
218
+ messageId: string;
219
+ partId: string;
220
+ toolCallId: string;
221
+ callId?: string;
222
+ toolName?: string;
223
+ } | {
224
+ type: "tool_call_delta";
225
+ messageId: string;
226
+ partId: string;
227
+ toolCallId: string;
228
+ callId?: string;
229
+ toolName?: string;
230
+ delta: string;
231
+ mode: "append" | "replace";
232
+ signature?: string;
233
+ } | {
234
+ type: "tool_call_end";
235
+ messageId: string;
236
+ partId: string;
237
+ toolCallId: string;
238
+ callId?: string;
239
+ toolName: string;
240
+ input: JsonValue;
241
+ signature?: string;
242
+ } | {
243
+ type: "tool_result";
244
+ messageId: string;
245
+ partId: string;
246
+ toolCallId: string;
247
+ callId?: string;
248
+ internalCallId?: string;
249
+ toolName: string;
250
+ input: JsonValue;
251
+ result: {
252
+ status: "success";
253
+ output: JsonValue;
254
+ content?: readonly ToolResultContentPart[];
255
+ } | {
256
+ status: "error";
257
+ error: ClientStreamError;
258
+ };
259
+ } | {
260
+ type: "source";
261
+ messageId: string;
262
+ partId: string;
263
+ source: CompletionSource;
264
+ } | {
265
+ type: "attachment";
266
+ messageId: string;
267
+ partId: string;
268
+ attachment: UIAttachment;
269
+ } | {
270
+ type: "provider_tool_call";
271
+ toolCall: ProviderToolCall;
272
+ } | {
273
+ type: "interaction";
274
+ interaction: AgentInteractionRequest;
275
+ } | {
276
+ type: "guardrail_decision";
277
+ decision: GuardrailDecisionRecord;
278
+ } | ({
279
+ type: "memory_compaction";
280
+ } & MemoryCompactionInfo) | {
281
+ type: "message_end";
282
+ messageId: string;
283
+ modelMessageId?: string;
284
+ /** Authoritative model-authored parts after provider normalization and guardrails. */
285
+ parts?: readonly UIMessagePart<Data>[];
286
+ usage?: Usage;
287
+ contextUsage?: ContextUsage;
288
+ metadata?: Metadata;
289
+ } | {
290
+ type: "turn_end";
291
+ usage?: Usage;
292
+ contextUsage?: ContextUsage;
293
+ firstDeltaMs?: number;
294
+ } | {
295
+ type: "run_end";
296
+ status: "completed" | "blocked" | "suspended" | "cancelled" | "error";
297
+ text?: string;
298
+ output?: JsonValue;
299
+ usage?: Usage;
300
+ contextUsage?: ContextUsage;
301
+ trace?: {
302
+ observer: string;
303
+ traceId?: string;
304
+ observationId?: string;
305
+ };
306
+ memoryCompaction?: MemoryCompactionInfo;
307
+ metadata?: Metadata;
308
+ } | {
309
+ type: "error";
310
+ error: ClientStreamError;
311
+ usage?: Usage;
312
+ };
313
+ type ClientStreamEvent<Metadata extends JsonObject = JsonObject, Data extends ClientDataMap = ClientDataMap> = ClientStreamEventBase & (ClientStandardStreamEvent<Metadata, Data> | ClientDataEvent<Data>);
314
+ type ClientStream<Metadata extends JsonObject = JsonObject, Data extends ClientDataMap = ClientDataMap> = AsyncIterable<ClientStreamEvent<Metadata, Data>>;
315
+ type ClientStreamFrame<Metadata extends JsonObject = JsonObject, Data extends ClientDataMap = ClientDataMap> = {
316
+ type: "stream_start";
317
+ protocol: typeof CLIENT_STREAM_PROTOCOL;
318
+ streamId: string;
319
+ eventId: 0;
320
+ resumable: boolean;
321
+ } | {
322
+ type: "stream_event";
323
+ streamId: string;
324
+ eventId: number;
325
+ event: ClientStreamEvent<Metadata, Data>;
326
+ } | {
327
+ type: "stream_end";
328
+ streamId: string;
329
+ eventId: number;
330
+ status: "completed" | "error" | "missing";
331
+ };
332
+ type ClientTransportSendOptions<TRequest> = {
333
+ request: TRequest;
334
+ abortSignal?: AbortSignal;
335
+ headers?: HeadersInit;
336
+ resume?: ClientStreamCursor;
337
+ };
338
+ type ClientTransport<TRequest = ClientStreamRequest, Data extends ClientDataMap = ClientDataMap, Metadata extends JsonObject = JsonObject> = {
339
+ readonly _types?: {
340
+ metadata: Metadata;
341
+ data: Data;
342
+ };
343
+ send(options: ClientTransportSendOptions<TRequest>): AsyncIterable<ClientStreamFrame<Metadata, Data>>;
344
+ };
345
+ type ClientErrorMapper = (error: unknown) => ClientStreamError;
346
+ type ClientOutputMapper = (output: unknown) => JsonValue | undefined;
347
+ export { UIMessage as C, UIToolMessagePart as D, UIMessageRole as E, UIError as S, UIMessagePart as T, ClientStreamScope as _, ClientDataSchemas as a, CreateUIAttachment as b, ClientMetadata as c, ClientStream as d, ClientStreamCursor as f, ClientStreamRequest as g, ClientStreamFrame as h, ClientDataSchema as i, ClientMetadataSchema as l, ClientStreamEvent as m, ClientCompletionRequest as n, ClientErrorMapper as o, ClientStreamError as p, ClientDataMap as r, ClientInteraction as s, CLIENT_STREAM_PROTOCOL as t, ClientOutputMapper as u, ClientTransport as v, UIMessageGeneration as w, UIAttachment as x, ClientTransportSendOptions as y };
348
+ //# sourceMappingURL=types-Bt4tUcST.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-Bt4tUcST.d.ts","names":[],"sources":["../src/types.ts"],"mappings":"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"}