From f964fd8bb92d55921414895954b68d12050069c6 Mon Sep 17 00:00:00 2001 From: ops Date: Tue, 20 Jan 2026 02:19:58 +0100 Subject: [PATCH] fix: show sandbox sessions with different directory in web ui --- packages/app/src/pages/layout.tsx | 16 +++------------- packages/opencode/src/server/routes/session.ts | 8 +++++++- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index f049dc3bcc1..2e0cc99727b 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -663,7 +663,6 @@ export default function Layout(props: ParentProps) { if (!expanded && !active) continue const [dirStore] = globalSync.child(dir, { bootstrap: true }) const dirSessions = dirStore.session - .filter((session) => session.directory === dirStore.path.directory) .filter((session) => !session.parentID && !session.time?.archived) .toSorted(compare) result.push(...dirSessions) @@ -671,10 +670,7 @@ export default function Layout(props: ParentProps) { return result } const [projectStore] = globalSync.child(project.worktree) - return projectStore.session - .filter((session) => session.directory === projectStore.path.directory) - .filter((session) => !session.parentID && !session.time?.archived) - .toSorted(compare) + return projectStore.session.filter((session) => !session.parentID && !session.time?.archived).toSorted(compare) }) type PrefetchQueue = { @@ -2009,10 +2005,7 @@ export default function Layout(props: ParentProps) { }) const slug = createMemo(() => base64Encode(props.directory)) const sessions = createMemo(() => - workspaceStore.session - .filter((session) => session.directory === workspaceStore.path.directory) - .filter((session) => !session.parentID && !session.time?.archived) - .toSorted(sortSessions(Date.now())), + workspaceStore.session.filter((session) => !session.parentID && !session.time?.archived).toSorted(sortSessions(Date.now())), ) const children = createMemo(() => { const map = new Map() @@ -2418,10 +2411,7 @@ export default function Layout(props: ParentProps) { const [workspaceStore, setWorkspaceStore] = globalSync.child(props.project.worktree) const slug = createMemo(() => base64Encode(props.project.worktree)) const sessions = createMemo(() => - workspaceStore.session - .filter((session) => session.directory === workspaceStore.path.directory) - .filter((session) => !session.parentID && !session.time?.archived) - .toSorted(sortSessions(Date.now())), + workspaceStore.session.filter((session) => !session.parentID && !session.time?.archived).toSorted(sortSessions(Date.now())), ) const children = createMemo(() => { const map = new Map() diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index 3850376bdb4..016cca032eb 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -56,7 +56,13 @@ export const SessionRoutes = lazy(() => const term = query.search?.toLowerCase() const sessions: Session.Info[] = [] for await (const session of Session.list()) { - if (query.directory !== undefined && session.directory !== query.directory) continue + const normalizedSessionDir = Filesystem.normalize(session.directory) + if ( + normalizedQueryDir !== undefined && + normalizedSessionDir !== normalizedQueryDir && + !Filesystem.contains(normalizedQueryDir, normalizedSessionDir) + ) + continue if (query.roots && session.parentID) continue if (query.start !== undefined && session.time.updated < query.start) continue if (term !== undefined && !session.title.toLowerCase().includes(term)) continue