From 901579233cf0c846abcd9622f1443db6d3bb5834 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Feb 2026 21:17:11 -0800 Subject: [PATCH] Close terminal session when hiding terminal panel - Attempt `api.terminal.close` when toggling an open terminal off - Fall back to sending `exit` if close is unavailable or fails - Include `api` in callback dependencies to keep behavior current --- apps/web/src/components/ChatView.tsx | 29 +++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 966d3eb4c28df0929eca606013f99566a8adc004..5423ac60a6971ce8c79f694038b4f5fbad53053c 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -263,12 +263,23 @@ export default function ChatView() { const toggleTerminalVisibility = useCallback(() => { if (!activeThreadId) return; const isOpen = Boolean(activeThread?.terminalOpen); + + if (isOpen && api) { + if (typeof api.terminal.close === "function") { + void api.terminal.close({ threadId: activeThreadId }).catch(() => { + void api.terminal.write({ threadId: activeThreadId, data: "exit\n" }).catch(() => undefined); + }); + } else { + void api.terminal.write({ threadId: activeThreadId, data: "exit\n" }).catch(() => undefined); + } + } + dispatch({ type: "SET_THREAD_TERMINAL_OPEN", threadId: activeThreadId, open: !isOpen, }); - }, [activeThread?.terminalOpen, activeThreadId, dispatch]); + }, [activeThread?.terminalOpen, activeThreadId, api, dispatch]); const splitTerminal = useCallback(() => { if (!activeThreadId) return; dispatch({ @@ -303,21 +314,13 @@ export default function ChatView() { (terminalId: string) => { if (!activeThreadId || !api) return; const fallbackExitWrite = () => - api.terminal - .write({ threadId: activeThreadId, terminalId, data: "exit\n" }) - .catch(() => undefined); - const fallbackClearAndExit = () => - api.terminal - .clear({ threadId: activeThreadId, terminalId }) - .catch(() => undefined) - .then(() => fallbackExitWrite()) - .catch(() => undefined); + api.terminal.write({ threadId: activeThreadId, terminalId, data: "exit\n" }).catch(() => undefined); if ("close" in api.terminal && typeof api.terminal.close === "function") { void api.terminal - .close({ threadId: activeThreadId, terminalId, deleteHistory: true }) - .catch(() => fallbackClearAndExit()); + .close({ threadId: activeThreadId, terminalId }) + .catch(() => fallbackExitWrite()); } else { - void fallbackClearAndExit(); + void fallbackExitWrite(); } dispatch({ type: "CLOSE_THREAD_TERMINAL", -- 2.54.0