diff options
| author | Brendan Allan <[email protected]> | 2026-03-13 09:18:27 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-13 09:18:27 +0800 |
| commit | 84df96eaefe7a920b48b205501fc849ba027e9ad (patch) | |
| tree | 65ac52fde124e5cde48f56bba46c2d7fc1c2f070 /packages/app/src | |
| parent | d9dd33aeebad49120ea8204e34520db872c9f553 (diff) | |
| download | opencode-84df96eaefe7a920b48b205501fc849ba027e9ad.tar.gz opencode-84df96eaefe7a920b48b205501fc849ba027e9ad.zip | |
desktop: multi-window support in electron (#17155)
Diffstat (limited to 'packages/app/src')
| -rw-r--r-- | packages/app/src/app.tsx | 35 | ||||
| -rw-r--r-- | packages/app/src/entry.tsx | 7 |
2 files changed, 24 insertions, 18 deletions
diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 1b7ffde46..c6fca36d5 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -159,7 +159,7 @@ const effectMinDuration = <A, E, R>(e: Effect.Effect<A, E, R>) => Effect.all([e, Effect.sleep(duration)], { concurrency: "unbounded" }).pipe(Effect.map((v) => v[0])) -function ConnectionGate(props: ParentProps) { +function ConnectionGate(props: ParentProps<{ disableHealthCheck?: boolean }>) { const server = useServer() const checkServerHealth = useCheckServerHealth() @@ -168,21 +168,23 @@ function ConnectionGate(props: ParentProps) { // performs repeated health check with a grace period for // non-http connections, otherwise fails instantly const [startupHealthCheck, healthCheckActions] = createResource(() => - Effect.gen(function* () { - if (!server.current) return true - const { http, type } = server.current + props.disableHealthCheck + ? true + : Effect.gen(function* () { + if (!server.current) return true + const { http, type } = server.current - while (true) { - const res = yield* Effect.promise(() => checkServerHealth(http)) - if (res.healthy) return true - if (checkMode() === "background" || type === "http") return false - } - }).pipe( - effectMinDuration(checkMode() === "blocking" ? "1.2 seconds" : 0), - Effect.timeoutOrElse({ duration: "10 seconds", onTimeout: () => Effect.succeed(false) }), - Effect.ensuring(Effect.sync(() => setCheckMode("background"))), - Effect.runPromise, - ), + while (true) { + const res = yield* Effect.promise(() => checkServerHealth(http)) + if (res.healthy) return true + if (checkMode() === "background" || type === "http") return false + } + }).pipe( + effectMinDuration(checkMode() === "blocking" ? "1.2 seconds" : 0), + Effect.timeoutOrElse({ duration: "10 seconds", onTimeout: () => Effect.succeed(false) }), + Effect.ensuring(Effect.sync(() => setCheckMode("background"))), + Effect.runPromise, + ), ) return ( @@ -261,10 +263,11 @@ export function AppInterface(props: { defaultServer: ServerConnection.Key servers?: Array<ServerConnection.Any> router?: Component<BaseRouterProps> + disableHealthCheck?: boolean }) { return ( <ServerProvider defaultServer={props.defaultServer} servers={props.servers}> - <ConnectionGate> + <ConnectionGate disableHealthCheck={props.disableHealthCheck}> <GlobalSDKProvider> <GlobalSyncProvider> <Dynamic diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index c62baccba..b5cbed6e7 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -1,6 +1,5 @@ // @refresh reload -import { iife } from "@opencode-ai/util/iife" import { render } from "solid-js/web" import { AppBaseProviders, AppInterface } from "@/app" import { type Platform, PlatformProvider } from "@/context/platform" @@ -132,7 +131,11 @@ if (root instanceof HTMLElement) { () => ( <PlatformProvider value={platform}> <AppBaseProviders> - <AppInterface defaultServer={ServerConnection.Key.make(getDefaultUrl())} servers={[server]} /> + <AppInterface + defaultServer={ServerConnection.Key.make(getDefaultUrl())} + servers={[server]} + disableHealthCheck + /> </AppBaseProviders> </PlatformProvider> ), |
