diff options
| author | Joachim Isaksson <[email protected]> | 2025-12-30 06:45:15 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-29 23:45:15 -0600 |
| commit | 1670d220da16661382a5ff359bb8ee1b63acb64a (patch) | |
| tree | 66d17a3a43f6000ffae3a9f5f8d6a1251de4f92e | |
| parent | ddc4e347319a7b5ba291e458cccc2ca7fb29ab4b (diff) | |
| download | opencode-1670d220da16661382a5ff359bb8ee1b63acb64a.tar.gz opencode-1670d220da16661382a5ff359bb8ee1b63acb64a.zip | |
fix: prevent model list corruption from SolidJS reactivity (#6359)
Co-authored-by: Joachim Isaksson <[email protected]>
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx | 2 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/context/local.tsx | 15 |
2 files changed, 13 insertions, 4 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx index bc90dbb5c..50cf43896 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx +++ b/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, ) if (inFavorites) return false - const inRecents = recents.some( + const inRecents = recentList.some( (item) => item.providerID === value.providerID && item.modelID === value.modelID, ) if (inRecents) return false diff --git a/packages/opencode/src/cli/cmd/tui/context/local.tsx b/packages/opencode/src/cli/cmd/tui/context/local.tsx index cac542d54..4c5dac499 100644 --- a/packages/opencode/src/cli/cmd/tui/context/local.tsx +++ b/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 }) const uniq = uniqueBy([next, ...modelStore.recent], (x) => x.providerID + x.modelID) if (uniq.length > 10) uniq.pop() - setModelStore("recent", uniq) + setModelStore( + "recent", + uniq.map((x) => ({ providerID: x.providerID, modelID: x.modelID })), + ) save() }, set(model: { providerID: string; modelID: string }, options?: { recent?: boolean }) { @@ -272,7 +275,10 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ if (options?.recent) { const uniq = uniqueBy([model, ...modelStore.recent], (x) => x.providerID + x.modelID) if (uniq.length > 10) uniq.pop() - setModelStore("recent", uniq) + setModelStore( + "recent", + uniq.map((x) => ({ providerID: x.providerID, modelID: x.modelID })), + ) save() } }) @@ -293,7 +299,10 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ const next = exists ? modelStore.favorite.filter((x) => x.providerID !== model.providerID || x.modelID !== model.modelID) : [model, ...modelStore.favorite] - setModelStore("favorite", next) + setModelStore( + "favorite", + next.map((x) => ({ providerID: x.providerID, modelID: x.modelID })), + ) save() }) }, |
