summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/sync.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-02 09:21:08 -0600
committerAdam <[email protected]>2026-02-02 14:24:23 -0600
commit30a25e4edca0f3476ca63f83dbe95fcee75113e3 (patch)
treea7c92a4e216c98cef9b067979f22c2c9db7a9dd4 /packages/app/src/context/sync.tsx
parentea1aba4192fd356603e807144edf202328008ee6 (diff)
downloadopencode-30a25e4edca0f3476ca63f83dbe95fcee75113e3.tar.gz
opencode-30a25e4edca0f3476ca63f83dbe95fcee75113e3.zip
fix(app): user messages not rendering consistently
Diffstat (limited to 'packages/app/src/context/sync.tsx')
-rw-r--r--packages/app/src/context/sync.tsx10
1 files changed, 6 insertions, 4 deletions
diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx
index 5c8e140c3..0c6365245 100644
--- a/packages/app/src/context/sync.tsx
+++ b/packages/app/src/context/sync.tsx
@@ -9,6 +9,8 @@ import type { Message, Part } from "@opencode-ai/sdk/v2/client"
const keyFor = (directory: string, id: string) => `${directory}\n${id}`
+const cmp = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0)
+
export const { use: useSync, provider: SyncProvider } = createSimpleContext({
name: "Sync",
init: () => {
@@ -59,7 +61,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const next = items
.map((x) => x.info)
.filter((m) => !!m?.id)
- .sort((a, b) => a.id.localeCompare(b.id))
+ .sort((a, b) => cmp(a.id, b.id))
batch(() => {
input.setStore("message", input.sessionID, reconcile(next, { key: "id" }))
@@ -69,7 +71,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
"part",
message.info.id,
reconcile(
- message.parts.filter((p) => !!p?.id).sort((a, b) => a.id.localeCompare(b.id)),
+ message.parts.filter((p) => !!p?.id).sort((a, b) => cmp(a.id, b.id)),
{ key: "id" },
),
)
@@ -129,7 +131,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const result = Binary.search(messages, input.messageID, (m) => m.id)
messages.splice(result.index, 0, message)
}
- draft.part[input.messageID] = input.parts.filter((p) => !!p?.id).sort((a, b) => a.id.localeCompare(b.id))
+ draft.part[input.messageID] = input.parts.filter((p) => !!p?.id).sort((a, b) => cmp(a.id, b.id))
}),
)
},
@@ -271,7 +273,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
await client.session.list().then((x) => {
const sessions = (x.data ?? [])
.filter((s) => !!s?.id)
- .sort((a, b) => a.id.localeCompare(b.id))
+ .sort((a, b) => cmp(a.id, b.id))
.slice(0, store.limit)
setStore("session", reconcile(sessions, { key: "id" }))
})