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.
- package/.claude/agents/.claude-flow/metrics/agent-metrics.json +1 -0
- package/.claude/agents/.claude-flow/metrics/performance.json +87 -0
- package/.claude/agents/.claude-flow/metrics/task-metrics.json +10 -0
- 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/CHANGELOG.md +261 -0
- package/README.md +37 -5
- 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.d.ts.map +1 -1
- package/dist/cli/commands/init.js +32 -1
- 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
|
@@ -570,35 +570,122 @@ This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero e
|
|
|
570
570
|
|
|
571
571
|
**Automatic Lifecycle Hooks:**
|
|
572
572
|
```typescript
|
|
573
|
-
//
|
|
573
|
+
// Called automatically by BaseAgent
|
|
574
574
|
protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
|
|
575
575
|
// Load all quality signals for deployment assessment
|
|
576
576
|
const qualitySignals = await this.memoryStore.retrievePattern('aqe/quality-signals/*');
|
|
577
577
|
const deploymentHistory = await this.memoryStore.retrieve('aqe/deployment/history');
|
|
578
578
|
|
|
579
|
+
// Verify environment for deployment assessment
|
|
580
|
+
const verification = await this.hookManager.executePreTaskVerification({
|
|
581
|
+
task: 'deployment-assessment',
|
|
582
|
+
context: {
|
|
583
|
+
requiredVars: ['DEPLOYMENT_ENV', 'VERSION'],
|
|
584
|
+
minMemoryMB: 512,
|
|
585
|
+
requiredKeys: ['aqe/quality-signals/code-quality', 'aqe/deployment/history']
|
|
586
|
+
}
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
// Emit deployment assessment starting event
|
|
590
|
+
this.eventBus.emit('deployment-readiness:starting', {
|
|
591
|
+
agentId: this.agentId,
|
|
592
|
+
environment: process.env.DEPLOYMENT_ENV,
|
|
593
|
+
version: process.env.VERSION
|
|
594
|
+
});
|
|
595
|
+
|
|
579
596
|
this.logger.info('Deployment readiness assessment started', {
|
|
580
597
|
qualitySignalsCollected: Object.keys(qualitySignals).length,
|
|
581
|
-
historicalDeployments: deploymentHistory?.length || 0
|
|
598
|
+
historicalDeployments: deploymentHistory?.length || 0,
|
|
599
|
+
verification: verification.passed
|
|
582
600
|
});
|
|
583
601
|
}
|
|
584
602
|
|
|
585
603
|
protected async onPostTask(data: { assignment: TaskAssignment; result: any }): Promise<void> {
|
|
586
604
|
// Store deployment decision and risk score
|
|
587
|
-
await this.memoryStore.store('aqe/deployment/decision', data.result.decision
|
|
588
|
-
|
|
589
|
-
|
|
605
|
+
await this.memoryStore.store('aqe/deployment/decision', data.result.decision, {
|
|
606
|
+
partition: 'agent_results',
|
|
607
|
+
ttl: 86400 // 24 hours
|
|
608
|
+
});
|
|
590
609
|
|
|
591
|
-
|
|
610
|
+
await this.memoryStore.store('aqe/deployment/risk-score', data.result.riskScore, {
|
|
611
|
+
partition: 'metrics',
|
|
612
|
+
ttl: 604800 // 7 days
|
|
613
|
+
});
|
|
614
|
+
|
|
615
|
+
await this.memoryStore.store('aqe/deployment/confidence', data.result.confidence, {
|
|
616
|
+
partition: 'metrics',
|
|
617
|
+
ttl: 604800 // 7 days
|
|
618
|
+
});
|
|
619
|
+
|
|
620
|
+
// Store quality signals analysis
|
|
621
|
+
await this.memoryStore.store('aqe/deployment/quality-analysis', {
|
|
622
|
+
timestamp: Date.now(),
|
|
623
|
+
decision: data.result.decision,
|
|
624
|
+
riskScore: data.result.riskScore,
|
|
625
|
+
confidence: data.result.confidence
|
|
626
|
+
}, {
|
|
627
|
+
partition: 'metrics',
|
|
628
|
+
ttl: 604800 // 7 days
|
|
629
|
+
});
|
|
630
|
+
|
|
631
|
+
// Emit completion event with deployment decision
|
|
592
632
|
this.eventBus.emit('deployment-readiness:assessed', {
|
|
633
|
+
agentId: this.agentId,
|
|
593
634
|
decision: data.result.decision.status,
|
|
594
635
|
riskLevel: data.result.riskScore.level,
|
|
595
636
|
confidence: data.result.confidence.score
|
|
596
637
|
});
|
|
638
|
+
|
|
639
|
+
// Validate deployment assessment results
|
|
640
|
+
const validation = await this.hookManager.executePostTaskValidation({
|
|
641
|
+
task: 'deployment-assessment',
|
|
642
|
+
result: {
|
|
643
|
+
output: data.result,
|
|
644
|
+
decision: data.result.decision,
|
|
645
|
+
metrics: {
|
|
646
|
+
riskScore: data.result.riskScore.score,
|
|
647
|
+
confidence: data.result.confidence.score
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
this.logger.info('Deployment readiness assessment completed', {
|
|
653
|
+
decision: data.result.decision.status,
|
|
654
|
+
riskLevel: data.result.riskScore.level,
|
|
655
|
+
validated: validation.passed
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
protected async onTaskError(data: { assignment: TaskAssignment; error: Error }): Promise<void> {
|
|
660
|
+
// Store error for fleet analysis
|
|
661
|
+
await this.memoryStore.store(`aqe/errors/${data.assignment.task.id}`, {
|
|
662
|
+
error: data.error.message,
|
|
663
|
+
timestamp: Date.now(),
|
|
664
|
+
agent: this.agentId,
|
|
665
|
+
taskType: 'deployment-readiness',
|
|
666
|
+
environment: data.assignment.task.metadata.environment
|
|
667
|
+
}, {
|
|
668
|
+
partition: 'errors',
|
|
669
|
+
ttl: 604800 // 7 days
|
|
670
|
+
});
|
|
671
|
+
|
|
672
|
+
// Emit error event for fleet coordination
|
|
673
|
+
this.eventBus.emit('deployment-readiness:error', {
|
|
674
|
+
agentId: this.agentId,
|
|
675
|
+
error: data.error.message,
|
|
676
|
+
taskId: data.assignment.task.id
|
|
677
|
+
});
|
|
678
|
+
|
|
679
|
+
this.logger.error('Deployment readiness assessment failed', {
|
|
680
|
+
error: data.error.message,
|
|
681
|
+
stack: data.error.stack
|
|
682
|
+
});
|
|
597
683
|
}
|
|
598
684
|
```
|
|
599
685
|
|
|
600
686
|
**Advanced Verification (Optional):**
|
|
601
687
|
```typescript
|
|
688
|
+
// Use VerificationHookManager for comprehensive validation
|
|
602
689
|
const hookManager = new VerificationHookManager(this.memoryStore);
|
|
603
690
|
const verification = await hookManager.executePreTaskVerification({
|
|
604
691
|
task: 'deployment-assessment',
|
|
@@ -610,6 +697,119 @@ const verification = await hookManager.executePreTaskVerification({
|
|
|
610
697
|
});
|
|
611
698
|
```
|
|
612
699
|
|
|
700
|
+
## Learning Integration (Phase 6)
|
|
701
|
+
|
|
702
|
+
This agent integrates with the **Learning Engine** to continuously improve deployment risk predictions through reinforcement learning.
|
|
703
|
+
|
|
704
|
+
### Learning Protocol
|
|
705
|
+
|
|
706
|
+
```typescript
|
|
707
|
+
import { LearningEngine } from '@/learning/LearningEngine';
|
|
708
|
+
|
|
709
|
+
// Initialize learning engine
|
|
710
|
+
const learningEngine = new LearningEngine({
|
|
711
|
+
agentId: 'qe-deployment-readiness',
|
|
712
|
+
taskType: 'deployment-readiness',
|
|
713
|
+
domain: 'deployment-readiness',
|
|
714
|
+
learningRate: 0.01,
|
|
715
|
+
epsilon: 0.1,
|
|
716
|
+
discountFactor: 0.95
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
await learningEngine.initialize();
|
|
720
|
+
|
|
721
|
+
// Record deployment assessment episode
|
|
722
|
+
await learningEngine.recordEpisode({
|
|
723
|
+
state: {
|
|
724
|
+
qualitySignals: qualitySignalsData,
|
|
725
|
+
deploymentHistory: historicalData,
|
|
726
|
+
environment: 'production'
|
|
727
|
+
},
|
|
728
|
+
action: {
|
|
729
|
+
decision: 'approved',
|
|
730
|
+
riskScore: 18,
|
|
731
|
+
confidence: 94.2
|
|
732
|
+
},
|
|
733
|
+
reward: deploymentSuccessful ? 1.0 : -1.0,
|
|
734
|
+
nextState: {
|
|
735
|
+
deploymentOutcome: 'success',
|
|
736
|
+
actualRisk: 15,
|
|
737
|
+
userImpact: 'none'
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
|
|
741
|
+
// Learn from deployment outcomes
|
|
742
|
+
await learningEngine.learn();
|
|
743
|
+
|
|
744
|
+
// Get learned deployment risk prediction
|
|
745
|
+
const prediction = await learningEngine.predict({
|
|
746
|
+
qualitySignals: currentSignals,
|
|
747
|
+
deploymentHistory: recentHistory,
|
|
748
|
+
environment: 'production'
|
|
749
|
+
});
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
### Reward Function
|
|
753
|
+
|
|
754
|
+
```typescript
|
|
755
|
+
function calculateDeploymentReward(outcome: DeploymentOutcome): number {
|
|
756
|
+
let reward = 0;
|
|
757
|
+
|
|
758
|
+
// Base reward for deployment success/failure
|
|
759
|
+
if (outcome.deploymentSuccessful) {
|
|
760
|
+
reward += 1.0;
|
|
761
|
+
} else {
|
|
762
|
+
reward -= 1.0;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
// Bonus for accurate risk prediction
|
|
766
|
+
const riskAccuracy = 1 - Math.abs(outcome.predictedRisk - outcome.actualRisk) / 100;
|
|
767
|
+
reward += riskAccuracy * 0.5;
|
|
768
|
+
|
|
769
|
+
// Penalty for user impact
|
|
770
|
+
const impactPenalty = {
|
|
771
|
+
'none': 0,
|
|
772
|
+
'low': -0.2,
|
|
773
|
+
'medium': -0.5,
|
|
774
|
+
'high': -1.0,
|
|
775
|
+
'critical': -2.0
|
|
776
|
+
};
|
|
777
|
+
reward += impactPenalty[outcome.userImpact] || 0;
|
|
778
|
+
|
|
779
|
+
// Bonus for preventing bad deployments
|
|
780
|
+
if (!outcome.deploymentSuccessful && outcome.decision === 'blocked') {
|
|
781
|
+
reward += 2.0; // Saved from production incident
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// Penalty for false positives (blocking good deployments)
|
|
785
|
+
if (outcome.deploymentSuccessful && outcome.decision === 'blocked') {
|
|
786
|
+
reward -= 0.5;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
return reward;
|
|
790
|
+
}
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
### Learning Metrics
|
|
794
|
+
|
|
795
|
+
Track learning progress:
|
|
796
|
+
- **Prediction Accuracy**: Percentage of correct risk assessments
|
|
797
|
+
- **False Positive Rate**: Incorrectly blocked deployments
|
|
798
|
+
- **False Negative Rate**: Failed deployments that were approved
|
|
799
|
+
- **Risk Score RMSE**: Root mean square error of risk predictions
|
|
800
|
+
- **Confidence Calibration**: How well confidence scores match actual outcomes
|
|
801
|
+
|
|
802
|
+
```bash
|
|
803
|
+
# View learning metrics
|
|
804
|
+
aqe learn status --agent qe-deployment-readiness
|
|
805
|
+
|
|
806
|
+
# Export learning history
|
|
807
|
+
aqe learn export --agent qe-deployment-readiness --format json
|
|
808
|
+
|
|
809
|
+
# Analyze prediction accuracy
|
|
810
|
+
aqe learn analyze --agent qe-deployment-readiness --metric accuracy
|
|
811
|
+
```
|
|
812
|
+
|
|
613
813
|
## Memory Keys
|
|
614
814
|
|
|
615
815
|
### Input Keys
|
|
@@ -1139,6 +1339,122 @@ aqe deploy history --days 90 --format chart
|
|
|
1139
1339
|
**Version**: 1.0.0
|
|
1140
1340
|
**Maintainer**: AQE Fleet Team
|
|
1141
1341
|
|
|
1342
|
+
## Learning Protocol (Phase 6 - Option C Implementation)
|
|
1343
|
+
|
|
1344
|
+
**⚠️ MANDATORY**: When executed via Claude Code Task tool, you MUST call learning MCP tools to persist learning data.
|
|
1345
|
+
|
|
1346
|
+
### Required Learning Actions (Call AFTER Task Completion)
|
|
1347
|
+
|
|
1348
|
+
**1. Store Learning Experience:**
|
|
1349
|
+
```typescript
|
|
1350
|
+
// Call this MCP tool after completing your task
|
|
1351
|
+
mcp__agentic_qe__learning_store_experience({
|
|
1352
|
+
agentId: "qe-deployment-readiness",
|
|
1353
|
+
taskType: "deployment-readiness-check",
|
|
1354
|
+
reward: 0.95, // Your assessment of task success (0-1 scale)
|
|
1355
|
+
outcome: {
|
|
1356
|
+
// Your actual results
|
|
1357
|
+
checksCompleted: 12,
|
|
1358
|
+
riskLevel: "LOW",
|
|
1359
|
+
readinessScore: 94,
|
|
1360
|
+
executionTime: 4200
|
|
1361
|
+
},
|
|
1362
|
+
metadata: {
|
|
1363
|
+
// Additional context
|
|
1364
|
+
environment: "production",
|
|
1365
|
+
checksPerformed: ["code-quality", "test-coverage", "security", "performance"],
|
|
1366
|
+
complianceValidated: true
|
|
1367
|
+
}
|
|
1368
|
+
})
|
|
1369
|
+
```
|
|
1370
|
+
|
|
1371
|
+
**2. Store Q-Values for Your Strategy:**
|
|
1372
|
+
```typescript
|
|
1373
|
+
// Store Q-value for the strategy you used
|
|
1374
|
+
mcp__agentic_qe__learning_store_qvalue({
|
|
1375
|
+
agentId: "qe-deployment-readiness",
|
|
1376
|
+
stateKey: "deployment-readiness-state",
|
|
1377
|
+
actionKey: "multi-factor-assessment",
|
|
1378
|
+
qValue: 0.85, // Expected value of this approach (based on results)
|
|
1379
|
+
metadata: {
|
|
1380
|
+
// Strategy details
|
|
1381
|
+
assessmentStrategy: "multi-factor-risk-scoring",
|
|
1382
|
+
accuracy: 94.2,
|
|
1383
|
+
completeness: 100
|
|
1384
|
+
}
|
|
1385
|
+
})
|
|
1386
|
+
```
|
|
1387
|
+
|
|
1388
|
+
**3. Store Successful Patterns:**
|
|
1389
|
+
```typescript
|
|
1390
|
+
// If you discovered a useful pattern, store it
|
|
1391
|
+
mcp__agentic_qe__learning_store_pattern({
|
|
1392
|
+
agentId: "qe-deployment-readiness",
|
|
1393
|
+
pattern: "Multi-factor risk assessment with Bayesian confidence scoring",
|
|
1394
|
+
confidence: 0.95, // How confident you are (0-1)
|
|
1395
|
+
domain: "deployment",
|
|
1396
|
+
metadata: {
|
|
1397
|
+
// Pattern context
|
|
1398
|
+
deploymentPatterns: ["canary-rollout", "blue-green", "feature-flags"],
|
|
1399
|
+
riskPredictionAccuracy: 94.2
|
|
1400
|
+
}
|
|
1401
|
+
})
|
|
1402
|
+
```
|
|
1403
|
+
|
|
1404
|
+
### Learning Query (Use at Task Start)
|
|
1405
|
+
|
|
1406
|
+
**Before starting your task**, query for past learnings:
|
|
1407
|
+
|
|
1408
|
+
```typescript
|
|
1409
|
+
// Query for successful experiences
|
|
1410
|
+
const pastLearnings = await mcp__agentic_qe__learning_query({
|
|
1411
|
+
agentId: "qe-deployment-readiness",
|
|
1412
|
+
taskType: "deployment-readiness-check",
|
|
1413
|
+
minReward: 0.8, // Only get successful experiences
|
|
1414
|
+
queryType: "all",
|
|
1415
|
+
limit: 10
|
|
1416
|
+
});
|
|
1417
|
+
|
|
1418
|
+
// Use the insights to optimize your current approach
|
|
1419
|
+
if (pastLearnings.success && pastLearnings.data) {
|
|
1420
|
+
const { experiences, qValues, patterns } = pastLearnings.data;
|
|
1421
|
+
|
|
1422
|
+
// Find best-performing strategy
|
|
1423
|
+
const bestStrategy = qValues
|
|
1424
|
+
.filter(qv => qv.state_key === "deployment-readiness-state")
|
|
1425
|
+
.sort((a, b) => b.q_value - a.q_value)[0];
|
|
1426
|
+
|
|
1427
|
+
console.log(`Using learned best strategy: ${bestStrategy.action_key} (Q-value: ${bestStrategy.q_value})`);
|
|
1428
|
+
|
|
1429
|
+
// Check for relevant patterns
|
|
1430
|
+
const relevantPatterns = patterns
|
|
1431
|
+
.filter(p => p.domain === "deployment")
|
|
1432
|
+
.sort((a, b) => b.confidence * b.success_rate - a.confidence * a.success_rate);
|
|
1433
|
+
|
|
1434
|
+
if (relevantPatterns.length > 0) {
|
|
1435
|
+
console.log(`Applying pattern: ${relevantPatterns[0].pattern}`);
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
```
|
|
1439
|
+
|
|
1440
|
+
### Success Criteria for Learning
|
|
1441
|
+
|
|
1442
|
+
**Reward Assessment (0-1 scale):**
|
|
1443
|
+
- **1.0**: Perfect execution (All checks passed, 0 risks, 100% ready, <5s assessment)
|
|
1444
|
+
- **0.9**: Excellent (98%+ checks passed, low risk, 95%+ ready, <10s)
|
|
1445
|
+
- **0.7**: Good (95%+ checks passed, medium risk, 90%+ ready, <20s)
|
|
1446
|
+
- **0.5**: Acceptable (90%+ checks passed, acceptable risk)
|
|
1447
|
+
- **<0.5**: Needs improvement (Failed checks, high risk, not ready)
|
|
1448
|
+
|
|
1449
|
+
**When to Call Learning Tools:**
|
|
1450
|
+
- ✅ **ALWAYS** after completing main task
|
|
1451
|
+
- ✅ **ALWAYS** after detecting significant findings
|
|
1452
|
+
- ✅ **ALWAYS** after generating recommendations
|
|
1453
|
+
- ✅ When discovering new effective strategies
|
|
1454
|
+
- ✅ When achieving exceptional performance metrics
|
|
1455
|
+
|
|
1456
|
+
---
|
|
1457
|
+
|
|
1142
1458
|
## Code Execution Workflows
|
|
1143
1459
|
|
|
1144
1460
|
Assess deployment risk and make data-driven go/no-go decisions.
|
|
@@ -1004,6 +1004,121 @@ const verification = await hookManager.executePreTaskVerification({
|
|
|
1004
1004
|
});
|
|
1005
1005
|
```
|
|
1006
1006
|
|
|
1007
|
+
## Learning Protocol
|
|
1008
|
+
|
|
1009
|
+
**⚠️ MANDATORY**: When executed via Claude Code Task tool, you MUST call learning MCP tools to persist learning data.
|
|
1010
|
+
|
|
1011
|
+
### Required Learning Actions (Call AFTER Task Completion)
|
|
1012
|
+
|
|
1013
|
+
**1. Store Learning Experience:**
|
|
1014
|
+
```typescript
|
|
1015
|
+
// Call this MCP tool after completing flaky test detection
|
|
1016
|
+
mcp__agentic_qe__learning_store_experience({
|
|
1017
|
+
agentId: "qe-flaky-test-hunter",
|
|
1018
|
+
taskType: "flaky-detection",
|
|
1019
|
+
reward: 0.95, // Your assessment of task success (0-1 scale)
|
|
1020
|
+
outcome: {
|
|
1021
|
+
flakyTestsDetected: 13,
|
|
1022
|
+
reliability: 0.9862,
|
|
1023
|
+
autoStabilized: 8,
|
|
1024
|
+
executionTime: 12000,
|
|
1025
|
+
falsePositives: 1
|
|
1026
|
+
},
|
|
1027
|
+
metadata: {
|
|
1028
|
+
algorithm: "statistical-analysis",
|
|
1029
|
+
confidenceLevel: 0.99,
|
|
1030
|
+
method: "ml-pattern-matching"
|
|
1031
|
+
}
|
|
1032
|
+
})
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
**2. Store Q-Values for Your Strategy:**
|
|
1036
|
+
```typescript
|
|
1037
|
+
// Store Q-value for the detection strategy you used
|
|
1038
|
+
mcp__agentic_qe__learning_store_qvalue({
|
|
1039
|
+
agentId: "qe-flaky-test-hunter",
|
|
1040
|
+
stateKey: "flaky-detection-state",
|
|
1041
|
+
actionKey: "statistical-analysis", // or "ml-pattern-matching", "historical-analysis"
|
|
1042
|
+
qValue: 0.92, // Expected value of this approach
|
|
1043
|
+
metadata: {
|
|
1044
|
+
detectionMethod: "statistical-analysis",
|
|
1045
|
+
falsePositiveRate: "2%",
|
|
1046
|
+
stabilizationSuccess: "80%",
|
|
1047
|
+
confidence: 0.99
|
|
1048
|
+
}
|
|
1049
|
+
})
|
|
1050
|
+
```
|
|
1051
|
+
|
|
1052
|
+
**3. Store Successful Patterns:**
|
|
1053
|
+
```typescript
|
|
1054
|
+
// If you discovered a useful pattern, store it
|
|
1055
|
+
mcp__agentic_qe__learning_store_pattern({
|
|
1056
|
+
agentId: "qe-flaky-test-hunter",
|
|
1057
|
+
pattern: "Statistical analysis with 100-run sampling achieves 98% detection accuracy with <2% false positives for async tests",
|
|
1058
|
+
confidence: 0.98,
|
|
1059
|
+
domain: "flaky-detection",
|
|
1060
|
+
metadata: {
|
|
1061
|
+
detectionMethod: "statistical-analysis",
|
|
1062
|
+
sampleSize: 100,
|
|
1063
|
+
accuracy: "98%",
|
|
1064
|
+
falsePositiveRate: "2%",
|
|
1065
|
+
testType: "async"
|
|
1066
|
+
}
|
|
1067
|
+
})
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
### Learning Query (Use at Task Start)
|
|
1071
|
+
|
|
1072
|
+
**Before starting flaky test detection**, query for past learnings:
|
|
1073
|
+
|
|
1074
|
+
```typescript
|
|
1075
|
+
// Query for successful flaky detection experiences
|
|
1076
|
+
const pastLearnings = await mcp__agentic_qe__learning_query({
|
|
1077
|
+
agentId: "qe-flaky-test-hunter",
|
|
1078
|
+
taskType: "flaky-detection",
|
|
1079
|
+
minReward: 0.8,
|
|
1080
|
+
queryType: "all",
|
|
1081
|
+
limit: 10
|
|
1082
|
+
});
|
|
1083
|
+
|
|
1084
|
+
// Use the insights to optimize your current approach
|
|
1085
|
+
if (pastLearnings.success && pastLearnings.data) {
|
|
1086
|
+
const { experiences, qValues, patterns } = pastLearnings.data;
|
|
1087
|
+
|
|
1088
|
+
// Find best-performing detection strategy
|
|
1089
|
+
const bestStrategy = qValues
|
|
1090
|
+
.filter(qv => qv.state_key === "flaky-detection-state")
|
|
1091
|
+
.sort((a, b) => b.q_value - a.q_value)[0];
|
|
1092
|
+
|
|
1093
|
+
console.log(`Using learned best strategy: ${bestStrategy.action_key} (Q-value: ${bestStrategy.q_value})`);
|
|
1094
|
+
|
|
1095
|
+
// Check for relevant patterns
|
|
1096
|
+
const relevantPatterns = patterns
|
|
1097
|
+
.filter(p => p.domain === "flaky-detection")
|
|
1098
|
+
.sort((a, b) => b.confidence * b.success_rate - a.confidence * a.success_rate);
|
|
1099
|
+
|
|
1100
|
+
if (relevantPatterns.length > 0) {
|
|
1101
|
+
console.log(`Applying pattern: ${relevantPatterns[0].pattern}`);
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
```
|
|
1105
|
+
|
|
1106
|
+
### Success Criteria for Learning
|
|
1107
|
+
|
|
1108
|
+
**Reward Assessment (0-1 scale):**
|
|
1109
|
+
- **1.0**: Perfect execution (100% detection accuracy, 0 false positives, <5s analysis)
|
|
1110
|
+
- **0.9**: Excellent (98%+ detection accuracy, <2% false positives, auto-stabilization successful)
|
|
1111
|
+
- **0.7**: Good (95%+ detection accuracy, <5% false positives)
|
|
1112
|
+
- **0.5**: Acceptable (90%+ detection accuracy, completed successfully)
|
|
1113
|
+
- **<0.5**: Needs improvement (low accuracy, many false positives, stabilization failed)
|
|
1114
|
+
|
|
1115
|
+
**When to Call Learning Tools:**
|
|
1116
|
+
- ✅ **ALWAYS** after completing flaky test detection
|
|
1117
|
+
- ✅ **ALWAYS** after auto-stabilization attempts
|
|
1118
|
+
- ✅ **ALWAYS** after measuring detection accuracy
|
|
1119
|
+
- ✅ When discovering new detection patterns
|
|
1120
|
+
- ✅ When achieving exceptional accuracy metrics
|
|
1121
|
+
|
|
1007
1122
|
## Memory Keys
|
|
1008
1123
|
|
|
1009
1124
|
### Input Keys
|