@dallask/a11y-mcp-srv 1.1.13 → 2.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 +17 -0
- package/dist/core/accessibility-runner.d.ts +22 -14
- package/dist/core/accessibility-runner.d.ts.map +1 -1
- package/dist/core/accessibility-runner.js +110 -64
- package/dist/core/accessibility-runner.js.map +1 -1
- 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 +2 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +4 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/normalize-audit-result.d.ts +19 -0
- package/dist/core/normalize-audit-result.d.ts.map +1 -0
- package/dist/core/normalize-audit-result.js +173 -0
- package/dist/core/normalize-audit-result.js.map +1 -0
- package/dist/core/result-processor.d.ts +22 -5
- package/dist/core/result-processor.d.ts.map +1 -1
- package/dist/core/result-processor.js +115 -101
- package/dist/core/result-processor.js.map +1 -1
- package/dist/server.d.ts +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +133 -6
- package/dist/server.js.map +1 -1
- package/dist/tools/aggregate.d.ts.map +1 -1
- package/dist/tools/aggregate.js +23 -22
- package/dist/tools/aggregate.js.map +1 -1
- package/dist/tools/analysis.d.ts.map +1 -1
- package/dist/tools/analysis.js +87 -134
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/audit.d.ts.map +1 -1
- package/dist/tools/audit.js +73 -23
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/comparison.d.ts.map +1 -1
- package/dist/tools/comparison.js +28 -17
- package/dist/tools/comparison.js.map +1 -1
- package/dist/tools/export.d.ts.map +1 -1
- package/dist/tools/export.js +55 -38
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/filter.d.ts.map +1 -1
- package/dist/tools/filter.js +16 -9
- package/dist/tools/filter.js.map +1 -1
- package/dist/tools/session.d.ts.map +1 -1
- package/dist/tools/session.js +3 -2
- package/dist/tools/session.js.map +1 -1
- package/dist/tools/visualize.d.ts.map +1 -1
- package/dist/tools/visualize.js +47 -51
- package/dist/tools/visualize.js.map +1 -1
- package/dist/types/index.d.ts +53 -13
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +19 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +14 -2
package/dist/tools/aggregate.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
* Aggregation & statistics tools
|
|
3
3
|
* Implements: aggregate_audit_results, get_statistics
|
|
4
4
|
*/
|
|
5
|
+
import { normalizeAuditResult } from '../core/normalize-audit-result.js';
|
|
6
|
+
import { IMPACT_ORDER } from '../types/index.js';
|
|
7
|
+
import { wcagLevelMatches } from '../core/result-processor.js';
|
|
5
8
|
/** Safely get prioritizedIssues from a result (handles missing or non-array from external tools). */
|
|
6
9
|
function getPrioritizedIssues(result) {
|
|
7
10
|
if (result == null || typeof result !== 'object')
|
|
@@ -25,9 +28,9 @@ function calculateWCAGCompliance(issues) {
|
|
|
25
28
|
if (issues.length === 0) {
|
|
26
29
|
return { A: 100, AA: 100, AAA: 100 };
|
|
27
30
|
}
|
|
28
|
-
const levelA = issues.filter((i) => i.wcagLevel
|
|
29
|
-
const levelAA = issues.filter((i) => i.wcagLevel
|
|
30
|
-
const levelAAA = issues.filter((i) => i.wcagLevel
|
|
31
|
+
const levelA = issues.filter((i) => wcagLevelMatches(i.wcagLevel, 'A'));
|
|
32
|
+
const levelAA = issues.filter((i) => wcagLevelMatches(i.wcagLevel, 'AA'));
|
|
33
|
+
const levelAAA = issues.filter((i) => wcagLevelMatches(i.wcagLevel, 'AAA'));
|
|
31
34
|
const totalIssues = issues.length;
|
|
32
35
|
const complianceA = totalIssues > 0
|
|
33
36
|
? Math.max(0, Math.round(100 - (levelA.length / totalIssues) * 100))
|
|
@@ -53,20 +56,15 @@ function calculateScore(issues) {
|
|
|
53
56
|
}
|
|
54
57
|
let score = 100;
|
|
55
58
|
issues.forEach((issue) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
break;
|
|
66
|
-
case 'minor':
|
|
67
|
-
score -= 0.5;
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
59
|
+
const rank = IMPACT_ORDER[issue.impact?.toLowerCase() ?? ''] ?? 2;
|
|
60
|
+
if (rank >= 5)
|
|
61
|
+
score -= 5;
|
|
62
|
+
else if (rank >= 4)
|
|
63
|
+
score -= 3;
|
|
64
|
+
else if (rank >= 3)
|
|
65
|
+
score -= 1;
|
|
66
|
+
else
|
|
67
|
+
score -= 0.5;
|
|
70
68
|
});
|
|
71
69
|
return Math.max(0, Math.round(score));
|
|
72
70
|
}
|
|
@@ -146,10 +144,12 @@ function groupIssuesByRule(issues) {
|
|
|
146
144
|
*/
|
|
147
145
|
export function aggregateAuditResults(input) {
|
|
148
146
|
const { results, groupBy = 'url', includeSummary = true, } = input;
|
|
149
|
-
const
|
|
150
|
-
if (
|
|
147
|
+
const rawArray = Array.isArray(results) ? results : results != null ? [results] : [];
|
|
148
|
+
if (rawArray.length === 0) {
|
|
151
149
|
throw new Error('At least one audit result is required');
|
|
152
150
|
}
|
|
151
|
+
// Normalize each result (handles JSON string, MCP wrapper, partial object)
|
|
152
|
+
const resultsArray = rawArray.map((r) => normalizeAuditResult(r) ?? r);
|
|
153
153
|
// Combine all issues from all results (safe when prioritizedIssues is missing or not an array)
|
|
154
154
|
const allIssues = [];
|
|
155
155
|
resultsArray.forEach((result) => {
|
|
@@ -289,11 +289,12 @@ function calculateAverageWCAGCompliance(results) {
|
|
|
289
289
|
*/
|
|
290
290
|
export function getStatistics(input) {
|
|
291
291
|
const { results, breakdown = ['category', 'impact', 'wcag', 'rule'], } = input;
|
|
292
|
-
// Normalize input to array
|
|
293
|
-
const
|
|
294
|
-
if (
|
|
292
|
+
// Normalize input to array and normalize each element
|
|
293
|
+
const rawArray = Array.isArray(results) ? results : [results];
|
|
294
|
+
if (rawArray.length === 0) {
|
|
295
295
|
throw new Error('At least one audit result is required');
|
|
296
296
|
}
|
|
297
|
+
const resultsArray = rawArray.map((r) => normalizeAuditResult(r) ?? r);
|
|
297
298
|
// Combine all issues (safe when prioritizedIssues is missing or not an array)
|
|
298
299
|
const allIssues = [];
|
|
299
300
|
resultsArray.forEach((result) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/tools/aggregate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/tools/aggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/tools/analysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/tools/analysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAEV,UAAU,EACV,WAAW,EAEX,qBAAqB,EACrB,sBAAsB,EAItB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAEhB,6BAA6B,EAC7B,gBAAgB,EAIhB,mBAAmB,EACnB,oBAAoB,EAErB,MAAM,mBAAmB,CAAA;AA+H1B;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,WAAW,CAAC,CA+CtB;AA0ND;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CA2CxB;AAsQD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,GACvB,gBAAgB,CAalB;AAsHD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAwD3B;AAwUD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,6BAA6B,GACnC,gBAAgB,CAuGlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA+G/B"}
|
package/dist/tools/analysis.js
CHANGED
|
@@ -2,15 +2,29 @@
|
|
|
2
2
|
* Analysis & reporting tools
|
|
3
3
|
* Implements: get_accessibility_score, prioritize_issues, explain_issue, get_quick_fixes
|
|
4
4
|
*/
|
|
5
|
+
import { resolveBasicAuth } from '../core/basic-auth.js';
|
|
6
|
+
import { normalizeAuditResult } from '../core/normalize-audit-result.js';
|
|
5
7
|
import { auditUrl } from './audit.js';
|
|
8
|
+
import { IMPACT_ORDER } from '../types/index.js';
|
|
9
|
+
import { wcagLevelMatches, wcagLevelOrder } from '../core/result-processor.js';
|
|
10
|
+
function impactRank(impact) {
|
|
11
|
+
return IMPACT_ORDER[impact.toLowerCase()] ?? 2;
|
|
12
|
+
}
|
|
6
13
|
/**
|
|
7
|
-
* Default weights for different issue types when calculating scores
|
|
14
|
+
* Default weights for different issue types when calculating scores (axe + ACE native levels)
|
|
8
15
|
*/
|
|
9
16
|
const DEFAULT_WEIGHTS = {
|
|
10
17
|
critical: 5.0,
|
|
11
18
|
serious: 3.0,
|
|
12
19
|
moderate: 1.0,
|
|
13
20
|
minor: 0.5,
|
|
21
|
+
violation: 5.0,
|
|
22
|
+
potentialviolation: 4.0,
|
|
23
|
+
potentialrecommendation: 3.0,
|
|
24
|
+
recommendation: 2.0,
|
|
25
|
+
manual: 3.0,
|
|
26
|
+
pass: 0.5,
|
|
27
|
+
ignored: 0,
|
|
14
28
|
// Category-based weights
|
|
15
29
|
error: 5.0,
|
|
16
30
|
contrast: 3.0,
|
|
@@ -51,9 +65,9 @@ function calculateWCAGCompliance(issues) {
|
|
|
51
65
|
return { A: 100, AA: 100, AAA: 100 };
|
|
52
66
|
}
|
|
53
67
|
// Count issues by WCAG level
|
|
54
|
-
const levelA = issues.filter((i) => i.wcagLevel
|
|
55
|
-
const levelAA = issues.filter((i) => i.wcagLevel
|
|
56
|
-
const levelAAA = issues.filter((i) => i.wcagLevel
|
|
68
|
+
const levelA = issues.filter((i) => wcagLevelMatches(i.wcagLevel, 'A'));
|
|
69
|
+
const levelAA = issues.filter((i) => wcagLevelMatches(i.wcagLevel, 'AA'));
|
|
70
|
+
const levelAAA = issues.filter((i) => wcagLevelMatches(i.wcagLevel, 'AAA'));
|
|
57
71
|
// Calculate compliance as percentage
|
|
58
72
|
// This is a simplified calculation - assumes each issue represents a criterion violation
|
|
59
73
|
const totalIssues = issues.length;
|
|
@@ -105,26 +119,27 @@ function calculateOverallScore(issues, weights) {
|
|
|
105
119
|
*/
|
|
106
120
|
export async function getAccessibilityScore(input) {
|
|
107
121
|
let auditResult;
|
|
108
|
-
// If input is a URL string, run an audit first
|
|
122
|
+
// If input is a URL string, run an audit first (with optional Basic Auth, same as audit_url)
|
|
109
123
|
if (typeof input.results === 'string') {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
});
|
|
124
|
+
const { urlWithoutAuth, basicAuthUsername: u, basicAuthPassword: p } = resolveBasicAuth(input.results, input.basicAuthUsername, input.basicAuthPassword);
|
|
125
|
+
auditResult = await auditUrl({ url: urlWithoutAuth, basicAuthUsername: u, basicAuthPassword: p });
|
|
113
126
|
}
|
|
114
127
|
else {
|
|
115
|
-
|
|
128
|
+
const normalized = normalizeAuditResult(input.results);
|
|
129
|
+
auditResult = normalized ?? input.results;
|
|
116
130
|
}
|
|
131
|
+
const issues = Array.isArray(auditResult?.prioritizedIssues) ? auditResult.prioritizedIssues : [];
|
|
117
132
|
// Merge custom weights with defaults
|
|
118
133
|
const weights = {
|
|
119
134
|
...DEFAULT_WEIGHTS,
|
|
120
135
|
...(input.weights || {}),
|
|
121
136
|
};
|
|
122
137
|
// Calculate overall score
|
|
123
|
-
const overallScore = calculateOverallScore(
|
|
138
|
+
const overallScore = calculateOverallScore(issues, weights);
|
|
124
139
|
// Calculate breakdown by category
|
|
125
|
-
const breakdown = calculateCategoryBreakdown(
|
|
140
|
+
const breakdown = calculateCategoryBreakdown(issues, weights);
|
|
126
141
|
// Calculate WCAG compliance
|
|
127
|
-
const wcagCompliance = calculateWCAGCompliance(
|
|
142
|
+
const wcagCompliance = calculateWCAGCompliance(issues);
|
|
128
143
|
// Note: Trend data would require historical tracking, which is not implemented yet
|
|
129
144
|
// This is a placeholder for future enhancement
|
|
130
145
|
return {
|
|
@@ -140,15 +155,9 @@ function prioritizeByCriteria(issues, criteria) {
|
|
|
140
155
|
const sorted = [...issues];
|
|
141
156
|
switch (criteria) {
|
|
142
157
|
case 'impact': {
|
|
143
|
-
// Sort by impact level (critical
|
|
144
|
-
const impactOrder = {
|
|
145
|
-
violation: 4,
|
|
146
|
-
'needs-review': 3,
|
|
147
|
-
recommendation: 2,
|
|
148
|
-
minor: 1,
|
|
149
|
-
};
|
|
158
|
+
// Sort by impact level (axe: critical/serious/moderate/minor; ACE: violation/...)
|
|
150
159
|
sorted.sort((a, b) => {
|
|
151
|
-
const impactDiff =
|
|
160
|
+
const impactDiff = impactRank(b.impact) - impactRank(a.impact);
|
|
152
161
|
if (impactDiff !== 0)
|
|
153
162
|
return impactDiff;
|
|
154
163
|
return b.priority - a.priority;
|
|
@@ -157,23 +166,11 @@ function prioritizeByCriteria(issues, criteria) {
|
|
|
157
166
|
}
|
|
158
167
|
case 'wcag': {
|
|
159
168
|
// Sort by WCAG level (A > AA > AAA) - Level A violations are legal requirements
|
|
160
|
-
const levelOrder = {
|
|
161
|
-
A: 3,
|
|
162
|
-
AA: 2,
|
|
163
|
-
AAA: 1,
|
|
164
|
-
'N/A': 0,
|
|
165
|
-
};
|
|
166
169
|
sorted.sort((a, b) => {
|
|
167
|
-
const levelDiff =
|
|
170
|
+
const levelDiff = wcagLevelOrder(b.wcagLevel) - wcagLevelOrder(a.wcagLevel);
|
|
168
171
|
if (levelDiff !== 0)
|
|
169
172
|
return levelDiff;
|
|
170
|
-
|
|
171
|
-
violation: 4,
|
|
172
|
-
'needs-review': 3,
|
|
173
|
-
recommendation: 2,
|
|
174
|
-
minor: 1,
|
|
175
|
-
};
|
|
176
|
-
return impactOrder[b.impact] - impactOrder[a.impact];
|
|
173
|
+
return impactRank(b.impact) - impactRank(a.impact);
|
|
177
174
|
});
|
|
178
175
|
break;
|
|
179
176
|
}
|
|
@@ -193,26 +190,12 @@ function prioritizeByCriteria(issues, criteria) {
|
|
|
193
190
|
break;
|
|
194
191
|
}
|
|
195
192
|
case 'user-impact': {
|
|
196
|
-
// Sort by user impact (
|
|
197
|
-
// This is similar to impact but emphasizes user experience
|
|
198
|
-
const impactOrder = {
|
|
199
|
-
violation: 4,
|
|
200
|
-
'needs-review': 3,
|
|
201
|
-
recommendation: 2,
|
|
202
|
-
minor: 1,
|
|
203
|
-
};
|
|
193
|
+
// Sort by user impact (axe/ACE native levels)
|
|
204
194
|
sorted.sort((a, b) => {
|
|
205
|
-
const impactDiff =
|
|
195
|
+
const impactDiff = impactRank(b.impact) - impactRank(a.impact);
|
|
206
196
|
if (impactDiff !== 0)
|
|
207
197
|
return impactDiff;
|
|
208
|
-
|
|
209
|
-
const levelOrder = {
|
|
210
|
-
A: 3,
|
|
211
|
-
AA: 2,
|
|
212
|
-
AAA: 1,
|
|
213
|
-
'N/A': 0,
|
|
214
|
-
};
|
|
215
|
-
return levelOrder[b.wcagLevel] - levelOrder[a.wcagLevel];
|
|
198
|
+
return wcagLevelOrder(b.wcagLevel) - wcagLevelOrder(a.wcagLevel);
|
|
216
199
|
});
|
|
217
200
|
break;
|
|
218
201
|
}
|
|
@@ -237,7 +220,7 @@ function identifyQuickWins(issues) {
|
|
|
237
220
|
// 1. Have high impact (critical or serious)
|
|
238
221
|
// 2. Have clear fix suggestions (suggested code differs from current)
|
|
239
222
|
// 3. Affect multiple elements (batch fix opportunity)
|
|
240
|
-
const highImpactIssues = groupIssues.filter((i) => i.impact
|
|
223
|
+
const highImpactIssues = groupIssues.filter((i) => impactRank(i.impact) >= 5);
|
|
241
224
|
if (highImpactIssues.length > 0) {
|
|
242
225
|
const firstIssue = groupIssues[0];
|
|
243
226
|
const hasClearFix = firstIssue.fix.suggested !== firstIssue.fix.current &&
|
|
@@ -259,13 +242,7 @@ function identifyQuickWins(issues) {
|
|
|
259
242
|
});
|
|
260
243
|
// Sort by impact and number of affected elements
|
|
261
244
|
quickWins.sort((a, b) => {
|
|
262
|
-
const
|
|
263
|
-
violation: 4,
|
|
264
|
-
'needs-review': 3,
|
|
265
|
-
recommendation: 2,
|
|
266
|
-
minor: 1,
|
|
267
|
-
};
|
|
268
|
-
const impactDiff = impactOrder[b.impact] - impactOrder[a.impact];
|
|
245
|
+
const impactDiff = impactRank(b.impact) - impactRank(a.impact);
|
|
269
246
|
if (impactDiff !== 0)
|
|
270
247
|
return impactDiff;
|
|
271
248
|
return b.affectedElements - a.affectedElements;
|
|
@@ -287,10 +264,10 @@ function identifyCriticalBlockers(issues) {
|
|
|
287
264
|
});
|
|
288
265
|
ruleGroups.forEach((groupIssues, ruleId) => {
|
|
289
266
|
// Critical blockers are:
|
|
290
|
-
// 1.
|
|
267
|
+
// 1. High impact (axe: critical/serious; ACE: violation/potentialviolation)
|
|
291
268
|
// 2. WCAG Level A violations (legal requirement)
|
|
292
|
-
const criticalIssues = groupIssues.filter((i) => i.impact
|
|
293
|
-
const levelAIssues = groupIssues.filter((i) => i.wcagLevel
|
|
269
|
+
const criticalIssues = groupIssues.filter((i) => impactRank(i.impact) >= 5);
|
|
270
|
+
const levelAIssues = groupIssues.filter((i) => wcagLevelMatches(i.wcagLevel, 'A'));
|
|
294
271
|
if (criticalIssues.length > 0 || levelAIssues.length > 0) {
|
|
295
272
|
const firstIssue = groupIssues[0];
|
|
296
273
|
blockers.push({
|
|
@@ -299,29 +276,18 @@ function identifyCriticalBlockers(issues) {
|
|
|
299
276
|
impact: firstIssue.impact,
|
|
300
277
|
userImpact: firstIssue.userImpact,
|
|
301
278
|
affectedElements: groupIssues.length,
|
|
302
|
-
wcagLevel: (firstIssue.wcagLevel
|
|
279
|
+
wcagLevel: (wcagLevelMatches(firstIssue.wcagLevel, 'A') || wcagLevelMatches(firstIssue.wcagLevel, 'AA') || wcagLevelMatches(firstIssue.wcagLevel, 'AAA'))
|
|
303
280
|
? firstIssue.wcagLevel
|
|
304
|
-
: 'A',
|
|
281
|
+
: 'N/A',
|
|
305
282
|
});
|
|
306
283
|
}
|
|
307
284
|
});
|
|
308
285
|
// Sort by WCAG level (A first) and impact
|
|
309
286
|
blockers.sort((a, b) => {
|
|
310
|
-
const
|
|
311
|
-
A: 3,
|
|
312
|
-
AA: 2,
|
|
313
|
-
AAA: 1,
|
|
314
|
-
};
|
|
315
|
-
const levelDiff = levelOrder[b.wcagLevel] - levelOrder[a.wcagLevel];
|
|
287
|
+
const levelDiff = wcagLevelOrder(b.wcagLevel) - wcagLevelOrder(a.wcagLevel);
|
|
316
288
|
if (levelDiff !== 0)
|
|
317
289
|
return levelDiff;
|
|
318
|
-
|
|
319
|
-
violation: 4,
|
|
320
|
-
'needs-review': 3,
|
|
321
|
-
recommendation: 2,
|
|
322
|
-
minor: 1,
|
|
323
|
-
};
|
|
324
|
-
return impactOrder[b.impact] - impactOrder[a.impact];
|
|
290
|
+
return impactRank(b.impact) - impactRank(a.impact);
|
|
325
291
|
});
|
|
326
292
|
return blockers;
|
|
327
293
|
}
|
|
@@ -333,38 +299,26 @@ function generatePrioritizationReasoning(criteria, prioritized, quickWins, block
|
|
|
333
299
|
parts.push(`Prioritized ${prioritized.length} issues using "${criteria}" criteria.`);
|
|
334
300
|
if (blockers.length > 0) {
|
|
335
301
|
parts.push(`\n🚨 Found ${blockers.length} critical blocker(s) that must be fixed before launch.`);
|
|
336
|
-
parts.push(`These are WCAG Level A violations or
|
|
302
|
+
parts.push(`These are WCAG Level A violations or high-impact issues (e.g. axe critical/serious, ACE violation) that prevent users with disabilities from accessing content.`);
|
|
337
303
|
}
|
|
338
304
|
if (quickWins.length > 0) {
|
|
339
305
|
parts.push(`\n✨ Identified ${quickWins.length} quick win(s) - easy fixes with high impact.`);
|
|
340
306
|
parts.push(`These issues can be fixed quickly and will significantly improve accessibility.`);
|
|
341
307
|
}
|
|
342
|
-
// Breakdown by impact
|
|
343
|
-
const impactCounts = {
|
|
344
|
-
violation: 0,
|
|
345
|
-
'needs-review': 0,
|
|
346
|
-
recommendation: 0,
|
|
347
|
-
minor: 0,
|
|
348
|
-
};
|
|
308
|
+
// Breakdown by impact (axe/ACE native levels)
|
|
309
|
+
const impactCounts = {};
|
|
349
310
|
prioritized.forEach((issue) => {
|
|
350
|
-
impactCounts[issue.impact]
|
|
311
|
+
impactCounts[issue.impact] = (impactCounts[issue.impact] || 0) + 1;
|
|
312
|
+
});
|
|
313
|
+
const impactEntries = Object.entries(impactCounts).sort((a, b) => impactRank(b[0]) - impactRank(a[0]));
|
|
314
|
+
impactEntries.forEach(([level, count]) => {
|
|
315
|
+
const icon = impactRank(level) >= 5 ? '🚫' : impactRank(level) >= 4 ? '⚠️' : 'ℹ️';
|
|
316
|
+
parts.push(`\n${icon} ${level}: ${count}`);
|
|
351
317
|
});
|
|
352
|
-
if (impactCounts['violation'] > 0) {
|
|
353
|
-
parts.push(`\n🚫 Violations: ${impactCounts['violation']}`);
|
|
354
|
-
}
|
|
355
|
-
if (impactCounts['needs-review'] > 0) {
|
|
356
|
-
parts.push(`⚠️ Needs review: ${impactCounts['needs-review']}`);
|
|
357
|
-
}
|
|
358
|
-
if (impactCounts['recommendation'] > 0) {
|
|
359
|
-
parts.push(`ℹ️ Recommendations: ${impactCounts['recommendation']}`);
|
|
360
|
-
}
|
|
361
|
-
if (impactCounts['minor'] > 0) {
|
|
362
|
-
parts.push(`Minor issues: ${impactCounts['minor']}`);
|
|
363
|
-
}
|
|
364
318
|
// Explain the criteria used
|
|
365
319
|
switch (criteria) {
|
|
366
320
|
case 'impact':
|
|
367
|
-
parts.push(`\nIssues are sorted by impact level (critical
|
|
321
|
+
parts.push(`\nIssues are sorted by impact level (axe: critical/serious/moderate/minor; ACE: violation/potentialviolation/...).`);
|
|
368
322
|
break;
|
|
369
323
|
case 'wcag':
|
|
370
324
|
parts.push(`\nIssues are sorted by WCAG compliance level (Level A violations first, as they are legal requirements).`);
|
|
@@ -390,8 +344,10 @@ function generatePrioritizationReasoning(criteria, prioritized, quickWins, block
|
|
|
390
344
|
*/
|
|
391
345
|
export function prioritizeIssues(input) {
|
|
392
346
|
const { results, criteria = 'impact', limit, } = input;
|
|
393
|
-
// Normalize: accept single result
|
|
394
|
-
const
|
|
347
|
+
// Normalize: accept single result, array, JSON string, or MCP wrapper
|
|
348
|
+
const raw = Array.isArray(results) ? results[0] : results;
|
|
349
|
+
const normalized = normalizeAuditResult(raw);
|
|
350
|
+
const auditResult = normalized ?? raw;
|
|
395
351
|
const prioritizedIssues = Array.isArray(auditResult?.prioritizedIssues)
|
|
396
352
|
? auditResult.prioritizedIssues
|
|
397
353
|
: [];
|
|
@@ -722,11 +678,12 @@ function issuesToQuickFixes(issues, includeCode) {
|
|
|
722
678
|
const quickFixes = [];
|
|
723
679
|
ruleGroups.forEach((groupIssues, ruleId) => {
|
|
724
680
|
const firstIssue = groupIssues[0];
|
|
725
|
-
const
|
|
681
|
+
const r = impactRank(firstIssue.impact);
|
|
682
|
+
const impactEstimate = r >= 5
|
|
726
683
|
? 'Critical - Must fix immediately'
|
|
727
|
-
:
|
|
684
|
+
: r >= 4
|
|
728
685
|
? 'Serious - High priority'
|
|
729
|
-
:
|
|
686
|
+
: r >= 3
|
|
730
687
|
? 'Moderate - Should fix soon'
|
|
731
688
|
: 'Minor - Consider fixing';
|
|
732
689
|
quickFixes.push({
|
|
@@ -740,15 +697,8 @@ function issuesToQuickFixes(issues, includeCode) {
|
|
|
740
697
|
});
|
|
741
698
|
});
|
|
742
699
|
// Sort by impact (critical first)
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
'Critical - Must fix immediately': 4,
|
|
746
|
-
'Serious - High priority': 3,
|
|
747
|
-
'Moderate - Should fix soon': 2,
|
|
748
|
-
'Minor - Consider fixing': 1,
|
|
749
|
-
};
|
|
750
|
-
return impactOrder[b.impactEstimate] - impactOrder[a.impactEstimate];
|
|
751
|
-
});
|
|
700
|
+
const estimateRank = (e) => e === 'Critical - Must fix immediately' ? 4 : e === 'Serious - High priority' ? 3 : e === 'Moderate - Should fix soon' ? 2 : 1;
|
|
701
|
+
quickFixes.sort((a, b) => estimateRank(b.impactEstimate) - estimateRank(a.impactEstimate));
|
|
752
702
|
return quickFixes;
|
|
753
703
|
}
|
|
754
704
|
/**
|
|
@@ -761,19 +711,20 @@ function issuesToQuickFixes(issues, includeCode) {
|
|
|
761
711
|
* @returns Formatted quick fixes with code examples
|
|
762
712
|
*/
|
|
763
713
|
export async function getQuickFixes(input) {
|
|
764
|
-
const { results, format = 'json', includeCode = true, } = input;
|
|
714
|
+
const { results, format = 'json', includeCode = true, basicAuthUsername, basicAuthPassword, } = input;
|
|
765
715
|
let auditResult;
|
|
766
|
-
// If input is a URL string, run an audit first
|
|
716
|
+
// If input is a URL string, run an audit first (with optional Basic Auth, same as audit_url)
|
|
767
717
|
if (typeof results === 'string') {
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
});
|
|
718
|
+
const { urlWithoutAuth, basicAuthUsername: u, basicAuthPassword: p } = resolveBasicAuth(results, basicAuthUsername, basicAuthPassword);
|
|
719
|
+
auditResult = await auditUrl({ url: urlWithoutAuth, basicAuthUsername: u, basicAuthPassword: p });
|
|
771
720
|
}
|
|
772
721
|
else {
|
|
773
|
-
|
|
722
|
+
const normalized = normalizeAuditResult(results);
|
|
723
|
+
auditResult = normalized ?? results;
|
|
774
724
|
}
|
|
725
|
+
const issues = Array.isArray(auditResult?.prioritizedIssues) ? auditResult.prioritizedIssues : [];
|
|
775
726
|
// Convert issues to quick fixes
|
|
776
|
-
const fixes = issuesToQuickFixes(
|
|
727
|
+
const fixes = issuesToQuickFixes(issues, includeCode);
|
|
777
728
|
// Format fixes based on requested format
|
|
778
729
|
if (format === 'markdown') {
|
|
779
730
|
const markdownContent = fixes.map(formatFixAsMarkdown).join('\n\n---\n\n');
|
|
@@ -863,13 +814,13 @@ function calculateCriterionStatus(violations) {
|
|
|
863
814
|
if (violations.length === 0) {
|
|
864
815
|
return 'pass';
|
|
865
816
|
}
|
|
866
|
-
// If all violations are
|
|
867
|
-
const
|
|
868
|
-
if (
|
|
817
|
+
// If all violations are low impact, consider it partial compliance
|
|
818
|
+
const allLowImpact = violations.every((v) => impactRank(v.impact) <= 2);
|
|
819
|
+
if (allLowImpact) {
|
|
869
820
|
return 'partial';
|
|
870
821
|
}
|
|
871
|
-
// If there are
|
|
872
|
-
const hasCriticalOrSerious = violations.some((v) => v.impact
|
|
822
|
+
// If there are high-impact violations (axe: critical/serious; ACE: violation/potentialviolation), it's a fail
|
|
823
|
+
const hasCriticalOrSerious = violations.some((v) => impactRank(v.impact) >= 5);
|
|
873
824
|
if (hasCriticalOrSerious) {
|
|
874
825
|
return 'fail';
|
|
875
826
|
}
|
|
@@ -1071,8 +1022,10 @@ function generateExecutiveSummary(format, level, compliancePercentage, totalIssu
|
|
|
1071
1022
|
*/
|
|
1072
1023
|
export function generateComplianceReport(input) {
|
|
1073
1024
|
const { results, format = 'WCAG', level = 'AA', includeRemediation = false, } = input;
|
|
1074
|
-
// Normalize: accept single result
|
|
1075
|
-
const
|
|
1025
|
+
// Normalize: accept single result, array, JSON string, or MCP wrapper
|
|
1026
|
+
const raw = Array.isArray(results) ? results[0] : results;
|
|
1027
|
+
const normalized = normalizeAuditResult(raw);
|
|
1028
|
+
const auditResult = normalized ?? raw;
|
|
1076
1029
|
if (auditResult == null || typeof auditResult !== 'object') {
|
|
1077
1030
|
throw new Error('Invalid results: expected an audit result object (or array with one result).');
|
|
1078
1031
|
}
|
|
@@ -1156,19 +1109,19 @@ export function generateComplianceReport(input) {
|
|
|
1156
1109
|
*/
|
|
1157
1110
|
export async function getWCAGCompliance(input) {
|
|
1158
1111
|
let auditResult;
|
|
1159
|
-
// If input is a URL string, run an audit first
|
|
1112
|
+
// If input is a URL string, run an audit first (with optional Basic Auth, same as audit_url)
|
|
1160
1113
|
if (typeof input.results === 'string') {
|
|
1161
|
-
const {
|
|
1162
|
-
auditResult = await auditUrl({
|
|
1163
|
-
url: input.results,
|
|
1164
|
-
});
|
|
1114
|
+
const { urlWithoutAuth, basicAuthUsername: u, basicAuthPassword: p } = resolveBasicAuth(input.results, input.basicAuthUsername, input.basicAuthPassword);
|
|
1115
|
+
auditResult = await auditUrl({ url: urlWithoutAuth, basicAuthUsername: u, basicAuthPassword: p });
|
|
1165
1116
|
}
|
|
1166
1117
|
else {
|
|
1167
|
-
|
|
1118
|
+
const normalized = normalizeAuditResult(input.results);
|
|
1119
|
+
auditResult = normalized ?? input.results;
|
|
1168
1120
|
}
|
|
1169
1121
|
const level = input.level || 'AA';
|
|
1122
|
+
const issues = Array.isArray(auditResult?.prioritizedIssues) ? auditResult.prioritizedIssues : [];
|
|
1170
1123
|
// Group issues by WCAG criterion
|
|
1171
|
-
const criterionMap = groupIssuesByCriterion(
|
|
1124
|
+
const criterionMap = groupIssuesByCriterion(issues);
|
|
1172
1125
|
// Build criteria breakdown
|
|
1173
1126
|
const criteria = [];
|
|
1174
1127
|
const missingRequirements = [];
|