summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-05 06:20:19 -0600
committerAdam <[email protected]>2026-02-05 06:20:19 -0600
commitbf7af99a3f07787bdf6781af0dfc57bcc169fe3b (patch)
treed7e20afb414955459a5259c2c208aec113e3dfe9 /packages
parent7555742bf096ec27d2847797daeb79725f6d5b9e (diff)
downloadopencode-bf7af99a3f07787bdf6781af0dfc57bcc169fe3b.tar.gz
opencode-bf7af99a3f07787bdf6781af0dfc57bcc169fe3b.zip
fix(app): terminal URL issues
Diffstat (limited to 'packages')
-rw-r--r--packages/app/src/components/terminal-url.test.ts44
-rw-r--r--packages/app/src/components/terminal-url.ts12
-rw-r--r--packages/app/src/components/terminal.tsx4
3 files changed, 2 insertions, 58 deletions
diff --git a/packages/app/src/components/terminal-url.test.ts b/packages/app/src/components/terminal-url.test.ts
deleted file mode 100644
index 8548d7087..000000000
--- a/packages/app/src/components/terminal-url.test.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { describe, expect, test } from "bun:test"
-import { ptySocketUrl } from "./terminal-url"
-
-describe("ptySocketUrl", () => {
- test("uses sdk host for absolute server url", () => {
- const url = ptySocketUrl("http://localhost:4096", "pty_1", "/repo", {
- host: "192.168.1.50:4096",
- protocol: "http:",
- })
- expect(url.toString()).toBe("ws://localhost:4096/pty/pty_1/connect?directory=%2Frepo")
- })
-
- test("does not use browser port for local dev", () => {
- const url = ptySocketUrl("http://localhost:4096", "pty_1", "/repo", {
- host: "localhost:3000",
- protocol: "http:",
- })
- expect(url.toString()).toBe("ws://localhost:4096/pty/pty_1/connect?directory=%2Frepo")
- })
-
- test("uses secure websocket on https", () => {
- const url = ptySocketUrl("https://opencode.local", "pty_1", "/repo", {
- host: "localhost:3000",
- protocol: "http:",
- })
- expect(url.toString()).toBe("wss://opencode.local/pty/pty_1/connect?directory=%2Frepo")
- })
-
- test("preserves base url port", () => {
- const url = ptySocketUrl("https://opencode.local:8443", "pty_1", "/repo", {
- host: "localhost:3000",
- protocol: "http:",
- })
- expect(url.toString()).toBe("wss://opencode.local:8443/pty/pty_1/connect?directory=%2Frepo")
- })
-
- test("handles slash base url", () => {
- const url = ptySocketUrl("/", "pty_1", "/repo", {
- host: "192.168.1.50:4096",
- protocol: "http:",
- })
- expect(url.toString()).toBe("ws://192.168.1.50:4096/pty/pty_1/connect?directory=%2Frepo")
- })
-})
diff --git a/packages/app/src/components/terminal-url.ts b/packages/app/src/components/terminal-url.ts
deleted file mode 100644
index 5f28e0e31..000000000
--- a/packages/app/src/components/terminal-url.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export function ptySocketUrl(base: string, id: string, directory: string, origin: { host: string; protocol: string }) {
- const root = `${origin.protocol}//${origin.host}`
- const absolute = /^https?:\/\//.test(base)
- const resolved = absolute ? new URL(base) : new URL(base || "/", root)
-
- const url = new URL(resolved)
- url.pathname = resolved.pathname.replace(/\/+$/, "") + `/pty/${id}/connect`
- url.search = ""
- url.searchParams.set("directory", directory)
- url.protocol = resolved.protocol === "https:" ? "wss:" : "ws:"
- return url
-}
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx
index a6ce8acfa..e87670f59 100644
--- a/packages/app/src/components/terminal.tsx
+++ b/packages/app/src/components/terminal.tsx
@@ -8,7 +8,6 @@ import { LocalPTY } from "@/context/terminal"
import { resolveThemeVariant, useTheme, withAlpha, type HexColor } from "@opencode-ai/ui/theme"
import { useLanguage } from "@/context/language"
import { showToast } from "@opencode-ai/ui/toast"
-import { ptySocketUrl } from "./terminal-url"
export interface TerminalProps extends ComponentProps<"div"> {
pty: LocalPTY
@@ -164,7 +163,8 @@ export const Terminal = (props: TerminalProps) => {
const once = { value: false }
- const url = ptySocketUrl(sdk.url, local.pty.id, sdk.directory, window.location)
+ const url = new URL(sdk.url + `/pty/${local.pty.id}/connect?directory=${encodeURIComponent(sdk.directory)}`)
+ url.protocol = url.protocol === "https:" ? "wss:" : "ws:"
if (window.__OPENCODE__?.serverPassword) {
url.username = "opencode"
url.password = window.__OPENCODE__?.serverPassword