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
@@ -0,0 +1,87 @@
1
+ {
2
+ "startTime": 1762879945127,
3
+ "sessionId": "session-1762879945127",
4
+ "lastActivity": 1762879945127,
5
+ "sessionDuration": 0,
6
+ "totalTasks": 1,
7
+ "successfulTasks": 1,
8
+ "failedTasks": 0,
9
+ "totalAgents": 0,
10
+ "activeAgents": 0,
11
+ "neuralEvents": 0,
12
+ "memoryMode": {
13
+ "reasoningbankOperations": 0,
14
+ "basicOperations": 0,
15
+ "autoModeSelections": 0,
16
+ "modeOverrides": 0,
17
+ "currentMode": "auto"
18
+ },
19
+ "operations": {
20
+ "store": {
21
+ "count": 0,
22
+ "totalDuration": 0,
23
+ "errors": 0
24
+ },
25
+ "retrieve": {
26
+ "count": 0,
27
+ "totalDuration": 0,
28
+ "errors": 0
29
+ },
30
+ "query": {
31
+ "count": 0,
32
+ "totalDuration": 0,
33
+ "errors": 0
34
+ },
35
+ "list": {
36
+ "count": 0,
37
+ "totalDuration": 0,
38
+ "errors": 0
39
+ },
40
+ "delete": {
41
+ "count": 0,
42
+ "totalDuration": 0,
43
+ "errors": 0
44
+ },
45
+ "search": {
46
+ "count": 0,
47
+ "totalDuration": 0,
48
+ "errors": 0
49
+ },
50
+ "init": {
51
+ "count": 0,
52
+ "totalDuration": 0,
53
+ "errors": 0
54
+ }
55
+ },
56
+ "performance": {
57
+ "avgOperationDuration": 0,
58
+ "minOperationDuration": null,
59
+ "maxOperationDuration": null,
60
+ "slowOperations": 0,
61
+ "fastOperations": 0,
62
+ "totalOperationTime": 0
63
+ },
64
+ "storage": {
65
+ "totalEntries": 0,
66
+ "reasoningbankEntries": 0,
67
+ "basicEntries": 0,
68
+ "databaseSize": 0,
69
+ "lastBackup": null,
70
+ "growthRate": 0
71
+ },
72
+ "errors": {
73
+ "total": 0,
74
+ "byType": {},
75
+ "byOperation": {},
76
+ "recent": []
77
+ },
78
+ "reasoningbank": {
79
+ "semanticSearches": 0,
80
+ "sqlFallbacks": 0,
81
+ "embeddingGenerated": 0,
82
+ "consolidations": 0,
83
+ "avgQueryTime": 0,
84
+ "cacheHits": 0,
85
+ "cacheMisses": 0
86
+ }
87
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "id": "cmd-hooks-1762879945180",
4
+ "type": "hooks",
5
+ "success": true,
6
+ "duration": 5.301208000000003,
7
+ "timestamp": 1762879945185,
8
+ "metadata": {}
9
+ }
10
+ ]
@@ -29,6 +29,124 @@ Skill("contract-testing")
29
29
  Skill("regression-testing")
