diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx
index 7ee185b289..5b04c9d719 100644
--- a/packages/app/src/components/dialog-select-server.tsx
+++ b/packages/app/src/components/dialog-select-server.tsx
@@ -275,6 +275,7 @@ export function DialogSelectServer(props: DialogSelectServerProps = {}) {
return key
},
onSuccess: async (key) => {
+ if (defaultServer.defaultKey() === key) await defaultServer.setDefault(null)
server.remove(key)
},
onError: (err) => showRequestError(language, err),
@@ -610,6 +611,11 @@ export function DialogSelectServer(props: DialogSelectServerProps = {}) {
WSL
+
+
+ {language.t("dialog.server.status.default")}
+
+
{wslRuntimeLabel(item.runtime.kind)}
@@ -630,7 +636,21 @@ export function DialogSelectServer(props: DialogSelectServerProps = {}) {
Retry start
-
+
+ void defaultServer.setDefault(key)}>
+
+ {language.t("dialog.server.menu.default")}
+
+
+
+
+ void defaultServer.setDefault(null)}>
+
+ {language.t("dialog.server.menu.defaultRemove")}
+
+
+
+
health(key)?.healthy === false
- const canChangeDefault = () => defaultServer.canDefault() && i.type === "http"
+ const canChangeDefault = () => defaultServer.canDefault() && (i.type === "http" || wsl)
const canRemove = () => i.type === "http" || wsl
const opencodeAction = () => {
const check = wslCheck(i)
diff --git a/packages/desktop/src/main/index.ts b/packages/desktop/src/main/index.ts
index da45ac66a7..181c6722a6 100644
--- a/packages/desktop/src/main/index.ts
+++ b/packages/desktop/src/main/index.ts
@@ -348,7 +348,9 @@ const main = Effect.gen(function* () {
password,
})
- void wslServers.initialize().catch((error) => logger.error("wsl server initialization failed", error))
+ void wslServers
+ .initialize({ defaultServer: getDefaultServerUrl() })
+ .catch((error) => logger.error("wsl server initialization failed", error))
yield* Effect.promise(() => health.wait).pipe(
Effect.timeout("30 seconds"),
diff --git a/packages/desktop/src/main/wsl-servers.ts b/packages/desktop/src/main/wsl-servers.ts
index 34cf62f9d7..62580ce7ca 100644
--- a/packages/desktop/src/main/wsl-servers.ts
+++ b/packages/desktop/src/main/wsl-servers.ts
@@ -226,9 +226,9 @@ export function createWslServersController(appVersion: string, spawnSidecar: Spa
return () => listeners.delete(listener)
},
- async initialize() {
+ async initialize(opts?: { defaultServer?: string | null }) {
refreshFromStore()
- await Promise.all(state.servers.map((item) => startServer(item.config.id)))
+ if (opts?.defaultServer?.startsWith("wsl:")) void startServer(opts.defaultServer)
},
async probeRuntime() {
diff --git a/packages/desktop/src/renderer/index.tsx b/packages/desktop/src/renderer/index.tsx
index ff31b374ef..9c3354da0d 100644
--- a/packages/desktop/src/renderer/index.tsx
+++ b/packages/desktop/src/renderer/index.tsx
@@ -18,7 +18,7 @@ import {
import * as Sentry from "@sentry/solid"
import type { AsyncStorage } from "@solid-primitives/storage"
import { MemoryRouter } from "@solidjs/router"
-import { createEffect, createMemo, createResource, onCleanup, onMount } from "solid-js"
+import { createEffect, createMemo, createResource, onCleanup, onMount, Show } from "solid-js"
import { render } from "solid-js/web"
import pkg from "../../package.json"
import { initI18n, t } from "./i18n"
@@ -365,16 +365,23 @@ render(() => {
}
return list
})
+ const effectiveDefaultServer = createMemo(() => {
+ const key = defaultServer.latest ?? ServerConnection.Key.make("sidecar")
+ if (!key.startsWith("wsl:")) return key
+ const item = wslServers.data?.servers.find((item) => item.config.id === key)
+ if (item?.runtime.kind === "ready") return key
+ return ServerConnection.Key.make("sidecar")
+ })
if (!ready()) return splash
return (
-
-
-
+
+ {(key) => (
+
+
+
+ )}
+
)
}