summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 13:41:22 -0600
committerAdam <[email protected]>2026-02-12 13:41:22 -0600
commit958320f9c1572841c6c4b7aeba4559a79693002d (patch)
tree8bfdd5d101d2ba1ac22f11aac02727cdb8e7d4eb
parentd1ee4c8dca7ec88a608cc640dd11ecb1b0ceb347 (diff)
downloadopencode-958320f9c1572841c6c4b7aeba4559a79693002d.tar.gz
opencode-958320f9c1572841c6c4b7aeba4559a79693002d.zip
fix(app): remote http server connections
-rw-r--r--packages/app/src/context/global-sdk.tsx37
1 files changed, 32 insertions, 5 deletions
diff --git a/packages/app/src/context/global-sdk.tsx b/packages/app/src/context/global-sdk.tsx
index 8c50a8878..346657e2f 100644
--- a/packages/app/src/context/global-sdk.tsx
+++ b/packages/app/src/context/global-sdk.tsx
@@ -12,19 +12,32 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
const platform = usePlatform()
const abort = new AbortController()
+ const password = typeof window === "undefined" ? undefined : window.__OPENCODE__?.serverPassword
+
const auth = (() => {
- if (typeof window === "undefined") return
- const password = window.__OPENCODE__?.serverPassword
if (!password) return
+ if (!server.isLocal()) return
return {
Authorization: `Basic ${btoa(`opencode:${password}`)}`,
}
})()
+ const eventFetch = (() => {
+ if (!platform.fetch) return
+ try {
+ const url = new URL(server.url)
+ const loopback = url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "::1"
+ if (url.protocol === "http:" && !loopback) return platform.fetch
+ } catch {
+ return
+ }
+ })()
+
const eventSdk = createOpencodeClient({
baseUrl: server.url,
signal: abort.signal,
- headers: auth,
+ fetch: eventFetch,
+ headers: eventFetch ? undefined : auth,
})
const emitter = createGlobalEmitter<{
[key: string]: Event
@@ -80,7 +93,17 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
let streamErrorLogged = false
void (async () => {
- const events = await eventSdk.global.event()
+ const events = await eventSdk.global.event({
+ onSseError: (error) => {
+ if (streamErrorLogged) return
+ streamErrorLogged = true
+ console.error("[global-sdk] event stream error", {
+ url: server.url,
+ fetch: eventFetch ? "platform" : "webview",
+ error,
+ })
+ },
+ })
let yielded = Date.now()
for await (const event of events.stream) {
const directory = event.directory ?? "global"
@@ -106,7 +129,11 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
.catch((error) => {
if (streamErrorLogged) return
streamErrorLogged = true
- console.error("[global-sdk] event stream failed", error)
+ console.error("[global-sdk] event stream failed", {
+ url: server.url,
+ fetch: eventFetch ? "platform" : "webview",
+ error,
+ })
})
onCleanup(() => {