summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2026-01-19 18:22:19 -0500
committerDax Raad <[email protected]>2026-01-19 18:22:19 -0500
commitaa4b06e16548d5a1a5e8c32376987f6aa70c9844 (patch)
treee62251b82138789d7b5a3906bd36f9dfd20ecee9
parent2542693f7bfe79fbb4ff4af64c14bf57775d962e (diff)
downloadopencode-aa4b06e16548d5a1a5e8c32376987f6aa70c9844.tar.gz
opencode-aa4b06e16548d5a1a5e8c32376987f6aa70c9844.zip
tui: fix message history cleanup to prevent memory leaks
-rw-r--r--packages/opencode/src/cli/cmd/tui/context/sync.tsx20
1 files changed, 19 insertions, 1 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
index 0edc91134..392cfb7f1 100644
--- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
@@ -241,9 +241,27 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
event.properties.info.sessionID,
produce((draft) => {
draft.splice(result.index, 0, event.properties.info)
- if (draft.length > 100) draft.shift()
}),
)
+ const updated = store.message[event.properties.info.sessionID]
+ if (updated.length > 100) {
+ const oldest = updated[0]
+ batch(() => {
+ setStore(
+ "message",
+ event.properties.info.sessionID,
+ produce((draft) => {
+ draft.shift()
+ }),
+ )
+ setStore(
+ "part",
+ produce((draft) => {
+ delete draft[oldest.id]
+ }),
+ )
+ })
+ }
break
}
case "message.removed": {