diff options
| author | Andrew Thal <[email protected]> | 2026-01-10 08:56:48 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-10 08:56:48 -0600 |
| commit | 02b7eb59f8ce9d80a9a80210c0a8ca9de716962e (patch) | |
| tree | ca46a3c7e598e64c4885cb0ba802e52450572c92 /packages/app/src | |
| parent | a8f23fb54812c4cbd60a8b1057d234200a7f6e02 (diff) | |
| download | opencode-02b7eb59f8ce9d80a9a80210c0a8ca9de716962e.tar.gz opencode-02b7eb59f8ce9d80a9a80210c0a8ca9de716962e.zip | |
feat: support configuring default server URL for desktop (#7363)
Diffstat (limited to 'packages/app/src')
| -rw-r--r-- | packages/app/src/app.tsx | 5 | ||||
| -rw-r--r-- | packages/app/src/components/dialog-select-server.tsx | 51 | ||||
| -rw-r--r-- | packages/app/src/context/platform.tsx | 6 |
3 files changed, 59 insertions, 3 deletions
diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index dc7b976fc..bf6da3b4d 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -33,13 +33,14 @@ const Loading = () => <div class="size-full flex items-center justify-center tex declare global { interface Window { - __OPENCODE__?: { updaterEnabled?: boolean; port?: number; serverReady?: boolean } + __OPENCODE__?: { updaterEnabled?: boolean; port?: number; serverReady?: boolean; serverUrl?: string } } } const defaultServerUrl = iife(() => { if (location.hostname.includes("opencode.ai")) return "http://localhost:4096" - if (window.__OPENCODE__) return `http://127.0.0.1:${window.__OPENCODE__.port}` + if (window.__OPENCODE__?.serverUrl) return window.__OPENCODE__.serverUrl + if (window.__OPENCODE__?.port) return `http://127.0.0.1:${window.__OPENCODE__.port}` if (import.meta.env.DEV) return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}` diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index 6d224c6c3..7e2bcc181 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -1,4 +1,4 @@ -import { createEffect, createMemo, onCleanup } from "solid-js" +import { createResource, createEffect, createMemo, onCleanup, Show } from "solid-js" import { createStore, reconcile } from "solid-js/store" import { useDialog } from "@opencode-ai/ui/context/dialog" import { Dialog } from "@opencode-ai/ui/dialog" @@ -35,6 +35,8 @@ export function DialogSelectServer() { error: "", status: {} as Record<string, ServerStatus | undefined>, }) + const [defaultUrl, defaultUrlActions] = createResource(() => platform.getDefaultServerUrl?.()) + const isDesktop = platform.platform === "desktop" const items = createMemo(() => { const current = server.url @@ -173,6 +175,53 @@ export function DialogSelectServer() { </div> </form> </div> + + <Show when={isDesktop}> + <div class="mt-6 px-3 flex flex-col gap-1.5"> + <div class="px-3"> + <h3 class="text-14-regular text-text-weak">Default server</h3> + <p class="text-12-regular text-text-weak mt-1"> + Connect to this server on app launch instead of starting a local server. Requires restart. + </p> + </div> + <div class="flex items-center gap-2 px-3 py-2"> + <Show + when={defaultUrl()} + fallback={ + <Show + when={server.url} + fallback={<span class="text-14-regular text-text-weak">No server selected</span>} + > + <Button + variant="secondary" + size="small" + onClick={async () => { + await platform.setDefaultServerUrl?.(server.url) + defaultUrlActions.refetch(server.url) + }} + > + Set current server as default + </Button> + </Show> + } + > + <div class="flex items-center gap-2 flex-1 min-w-0"> + <span class="truncate text-14-regular">{serverDisplayName(defaultUrl()!)}</span> + </div> + <Button + variant="ghost" + size="small" + onClick={async () => { + await platform.setDefaultServerUrl?.(null) + defaultUrlActions.refetch() + }} + > + Clear + </Button> + </Show> + </div> + </div> + </Show> </div> </Dialog> ) diff --git a/packages/app/src/context/platform.tsx b/packages/app/src/context/platform.tsx index 7fcbb620a..b0822e707 100644 --- a/packages/app/src/context/platform.tsx +++ b/packages/app/src/context/platform.tsx @@ -37,6 +37,12 @@ export type Platform = { /** Fetch override */ fetch?: typeof fetch + + /** Get the configured default server URL (desktop only) */ + getDefaultServerUrl?(): Promise<string | null> + + /** Set the default server URL to use on app startup (desktop only) */ + setDefaultServerUrl?(url: string | null): Promise<void> } export const { use: usePlatform, provider: PlatformProvider } = createSimpleContext({ |
