From 0ea49d486be63e34caaaba01611fc8236163912b Mon Sep 17 00:00:00 2001 From: Cynthia Long Date: Mon, 23 Mar 2026 22:43:22 +0000 Subject: [PATCH] tempt to fix browser bundle --- .gemini/settings.json | 10 ++++ packages/core/scripts/bundle-browser-mcp.mjs | 53 ++++++++++++++++--- .../core/src/agents/browser/browserManager.ts | 12 +++-- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/.gemini/settings.json b/.gemini/settings.json index 9051dc78de..8a51c4a487 100644 --- a/.gemini/settings.json +++ b/.gemini/settings.json @@ -7,5 +7,15 @@ }, "general": { "devtools": true + }, + "agents": { + "overrides": { + "browser_agent": { "enabled": true } + }, + "browser": { + "headless": true, + "sessionMode": "isolated", + "allowedDomains": ["*.com"] + } } } diff --git a/packages/core/scripts/bundle-browser-mcp.mjs b/packages/core/scripts/bundle-browser-mcp.mjs index efbdd5714c..d610547673 100644 --- a/packages/core/scripts/bundle-browser-mcp.mjs +++ b/packages/core/scripts/bundle-browser-mcp.mjs @@ -83,18 +83,55 @@ async function bundle() { } fs.cpSync(srcThirdParty, destThirdParty, { recursive: true, - filter: (src) => { - // Skip large/unnecessary bundles that are either explicitly excluded - // or not required for the browser agent functionality. - return ( - !src.includes('lighthouse-devtools-mcp-bundle.js') && - !src.includes('devtools-formatter-worker.js') - ); - }, }); } else { console.warn(`Warning: third_party assets not found at ${srcThirdParty}`); } + + // Copy watchdog scripts and dependencies + const srcTelemetry = path.resolve( + __dirname, + '../../../node_modules/chrome-devtools-mcp/build/src/telemetry', + ); + const destWatchdog = path.resolve( + __dirname, + '../dist/bundled/watchdog', + ); + if (fs.existsSync(srcTelemetry)) { + fs.mkdirSync(destWatchdog, { recursive: true }); + // Copy main watchdog directory + fs.cpSync(path.join(srcTelemetry, 'watchdog'), destWatchdog, { recursive: true }); + // Copy shared types needed by watchdog + fs.copyFileSync( + path.join(srcTelemetry, 'types.js'), + path.resolve(__dirname, '../dist/bundled/types.js') + ); + // Copy logger needed by watchdog + fs.copyFileSync( + path.join(srcTelemetry, '../logger.js'), + path.resolve(__dirname, '../dist/bundled/logger.js') + ); + + // Patch imports in watchdog files to reflect the flattened structure in dist/bundled/ + const watchdogFiles = fs.readdirSync(destWatchdog); + for (const file of watchdogFiles) { + if (file.endsWith('.js')) { + const filePath = path.join(destWatchdog, file); + let content = fs.readFileSync(filePath, 'utf-8'); + content = content.replace(/\.\.\/\.\.\/logger\.js/g, '../logger.js'); + content = content.replace(/\.\.\/types\.js/g, '../types.js'); + fs.writeFileSync(filePath, content); + } + } + } else { + console.warn(`Warning: telemetry directory not found at ${srcTelemetry}`); + } + + // Patch the bundled file to point to the correct watchdog path + // The original code uses new URL("./watchdog/main.js", import.meta.url) + // which resolves relative to the bundled file. + // Our bundling script copies the watchdog to ./watchdog/main.js relative to the bundle. + // So the original code should work IF esbuild doesn't mangle import.meta.url. } catch (error) { console.error('Error bundling chrome-devtools-mcp:', error); process.exit(1); diff --git a/packages/core/src/agents/browser/browserManager.ts b/packages/core/src/agents/browser/browserManager.ts index c5fc6c5053..328c0d7119 100644 --- a/packages/core/src/agents/browser/browserManager.ts +++ b/packages/core/src/agents/browser/browserManager.ts @@ -386,7 +386,7 @@ export class BrowserManager { }) .join(', '); mcpArgs.push( - `--chromeArg="--host-rules=MAP * 127.0.0.1, ${exclusionRules}, EXCLUDE 127.0.0.1"`, + `--chromeArg=--host-rules=MAP * 127.0.0.1, ${exclusionRules}, EXCLUDE 127.0.0.1`, ); } @@ -427,10 +427,12 @@ export class BrowserManager { } this.mcpTransport.onclose = () => { - debugLogger.error( - 'chrome-devtools-mcp transport closed unexpectedly. ' + - 'The MCP server process may have crashed.', - ); + if (this.rawMcpClient) { + debugLogger.error( + 'chrome-devtools-mcp transport closed unexpectedly. ' + + 'The MCP server process may have crashed.', + ); + } this.rawMcpClient = undefined; }; this.mcpTransport.onerror = (error: Error) => {