diff --git a/apps/web/app/api/terminal/port/route.ts b/apps/web/app/api/terminal/port/route.ts index ac490480e8a..242843fe40a 100644 --- a/apps/web/app/api/terminal/port/route.ts +++ b/apps/web/app/api/terminal/port/route.ts @@ -5,5 +5,6 @@ export const dynamic = "force-dynamic"; export function GET() { const port = getTerminalPort(); - return NextResponse.json({ port }); + const proxy = process.env.DENCHCLAW_DAEMONLESS === "1"; + return NextResponse.json({ port, proxy }); } diff --git a/apps/web/app/components/terminal/terminal-drawer.tsx b/apps/web/app/components/terminal/terminal-drawer.tsx index da491c7684f..6b685340679 100644 --- a/apps/web/app/components/terminal/terminal-drawer.tsx +++ b/apps/web/app/components/terminal/terminal-drawer.tsx @@ -167,16 +167,22 @@ function TerminalViewport({ const cols = terminal.cols > 0 ? terminal.cols : 80; const rows = terminal.rows > 0 ? terminal.rows : 24; + const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; + + let useProxy = false; let wsPort = DEFAULT_WS_PORT; try { const res = await fetch("/api/terminal/port"); const json = await res.json(); if (json.port) wsPort = json.port; + if (json.proxy) useProxy = true; } catch {} if (disposed) return; - const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; - const wsUrl = `${protocol}//127.0.0.1:${wsPort}`; + + const wsUrl = useProxy + ? `${protocol}//${window.location.host}/terminal-ws/` + : `${protocol}//127.0.0.1:${wsPort}`; const ws = new WebSocket(wsUrl); wsRef.current = ws;