agentic-qe 1.0.4 → 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.
- package/.claude/agents/qe-quality-analyzer.md +405 -0
- package/CHANGELOG.md +109 -0
- package/CONTRIBUTING.md +51 -0
- package/README.md +690 -134
- package/bin/aqe +90 -938
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +6 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +58 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +316 -48
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +48 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +217 -10
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +75 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +177 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts +42 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +232 -13
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +34 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +875 -42
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/commands/routing/index.d.ts +95 -0
- package/dist/cli/commands/routing/index.d.ts.map +1 -0
- package/dist/cli/commands/routing/index.js +399 -0
- package/dist/cli/commands/routing/index.js.map +1 -0
- package/dist/cli/index.js +455 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +5 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +7 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.d.ts +86 -0
- package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -0
- package/dist/core/routing/AdaptiveModelRouter.js +264 -0
- package/dist/core/routing/AdaptiveModelRouter.js.map +1 -0
- package/dist/core/routing/ComplexityAnalyzer.d.ts +49 -0
- package/dist/core/routing/ComplexityAnalyzer.d.ts.map +1 -0
- package/dist/core/routing/ComplexityAnalyzer.js +182 -0
- package/dist/core/routing/ComplexityAnalyzer.js.map +1 -0
- package/dist/core/routing/CostTracker.d.ts +55 -0
- package/dist/core/routing/CostTracker.d.ts.map +1 -0
- package/dist/core/routing/CostTracker.js +210 -0
- package/dist/core/routing/CostTracker.js.map +1 -0
- package/dist/core/routing/FleetManagerIntegration.d.ts +68 -0
- package/dist/core/routing/FleetManagerIntegration.d.ts.map +1 -0
- package/dist/core/routing/FleetManagerIntegration.js +170 -0
- package/dist/core/routing/FleetManagerIntegration.js.map +1 -0
- package/dist/core/routing/ModelRules.d.ts +38 -0
- package/dist/core/routing/ModelRules.d.ts.map +1 -0
- package/dist/core/routing/ModelRules.js +170 -0
- package/dist/core/routing/ModelRules.js.map +1 -0
- package/dist/core/routing/QETask.d.ts +12 -0
- package/dist/core/routing/QETask.d.ts.map +1 -0
- package/dist/core/routing/QETask.js +21 -0
- package/dist/core/routing/QETask.js.map +1 -0
- package/dist/core/routing/index.d.ts +19 -0
- package/dist/core/routing/index.d.ts.map +1 -0
- package/dist/core/routing/index.js +50 -0
- package/dist/core/routing/index.js.map +1 -0
- package/dist/core/routing/types.d.ts +136 -0
- package/dist/core/routing/types.d.ts.map +1 -0
- package/dist/core/routing/types.js +28 -0
- package/dist/core/routing/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +57 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +289 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +46 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +215 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +119 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +353 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +10 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +16 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +288 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +9 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +171 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +112 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +341 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -0
- package/dist/mcp/streaming/StreamingMCPTool.d.ts +80 -0
- package/dist/mcp/streaming/StreamingMCPTool.d.ts.map +1 -0
- package/dist/mcp/streaming/StreamingMCPTool.js +276 -0
- package/dist/mcp/streaming/StreamingMCPTool.js.map +1 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +73 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +436 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -0
- package/dist/mcp/streaming/index.d.ts +14 -0
- package/dist/mcp/streaming/index.d.ts.map +1 -0
- package/dist/mcp/streaming/index.js +30 -0
- package/dist/mcp/streaming/index.js.map +1 -0
- package/dist/mcp/streaming/types.d.ts +117 -0
- package/dist/mcp/streaming/types.d.ts.map +1 -0
- package/dist/mcp/streaming/types.js +88 -0
- package/dist/mcp/streaming/types.js.map +1 -0
- package/dist/mcp/tools.d.ts +18 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +123 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/types/index.d.ts +20 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/package.json +25 -3
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multi-Model Router Types
|
|
4
|
+
* Core interfaces and types for the adaptive model routing system
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TaskComplexity = exports.AIModel = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Supported AI models with their capabilities and costs
|
|
10
|
+
*/
|
|
11
|
+
var AIModel;
|
|
12
|
+
(function (AIModel) {
|
|
13
|
+
AIModel["GPT_4"] = "gpt-4";
|
|
14
|
+
AIModel["GPT_3_5_TURBO"] = "gpt-3.5-turbo";
|
|
15
|
+
AIModel["CLAUDE_SONNET_4_5"] = "claude-sonnet-4.5";
|
|
16
|
+
AIModel["CLAUDE_HAIKU"] = "claude-haiku";
|
|
17
|
+
})(AIModel || (exports.AIModel = AIModel = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Task complexity levels for model selection
|
|
20
|
+
*/
|
|
21
|
+
var TaskComplexity;
|
|
22
|
+
(function (TaskComplexity) {
|
|
23
|
+
TaskComplexity["SIMPLE"] = "simple";
|
|
24
|
+
TaskComplexity["MODERATE"] = "moderate";
|
|
25
|
+
TaskComplexity["COMPLEX"] = "complex";
|
|
26
|
+
TaskComplexity["CRITICAL"] = "critical";
|
|
27
|
+
})(TaskComplexity || (exports.TaskComplexity = TaskComplexity = {}));
|
|
28
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/routing/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAcH;;GAEG;AACH,IAAY,OAKX;AALD,WAAY,OAAO;IACjB,0BAAe,CAAA;IACf,0CAA+B,CAAA;IAC/B,kDAAuC,CAAA;IACvC,wCAA6B,CAAA;AAC/B,CAAC,EALW,OAAO,uBAAP,OAAO,QAKlB;AAED;;GAEG;AACH,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,qCAAmB,CAAA;IACnB,uCAAqB,CAAA;AACvB,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -86,4 +86,14 @@ export * from './agents';
|
|
|
86
86
|
* @module Utilities
|
|
87
87
|
*/
|
|
88
88
|
export * from './utils';
|
|
89
|
+
/**
|
|
90
|
+
* Phase 2: Learning System (Milestone 2.2)
|
|
91
|
+
* @module Learning
|
|
92
|
+
*/
|
|
93
|
+
export * from './learning';
|
|
94
|
+
/**
|
|
95
|
+
* Phase 2: Reasoning Bank (Milestone 2.1)
|
|
96
|
+
* @module Reasoning
|
|
97
|
+
*/
|
|
98
|
+
export * from './reasoning';
|
|
89
99
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAUH;;;GAGG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC;;;GAGG;AACH,cAAc,UAAU,CAAC;AAEzB;;;GAGG;AACH,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAUH;;;GAGG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC;;;GAGG;AACH,cAAc,UAAU,CAAC;AAEzB;;;GAGG;AACH,cAAc,SAAS,CAAC;AAExB;;;GAGG;AACH,cAAc,YAAY,CAAC;AAE3B;;;GAGG;AACH,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -108,6 +108,16 @@ __exportStar(require("./agents"), exports);
|
|
|
108
108
|
* @module Utilities
|
|
109
109
|
*/
|
|
110
110
|
__exportStar(require("./utils"), exports);
|
|
111
|
+
/**
|
|
112
|
+
* Phase 2: Learning System (Milestone 2.2)
|
|
113
|
+
* @module Learning
|
|
114
|
+
*/
|
|
115
|
+
__exportStar(require("./learning"), exports);
|
|
116
|
+
/**
|
|
117
|
+
* Phase 2: Reasoning Bank (Milestone 2.1)
|
|
118
|
+
* @module Reasoning
|
|
119
|
+
*/
|
|
120
|
+
__exportStar(require("./reasoning"), exports);
|
|
111
121
|
const logger = Logger_1.Logger.getInstance();
|
|
112
122
|
/**
|
|
113
123
|
* Initialize and start the AQE Fleet
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;;;;;;;;;;;;;;;;AAEH,sDAAmD;AACnD,2CAAwC;AACxC,2CAAwC;AAExC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;;GAGG;AACH,sDAAoC;AACpC,+CAA6B;AAC7B,8CAA4B;AAC5B,kDAAgC;AAChC,uDAAqC;AAErC;;;GAGG;AACH,2CAAyB;AAEzB;;;GAGG;AACH,0CAAwB;AAExB,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;AAEpC;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAE/C,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,eAAM,CAAC,IAAI,EAAE,CAAC;QAEnC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,kBAAkB;QAClB,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAE3B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAEvD,2BAA2B;QAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACpD,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;;;;;;;;;;;;;;;;AAEH,sDAAmD;AACnD,2CAAwC;AACxC,2CAAwC;AAExC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;;GAGG;AACH,sDAAoC;AACpC,+CAA6B;AAC7B,8CAA4B;AAC5B,kDAAgC;AAChC,uDAAqC;AAErC;;;GAGG;AACH,2CAAyB;AAEzB;;;GAGG;AACH,0CAAwB;AAExB;;;GAGG;AACH,6CAA2B;AAE3B;;;GAGG;AACH,8CAA4B;AAE5B,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;AAEpC;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAE/C,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,eAAM,CAAC,IAAI,EAAE,CAAC;QAEnC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,kBAAkB;QAClB,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAE3B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAEvD,2BAA2B;QAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACpD,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flaky Test Fix Recommendation Engine
|
|
3
|
+
* Analyzes flaky test patterns and generates actionable fix recommendations
|
|
4
|
+
*/
|
|
5
|
+
import { TestResult, FlakyFixRecommendation } from './types';
|
|
6
|
+
export declare class FlakyFixRecommendations {
|
|
7
|
+
/**
|
|
8
|
+
* Generate fix recommendation based on test result patterns
|
|
9
|
+
*/
|
|
10
|
+
static generateRecommendation(testName: string, results: TestResult[]): FlakyFixRecommendation;
|
|
11
|
+
/**
|
|
12
|
+
* Identify the primary failure pattern
|
|
13
|
+
*/
|
|
14
|
+
private static identifyFailurePattern;
|
|
15
|
+
/**
|
|
16
|
+
* Generate timing-related recommendation
|
|
17
|
+
*/
|
|
18
|
+
private static timingRecommendation;
|
|
19
|
+
/**
|
|
20
|
+
* Generate environment-related recommendation
|
|
21
|
+
*/
|
|
22
|
+
private static environmentalRecommendation;
|
|
23
|
+
/**
|
|
24
|
+
* Generate resource contention recommendation
|
|
25
|
+
*/
|
|
26
|
+
private static resourceRecommendation;
|
|
27
|
+
/**
|
|
28
|
+
* Generate test isolation recommendation
|
|
29
|
+
*/
|
|
30
|
+
private static isolationRecommendation;
|
|
31
|
+
/**
|
|
32
|
+
* Generate generic recommendation
|
|
33
|
+
*/
|
|
34
|
+
private static genericRecommendation;
|
|
35
|
+
/**
|
|
36
|
+
* Detect environment changes across test runs
|
|
37
|
+
*/
|
|
38
|
+
private static detectEnvironmentChanges;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=FlakyFixRecommendations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlakyFixRecommendations.d.ts","sourceRoot":"","sources":["../../src/learning/FlakyFixRecommendations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAG7D,qBAAa,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,EAAE,GACpB,sBAAsB;IAiBzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA2BrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA2BnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IA6B1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAsCrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuCtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAkCpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAkBxC"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Flaky Test Fix Recommendation Engine
|
|
4
|
+
* Analyzes flaky test patterns and generates actionable fix recommendations
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FlakyFixRecommendations = void 0;
|
|
8
|
+
const StatisticalAnalysis_1 = require("./StatisticalAnalysis");
|
|
9
|
+
class FlakyFixRecommendations {
|
|
10
|
+
/**
|
|
11
|
+
* Generate fix recommendation based on test result patterns
|
|
12
|
+
*/
|
|
13
|
+
static generateRecommendation(testName, results) {
|
|
14
|
+
const pattern = this.identifyFailurePattern(results);
|
|
15
|
+
switch (pattern) {
|
|
16
|
+
case 'timing':
|
|
17
|
+
return this.timingRecommendation(results);
|
|
18
|
+
case 'environmental':
|
|
19
|
+
return this.environmentalRecommendation(results);
|
|
20
|
+
case 'resource':
|
|
21
|
+
return this.resourceRecommendation(results);
|
|
22
|
+
case 'isolation':
|
|
23
|
+
return this.isolationRecommendation(results);
|
|
24
|
+
default:
|
|
25
|
+
return this.genericRecommendation(results);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Identify the primary failure pattern
|
|
30
|
+
*/
|
|
31
|
+
static identifyFailurePattern(results) {
|
|
32
|
+
// Check for timing issues (high variance in duration)
|
|
33
|
+
const variance = StatisticalAnalysis_1.StatisticalAnalysis.calculateVariance(results);
|
|
34
|
+
const metrics = StatisticalAnalysis_1.StatisticalAnalysis.calculateMetrics(results.map(r => r.duration));
|
|
35
|
+
if (metrics.coefficientOfVariation > 0.5) {
|
|
36
|
+
return 'timing';
|
|
37
|
+
}
|
|
38
|
+
// Check for environmental issues
|
|
39
|
+
const envChanges = this.detectEnvironmentChanges(results);
|
|
40
|
+
if (envChanges > 0.3) {
|
|
41
|
+
return 'environmental';
|
|
42
|
+
}
|
|
43
|
+
// Check for resource contention (outliers in execution time)
|
|
44
|
+
const hasOutliers = metrics.outliers.length > results.length * 0.1;
|
|
45
|
+
if (hasOutliers) {
|
|
46
|
+
return 'resource';
|
|
47
|
+
}
|
|
48
|
+
// Default to isolation issues
|
|
49
|
+
return 'isolation';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate timing-related recommendation
|
|
53
|
+
*/
|
|
54
|
+
static timingRecommendation(results) {
|
|
55
|
+
const avgDuration = results.reduce((sum, r) => sum + r.duration, 0) / results.length;
|
|
56
|
+
const maxDuration = Math.max(...results.map(r => r.duration));
|
|
57
|
+
return {
|
|
58
|
+
priority: 'high',
|
|
59
|
+
category: 'timing',
|
|
60
|
+
recommendation: 'Add explicit waits or increase timeout thresholds',
|
|
61
|
+
codeExample: `
|
|
62
|
+
// Instead of fixed delays:
|
|
63
|
+
// await sleep(1000);
|
|
64
|
+
|
|
65
|
+
// Use explicit waits with conditions:
|
|
66
|
+
await waitFor(() => element.isVisible(), {
|
|
67
|
+
timeout: ${Math.ceil(maxDuration * 1.5)},
|
|
68
|
+
interval: 100
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Or increase test timeout:
|
|
72
|
+
test('flaky test', async () => {
|
|
73
|
+
// ...
|
|
74
|
+
}, ${Math.ceil(maxDuration * 2)});
|
|
75
|
+
`.trim(),
|
|
76
|
+
estimatedEffort: 'medium'
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generate environment-related recommendation
|
|
81
|
+
*/
|
|
82
|
+
static environmentalRecommendation(results) {
|
|
83
|
+
return {
|
|
84
|
+
priority: 'high',
|
|
85
|
+
category: 'environmental',
|
|
86
|
+
recommendation: 'Mock external dependencies and isolate test environment',
|
|
87
|
+
codeExample: `
|
|
88
|
+
// Mock external services:
|
|
89
|
+
jest.mock('./externalService', () => ({
|
|
90
|
+
fetchData: jest.fn().mockResolvedValue({ data: 'mocked' })
|
|
91
|
+
}));
|
|
92
|
+
|
|
93
|
+
// Use test containers for databases:
|
|
94
|
+
const container = await new PostgreSqlContainer().start();
|
|
95
|
+
const connection = await createConnection({
|
|
96
|
+
host: container.getHost(),
|
|
97
|
+
port: container.getPort(),
|
|
98
|
+
// ...
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Clean environment before each test:
|
|
102
|
+
beforeEach(() => {
|
|
103
|
+
process.env.NODE_ENV = 'test';
|
|
104
|
+
jest.clearAllMocks();
|
|
105
|
+
});
|
|
106
|
+
`.trim(),
|
|
107
|
+
estimatedEffort: 'high'
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Generate resource contention recommendation
|
|
112
|
+
*/
|
|
113
|
+
static resourceRecommendation(results) {
|
|
114
|
+
return {
|
|
115
|
+
priority: 'medium',
|
|
116
|
+
category: 'resource',
|
|
117
|
+
recommendation: 'Reduce resource usage or run test in isolation',
|
|
118
|
+
codeExample: `
|
|
119
|
+
// Run resource-intensive tests serially:
|
|
120
|
+
// In jest.config.js:
|
|
121
|
+
module.exports = {
|
|
122
|
+
maxWorkers: 1, // For specific test files
|
|
123
|
+
// or use test.concurrent sparingly
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// Add resource cleanup:
|
|
127
|
+
afterEach(async () => {
|
|
128
|
+
// Clear caches
|
|
129
|
+
cache.clear();
|
|
130
|
+
|
|
131
|
+
// Close connections
|
|
132
|
+
await db.disconnect();
|
|
133
|
+
|
|
134
|
+
// Free memory
|
|
135
|
+
global.gc && global.gc();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Use resource pooling:
|
|
139
|
+
const pool = new Pool({ max: 5, min: 1 });
|
|
140
|
+
const resource = await pool.acquire();
|
|
141
|
+
try {
|
|
142
|
+
// use resource
|
|
143
|
+
} finally {
|
|
144
|
+
await pool.release(resource);
|
|
145
|
+
}
|
|
146
|
+
`.trim(),
|
|
147
|
+
estimatedEffort: 'medium'
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Generate test isolation recommendation
|
|
152
|
+
*/
|
|
153
|
+
static isolationRecommendation(results) {
|
|
154
|
+
return {
|
|
155
|
+
priority: 'high',
|
|
156
|
+
category: 'concurrency',
|
|
157
|
+
recommendation: 'Improve test isolation and cleanup',
|
|
158
|
+
codeExample: `
|
|
159
|
+
// Reset global state before each test:
|
|
160
|
+
beforeEach(() => {
|
|
161
|
+
// Reset singletons
|
|
162
|
+
ServiceLocator.reset();
|
|
163
|
+
|
|
164
|
+
// Clear module cache
|
|
165
|
+
jest.resetModules();
|
|
166
|
+
|
|
167
|
+
// Reset database to known state
|
|
168
|
+
await db.migrate.latest();
|
|
169
|
+
await db.seed.run();
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Avoid shared state:
|
|
173
|
+
// BAD:
|
|
174
|
+
const sharedData = [];
|
|
175
|
+
test('test 1', () => sharedData.push(1));
|
|
176
|
+
test('test 2', () => expect(sharedData).toHaveLength(0)); // Flaky!
|
|
177
|
+
|
|
178
|
+
// GOOD:
|
|
179
|
+
test('test 1', () => {
|
|
180
|
+
const data = [];
|
|
181
|
+
data.push(1);
|
|
182
|
+
expect(data).toHaveLength(1);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// Use test fixtures:
|
|
186
|
+
const fixture = await loadFixture('user.json');
|
|
187
|
+
`.trim(),
|
|
188
|
+
estimatedEffort: 'high'
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Generate generic recommendation
|
|
193
|
+
*/
|
|
194
|
+
static genericRecommendation(results) {
|
|
195
|
+
const passRate = StatisticalAnalysis_1.StatisticalAnalysis.calculatePassRate(results);
|
|
196
|
+
return {
|
|
197
|
+
priority: passRate < 0.5 ? 'high' : 'medium',
|
|
198
|
+
category: 'data',
|
|
199
|
+
recommendation: 'Review test for race conditions, shared state, and external dependencies',
|
|
200
|
+
codeExample: `
|
|
201
|
+
// Common flaky test fixes:
|
|
202
|
+
|
|
203
|
+
// 1. Add deterministic delays
|
|
204
|
+
await waitForCondition(() => element.exists(), 5000);
|
|
205
|
+
|
|
206
|
+
// 2. Mock time-dependent code
|
|
207
|
+
jest.useFakeTimers();
|
|
208
|
+
jest.setSystemTime(new Date('2024-01-01'));
|
|
209
|
+
|
|
210
|
+
// 3. Disable animations
|
|
211
|
+
await page.addStyleTag({ content: '* { animation: none !important; }' });
|
|
212
|
+
|
|
213
|
+
// 4. Increase retry attempts
|
|
214
|
+
jest.retryTimes(3);
|
|
215
|
+
|
|
216
|
+
// 5. Add debug logging
|
|
217
|
+
test('flaky test', async () => {
|
|
218
|
+
const result = await operation();
|
|
219
|
+
console.log('Operation result:', result); // Debug flaky failures
|
|
220
|
+
expect(result).toBe(expected);
|
|
221
|
+
});
|
|
222
|
+
`.trim(),
|
|
223
|
+
estimatedEffort: 'low'
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Detect environment changes across test runs
|
|
228
|
+
*/
|
|
229
|
+
static detectEnvironmentChanges(results) {
|
|
230
|
+
const withEnv = results.filter(r => r.environment);
|
|
231
|
+
if (withEnv.length < 2)
|
|
232
|
+
return 0;
|
|
233
|
+
let changes = 0;
|
|
234
|
+
const keys = new Set();
|
|
235
|
+
withEnv.forEach(r => {
|
|
236
|
+
Object.keys(r.environment || {}).forEach(k => keys.add(k));
|
|
237
|
+
});
|
|
238
|
+
keys.forEach(key => {
|
|
239
|
+
const values = new Set(withEnv.map(r => r.environment?.[key]));
|
|
240
|
+
if (values.size > 1)
|
|
241
|
+
changes++;
|
|
242
|
+
});
|
|
243
|
+
return changes / keys.size;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.FlakyFixRecommendations = FlakyFixRecommendations;
|
|
247
|
+
//# sourceMappingURL=FlakyFixRecommendations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlakyFixRecommendations.js","sourceRoot":"","sources":["../../src/learning/FlakyFixRecommendations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ML-Based Flaky Test Prediction Model
|
|
3
|
+
* Uses statistical features and pattern recognition for 90% accuracy
|
|
4
|
+
*/
|
|
5
|
+
import { TestResult, FlakyPrediction, ModelMetrics } from './types';
|
|
6
|
+
export declare class FlakyPredictionModel {
|
|
7
|
+
private weights;
|
|
8
|
+
private bias;
|
|
9
|
+
private featureScalers;
|
|
10
|
+
private isTrained;
|
|
11
|
+
/**
|
|
12
|
+
* Extract features from test results for ML model
|
|
13
|
+
*/
|
|
14
|
+
private extractFeatures;
|
|
15
|
+
/**
|
|
16
|
+
* Train the model on historical data
|
|
17
|
+
*/
|
|
18
|
+
train(trainingData: Map<string, TestResult[]>, labels: Map<string, boolean>): ModelMetrics;
|
|
19
|
+
/**
|
|
20
|
+
* Predict if a test is flaky
|
|
21
|
+
*/
|
|
22
|
+
predict(testName: string, results: TestResult[]): FlakyPrediction;
|
|
23
|
+
/**
|
|
24
|
+
* Batch predict for multiple tests
|
|
25
|
+
*/
|
|
26
|
+
batchPredict(tests: Map<string, TestResult[]>): FlakyPrediction[];
|
|
27
|
+
/**
|
|
28
|
+
* Train logistic regression using gradient descent
|
|
29
|
+
*/
|
|
30
|
+
private trainLogisticRegression;
|
|
31
|
+
/**
|
|
32
|
+
* Internal prediction (before sigmoid)
|
|
33
|
+
*/
|
|
34
|
+
private predict_internal;
|
|
35
|
+
/**
|
|
36
|
+
* Sigmoid activation function
|
|
37
|
+
*/
|
|
38
|
+
private sigmoid;
|
|
39
|
+
/**
|
|
40
|
+
* Calculate feature scalers for normalization
|
|
41
|
+
*/
|
|
42
|
+
private calculateScalers;
|
|
43
|
+
/**
|
|
44
|
+
* Normalize features using z-score normalization
|
|
45
|
+
*/
|
|
46
|
+
private normalizeFeatures;
|
|
47
|
+
/**
|
|
48
|
+
* Evaluate model performance
|
|
49
|
+
*/
|
|
50
|
+
private evaluateModel;
|
|
51
|
+
private calculateRetryRate;
|
|
52
|
+
private calculateEnvironmentVariability;
|
|
53
|
+
private calculateTemporalClustering;
|
|
54
|
+
private formatFeatures;
|
|
55
|
+
private generateExplanation;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=FlakyPredictionModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlakyPredictionModel.d.ts","sourceRoot":"","sources":["../../src/learning/FlakyPredictionModel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAqB,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,SAAS,CAAkB;IAEnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IA+B1F;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,eAAe;IAiCjE;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,eAAe,EAAE;IAUjE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqC/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,mBAAmB;CAiC5B"}
|