diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 9a282bbb708..7c4e7ab841b 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -284,6 +284,7 @@ export function AppInterface(props: { {routerProps.children}} + base={import.meta.env.BASE_URL.replace(/\/$/, "") || undefined} > diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index b5cbed6e75d..d08ccaf1794 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -98,10 +98,13 @@ if (!(root instanceof HTMLElement) && import.meta.env.DEV) { } const getCurrentUrl = () => { + let serverBaseUrl = import.meta.env.VITE_OPENCODE_SERVER_BASE_URL ?? "" + // Normalizing slashes. Add starting slash if needed, remove trailing slash. Default value will be empty string. + serverBaseUrl = ("/" + serverBaseUrl.replace(/^\//, "")).replace(/\/$/, "") if (location.hostname.includes("opencode.ai")) return "http://localhost:4096" if (import.meta.env.DEV) - return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}` - return location.origin + return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}{serverBaseUrl}` + return location.origin + serverBaseUrl } const getDefaultUrl = () => { diff --git a/packages/app/src/env.d.ts b/packages/app/src/env.d.ts index 89721f34f29..c8d0a7d2414 100644 --- a/packages/app/src/env.d.ts +++ b/packages/app/src/env.d.ts @@ -1,6 +1,7 @@ import "solid-js" interface ImportMetaEnv { + readonly BASE_URL: string readonly VITE_OPENCODE_SERVER_HOST: string readonly VITE_OPENCODE_SERVER_PORT: string } diff --git a/packages/app/vite.config.ts b/packages/app/vite.config.ts index 6a29ae6345e..9c0685aa034 100644 --- a/packages/app/vite.config.ts +++ b/packages/app/vite.config.ts @@ -2,6 +2,7 @@ import { defineConfig } from "vite" import desktopPlugin from "./vite" export default defineConfig({ + base: process.env.VITE_BASE_URL || "/", plugins: [desktopPlugin] as any, server: { host: "0.0.0.0",