From 7c30a4230eb43a24028ea116cbf9dd2ca19bfd0a Mon Sep 17 00:00:00 2001
From: LukeParkerDev <10430890+Hona@users.noreply.github.com>
Date: Tue, 11 Aug 2026 15:53:50 +1000
Subject: [PATCH] fix(app): preserve settings server context
---
.../components/project-settings-extensions.tsx | 6 +++---
.../app/src/components/server/server-row-menu.tsx | 15 ++++++++++++---
.../app/src/components/settings-v2/appearance.tsx | 6 +++---
.../components/settings-v2/dialog-settings-v2.tsx | 3 +++
.../app/src/components/settings-v2/extensions.tsx | 6 +++---
.../app/src/components/settings-v2/servers.tsx | 9 ++-------
.../src/pages/home/home-projects-controller.tsx | 2 +-
.../app/src/pages/home/home-projects-view.tsx | 2 +-
packages/app/src/wsl/settings.tsx | 4 ----
9 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/packages/app/src/components/project-settings-extensions.tsx b/packages/app/src/components/project-settings-extensions.tsx
index 0e42d66516..4c427a2258 100644
--- a/packages/app/src/components/project-settings-extensions.tsx
+++ b/packages/app/src/components/project-settings-extensions.tsx
@@ -8,7 +8,7 @@ import { useSDK } from "@/context/sdk"
import { useServerSDK } from "@/context/server-sdk"
import { useServerSync } from "@/context/server-sync"
import { useSync } from "@/context/sync"
-import { Link } from "./link"
+import { ExternalLink } from "./external-link"
type SkillItem = {
name: string
@@ -198,9 +198,9 @@ export const ProjectSettingsExtensions: Component = () => {
0}>
{skillRows(projectSkills())}
diff --git a/packages/app/src/components/server/server-row-menu.tsx b/packages/app/src/components/server/server-row-menu.tsx
index aedcae8537..619c8a50be 100644
--- a/packages/app/src/components/server/server-row-menu.tsx
+++ b/packages/app/src/components/server/server-row-menu.tsx
@@ -9,7 +9,7 @@ import { ServerConnection } from "@/context/server"
export const ServerRowMenu: Component<{
server: ServerConnection.Any
domain: ServerActionsController
- onEdit: (server: ServerConnection.Any) => void
+ onEdit: (server: ServerConnection.Http) => void
open?: boolean
onOpenChange?: (open: boolean) => void
}> = (props) => {
@@ -49,7 +49,7 @@ export const ServerRowMenuView: Component<{
canDefault: boolean
isDefault: boolean
canRemove: boolean
- onEdit: (server: ServerConnection.Any) => void
+ onEdit: (server: ServerConnection.Http) => void
onSetDefault: () => void
onRemoveDefault: () => void
onRemove: () => void
@@ -57,6 +57,7 @@ export const ServerRowMenuView: Component<{
onOpenChange?: (open: boolean) => void
}> = (props) => {
const builtin = () => ServerConnection.builtin(props.server)
+ const httpServer = () => (props.server.type === "http" ? props.server : undefined)
return (
{props.labels.server}
- props.onEdit(props.server)}>{props.labels.edit}
+ {
+ const server = httpServer()
+ if (server) props.onEdit(server)
+ }}
+ >
+ {props.labels.edit}
+
{props.labels.default}
diff --git a/packages/app/src/components/settings-v2/appearance.tsx b/packages/app/src/components/settings-v2/appearance.tsx
index c9a937081e..beb72b0b85 100644
--- a/packages/app/src/components/settings-v2/appearance.tsx
+++ b/packages/app/src/components/settings-v2/appearance.tsx
@@ -2,7 +2,7 @@ import { Component, createMemo } from "solid-js"
import { SelectV2 } from "@opencode-ai/ui/v2/select-v2"
import { TextInputV2 } from "@opencode-ai/ui/v2/text-input-v2"
import { useLanguage } from "@/context/language"
-import { Link } from "../link"
+import { ExternalLink } from "../external-link"
import { SettingsListV2 } from "./parts/list"
import { SettingsRowV2 } from "./parts/row"
import { createAppearanceSettingsController, type AppearanceSettingsController } from "./general-controllers"
@@ -104,9 +104,9 @@ export const SettingsAppearanceV2: Component = () => {
description={
<>
{language.t("settings.general.row.theme.description")}{" "}
-
+
{language.t("common.learnMore")}
-
+
>
}
>
diff --git a/packages/app/src/components/settings-v2/dialog-settings-v2.tsx b/packages/app/src/components/settings-v2/dialog-settings-v2.tsx
index 4dad7fe061..d4b73ee6ca 100644
--- a/packages/app/src/components/settings-v2/dialog-settings-v2.tsx
+++ b/packages/app/src/components/settings-v2/dialog-settings-v2.tsx
@@ -19,6 +19,7 @@ import { useLayout } from "@/context/layout"
import { useTabs } from "@/context/tabs"
import { useServerSync } from "@/context/server-sync"
import { useGlobal } from "@/context/global"
+import { ServerConnection } from "@/context/server"
import "./settings-v2.css"
export const DialogSettings: Component<{
@@ -32,6 +33,8 @@ export const DialogSettings: Component<{
const tabs = useTabs()
const serverSync = useServerSync()
const global = useGlobal()
+ const currentServer = global.servers.list().find((server) => global.ensureServerCtx(server).sync === serverSync())
+ if (currentServer) global.settings.server.set(ServerConnection.key(currentServer))
const [tab, setTab] = createSignal(props.defaultValue ?? "general")
const directory = createMemo(() => {
const server = global.settings.server.selected()
diff --git a/packages/app/src/components/settings-v2/extensions.tsx b/packages/app/src/components/settings-v2/extensions.tsx
index efb0909362..89d1a4da4c 100644
--- a/packages/app/src/components/settings-v2/extensions.tsx
+++ b/packages/app/src/components/settings-v2/extensions.tsx
@@ -5,7 +5,7 @@ import { TabsV2 } from "@opencode-ai/ui/v2/tabs-v2"
import { useLanguage } from "@/context/language"
import { useServerSDK } from "@/context/server-sdk"
import { useServerSync } from "@/context/server-sync"
-import { Link } from "../link"
+import { ExternalLink } from "../external-link"
import { InlineServerSelect } from "./parts/server-select"
import "./settings-v2.css"
@@ -128,12 +128,12 @@ export const SettingsExtensionsV2: Component = () => {
{language.t("settings.extensions.availableAll")}
-
{language.t("settings.extensions.addSkills")}
-
+
diff --git a/packages/app/src/components/settings-v2/servers.tsx b/packages/app/src/components/settings-v2/servers.tsx
index 54e93c4891..e30e9e99db 100644
--- a/packages/app/src/components/settings-v2/servers.tsx
+++ b/packages/app/src/components/settings-v2/servers.tsx
@@ -42,15 +42,10 @@ export const SettingsServersV2: Component = () => {
void dialog.push(() => )
}
- const openEdit = (server: ServerConnection.Any) => {
+ const openEdit = (server: ServerConnection.Http) => {
void dialog.push(() => )
}
- const openWslEdit = (key: ServerConnection.Key) => {
- const item = controller.collection.items().find((candidate) => ServerConnection.key(candidate) === key)
- if (item) openEdit(item)
- }
-
return (
<>
{
}
>
-
+
{(item) => {
const key = ServerConnection.key(item)
diff --git a/packages/app/src/pages/home/home-projects-controller.tsx b/packages/app/src/pages/home/home-projects-controller.tsx
index bad16b4e75..f62907e203 100644
--- a/packages/app/src/pages/home/home-projects-controller.tsx
+++ b/packages/app/src/pages/home/home-projects-controller.tsx
@@ -62,7 +62,7 @@ export function createHomeProjectsController(home: HomeController) {
serverManagement.defaults.set(conn ? ServerConnection.key(conn) : null),
canRemove: (conn: ServerConnection.Any) => serverManagement.connection.canRemove(ServerConnection.key(conn)),
remove: (conn: ServerConnection.Any) => serverManagement.connection.remove(ServerConnection.key(conn)),
- edit: (conn: ServerConnection.Any) => dialog.show(() => ),
+ edit: (conn: ServerConnection.Http) => dialog.show(() => ),
focus: home.selection.focusServer,
},
project: {
diff --git a/packages/app/src/pages/home/home-projects-view.tsx b/packages/app/src/pages/home/home-projects-view.tsx
index 7745eee636..a7dd6ee907 100644
--- a/packages/app/src/pages/home/home-projects-view.tsx
+++ b/packages/app/src/pages/home/home-projects-view.tsx
@@ -45,7 +45,7 @@ export type HomeProjectsViewProps = {
onChooseProject: (server: ServerConnection.Any) => void
onFocusServer: (server: ServerConnection.Any) => void
onToggleCollapsed: (server: ServerConnection.Any) => void
- onEditServer: (server: ServerConnection.Any) => void
+ onEditServer: (server: ServerConnection.Http) => void
onSetDefaultServer: (server: ServerConnection.Any | undefined) => void
canRemoveServer: (server: ServerConnection.Any) => boolean
onRemoveServer: (server: ServerConnection.Any) => void
diff --git a/packages/app/src/wsl/settings.tsx b/packages/app/src/wsl/settings.tsx
index 971f5b4d23..22b302e51a 100644
--- a/packages/app/src/wsl/settings.tsx
+++ b/packages/app/src/wsl/settings.tsx
@@ -67,7 +67,6 @@ export function useFilteredWslServers(filter: Accessor) {
export function WslServerSettings(props: {
domain: Pick
servers: ReturnType
- onEdit: (key: ServerConnection.Key) => void
}) {
const platform = usePlatform()
const language = useLanguage()
@@ -139,9 +138,6 @@ export function WslServerSettings(props: {
{language.t("wsl.server.menu.label")}
- props.onEdit(key)}>
- {language.t("dialog.server.menu.edit")}
-
api && request.mutate(() => api.startServer(key))}>
{language.t("wsl.server.retryStart")}