diff --git a/src/browser.ts b/src/browser.ts index 09527fca..eb1f173f 100644 --- a/src/browser.ts +++ b/src/browser.ts @@ -61,6 +61,7 @@ type McpLaunchOptions = { userDataDir?: string; headless: boolean; isolated: boolean; + logFile?: fs.WriteStream; }; export async function launch(options: McpLaunchOptions): Promise { @@ -100,7 +101,7 @@ export async function launch(options: McpLaunchOptions): Promise { } try { - return await puppeteer.launch({ + const browser = await puppeteer.launch({ ...connectOptions, channel: puppeterChannel, executablePath, @@ -110,6 +111,13 @@ export async function launch(options: McpLaunchOptions): Promise { headless, args, }); + if (options.logFile) { + // FIXME: we are probably subscribing too late to catch startup logs. We + // should expose the process earlier or expose the getRecentLogs() getter. + browser.process()?.stderr?.pipe(options.logFile); + browser.process()?.stdout?.pipe(options.logFile); + } + return browser; } catch (error) { // TODO: check browser logs for `Failed to create a ProcessSingleton for // your profile directory` instead. @@ -145,6 +153,7 @@ export async function resolveBrowser(options: { channel?: Channel; headless: boolean; isolated: boolean; + logFile?: fs.WriteStream; }) { const browser = options.browserUrl ? await ensureBrowserConnected(options.browserUrl) diff --git a/src/index.ts b/src/index.ts index bc5886df..8a5d520c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -113,9 +113,7 @@ export const args = yargsInstance .help() .parseSync(); -if (args.logFile) { - saveLogsToFile(args.logFile); -} +const logFile = args.logFile ? saveLogsToFile(args.logFile) : undefined; function readPackageJson(): {version?: string} { const currentDir = import.meta.dirname; @@ -155,6 +153,7 @@ async function getContext(): Promise { customDevTools: args.customDevtools, channel: args.channel as Channel, isolated: args.isolated, + logFile, }); if (context?.browser !== browser) { context = await McpContext.from(browser, logger); diff --git a/src/logger.ts b/src/logger.ts index 66ab046a..f04b9c4d 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -14,7 +14,7 @@ const namespacesToEnable = [ ...(process.env['DEBUG'] ? [process.env['DEBUG']] : []), ]; -export function saveLogsToFile(fileName: string) { +export function saveLogsToFile(fileName: string): fs.WriteStream { // Enable overrides everything so we need to add them debug.enable(namespacesToEnable.join(',')); @@ -27,6 +27,7 @@ export function saveLogsToFile(fileName: string) { logFile.end(); process.exit(1); }); + return logFile; } export const logger = debug(mcpDebugNamespace);