From b0f66f96500b1028da87f2fa3654860d08b439db Mon Sep 17 00:00:00 2001 From: "Gan, Jimmy" Date: Fri, 6 Mar 2026 09:15:48 +0800 Subject: [PATCH] fix: show terminal close reason in UI Display websocket close reason text (or close code fallback) in terminal tabs so SSH/session failures are diagnosable without checking backend logs. Co-Authored-By: Claude Opus 4.6 (1M context) --- dashboard/frontend/src/routes/Terminal.svelte | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dashboard/frontend/src/routes/Terminal.svelte b/dashboard/frontend/src/routes/Terminal.svelte index eb94b7f..7ce5211 100644 --- a/dashboard/frontend/src/routes/Terminal.svelte +++ b/dashboard/frontend/src/routes/Terminal.svelte @@ -135,11 +135,12 @@ } } - ws.onopen = () => { ws.send(token); updateTab(tabId, { connected: true }); sendSize(); }; + ws.onopen = () => { ws.send(token); updateTab(tabId, { connected: true, error: "" }); sendSize(); }; ws.onmessage = (e) => term.write(new Uint8Array(e.data)); - ws.onclose = () => { - updateTab(tabId, { connected: false }); - term.write("\r\n\x1b[90m[Connection closed]\x1b[0m"); + ws.onclose = (e) => { + const reason = e.reason || `Connection closed (code ${e.code})`; + updateTab(tabId, { connected: false, error: reason }); + term.write(`\r\n\x1b[90m[${reason}]\x1b[0m`); }; ws.onerror = () => updateTab(tabId, { connected: false, error: "Connection failed" }); term.onData((data) => ws.readyState === 1 && ws.send(new TextEncoder().encode(data))); -- 2.52.0