import { isTruthyEnvValue } from "../infra/env.js"; export type BrowserControlServer = { stop: () => Promise; }; export async function startBrowserControlServerIfEnabled(): Promise { if (isTruthyEnvValue(process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER)) { return null; } // Lazy import: keeps startup fast, but still bundles for the embedded // gateway (bun --compile) via the static specifier path. const override = process.env.OPENCLAW_BROWSER_CONTROL_MODULE?.trim(); const mod = override ? await import(override) : await import("../browser/control-service.js"); const start = typeof (mod as { startBrowserControlServiceFromConfig?: unknown }) .startBrowserControlServiceFromConfig === "function" ? (mod as { startBrowserControlServiceFromConfig: () => Promise }) .startBrowserControlServiceFromConfig : (mod as { startBrowserControlServerFromConfig?: () => Promise }) .startBrowserControlServerFromConfig; const stop = typeof (mod as { stopBrowserControlService?: unknown }).stopBrowserControlService === "function" ? (mod as { stopBrowserControlService: () => Promise }).stopBrowserControlService : (mod as { stopBrowserControlServer?: () => Promise }).stopBrowserControlServer; if (!start) { return null; } await start(); return { stop: stop ?? (async () => {}) }; }