From a48912cbb10f972cd9b9be8a5f3bace296df0f4f Mon Sep 17 00:00:00 2001 From: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Date: Fri, 24 Jul 2026 14:55:54 +0800 Subject: [PATCH] fix(app): restore directory-scoped session status for v1 servers (#38637) --- .../app/src/context/global-sync/bootstrap.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/app/src/context/global-sync/bootstrap.ts b/packages/app/src/context/global-sync/bootstrap.ts index 4c527a95803..4f7b949e61a 100644 --- a/packages/app/src/context/global-sync/bootstrap.ts +++ b/packages/app/src/context/global-sync/bootstrap.ts @@ -373,6 +373,33 @@ export async function bootstrapDirectory(input: { .then((data) => input.setStore("agent", data)), () => retry(() => input.sdk.config.get().then((x) => input.setStore("config", reconcile(x.data!, { merge: false })))), + () => + retry(() => + (async () => { + if ((await input.protocol) !== "v1") return + const x = await input.sdk.session.status() + if (!input.session) { + input.setStore("session_status", x.data!) + return + } + const statuses = x.data ?? {} + input.session.set( + "session_status", + produce((draft) => { + for (const sessionID of Object.keys(draft)) { + if (statuses[sessionID]) continue + if (input.session?.get(sessionID)?.directory === input.directory) delete draft[sessionID] + } + }), + ) + for (const [sessionID, status] of Object.entries(statuses)) { + input.session.set("session_status", sessionID, reconcile(status)) + } + await Promise.all( + Object.keys(statuses).map((sessionID) => input.session!.resolve(sessionID).catch(() => undefined)), + ) + })(), + ), !seededProject && (() => retry(() => input.api.project.current({ location: { directory: input.directory } })).then((project) =>