fix: work around NTP iframes causing hangs (#504)

Drive-by: some logging
This commit is contained in:
Alex Rudenko authored and GitHub committed 2025-10-31 09:26:24 +01:00
1 parent 2f448e84ea
commit cca5ff471c
3 files changed
+10

No files matched your search

+2
View File
@@ -343,11 +343,13 @@ export class McpContext implements Context {
}
async detectOpenDevToolsWindows() {
this.logger('Detecting open DevTools windows');
const pages = await this.browser.pages();
this.#pageToDevToolsPage = new Map<Page, Page>();
for (const devToolsPage of pages) {
if (devToolsPage.url().startsWith('devtools://')) {
try {
this.logger('Calling getTargetInfo for ' + devToolsPage.url());
const data = await devToolsPage
// @ts-expect-error no types for _client().
._client()
+7
View File
@@ -8,6 +8,7 @@ import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import {logger} from './logger.js';
import type {
Browser,
ChromeReleaseChannel,
@@ -29,6 +30,10 @@ function makeTargetFilter() {
if (target.url() === 'chrome://newtab/') {
return true;
}
if (target.url().startsWith('https://ogs.google.com/widget/app/so')) {
// Some special frame on the NTP that is not picked up by CDP-auto-attach.
return false;
}
for (const prefix of ignoredPrefixes) {
if (target.url().startsWith(prefix)) {
return false;
@@ -65,7 +70,9 @@ export async function ensureBrowserConnected(options: {
throw new Error('Either browserURL or wsEndpoint must be provided');
}
logger('Connecting Puppeteer to ', JSON.stringify(connectOptions));
browser = await puppeteer.connect(connectOptions);
logger('Connected Puppeteer');
return browser;
}
+1
View File
@@ -129,6 +129,7 @@ function registerTool(tool: ToolDefinition): void {
try {
logger(`${tool.name} request: ${JSON.stringify(params, null, ' ')}`);
const context = await getContext();
logger(`${tool.name} context: resolved`);
await context.detectOpenDevToolsWindows();
const response = new McpResponse();
await tool.handler(