mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-07 12:32:52 +00:00
Skip browser lifecycle cleanup when root browser support or the browser plugin entry is disabled, and make the browser maintenance facade respect activation before cached surface use. Also stabilize the resource-only MCP runtime test by waiting for the async rejection log that CI can observe late. Verification: - pnpm test src/plugin-sdk/browser-maintenance.test.ts src/browser-lifecycle-cleanup.test.ts src/auto-reply/reply/session.test.ts src/gateway/server.sessions.reset-cleanup.test.ts src/agents/auth-profiles/usage.test.ts - pnpm test src/agents/agent-bundle-mcp-runtime.test.ts - git diff --check - pnpm build - autoreview local: no accepted/actionable findings - GitHub Actions: CI 26693713166, CodeQL 26693713159, CodeQL Critical Quality 26693713157, OpenGrep PR Diff 26693713125, Workflow Sanity 26693713149, Dependency Guard 26693712478 Co-authored-by: Nicolas Van Eenaeme <nicolas@poison.be>
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import {
|
|
canLoadActivatedBundledPluginPublicSurface,
|
|
tryLoadActivatedBundledPluginPublicSurfaceModuleSync,
|
|
} from "./facade-runtime.js";
|
|
export { movePathToTrash, type MovePathToTrashOptions } from "./browser-trash.js";
|
|
|
|
type CloseTrackedBrowserTabsParams = {
|
|
sessionKeys: Array<string | undefined>;
|
|
closeTab?: (tab: { targetId: string; baseUrl?: string; profile?: string }) => Promise<void>;
|
|
onWarn?: (message: string) => void;
|
|
};
|
|
|
|
type BrowserMaintenanceSurface = {
|
|
closeTrackedBrowserTabsForSessions: (params: CloseTrackedBrowserTabsParams) => Promise<number>;
|
|
};
|
|
|
|
let cachedBrowserMaintenanceSurface: BrowserMaintenanceSurface | undefined;
|
|
|
|
function hasRequestedSessionKeys(sessionKeys: Array<string | undefined>): boolean {
|
|
return sessionKeys.some((key) => Boolean(key?.trim()));
|
|
}
|
|
|
|
function loadBrowserMaintenanceSurface(): BrowserMaintenanceSurface | null {
|
|
const request = {
|
|
dirName: "browser",
|
|
artifactBasename: "browser-maintenance.js",
|
|
};
|
|
if (!canLoadActivatedBundledPluginPublicSurface(request)) {
|
|
return null;
|
|
}
|
|
if (!cachedBrowserMaintenanceSurface) {
|
|
cachedBrowserMaintenanceSurface =
|
|
tryLoadActivatedBundledPluginPublicSurfaceModuleSync<BrowserMaintenanceSurface>(request) ??
|
|
undefined;
|
|
}
|
|
return cachedBrowserMaintenanceSurface ?? null;
|
|
}
|
|
|
|
export async function closeTrackedBrowserTabsForSessions(
|
|
params: CloseTrackedBrowserTabsParams,
|
|
): Promise<number> {
|
|
if (!hasRequestedSessionKeys(params.sessionKeys)) {
|
|
return 0;
|
|
}
|
|
|
|
let surface: BrowserMaintenanceSurface | null;
|
|
try {
|
|
surface = loadBrowserMaintenanceSurface();
|
|
} catch (error) {
|
|
params.onWarn?.(`browser cleanup unavailable: ${String(error)}`);
|
|
return 0;
|
|
}
|
|
if (!surface) {
|
|
return 0;
|
|
}
|
|
return await surface.closeTrackedBrowserTabsForSessions(params);
|
|
}
|