mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-12 17:51:22 +00:00
* Plugin SDK: route browser helper surfaces through browser facade * Browser doctor flow: add facade path regression and export parity guards * Contracts: dedupe browser facade parity checks without reducing coverage * Browser tests: restore host-inspection semantics coverage in extension * fix: add changelog note for browser facade consolidation (#63957) (thanks @joshavant)
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import path from "node:path";
|
|
import type { BrowserConfig, BrowserProfileConfig, OpenClawConfig } from "../config/config.js";
|
|
import type { SsrFPolicy } from "../infra/net/ssrf.js";
|
|
import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js";
|
|
import { loadBundledPluginPublicSurfaceModuleSync } from "./facade-loader.js";
|
|
|
|
export const DEFAULT_OPENCLAW_BROWSER_ENABLED = true;
|
|
export const DEFAULT_BROWSER_EVALUATE_ENABLED = true;
|
|
export const DEFAULT_OPENCLAW_BROWSER_COLOR = "#FF4500";
|
|
export const DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME = "openclaw";
|
|
export const DEFAULT_BROWSER_DEFAULT_PROFILE_NAME = "openclaw";
|
|
export const DEFAULT_AI_SNAPSHOT_MAX_CHARS = 80_000;
|
|
export const DEFAULT_UPLOAD_DIR = path.join(resolvePreferredOpenClawTmpDir(), "uploads");
|
|
|
|
export type ResolvedBrowserConfig = {
|
|
enabled: boolean;
|
|
evaluateEnabled: boolean;
|
|
controlPort: number;
|
|
cdpPortRangeStart: number;
|
|
cdpPortRangeEnd: number;
|
|
cdpProtocol: "http" | "https";
|
|
cdpHost: string;
|
|
cdpIsLoopback: boolean;
|
|
remoteCdpTimeoutMs: number;
|
|
remoteCdpHandshakeTimeoutMs: number;
|
|
color: string;
|
|
executablePath?: string;
|
|
headless: boolean;
|
|
noSandbox: boolean;
|
|
attachOnly: boolean;
|
|
defaultProfile: string;
|
|
profiles: Record<string, BrowserProfileConfig>;
|
|
ssrfPolicy?: SsrFPolicy;
|
|
extraArgs: string[];
|
|
};
|
|
|
|
export type ResolvedBrowserProfile = {
|
|
name: string;
|
|
cdpPort: number;
|
|
cdpUrl: string;
|
|
cdpHost: string;
|
|
cdpIsLoopback: boolean;
|
|
userDataDir?: string;
|
|
color: string;
|
|
driver: "openclaw" | "existing-session";
|
|
attachOnly: boolean;
|
|
};
|
|
|
|
type BrowserProfilesSurface = {
|
|
resolveBrowserConfig: (
|
|
cfg: BrowserConfig | undefined,
|
|
rootConfig?: OpenClawConfig,
|
|
) => ResolvedBrowserConfig;
|
|
resolveProfile: (
|
|
resolved: ResolvedBrowserConfig,
|
|
profileName: string,
|
|
) => ResolvedBrowserProfile | null;
|
|
};
|
|
|
|
function loadBrowserProfilesSurface(): BrowserProfilesSurface {
|
|
return loadBundledPluginPublicSurfaceModuleSync<BrowserProfilesSurface>({
|
|
dirName: "browser",
|
|
artifactBasename: "browser-profiles.js",
|
|
});
|
|
}
|
|
|
|
export function resolveBrowserConfig(
|
|
cfg: BrowserConfig | undefined,
|
|
rootConfig?: OpenClawConfig,
|
|
): ResolvedBrowserConfig {
|
|
return loadBrowserProfilesSurface().resolveBrowserConfig(cfg, rootConfig);
|
|
}
|
|
|
|
export function resolveProfile(
|
|
resolved: ResolvedBrowserConfig,
|
|
profileName: string,
|
|
): ResolvedBrowserProfile | null {
|
|
return loadBrowserProfilesSurface().resolveProfile(resolved, profileName);
|
|
}
|