summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/components
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-05 10:30:44 -0600
committerAdam <[email protected]>2025-12-05 10:30:48 -0600
commitcfbaf81ef8f360d1df621d800d10b0ac2b3019a8 (patch)
tree424961841d111017d38714010158e270bd688a18 /packages/desktop/src/components
parent87a791fdb9432d457202da85ec5e23e42f91db4d (diff)
downloadopencode-cfbaf81ef8f360d1df621d800d10b0ac2b3019a8.tar.gz
opencode-cfbaf81ef8f360d1df621d800d10b0ac2b3019a8.zip
fix(desktop): clone pty session on reconnect
Diffstat (limited to 'packages/desktop/src/components')
-rw-r--r--packages/desktop/src/components/terminal.tsx9
1 files changed, 5 insertions, 4 deletions
diff --git a/packages/desktop/src/components/terminal.tsx b/packages/desktop/src/components/terminal.tsx
index 49a45a432..f7b44b0aa 100644
--- a/packages/desktop/src/components/terminal.tsx
+++ b/packages/desktop/src/components/terminal.tsx
@@ -1,6 +1,5 @@
import { init, Terminal as Term, FitAddon } from "ghostty-web"
import { ComponentProps, onCleanup, onMount, splitProps } from "solid-js"
-import { createReconnectingWS, ReconnectingWebSocket } from "@solid-primitives/websocket"
import { useSDK } from "@/context/sdk"
import { SerializeAddon } from "@/addons/serialize"
import { LocalPTY } from "@/context/session"
@@ -11,19 +10,20 @@ export interface TerminalProps extends ComponentProps<"div"> {
pty: LocalPTY
onSubmit?: () => void
onCleanup?: (pty: LocalPTY) => void
+ onConnectError?: (error: unknown) => void
}
export const Terminal = (props: TerminalProps) => {
const sdk = useSDK()
let container!: HTMLDivElement
- const [local, others] = splitProps(props, ["pty", "class", "classList"])
- let ws: ReconnectingWebSocket
+ const [local, others] = splitProps(props, ["pty", "class", "classList", "onConnectError"])
+ let ws: WebSocket
let term: Term
let serializeAddon: SerializeAddon
let fitAddon: FitAddon
onMount(async () => {
- ws = createReconnectingWS(sdk.url + `/pty/${local.pty.id}/connect?directory=${encodeURIComponent(sdk.directory)}`)
+ ws = new WebSocket(sdk.url + `/pty/${local.pty.id}/connect?directory=${encodeURIComponent(sdk.directory)}`)
term = new Term({
cursorBlink: true,
fontSize: 14,
@@ -115,6 +115,7 @@ export const Terminal = (props: TerminalProps) => {
})
ws.addEventListener("error", (error) => {
console.error("WebSocket error:", error)
+ props.onConnectError?.(error)
})
ws.addEventListener("close", () => {
console.log("WebSocket disconnected")