From c2b7fb29de07bfe4c46dc90c426c52fb38d27b12 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 14 May 2025 20:15:09 -0700 Subject: [PATCH] chore: start trace server (#427) --- src/program.ts | 10 ++++++++++ src/transport.ts | 2 +- tests/sse.spec.ts | 8 ++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/program.ts b/src/program.ts index 59fb566..1f49736 100644 --- a/src/program.ts +++ b/src/program.ts @@ -18,6 +18,8 @@ import { program } from 'commander'; import { startHttpTransport, startStdioTransport } from './transport.js'; import { resolveCLIConfig } from './config.js'; +// @ts-ignore +import { startTraceViewerServer } from 'playwright-core/lib/server'; import type { Connection } from './connection.js'; import { packageJSON } from './context.js'; @@ -59,6 +61,14 @@ program startHttpTransport(config, +options.port, options.host, connectionList); else await startStdioTransport(config, connectionList); + + if (config.saveTrace) { + const server = await startTraceViewerServer(); + const urlPrefix = server.urlPrefix('human-readable'); + const url = urlPrefix + '/trace/index.html?trace=' + config.browser.launchOptions.tracesDir + '/trace.json'; + // eslint-disable-next-line no-console + console.error('\nTrace viewer listening on ' + url); + } }); function setupExitWatchdog(connectionList: Connection[]) { diff --git a/src/transport.ts b/src/transport.ts index 2ab7f03..d75bbc4 100644 --- a/src/transport.ts +++ b/src/transport.ts @@ -140,6 +140,6 @@ export function startHttpTransport(config: FullConfig, port: number, hostname: s 'If your client supports streamable HTTP, you can use the /mcp endpoint instead.', ].join('\n'); // eslint-disable-next-line no-console - console.log(message); + console.error(message); }); } diff --git a/tests/sse.spec.ts b/tests/sse.spec.ts index 6c02107..73a0a25 100644 --- a/tests/sse.spec.ts +++ b/tests/sse.spec.ts @@ -35,10 +35,10 @@ const test = baseTest.extend<{ serverEndpoint: string }>({ serverEndpoint: async ({}, use) => { const cp = spawn('node', [path.join(path.dirname(__filename), '../cli.js'), '--port', '0'], { stdio: 'pipe' }); try { - let stdout = ''; - const url = await new Promise(resolve => cp.stdout?.on('data', data => { - stdout += data.toString(); - const match = stdout.match(/Listening on (http:\/\/.*)/); + let stderr = ''; + const url = await new Promise(resolve => cp.stderr?.on('data', data => { + stderr += data.toString(); + const match = stderr.match(/Listening on (http:\/\/.*)/); if (match) resolve(match[1]); }));