From fc36599f7904afd4698efe311554e0bb37113480 Mon Sep 17 00:00:00 2001 From: Federico Crespo Date: Sun, 14 Dec 2025 07:36:47 -0300 Subject: [PATCH] fix(tui): add linear search fallback for session update/delete sync Binary.search may fail to find sessions when the store array order differs from expected sort order. This adds a linear search fallback to ensure session updates (rename) and deletes are properly synced to the UI. Fixes #5494 Fixes #3779 --- .../opencode/src/cli/cmd/tui/context/sync.tsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index f74f787db..0eba6bb39 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -148,6 +148,17 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ draft.splice(result.index, 1) }), ) + break + } + // Linear search fallback for sort order edge cases + const linearIndex = store.session.findIndex((s) => s.id === event.properties.info.id) + if (linearIndex !== -1) { + setStore( + "session", + produce((draft) => { + draft.splice(linearIndex, 1) + }), + ) } break } @@ -157,6 +168,13 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ setStore("session", result.index, reconcile(event.properties.info)) break } + // Linear search fallback for sort order edge cases + const linearIndex = store.session.findIndex((s) => s.id === event.properties.info.id) + if (linearIndex !== -1) { + setStore("session", linearIndex, reconcile(event.properties.info)) + break + } + // Not found, insert at binary search position setStore( "session", produce((draft) => {