From 5cd40ad66fc8833e393911dae3139467308ba4b9 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 07:12:46 +0000 Subject: [PATCH] fix(app): remember submitted workspace choice (#44620) Co-authored-by: Brendonovich --- .../new-session/workspace/controller.test.ts | 28 +++++++++++++------ .../src/new-session/workspace/controller.ts | 4 +-- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/app/src/new-session/workspace/controller.test.ts b/packages/app/src/new-session/workspace/controller.test.ts index 1f22f718b30..dc46b0c4a3d 100644 --- a/packages/app/src/new-session/workspace/controller.test.ts +++ b/packages/app/src/new-session/workspace/controller.test.ts @@ -18,13 +18,23 @@ describe("new session workspace selection", () => { ).toBe("main") }) - test("derives an existing worktree from the current directory", () => { + test("uses the saved destination instead of the current worktree", () => { expect( - resolveNewSessionWorktree({ enabled: true, directory: "/project/feature", projectWorktree: "/project" }), - ).toBe("/project/feature") - expect(resolveNewSessionWorktree({ enabled: true, directory: "/project", projectWorktree: "/project" })).toBe( - "main", - ) + resolveNewSessionWorktree({ + enabled: true, + directory: "/project/feature", + projectWorktree: "/project", + fallback: "create", + }), + ).toBe("create") + expect( + resolveNewSessionWorktree({ + enabled: true, + directory: "/project/feature", + projectWorktree: "/project", + fallback: "main", + }), + ).toBe("/project") }) test("normalizes main to the project root outside the main worktree", () => { @@ -33,9 +43,9 @@ describe("new session workspace selection", () => { }) test("treats equivalent Windows roots as the main worktree", () => { - expect(resolveNewSessionWorktree({ enabled: true, directory: "C:\\Repo\\", projectWorktree: "c:/repo" })).toBe( - "main", - ) + expect( + resolveNewSessionWorktree({ enabled: true, directory: "C:\\Repo\\", projectWorktree: "c:/repo" }), + ).toBe("main") expect(normalizeNewSessionWorktree("main", "C:\\Repo\\", "c:/repo")).toBe("main") }) diff --git a/packages/app/src/new-session/workspace/controller.ts b/packages/app/src/new-session/workspace/controller.ts index ed4c38febdd..8eaae26932f 100644 --- a/packages/app/src/new-session/workspace/controller.ts +++ b/packages/app/src/new-session/workspace/controller.ts @@ -21,8 +21,7 @@ export function resolveNewSessionWorktree(input: { }) { if (!input.enabled) return "main" if (input.selected) return input.selected - if (input.projectWorktree && !sameDirectory(input.directory, input.projectWorktree)) return input.directory - return input.fallback ?? "main" + return normalizeNewSessionWorktree(input.fallback ?? "main", input.directory, input.projectWorktree) } export function normalizeNewSessionWorktree(value: string, directory: string, projectWorktree?: string) { @@ -121,7 +120,6 @@ export function createNewSessionWorkspaceController(input: { remember, set: (worktree: string) => { input.setSelected(normalizeNewSessionWorktree(worktree, sdk().directory, currentProject()?.worktree)) - remember(worktree) }, }, project: {