summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/hooks
diff options
context:
space:
mode:
authorDavid Hill <[email protected]>2025-12-11 00:46:07 +0000
committerDavid Hill <[email protected]>2025-12-11 00:46:07 +0000
commita468044c9fb4ece1f1ae4685d46eb875751b66d8 (patch)
treea1879744be543886fa1f50190aff37db8b218c52 /packages/desktop/src/hooks
parentf0274fd29f7301b8ca79b1573b26efd8d08f31d6 (diff)
parentfadeed1fa4caacf34054b231784513a841745766 (diff)
downloadopencode-a468044c9fb4ece1f1ae4685d46eb875751b66d8.tar.gz
opencode-a468044c9fb4ece1f1ae4685d46eb875751b66d8.zip
Merge branch 'dev' of https://github.com/sst/opencode into dev
Diffstat (limited to 'packages/desktop/src/hooks')
-rw-r--r--packages/desktop/src/hooks/use-providers.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/packages/desktop/src/hooks/use-providers.ts b/packages/desktop/src/hooks/use-providers.ts
new file mode 100644
index 000000000..c3fcc7898
--- /dev/null
+++ b/packages/desktop/src/hooks/use-providers.ts
@@ -0,0 +1,31 @@
+import { useGlobalSync } from "@/context/global-sync"
+import { base64Decode } from "@opencode-ai/util/encode"
+import { useParams } from "@solidjs/router"
+import { createMemo } from "solid-js"
+
+export const popularProviders = ["opencode", "anthropic", "github-copilot", "openai", "google", "openrouter", "vercel"]
+
+export function useProviders() {
+ const params = useParams()
+ const globalSync = useGlobalSync()
+ const currentDirectory = createMemo(() => base64Decode(params.dir ?? ""))
+ const providers = createMemo(() => {
+ if (currentDirectory()) {
+ const [projectStore] = globalSync.child(currentDirectory())
+ return projectStore.provider
+ }
+ 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 popular = createMemo(() => providers().all.filter((p) => popularProviders.includes(p.id)))
+ return createMemo(() => ({
+ all: providers().all,
+ default: providers().default,
+ popular,
+ connected,
+ }))
+}