Просмотр исходного кода

tui: fix message history cleanup to prevent memory leaks

Dax Raad 1 месяц назад
Родитель
Сommit
aa4b06e165
1 измененных файлов с 19 добавлено и 1 удалено
  1. 19 1
      packages/opencode/src/cli/cmd/tui/context/sync.tsx

+ 19 - 1
packages/opencode/src/cli/cmd/tui/context/sync.tsx

@@ -241,9 +241,27 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
             event.properties.info.sessionID,
             event.properties.info.sessionID,
             produce((draft) => {
             produce((draft) => {
               draft.splice(result.index, 0, event.properties.info)
               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
           break
         }
         }
         case "message.removed": {
         case "message.removed": {