diff --git a/packages/coding-agent/src/cli/session-picker.ts b/packages/coding-agent/src/cli/session-picker.ts index 00a2edea..bcb921b2 100644 --- a/packages/coding-agent/src/cli/session-picker.ts +++ b/packages/coding-agent/src/cli/session-picker.ts @@ -28,6 +28,10 @@ export async function selectSession(sessionManager: SessionManager): Promise { + ui.stop(); + process.exit(0); + }, ); ui.addChild(selector); diff --git a/packages/coding-agent/src/modes/interactive/components/session-selector.ts b/packages/coding-agent/src/modes/interactive/components/session-selector.ts index de3c43de..de34155a 100644 --- a/packages/coding-agent/src/modes/interactive/components/session-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/session-selector.ts @@ -33,6 +33,7 @@ class SessionList implements Component { private searchInput: Input; public onSelect?: (sessionPath: string) => void; public onCancel?: () => void; + public onExit: () => void = () => {}; private maxVisible: number = 5; // Max sessions visible (each session is 3 lines: msg + metadata + blank) constructor(sessions: SessionItem[]) { @@ -153,9 +154,9 @@ class SessionList implements Component { this.onCancel(); } } - // Ctrl+C - exit process + // Ctrl+C - exit else if (isCtrlC(keyData)) { - process.exit(0); + this.onExit(); } // Pass everything else to search input else { @@ -171,7 +172,12 @@ class SessionList implements Component { export class SessionSelectorComponent extends Container { private sessionList: SessionList; - constructor(sessionManager: SessionManager, onSelect: (sessionPath: string) => void, onCancel: () => void) { + constructor( + sessionManager: SessionManager, + onSelect: (sessionPath: string) => void, + onCancel: () => void, + onExit: () => void, + ) { super(); // Load all sessions @@ -188,6 +194,7 @@ export class SessionSelectorComponent extends Container { this.sessionList = new SessionList(sessions); this.sessionList.onSelect = onSelect; this.sessionList.onCancel = onCancel; + this.sessionList.onExit = onExit; this.addChild(this.sessionList); diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index 9fade6ea..90008472 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -1435,6 +1435,10 @@ export class InteractiveMode { done(); this.ui.requestRender(); }, + () => { + this.stop(); + process.exit(0); + }, ); return { component: selector, focus: selector.getSessionList() }; });