diff options
| author | Adam <[email protected]> | 2026-01-21 13:23:45 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-21 13:23:50 -0600 |
| commit | 3ba1111ed047ca4cc42bc964ae23c32959c0e8fd (patch) | |
| tree | 552c5bdfa4a83f667b8bc80a8ccec7e5f9cb2476 /packages/app/src/components/terminal.tsx | |
| parent | 6f7a1c69a517b6f46e7b7c18b69fc38fa7aaa10f (diff) | |
| download | opencode-3ba1111ed047ca4cc42bc964ae23c32959c0e8fd.tar.gz opencode-3ba1111ed047ca4cc42bc964ae23c32959c0e8fd.zip | |
fix(app): terminal issues/regression
Diffstat (limited to 'packages/app/src/components/terminal.tsx')
| -rw-r--r-- | packages/app/src/components/terminal.tsx | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index 1ab171898..6bedcfae2 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -10,6 +10,7 @@ export interface TerminalProps extends ComponentProps<"div"> { pty: LocalPTY onSubmit?: () => void onCleanup?: (pty: LocalPTY) => void + onConnect?: () => void onConnectError?: (error: unknown) => void } @@ -40,7 +41,7 @@ export const Terminal = (props: TerminalProps) => { const settings = useSettings() const theme = useTheme() let container!: HTMLDivElement - const [local, others] = splitProps(props, ["pty", "class", "classList", "onConnectError"]) + const [local, others] = splitProps(props, ["pty", "class", "classList", "onConnect", "onConnectError"]) let ws: WebSocket | undefined let term: Term | undefined let ghostty: Ghostty @@ -241,6 +242,7 @@ export const Terminal = (props: TerminalProps) => { // console.log("Scroll position:", ydisp) // }) socket.addEventListener("open", () => { + local.onConnect?.() sdk.client.pty .update({ ptyID: local.pty.id, @@ -255,10 +257,12 @@ export const Terminal = (props: TerminalProps) => { t.write(event.data) }) socket.addEventListener("error", (error) => { + if (disposed) return console.error("WebSocket error:", error) local.onConnectError?.(error) }) socket.addEventListener("close", (event) => { + if (disposed) return // Normal closure (code 1000) means PTY process exited - server event handles cleanup // For other codes (network issues, server restart), trigger error handler if (event.code !== 1000) { @@ -268,6 +272,7 @@ export const Terminal = (props: TerminalProps) => { }) onCleanup(() => { + disposed = true if (handleResize) { window.removeEventListener("resize", handleResize) } |
