summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/local.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 09:49:14 -0600
committerGitHub <[email protected]>2026-02-12 09:49:14 -0600
commitff4414bb152acfddb5c0eb073c38bedc1df4ae14 (patch)
tree78381c67d21ef6f089647f6b19e7aa2976840dbc /packages/app/src/context/local.tsx
parent56ad2db02055955f926fda0e4a89055b22ead6f9 (diff)
downloadopencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.tar.gz
opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.zip
chore: refactor packages/app files (#13236)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Frank <[email protected]>
Diffstat (limited to 'packages/app/src/context/local.tsx')
-rw-r--r--packages/app/src/context/local.tsx72
1 files changed, 36 insertions, 36 deletions
diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx
index 85f93f368..ac5da60e8 100644
--- a/packages/app/src/context/local.tsx
+++ b/packages/app/src/context/local.tsx
@@ -16,16 +16,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
const sdk = useSDK()
const sync = useSync()
const providers = useProviders()
+ const connected = createMemo(() => new Set(providers.connected().map((provider) => provider.id)))
function isModelValid(model: ModelKey) {
const provider = providers.all().find((x) => x.id === model.providerID)
- return (
- !!provider?.models[model.modelID] &&
- providers
- .connected()
- .map((p) => p.id)
- .includes(model.providerID)
- )
+ return !!provider?.models[model.modelID] && connected().has(model.providerID)
}
function getFirstValidModel(...modelFns: (() => ModelKey | undefined)[]) {
@@ -36,6 +31,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
}
}
+ let setModel: (model: ModelKey | undefined, options?: { recent?: boolean }) => void = () => undefined
+
const agent = (() => {
const list = createMemo(() => sync.data.agent.filter((x) => x.mode !== "subagent" && !x.hidden))
const [store, setStore] = createStore<{
@@ -75,7 +72,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
if (!value) return
setStore("current", value.name)
if (value.model)
- model.set({
+ setModel({
providerID: value.model.providerID,
modelID: value.model.modelID,
})
@@ -92,38 +89,37 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
model: {},
})
- const fallbackModel = createMemo<ModelKey | undefined>(() => {
- if (sync.data.config.model) {
- const [providerID, modelID] = sync.data.config.model.split("/")
- if (isModelValid({ providerID, modelID })) {
- return {
- providerID,
- modelID,
- }
- }
- }
+ const resolveConfigured = () => {
+ if (!sync.data.config.model) return
+ const [providerID, modelID] = sync.data.config.model.split("/")
+ const key = { providerID, modelID }
+ if (isModelValid(key)) return key
+ }
+ const resolveRecent = () => {
for (const item of models.recent.list()) {
- if (isModelValid(item)) {
- return item
- }
+ if (isModelValid(item)) return item
}
+ }
+ const resolveDefault = () => {
const defaults = providers.default()
- for (const p of providers.connected()) {
- const configured = defaults[p.id]
+ for (const provider of providers.connected()) {
+ const configured = defaults[provider.id]
if (configured) {
- const key = { providerID: p.id, modelID: configured }
+ const key = { providerID: provider.id, modelID: configured }
if (isModelValid(key)) return key
}
- const first = Object.values(p.models)[0]
+ const first = Object.values(provider.models)[0]
if (!first) continue
- const key = { providerID: p.id, modelID: first.id }
+ const key = { providerID: provider.id, modelID: first.id }
if (isModelValid(key)) return key
}
+ }
- return undefined
+ const fallbackModel = createMemo<ModelKey | undefined>(() => {
+ return resolveConfigured() ?? resolveRecent() ?? resolveDefault()
})
const current = createMemo(() => {
@@ -163,21 +159,25 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
})
}
+ const set = (model: ModelKey | undefined, options?: { recent?: boolean }) => {
+ batch(() => {
+ const currentAgent = agent.current()
+ const next = model ?? fallbackModel()
+ if (currentAgent) setEphemeral("model", currentAgent.name, next)
+ if (model) models.setVisibility(model, true)
+ if (options?.recent && model) models.recent.push(model)
+ })
+ }
+
+ setModel = set
+
return {
ready: models.ready,
current,
recent,
list: models.list,
cycle,
- set(model: ModelKey | undefined, options?: { recent?: boolean }) {
- batch(() => {
- const currentAgent = agent.current()
- const next = model ?? fallbackModel()
- if (currentAgent) setEphemeral("model", currentAgent.name, next)
- if (model) models.setVisibility(model, true)
- if (options?.recent && model) models.recent.push(model)
- })
- },
+ set,
visible(model: ModelKey) {
return models.visible(model)
},