summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-26 13:36:36 -0600
committeradamelmore <[email protected]>2026-01-26 13:36:36 -0600
commitd4e3acf17e3c275bb6cd27d41eb35cf7a7fc8767 (patch)
treecb7df7f66cadc46530458538f4942ace7c47095d /packages/app/src/context
parent04337f62024ab054a62467332c94b62ab292f3c8 (diff)
downloadopencode-d4e3acf17e3c275bb6cd27d41eb35cf7a7fc8767.tar.gz
opencode-d4e3acf17e3c275bb6cd27d41eb35cf7a7fc8767.zip
fix(app): session sync issue
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/sync.tsx43
1 files changed, 15 insertions, 28 deletions
diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx
index 244e5e07b..5c8e140c3 100644
--- a/packages/app/src/context/sync.tsx
+++ b/packages/app/src/context/sync.tsx
@@ -16,7 +16,6 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const sdk = useSDK()
type Child = ReturnType<(typeof globalSync)["child"]>
- type Store = Child[0]
type Setter = Child[1]
const current = createMemo(() => globalSync.child(sdk.directory))
@@ -43,18 +42,6 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
return Math.ceil(count / chunk) * chunk
}
- const hydrateMessages = (directory: string, store: Store, sessionID: string) => {
- const key = keyFor(directory, sessionID)
- if (meta.limit[key] !== undefined) return
-
- const messages = store.message[sessionID]
- if (!messages) return
-
- const limit = limitFor(messages.length)
- setMeta("limit", key, limit)
- setMeta("complete", key, messages.length < limit)
- }
-
const loadMessages = async (input: {
directory: string
client: typeof sdk.client
@@ -150,21 +137,20 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const directory = sdk.directory
const client = sdk.client
const [store, setStore] = globalSync.child(directory)
+ const key = keyFor(directory, sessionID)
const hasSession = (() => {
const match = Binary.search(store.session, sessionID, (s) => s.id)
return match.found
})()
- hydrateMessages(directory, store, sessionID)
-
const hasMessages = store.message[sessionID] !== undefined
- if (hasSession && hasMessages) return
-
- const key = keyFor(directory, sessionID)
+ const hydrated = meta.limit[key] !== undefined
+ if (hasSession && hasMessages && hydrated) return
const pending = inflight.get(key)
if (pending) return pending
- const limit = meta.limit[key] ?? chunk
+ const count = store.message[sessionID]?.length ?? 0
+ const limit = hydrated ? (meta.limit[key] ?? chunk) : limitFor(count)
const sessionReq = hasSession
? Promise.resolve()
@@ -184,15 +170,16 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
)
})
- const messagesReq = hasMessages
- ? Promise.resolve()
- : loadMessages({
- directory,
- client,
- setStore,
- sessionID,
- limit,
- })
+ const messagesReq =
+ hasMessages && hydrated
+ ? Promise.resolve()
+ : loadMessages({
+ directory,
+ client,
+ setStore,
+ sessionID,
+ limit,
+ })
const promise = Promise.all([sessionReq, messagesReq])
.then(() => {})