@illalabs/sdk 0.4.1-canary-dev-39a7ed21 → 0.4.1-canary-beta-e22dfc29
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/dist/src/chat/Chat.d.ts +59 -1
- package/dist/src/chat/Chat.d.ts.map +1 -1
- package/dist/src/chat/Chat.js +82 -3
- package/dist/src/chat/Chat.js.map +1 -1
- package/dist/src/chat/PlanStream.d.ts +129 -0
- package/dist/src/chat/PlanStream.d.ts.map +1 -0
- package/dist/src/chat/PlanStream.js +249 -0
- package/dist/src/chat/PlanStream.js.map +1 -0
- package/dist/src/chat/index.d.ts +2 -0
- package/dist/src/chat/index.d.ts.map +1 -1
- package/dist/src/chat/index.js +1 -0
- package/dist/src/chat/index.js.map +1 -1
- package/dist/src/interfaces/chat.interface.d.ts +4 -4
- package/dist/src/interfaces/chat.interface.d.ts.map +1 -1
- package/dist/src/interfaces/coreApiProvider.interface.d.ts +20 -2
- package/dist/src/interfaces/coreApiProvider.interface.d.ts.map +1 -1
- package/dist/src/providers/coreApiProvider/CoreApiProvider.d.ts +61 -2
- package/dist/src/providers/coreApiProvider/CoreApiProvider.d.ts.map +1 -1
- package/dist/src/providers/coreApiProvider/CoreApiProvider.js +117 -6
- package/dist/src/providers/coreApiProvider/CoreApiProvider.js.map +1 -1
- package/dist/src/providers/coreApiProvider/errors/SignatureSubmissionError.d.ts +9 -0
- package/dist/src/providers/coreApiProvider/errors/SignatureSubmissionError.d.ts.map +1 -0
- package/dist/src/providers/coreApiProvider/errors/SignatureSubmissionError.js +17 -0
- package/dist/src/providers/coreApiProvider/errors/SignatureSubmissionError.js.map +1 -0
- package/dist/src/providers/coreApiProvider/errors/index.d.ts +1 -0
- package/dist/src/providers/coreApiProvider/errors/index.d.ts.map +1 -1
- package/dist/src/providers/coreApiProvider/errors/index.js +1 -0
- package/dist/src/providers/coreApiProvider/errors/index.js.map +1 -1
- package/dist/src/providers/coreApiProvider/index.d.ts +1 -1
- package/dist/src/providers/coreApiProvider/index.d.ts.map +1 -1
- package/dist/src/providers/coreApiProvider/index.js.map +1 -1
- package/dist/src/providers/coreApiProvider/interfaces/CoreApiProviderRoutes.interface.d.ts +4 -0
- package/dist/src/providers/coreApiProvider/interfaces/CoreApiProviderRoutes.interface.d.ts.map +1 -1
- package/dist/src/providers/coreApiProvider/types.d.ts +16 -4
- package/dist/src/providers/coreApiProvider/types.d.ts.map +1 -1
- package/dist/src/sdk.d.ts +73 -8
- package/dist/src/sdk.d.ts.map +1 -1
- package/dist/src/sdk.js +78 -4
- package/dist/src/sdk.js.map +1 -1
- package/dist/src/streaming/parseSSE.d.ts.map +1 -1
- package/dist/src/streaming/parseSSE.js +18 -2
- package/dist/src/streaming/parseSSE.js.map +1 -1
- package/dist/src/telemetry/TelemetryClient.d.ts.map +1 -1
- package/dist/src/telemetry/TelemetryClient.js +7 -2
- package/dist/src/telemetry/TelemetryClient.js.map +1 -1
- package/package.json +2 -2
package/dist/src/chat/Chat.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { MessageHistoryType } from "@illalabs/interfaces";
|
|
1
|
+
import type { ExecutionPlan, MessageHistoryType, SignatureContinuation } from "@illalabs/interfaces";
|
|
2
2
|
import type { AwaitableActionDescriptor, AwaitActionResult } from "../asyncToolChecker/index.js";
|
|
3
3
|
import type { ChatContextSnapshot, ChatOptions, SendMessageOptions, SendMessageResult, SendMessageStreamingOptions } from "../interfaces/index.js";
|
|
4
4
|
import type { Prompt } from "../prompt/index.js";
|
|
5
|
+
import type { PlanStream } from "./PlanStream.js";
|
|
5
6
|
/**
|
|
6
7
|
* Represents a conversational session with the Illa Core API.
|
|
7
8
|
*/
|
|
@@ -96,5 +97,62 @@ export declare class Chat {
|
|
|
96
97
|
* @param snapshot Context snapshot to store.
|
|
97
98
|
*/
|
|
98
99
|
setContext(snapshot: ChatContextSnapshot): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Initiates execution of an approved plan via SSE streaming.
|
|
102
|
+
*
|
|
103
|
+
* Posts the approved plan to the API which responds with an SSE stream
|
|
104
|
+
* of execution events. The returned PlanStream allows subscribing to
|
|
105
|
+
* events like step progress, signature requests, and completion.
|
|
106
|
+
*
|
|
107
|
+
* @param plan The approved execution plan to execute
|
|
108
|
+
* @param options Optional request options including abort signal
|
|
109
|
+
* @returns A PlanStream for receiving execution events
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const stream = await chat.streamExecution(plan);
|
|
114
|
+
*
|
|
115
|
+
* stream.on('step_started', (event) => {
|
|
116
|
+
* console.log(`Step ${event.stepNumber}: ${event.description}`);
|
|
117
|
+
* });
|
|
118
|
+
*
|
|
119
|
+
* stream.on('signature_required', async (event) => {
|
|
120
|
+
* const signature = await wallet.signTransaction(event.transaction);
|
|
121
|
+
* await chat.submitSignature({
|
|
122
|
+
* planId: plan.planId,
|
|
123
|
+
* stepNumber: event.stepNumber,
|
|
124
|
+
* signature,
|
|
125
|
+
* });
|
|
126
|
+
* });
|
|
127
|
+
*
|
|
128
|
+
* stream.on('execution_complete', (event) => {
|
|
129
|
+
* console.log(`Execution ${event.status}: ${event.summary}`);
|
|
130
|
+
* });
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
streamExecution(plan: ExecutionPlan, options?: SendMessageOptions): Promise<PlanStream>;
|
|
134
|
+
/**
|
|
135
|
+
* Submits a signature during plan execution.
|
|
136
|
+
*
|
|
137
|
+
* When the server emits a `signature_required` event during plan execution,
|
|
138
|
+
* call this method to submit the signed transaction. The server will then
|
|
139
|
+
* resume execution from where it paused.
|
|
140
|
+
*
|
|
141
|
+
* @param data Signature continuation data including planId, stepNumber, and signature
|
|
142
|
+
* @param options Optional request options including abort signal
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* stream.on('signature_required', async (event) => {
|
|
147
|
+
* const signature = await wallet.signTransaction(event.transaction);
|
|
148
|
+
* await chat.submitSignature({
|
|
149
|
+
* planId: plan.planId,
|
|
150
|
+
* stepNumber: event.stepNumber,
|
|
151
|
+
* signature,
|
|
152
|
+
* });
|
|
153
|
+
* });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
submitSignature(data: SignatureContinuation, options?: SendMessageOptions): Promise<void>;
|
|
99
157
|
}
|
|
100
158
|
//# sourceMappingURL=Chat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/chat/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIR,kBAAkB,
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/chat/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIR,aAAa,EACb,kBAAkB,EAGlB,qBAAqB,EAGxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAER,yBAAyB,EACzB,iBAAiB,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACR,mBAAmB,EACnB,WAAW,EAGX,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,EAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAA4B,MAAM,EAAc,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOlD;;GAEG;AACH,qBAAa,IAAI;IACb,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IAEnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IAEjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAmB;IAErD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAE1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C;;;;;;OAMG;gBACgB,OAAO,EAAE,WAAW;IAcvC;;;;OAIG;IACI,KAAK,IAAI,MAAM;IAItB,IAAW,QAAQ,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAEjD;IAED;;;;;;;;;;OAUG;IACU,WAAW,CACpB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAwF7B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACU,oBAAoB,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,2BAAgC,GAC1C,OAAO,CAAC,IAAI,CAAC;IAyChB,OAAO,CAAC,YAAY;IAwCpB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAMhC;;;;;;;;;;;;OAYG;IACU,WAAW,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAe3F;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIvD;;;;OAIG;IACU,UAAU,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACU,eAAe,CACxB,IAAI,EAAE,aAAa,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,UAAU,CAAC;IAkBtB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACU,eAAe,CACxB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,IAAI,CAAC;CAUnB"}
|
package/dist/src/chat/Chat.js
CHANGED
|
@@ -175,13 +175,18 @@ export class Chat {
|
|
|
175
175
|
onComplete: (result) => {
|
|
176
176
|
void (async () => {
|
|
177
177
|
try {
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
// Only update messages for chat results, not plan approval events
|
|
179
|
+
if (result.type === "result") {
|
|
180
|
+
await this.contextManager.setMessages(this.id, result.messages);
|
|
181
|
+
await this.contextManager.setToolsConfig(this.id, context.toolsConfig);
|
|
182
|
+
}
|
|
180
183
|
}
|
|
181
184
|
catch (error) {
|
|
185
|
+
// Context update failed, but the API call succeeded
|
|
186
|
+
// Notify error but still call onComplete since the message was sent
|
|
182
187
|
options.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
183
|
-
return;
|
|
184
188
|
}
|
|
189
|
+
// Always call onComplete after API success, even if context update failed
|
|
185
190
|
options.onComplete?.(result);
|
|
186
191
|
})();
|
|
187
192
|
},
|
|
@@ -262,5 +267,79 @@ export class Chat {
|
|
|
262
267
|
await this.contextManager.setMessages(this.id, snapshot.messages);
|
|
263
268
|
await this.contextManager.setToolsConfig(this.id, snapshot.toolsConfig);
|
|
264
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Initiates execution of an approved plan via SSE streaming.
|
|
272
|
+
*
|
|
273
|
+
* Posts the approved plan to the API which responds with an SSE stream
|
|
274
|
+
* of execution events. The returned PlanStream allows subscribing to
|
|
275
|
+
* events like step progress, signature requests, and completion.
|
|
276
|
+
*
|
|
277
|
+
* @param plan The approved execution plan to execute
|
|
278
|
+
* @param options Optional request options including abort signal
|
|
279
|
+
* @returns A PlanStream for receiving execution events
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```typescript
|
|
283
|
+
* const stream = await chat.streamExecution(plan);
|
|
284
|
+
*
|
|
285
|
+
* stream.on('step_started', (event) => {
|
|
286
|
+
* console.log(`Step ${event.stepNumber}: ${event.description}`);
|
|
287
|
+
* });
|
|
288
|
+
*
|
|
289
|
+
* stream.on('signature_required', async (event) => {
|
|
290
|
+
* const signature = await wallet.signTransaction(event.transaction);
|
|
291
|
+
* await chat.submitSignature({
|
|
292
|
+
* planId: plan.planId,
|
|
293
|
+
* stepNumber: event.stepNumber,
|
|
294
|
+
* signature,
|
|
295
|
+
* });
|
|
296
|
+
* });
|
|
297
|
+
*
|
|
298
|
+
* stream.on('execution_complete', (event) => {
|
|
299
|
+
* console.log(`Execution ${event.status}: ${event.summary}`);
|
|
300
|
+
* });
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
async streamExecution(plan, options) {
|
|
304
|
+
const context = await this.contextManager.getContext(this.id);
|
|
305
|
+
const requestOptions = options
|
|
306
|
+
? {
|
|
307
|
+
signal: options.signal,
|
|
308
|
+
onRequestId: options.onRequestId,
|
|
309
|
+
}
|
|
310
|
+
: undefined;
|
|
311
|
+
return this.coreApiProvider.streamExecution(plan, this.userContext, context.toolsConfig, requestOptions);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Submits a signature during plan execution.
|
|
315
|
+
*
|
|
316
|
+
* When the server emits a `signature_required` event during plan execution,
|
|
317
|
+
* call this method to submit the signed transaction. The server will then
|
|
318
|
+
* resume execution from where it paused.
|
|
319
|
+
*
|
|
320
|
+
* @param data Signature continuation data including planId, stepNumber, and signature
|
|
321
|
+
* @param options Optional request options including abort signal
|
|
322
|
+
*
|
|
323
|
+
* @example
|
|
324
|
+
* ```typescript
|
|
325
|
+
* stream.on('signature_required', async (event) => {
|
|
326
|
+
* const signature = await wallet.signTransaction(event.transaction);
|
|
327
|
+
* await chat.submitSignature({
|
|
328
|
+
* planId: plan.planId,
|
|
329
|
+
* stepNumber: event.stepNumber,
|
|
330
|
+
* signature,
|
|
331
|
+
* });
|
|
332
|
+
* });
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
335
|
+
async submitSignature(data, options) {
|
|
336
|
+
const requestOptions = options
|
|
337
|
+
? {
|
|
338
|
+
signal: options.signal,
|
|
339
|
+
onRequestId: options.onRequestId,
|
|
340
|
+
}
|
|
341
|
+
: undefined;
|
|
342
|
+
await this.coreApiProvider.submitSignature(data, requestOptions);
|
|
343
|
+
}
|
|
265
344
|
}
|
|
266
345
|
//# sourceMappingURL=Chat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../../src/chat/Chat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../../src/chat/Chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { ExecutionEvent } from "@illalabs/interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* All possible execution event types.
|
|
4
|
+
*/
|
|
5
|
+
type ExecutionEventType = ExecutionEvent["type"];
|
|
6
|
+
/**
|
|
7
|
+
* Type-safe handler for a specific execution event type.
|
|
8
|
+
*/
|
|
9
|
+
type ExecutionEventHandler<T extends ExecutionEventType> = (event: Extract<ExecutionEvent, {
|
|
10
|
+
type: T;
|
|
11
|
+
}>) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Options for creating a PlanStream.
|
|
14
|
+
*/
|
|
15
|
+
export interface PlanStreamOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Optional callback invoked when the stream closes normally.
|
|
18
|
+
*/
|
|
19
|
+
onClose?: () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Optional callback invoked when a connection error occurs.
|
|
22
|
+
*/
|
|
23
|
+
onError?: (error: Error) => void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Client-side wrapper for receiving SSE events during plan execution.
|
|
27
|
+
*
|
|
28
|
+
* PlanStream parses Server-Sent Events (SSE) from a ReadableStream and
|
|
29
|
+
* dispatches them to typed handlers based on event type. It supports
|
|
30
|
+
* multiple handlers per event type and provides proper cleanup on close.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const stream = new PlanStream(response.body!, {
|
|
35
|
+
* onError: (err) => console.error('Connection error:', err),
|
|
36
|
+
* onClose: () => console.log('Stream closed'),
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* stream.on('step_started', (event) => {
|
|
40
|
+
* console.log(`Step ${event.stepNumber} started: ${event.description}`);
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* stream.on('step_completed', (event) => {
|
|
44
|
+
* console.log(`Step ${event.stepNumber} completed`);
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* stream.on('signature_required', async (event) => {
|
|
48
|
+
* // Handle signature request
|
|
49
|
+
* const signature = await wallet.signTransaction(event.transaction);
|
|
50
|
+
* await submitSignature(signature);
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* stream.on('execution_complete', (event) => {
|
|
54
|
+
* console.log(`Execution ${event.status}: ${event.summary}`);
|
|
55
|
+
* stream.close();
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class PlanStream {
|
|
60
|
+
private readonly handlers;
|
|
61
|
+
private readonly abortController;
|
|
62
|
+
private readonly options;
|
|
63
|
+
private closed;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a new PlanStream to consume SSE events from a ReadableStream.
|
|
66
|
+
*
|
|
67
|
+
* Stream consumption is deferred to the next microtask, allowing handlers
|
|
68
|
+
* to be registered synchronously after construction before any events
|
|
69
|
+
* are dispatched.
|
|
70
|
+
*
|
|
71
|
+
* @param stream - The ReadableStream from a fetch response body
|
|
72
|
+
* @param options - Optional callbacks for error and close events
|
|
73
|
+
*/
|
|
74
|
+
constructor(stream: ReadableStream<Uint8Array>, options?: PlanStreamOptions);
|
|
75
|
+
/**
|
|
76
|
+
* Registers an event handler for a specific event type.
|
|
77
|
+
*
|
|
78
|
+
* Multiple handlers can be registered for the same event type.
|
|
79
|
+
* Handlers are called in registration order.
|
|
80
|
+
*
|
|
81
|
+
* @param eventType - The type of event to listen for
|
|
82
|
+
* @param handler - The handler function to call when the event is received
|
|
83
|
+
*/
|
|
84
|
+
on<T extends ExecutionEventType>(eventType: T, handler: ExecutionEventHandler<T>): void;
|
|
85
|
+
/**
|
|
86
|
+
* Removes a previously registered event handler.
|
|
87
|
+
*
|
|
88
|
+
* @param eventType - The type of event the handler was registered for
|
|
89
|
+
* @param handler - The handler function to remove
|
|
90
|
+
*/
|
|
91
|
+
off<T extends ExecutionEventType>(eventType: T, handler: ExecutionEventHandler<T>): void;
|
|
92
|
+
/**
|
|
93
|
+
* Closes the stream and cleans up resources.
|
|
94
|
+
*
|
|
95
|
+
* After calling close(), no more events will be dispatched
|
|
96
|
+
* and the underlying stream reader will be released.
|
|
97
|
+
*/
|
|
98
|
+
close(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Returns whether the stream has been closed.
|
|
101
|
+
*/
|
|
102
|
+
isClosed(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Consumes the SSE stream and dispatches events to handlers.
|
|
105
|
+
*/
|
|
106
|
+
private consume;
|
|
107
|
+
/**
|
|
108
|
+
* Processes a single SSE message and dispatches to handlers.
|
|
109
|
+
*/
|
|
110
|
+
private processMessage;
|
|
111
|
+
/**
|
|
112
|
+
* Type guard to validate that parsed data is an ExecutionEvent.
|
|
113
|
+
* Uses Zod schema for complete validation.
|
|
114
|
+
*
|
|
115
|
+
* Unknown event types are silently ignored for forward compatibility -
|
|
116
|
+
* new server event types won't break older clients.
|
|
117
|
+
*/
|
|
118
|
+
private isExecutionEvent;
|
|
119
|
+
/**
|
|
120
|
+
* Parses a single SSE message into its event type and data.
|
|
121
|
+
*/
|
|
122
|
+
private parseSSEMessage;
|
|
123
|
+
/**
|
|
124
|
+
* Dispatches an event to all registered handlers for its type.
|
|
125
|
+
*/
|
|
126
|
+
private dispatch;
|
|
127
|
+
}
|
|
128
|
+
export {};
|
|
129
|
+
//# sourceMappingURL=PlanStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanStream.d.ts","sourceRoot":"","sources":["../../../src/chat/PlanStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D;;GAEG;AACH,KAAK,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEjD;;GAEG;AACH,KAAK,qBAAqB,CAAC,CAAC,SAAS,kBAAkB,IAAI,CACvD,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,KAC1C,IAAI,CAAC;AAOV;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;IAEhF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;;;;;OASG;gBACgB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,OAAO,GAAE,iBAAsB;IAMtF;;;;;;;;OAQG;IACI,EAAE,CAAC,CAAC,SAAS,kBAAkB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI;IAY9F;;;;;OAKG;IACI,GAAG,CAAC,CAAC,SAAS,kBAAkB,EACnC,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAClC,IAAI;IAUP;;;;;OAKG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACI,QAAQ,IAAI,OAAO;IAI1B;;OAEG;YACW,OAAO;IAqDrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAkBnB"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { EXECUTION_EVENT_TYPES, ExecutionEventSchema } from "@illalabs/interfaces";
|
|
2
|
+
import { SSEParse } from "../streaming/errors/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Client-side wrapper for receiving SSE events during plan execution.
|
|
5
|
+
*
|
|
6
|
+
* PlanStream parses Server-Sent Events (SSE) from a ReadableStream and
|
|
7
|
+
* dispatches them to typed handlers based on event type. It supports
|
|
8
|
+
* multiple handlers per event type and provides proper cleanup on close.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const stream = new PlanStream(response.body!, {
|
|
13
|
+
* onError: (err) => console.error('Connection error:', err),
|
|
14
|
+
* onClose: () => console.log('Stream closed'),
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* stream.on('step_started', (event) => {
|
|
18
|
+
* console.log(`Step ${event.stepNumber} started: ${event.description}`);
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* stream.on('step_completed', (event) => {
|
|
22
|
+
* console.log(`Step ${event.stepNumber} completed`);
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* stream.on('signature_required', async (event) => {
|
|
26
|
+
* // Handle signature request
|
|
27
|
+
* const signature = await wallet.signTransaction(event.transaction);
|
|
28
|
+
* await submitSignature(signature);
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* stream.on('execution_complete', (event) => {
|
|
32
|
+
* console.log(`Execution ${event.status}: ${event.summary}`);
|
|
33
|
+
* stream.close();
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class PlanStream {
|
|
38
|
+
handlers = new Map();
|
|
39
|
+
abortController;
|
|
40
|
+
options;
|
|
41
|
+
closed = false;
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new PlanStream to consume SSE events from a ReadableStream.
|
|
44
|
+
*
|
|
45
|
+
* Stream consumption is deferred to the next microtask, allowing handlers
|
|
46
|
+
* to be registered synchronously after construction before any events
|
|
47
|
+
* are dispatched.
|
|
48
|
+
*
|
|
49
|
+
* @param stream - The ReadableStream from a fetch response body
|
|
50
|
+
* @param options - Optional callbacks for error and close events
|
|
51
|
+
*/
|
|
52
|
+
constructor(stream, options = {}) {
|
|
53
|
+
this.options = options;
|
|
54
|
+
this.abortController = new AbortController();
|
|
55
|
+
queueMicrotask(() => void this.consume(stream));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Registers an event handler for a specific event type.
|
|
59
|
+
*
|
|
60
|
+
* Multiple handlers can be registered for the same event type.
|
|
61
|
+
* Handlers are called in registration order.
|
|
62
|
+
*
|
|
63
|
+
* @param eventType - The type of event to listen for
|
|
64
|
+
* @param handler - The handler function to call when the event is received
|
|
65
|
+
*/
|
|
66
|
+
on(eventType, handler) {
|
|
67
|
+
if (this.closed) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
let handlerSet = this.handlers.get(eventType);
|
|
71
|
+
if (!handlerSet) {
|
|
72
|
+
handlerSet = new Set();
|
|
73
|
+
this.handlers.set(eventType, handlerSet);
|
|
74
|
+
}
|
|
75
|
+
handlerSet.add(handler);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Removes a previously registered event handler.
|
|
79
|
+
*
|
|
80
|
+
* @param eventType - The type of event the handler was registered for
|
|
81
|
+
* @param handler - The handler function to remove
|
|
82
|
+
*/
|
|
83
|
+
off(eventType, handler) {
|
|
84
|
+
const handlerSet = this.handlers.get(eventType);
|
|
85
|
+
if (handlerSet) {
|
|
86
|
+
handlerSet.delete(handler);
|
|
87
|
+
if (handlerSet.size === 0) {
|
|
88
|
+
this.handlers.delete(eventType);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Closes the stream and cleans up resources.
|
|
94
|
+
*
|
|
95
|
+
* After calling close(), no more events will be dispatched
|
|
96
|
+
* and the underlying stream reader will be released.
|
|
97
|
+
*/
|
|
98
|
+
close() {
|
|
99
|
+
if (this.closed) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.closed = true;
|
|
103
|
+
this.abortController.abort();
|
|
104
|
+
this.handlers.clear();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns whether the stream has been closed.
|
|
108
|
+
*/
|
|
109
|
+
isClosed() {
|
|
110
|
+
return this.closed;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Consumes the SSE stream and dispatches events to handlers.
|
|
114
|
+
*/
|
|
115
|
+
async consume(stream) {
|
|
116
|
+
const reader = stream.getReader();
|
|
117
|
+
const decoder = new TextDecoder();
|
|
118
|
+
let buffer = "";
|
|
119
|
+
const abortHandler = () => {
|
|
120
|
+
void reader.cancel();
|
|
121
|
+
};
|
|
122
|
+
this.abortController.signal.addEventListener("abort", abortHandler, { once: true });
|
|
123
|
+
try {
|
|
124
|
+
if (this.abortController.signal.aborted) {
|
|
125
|
+
await reader.cancel();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
while (!this.abortController.signal.aborted) {
|
|
129
|
+
const { done, value } = await reader.read();
|
|
130
|
+
if (this.abortController.signal.aborted) {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (done) {
|
|
134
|
+
buffer += decoder.decode();
|
|
135
|
+
if (buffer.trim()) {
|
|
136
|
+
this.processMessage(buffer);
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
buffer += decoder.decode(value, { stream: true });
|
|
141
|
+
const messages = buffer.split("\n\n");
|
|
142
|
+
buffer = messages.pop() ?? "";
|
|
143
|
+
for (const message of messages) {
|
|
144
|
+
if (!message.trim())
|
|
145
|
+
continue;
|
|
146
|
+
this.processMessage(message);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (!this.closed) {
|
|
152
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
153
|
+
this.options.onError?.(err);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
this.abortController.signal.removeEventListener("abort", abortHandler);
|
|
158
|
+
reader.releaseLock();
|
|
159
|
+
if (!this.closed) {
|
|
160
|
+
this.closed = true;
|
|
161
|
+
this.handlers.clear();
|
|
162
|
+
this.options.onClose?.();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Processes a single SSE message and dispatches to handlers.
|
|
168
|
+
*/
|
|
169
|
+
processMessage(message) {
|
|
170
|
+
const parsed = this.parseSSEMessage(message);
|
|
171
|
+
if (!parsed) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
let event;
|
|
175
|
+
try {
|
|
176
|
+
event = JSON.parse(parsed.data);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.options.onError?.(new SSEParse(`Failed to parse JSON data: ${parsed.data}`, error));
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (this.isExecutionEvent(event)) {
|
|
183
|
+
this.dispatch(event);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Type guard to validate that parsed data is an ExecutionEvent.
|
|
188
|
+
* Uses Zod schema for complete validation.
|
|
189
|
+
*
|
|
190
|
+
* Unknown event types are silently ignored for forward compatibility -
|
|
191
|
+
* new server event types won't break older clients.
|
|
192
|
+
*/
|
|
193
|
+
isExecutionEvent(data) {
|
|
194
|
+
if (typeof data !== "object" ||
|
|
195
|
+
data === null ||
|
|
196
|
+
!("type" in data) ||
|
|
197
|
+
typeof data.type !== "string") {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
const eventType = data.type;
|
|
201
|
+
if (!EXECUTION_EVENT_TYPES.includes(eventType)) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
const result = ExecutionEventSchema.safeParse(data);
|
|
205
|
+
if (!result.success) {
|
|
206
|
+
this.options.onError?.(new SSEParse(`Invalid execution event: ${result.error.message}`, result.error));
|
|
207
|
+
}
|
|
208
|
+
return result.success;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Parses a single SSE message into its event type and data.
|
|
212
|
+
*/
|
|
213
|
+
parseSSEMessage(message) {
|
|
214
|
+
const lines = message.split("\n");
|
|
215
|
+
let eventType = "message";
|
|
216
|
+
const dataLines = [];
|
|
217
|
+
for (const line of lines) {
|
|
218
|
+
if (line.startsWith("event:")) {
|
|
219
|
+
eventType = line.slice(6).trim();
|
|
220
|
+
}
|
|
221
|
+
else if (line.startsWith("data:")) {
|
|
222
|
+
const value = line.slice(5);
|
|
223
|
+
dataLines.push(value.startsWith(" ") ? value.slice(1) : value);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const data = dataLines.join("\n");
|
|
227
|
+
return data ? { event: eventType, data } : null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Dispatches an event to all registered handlers for its type.
|
|
231
|
+
*/
|
|
232
|
+
dispatch(event) {
|
|
233
|
+
const eventType = event.type;
|
|
234
|
+
const handlerSet = this.handlers.get(eventType);
|
|
235
|
+
if (!handlerSet) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
for (const handler of handlerSet) {
|
|
239
|
+
try {
|
|
240
|
+
handler(event);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
244
|
+
this.options.onError?.(new Error(`Handler error for "${eventType}": ${err.message}`, { cause: err }));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=PlanStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanStream.js","sourceRoot":"","sources":["../../../src/chat/PlanStream.ts"],"names":[],"mappings":"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"}
|
package/dist/src/chat/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { Chat } from "./Chat.js";
|
|
2
|
+
export { PlanStream } from "./PlanStream.js";
|
|
3
|
+
export type { PlanStreamOptions } from "./PlanStream.js";
|
|
2
4
|
export type { ChatOptions } from "../interfaces/index.js";
|
|
3
5
|
export * from "./errors/index.js";
|
|
4
6
|
export type { ChatContextInput } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/src/chat/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,cAAc,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CoreApiChatBodyRequest, CoreApiChatErrorResponse, CoreApiChatSuccessResponse, MessageHistoryType, ModelContext, PersonalityContext, TelemetryEvent, ToolAutorouterRequest, UserContext
|
|
1
|
+
import type { AnyResultEventData, CoreApiChatBodyRequest, CoreApiChatErrorResponse, CoreApiChatSuccessResponse, MessageHistoryType, ModelContext, PersonalityContext, TelemetryEvent, ToolAutorouterRequest, UserContext } from "@illalabs/interfaces";
|
|
2
2
|
import type { AsyncToolChecker } from "../asyncToolChecker/index.js";
|
|
3
3
|
import type { PromptRole, PromptSnapshot } from "../prompt/index.js";
|
|
4
4
|
import type { IContextManager } from "./contextManager.interface.js";
|
|
@@ -80,10 +80,10 @@ export interface SendMessageStreamingOptions {
|
|
|
80
80
|
readonly onTextDelta?: (delta: string) => void;
|
|
81
81
|
/**
|
|
82
82
|
* Called when the orchestration completes successfully.
|
|
83
|
-
* The result contains
|
|
84
|
-
*
|
|
83
|
+
* The result contains either a chat response with messages and text,
|
|
84
|
+
* or a plan approval request with the generated plan.
|
|
85
85
|
*/
|
|
86
|
-
readonly onComplete?: (result:
|
|
86
|
+
readonly onComplete?: (result: AnyResultEventData) => void;
|
|
87
87
|
/**
|
|
88
88
|
* Called when an error occurs during streaming or orchestration.
|
|
89
89
|
*/
|