@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.
Files changed (54) hide show
  1. package/README.md +17 -0
  2. package/dist/core/accessibility-runner.d.ts +22 -14
  3. package/dist/core/accessibility-runner.d.ts.map +1 -1
  4. package/dist/core/accessibility-runner.js +110 -64
  5. package/dist/core/accessibility-runner.js.map +1 -1
  6. package/dist/core/basic-auth.d.ts +35 -0
  7. package/dist/core/basic-auth.d.ts.map +1 -0
  8. package/dist/core/basic-auth.js +52 -0
  9. package/dist/core/basic-auth.js.map +1 -0
  10. package/dist/core/config.d.ts +2 -0
  11. package/dist/core/config.d.ts.map +1 -1
  12. package/dist/core/config.js +4 -0
  13. package/dist/core/config.js.map +1 -1
  14. package/dist/core/normalize-audit-result.d.ts +19 -0
  15. package/dist/core/normalize-audit-result.d.ts.map +1 -0
  16. package/dist/core/normalize-audit-result.js +173 -0
  17. package/dist/core/normalize-audit-result.js.map +1 -0
  18. package/dist/core/result-processor.d.ts +22 -5
  19. package/dist/core/result-processor.d.ts.map +1 -1
  20. package/dist/core/result-processor.js +115 -101
  21. package/dist/core/result-processor.js.map +1 -1
  22. package/dist/server.d.ts +5 -1
  23. package/dist/server.d.ts.map +1 -1
  24. package/dist/server.js +133 -6
  25. package/dist/server.js.map +1 -1
  26. package/dist/tools/aggregate.d.ts.map +1 -1
  27. package/dist/tools/aggregate.js +23 -22
  28. package/dist/tools/aggregate.js.map +1 -1
  29. package/dist/tools/analysis.d.ts.map +1 -1
  30. package/dist/tools/analysis.js +87 -134
  31. package/dist/tools/analysis.js.map +1 -1
  32. package/dist/tools/audit.d.ts.map +1 -1
  33. package/dist/tools/audit.js +73 -23
  34. package/dist/tools/audit.js.map +1 -1
  35. package/dist/tools/comparison.d.ts.map +1 -1
  36. package/dist/tools/comparison.js +28 -17
  37. package/dist/tools/comparison.js.map +1 -1
  38. package/dist/tools/export.d.ts.map +1 -1
  39. package/dist/tools/export.js +55 -38
  40. package/dist/tools/export.js.map +1 -1
  41. package/dist/tools/filter.d.ts.map +1 -1
  42. package/dist/tools/filter.js +16 -9
  43. package/dist/tools/filter.js.map +1 -1
  44. package/dist/tools/session.d.ts.map +1 -1
  45. package/dist/tools/session.js +3 -2
  46. package/dist/tools/session.js.map +1 -1
  47. package/dist/tools/visualize.d.ts.map +1 -1
  48. package/dist/tools/visualize.js +47 -51
  49. package/dist/tools/visualize.js.map +1 -1
  50. package/dist/types/index.d.ts +53 -13
  51. package/dist/types/index.d.ts.map +1 -1
  52. package/dist/types/index.js +19 -1
  53. package/dist/types/index.js.map +1 -1
  54. package/package.json +14 -2
