@sveda-ai/core 0.1.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sveda AI Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @sveda-ai/core
2
+
3
+ Framework-agnostic Sveda JS client — streaming, tools, and `session.send`.
4
+
5
+ ```bash
6
+ npm install @sveda-ai/core
7
+ ```
@@ -0,0 +1,79 @@
1
+ import { SvedaContextRegistry } from './context.js';
2
+ import { type SvedaStreamProtocolMode } from './streaming.js';
3
+ import { SvedaToolRegistry } from './tools.js';
4
+ import { type SvedaChatHistoryDetail, type SvedaChatHistorySummary, type SvedaDisplayMessage, type SvedaSessionStatus } from './types.js';
5
+ export interface SvedaClientEndpoints {
6
+ stream: string;
7
+ message?: string;
8
+ histories?: string;
9
+ history?: (chatId: string) => string;
10
+ documentsExtract?: string;
11
+ }
12
+ export interface SvedaClientOptions {
13
+ endpoints: SvedaClientEndpoints;
14
+ protocolMode?: SvedaStreamProtocolMode;
15
+ headers?: Record<string, string> | (() => Record<string, string>);
16
+ credentials?: RequestCredentials;
17
+ tools?: SvedaToolRegistry;
18
+ context?: SvedaContextRegistry;
19
+ autoSubmitFrontendToolResults?: boolean;
20
+ fetchFn?: typeof fetch;
21
+ }
22
+ export interface SvedaSendOptions {
23
+ context?: Record<string, unknown>;
24
+ model?: string;
25
+ provider?: string;
26
+ options?: Record<string, unknown>;
27
+ files?: Array<{
28
+ name: string;
29
+ mediaType?: string;
30
+ url?: string;
31
+ }>;
32
+ }
33
+ type SessionListener = (payload: unknown) => void;
34
+ export declare class SvedaChatSession {
35
+ private readonly client;
36
+ readonly chatId: string;
37
+ messages: SvedaDisplayMessage[];
38
+ status: SvedaSessionStatus;
39
+ private readonly emitter;
40
+ private abortController;
41
+ private pendingFrontendResults;
42
+ constructor(chatId: string, client: SvedaClient);
43
+ on(event: string, listener: SessionListener): () => void;
44
+ get isStreaming(): boolean;
45
+ setMessages(messages: SvedaDisplayMessage[]): void;
46
+ stop(): void;
47
+ send(text: string, sendOptions?: SvedaSendOptions): Promise<void>;
48
+ continueAfterMaxSteps(sendOptions?: SvedaSendOptions): Promise<void>;
49
+ private buildRequestBody;
50
+ private streamRequest;
51
+ private applyStreamEvent;
52
+ private executeFrontendTool;
53
+ }
54
+ export declare class SvedaClient {
55
+ readonly endpoints: SvedaClientEndpoints;
56
+ readonly protocolMode: SvedaStreamProtocolMode;
57
+ readonly toolRegistry: SvedaToolRegistry;
58
+ readonly contextRegistry: SvedaContextRegistry;
59
+ readonly autoSubmitFrontendToolResults: boolean;
60
+ readonly fetchImpl: typeof fetch;
61
+ readonly credentials?: RequestCredentials;
62
+ private readonly headers?;
63
+ private sessions;
64
+ constructor(options: SvedaClientOptions);
65
+ resolveHeaders(): Record<string, string>;
66
+ streamAcceptHeaders(): Record<string, string>;
67
+ session(chatId: string): SvedaChatSession;
68
+ createSession(chatId?: string): SvedaChatSession;
69
+ destroySession(chatId: string): void;
70
+ private historiesUrl;
71
+ private historyUrl;
72
+ listHistories(): Promise<SvedaChatHistorySummary[]>;
73
+ getHistory(chatId: string): Promise<SvedaChatHistoryDetail>;
74
+ renameHistory(chatId: string, title: string): Promise<void>;
75
+ deleteHistory(chatId: string): Promise<void>;
76
+ private normalizeHistory;
77
+ }
78
+ export {};
79
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,367 @@
1
+ import { SvedaContextRegistry } from './context.js';
2
+ import { iterateSvedaStream } from './streaming.js';
3
+ import { SvedaToolRegistry } from './tools.js';
4
+ import { createMessageId, messageText, } from './types.js';
5
+ class SessionEmitter {
6
+ listeners = new Map();
7
+ on(event, listener) {
8
+ if (!this.listeners.has(event)) {
9
+ this.listeners.set(event, new Set());
10
+ }
11
+ this.listeners.get(event).add(listener);
12
+ return () => this.off(event, listener);
13
+ }
14
+ off(event, listener) {
15
+ this.listeners.get(event)?.delete(listener);
16
+ }
17
+ emit(event, payload) {
18
+ for (const listener of this.listeners.get(event) ?? []) {
19
+ listener(payload);
20
+ }
21
+ }
22
+ }
23
+ export class SvedaChatSession {
24
+ client;
25
+ chatId;
26
+ messages = [];
27
+ status = 'idle';
28
+ emitter = new SessionEmitter();
29
+ abortController = null;
30
+ pendingFrontendResults = [];
31
+ constructor(chatId, client) {
32
+ this.client = client;
33
+ this.chatId = chatId;
34
+ }
35
+ on(event, listener) {
36
+ return this.emitter.on(event, listener);
37
+ }
38
+ get isStreaming() {
39
+ return this.status === 'streaming' || this.status === 'submitted';
40
+ }
41
+ setMessages(messages) {
42
+ this.messages = messages;
43
+ this.emitter.emit('messages', this.messages);
44
+ }
45
+ stop() {
46
+ this.abortController?.abort();
47
+ }
48
+ async send(text, sendOptions = {}) {
49
+ const userMessage = {
50
+ id: createMessageId(),
51
+ role: 'user',
52
+ parts: [
53
+ { type: 'text', text },
54
+ ...(sendOptions.files ?? []).map((file) => ({
55
+ type: 'file',
56
+ name: file.name,
57
+ mediaType: file.mediaType,
58
+ url: file.url,
59
+ })),
60
+ ],
61
+ };
62
+ this.messages = [...this.messages, userMessage];
63
+ this.emitter.emit('messages', this.messages);
64
+ await this.streamRequest(text, sendOptions);
65
+ }
66
+ async continueAfterMaxSteps(sendOptions = {}) {
67
+ await this.streamRequest('Continue', sendOptions);
68
+ }
69
+ buildRequestBody(prompt, sendOptions) {
70
+ const context = {
71
+ ...this.client.contextRegistry.snapshot(),
72
+ ...(sendOptions.context ?? {}),
73
+ };
74
+ return {
75
+ messages: this.messages.map(message => ({
76
+ id: message.id,
77
+ role: message.role,
78
+ content: messageText(message),
79
+ parts: message.parts,
80
+ })),
81
+ prompt,
82
+ chatId: this.chatId,
83
+ context,
84
+ clientTools: this.client.toolRegistry.list(),
85
+ model: sendOptions.model,
86
+ provider: sendOptions.provider,
87
+ options: sendOptions.options,
88
+ };
89
+ }
90
+ async streamRequest(prompt, sendOptions) {
91
+ const requestBody = this.buildRequestBody(prompt, sendOptions);
92
+ this.status = 'submitted';
93
+ this.emitter.emit('status', this.status);
94
+ this.abortController = new AbortController();
95
+ const assistantMessage = {
96
+ id: createMessageId(),
97
+ role: 'assistant',
98
+ parts: [],
99
+ };
100
+ this.messages = [...this.messages, assistantMessage];
101
+ this.emitter.emit('messages', this.messages);
102
+ try {
103
+ const response = await this.client.fetchImpl(this.client.endpoints.stream, {
104
+ method: 'POST',
105
+ headers: {
106
+ 'Content-Type': 'application/json',
107
+ ...this.client.streamAcceptHeaders(),
108
+ ...this.client.resolveHeaders(),
109
+ },
110
+ credentials: this.client.credentials,
111
+ body: JSON.stringify(requestBody),
112
+ signal: this.abortController.signal,
113
+ });
114
+ if (!response.ok) {
115
+ throw new Error(`[sveda] Stream request failed: ${response.status}`);
116
+ }
117
+ this.status = 'streaming';
118
+ this.emitter.emit('status', this.status);
119
+ for await (const event of iterateSvedaStream(response, this.client.protocolMode)) {
120
+ this.applyStreamEvent(event);
121
+ }
122
+ this.status = 'idle';
123
+ this.emitter.emit('status', this.status);
124
+ if (this.client.autoSubmitFrontendToolResults &&
125
+ this.pendingFrontendResults.length > 0) {
126
+ const results = this.pendingFrontendResults;
127
+ this.pendingFrontendResults = [];
128
+ this.messages = [...this.messages, ...results];
129
+ this.emitter.emit('messages', this.messages);
130
+ await this.streamRequest('tool_results', sendOptions);
131
+ }
132
+ }
133
+ catch (error) {
134
+ if (error instanceof DOMException && error.name === 'AbortError') {
135
+ this.status = 'idle';
136
+ this.emitter.emit('status', this.status);
137
+ return;
138
+ }
139
+ this.status = 'error';
140
+ this.emitter.emit('status', this.status);
141
+ this.emitter.emit('error', error);
142
+ throw error;
143
+ }
144
+ }
145
+ applyStreamEvent(event) {
146
+ this.emitter.emit('event', event);
147
+ const assistant = this.messages[this.messages.length - 1];
148
+ if (!assistant || assistant.role !== 'assistant') {
149
+ return;
150
+ }
151
+ const mutate = (mutator) => {
152
+ const updated = {
153
+ ...assistant,
154
+ parts: mutator(assistant.parts),
155
+ };
156
+ this.messages = [...this.messages.slice(0, -1), updated];
157
+ this.emitter.emit('messages', this.messages);
158
+ };
159
+ switch (event.type) {
160
+ case 'text.delta':
161
+ mutate(parts => {
162
+ const last = parts[parts.length - 1];
163
+ if (last && last.type === 'text') {
164
+ return [...parts.slice(0, -1), { ...last, text: last.text + event.delta }];
165
+ }
166
+ return [...parts, { type: 'text', text: event.delta }];
167
+ });
168
+ break;
169
+ case 'reasoning.delta':
170
+ mutate(parts => {
171
+ const last = parts[parts.length - 1];
172
+ if (last && last.type === 'reasoning') {
173
+ return [...parts.slice(0, -1), { ...last, text: last.text + event.delta }];
174
+ }
175
+ return [...parts, { type: 'reasoning', text: event.delta }];
176
+ });
177
+ break;
178
+ case 'tool.call':
179
+ mutate(parts => [
180
+ ...parts,
181
+ {
182
+ type: 'tool-call',
183
+ toolCallId: event.toolCallId,
184
+ toolName: event.toolName,
185
+ target: event.target,
186
+ input: event.input,
187
+ },
188
+ ]);
189
+ if (event.target === 'frontend') {
190
+ void this.executeFrontendTool(event);
191
+ }
192
+ break;
193
+ case 'tool.result':
194
+ mutate(parts => [
195
+ ...parts,
196
+ {
197
+ type: 'tool-result',
198
+ toolCallId: event.toolCallId,
199
+ toolName: event.toolName,
200
+ output: event.output,
201
+ renderHint: event.renderHint,
202
+ renderData: event.renderData,
203
+ },
204
+ ]);
205
+ break;
206
+ case 'tool.progress':
207
+ this.emitter.emit('toolProgress', event);
208
+ break;
209
+ case 'context.usage':
210
+ this.emitter.emit('contextUsage', event);
211
+ break;
212
+ case 'chat.title':
213
+ this.emitter.emit('title', event.title);
214
+ break;
215
+ case 'max_steps':
216
+ this.emitter.emit('maxSteps', event);
217
+ break;
218
+ case 'message.end':
219
+ this.emitter.emit('finish', event);
220
+ break;
221
+ case 'error':
222
+ this.status = 'error';
223
+ this.emitter.emit('status', this.status);
224
+ this.emitter.emit('error', event);
225
+ this.abortController?.abort();
226
+ break;
227
+ }
228
+ }
229
+ async executeFrontendTool(event) {
230
+ let output;
231
+ try {
232
+ output = await this.client.toolRegistry.execute(event.toolName, event.input, {
233
+ chatId: this.chatId,
234
+ toolCallId: event.toolCallId,
235
+ });
236
+ }
237
+ catch (error) {
238
+ output = { error: error instanceof Error ? error.message : String(error) };
239
+ }
240
+ this.pendingFrontendResults.push({
241
+ id: createMessageId(),
242
+ role: 'tool',
243
+ parts: [
244
+ {
245
+ type: 'tool-result',
246
+ toolCallId: event.toolCallId,
247
+ toolName: event.toolName,
248
+ output,
249
+ },
250
+ ],
251
+ });
252
+ }
253
+ }
254
+ export class SvedaClient {
255
+ endpoints;
256
+ protocolMode;
257
+ toolRegistry;
258
+ contextRegistry;
259
+ autoSubmitFrontendToolResults;
260
+ fetchImpl;
261
+ credentials;
262
+ headers;
263
+ sessions = new Map();
264
+ constructor(options) {
265
+ this.endpoints = options.endpoints;
266
+ this.protocolMode = options.protocolMode ?? 'sveda';
267
+ this.headers = options.headers;
268
+ this.credentials = options.credentials;
269
+ this.toolRegistry = options.tools ?? new SvedaToolRegistry();
270
+ this.contextRegistry = options.context ?? new SvedaContextRegistry();
271
+ this.autoSubmitFrontendToolResults = options.autoSubmitFrontendToolResults ?? true;
272
+ this.fetchImpl = options.fetchFn ?? ((input, init) => globalThis.fetch(input, init));
273
+ }
274
+ resolveHeaders() {
275
+ if (typeof this.headers === 'function') {
276
+ return this.headers();
277
+ }
278
+ return this.headers ?? {};
279
+ }
280
+ streamAcceptHeaders() {
281
+ if (this.protocolMode === 'sveda') {
282
+ return { Accept: 'application/vnd.sveda.stream+json' };
283
+ }
284
+ return { Accept: 'text/event-stream', 'X-Sveda-Protocol': 'vercel' };
285
+ }
286
+ session(chatId) {
287
+ if (!this.sessions.has(chatId)) {
288
+ this.sessions.set(chatId, new SvedaChatSession(chatId, this));
289
+ }
290
+ return this.sessions.get(chatId);
291
+ }
292
+ createSession(chatId = createMessageId()) {
293
+ return this.session(chatId);
294
+ }
295
+ destroySession(chatId) {
296
+ this.sessions.get(chatId)?.stop();
297
+ this.sessions.delete(chatId);
298
+ }
299
+ historiesUrl() {
300
+ if (!this.endpoints.histories) {
301
+ throw new Error('[sveda] histories endpoint is not configured');
302
+ }
303
+ return this.endpoints.histories;
304
+ }
305
+ historyUrl(chatId) {
306
+ if (this.endpoints.history) {
307
+ return this.endpoints.history(chatId);
308
+ }
309
+ return `${this.historiesUrl().replace(/\/$/, '')}/${encodeURIComponent(chatId)}`;
310
+ }
311
+ async listHistories() {
312
+ const response = await this.fetchImpl(this.historiesUrl(), {
313
+ headers: { Accept: 'application/json', ...this.resolveHeaders() },
314
+ credentials: this.credentials,
315
+ });
316
+ if (!response.ok) {
317
+ throw new Error(`[sveda] Failed to load chat histories: ${response.status}`);
318
+ }
319
+ const data = (await response.json());
320
+ return (data.histories ?? []).map(history => this.normalizeHistory(history));
321
+ }
322
+ async getHistory(chatId) {
323
+ const response = await this.fetchImpl(this.historyUrl(chatId), {
324
+ headers: { Accept: 'application/json', ...this.resolveHeaders() },
325
+ credentials: this.credentials,
326
+ });
327
+ if (!response.ok) {
328
+ throw new Error(`[sveda] Failed to load chat history ${chatId}: ${response.status}`);
329
+ }
330
+ const data = (await response.json());
331
+ return this.normalizeHistory(data.history);
332
+ }
333
+ async renameHistory(chatId, title) {
334
+ const response = await this.fetchImpl(this.historyUrl(chatId), {
335
+ method: 'PATCH',
336
+ headers: {
337
+ 'Content-Type': 'application/json',
338
+ Accept: 'application/json',
339
+ ...this.resolveHeaders(),
340
+ },
341
+ credentials: this.credentials,
342
+ body: JSON.stringify({ title }),
343
+ });
344
+ if (!response.ok) {
345
+ throw new Error(`[sveda] Failed to rename chat ${chatId}: ${response.status}`);
346
+ }
347
+ }
348
+ async deleteHistory(chatId) {
349
+ const response = await this.fetchImpl(this.historyUrl(chatId), {
350
+ method: 'DELETE',
351
+ headers: { Accept: 'application/json', ...this.resolveHeaders() },
352
+ credentials: this.credentials,
353
+ });
354
+ if (!response.ok) {
355
+ throw new Error(`[sveda] Failed to delete chat ${chatId}: ${response.status}`);
356
+ }
357
+ }
358
+ normalizeHistory(history) {
359
+ const fromChatId = typeof history.chatId === 'string' ? history.chatId.trim() : '';
360
+ if (fromChatId !== '') {
361
+ return { ...history, chatId: fromChatId };
362
+ }
363
+ const fromId = typeof history.id === 'string' ? history.id.trim() : '';
364
+ return { ...history, chatId: fromId };
365
+ }
366
+ }
367
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface SvedaContextReadable {
2
+ description: string;
3
+ value: unknown | (() => unknown);
4
+ }
5
+ export declare class SvedaContextRegistry {
6
+ private readables;
7
+ register(description: string, value: unknown | (() => unknown)): () => void;
8
+ unregister(description: string): void;
9
+ snapshot(): Record<string, unknown>;
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;CAClC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAA2C;IAE5D,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,MAAM,IAAI;IAO3E,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIrC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAenC,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,25 @@
1
+ export class SvedaContextRegistry {
2
+ readables = new Map();
3
+ register(description, value) {
4
+ const readable = { description, value };
5
+ this.readables.set(description, readable);
6
+ return () => this.unregister(description);
7
+ }
8
+ unregister(description) {
9
+ this.readables.delete(description);
10
+ }
11
+ snapshot() {
12
+ const context = {};
13
+ for (const readable of this.readables.values()) {
14
+ const value = typeof readable.value === 'function'
15
+ ? readable.value()
16
+ : readable.value;
17
+ context[readable.description] = value;
18
+ }
19
+ return context;
20
+ }
21
+ clear() {
22
+ this.readables.clear();
23
+ }
24
+ }
25
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,oBAAoB;IACvB,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE5D,QAAQ,CAAC,WAAmB,EAAE,KAAgC;QAC5D,MAAM,QAAQ,GAAyB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE1C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,UAAU,CAAC,WAAmB;QAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,GAA4B,EAAE,CAAC;QAE5C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GACT,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU;gBAClC,CAAC,CAAE,QAAQ,CAAC,KAAuB,EAAE;gBACrC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAErB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QACxC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export * from './client.js';
2
+ export * from './context.js';
3
+ export * from './streaming.js';
4
+ export * from './tools.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from './client.js';
2
+ export * from './context.js';
3
+ export * from './streaming.js';
4
+ export * from './tools.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SvedaStreamEvent } from '@sveda-ai/protocol';
2
+ export type SvedaStreamProtocolMode = 'sveda' | 'vercel';
3
+ export declare function iterateSvedaStream(response: Response, mode?: SvedaStreamProtocolMode): AsyncGenerator<SvedaStreamEvent>;
4
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAwDzD,wBAAuB,kBAAkB,CACvC,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,uBAAiC,GACtC,cAAc,CAAC,gBAAgB,CAAC,CAWlC"}
@@ -0,0 +1,60 @@
1
+ import { parseSvedaStreamLine, vercelDataPartToSvedaEvent, } from '@sveda-ai/protocol';
2
+ async function* iterateStreamLines(body) {
3
+ const reader = body.getReader();
4
+ const decoder = new TextDecoder();
5
+ let buffer = '';
6
+ try {
7
+ while (true) {
8
+ const { done, value } = await reader.read();
9
+ if (done) {
10
+ break;
11
+ }
12
+ buffer += decoder.decode(value, { stream: true });
13
+ let newlineIndex = buffer.indexOf('\n');
14
+ while (newlineIndex >= 0) {
15
+ yield buffer.slice(0, newlineIndex);
16
+ buffer = buffer.slice(newlineIndex + 1);
17
+ newlineIndex = buffer.indexOf('\n');
18
+ }
19
+ }
20
+ const tail = buffer.trim();
21
+ if (tail) {
22
+ yield tail;
23
+ }
24
+ }
25
+ finally {
26
+ reader.releaseLock();
27
+ }
28
+ }
29
+ function parseVercelLine(line) {
30
+ const trimmed = line.trim();
31
+ if (!trimmed.startsWith('data:')) {
32
+ return null;
33
+ }
34
+ const payload = trimmed.slice(5).trim();
35
+ if (!payload || payload === '[DONE]') {
36
+ return null;
37
+ }
38
+ try {
39
+ const part = JSON.parse(payload);
40
+ if (!part || typeof part.type !== 'string') {
41
+ return null;
42
+ }
43
+ return vercelDataPartToSvedaEvent(part);
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ export async function* iterateSvedaStream(response, mode = 'sveda') {
50
+ if (!response.body) {
51
+ throw new Error('[sveda] Stream response has no body');
52
+ }
53
+ for await (const line of iterateStreamLines(response.body)) {
54
+ const event = mode === 'vercel' ? parseVercelLine(line) : parseSvedaStreamLine(line);
55
+ if (event) {
56
+ yield event;
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAE3B,MAAM,oBAAoB,CAAC;AAI5B,KAAK,SAAS,CAAC,CAAC,kBAAkB,CAAC,IAAgC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM;YACR,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,YAAY,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACpC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACxC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC;QACb,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,0BAA0B,CAAC,IAAkD,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CACvC,QAAkB,EAClB,OAAgC,OAAO;IAEvC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}