From 28ae99c3b32f91b7511736a92f2005de55c2cfc0 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Wed, 24 Jun 2026 16:27:41 +0800 Subject: [PATCH] fix(app): share synced session data --- packages/app/src/context/notification.tsx | 13 ++++++------- packages/app/src/pages/layout.tsx | 10 +++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/app/src/context/notification.tsx b/packages/app/src/context/notification.tsx index ca0ea5f86c53..753df2accd01 100644 --- a/packages/app/src/context/notification.tsx +++ b/packages/app/src/context/notification.tsx @@ -7,7 +7,6 @@ import { useServerSync } from "./server-sync" import { usePlatform } from "@/context/platform" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" -import { Binary } from "@opencode-ai/core/util/binary" import { base64Encode } from "@opencode-ai/core/util/encode" import { decode64 } from "@/utils/base64" import { EventSessionError } from "@opencode-ai/sdk/v2" @@ -208,12 +207,12 @@ export const { use: useNotification, provider: NotificationProvider } = createSi const lookup = async (directory: string, sessionID?: string) => { if (!sessionID) return undefined - const [syncStore] = serverSync().child(directory, { bootstrap: false }) - const match = Binary.search(syncStore.session, sessionID, (s) => s.id) - if (match.found) return syncStore.session[match.index] - return serverSDK() - .client.session.get({ directory, sessionID }) - .then((x) => x.data) + const sync = serverSync().createDirSyncContext(directory) + const session = sync.session.get(sessionID) + if (session) return session + return sync.session + .sync(sessionID) + .then(() => sync.session.get(sessionID)) .catch(() => undefined) } diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index cb3a4bf6e35c..7bbce7aff7f2 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1299,15 +1299,15 @@ export default function LegacyLayout(props: ParentProps) { } const openSession = async (target: { directory: string; id: string }) => { if (!canOpen(target.directory)) return false - const [data] = serverSync().child(target.directory, { bootstrap: false }) - if (data.session.some((item) => item.id === target.id)) { + const sync = serverSync().createDirSyncContext(target.directory) + if (sync.session.get(target.id)) { setStore("lastProjectSession", root, { directory: target.directory, id: target.id, at: Date.now() }) navigateWithSidebarReset(`/${base64Encode(target.directory)}/session/${target.id}`) return true } - const resolved = await serverSDK() - .client.session.get({ sessionID: target.id }) - .then((x) => x.data) + const resolved = await sync.session + .sync(target.id) + .then(() => sync.session.get(target.id)) .catch(() => undefined) if (!resolved?.directory) return false if (!canOpen(resolved.directory)) return false