summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-30 20:06:03 -0600
committerAdam <[email protected]>2025-12-30 20:06:03 -0600
commit1e74560796da159d393210a150ba4fb9d41b8792 (patch)
tree847c809961d5930929ac987da64a321a3fa6c01d /packages/app/src/context
parent48f2419d9d8495a94af11167a44c29c0efd19766 (diff)
downloadopencode-1e74560796da159d393210a150ba4fb9d41b8792.tar.gz
opencode-1e74560796da159d393210a150ba4fb9d41b8792.zip
feat(app): model variants
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/local.tsx41
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx
index 23d706bb0..559d5c2f9 100644
--- a/packages/app/src/context/local.tsx
+++ b/packages/app/src/context/local.tsx
@@ -115,9 +115,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
createStore<{
user: (ModelKey & { visibility: "show" | "hide"; favorite?: boolean })[]
recent: ModelKey[]
+ variant?: Record<string, string | undefined>
}>({
user: [],
recent: [],
+ variant: {},
}),
)
@@ -272,6 +274,45 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
setVisibility(model: ModelKey, visible: boolean) {
updateVisibility(model, visible ? "show" : "hide")
},
+ variant: {
+ current() {
+ const m = current()
+ if (!m) return undefined
+ const key = `${m.provider.id}/${m.id}`
+ return store.variant?.[key]
+ },
+ list() {
+ const m = current()
+ if (!m) return []
+ if (!m.variants) return []
+ return Object.keys(m.variants)
+ },
+ set(value: string | undefined) {
+ const m = current()
+ if (!m) return
+ const key = `${m.provider.id}/${m.id}`
+ if (!store.variant) {
+ setStore("variant", { [key]: value })
+ } else {
+ setStore("variant", key, value)
+ }
+ },
+ cycle() {
+ const variants = this.list()
+ if (variants.length === 0) return
+ const currentVariant = this.current()
+ if (!currentVariant) {
+ this.set(variants[0])
+ return
+ }
+ const index = variants.indexOf(currentVariant)
+ if (index === -1 || index === variants.length - 1) {
+ this.set(undefined)
+ return
+ }
+ this.set(variants[index + 1])
+ },
+ },
}
})()