Skip to content

Commit bf441fb

Browse files
committed
chore: make serviceWorkerId present only under categoryExtension
1 parent d6db780 commit bf441fb

2 files changed

Lines changed: 74 additions & 66 deletions

File tree

src/tools/console.ts

Lines changed: 60 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -37,60 +37,66 @@ const FILTERABLE_MESSAGE_TYPES: [
3737
'issue',
3838
];
3939

40-
export const listConsoleMessages = definePageTool({
41-
name: 'list_console_messages',
42-
description:
43-
'List all console messages for the currently selected page since the last navigation.',
44-
annotations: {
45-
category: ToolCategory.DEBUGGING,
46-
readOnlyHint: true,
47-
},
48-
schema: {
49-
pageSize: zod
50-
.number()
51-
.int()
52-
.positive()
53-
.optional()
54-
.describe(
55-
'Maximum number of messages to return. When omitted, returns all messages.',
56-
),
57-
pageIdx: zod
58-
.number()
59-
.int()
60-
.min(0)
61-
.optional()
62-
.describe(
63-
'Page number to return (0-based). When omitted, returns the first page.',
64-
),
65-
types: zod
66-
.array(zod.enum(FILTERABLE_MESSAGE_TYPES))
67-
.optional()
68-
.describe(
69-
'Filter messages to only return messages of the specified resource types. When omitted or empty, returns all messages.',
70-
),
71-
includePreservedMessages: zod
72-
.boolean()
73-
.default(false)
74-
.optional()
75-
.describe(
76-
'Set to true to return the preserved messages over the last 3 navigations.',
77-
),
78-
serviceWorkerId: zod
79-
.string()
80-
.optional()
81-
.describe(
82-
'The ID of the service worker to list messages for. When omitted, returns messages for the currently selected page.',
83-
),
84-
},
85-
handler: async (request, response) => {
86-
response.setIncludeConsoleData(true, {
87-
pageSize: request.params.pageSize,
88-
pageIdx: request.params.pageIdx,
89-
types: request.params.types,
90-
includePreservedMessages: request.params.includePreservedMessages,
91-
serviceWorkerId: request.params.serviceWorkerId,
92-
});
93-
},
40+
export const listConsoleMessages = definePageTool(cliArgs => {
41+
return {
42+
name: 'list_console_messages',
43+
description:
44+
'List all console messages for the currently selected page since the last navigation.',
45+
annotations: {
46+
category: ToolCategory.DEBUGGING,
47+
readOnlyHint: true,
48+
},
49+
schema: {
50+
pageSize: zod
51+
.number()
52+
.int()
53+
.positive()
54+
.optional()
55+
.describe(
56+
'Maximum number of messages to return. When omitted, returns all messages.',
57+
),
58+
pageIdx: zod
59+
.number()
60+
.int()
61+
.min(0)
62+
.optional()
63+
.describe(
64+
'Page number to return (0-based). When omitted, returns the first page.',
65+
),
66+
types: zod
67+
.array(zod.enum(FILTERABLE_MESSAGE_TYPES))
68+
.optional()
69+
.describe(
70+
'Filter messages to only return messages of the specified resource types. When omitted or empty, returns all messages.',
71+
),
72+
includePreservedMessages: zod
73+
.boolean()
74+
.default(false)
75+
.optional()
76+
.describe(
77+
'Set to true to return the preserved messages over the last 3 navigations.',
78+
),
79+
...(cliArgs?.categoryExtensions
80+
? {
81+
serviceWorkerId: zod
82+
.string()
83+
.optional()
84+
.describe(
85+
`The ID of the service worker to list messages for. When omitted, returns messages for the currently selected page.`,
86+
),
87+
}
88+
: {}),
89+
},
90+
handler: async (request, response) => {
91+
response.setIncludeConsoleData(true, {
92+
pageSize: request.params.pageSize,
93+
pageIdx: request.params.pageIdx,
94+
types: request.params.types,
95+
includePreservedMessages: request.params.includePreservedMessages,
96+
serviceWorkerId: request.params.serviceWorkerId,
97+
});
98+
},
99+
};
94100
});
95101

96102
export const getConsoleMessage = definePageTool({

tests/tools/console.test.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
import assert from 'node:assert';
8+
import path from 'node:path';
89
import {before, describe, it} from 'node:test';
910

1011
import type {ParsedArguments} from '../../src/bin/chrome-devtools-mcp-cli-options.js';
@@ -15,10 +16,9 @@ import {
1516
getConsoleMessage,
1617
listConsoleMessages,
1718
} from '../../src/tools/console.js';
19+
import {installExtension} from '../../src/tools/extensions.js';
1820
import {serverHooks} from '../server.js';
1921
import {extractExtensionId, getTextContent, withMcpContext} from '../utils.js';
20-
import {installExtension} from '../../src/tools/extensions.js';
21-
import path from 'node:path';
2222

2323
const EXTENSION_LOGGING_PATH = path.join(
2424
import.meta.dirname,
@@ -47,7 +47,9 @@ describe('console', () => {
4747

4848
const response2 = new McpResponse({} as ParsedArguments);
4949

50-
await listConsoleMessages.handler(
50+
await listConsoleMessages({
51+
categoryExtensions: true,
52+
} as ParsedArguments).handler(
5153
{
5254
params: {serviceWorkerId: extensionId},
5355
page: context.getSelectedMcpPage(),
@@ -89,7 +91,7 @@ describe('console', () => {
8991
describe('list_console_messages', () => {
9092
it('list messages', async () => {
9193
await withMcpContext(async (response, context) => {
92-
await listConsoleMessages.handler(
94+
await listConsoleMessages().handler(
9395
{params: {}, page: context.getSelectedMcpPage()},
9496
response,
9597
context,
@@ -104,7 +106,7 @@ describe('console', () => {
104106
await page.pptrPage.setContent(
105107
'<script>console.error("This is an error")</script>',
106108
);
107-
await listConsoleMessages.handler(
109+
await listConsoleMessages().handler(
108110
{params: {}, page: context.getSelectedMcpPage()},
109111
response,
110112
context,
@@ -121,7 +123,7 @@ describe('console', () => {
121123
await page.pptrPage.setContent(
122124
'<script>console.error(new Error("This is an error"))</script>',
123125
);
124-
await listConsoleMessages.handler(
126+
await listConsoleMessages().handler(
125127
{params: {}, page: context.getSelectedMcpPage()},
126128
response,
127129
context,
@@ -136,7 +138,7 @@ describe('console', () => {
136138
await withMcpContext(async (response, context) => {
137139
const page = context.getSelectedMcpPage();
138140
await page.pptrPage.setContent('<script>throw undefined;</script>');
139-
await listConsoleMessages.handler(
141+
await listConsoleMessages().handler(
140142
{params: {}, page: context.getSelectedMcpPage()},
141143
response,
142144
context,
@@ -160,7 +162,7 @@ describe('console', () => {
160162
'<input type="text" name="username" />',
161163
);
162164
await issuePromise;
163-
await listConsoleMessages.handler(
165+
await listConsoleMessages().handler(
164166
{params: {}, page: context.getSelectedMcpPage()},
165167
response,
166168
context,
@@ -189,7 +191,7 @@ describe('console', () => {
189191
'<input type="text" name="username" />',
190192
);
191193
await issuePromise;
192-
await listConsoleMessages.handler(
194+
await listConsoleMessages().handler(
193195
{params: {}, page: context.getSelectedMcpPage()},
194196
response,
195197
context,
@@ -238,7 +240,7 @@ describe('console', () => {
238240
'<script>console.error("This is an error")</script>',
239241
);
240242
// The list is needed to populate the console messages in the context.
241-
await listConsoleMessages.handler(
243+
await listConsoleMessages().handler(
242244
{params: {}, page: context.getSelectedMcpPage()},
243245
response,
244246
context,
@@ -271,7 +273,7 @@ describe('console', () => {
271273
);
272274
await context.createTextSnapshot(page);
273275
await issuePromise;
274-
await listConsoleMessages.handler(
276+
await listConsoleMessages().handler(
275277
{params: {}, page: context.getSelectedMcpPage()},
276278
response,
277279
context,
@@ -327,7 +329,7 @@ describe('console', () => {
327329
assert.ok(issueMsg);
328330
const id = context.getConsoleMessageStableId(issueMsg);
329331
assert.ok(id);
330-
await listConsoleMessages.handler(
332+
await listConsoleMessages().handler(
331333
{params: {types: ['issue']}, page: context.getSelectedMcpPage()},
332334
response,
333335
context,

0 commit comments

Comments
 (0)