From 1eb023b26c6f9c1d45339ce98c0a4fa97d8a8582 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 03:54:38 +0000 Subject: [PATCH] fix(ui): avoid Node utils import in control UI --- ui/src/ui/tool-display.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ui/src/ui/tool-display.ts b/ui/src/ui/tool-display.ts index 695127df0..a4af7b068 100644 --- a/ui/src/ui/tool-display.ts +++ b/ui/src/ui/tool-display.ts @@ -9,7 +9,6 @@ import { resolveWriteDetail, type ToolDisplaySpec as ToolDisplaySpecBase, } from "../../../src/agents/tool-display-common.js"; -import { shortenHomeInString } from "../../../src/utils.js"; import rawConfig from "./tool-display.json" with { type: "json" }; type ToolDisplaySpec = ToolDisplaySpecBase & { @@ -35,6 +34,27 @@ const TOOL_DISPLAY_CONFIG = rawConfig as ToolDisplayConfig; const FALLBACK = TOOL_DISPLAY_CONFIG.fallback ?? { icon: "puzzle" }; const TOOL_MAP = TOOL_DISPLAY_CONFIG.tools ?? {}; +function shortenHomeInString(input: string): string { + if (!input) { + return input; + } + + // Browser-safe home shortening: avoid importing Node-only helpers (keeps Vite builds working in Docker/CI). + const patterns = [ + { re: /^\/Users\/[^/]+(\/|$)/, replacement: "~$1" }, // macOS + { re: /^\/home\/[^/]+(\/|$)/, replacement: "~$1" }, // Linux + { re: /^C:\\Users\\[^\\]+(\\|$)/i, replacement: "~$1" }, // Windows + ] as const; + + for (const pattern of patterns) { + if (pattern.re.test(input)) { + return input.replace(pattern.re, pattern.replacement); + } + } + + return input; +} + export function resolveToolDisplay(params: { name?: string; args?: unknown;