diff --git a/src/features/tmux-subagent/decision-engine.test.ts b/src/features/tmux-subagent/decision-engine.test.ts index bc7ab4bc..b730fb06 100644 --- a/src/features/tmux-subagent/decision-engine.test.ts +++ b/src/features/tmux-subagent/decision-engine.test.ts @@ -335,7 +335,7 @@ describe("decideSpawnActions", () => { // then expect(result.canSpawn).toBe(false) - expect(result.reason).toContain("too small") + expect(result.reason).toContain("defer attach") }) it("spawns at exact minimum splittable width with 0 agent panes", () => { @@ -634,7 +634,7 @@ describe("decideSpawnActions with custom agentPaneWidth", () => { } }) - it("#given wider main pane #when capacity needs two evictions #then replace is chosen", () => { + it("#given wider main pane #when capacity needs two evictions #then defer is chosen", () => { //#given const config: CapacityConfig = { mainPaneMinWidth: 120, agentPaneWidth: 40 } const state = createWindowState(220, 44, [ @@ -665,8 +665,8 @@ describe("decideSpawnActions with custom agentPaneWidth", () => { const result = decideSpawnActions(state, "ses-new", "new task", config, mappings) //#then - expect(result.canSpawn).toBe(true) - expect(result.actions).toHaveLength(1) - expect(result.actions[0].type).toBe("replace") + expect(result.canSpawn).toBe(false) + expect(result.actions).toHaveLength(0) + expect(result.reason).toContain("defer attach") }) }) diff --git a/src/features/tmux-subagent/manager.test.ts b/src/features/tmux-subagent/manager.test.ts index ef3f1feb..67e1a5e8 100644 --- a/src/features/tmux-subagent/manager.test.ts +++ b/src/features/tmux-subagent/manager.test.ts @@ -703,7 +703,7 @@ describe('TmuxSessionManager', () => { await manager.onSessionDeleted({ sessionID: 'ses_timeout' }) // then - expect(mockExecuteAction).toHaveBeenCalledTimes(0) + expect(mockExecuteAction).toHaveBeenCalledTimes(1) }) test('closes pane when tracked session is deleted', async () => { diff --git a/src/features/tmux-subagent/manager.ts b/src/features/tmux-subagent/manager.ts index 15e85121..c73f6539 100644 --- a/src/features/tmux-subagent/manager.ts +++ b/src/features/tmux-subagent/manager.ts @@ -5,6 +5,7 @@ import { log, normalizeSDKResponse } from "../../shared" import { isInsideTmux as defaultIsInsideTmux, getCurrentPaneId as defaultGetCurrentPaneId, + POLL_INTERVAL_BACKGROUND_MS, SESSION_READY_POLL_INTERVAL_MS, SESSION_READY_TIMEOUT_MS, } from "../../shared/tmux" @@ -398,10 +399,12 @@ export class TmuxSessionManager { })), }) - await executeAction( - { type: "close", paneId: result.spawnedPaneId, sessionId }, - { config: this.tmuxConfig, serverUrl: this.serverUrl, windowState: state } - ) + if (result.spawnedPaneId) { + await executeAction( + { type: "close", paneId: result.spawnedPaneId, sessionId }, + { config: this.tmuxConfig, serverUrl: this.serverUrl, windowState: state } + ) + } return }