mcp-accessibility-scanner 3.0.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +265 -12
- package/index.d.ts +1 -1
- package/lib/browserContextFactory.js +1161 -94
- package/lib/browserContextFactory.js.map +1 -1
- package/lib/browserServerBackend.js +199 -22
- package/lib/browserServerBackend.js.map +1 -1
- package/lib/browserSessions.js +172 -0
- package/lib/browserSessions.js.map +1 -0
- package/lib/config.js +48 -7
- package/lib/config.js.map +1 -1
- package/lib/context.js +321 -71
- package/lib/context.js.map +1 -1
- package/lib/extension/cdpRelay.js +5 -0
- package/lib/extension/cdpRelay.js.map +1 -1
- package/lib/extension/extensionContextFactory.js +12 -1
- package/lib/extension/extensionContextFactory.js.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/mcp/http.js +194 -44
- package/lib/mcp/http.js.map +1 -1
- package/lib/mcp/inProcessTransport.js.map +1 -1
- package/lib/mcp/mdb.js +7 -9
- package/lib/mcp/mdb.js.map +1 -1
- package/lib/mcp/proxyBackend.js +76 -18
- package/lib/mcp/proxyBackend.js.map +1 -1
- package/lib/mcp/server.js +70 -41
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/sharedClientSlot.js +134 -0
- package/lib/mcp/sharedClientSlot.js.map +1 -0
- package/lib/mcp/tool.js +3 -0
- package/lib/mcp/tool.js.map +1 -1
- package/lib/networkPolicy.js +73 -0
- package/lib/networkPolicy.js.map +1 -0
- package/lib/program.js +91 -12
- package/lib/program.js.map +1 -1
- package/lib/response.js +16 -3
- package/lib/response.js.map +1 -1
- package/lib/sessionLog.js +36 -6
- package/lib/sessionLog.js.map +1 -1
- package/lib/tab.js +149 -18
- package/lib/tab.js.map +1 -1
- package/lib/tools/auditKeyboard.js +204 -4
- package/lib/tools/auditKeyboard.js.map +1 -1
- package/lib/tools/auditScreenReader.js +823 -0
- package/lib/tools/auditScreenReader.js.map +1 -0
- package/lib/tools/auditSite.js +268 -90
- package/lib/tools/auditSite.js.map +1 -1
- package/lib/tools/axe.js +479 -21
- package/lib/tools/axe.js.map +1 -1
- package/lib/tools/dialogs.js +18 -4
- package/lib/tools/dialogs.js.map +1 -1
- package/lib/tools/evaluate.js +34 -5
- package/lib/tools/evaluate.js.map +1 -1
- package/lib/tools/network.js +136 -8
- package/lib/tools/network.js.map +1 -1
- package/lib/tools/pdf.js +5 -2
- package/lib/tools/pdf.js.map +1 -1
- package/lib/tools/scanPageMatrix.js +135 -47
- package/lib/tools/scanPageMatrix.js.map +1 -1
- package/lib/tools/screenshot.js +8 -4
- package/lib/tools/screenshot.js.map +1 -1
- package/lib/tools/session.js +53 -0
- package/lib/tools/session.js.map +1 -0
- package/lib/tools/snapshot.js +266 -8
- package/lib/tools/snapshot.js.map +1 -1
- package/lib/tools/tool.js.map +1 -1
- package/lib/tools/utils.js +62 -6
- package/lib/tools/utils.js.map +1 -1
- package/lib/tools.js +11 -2
- package/lib/tools.js.map +1 -1
- package/lib/utils/dataUrl.js +58 -35
- package/lib/utils/dataUrl.js.map +1 -1
- package/lib/utils/fileUtils.js +35 -0
- package/lib/utils/fileUtils.js.map +1 -1
- package/lib/utils/guid.js +8 -0
- package/lib/utils/guid.js.map +1 -1
- package/lib/utils/jsSource.js +187 -0
- package/lib/utils/jsSource.js.map +1 -0
- package/lib/vscode/browserContextFactory.js +87 -0
- package/lib/vscode/browserContextFactory.js.map +1 -0
- package/lib/vscode/host.js +189 -33
- package/lib/vscode/host.js.map +1 -1
- package/lib/vscode/main.js +3 -35
- package/lib/vscode/main.js.map +1 -1
- package/package.json +13 -9
package/lib/tools/axe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axe.js","sourceRoot":"","sources":["../../src/tools/axe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"axe.js","sourceRoot":"","sources":["../../src/tools/axe.ts"],"names":[],"mappings":"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"}
|
package/lib/tools/dialogs.js
CHANGED
|
@@ -15,6 +15,13 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { z } from 'zod';
|
|
17
17
|
import { defineTabTool } from './tool.js';
|
|
18
|
+
// A dialog closed out of band (dismissed manually in headed mode, or through a
|
|
19
|
+
// CDP side-channel) fails accept()/dismiss() with one of these messages — the
|
|
20
|
+
// protocol error on the first attempt, the client-side guard on a repeat
|
|
21
|
+
// (both verified against Playwright 1.62.0 Chromium). The pinned Playwright
|
|
22
|
+
// has no dialogclosed event to observe the close directly, so this error is
|
|
23
|
+
// the only remaining signal that the dialog is already gone.
|
|
24
|
+
const dialogAlreadyClosedError = /no dialog is showing|dialog which is already handled/i;
|
|
18
25
|
const handleDialog = defineTabTool({
|
|
19
26
|
capability: 'core',
|
|
20
27
|
schema: {
|
|
@@ -34,10 +41,17 @@ const handleDialog = defineTabTool({
|
|
|
34
41
|
throw new Error('No dialog visible');
|
|
35
42
|
tab.clearModalState(dialogState);
|
|
36
43
|
await tab.waitForCompletion(async () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
try {
|
|
45
|
+
if (params.accept)
|
|
46
|
+
await dialogState.dialog.accept(params.promptText);
|
|
47
|
+
else
|
|
48
|
+
await dialogState.dialog.dismiss();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (!(error instanceof Error) || !dialogAlreadyClosedError.test(error.message))
|
|
52
|
+
throw error;
|
|
53
|
+
response.addResult('The dialog was already closed out of band; cleared its leftover state.');
|
|
54
|
+
}
|
|
41
55
|
});
|
|
42
56
|
},
|
|
43
57
|
clearsModalState: 'dialog',
|
package/lib/tools/dialogs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialogs.js","sourceRoot":"","sources":["../../src/tools/dialogs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,YAAY,GAAG,aAAa,CAAC;IACjC,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SACjG,CAAC;QACF,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACtC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEvC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACrC,IAAI,MAAM,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"dialogs.js","sourceRoot":"","sources":["../../src/tools/dialogs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,+EAA+E;AAC/E,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,6DAA6D;AAC7D,MAAM,wBAAwB,GAAG,uDAAuD,CAAC;AAEzF,MAAM,YAAY,GAAG,aAAa,CAAC;IACjC,UAAU,EAAE,MAAM;IAElB,MAAM,EAAE;QACN,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SACjG,CAAC;QACF,IAAI,EAAE,aAAa;KACpB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACtC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEvC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,MAAM;oBACf,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;;oBAEnD,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC5E,MAAM,KAAK,CAAC;gBACd,QAAQ,CAAC,SAAS,CAAC,wEAAwE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,EAAE,QAAQ;CAC3B,CAAC,CAAC;AAEH,eAAe;IACb,YAAY;CACb,CAAC"}
|
package/lib/tools/evaluate.js
CHANGED
|
@@ -17,10 +17,16 @@ import { z } from 'zod';
|
|
|
17
17
|
import { defineTabTool } from './tool.js';
|
|
18
18
|
import * as javascript from '../utils/codegen.js';
|
|
19
19
|
import { generateLocator } from './utils.js';
|
|
20
|
+
import { isFunctionSource } from '../utils/jsSource.js';
|
|
20
21
|
const evaluateSchema = z.object({
|
|
21
|
-
function: z.string().describe('() => { /* code */ } or (element) => { /* code */ } when element is provided'),
|
|
22
|
+
function: z.string().describe('() => { /* code */ } or (element) => { /* code */ } when element is provided. A bare expression such as document.title, or element.textContent when element is provided, is also accepted.'),
|
|
22
23
|
element: z.string().optional().describe('Human-readable element description used to obtain permission to interact with the element'),
|
|
23
24
|
ref: z.string().optional().describe('Exact target element reference from the page snapshot'),
|
|
25
|
+
}).refine(data => {
|
|
26
|
+
return !!data.element === !!data.ref;
|
|
27
|
+
}, {
|
|
28
|
+
message: 'Both element and ref must be provided or neither.',
|
|
29
|
+
path: ['ref', 'element'],
|
|
24
30
|
});
|
|
25
31
|
const evaluate = defineTabTool({
|
|
26
32
|
capability: 'core',
|
|
@@ -33,13 +39,16 @@ const evaluate = defineTabTool({
|
|
|
33
39
|
},
|
|
34
40
|
handle: async (tab, params, response) => {
|
|
35
41
|
response.setIncludeSnapshot();
|
|
42
|
+
// The schema pairs them, so one implies the other.
|
|
43
|
+
const onElement = !!params.ref;
|
|
44
|
+
const source = toFunctionSource(params.function, onElement);
|
|
36
45
|
let locator;
|
|
37
|
-
if (
|
|
46
|
+
if (onElement) {
|
|
38
47
|
locator = await tab.refLocator({ ref: params.ref, element: params.element });
|
|
39
|
-
response.addCode(`await page.${await generateLocator(locator)}.evaluate(${javascript.quote(
|
|
48
|
+
response.addCode(`await page.${await generateLocator(locator)}.evaluate(${javascript.quote(source)});`);
|
|
40
49
|
}
|
|
41
50
|
else {
|
|
42
|
-
response.addCode(`await page.evaluate(${javascript.quote(
|
|
51
|
+
response.addCode(`await page.evaluate(${javascript.quote(source)});`);
|
|
43
52
|
}
|
|
44
53
|
await tab.waitForCompletion(async () => {
|
|
45
54
|
// playwright-core 1.59 removed the private `_evaluateFunction` helper
|
|
@@ -47,12 +56,32 @@ const evaluate = defineTabTool({
|
|
|
47
56
|
// argument via `Function.prototype.toString`, so hand it an empty function
|
|
48
57
|
// whose `toString()` returns the user-supplied source instead.
|
|
49
58
|
const func = new Function();
|
|
50
|
-
func.toString = () =>
|
|
59
|
+
func.toString = () => source;
|
|
51
60
|
const result = locator ? await locator.evaluate(func) : await tab.page.evaluate(func);
|
|
52
61
|
response.addResult(JSON.stringify(result, null, 2) || 'undefined');
|
|
53
62
|
});
|
|
54
63
|
},
|
|
55
64
|
});
|
|
65
|
+
/**
|
|
66
|
+
* `evaluate()` needs a function, but callers routinely pass a bare expression
|
|
67
|
+
* such as `document.title`. Wrap anything that is not already a function form.
|
|
68
|
+
*
|
|
69
|
+
* The decision is made from the source form and never from the runtime type of
|
|
70
|
+
* the result: `window.open` is an expression that happens to evaluate to a
|
|
71
|
+
* function, and it must be returned rather than called.
|
|
72
|
+
*/
|
|
73
|
+
export function toFunctionSource(source, onElement) {
|
|
74
|
+
if (isFunctionSource(source))
|
|
75
|
+
return source;
|
|
76
|
+
// A trailing `;` would turn the expression into a statement.
|
|
77
|
+
const expression = source.replace(/[\s;]+$/, '');
|
|
78
|
+
if (!expression.trim())
|
|
79
|
+
throw new Error('The "function" argument is empty. Pass a function such as `() => document.title`, or an expression such as `document.title`.');
|
|
80
|
+
// The parentheses keep an object literal such as `{ a: 1 }` from parsing as a
|
|
81
|
+
// block and a comma expression from splitting into two arguments; the
|
|
82
|
+
// newlines keep a trailing `// comment` from swallowing the closing paren.
|
|
83
|
+
return onElement ? `(element) => (\n${expression}\n)` : `() => (\n${expression}\n)`;
|
|
84
|
+
}
|
|
56
85
|
export default [
|
|
57
86
|
evaluate,
|
|
58
87
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"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"}
|
package/lib/tools/network.js
CHANGED
|
@@ -26,18 +26,146 @@ const requests = defineTabTool({
|
|
|
26
26
|
type: 'readOnly',
|
|
27
27
|
},
|
|
28
28
|
handle: async (tab, params, response) => {
|
|
29
|
-
const
|
|
30
|
-
|
|
29
|
+
const entries = [...tab.requests().entries()];
|
|
30
|
+
entries.forEach(([req, res], index) => response.addResult(renderRequest(index + 1, req, res)));
|
|
31
|
+
if (entries.length)
|
|
32
|
+
response.addResult('\nCall browser_network_request with one of the indexes above to see its headers and body metadata.');
|
|
31
33
|
},
|
|
32
34
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
const requestDetails = defineTabTool({
|
|
36
|
+
capability: 'core',
|
|
37
|
+
schema: {
|
|
38
|
+
name: 'browser_network_request',
|
|
39
|
+
title: 'Get network request details',
|
|
40
|
+
description: 'Returns credential-redacted headers and body metadata for a single network request listed by browser_network_requests',
|
|
41
|
+
inputSchema: z.object({
|
|
42
|
+
index: z.number().int().min(1).describe('Index of the request in the browser_network_requests listing, starting at 1'),
|
|
43
|
+
}),
|
|
44
|
+
type: 'readOnly',
|
|
45
|
+
},
|
|
46
|
+
handle: async (tab, params, response) => {
|
|
47
|
+
const entries = [...tab.requests().entries()];
|
|
48
|
+
const entry = entries[params.index - 1];
|
|
49
|
+
if (!entry) {
|
|
50
|
+
response.addError(entries.length
|
|
51
|
+
? `Error: No network request with index ${params.index}. The current list is numbered 1 to ${entries.length}; run browser_network_requests for the up-to-date list.`
|
|
52
|
+
: 'Error: No network requests have been recorded since the page was loaded.');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Every read that can block lives here, bounded by the tab's page-state
|
|
56
|
+
// timeout; the rendering below is pure so it can be tested with plain data.
|
|
57
|
+
const [request, res] = entry;
|
|
58
|
+
const details = {
|
|
59
|
+
index: params.index,
|
|
60
|
+
request,
|
|
61
|
+
requestHeaders: await read(tab, () => request.allHeaders(), 'reading the request headers'),
|
|
62
|
+
response: res,
|
|
63
|
+
responseHeaders: res ? await read(tab, () => res.allHeaders(), 'reading the response headers') : undefined,
|
|
64
|
+
responseBody: res ? await read(tab, () => res.body(), 'reading the response body') : undefined,
|
|
65
|
+
};
|
|
66
|
+
for (const line of renderRequestDetails(details))
|
|
67
|
+
response.addResult(line);
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
function requestLine(index, request) {
|
|
71
|
+
return `[${index}] [${request.method().toUpperCase()}] ${truncateDataUrls(request.url())}`;
|
|
72
|
+
}
|
|
73
|
+
function renderRequest(index, request, response) {
|
|
74
|
+
const line = requestLine(index, request);
|
|
75
|
+
return response ? `${line} => [${response.status()}] ${response.statusText()}` : line;
|
|
76
|
+
}
|
|
77
|
+
function section(title, lines) {
|
|
78
|
+
return ['', `#### ${title}`, ...lines];
|
|
79
|
+
}
|
|
80
|
+
function renderRequestDetails(details) {
|
|
81
|
+
const { index, request, response } = details;
|
|
82
|
+
const requestHeaders = headersOf(details.requestHeaders);
|
|
83
|
+
const result = [
|
|
84
|
+
`### ${requestLine(index, request)}`,
|
|
85
|
+
...section('Request headers', renderHeaderSection(details.requestHeaders)),
|
|
86
|
+
];
|
|
87
|
+
// Use the buffer so the reported size is accurate for file uploads and other
|
|
88
|
+
// non-UTF-8 payloads.
|
|
89
|
+
const postData = request.postDataBuffer();
|
|
90
|
+
if (postData?.length)
|
|
91
|
+
result.push(...section('Request body', summarizeBody(postData, contentTypeOf(requestHeaders))));
|
|
92
|
+
// Playwright records a failure on the request even when a response already
|
|
93
|
+
// arrived — a connection reset mid-body is a 200 that never completed.
|
|
94
|
+
const failure = request.failure();
|
|
95
|
+
if (!response)
|
|
96
|
+
return [...result, ...section('Response', [failure ? `The request failed: ${failure.errorText}` : 'The request has not completed yet.'])];
|
|
97
|
+
const responseHeaders = headersOf(details.responseHeaders);
|
|
98
|
+
result.push(...section('Response', [
|
|
99
|
+
`[${response.status()}] ${response.statusText()}`,
|
|
100
|
+
...(failure ? [`The transfer then failed: ${failure.errorText}`] : []),
|
|
101
|
+
]), ...section('Response headers', renderHeaderSection(details.responseHeaders)), ...section('Response body', renderResponseBody(details.responseBody, contentTypeOf(responseHeaders))));
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
// A failed read must not discard what the rest of the report already has.
|
|
105
|
+
async function read(tab, fetch, description) {
|
|
106
|
+
try {
|
|
107
|
+
return { value: await tab.withPageStateTimeout(fetch(), description) };
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return { error: error instanceof Error ? error.message : String(error) };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function headersOf(read) {
|
|
114
|
+
return read && 'value' in read ? read.value : {};
|
|
115
|
+
}
|
|
116
|
+
function renderHeaderSection(read) {
|
|
117
|
+
if (!read)
|
|
118
|
+
return ['<none>'];
|
|
119
|
+
return 'error' in read ? [`<headers unavailable: ${read.error}>`] : renderHeaders(read.value);
|
|
120
|
+
}
|
|
121
|
+
// Credentials must never reach the model's context: this tool is the first one
|
|
122
|
+
// here to surface raw headers, and a session cookie copied into a transcript is
|
|
123
|
+
// as good as leaked. The length keeps the header's presence debuggable.
|
|
124
|
+
const newlines = /\r?\n/g;
|
|
125
|
+
const sensitiveHeaderNames = new Set([
|
|
126
|
+
'authorization',
|
|
127
|
+
'cookie',
|
|
128
|
+
'proxy-authorization',
|
|
129
|
+
'set-cookie',
|
|
130
|
+
'x-api-key',
|
|
131
|
+
'x-auth-token',
|
|
132
|
+
]);
|
|
133
|
+
function renderHeaders(headers) {
|
|
134
|
+
const names = Object.keys(headers).sort();
|
|
135
|
+
if (!names.length)
|
|
136
|
+
return ['<none>'];
|
|
137
|
+
return names.map(name => {
|
|
138
|
+
const value = headers[name];
|
|
139
|
+
if (sensitiveHeaderNames.has(name.toLowerCase()))
|
|
140
|
+
return `${name}: <redacted, ${value.length} characters>`;
|
|
141
|
+
// `allHeaders()` joins repeated headers (`set-cookie` especially) with a
|
|
142
|
+
// newline; keep one line per header so `name: value` stays parseable.
|
|
143
|
+
return `${name}: ${truncateDataUrls(value).replace(newlines, '\\n')}`;
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function contentTypeOf(headers) {
|
|
147
|
+
// `allHeaders()` joins a repeated header with a comma, so only the first
|
|
148
|
+
// media type and its parameters describe the payload.
|
|
149
|
+
const first = (headers['content-type'] ?? '').split(',')[0];
|
|
150
|
+
return first.split(';')[0].trim().toLowerCase();
|
|
151
|
+
}
|
|
152
|
+
function renderResponseBody(read, mimeType) {
|
|
153
|
+
if (!read)
|
|
154
|
+
return ['<empty>'];
|
|
155
|
+
// Redirects, responses whose body the browser never retained, and bodies
|
|
156
|
+
// still streaming all fail the read; the rest of the report is worth showing.
|
|
157
|
+
return 'error' in read ? [`<body unavailable: ${read.error}>`] : summarizeBody(read.value, mimeType);
|
|
158
|
+
}
|
|
159
|
+
// Bodies can contain submitted credentials and private API data even when their
|
|
160
|
+
// content type looks harmless. Report useful diagnostics without placing any
|
|
161
|
+
// page-controlled body content in the MCP transcript.
|
|
162
|
+
function summarizeBody(body, mimeType) {
|
|
163
|
+
if (!body.length)
|
|
164
|
+
return ['<empty>'];
|
|
165
|
+
return [`<redacted, ${body.length} bytes${mimeType ? `, ${mimeType}` : ''}>`];
|
|
39
166
|
}
|
|
40
167
|
export default [
|
|
41
168
|
requests,
|
|
169
|
+
requestDetails,
|
|
42
170
|
];
|
|
43
171
|
//# sourceMappingURL=network.js.map
|
package/lib/tools/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"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"}
|
package/lib/tools/pdf.js
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
import { z } from 'zod';
|
|
17
17
|
import { defineTabTool } from './tool.js';
|
|
18
18
|
import * as javascript from '../utils/codegen.js';
|
|
19
|
+
import { safeIsoTimestampForFileName } from '../utils/fileUtils.js';
|
|
19
20
|
const pdfSchema = z.object({
|
|
20
|
-
filename: z.string().optional().describe('File name to save the pdf to. Defaults to `page-{timestamp}.pdf` if not specified.'),
|
|
21
|
+
filename: z.string().optional().describe('File name to save the pdf to. Defaults to `page-{timestamp}-{token}.pdf` if not specified (the random token keeps concurrent sessions from overwriting each other).'),
|
|
21
22
|
});
|
|
22
23
|
const pdf = defineTabTool({
|
|
23
24
|
capability: 'pdf',
|
|
@@ -29,7 +30,9 @@ const pdf = defineTabTool({
|
|
|
29
30
|
type: 'readOnly',
|
|
30
31
|
},
|
|
31
32
|
handle: async (tab, params, response) => {
|
|
32
|
-
|
|
33
|
+
// Random token besides the timestamp: see browser_take_screenshot — two
|
|
34
|
+
// sessions saving a PDF in the same millisecond must not collide.
|
|
35
|
+
const fileName = await tab.context.outputFile(params.filename ?? `page-${safeIsoTimestampForFileName()}.pdf`);
|
|
33
36
|
response.addCode(`await page.pdf(${javascript.formatObject({ path: fileName })});`);
|
|
34
37
|
response.addResult(`Saved page as ${fileName}`);
|
|
35
38
|
await tab.page.pdf({ path: fileName });
|
package/lib/tools/pdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/tools/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/tools/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qKAAqK,CAAC;CAChN,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,aAAa,CAAC;IACxB,UAAU,EAAE,KAAK;IAEjB,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,UAAU;KACjB;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QACtC,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,2BAA2B,EAAE,MAAM,CAAC,CAAC;QAC9G,QAAQ,CAAC,OAAO,CAAC,kBAAkB,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;QACpF,QAAQ,CAAC,SAAS,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;CACF,CAAC,CAAC;AAEH,eAAe;IACb,GAAG;CACJ,CAAC"}
|