summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-04 15:43:08 -0600
committerAdam <[email protected]>2026-02-04 15:43:13 -0600
commit2896b8a863909f345468a959669f62cc7feca7c9 (patch)
tree677e8a315564fc3da748a216f4ff87e9a32e21da
parent0d38e69038c9a79e53159a747bf277748d5d79c5 (diff)
downloadopencode-2896b8a863909f345468a959669f62cc7feca7c9.tar.gz
opencode-2896b8a863909f345468a959669f62cc7feca7c9.zip
fix(app): terminal url
-rw-r--r--packages/app/src/components/terminal-url.test.ts26
-rw-r--r--packages/app/src/components/terminal-url.ts14
2 files changed, 25 insertions, 15 deletions
diff --git a/packages/app/src/components/terminal-url.test.ts b/packages/app/src/components/terminal-url.test.ts
index c07e3fa95..8548d7087 100644
--- a/packages/app/src/components/terminal-url.test.ts
+++ b/packages/app/src/components/terminal-url.test.ts
@@ -2,26 +2,34 @@ import { describe, expect, test } from "bun:test"
import { ptySocketUrl } from "./terminal-url"
describe("ptySocketUrl", () => {
- test("uses browser host instead of sdk host", () => {
+ 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://192.168.1.50:4096/pty/pty_1/connect?directory=%2Frepo")
+ expect(url.toString()).toBe("ws://localhost:4096/pty/pty_1/connect?directory=%2Frepo")
})
- test("uses secure websocket on https", () => {
+ test("does not use browser port for local dev", () => {
const url = ptySocketUrl("http://localhost:4096", "pty_1", "/repo", {
- host: "opencode.local",
- protocol: "https:",
+ 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 browser port", () => {
- const url = ptySocketUrl("http://localhost:4096", "pty_1", "/repo", {
- host: "opencode.local:8443",
- protocol: "https:",
+ 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")
})
diff --git a/packages/app/src/components/terminal-url.ts b/packages/app/src/components/terminal-url.ts
index c2c9fb53c..5f28e0e31 100644
--- a/packages/app/src/components/terminal-url.ts
+++ b/packages/app/src/components/terminal-url.ts
@@ -1,10 +1,12 @@
export function ptySocketUrl(base: string, id: string, directory: string, origin: { host: string; protocol: string }) {
const root = `${origin.protocol}//${origin.host}`
- const current = new URL(root)
- const prefix = /^https?:\/\//.test(base) ? base : new URL(base || "/", root).toString()
- const url = new URL(prefix.replace(/\/+$/, "") + `/pty/${id}/connect?directory=${encodeURIComponent(directory)}`)
- url.hostname = current.hostname
- url.port = current.port
- url.protocol = origin.protocol === "https:" ? "wss:" : "ws:"
+ 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
}