30
30
  ```
31
31
 
32
+ ## Learning Protocol
33
+
34
+ **⚠️ MANDATORY**: When executed via Claude Code Task tool, you MUST call learning MCP tools to persist learning data.
35
+
36
+ ### Required Learning Actions (Call AFTER Task Completion)
37
+
38
+ **1. Store Learning Experience:**
39
+ ```typescript
40
+ // Call this MCP tool after completing API contract validation
41
+ mcp__agentic_qe__learning_store_experience({
42
+ agentId: "qe-api-contract-validator",
43
+ taskType: "api-contract-validation",
44
+ reward: 0.93, // Your assessment of task success (0-1 scale)
45
+ outcome: {
46
+ contractsValidated: 12,
47
+ breakingChangesDetected: 2,
48
+ compatibilityIssues: 3,
49
+ consumersAffected: 8,
50
+ versioningCompliance: "100%",
51
+ validationQuality: "high"
52
+ },
53
+ metadata: {
54
+ apiType: "rest",
55
+ schemaFormat: "openapi",
56
+ versionBump: "minor",
57
+ comparisonDepth: "comprehensive"
58
+ }
59
+ })
60
+ ```
61
+
62
+ **2. Store Q-Values for Your Strategy:**
63
+ ```typescript
64
+ // Store Q-value for the validation strategy you used
65
+ mcp__agentic_qe__learning_store_qvalue({
66
+ agentId: "qe-api-contract-validator",
67
+ stateKey: "api-validation-state",
68
+ actionKey: "comprehensive-diff", // or "schema-only", "breaking-change-only"
69
+ qValue: 0.89, // Expected value of this approach (based on results)
70
+ metadata: {
71
+ validationStrategy: "comprehensive-diff",
72
+ successRate: "93%",
73
+ breakingChangeDetection: "high",
74
+ falsePositiveRate: "low",
75
+ versioningAccuracy: "100%"
76
+ }
77
+ })
78
+ ```
79
+
80
+ **3. Store Successful Patterns:**
81
+ ```typescript
82
+ // If you discovered a useful pattern, store it
83
+ mcp__agentic_qe__learning_store_pattern({
84
+ agentId: "qe-api-contract-validator",
85
+ pattern: "Comprehensive diff analysis detects 38% more backward compatibility issues than schema-only validation for REST APIs with complex nested objects",
86
+ confidence: 0.93,
87
+ domain: "api-contract-validation",
88
+ metadata: {
89
+ validationStrategy: "comprehensive-diff",
90
+ useCase: "rest-api-complex-nested",
91
+ detectionIncrease: "38%",
92
+ falsePositiveReduction: "20%",
93
+ consumerImpactAccuracy: "95%"
94
+ }
95
+ })
96
+ ```
97
+
98
+ ### Learning Query (Use at Task Start)
99
+
100
+ **Before starting API contract validation**, query for past learnings:
101
+
102
+ ```typescript
103
+ // Query for successful API validation experiences
104
+ const pastLearnings = await mcp__agentic_qe__learning_query({
105
+ agentId: "qe-api-contract-validator",
106
+ taskType: "api-contract-validation",
107
+ minReward: 0.8,
108
+ queryType: "all",
109
+ limit: 10
110
+ });
111
+
112
+ // Use the insights to optimize your current approach
113
+ if (pastLearnings.success && pastLearnings.data) {
114
+ const { experiences, qValues, patterns } = pastLearnings.data;
115
+
116
+ // Find best-performing validation strategy
117
+ const bestStrategy = qValues
118
+ .filter(qv => qv.state_key === "api-validation-state")
119
+ .sort((a, b) => b.q_value - a.q_value)[0];
120
+
121
+ console.log(`Using learned best strategy: ${bestStrategy.action_key} (Q-value: ${bestStrategy.q_value})`);
122
+
123
+ // Check for relevant patterns
124
+ const relevantPatterns = patterns
125
+ .filter(p => p.domain === "api-contract-validation")
126
+ .sort((a, b) => b.confidence * b.success_rate - a.confidence * a.success_rate);
127
+
128
+ if (relevantPatterns.length > 0) {
129
+ console.log(`Applying pattern: ${relevantPatterns[0].pattern}`);
130
+ }
131
+ }
132
+ ```
133
+
134
+ ### Success Criteria for Learning
135
+
136
+ **Reward Assessment (0-1 scale):**
137
+ - **1.0**: Perfect execution (All breaking changes detected, 0 false positives, 100% semver compliance, accurate consumer impact)
138
+ - **0.9**: Excellent (All breaking changes detected, <5% false positives, 100% semver compliance)
139
+ - **0.7**: Good (Most breaking changes detected, <10% false positives, high semver compliance)
140
+ - **0.5**: Acceptable (Major breaking changes detected, completed successfully)
141
+ - **<0.5**: Needs improvement (Missed breaking changes, high false positive rate, incomplete)
142
+
143
+ **When to Call Learning Tools:**
144
+ - ✅ **ALWAYS** after completing API contract validation
145
+ - ✅ **ALWAYS** after detecting breaking changes
146
+ - ✅ **ALWAYS** after analyzing consumer impact
147
+ - ✅ When discovering new validation patterns
148
+ - ✅ When achieving exceptional accuracy
149
+
32
150
  ## Core Capabilities
33
151
 
34
152
  ### 1. Schema Validation
@@ -232,35 +232,119 @@ This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero e
232
232
 
233
233
  **Automatic Lifecycle Hooks:**
234
234
  ```typescript
