diff --git a/packages/server/src/server/session.ts b/packages/server/src/server/session.ts index 445c32f94..a2ec7ec79 100644 --- a/packages/server/src/server/session.ts +++ b/packages/server/src/server/session.ts @@ -6257,8 +6257,10 @@ export class Session { return exact.workspaceId; } + const userHome = homedir(); let bestMatch: PersistedWorkspaceRecord | null = null; for (const workspace of workspaces) { + if (workspace.cwd === userHome) continue; const prefix = workspace.cwd.endsWith(sep) ? workspace.cwd : `${workspace.cwd}${sep}`; if (!normalizedCwd.startsWith(prefix)) { continue; diff --git a/packages/server/src/server/session.workspaces.test.ts b/packages/server/src/server/session.workspaces.test.ts index f3235aaa0..f1936903d 100644 --- a/packages/server/src/server/session.workspaces.test.ts +++ b/packages/server/src/server/session.workspaces.test.ts @@ -1,6 +1,6 @@ import { execSync } from "node:child_process"; import { mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs"; -import { tmpdir } from "node:os"; +import { homedir, tmpdir } from "node:os"; import path from "node:path"; import { expect, test, vi } from "vitest"; import { Session } from "./session.js"; @@ -51,6 +51,10 @@ interface SessionTestAccess { getAgentPayloadById(agentId: string): Promise; buildProjectPlacementForCwd(cwd: string): Promise; buildProjectPlacement(cwd: string): Promise; + resolveRegisteredWorkspaceIdForCwd( + cwd: string, + workspaces: ReturnType[], + ): string; buildWorkspaceDescriptorMap(...args: unknown[]): Promise>; describeWorkspaceRecord(...args: unknown[]): Promise; describeWorkspaceRecordWithGitData(...args: unknown[]): Promise; @@ -3747,3 +3751,21 @@ test("subscribed fetch_workspaces includes git enrichment in the initial snapsho expect(workspaceUpdates).toEqual([]); expect(session.describeWorkspaceRecordWithGitData).toHaveBeenCalledWith(gitWorkspace, gitProject); }); + +test("resolveRegisteredWorkspaceIdForCwd does not match home directory as a prefix", () => { + const session = createSessionForWorkspaceTests(); + const home = homedir(); + const childCwd = path.join(home, "projects/new-app"); + const homeWorkspace = createPersistedWorkspaceRecord({ + workspaceId: home, + projectId: "proj-home", + cwd: home, + kind: "directory", + displayName: "home", + createdAt: "2026-03-01T12:00:00.000Z", + updatedAt: "2026-03-01T12:00:00.000Z", + }); + + expect(session.resolveRegisteredWorkspaceIdForCwd(childCwd, [homeWorkspace])).toBe(childCwd); + expect(session.resolveRegisteredWorkspaceIdForCwd(home, [homeWorkspace])).toBe(home); +});