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.
- package/.claude/agents/qe-a11y-ally.md +751 -0
- package/.claude/agents/qx-partner.md +120 -4
- package/.claude/skills/testability-scoring/SKILL.md +107 -6
- package/CHANGELOG.md +86 -0
- package/README.md +7 -6
- package/dist/agents/AccessibilityAllyAgent.d.ts +168 -0
- package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -0
- package/dist/agents/AccessibilityAllyAgent.js +462 -0
- package/dist/agents/AccessibilityAllyAgent.js.map +1 -0
- package/dist/agents/SONAIntegration.d.ts +109 -0
- package/dist/agents/SONAIntegration.d.ts.map +1 -0
- package/dist/agents/SONAIntegration.js +167 -0
- package/dist/agents/SONAIntegration.js.map +1 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +93 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/cli/init/agents.js +1 -1
- package/dist/cli/init/claude-config.js +2 -2
- package/dist/cli/init/database-init.js +1 -1
- package/dist/core/cache/BinaryCacheImpl.d.ts +161 -0
- package/dist/core/cache/BinaryCacheImpl.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheImpl.js +685 -0
- package/dist/core/cache/BinaryCacheImpl.js.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts +244 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -1
- package/dist/core/cache/BinaryMetadataCache.js +63 -1
- package/dist/core/cache/BinaryMetadataCache.js.map +1 -1
- package/dist/core/cache/index.d.ts +1 -0
- package/dist/core/cache/index.d.ts.map +1 -1
- package/dist/core/cache/index.js +10 -1
- package/dist/core/cache/index.js.map +1 -1
- package/dist/core/memory/AgentDBService.d.ts +30 -4
- package/dist/core/memory/AgentDBService.d.ts.map +1 -1
- package/dist/core/memory/AgentDBService.js +122 -12
- package/dist/core/memory/AgentDBService.js.map +1 -1
- package/dist/core/memory/CachedHNSWVectorMemory.d.ts +153 -0
- package/dist/core/memory/CachedHNSWVectorMemory.d.ts.map +1 -0
- package/dist/core/memory/CachedHNSWVectorMemory.js +329 -0
- package/dist/core/memory/CachedHNSWVectorMemory.js.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.js +8 -2
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +50 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -1
- package/dist/core/memory/UnifiedMemoryCoordinator.js +206 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -1
- package/dist/core/memory/index.d.ts +2 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +8 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/optimization/RecursiveOptimizer.d.ts +233 -0
- package/dist/core/optimization/RecursiveOptimizer.d.ts.map +1 -0
- package/dist/core/optimization/RecursiveOptimizer.js +509 -0
- package/dist/core/optimization/RecursiveOptimizer.js.map +1 -0
- package/dist/core/strategies/SONALearningStrategy.d.ts +115 -0
- package/dist/core/strategies/SONALearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/SONALearningStrategy.js +656 -0
- package/dist/core/strategies/SONALearningStrategy.js.map +1 -0
- package/dist/core/strategies/TRMLearningStrategy.d.ts +162 -0
- package/dist/core/strategies/TRMLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/TRMLearningStrategy.js +670 -0
- package/dist/core/strategies/TRMLearningStrategy.js.map +1 -0
- package/dist/core/strategies/index.d.ts +10 -1
- package/dist/core/strategies/index.d.ts.map +1 -1
- package/dist/core/strategies/index.js +4 -1
- package/dist/core/strategies/index.js.map +1 -1
- package/dist/learning/SONAFeedbackLoop.d.ts +168 -0
- package/dist/learning/SONAFeedbackLoop.d.ts.map +1 -0
- package/dist/learning/SONAFeedbackLoop.js +344 -0
- package/dist/learning/SONAFeedbackLoop.js.map +1 -0
- package/dist/learning/baselines/BaselineCollector.d.ts +1 -1
- package/dist/learning/baselines/BaselineCollector.js +1 -1
- package/dist/learning/baselines/StandardTaskSuite.d.ts +1 -1
- package/dist/learning/baselines/StandardTaskSuite.js +1 -1
- package/dist/learning/index.d.ts +2 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +6 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +23 -16
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +6 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts +114 -0
- package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/accname-computation.js +566 -0
- package/dist/mcp/tools/qe/accessibility/accname-computation.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts +103 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.js +1028 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts +48 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js +565 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts +117 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js +571 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts +23 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.js +1152 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/index.d.ts +22 -0
- package/dist/mcp/tools/qe/accessibility/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/index.js +38 -0
- package/dist/mcp/tools/qe/accessibility/index.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts +18 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js +549 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts +139 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js +1300 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts +138 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js +1326 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts +50 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js +469 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts +193 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.js +511 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.js.map +1 -0
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +61 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/providers/HybridRouter.d.ts +34 -3
- package/dist/providers/HybridRouter.d.ts.map +1 -1
- package/dist/providers/HybridRouter.js +69 -4
- package/dist/providers/HybridRouter.js.map +1 -1
- package/dist/providers/LLMProviderFactory.d.ts +68 -1
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
- package/dist/providers/LLMProviderFactory.js +173 -6
- package/dist/providers/LLMProviderFactory.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +150 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/providers/OpenRouterProvider.js +545 -0
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/RuvllmProvider.d.ts +130 -16
- package/dist/providers/RuvllmProvider.d.ts.map +1 -1
- package/dist/providers/RuvllmProvider.js +399 -83
- package/dist/providers/RuvllmProvider.js.map +1 -1
- package/dist/providers/index.d.ts +33 -4
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +72 -21
- package/dist/providers/index.js.map +1 -1
- package/dist/telemetry/instrumentation/agent.d.ts +1 -1
- package/dist/telemetry/instrumentation/agent.js +1 -1
- package/dist/telemetry/instrumentation/index.d.ts +1 -1
- package/dist/telemetry/instrumentation/index.js +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/ruvllm.d.ts +97 -0
- package/dist/types/ruvllm.d.ts.map +1 -0
- package/dist/types/ruvllm.js +46 -0
- package/dist/types/ruvllm.js.map +1 -0
- package/dist/utils/ruvllm-loader.d.ts +94 -0
- package/dist/utils/ruvllm-loader.d.ts.map +1 -0
- package/dist/utils/ruvllm-loader.js +87 -0
- package/dist/utils/ruvllm-loader.js.map +1 -0
- package/docs/reference/agents.md +36 -1
- package/package.json +4 -2
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AccessibilityAllyAgent - Intelligent Accessibility Testing Agent
|
|
4
|
+
*
|
|
5
|
+
* Provides comprehensive WCAG 2.2 compliance testing with context-aware
|
|
6
|
+
* remediation recommendations, intelligent ARIA suggestions, and
|
|
7
|
+
* AI-powered video analysis for accessibility.
|
|
8
|
+
*
|
|
9
|
+
* Key Capabilities:
|
|
10
|
+
* - WCAG 2.2 Level A, AA, AAA validation using axe-core
|
|
11
|
+
* - Context-aware ARIA label generation based on element semantics
|
|
12
|
+
* - Intelligent remediation suggestions with code examples
|
|
13
|
+
* - Keyboard navigation and screen reader testing
|
|
14
|
+
* - Color contrast optimization with specific fix recommendations
|
|
15
|
+
* - AI video analysis with multi-provider cascade (OpenAI > Anthropic > Ollama > moondream)
|
|
16
|
+
* - WebVTT caption generation for videos
|
|
17
|
+
* - EN 301 549 EU compliance mapping
|
|
18
|
+
* - ARIA Authoring Practices Guide (APG) pattern suggestions
|
|
19
|
+
*
|
|
20
|
+
* @version 1.0.0
|
|
21
|
+
* @author Agentic QE Team
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
+
var ownKeys = function(o) {
|
|
41
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
+
__setModuleDefault(result, mod);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
})();
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.AccessibilityAllyAgent = void 0;
|
|
58
|
+
const BaseAgent_1 = require("./BaseAgent");
|
|
59
|
+
const types_1 = require("../types");
|
|
60
|
+
class ConsoleLogger {
|
|
61
|
+
info(message, ...args) {
|
|
62
|
+
console.log(`[A11Y-ALLY] [INFO] ${message}`, ...args);
|
|
63
|
+
}
|
|
64
|
+
warn(message, ...args) {
|
|
65
|
+
console.warn(`[A11Y-ALLY] [WARN] ${message}`, ...args);
|
|
66
|
+
}
|
|
67
|
+
error(message, ...args) {
|
|
68
|
+
console.error(`[A11Y-ALLY] [ERROR] ${message}`, ...args);
|
|
69
|
+
}
|
|
70
|
+
debug(message, ...args) {
|
|
71
|
+
console.debug(`[A11Y-ALLY] [DEBUG] ${message}`, ...args);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* AccessibilityAllyAgent - Intelligent accessibility testing with context-aware remediation
|
|
76
|
+
*/
|
|
77
|
+
class AccessibilityAllyAgent extends BaseAgent_1.BaseAgent {
|
|
78
|
+
constructor(config) {
|
|
79
|
+
const baseConfig = {
|
|
80
|
+
type: types_1.QEAgentType.ACCESSIBILITY_ALLY,
|
|
81
|
+
capabilities: AccessibilityAllyAgent.getDefaultCapabilities(),
|
|
82
|
+
context: config.context,
|
|
83
|
+
memoryStore: config.memoryStore,
|
|
84
|
+
eventBus: config.eventBus,
|
|
85
|
+
enableLearning: true
|
|
86
|
+
};
|
|
87
|
+
super(baseConfig);
|
|
88
|
+
this.logger = new ConsoleLogger();
|
|
89
|
+
this.agentConfig = {
|
|
90
|
+
wcagLevel: config.wcagLevel || 'AA',
|
|
91
|
+
enableVisionAPI: config.enableVisionAPI ?? true,
|
|
92
|
+
visionProvider: config.visionProvider || 'ollama',
|
|
93
|
+
ollamaBaseUrl: config.ollamaBaseUrl || 'http://localhost:11434',
|
|
94
|
+
ollamaModel: config.ollamaModel || 'llava',
|
|
95
|
+
contextAwareRemediation: config.contextAwareRemediation ?? true,
|
|
96
|
+
generateHTMLReport: config.generateHTMLReport ?? false,
|
|
97
|
+
generateMarkdownReport: config.generateMarkdownReport ?? true,
|
|
98
|
+
thresholds: config.thresholds || {
|
|
99
|
+
minComplianceScore: 85,
|
|
100
|
+
maxCriticalViolations: 0,
|
|
101
|
+
maxSeriousViolations: 3
|
|
102
|
+
},
|
|
103
|
+
euCompliance: config.euCompliance || {
|
|
104
|
+
enabled: true,
|
|
105
|
+
en301549Mapping: true,
|
|
106
|
+
euAccessibilityAct: true
|
|
107
|
+
},
|
|
108
|
+
...config
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get default capabilities for AccessibilityAllyAgent
|
|
113
|
+
*/
|
|
114
|
+
static getDefaultCapabilities() {
|
|
115
|
+
return [
|
|
116
|
+
{
|
|
117
|
+
name: 'wcag-2.2-validation',
|
|
118
|
+
version: '1.0.0',
|
|
119
|
+
description: 'Comprehensive WCAG 2.2 compliance testing (Level A, AA, AAA)'
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'context-aware-remediation',
|
|
123
|
+
version: '1.0.0',
|
|
124
|
+
description: 'Intelligent remediation suggestions with context-specific code examples'
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'aria-intelligence',
|
|
128
|
+
version: '1.0.0',
|
|
129
|
+
description: 'Smart ARIA label generation based on element semantics and context'
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'video-accessibility-analysis',
|
|
133
|
+
version: '1.0.0',
|
|
134
|
+
description: 'AI-powered video analysis with multi-provider cascade (FREE with Ollama)'
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'webvtt-generation',
|
|
138
|
+
version: '1.0.0',
|
|
139
|
+
description: 'Automatic WebVTT caption file generation with detailed scene descriptions'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'en301549-compliance',
|
|
143
|
+
version: '1.0.0',
|
|
144
|
+
description: 'EN 301 549 EU accessibility standard compliance mapping'
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'apg-pattern-suggestions',
|
|
148
|
+
version: '1.0.0',
|
|
149
|
+
description: 'ARIA Authoring Practices Guide pattern recommendations'
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'keyboard-navigation-testing',
|
|
153
|
+
version: '1.0.0',
|
|
154
|
+
description: 'Keyboard navigation path validation and focus management'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'color-contrast-optimization',
|
|
158
|
+
version: '1.0.0',
|
|
159
|
+
description: 'Color contrast analysis with specific fix recommendations'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: 'learning-integration',
|
|
163
|
+
version: '1.0.0',
|
|
164
|
+
description: 'Learn from remediation feedback to improve future recommendations'
|
|
165
|
+
}
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Initialize agent-specific components
|
|
170
|
+
*/
|
|
171
|
+
async initializeComponents() {
|
|
172
|
+
this.logger.info(`AccessibilityAllyAgent initializing with WCAG Level ${this.agentConfig.wcagLevel}`);
|
|
173
|
+
this.logger.info(`Vision API: ${this.agentConfig.enableVisionAPI ? 'enabled' : 'disabled'} (provider: ${this.agentConfig.visionProvider})`);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Load domain knowledge for accessibility testing
|
|
177
|
+
*/
|
|
178
|
+
async loadKnowledge() {
|
|
179
|
+
this.logger.debug('Loading accessibility testing knowledge base');
|
|
180
|
+
// Knowledge is primarily loaded via the accessibility-testing skill
|
|
181
|
+
// and the embedded axe-core rules
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Perform the actual accessibility task
|
|
185
|
+
*/
|
|
186
|
+
async performTask(task) {
|
|
187
|
+
const taskType = task.type;
|
|
188
|
+
this.logger.info(`Performing accessibility task: ${taskType}`);
|
|
189
|
+
try {
|
|
190
|
+
switch (taskType) {
|
|
191
|
+
case 'scan':
|
|
192
|
+
case 'scan-comprehensive':
|
|
193
|
+
return await this.executeScan(task);
|
|
194
|
+
case 'generate-remediations':
|
|
195
|
+
return await this.generateRemediations(task);
|
|
196
|
+
case 'analyze-video':
|
|
197
|
+
return await this.analyzeVideo(task);
|
|
198
|
+
case 'generate-webvtt':
|
|
199
|
+
return await this.generateWebVTT(task);
|
|
200
|
+
case 'check-compliance':
|
|
201
|
+
return await this.checkCompliance(task);
|
|
202
|
+
case 'analyze-keyboard-nav':
|
|
203
|
+
return await this.analyzeKeyboardNavigation(task);
|
|
204
|
+
case 'generate-aria-labels':
|
|
205
|
+
return await this.generateAriaLabels(task);
|
|
206
|
+
default:
|
|
207
|
+
// Default to comprehensive scan
|
|
208
|
+
return await this.executeScan(task);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
this.logger.error(`Task ${taskType} failed:`, error);
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Cleanup agent resources
|
|
218
|
+
*/
|
|
219
|
+
async cleanup() {
|
|
220
|
+
this.logger.info('Cleaning up AccessibilityAllyAgent resources');
|
|
221
|
+
// No specific cleanup needed for this agent
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Execute a comprehensive accessibility scan
|
|
225
|
+
*/
|
|
226
|
+
async executeScan(task) {
|
|
227
|
+
const payload = task.payload || {};
|
|
228
|
+
const url = payload.url || payload.target;
|
|
229
|
+
if (!url) {
|
|
230
|
+
throw new Error('URL is required for accessibility scan');
|
|
231
|
+
}
|
|
232
|
+
this.logger.info(`Starting comprehensive scan for: ${url}`);
|
|
233
|
+
// Import the scan function dynamically to avoid circular dependencies
|
|
234
|
+
const { scanComprehensive } = await Promise.resolve().then(() => __importStar(require('../mcp/tools/qe/accessibility/scan-comprehensive.js')));
|
|
235
|
+
const result = await scanComprehensive({
|
|
236
|
+
url,
|
|
237
|
+
level: payload.level || this.agentConfig.wcagLevel || 'AA',
|
|
238
|
+
options: {
|
|
239
|
+
includeContext: this.agentConfig.contextAwareRemediation,
|
|
240
|
+
generateMarkdownReport: this.agentConfig.generateMarkdownReport,
|
|
241
|
+
generateHTMLReport: this.agentConfig.generateHTMLReport,
|
|
242
|
+
enableVisionAPI: this.agentConfig.enableVisionAPI,
|
|
243
|
+
visionProvider: this.agentConfig.visionProvider,
|
|
244
|
+
ollamaBaseUrl: this.agentConfig.ollamaBaseUrl,
|
|
245
|
+
ollamaModel: this.agentConfig.ollamaModel,
|
|
246
|
+
...payload.options
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
// Extract data from QEToolResponse
|
|
250
|
+
const data = result.data;
|
|
251
|
+
// Store results in memory for learning
|
|
252
|
+
if (this.memoryStore && data) {
|
|
253
|
+
await this.memoryStore.store(`aqe/accessibility/scan-results/${data.scanId || 'unknown'}`, {
|
|
254
|
+
timestamp: Date.now(),
|
|
255
|
+
url,
|
|
256
|
+
compliance: data.compliance,
|
|
257
|
+
violationCount: data.summary?.total || 0
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
scanId: data?.scanId || 'unknown',
|
|
262
|
+
url,
|
|
263
|
+
compliance: data?.compliance || {
|
|
264
|
+
status: 'non-compliant',
|
|
265
|
+
score: 0,
|
|
266
|
+
level: this.agentConfig.wcagLevel || 'AA',
|
|
267
|
+
productionReady: false
|
|
268
|
+
},
|
|
269
|
+
violations: {
|
|
270
|
+
total: data?.summary?.total || 0,
|
|
271
|
+
critical: data?.summary?.critical || 0,
|
|
272
|
+
serious: data?.summary?.serious || 0,
|
|
273
|
+
moderate: data?.summary?.moderate || 0,
|
|
274
|
+
minor: data?.summary?.minor || 0,
|
|
275
|
+
details: data?.violations || []
|
|
276
|
+
},
|
|
277
|
+
remediations: data?.remediations,
|
|
278
|
+
performance: data?.performance || {
|
|
279
|
+
scanTime: 0,
|
|
280
|
+
elementsAnalyzed: 0
|
|
281
|
+
},
|
|
282
|
+
reportPath: data?.htmlReportPath
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Generate context-aware remediations for violations
|
|
287
|
+
*/
|
|
288
|
+
async generateRemediations(task) {
|
|
289
|
+
const payload = task.payload || {};
|
|
290
|
+
const violations = payload.violations || [];
|
|
291
|
+
this.logger.info(`Generating remediations for ${violations.length} violations`);
|
|
292
|
+
// Generate remediations based on violation patterns
|
|
293
|
+
const remediations = violations.map((violation) => ({
|
|
294
|
+
violationId: violation.id,
|
|
295
|
+
wcagCriterion: violation.wcagCriterion,
|
|
296
|
+
recommendation: this.getRemediationRecommendation(violation),
|
|
297
|
+
codeExample: this.generateCodeExample(violation),
|
|
298
|
+
effort: this.estimateRemediationEffort(violation)
|
|
299
|
+
}));
|
|
300
|
+
return {
|
|
301
|
+
success: true,
|
|
302
|
+
remediationsGenerated: remediations.length,
|
|
303
|
+
remediations
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Get remediation recommendation for a violation
|
|
308
|
+
*/
|
|
309
|
+
getRemediationRecommendation(violation) {
|
|
310
|
+
const recommendations = {
|
|
311
|
+
'color-contrast': 'Increase the color contrast ratio to meet WCAG requirements',
|
|
312
|
+
'label': 'Add a visible label or aria-label to the form control',
|
|
313
|
+
'image-alt': 'Add descriptive alt text that conveys the image content',
|
|
314
|
+
'link-name': 'Add descriptive text content or aria-label to the link',
|
|
315
|
+
'button-name': 'Add visible text content or aria-label to the button'
|
|
316
|
+
};
|
|
317
|
+
return recommendations[violation.id] || 'Review and fix the accessibility issue';
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Generate code example for fixing a violation
|
|
321
|
+
*/
|
|
322
|
+
generateCodeExample(violation) {
|
|
323
|
+
// Simple code example generation
|
|
324
|
+
if (violation.elements && violation.elements[0]) {
|
|
325
|
+
const element = violation.elements[0];
|
|
326
|
+
return `<!-- Current: ${element.html || 'N/A'} -->\n<!-- Recommended: Add appropriate ARIA attributes -->`;
|
|
327
|
+
}
|
|
328
|
+
return '<!-- See violation details for specific fix -->';
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Estimate remediation effort
|
|
332
|
+
*/
|
|
333
|
+
estimateRemediationEffort(violation) {
|
|
334
|
+
const effortMap = {
|
|
335
|
+
critical: 'High - 2-4 hours',
|
|
336
|
+
serious: 'Medium - 1-2 hours',
|
|
337
|
+
moderate: 'Low - 30 minutes',
|
|
338
|
+
minor: 'Trivial - 15 minutes'
|
|
339
|
+
};
|
|
340
|
+
return effortMap[violation.severity] || 'Medium - 1 hour';
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Analyze video content for accessibility
|
|
344
|
+
*/
|
|
345
|
+
async analyzeVideo(task) {
|
|
346
|
+
const payload = task.payload || {};
|
|
347
|
+
const videoUrl = payload.url || payload.videoUrl;
|
|
348
|
+
if (!videoUrl) {
|
|
349
|
+
throw new Error('Video URL is required for video analysis');
|
|
350
|
+
}
|
|
351
|
+
this.logger.info(`Analyzing video: ${videoUrl}`);
|
|
352
|
+
// Import video analyzer
|
|
353
|
+
const { analyzeVideoWithVision } = await Promise.resolve().then(() => __importStar(require('../mcp/tools/qe/accessibility/video-vision-analyzer.js')));
|
|
354
|
+
// Note: analyzeVideoWithVision expects frames, not URL directly
|
|
355
|
+
// This is a simplified implementation that would need frame extraction first
|
|
356
|
+
return {
|
|
357
|
+
success: true,
|
|
358
|
+
videoUrl,
|
|
359
|
+
message: 'Video analysis requires frame extraction. Use scan-comprehensive with enableVisionAPI for full video analysis.',
|
|
360
|
+
recommendation: 'Run a comprehensive scan with video analysis enabled to get detailed frame-by-frame descriptions'
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Generate WebVTT caption file from video analysis
|
|
365
|
+
*/
|
|
366
|
+
async generateWebVTT(task) {
|
|
367
|
+
const payload = task.payload || {};
|
|
368
|
+
const frameDescriptions = payload.frameDescriptions || [];
|
|
369
|
+
this.logger.info(`Generating WebVTT for ${frameDescriptions.length} frames`);
|
|
370
|
+
// Import WebVTT generator
|
|
371
|
+
const { generateWebVTT } = await Promise.resolve().then(() => __importStar(require('../mcp/tools/qe/accessibility/webvtt-generator.js')));
|
|
372
|
+
const webvtt = generateWebVTT(frameDescriptions);
|
|
373
|
+
return {
|
|
374
|
+
success: true,
|
|
375
|
+
frameCount: frameDescriptions.length,
|
|
376
|
+
webvtt
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Check compliance status against thresholds
|
|
381
|
+
*/
|
|
382
|
+
async checkCompliance(task) {
|
|
383
|
+
const payload = task.payload || {};
|
|
384
|
+
const scanResult = payload.scanResult;
|
|
385
|
+
if (!scanResult) {
|
|
386
|
+
throw new Error('Scan result is required for compliance check');
|
|
387
|
+
}
|
|
388
|
+
const thresholds = this.agentConfig.thresholds || {};
|
|
389
|
+
const minScore = thresholds.minComplianceScore || 85;
|
|
390
|
+
const maxCritical = thresholds.maxCriticalViolations || 0;
|
|
391
|
+
const maxSerious = thresholds.maxSeriousViolations || 3;
|
|
392
|
+
const score = scanResult.compliance?.score || 0;
|
|
393
|
+
const critical = scanResult.summary?.critical || 0;
|
|
394
|
+
const serious = scanResult.summary?.serious || 0;
|
|
395
|
+
const passes = score >= minScore && critical <= maxCritical && serious <= maxSerious;
|
|
396
|
+
return {
|
|
397
|
+
success: true,
|
|
398
|
+
passes,
|
|
399
|
+
details: {
|
|
400
|
+
score: { actual: score, required: minScore, passes: score >= minScore },
|
|
401
|
+
criticalViolations: {
|
|
402
|
+
actual: critical,
|
|
403
|
+
maxAllowed: maxCritical,
|
|
404
|
+
passes: critical <= maxCritical
|
|
405
|
+
},
|
|
406
|
+
seriousViolations: {
|
|
407
|
+
actual: serious,
|
|
408
|
+
maxAllowed: maxSerious,
|
|
409
|
+
passes: serious <= maxSerious
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
recommendation: passes
|
|
413
|
+
? 'Application meets accessibility compliance thresholds'
|
|
414
|
+
: 'Application does not meet accessibility compliance thresholds - remediation required'
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Analyze keyboard navigation paths
|
|
419
|
+
*/
|
|
420
|
+
async analyzeKeyboardNavigation(task) {
|
|
421
|
+
const payload = task.payload || {};
|
|
422
|
+
const url = payload.url;
|
|
423
|
+
if (!url) {
|
|
424
|
+
throw new Error('URL is required for keyboard navigation analysis');
|
|
425
|
+
}
|
|
426
|
+
this.logger.info(`Analyzing keyboard navigation for: ${url}`);
|
|
427
|
+
// This would use Playwright to test keyboard navigation
|
|
428
|
+
// For now, return a placeholder indicating the capability
|
|
429
|
+
return {
|
|
430
|
+
success: true,
|
|
431
|
+
url,
|
|
432
|
+
analysis: {
|
|
433
|
+
focusOrder: 'Analysis pending - requires Playwright browser automation',
|
|
434
|
+
keyboardTraps: [],
|
|
435
|
+
skipLinks: [],
|
|
436
|
+
focusIndicators: []
|
|
437
|
+
},
|
|
438
|
+
message: 'Full keyboard navigation analysis available via scan-comprehensive with keyboard option'
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Generate intelligent ARIA labels for elements
|
|
443
|
+
*/
|
|
444
|
+
async generateAriaLabels(task) {
|
|
445
|
+
const payload = task.payload || {};
|
|
446
|
+
const elements = payload.elements || [];
|
|
447
|
+
this.logger.info(`Generating ARIA labels for ${elements.length} elements`);
|
|
448
|
+
// Import AccName computation
|
|
449
|
+
const { generateAccessibleNameRecommendation } = await Promise.resolve().then(() => __importStar(require('../mcp/tools/qe/accessibility/accname-computation.js')));
|
|
450
|
+
const recommendations = elements.map((element) => {
|
|
451
|
+
return generateAccessibleNameRecommendation(element, element.context || {});
|
|
452
|
+
});
|
|
453
|
+
return {
|
|
454
|
+
success: true,
|
|
455
|
+
elementCount: elements.length,
|
|
456
|
+
recommendations
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
exports.AccessibilityAllyAgent = AccessibilityAllyAgent;
|
|
461
|
+
exports.default = AccessibilityAllyAgent;
|
|
462
|
+
//# sourceMappingURL=AccessibilityAllyAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessibilityAllyAgent.js","sourceRoot":"","sources":["../../src/agents/AccessibilityAllyAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SONA Integration for QE Agents
|
|
3
|
+
*
|
|
4
|
+
* Provides easy-to-use factory functions and utilities for integrating
|
|
5
|
+
* SONA (Self-Organizing Neural Architecture) learning into QE agents.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createSONAEnabledAgent, withSONALearning } from './agents/SONAIntegration';
|
|
10
|
+
*
|
|
11
|
+
* // Create a new SONA-enabled agent
|
|
12
|
+
* const agent = await createSONAEnabledAgent('test-generator', {
|
|
13
|
+
* enableSONA: true,
|
|
14
|
+
* enableFeedbackLoop: true,
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Or enhance an existing agent with SONA
|
|
18
|
+
* const enhancedAgent = withSONALearning(existingAgent);
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @module agents/SONAIntegration
|
|
22
|
+
* @version 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
import { SONALearningStrategy, type SONALearningConfig } from '../core/strategies/SONALearningStrategy';
|
|
25
|
+
import { SONAFeedbackLoop, type FeedbackLoopConfig, type FeedbackEvent } from '../learning/SONAFeedbackLoop';
|
|
26
|
+
import type { AgentLearningStrategy, LearnedPattern } from '../core/strategies';
|
|
27
|
+
/**
|
|
28
|
+
* SONA integration configuration
|
|
29
|
+
*/
|
|
30
|
+
export interface SONAIntegrationConfig {
|
|
31
|
+
/** Enable SONA adaptive learning */
|
|
32
|
+
enableSONA?: boolean;
|
|
33
|
+
/** Enable continuous feedback loop */
|
|
34
|
+
enableFeedbackLoop?: boolean;
|
|
35
|
+
/** MicroLoRA rank (1-2 for instant adaptation) */
|
|
36
|
+
microLoraRank?: number;
|
|
37
|
+
/** BaseLoRA rank (4-16 for long-term learning) */
|
|
38
|
+
baseLoraRank?: number;
|
|
39
|
+
/** Consolidation interval (default: 100 tasks) */
|
|
40
|
+
consolidationInterval?: number;
|
|
41
|
+
/** Maximum patterns to store */
|
|
42
|
+
maxPatterns?: number;
|
|
43
|
+
/** Feedback loop configuration */
|
|
44
|
+
feedbackConfig?: FeedbackLoopConfig;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* SONA-enabled agent context
|
|
48
|
+
*/
|
|
49
|
+
export interface SONAAgentContext {
|
|
50
|
+
/** Learning strategy */
|
|
51
|
+
strategy: SONALearningStrategy;
|
|
52
|
+
/** Feedback loop (if enabled) */
|
|
53
|
+
feedbackLoop?: SONAFeedbackLoop;
|
|
54
|
+
/** Record execution and provide feedback */
|
|
55
|
+
recordExecution: (event: FeedbackEvent) => Promise<void>;
|
|
56
|
+
/** Get learning status */
|
|
57
|
+
getStatus: () => ReturnType<SONALearningStrategy['getStatus']>;
|
|
58
|
+
/** Get metrics - returns SONAMetrics via Promise */
|
|
59
|
+
getMetrics: () => ReturnType<SONALearningStrategy['getMetrics']>;
|
|
60
|
+
/** Train the model - returns TrainingResult via Promise */
|
|
61
|
+
train: (iterations?: number) => ReturnType<SONALearningStrategy['train']>;
|
|
62
|
+
/** Store a pattern */
|
|
63
|
+
storePattern: (pattern: LearnedPattern) => Promise<void>;
|
|
64
|
+
/** Find similar patterns */
|
|
65
|
+
findSimilar: (embedding: number[], limit?: number) => Promise<LearnedPattern[]>;
|
|
66
|
+
/** Clean up resources */
|
|
67
|
+
shutdown: () => Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a SONA-enabled agent context
|
|
71
|
+
*
|
|
72
|
+
* This creates all the necessary SONA components and wires them together.
|
|
73
|
+
* The returned context provides a simple API for agents to use SONA.
|
|
74
|
+
*/
|
|
75
|
+
export declare function createSONAContext(config?: SONAIntegrationConfig): Promise<SONAAgentContext>;
|
|
76
|
+
/**
|
|
77
|
+
* Decorator/wrapper to add SONA learning to any agent
|
|
78
|
+
*
|
|
79
|
+
* This can be used to enhance existing agents with SONA capabilities
|
|
80
|
+
* without modifying their implementation.
|
|
81
|
+
*/
|
|
82
|
+
export declare function withSONALearning<T extends {
|
|
83
|
+
id: string;
|
|
84
|
+
type: string;
|
|
85
|
+
}>(agent: T, config?: SONAIntegrationConfig): T & {
|
|
86
|
+
sonaContext: SONAAgentContext | null;
|
|
87
|
+
initSONA: () => Promise<void>;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Check if SONA components are available
|
|
91
|
+
*/
|
|
92
|
+
export declare function isSONAAvailable(): Promise<{
|
|
93
|
+
available: boolean;
|
|
94
|
+
ruvllmAvailable: boolean;
|
|
95
|
+
reason?: string;
|
|
96
|
+
}>;
|
|
97
|
+
/**
|
|
98
|
+
* Get recommended SONA configuration based on environment
|
|
99
|
+
*/
|
|
100
|
+
export declare function getRecommendedConfig(): Promise<SONAIntegrationConfig>;
|
|
101
|
+
/**
|
|
102
|
+
* Quick start helper - creates a fully configured SONA context with defaults
|
|
103
|
+
*/
|
|
104
|
+
export declare function quickStartSONA(): Promise<SONAAgentContext>;
|
|
105
|
+
/**
|
|
106
|
+
* Export strategy factory for use in agent configuration
|
|
107
|
+
*/
|
|
108
|
+
export declare function createLearningStrategyFactory(config?: SONALearningConfig): () => AgentLearningStrategy;
|
|
109
|
+
//# sourceMappingURL=SONAIntegration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SONAIntegration.d.ts","sourceRoot":"","sources":["../../src/agents/SONAIntegration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EACL,oBAAoB,EAEpB,KAAK,kBAAkB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,gBAAgB,EAEhB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIhF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,iCAAiC;IACjC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,4CAA4C;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,0BAA0B;IAC1B,SAAS,EAAE,MAAM,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/D,oDAAoD;IACpD,UAAU,EAAE,MAAM,UAAU,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;IACjE,2DAA2D;IAC3D,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,sBAAsB;IACtB,YAAY,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,4BAA4B;IAC5B,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAChF,yBAAyB;IACzB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAID;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,GAAE,qBAA0B,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA0E3B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACrE,KAAK,EAAE,CAAC,EACR,MAAM,GAAE,qBAA0B,GACjC,CAAC,GAAG;IAAE,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAc7E;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAUD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAuB3E;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,GAAE,kBAAuB,GAC9B,MAAM,qBAAqB,CAE7B"}
|