@bytespell/amux 0.0.11 → 0.0.13

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 (89) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/CLAUDE.md +104 -0
  3. package/LICENSE +21 -0
  4. package/README.md +215 -0
  5. package/dist/cli.d.ts +14 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +118 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/client.d.ts +68 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +135 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/index.d.ts +41 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +44 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/{lib/mentions.d.ts → message-parser.d.ts} +3 -5
  18. package/dist/message-parser.d.ts.map +1 -0
  19. package/dist/message-parser.js +45 -0
  20. package/dist/message-parser.js.map +1 -0
  21. package/dist/message-parser.test.d.ts +2 -0
  22. package/dist/message-parser.test.d.ts.map +1 -0
  23. package/dist/message-parser.test.js +188 -0
  24. package/dist/message-parser.test.js.map +1 -0
  25. package/dist/server.d.ts +24 -0
  26. package/dist/server.d.ts.map +1 -0
  27. package/dist/server.js +356 -0
  28. package/dist/server.js.map +1 -0
  29. package/dist/session-updates.d.ts +26 -0
  30. package/dist/session-updates.d.ts.map +1 -0
  31. package/dist/session-updates.js +68 -0
  32. package/dist/session-updates.js.map +1 -0
  33. package/dist/session-updates.test.d.ts +2 -0
  34. package/dist/session-updates.test.d.ts.map +1 -0
  35. package/dist/session-updates.test.js +223 -0
  36. package/dist/session-updates.test.js.map +1 -0
  37. package/dist/session.d.ts +208 -0
  38. package/dist/session.d.ts.map +1 -0
  39. package/dist/session.js +580 -0
  40. package/dist/session.js.map +1 -0
  41. package/dist/state.d.ts +74 -0
  42. package/dist/state.d.ts.map +1 -0
  43. package/dist/state.js +250 -0
  44. package/dist/state.js.map +1 -0
  45. package/dist/terminal.d.ts +47 -0
  46. package/dist/terminal.d.ts.map +1 -0
  47. package/dist/terminal.js +137 -0
  48. package/dist/terminal.js.map +1 -0
  49. package/dist/types.d.ts +64 -2
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +16 -31
  52. package/dist/types.js.map +1 -1
  53. package/dist/ws-adapter.d.ts +39 -0
  54. package/dist/ws-adapter.d.ts.map +1 -0
  55. package/dist/ws-adapter.js +198 -0
  56. package/dist/ws-adapter.js.map +1 -0
  57. package/package.json +47 -24
  58. package/src/client.ts +162 -0
  59. package/src/index.ts +66 -0
  60. package/src/message-parser.test.ts +207 -0
  61. package/src/message-parser.ts +54 -0
  62. package/src/session-updates.test.ts +265 -0
  63. package/src/session-updates.ts +87 -0
  64. package/src/session.ts +737 -0
  65. package/src/state.ts +287 -0
  66. package/src/terminal.ts +164 -0
  67. package/src/types.ts +88 -0
  68. package/src/ws-adapter.ts +245 -0
  69. package/tsconfig.json +22 -0
  70. package/vitest.config.ts +7 -0
  71. package/dist/chunk-5IPYOXBE.js +0 -32
  72. package/dist/chunk-5IPYOXBE.js.map +0 -1
  73. package/dist/chunk-C73RKCTS.js +0 -36
  74. package/dist/chunk-C73RKCTS.js.map +0 -1
  75. package/dist/chunk-VVXT4HQM.js +0 -779
  76. package/dist/chunk-VVXT4HQM.js.map +0 -1
  77. package/dist/lib/logger.d.ts +0 -24
  78. package/dist/lib/logger.js +0 -17
  79. package/dist/lib/logger.js.map +0 -1
  80. package/dist/lib/mentions.js +0 -7
  81. package/dist/lib/mentions.js.map +0 -1
  82. package/dist/streams/backends/index.d.ts +0 -88
  83. package/dist/streams/backends/index.js +0 -13
  84. package/dist/streams/backends/index.js.map +0 -1
  85. package/dist/streams/manager.d.ts +0 -55
  86. package/dist/streams/manager.js +0 -248
  87. package/dist/streams/manager.js.map +0 -1
  88. package/dist/types-DCRtrjjj.d.ts +0 -192
  89. package/scripts/fix-pty.cjs +0 -21
