agentic-qe 1.0.5 → 1.1.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 (141) hide show
  1. package/.claude/agents/qe-quality-analyzer.md +405 -0
  2. package/CHANGELOG.md +109 -0
  3. package/CONTRIBUTING.md +51 -0
  4. package/README.md +669 -162
  5. package/bin/aqe +90 -938
  6. package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
  7. package/dist/adapters/MemoryStoreAdapter.js +6 -0
  8. package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
  9. package/dist/agents/CoverageAnalyzerAgent.d.ts +58 -3
  10. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  11. package/dist/agents/CoverageAnalyzerAgent.js +316 -48
  12. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  13. package/dist/agents/FlakyTestHunterAgent.d.ts +48 -4
  14. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  15. package/dist/agents/FlakyTestHunterAgent.js +217 -10
  16. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  17. package/dist/agents/LearningAgent.d.ts +75 -0
  18. package/dist/agents/LearningAgent.d.ts.map +1 -0
  19. package/dist/agents/LearningAgent.js +177 -0
  20. package/dist/agents/LearningAgent.js.map +1 -0
  21. package/dist/agents/TestGeneratorAgent.d.ts +42 -2
  22. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  23. package/dist/agents/TestGeneratorAgent.js +232 -13
  24. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  25. package/dist/cli/commands/improve/index.d.ts +70 -0
  26. package/dist/cli/commands/improve/index.d.ts.map +1 -0
  27. package/dist/cli/commands/improve/index.js +530 -0
  28. package/dist/cli/commands/improve/index.js.map +1 -0
  29. package/dist/cli/commands/init.d.ts +33 -0
  30. package/dist/cli/commands/init.d.ts.map +1 -1
  31. package/dist/cli/commands/init.js +656 -39
  32. package/dist/cli/commands/init.js.map +1 -1
  33. package/dist/cli/commands/learn/index.d.ts +68 -0
  34. package/dist/cli/commands/learn/index.d.ts.map +1 -0
  35. package/dist/cli/commands/learn/index.js +431 -0
  36. package/dist/cli/commands/learn/index.js.map +1 -0
  37. package/dist/cli/commands/patterns/index.d.ts +75 -0
  38. package/dist/cli/commands/patterns/index.d.ts.map +1 -0
  39. package/dist/cli/commands/patterns/index.js +502 -0
  40. package/dist/cli/commands/patterns/index.js.map +1 -0
  41. package/dist/cli/index.js +367 -8
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/core/memory/SwarmMemoryManager.d.ts +5 -0
  44. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  45. package/dist/core/memory/SwarmMemoryManager.js +7 -0
  46. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  47. package/dist/index.d.ts +10 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +10 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
  52. package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
  53. package/dist/learning/FlakyFixRecommendations.js +247 -0
  54. package/dist/learning/FlakyFixRecommendations.js.map +1 -0
  55. package/dist/learning/FlakyPredictionModel.d.ts +57 -0
  56. package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
  57. package/dist/learning/FlakyPredictionModel.js +289 -0
  58. package/dist/learning/FlakyPredictionModel.js.map +1 -0
  59. package/dist/learning/FlakyTestDetector.d.ts +46 -0
  60. package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
  61. package/dist/learning/FlakyTestDetector.js +215 -0
  62. package/dist/learning/FlakyTestDetector.js.map +1 -0
  63. package/dist/learning/ImprovementLoop.d.ts +119 -0
  64. package/dist/learning/ImprovementLoop.d.ts.map +1 -0
  65. package/dist/learning/ImprovementLoop.js +353 -0
  66. package/dist/learning/ImprovementLoop.js.map +1 -0
  67. package/dist/learning/LearningEngine.d.ts +144 -0
  68. package/dist/learning/LearningEngine.d.ts.map +1 -0
  69. package/dist/learning/LearningEngine.js +531 -0
  70. package/dist/learning/LearningEngine.js.map +1 -0
  71. package/dist/learning/PerformanceTracker.d.ts +118 -0
  72. package/dist/learning/PerformanceTracker.d.ts.map +1 -0
  73. package/dist/learning/PerformanceTracker.js +376 -0
  74. package/dist/learning/PerformanceTracker.js.map +1 -0
  75. package/dist/learning/StatisticalAnalysis.d.ts +47 -0
  76. package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
  77. package/dist/learning/StatisticalAnalysis.js +170 -0
  78. package/dist/learning/StatisticalAnalysis.js.map +1 -0
  79. package/dist/learning/SwarmIntegration.d.ts +107 -0
  80. package/dist/learning/SwarmIntegration.d.ts.map +1 -0
  81. package/dist/learning/SwarmIntegration.js +191 -0
  82. package/dist/learning/SwarmIntegration.js.map +1 -0
  83. package/dist/learning/index.d.ts +10 -0
  84. package/dist/learning/index.d.ts.map +1 -0
  85. package/dist/learning/index.js +16 -0
  86. package/dist/learning/index.js.map +1 -0
  87. package/dist/learning/types.d.ts +288 -0
  88. package/dist/learning/types.d.ts.map +1 -0
  89. package/dist/learning/types.js +9 -0
  90. package/dist/learning/types.js.map +1 -0
  91. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
  92. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
  93. package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
  94. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
  95. package/dist/mcp/server.d.ts.map +1 -1
  96. package/dist/mcp/server.js +94 -0
  97. package/dist/mcp/server.js.map +1 -1
  98. package/dist/mcp/tools.d.ts +15 -0
  99. package/dist/mcp/tools.d.ts.map +1 -1
  100. package/dist/mcp/tools.js +17 -1
  101. package/dist/mcp/tools.js.map +1 -1
  102. package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
  103. package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
  104. package/dist/reasoning/CodeSignatureGenerator.js +427 -0
  105. package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
  106. package/dist/reasoning/PatternClassifier.d.ts +98 -0
  107. package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
  108. package/dist/reasoning/PatternClassifier.js +345 -0
  109. package/dist/reasoning/PatternClassifier.js.map +1 -0
  110. package/dist/reasoning/PatternExtractor.d.ts +131 -0
  111. package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
  112. package/dist/reasoning/PatternExtractor.js +539 -0
  113. package/dist/reasoning/PatternExtractor.js.map +1 -0
  114. package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
  115. package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
  116. package/dist/reasoning/PatternMemoryIntegration.js +336 -0
  117. package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
  118. package/dist/reasoning/QEReasoningBank.d.ts +121 -0
  119. package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
  120. package/dist/reasoning/QEReasoningBank.js +235 -0
  121. package/dist/reasoning/QEReasoningBank.js.map +1 -0
  122. package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
  123. package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
  124. package/dist/reasoning/TestTemplateCreator.js +535 -0
  125. package/dist/reasoning/TestTemplateCreator.js.map +1 -0
  126. package/dist/reasoning/index.d.ts +10 -0
  127. package/dist/reasoning/index.d.ts.map +1 -0
  128. package/dist/reasoning/index.js +31 -0
  129. package/dist/reasoning/index.js.map +1 -0
  130. package/dist/reasoning/types.d.ts +717 -0
  131. package/dist/reasoning/types.d.ts.map +1 -0
  132. package/dist/reasoning/types.js +57 -0
  133. package/dist/reasoning/types.js.map +1 -0
  134. package/dist/types/index.d.ts +4 -0
  135. package/dist/types/index.d.ts.map +1 -1
  136. package/dist/types/index.js.map +1 -1
  137. package/dist/types/pattern.types.d.ts +364 -0
  138. package/dist/types/pattern.types.d.ts.map +1 -0
  139. package/dist/types/pattern.types.js +60 -0
  140. package/dist/types/pattern.types.js.map +1 -0
  141. package/package.json +25 -3
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ /**
3
+ * PerformanceTracker - Phase 2 (Milestone 2.2)
4
+ *
5
+ * Tracks agent performance metrics over time and calculates improvement rates.
6
+ * Target: 20% performance improvement over 30 days.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PerformanceTracker = void 0;
10
+ const Logger_1 = require("../utils/Logger");
11
+ /**
12
+ * PerformanceTracker - Track and analyze agent performance over time
13
+ */
14
+ class PerformanceTracker {
15
+ constructor(agentId, memoryStore) {
16
+ // Target metrics
17
+ this.TARGET_IMPROVEMENT = 0.20; // 20%
18
+ this.TARGET_PERIOD_DAYS = 30;
19
+ this.logger = Logger_1.Logger.getInstance();
20
+ this.agentId = agentId;
21
+ this.memoryStore = memoryStore;
22
+ this.snapshots = [];
23
+ }
24
+ /**
25
+ * Initialize the performance tracker
26
+ */
27
+ async initialize() {
28
+ this.logger.info(`Initializing PerformanceTracker for agent ${this.agentId}`);
29
+ // Load previous snapshots
30
+ await this.loadSnapshots();
31
+ // Set baseline if not exists
32
+ if (!this.baselineMetrics && this.snapshots.length > 0) {
33
+ this.baselineMetrics = this.snapshots[0].metrics;
34
+ }
35
+ this.logger.info('PerformanceTracker initialized successfully');
36
+ }
37
+ /**
38
+ * Record current performance snapshot
39
+ */
40
+ async recordSnapshot(metrics) {
41
+ const now = new Date();
42
+ const snapshot = {
43
+ timestamp: now,
44
+ metrics: {
45
+ agentId: this.agentId,
46
+ period: {
47
+ start: this.getLastSnapshotTime() || now,
48
+ end: now
49
+ },
50
+ ...metrics
51
+ }
52
+ };
53
+ this.snapshots.push(snapshot);
54
+ // Set baseline if first snapshot
55
+ if (!this.baselineMetrics) {
56
+ this.baselineMetrics = snapshot.metrics;
57
+ await this.storeBaseline(this.baselineMetrics);
58
+ }
59
+ // Store snapshot
60
+ await this.storeSnapshot(snapshot);
61
+ // Prune old snapshots (keep 90 days)
62
+ await this.pruneOldSnapshots(90);
63
+ this.logger.debug(`Recorded performance snapshot for agent ${this.agentId}`);
64
+ }
65
+ /**
66
+ * Calculate current improvement rate vs baseline
67
+ */
68
+ async calculateImprovement() {
69
+ if (!this.baselineMetrics || this.snapshots.length === 0) {
70
+ throw new Error('No baseline or snapshots available');
71
+ }
72
+ const currentMetrics = this.getCurrentMetrics();
73
+ const daysElapsed = this.getDaysElapsed();
74
+ // Calculate composite performance score
75
+ const baselineScore = this.calculatePerformanceScore(this.baselineMetrics);
76
+ const currentScore = this.calculatePerformanceScore(currentMetrics);
77
+ const improvementRate = ((currentScore - baselineScore) / baselineScore) * 100;
78
+ const targetAchieved = improvementRate >= (this.TARGET_IMPROVEMENT * 100);
79
+ const improvement = {
80
+ agentId: this.agentId,
81
+ baseline: this.baselineMetrics,
82
+ current: currentMetrics,
83
+ improvementRate,
84
+ daysElapsed,
85
+ targetAchieved
86
+ };
87
+ // Store improvement data
88
+ await this.memoryStore.store(`phase2/learning/${this.agentId}/improvement`, improvement, { partition: 'learning' });
89
+ return improvement;
90
+ }
91
+ /**
92
+ * Get improvement trend over time
93
+ */
94
+ async getImprovementTrend(days = 30) {
95
+ if (!this.baselineMetrics) {
96
+ throw new Error('No baseline available');
97
+ }
98
+ const cutoffDate = new Date();
99
+ cutoffDate.setDate(cutoffDate.getDate() - days);
100
+ const recentSnapshots = this.snapshots.filter(s => s.timestamp >= cutoffDate);
101
+ const baselineScore = this.calculatePerformanceScore(this.baselineMetrics);
102
+ const timeline = recentSnapshots.map(snapshot => ({
103
+ date: snapshot.timestamp,
104
+ improvementRate: ((this.calculatePerformanceScore(snapshot.metrics) - baselineScore) / baselineScore) * 100
105
+ }));
106
+ const currentRate = timeline.length > 0 ? timeline[timeline.length - 1].improvementRate : 0;
107
+ // Project 30-day improvement based on current trend
108
+ const projected30Day = this.projectImprovement(timeline, 30);
109
+ return {
110
+ timeline,
111
+ currentRate,
112
+ projected30Day
113
+ };
114
+ }
115
+ /**
116
+ * Get performance metrics for a specific time period
117
+ */
118
+ async getMetricsForPeriod(startDate, endDate) {
119
+ const periodSnapshots = this.snapshots.filter(s => s.timestamp >= startDate && s.timestamp <= endDate);
120
+ if (periodSnapshots.length === 0) {
121
+ throw new Error('No snapshots found for the specified period');
122
+ }
123
+ // Aggregate metrics
124
+ const aggregated = this.aggregateMetrics(periodSnapshots.map(s => s.metrics));
125
+ return {
126
+ agentId: this.agentId,
127
+ period: { start: startDate, end: endDate },
128
+ metrics: aggregated.metrics,
129
+ trends: this.calculateTrends(periodSnapshots)
130
+ };
131
+ }
132
+ /**
133
+ * Generate performance report
134
+ */
135
+ async generateReport() {
136
+ const improvement = await this.calculateImprovement();
137
+ const currentMetrics = this.getCurrentMetrics();
138
+ const summary = this.generateSummary(improvement);
139
+ const recommendations = this.generateRecommendations(improvement, currentMetrics);
140
+ return {
141
+ summary,
142
+ improvement,
143
+ trends: currentMetrics.trends,
144
+ recommendations
145
+ };
146
+ }
147
+ /**
148
+ * Calculate composite performance score
149
+ */
150
+ calculatePerformanceScore(metrics) {
151
+ const weights = {
152
+ successRate: 0.30,
153
+ userSatisfaction: 0.25,
154
+ executionTime: 0.20,
155
+ errorRate: 0.15,
156
+ resourceEfficiency: 0.10
157
+ };
158
+ // Normalize execution time (lower is better)
159
+ const normalizedTime = Math.max(0, 1 - (metrics.metrics.averageExecutionTime / 60000)); // 1 min baseline
160
+ // Normalize error rate (lower is better)
161
+ const normalizedErrorRate = Math.max(0, 1 - metrics.metrics.errorRate);
162
+ const score = metrics.metrics.successRate * weights.successRate +
163
+ metrics.metrics.userSatisfaction * weights.userSatisfaction +
164
+ normalizedTime * weights.executionTime +
165
+ normalizedErrorRate * weights.errorRate +
166
+ metrics.metrics.resourceEfficiency * weights.resourceEfficiency;
167
+ return score;
168
+ }
169
+ /**
170
+ * Aggregate metrics from multiple snapshots
171
+ */
172
+ aggregateMetrics(metricsList) {
173
+ const count = metricsList.length;
174
+ const aggregated = {
175
+ tasksCompleted: metricsList.reduce((sum, m) => sum + m.metrics.tasksCompleted, 0),
176
+ successRate: metricsList.reduce((sum, m) => sum + m.metrics.successRate, 0) / count,
177
+ averageExecutionTime: metricsList.reduce((sum, m) => sum + m.metrics.averageExecutionTime, 0) / count,
178
+ errorRate: metricsList.reduce((sum, m) => sum + m.metrics.errorRate, 0) / count,
179
+ userSatisfaction: metricsList.reduce((sum, m) => sum + m.metrics.userSatisfaction, 0) / count,
180
+ resourceEfficiency: metricsList.reduce((sum, m) => sum + m.metrics.resourceEfficiency, 0) / count
181
+ };
182
+ return {
183
+ agentId: this.agentId,
184
+ period: {
185
+ start: metricsList[0].period.start,
186
+ end: metricsList[metricsList.length - 1].period.end
187
+ },
188
+ metrics: aggregated,
189
+ trends: []
190
+ };
191
+ }
192
+ /**
193
+ * Calculate trends from snapshots
194
+ */
195
+ calculateTrends(snapshots) {
196
+ if (snapshots.length < 2) {
197
+ return [];
198
+ }
199
+ const first = snapshots[0].metrics.metrics;
200
+ const last = snapshots[snapshots.length - 1].metrics.metrics;
201
+ const calculateTrend = (metric, firstValue, lastValue) => {
202
+ const change = lastValue - firstValue;
203
+ const changeRate = (change / firstValue) * 100;
204
+ return {
205
+ metric,
206
+ direction: (change > 0.05 ? 'up' : change < -0.05 ? 'down' : 'stable'),
207
+ changeRate
208
+ };
209
+ };
210
+ return [
211
+ calculateTrend('successRate', first.successRate, last.successRate),
212
+ calculateTrend('averageExecutionTime', first.averageExecutionTime, last.averageExecutionTime),
213
+ calculateTrend('errorRate', first.errorRate, last.errorRate),
214
+ calculateTrend('userSatisfaction', first.userSatisfaction, last.userSatisfaction),
215
+ calculateTrend('resourceEfficiency', first.resourceEfficiency, last.resourceEfficiency)
216
+ ];
217
+ }
218
+ /**
219
+ * Project future improvement based on current trend
220
+ */
221
+ projectImprovement(timeline, days) {
222
+ if (timeline.length < 2) {
223
+ return 0;
224
+ }
225
+ // Calculate linear regression
226
+ const n = timeline.length;
227
+ const x = timeline.map((_, i) => i); // days index
228
+ const y = timeline.map(t => t.improvementRate);
229
+ const sumX = x.reduce((a, b) => a + b, 0);
230
+ const sumY = y.reduce((a, b) => a + b, 0);
231
+ const sumXY = x.reduce((sum, xi, i) => sum + xi * y[i], 0);
232
+ const sumX2 = x.reduce((sum, xi) => sum + xi * xi, 0);
233
+ const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
234
+ const intercept = (sumY - slope * sumX) / n;
235
+ // Project to target days
236
+ const projectedValue = slope * days + intercept;
237
+ return projectedValue;
238
+ }
239
+ /**
240
+ * Generate summary text
241
+ */
242
+ generateSummary(improvement) {
243
+ const { improvementRate, daysElapsed, targetAchieved } = improvement;
244
+ let summary = `Agent ${this.agentId} performance: `;
245
+ if (targetAchieved) {
246
+ summary += `✓ Target achieved! ${improvementRate.toFixed(1)}% improvement over ${daysElapsed} days.`;
247
+ }
248
+ else {
249
+ summary += `${improvementRate.toFixed(1)}% improvement over ${daysElapsed} days. `;
250
+ const remaining = (this.TARGET_IMPROVEMENT * 100) - improvementRate;
251
+ summary += `${remaining.toFixed(1)}% improvement needed to reach 20% target.`;
252
+ }
253
+ return summary;
254
+ }
255
+ /**
256
+ * Generate recommendations based on performance
257
+ */
258
+ generateRecommendations(improvement, currentMetrics) {
259
+ const recommendations = [];
260
+ // Check success rate
261
+ if (currentMetrics.metrics.successRate < 0.9) {
262
+ recommendations.push('Focus on improving task success rate through better error handling and retry strategies');
263
+ }
264
+ // Check execution time
265
+ if (currentMetrics.metrics.averageExecutionTime > 30000) {
266
+ recommendations.push('Optimize execution time by enabling parallel processing and caching');
267
+ }
268
+ // Check error rate
269
+ if (currentMetrics.metrics.errorRate > 0.1) {
270
+ recommendations.push('Reduce error rate by implementing more robust validation and edge case handling');
271
+ }
272
+ // Check user satisfaction
273
+ if (currentMetrics.metrics.userSatisfaction < 0.8) {
274
+ recommendations.push('Improve user satisfaction by enhancing output quality and documentation');
275
+ }
276
+ // Check improvement rate
277
+ if (improvement.improvementRate < 10 && improvement.daysElapsed > 15) {
278
+ recommendations.push('Consider adjusting learning rate or exploring different strategies');
279
+ }
280
+ if (recommendations.length === 0) {
281
+ recommendations.push('Performance is excellent! Continue current strategies and maintain quality.');
282
+ }
283
+ return recommendations;
284
+ }
285
+ /**
286
+ * Get current metrics (most recent snapshot)
287
+ */
288
+ getCurrentMetrics() {
289
+ if (this.snapshots.length === 0) {
290
+ throw new Error('No snapshots available');
291
+ }
292
+ return this.snapshots[this.snapshots.length - 1].metrics;
293
+ }
294
+ /**
295
+ * Get days elapsed since baseline
296
+ */
297
+ getDaysElapsed() {
298
+ if (!this.baselineMetrics) {
299
+ return 0;
300
+ }
301
+ const now = new Date();
302
+ const baseline = this.baselineMetrics.period.start;
303
+ const diff = now.getTime() - baseline.getTime();
304
+ return diff / (1000 * 60 * 60 * 24); // convert to days
305
+ }
306
+ /**
307
+ * Get last snapshot timestamp
308
+ */
309
+ getLastSnapshotTime() {
310
+ if (this.snapshots.length === 0) {
311
+ return null;
312
+ }
313
+ return this.snapshots[this.snapshots.length - 1].timestamp;
314
+ }
315
+ /**
316
+ * Store snapshot in memory
317
+ */
318
+ async storeSnapshot(snapshot) {
319
+ const key = `phase2/learning/${this.agentId}/snapshots/${snapshot.timestamp.getTime()}`;
320
+ await this.memoryStore.store(key, snapshot, { partition: 'learning' });
321
+ }
322
+ /**
323
+ * Store baseline metrics
324
+ */
325
+ async storeBaseline(baseline) {
326
+ await this.memoryStore.store(`phase2/learning/${this.agentId}/baseline`, baseline, { partition: 'learning' });
327
+ }
328
+ /**
329
+ * Load snapshots from memory
330
+ */
331
+ async loadSnapshots() {
332
+ try {
333
+ // Load baseline
334
+ const baseline = await this.memoryStore.retrieve(`phase2/learning/${this.agentId}/baseline`, { partition: 'learning' });
335
+ if (baseline) {
336
+ this.baselineMetrics = baseline;
337
+ }
338
+ // Load snapshots (query pattern)
339
+ const snapshotEntries = await this.memoryStore.query(`phase2/learning/${this.agentId}/snapshots/%`, { partition: 'learning' });
340
+ this.snapshots = snapshotEntries
341
+ .map(entry => entry.value)
342
+ .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
343
+ this.logger.info(`Loaded ${this.snapshots.length} performance snapshots`);
344
+ }
345
+ catch (error) {
346
+ this.logger.warn('No previous performance data found, starting fresh');
347
+ }
348
+ }
349
+ /**
350
+ * Prune old snapshots
351
+ */
352
+ async pruneOldSnapshots(keepDays) {
353
+ const cutoffDate = new Date();
354
+ cutoffDate.setDate(cutoffDate.getDate() - keepDays);
355
+ const before = this.snapshots.length;
356
+ this.snapshots = this.snapshots.filter(s => s.timestamp >= cutoffDate);
357
+ const after = this.snapshots.length;
358
+ if (before > after) {
359
+ this.logger.info(`Pruned ${before - after} old snapshots`);
360
+ }
361
+ }
362
+ /**
363
+ * Get total snapshots count
364
+ */
365
+ getSnapshotCount() {
366
+ return this.snapshots.length;
367
+ }
368
+ /**
369
+ * Get baseline metrics
370
+ */
371
+ getBaseline() {
372
+ return this.baselineMetrics;
373
+ }
374
+ }
375
+ exports.PerformanceTracker = PerformanceTracker;
376
+ //# sourceMappingURL=PerformanceTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerformanceTracker.js","sourceRoot":"","sources":["../../src/learning/PerformanceTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Statistical Analysis Tools for Flaky Test Detection
3
+ * Provides statistical methods for analyzing test result patterns
4
+ */
5
+ import type { TestResult, StatisticalMetrics } from './types';
6
+ export declare class StatisticalAnalysis {
7
+ /**
8
+ * Calculate pass rate for a set of test results
9
+ */
10
+ static calculatePassRate(results: TestResult[]): number;
11
+ /**
12
+ * Calculate variance in test execution times
13
+ */
14
+ static calculateVariance(results: TestResult[]): number;
15
+ /**
16
+ * Calculate confidence interval for pass rate
17
+ * Returns confidence level (0-1) based on sample size and consistency
18
+ */
19
+ static calculateConfidence(results: TestResult[]): number;
20
+ /**
21
+ * Calculate comprehensive statistical metrics
22
+ */
23
+ static calculateMetrics(values: number[]): StatisticalMetrics;
24
+ /**
25
+ * Detect trends in test results over time
26
+ * Returns positive number for improving, negative for degrading
27
+ */
28
+ static detectTrend(results: TestResult[]): number;
29
+ /**
30
+ * Calculate z-scores for all test results
31
+ */
32
+ static calculateZScores(results: TestResult[]): number[];
33
+ /**
34
+ * Identify outliers using IQR method
35
+ */
36
+ static identifyOutliers(values: number[]): number[];
37
+ /**
38
+ * Check if test shows flaky characteristics
39
+ */
40
+ static isFlakyCandidate(passRate: number, variance: number): boolean;
41
+ /**
42
+ * Calculate correlation between two series
43
+ */
44
+ static calculateCorrelation(x: number[], y: number[]): number;
45
+ private static calculateMean;
46
+ }
47
+ //# sourceMappingURL=StatisticalAnalysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatisticalAnalysis.d.ts","sourceRoot":"","sources":["../../src/learning/StatisticalAnalysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE9D,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAMvD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IASvD;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAgBzD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB;IA4C7D;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAiBjD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE;IAUxD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAiBnD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAUpE;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAuB7D,OAAO,CAAC,MAAM,CAAC,aAAa;CAI7B"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ /**
3
+ * Statistical Analysis Tools for Flaky Test Detection
4
+ * Provides statistical methods for analyzing test result patterns
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.StatisticalAnalysis = void 0;
8
+ class StatisticalAnalysis {
9
+ /**
10
+ * Calculate pass rate for a set of test results
11
+ */
12
+ static calculatePassRate(results) {
13
+ if (results.length === 0)
14
+ return 0;
15
+ const passed = results.filter(r => r.passed).length;
16
+ return passed / results.length;
17
+ }
18
+ /**
19
+ * Calculate variance in test execution times
20
+ */
21
+ static calculateVariance(results) {
22
+ if (results.length < 2)
23
+ return 0;
24
+ const durations = results.map(r => r.duration);
25
+ const mean = this.calculateMean(durations);
26
+ const squaredDiffs = durations.map(d => Math.pow(d - mean, 2));
27
+ return squaredDiffs.reduce((a, b) => a + b, 0) / durations.length;
28
+ }
29
+ /**
30
+ * Calculate confidence interval for pass rate
31
+ * Returns confidence level (0-1) based on sample size and consistency
32
+ */
33
+ static calculateConfidence(results) {
34
+ if (results.length === 0)
35
+ return 0;
36
+ // Confidence increases with sample size
37
+ const sampleSizeConfidence = Math.min(results.length / 100, 1);
38
+ // Confidence decreases with variance
39
+ const variance = this.calculateVariance(results);
40
+ const mean = this.calculateMean(results.map(r => r.duration));
41
+ const coefficientOfVariation = mean > 0 ? Math.sqrt(variance) / mean : 0;
42
+ const varianceConfidence = 1 - Math.min(coefficientOfVariation, 1);
43
+ // Combined confidence score
44
+ return (sampleSizeConfidence * 0.6 + varianceConfidence * 0.4);
45
+ }
46
+ /**
47
+ * Calculate comprehensive statistical metrics
48
+ */
49
+ static calculateMetrics(values) {
50
+ if (values.length === 0) {
51
+ return {
52
+ mean: 0,
53
+ median: 0,
54
+ variance: 0,
55
+ stdDev: 0,
56
+ min: 0,
57
+ max: 0,
58
+ coefficientOfVariation: 0,
59
+ outliers: []
60
+ };
61
+ }
62
+ const sorted = [...values].sort((a, b) => a - b);
63
+ const mean = this.calculateMean(values);
64
+ const variance = this.calculateVariance(values.map(v => ({ duration: v, name: '', passed: true, timestamp: 0 })));
65
+ const stdDev = Math.sqrt(variance);
66
+ const median = sorted.length % 2 === 0
67
+ ? (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2
68
+ : sorted[Math.floor(sorted.length / 2)];
69
+ // Calculate coefficient of variation
70
+ const coefficientOfVariation = mean > 0 ? stdDev / mean : 0;
71
+ // Identify outliers using z-score method
72
+ const outliers = values.filter(v => {
73
+ const zScore = stdDev > 0 ? Math.abs((v - mean) / stdDev) : 0;
74
+ return zScore > 2;
75
+ });
76
+ return {
77
+ mean,
78
+ median,
79
+ variance,
80
+ stdDev,
81
+ min: sorted[0],
82
+ max: sorted[sorted.length - 1],
83
+ coefficientOfVariation,
84
+ outliers
85
+ };
86
+ }
87
+ /**
88
+ * Detect trends in test results over time
89
+ * Returns positive number for improving, negative for degrading
90
+ */
91
+ static detectTrend(results) {
92
+ if (results.length < 3)
93
+ return 0;
94
+ // Sort by timestamp
95
+ const sorted = [...results].sort((a, b) => a.timestamp - b.timestamp);
96
+ // Split into two halves and compare pass rates
97
+ const midpoint = Math.floor(sorted.length / 2);
98
+ const firstHalf = sorted.slice(0, midpoint);
99
+ const secondHalf = sorted.slice(midpoint);
100
+ const firstPassRate = this.calculatePassRate(firstHalf);
101
+ const secondPassRate = this.calculatePassRate(secondHalf);
102
+ return secondPassRate - firstPassRate;
103
+ }
104
+ /**
105
+ * Calculate z-scores for all test results
106
+ */
107
+ static calculateZScores(results) {
108
+ const durations = results.map(r => r.duration);
109
+ const mean = this.calculateMean(durations);
110
+ const stdDev = Math.sqrt(this.calculateVariance(results));
111
+ if (stdDev === 0)
112
+ return durations.map(() => 0);
113
+ return durations.map(d => (d - mean) / stdDev);
114
+ }
115
+ /**
116
+ * Identify outliers using IQR method
117
+ */
118
+ static identifyOutliers(values) {
119
+ if (values.length < 4)
120
+ return [];
121
+ const sorted = [...values].sort((a, b) => a - b);
122
+ const q1Index = Math.floor(sorted.length * 0.25);
123
+ const q3Index = Math.floor(sorted.length * 0.75);
124
+ const q1 = sorted[q1Index];
125
+ const q3 = sorted[q3Index];
126
+ const iqr = q3 - q1;
127
+ const lowerBound = q1 - 1.5 * iqr;
128
+ const upperBound = q3 + 1.5 * iqr;
129
+ return values.filter(v => v < lowerBound || v > upperBound);
130
+ }
131
+ /**
132
+ * Check if test shows flaky characteristics
133
+ */
134
+ static isFlakyCandidate(passRate, variance) {
135
+ // Flaky if pass rate between 20% and 80%
136
+ const hasIntermittentFailures = passRate > 0.2 && passRate < 0.8;
137
+ // High variance indicates inconsistent behavior
138
+ const hasHighVariance = variance > 1000; // Threshold for duration variance
139
+ return hasIntermittentFailures || (passRate < 0.95 && hasHighVariance);
140
+ }
141
+ /**
142
+ * Calculate correlation between two series
143
+ */
144
+ static calculateCorrelation(x, y) {
145
+ if (x.length !== y.length || x.length === 0)
146
+ return 0;
147
+ const meanX = this.calculateMean(x);
148
+ const meanY = this.calculateMean(y);
149
+ let numerator = 0;
150
+ let denomX = 0;
151
+ let denomY = 0;
152
+ for (let i = 0; i < x.length; i++) {
153
+ const diffX = x[i] - meanX;
154
+ const diffY = y[i] - meanY;
155
+ numerator += diffX * diffY;
156
+ denomX += diffX * diffX;
157
+ denomY += diffY * diffY;
158
+ }
159
+ const denom = Math.sqrt(denomX * denomY);
160
+ return denom === 0 ? 0 : numerator / denom;
161
+ }
162
+ // Helper methods
163
+ static calculateMean(values) {
164
+ if (values.length === 0)
165
+ return 0;
166
+ return values.reduce((a, b) => a + b, 0) / values.length;
167
+ }
168
+ }
169
+ exports.StatisticalAnalysis = StatisticalAnalysis;
170
+ //# sourceMappingURL=StatisticalAnalysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatisticalAnalysis.js","sourceRoot":"","sources":["../../src/learning/StatisticalAnalysis.ts"],"names":[],"mappings":"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"}