From 20f43372f6714803246d50c08a60723469418f3a Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 17 Feb 2026 12:54:28 -0600 Subject: fix(app): terminal disconnect and resync (#14004) --- packages/app/src/components/terminal.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'packages/app/src/components') diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index 14413dfda..9048c481c 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -346,7 +346,7 @@ export const Terminal = (props: TerminalProps) => { } ghostty = g term = t - output = terminalWriter((data) => t.write(data)) + output = terminalWriter((data, done) => t.write(data, done)) t.attachCustomKeyEventHandler((event) => { const key = event.key.toLowerCase() @@ -520,9 +520,19 @@ export const Terminal = (props: TerminalProps) => { disposed = true if (fitFrame !== undefined) cancelAnimationFrame(fitFrame) if (sizeTimer !== undefined) clearTimeout(sizeTimer) - output?.flush() - persistTerminal({ term, addon: serializeAddon, cursor, pty: local.pty, onCleanup: props.onCleanup }) - cleanup() + if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) ws.close() + + const finalize = () => { + persistTerminal({ term, addon: serializeAddon, cursor, pty: local.pty, onCleanup: props.onCleanup }) + cleanup() + } + + if (!output) { + finalize() + return + } + + output.flush(finalize) }) return ( -- cgit v1.2.3