From f4ac4c058b9c52271ef72efc8b93d7aad2014a8a Mon Sep 17 00:00:00 2001 From: Alex Rudenko Date: Thu, 5 Mar 2026 09:24:57 +0100 Subject: [PATCH] chore: add detailed daemon status --- src/bin/chrome-devtools.ts | 17 +++++++++++++++ src/daemon/daemon.ts | 15 ++++++++++++- src/daemon/types.ts | 3 +++ tests/e2e/chrome-devtools.test.ts | 35 +++++++++++++------------------ 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/src/bin/chrome-devtools.ts b/src/bin/chrome-devtools.ts index f951928ae..6ac4e057d 100644 --- a/src/bin/chrome-devtools.ts +++ b/src/bin/chrome-devtools.ts @@ -72,6 +72,23 @@ y.command( y.command('status', 'Checks if chrome-devtools-mcp is running', async () => { if (isDaemonRunning()) { console.log('chrome-devtools-mcp daemon is running.'); + const response = await sendCommand({ + method: 'status', + }); + if (response.success) { + const data = JSON.parse(response.result) as { + pid: number | null; + socketPath: string; + startDate: string; + version: string; + }; + console.log( + `pid=${data.pid} socket=${data.socketPath} start-date=${data.startDate} version=${data.version}`, + ); + } else { + console.error('Error:', response.error); + process.exit(1); + } } else { console.log('chrome-devtools-mcp daemon is not running.'); } diff --git a/src/daemon/daemon.ts b/src/daemon/daemon.ts index b0cd3aea4..94baa740c 100644 --- a/src/daemon/daemon.ts +++ b/src/daemon/daemon.ts @@ -42,6 +42,8 @@ logger(`Writing ${process.pid.toString()} to ${pidFilePath}`); const socketPath = getSocketPath(); +const startDate = new Date(); + let mcpClient: Client | null = null; let mcpTransport: StdioClientTransport | null = null; let server: Server | null = null; @@ -107,7 +109,18 @@ async function handleRequest(msg: DaemonMessage) { success: true, message: 'stopping', }; - } else { + } else if (msg.method === 'status') { + return { + success: true, + result: JSON.stringify({ + pid: process.pid, + socketPath, + startDate: startDate.toISOString(), + version: VERSION, + }), + }; + } + { return { success: false, error: `Unknown method: ${JSON.stringify(msg, null, 2)}`, diff --git a/src/daemon/types.ts b/src/daemon/types.ts index 885bf1b6a..b84b58b2b 100644 --- a/src/daemon/types.ts +++ b/src/daemon/types.ts @@ -8,6 +8,9 @@ export type DaemonMessage = | { method: 'stop'; } + | { + method: 'status'; + } | { method: 'invoke_tool'; tool: string; diff --git a/tests/e2e/chrome-devtools.test.ts b/tests/e2e/chrome-devtools.test.ts index 70f7874fd..8e27f9d2a 100644 --- a/tests/e2e/chrome-devtools.test.ts +++ b/tests/e2e/chrome-devtools.test.ts @@ -22,6 +22,16 @@ describe('chrome-devtools', () => { ); } + function assertDaemonIsRunning() { + const result = spawnSync('node', [CLI_PATH, 'status']); + assert.ok( + result.stdout + .toString() + .startsWith('chrome-devtools-mcp daemon is running.\n'), + 'chrome-devtools-mcp daemon is not running', + ); + } + beforeEach(() => { spawnSync('node', [CLI_PATH, 'stop']); assertDaemonIsNotRunning(); @@ -42,11 +52,7 @@ describe('chrome-devtools', () => { `start command failed: ${startResult.stderr.toString()}`, ); - const result = spawnSync('node', [CLI_PATH, 'status']); - assert.strictEqual( - result.stdout.toString(), - 'chrome-devtools-mcp daemon is running.\n', - ); + assertDaemonIsRunning(); }); it('can start and stop the daemon', () => { @@ -59,11 +65,7 @@ describe('chrome-devtools', () => { `start command failed: ${startResult.stderr.toString()}`, ); - let result = spawnSync('node', [CLI_PATH, 'status']); - assert.strictEqual( - result.stdout.toString(), - 'chrome-devtools-mcp daemon is running.\n', - ); + assertDaemonIsRunning(); const stopResult = spawnSync('node', [CLI_PATH, 'stop']); assert.strictEqual( @@ -72,11 +74,7 @@ describe('chrome-devtools', () => { `stop command failed: ${stopResult.stderr.toString()}`, ); - result = spawnSync('node', [CLI_PATH, 'status']); - assert.strictEqual( - result.stdout.toString(), - 'chrome-devtools-mcp daemon is not running.\n', - ); + assertDaemonIsNotRunning(); }); it('can invoke list_pages', async () => { @@ -100,12 +98,7 @@ describe('chrome-devtools', () => { 'list_pages output is unexpected', ); - // Daemon should now be running. - const result = spawnSync('node', [CLI_PATH, 'status']); - assert.strictEqual( - result.stdout.toString(), - 'chrome-devtools-mcp daemon is running.\n', - ); + assertDaemonIsRunning(); }); it('forwards disclaimers to stderr on start', () => {