From 5fefb53940138a85a8760b7a007a4a38860f95e0 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 4 Feb 2026 21:58:06 +0100 Subject: [PATCH 1/3] fix(app): refresh workspace sessions on project switch --- packages/app/src/pages/layout.tsx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 2f963ae28d84..94b29fee6f67 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -2599,17 +2599,19 @@ export default function Layout(props: ParentProps) { } const LocalWorkspace = (props: { project: LocalProject; mobile?: boolean }): JSX.Element => { - const [workspaceStore, setWorkspaceStore] = globalSync.child(props.project.worktree) + const workspace = () => globalSync.child(props.project.worktree) const slug = createMemo(() => base64Encode(props.project.worktree)) - const sessions = createMemo(() => - workspaceStore.session - .filter((session) => session.directory === workspaceStore.path.directory) + const sessions = createMemo(() => { + const data = workspace()[0] + return data.session + .filter((session) => session.directory === data.path.directory) .filter((session) => !session.parentID && !session.time?.archived) - .toSorted(sortSessions(Date.now())), - ) + .toSorted(sortSessions(Date.now())) + }) const children = createMemo(() => { + const data = workspace()[0] const map = new Map() - for (const session of workspaceStore.session) { + for (const session of data.session) { if (!session.parentID) continue const existing = map.get(session.parentID) if (existing) { @@ -2620,11 +2622,11 @@ export default function Layout(props: ParentProps) { } return map }) - const booted = createMemo((prev) => prev || workspaceStore.status === "complete", false) + const booted = createMemo((prev) => prev || workspace()[0].status === "complete", false) const loading = createMemo(() => !booted() && sessions().length === 0) - const hasMore = createMemo(() => workspaceStore.sessionTotal > sessions().length) + const hasMore = createMemo(() => workspace()[0].sessionTotal > sessions().length) const loadMore = async () => { - setWorkspaceStore("limit", (limit) => limit + 5) + workspace()[1]("limit", (limit) => limit + 5) await globalSync.project.loadSessions(props.project.worktree) } From 1e95af4ca58bd16a8b052fec7685d21090a92820 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 4 Feb 2026 22:04:13 +0100 Subject: [PATCH 2/3] fix(app): avoid stale workspace store lookup --- packages/app/src/pages/layout.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 94b29fee6f67..2b567217d85b 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -2599,17 +2599,20 @@ export default function Layout(props: ParentProps) { } const LocalWorkspace = (props: { project: LocalProject; mobile?: boolean }): JSX.Element => { - const workspace = () => globalSync.child(props.project.worktree) + const workspace = createMemo(() => { + const [store, setStore] = globalSync.child(props.project.worktree) + return { store, setStore } + }) const slug = createMemo(() => base64Encode(props.project.worktree)) const sessions = createMemo(() => { - const data = workspace()[0] + const data = workspace().store return data.session .filter((session) => session.directory === data.path.directory) .filter((session) => !session.parentID && !session.time?.archived) .toSorted(sortSessions(Date.now())) }) const children = createMemo(() => { - const data = workspace()[0] + const data = workspace().store const map = new Map() for (const session of data.session) { if (!session.parentID) continue @@ -2622,11 +2625,11 @@ export default function Layout(props: ParentProps) { } return map }) - const booted = createMemo((prev) => prev || workspace()[0].status === "complete", false) + const booted = createMemo((prev) => prev || workspace().store.status === "complete", false) const loading = createMemo(() => !booted() && sessions().length === 0) - const hasMore = createMemo(() => workspace()[0].sessionTotal > sessions().length) + const hasMore = createMemo(() => workspace().store.sessionTotal > sessions().length) const loadMore = async () => { - workspace()[1]("limit", (limit) => limit + 5) + workspace().setStore("limit", (limit) => limit + 5) await globalSync.project.loadSessions(props.project.worktree) } From 347aa1178a6adbb30898b4056c1d1fe96a079928 Mon Sep 17 00:00:00 2001 From: neriousy Date: Wed, 4 Feb 2026 22:08:47 +0100 Subject: [PATCH 3/3] refactor(app): clarify workspace store naming --- packages/app/src/pages/layout.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 2b567217d85b..16908cbf2e90 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -2605,16 +2605,16 @@ export default function Layout(props: ParentProps) { }) const slug = createMemo(() => base64Encode(props.project.worktree)) const sessions = createMemo(() => { - const data = workspace().store - return data.session - .filter((session) => session.directory === data.path.directory) + const store = workspace().store + return store.session + .filter((session) => session.directory === store.path.directory) .filter((session) => !session.parentID && !session.time?.archived) .toSorted(sortSessions(Date.now())) }) const children = createMemo(() => { - const data = workspace().store + const store = workspace().store const map = new Map() - for (const session of data.session) { + for (const session of store.session) { if (!session.parentID) continue const existing = map.get(session.parentID) if (existing) {