mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-25 17:02:46 +00:00
* Browser: replace extension path with Chrome MCP * Browser: clarify relay stub and doctor checks * Docs: mark browser MCP migration as breaking * Browser: reject unsupported profile drivers * Browser: accept clawd alias on profile create * Doctor: narrow legacy browser driver migration
94 lines
2.4 KiB
TypeScript
94 lines
2.4 KiB
TypeScript
import type { ResolvedBrowserProfile } from "./config.js";
|
|
|
|
export type BrowserProfileMode = "local-managed" | "local-existing-session" | "remote-cdp";
|
|
|
|
export type BrowserProfileCapabilities = {
|
|
mode: BrowserProfileMode;
|
|
isRemote: boolean;
|
|
/** Profile uses the Chrome DevTools MCP server (existing-session driver). */
|
|
usesChromeMcp: boolean;
|
|
usesPersistentPlaywright: boolean;
|
|
supportsPerTabWs: boolean;
|
|
supportsJsonTabEndpoints: boolean;
|
|
supportsReset: boolean;
|
|
supportsManagedTabLimit: boolean;
|
|
};
|
|
|
|
export function getBrowserProfileCapabilities(
|
|
profile: ResolvedBrowserProfile,
|
|
): BrowserProfileCapabilities {
|
|
if (profile.driver === "existing-session") {
|
|
return {
|
|
mode: "local-existing-session",
|
|
isRemote: false,
|
|
usesChromeMcp: true,
|
|
usesPersistentPlaywright: false,
|
|
supportsPerTabWs: false,
|
|
supportsJsonTabEndpoints: false,
|
|
supportsReset: false,
|
|
supportsManagedTabLimit: false,
|
|
};
|
|
}
|
|
|
|
if (!profile.cdpIsLoopback) {
|
|
return {
|
|
mode: "remote-cdp",
|
|
isRemote: true,
|
|
usesChromeMcp: false,
|
|
usesPersistentPlaywright: true,
|
|
supportsPerTabWs: false,
|
|
supportsJsonTabEndpoints: false,
|
|
supportsReset: false,
|
|
supportsManagedTabLimit: false,
|
|
};
|
|
}
|
|
|
|
return {
|
|
mode: "local-managed",
|
|
isRemote: false,
|
|
usesChromeMcp: false,
|
|
usesPersistentPlaywright: false,
|
|
supportsPerTabWs: true,
|
|
supportsJsonTabEndpoints: true,
|
|
supportsReset: true,
|
|
supportsManagedTabLimit: true,
|
|
};
|
|
}
|
|
|
|
export function resolveDefaultSnapshotFormat(params: {
|
|
profile: ResolvedBrowserProfile;
|
|
hasPlaywright: boolean;
|
|
explicitFormat?: "ai" | "aria";
|
|
mode?: "efficient";
|
|
}): "ai" | "aria" {
|
|
if (params.explicitFormat) {
|
|
return params.explicitFormat;
|
|
}
|
|
if (params.mode === "efficient") {
|
|
return "ai";
|
|
}
|
|
|
|
const capabilities = getBrowserProfileCapabilities(params.profile);
|
|
if (capabilities.mode === "local-existing-session") {
|
|
return "ai";
|
|
}
|
|
|
|
return params.hasPlaywright ? "ai" : "aria";
|
|
}
|
|
|
|
export function shouldUsePlaywrightForScreenshot(params: {
|
|
profile: ResolvedBrowserProfile;
|
|
wsUrl?: string;
|
|
ref?: string;
|
|
element?: string;
|
|
}): boolean {
|
|
return !params.wsUrl || Boolean(params.ref) || Boolean(params.element);
|
|
}
|
|
|
|
export function shouldUsePlaywrightForAriaSnapshot(params: {
|
|
profile: ResolvedBrowserProfile;
|
|
wsUrl?: string;
|
|
}): boolean {
|
|
return !params.wsUrl;
|
|
}
|