@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,580 @@
1
+ import { spawn } from 'child_process';
2
+ import { EventEmitter } from 'events';
3
+ import os from 'os';
4
+ import path from 'path';
5
+ import { Writable, Readable } from 'stream';
6
+ import * as acp from '@agentclientprotocol/sdk';
7
+ import { AmuxClient } from './client.js';
8
+ import { TerminalManager } from './terminal.js';
9
+ import { StateManager } from './state.js';
10
+ import { parseMessageToContentBlocks } from './message-parser.js';
11
+ import { AGENTS as DEFAULT_AGENTS } from './types.js';
12
+ const INIT_TIMEOUT_MS = 90000;
13
+ /**
14
+ * Helper to wrap promises with timeout
15
+ */
16
+ function withTimeout(promise, ms, operation) {
17
+ return Promise.race([
18
+ promise,
19
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`${operation} timed out after ${ms}ms`)), ms)),
20
+ ]);
21
+ }
22
+ /**
23
+ * AgentSession - Core ACP session management with EventEmitter interface.
24
+ *
25
+ * Emits events for all session activity. Transport-agnostic - wire up
26
+ * to WebSocket, HTTP, IPC, or anything else.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const session = new AgentSession({
31
+ * instanceId: 'my-instance',
32
+ * basePath: __dirname,
33
+ * });
34
+ *
35
+ * session.on('ready', (data) => console.log('Ready:', data));
36
+ * session.on('update', (data) => console.log('Update:', data));
37
+ *
38
+ * await session.spawnAgent();
39
+ * await session.prompt('Hello!');
40
+ * ```
41
+ */
42
+ export class AgentSession extends EventEmitter {
43
+ // Session state
44
+ _cwd;
45
+ _sessionId;
46
+ _agentType;
47
+ _systemContext;
48
+ // Agent process state
49
+ agentProcess = null;
50
+ acpConnection = null;
51
+ _agentCapabilities = null;
52
+ _changingCwd = false;
53
+ // Components
54
+ terminalManager;
55
+ amuxClient = null;
56
+ stateManager;
57
+ // Config
58
+ instanceId;
59
+ basePath;
60
+ fixedCwd;
61
+ agents;
62
+ constructor(config) {
63
+ super();
64
+ this.instanceId = config.instanceId;
65
+ this.basePath = config.basePath;
66
+ this.fixedCwd = config.fixedCwd;
67
+ this._systemContext = config.systemContext;
68
+ this.agents = DEFAULT_AGENTS;
69
+ // Create state manager
70
+ this.stateManager = new StateManager(config.stateDir);
71
+ // Load persisted state
72
+ const persistedState = this.stateManager.loadState(this.instanceId);
73
+ this._cwd = config.fixedCwd ?? persistedState.cwd ?? os.homedir();
74
+ this._sessionId = persistedState.sessionId ?? null;
75
+ this._agentType = config.agentType ?? persistedState.agentType ?? 'claude-code';
76
+ // Create terminal manager with cwd getter
77
+ this.terminalManager = new TerminalManager(() => this._cwd);
78
+ }
79
+ // Type-safe event emitter methods
80
+ emit(event, data) {
81
+ return super.emit(event, data);
82
+ }
83
+ on(event, listener) {
84
+ return super.on(event, listener);
85
+ }
86
+ once(event, listener) {
87
+ return super.once(event, listener);
88
+ }
89
+ /**
90
+ * Emit update and store to history
91
+ */
92
+ emitUpdate(update) {
93
+ this.emit('update', update);
94
+ this.stateManager.storeEvent(this._sessionId, { type: 'session_update', update });
95
+ }
96
+ /**
97
+ * Emit turn marker and store to history
98
+ */
99
+ emitTurnMarker(event) {
100
+ this.emit(event, {});
101
+ this.stateManager.storeEvent(this._sessionId, { type: event });
102
+ }
103
+ // Getters for read-only access
104
+ get cwd() { return this._cwd; }
105
+ get sessionId() { return this._sessionId; }
106
+ get agentType() { return this._agentType; }
107
+ get agentCapabilities() { return this._agentCapabilities; }
108
+ get isConnected() { return this.acpConnection !== null; }
109
+ get systemContext() { return this._systemContext; }
110
+ /**
111
+ * Get current agent info
112
+ */
113
+ getAgentInfo() {
114
+ return {
115
+ type: this._agentType,
116
+ name: this.agents[this._agentType]?.name ?? 'Unknown',
117
+ };
118
+ }
119
+ /**
120
+ * Get available agents list
121
+ */
122
+ getAvailableAgents() {
123
+ return Object.entries(this.agents).map(([id, a]) => ({ id, name: a.name }));
124
+ }
125
+ /**
126
+ * Save current state to disk
127
+ */
128
+ saveState() {
129
+ this.stateManager.saveState(this.instanceId, {
130
+ cwd: this._cwd,
131
+ sessionId: this._sessionId,
132
+ agentType: this._agentType,
133
+ });
134
+ }
135
+ /**
136
+ * Name the session after the first user message
137
+ */
138
+ maybeNameSession(userMessage) {
139
+ if (!this._sessionId)
140
+ return;
141
+ const session = this.stateManager.getSession(this._sessionId);
142
+ if (!session)
143
+ return;
144
+ const isDefaultName = session.name.startsWith('Session ') && session.name.length <= 16;
145
+ if (!isDefaultName)
146
+ return;
147
+ let displayName = userMessage.trim();
148
+ if (displayName.length > 50) {
149
+ displayName = displayName.slice(0, 50);
150
+ const lastSpace = displayName.lastIndexOf(' ');
151
+ if (lastSpace > 30) {
152
+ displayName = displayName.slice(0, lastSpace);
153
+ }
154
+ displayName += '...';
155
+ }
156
+ this.stateManager.updateSessionMetadata(this._sessionId, { name: displayName });
157
+ console.log(`[amux] Named session: "${displayName}"`);
158
+ }
159
+ /**
160
+ * Spawn and initialize the ACP agent
161
+ */
162
+ async spawnAgent() {
163
+ if (this.agentProcess)
164
+ return;
165
+ const agent = this.agents[this._agentType];
166
+ if (!agent) {
167
+ console.error('[amux] Unknown agent type:', this._agentType);
168
+ this.emit('error', { message: `Unknown agent type: ${this._agentType}` });
169
+ return;
170
+ }
171
+ console.log(`[amux] Spawning ${agent.name} agent in cwd:`, this._cwd);
172
+ this.emit('connecting', {});
173
+ const agentBin = path.join(this.basePath, 'node_modules', '.bin', agent.bin);
174
+ const newProcess = spawn(agentBin, [], {
175
+ stdio: ['pipe', 'pipe', 'pipe'],
176
+ env: { ...process.env },
177
+ cwd: this._cwd,
178
+ });
179
+ this.agentProcess = newProcess;
180
+ newProcess.stderr?.on('data', (data) => {
181
+ console.error('[amux] Agent stderr:', data.toString());
182
+ });
183
+ newProcess.on('error', (err) => {
184
+ console.error('[amux] Agent process error:', err);
185
+ if (this.agentProcess === newProcess) {
186
+ this.emit('error', { message: `Failed to start agent: ${err.message}` });
187
+ this.agentProcess = null;
188
+ this.acpConnection = null;
189
+ }
190
+ });
191
+ newProcess.on('exit', (code, signal) => {
192
+ console.log(`[amux] Agent exited: code=${code}, signal=${signal}`);
193
+ if (this.agentProcess === newProcess) {
194
+ this.agentProcess = null;
195
+ this.acpConnection = null;
196
+ this.emit('agent_exit', { code, signal });
197
+ }
198
+ });
199
+ // Create ACP streams
200
+ const input = Writable.toWeb(newProcess.stdin);
201
+ const output = Readable.toWeb(newProcess.stdout);
202
+ // Create the ACP client connection
203
+ this.amuxClient = new AmuxClient(this.terminalManager, (event) => {
204
+ // Route client events through our emitter
205
+ if (event.type === 'session_update' && event.update) {
206
+ this.emitUpdate(event.update);
207
+ }
208
+ else if (event.type === 'permission_request') {
209
+ this.emit('permission_request', {
210
+ requestId: event.requestId,
211
+ toolCall: event.toolCall,
212
+ options: event.options,
213
+ });
214
+ }
215
+ });
216
+ const stream = acp.ndJsonStream(input, output);
217
+ this.acpConnection = new acp.ClientSideConnection(() => this.amuxClient, stream);
218
+ try {
219
+ const initResult = await withTimeout(this.acpConnection.initialize({
220
+ protocolVersion: acp.PROTOCOL_VERSION,
221
+ clientCapabilities: {
222
+ fs: {
223
+ readTextFile: true,
224
+ writeTextFile: true,
225
+ },
226
+ terminal: true,
227
+ },
228
+ }), INIT_TIMEOUT_MS, 'Agent initialization');
229
+ console.log(`[amux] Connected to agent (protocol v${initResult.protocolVersion})`);
230
+ this._agentCapabilities = initResult.agentCapabilities ?? null;
231
+ const sessionRestore = await this.initializeSession(initResult.agentCapabilities);
232
+ this.emit('ready', {
233
+ cwd: this._cwd,
234
+ sessionId: this._sessionId,
235
+ sessionRestore,
236
+ capabilities: this._agentCapabilities,
237
+ agent: this.getAgentInfo(),
238
+ availableAgents: this.getAvailableAgents(),
239
+ });
240
+ }
241
+ catch (err) {
242
+ console.error('[amux] Failed to initialize agent:', err);
243
+ this.emit('error', { message: `Failed to initialize agent: ${err.message}` });
244
+ newProcess.kill();
245
+ if (this.agentProcess === newProcess) {
246
+ this.agentProcess = null;
247
+ this.acpConnection = null;
248
+ }
249
+ }
250
+ }
251
+ /**
252
+ * Initialize or restore session
253
+ */
254
+ async initializeSession(capabilities) {
255
+ if (!this.acpConnection)
256
+ return undefined;
257
+ const canLoadSession = capabilities?.loadSession === true;
258
+ const hasExistingSession = Boolean(this._sessionId);
259
+ const previousSessionId = this._sessionId;
260
+ let sessionRestore = undefined;
261
+ if (this._sessionId && canLoadSession) {
262
+ let loadSucceeded = false;
263
+ try {
264
+ await withTimeout(this.acpConnection.loadSession({
265
+ sessionId: this._sessionId,
266
+ cwd: this._cwd,
267
+ mcpServers: [],
268
+ }), INIT_TIMEOUT_MS, 'Session load');
269
+ await new Promise(resolve => setTimeout(resolve, 100));
270
+ sessionRestore = { restored: true };
271
+ loadSucceeded = true;
272
+ if (this._sessionId) {
273
+ this.stateManager.registerSession(this._sessionId, this._cwd, this._agentType);
274
+ }
275
+ }
276
+ catch (loadErr) {
277
+ console.log(`[amux] Session load failed: ${loadErr.message}`);
278
+ }
279
+ if (!loadSucceeded) {
280
+ const sessionResult = await this.createNewSession();
281
+ sessionRestore = await this.replayHistoryFromPreviousSession(previousSessionId);
282
+ this.broadcastModeInfo(sessionResult);
283
+ }
284
+ }
285
+ else {
286
+ const sessionResult = await this.createNewSession();
287
+ if (hasExistingSession && previousSessionId) {
288
+ sessionRestore = await this.replayHistoryFromPreviousSession(previousSessionId);
289
+ }
290
+ this.broadcastModeInfo(sessionResult);
291
+ }
292
+ if (this._systemContext && sessionRestore?.restored !== true) {
293
+ await this.injectSystemContext();
294
+ }
295
+ return sessionRestore;
296
+ }
297
+ /**
298
+ * Inject system context as the first message
299
+ */
300
+ async injectSystemContext() {
301
+ if (!this._systemContext || !this.acpConnection || !this._sessionId)
302
+ return;
303
+ console.log('[amux] Injecting system context');
304
+ const contextPrompt = `<system-context>\n${this._systemContext}\n</system-context>\n\nI understand. I'm ready to help based on the context provided above.`;
305
+ try {
306
+ await this.acpConnection.prompt({
307
+ sessionId: this._sessionId,
308
+ prompt: [{ type: 'text', text: contextPrompt }],
309
+ });
310
+ console.log('[amux] System context injected successfully');
311
+ }
312
+ catch (err) {
313
+ console.error('[amux] Failed to inject system context:', err);
314
+ }
315
+ }
316
+ /**
317
+ * Replay history events from a previous session
318
+ */
319
+ async replayHistoryFromPreviousSession(previousSessionId) {
320
+ if (!previousSessionId) {
321
+ return { restored: false, reason: 'No previous session to restore.' };
322
+ }
323
+ const history = this.stateManager.loadHistory(previousSessionId);
324
+ if (history.length === 0) {
325
+ return { restored: false, reason: 'No history found for previous session.' };
326
+ }
327
+ this.emit('history_replay', {
328
+ previousSessionId,
329
+ events: history,
330
+ eventCount: history.length,
331
+ });
332
+ return {
333
+ restored: true,
334
+ reason: `Restored ${history.length} events from previous session.`,
335
+ };
336
+ }
337
+ /**
338
+ * Create a new session
339
+ */
340
+ async createNewSession() {
341
+ if (!this.acpConnection) {
342
+ throw new Error('No ACP connection');
343
+ }
344
+ const sessionResult = await withTimeout(this.acpConnection.newSession({ cwd: this._cwd, mcpServers: [] }), INIT_TIMEOUT_MS, 'New session creation');
345
+ this._sessionId = sessionResult.sessionId;
346
+ this.saveState();
347
+ if (this._sessionId) {
348
+ this.stateManager.registerSession(this._sessionId, this._cwd, this._agentType);
349
+ }
350
+ return sessionResult;
351
+ }
352
+ /**
353
+ * Broadcast mode info if available
354
+ */
355
+ broadcastModeInfo(sessionResult) {
356
+ if (sessionResult?.modes) {
357
+ this.emit('update', {
358
+ sessionUpdate: 'current_mode_update',
359
+ currentModeId: sessionResult.modes.currentModeId,
360
+ });
361
+ }
362
+ }
363
+ /**
364
+ * Send a prompt to the agent
365
+ */
366
+ async prompt(message) {
367
+ if (!this.acpConnection || !this._sessionId) {
368
+ throw new Error('Agent not ready');
369
+ }
370
+ console.log('[amux] Sending prompt:', message.slice(0, 100));
371
+ this.emitTurnMarker('turn_start');
372
+ this.stateManager.incrementSessionMessageCount(this._sessionId);
373
+ this.maybeNameSession(message);
374
+ // Emit and store user message
375
+ this.emitUpdate({
376
+ sessionUpdate: 'user_message_chunk',
377
+ content: { type: 'text', text: message },
378
+ });
379
+ try {
380
+ // Parse @mentions into resource_link blocks
381
+ const content = parseMessageToContentBlocks(message, this._cwd);
382
+ const result = await this.acpConnection.prompt({
383
+ sessionId: this._sessionId,
384
+ prompt: content,
385
+ });
386
+ this.emit('prompt_complete', { stopReason: result.stopReason });
387
+ return { stopReason: result.stopReason };
388
+ }
389
+ catch (err) {
390
+ console.error('[amux] Prompt error:', err);
391
+ this.emit('error', { message: `Prompt failed: ${err.message}` });
392
+ throw err;
393
+ }
394
+ finally {
395
+ this.emitTurnMarker('turn_end');
396
+ }
397
+ }
398
+ /**
399
+ * Cancel current operation
400
+ */
401
+ async cancel() {
402
+ if (this.acpConnection && this._sessionId) {
403
+ await this.acpConnection.cancel({ sessionId: this._sessionId });
404
+ }
405
+ }
406
+ /**
407
+ * Handle permission response from UI
408
+ */
409
+ respondToPermission(requestId, optionId) {
410
+ this.amuxClient?.handlePermissionResponse(requestId, optionId);
411
+ }
412
+ /**
413
+ * List available sessions
414
+ */
415
+ listSessions() {
416
+ const sessions = this.stateManager.listSessions(this._cwd);
417
+ return sessions.map(s => ({
418
+ ...s,
419
+ isCurrent: s.id === this._sessionId,
420
+ }));
421
+ }
422
+ /**
423
+ * Load history for current session
424
+ */
425
+ loadHistory() {
426
+ return this.stateManager.loadHistory(this._sessionId);
427
+ }
428
+ /**
429
+ * Switch to a different session
430
+ */
431
+ async switchSession(sessionId) {
432
+ if (!this.acpConnection) {
433
+ throw new Error('Agent not ready');
434
+ }
435
+ const canLoadSession = this._agentCapabilities?.loadSession === true;
436
+ const canResume = this._agentCapabilities?.sessionCapabilities?.resume !== undefined;
437
+ if (!canLoadSession && !canResume) {
438
+ throw new Error('Agent does not support session switching');
439
+ }
440
+ try {
441
+ if (canLoadSession) {
442
+ await withTimeout(this.acpConnection.loadSession({
443
+ sessionId,
444
+ cwd: this._cwd,
445
+ mcpServers: [],
446
+ }), INIT_TIMEOUT_MS, 'Session load');
447
+ }
448
+ else {
449
+ await withTimeout(this.acpConnection.unstable_resumeSession({
450
+ sessionId,
451
+ cwd: this._cwd,
452
+ mcpServers: [],
453
+ }), INIT_TIMEOUT_MS, 'Session resume');
454
+ }
455
+ this._sessionId = sessionId;
456
+ this.saveState();
457
+ this.emit('session_switched', { sessionId: this._sessionId });
458
+ const history = this.stateManager.loadHistory(sessionId);
459
+ if (history.length > 0) {
460
+ this.emit('history_replay', {
461
+ previousSessionId: sessionId,
462
+ events: history,
463
+ eventCount: history.length,
464
+ });
465
+ }
466
+ }
467
+ catch (err) {
468
+ console.error(`[amux] Failed to switch session:`, err);
469
+ throw err;
470
+ }
471
+ }
472
+ /**
473
+ * Change working directory (requires agent restart)
474
+ */
475
+ async changeCwd(newPath) {
476
+ if (this.fixedCwd) {
477
+ throw new Error('Working directory is fixed for this session');
478
+ }
479
+ // Prevent concurrent cwd changes
480
+ if (this._changingCwd) {
481
+ console.log('[amux] changeCwd already in progress, ignoring');
482
+ return;
483
+ }
484
+ // Same path, nothing to do
485
+ if (newPath === this._cwd) {
486
+ console.log('[amux] changeCwd same path, ignoring');
487
+ return;
488
+ }
489
+ this._changingCwd = true;
490
+ try {
491
+ this._cwd = newPath;
492
+ this._sessionId = null;
493
+ this.saveState();
494
+ await this.killAgent();
495
+ await this.spawnAgent();
496
+ }
497
+ finally {
498
+ this._changingCwd = false;
499
+ }
500
+ }
501
+ /**
502
+ * Create a new session
503
+ */
504
+ async newSession() {
505
+ if (!this.acpConnection) {
506
+ throw new Error('No ACP connection');
507
+ }
508
+ const sessionResult = await this.acpConnection.newSession({
509
+ cwd: this._cwd,
510
+ mcpServers: [],
511
+ });
512
+ this._sessionId = sessionResult.sessionId;
513
+ this.saveState();
514
+ if (this._sessionId) {
515
+ this.stateManager.registerSession(this._sessionId, this._cwd, this._agentType);
516
+ }
517
+ this.emit('session_created', { sessionId: this._sessionId });
518
+ this.broadcastModeInfo(sessionResult);
519
+ if (this._systemContext) {
520
+ await this.injectSystemContext();
521
+ }
522
+ }
523
+ /**
524
+ * Set session mode
525
+ */
526
+ async setMode(modeId) {
527
+ if (!this.acpConnection || !this._sessionId) {
528
+ throw new Error('Agent not ready');
529
+ }
530
+ await this.acpConnection.setSessionMode({
531
+ sessionId: this._sessionId,
532
+ modeId,
533
+ });
534
+ }
535
+ /**
536
+ * Set session model
537
+ */
538
+ async setModel(modelId) {
539
+ if (!this.acpConnection || !this._sessionId) {
540
+ throw new Error('Agent not ready');
541
+ }
542
+ await this.acpConnection.unstable_setSessionModel({
543
+ sessionId: this._sessionId,
544
+ modelId,
545
+ });
546
+ }
547
+ /**
548
+ * Change agent type (requires agent restart)
549
+ */
550
+ async changeAgent(agentType) {
551
+ if (!this.agents[agentType]) {
552
+ throw new Error(`Unknown agent type: ${agentType}`);
553
+ }
554
+ if (agentType !== this._agentType) {
555
+ this._agentType = agentType;
556
+ this._sessionId = null;
557
+ this.saveState();
558
+ await this.killAgent();
559
+ await this.spawnAgent();
560
+ }
561
+ }
562
+ /**
563
+ * Kill the agent process
564
+ */
565
+ async killAgent() {
566
+ if (this.agentProcess) {
567
+ this.agentProcess.kill();
568
+ this.agentProcess = null;
569
+ this.acpConnection = null;
570
+ }
571
+ }
572
+ /**
573
+ * Shutdown (cleanup all resources)
574
+ */
575
+ shutdown() {
576
+ this.terminalManager.killAll();
577
+ this.agentProcess?.kill();
578
+ }
579
+ }
580
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { SessionState, SessionMetadata, StoredEvent } from './types.js';
2
+ /**
3
+ * State manager for amux sessions.
4
+ * Handles persistence of session state and history.
5
+ */
6
+ export declare class StateManager {
7
+ private stateDir;
8
+ constructor(stateDir?: string);
9
+ /**
10
+ * Get the state file path for a specific instance
11
+ */
12
+ private getStateFilePath;
13
+ /**
14
+ * Get history file path for a session
15
+ */
16
+ private getHistoryPath;
17
+ /**
18
+ * Get sessions registry file path
19
+ */
20
+ private getSessionsRegistryPath;
21
+ /**
22
+ * Load persisted session state
23
+ */
24
+ loadState(instanceId: string): SessionState;
25
+ /**
26
+ * Save session state to disk
27
+ */
28
+ saveState(instanceId: string, state: SessionState): void;
29
+ /**
30
+ * Store event to history for replay
31
+ */
32
+ storeEvent(sessionId: string | null, event: StoredEvent): void;
33
+ /**
34
+ * Load history for replay
35
+ */
36
+ loadHistory(sessionId: string | null): StoredEvent[];
37
+ /**
38
+ * Clear history for a session
39
+ */
40
+ clearHistory(sessionId: string | null): void;
41
+ /**
42
+ * Load sessions registry
43
+ */
44
+ private loadSessionsRegistry;
45
+ /**
46
+ * Save sessions registry
47
+ */
48
+ private saveSessionsRegistry;
49
+ /**
50
+ * Register a new session or update existing one
51
+ */
52
+ registerSession(sessionId: string, cwd: string, agentType: string, displayName?: string): void;
53
+ /**
54
+ * Update session metadata
55
+ */
56
+ updateSessionMetadata(sessionId: string, updates: Partial<Pick<SessionMetadata, 'messageCount' | 'lastModified' | 'name'>>): void;
57
+ /**
58
+ * Increment message count for a session
59
+ */
60
+ incrementSessionMessageCount(sessionId: string): void;
61
+ /**
62
+ * List all sessions, optionally filtered by cwd
63
+ */
64
+ listSessions(cwd?: string): SessionMetadata[];
65
+ /**
66
+ * Get a specific session by ID
67
+ */
68
+ getSession(sessionId: string): SessionMetadata | undefined;
69
+ /**
70
+ * Delete a session from the registry and its history
71
+ */
72
+ deleteSession(sessionId: string): void;
73
+ }
74
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAY7E;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAI/B;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAe3C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAUxD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IA0B9D;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,EAAE;IAepD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAa5C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI;IA2BP;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC,CAAC,GAChF,IAAI;IAkBP;;OAEG;IACH,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWrD;;OAEG;IACH,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IAe7C;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAK1D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAavC"}