agentic-qe 1.5.0 → 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 (161) 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 +290 -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/qe/security/scan-comprehensive.d.ts.map +1 -1
  93. package/dist/mcp/tools/qe/security/scan-comprehensive.js +40 -18
  94. package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -1
  95. package/dist/mcp/tools.d.ts +4 -0
  96. package/dist/mcp/tools.d.ts.map +1 -1
  97. package/dist/mcp/tools.js +179 -0
  98. package/dist/mcp/tools.js.map +1 -1
  99. package/dist/types/memory-interfaces.d.ts +71 -0
  100. package/dist/types/memory-interfaces.d.ts.map +1 -1
  101. package/dist/utils/Calculator.d.ts +35 -0
  102. package/dist/utils/Calculator.d.ts.map +1 -0
  103. package/dist/utils/Calculator.js +50 -0
  104. package/dist/utils/Calculator.js.map +1 -0
  105. package/dist/utils/Logger.d.ts.map +1 -1
  106. package/dist/utils/Logger.js +4 -1
  107. package/dist/utils/Logger.js.map +1 -1
  108. package/package.json +7 -5
  109. package/.claude/agents/qe-api-contract-validator.md.backup +0 -1148
  110. package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +0 -1148
  111. package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +0 -1123
  112. package/.claude/agents/qe-chaos-engineer.md.backup +0 -808
  113. package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +0 -808
  114. package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +0 -787
  115. package/.claude/agents/qe-code-complexity.md.backup +0 -291
  116. package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +0 -291
  117. package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +0 -286
  118. package/.claude/agents/qe-coverage-analyzer.md.backup +0 -467
  119. package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +0 -467
  120. package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +0 -438
  121. package/.claude/agents/qe-deployment-readiness.md.backup +0 -1166
  122. package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +0 -1166
  123. package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +0 -1140
  124. package/.claude/agents/qe-flaky-test-hunter.md.backup +0 -1195
  125. package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +0 -1195
  126. package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +0 -1162
  127. package/.claude/agents/qe-fleet-commander.md.backup +0 -718
  128. package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +0 -718
  129. package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +0 -697
  130. package/.claude/agents/qe-performance-tester.md.backup +0 -428
  131. package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +0 -428
  132. package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +0 -372
  133. package/.claude/agents/qe-production-intelligence.md.backup +0 -1219
  134. package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +0 -1219
  135. package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +0 -1194
  136. package/.claude/agents/qe-quality-analyzer.md.backup +0 -425
  137. package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +0 -425
  138. package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +0 -394
  139. package/.claude/agents/qe-quality-gate.md.backup +0 -446
  140. package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +0 -446
  141. package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +0 -415
  142. package/.claude/agents/qe-regression-risk-analyzer.md.backup +0 -1009
  143. package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +0 -1009
  144. package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +0 -984
  145. package/.claude/agents/qe-requirements-validator.md.backup +0 -748
  146. package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +0 -748
  147. package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +0 -723
  148. package/.claude/agents/qe-security-scanner.md.backup +0 -634
  149. package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +0 -634
  150. package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +0 -573
  151. package/.claude/agents/qe-test-data-architect.md.backup +0 -1064
  152. package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +0 -1064
  153. package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +0 -1040
  154. package/.claude/agents/qe-test-executor.md.backup +0 -389
  155. package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +0 -389
  156. package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +0 -369
  157. package/.claude/agents/qe-test-generator.md.backup +0 -997
  158. package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +0 -997
  159. package/.claude/agents/qe-visual-tester.md.backup +0 -777
  160. package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +0 -777
  161. 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