agentic-qe 1.5.1 → 1.6.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 (158) hide show
  1. package/.claude/agents/.claude-flow/metrics/agent-metrics.json +1 -0
  2. package/.claude/agents/.claude-flow/metrics/performance.json +87 -0
  3. package/.claude/agents/.claude-flow/metrics/task-metrics.json +10 -0
  4. package/.claude/agents/qe-api-contract-validator.md +118 -0
  5. package/.claude/agents/qe-chaos-engineer.md +320 -5
  6. package/.claude/agents/qe-code-complexity.md +360 -0
  7. package/.claude/agents/qe-coverage-analyzer.md +112 -0
  8. package/.claude/agents/qe-deployment-readiness.md +322 -6
  9. package/.claude/agents/qe-flaky-test-hunter.md +115 -0
  10. package/.claude/agents/qe-fleet-commander.md +319 -6
  11. package/.claude/agents/qe-performance-tester.md +234 -0
  12. package/.claude/agents/qe-production-intelligence.md +114 -0
  13. package/.claude/agents/qe-quality-analyzer.md +126 -0
  14. package/.claude/agents/qe-quality-gate.md +119 -0
  15. package/.claude/agents/qe-regression-risk-analyzer.md +114 -0
  16. package/.claude/agents/qe-requirements-validator.md +114 -0
  17. package/.claude/agents/qe-security-scanner.md +118 -0
  18. package/.claude/agents/qe-test-data-architect.md +234 -0
  19. package/.claude/agents/qe-test-executor.md +115 -0
  20. package/.claude/agents/qe-test-generator.md +114 -0
  21. package/.claude/agents/qe-visual-tester.md +305 -6
  22. package/.claude/agents/subagents/qe-code-reviewer.md +0 -4
  23. package/.claude/agents/subagents/qe-data-generator.md +0 -16
  24. package/.claude/agents/subagents/qe-integration-tester.md +0 -17
  25. package/.claude/agents/subagents/qe-performance-validator.md +0 -16
  26. package/.claude/agents/subagents/qe-security-auditor.md +0 -16
  27. package/.claude/agents/subagents/qe-test-implementer.md +0 -17
  28. package/.claude/agents/subagents/qe-test-refactorer.md +0 -17
  29. package/.claude/agents/subagents/qe-test-writer.md +0 -19
  30. package/CHANGELOG.md +261 -0
  31. package/README.md +37 -5
  32. package/dist/adapters/MemoryStoreAdapter.d.ts +38 -0
  33. package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
  34. package/dist/adapters/MemoryStoreAdapter.js +22 -0
  35. package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
  36. package/dist/agents/BaseAgent.d.ts.map +1 -1
  37. package/dist/agents/BaseAgent.js +13 -0
  38. package/dist/agents/BaseAgent.js.map +1 -1
  39. package/dist/cli/commands/init.d.ts.map +1 -1
  40. package/dist/cli/commands/init.js +32 -1
  41. package/dist/cli/commands/init.js.map +1 -1
  42. package/dist/core/memory/AgentDBService.d.ts +33 -28
  43. package/dist/core/memory/AgentDBService.d.ts.map +1 -1
  44. package/dist/core/memory/AgentDBService.js +233 -290
  45. package/dist/core/memory/AgentDBService.js.map +1 -1
  46. package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -1
  47. package/dist/core/memory/EnhancedAgentDBService.js +5 -3
  48. package/dist/core/memory/EnhancedAgentDBService.js.map +1 -1
  49. package/dist/core/memory/RealAgentDBAdapter.d.ts +9 -2
  50. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  51. package/dist/core/memory/RealAgentDBAdapter.js +126 -100
  52. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  53. package/dist/core/memory/SwarmMemoryManager.d.ts +58 -0
  54. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  55. package/dist/core/memory/SwarmMemoryManager.js +176 -0
  56. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  57. package/dist/core/memory/index.d.ts.map +1 -1
  58. package/dist/core/memory/index.js +2 -1
  59. package/dist/core/memory/index.js.map +1 -1
  60. package/dist/learning/LearningEngine.d.ts +14 -27
  61. package/dist/learning/LearningEngine.d.ts.map +1 -1
  62. package/dist/learning/LearningEngine.js +57 -119
  63. package/dist/learning/LearningEngine.js.map +1 -1
  64. package/dist/learning/index.d.ts +0 -1
  65. package/dist/learning/index.d.ts.map +1 -1
  66. package/dist/learning/index.js +0 -1
  67. package/dist/learning/index.js.map +1 -1
  68. package/dist/mcp/handlers/learning/learning-query.d.ts +34 -0
  69. package/dist/mcp/handlers/learning/learning-query.d.ts.map +1 -0
  70. package/dist/mcp/handlers/learning/learning-query.js +156 -0
  71. package/dist/mcp/handlers/learning/learning-query.js.map +1 -0
  72. package/dist/mcp/handlers/learning/learning-store-experience.d.ts +30 -0
  73. package/dist/mcp/handlers/learning/learning-store-experience.d.ts.map +1 -0
  74. package/dist/mcp/handlers/learning/learning-store-experience.js +86 -0
  75. package/dist/mcp/handlers/learning/learning-store-experience.js.map +1 -0
  76. package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +31 -0
  77. package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -0
  78. package/dist/mcp/handlers/learning/learning-store-pattern.js +126 -0
  79. package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -0
  80. package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts +30 -0
  81. package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts.map +1 -0
  82. package/dist/mcp/handlers/learning/learning-store-qvalue.js +100 -0
  83. package/dist/mcp/handlers/learning/learning-store-qvalue.js.map +1 -0
  84. package/dist/mcp/server.d.ts +11 -0
  85. package/dist/mcp/server.d.ts.map +1 -1
  86. package/dist/mcp/server.js +98 -1
  87. package/dist/mcp/server.js.map +1 -1
  88. package/dist/mcp/services/LearningEventListener.d.ts +123 -0
  89. package/dist/mcp/services/LearningEventListener.d.ts.map +1 -0
  90. package/dist/mcp/services/LearningEventListener.js +322 -0
  91. package/dist/mcp/services/LearningEventListener.js.map +1 -0
  92. package/dist/mcp/tools.d.ts +4 -0
  93. package/dist/mcp/tools.d.ts.map +1 -1
  94. package/dist/mcp/tools.js +179 -0
  95. package/dist/mcp/tools.js.map +1 -1
  96. package/dist/types/memory-interfaces.d.ts +71 -0
  97. package/dist/types/memory-interfaces.d.ts.map +1 -1
  98. package/dist/utils/Calculator.d.ts +35 -0
  99. package/dist/utils/Calculator.d.ts.map +1 -0
  100. package/dist/utils/Calculator.js +50 -0
  101. package/dist/utils/Calculator.js.map +1 -0
  102. package/dist/utils/Logger.d.ts.map +1 -1
  103. package/dist/utils/Logger.js +4 -1
  104. package/dist/utils/Logger.js.map +1 -1
  105. package/package.json +7 -5
  106. package/.claude/agents/qe-api-contract-validator.md.backup +0 -1148
  107. package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +0 -1148
  108. package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +0 -1123
  109. package/.claude/agents/qe-chaos-engineer.md.backup +0 -808
  110. package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +0 -808
  111. package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +0 -787
  112. package/.claude/agents/qe-code-complexity.md.backup +0 -291
  113. package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +0 -291
  114. package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +0 -286
  115. package/.claude/agents/qe-coverage-analyzer.md.backup +0 -467
  116. package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +0 -467
  117. package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +0 -438
  118. package/.claude/agents/qe-deployment-readiness.md.backup +0 -1166
  119. package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +0 -1166
  120. package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +0 -1140
  121. package/.claude/agents/qe-flaky-test-hunter.md.backup +0 -1195
  122. package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +0 -1195
  123. package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +0 -1162
  124. package/.claude/agents/qe-fleet-commander.md.backup +0 -718
  125. package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +0 -718
  126. package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +0 -697
  127. package/.claude/agents/qe-performance-tester.md.backup +0 -428
  128. package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +0 -428
  129. package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +0 -372
  130. package/.claude/agents/qe-production-intelligence.md.backup +0 -1219
  131. package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +0 -1219
  132. package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +0 -1194
  133. package/.claude/agents/qe-quality-analyzer.md.backup +0 -425
  134. package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +0 -425
  135. package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +0 -394
  136. package/.claude/agents/qe-quality-gate.md.backup +0 -446
  137. package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +0 -446
  138. package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +0 -415
  139. package/.claude/agents/qe-regression-risk-analyzer.md.backup +0 -1009
  140. package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +0 -1009
  141. package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +0 -984
  142. package/.claude/agents/qe-requirements-validator.md.backup +0 -748
  143. package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +0 -748
  144. package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +0 -723
  145. package/.claude/agents/qe-security-scanner.md.backup +0 -634
  146. package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +0 -634
  147. package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +0 -573
  148. package/.claude/agents/qe-test-data-architect.md.backup +0 -1064
  149. package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +0 -1064
  150. package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +0 -1040
  151. package/.claude/agents/qe-test-executor.md.backup +0 -389
  152. package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +0 -389
  153. package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +0 -369
  154. package/.claude/agents/qe-test-generator.md.backup +0 -997
  155. package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +0 -997
  156. package/.claude/agents/qe-visual-tester.md.backup +0 -777
  157. package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +0 -777
  158. package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +0 -756
