agentic-qe 1.3.3 → 1.3.5
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 +20 -0
- package/.claude/agents/qe-chaos-engineer.md +20 -0
- package/.claude/agents/qe-coverage-analyzer.md +21 -0
- package/.claude/agents/qe-deployment-readiness.md +20 -0
- package/.claude/agents/qe-flaky-test-hunter.md +20 -0
- package/.claude/agents/qe-fleet-commander.md +20 -0
- package/.claude/agents/qe-performance-tester.md +21 -0
- package/.claude/agents/qe-production-intelligence.md +20 -0
- package/.claude/agents/qe-quality-analyzer.md +20 -0
- package/.claude/agents/qe-quality-gate.md +20 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +20 -0
- package/.claude/agents/qe-requirements-validator.md +20 -0
- package/.claude/agents/qe-security-scanner.md +21 -0
- package/.claude/agents/qe-test-data-architect.md +19 -0
- package/.claude/agents/qe-test-executor.md +20 -0
- package/.claude/agents/qe-test-generator.md +22 -0
- package/.claude/agents/qe-visual-tester.md +22 -0
- package/CHANGELOG.md +252 -0
- package/README.md +325 -1019
- package/README.md.backup-20251026 +1366 -0
- package/bin/aqe-mcp +1 -1
- package/dist/agents/BaseAgent.js +1 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +16 -16
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +1 -1
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +71 -37
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts +1 -1
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +29 -19
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/core/memory/EnhancedAgentDBService.d.ts +127 -0
- package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -0
- package/dist/core/memory/EnhancedAgentDBService.js +298 -0
- package/dist/core/memory/EnhancedAgentDBService.js.map +1 -0
- package/dist/core/neural/NeuralTrainer.js +2 -2
- package/dist/core/neural/NeuralTrainer.js.map +1 -1
- package/dist/learning/ExperienceReplayBuffer.d.ts +143 -0
- package/dist/learning/ExperienceReplayBuffer.d.ts.map +1 -0
- package/dist/learning/ExperienceReplayBuffer.js +255 -0
- package/dist/learning/ExperienceReplayBuffer.js.map +1 -0
- package/dist/learning/FixRecommendationEngine.d.ts +68 -0
- package/dist/learning/FixRecommendationEngine.d.ts.map +1 -0
- package/dist/learning/FixRecommendationEngine.js +500 -0
- package/dist/learning/FixRecommendationEngine.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +19 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -1
- package/dist/learning/FlakyTestDetector.js +121 -2
- package/dist/learning/FlakyTestDetector.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +50 -1
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +140 -0
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/QLearning.d.ts +154 -0
- package/dist/learning/QLearning.d.ts.map +1 -0
- package/dist/learning/QLearning.js +337 -0
- package/dist/learning/QLearning.js.map +1 -0
- package/dist/learning/index.d.ts +4 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +7 -0
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/types.d.ts +11 -0
- package/dist/learning/types.d.ts.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +11 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +12 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +10 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +11 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -1
- package/dist/reasoning/PatternQualityScorer.d.ts +134 -0
- package/dist/reasoning/PatternQualityScorer.d.ts.map +1 -0
- package/dist/reasoning/PatternQualityScorer.js +340 -0
- package/dist/reasoning/PatternQualityScorer.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +138 -4
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -1
- package/dist/reasoning/QEReasoningBank.js +560 -12
- package/dist/reasoning/QEReasoningBank.js.map +1 -1
- package/dist/reasoning/VectorSimilarity.d.ts +131 -0
- package/dist/reasoning/VectorSimilarity.d.ts.map +1 -0
- package/dist/reasoning/VectorSimilarity.js +250 -0
- package/dist/reasoning/VectorSimilarity.js.map +1 -0
- package/dist/reasoning/index.d.ts +8 -1
- package/dist/reasoning/index.d.ts.map +1 -1
- package/dist/reasoning/index.js +13 -2
- package/dist/reasoning/index.js.map +1 -1
- package/dist/streaming/BaseStreamHandler.d.ts +89 -0
- package/dist/streaming/BaseStreamHandler.d.ts.map +1 -0
- package/dist/streaming/BaseStreamHandler.js +168 -0
- package/dist/streaming/BaseStreamHandler.js.map +1 -0
- package/dist/streaming/TestGenerateStreamHandler.d.ts +103 -0
- package/dist/streaming/TestGenerateStreamHandler.d.ts.map +1 -0
- package/dist/streaming/TestGenerateStreamHandler.js +321 -0
- package/dist/streaming/TestGenerateStreamHandler.js.map +1 -0
- package/dist/streaming/index.d.ts +16 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +39 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/utils/__mocks__/Logger.d.ts +26 -0
- package/dist/utils/__mocks__/Logger.d.ts.map +1 -0
- package/dist/utils/__mocks__/Logger.js +42 -0
- package/dist/utils/__mocks__/Logger.js.map +1 -0
- package/package.json +15 -3
- package/dist/agents/mixins/NeuralCapableMixin.d.ts +0 -130
- package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +0 -1
- package/dist/agents/mixins/NeuralCapableMixin.js +0 -358
- package/dist/agents/mixins/NeuralCapableMixin.js.map +0 -1
- package/dist/agents/mixins/QUICCapableMixin.d.ts +0 -34
- package/dist/agents/mixins/QUICCapableMixin.d.ts.map +0 -1
- package/dist/agents/mixins/QUICCapableMixin.js +0 -346
- package/dist/agents/mixins/QUICCapableMixin.js.map +0 -1
- package/dist/core/security/CertificateValidator.d.ts +0 -130
- package/dist/core/security/CertificateValidator.d.ts.map +0 -1
- package/dist/core/security/CertificateValidator.js +0 -376
- package/dist/core/security/CertificateValidator.js.map +0 -1
- package/dist/core/transport/QUICTransport.d.ts +0 -62
- package/dist/core/transport/QUICTransport.d.ts.map +0 -1
- package/dist/core/transport/QUICTransport.js +0 -381
- package/dist/core/transport/QUICTransport.js.map +0 -1
- package/dist/core/transport/SecureQUICTransport.d.ts +0 -71
- package/dist/core/transport/SecureQUICTransport.d.ts.map +0 -1
- package/dist/core/transport/SecureQUICTransport.js +0 -253
- package/dist/core/transport/SecureQUICTransport.js.map +0 -1
- package/dist/learning/AdvancedFeatureExtractor.d.ts +0 -123
- package/dist/learning/AdvancedFeatureExtractor.d.ts.map +0 -1
- package/dist/learning/AdvancedFeatureExtractor.js +0 -423
- package/dist/learning/AdvancedFeatureExtractor.js.map +0 -1
- package/dist/learning/NeuralPatternMatcher.d.ts +0 -184
- package/dist/learning/NeuralPatternMatcher.d.ts.map +0 -1
- package/dist/learning/NeuralPatternMatcher.js +0 -702
- package/dist/learning/NeuralPatternMatcher.js.map +0 -1
- package/dist/learning/NeuralTrainer.d.ts +0 -209
- package/dist/learning/NeuralTrainer.d.ts.map +0 -1
- package/dist/learning/NeuralTrainer.js +0 -478
- package/dist/learning/NeuralTrainer.js.map +0 -1
- package/dist/transport/QUICTransport.d.ts +0 -340
- package/dist/transport/QUICTransport.d.ts.map +0 -1
- package/dist/transport/QUICTransport.js +0 -814
- package/dist/transport/QUICTransport.js.map +0 -1
- package/dist/transport/UDPTransport.d.ts +0 -348
- package/dist/transport/UDPTransport.d.ts.map +0 -1
- package/dist/transport/UDPTransport.js +0 -820
- package/dist/transport/UDPTransport.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperienceReplayBuffer.d.ts","sourceRoot":"","sources":["../../src/learning/ExperienceReplayBuffer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAWD;;GAEG;AACH,UAAU,qBAAqB;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAOpD;;;OAGG;IACH,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAgBxD;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI;IAO7C;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE;IAe3C;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAalE;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAO1C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAO1C;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,GAAG,cAAc,EAAE;IAMrE;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,aAAa,IAAI;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB;IAmBD;;OAEG;IACH,MAAM,IAAI;QACR,MAAM,EAAE,qBAAqB,EAAE,CAAC;QAChC,MAAM,EAAE,kBAAkB,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAQD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE;QACZ,MAAM,EAAE,qBAAqB,EAAE,CAAC;QAChC,MAAM,EAAE,kBAAkB,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,IAAI;IAMR;;;OAGG;IACH,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAYrC;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ExperienceReplayBuffer - Phase 2 (Milestone 2.2)
|
|
4
|
+
*
|
|
5
|
+
* Implements experience replay buffer for reinforcement learning.
|
|
6
|
+
* Stores transitions and enables batch sampling for training.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ExperienceReplayBuffer = void 0;
|
|
10
|
+
const Logger_1 = require("../utils/Logger");
|
|
11
|
+
/**
|
|
12
|
+
* Default replay buffer configuration
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_CONFIG = {
|
|
15
|
+
maxSize: 10000,
|
|
16
|
+
minSize: 100,
|
|
17
|
+
prioritized: false
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* ExperienceReplayBuffer - FIFO buffer with optional prioritization
|
|
21
|
+
*
|
|
22
|
+
* Implements experience replay for more stable and efficient learning.
|
|
23
|
+
* Supports both uniform random sampling and prioritized experience replay.
|
|
24
|
+
*/
|
|
25
|
+
class ExperienceReplayBuffer {
|
|
26
|
+
constructor(config = {}) {
|
|
27
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
28
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
29
|
+
this.buffer = [];
|
|
30
|
+
this.totalExperiences = 0;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a new experience to the buffer
|
|
34
|
+
* Uses FIFO eviction when buffer is full
|
|
35
|
+
*/
|
|
36
|
+
add(experience, priority) {
|
|
37
|
+
const prioritizedExp = {
|
|
38
|
+
experience,
|
|
39
|
+
priority: priority ?? this.calculateDefaultPriority(experience),
|
|
40
|
+
timestamp: Date.now()
|
|
41
|
+
};
|
|
42
|
+
// FIFO eviction: remove oldest when full
|
|
43
|
+
if (this.buffer.length >= this.config.maxSize) {
|
|
44
|
+
this.buffer.shift(); // Remove oldest (first element)
|
|
45
|
+
}
|
|
46
|
+
this.buffer.push(prioritizedExp);
|
|
47
|
+
this.totalExperiences++;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Add multiple experiences in batch
|
|
51
|
+
*/
|
|
52
|
+
addBatch(experiences) {
|
|
53
|
+
for (const experience of experiences) {
|
|
54
|
+
this.add(experience);
|
|
55
|
+
}
|
|
56
|
+
this.logger.debug(`Added batch of ${experiences.length} experiences`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sample a random batch of experiences
|
|
60
|
+
* Uses uniform random sampling or prioritized sampling based on config
|
|
61
|
+
*/
|
|
62
|
+
sample(batchSize) {
|
|
63
|
+
if (!this.canSample(batchSize)) {
|
|
64
|
+
throw new Error(`Cannot sample: buffer has ${this.buffer.length} experiences, ` +
|
|
65
|
+
`need at least ${Math.max(batchSize, this.config.minSize)}`);
|
|
66
|
+
}
|
|
67
|
+
if (this.config.prioritized) {
|
|
68
|
+
return this.prioritizedSample(batchSize);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return this.uniformSample(batchSize);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Uniform random sampling (default)
|
|
76
|
+
*/
|
|
77
|
+
uniformSample(batchSize) {
|
|
78
|
+
const sampled = [];
|
|
79
|
+
const indices = new Set();
|
|
80
|
+
// Sample without replacement
|
|
81
|
+
while (indices.size < batchSize) {
|
|
82
|
+
const randomIndex = Math.floor(Math.random() * this.buffer.length);
|
|
83
|
+
if (!indices.has(randomIndex)) {
|
|
84
|
+
indices.add(randomIndex);
|
|
85
|
+
sampled.push(this.buffer[randomIndex].experience);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return sampled;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Prioritized experience replay sampling
|
|
92
|
+
* Samples based on priority with probability proportional to priority
|
|
93
|
+
*/
|
|
94
|
+
prioritizedSample(batchSize) {
|
|
95
|
+
const sampled = [];
|
|
96
|
+
const totalPriority = this.buffer.reduce((sum, exp) => sum + exp.priority, 0);
|
|
97
|
+
// Sample with replacement based on priorities
|
|
98
|
+
for (let i = 0; i < batchSize; i++) {
|
|
99
|
+
let random = Math.random() * totalPriority;
|
|
100
|
+
let cumulativePriority = 0;
|
|
101
|
+
for (const exp of this.buffer) {
|
|
102
|
+
cumulativePriority += exp.priority;
|
|
103
|
+
if (random <= cumulativePriority) {
|
|
104
|
+
sampled.push(exp.experience);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return sampled;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Update priority for a specific experience
|
|
113
|
+
* Used in prioritized experience replay to adjust importance weights
|
|
114
|
+
*/
|
|
115
|
+
updatePriority(experienceId, newPriority) {
|
|
116
|
+
const index = this.buffer.findIndex(exp => exp.experience.taskId === experienceId);
|
|
117
|
+
if (index === -1) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
this.buffer[index].priority = newPriority;
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Calculate default priority based on TD-error magnitude
|
|
125
|
+
* Higher absolute rewards get higher priority
|
|
126
|
+
*/
|
|
127
|
+
calculateDefaultPriority(experience) {
|
|
128
|
+
// Priority based on absolute reward (experiences with higher impact are prioritized)
|
|
129
|
+
const basePriority = Math.abs(experience.reward) + 0.01; // Add small constant to avoid zero priority
|
|
130
|
+
// Recent experiences get slight boost
|
|
131
|
+
const recencyBoost = 1.0;
|
|
132
|
+
return basePriority * recencyBoost;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if buffer has enough experiences to sample
|
|
136
|
+
*/
|
|
137
|
+
canSample(batchSize) {
|
|
138
|
+
return this.buffer.length >= Math.max(batchSize, this.config.minSize);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get recent experiences (for temporal coherence)
|
|
142
|
+
*/
|
|
143
|
+
getRecent(count) {
|
|
144
|
+
const actualCount = Math.min(count, this.buffer.length);
|
|
145
|
+
return this.buffer
|
|
146
|
+
.slice(-actualCount)
|
|
147
|
+
.map(exp => exp.experience);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get oldest experiences
|
|
151
|
+
*/
|
|
152
|
+
getOldest(count) {
|
|
153
|
+
const actualCount = Math.min(count, this.buffer.length);
|
|
154
|
+
return this.buffer
|
|
155
|
+
.slice(0, actualCount)
|
|
156
|
+
.map(exp => exp.experience);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get all experiences matching a filter
|
|
160
|
+
*/
|
|
161
|
+
filter(predicate) {
|
|
162
|
+
return this.buffer
|
|
163
|
+
.filter(exp => predicate(exp.experience))
|
|
164
|
+
.map(exp => exp.experience);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Clear the buffer
|
|
168
|
+
*/
|
|
169
|
+
clear() {
|
|
170
|
+
this.buffer = [];
|
|
171
|
+
this.logger.info('Experience replay buffer cleared');
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get current buffer size
|
|
175
|
+
*/
|
|
176
|
+
size() {
|
|
177
|
+
return this.buffer.length;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if buffer is empty
|
|
181
|
+
*/
|
|
182
|
+
isEmpty() {
|
|
183
|
+
return this.buffer.length === 0;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Check if buffer is full
|
|
187
|
+
*/
|
|
188
|
+
isFull() {
|
|
189
|
+
return this.buffer.length >= this.config.maxSize;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get total number of experiences ever added (including evicted)
|
|
193
|
+
*/
|
|
194
|
+
getTotalExperiences() {
|
|
195
|
+
return this.totalExperiences;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get buffer statistics
|
|
199
|
+
*/
|
|
200
|
+
getStatistics() {
|
|
201
|
+
const avgPriority = this.buffer.length > 0
|
|
202
|
+
? this.buffer.reduce((sum, exp) => sum + exp.priority, 0) / this.buffer.length
|
|
203
|
+
: 0;
|
|
204
|
+
const avgReward = this.buffer.length > 0
|
|
205
|
+
? this.buffer.reduce((sum, exp) => sum + exp.experience.reward, 0) / this.buffer.length
|
|
206
|
+
: 0;
|
|
207
|
+
return {
|
|
208
|
+
size: this.buffer.length,
|
|
209
|
+
maxSize: this.config.maxSize,
|
|
210
|
+
utilization: this.buffer.length / this.config.maxSize,
|
|
211
|
+
totalAdded: this.totalExperiences,
|
|
212
|
+
avgPriority,
|
|
213
|
+
avgReward
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Export buffer state for persistence
|
|
218
|
+
*/
|
|
219
|
+
export() {
|
|
220
|
+
return {
|
|
221
|
+
buffer: [...this.buffer],
|
|
222
|
+
config: { ...this.config },
|
|
223
|
+
totalExperiences: this.totalExperiences
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Import buffer state from persistence
|
|
228
|
+
*/
|
|
229
|
+
import(state) {
|
|
230
|
+
this.buffer = [...state.buffer];
|
|
231
|
+
this.totalExperiences = state.totalExperiences;
|
|
232
|
+
this.logger.info(`Imported replay buffer with ${this.buffer.length} experiences`);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Prune old experiences beyond retention limit
|
|
236
|
+
* Keeps most recent experiences
|
|
237
|
+
*/
|
|
238
|
+
prune(retentionCount) {
|
|
239
|
+
if (this.buffer.length <= retentionCount) {
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
const removeCount = this.buffer.length - retentionCount;
|
|
243
|
+
this.buffer = this.buffer.slice(-retentionCount);
|
|
244
|
+
this.logger.info(`Pruned ${removeCount} old experiences from buffer`);
|
|
245
|
+
return removeCount;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get memory usage estimate in bytes
|
|
249
|
+
*/
|
|
250
|
+
getMemoryUsage() {
|
|
251
|
+
return JSON.stringify(this.buffer).length;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.ExperienceReplayBuffer = ExperienceReplayBuffer;
|
|
255
|
+
//# sourceMappingURL=ExperienceReplayBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperienceReplayBuffer.js","sourceRoot":"","sources":["../../src/learning/ExperienceReplayBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FixRecommendationEngine - Automated fix recommendations for flaky tests
|
|
3
|
+
*
|
|
4
|
+
* Generates actionable fix recommendations with code examples based on root cause analysis
|
|
5
|
+
*
|
|
6
|
+
* @module learning/FixRecommendationEngine
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
import { FlakyFixRecommendation } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Root cause categories for flaky tests
|
|
12
|
+
*/
|
|
13
|
+
export type RootCause = 'timing' | 'race_condition' | 'dependency' | 'isolation' | 'environment';
|
|
14
|
+
/**
|
|
15
|
+
* Root cause analysis result
|
|
16
|
+
*/
|
|
17
|
+
export interface RootCauseAnalysis {
|
|
18
|
+
cause: RootCause;
|
|
19
|
+
mlConfidence: number;
|
|
20
|
+
evidence: string[];
|
|
21
|
+
patterns: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* FixRecommendationEngine for generating automated fix recommendations
|
|
25
|
+
*/
|
|
26
|
+
export declare class FixRecommendationEngine {
|
|
27
|
+
/**
|
|
28
|
+
* Generate fix recommendations based on root cause
|
|
29
|
+
*
|
|
30
|
+
* @param rootCause - Root cause analysis result
|
|
31
|
+
* @returns Array of fix recommendations with code examples
|
|
32
|
+
*/
|
|
33
|
+
generateRecommendations(rootCause: RootCauseAnalysis): FlakyFixRecommendation[];
|
|
34
|
+
/**
|
|
35
|
+
* Timing-related fixes
|
|
36
|
+
*/
|
|
37
|
+
private timingFixes;
|
|
38
|
+
/**
|
|
39
|
+
* Race condition fixes
|
|
40
|
+
*/
|
|
41
|
+
private raceFixes;
|
|
42
|
+
/**
|
|
43
|
+
* Dependency-related fixes
|
|
44
|
+
*/
|
|
45
|
+
private dependencyFixes;
|
|
46
|
+
/**
|
|
47
|
+
* Isolation-related fixes
|
|
48
|
+
*/
|
|
49
|
+
private isolationFixes;
|
|
50
|
+
/**
|
|
51
|
+
* Environment-related fixes
|
|
52
|
+
*/
|
|
53
|
+
private environmentFixes;
|
|
54
|
+
/**
|
|
55
|
+
* Generic fixes for unknown root causes
|
|
56
|
+
*/
|
|
57
|
+
private genericFixes;
|
|
58
|
+
/**
|
|
59
|
+
* Get priority order for recommendations
|
|
60
|
+
*/
|
|
61
|
+
getPriorityOrder(recommendations: FlakyFixRecommendation[]): FlakyFixRecommendation[];
|
|
62
|
+
/**
|
|
63
|
+
* Filter recommendations by effort
|
|
64
|
+
*/
|
|
65
|
+
filterByEffort(recommendations: FlakyFixRecommendation[], maxEffort: 'low' | 'medium' | 'high'): FlakyFixRecommendation[];
|
|
66
|
+
}
|
|
67
|
+
export default FixRecommendationEngine;
|
|
68
|
+
//# sourceMappingURL=FixRecommendationEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixRecommendationEngine.d.ts","sourceRoot":"","sources":["../../src/learning/FixRecommendationEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC;;;;;OAKG;IACH,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,GAAG,sBAAsB,EAAE;IAiB/E;;OAEG;IACH,OAAO,CAAC,WAAW;IAoFnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAiFjB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4EvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoFtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+ExB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiCpB;;OAEG;IACH,gBAAgB,CAAC,eAAe,EAAE,sBAAsB,EAAE,GAAG,sBAAsB,EAAE;IAarF;;OAEG;IACH,cAAc,CACZ,eAAe,EAAE,sBAAsB,EAAE,EACzC,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GACnC,sBAAsB,EAAE;CAW5B;AAED,eAAe,uBAAuB,CAAC"}
|