From cfbaf81ef8f360d1df621d800d10b0ac2b3019a8 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 5 Dec 2025 10:30:44 -0600 Subject: fix(desktop): clone pty session on reconnect --- packages/desktop/src/components/terminal.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'packages/desktop/src/components') 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") -- cgit v1.2.3