summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/terminal.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-21 13:23:45 -0600
committerAdam <[email protected]>2026-01-21 13:23:50 -0600
commit3ba1111ed047ca4cc42bc964ae23c32959c0e8fd (patch)
tree552c5bdfa4a83f667b8bc80a8ccec7e5f9cb2476 /packages/app/src/components/terminal.tsx
parent6f7a1c69a517b6f46e7b7c18b69fc38fa7aaa10f (diff)
downloadopencode-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.tsx7
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)
}