summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-17 12:54:28 -0600
committerGitHub <[email protected]>2026-02-17 12:54:28 -0600
commit20f43372f6714803246d50c08a60723469418f3a (patch)
treed356bd3a563a601d57547b8cd5c7d15e10a5d4e5 /packages/app/src/components
parentfb79dd7bf857a95a6045209cc1f3f859563a8081 (diff)
downloadopencode-20f43372f6714803246d50c08a60723469418f3a.tar.gz
opencode-20f43372f6714803246d50c08a60723469418f3a.zip
fix(app): terminal disconnect and resync (#14004)
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/terminal.tsx18
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 (