@bytespell/amux-client 0.0.19

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.
Files changed (43) hide show
  1. package/dist/accumulator.d.ts +77 -0
  2. package/dist/accumulator.d.ts.map +1 -0
  3. package/dist/accumulator.js +285 -0
  4. package/dist/accumulator.js.map +1 -0
  5. package/dist/client.d.ts +155 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +364 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/connection.d.ts +81 -0
  10. package/dist/connection.d.ts.map +1 -0
  11. package/dist/connection.js +143 -0
  12. package/dist/connection.js.map +1 -0
  13. package/dist/index.d.ts +35 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +34 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/react/context.d.ts +60 -0
  18. package/dist/react/context.d.ts.map +1 -0
  19. package/dist/react/context.js +138 -0
  20. package/dist/react/context.js.map +1 -0
  21. package/dist/react/hooks.d.ts +153 -0
  22. package/dist/react/hooks.d.ts.map +1 -0
  23. package/dist/react/hooks.js +156 -0
  24. package/dist/react/hooks.js.map +1 -0
  25. package/dist/react/index.d.ts +29 -0
  26. package/dist/react/index.d.ts.map +1 -0
  27. package/dist/react/index.js +27 -0
  28. package/dist/react/index.js.map +1 -0
  29. package/dist/types.d.ts +166 -0
  30. package/dist/types.d.ts.map +1 -0
  31. package/dist/types.js +2 -0
  32. package/dist/types.js.map +1 -0
  33. package/package.json +48 -0
  34. package/src/accumulator.ts +307 -0
  35. package/src/client.ts +445 -0
  36. package/src/connection.ts +194 -0
  37. package/src/index.ts +59 -0
  38. package/src/react/context.tsx +200 -0
  39. package/src/react/hooks.ts +208 -0
  40. package/src/react/index.ts +37 -0
  41. package/src/types.ts +120 -0
  42. package/tsconfig.json +14 -0
  43. package/tsconfig.tsbuildinfo +1 -0
