agentic-qe 2.4.0 → 2.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.
Files changed (174) hide show
  1. package/.claude/agents/qe-a11y-ally.md +751 -0
  2. package/.claude/agents/qx-partner.md +120 -4
  3. package/.claude/skills/testability-scoring/SKILL.md +107 -6
  4. package/CHANGELOG.md +86 -0
  5. package/README.md +7 -6
  6. package/dist/agents/AccessibilityAllyAgent.d.ts +168 -0
  7. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -0
  8. package/dist/agents/AccessibilityAllyAgent.js +462 -0
  9. package/dist/agents/AccessibilityAllyAgent.js.map +1 -0
  10. package/dist/agents/SONAIntegration.d.ts +109 -0
  11. package/dist/agents/SONAIntegration.d.ts.map +1 -0
  12. package/dist/agents/SONAIntegration.js +167 -0
  13. package/dist/agents/SONAIntegration.js.map +1 -0
  14. package/dist/agents/index.d.ts +3 -0
  15. package/dist/agents/index.d.ts.map +1 -1
  16. package/dist/agents/index.js +93 -2
  17. package/dist/agents/index.js.map +1 -1
  18. package/dist/cli/init/agents.js +1 -1
  19. package/dist/cli/init/claude-config.js +2 -2
  20. package/dist/cli/init/database-init.js +1 -1
  21. package/dist/core/cache/BinaryCacheImpl.d.ts +161 -0
  22. package/dist/core/cache/BinaryCacheImpl.d.ts.map +1 -0
  23. package/dist/core/cache/BinaryCacheImpl.js +685 -0
  24. package/dist/core/cache/BinaryCacheImpl.js.map +1 -0
  25. package/dist/core/cache/BinaryMetadataCache.d.ts +244 -0
  26. package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -1
  27. package/dist/core/cache/BinaryMetadataCache.js +63 -1
  28. package/dist/core/cache/BinaryMetadataCache.js.map +1 -1
  29. package/dist/core/cache/index.d.ts +1 -0
  30. package/dist/core/cache/index.d.ts.map +1 -1
  31. package/dist/core/cache/index.js +10 -1
  32. package/dist/core/cache/index.js.map +1 -1
  33. package/dist/core/memory/AgentDBService.d.ts +30 -4
  34. package/dist/core/memory/AgentDBService.d.ts.map +1 -1
  35. package/dist/core/memory/AgentDBService.js +122 -12
  36. package/dist/core/memory/AgentDBService.js.map +1 -1
  37. package/dist/core/memory/CachedHNSWVectorMemory.d.ts +153 -0
  38. package/dist/core/memory/CachedHNSWVectorMemory.d.ts.map +1 -0
  39. package/dist/core/memory/CachedHNSWVectorMemory.js +329 -0
  40. package/dist/core/memory/CachedHNSWVectorMemory.js.map +1 -0
  41. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  42. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
  43. package/dist/core/memory/RuVectorPatternStore.js +8 -2
  44. package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
  45. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +50 -0
  46. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -1
  47. package/dist/core/memory/UnifiedMemoryCoordinator.js +206 -0
  48. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -1
  49. package/dist/core/memory/index.d.ts +2 -0
  50. package/dist/core/memory/index.d.ts.map +1 -1
  51. package/dist/core/memory/index.js +8 -1
  52. package/dist/core/memory/index.js.map +1 -1
  53. package/dist/core/optimization/RecursiveOptimizer.d.ts +233 -0
  54. package/dist/core/optimization/RecursiveOptimizer.d.ts.map +1 -0
  55. package/dist/core/optimization/RecursiveOptimizer.js +509 -0
  56. package/dist/core/optimization/RecursiveOptimizer.js.map +1 -0
  57. package/dist/core/strategies/SONALearningStrategy.d.ts +115 -0
  58. package/dist/core/strategies/SONALearningStrategy.d.ts.map +1 -0
  59. package/dist/core/strategies/SONALearningStrategy.js +656 -0
  60. package/dist/core/strategies/SONALearningStrategy.js.map +1 -0
  61. package/dist/core/strategies/TRMLearningStrategy.d.ts +162 -0
  62. package/dist/core/strategies/TRMLearningStrategy.d.ts.map +1 -0
  63. package/dist/core/strategies/TRMLearningStrategy.js +670 -0
  64. package/dist/core/strategies/TRMLearningStrategy.js.map +1 -0
  65. package/dist/core/strategies/index.d.ts +10 -1
  66. package/dist/core/strategies/index.d.ts.map +1 -1
  67. package/dist/core/strategies/index.js +4 -1
  68. package/dist/core/strategies/index.js.map +1 -1
  69. package/dist/learning/SONAFeedbackLoop.d.ts +168 -0
  70. package/dist/learning/SONAFeedbackLoop.d.ts.map +1 -0
  71. package/dist/learning/SONAFeedbackLoop.js +344 -0
  72. package/dist/learning/SONAFeedbackLoop.js.map +1 -0
  73. package/dist/learning/baselines/BaselineCollector.d.ts +1 -1
  74. package/dist/learning/baselines/BaselineCollector.js +1 -1
  75. package/dist/learning/baselines/StandardTaskSuite.d.ts +1 -1
  76. package/dist/learning/baselines/StandardTaskSuite.js +1 -1
  77. package/dist/learning/index.d.ts +2 -0
  78. package/dist/learning/index.d.ts.map +1 -1
  79. package/dist/learning/index.js +6 -1
  80. package/dist/learning/index.js.map +1 -1
  81. package/dist/mcp/server-instructions.d.ts +1 -1
  82. package/dist/mcp/server-instructions.js +1 -1
  83. package/dist/mcp/server.d.ts.map +1 -1
  84. package/dist/mcp/server.js +23 -16
  85. package/dist/mcp/server.js.map +1 -1
  86. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  87. package/dist/mcp/services/AgentRegistry.js +6 -1
  88. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  89. package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts +114 -0
  90. package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts.map +1 -0
  91. package/dist/mcp/tools/qe/accessibility/accname-computation.js +566 -0
  92. package/dist/mcp/tools/qe/accessibility/accname-computation.js.map +1 -0
  93. package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts +103 -0
  94. package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts.map +1 -0
  95. package/dist/mcp/tools/qe/accessibility/apg-patterns.js +1028 -0
  96. package/dist/mcp/tools/qe/accessibility/apg-patterns.js.map +1 -0
  97. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts +48 -0
  98. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts.map +1 -0
  99. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js +565 -0
  100. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js.map +1 -0
  101. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts +117 -0
  102. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts.map +1 -0
  103. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js +571 -0
  104. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js.map +1 -0
  105. package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts +23 -0
  106. package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts.map +1 -0
  107. package/dist/mcp/tools/qe/accessibility/html-report-generator.js +1152 -0
  108. package/dist/mcp/tools/qe/accessibility/html-report-generator.js.map +1 -0
  109. package/dist/mcp/tools/qe/accessibility/index.d.ts +22 -0
  110. package/dist/mcp/tools/qe/accessibility/index.d.ts.map +1 -0
  111. package/dist/mcp/tools/qe/accessibility/index.js +38 -0
  112. package/dist/mcp/tools/qe/accessibility/index.js.map +1 -0
  113. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts +18 -0
  114. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts.map +1 -0
  115. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js +549 -0
  116. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js.map +1 -0
  117. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts +139 -0
  118. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts.map +1 -0
  119. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js +1300 -0
  120. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js.map +1 -0
  121. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts +138 -0
  122. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts.map +1 -0
  123. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js +1326 -0
  124. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js.map +1 -0
  125. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts +50 -0
  126. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts.map +1 -0
  127. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js +469 -0
  128. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js.map +1 -0
  129. package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts +193 -0
  130. package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts.map +1 -0
  131. package/dist/mcp/tools/qe/accessibility/webvtt-generator.js +511 -0
  132. package/dist/mcp/tools/qe/accessibility/webvtt-generator.js.map +1 -0
  133. package/dist/mcp/tools.d.ts +1 -0
  134. package/dist/mcp/tools.d.ts.map +1 -1
  135. package/dist/mcp/tools.js +61 -0
  136. package/dist/mcp/tools.js.map +1 -1
  137. package/dist/providers/HybridRouter.d.ts +34 -3
  138. package/dist/providers/HybridRouter.d.ts.map +1 -1
  139. package/dist/providers/HybridRouter.js +69 -4
  140. package/dist/providers/HybridRouter.js.map +1 -1
  141. package/dist/providers/LLMProviderFactory.d.ts +68 -1
  142. package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
  143. package/dist/providers/LLMProviderFactory.js +173 -6
  144. package/dist/providers/LLMProviderFactory.js.map +1 -1
  145. package/dist/providers/OpenRouterProvider.d.ts +150 -0
  146. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  147. package/dist/providers/OpenRouterProvider.js +545 -0
  148. package/dist/providers/OpenRouterProvider.js.map +1 -0
  149. package/dist/providers/RuvllmProvider.d.ts +130 -16
  150. package/dist/providers/RuvllmProvider.d.ts.map +1 -1
  151. package/dist/providers/RuvllmProvider.js +399 -83
  152. package/dist/providers/RuvllmProvider.js.map +1 -1
  153. package/dist/providers/index.d.ts +33 -4
  154. package/dist/providers/index.d.ts.map +1 -1
  155. package/dist/providers/index.js +72 -21
  156. package/dist/providers/index.js.map +1 -1
  157. package/dist/telemetry/instrumentation/agent.d.ts +1 -1
  158. package/dist/telemetry/instrumentation/agent.js +1 -1
  159. package/dist/telemetry/instrumentation/index.d.ts +1 -1
  160. package/dist/telemetry/instrumentation/index.js +1 -1
  161. package/dist/types/index.d.ts +2 -1
  162. package/dist/types/index.d.ts.map +1 -1
  163. package/dist/types/index.js +2 -0
  164. package/dist/types/index.js.map +1 -1
  165. package/dist/types/ruvllm.d.ts +97 -0
  166. package/dist/types/ruvllm.d.ts.map +1 -0
  167. package/dist/types/ruvllm.js +46 -0
  168. package/dist/types/ruvllm.js.map +1 -0
  169. package/dist/utils/ruvllm-loader.d.ts +94 -0
  170. package/dist/utils/ruvllm-loader.d.ts.map +1 -0
  171. package/dist/utils/ruvllm-loader.js +87 -0
  172. package/dist/utils/ruvllm-loader.js.map +1 -0
  173. package/docs/reference/agents.md +36 -1
  174. package/package.json +4 -2