@@ -0,0 +1,223 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isToolCallUpdate, isToolCallUpdateMessage, normalizeSessionUpdate, } from './session-updates.js';
3
+ describe('isToolCallUpdate', () => {
4
+ it('returns true for tool_call updates', () => {
5
+ const update = {
6
+ sessionUpdate: 'tool_call',
7
+ id: 'test',
8
+ title: 'Test',
9
+ status: 'pending',
10
+ };
11
+ expect(isToolCallUpdate(update)).toBe(true);
12
+ });
13
+ it('returns false for other update types', () => {
14
+ const update = {
15
+ sessionUpdate: 'agent_message_chunk',
16
+ content: { type: 'text', text: 'hello' },
17
+ };
18
+ expect(isToolCallUpdate(update)).toBe(false);
19
+ });
20
+ });
21
+ describe('isToolCallUpdateMessage', () => {
22
+ it('returns true for tool_call_update updates', () => {
23
+ const update = {
24
+ sessionUpdate: 'tool_call_update',
25
+ id: 'test',
26
+ };
27
+ expect(isToolCallUpdateMessage(update)).toBe(true);
28
+ });
29
+ it('returns false for other update types', () => {
30
+ const update = {
31
+ sessionUpdate: 'tool_call',
32
+ id: 'test',
33
+ title: 'Test',
34
+ status: 'pending',
35
+ };
36
+ expect(isToolCallUpdateMessage(update)).toBe(false);
37
+ });
38
+ });
39
+ describe('normalizeSessionUpdate', () => {
40
+ it('passes through non-tool updates unchanged', () => {
41
+ const update = {
42
+ sessionUpdate: 'agent_message_chunk',
43
+ content: { type: 'text', text: 'hello' },
44
+ };
45
+ const result = normalizeSessionUpdate(update);
46
+ expect(result).toEqual(update);
47
+ });
48
+ it('passes through turn_start unchanged', () => {
49
+ const update = {
50
+ sessionUpdate: 'turn_start',
51
+ };
52
+ const result = normalizeSessionUpdate(update);
53
+ expect(result).toEqual(update);
54
+ });
55
+ it('passes through turn_end unchanged', () => {
56
+ const update = {
57
+ sessionUpdate: 'turn_end',
58
+ };
59
+ const result = normalizeSessionUpdate(update);
60
+ expect(result).toEqual(update);
61
+ });
62
+ it('passes through tool_call without content unchanged', () => {
63
+ const update = {
64
+ sessionUpdate: 'tool_call',
65
+ id: 'test',
66
+ title: 'Test Tool',
67
+ status: 'pending',
68
+ };
69
+ const result = normalizeSessionUpdate(update);
70
+ expect(result).toEqual(update);
71
+ });
72
+ it('passes through tool_call with non-diff content unchanged', () => {
73
+ const update = {
74
+ sessionUpdate: 'tool_call',
75
+ id: 'test',
76
+ title: 'Test Tool',
77
+ status: 'pending',
78
+ content: [{ type: 'text', text: 'some output' }],
79
+ };
80
+ const result = normalizeSessionUpdate(update);
81
+ expect(result).toEqual(update);
82
+ });
83
+ it('normalizes tool_call with diff content', () => {
84
+ const update = {
85
+ sessionUpdate: 'tool_call',
86
+ id: 'test',
87
+ title: 'Edit File',
88
+ status: 'completed',
89
+ content: [
90
+ {
91
+ type: 'diff',
92
+ oldText: 'old content',
93
+ newText: 'new content',
94
+ path: '/path/to/file.ts',
95
+ },
96
+ ],
97
+ };
98
+ const result = normalizeSessionUpdate(update);
99
+ // Should have same structure but with normalized diff
100
+ expect(result.sessionUpdate).toBe('tool_call');
101
+ expect(result.content).toHaveLength(1);
102
+ const diffContent = result.content[0];
103
+ expect(diffContent.type).toBe('diff');
104
+ // The newText should now contain unified diff format
105
+ const normalizedDiff = diffContent;
106
+ expect(normalizedDiff.newText).toContain('Index: /path/to/file.ts');
107
+ expect(normalizedDiff.newText).toContain('---');
108
+ expect(normalizedDiff.newText).toContain('+++');
109
+ expect(normalizedDiff.newText).toContain('-old content');
110
+ expect(normalizedDiff.newText).toContain('+new content');
111
+ expect(normalizedDiff.oldText).toBe('');
112
+ expect(normalizedDiff.path).toBe('/path/to/file.ts');
113
+ });
114
+ it('normalizes tool_call_update with diff content', () => {
115
+ const update = {
116
+ sessionUpdate: 'tool_call_update',
117
+ id: 'test',
118
+ content: [
119
+ {
120
+ type: 'diff',
121
+ oldText: 'line1\nline2',
122
+ newText: 'line1\nmodified',
123
+ path: 'test.ts',
124
+ },
125
+ ],
126
+ };
127
+ const result = normalizeSessionUpdate(update);
128
+ const diffContent = result.content[0];
129
+ expect(diffContent.newText).toContain('-line1');
130
+ expect(diffContent.newText).toContain('-line2');
131
+ expect(diffContent.newText).toContain('+line1');
132
+ expect(diffContent.newText).toContain('+modified');
133
+ });
134
+ it('handles empty oldText (new file creation)', () => {
135
+ const update = {
136
+ sessionUpdate: 'tool_call',
137
+ id: 'test',
138
+ title: 'Write File',
139
+ status: 'completed',
140
+ content: [
141
+ {
142
+ type: 'diff',
143
+ oldText: '',
144
+ newText: 'new file content',
145
+ path: 'new-file.ts',
146
+ },
147
+ ],
148
+ };
149
+ const result = normalizeSessionUpdate(update);
150
+ const diffContent = result.content[0];
151
+ expect(diffContent.newText).toContain('@@ -0,0 +1,1 @@');
152
+ expect(diffContent.newText).toContain('+new file content');
153
+ // No removed lines in the diff body (lines starting with - followed by content, not headers)
154
+ const lines = diffContent.newText.split('\n');
155
+ const removedLines = lines.filter(l => l.startsWith('-') && !l.startsWith('---'));
156
+ expect(removedLines).toHaveLength(0);
157
+ });
158
+ it('handles multi-line diffs', () => {
159
+ const update = {
160
+ sessionUpdate: 'tool_call',
161
+ id: 'test',
162
+ title: 'Edit File',
163
+ status: 'completed',
164
+ content: [
165
+ {
166
+ type: 'diff',
167
+ oldText: 'line1\nline2\nline3',
168
+ newText: 'line1\nmodified\nline3\nline4',
169
+ path: 'file.ts',
170
+ },
171
+ ],
172
+ };
173
+ const result = normalizeSessionUpdate(update);
174
+ const diffContent = result.content[0];
175
+ // Should have correct line counts in header
176
+ expect(diffContent.newText).toContain('@@ -1,3 +1,4 @@');
177
+ });
178
+ it('uses "file" as default path when path is missing', () => {
179
+ const update = {
180
+ sessionUpdate: 'tool_call',
181
+ id: 'test',
182
+ title: 'Edit',
183
+ status: 'completed',
184
+ content: [
185
+ {
186
+ type: 'diff',
187
+ oldText: 'old',
188
+ newText: 'new',
189
+ // path intentionally omitted
190
+ },
191
+ ],
192
+ };
193
+ const result = normalizeSessionUpdate(update);
194
+ const diffContent = result.content[0];
195
+ expect(diffContent.newText).toContain('Index: file');
196
+ expect(diffContent.path).toBe('file');
197
+ });
198
+ it('preserves mixed content types in tool_call', () => {
199
+ const update = {
200
+ sessionUpdate: 'tool_call',
201
+ id: 'test',
202
+ title: 'Complex Tool',
203
+ status: 'completed',
204
+ content: [
205
+ { type: 'text', text: 'Before diff' },
206
+ {
207
+ type: 'diff',
208
+ oldText: 'old',
209
+ newText: 'new',
210
+ path: 'file.ts',
211
+ },
212
+ { type: 'text', text: 'After diff' },
213
+ ],
214
+ };
215
+ const result = normalizeSessionUpdate(update);
216
+ const content = result.content;
217
+ expect(content).toHaveLength(3);
218
+ expect(content[0]).toEqual({ type: 'text', text: 'Before diff' });
219
+ expect(content[1]?.type).toBe('diff');
220
+ expect(content[2]).toEqual({ type: 'text', text: 'After diff' });
221
+ });
222
+ });
223
+ //# sourceMappingURL=session-updates.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-updates.test.js","sourceRoot":"","sources":["../src/session-updates.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ import { EventEmitter } from 'events';
2
+ import * as acp from '@agentclientprotocol/sdk';
3
+ import type { AgentSessionConfig, SessionRestoreInfo, SessionMetadata } from './types.js';
4
+ /**
5
+ * Events emitted by AgentSession
6
+ */
7
+ export interface AgentSessionEvents {
8
+ ready: {
9
+ cwd: string;
10
+ sessionId: string | null;
11
+ sessionRestore?: SessionRestoreInfo;
12
+ capabilities: acp.AgentCapabilities | null;
13
+ agent: {
14
+ type: string;
15
+ name: string;
16
+ };
17
+ availableAgents: Array<{
18
+ id: string;
19
+ name: string;
20
+ }>;
21
+ };
22
+ update: acp.SessionUpdate;
23
+ turn_start: Record<string, never>;
24
+ turn_end: Record<string, never>;
25
+ permission_request: {
26
+ requestId: string;
27
+ toolCall?: acp.ToolCall;
28
+ options: acp.PermissionOption[];
29
+ };
30
+ prompt_complete: {
31
+ stopReason?: string;
32
+ };
33
+ session_created: {
34
+ sessionId: string | null;
35
+ };
36
+ session_switched: {
37
+ sessionId: string;
38
+ };
39
+ history_replay: {
40
+ previousSessionId: string;
41
+ events: unknown[];
42
+ eventCount: number;
43
+ };
44
+ error: {
45
+ message: string;
46
+ };
47
+ agent_exit: {
48
+ code: number | null;
49
+ signal: string | null;
50
+ };
51
+ connecting: Record<string, never>;
52
+ }
53
+ /**
54
+ * AgentSession - Core ACP session management with EventEmitter interface.
55
+ *
56
+ * Emits events for all session activity. Transport-agnostic - wire up
57
+ * to WebSocket, HTTP, IPC, or anything else.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const session = new AgentSession({
62
+ * instanceId: 'my-instance',
63
+ * basePath: __dirname,
64
+ * });
65
+ *
66
+ * session.on('ready', (data) => console.log('Ready:', data));
67
+ * session.on('update', (data) => console.log('Update:', data));
68
+ *
69
+ * await session.spawnAgent();
70
+ * await session.prompt('Hello!');
71
+ * ```
72
+ */
73
+ export declare class AgentSession extends EventEmitter {
74
+ private _cwd;
75
+ private _sessionId;
76
+ private _agentType;
77
+ private _systemContext?;
78
+ private agentProcess;
79
+ private acpConnection;
80
+ private _agentCapabilities;
81
+ private _changingCwd;
82
+ private terminalManager;
83
+ private amuxClient;
84
+ private stateManager;
85
+ private instanceId;
86
+ private basePath;
87
+ private fixedCwd?;
88
+ private agents;
89
+ constructor(config: AgentSessionConfig);
90
+ emit<K extends keyof AgentSessionEvents>(event: K, data: AgentSessionEvents[K]): boolean;
91
+ on<K extends keyof AgentSessionEvents>(event: K, listener: (data: AgentSessionEvents[K]) => void): this;
92
+ once<K extends keyof AgentSessionEvents>(event: K, listener: (data: AgentSessionEvents[K]) => void): this;
93
+ /**
94
+ * Emit update and store to history
95
+ */
96
+ private emitUpdate;
97
+ /**
98
+ * Emit turn marker and store to history
99
+ */
100
+ private emitTurnMarker;
101
+ get cwd(): string;
102
+ get sessionId(): string | null;
103
+ get agentType(): string;
104
+ get agentCapabilities(): acp.AgentCapabilities | null;
105
+ get isConnected(): boolean;
106
+ get systemContext(): string | undefined;
107
+ /**
108
+ * Get current agent info
109
+ */
110
+ getAgentInfo(): {
111
+ type: string;
112
+ name: string;
113
+ };
114
+ /**
115
+ * Get available agents list
116
+ */
117
+ getAvailableAgents(): Array<{
118
+ id: string;
119
+ name: string;
120
+ }>;
121
+ /**
122
+ * Save current state to disk
123
+ */
124
+ private saveState;
125
+ /**
126
+ * Name the session after the first user message
127
+ */
128
+ private maybeNameSession;
129
+ /**
130
+ * Spawn and initialize the ACP agent
131
+ */
132
+ spawnAgent(): Promise<void>;
133
+ /**
134
+ * Initialize or restore session
135
+ */
136
+ private initializeSession;
137
+ /**
138
+ * Inject system context as the first message
139
+ */
140
+ private injectSystemContext;
141
+ /**
142
+ * Replay history events from a previous session
143
+ */
144
+ private replayHistoryFromPreviousSession;
145
+ /**
146
+ * Create a new session
147
+ */
148
+ private createNewSession;
149
+ /**
150
+ * Broadcast mode info if available
151
+ */
152
+ private broadcastModeInfo;
153
+ /**
154
+ * Send a prompt to the agent
155
+ */
156
+ prompt(message: string): Promise<{
157
+ stopReason?: string;
158
+ }>;
159
+ /**
160
+ * Cancel current operation
161
+ */
162
+ cancel(): Promise<void>;
163
+ /**
164
+ * Handle permission response from UI
165
+ */
166
+ respondToPermission(requestId: string, optionId: string): void;
167
+ /**
168
+ * List available sessions
169
+ */
170
+ listSessions(): SessionMetadata[];
171
+ /**
172
+ * Load history for current session
173
+ */
174
+ loadHistory(): unknown[];
175
+ /**
176
+ * Switch to a different session
177
+ */
178
+ switchSession(sessionId: string): Promise<void>;
179
+ /**
180
+ * Change working directory (requires agent restart)
181
+ */
182
+ changeCwd(newPath: string): Promise<void>;
183
+ /**
184
+ * Create a new session
185
+ */
186
+ newSession(): Promise<void>;
187
+ /**
188
+ * Set session mode
189
+ */
190
+ setMode(modeId: string): Promise<void>;
191
+ /**
192
+ * Set session model
193
+ */
194
+ setModel(modelId: string): Promise<void>;
195
+ /**
196
+ * Change agent type (requires agent restart)
197
+ */
198
+ changeAgent(agentType: string): Promise<void>;
199
+ /**
200
+ * Kill the agent process
201
+ */
202
+ killAgent(): Promise<void>;
203
+ /**
204
+ * Shutdown (cleanup all resources)
205
+ */
206
+ shutdown(): void;
207
+ }
208
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}