From 24db514904275a2e01c42c971499c95cca113071 Mon Sep 17 00:00:00 2001 From: Chris Tunbridge Date: Wed, 6 May 2026 19:22:04 -0600 Subject: [PATCH] fix(app): scope reset archive to workspace --- packages/app/src/pages/layout.tsx | 23 +++++++++---------- packages/app/src/pages/layout/helpers.test.ts | 15 ++++++++++++ packages/app/src/pages/layout/helpers.ts | 3 +++ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index a08372649f11..9c448fe95291 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -70,6 +70,7 @@ import { effectiveWorkspaceOrder, errorMessage, latestRootSession, + resetArchiveSessions, sortedRootSessions, } from "./layout/helpers" import { @@ -1580,17 +1581,15 @@ export default function Layout(props: ParentProps) { const archivedAt = Date.now() await Promise.all( - sessions - .filter((session) => session.time.archived === undefined) - .map((session) => - globalSDK.client.session - .update({ - sessionID: session.id, - directory: session.directory, - time: { archived: archivedAt }, - }) - .catch(() => undefined), - ), + resetArchiveSessions(sessions, directory).map((session) => + globalSDK.client.session + .update({ + sessionID: session.id, + directory: session.directory, + time: { archived: archivedAt }, + }) + .catch(() => undefined), + ), ) setBusy(directory, false) @@ -1687,7 +1686,7 @@ export default function Layout(props: ParentProps) { .list({ directory: props.directory }) .then((x) => x.data ?? []) .catch(() => []) - const active = sessions.filter((session) => session.time.archived === undefined) + const active = resetArchiveSessions(sessions, props.directory) setState({ sessions: active }) } diff --git a/packages/app/src/pages/layout/helpers.test.ts b/packages/app/src/pages/layout/helpers.test.ts index 9cf302482b76..4516c58f5308 100644 --- a/packages/app/src/pages/layout/helpers.test.ts +++ b/packages/app/src/pages/layout/helpers.test.ts @@ -14,6 +14,7 @@ import { errorMessage, hasProjectPermissions, latestRootSession, + resetArchiveSessions, } from "./helpers" import { pathKey } from "@/utils/path-key" @@ -199,6 +200,20 @@ describe("layout workspace helpers", () => { expect(result?.id).toBe("root") }) + test("archives only active sessions in the reset workspace", () => { + const result = resetArchiveSessions( + [ + session({ id: "target", directory: "/repo/worktree" }), + session({ id: "target-slash", directory: "/repo/worktree/" }), + session({ id: "other", directory: "/repo/other-worktree" }), + session({ id: "archived", directory: "/repo/worktree", time: { created: 0, updated: 0, archived: 1 } }), + ], + "/repo/worktree", + ) + + expect(result.map((item) => item.id)).toEqual(["target", "target-slash"]) + }) + test("finds the direct child on the active session path", () => { const list = [ session({ id: "root", directory: "/workspace" }), diff --git a/packages/app/src/pages/layout/helpers.ts b/packages/app/src/pages/layout/helpers.ts index d53381e40462..4057acf17daf 100644 --- a/packages/app/src/pages/layout/helpers.ts +++ b/packages/app/src/pages/layout/helpers.ts @@ -32,6 +32,9 @@ export const sortedRootSessions = (store: SessionStore, now: number) => roots(st export const latestRootSession = (stores: SessionStore[], now: number) => stores.flatMap(roots).sort(sortSessions(now))[0] +export const resetArchiveSessions = (sessions: Session[], directory: string) => + sessions.filter((session) => pathKey(session.directory) === pathKey(directory) && session.time.archived === undefined) + export function hasProjectPermissions( request: Record | undefined, include: (item: T) => boolean = () => true,