2
0
Эх сурвалжийг харах

fix: prevent model list corruption from SolidJS reactivity (#6359)

Co-authored-by: Joachim Isaksson <[email protected]>
Joachim Isaksson 1 сар өмнө
parent
commit
1670d220da

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx

@@ -150,7 +150,7 @@ export function DialogModel(props: { providerID?: string }) {
               (item) => item.providerID === value.providerID && item.modelID === value.modelID,
               (item) => item.providerID === value.providerID && item.modelID === value.modelID,
             )
             )
             if (inFavorites) return false
             if (inFavorites) return false
-            const inRecents = recents.some(
+            const inRecents = recentList.some(
               (item) => item.providerID === value.providerID && item.modelID === value.modelID,
               (item) => item.providerID === value.providerID && item.modelID === value.modelID,
             )
             )
             if (inRecents) return false
             if (inRecents) return false

+ 12 - 3
packages/opencode/src/cli/cmd/tui/context/local.tsx

@@ -255,7 +255,10 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
           setModelStore("model", agent.current().name, { ...next })
           setModelStore("model", agent.current().name, { ...next })
           const uniq = uniqueBy([next, ...modelStore.recent], (x) => x.providerID + x.modelID)
           const uniq = uniqueBy([next, ...modelStore.recent], (x) => x.providerID + x.modelID)
           if (uniq.length > 10) uniq.pop()
           if (uniq.length > 10) uniq.pop()
-          setModelStore("recent", uniq)
+          setModelStore(
+            "recent",
+            uniq.map((x) => ({ providerID: x.providerID, modelID: x.modelID })),
+          )
           save()
           save()
         },
         },
         set(model: { providerID: string; modelID: string }, options?: { recent?: boolean }) {
         set(model: { providerID: string; modelID: string }, options?: { recent?: boolean }) {
@@ -272,7 +275,10 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
             if (options?.recent) {
             if (options?.recent) {
               const uniq = uniqueBy([model, ...modelStore.recent], (x) => x.providerID + x.modelID)
               const uniq = uniqueBy([model, ...modelStore.recent], (x) => x.providerID + x.modelID)
               if (uniq.length > 10) uniq.pop()
               if (uniq.length > 10) uniq.pop()
-              setModelStore("recent", uniq)
+              setModelStore(
+                "recent",
+                uniq.map((x) => ({ providerID: x.providerID, modelID: x.modelID })),
+              )
               save()
               save()
             }
             }
           })
           })
@@ -293,7 +299,10 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
             const next = exists
             const next = exists
               ? modelStore.favorite.filter((x) => x.providerID !== model.providerID || x.modelID !== model.modelID)
               ? modelStore.favorite.filter((x) => x.providerID !== model.providerID || x.modelID !== model.modelID)
               : [model, ...modelStore.favorite]
               : [model, ...modelStore.favorite]
-            setModelStore("favorite", next)
+            setModelStore(
+              "favorite",
+              next.map((x) => ({ providerID: x.providerID, modelID: x.modelID })),
+            )
             save()
             save()
           })
           })
         },
         },