@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
@@ -0,0 +1,77 @@
1
+ import type { SessionUpdate } from '@bytespell/amux-types';
2
+ import type { Message, Turn } from './types.js';
3
+ /**
4
+ * Message and Turn accumulator
5
+ *
6
+ * Processes streaming session updates and builds structured conversation data.
7
+ */
8
+ export declare class Accumulator {
9
+ private _messages;
10
+ private _turns;
11
+ private _currentTurn;
12
+ /**
13
+ * All accumulated messages
14
+ */
15
+ get messages(): Message[];
16
+ /**
17
+ * All turns (grouped user/assistant pairs)
18
+ */
19
+ get turns(): Turn[];
20
+ /**
21
+ * Current active turn (if streaming)
22
+ */
23
+ get currentTurn(): Turn | null;
24
+ /**
25
+ * Last user message
26
+ */
27
+ get lastUserMessage(): Message | null;
28
+ /**
29
+ * Last assistant message
30
+ */
31
+ get lastAssistantMessage(): Message | null;
32
+ /**
33
+ * Start a new turn
34
+ */
35
+ startTurn(): void;
36
+ /**
37
+ * End the current turn
38
+ */
39
+ endTurn(): void;
40
+ /**
41
+ * Set turn status to awaiting permission
42
+ */
43
+ setAwaitingPermission(): void;
44
+ /**
45
+ * Resume streaming after permission
46
+ */
47
+ resumeStreaming(): void;
48
+ /**
49
+ * Process a session update
50
+ */
51
+ processUpdate(update: SessionUpdate): void;
52
+ /**
53
+ * Process user message chunk
54
+ */
55
+ private processUserChunk;
56
+ /**
57
+ * Process assistant message chunk
58
+ */
59
+ private processAssistantChunk;
60
+ /**
61
+ * Process tool call
62
+ */
63
+ private processToolCall;
64
+ /**
65
+ * Process tool call update
66
+ */
67
+ private processToolCallUpdate;
68
+ /**
69
+ * Replay history events
70
+ */
71
+ replayHistory(events: unknown[]): void;
72
+ /**
73
+ * Clear all accumulated data
74
+ */
75
+ clear(): void;
76
+ }
77
+ //# sourceMappingURL=accumulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accumulator.d.ts","sourceRoot":"","sources":["../src/accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AAS/D;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAqB;IAEzC;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,IAAI,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,OAAO,GAAG,IAAI,CAOpC;IAED;;OAEG;IACH,IAAI,oBAAoB,IAAI,OAAO,GAAG,IAAI,CAOzC;IAED;;OAEG;IACH,SAAS,IAAI,IAAI;IAWjB;;OAEG;IACH,OAAO,IAAI,IAAI;IAaf;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAM7B;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAmB1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4C7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAkBtC;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Generate a unique ID
3
+ */
4
+ function generateId() {
5
+ return Math.random().toString(36).substring(2, 15);
6
+ }
7
+ /**
8
+ * Message and Turn accumulator
9
+ *
10
+ * Processes streaming session updates and builds structured conversation data.
11
+ */
12
+ export class Accumulator {
13
+ _messages = [];
14
+ _turns = [];
15
+ _currentTurn = null;
16
+ /**
17
+ * All accumulated messages
18
+ */
19
+ get messages() {
20
+ return this._messages;
21
+ }
22
+ /**
23
+ * All turns (grouped user/assistant pairs)
24
+ */
25
+ get turns() {
26
+ return this._turns;
27
+ }
28
+ /**
29
+ * Current active turn (if streaming)
30
+ */
31
+ get currentTurn() {
32
+ return this._currentTurn;
33
+ }
34
+ /**
35
+ * Last user message
36
+ */
37
+ get lastUserMessage() {
38
+ for (let i = this._messages.length - 1; i >= 0; i--) {
39
+ if (this._messages[i]?.role === 'user') {
40
+ return this._messages[i] ?? null;
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Last assistant message
47
+ */
48
+ get lastAssistantMessage() {
49
+ for (let i = this._messages.length - 1; i >= 0; i--) {
50
+ if (this._messages[i]?.role === 'assistant') {
51
+ return this._messages[i] ?? null;
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ /**
57
+ * Start a new turn
58
+ */
59
+ startTurn() {
60
+ this._currentTurn = {
61
+ id: generateId(),
62
+ userMessage: null,
63
+ assistantMessage: null,
64
+ toolCalls: [],
65
+ status: 'streaming',
66
+ };
67
+ this._turns.push(this._currentTurn);
68
+ }
69
+ /**
70
+ * End the current turn
71
+ */
72
+ endTurn() {
73
+ if (this._currentTurn) {
74
+ this._currentTurn.status = 'complete';
75
+ if (this._currentTurn.userMessage) {
76
+ this._currentTurn.userMessage.status = 'complete';
77
+ }
78
+ if (this._currentTurn.assistantMessage) {
79
+ this._currentTurn.assistantMessage.status = 'complete';
80
+ }
81
+ this._currentTurn = null;
82
+ }
83
+ }
84
+ /**
85
+ * Set turn status to awaiting permission
86
+ */
87
+ setAwaitingPermission() {
88
+ if (this._currentTurn) {
89
+ this._currentTurn.status = 'awaiting_permission';
90
+ }
91
+ }
92
+ /**
93
+ * Resume streaming after permission
94
+ */
95
+ resumeStreaming() {
96
+ if (this._currentTurn && this._currentTurn.status === 'awaiting_permission') {
97
+ this._currentTurn.status = 'streaming';
98
+ }
99
+ }
100
+ /**
101
+ * Process a session update
102
+ */
103
+ processUpdate(update) {
104
+ const updateType = update.sessionUpdate;
105
+ switch (updateType) {
106
+ case 'user_message_chunk':
107
+ this.processUserChunk(update);
108
+ break;
109
+ case 'agent_message_chunk':
110
+ this.processAssistantChunk(update);
111
+ break;
112
+ case 'tool_call':
113
+ this.processToolCall(update);
114
+ break;
115
+ case 'tool_call_update':
116
+ this.processToolCallUpdate(update);
117
+ break;
118
+ }
119
+ }
120
+ /**
121
+ * Process user message chunk
122
+ */
123
+ processUserChunk(update) {
124
+ if (update.sessionUpdate !== 'user_message_chunk')
125
+ return;
126
+ // Create or get current turn
127
+ if (!this._currentTurn) {
128
+ this.startTurn();
129
+ }
130
+ // Create user message if needed
131
+ if (!this._currentTurn.userMessage) {
132
+ const userMessage = {
133
+ id: generateId(),
134
+ role: 'user',
135
+ content: [],
136
+ status: 'streaming',
137
+ timestamp: Date.now(),
138
+ };
139
+ this._currentTurn.userMessage = userMessage;
140
+ this._messages.push(userMessage);
141
+ }
142
+ // Add content
143
+ const content = update.content;
144
+ if (content?.type === 'text' && content.text) {
145
+ const lastBlock = this._currentTurn.userMessage.content[this._currentTurn.userMessage.content.length - 1];
146
+ if (lastBlock?.type === 'text') {
147
+ lastBlock.text += content.text;
148
+ }
149
+ else {
150
+ this._currentTurn.userMessage.content.push({
151
+ type: 'text',
152
+ text: content.text,
153
+ });
154
+ }
155
+ }
156
+ }
157
+ /**
158
+ * Process assistant message chunk
159
+ */
160
+ processAssistantChunk(update) {
161
+ if (update.sessionUpdate !== 'agent_message_chunk')
162
+ return;
163
+ // Create turn if needed
164
+ if (!this._currentTurn) {
165
+ this.startTurn();
166
+ }
167
+ // Create assistant message if needed
168
+ if (!this._currentTurn.assistantMessage) {
169
+ const assistantMessage = {
170
+ id: generateId(),
171
+ role: 'assistant',
172
+ content: [],
173
+ status: 'streaming',
174
+ timestamp: Date.now(),
175
+ };
176
+ this._currentTurn.assistantMessage = assistantMessage;
177
+ this._messages.push(assistantMessage);
178
+ }
179
+ // Add content based on type
180
+ const content = update.content;
181
+ if (!content)
182
+ return;
183
+ const assistantContent = this._currentTurn.assistantMessage.content;
184
+ if (content.type === 'text' && content.text) {
185
+ const lastBlock = assistantContent[assistantContent.length - 1];
186
+ if (lastBlock?.type === 'text') {
187
+ lastBlock.text += content.text;
188
+ }
189
+ else {
190
+ assistantContent.push({ type: 'text', text: content.text });
191
+ }
192
+ }
193
+ else if (content.type === 'thinking' && content.text) {
194
+ const lastBlock = assistantContent[assistantContent.length - 1];
195
+ if (lastBlock?.type === 'thinking') {
196
+ lastBlock.text += content.text;
197
+ }
198
+ else {
199
+ assistantContent.push({ type: 'thinking', text: content.text });
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * Process tool call
205
+ */
206
+ processToolCall(update) {
207
+ if (update.sessionUpdate !== 'tool_call')
208
+ return;
209
+ if (!this._currentTurn)
210
+ return;
211
+ const toolCall = {
212
+ id: update.toolCallId ?? generateId(),
213
+ name: update.title ?? 'unknown',
214
+ input: update.input,
215
+ status: 'pending',
216
+ };
217
+ this._currentTurn.toolCalls.push(toolCall);
218
+ // Also add to assistant message content
219
+ if (this._currentTurn.assistantMessage) {
220
+ this._currentTurn.assistantMessage.content.push({
221
+ type: 'tool_use',
222
+ id: toolCall.id,
223
+ name: toolCall.name,
224
+ input: toolCall.input,
225
+ });
226
+ }
227
+ }
228
+ /**
229
+ * Process tool call update
230
+ */
231
+ processToolCallUpdate(update) {
232
+ if (update.sessionUpdate !== 'tool_call_update')
233
+ return;
234
+ if (!this._currentTurn)
235
+ return;
236
+ const toolCallId = update.toolCallId;
237
+ if (!toolCallId)
238
+ return;
239
+ const toolCall = this._currentTurn.toolCalls.find((tc) => tc.id === toolCallId);
240
+ if (!toolCall)
241
+ return;
242
+ const status = update.status;
243
+ if (status === 'running') {
244
+ toolCall.status = 'running';
245
+ }
246
+ else if (status === 'completed') {
247
+ toolCall.status = 'complete';
248
+ toolCall.result = update.output;
249
+ }
250
+ else if (status === 'error') {
251
+ toolCall.status = 'error';
252
+ toolCall.error = update.error;
253
+ }
254
+ }
255
+ /**
256
+ * Replay history events
257
+ */
258
+ replayHistory(events) {
259
+ // Clear current state
260
+ this._messages = [];
261
+ this._turns = [];
262
+ this._currentTurn = null;
263
+ for (const event of events) {
264
+ const e = event;
265
+ if (e.type === 'turn_start') {
266
+ this.startTurn();
267
+ }
268
+ else if (e.type === 'turn_end') {
269
+ this.endTurn();
270
+ }
271
+ else if (e.type === 'session_update' && e.update) {
272
+ this.processUpdate(e.update);
273
+ }
274
+ }
275
+ }
276
+ /**
277
+ * Clear all accumulated data
278
+ */
279
+ clear() {
280
+ this._messages = [];
281
+ this._turns = [];
282
+ this._currentTurn = null;
283
+ }
284
+ }
285
+ //# sourceMappingURL=accumulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accumulator.js","sourceRoot":"","sources":["../src/accumulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ import type { AgentInfo, ModelInfo, SessionMetadata } from '@bytespell/amux-types';
2
+ import type { AmuxClientOptions, AmuxClientEvents, ConnectionStatus, Message, Turn } from './types.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 declare class AmuxClient {
24
+ private connection;
25
+ private accumulator;
26
+ private handlers;
27
+ private _cwd;
28
+ private _sessionId;
29
+ private _agent;
30
+ private _availableAgents;
31
+ private _availableModels;
32
+ private _currentModelId;
33
+ private _capabilities;
34
+ private _sessions;
35
+ private _isReady;
36
+ private _isProcessing;
37
+ private _pendingPermission;
38
+ constructor(options: AmuxClientOptions);
39
+ /**
40
+ * Connect to the WebSocket server
41
+ */
42
+ connect(): void;
43
+ /**
44
+ * Disconnect from the WebSocket server
45
+ */
46
+ disconnect(): void;
47
+ /**
48
+ * Whether WebSocket is connected
49
+ */
50
+ get isConnected(): boolean;
51
+ /**
52
+ * Whether client is ready (connected and received 'ready' event)
53
+ */
54
+ get isReady(): boolean;
55
+ /**
56
+ * Current connection status
57
+ */
58
+ get connectionStatus(): ConnectionStatus;
59
+ /**
60
+ * Subscribe to an event
61
+ */
62
+ on<K extends keyof AmuxClientEvents>(event: K, handler: (data: AmuxClientEvents[K]) => void): void;
63
+ /**
64
+ * Unsubscribe from an event
65
+ */
66
+ off<K extends keyof AmuxClientEvents>(event: K, handler: (data: AmuxClientEvents[K]) => void): void;
67
+ /**
68
+ * Emit an event to handlers
69
+ */
70
+ private emit;
71
+ /** Current working directory */
72
+ get cwd(): string | null;
73
+ /** Current session ID */
74
+ get sessionId(): string | null;
75
+ /** Current agent info */
76
+ get agent(): AgentInfo | null;
77
+ /** Available agents */
78
+ get availableAgents(): Array<{
79
+ id: string;
80
+ name: string;
81
+ }>;
82
+ /** Available models */
83
+ get availableModels(): ModelInfo[];
84
+ /** Current model ID */
85
+ get currentModelId(): string | null;
86
+ /** Agent capabilities */
87
+ get capabilities(): unknown;
88
+ /** List of sessions (from list_sessions response) */
89
+ get sessions(): SessionMetadata[];
90
+ /** Whether currently processing a turn */
91
+ get isProcessing(): boolean;
92
+ /** Whether agent is actively streaming */
93
+ get isStreaming(): boolean;
94
+ /** Whether blocked on permission request */
95
+ get isAwaitingPermission(): boolean;
96
+ /** Current pending permission request */
97
+ get pendingPermission(): AmuxClientEvents['permission_request'] | null;
98
+ /** All accumulated messages */
99
+ get messages(): Message[];
100
+ /** All turns */
101
+ get turns(): Turn[];
102
+ /** Current active turn */
103
+ get currentTurn(): Turn | null;
104
+ /** Last user message */
105
+ get lastUserMessage(): Message | null;
106
+ /** Last assistant message */
107
+ get lastAssistantMessage(): Message | null;
108
+ /**
109
+ * Send a prompt to the agent
110
+ */
111
+ prompt(message: string): void;
112
+ /**
113
+ * Cancel current operation
114
+ */
115
+ cancel(): void;
116
+ /**
117
+ * Respond to a permission request
118
+ */
119
+ respondToPermission(requestId: string, optionId: string): void;
120
+ /**
121
+ * Change working directory
122
+ */
123
+ changeCwd(path: string): void;
124
+ /**
125
+ * Create a new session
126
+ */
127
+ newSession(): void;
128
+ /**
129
+ * Change agent type
130
+ */
131
+ changeAgent(agentType: string): void;
132
+ /**
133
+ * Set session mode
134
+ */
135
+ setMode(modeId: string): void;
136
+ /**
137
+ * Set model
138
+ */
139
+ setModel(modelId: string): void;
140
+ /**
141
+ * Request list of sessions
142
+ */
143
+ requestSessions(): void;
144
+ /**
145
+ * Switch to a different session
146
+ */
147
+ switchSession(sessionId: string): void;
148
+ /**
149
+ * Request history for current session
150
+ */
151
+ requestHistory(): void;
152
+ private handleMessage;
153
+ private handleStatusChange;
154
+ }
155
+ //# 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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"}