agentic-qe 1.5.1 → 1.6.1
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-api-contract-validator.md +118 -0
- package/.claude/agents/qe-chaos-engineer.md +320 -5
- package/.claude/agents/qe-code-complexity.md +360 -0
- package/.claude/agents/qe-coverage-analyzer.md +112 -0
- package/.claude/agents/qe-deployment-readiness.md +322 -6
- package/.claude/agents/qe-flaky-test-hunter.md +115 -0
- package/.claude/agents/qe-fleet-commander.md +319 -6
- package/.claude/agents/qe-performance-tester.md +234 -0
- package/.claude/agents/qe-production-intelligence.md +114 -0
- package/.claude/agents/qe-quality-analyzer.md +126 -0
- package/.claude/agents/qe-quality-gate.md +119 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +114 -0
- package/.claude/agents/qe-requirements-validator.md +114 -0
- package/.claude/agents/qe-security-scanner.md +118 -0
- package/.claude/agents/qe-test-data-architect.md +234 -0
- package/.claude/agents/qe-test-executor.md +115 -0
- package/.claude/agents/qe-test-generator.md +114 -0
- package/.claude/agents/qe-visual-tester.md +305 -6
- package/.claude/agents/subagents/qe-code-reviewer.md +0 -4
- package/.claude/agents/subagents/qe-data-generator.md +0 -16
- package/.claude/agents/subagents/qe-integration-tester.md +0 -17
- package/.claude/agents/subagents/qe-performance-validator.md +0 -16
- package/.claude/agents/subagents/qe-security-auditor.md +0 -16
- package/.claude/agents/subagents/qe-test-implementer.md +0 -17
- package/.claude/agents/subagents/qe-test-refactorer.md +0 -17
- package/.claude/agents/subagents/qe-test-writer.md +0 -19
- package/.claude/skills/brutal-honesty-review/README.md +218 -0
- package/.claude/skills/brutal-honesty-review/SKILL.md +725 -0
- package/.claude/skills/brutal-honesty-review/resources/assessment-rubrics.md +295 -0
- package/.claude/skills/brutal-honesty-review/resources/review-template.md +102 -0
- package/.claude/skills/brutal-honesty-review/scripts/assess-code.sh +179 -0
- package/.claude/skills/brutal-honesty-review/scripts/assess-tests.sh +223 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +301 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +510 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/resources/workflows/microservice-pipeline.md +239 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/resources/workflows/mobile-pipeline.md +375 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/resources/workflows/monolith-pipeline.md +268 -0
- package/.claude/skills/six-thinking-hats/README.md +190 -0
- package/.claude/skills/six-thinking-hats/SKILL.md +1215 -0
- package/.claude/skills/six-thinking-hats/resources/examples/api-testing-example.md +345 -0
- package/.claude/skills/six-thinking-hats/resources/templates/solo-session-template.md +167 -0
- package/.claude/skills/six-thinking-hats/resources/templates/team-session-template.md +336 -0
- package/CHANGELOG.md +2472 -2129
- package/README.md +48 -10
- package/dist/adapters/MemoryStoreAdapter.d.ts +38 -0
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +22 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +13 -0
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/cli/commands/init-claude-md-template.d.ts +16 -0
- package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -0
- package/dist/cli/commands/init-claude-md-template.js +69 -0
- package/dist/cli/commands/init-claude-md-template.js.map +1 -0
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +509 -460
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/core/memory/AgentDBService.d.ts +33 -28
- package/dist/core/memory/AgentDBService.d.ts.map +1 -1
- package/dist/core/memory/AgentDBService.js +233 -290
- package/dist/core/memory/AgentDBService.js.map +1 -1
- package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -1
- package/dist/core/memory/EnhancedAgentDBService.js +5 -3
- package/dist/core/memory/EnhancedAgentDBService.js.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.d.ts +9 -2
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +126 -100
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +58 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +176 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +14 -27
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +57 -119
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/index.d.ts +0 -1
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +0 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/mcp/handlers/learning/learning-query.d.ts +34 -0
- package/dist/mcp/handlers/learning/learning-query.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-query.js +156 -0
- package/dist/mcp/handlers/learning/learning-query.js.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-experience.d.ts +30 -0
- package/dist/mcp/handlers/learning/learning-store-experience.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-experience.js +86 -0
- package/dist/mcp/handlers/learning/learning-store-experience.js.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +31 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.js +126 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts +30 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts.map +1 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.js +100 -0
- package/dist/mcp/handlers/learning/learning-store-qvalue.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +98 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/LearningEventListener.d.ts +123 -0
- package/dist/mcp/services/LearningEventListener.d.ts.map +1 -0
- package/dist/mcp/services/LearningEventListener.js +322 -0
- package/dist/mcp/services/LearningEventListener.js.map +1 -0
- package/dist/mcp/tools.d.ts +4 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +179 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/types/memory-interfaces.d.ts +71 -0
- package/dist/types/memory-interfaces.d.ts.map +1 -1
- package/dist/utils/Calculator.d.ts +35 -0
- package/dist/utils/Calculator.d.ts.map +1 -0
- package/dist/utils/Calculator.js +50 -0
- package/dist/utils/Calculator.js.map +1 -0
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +4 -1
- package/dist/utils/Logger.js.map +1 -1
- package/package.json +7 -5
- package/.claude/agents/qe-api-contract-validator.md.backup +0 -1148
- package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +0 -1148
- package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +0 -1123
- package/.claude/agents/qe-chaos-engineer.md.backup +0 -808
- package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +0 -808
- package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +0 -787
- package/.claude/agents/qe-code-complexity.md.backup +0 -291
- package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +0 -291
- package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +0 -286
- package/.claude/agents/qe-coverage-analyzer.md.backup +0 -467
- package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +0 -467
- package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +0 -438
- package/.claude/agents/qe-deployment-readiness.md.backup +0 -1166
- package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +0 -1166
- package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +0 -1140
- package/.claude/agents/qe-flaky-test-hunter.md.backup +0 -1195
- package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +0 -1195
- package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +0 -1162
- package/.claude/agents/qe-fleet-commander.md.backup +0 -718
- package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +0 -718
- package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +0 -697
- package/.claude/agents/qe-performance-tester.md.backup +0 -428
- package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +0 -428
- package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +0 -372
- package/.claude/agents/qe-production-intelligence.md.backup +0 -1219
- package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +0 -1219
- package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +0 -1194
- package/.claude/agents/qe-quality-analyzer.md.backup +0 -425
- package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +0 -425
- package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +0 -394
- package/.claude/agents/qe-quality-gate.md.backup +0 -446
- package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +0 -446
- package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +0 -415
- package/.claude/agents/qe-regression-risk-analyzer.md.backup +0 -1009
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +0 -1009
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +0 -984
- package/.claude/agents/qe-requirements-validator.md.backup +0 -748
- package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +0 -748
- package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +0 -723
- package/.claude/agents/qe-security-scanner.md.backup +0 -634
- package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +0 -634
- package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +0 -573
- package/.claude/agents/qe-test-data-architect.md.backup +0 -1064
- package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +0 -1064
- package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +0 -1040
- package/.claude/agents/qe-test-executor.md.backup +0 -389
- package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +0 -389
- package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +0 -369
- package/.claude/agents/qe-test-generator.md.backup +0 -997
- package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +0 -997
- package/.claude/agents/qe-visual-tester.md.backup +0 -777
- package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +0 -777
- package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +0 -756
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
- package/.claude/commands/analysis/performance-bottlenecks.md +0 -59
- package/.claude/commands/flow-nexus/app-store.md +0 -124
- package/.claude/commands/flow-nexus/challenges.md +0 -120
- package/.claude/commands/flow-nexus/login-registration.md +0 -65
- package/.claude/commands/flow-nexus/neural-network.md +0 -134
- package/.claude/commands/flow-nexus/payments.md +0 -116
- package/.claude/commands/flow-nexus/sandbox.md +0 -83
- package/.claude/commands/flow-nexus/swarm.md +0 -87
- package/.claude/commands/flow-nexus/user-tools.md +0 -152
- package/.claude/commands/flow-nexus/workflow.md +0 -115
- package/.claude/commands/memory/usage.md +0 -46
|
@@ -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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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
|