@@ -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 === 'A');
29
- const levelAA = issues.filter((i) => i.wcagLevel === 'AA');
30
- const levelAAA = issues.filter((i) => i.wcagLevel === 'AAA');
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
- switch (issue.impact) {
57
- case 'violation':
58
- score -= 5;
59
- break;
60
- case 'needs-review':
61
- score -= 3;
62
- break;
63
- case 'recommendation':
64
- score -= 1;
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 resultsArray = Array.isArray(results) ? results : results != null ? [results] : [];
150
- if (resultsArray.length === 0) {
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 resultsArray = Array.isArray(results) ? results : [results];
294
- if (resultsArray.length === 0) {
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;AAGH,OAAO,KAAK,EAEV,UAAU,EACV,WAAW,EAEX,qBAAqB,EACrB,sBAAsB,EAKtB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAEhB,6BAA6B,EAC7B,gBAAgB,EAIhB,mBAAmB,EACnB,oBAAoB,EAErB,MAAM,mBAAmB,CAAA;AAkH1B;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,WAAW,CAAC,CAyCtB;AAwRD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CAyCxB;AAsQD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,GACvB,gBAAgB,CAalB;AA2HD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAiD3B;AA0UD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,6BAA6B,GACnC,gBAAgB,CAqGlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA4G/B"}
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"}
@@ -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 === 'A');
55
- const levelAA = issues.filter((i) => i.wcagLevel === 'AA');
56
- const levelAAA = issues.filter((i) => i.wcagLevel === 'AAA');
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
- auditResult = await auditUrl({
111
- url: input.results,
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
- auditResult = input.results;
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(auditResult.prioritizedIssues, weights);
138
+ const overallScore = calculateOverallScore(issues, weights);
124
139
  // Calculate breakdown by category
125
- const breakdown = calculateCategoryBreakdown(auditResult.prioritizedIssues, weights);
140
+ const breakdown = calculateCategoryBreakdown(issues, weights);
126
141
  // Calculate WCAG compliance
127
- const wcagCompliance = calculateWCAGCompliance(auditResult.prioritizedIssues);
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 > serious > moderate > minor)
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 = impactOrder[b.impact] - impactOrder[a.impact];
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 = levelOrder[b.wcagLevel] - levelOrder[a.wcagLevel];
170
+ const levelDiff = wcagLevelOrder(b.wcagLevel) - wcagLevelOrder(a.wcagLevel);
168
171
  if (levelDiff !== 0)
169
172
  return levelDiff;
170
- const impactOrder = {
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 (critical > serious > moderate > minor)
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 = impactOrder[b.impact] - impactOrder[a.impact];
195
+ const impactDiff = impactRank(b.impact) - impactRank(a.impact);
206
196
  if (impactDiff !== 0)
207
197
  return impactDiff;
208
- // Secondary sort by WCAG level
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 === 'violation' || i.impact === 'needs-review');
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 impactOrder = {
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. Critical impact issues
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 === 'violation');
293
- const levelAIssues = groupIssues.filter((i) => i.wcagLevel === 'A');
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 === 'A' || firstIssue.wcagLevel === 'AA' || firstIssue.wcagLevel === 'AAA')
279
+ wcagLevel: (wcagLevelMatches(firstIssue.wcagLevel, 'A') || wcagLevelMatches(firstIssue.wcagLevel, 'AA') || wcagLevelMatches(firstIssue.wcagLevel, 'AAA'))
303
280
  ? firstIssue.wcagLevel
304
- : 'A', // Default to A if not a valid WCAG level
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 levelOrder = {
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
- const impactOrder = {
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 critical impact issues that prevent users with disabilities from accessing content.`);
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 (criticalseriousmoderate minor).`);
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 or placeholder from external tools (e.g. CodeMie)
394
- const auditResult = Array.isArray(results) ? results[0] : results;
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 impactEstimate = firstIssue.impact === 'violation'
681
+ const r = impactRank(firstIssue.impact);
682
+ const impactEstimate = r >= 5
726
683
  ? 'Critical - Must fix immediately'
727
- : firstIssue.impact === 'needs-review'
684
+ : r >= 4
728
685
  ? 'Serious - High priority'
729
- : firstIssue.impact === 'recommendation'
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
- quickFixes.sort((a, b) => {
744
- const impactOrder = {
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
- auditResult = await auditUrl({
769
- url: results,
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
- auditResult = results;
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(auditResult.prioritizedIssues, includeCode);
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 minor, consider it partial compliance
867
- const allMinor = violations.every((v) => v.impact === 'minor');
868
- if (allMinor) {
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 critical or serious violations, it's a fail
872
- const hasCriticalOrSerious = violations.some((v) => v.impact === 'violation' || v.impact === 'needs-review');
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 or array (e.g. from external tools like CodeMie)
1075
- const auditResult = Array.isArray(results) ? results[0] : results;
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 { auditUrl } = await import('./audit.js');
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
- auditResult = input.results;
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(auditResult.prioritizedIssues);
1124
+ const criterionMap = groupIssuesByCriterion(issues);
1172
1125
  // Build criteria breakdown
1173
1126
  const criteria = [];
1174
1127
  const missingRequirements = [];