From bd9c8729ff62ee7d9f7accb6472763997c2b8a41 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 26 Mar 2025 16:27:55 +0100 Subject: [PATCH] browser://console should be single resource (#34) Returning one resource per log line is flooding the Claude UI: Screenshot 2025-03-19 at 16 01 45 Returning one big resource with all lines feels better. original PR: https://github.com/microsoft/playwright/pull/35276 --- src/resources/console.ts | 18 ++++++++---------- tests/basic.spec.ts | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/resources/console.ts b/src/resources/console.ts index 14533f4..ab361cb 100644 --- a/src/resources/console.ts +++ b/src/resources/console.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { Resource, ResourceResult } from './resource'; +import type { Resource } from './resource'; export const console: Resource = { schema: { @@ -24,14 +24,12 @@ export const console: Resource = { }, read: async (context, uri) => { - const result: ResourceResult[] = []; - for (const message of await context.ensureConsole()) { - result.push({ - uri, - mimeType: 'text/plain', - text: `[${message.type().toUpperCase()}] ${message.text()}`, - }); - } - return result; + const messages = await context.ensureConsole(); + const log = messages.map(message => `[${message.type().toUpperCase()}] ${message.text()}`).join('\n'); + return [{ + uri, + mimeType: 'text/plain', + text: log + }]; }, }; diff --git a/tests/basic.spec.ts b/tests/basic.spec.ts index 6ae03ff..a20bbb2 100644 --- a/tests/basic.spec.ts +++ b/tests/basic.spec.ts @@ -331,3 +331,35 @@ test.describe('test browser_select_option', () => { })); }); }); + +test('browser://console', async ({ server }) => { + await server.send({ + jsonrpc: '2.0', + id: 2, + method: 'tools/call', + params: { + name: 'browser_navigate', + arguments: { + url: 'data:text/html,', + }, + }, + }); + + const response = await server.send({ + jsonrpc: '2.0', + id: 3, + method: 'resources/read', + params: { + uri: 'browser://console', + }, + }); + expect(response).toEqual(expect.objectContaining({ + result: expect.objectContaining({ + contents: [{ + uri: 'browser://console', + mimeType: 'text/plain', + text: '[LOG] Hello, world!\n[ERROR] Error', + }], + }), + })); +});