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(() => {