From 89c959955a4c16e594459508759d90d60d1a4e77 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Wed, 6 May 2026 17:18:36 +0900 Subject: [PATCH] fix(team-mode): gate tmux layout cleanup by config Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- .../team-mode/team-runtime/delete-team.ts | 2 +- .../team-mode/team-runtime/shutdown.test.ts | 25 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/features/team-mode/team-runtime/delete-team.ts b/src/features/team-mode/team-runtime/delete-team.ts index c385d281b..336cd50c3 100644 --- a/src/features/team-mode/team-runtime/delete-team.ts +++ b/src/features/team-mode/team-runtime/delete-team.ts @@ -86,7 +86,7 @@ export async function deleteTeam( } } - const removedLayout = tmuxMgr !== undefined && canVisualize() + const removedLayout = config.tmux_visualization && tmuxMgr !== undefined && canVisualize() if (removedLayout) { const memberPaneIds = runtimeState.members .filter((member) => member.agentType !== "leader" && member.tmuxPaneId) diff --git a/src/features/team-mode/team-runtime/shutdown.test.ts b/src/features/team-mode/team-runtime/shutdown.test.ts index 5975d637e..2f0b8c2c1 100644 --- a/src/features/team-mode/team-runtime/shutdown.test.ts +++ b/src/features/team-mode/team-runtime/shutdown.test.ts @@ -305,7 +305,7 @@ describe("team-runtime shutdown", () => { // when const result = await deleteTeam( fixture.teamRunId, - fixture.config, + { ...fixture.config, tmux_visualization: true }, { getServerUrl: () => "http://localhost" } as never, undefined, { force: true }, @@ -325,6 +325,29 @@ describe("team-runtime shutdown", () => { ) }) + test("#given tmux manager but visualization disabled #when deleteTeam runs #then layout cleanup is skipped", async () => { + // given + const fixture = await createFixture() + temporaryDirectories.push(fixture.baseDir) + spyOn(layoutModule, "canVisualize").mockReturnValue(true) + const removeLayoutSpy = spyOn(layoutModule, "removeTeamLayout").mockResolvedValue(undefined) + await updateMemberStatuses(fixture.teamRunId, fixture.config, { + "member-a": "shutdown_approved", + "member-b": "completed", + }) + + // when + const result = await deleteTeam( + fixture.teamRunId, + { ...fixture.config, tmux_visualization: false }, + { getServerUrl: () => "http://localhost" } as never, + ) + + // then + expect(result.removedLayout).toBe(false) + expect(removeLayoutSpy).not.toHaveBeenCalled() + }) + test("cancels team background tasks before deleting when force=true", async () => { // given const fixture = await createFixture()