@agentick/client 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,415 @@
1
+ /**
2
+ * SSE Transport
3
+ *
4
+ * Implements the ClientTransport interface using HTTP requests and Server-Sent Events.
5
+ * This is the default transport for web browsers.
6
+ */
7
+ // ============================================================================
8
+ // SSE Transport Implementation
9
+ // ============================================================================
10
+ export class SSETransport {
11
+ config;
12
+ fetchFn;
13
+ EventSourceCtor;
14
+ requestHeaders;
15
+ _state = "disconnected";
16
+ _connectionId;
17
+ eventSource;
18
+ connectionPromise;
19
+ eventHandlers = new Set();
20
+ stateHandlers = new Set();
21
+ subscriptions = new Set();
22
+ reconnectAttempts = 0;
23
+ reconnectTimer;
24
+ constructor(config) {
25
+ this.config = config;
26
+ // Build request headers
27
+ this.requestHeaders = { "Content-Type": "application/json", ...config.headers };
28
+ if (config.token && !this.requestHeaders["Authorization"]) {
29
+ this.requestHeaders["Authorization"] = `Bearer ${config.token}`;
30
+ }
31
+ // Use custom implementations or fall back to globals
32
+ this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
33
+ this.EventSourceCtor = config.EventSource ?? globalThis.EventSource;
34
+ }
35
+ get state() {
36
+ return this._state;
37
+ }
38
+ get connectionId() {
39
+ return this._connectionId;
40
+ }
41
+ setState(state) {
42
+ if (this._state === state)
43
+ return;
44
+ this._state = state;
45
+ for (const handler of this.stateHandlers) {
46
+ try {
47
+ handler(state);
48
+ }
49
+ catch (error) {
50
+ console.error("Error in state handler:", error);
51
+ }
52
+ }
53
+ }
54
+ async connect() {
55
+ if (this._state === "connected") {
56
+ return;
57
+ }
58
+ if (this.connectionPromise) {
59
+ await this.connectionPromise;
60
+ return;
61
+ }
62
+ this.setState("connecting");
63
+ this.connectionPromise = this.openEventSource();
64
+ try {
65
+ await this.connectionPromise;
66
+ this.setState("connected");
67
+ this.reconnectAttempts = 0; // Reset on successful connection
68
+ }
69
+ catch (error) {
70
+ this.setState("error");
71
+ throw error;
72
+ }
73
+ finally {
74
+ this.connectionPromise = undefined;
75
+ }
76
+ }
77
+ disconnect() {
78
+ // Cancel any pending reconnect
79
+ if (this.reconnectTimer) {
80
+ clearTimeout(this.reconnectTimer);
81
+ this.reconnectTimer = undefined;
82
+ }
83
+ this.reconnectAttempts = 0;
84
+ this.closeEventSource();
85
+ }
86
+ attemptReconnect() {
87
+ const reconnect = this.config.reconnect;
88
+ if (reconnect?.enabled === false) {
89
+ return;
90
+ }
91
+ const maxAttempts = reconnect?.maxAttempts ?? 5;
92
+ const baseDelay = reconnect?.delay ?? 1000;
93
+ if (this.reconnectAttempts >= maxAttempts) {
94
+ console.error(`SSE reconnection failed after ${maxAttempts} attempts`);
95
+ this.setState("error");
96
+ return;
97
+ }
98
+ this.reconnectAttempts++;
99
+ const delay = baseDelay * this.reconnectAttempts; // Exponential backoff
100
+ console.log(`SSE reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${maxAttempts})`);
101
+ this.reconnectTimer = setTimeout(async () => {
102
+ this.reconnectTimer = undefined;
103
+ try {
104
+ await this.connect();
105
+ // Re-subscribe to all sessions after reconnect
106
+ await this.resubscribeAll();
107
+ }
108
+ catch (error) {
109
+ console.error("SSE reconnection failed:", error);
110
+ // attemptReconnect will be called again by onError if appropriate
111
+ }
112
+ }, delay);
113
+ }
114
+ async resubscribeAll() {
115
+ // Re-register subscriptions with the new connection
116
+ const sessionsToResubscribe = [...this.subscriptions];
117
+ // Clear local tracking - subscribeToSession will re-add them
118
+ this.subscriptions.clear();
119
+ for (const sessionId of sessionsToResubscribe) {
120
+ try {
121
+ await this.subscribeToSession(sessionId);
122
+ }
123
+ catch (error) {
124
+ console.error(`Failed to resubscribe to session ${sessionId}:`, error);
125
+ }
126
+ }
127
+ }
128
+ async openEventSource() {
129
+ this.closeEventSource();
130
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
131
+ const eventsPath = this.config.paths?.events ?? "/events";
132
+ const url = `${baseUrl}${eventsPath}`;
133
+ return new Promise((resolve, reject) => {
134
+ try {
135
+ this.eventSource = new this.EventSourceCtor(url, {
136
+ withCredentials: this.config.withCredentials,
137
+ });
138
+ const onMessage = (event) => {
139
+ try {
140
+ const data = JSON.parse(event.data);
141
+ this.handleIncomingEvent(data);
142
+ if (data.type === "connection" && data.connectionId) {
143
+ this._connectionId = data.connectionId;
144
+ if (data.subscriptions) {
145
+ for (const sessionId of data.subscriptions) {
146
+ this.subscriptions.add(sessionId);
147
+ }
148
+ }
149
+ resolve();
150
+ }
151
+ }
152
+ catch (error) {
153
+ console.error("Failed to parse SSE event:", error);
154
+ }
155
+ };
156
+ const onError = () => {
157
+ if (this._state === "connecting") {
158
+ this.closeEventSource();
159
+ reject(new Error("SSE connection failed"));
160
+ }
161
+ else {
162
+ // Connection was established but then failed - attempt reconnect
163
+ const wasConnected = this._state === "connected";
164
+ this.closeEventSource(false); // Preserve subscriptions for reconnect
165
+ if (wasConnected) {
166
+ this.attemptReconnect();
167
+ }
168
+ }
169
+ };
170
+ this.eventSource.addEventListener("message", onMessage);
171
+ this.eventSource.addEventListener("error", onError);
172
+ }
173
+ catch (error) {
174
+ reject(error);
175
+ }
176
+ });
177
+ }
178
+ closeEventSource(clearSubscriptions = true) {
179
+ if (!this.eventSource)
180
+ return;
181
+ this.eventSource.close();
182
+ this.eventSource = undefined;
183
+ this._connectionId = undefined;
184
+ if (clearSubscriptions) {
185
+ this.subscriptions.clear();
186
+ }
187
+ this.setState("disconnected");
188
+ }
189
+ handleIncomingEvent(data) {
190
+ for (const handler of this.eventHandlers) {
191
+ try {
192
+ handler(data);
193
+ }
194
+ catch (error) {
195
+ console.error("Error in event handler:", error);
196
+ }
197
+ }
198
+ }
199
+ send(input, sessionId) {
200
+ const abortController = new AbortController();
201
+ const self = this;
202
+ const iterable = {
203
+ async *[Symbol.asyncIterator]() {
204
+ const baseUrl = self.config.baseUrl.replace(/\/$/, "");
205
+ const sendPath = self.config.paths?.send ?? "/send";
206
+ const body = { ...input };
207
+ if (sessionId) {
208
+ body.sessionId = sessionId;
209
+ }
210
+ const response = await self.fetchFn(`${baseUrl}${sendPath}`, {
211
+ method: "POST",
212
+ headers: self.requestHeaders,
213
+ credentials: self.config.withCredentials ? "include" : "same-origin",
214
+ body: JSON.stringify(body),
215
+ signal: abortController.signal,
216
+ });
217
+ if (!response.ok) {
218
+ const text = await response.text();
219
+ throw new Error(`Failed to send: ${response.status} ${text}`);
220
+ }
221
+ if (!response.body) {
222
+ throw new Error("No response body for send");
223
+ }
224
+ const reader = response.body.getReader();
225
+ const decoder = new TextDecoder();
226
+ let buffer = "";
227
+ try {
228
+ while (true) {
229
+ const { done, value } = await reader.read();
230
+ if (done)
231
+ break;
232
+ buffer += decoder.decode(value, { stream: true });
233
+ const lines = buffer.split("\n");
234
+ buffer = lines.pop() ?? "";
235
+ for (const line of lines) {
236
+ if (!line.startsWith("data: "))
237
+ continue;
238
+ try {
239
+ const data = JSON.parse(line.slice(6));
240
+ if (data.type === "channel" || data.type === "connection") {
241
+ continue;
242
+ }
243
+ self.handleIncomingEvent(data);
244
+ yield data;
245
+ }
246
+ catch (error) {
247
+ console.error("Failed to parse send event:", error);
248
+ }
249
+ }
250
+ }
251
+ }
252
+ finally {
253
+ reader.releaseLock();
254
+ }
255
+ },
256
+ abort(reason) {
257
+ abortController.abort(reason ?? "Client aborted");
258
+ },
259
+ };
260
+ return iterable;
261
+ }
262
+ async subscribeToSession(sessionId) {
263
+ await this.connect();
264
+ if (this.subscriptions.has(sessionId)) {
265
+ return;
266
+ }
267
+ if (!this._connectionId) {
268
+ throw new Error("Connection not established");
269
+ }
270
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
271
+ const subscribePath = this.config.paths?.subscribe ?? "/subscribe";
272
+ const response = await this.fetchFn(`${baseUrl}${subscribePath}`, {
273
+ method: "POST",
274
+ headers: this.requestHeaders,
275
+ credentials: this.config.withCredentials ? "include" : "same-origin",
276
+ body: JSON.stringify({
277
+ connectionId: this._connectionId,
278
+ add: [sessionId],
279
+ }),
280
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
281
+ });
282
+ if (!response.ok) {
283
+ const text = await response.text();
284
+ throw new Error(`Failed to subscribe: ${response.status} ${text}`);
285
+ }
286
+ this.subscriptions.add(sessionId);
287
+ }
288
+ async unsubscribeFromSession(sessionId) {
289
+ if (!this._connectionId) {
290
+ return;
291
+ }
292
+ if (!this.subscriptions.has(sessionId)) {
293
+ return;
294
+ }
295
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
296
+ const subscribePath = this.config.paths?.subscribe ?? "/subscribe";
297
+ await this.fetchFn(`${baseUrl}${subscribePath}`, {
298
+ method: "POST",
299
+ headers: this.requestHeaders,
300
+ credentials: this.config.withCredentials ? "include" : "same-origin",
301
+ body: JSON.stringify({
302
+ connectionId: this._connectionId,
303
+ remove: [sessionId],
304
+ }),
305
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
306
+ });
307
+ this.subscriptions.delete(sessionId);
308
+ }
309
+ async abortSession(sessionId, reason) {
310
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
311
+ const abortPath = this.config.paths?.abort ?? "/abort";
312
+ const response = await this.fetchFn(`${baseUrl}${abortPath}`, {
313
+ method: "POST",
314
+ headers: this.requestHeaders,
315
+ credentials: this.config.withCredentials ? "include" : "same-origin",
316
+ body: JSON.stringify({ sessionId, reason }),
317
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
318
+ });
319
+ if (!response.ok) {
320
+ const text = await response.text();
321
+ throw new Error(`Failed to abort: ${response.status} ${text}`);
322
+ }
323
+ }
324
+ async closeSession(sessionId) {
325
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
326
+ const closePath = this.config.paths?.close ?? "/close";
327
+ const response = await this.fetchFn(`${baseUrl}${closePath}`, {
328
+ method: "POST",
329
+ headers: this.requestHeaders,
330
+ credentials: this.config.withCredentials ? "include" : "same-origin",
331
+ body: JSON.stringify({ sessionId }),
332
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
333
+ });
334
+ if (!response.ok) {
335
+ const text = await response.text();
336
+ throw new Error(`Failed to close: ${response.status} ${text}`);
337
+ }
338
+ this.subscriptions.delete(sessionId);
339
+ }
340
+ async submitToolResult(sessionId, toolUseId, result) {
341
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
342
+ const toolResponsePath = this.config.paths?.toolResponse ?? "/tool-response";
343
+ const response = await this.fetchFn(`${baseUrl}${toolResponsePath}`, {
344
+ method: "POST",
345
+ headers: this.requestHeaders,
346
+ credentials: this.config.withCredentials ? "include" : "same-origin",
347
+ body: JSON.stringify({ sessionId, toolUseId, result }),
348
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
349
+ });
350
+ if (!response.ok) {
351
+ const text = await response.text();
352
+ throw new Error(`Failed to submit tool result: ${response.status} ${text}`);
353
+ }
354
+ }
355
+ async publishToChannel(sessionId, channel, event) {
356
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
357
+ const channelPath = this.config.paths?.channel ?? "/channel";
358
+ const response = await this.fetchFn(`${baseUrl}${channelPath}`, {
359
+ method: "POST",
360
+ headers: this.requestHeaders,
361
+ credentials: this.config.withCredentials ? "include" : "same-origin",
362
+ body: JSON.stringify({
363
+ sessionId,
364
+ channel,
365
+ type: event.type,
366
+ payload: event.payload,
367
+ id: event.id,
368
+ metadata: event.metadata,
369
+ }),
370
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
371
+ });
372
+ if (!response.ok) {
373
+ const text = await response.text();
374
+ throw new Error(`Failed to publish to channel: ${response.status} ${text}`);
375
+ }
376
+ }
377
+ async subscribeToChannel(sessionId, channel) {
378
+ const baseUrl = this.config.baseUrl.replace(/\/$/, "");
379
+ const channelPath = this.config.paths?.channel ?? "/channel";
380
+ const response = await this.fetchFn(`${baseUrl}${channelPath}/subscribe`, {
381
+ method: "POST",
382
+ headers: this.requestHeaders,
383
+ credentials: this.config.withCredentials ? "include" : "same-origin",
384
+ body: JSON.stringify({
385
+ sessionId,
386
+ channel,
387
+ clientId: this._connectionId, // Required for event forwarding to SSE
388
+ }),
389
+ signal: AbortSignal.timeout(this.config.timeout ?? 30000),
390
+ });
391
+ if (!response.ok) {
392
+ const text = await response.text();
393
+ throw new Error(`Failed to subscribe to channel: ${response.status} ${text}`);
394
+ }
395
+ }
396
+ onEvent(handler) {
397
+ this.eventHandlers.add(handler);
398
+ return () => {
399
+ this.eventHandlers.delete(handler);
400
+ };
401
+ }
402
+ onStateChange(handler) {
403
+ this.stateHandlers.add(handler);
404
+ return () => {
405
+ this.stateHandlers.delete(handler);
406
+ };
407
+ }
408
+ }
409
+ // ============================================================================
410
+ // Factory Function
411
+ // ============================================================================
412
+ export function createSSETransport(config) {
413
+ return new SSETransport(config);
414
+ }
415
+ //# sourceMappingURL=sse-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-transport.js","sourceRoot":"","sources":["../src/sse-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Client Transport Interface
3
+ *
4
+ * Abstracts the connection layer (SSE/HTTP vs WebSocket) from client business logic.
5
+ */
6
+ import type { SendInput, ChannelEvent, ToolConfirmationResponse } from "./types.js";
7
+ export interface TransportEventData {
8
+ type: string;
9
+ sessionId?: string;
10
+ executionId?: string;
11
+ [key: string]: unknown;
12
+ }
13
+ export type TransportEventHandler = (event: TransportEventData) => void;
14
+ /**
15
+ * Transport connection state.
16
+ */
17
+ export type TransportState = "disconnected" | "connecting" | "connected" | "error";
18
+ /**
19
+ * Transport interface - abstracts SSE/HTTP vs WebSocket.
20
+ */
21
+ export interface ClientTransport {
22
+ /** Current connection state */
23
+ readonly state: TransportState;
24
+ /** Connection ID (if assigned by server) */
25
+ readonly connectionId: string | undefined;
26
+ /** Connect to the server */
27
+ connect(): Promise<void>;
28
+ /** Disconnect from the server */
29
+ disconnect(): void;
30
+ /**
31
+ * Send a message and return a stream of events.
32
+ * Returns an async iterator of events for this execution.
33
+ */
34
+ send(input: SendInput, sessionId?: string): AsyncIterable<TransportEventData> & {
35
+ /** Abort the current send operation */
36
+ abort(reason?: string): void;
37
+ };
38
+ /** Subscribe to session events */
39
+ subscribeToSession(sessionId: string): Promise<void>;
40
+ /** Unsubscribe from session events */
41
+ unsubscribeFromSession(sessionId: string): Promise<void>;
42
+ /** Abort a session's execution */
43
+ abortSession(sessionId: string, reason?: string): Promise<void>;
44
+ /** Close a session */
45
+ closeSession(sessionId: string): Promise<void>;
46
+ /** Submit tool result */
47
+ submitToolResult(sessionId: string, toolUseId: string, result: ToolConfirmationResponse): Promise<void>;
48
+ /** Publish to a channel */
49
+ publishToChannel(sessionId: string, channel: string, event: ChannelEvent): Promise<void>;
50
+ /** Subscribe to a channel */
51
+ subscribeToChannel(sessionId: string, channel: string): Promise<void>;
52
+ /** Register event handler for incoming events */
53
+ onEvent(handler: TransportEventHandler): () => void;
54
+ /** Register state change handler */
55
+ onStateChange(handler: (state: TransportState) => void): () => void;
56
+ }
57
+ export interface TransportConfig {
58
+ /** Base URL for the server */
59
+ baseUrl: string;
60
+ /** Authentication token */
61
+ token?: string;
62
+ /** Custom headers */
63
+ headers?: Record<string, string>;
64
+ /** Request timeout in ms */
65
+ timeout?: number;
66
+ /** Send credentials with requests */
67
+ withCredentials?: boolean;
68
+ }
69
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAMpF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAMxE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAE/B,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,4BAA4B;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAC;IAEnB;;;OAGG;IACH,IAAI,CACF,KAAK,EAAE,SAAS,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAAC,kBAAkB,CAAC,GAAG;QACrC,uCAAuC;QACvC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IAEF,kCAAkC;IAClC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,sCAAsC;IACtC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,kCAAkC;IAClC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,sBAAsB;IACtB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,yBAAyB;IACzB,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,2BAA2B;IAC3B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzF,6BAA6B;IAC7B,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE,iDAAiD;IACjD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;IAEpD,oCAAoC;IACpC,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACrE;AAMD,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qCAAqC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Client Transport Interface
3
+ *
4
+ * Abstracts the connection layer (SSE/HTTP vs WebSocket) from client business logic.
5
+ */
6
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}