@@ -0,0 +1,549 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateMarkdownReport = generateMarkdownReport;
4
+ const remediation_code_generator_js_1 = require("./remediation-code-generator.js");
5
+ function generateRemediationPlan(violations, url) {
6
+ let plan = '';
7
+ plan += `## 🎯 Context-Aware Remediation Plan\n\n`;
8
+ // Extract site context from URL
9
+ const domain = new URL(url).hostname.replace('www.', '');
10
+ const siteName = domain.split('.')[0];
11
+ plan += `### 📋 Executive Summary\n\n`;
12
+ plan += `This remediation plan addresses **${violations.length} accessibility violations** found on **${siteName}**. `;
13
+ const criticalCount = violations.filter(v => v.severity === 'critical').length;
14
+ const seriousCount = violations.filter(v => v.severity === 'serious').length;
15
+ const totalElements = violations.reduce((sum, v) => sum + (v.elements?.length || 0), 0);
16
+ plan += `The issues affect **${totalElements} elements** and impact up to **`;
17
+ const maxImpact = Math.max(...violations.map(v => v.userImpact?.affectedUserPercentage || 0));
18
+ plan += `${maxImpact}% of users** (including blind, deaf, low-vision, and mobility-impaired visitors).\n\n`;
19
+ if (criticalCount > 0) {
20
+ plan += `**⚠️ URGENT**: ${criticalCount} critical ${criticalCount === 1 ? 'issue requires' : 'issues require'} immediate attention to avoid legal risk and ensure basic accessibility.\n\n`;
21
+ }
22
+ // Create remediation tasks
23
+ const tasks = [];
24
+ violations.forEach((v, idx) => {
25
+ const task = {
26
+ id: `TASK-${idx + 1}`,
27
+ title: v.description.split('Ensure ')[1] || v.description,
28
+ severity: v.severity,
29
+ effort: estimateEffort(v),
30
+ impact: estimateImpact(v),
31
+ affectedUsers: `${v.userImpact?.affectedUserPercentage || 0}% (${v.userImpact?.disabilityTypes?.join(', ') || 'general'})`,
32
+ elementCount: v.elements?.length || 0,
33
+ steps: generateSteps(v, url),
34
+ testing: generateTestingSteps(v),
35
+ estimatedTime: estimateTime(v),
36
+ dependencies: identifyDependencies(v, violations)
37
+ };
38
+ tasks.push(task);
39
+ });
40
+ // Sort by priority: critical first, then by impact/effort ratio
41
+ tasks.sort((a, b) => {
42
+ const severityOrder = { critical: 0, serious: 1, moderate: 2, minor: 3 };
43
+ const sevA = severityOrder[a.severity];
44
+ const sevB = severityOrder[b.severity];
45
+ if (sevA !== sevB)
46
+ return sevA - sevB;
47
+ const effortScore = { low: 1, medium: 2, high: 3 };
48
+ const impactScore = { low: 1, medium: 2, high: 3 };
49
+ const ratioA = impactScore[a.impact] / effortScore[a.effort];
50
+ const ratioB = impactScore[b.impact] / effortScore[b.effort];
51
+ return ratioB - ratioA;
52
+ });
53
+ // Quick Wins
54
+ const quickWins = tasks.filter(t => t.effort === 'low' && (t.severity === 'critical' || t.severity === 'serious'));
55
+ if (quickWins.length > 0) {
56
+ plan += `### ⚡ Quick Wins (Start Here!)\n\n`;
57
+ plan += `These ${quickWins.length} high-impact, low-effort tasks provide immediate accessibility improvements:\n\n`;
58
+ quickWins.forEach((task, i) => {
59
+ plan += `${i + 1}. **${task.title}** (${task.elementCount} elements, ~${task.estimatedTime})\n`;
60
+ });
61
+ plan += `\n`;
62
+ }
63
+ // Prioritized Action Plan
64
+ plan += `### 📌 Prioritized Action Plan\n\n`;
65
+ const phases = [
66
+ { name: 'Phase 1: Critical Fixes (Week 1)', filter: (t) => t.severity === 'critical' },
67
+ { name: 'Phase 2: Serious Issues (Week 2-3)', filter: (t) => t.severity === 'serious' },
68
+ { name: 'Phase 3: Remaining Issues (Week 4+)', filter: (t) => t.severity !== 'critical' && t.severity !== 'serious' }
69
+ ];
70
+ phases.forEach(phase => {
71
+ const phaseTasks = tasks.filter(phase.filter);
72
+ if (phaseTasks.length === 0)
73
+ return;
74
+ plan += `#### ${phase.name}\n\n`;
75
+ phaseTasks.forEach(task => {
76
+ plan += `**${task.id}: ${task.title}**\n`;
77
+ plan += `- **Severity**: ${task.severity.toUpperCase()} | **Effort**: ${task.effort} | **Impact**: ${task.impact}\n`;
78
+ plan += `- **Affects**: ${task.affectedUsers}\n`;
79
+ plan += `- **Elements**: ${task.elementCount}\n`;
80
+ plan += `- **Time**: ${task.estimatedTime}\n`;
81
+ if (task.dependencies && task.dependencies.length > 0) {
82
+ plan += `- **Dependencies**: ${task.dependencies.join(', ')}\n`;
83
+ }
84
+ plan += `\n**Steps**:\n`;
85
+ task.steps.forEach((step, i) => {
86
+ plan += `${i + 1}. ${step}\n`;
87
+ });
88
+ plan += `\n**Testing**:\n`;
89
+ task.testing.forEach((test, i) => {
90
+ plan += `- [ ] ${test}\n`;
91
+ });
92
+ plan += `\n`;
93
+ });
94
+ });
95
+ // Timeline Summary
96
+ plan += `### 📅 Implementation Timeline\n\n`;
97
+ const totalTime = tasks.reduce((sum, t) => {
98
+ const hours = parseInt(t.estimatedTime) || 0;
99
+ return sum + hours;
100
+ }, 0);
101
+ plan += `| Phase | Tasks | Estimated Time | Deliverables |\n`;
102
+ plan += `|-------|-------|----------------|---------------|\n`;
103
+ plan += `| **Week 1** | ${tasks.filter(t => t.severity === 'critical').length} critical | ${tasks.filter(t => t.severity === 'critical').reduce((sum, t) => sum + (parseInt(t.estimatedTime) || 0), 0)}h | Basic accessibility compliance |\n`;
104
+ plan += `| **Week 2-3** | ${tasks.filter(t => t.severity === 'serious').length} serious | ${tasks.filter(t => t.severity === 'serious').reduce((sum, t) => sum + (parseInt(t.estimatedTime) || 0), 0)}h | WCAG 2.2 AA compliance |\n`;
105
+ plan += `| **Week 4+** | ${tasks.filter(t => t.severity !== 'critical' && t.severity !== 'serious').length} remaining | ${tasks.filter(t => t.severity !== 'critical' && t.severity !== 'serious').reduce((sum, t) => sum + (parseInt(t.estimatedTime) || 0), 0)}h | Full remediation |\n`;
106
+ plan += `| **Total** | ${tasks.length} | **${totalTime}h** | ${siteName} fully accessible |\n\n`;
107
+ // Success Metrics
108
+ plan += `### 📊 Success Metrics\n\n`;
109
+ plan += `Track progress using these KPIs:\n\n`;
110
+ plan += `- [ ] **Zero critical violations** (currently ${criticalCount})\n`;
111
+ plan += `- [ ] **Zero serious violations** (currently ${seriousCount})\n`;
112
+ plan += `- [ ] **Compliance score ≥ 90/100** (currently ${violations.length > 0 ? 0 : 100})\n`;
113
+ plan += `- [ ] **Screen reader navigation test passed**\n`;
114
+ plan += `- [ ] **Keyboard-only navigation test passed**\n`;
115
+ plan += `- [ ] **WAVE tool shows 0 errors**\n`;
116
+ plan += `- [ ] **axe DevTools shows 0 violations**\n\n`;
117
+ return plan;
118
+ }
119
+ function estimateEffort(violation) {
120
+ const elementCount = violation.elements?.length || 0;
121
+ // Video captions = high effort
122
+ if (violation.description.toLowerCase().includes('video'))
123
+ return 'high';
124
+ // Many elements = higher effort
125
+ if (elementCount > 50)
126
+ return 'high';
127
+ if (elementCount > 20)
128
+ return 'medium';
129
+ // ARIA fixes = low-medium effort
130
+ if (violation.description.toLowerCase().includes('aria'))
131
+ return 'low';
132
+ // Color contrast = medium effort (requires design changes)
133
+ if (violation.description.toLowerCase().includes('contrast'))
134
+ return 'medium';
135
+ // Alt text = low effort
136
+ if (violation.description.toLowerCase().includes('alt'))
137
+ return 'low';
138
+ return 'medium';
139
+ }
140
+ function estimateImpact(violation) {
141
+ const userImpact = violation.userImpact?.affectedUserPercentage || 0;
142
+ if (violation.severity === 'critical')
143
+ return 'high';
144
+ if (userImpact >= 15)
145
+ return 'high';
146
+ if (userImpact >= 10)
147
+ return 'medium';
148
+ return 'low';
149
+ }
150
+ function estimateTime(violation) {
151
+ const elementCount = violation.elements?.length || 0;
152
+ const effort = estimateEffort(violation);
153
+ if (effort === 'low') {
154
+ if (elementCount <= 5)
155
+ return '30min';
156
+ if (elementCount <= 20)
157
+ return '1h';
158
+ return '2h';
159
+ }
160
+ if (effort === 'medium') {
161
+ if (elementCount <= 10)
162
+ return '2h';
163
+ if (elementCount <= 50)
164
+ return '4h';
165
+ return '8h';
166
+ }
167
+ // high effort
168
+ if (violation.description.toLowerCase().includes('video'))
169
+ return '4h';
170
+ return '8h';
171
+ }
172
+ function generateSteps(violation, url) {
173
+ const steps = [];
174
+ const desc = violation.description.toLowerCase();
175
+ if (desc.includes('video')) {
176
+ steps.push('Review generated WebVTT caption file (provided in violation details)');
177
+ steps.push('Save caption file to your server (e.g., `/captions/video-1.vtt`)');
178
+ steps.push('Add `<track kind="captions" src="/captions/video-1.vtt" srclang="en" label="English">` to video element');
179
+ steps.push('Add `aria-describedby` attribute with comprehensive description (provided)');
180
+ steps.push('Test with video player controls - captions should toggle on/off');
181
+ }
182
+ else if (desc.includes('alt') || desc.includes('alternative text')) {
183
+ steps.push('Identify the purpose/content of each image');
184
+ steps.push('Add descriptive `alt` attribute (e.g., `alt="Author profile photo"`)');
185
+ steps.push('For decorative images, use `alt=""` or `role="presentation"`');
186
+ }
187
+ else if (desc.includes('aria') && desc.includes('role')) {
188
+ steps.push('Review ARIA roles structure (tabs must be in tablist)');
189
+ steps.push('Ensure parent elements have correct container roles');
190
+ steps.push('Add missing wrapper elements with appropriate roles');
191
+ steps.push('Verify role hierarchy matches ARIA authoring practices');
192
+ }
193
+ else if (desc.includes('contrast')) {
194
+ steps.push('Use browser DevTools to identify elements with contrast issues');
195
+ steps.push('Darken text color OR lighten background to achieve 4.5:1 ratio');
196
+ steps.push('Update CSS variables/theme if using design system');
197
+ steps.push('Test with contrast checker tool (e.g., WebAIM Contrast Checker)');
198
+ }
199
+ else if (desc.includes('link') && desc.includes('text')) {
200
+ steps.push('Add `aria-label` to icon-only links with descriptive text');
201
+ steps.push('Example: `<a href="#" aria-label="Search the site"><i class="icon-magnifier"></i></a>`');
202
+ steps.push('Ensure label describes destination, not just icon');
203
+ }
204
+ else if (desc.includes('<li>') || desc.includes('list')) {
205
+ steps.push('Wrap orphaned `<li>` elements in proper `<ul>` or `<ol>` container');
206
+ steps.push('If using ARIA roles, ensure tab items are in role="tablist"');
207
+ }
208
+ else {
209
+ steps.push('Review WCAG documentation for specific guidance');
210
+ steps.push('Implement recommended fix from violation details');
211
+ steps.push('Test with screen reader after changes');
212
+ }
213
+ return steps;
214
+ }
215
+ function generateTestingSteps(violation) {
216
+ const tests = [];
217
+ const desc = violation.description.toLowerCase();
218
+ if (desc.includes('video')) {
219
+ tests.push('Play video and verify captions appear automatically');
220
+ tests.push('Toggle captions on/off using player controls');
221
+ tests.push('Test with screen reader - aria-describedby should be announced');
222
+ tests.push('Verify caption timing matches video content');
223
+ }
224
+ else if (desc.includes('aria') || desc.includes('role')) {
225
+ tests.push('Test with NVDA/JAWS - verify correct role announcements');
226
+ tests.push('Navigate with keyboard - Tab key should work correctly');
227
+ tests.push('Re-run axe DevTools - violation should be resolved');
228
+ }
229
+ else if (desc.includes('contrast')) {
230
+ tests.push('Use WebAIM Contrast Checker - verify 4.5:1 minimum');
231
+ tests.push('Test in low-light conditions or with reduced brightness');
232
+ tests.push('Verify with color blindness simulator');
233
+ }
234
+ else if (desc.includes('link')) {
235
+ tests.push('Test with screen reader - link purpose should be clear');
236
+ tests.push('Tab to link - tooltip/aria-label should be evident');
237
+ }
238
+ tests.push('Re-run full accessibility scan to confirm fix');
239
+ return tests;
240
+ }
241
+ function identifyDependencies(violation, allViolations) {
242
+ const deps = [];
243
+ // ARIA role issues often depend on DOM structure fixes
244
+ if (violation.description.toLowerCase().includes('aria required children')) {
245
+ const parentIssue = allViolations.find(v => v.description.toLowerCase().includes('aria required parent'));
246
+ if (parentIssue) {
247
+ deps.push('Fix ARIA parent roles first');
248
+ }
249
+ }
250
+ // Color contrast might depend on design system updates
251
+ if (violation.description.toLowerCase().includes('contrast') && (violation.elements?.length || 0) > 50) {
252
+ deps.push('Update global CSS variables/theme first');
253
+ }
254
+ return deps;
255
+ }
256
+ /**
257
+ * Generate detailed code examples section
258
+ */
259
+ function generateDetailedCodeExamples(violations, url, pageLanguage = 'en', pageTitle = '') {
260
+ let md = '';
261
+ md += `## 📝 Detailed Code Examples (Copy-Paste Ready)\n\n`;
262
+ md += `The following code examples are context-aware and ready to implement.\n\n`;
263
+ // Detect frameworks from all violations
264
+ const allHtml = violations.flatMap(v => v.elements?.map(e => e.html) || []).join(' ');
265
+ const allSelectors = violations.flatMap(v => v.elements?.map(e => e.selector) || []);
266
+ const framework = (0, remediation_code_generator_js_1.detectFramework)(allHtml, allSelectors);
267
+ if (framework.framework !== 'unknown') {
268
+ md += `**Detected Framework**: ${framework.framework} (confidence: ${Math.round(framework.confidence * 100)}%)\n\n`;
269
+ }
270
+ // Group violations by type
271
+ const videoViolations = violations.filter(v => v.id.includes('video') || v.description.toLowerCase().includes('video') || v.wcagCriterion?.includes('1.2'));
272
+ const ariaViolations = violations.filter(v => v.id.includes('aria') || v.description.toLowerCase().includes('aria'));
273
+ const contrastViolations = violations.filter(v => v.id.includes('contrast') || v.description.toLowerCase().includes('contrast'));
274
+ let sectionNumber = 1;
275
+ // Video Caption Examples
276
+ if (videoViolations.length > 0) {
277
+ md += `### ${sectionNumber}. Video Caption Implementation\n\n`;
278
+ sectionNumber++;
279
+ videoViolations.forEach((violation, idx) => {
280
+ const codes = (0, remediation_code_generator_js_1.generateRemediationCodes)(violation, { url, pageLanguage, pageTitle });
281
+ codes.forEach(code => {
282
+ md += `#### ${code.title}\n\n`;
283
+ if (code.explanation) {
284
+ md += `${code.explanation}\n\n`;
285
+ }
286
+ md += `**Before (Broken)**:\n`;
287
+ md += `\`\`\`${code.language}\n${code.beforeCode}\n\`\`\`\n\n`;
288
+ md += `**After (Fixed)**:\n`;
289
+ md += `\`\`\`${code.language}\n${code.afterCode}\n\`\`\`\n\n`;
290
+ if (code.notes && code.notes.length > 0) {
291
+ md += `**Notes**:\n`;
292
+ code.notes.forEach(note => {
293
+ md += `- ${note}\n`;
294
+ });
295
+ md += `\n`;
296
+ }
297
+ md += `**Estimated Time**: ${code.estimatedTime}\n\n`;
298
+ md += `---\n\n`;
299
+ });
300
+ });
301
+ }
302
+ // ARIA/Focus Examples
303
+ if (ariaViolations.length > 0) {
304
+ md += `### ${sectionNumber}. ARIA & Focus Management\n\n`;
305
+ sectionNumber++;
306
+ // Generate one comprehensive fix for similar violations
307
+ const firstViolation = ariaViolations[0];
308
+ const codes = (0, remediation_code_generator_js_1.generateRemediationCodes)(firstViolation, { url, pageLanguage, pageTitle, framework });
309
+ codes.forEach(code => {
310
+ md += `#### ${code.title}\n\n`;
311
+ if (code.explanation) {
312
+ md += `${code.explanation}\n\n`;
313
+ }
314
+ md += `**Before (Broken)**:\n`;
315
+ md += `\`\`\`${code.language}\n${code.beforeCode}\n\`\`\`\n\n`;
316
+ md += `**After (Fixed)**:\n`;
317
+ md += `\`\`\`${code.language}\n${code.afterCode}\n\`\`\`\n\n`;
318
+ if (code.notes && code.notes.length > 0) {
319
+ md += `**Notes**:\n`;
320
+ code.notes.forEach(note => {
321
+ md += `- ${note}\n`;
322
+ });
323
+ md += `\n`;
324
+ }
325
+ md += `**Estimated Time**: ${code.estimatedTime}\n\n`;
326
+ md += `---\n\n`;
327
+ });
328
+ }
329
+ // Color Contrast Examples
330
+ if (contrastViolations.length > 0) {
331
+ md += `### ${sectionNumber}. Color Contrast Fixes\n\n`;
332
+ sectionNumber++;
333
+ const firstViolation = contrastViolations[0];
334
+ const codes = (0, remediation_code_generator_js_1.generateRemediationCodes)(firstViolation, { url, pageLanguage, pageTitle });
335
+ codes.forEach(code => {
336
+ md += `#### ${code.title}\n\n`;
337
+ if (code.explanation) {
338
+ md += `${code.explanation}\n\n`;
339
+ }
340
+ md += `**Before (Broken)**:\n`;
341
+ md += `\`\`\`${code.language}\n${code.beforeCode}\n\`\`\`\n\n`;
342
+ md += `**After (Fixed)**:\n`;
343
+ md += `\`\`\`${code.language}\n${code.afterCode}\n\`\`\`\n\n`;
344
+ if (code.notes && code.notes.length > 0) {
345
+ md += `**Notes**:\n`;
346
+ code.notes.forEach(note => {
347
+ md += `- ${note}\n`;
348
+ });
349
+ md += `\n`;
350
+ }
351
+ md += `**Estimated Time**: ${code.estimatedTime}\n\n`;
352
+ md += `---\n\n`;
353
+ });
354
+ }
355
+ // Automated Test Examples
356
+ md += `### ${sectionNumber}. Automated Test Suite (Playwright + axe-core)\n\n`;
357
+ sectionNumber++;
358
+ md += `Add this test to your CI/CD pipeline to prevent accessibility regressions:\n\n`;
359
+ md += `\`\`\`typescript
360
+ import { test, expect } from '@playwright/test';
361
+ import AxeBuilder from '@axe-core/playwright';
362
+
363
+ const URL = '${url}';
364
+
365
+ test.describe('Accessibility Tests', () => {
366
+ test('should have no WCAG 2.2 AA violations', async ({ page }) => {
367
+ await page.goto(URL);
368
+
369
+ const results = await new AxeBuilder({ page })
370
+ .withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
371
+ .analyze();
372
+
373
+ if (results.violations.length > 0) {
374
+ console.log('Violations:', results.violations.map(v => \`\${v.id}: \${v.nodes.length} elements\`));
375
+ }
376
+
377
+ expect(results.violations).toHaveLength(0);
378
+ });
379
+ ${videoViolations.length > 0 ? `
380
+ test('videos should have caption tracks', async ({ page }) => {
381
+ await page.goto(URL);
382
+
383
+ const videos = await page.locator('video').all();
384
+ for (const video of videos) {
385
+ const track = video.locator('track[kind="captions"]');
386
+ await expect(track).toHaveCount(1);
387
+ }
388
+ });
389
+ ` : ''}${ariaViolations.length > 0 ? `
390
+ test('no focus on aria-hidden elements', async ({ page }) => {
391
+ await page.goto(URL);
392
+
393
+ for (let i = 0; i < 30; i++) {
394
+ await page.keyboard.press('Tab');
395
+ const hiddenFocused = await page.evaluate(() =>
396
+ document.activeElement?.closest('[aria-hidden="true"]') !== null
397
+ );
398
+ expect(hiddenFocused).toBe(false);
399
+ }
400
+ });
401
+ ` : ''}});
402
+ \`\`\`
403
+
404
+ **Installation**:
405
+ \`\`\`bash
406
+ npm install -D @playwright/test @axe-core/playwright
407
+ \`\`\`
408
+
409
+ ---
410
+
411
+ `;
412
+ // CSS Utilities
413
+ md += `### ${sectionNumber}. Accessibility CSS Utilities\n\n`;
414
+ sectionNumber++;
415
+ const cssUtilities = (0, remediation_code_generator_js_1.generateAccessibilityCSSUtilities)();
416
+ md += `${cssUtilities.explanation}\n\n`;
417
+ md += `\`\`\`css\n${cssUtilities.afterCode}\n\`\`\`\n\n`;
418
+ if (cssUtilities.notes && cssUtilities.notes.length > 0) {
419
+ md += `**Notes**:\n`;
420
+ cssUtilities.notes.forEach(note => {
421
+ md += `- ${note}\n`;
422
+ });
423
+ md += `\n`;
424
+ }
425
+ md += `---\n\n`;
426
+ // Quick Reference
427
+ md += `### ${sectionNumber}. Quick Reference\n\n`;
428
+ md += `#### WCAG Violation Quick Reference\n\n`;
429
+ md += `| Issue | WCAG | Level | Typical Fix Time |\n`;
430
+ md += `|-------|------|-------|------------------|\n`;
431
+ md += `| Video captions | 1.2.2 | A | 4h per video |\n`;
432
+ md += `| Color contrast | 1.4.3 | AA | 2h |\n`;
433
+ md += `| ARIA focus | 4.1.2 | A | 30min per component |\n`;
434
+ md += `| Alt text | 1.1.1 | A | 15min per image |\n`;
435
+ md += `| Form labels | 1.3.1 | A | 15min per field |\n`;
436
+ md += `| Skip links | 2.4.1 | A | 1h |\n`;
437
+ md += `| Focus visible | 2.4.7 | AA | 1h |\n\n`;
438
+ md += `#### Screen Reader Test Commands\n\n`;
439
+ md += `| Reader | Platform | Start | Stop |\n`;
440
+ md += `|--------|----------|-------|------|\n`;
441
+ md += `| VoiceOver | macOS | Cmd+F5 | Cmd+F5 |\n`;
442
+ md += `| NVDA | Windows | Ctrl+Alt+N | Insert+Q |\n`;
443
+ md += `| TalkBack | Android | Settings > Accessibility | Same |\n`;
444
+ md += `| VoiceOver | iOS | Triple-click Home | Same |\n\n`;
445
+ return md;
446
+ }
447
+ function generateMarkdownReport(options) {
448
+ const { url, scanId, timestamp, violations, complianceScore, complianceStatus, level, pageLanguage = 'en', pageTitle = '', includeCodeExamples = true } = options;
449
+ const criticalCount = violations.filter(v => v.severity === 'critical').length;
450
+ const seriousCount = violations.filter(v => v.severity === 'serious').length;
451
+ const moderateCount = violations.filter(v => v.severity === 'moderate').length;
452
+ const minorCount = violations.filter(v => v.severity === 'minor').length;
453
+ let md = '';
454
+ // Header
455
+ md += `# 🔍 Accessibility Scan Report\n\n`;
456
+ md += `**URL**: ${url}\n`;
457
+ md += `**Scan ID**: ${scanId}\n`;
458
+ md += `**Date**: ${new Date(timestamp).toLocaleString()}\n`;
459
+ md += `**WCAG Level**: ${level}\n\n`;
460
+ // Summary
461
+ md += `## 📊 Summary\n\n`;
462
+ md += `- **Compliance Score**: ${complianceScore}/100\n`;
463
+ md += `- **Status**: ${complianceStatus.toUpperCase()}\n`;
464
+ md += `- **Total Violations**: ${violations.length}\n`;
465
+ md += ` - 🔴 Critical: ${criticalCount}\n`;
466
+ md += ` - 🟠 Serious: ${seriousCount}\n`;
467
+ md += ` - 🟡 Moderate: ${moderateCount}\n`;
468
+ md += ` - 🔵 Minor: ${minorCount}\n\n`;
469
+ md += `---\n\n`;
470
+ // Context-Aware Remediation Plan
471
+ md += generateRemediationPlan(violations, url);
472
+ md += `---\n\n`;
473
+ // Violations
474
+ md += `## ⚠️ Violations (${violations.length})\n\n`;
475
+ violations.forEach((violation, index) => {
476
+ const severityIcon = {
477
+ critical: '🔴',
478
+ serious: '🟠',
479
+ moderate: '🟡',
480
+ minor: '🔵'
481
+ }[violation.severity];
482
+ md += `### ${severityIcon} [${index + 1}] ${violation.description}\n\n`;
483
+ md += `**Severity**: ${violation.severity.toUpperCase()}\n`;
484
+ md += `**WCAG**: ${violation.wcagCriterion} (Level ${violation.wcagLevel})\n`;
485
+ md += `**Impact**: ${violation.impact}\n`;
486
+ md += `**Affected Users**: ${violation.userImpact?.affectedUserPercentage || 'Unknown'}% `;
487
+ md += `(${violation.userImpact?.disabilityTypes?.join(', ') || 'general'})\n\n`;
488
+ // Elements
489
+ if (violation.elements && violation.elements.length > 0) {
490
+ md += `**Affected Elements**: ${violation.elements.length}\n\n`;
491
+ violation.elements.slice(0, 3).forEach((el, i) => {
492
+ md += `<details>\n`;
493
+ md += `<summary>Element ${i + 1}: ${el.selector || 'Unknown selector'}</summary>\n\n`;
494
+ md += `\`\`\`html\n${el.html?.slice(0, 200) || 'No HTML available'}${el.html && el.html.length > 200 ? '...' : ''}\n\`\`\`\n\n`;
495
+ md += `</details>\n\n`;
496
+ });
497
+ if (violation.elements.length > 3) {
498
+ md += `_...and ${violation.elements.length - 3} more elements_\n\n`;
499
+ }
500
+ }
501
+ // Solution - Generate context-specific code fixes
502
+ md += `#### 🔧 Context-Specific Solution\n\n`;
503
+ // Generate remediation codes for this violation
504
+ const remediationCodes = (0, remediation_code_generator_js_1.generateRemediationCodes)(violation, { url, pageLanguage, pageTitle });
505
+ if (remediationCodes.length > 0) {
506
+ // Show the first (most relevant) code fix
507
+ const primaryFix = remediationCodes[0];
508
+ md += `**${primaryFix.title}**\n\n`;
509
+ if (primaryFix.explanation) {
510
+ md += `> ${primaryFix.explanation}\n\n`;
511
+ }
512
+ md += `**Before (Current):**\n`;
513
+ md += `\`\`\`${primaryFix.language}\n${primaryFix.beforeCode}\n\`\`\`\n\n`;
514
+ md += `**After (Fixed):**\n`;
515
+ md += `\`\`\`${primaryFix.language}\n${primaryFix.afterCode}\n\`\`\`\n\n`;
516
+ if (primaryFix.notes && primaryFix.notes.length > 0) {
517
+ md += `**Implementation Notes:**\n`;
518
+ primaryFix.notes.forEach(note => {
519
+ md += `- ${note}\n`;
520
+ });
521
+ md += '\n';
522
+ }
523
+ md += `**Estimated Fix Time:** ${primaryFix.estimatedTime}\n\n`;
524
+ }
525
+ else if (violation.howToFix && !violation.howToFix.startsWith('http')) {
526
+ // Use custom howToFix if it's actual code (not a URL)
527
+ md += `\`\`\`html\n${violation.howToFix}\n\`\`\`\n\n`;
528
+ }
529
+ else {
530
+ // Fallback to generic guidance
531
+ md += `_See WCAG guidelines for ${violation.wcagCriterion}_\n\n`;
532
+ if (violation.helpUrl) {
533
+ md += `📚 Reference: ${violation.helpUrl}\n\n`;
534
+ }
535
+ }
536
+ md += `---\n\n`;
537
+ });
538
+ // Detailed Code Examples (enabled by default)
539
+ if (includeCodeExamples && violations.length > 0) {
540
+ md += generateDetailedCodeExamples(violations, url, pageLanguage, pageTitle);
541
+ }
542
+ // Footer
543
+ md += `\n## 🤖 Generated by\n\n`;
544
+ md += `qe-a11y-ally Agent (Agentic QE Fleet)\n`;
545
+ md += `Scan Time: ${new Date(timestamp).toISOString()}\n`;
546
+ md += `\n**Features**: Context-aware remediation, Framework detection, Automated test generation\n`;
547
+ return md;
548
+ }
549
+ //# sourceMappingURL=markdown-report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-report-generator.js","sourceRoot":"","sources":["../../../../../src/mcp/tools/qe/accessibility/markdown-report-generator.ts"],"names":[],"mappings":"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"}