From fb8ef1f27b5019fc7220eba04433c031b8bf8752 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 24 Nov 2025 21:42:58 -0500 Subject: [PATCH] tui: prevent re-fetching already synced sessions when switching sessions --- packages/opencode/src/cli/cmd/tui/context/sync.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index 8022de328..c718f7700 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -144,7 +144,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ } break } - case "session.updated": + case "session.updated": { const result = Binary.search(store.session, event.properties.info.id, (s) => s.id) if (result.found) { setStore("session", result.index, reconcile(event.properties.info)) @@ -157,6 +157,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ }), ) break + } case "session.status": { setStore("session_status", event.properties.sessionID, event.properties.status) @@ -288,6 +289,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ bootstrap() }) + const fullSyncedSessions = new Set() const result = { data: store, set: setStore, @@ -314,16 +316,13 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ return last.time.completed ? "idle" : "working" }, async sync(sessionID: string) { - if (store.message[sessionID]) return - const now = Date.now() - console.log("syncing", sessionID) + if (fullSyncedSessions.has(sessionID)) return const [session, messages, todo, diff] = await Promise.all([ sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }), sdk.client.session.messages({ path: { id: sessionID }, query: { limit: 100 } }), sdk.client.session.todo({ path: { id: sessionID } }), sdk.client.session.diff({ path: { id: sessionID } }), ]) - console.log("fetched in " + (Date.now() - now), sessionID) setStore( produce((draft) => { const match = Binary.search(draft.session, sessionID, (s) => s.id) @@ -337,7 +336,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ draft.session_diff[sessionID] = diff.data ?? [] }), ) - console.log("synced in " + (Date.now() - now), sessionID) + fullSyncedSessions.add(sessionID) }, }, bootstrap,