summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-11 03:33:50 -0600
committerAdam <[email protected]>2025-12-11 06:48:59 -0600
commitf9f78122d0f2e1d750d5c6a35011e1b092c6957c (patch)
treedcfc051ddc151adfcaf15723322933dcec8bc37b
parent1980113ee4305844803f866aef05d742f7cffd47 (diff)
downloadopencode-f9f78122d0f2e1d750d5c6a35011e1b092c6957c.tar.gz
opencode-f9f78122d0f2e1d750d5c6a35011e1b092c6957c.zip
wip(desktop): progress
-rw-r--r--packages/desktop/src/context/layout.tsx4
-rw-r--r--packages/desktop/src/context/local.tsx24
-rw-r--r--packages/desktop/src/hooks/use-providers.ts8
-rw-r--r--packages/desktop/src/pages/layout.tsx2
4 files changed, 21 insertions, 17 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx
index d4a8875f7..24ba55a53 100644
--- a/packages/desktop/src/context/layout.tsx
+++ b/packages/desktop/src/context/layout.tsx
@@ -185,9 +185,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
close(dialog: Dialog) {
if (ephemeral.dialog?.open === dialog) {
setEphemeral("dialog", "open", undefined)
- if (dialog === "connect") {
- setEphemeral("connect", {})
- }
+ setEphemeral("connect", {})
}
},
connect(provider: string) {
diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx
index 74d3ac364..d8dfa732a 100644
--- a/packages/desktop/src/context/local.tsx
+++ b/packages/desktop/src/context/local.tsx
@@ -6,6 +6,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { useSDK } from "./sdk"
import { useSync } from "./sync"
import { base64Encode } from "@opencode-ai/util/encode"
+import { useProviders } from "@/hooks/use-providers"
export type LocalFile = FileNode &
Partial<{
@@ -37,10 +38,17 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
init: () => {
const sdk = useSDK()
const sync = useSync()
+ const providers = useProviders()
function isModelValid(model: ModelKey) {
- const provider = sync.data.provider?.all.find((x) => x.id === model.providerID)
- return !!provider?.models[model.modelID] && sync.data.provider?.connected.includes(model.providerID)
+ const provider = providers().all.find((x) => x.id === model.providerID)
+ return (
+ !!provider?.models[model.modelID] &&
+ providers()
+ .connected()
+ .map((p) => p.id)
+ .includes(model.providerID)
+ )
}
function getFirstValidModel(...modelFns: (() => ModelKey | undefined)[]) {
@@ -115,8 +123,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
})
const list = createMemo(() =>
- sync.data.provider.all
- .filter((p) => sync.data.provider.connected.includes(p.id))
+ providers()
+ .connected()
.flatMap((p) =>
Object.values(p.models).map((m) => ({
...m,
@@ -145,11 +153,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
}
}
- for (const p of sync.data.provider.connected) {
- if (p in sync.data.provider.default) {
+ for (const p of providers().connected()) {
+ if (p.id in providers().default) {
return {
- providerID: p,
- modelID: sync.data.provider.default[p],
+ providerID: p.id,
+ modelID: providers().default[p.id],
}
}
}
diff --git a/packages/desktop/src/hooks/use-providers.ts b/packages/desktop/src/hooks/use-providers.ts
index c3fcc7898..04ef855d4 100644
--- a/packages/desktop/src/hooks/use-providers.ts
+++ b/packages/desktop/src/hooks/use-providers.ts
@@ -16,16 +16,14 @@ export function useProviders() {
}
return globalSync.data.provider
})
- const connected = createMemo(() =>
- providers().all.filter(
- (p) => providers().connected.includes(p.id) && Object.values(p.models).find((m) => m.cost?.input),
- ),
- )
+ const connected = createMemo(() => providers().all.filter((p) => providers().connected.includes(p.id)))
+ const paid = createMemo(() => connected().filter((p) => Object.values(p.models).find((m) => m.cost?.input)))
const popular = createMemo(() => providers().all.filter((p) => popularProviders.includes(p.id)))
return createMemo(() => ({
all: providers().all,
default: providers().default,
popular,
connected,
+ paid,
}))
}
diff --git a/packages/desktop/src/pages/layout.tsx b/packages/desktop/src/pages/layout.tsx
index 5f0b26f6b..39917c420 100644
--- a/packages/desktop/src/pages/layout.tsx
+++ b/packages/desktop/src/pages/layout.tsx
@@ -487,7 +487,7 @@ export default function Layout(props: ParentProps) {
</div>
<div class="flex flex-col gap-1.5 self-stretch items-start shrink-0 px-2 py-3">
<Switch>
- <Match when={!providers().connected().length && layout.sidebar.opened()}>
+ <Match when={!providers().paid().length && layout.sidebar.opened()}>
<div class="rounded-md bg-background-stronger shadow-xs-border-base">
<div class="p-3 flex flex-col gap-2">
<div class="text-12-medium text-text-strong">Getting started</div>