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 5cb5e6898..46df11046 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx @@ -3,10 +3,11 @@ import { useLocal } from "@tui/context/local" import { useSync } from "@tui/context/sync" import { map, pipe, flatMap, entries, filter, isDeepEqual, sortBy } from "remeda" import { DialogSelect, type DialogSelectOption, type DialogSelectRef } from "@tui/ui/dialog-select" -import { DialogProvider, useDialog } from "@tui/ui/dialog" +import { useDialog } from "@tui/ui/dialog" import { useTheme } from "../context/theme" import { DialogPrompt } from "../ui/dialog-prompt" import { useSDK } from "../context/sdk" +import { createDialogProviderOptions, DialogProvider } from "./dialog-provider" function Free() { const { theme } = useTheme() @@ -34,6 +35,7 @@ export function DialogModel() { ) const showRecent = createMemo(() => !ref()?.filter && local.model.recent().length > 0 && connected()) + const providers = createDialogProviderOptions() const options = createMemo(() => { return [ @@ -105,32 +107,13 @@ export function DialogModel() { ), ...(!connected() ? pipe( - sync.data.provider_next.all, - map((provider) => ({ - title: provider.name, - category: "Popular providers", - value: provider.id, - description: { - opencode: "(Recommended)", - anthropic: "(Claude Max or API key)", - }[provider.id], - async onSelect() { - const key = await DialogPrompt.show(dialog, "Enter API key") - if (!key) return - await sdk.client.auth.set({ - path: { - id: provider.id, - }, - body: { - type: "api", - key, - }, - }) - await sdk.client.instance.dispose() - await sync.bootstrap() - dialog.replace(() => ) - }, - })), + providers(), + map((option) => { + return { + ...option, + category: "Popular providers", + } + }), filter((x) => PROVIDER_PRIORITY[x.value] !== undefined), sortBy((x) => PROVIDER_PRIORITY[x.value] ?? 99), ) @@ -144,7 +127,7 @@ export function DialogModel() { { keybind: { ctrl: true, name: "a", meta: false, shift: false, leader: false }, title: connected() ? "Connect provider" : "More providers", - onTrigger(option) { + onTrigger() { dialog.replace(() => ) }, },