diff options
| author | Adam <[email protected]> | 2026-02-17 12:54:28 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-17 12:54:28 -0600 |
| commit | 20f43372f6714803246d50c08a60723469418f3a (patch) | |
| tree | d356bd3a563a601d57547b8cd5c7d15e10a5d4e5 /packages/app/src/components/terminal.tsx | |
| parent | fb79dd7bf857a95a6045209cc1f3f859563a8081 (diff) | |
| download | opencode-20f43372f6714803246d50c08a60723469418f3a.tar.gz opencode-20f43372f6714803246d50c08a60723469418f3a.zip | |
fix(app): terminal disconnect and resync (#14004)
Diffstat (limited to 'packages/app/src/components/terminal.tsx')
| -rw-r--r-- | packages/app/src/components/terminal.tsx | 18 |
1 files changed, 14 insertions, 4 deletions
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 ( |
