@dallask/a11y-mcp-srv 1.0.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/LICENSE +21 -0
- package/NOTICE +9 -0
- package/README.md +1328 -0
- package/bin/server.js +8 -0
- package/dist/core/accessibility-runner.d.ts +123 -0
- package/dist/core/accessibility-runner.d.ts.map +1 -0
- package/dist/core/accessibility-runner.js +465 -0
- package/dist/core/accessibility-runner.js.map +1 -0
- package/dist/core/basic-auth.d.ts +35 -0
- package/dist/core/basic-auth.d.ts.map +1 -0
- package/dist/core/basic-auth.js +52 -0
- package/dist/core/basic-auth.js.map +1 -0
- package/dist/core/config.d.ts +44 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +163 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/error-handler.d.ts +66 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +305 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/normalize-audit-result.d.ts +18 -0
- package/dist/core/normalize-audit-result.d.ts.map +1 -0
- package/dist/core/normalize-audit-result.js +118 -0
- package/dist/core/normalize-audit-result.js.map +1 -0
- package/dist/core/playwright-bootstrap.d.ts +21 -0
- package/dist/core/playwright-bootstrap.d.ts.map +1 -0
- package/dist/core/playwright-bootstrap.js +144 -0
- package/dist/core/playwright-bootstrap.js.map +1 -0
- package/dist/core/progress-streamer.d.ts +44 -0
- package/dist/core/progress-streamer.d.ts.map +1 -0
- package/dist/core/progress-streamer.js +160 -0
- package/dist/core/progress-streamer.js.map +1 -0
- package/dist/core/result-processor.d.ts +86 -0
- package/dist/core/result-processor.d.ts.map +1 -0
- package/dist/core/result-processor.js +475 -0
- package/dist/core/result-processor.js.map +1 -0
- package/dist/core/session-manager.d.ts +73 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +243 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1439 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/aggregate.d.ts +26 -0
- package/dist/tools/aggregate.d.ts.map +1 -0
- package/dist/tools/aggregate.js +340 -0
- package/dist/tools/aggregate.js.map +1 -0
- package/dist/tools/analysis.d.ts +68 -0
- package/dist/tools/analysis.d.ts.map +1 -0
- package/dist/tools/analysis.js +1199 -0
- package/dist/tools/analysis.js.map +1 -0
- package/dist/tools/audit.d.ts +38 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +472 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/comparison.d.ts +27 -0
- package/dist/tools/comparison.d.ts.map +1 -0
- package/dist/tools/comparison.js +499 -0
- package/dist/tools/comparison.js.map +1 -0
- package/dist/tools/export.d.ts +43 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +746 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/filter.d.ts +26 -0
- package/dist/tools/filter.d.ts.map +1 -0
- package/dist/tools/filter.js +244 -0
- package/dist/tools/filter.js.map +1 -0
- package/dist/tools/session.d.ts +26 -0
- package/dist/tools/session.d.ts.map +1 -0
- package/dist/tools/session.js +228 -0
- package/dist/tools/session.js.map +1 -0
- package/dist/tools/visualize.d.ts +26 -0
- package/dist/tools/visualize.d.ts.map +1 -0
- package/dist/tools/visualize.js +942 -0
- package/dist/tools/visualize.js.map +1 -0
- package/dist/types/index.d.ts +792 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize audit result input so tools that accept "result or URL" can safely
|
|
3
|
+
* handle JSON strings, MCP response wrappers, and partial objects.
|
|
4
|
+
*/
|
|
5
|
+
import type { AuditResult } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Normalize audit result input from a client.
|
|
8
|
+
* - URL string: returns null (caller should run audit).
|
|
9
|
+
* - JSON string of single result: parses and normalizes.
|
|
10
|
+
* - MCP wrapper { content: [{ text: "..." }] }: extracts and normalizes.
|
|
11
|
+
* - Batch { results: [...] }: normalizes first element.
|
|
12
|
+
* - Plain object: fills missing fields with defaults.
|
|
13
|
+
*
|
|
14
|
+
* @param value - Raw value (string, or object from previous tool output).
|
|
15
|
+
* @returns Normalized AuditResult, or null when value is a URL (run audit) or parsing fails.
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizeAuditResult(value: unknown): AuditResult | null;
|
|
18
|
+
//# sourceMappingURL=normalize-audit-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-audit-result.d.ts","sourceRoot":"","sources":["../../src/core/normalize-audit-result.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,mBAAmB,CAAA;AA4DlF;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAsDvE"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize audit result input so tools that accept "result or URL" can safely
|
|
3
|
+
* handle JSON strings, MCP response wrappers, and partial objects.
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_SUMMARY = {
|
|
6
|
+
totalIssues: 0,
|
|
7
|
+
score: 0,
|
|
8
|
+
wcagCompliance: { A: 0, AA: 0, AAA: 0 },
|
|
9
|
+
byCategory: {},
|
|
10
|
+
byImpact: {},
|
|
11
|
+
};
|
|
12
|
+
function isUrlString(value) {
|
|
13
|
+
const t = value.trim();
|
|
14
|
+
return t.startsWith('http://') || t.startsWith('https://');
|
|
15
|
+
}
|
|
16
|
+
function isJsonLikeString(value) {
|
|
17
|
+
return value.trim().startsWith('{');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a raw object into a full AuditResult with guaranteed arrays and summary.
|
|
21
|
+
*/
|
|
22
|
+
function normalizeObject(obj) {
|
|
23
|
+
const prioritizedIssues = Array.isArray(obj.prioritizedIssues) ? obj.prioritizedIssues : [];
|
|
24
|
+
const quickWins = Array.isArray(obj.quickWins) ? obj.quickWins : [];
|
|
25
|
+
const criticalBlockers = Array.isArray(obj.criticalBlockers) ? obj.criticalBlockers : [];
|
|
26
|
+
let summary = DEFAULT_SUMMARY;
|
|
27
|
+
if (obj.summary != null && typeof obj.summary === 'object') {
|
|
28
|
+
const s = obj.summary;
|
|
29
|
+
const wcag = s.wcagCompliance != null && typeof s.wcagCompliance === 'object'
|
|
30
|
+
? s.wcagCompliance
|
|
31
|
+
: { A: 0, AA: 0, AAA: 0 };
|
|
32
|
+
summary = {
|
|
33
|
+
totalIssues: typeof s.totalIssues === 'number' ? s.totalIssues : 0,
|
|
34
|
+
score: typeof s.score === 'number' ? s.score : 0,
|
|
35
|
+
wcagCompliance: wcag,
|
|
36
|
+
byCategory: s.byCategory != null && typeof s.byCategory === 'object' && !Array.isArray(s.byCategory)
|
|
37
|
+
? s.byCategory
|
|
38
|
+
: {},
|
|
39
|
+
byImpact: s.byImpact != null && typeof s.byImpact === 'object' && !Array.isArray(s.byImpact)
|
|
40
|
+
? s.byImpact
|
|
41
|
+
: {},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
summary,
|
|
46
|
+
prioritizedIssues,
|
|
47
|
+
quickWins,
|
|
48
|
+
criticalBlockers,
|
|
49
|
+
conversationalSummary: typeof obj.conversationalSummary === 'string' ? obj.conversationalSummary : '',
|
|
50
|
+
issuesTable: typeof obj.issuesTable === 'string' ? obj.issuesTable : '',
|
|
51
|
+
appliedFilters: obj.appliedFilters != null && typeof obj.appliedFilters === 'object' ? obj.appliedFilters : undefined,
|
|
52
|
+
metadata: obj.metadata != null && typeof obj.metadata === 'object' ? obj.metadata : undefined,
|
|
53
|
+
rawResults: obj.rawResults,
|
|
54
|
+
responseStatus: typeof obj.responseStatus === 'number' ? obj.responseStatus : undefined,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Normalize audit result input from a client.
|
|
59
|
+
* - URL string: returns null (caller should run audit).
|
|
60
|
+
* - JSON string of single result: parses and normalizes.
|
|
61
|
+
* - MCP wrapper { content: [{ text: "..." }] }: extracts and normalizes.
|
|
62
|
+
* - Batch { results: [...] }: normalizes first element.
|
|
63
|
+
* - Plain object: fills missing fields with defaults.
|
|
64
|
+
*
|
|
65
|
+
* @param value - Raw value (string, or object from previous tool output).
|
|
66
|
+
* @returns Normalized AuditResult, or null when value is a URL (run audit) or parsing fails.
|
|
67
|
+
*/
|
|
68
|
+
export function normalizeAuditResult(value) {
|
|
69
|
+
if (value == null) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
if (typeof value === 'string') {
|
|
73
|
+
const trimmed = value.trim();
|
|
74
|
+
if (isUrlString(trimmed)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (isJsonLikeString(trimmed)) {
|
|
78
|
+
try {
|
|
79
|
+
const parsed = JSON.parse(trimmed);
|
|
80
|
+
return normalizeAuditResult(parsed);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
if (typeof value !== 'object') {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const obj = value;
|
|
92
|
+
// MCP response wrapper: { content: [ { type, text } ] }
|
|
93
|
+
const content = obj.content;
|
|
94
|
+
if (Array.isArray(content) && content.length > 0) {
|
|
95
|
+
const first = content[0];
|
|
96
|
+
if (first != null && typeof first === 'object' && 'text' in first && typeof first.text === 'string') {
|
|
97
|
+
try {
|
|
98
|
+
const parsed = JSON.parse(first.text);
|
|
99
|
+
return normalizeAuditResult(parsed);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Batch result from audit_multiple_urls: { results: AuditResult[], ... }
|
|
107
|
+
const resultsArray = obj.results;
|
|
108
|
+
if (Array.isArray(resultsArray) && resultsArray.length > 0) {
|
|
109
|
+
return normalizeAuditResult(resultsArray[0]);
|
|
110
|
+
}
|
|
111
|
+
// Plain audit result (single): must look like one (has summary or prioritizedIssues)
|
|
112
|
+
if ('summary' in obj || 'prioritizedIssues' in obj) {
|
|
113
|
+
return normalizeObject(obj);
|
|
114
|
+
}
|
|
115
|
+
// Empty or unrecognized object: return minimal valid result so callers don't throw
|
|
116
|
+
return normalizeObject(obj);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=normalize-audit-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-audit-result.js","sourceRoot":"","sources":["../../src/core/normalize-audit-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensures Playwright browsers are installed when running in environments (e.g. CodeMie, CI)
|
|
3
|
+
* where they may not be pre-installed. On "Executable doesn't exist", runs
|
|
4
|
+
* `playwright install chromium` and retries the launch.
|
|
5
|
+
*/
|
|
6
|
+
import { chromium, type Browser } from 'playwright';
|
|
7
|
+
/** Detect the "Executable doesn't exist" error from Playwright (missing browser install). */
|
|
8
|
+
export declare function isMissingBrowserError(error: unknown): boolean;
|
|
9
|
+
/** Detect "Failed to launch the browser process" (often missing system deps on Linux/Docker). */
|
|
10
|
+
export declare function isLaunchFailureError(error: unknown): boolean;
|
|
11
|
+
/** Run `playwright install chromium` so the current process's cache has the browser. */
|
|
12
|
+
export declare function installPlaywrightChromium(): void;
|
|
13
|
+
export type LaunchOptions = Parameters<typeof chromium.launch>[0];
|
|
14
|
+
/**
|
|
15
|
+
* Launch Chromium, installing the browser if missing (e.g. first run in CodeMie).
|
|
16
|
+
* Retries launch once after install on "Executable doesn't exist".
|
|
17
|
+
* On "Failed to launch the browser process", tries `playwright install chromium --with-deps` and retries once.
|
|
18
|
+
* Uses robust launch args for CI/containers; caller args are merged in.
|
|
19
|
+
*/
|
|
20
|
+
export declare function launchChromium(options: LaunchOptions): Promise<Browser>;
|
|
21
|
+
//# sourceMappingURL=playwright-bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-bootstrap.d.ts","sourceRoot":"","sources":["../../src/core/playwright-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAGnD,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7D;AAED,iGAAiG;AACjG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG5D;AASD,wFAAwF;AACxF,wBAAgB,yBAAyB,IAAI,IAAI,CAgBhD;AA2BD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAiDjE;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB7E"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensures Playwright browsers are installed when running in environments (e.g. CodeMie, CI)
|
|
3
|
+
* where they may not be pre-installed. On "Executable doesn't exist", runs
|
|
4
|
+
* `playwright install chromium` and retries the launch.
|
|
5
|
+
*/
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
import { dirname, join } from 'node:path';
|
|
9
|
+
import { chromium } from 'playwright';
|
|
10
|
+
import { toErrorMessage } from './error-handler.js';
|
|
11
|
+
/** Detect the "Executable doesn't exist" error from Playwright (missing browser install). */
|
|
12
|
+
export function isMissingBrowserError(error) {
|
|
13
|
+
const msg = toErrorMessage(error).toLowerCase();
|
|
14
|
+
return ((msg.includes('executable doesn\'t exist') || msg.includes('executable does not exist')) &&
|
|
15
|
+
(msg.includes('ms-playwright') || msg.includes('chromium_headless_shell') || msg.includes('playwright')));
|
|
16
|
+
}
|
|
17
|
+
/** Detect "Failed to launch the browser process" (often missing system deps on Linux/Docker). */
|
|
18
|
+
export function isLaunchFailureError(error) {
|
|
19
|
+
const msg = toErrorMessage(error).toLowerCase();
|
|
20
|
+
return msg.includes('failed to launch the browser process');
|
|
21
|
+
}
|
|
22
|
+
/** Resolve path to the Playwright CLI (same package as the one we import). */
|
|
23
|
+
function getPlaywrightCliPath() {
|
|
24
|
+
const require = createRequire(import.meta.url);
|
|
25
|
+
const playwrightDir = dirname(require.resolve('playwright/package.json'));
|
|
26
|
+
return join(playwrightDir, 'cli.js');
|
|
27
|
+
}
|
|
28
|
+
/** Run `playwright install chromium` so the current process's cache has the browser. */
|
|
29
|
+
export function installPlaywrightChromium() {
|
|
30
|
+
const cliPath = getPlaywrightCliPath();
|
|
31
|
+
const node = process.execPath;
|
|
32
|
+
console.error('[accessibility-mcp-server] Installing Playwright Chromium (one-time or after update)...');
|
|
33
|
+
try {
|
|
34
|
+
execSync(`"${node}" "${cliPath}" install chromium`, {
|
|
35
|
+
stdio: 'inherit',
|
|
36
|
+
env: process.env,
|
|
37
|
+
cwd: process.cwd(),
|
|
38
|
+
});
|
|
39
|
+
console.error('[accessibility-mcp-server] Playwright Chromium install completed.');
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const msg = toErrorMessage(err);
|
|
43
|
+
console.error(`[accessibility-mcp-server] Playwright install failed: ${msg}`);
|
|
44
|
+
throw new Error(`Playwright Chromium install failed: ${msg}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Run `playwright install chromium --with-deps` to install browser + system dependencies
|
|
49
|
+
* (e.g. libgbm, libnss3 on Linux). Use when the browser binary exists but fails to launch.
|
|
50
|
+
* May require root/sudo in some environments; best-effort only.
|
|
51
|
+
*/
|
|
52
|
+
function installPlaywrightChromiumWithDeps() {
|
|
53
|
+
const cliPath = getPlaywrightCliPath();
|
|
54
|
+
const node = process.execPath;
|
|
55
|
+
console.error('[accessibility-mcp-server] Installing Chromium with system dependencies (--with-deps)...');
|
|
56
|
+
try {
|
|
57
|
+
execSync(`"${node}" "${cliPath}" install chromium --with-deps`, {
|
|
58
|
+
stdio: 'inherit',
|
|
59
|
+
env: process.env,
|
|
60
|
+
cwd: process.cwd(),
|
|
61
|
+
});
|
|
62
|
+
console.error('[accessibility-mcp-server] Chromium + deps install completed.');
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
const msg = toErrorMessage(err);
|
|
66
|
+
console.error(`[accessibility-mcp-server] install --with-deps failed: ${msg}`);
|
|
67
|
+
throw new Error(`Chromium system-deps install failed: ${msg}. You may need to run 'npx playwright install --with-deps' manually with appropriate permissions.`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Chromium args that improve launch success in CI, containers, and restricted environments
|
|
72
|
+
* (e.g. CodeMie, Docker, headless Linux). Reduces GPU/sandbox/display issues.
|
|
73
|
+
*/
|
|
74
|
+
const ROBUST_LAUNCH_ARGS = [
|
|
75
|
+
'--disable-dev-shm-usage',
|
|
76
|
+
'--no-sandbox',
|
|
77
|
+
'--disable-setuid-sandbox',
|
|
78
|
+
'--disable-gpu',
|
|
79
|
+
'--disable-software-rasterizer',
|
|
80
|
+
'--disable-extensions',
|
|
81
|
+
'--disable-background-networking',
|
|
82
|
+
'--disable-default-apps',
|
|
83
|
+
'--disable-sync',
|
|
84
|
+
'--disable-translate',
|
|
85
|
+
'--metrics-recording-only',
|
|
86
|
+
'--mute-audio',
|
|
87
|
+
'--no-first-run',
|
|
88
|
+
'--safebrowsing-disable-auto-update',
|
|
89
|
+
'--disable-features=TranslateUI',
|
|
90
|
+
'--disable-ipc-flooding-protection',
|
|
91
|
+
'--disable-renderer-backgrounding',
|
|
92
|
+
'--disable-backgrounding-occluded-windows',
|
|
93
|
+
'--disable-hang-monitor',
|
|
94
|
+
'--disable-prompt-on-repost',
|
|
95
|
+
'--disable-client-side-phishing-detection',
|
|
96
|
+
'--run-all-compositor-stages-before-draw',
|
|
97
|
+
];
|
|
98
|
+
/**
|
|
99
|
+
* Merge caller args with robust defaults (caller args take precedence; no duplicates).
|
|
100
|
+
*/
|
|
101
|
+
function mergeLaunchArgs(callerArgs) {
|
|
102
|
+
const seen = new Set(ROBUST_LAUNCH_ARGS);
|
|
103
|
+
const out = [...ROBUST_LAUNCH_ARGS];
|
|
104
|
+
if (Array.isArray(callerArgs)) {
|
|
105
|
+
for (const a of callerArgs) {
|
|
106
|
+
const flag = a.split('=')[0];
|
|
107
|
+
if (!seen.has(flag)) {
|
|
108
|
+
seen.add(flag);
|
|
109
|
+
out.push(a);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Launch Chromium, installing the browser if missing (e.g. first run in CodeMie).
|
|
117
|
+
* Retries launch once after install on "Executable doesn't exist".
|
|
118
|
+
* On "Failed to launch the browser process", tries `playwright install chromium --with-deps` and retries once.
|
|
119
|
+
* Uses robust launch args for CI/containers; caller args are merged in.
|
|
120
|
+
*/
|
|
121
|
+
export async function launchChromium(options) {
|
|
122
|
+
const args = mergeLaunchArgs(options?.args);
|
|
123
|
+
const launchOpts = {
|
|
124
|
+
...options,
|
|
125
|
+
headless: options?.headless !== false,
|
|
126
|
+
args,
|
|
127
|
+
};
|
|
128
|
+
const tryLaunch = async () => chromium.launch(launchOpts);
|
|
129
|
+
try {
|
|
130
|
+
return await tryLaunch();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (isMissingBrowserError(error)) {
|
|
134
|
+
installPlaywrightChromium();
|
|
135
|
+
return await tryLaunch();
|
|
136
|
+
}
|
|
137
|
+
if (isLaunchFailureError(error)) {
|
|
138
|
+
installPlaywrightChromiumWithDeps();
|
|
139
|
+
return await tryLaunch();
|
|
140
|
+
}
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=playwright-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-bootstrap.js","sourceRoot":"","sources":["../../src/core/playwright-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Streamer - Handles progress updates for long-running operations
|
|
3
|
+
* Provides utilities for tracking and reporting progress with time estimates
|
|
4
|
+
*/
|
|
5
|
+
import type { ProgressUpdate, BatchAuditProgress } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Progress callback type
|
|
8
|
+
*/
|
|
9
|
+
export type ProgressCallback = (progress: ProgressUpdate | BatchAuditProgress) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Progress tracker for long-running operations
|
|
12
|
+
*/
|
|
13
|
+
export declare class ProgressTracker {
|
|
14
|
+
private total;
|
|
15
|
+
private startTime;
|
|
16
|
+
private progressHistory;
|
|
17
|
+
private readonly historyWindow;
|
|
18
|
+
constructor(total: number);
|
|
19
|
+
/**
|
|
20
|
+
* Update progress and calculate time estimates
|
|
21
|
+
*/
|
|
22
|
+
update(current: number, status: string, currentItem?: string, additionalData?: Partial<ProgressUpdate>): ProgressUpdate;
|
|
23
|
+
/**
|
|
24
|
+
* Get final progress update
|
|
25
|
+
*/
|
|
26
|
+
finalize(status?: string): ProgressUpdate;
|
|
27
|
+
/**
|
|
28
|
+
* Reset the tracker
|
|
29
|
+
*/
|
|
30
|
+
reset(newTotal?: number): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Format time remaining in human-readable format
|
|
34
|
+
*/
|
|
35
|
+
export declare function formatTimeRemaining(seconds: number): string;
|
|
36
|
+
/**
|
|
37
|
+
* Create a progress callback that formats updates for MCP responses
|
|
38
|
+
*/
|
|
39
|
+
export declare function createProgressCallback(onProgress?: ProgressCallback): ProgressCallback;
|
|
40
|
+
/**
|
|
41
|
+
* Create a batch audit progress callback
|
|
42
|
+
*/
|
|
43
|
+
export declare function createBatchProgressCallback(onProgress?: ProgressCallback): (progress: BatchAuditProgress) => void;
|
|
44
|
+
//# sourceMappingURL=progress-streamer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-streamer.d.ts","sourceRoot":"","sources":["../../src/core/progress-streamer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,cAAc,GAAG,kBAAkB,KAAK,IAAI,CAAA;AAEtF;;GAEG;AACH,qBAAa,eAAe;IAKd,OAAO,CAAC,KAAK;IAJzB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAI;gBAEd,KAAK,EAAE,MAAM;IAIjC;;OAEG;IACH,MAAM,CACJ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GACvC,cAAc;IAkEjB;;OAEG;IACH,QAAQ,CAAC,MAAM,GAAE,MAAmB,GAAG,cAAc;IAUrD;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAO/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,CAAC,EAAE,gBAAgB,GAC5B,gBAAgB,CAiBlB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,CAAC,EAAE,gBAAgB,GAC5B,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAsBxC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Streamer - Handles progress updates for long-running operations
|
|
3
|
+
* Provides utilities for tracking and reporting progress with time estimates
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Progress tracker for long-running operations
|
|
7
|
+
*/
|
|
8
|
+
export class ProgressTracker {
|
|
9
|
+
constructor(total) {
|
|
10
|
+
this.total = total;
|
|
11
|
+
this.progressHistory = [];
|
|
12
|
+
this.historyWindow = 5; // Keep last 5 progress points for estimation
|
|
13
|
+
this.startTime = Date.now();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Update progress and calculate time estimates
|
|
17
|
+
*/
|
|
18
|
+
update(current, status, currentItem, additionalData) {
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
const elapsed = (now - this.startTime) / 1000; // seconds
|
|
21
|
+
const percentage = Math.round((current / this.total) * 100);
|
|
22
|
+
// Add to history
|
|
23
|
+
this.progressHistory.push({
|
|
24
|
+
timestamp: now,
|
|
25
|
+
completed: current,
|
|
26
|
+
});
|
|
27
|
+
// Keep only recent history
|
|
28
|
+
if (this.progressHistory.length > this.historyWindow) {
|
|
29
|
+
this.progressHistory.shift();
|
|
30
|
+
}
|
|
31
|
+
// Calculate estimated time remaining
|
|
32
|
+
let estimatedTimeRemaining;
|
|
33
|
+
if (current > 0 && this.progressHistory.length >= 2) {
|
|
34
|
+
// Use recent history to estimate remaining time
|
|
35
|
+
const recentHistory = this.progressHistory.slice(-3); // Use last 3 points
|
|
36
|
+
const timeDeltas = [];
|
|
37
|
+
const progressDeltas = [];
|
|
38
|
+
for (let i = 1; i < recentHistory.length; i++) {
|
|
39
|
+
const timeDelta = (recentHistory[i].timestamp - recentHistory[i - 1].timestamp) /
|
|
40
|
+
1000;
|
|
41
|
+
const progressDelta = recentHistory[i].completed - recentHistory[i - 1].completed;
|
|
42
|
+
if (progressDelta > 0) {
|
|
43
|
+
timeDeltas.push(timeDelta);
|
|
44
|
+
progressDeltas.push(progressDelta);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (timeDeltas.length > 0 && progressDeltas.length > 0) {
|
|
48
|
+
// Calculate average time per item
|
|
49
|
+
const totalTime = timeDeltas.reduce((a, b) => a + b, 0);
|
|
50
|
+
const totalProgress = progressDeltas.reduce((a, b) => a + b, 0);
|
|
51
|
+
const avgTimePerItem = totalTime / totalProgress;
|
|
52
|
+
// Estimate remaining time
|
|
53
|
+
const remaining = this.total - current;
|
|
54
|
+
estimatedTimeRemaining = Math.round(avgTimePerItem * remaining);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (current > 0) {
|
|
58
|
+
// Fallback: use overall average
|
|
59
|
+
const avgTimePerItem = elapsed / current;
|
|
60
|
+
const remaining = this.total - current;
|
|
61
|
+
estimatedTimeRemaining = Math.round(avgTimePerItem * remaining);
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
current,
|
|
65
|
+
total: this.total,
|
|
66
|
+
percentage,
|
|
67
|
+
status,
|
|
68
|
+
estimatedTimeRemaining,
|
|
69
|
+
currentItem,
|
|
70
|
+
...additionalData,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get final progress update
|
|
75
|
+
*/
|
|
76
|
+
finalize(status = 'Complete') {
|
|
77
|
+
return {
|
|
78
|
+
current: this.total,
|
|
79
|
+
total: this.total,
|
|
80
|
+
percentage: 100,
|
|
81
|
+
status,
|
|
82
|
+
estimatedTimeRemaining: 0,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Reset the tracker
|
|
87
|
+
*/
|
|
88
|
+
reset(newTotal) {
|
|
89
|
+
this.startTime = Date.now();
|
|
90
|
+
this.progressHistory = [];
|
|
91
|
+
if (newTotal !== undefined) {
|
|
92
|
+
this.total = newTotal;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Format time remaining in human-readable format
|
|
98
|
+
*/
|
|
99
|
+
export function formatTimeRemaining(seconds) {
|
|
100
|
+
if (seconds < 60) {
|
|
101
|
+
return `${seconds} second${seconds !== 1 ? 's' : ''}`;
|
|
102
|
+
}
|
|
103
|
+
else if (seconds < 3600) {
|
|
104
|
+
const minutes = Math.floor(seconds / 60);
|
|
105
|
+
const remainingSeconds = seconds % 60;
|
|
106
|
+
if (remainingSeconds === 0) {
|
|
107
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''}`;
|
|
108
|
+
}
|
|
109
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''} ${remainingSeconds} second${remainingSeconds !== 1 ? 's' : ''}`;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const hours = Math.floor(seconds / 3600);
|
|
113
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
114
|
+
if (minutes === 0) {
|
|
115
|
+
return `${hours} hour${hours !== 1 ? 's' : ''}`;
|
|
116
|
+
}
|
|
117
|
+
return `${hours} hour${hours !== 1 ? 's' : ''} ${minutes} minute${minutes !== 1 ? 's' : ''}`;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create a progress callback that formats updates for MCP responses
|
|
122
|
+
*/
|
|
123
|
+
export function createProgressCallback(onProgress) {
|
|
124
|
+
return (progress) => {
|
|
125
|
+
// Format progress message
|
|
126
|
+
const timeRemainingText = progress.estimatedTimeRemaining
|
|
127
|
+
? ` (estimated ${formatTimeRemaining(progress.estimatedTimeRemaining)} remaining)`
|
|
128
|
+
: '';
|
|
129
|
+
const progressMessage = `Progress: ${progress.current}/${progress.total} (${progress.percentage}%) - ${progress.status}${timeRemainingText}`;
|
|
130
|
+
// Log to console
|
|
131
|
+
console.log(progressMessage);
|
|
132
|
+
// Call user-provided callback if available
|
|
133
|
+
if (onProgress) {
|
|
134
|
+
onProgress(progress);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Create a batch audit progress callback
|
|
140
|
+
*/
|
|
141
|
+
export function createBatchProgressCallback(onProgress) {
|
|
142
|
+
return (progress) => {
|
|
143
|
+
const timeRemainingText = progress.estimatedTimeRemaining
|
|
144
|
+
? ` (estimated ${formatTimeRemaining(progress.estimatedTimeRemaining)} remaining)`
|
|
145
|
+
: '';
|
|
146
|
+
const completedCount = progress.completedUrls?.length || 0;
|
|
147
|
+
const failedCount = progress.failedUrls?.length || 0;
|
|
148
|
+
const currentUrlText = progress.currentUrl
|
|
149
|
+
? ` - Current: ${progress.currentUrl}`
|
|
150
|
+
: '';
|
|
151
|
+
const progressMessage = `Batch Progress: ${progress.current}/${progress.total} (${progress.percentage}%) - ${progress.status}${timeRemainingText} - Completed: ${completedCount}, Failed: ${failedCount}${currentUrlText}`;
|
|
152
|
+
// Log to console
|
|
153
|
+
console.log(progressMessage);
|
|
154
|
+
// Call user-provided callback if available
|
|
155
|
+
if (onProgress) {
|
|
156
|
+
onProgress(progress);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=progress-streamer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-streamer.js","sourceRoot":"","sources":["../../src/core/progress-streamer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result Processor - Formats accessibility results into conversational, actionable format
|
|
3
|
+
* Converts raw accessibility results into structured, prioritized, and human-readable format
|
|
4
|
+
*/
|
|
5
|
+
import type { AccessibilityResults, AuditResult, AppliedFilters } from '../types/index.js';
|
|
6
|
+
/** Options passed when processing audit results (e.g. WCAG label used for the audit) */
|
|
7
|
+
export interface ProcessOptions {
|
|
8
|
+
/** WCAG version and level used for the audit (e.g. "WCAG 2.2 AA"). Used when rule tags are empty. */
|
|
9
|
+
auditWcagLabel?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Derive full WCAG label from engine tags (e.g. wcag22aa -> "WCAG 2.2 AA").
|
|
13
|
+
* Used for display and for audit fallback.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getWcagLabelFromTags(tags: string[]): string;
|
|
16
|
+
/** True if wcagLevel string matches the given level (A, AA, AAA); supports full label e.g. "WCAG 2.2 AA". */
|
|
17
|
+
export declare function wcagLevelMatches(level: string, target: 'A' | 'AA' | 'AAA'): boolean;
|
|
18
|
+
/** Numeric order for sorting by WCAG level (A=3, AA=2, AAA=1). Supports full label e.g. "WCAG 2.2 AA". */
|
|
19
|
+
export declare function wcagLevelOrder(level: string): number;
|
|
20
|
+
/**
|
|
21
|
+
* ResultProcessor class - Formats and processes accessibility results
|
|
22
|
+
*/
|
|
23
|
+
export declare class ResultProcessor {
|
|
24
|
+
/**
|
|
25
|
+
* Get WCAG level for display (full label e.g. "WCAG 2.2 AA"). Uses tags when present, else audit fallback.
|
|
26
|
+
*/
|
|
27
|
+
private getWCAGLevel;
|
|
28
|
+
/**
|
|
29
|
+
* Determine impact level from engine-reported impact (axe or ACE native levels).
|
|
30
|
+
*/
|
|
31
|
+
private getImpactLevel;
|
|
32
|
+
/**
|
|
33
|
+
* Get impact rank for ordering (higher = worse). Uses IMPACT_ORDER.
|
|
34
|
+
*/
|
|
35
|
+
private impactRank;
|
|
36
|
+
/**
|
|
37
|
+
* Calculate priority score for an issue (higher = more important)
|
|
38
|
+
*/
|
|
39
|
+
private calculatePriority;
|
|
40
|
+
/**
|
|
41
|
+
* Generate fix suggestion for an issue
|
|
42
|
+
*/
|
|
43
|
+
private generateFixSuggestion;
|
|
44
|
+
/**
|
|
45
|
+
* Generate user impact description from engine-native impact level.
|
|
46
|
+
*/
|
|
47
|
+
private generateUserImpact;
|
|
48
|
+
/**
|
|
49
|
+
* Process accessibility violations into prioritized issues
|
|
50
|
+
*/
|
|
51
|
+
private processViolations;
|
|
52
|
+
/**
|
|
53
|
+
* Calculate accessibility score (0-100)
|
|
54
|
+
*/
|
|
55
|
+
private calculateScore;
|
|
56
|
+
/**
|
|
57
|
+
* Calculate WCAG compliance percentages
|
|
58
|
+
*/
|
|
59
|
+
private calculateWCAGCompliance;
|
|
60
|
+
/**
|
|
61
|
+
* Generate summary statistics
|
|
62
|
+
*/
|
|
63
|
+
private generateSummary;
|
|
64
|
+
/**
|
|
65
|
+
* Identify quick wins (easy fixes with high impact)
|
|
66
|
+
*/
|
|
67
|
+
private identifyQuickWins;
|
|
68
|
+
/**
|
|
69
|
+
* Identify critical blockers (must fix before launch)
|
|
70
|
+
*/
|
|
71
|
+
private identifyCriticalBlockers;
|
|
72
|
+
/**
|
|
73
|
+
* Generate conversational summary
|
|
74
|
+
*/
|
|
75
|
+
private generateConversationalSummary;
|
|
76
|
+
/**
|
|
77
|
+
* Generate a markdown table summarising all prioritised issues.
|
|
78
|
+
* Columns: Severity | Rule ID | Description | WCAG | Element / XPath | Fix hint
|
|
79
|
+
*/
|
|
80
|
+
private generateIssuesTable;
|
|
81
|
+
/**
|
|
82
|
+
* Process accessibility results into structured audit result
|
|
83
|
+
*/
|
|
84
|
+
process(accessibilityResults: AccessibilityResults, appliedFilters?: AppliedFilters, options?: ProcessOptions): AuditResult;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=result-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-processor.d.ts","sourceRoot":"","sources":["../../src/core/result-processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,oBAAoB,EAEpB,WAAW,EAOX,cAAc,EAEf,MAAM,mBAAmB,CAAA;AAG1B,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,qGAAqG;IACrG,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAW3D;AAED,6GAA6G;AAC7G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAInF;AAED,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiFzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwChC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAsErC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CACL,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,CAAC,EAAE,cAAc,EAC/B,OAAO,CAAC,EAAE,cAAc,GACvB,WAAW;CAiDf"}
|