235
- // Automatically called by BaseAgent
235
+ // Called automatically by BaseAgent
236
236
  protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
237
237
  // Load experiment queue and safety constraints
238
238
  const experiments = await this.memoryStore.retrieve('aqe/chaos/experiments/queue');
239
239
  const safetyRules = await this.memoryStore.retrieve('aqe/chaos/safety/constraints');
240
240
  const systemHealth = await this.memoryStore.retrieve('aqe/system/health');
241
241
 
242
+ // Verify environment for chaos testing
243
+ const verification = await this.hookManager.executePreTaskVerification({
244
+ task: 'chaos-experiment',
245
+ context: {
246
+ requiredVars: ['CHAOS_ENABLED', 'BLAST_RADIUS_MAX'],
247
+ minMemoryMB: 1024,
248
+ requiredKeys: ['aqe/chaos/safety/constraints', 'aqe/system/health']
249
+ }
250
+ });
251
+
252
+ // Emit chaos experiment starting event
253
+ this.eventBus.emit('chaos:experiment-starting', {
254
+ agentId: this.agentId,
255
+ experimentName: data.assignment.task.metadata.experimentName,
256
+ blastRadius: data.assignment.task.metadata.blastRadius
257
+ });
258
+
242
259
  this.logger.info('Chaos experiment initialized', {
243
260
  pendingExperiments: experiments?.length || 0,
244
- systemHealthy: systemHealth?.healthy || false
261
+ systemHealthy: systemHealth?.healthy || false,
262
+ verification: verification.passed
245
263
  });
246
264
  }
247
265
 
