From 03e3b52b6ab557cc162eadb5b84ccbb0d0cce4c7 Mon Sep 17 00:00:00 2001 From: trkim Date: Fri, 10 Apr 2026 17:22:41 +0900 Subject: [PATCH 1/4] fix(app): guard missing session paths in web views Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- packages/app/src/components/file-tree.tsx | 3 ++- packages/app/src/pages/layout/helpers.ts | 4 ++-- packages/app/src/pages/session/session-side-panel.tsx | 8 ++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index 930832fb6555..d92a6b411713 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -214,8 +214,9 @@ export default function FileTree(props: { const draggable = () => props.draggable ?? true const key = (p: string) => - file + (file .normalize(p) + ?? "") .replace(/[\\/]+$/, "") .replaceAll("\\", "/") const chain = props._chain ? [...props._chain, key(props.path)] : [key(props.path)] diff --git a/packages/app/src/pages/layout/helpers.ts b/packages/app/src/pages/layout/helpers.ts index 48158debba1d..671d66ecc2d5 100644 --- a/packages/app/src/pages/layout/helpers.ts +++ b/packages/app/src/pages/layout/helpers.ts @@ -6,8 +6,8 @@ type SessionStore = { path: { directory: string } } -export const workspaceKey = (directory: string) => { - const value = directory.replaceAll("\\", "/") +export const workspaceKey = (directory?: string) => { + const value = (directory ?? "").replaceAll("\\", "/") const drive = value.match(/^([A-Za-z]:)\/+$/) if (drive) return `${drive[1]}/` if (/^\/+$/i.test(value)) return "/" diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx index cddbea84d63e..5bffe430413e 100644 --- a/packages/app/src/pages/session/session-side-panel.tsx +++ b/packages/app/src/pages/session/session-side-panel.tsx @@ -58,7 +58,9 @@ export function SessionSidePanel(props: { }) const treeWidth = createMemo(() => (fileOpen() ? `${layout.fileTree.width()}px` : "0px")) - const diffFiles = createMemo(() => props.diffs().map((d) => d.file)) + const diffFiles = createMemo(() => + props.diffs().flatMap((d) => (typeof d.file === "string" && d.file ? [d.file] : [])), + ) const kinds = createMemo(() => { const merge = (a: "add" | "del" | "mix" | undefined, b: "add" | "del" | "mix") => { if (!a) return b @@ -66,11 +68,13 @@ export function SessionSidePanel(props: { return "mix" as const } - const normalize = (p: string) => p.replaceAll("\\\\", "/").replace(/\/+$/, "") + const normalize = (p?: string) => + typeof p === "string" ? p.replaceAll("\\\\", "/").replace(/\/+$/, "") : "" const out = new Map() for (const diff of props.diffs()) { const file = normalize(diff.file) + if (!file) continue const kind = diff.status === "added" ? "add" : diff.status === "deleted" ? "del" : "mix" out.set(file, kind) From a0e628eea615ed4395a65ea8418ee5720550bc4f Mon Sep 17 00:00:00 2001 From: trkim Date: Fri, 10 Apr 2026 17:23:57 +0900 Subject: [PATCH 2/4] fix(app): prefer the current self-hosted server in web mode Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- packages/app/src/entry.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index b5cbed6e75d3..d68503d24d7e 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -104,10 +104,21 @@ const getCurrentUrl = () => { return location.origin } +const isLocalCurrentUrl = (url: string) => { + try { + const next = new URL(url) + return next.hostname === "localhost" || next.hostname === "127.0.0.1" || next.hostname === "::1" + } catch { + return false + } +} + const getDefaultUrl = () => { + const current = getCurrentUrl() + if (isLocalCurrentUrl(current)) return current const lsDefault = readDefaultServerUrl() if (lsDefault) return lsDefault - return getCurrentUrl() + return current } const platform: Platform = { @@ -118,10 +129,7 @@ const platform: Platform = { forward, restart, notify, - getDefaultServer: async () => { - const stored = readDefaultServerUrl() - return stored ? ServerConnection.Key.make(stored) : null - }, + getDefaultServer: async () => ServerConnection.Key.make(getDefaultUrl()), setDefaultServer: writeDefaultServerUrl, } From 53b23da4e8bd6aa5993b4c9cc8ad3c00a8410a90 Mon Sep 17 00:00:00 2001 From: trkim Date: Fri, 10 Apr 2026 17:26:48 +0900 Subject: [PATCH 3/4] fix(types): correct custom element declaration references Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- packages/app/src/custom-elements.d.ts | 2 +- packages/enterprise/src/custom-elements.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/custom-elements.d.ts b/packages/app/src/custom-elements.d.ts index e4ea0d6cebda..86cb284693e6 120000 --- a/packages/app/src/custom-elements.d.ts +++ b/packages/app/src/custom-elements.d.ts @@ -1 +1 @@ -../../ui/src/custom-elements.d.ts \ No newline at end of file +/// diff --git a/packages/enterprise/src/custom-elements.d.ts b/packages/enterprise/src/custom-elements.d.ts index e4ea0d6cebda..86cb284693e6 120000 --- a/packages/enterprise/src/custom-elements.d.ts +++ b/packages/enterprise/src/custom-elements.d.ts @@ -1 +1 @@ -../../ui/src/custom-elements.d.ts \ No newline at end of file +/// From f92a03ca005155a7edc1b4066d9d1a204b39f5e0 Mon Sep 17 00:00:00 2001 From: trkim Date: Fri, 10 Apr 2026 20:51:04 +0900 Subject: [PATCH 4/4] fix(app): scope self-hosted server preference to production Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- packages/app/src/entry.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index d68503d24d7e..bcfc43fee8d5 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -115,7 +115,7 @@ const isLocalCurrentUrl = (url: string) => { const getDefaultUrl = () => { const current = getCurrentUrl() - if (isLocalCurrentUrl(current)) return current + if (!import.meta.env.DEV && isLocalCurrentUrl(current)) return current const lsDefault = readDefaultServerUrl() if (lsDefault) return lsDefault return current @@ -129,7 +129,13 @@ const platform: Platform = { forward, restart, notify, - getDefaultServer: async () => ServerConnection.Key.make(getDefaultUrl()), + getDefaultServer: async () => { + if (import.meta.env.DEV) { + const stored = readDefaultServerUrl() + return stored ? ServerConnection.Key.make(stored) : null + } + return ServerConnection.Key.make(getDefaultUrl()) + }, setDefaultServer: writeDefaultServerUrl, }