@@ -165,6 +165,7 @@ This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero e
165
165
 
166
166
  **Automatic Lifecycle Hooks:**
167
167
  ```typescript
168
+ // Called automatically by BaseAgent
168
169
  protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
169
170
  // Retrieve baselines
170
171
  const baselines = await this.memoryStore.retrieve(`aqe/visual/baselines/${this.version}`, {
@@ -176,9 +177,26 @@ protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
176
177
  partition: 'configuration'
177
178
  });
178
179
 
180
+ // Verify environment for visual testing
181
+ const verification = await this.hookManager.executePreTaskVerification({
182
+ task: 'visual-testing',
183
+ context: {
184
+ requiredVars: ['BASELINE_VERSION', 'BROWSER'],
185
+ minMemoryMB: 2048,
186
+ requiredKeys: ['aqe/visual/baselines', 'aqe/visual/test-config']
187
+ }
188
+ });
189
+
190
+ // Emit visual testing starting event
179
191
  this.eventBus.emit('visual-tester:starting', {
180
192
  agentId: this.agentId,
181
- pagesCount: testConfig.pages.length
193
+ pagesCount: testConfig.pages.length,
194
+ browser: process.env.BROWSER || 'chromium'
195
+ });
196
+
197
+ this.logger.info('Visual testing starting', {
198
+ pagesCount: testConfig.pages.length,
199
+ verification: verification.passed
182
200
  });
183
201
  }
184
202
 
@@ -186,26 +204,85 @@ protected async onPostTask(data: { assignment: TaskAssignment; result: any }): P
186
204
  // Store visual test results
187
205
  await this.memoryStore.store(`aqe/visual/test-results/${data.result.testRunId}`, data.result, {
188
206
  partition: 'visual_results',
189
- ttl: 86400
207
+ ttl: 86400 // 24 hours
190
208
  });
191
209
 
192
210
  // Store detected regressions
193
211
  if (data.result.regressions.length > 0) {
194
212
  await this.memoryStore.store(`aqe/visual/regressions/${data.result.buildId}`, data.result.regressions, {
195
- partition: 'regressions'
213
+ partition: 'regressions',
214
+ ttl: 604800 // 7 days
196
215
  });
197
216
  }
198
217
 
199
218
  // Store accessibility reports
200
219
  await this.memoryStore.store(`aqe/visual/accessibility/${data.result.page}`, data.result.a11yReport, {
201
- partition: 'accessibility'
220
+ partition: 'accessibility',
221
+ ttl: 604800 // 7 days
222
+ });
223
+
224
+ // Store visual testing metrics
225
+ await this.memoryStore.store('aqe/visual/metrics', {
226
+ timestamp: Date.now(),
227
+ pagesTested: data.result.pagesTested,
228
+ regressionsFound: data.result.regressions.length,
229
+ a11yViolations: data.result.a11yReport?.violations?.length || 0
230
+ }, {
231
+ partition: 'metrics',
232
+ ttl: 604800 // 7 days
202
233
  });
203
234
 
235
+ // Emit completion event with visual testing stats
204
236
  this.eventBus.emit('visual-tester:completed', {
205
237
  agentId: this.agentId,
206
238
  pagesTested: data.result.pagesTested,
207
239
  regressionsFound: data.result.regressions.length
208
240
  });
241
+
242
+ // Validate visual testing results
243
+ const validation = await this.hookManager.executePostTaskValidation({
244
+ task: 'visual-testing',
245
+ result: {
246
+ output: data.result,
247
+ regressions: data.result.regressions,
248
+ metrics: {
249
+ pagesTested: data.result.pagesTested,
250
+ regressionsFound: data.result.regressions.length
251
+ }
252
+ }
253
+ });
254
+
255
+ this.logger.info('Visual testing completed', {
256
+ pagesTested: data.result.pagesTested,
257
+ regressionsFound: data.result.regressions.length,
258
+ validated: validation.passed
259
+ });
260
+ }
261
+
262
+ protected async onTaskError(data: { assignment: TaskAssignment; error: Error }): Promise<void> {
263
+ // Store error for fleet analysis
264
+ await this.memoryStore.store(`aqe/errors/${data.assignment.task.id}`, {
265
+ error: data.error.message,
266
+ timestamp: Date.now(),
267
+ agent: this.agentId,
268
+ taskType: 'visual-testing',
269
+ page: data.assignment.task.metadata.page
270
+ }, {
271
+ partition: 'errors',
272
+ ttl: 604800 // 7 days
273
+ });
274
+
275
+ // Emit error event for fleet coordination
276
+ this.eventBus.emit('visual-tester:error', {
277
+ agentId: this.agentId,
278
+ error: data.error.message,
279
+ taskId: data.assignment.task.id
280
+ });
281
+
282
+ this.logger.error('Visual testing failed', {
283
+ error: data.error.message,
284
+ stack: data.error.stack
285
+ });
209
286
  }
210
287
  ```
