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",