248
266
  protected async onPostTask(data: { assignment: TaskAssignment; result: any }): Promise<void> {
249
267
  // Store experiment results and resilience metrics
250
- await this.memoryStore.store('aqe/chaos/experiments/results', data.result.experimentOutcomes);
251
- await this.memoryStore.store('aqe/chaos/metrics/resilience', data.result.resilienceMetrics);
268
+ await this.memoryStore.store('aqe/chaos/experiments/results', data.result.experimentOutcomes, {
269
+ partition: 'agent_results',
270
+ ttl: 86400 // 24 hours
271
+ });
252
272
 
253
- // Emit chaos completion event
273
+ await this.memoryStore.store('aqe/chaos/metrics/resilience', data.result.resilienceMetrics, {
274
+ partition: 'metrics',
275
+ ttl: 604800 // 7 days
276
+ });
277
+
278
+ // Store chaos experiment metrics
279
+ await this.memoryStore.store('aqe/chaos/metrics/experiment', {
280
+ timestamp: Date.now(),
281
+ experimentName: data.result.experimentName,
282
+ passed: data.result.steadyStateValidated,
283
+ rollbackTriggered: data.result.rollbackTriggered,
284
+ recoveryTime: data.result.recoveryTime
285
+ }, {
286
+ partition: 'metrics',
287
+ ttl: 604800 // 7 days
288
+ });
289
+
290
+ // Emit completion event with chaos experiment results
254
291
  this.eventBus.emit('chaos:experiment-completed', {
292
+ agentId: this.agentId,
255
293
  experimentId: data.assignment.id,
256
294
  passed: data.result.steadyStateValidated,
257
295
  rollbackTriggered: data.result.rollbackTriggered
258
296
  });
297
+
298
+ // Validate chaos experiment results
299
+ const validation = await this.hookManager.executePostTaskValidation({
300
+ task: 'chaos-experiment',
301
+ result: {
302
+ output: data.result,
303
+ passed: data.result.steadyStateValidated,
304
+ metrics: {
305
+ recoveryTime: data.result.recoveryTime,
306
+ blastRadius: data.result.blastRadius
307
+ }
308
+ }
309
+ });
310
+
311
+ this.logger.info('Chaos experiment completed', {
312
+ experimentName: data.result.experimentName,
313
+ passed: data.result.steadyStateValidated,
314
+ validated: validation.passed
315
+ });
316
+ }
317
+
318
+ protected async onTaskError(data: { assignment: TaskAssignment; error: Error }): Promise<void> {
319
+ // Store error for fleet analysis
320
+ await this.memoryStore.store(`aqe/errors/${data.assignment.task.id}`, {
321
+ error: data.error.message,
322
+ timestamp: Date.now(),
323
+ agent: this.agentId,
324
+ taskType: 'chaos-engineering',
325
+ experimentName: data.assignment.task.metadata.experimentName
326
+ }, {
327
+ partition: 'errors',
328
+ ttl: 604800 // 7 days
329
+ });
330
+
331
+ // Emit error event for fleet coordination
332
+ this.eventBus.emit('chaos:experiment-error', {
333
+ agentId: this.agentId,
334
+ error: data.error.message,
335
+ taskId: data.assignment.task.id
336
+ });
337
+
338
+ this.logger.error('Chaos experiment failed', {
339
+ error: data.error.message,
340
+ stack: data.error.stack
341
+ });
259
342
  }
260
343
  ```
261
344
 
262
345
  **Advanced Verification (Optional):**
263
346
  ```typescript
347
+ // Use VerificationHookManager for comprehensive validation
264
348
  const hookManager = new VerificationHookManager(this.memoryStore);