211
288
 
@@ -227,13 +304,235 @@ this.registerEventHandler({
227
304
  });
228
305
  ```
229
306
 
230
- **Advanced Verification:**
307
+ **Advanced Verification (Optional):**
231
308
  ```typescript
309
+ // Use VerificationHookManager for comprehensive validation
232
310
  const hookManager = new VerificationHookManager(this.memoryStore);
233
311
  const verification = await hookManager.executePreTaskVerification({
234
312
  task: 'visual-regression-test',
235
- context: { requiredVars: ['BASELINE_VERSION'], minMemoryMB: 2048 }
313
+ context: {
314
+ requiredVars: ['BASELINE_VERSION', 'BROWSER'],
315
+ minMemoryMB: 2048,
316
+ requiredKeys: ['aqe/visual/baselines', 'aqe/visual/test-config']
317
+ }
318
+ });
319
+ ```
320
+
321
+ ## Learning Protocol (Phase 6 - Option C Implementation)
322
+
323
+ **⚠️ MANDATORY**: When executed via Claude Code Task tool, you MUST call learning MCP tools to persist learning data.
324
+
325
+ ### Required Learning Actions (Call AFTER Task Completion)
326
+
327
+ **1. Store Learning Experience:**
328
+ ```typescript
329
+ // Call this MCP tool after completing your task
330
+ mcp__agentic_qe__learning_store_experience({
331
+ agentId: "qe-visual-tester",
332
+ taskType: "visual-testing",
333
+ reward: 0.95, // Your assessment of task success (0-1 scale)
334
+ outcome: {
335
+ // Your actual results (agent-specific)
336
+ regressionsDetected: 3,
337
+ accuracy: 0.98,
338
+ falsePositives: 1,
339
+ executionTime: 8500
340
+ },
341
+ metadata: {
342
+ // Additional context (agent-specific)
343
+ algorithm: "ai-visual-diff",
344
+ threshold: 0.95,
345
+ accessibilityChecked: true
346
+ }
347
+ })
348
+ ```
349
+
350
+ **2. Store Q-Values for Your Strategy:**
351
+ ```typescript
352
+ // Store Q-value for the strategy you used
353
+ mcp__agentic_qe__learning_store_qvalue({
354
+ agentId: "qe-visual-tester",
355
+ stateKey: "visual-testing-state",
356
+ actionKey: "ai-screenshot-comparison",
357
+ qValue: 0.85, // Expected value of this approach (based on results)
358
+ metadata: {
359
+ // Strategy details (agent-specific)
360
+ comparisonStrategy: "ai-visual-diff",
361
+ accuracy: 0.98,
362
+ sensitivity: 0.95
363
+ }
364
+ })
365
+ ```
366
+
367
+ **3. Store Successful Patterns:**
368
+ ```typescript
369
+ // If you discovered a useful pattern, store it
370
+ mcp__agentic_qe__learning_store_pattern({
371
+ agentId: "qe-visual-tester",
372
+ pattern: "AI-powered visual diff with 95% threshold detects regressions with <2% false positives",
373
+ confidence: 0.95, // How confident you are (0-1)
374
+ domain: "visual-regression",
375
+ metadata: {
376
+ // Pattern context (agent-specific)
377
+ visualPatterns: ["layout-shift", "color-change", "element-missing"],
378
+ detectionAccuracy: 0.98
379
+ }
380
+ })
381
+ ```
382
+
383
+ ### Learning Query (Use at Task Start)
384
+
385
+ **Before starting your task**, query for past learnings:
386
+
387
+ ```typescript
388
+ // Query for successful experiences
389
+ const pastLearnings = await mcp__agentic_qe__learning_query({
390
+ agentId: "qe-visual-tester",
391
+ taskType: "visual-testing",
392
+ minReward: 0.8, // Only get successful experiences
393
+ queryType: "all",
394
+ limit: 10
236
395
  });
