mcp-accessibility-scanner 3.3.2 → 3.5.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 +146 -11
- package/config.d.ts +48 -3
- package/lib/browserContextFactory.js +15 -313
- package/lib/browserContextFactory.js.map +1 -1
- package/lib/browserServerBackend.js +11 -0
- package/lib/browserServerBackend.js.map +1 -1
- package/lib/browserSessions.js +3 -0
- package/lib/browserSessions.js.map +1 -1
- package/lib/config.js +70 -12
- package/lib/config.js.map +1 -1
- package/lib/context.js +463 -57
- package/lib/context.js.map +1 -1
- package/lib/extension/cdpRelay.js +82 -14
- package/lib/extension/cdpRelay.js.map +1 -1
- package/lib/extension/extensionContextFactory.js +15 -8
- package/lib/extension/extensionContextFactory.js.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/mcp/http.js +115 -41
- package/lib/mcp/http.js.map +1 -1
- package/lib/mcp/server.js +16 -8
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tool.js +11 -9
- package/lib/mcp/tool.js.map +1 -1
- package/lib/program.js +28 -8
- package/lib/program.js.map +1 -1
- package/lib/response.js +22 -5
- package/lib/response.js.map +1 -1
- package/lib/sessionLog.js +66 -20
- package/lib/sessionLog.js.map +1 -1
- package/lib/tab.js +13 -7
- package/lib/tab.js.map +1 -1
- package/lib/tools/auditKeyboard.js +27 -25
- package/lib/tools/auditKeyboard.js.map +1 -1
- package/lib/tools/auditScreenReader.js +27 -18
- package/lib/tools/auditScreenReader.js.map +1 -1
- package/lib/tools/auditSite.js +88 -56
- package/lib/tools/auditSite.js.map +1 -1
- package/lib/tools/axe.js +32 -7
- package/lib/tools/axe.js.map +1 -1
- package/lib/tools/common.js +39 -1
- package/lib/tools/common.js.map +1 -1
- package/lib/tools/files.js +60 -3
- package/lib/tools/files.js.map +1 -1
- package/lib/tools/install.js +1 -1
- package/lib/tools/install.js.map +1 -1
- package/lib/tools/pdf.js +4 -2
- package/lib/tools/pdf.js.map +1 -1
- package/lib/tools/recorder.js +52 -0
- package/lib/tools/recorder.js.map +1 -0
- package/lib/tools/report.js +13 -0
- package/lib/tools/report.js.map +1 -0
- package/lib/tools/scanPageMatrix.js +20 -33
- package/lib/tools/scanPageMatrix.js.map +1 -1
- package/lib/tools/screenshot.js +7 -3
- package/lib/tools/screenshot.js.map +1 -1
- package/lib/tools/snapshot.js +10 -3
- package/lib/tools/snapshot.js.map +1 -1
- package/lib/tools.js +5 -1
- package/lib/tools.js.map +1 -1
- package/lib/vscode/browserContextFactory.js +16 -12
- package/lib/vscode/browserContextFactory.js.map +1 -1
- package/lib/vscode/host.js +25 -2
- package/lib/vscode/host.js.map +1 -1
- package/lib/vscode/main.js +15 -0
- package/lib/vscode/main.js.map +1 -1
- package/lib/vscode/validation.js +78 -0
- package/lib/vscode/validation.js.map +1 -0
- package/package.json +9 -8
package/lib/response.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import fs from 'node:fs';
|
|
16
17
|
import { basename } from 'node:path';
|
|
17
18
|
import { pathToFileURL } from 'node:url';
|
|
18
19
|
import debug from 'debug';
|
|
@@ -22,16 +23,19 @@ import { truncateDataUrls } from './utils/dataUrl.js';
|
|
|
22
23
|
const errorsDebug = debug('pw:mcp:errors');
|
|
23
24
|
export class Response {
|
|
24
25
|
_result = [];
|
|
26
|
+
_notices = [];
|
|
25
27
|
_code = [];
|
|
26
28
|
_images = [];
|
|
27
29
|
_resourceLinks = [];
|
|
28
30
|
_context;
|
|
29
31
|
_includeSnapshot = false;
|
|
30
32
|
_includeSnapshotCompress;
|
|
33
|
+
_includeSnapshotBoxes;
|
|
31
34
|
_includeTabs = false;
|
|
32
35
|
_tabSnapshot;
|
|
33
36
|
_requestContext;
|
|
34
37
|
_structuredContent;
|
|
38
|
+
_filesToDeleteOnError = new Set();
|
|
35
39
|
toolName;
|
|
36
40
|
toolArgs;
|
|
37
41
|
_isError;
|
|
@@ -52,6 +56,10 @@ export class Response {
|
|
|
52
56
|
addResult(result) {
|
|
53
57
|
this._result.push(result);
|
|
54
58
|
}
|
|
59
|
+
addNotice(notice) {
|
|
60
|
+
this._notices.push(notice);
|
|
61
|
+
this._result.push(notice);
|
|
62
|
+
}
|
|
55
63
|
addError(error) {
|
|
56
64
|
this._result.push(error);
|
|
57
65
|
this._isError = true;
|
|
@@ -88,6 +96,14 @@ export class Response {
|
|
|
88
96
|
mimeType: options?.mimeType,
|
|
89
97
|
});
|
|
90
98
|
}
|
|
99
|
+
deleteFileOnError(filePath) {
|
|
100
|
+
this._filesToDeleteOnError.add(filePath);
|
|
101
|
+
}
|
|
102
|
+
async cleanupFilesOnError() {
|
|
103
|
+
const files = [...this._filesToDeleteOnError];
|
|
104
|
+
this._filesToDeleteOnError.clear();
|
|
105
|
+
await Promise.all(files.map(file => fs.promises.rm(file, { force: true })));
|
|
106
|
+
}
|
|
91
107
|
resourceLinks() {
|
|
92
108
|
return this._resourceLinks;
|
|
93
109
|
}
|
|
@@ -97,9 +113,10 @@ export class Response {
|
|
|
97
113
|
structuredContent() {
|
|
98
114
|
return this._structuredContent;
|
|
99
115
|
}
|
|
100
|
-
setIncludeSnapshot(compress) {
|
|
116
|
+
setIncludeSnapshot(compress, boxes) {
|
|
101
117
|
this._includeSnapshot = true;
|
|
102
118
|
this._includeSnapshotCompress = compress;
|
|
119
|
+
this._includeSnapshotBoxes = boxes ?? this._context.config.snapshot?.boxes;
|
|
103
120
|
}
|
|
104
121
|
setIncludeTabs() {
|
|
105
122
|
this._includeTabs = true;
|
|
@@ -134,7 +151,7 @@ export class Response {
|
|
|
134
151
|
? this._context.tabs().filter(tab => !this._includeSnapshot || tab !== currentTab)
|
|
135
152
|
: currentTab && !this._includeSnapshot ? [currentTab] : [];
|
|
136
153
|
const [snapshot] = await Promise.all([
|
|
137
|
-
this._includeSnapshot && currentTab ? currentTab.captureSnapshot() : undefined,
|
|
154
|
+
this._includeSnapshot && currentTab ? currentTab.captureSnapshot(this._includeSnapshotBoxes) : undefined,
|
|
138
155
|
Promise.allSettled(tabsToUpdate.map(tab => tab.updateTitle())),
|
|
139
156
|
]);
|
|
140
157
|
this._tabSnapshot = snapshot;
|
|
@@ -171,9 +188,9 @@ ${this._code.join('\n')}
|
|
|
171
188
|
response.push('');
|
|
172
189
|
}
|
|
173
190
|
// Main response part
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
];
|
|
191
|
+
const imagesOnly = this._context.config.imageResponses === 'only' && this._images.length > 0 && !this._isError;
|
|
192
|
+
const text = imagesOnly ? this._notices.join('\n') : response.join('\n');
|
|
193
|
+
const content = !imagesOnly || text ? [{ type: 'text', text }] : [];
|
|
177
194
|
for (const link of this._resourceLinks)
|
|
178
195
|
content.push(link);
|
|
179
196
|
// Image attachments.
|
package/lib/response.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAatD,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAE3C,MAAM,OAAO,QAAQ;IACX,OAAO,GAAa,EAAE,CAAC;IACvB,KAAK,GAAa,EAAE,CAAC;IACrB,OAAO,GAA4C,EAAE,CAAC;IACtD,cAAc,GAAmB,EAAE,CAAC;IACpC,QAAQ,CAAU;IAClB,gBAAgB,GAAG,KAAK,CAAC;IACzB,wBAAwB,CAAsB;IAC9C,YAAY,GAAG,KAAK,CAAC;IACrB,YAAY,CAA0B;IACtC,eAAe,CAAqC;IACpD,kBAAkB,CAAsC;
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"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"}
|
package/lib/sessionLog.js
CHANGED
|
@@ -20,6 +20,9 @@ import { createShortGuid } from './utils/guid.js';
|
|
|
20
20
|
import { logUnhandledError } from './utils/log.js';
|
|
21
21
|
import { outputFile } from './config.js';
|
|
22
22
|
class NodeFileStorage {
|
|
23
|
+
async readFile(filePath) {
|
|
24
|
+
return await fs.promises.readFile(filePath, 'utf-8');
|
|
25
|
+
}
|
|
23
26
|
async writeFile(filePath, content) {
|
|
24
27
|
await fs.promises.writeFile(filePath, content);
|
|
25
28
|
}
|
|
@@ -27,6 +30,25 @@ class NodeFileStorage {
|
|
|
27
30
|
await fs.promises.appendFile(filePath, content);
|
|
28
31
|
}
|
|
29
32
|
}
|
|
33
|
+
function renderUserAction(action, browserSessionId, code) {
|
|
34
|
+
const actionData = { ...action };
|
|
35
|
+
delete actionData.ariaSnapshot;
|
|
36
|
+
delete actionData.selector;
|
|
37
|
+
delete actionData.signals;
|
|
38
|
+
const loggedAction = browserSessionId !== undefined
|
|
39
|
+
? { browserSessionId, ...actionData }
|
|
40
|
+
: actionData;
|
|
41
|
+
const lines = [
|
|
42
|
+
`### User action: ${action.name}`,
|
|
43
|
+
`- Args`,
|
|
44
|
+
'```json',
|
|
45
|
+
JSON.stringify(loggedAction, null, 2),
|
|
46
|
+
'```',
|
|
47
|
+
];
|
|
48
|
+
if (code)
|
|
49
|
+
lines.push(`- Code`, '```js', code, '```');
|
|
50
|
+
return lines;
|
|
51
|
+
}
|
|
30
52
|
export class SessionLog {
|
|
31
53
|
_folder;
|
|
32
54
|
_file;
|
|
@@ -35,6 +57,7 @@ export class SessionLog {
|
|
|
35
57
|
_sessionFileQueue = Promise.resolve();
|
|
36
58
|
_flushEntriesTimeout;
|
|
37
59
|
_storage;
|
|
60
|
+
_lastFlushedAction = new WeakMap();
|
|
38
61
|
constructor(sessionFolder, storage = new NodeFileStorage()) {
|
|
39
62
|
this._folder = sessionFolder;
|
|
40
63
|
this._file = path.join(this._folder, 'session.md');
|
|
@@ -68,29 +91,53 @@ export class SessionLog {
|
|
|
68
91
|
}
|
|
69
92
|
logUserAction(action, tab, code, isUpdate) {
|
|
70
93
|
code = code.trim();
|
|
71
|
-
// All bookkeeping is scoped to the context the recorder event came from:
|
|
94
|
+
// All bookkeeping is scoped to the context and tab the recorder event came from:
|
|
72
95
|
// with the log shared across a backend's contexts, an update matched
|
|
73
96
|
// against the globally-last entry could merge into ANOTHER session's
|
|
74
97
|
// same-named pending action, and a navigate could be deduplicated
|
|
75
98
|
// against another session's location.
|
|
76
99
|
const source = tab.context;
|
|
77
|
-
const lastEntry = this._lastPendingEntryFor(source);
|
|
100
|
+
const lastEntry = this._lastPendingEntryFor(source, tab);
|
|
78
101
|
if (isUpdate) {
|
|
79
102
|
if (lastEntry?.userAction?.name === action.name) {
|
|
80
103
|
lastEntry.userAction = action;
|
|
81
104
|
lastEntry.code = code;
|
|
82
105
|
return;
|
|
83
106
|
}
|
|
107
|
+
const flushed = this._lastFlushedAction.get(tab);
|
|
108
|
+
if (flushed?.action.name !== action.name)
|
|
109
|
+
return;
|
|
110
|
+
const previousAction = flushed.action;
|
|
111
|
+
const previousCode = flushed.code;
|
|
112
|
+
flushed.action = action;
|
|
113
|
+
flushed.code = code;
|
|
114
|
+
this._sessionFileQueue = this._sessionFileQueue
|
|
115
|
+
.catch(logUnhandledError)
|
|
116
|
+
.then(async () => {
|
|
117
|
+
const content = await this._storage.readFile(this._file);
|
|
118
|
+
const oldBlock = renderUserAction(previousAction, flushed.browserSessionId, previousCode).join('\n');
|
|
119
|
+
const newBlock = renderUserAction(flushed.action, flushed.browserSessionId, flushed.code).join('\n');
|
|
120
|
+
const markerIndex = content.indexOf(flushed.marker);
|
|
121
|
+
if (markerIndex === -1)
|
|
122
|
+
return;
|
|
123
|
+
const blockIndex = content.lastIndexOf(oldBlock, markerIndex);
|
|
124
|
+
if (blockIndex !== -1)
|
|
125
|
+
await this._storage.writeFile(this._file, content.slice(0, blockIndex) + newBlock + content.slice(blockIndex + oldBlock.length));
|
|
126
|
+
})
|
|
127
|
+
.catch(logUnhandledError);
|
|
128
|
+
return;
|
|
84
129
|
}
|
|
85
130
|
if (action.name === 'navigate') {
|
|
86
131
|
// Already logged at this location.
|
|
87
|
-
|
|
132
|
+
const lastContextEntry = this._lastPendingEntryFor(source);
|
|
133
|
+
if (lastContextEntry?.userAction?.name === 'navigate' && lastContextEntry.tab === tab && lastContextEntry.tabSnapshot?.url === action.url)
|
|
88
134
|
return;
|
|
89
135
|
}
|
|
90
136
|
const entry = {
|
|
91
137
|
timestamp: performance.now(),
|
|
92
138
|
userAction: action,
|
|
93
139
|
source,
|
|
140
|
+
tab,
|
|
94
141
|
// Session contexts' recorded actions carry the handle in session.md,
|
|
95
142
|
// mirroring how routed tool calls log a browserSessionId in their
|
|
96
143
|
// args — otherwise concurrent sessions' user actions would be
|
|
@@ -109,10 +156,10 @@ export class SessionLog {
|
|
|
109
156
|
};
|
|
110
157
|
this._appendEntry(entry);
|
|
111
158
|
}
|
|
112
|
-
/** The last not-yet-flushed entry this
|
|
113
|
-
_lastPendingEntryFor(source) {
|
|
159
|
+
/** The last not-yet-flushed entry this tab wrote. */
|
|
160
|
+
_lastPendingEntryFor(source, tab) {
|
|
114
161
|
for (let i = this._pendingEntries.length - 1; i >= 0; i--) {
|
|
115
|
-
if (this._pendingEntries[i].source === source)
|
|
162
|
+
if (this._pendingEntries[i].source === source && (!tab || this._pendingEntries[i].tab === tab))
|
|
116
163
|
return this._pendingEntries[i];
|
|
117
164
|
}
|
|
118
165
|
return undefined;
|
|
@@ -136,24 +183,23 @@ export class SessionLog {
|
|
|
136
183
|
lines.push(entry.toolCall.isError ? `- Error` : `- Result`, '```', entry.toolCall.result, '```');
|
|
137
184
|
}
|
|
138
185
|
}
|
|
139
|
-
if (entry.userAction)
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
delete actionData.selector;
|
|
143
|
-
delete actionData.signals;
|
|
144
|
-
// Leads the args like a routed tool call's browserSessionId does.
|
|
145
|
-
const loggedAction = entry.browserSessionId !== undefined
|
|
146
|
-
? { browserSessionId: entry.browserSessionId, ...actionData }
|
|
147
|
-
: actionData;
|
|
148
|
-
lines.push(`### User action: ${entry.userAction.name}`, `- Args`, '```json', JSON.stringify(loggedAction, null, 2), '```');
|
|
149
|
-
}
|
|
150
|
-
if (entry.code) {
|
|
186
|
+
if (entry.userAction)
|
|
187
|
+
lines.push(...renderUserAction(entry.userAction, entry.browserSessionId, entry.code));
|
|
188
|
+
else if (entry.code)
|
|
151
189
|
lines.push(`- Code`, '```js', entry.code, '```');
|
|
152
|
-
}
|
|
153
190
|
if (entry.tabSnapshot) {
|
|
154
191
|
const fileName = `${ordinal}.snapshot.yml`;
|
|
155
192
|
this._storage.writeFile(path.join(this._folder, fileName), entry.tabSnapshot.ariaSnapshot).catch(logUnhandledError);
|
|
156
|
-
|
|
193
|
+
const marker = `- Snapshot: ${fileName}`;
|
|
194
|
+
lines.push(marker);
|
|
195
|
+
if (entry.userAction && entry.tab) {
|
|
196
|
+
this._lastFlushedAction.set(entry.tab, {
|
|
197
|
+
action: entry.userAction,
|
|
198
|
+
browserSessionId: entry.browserSessionId,
|
|
199
|
+
code: entry.code,
|
|
200
|
+
marker,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
157
203
|
}
|
|
158
204
|
lines.push('', '');
|
|
159
205
|
}
|
package/lib/sessionLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionLog.js","sourceRoot":"","sources":["../src/sessionLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sessionLog.js","sourceRoot":"","sources":["../src/sessionLog.ts"],"names":[],"mappings":"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"}
|
package/lib/tab.js
CHANGED
|
@@ -134,7 +134,7 @@ export class Tab extends EventEmitter {
|
|
|
134
134
|
// default artifact names carry goes in before the extension, keeping the
|
|
135
135
|
// suggested name as the recognizable part; responses print the suggested
|
|
136
136
|
// name next to the saved path, so the file stays attributable.
|
|
137
|
-
const suggested = download.suggestedFilename() || 'download';
|
|
137
|
+
const suggested = download.suggestedFilename().replace(/[. ]+$/, '') || 'download';
|
|
138
138
|
const separator = suggested.lastIndexOf('.');
|
|
139
139
|
let base = separator > 0 ? suggested.slice(0, separator) : suggested;
|
|
140
140
|
let extension = separator > 0 ? suggested.slice(separator) : '';
|
|
@@ -205,6 +205,9 @@ export class Tab extends EventEmitter {
|
|
|
205
205
|
this._defaultTimeout = timeout;
|
|
206
206
|
this.page.setDefaultTimeout(timeout);
|
|
207
207
|
}
|
|
208
|
+
operationTimeout() {
|
|
209
|
+
return this._defaultTimeout > 0 ? this._defaultTimeout : 5000;
|
|
210
|
+
}
|
|
208
211
|
isCurrentTab() {
|
|
209
212
|
return this === this.context.currentTab();
|
|
210
213
|
}
|
|
@@ -255,13 +258,13 @@ export class Tab extends EventEmitter {
|
|
|
255
258
|
async withPageStateTimeout(promise, description) {
|
|
256
259
|
return this._withPageStateTimeout(promise, description);
|
|
257
260
|
}
|
|
258
|
-
async captureSnapshot() {
|
|
261
|
+
async captureSnapshot(boxes) {
|
|
259
262
|
let tabSnapshot;
|
|
260
263
|
const capture = { valid: true };
|
|
261
264
|
const snapshotGeneration = this._ariaSnapshotGeneration;
|
|
262
265
|
const modalStates = await this._raceAgainstModalStates(async () => {
|
|
263
266
|
const [snapshot, title] = await Promise.all([
|
|
264
|
-
this._withPageStateTimeout(this._captureAriaSnapshot(capture), 'capturing page accessibility snapshot').catch(error => {
|
|
267
|
+
this._withPageStateTimeout(this._captureAriaSnapshot(capture, boxes), 'capturing page accessibility snapshot').catch(error => {
|
|
265
268
|
// Nothing describes the page any more, and the refs of an older
|
|
266
269
|
// snapshot must not be trusted against it.
|
|
267
270
|
if (!(error instanceof StaleAriaSnapshotError)) {
|
|
@@ -311,7 +314,7 @@ export class Tab extends EventEmitter {
|
|
|
311
314
|
return this._modalStates.some(state => state.type === 'dialog');
|
|
312
315
|
}
|
|
313
316
|
_pageStateTimeoutMs() {
|
|
314
|
-
return this.
|
|
317
|
+
return this.operationTimeout();
|
|
315
318
|
}
|
|
316
319
|
async _withPageStateTimeout(promise, description, timeoutMs = this._pageStateTimeoutMs()) {
|
|
317
320
|
let timeoutId;
|
|
@@ -380,13 +383,13 @@ export class Tab extends EventEmitter {
|
|
|
380
383
|
.catch(() => '');
|
|
381
384
|
// Refs are assigned from the full role and name before long names are
|
|
382
385
|
// omitted from rendering, so a semantic change still changes this line.
|
|
383
|
-
return current.split('\n', 1)[0]?.trim() === cached.trim();
|
|
386
|
+
return withoutSnapshotBox(current.split('\n', 1)[0]?.trim() ?? '') === withoutSnapshotBox(cached.trim());
|
|
384
387
|
}));
|
|
385
388
|
return pageGeneration === this._pageGeneration && matches.every(Boolean);
|
|
386
389
|
}
|
|
387
|
-
async _captureAriaSnapshot(capture = { valid: true }) {
|
|
390
|
+
async _captureAriaSnapshot(capture = { valid: true }, boxes) {
|
|
388
391
|
const pageGeneration = this._pageGeneration;
|
|
389
|
-
const snapshot = await this.page.ariaSnapshot({ mode: 'ai' });
|
|
392
|
+
const snapshot = await this.page.ariaSnapshot({ mode: 'ai', boxes });
|
|
390
393
|
if (!capture.valid || pageGeneration !== this._pageGeneration)
|
|
391
394
|
throw new StaleAriaSnapshotError('Page changed while capturing accessibility snapshot.');
|
|
392
395
|
++this._ariaSnapshotGeneration;
|
|
@@ -401,6 +404,9 @@ export class Tab extends EventEmitter {
|
|
|
401
404
|
await callOnPageNoTrace(this.page, page => page.waitForTimeout(time));
|
|
402
405
|
}
|
|
403
406
|
}
|
|
407
|
+
function withoutSnapshotBox(line) {
|
|
408
|
+
return line.replace(/ \[box=[^\]]+\](?='?(?::|$))/, '');
|
|
409
|
+
}
|
|
404
410
|
function messageToConsoleMessage(message) {
|
|
405
411
|
return {
|
|
406
412
|
type: message.type(),
|
package/lib/tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab.js","sourceRoot":"","sources":["../src/tab.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tab.js","sourceRoot":"","sources":["../src/tab.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
import { defineTabTool } from './tool.js';
|
|
3
|
+
import { writeJsonReport } from './report.js';
|
|
4
4
|
import { safeIsoTimestampForFileName, sanitizeForFilePath } from '../utils/fileUtils.js';
|
|
5
5
|
function buildFingerprint(point) {
|
|
6
6
|
return [
|
|
@@ -31,6 +31,10 @@ function isLikelySkipLink(point) {
|
|
|
31
31
|
}
|
|
32
32
|
// WCAG 2.2 SC 2.5.8 Target Size (Minimum), in CSS pixels.
|
|
33
33
|
const MIN_TARGET_SIZE_PX = 24;
|
|
34
|
+
// Payload caps for the in-page focus probe; passed as evaluate args because
|
|
35
|
+
// the serialized function cannot close over module scope.
|
|
36
|
+
const maxNeighborTargets = 32;
|
|
37
|
+
const maxFocusTextLength = 200;
|
|
34
38
|
function rectCenter(rect) {
|
|
35
39
|
return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };
|
|
36
40
|
}
|
|
@@ -166,7 +170,7 @@ export async function runKeyboardFocusAudit(options, callbacks) {
|
|
|
166
170
|
skipLinkActivation = {
|
|
167
171
|
attempted: true,
|
|
168
172
|
hashChanged,
|
|
169
|
-
focusChanged:
|
|
173
|
+
focusChanged: beforeActivation.fingerprint !== buildFingerprint(afterActivation),
|
|
170
174
|
scrollChanged: beforeActivation.scrollY !== afterActivation.scrollY || beforeActivation.scrollX !== afterActivation.scrollX,
|
|
171
175
|
navigationOccurred,
|
|
172
176
|
urlBefore,
|
|
@@ -250,8 +254,13 @@ const auditKeyboard = defineTabTool({
|
|
|
250
254
|
type: 'destructive',
|
|
251
255
|
},
|
|
252
256
|
handle: async (tab, params, response) => {
|
|
257
|
+
const { reportFile, ...auditOptions } = params;
|
|
258
|
+
const reportFileName = reportFile ?? `audit-keyboard-${safeIsoTimestampForFileName()}.json`;
|
|
259
|
+
const reportPath = await tab.context.outputFile(reportFileName, reportFile !== undefined);
|
|
260
|
+
if (reportFile !== undefined)
|
|
261
|
+
response.deleteFileOnError(reportPath);
|
|
253
262
|
const getActiveElementInfo = async () => {
|
|
254
|
-
return await tab.page.evaluate(() => {
|
|
263
|
+
return await tab.page.evaluate(({ checkTargetSize, checkFocusObscured, minTargetSize, maxNeighborTargets, maxTextLength }) => {
|
|
255
264
|
const current = document.activeElement;
|
|
256
265
|
const scrollX = window.scrollX;
|
|
257
266
|
const scrollY = window.scrollY;
|
|
@@ -276,7 +285,7 @@ const auditKeyboard = defineTabTool({
|
|
|
276
285
|
}
|
|
277
286
|
const role = current.getAttribute('role') || current.tagName.toLowerCase();
|
|
278
287
|
const labelledBy = current.getAttribute('aria-labelledby');
|
|
279
|
-
const text = current.textContent?.trim().slice(0,
|
|
288
|
+
const text = current.textContent?.trim().slice(0, maxTextLength) || null;
|
|
280
289
|
const name = current.getAttribute('aria-label')
|
|
281
290
|
|| labelledBy && document.getElementById(labelledBy)?.textContent?.trim()
|
|
282
291
|
|| current.getAttribute('title')
|
|
@@ -293,8 +302,6 @@ const auditKeyboard = defineTabTool({
|
|
|
293
302
|
&& rect.right >= 0
|
|
294
303
|
&& rect.top <= window.innerHeight
|
|
295
304
|
&& rect.left <= window.innerWidth;
|
|
296
|
-
// Kept in sync with MIN_TARGET_SIZE_PX; page.evaluate cannot close over it.
|
|
297
|
-
const minTargetSize = 24;
|
|
298
305
|
// ponytail: target size comes from the layout box, so a target whose visible
|
|
299
306
|
// area is cut down by an overflow or clip-path ancestor is under-reported.
|
|
300
307
|
// Intersecting with clipping ancestors was measured against ordinary markup and
|
|
@@ -328,7 +335,7 @@ const auditKeyboard = defineTabTool({
|
|
|
328
335
|
// sentence; SC 2.5.8's exception is about the sentence, not the display keyword.
|
|
329
336
|
const inlineTarget = isPointerTarget && style.display.startsWith('inline') && hasSentenceText;
|
|
330
337
|
const neighborTargets = [];
|
|
331
|
-
if (isPointerTarget && (rect.width < minTargetSize || rect.height < minTargetSize)) {
|
|
338
|
+
if (checkTargetSize && isPointerTarget && (rect.width < minTargetSize || rect.height < minTargetSize)) {
|
|
332
339
|
for (const candidate of document.querySelectorAll(targetSelector)) {
|
|
333
340
|
if (candidate === current)
|
|
334
341
|
continue;
|
|
@@ -346,7 +353,7 @@ const auditKeyboard = defineTabTool({
|
|
|
346
353
|
neighborTargets.push({ x: other.x, y: other.y, width: other.width, height: other.height });
|
|
347
354
|
// ponytail: payload cap. A cluster denser than 32 neighbors within 48px
|
|
348
355
|
// would under-report rather than over-report; raise the cap if that appears.
|
|
349
|
-
if (neighborTargets.length >=
|
|
356
|
+
if (neighborTargets.length >= maxNeighborTargets)
|
|
350
357
|
break;
|
|
351
358
|
}
|
|
352
359
|
}
|
|
@@ -358,7 +365,7 @@ const auditKeyboard = defineTabTool({
|
|
|
358
365
|
// SC 2.4.11 applies to anything that receives focus, so this is deliberately not
|
|
359
366
|
// gated on isPointerTarget: contenteditable, iframes and tabindex-only widgets
|
|
360
367
|
// are sampled too.
|
|
361
|
-
if (rect.width > 0 && rect.height > 0 && clipRight >= clipLeft && clipBottom >= clipTop) {
|
|
368
|
+
if (checkFocusObscured && rect.width > 0 && rect.height > 0 && clipRight >= clipLeft && clipBottom >= clipTop) {
|
|
362
369
|
const inset = (low, high, value) => Math.min(Math.max(value, low), high);
|
|
363
370
|
const samples = [
|
|
364
371
|
[inset(clipLeft, clipRight, clipLeft + 1), inset(clipTop, clipBottom, clipTop + 1)],
|
|
@@ -414,7 +421,7 @@ const auditKeyboard = defineTabTool({
|
|
|
414
421
|
}
|
|
415
422
|
return {
|
|
416
423
|
role,
|
|
417
|
-
name: name ? name.slice(0,
|
|
424
|
+
name: name ? name.slice(0, maxTextLength) : null,
|
|
418
425
|
tagName: current.tagName,
|
|
419
426
|
id: current.id || null,
|
|
420
427
|
href: current instanceof HTMLAnchorElement ? current.href : null,
|
|
@@ -434,6 +441,12 @@ const auditKeyboard = defineTabTool({
|
|
|
434
441
|
scrollX,
|
|
435
442
|
scrollY,
|
|
436
443
|
};
|
|
444
|
+
}, {
|
|
445
|
+
checkTargetSize: auditOptions.checkTargetSize,
|
|
446
|
+
checkFocusObscured: auditOptions.checkFocusObscured,
|
|
447
|
+
minTargetSize: MIN_TARGET_SIZE_PX,
|
|
448
|
+
maxNeighborTargets,
|
|
449
|
+
maxTextLength: maxFocusTextLength,
|
|
437
450
|
});
|
|
438
451
|
};
|
|
439
452
|
const captureScreenshot = async (label) => {
|
|
@@ -441,7 +454,6 @@ const auditKeyboard = defineTabTool({
|
|
|
441
454
|
await tab.page.screenshot({ path: fileName, fullPage: true });
|
|
442
455
|
return fileName;
|
|
443
456
|
};
|
|
444
|
-
const { reportFile, ...auditOptions } = params;
|
|
445
457
|
const result = await runKeyboardFocusAudit(auditOptions, {
|
|
446
458
|
pressKey: async (key) => {
|
|
447
459
|
await tab.waitForCompletion(async () => {
|
|
@@ -471,14 +483,10 @@ const auditKeyboard = defineTabTool({
|
|
|
471
483
|
},
|
|
472
484
|
...result,
|
|
473
485
|
};
|
|
474
|
-
const
|
|
475
|
-
const reportPath = await tab.context.outputFile(reportFileName);
|
|
476
|
-
await fs.promises.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
477
|
-
const reportResourceLink = response.addFileResourceLink(reportPath, {
|
|
486
|
+
const reportResource = await writeJsonReport(response, reportPath, report, {
|
|
478
487
|
name: 'audit-keyboard-report',
|
|
479
488
|
title: 'Audit keyboard JSON report',
|
|
480
489
|
description: 'JSON report for keyboard navigation, focus, and skip-link findings.',
|
|
481
|
-
mimeType: 'application/json',
|
|
482
490
|
});
|
|
483
491
|
const screenshotResources = result.screenshots.map((screenshotPath, index) => {
|
|
484
492
|
const link = response.addFileResourceLink(screenshotPath, {
|
|
@@ -497,13 +505,7 @@ const auditKeyboard = defineTabTool({
|
|
|
497
505
|
});
|
|
498
506
|
response.setStructuredContent({
|
|
499
507
|
kind: 'audit_keyboard',
|
|
500
|
-
report:
|
|
501
|
-
path: reportPath,
|
|
502
|
-
uri: reportResourceLink.uri,
|
|
503
|
-
name: reportResourceLink.name,
|
|
504
|
-
title: reportResourceLink.title ?? null,
|
|
505
|
-
mimeType: reportResourceLink.mimeType ?? null,
|
|
506
|
-
},
|
|
508
|
+
report: reportResource,
|
|
507
509
|
page: {
|
|
508
510
|
url: tab.page.url(),
|
|
509
511
|
},
|
|
@@ -521,7 +523,7 @@ const auditKeyboard = defineTabTool({
|
|
|
521
523
|
screenshotCount: result.screenshots.length,
|
|
522
524
|
},
|
|
523
525
|
screenshots: screenshotResources,
|
|
524
|
-
reportUri:
|
|
526
|
+
reportUri: reportResource.uri,
|
|
525
527
|
});
|
|
526
528
|
const focusVisibilityPreview = result.focusVisibilityIssues.slice(0, 10).map(stop => (`- Step ${stop.step} (${stop.key}): ${stop.role ?? 'unknown-role'} ${stop.name ?? ''}`.trim()));
|
|
527
529
|
const focusJumpPreview = result.focusJumpIssues.slice(0, 10).map(stop => (`- Step ${stop.step}: deltaY=${stop.scrollDeltaY}, inViewport=${stop.inViewport}`));
|
|
@@ -548,7 +550,7 @@ const auditKeyboard = defineTabTool({
|
|
|
548
550
|
...(focusObscuredPreview.length ? focusObscuredPreview : ['- None']),
|
|
549
551
|
...(result.screenshots.length ? ['', 'Issue screenshots:', ...result.screenshots.map(path => `- ${path}`)] : []),
|
|
550
552
|
'',
|
|
551
|
-
`JSON report: ${
|
|
553
|
+
`JSON report: ${reportResource.path}`,
|
|
552
554
|
].join('\n'));
|
|
553
555
|
},
|
|
554
556
|
});
|