265
349
  const verification = await hookManager.executePreTaskVerification({
266
350
  task: 'chaos-experiment',
@@ -272,6 +356,237 @@ const verification = await hookManager.executePreTaskVerification({
272
356
  });
273
357
  ```
274
358
 
359
+ ## Learning Protocol (Phase 6 - Option C Implementation)
360
+
361
+ **⚠️ MANDATORY**: When executed via Claude Code Task tool, you MUST call learning MCP tools to persist learning data.
362
+
363
+ ### Required Learning Actions (Call AFTER Task Completion)
364
+
365
+ **1. Store Learning Experience:**
366
+ ```typescript
367
+ // Call this MCP tool after completing your task
368
+ mcp__agentic_qe__learning_store_experience({
369
+ agentId: "qe-chaos-engineer",
370
+ taskType: "chaos-testing",
371
+ reward: 0.95, // Your assessment of task success (0-1 scale)
372
+ outcome: {
373
+ // Your actual results
374
+ experimentsRun: 5,
375
+ vulnerabilitiesFound: 3,
376
+ recoveryTime: 23,
377
+ executionTime: 8000
378
+ },
379
+ metadata: {
380
+ // Additional context
381
+ blastRadiusManagement: true,
382
+ faultTypes: ["network-partition", "pod-kill", "resource-exhaustion"],
383
+ controlledRollback: true
384
+ }
385
+ })
386
+ ```
387
+
388
+ **2. Store Q-Values for Your Strategy:**
389
+ ```typescript
390
+ // Store Q-value for the strategy you used
391
+ mcp__agentic_qe__learning_store_qvalue({
392
+ agentId: "qe-chaos-engineer",
393
+ stateKey: "chaos-testing-state",
394
+ actionKey: "controlled-fault-injection",
395
+ qValue: 0.85, // Expected value of this approach (based on results)
396
+ metadata: {
397
+ // Strategy details
398
+ injectionStrategy: "gradual-escalation",
399
+ safetyLevel: 0.95,
400
+ effectiveness: 0.90
401
+ }
402
+ })
403
+ ```
404
+
405
+ **3. Store Successful Patterns:**
406
+ ```typescript
407
+ // If you discovered a useful pattern, store it
408
+ mcp__agentic_qe__learning_store_pattern({
409
+ agentId: "qe-chaos-engineer",
410
+ pattern: "Gradual fault injection with blast radius monitoring prevents cascading failures while still discovering vulnerabilities",
411
+ confidence: 0.95, // How confident you are (0-1)
412
+ domain: "resilience",
413
+ metadata: {
414
+ // Pattern context
415
+ resiliencePatterns: ["circuit-breaker", "bulkhead", "timeout"],
416
+ predictionAccuracy: 0.92
417
+ }
418
+ })
419
+ ```
420
+
421
+ ### Learning Query (Use at Task Start)
422
+
423
+ **Before starting your task**, query for past learnings:
424
+
425
+ ```typescript
426
+ // Query for successful experiences
427
+ const pastLearnings = await mcp__agentic_qe__learning_query({
428
+ agentId: "qe-chaos-engineer",
429
+ taskType: "chaos-testing",
430
+ minReward: 0.8, // Only get successful experiences
431
+ queryType: "all",
432
+ limit: 10
433
+ });
434
+
435
+ // Use the insights to optimize your current approach
436
+ if (pastLearnings.success && pastLearnings.data) {
437
+ const { experiences, qValues, patterns } = pastLearnings.data;
438
+
439
+ // Find best-performing strategy
440
+ const bestStrategy = qValues
441
+ .filter(qv => qv.state_key === "chaos-testing-state")
442
+ .sort((a, b) => b.q_value - a.q_value)[0];
443
+
444
+ console.log(`Using learned best strategy: ${bestStrategy.action_key} (Q-value: ${bestStrategy.q_value})`);
445
+
446
+ // Check for relevant patterns
447
+ const relevantPatterns = patterns
448
+ .filter(p => p.domain === "resilience")
449
+ .sort((a, b) => b.confidence * b.success_rate - a.confidence * a.success_rate);
450
+
451
+ if (relevantPatterns.length > 0) {
452
+ console.log(`Applying pattern: ${relevantPatterns[0].pattern}`);
453
+ }
454
+ }
455
+ ```
456
+
457
+ ### Success Criteria for Learning
458
+
459
+ **Reward Assessment (0-1 scale):**
460
+ - **1.0**: Perfect execution (All vulnerabilities found, <1s recovery, safe blast radius)
461
+ - **0.9**: Excellent (95%+ vulnerabilities found, <5s recovery, controlled)
462
+ - **0.7**: Good (90%+ vulnerabilities found, <10s recovery, safe)
463
+ - **0.5**: Acceptable (Key vulnerabilities found, completed safely)
464
+ - **<0.5**: Needs improvement (Missed vulnerabilities, slow recovery, unsafe)
465
+
466
+ **When to Call Learning Tools:**
467
+ - ✅ **ALWAYS** after completing main task
468
+ - ✅ **ALWAYS** after detecting significant findings
469
+ - ✅ **ALWAYS** after generating recommendations
470
+ - ✅ When discovering new effective strategies
471
+ - ✅ When achieving exceptional performance metrics
472
+
473
+ ## Learning Integration (Phase 6)
474
+
475
+ This agent integrates with the **Learning Engine** to continuously improve chaos experiment design and failure prediction.
476
+
477
+ ### Learning Protocol
478
+
479
+ ```typescript
480
+ import { LearningEngine } from '@/learning/LearningEngine';
481
+
482
+ // Initialize learning engine
483
+ const learningEngine = new LearningEngine({
484
+ agentId: 'qe-chaos-engineer',
485
+ taskType: 'chaos-engineering',
486
+ domain: 'chaos-engineering',
487
+ learningRate: 0.01,
488
+ epsilon: 0.1,
489
+ discountFactor: 0.95
490
+ });
491
+
492
+ await learningEngine.initialize();
493
+
494
+ // Record chaos experiment episode
495
+ await learningEngine.recordEpisode({
496
+ state: {
497
+ experimentType: 'network-partition',
498
+ target: 'database-cluster',
499
+ systemHealth: 'healthy',
500
+ blastRadius: 'controlled'
501
+ },
502
+ action: {
503
+ faultType: 'network-partition',
504
+ duration: 120,
505
+ intensity: 'gradual',
506
+ autoRollback: true
507
+ },
508
+ reward: hypothesisValidated ? 1.0 : (systemRecovered ? 0.5 : -1.0),
509
+ nextState: {
510
+ steadyStateValidated: true,
511
+ recoveryTime: 23,
512
+ rollbackTriggered: false
513
+ }
514
+ });
515
+
516
+ // Learn from chaos experiment outcomes
517
+ await learningEngine.learn();
518
+
519
+ // Get learned experiment parameters
520
+ const prediction = await learningEngine.predict({
521
+ experimentType: 'network-partition',
522
+ target: 'database-cluster',
523
+ systemHealth: 'healthy'
524
+ });
525
+ ```
526
+
527
+ ### Reward Function
528
+
529
+ ```typescript
530
+ function calculateChaosReward(outcome: ChaosExperimentOutcome): number {
531
+ let reward = 0;
532
+
533
+ // Base reward for hypothesis validation
534
+ if (outcome.hypothesisValidated) {
535
+ reward += 1.0;
536
+ } else {
537
+ reward -= 0.5;
538
+ }
539
+
540
+ // Reward for controlled blast radius
541
+ if (outcome.blastRadiusContained) {
542
+ reward += 0.5;
543
+ } else {
544
+ reward -= 2.0; // Large penalty for uncontrolled chaos
545
+ }
546
+
547
+ // Reward for quick recovery
548
+ const recoveryBonus = Math.max(0, (60 - outcome.recoveryTime) / 60);
549
+ reward += recoveryBonus * 0.5;
550
+
551
+ // Penalty for needing rollback (but less than uncontrolled)
552
+ if (outcome.rollbackTriggered) {
553
+ reward -= 0.3;
554
+ }
555
+
556
+ // Bonus for discovering new failure modes
557
+ if (outcome.newFailureModeDiscovered) {
558
+ reward += 1.0;
559
+ }
560
+
561
+ // Penalty for zero learning (experiment too safe or trivial)
562
+ if (outcome.steadyStateNeverDisturbed) {
563
+ reward -= 0.2;
564
+ }
565
+
566
+ return reward;
567
+ }
568
+ ```
569
+
570
+ ### Learning Metrics
571
+
572
+ Track learning progress:
573
+ - **Hypothesis Validation Rate**: Percentage of experiments that validate hypotheses
574
+ - **Blast Radius Control**: Success rate of blast radius containment
575
+ - **Recovery Time**: Average and p95 recovery time
576
+ - **Rollback Rate**: Percentage of experiments requiring rollback
577
+ - **Failure Mode Discovery**: Rate of discovering new failure modes
578
+
579
+ ```bash
580
+ # View learning metrics
581
+ aqe learn status --agent qe-chaos-engineer
582
+
583
+ # Export learning history
584
+ aqe learn export --agent qe-chaos-engineer --format json
585
+
586
+ # Analyze resilience trends
587
+ aqe learn analyze --agent qe-chaos-engineer --metric resilience
588
+ ```
589
+
275
590
  ## Memory Keys
276
591
 
277
592
  ### Input Keys