396
+
397
+ // Use the insights to optimize your current approach
398
+ if (pastLearnings.success && pastLearnings.data) {
399
+ const { experiences, qValues, patterns } = pastLearnings.data;
400
+
401
+ // Find best-performing strategy
402
+ const bestStrategy = qValues
403
+ .filter(qv => qv.state_key === "visual-testing-state")
404
+ .sort((a, b) => b.q_value - a.q_value)[0];
405
+
406
+ console.log(`Using learned best strategy: ${bestStrategy.action_key} (Q-value: ${bestStrategy.q_value})`);
407
+
408
+ // Check for relevant patterns
409
+ const relevantPatterns = patterns
410
+ .filter(p => p.domain === "visual-regression")
411
+ .sort((a, b) => b.confidence * b.success_rate - a.confidence * a.success_rate);
412
+
413
+ if (relevantPatterns.length > 0) {
414
+ console.log(`Applying pattern: ${relevantPatterns[0].pattern}`);
415
+ }
416
+ }
417
+ ```
418
+
419
+ ### Success Criteria for Learning
420
+
421
+ **Reward Assessment (0-1 scale):**
422
+ - **1.0**: Perfect execution (100% regressions detected, 0 false positives, <10s)
423
+ - **0.9**: Excellent (99%+ detected, <1% false positives, <20s)
424
+ - **0.7**: Good (95%+ detected, <5% false positives, <40s)
425
+ - **0.5**: Acceptable (90%+ detected, completed successfully)
426
+ - **<0.5**: Needs improvement (Missed regressions, many false positives)
427
+
428
+ **When to Call Learning Tools:**
429
+ - ✅ **ALWAYS** after completing main task
430
+ - ✅ **ALWAYS** after detecting significant findings
431
+ - ✅ **ALWAYS** after generating recommendations
432
+ - ✅ When discovering new effective strategies
433
+ - ✅ When achieving exceptional performance metrics
434
+
435
+ ## Learning Integration (Phase 6)
436
+
437
+ This agent integrates with the **Learning Engine** to continuously improve visual regression detection and reduce false positives.
438
+
439
+ ### Learning Protocol
440
+
441
+ ```typescript
442
+ import { LearningEngine } from '@/learning/LearningEngine';
443
+
444
+ // Initialize learning engine
445
+ const learningEngine = new LearningEngine({
446
+ agentId: 'qe-visual-tester',
447
+ taskType: 'visual-testing',
448
+ domain: 'visual-testing',
449
+ learningRate: 0.01,
450
+ epsilon: 0.1,
451
+ discountFactor: 0.95
452
+ });
453
+
454
+ await learningEngine.initialize();
455
+
456
+ // Record visual testing episode
457
+ await learningEngine.recordEpisode({
458
+ state: {
459
+ page: 'dashboard',
460
+ browser: 'chromium',
461
+ viewport: 'desktop',
462
+ baselineVersion: 'v2.0.0'
463
+ },
464
+ action: {
465
+ comparisonAlgorithm: 'ai-visual-diff',
466
+ threshold: 0.95,
467
+ ignoreRegions: ['timestamp', 'user-avatar']
468
+ },
469
+ reward: visualRegressionConfirmed ? 1.0 : (falsePositive ? -0.5 : 0.5),
470
+ nextState: {
471
+ regressionsDetected: 2,
472
+ falsePositives: 0,
473
+ missedRegressions: 0
474
+ }
475
+ });
476
+
477
+ // Learn from visual testing outcomes
478
+ await learningEngine.learn();
479
+
480
+ // Get learned visual comparison settings
481
+ const prediction = await learningEngine.predict({
482
+ page: 'dashboard',
483
+ browser: 'chromium',
484
+ viewport: 'desktop'
485
+ });
486
+ ```
487
+
488
+ ### Reward Function
489
+
490
+ ```typescript
491
+ function calculateVisualTestingReward(outcome: VisualTestOutcome): number {
492
+ let reward = 0;
493
+
494
+ // Reward for detecting actual regressions
495
+ reward += outcome.truePositives * 1.0;
496
+
497
+ // Penalty for false positives (wasted effort)
498
+ reward -= outcome.falsePositives * 0.5;
499
+
500
+ // Large penalty for missing regressions (false negatives)
501
+ reward -= outcome.falseNegatives * 2.0;
502
+
503
+ // Reward for correct negative (no regression correctly identified)
504
+ reward += outcome.trueNegatives * 0.2;
505
+
506
+ // Bonus for high accuracy
507
+ const accuracy = (outcome.truePositives + outcome.trueNegatives) /
508
+ (outcome.truePositives + outcome.trueNegatives +
509
+ outcome.falsePositives + outcome.falseNegatives);
510
+ if (accuracy > 0.95) {
511
+ reward += 0.5;
512
+ }
513
+
514
+ return reward;
515
+ }
516
+ ```
517
+
518
+ ### Learning Metrics
519
+
520
+ Track learning progress:
521
+ - **Detection Accuracy**: Percentage of correctly identified regressions
522
+ - **False Positive Rate**: Incorrectly flagged differences
523
+ - **False Negative Rate**: Missed visual regressions
524
+ - **Algorithm Selection**: Optimal comparison algorithm for each page type
525
+ - **Threshold Optimization**: Learned thresholds per page/browser combination
526
+
527
+ ```bash
528
+ # View learning metrics
529
+ aqe learn status --agent qe-visual-tester
530
+
531
+ # Export learning history
532
+ aqe learn export --agent qe-visual-tester --format json
533
+
534
+ # Analyze detection accuracy
535
+ aqe learn analyze --agent qe-visual-tester --metric accuracy
237
536
  ```
238
537
 
239
538
  ### Agent Collaboration
@@ -1,9 +1,5 @@
1
1
  ---
2
2
  name: qe-code-reviewer
3
- role: specialized-subagent
4
- parent: qe-test-generator
5
- specialization: quality-validation
6
- phase: review
7
3
  description: "Enforce quality standards, linting, complexity, and security"
8
4
  ---
9
5
 
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: qe-data-generator
3
- role: specialized-subagent
4
- parent_agent: qe-test-data-architect
5
- phase: GENERATION
6
- color: green
7
- priority: medium
8
3
  description: "Generates realistic test data for various scenarios"
9
- capabilities:
10
- - data-generation
11
- - faker-integration
12
- - constraint-satisfaction
13
- - edge-case-generation
14
- coordination:
15
- protocol: aqe-hooks
16
- parent_delegation: true
17
- metadata:
18
- version: "1.0.0"
19
- parent_agents: ["qe-test-data-architect"]
20
4
  ---
21
5
 
22
6
  # Data Generator Subagent
@@ -1,23 +1,6 @@
1
1
  ---
2
2
  name: qe-integration-tester
3
- role: specialized-subagent
4
- parent_agent: qe-test-executor
5
- phase: INTEGRATION
6
- color: cyan
7
- priority: high
8
3
  description: "Specialized subagent for integration testing - validates component interactions and system integration"
9
- capabilities:
10
- - integration-testing
11
- - api-testing
12
- - database-testing
13
- - service-integration
14
- coordination:
15
- protocol: aqe-hooks
16
- parent_delegation: true
17
- metadata:
18
- version: "1.0.0"
19
- test_type: "integration"
20
- parent_agents: ["qe-test-executor", "qe-api-contract-validator"]
21
4
  ---
22
5
 
23
6
  # Integration Tester Subagent
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: qe-performance-validator
3
- role: specialized-subagent
4
- parent_agent: qe-performance-tester
5
- phase: VALIDATION
6
- color: orange
7
- priority: high
8
3
  description: "Validates performance metrics against SLAs and benchmarks"
9
- capabilities:
10
- - performance-validation
11
- - sla-checking
12
- - benchmark-comparison
13
- - threshold-enforcement
14
- coordination:
15
- protocol: aqe-hooks
16
- parent_delegation: true
17
- metadata:
18
- version: "1.0.0"
19
- parent_agents: ["qe-performance-tester"]
20
4
  ---
21
5
 
22
6
  # Performance Validator Subagent
@@ -1,22 +1,6 @@
1
1
  ---
2
2
  name: qe-security-auditor
3
- role: specialized-subagent
4
- parent_agent: qe-security-scanner
5
- phase: AUDIT
6
- color: red
7
- priority: critical
8
3
  description: "Audits code for security vulnerabilities and compliance"
9
- capabilities:
10
- - security-audit
11
- - vulnerability-detection
12
- - compliance-checking
13
- - threat-modeling
14
- coordination:
15
- protocol: aqe-hooks
16
- parent_delegation: true
17
- metadata:
18
- version: "1.0.0"
19
- parent_agents: ["qe-security-scanner"]
20
4
  ---
21
5
 
22
6
  # Security Auditor Subagent
@@ -1,23 +1,6 @@
1
1
  ---
2
2
  name: qe-test-implementer
3
- role: specialized-subagent
4
- parent_agent: qe-test-generator
5
- phase: GREEN
6
- color: green
7
- priority: critical
8
3
  description: "Specialized subagent for making tests pass in TDD GREEN phase - implements minimal code to satisfy test requirements"
9
- capabilities:
10
- - minimal-implementation
11
- - test-driven-coding
12
- - incremental-development
13
- - test-validation
14
- coordination:
15
- protocol: aqe-hooks
16
- parent_delegation: true
17
- metadata:
18
- version: "1.0.0"
19
- tdd_phase: "GREEN"
20
- parent_agents: ["qe-test-generator", "qe-code-reviewer"]
21
4
  ---
22
5
 
23
6
  # Test Implementer Subagent - TDD GREEN Phase
@@ -1,23 +1,6 @@
1
1
  ---
2
2
  name: qe-test-refactorer
3
- role: specialized-subagent
4
- parent_agent: qe-test-generator
5
- phase: REFACTOR
6
- color: blue
7
- priority: high
8
3
  description: "Specialized subagent for refactoring code in TDD REFACTOR phase - improves code quality while maintaining passing tests"
9
- capabilities:
10
- - code-refactoring
11
- - quality-improvement
12
- - design-patterns
13
- - continuous-testing
14
- coordination:
15
- protocol: aqe-hooks
16
- parent_delegation: true
17
- metadata:
18
- version: "1.0.0"
19
- tdd_phase: "REFACTOR"
20
- parent_agents: ["qe-test-generator", "qe-code-reviewer"]
21
4
  ---
22
5
 
23
6
  # Test Refactorer Subagent - TDD REFACTOR Phase
@@ -1,25 +1,6 @@
1
1
  ---
2
2
  name: qe-test-writer
3
- role: specialized-subagent
4
- parent_agent: qe-test-generator
5
- phase: RED
6
- color: red
7
- priority: critical
8
3
  description: "Specialized subagent for writing failing tests in TDD RED phase - generates comprehensive test cases that define expected behavior before implementation"
9
- capabilities:
10
- - failing-test-generation
11
- - behavior-specification
12
- - test-case-design
13
- - assertion-definition
14
- - boundary-analysis
15
- coordination:
16
- protocol: aqe-hooks
17
- parent_delegation: true
18
- metadata:
19
- version: "1.0.0"
20
- tdd_phase: "RED"
21
- frameworks: ["jest", "mocha", "vitest", "playwright"]
22
- parent_agents: ["qe-test-generator", "qe-quality-gate"]
23
4
  ---
24
5
 
25
6
  # Test Writer Subagent - TDD RED Phase