@bytespell/amux 0.0.10 → 0.0.12

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