summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorJoachim Isaksson <[email protected]>2025-12-30 06:45:15 +0100
committerGitHub <[email protected]>2025-12-29 23:45:15 -0600
commit1670d220da16661382a5ff359bb8ee1b63acb64a (patch)
tree66d17a3a43f6000ffae3a9f5f8d6a1251de4f92e /packages
parentddc4e347319a7b5ba291e458cccc2ca7fb29ab4b (diff)
downloadopencode-1670d220da16661382a5ff359bb8ee1b63acb64a.tar.gz
opencode-1670d220da16661382a5ff359bb8ee1b63acb64a.zip
fix: prevent model list corruption from SolidJS reactivity (#6359)
Co-authored-by: Joachim Isaksson <[email protected]>
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx2
-rw-r--r--packages/opencode/src/cli/cmd/tui/context/local.tsx15
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()
})
},