diff options
| author | Dax Raad <[email protected]> | 2026-01-19 18:22:19 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2026-01-19 18:22:19 -0500 |
| commit | aa4b06e16548d5a1a5e8c32376987f6aa70c9844 (patch) | |
| tree | e62251b82138789d7b5a3906bd36f9dfd20ecee9 | |
| parent | 2542693f7bfe79fbb4ff4af64c14bf57775d962e (diff) | |
| download | opencode-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.tsx | 20 |
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": { |