package/dist/client.js ADDED
@@ -0,0 +1,364 @@
1
+ import { Connection } from './connection.js';
2
+ import { Accumulator } from './accumulator.js';
3
+ /**
4
+ * AmuxClient - WebSocket client for consuming amux
5
+ *
6
+ * Provides:
7
+ * - Connection management with auto-reconnect
8
+ * - Type-safe event subscription
9
+ * - Command methods for server interaction
10
+ * - Message accumulation for UI rendering
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const client = new AmuxClient({ url: 'ws://localhost:3000/ws' });
15
+ *
16
+ * client.on('ready', (data) => console.log('Ready:', data.cwd));
17
+ * client.on('update', (update) => console.log('Update:', update));
18
+ *
19
+ * client.connect();
20
+ * client.prompt('Hello!');
21
+ * ```
22
+ */
23
+ export class AmuxClient {
24
+ connection;
25
+ accumulator;
26
+ handlers = new Map();
27
+ // Session state (updated from events)
28
+ _cwd = null;
29
+ _sessionId = null;
30
+ _agent = null;
31
+ _availableAgents = [];
32
+ _availableModels = [];
33
+ _currentModelId = null;
34
+ _capabilities = null;
35
+ _sessions = [];
36
+ _isReady = false;
37
+ _isProcessing = false;
38
+ _pendingPermission = null;
39
+ constructor(options) {
40
+ this.connection = new Connection({
41
+ url: options.url,
42
+ reconnect: options.reconnect ?? true,
43
+ reconnectInterval: options.reconnectInterval ?? 1000,
44
+ maxReconnectAttempts: options.maxReconnectAttempts ?? Infinity,
45
+ });
46
+ this.accumulator = new Accumulator();
47
+ // Wire up connection events
48
+ this.connection.on('message', (msg) => this.handleMessage(msg));
49
+ this.connection.on('status', (status) => this.handleStatusChange(status));
50
+ this.connection.on('close', () => {
51
+ this._isReady = false;
52
+ });
53
+ // Auto-connect if enabled
54
+ if (options.autoConnect !== false) {
55
+ this.connect();
56
+ }
57
+ }
58
+ // ============================================================
59
+ // Connection lifecycle
60
+ // ============================================================
61
+ /**
62
+ * Connect to the WebSocket server
63
+ */
64
+ connect() {
65
+ this.connection.connect();
66
+ }
67
+ /**
68
+ * Disconnect from the WebSocket server
69
+ */
70
+ disconnect() {
71
+ this.connection.disconnect();
72
+ }
73
+ /**
74
+ * Whether WebSocket is connected
75
+ */
76
+ get isConnected() {
77
+ return this.connection.isConnected;
78
+ }
79
+ /**
80
+ * Whether client is ready (connected and received 'ready' event)
81
+ */
82
+ get isReady() {
83
+ return this._isReady;
84
+ }
85
+ /**
86
+ * Current connection status
87
+ */
88
+ get connectionStatus() {
89
+ return this.connection.status;
90
+ }
91
+ // ============================================================
92
+ // Event subscription
93
+ // ============================================================
94
+ /**
95
+ * Subscribe to an event
96
+ */
97
+ on(event, handler) {
98
+ if (!this.handlers.has(event)) {
99
+ this.handlers.set(event, new Set());
100
+ }
101
+ this.handlers.get(event).add(handler);
102
+ }
103
+ /**
104
+ * Unsubscribe from an event
105
+ */
106
+ off(event, handler) {
107
+ this.handlers.get(event)?.delete(handler);
108
+ }
109
+ /**
110
+ * Emit an event to handlers
111
+ */
112
+ emit(event, data) {
113
+ const handlers = this.handlers.get(event);
114
+ if (handlers) {
115
+ for (const handler of handlers) {
116
+ handler(data);
117
+ }
118
+ }
119
+ }
120
+ // ============================================================
121
+ // Session state (read-only)
122
+ // ============================================================
123
+ /** Current working directory */
124
+ get cwd() {
125
+ return this._cwd;
126
+ }
127
+ /** Current session ID */
128
+ get sessionId() {
129
+ return this._sessionId;
130
+ }
131
+ /** Current agent info */
132
+ get agent() {
133
+ return this._agent;
134
+ }
135
+ /** Available agents */
136
+ get availableAgents() {
137
+ return this._availableAgents;
138
+ }
139
+ /** Available models */
140
+ get availableModels() {
141
+ return this._availableModels;
142
+ }
143
+ /** Current model ID */
144
+ get currentModelId() {
145
+ return this._currentModelId;
146
+ }
147
+ /** Agent capabilities */
148
+ get capabilities() {
149
+ return this._capabilities;
150
+ }
151
+ /** List of sessions (from list_sessions response) */
152
+ get sessions() {
153
+ return this._sessions;
154
+ }
155
+ // ============================================================
156
+ // Derived state (computed)
157
+ // ============================================================
158
+ /** Whether currently processing a turn */
159
+ get isProcessing() {
160
+ return this._isProcessing;
161
+ }
162
+ /** Whether agent is actively streaming */
163
+ get isStreaming() {
164
+ return this.accumulator.currentTurn?.status === 'streaming';
165
+ }
166
+ /** Whether blocked on permission request */
167
+ get isAwaitingPermission() {
168
+ return this._pendingPermission !== null;
169
+ }
170
+ /** Current pending permission request */
171
+ get pendingPermission() {
172
+ return this._pendingPermission;
173
+ }
174
+ // ============================================================
175
+ // Message accumulator access
176
+ // ============================================================
177
+ /** All accumulated messages */
178
+ get messages() {
179
+ return this.accumulator.messages;
180
+ }
181
+ /** All turns */
182
+ get turns() {
183
+ return this.accumulator.turns;
184
+ }
185
+ /** Current active turn */
186
+ get currentTurn() {
187
+ return this.accumulator.currentTurn;
188
+ }
189
+ /** Last user message */
190
+ get lastUserMessage() {
191
+ return this.accumulator.lastUserMessage;
192
+ }
193
+ /** Last assistant message */
194
+ get lastAssistantMessage() {
195
+ return this.accumulator.lastAssistantMessage;
196
+ }
197
+ // ============================================================
198
+ // Commands (fire-and-forget)
199
+ // ============================================================
200
+ /**
201
+ * Send a prompt to the agent
202
+ */
203
+ prompt(message) {
204
+ this.connection.send({ type: 'prompt', message });
205
+ }
206
+ /**
207
+ * Cancel current operation
208
+ */
209
+ cancel() {
210
+ this.connection.send({ type: 'cancel' });
211
+ }
212
+ /**
213
+ * Respond to a permission request
214
+ */
215
+ respondToPermission(requestId, optionId) {
216
+ this.connection.send({ type: 'permission_response', requestId, optionId });
217
+ this._pendingPermission = null;
218
+ this.accumulator.resumeStreaming();
219
+ }
220
+ /**
221
+ * Change working directory
222
+ */
223
+ changeCwd(path) {
224
+ this.connection.send({ type: 'change_cwd', path });
225
+ }
226
+ /**
227
+ * Create a new session
228
+ */
229
+ newSession() {
230
+ this.connection.send({ type: 'new_session' });
231
+ this.accumulator.clear();
232
+ }
233
+ /**
234
+ * Change agent type
235
+ */
236
+ changeAgent(agentType) {
237
+ this.connection.send({ type: 'change_agent', agentType });
238
+ this.accumulator.clear();
239
+ }
240
+ /**
241
+ * Set session mode
242
+ */
243
+ setMode(modeId) {
244
+ this.connection.send({ type: 'set_mode', modeId });
245
+ }
246
+ /**
247
+ * Set model
248
+ */
249
+ setModel(modelId) {
250
+ this.connection.send({ type: 'set_model', modelId });
251
+ }
252
+ /**
253
+ * Request list of sessions
254
+ */
255
+ requestSessions() {
256
+ this.connection.send({ type: 'list_sessions' });
257
+ }
258
+ /**
259
+ * Switch to a different session
260
+ */
261
+ switchSession(sessionId) {
262
+ this.connection.send({ type: 'switch_session', sessionId });
263
+ this.accumulator.clear();
264
+ }
265
+ /**
266
+ * Request history for current session
267
+ */
268
+ requestHistory() {
269
+ this.connection.send({ type: 'get_history' });
270
+ }
271
+ // ============================================================
272
+ // Internal message handling
273
+ // ============================================================
274
+ handleMessage(msg) {
275
+ switch (msg.type) {
276
+ case 'ready':
277
+ this._isReady = true;
278
+ this._cwd = msg.cwd;
279
+ this._sessionId = msg.sessionId;
280
+ this._agent = msg.agent;
281
+ this._availableAgents = msg.availableAgents;
282
+ this._availableModels = msg.availableModels ?? [];
283
+ this._currentModelId = msg.currentModelId ?? null;
284
+ this._capabilities = msg.capabilities;
285
+ this.emit('ready', msg);
286
+ break;
287
+ case 'connecting':
288
+ this._isReady = false;
289
+ this.emit('connecting', {});
290
+ break;
291
+ case 'session_update':
292
+ this.accumulator.processUpdate(msg.update);
293
+ this.emit('update', msg.update);
294
+ this.emit('messages_updated', { messages: this.messages });
295
+ this.emit('turns_updated', { turns: this.turns });
296
+ break;
297
+ case 'turn_start':
298
+ this._isProcessing = true;
299
+ this.accumulator.startTurn();
300
+ this.emit('turn_start', {});
301
+ break;
302
+ case 'turn_end':
303
+ this._isProcessing = false;
304
+ this.accumulator.endTurn();
305
+ this.emit('turn_end', {});
306
+ this.emit('messages_updated', { messages: this.messages });
307
+ this.emit('turns_updated', { turns: this.turns });
308
+ break;
309
+ case 'permission_request': {
310
+ const permissionData = {
311
+ requestId: msg.requestId,
312
+ toolCall: msg.toolCall,
313
+ options: msg.options,
314
+ };
315
+ this._pendingPermission = permissionData;
316
+ this.accumulator.setAwaitingPermission();
317
+ this.emit('permission_request', permissionData);
318
+ break;
319
+ }
320
+ case 'prompt_complete':
321
+ this.emit('prompt_complete', msg);
322
+ break;
323
+ case 'session_created':
324
+ this._sessionId = msg.sessionId;
325
+ this.emit('session_created', msg);
326
+ break;
327
+ case 'session_switched':
328
+ this._sessionId = msg.sessionId;
329
+ this.emit('session_switched', msg);
330
+ break;
331
+ case 'history_replay':
332
+ this.accumulator.replayHistory(msg.events);
333
+ this.emit('history_replay', msg);
334
+ this.emit('messages_updated', { messages: this.messages });
335
+ this.emit('turns_updated', { turns: this.turns });
336
+ break;
337
+ case 'history':
338
+ this.emit('history', msg);
339
+ break;
340
+ case 'sessions':
341
+ this._sessions = msg.sessions;
342
+ this.emit('sessions', msg);
343
+ break;
344
+ case 'error':
345
+ this.emit('error', msg);
346
+ break;
347
+ case 'agent_exit':
348
+ this._isReady = false;
349
+ this._isProcessing = false;
350
+ this.emit('agent_exit', msg);
351
+ break;
352
+ }
353
+ }
354
+ handleStatusChange(status) {
355
+ if (status === 'ready') {
356
+ this._isReady = true;
357
+ }
358
+ else if (status === 'disconnected') {
359
+ this._isReady = false;
360
+ }
361
+ this.emit('connection_status', { status });
362
+ }
363
+ }
364
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAc/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,UAAU;IACb,UAAU,CAAa;IACvB,WAAW,CAAc;IACzB,QAAQ,GAAkB,IAAI,GAAG,EAAE,CAAC;IAE5C,sCAAsC;IAC9B,IAAI,GAAkB,IAAI,CAAC;IAC3B,UAAU,GAAkB,IAAI,CAAC;IACjC,MAAM,GAAqB,IAAI,CAAC;IAChC,gBAAgB,GAAwC,EAAE,CAAC;IAC3D,gBAAgB,GAAgB,EAAE,CAAC;IACnC,eAAe,GAAkB,IAAI,CAAC;IACtC,aAAa,GAAY,IAAI,CAAC;IAC9B,SAAS,GAAsB,EAAE,CAAC;IAClC,QAAQ,GAAG,KAAK,CAAC;IACjB,aAAa,GAAG,KAAK,CAAC;IACtB,kBAAkB,GAAkD,IAAI,CAAC;IAEjF,YAAY,OAA0B;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACpC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI;YACpD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,QAAQ;SAC/D,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAErC,4BAA4B;QAC5B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,uBAAuB;IACvB,+DAA+D;IAE/D;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,+DAA+D;IAC/D,qBAAqB;IACrB,+DAA+D;IAE/D;;OAEG;IACH,EAAE,CACA,KAAQ,EACR,OAA4C;QAE5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,OAAuB,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,GAAG,CACD,KAAQ,EACR,OAA4C;QAE5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAuB,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACK,IAAI,CAAmC,KAAQ,EAAE,IAAyB;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,4BAA4B;IAC5B,+DAA+D;IAE/D,gCAAgC;IAChC,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,yBAAyB;IACzB,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,uBAAuB;IACvB,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,uBAAuB;IACvB,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,uBAAuB;IACvB,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,+DAA+D;IAC/D,2BAA2B;IAC3B,+DAA+D;IAE/D,0CAA0C;IAC1C,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,KAAK,WAAW,CAAC;IAC9D,CAAC;IAED,4CAA4C;IAC5C,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC;IAC1C,CAAC;IAED,yCAAyC;IACzC,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,+DAA+D;IAC/D,6BAA6B;IAC7B,+DAA+D;IAE/D,+BAA+B;IAC/B,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAED,0BAA0B;IAC1B,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;IACtC,CAAC;IAED,wBAAwB;IACxB,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAC1C,CAAC;IAED,6BAA6B;IAC7B,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;IAC/C,CAAC;IAED,+DAA+D;IAC/D,6BAA6B;IAC7B,+DAA+D;IAE/D;;OAEG;IACH,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,SAAiB,EAAE,QAAgB;QACrD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,SAAiB;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,+DAA+D;IAC/D,4BAA4B;IAC5B,+DAA+D;IAEvD,aAAa,CAAC,GAAkB;QACtC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;gBAChC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;gBACxB,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,eAAe,CAAC;gBAC5C,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;gBAClD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC;gBAClD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAC5B,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAC5B,MAAM;YAER,KAAK,UAAU;gBACb,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,MAAM;YAER,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,cAAc,GAAG;oBACrB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,OAAO,EAAE,GAAG,CAAC,OAA4C;iBAC1D,CAAC;gBACF,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;gBAChD,MAAM;YACR,CAAC;YAED,KAAK,iBAAiB;gBACpB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBAClC,MAAM;YAER,KAAK,iBAAiB;gBACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBAClC,MAAM;YAER,KAAK,kBAAkB;gBACrB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACnC,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC1B,MAAM;YAER,KAAK,UAAU;gBACb,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAC3B,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM;QACV,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,MAAwB;QACjD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,81 @@
1
+ import type { ClientMessage, ServerMessage } from '@bytespell/amux-types';
2
+ import type { ConnectionStatus } from './types.js';
3
+ /**
4
+ * Event handler types for Connection
5
+ */
6
+ export interface ConnectionEvents {
7
+ open: () => void;
8
+ close: (event: {
9
+ code: number;
10
+ reason: string;
11
+ wasClean: boolean;
12
+ }) => void;
13
+ message: (message: ServerMessage) => void;
14
+ error: (error: Event) => void;
15
+ status: (status: ConnectionStatus) => void;
16
+ }
17
+ /**
18
+ * Connection options
19
+ */
20
+ export interface ConnectionOptions {
21
+ url: string;
22
+ reconnect?: boolean;
23
+ reconnectInterval?: number;
24
+ maxReconnectAttempts?: number;
25
+ }
26
+ /**
27
+ * WebSocket connection manager with auto-reconnect
28
+ */
29
+ export declare class Connection {
30
+ private ws;
31
+ private reconnectAttempts;
32
+ private reconnectTimeout;
33
+ private _status;
34
+ private handlers;
35
+ private readonly url;
36
+ private readonly reconnect;
37
+ private readonly reconnectInterval;
38
+ private readonly maxReconnectAttempts;
39
+ constructor(options: ConnectionOptions);
40
+ /**
41
+ * Current connection status
42
+ */
43
+ get status(): ConnectionStatus;
44
+ /**
45
+ * Whether the connection is open
46
+ */
47
+ get isConnected(): boolean;
48
+ /**
49
+ * Add event listener
50
+ */
51
+ on<K extends keyof ConnectionEvents>(event: K, handler: ConnectionEvents[K]): void;
52
+ /**
53
+ * Remove event listener
54
+ */
55
+ off<K extends keyof ConnectionEvents>(event: K, handler: ConnectionEvents[K]): void;
56
+ /**
57
+ * Emit event to handlers
58
+ */
59
+ private emit;
60
+ /**
61
+ * Set and emit status change
62
+ */
63
+ private setStatus;
64
+ /**
65
+ * Connect to WebSocket server
66
+ */
67
+ connect(): void;
68
+ /**
69
+ * Disconnect from WebSocket server
70
+ */
71
+ disconnect(): void;
72
+ /**
73
+ * Send a message to the server
74
+ */
75
+ send(message: ClientMessage): void;
76
+ /**
77
+ * Schedule a reconnection attempt
78
+ */
79
+ private scheduleReconnect;
80
+ }
81
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAyB;IAEzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAElC,OAAO,EAAE,iBAAiB;IAOtC;;OAEG;IACH,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAOlF;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAInF;;OAEG;IACH,OAAO,CAAC,IAAI;IAYZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,IAAI,IAAI;IAsCf;;OAEG;IACH,UAAU,IAAI,IAAI;IAalB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAgB1B"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * WebSocket connection manager with auto-reconnect
3
+ */
4
+ export class Connection {
5
+ ws = null;
6
+ reconnectAttempts = 0;
7
+ reconnectTimeout = null;
8
+ _status = 'disconnected';
9
+ handlers = new Map();
10
+ url;
11
+ reconnect;
12
+ reconnectInterval;
13
+ maxReconnectAttempts;
14
+ constructor(options) {
15
+ this.url = options.url;
16
+ this.reconnect = options.reconnect ?? true;
17
+ this.reconnectInterval = options.reconnectInterval ?? 1000;
18
+ this.maxReconnectAttempts = options.maxReconnectAttempts ?? Infinity;
19
+ }
20
+ /**
21
+ * Current connection status
22
+ */
23
+ get status() {
24
+ return this._status;
25
+ }
26
+ /**
27
+ * Whether the connection is open
28
+ */
29
+ get isConnected() {
30
+ return this.ws?.readyState === WebSocket.OPEN;
31
+ }
32
+ /**
33
+ * Add event listener
34
+ */
35
+ on(event, handler) {
36
+ if (!this.handlers.has(event)) {
37
+ this.handlers.set(event, new Set());
38
+ }
39
+ this.handlers.get(event).add(handler);
40
+ }
41
+ /**
42
+ * Remove event listener
43
+ */
44
+ off(event, handler) {
45
+ this.handlers.get(event)?.delete(handler);
46
+ }
47
+ /**
48
+ * Emit event to handlers
49
+ */
50
+ emit(event, ...args) {
51
+ const handlers = this.handlers.get(event);
52
+ if (handlers) {
53
+ for (const handler of handlers) {
54
+ handler(...args);
55
+ }
56
+ }
57
+ }
58
+ /**
59
+ * Set and emit status change
60
+ */
61
+ setStatus(status) {
62
+ if (this._status !== status) {
63
+ this._status = status;
64
+ this.emit('status', status);
65
+ }
66
+ }
67
+ /**
68
+ * Connect to WebSocket server
69
+ */
70
+ connect() {
71
+ if (this.ws && (this.ws.readyState === WebSocket.CONNECTING || this.ws.readyState === WebSocket.OPEN)) {
72
+ return;
73
+ }
74
+ this.setStatus('connecting');
75
+ this.ws = new WebSocket(this.url);
76
+ this.ws.onopen = () => {
77
+ this.reconnectAttempts = 0;
78
+ this.setStatus('connected');
79
+ this.emit('open');
80
+ };
81
+ this.ws.onclose = (event) => {
82
+ this.setStatus('disconnected');
83
+ this.emit('close', { code: event.code, reason: event.reason, wasClean: event.wasClean });
84
+ this.ws = null;
85
+ if (this.reconnect && this.reconnectAttempts < this.maxReconnectAttempts) {
86
+ this.scheduleReconnect();
87
+ }
88
+ };
89
+ this.ws.onerror = (error) => {
90
+ this.emit('error', error);
91
+ };
92
+ this.ws.onmessage = (event) => {
93
+ try {
94
+ const message = JSON.parse(event.data);
95
+ this.emit('message', message);
96
+ }
97
+ catch {
98
+ console.error('[amux-client] Failed to parse message:', event.data);
99
+ }
100
+ };
101
+ }
102
+ /**
103
+ * Disconnect from WebSocket server
104
+ */
105
+ disconnect() {
106
+ if (this.reconnectTimeout) {
107
+ clearTimeout(this.reconnectTimeout);
108
+ this.reconnectTimeout = null;
109
+ }
110
+ this.reconnectAttempts = this.maxReconnectAttempts; // Prevent reconnect
111
+ if (this.ws) {
112
+ this.ws.close();
113
+ this.ws = null;
114
+ }
115
+ this.setStatus('disconnected');
116
+ }
117
+ /**
118
+ * Send a message to the server
119
+ */
120
+ send(message) {
121
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
122
+ console.warn('[amux-client] Cannot send message: not connected');
123
+ return;
124
+ }
125
+ this.ws.send(JSON.stringify(message));
126
+ }
127
+ /**
128
+ * Schedule a reconnection attempt
129
+ */
130
+ scheduleReconnect() {
131
+ if (this.reconnectTimeout)
132
+ return;
133
+ this.reconnectAttempts++;
134
+ const delay = Math.min(this.reconnectInterval * Math.pow(2, this.reconnectAttempts - 1), 30000 // Max 30 seconds
135
+ );
136
+ console.log(`[amux-client] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts})`);
137
+ this.reconnectTimeout = setTimeout(() => {
138
+ this.reconnectTimeout = null;
139
+ this.connect();
140
+ }, delay);
141
+ }
142
+ }
143
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @bytespell/amux-client
3
+ *
4
+ * Client library for consuming amux over WebSocket.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { AmuxClient } from '@bytespell/amux-client';
9
+ *
10
+ * const client = new AmuxClient({ url: 'ws://localhost:3000/ws' });
11
+ *
12
+ * client.on('ready', (data) => {
13
+ * console.log('Ready:', data.cwd);
14
+ * });
15
+ *
16
+ * client.on('update', (update) => {
17
+ * console.log('Update:', update);
18
+ * });
19
+ *
20
+ * client.connect();
21
+ * client.prompt('Hello!');
22
+ * ```
23
+ *
24
+ * For React integration, use:
25
+ * ```typescript
26
+ * import { AmuxProvider, useAmux } from '@bytespell/amux-client/react';
27
+ * ```
28
+ */
29
+ export { AmuxClient } from './client.js';
30
+ export { Connection } from './connection.js';
31
+ export type { ConnectionOptions, ConnectionEvents } from './connection.js';
32
+ export { Accumulator } from './accumulator.js';
33
+ export type { AmuxClientOptions, AmuxClientEvents, ConnectionStatus, Message, Turn, ToolCallState, ContentBlock, } from './types.js';
34
+ export type { ServerMessage, ClientMessage, SessionUpdate, AgentInfo, ModelInfo, SessionMetadata, PermissionRequest, } from '@bytespell/amux-types';
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,IAAI,EACJ,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,GAClB,MAAM,uBAAuB,CAAC"}