agentic-qe 1.3.3 → 1.3.4

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 (122) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +20 -0
  2. package/.claude/agents/qe-chaos-engineer.md +20 -0
  3. package/.claude/agents/qe-coverage-analyzer.md +21 -0
  4. package/.claude/agents/qe-deployment-readiness.md +20 -0
  5. package/.claude/agents/qe-flaky-test-hunter.md +20 -0
  6. package/.claude/agents/qe-fleet-commander.md +20 -0
  7. package/.claude/agents/qe-performance-tester.md +21 -0
  8. package/.claude/agents/qe-production-intelligence.md +20 -0
  9. package/.claude/agents/qe-quality-analyzer.md +20 -0
  10. package/.claude/agents/qe-quality-gate.md +20 -0
  11. package/.claude/agents/qe-regression-risk-analyzer.md +20 -0
  12. package/.claude/agents/qe-requirements-validator.md +20 -0
  13. package/.claude/agents/qe-security-scanner.md +21 -0
  14. package/.claude/agents/qe-test-data-architect.md +19 -0
  15. package/.claude/agents/qe-test-executor.md +20 -0
  16. package/.claude/agents/qe-test-generator.md +22 -0
  17. package/.claude/agents/qe-visual-tester.md +22 -0
  18. package/README.md +320 -1019
  19. package/README.md.backup-20251026 +1366 -0
  20. package/bin/aqe-mcp +1 -1
  21. package/dist/agents/BaseAgent.js +1 -1
  22. package/dist/agents/BaseAgent.js.map +1 -1
  23. package/dist/agents/CoverageAnalyzerAgent.js +16 -16
  24. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  25. package/dist/agents/FlakyTestHunterAgent.js +1 -1
  26. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  27. package/dist/cli/commands/init.d.ts.map +1 -1
  28. package/dist/cli/commands/init.js +71 -37
  29. package/dist/cli/commands/init.js.map +1 -1
  30. package/dist/core/memory/EnhancedAgentDBService.d.ts +127 -0
  31. package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -0
  32. package/dist/core/memory/EnhancedAgentDBService.js +298 -0
  33. package/dist/core/memory/EnhancedAgentDBService.js.map +1 -0
  34. package/dist/core/neural/NeuralTrainer.js +2 -2
  35. package/dist/core/neural/NeuralTrainer.js.map +1 -1
  36. package/dist/learning/FixRecommendationEngine.d.ts +68 -0
  37. package/dist/learning/FixRecommendationEngine.d.ts.map +1 -0
  38. package/dist/learning/FixRecommendationEngine.js +500 -0
  39. package/dist/learning/FixRecommendationEngine.js.map +1 -0
  40. package/dist/learning/FlakyTestDetector.d.ts +19 -0
  41. package/dist/learning/FlakyTestDetector.d.ts.map +1 -1
  42. package/dist/learning/FlakyTestDetector.js +121 -2
  43. package/dist/learning/FlakyTestDetector.js.map +1 -1
  44. package/dist/learning/index.d.ts +2 -0
  45. package/dist/learning/index.d.ts.map +1 -1
  46. package/dist/learning/index.js +5 -0
  47. package/dist/learning/index.js.map +1 -1
  48. package/dist/learning/types.d.ts +11 -0
  49. package/dist/learning/types.d.ts.map +1 -1
  50. package/dist/reasoning/PatternQualityScorer.d.ts +134 -0
  51. package/dist/reasoning/PatternQualityScorer.d.ts.map +1 -0
  52. package/dist/reasoning/PatternQualityScorer.js +340 -0
  53. package/dist/reasoning/PatternQualityScorer.js.map +1 -0
  54. package/dist/reasoning/QEReasoningBank.d.ts +51 -4
  55. package/dist/reasoning/QEReasoningBank.d.ts.map +1 -1
  56. package/dist/reasoning/QEReasoningBank.js +173 -11
  57. package/dist/reasoning/QEReasoningBank.js.map +1 -1
  58. package/dist/reasoning/VectorSimilarity.d.ts +131 -0
  59. package/dist/reasoning/VectorSimilarity.d.ts.map +1 -0
  60. package/dist/reasoning/VectorSimilarity.js +250 -0
  61. package/dist/reasoning/VectorSimilarity.js.map +1 -0
  62. package/dist/reasoning/index.d.ts +8 -1
  63. package/dist/reasoning/index.d.ts.map +1 -1
  64. package/dist/reasoning/index.js +13 -2
  65. package/dist/reasoning/index.js.map +1 -1
  66. package/dist/streaming/BaseStreamHandler.d.ts +89 -0
  67. package/dist/streaming/BaseStreamHandler.d.ts.map +1 -0
  68. package/dist/streaming/BaseStreamHandler.js +168 -0
  69. package/dist/streaming/BaseStreamHandler.js.map +1 -0
  70. package/dist/streaming/TestGenerateStreamHandler.d.ts +103 -0
  71. package/dist/streaming/TestGenerateStreamHandler.d.ts.map +1 -0
  72. package/dist/streaming/TestGenerateStreamHandler.js +321 -0
  73. package/dist/streaming/TestGenerateStreamHandler.js.map +1 -0
  74. package/dist/streaming/index.d.ts +16 -0
  75. package/dist/streaming/index.d.ts.map +1 -0
  76. package/dist/streaming/index.js +39 -0
  77. package/dist/streaming/index.js.map +1 -0
  78. package/dist/utils/__mocks__/Logger.d.ts +26 -0
  79. package/dist/utils/__mocks__/Logger.d.ts.map +1 -0
  80. package/dist/utils/__mocks__/Logger.js +42 -0
  81. package/dist/utils/__mocks__/Logger.js.map +1 -0
  82. package/package.json +15 -3
  83. package/dist/agents/mixins/NeuralCapableMixin.d.ts +0 -130
  84. package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +0 -1
  85. package/dist/agents/mixins/NeuralCapableMixin.js +0 -358
  86. package/dist/agents/mixins/NeuralCapableMixin.js.map +0 -1
  87. package/dist/agents/mixins/QUICCapableMixin.d.ts +0 -34
  88. package/dist/agents/mixins/QUICCapableMixin.d.ts.map +0 -1
  89. package/dist/agents/mixins/QUICCapableMixin.js +0 -346
  90. package/dist/agents/mixins/QUICCapableMixin.js.map +0 -1
  91. package/dist/core/security/CertificateValidator.d.ts +0 -130
  92. package/dist/core/security/CertificateValidator.d.ts.map +0 -1
  93. package/dist/core/security/CertificateValidator.js +0 -376
  94. package/dist/core/security/CertificateValidator.js.map +0 -1
  95. package/dist/core/transport/QUICTransport.d.ts +0 -62
  96. package/dist/core/transport/QUICTransport.d.ts.map +0 -1
  97. package/dist/core/transport/QUICTransport.js +0 -381
  98. package/dist/core/transport/QUICTransport.js.map +0 -1
  99. package/dist/core/transport/SecureQUICTransport.d.ts +0 -71
  100. package/dist/core/transport/SecureQUICTransport.d.ts.map +0 -1
  101. package/dist/core/transport/SecureQUICTransport.js +0 -253
  102. package/dist/core/transport/SecureQUICTransport.js.map +0 -1
  103. package/dist/learning/AdvancedFeatureExtractor.d.ts +0 -123
  104. package/dist/learning/AdvancedFeatureExtractor.d.ts.map +0 -1
  105. package/dist/learning/AdvancedFeatureExtractor.js +0 -423
  106. package/dist/learning/AdvancedFeatureExtractor.js.map +0 -1
  107. package/dist/learning/NeuralPatternMatcher.d.ts +0 -184
  108. package/dist/learning/NeuralPatternMatcher.d.ts.map +0 -1
  109. package/dist/learning/NeuralPatternMatcher.js +0 -702
  110. package/dist/learning/NeuralPatternMatcher.js.map +0 -1
  111. package/dist/learning/NeuralTrainer.d.ts +0 -209
  112. package/dist/learning/NeuralTrainer.d.ts.map +0 -1
  113. package/dist/learning/NeuralTrainer.js +0 -478
  114. package/dist/learning/NeuralTrainer.js.map +0 -1
  115. package/dist/transport/QUICTransport.d.ts +0 -340
  116. package/dist/transport/QUICTransport.d.ts.map +0 -1
  117. package/dist/transport/QUICTransport.js +0 -814
  118. package/dist/transport/QUICTransport.js.map +0 -1
  119. package/dist/transport/UDPTransport.d.ts +0 -348
  120. package/dist/transport/UDPTransport.d.ts.map +0 -1
  121. package/dist/transport/UDPTransport.js +0 -820
  122. package/dist/transport/UDPTransport.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Test Generation Streaming Handler
3
+ *
4
+ * Provides real-time progress updates for AI-powered test generation.
5
+ * Emits progress for each function/module as tests are generated.
6
+ *
7
+ * @version 1.0.0
8
+ * @author Agentic QE Team
9
+ */
10
+ import { BaseStreamHandler, StreamEvent } from './BaseStreamHandler';
11
+ export interface TestGenerateParams {
12
+ sourceFile: string;
13
+ framework: 'jest' | 'mocha' | 'vitest';
14
+ testType?: 'unit' | 'integration' | 'e2e';
15
+ coverage?: number;
16
+ includeEdgeCases?: boolean;
17
+ generateMocks?: boolean;
18
+ }
19
+ export interface FunctionAnalysis {
20
+ name: string;
21
+ params: string[];
22
+ returnType?: string;
23
+ complexity: number;
24
+ isAsync: boolean;
25
+ isExported: boolean;
26
+ lineStart: number;
27
+ lineEnd: number;
28
+ }
29
+ export interface GeneratedTest {
30
+ functionName: string;
31
+ testCode: string;
32
+ testCount: number;
33
+ coverageEstimate: number;
34
+ includesEdgeCases: boolean;
35
+ includesMocks: boolean;
36
+ }
37
+ export interface TestGenerateResult {
38
+ sourceFile: string;
39
+ framework: string;
40
+ tests: GeneratedTest[];
41
+ totalTests: number;
42
+ estimatedCoverage: number;
43
+ generationTime: number;
44
+ outputFile: string;
45
+ }
46
+ /**
47
+ * Streaming handler for test generation with real-time progress
48
+ */
49
+ export declare class TestGenerateStreamHandler extends BaseStreamHandler {
50
+ /**
51
+ * Process test generation task with incremental progress updates
52
+ */
53
+ protected processTask(params: TestGenerateParams): AsyncGenerator<StreamEvent>;
54
+ /**
55
+ * Validate source file exists and is readable
56
+ */
57
+ private validateSourceFile;
58
+ /**
59
+ * Analyze source file to extract functions
60
+ */
61
+ private analyzeSourceFile;
62
+ /**
63
+ * Extract function information from AST node
64
+ */
65
+ private extractFunctionInfo;
66
+ /**
67
+ * Estimate cyclomatic complexity
68
+ */
69
+ private estimateComplexity;
70
+ /**
71
+ * Check if function is exported
72
+ */
73
+ private isExported;
74
+ /**
75
+ * Generate test for a single function
76
+ */
77
+ private generateTestForFunction;
78
+ /**
79
+ * Generate happy path test
80
+ */
81
+ private generateHappyPathTest;
82
+ /**
83
+ * Generate edge case tests
84
+ */
85
+ private generateEdgeCaseTests;
86
+ /**
87
+ * Generate error handling test
88
+ */
89
+ private generateErrorTest;
90
+ /**
91
+ * Generate test file with all tests
92
+ */
93
+ private generateTestFile;
94
+ /**
95
+ * Generate import statements
96
+ */
97
+ private generateImports;
98
+ /**
99
+ * Calculate estimated coverage
100
+ */
101
+ private calculateCoverageEstimate;
102
+ }
103
+ //# sourceMappingURL=TestGenerateStreamHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestGenerateStreamHandler.d.ts","sourceRoot":"","sources":["../../src/streaming/TestGenerateStreamHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMrE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D;;OAEG;cACc,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAAC,WAAW,CAAC;IAsFrF;;OAEG;YACW,kBAAkB;IAQhC;;OAEG;YACW,iBAAiB;IA2C/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAIlC"}
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ /**
3
+ * Test Generation Streaming Handler
4
+ *
5
+ * Provides real-time progress updates for AI-powered test generation.
6
+ * Emits progress for each function/module as tests are generated.
7
+ *
8
+ * @version 1.0.0
9
+ * @author Agentic QE Team
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.TestGenerateStreamHandler = void 0;
49
+ const BaseStreamHandler_1 = require("./BaseStreamHandler");
50
+ const fs = __importStar(require("fs/promises"));
51
+ const path = __importStar(require("path"));
52
+ const parser_1 = require("@babel/parser");
53
+ const traverse_1 = __importDefault(require("@babel/traverse"));
54
+ /**
55
+ * Streaming handler for test generation with real-time progress
56
+ */
57
+ class TestGenerateStreamHandler extends BaseStreamHandler_1.BaseStreamHandler {
58
+ /**
59
+ * Process test generation task with incremental progress updates
60
+ */
61
+ async *processTask(params) {
62
+ const { sourceFile, framework, testType = 'unit', coverage = 80, includeEdgeCases = true, generateMocks = true } = params;
63
+ // Validate source file exists
64
+ yield this.progressEvent(5, `Validating source file: ${sourceFile}`);
65
+ await this.validateSourceFile(sourceFile);
66
+ // Analyze source file
67
+ yield this.progressEvent(10, 'Analyzing source file...');
68
+ const analysis = await this.analyzeSourceFile(sourceFile);
69
+ yield this.progressEvent(20, `Found ${analysis.functions.length} functions to test`, {
70
+ functionsFound: analysis.functions.length,
71
+ totalLines: analysis.totalLines
72
+ });
73
+ // Generate tests for each function
74
+ const tests = [];
75
+ const totalFunctions = analysis.functions.length;
76
+ for (let i = 0; i < totalFunctions; i++) {
77
+ if (this.isCancelled()) {
78
+ throw new Error('Test generation cancelled');
79
+ }
80
+ const func = analysis.functions[i];
81
+ const progress = 20 + ((i / totalFunctions) * 60);
82
+ yield this.progressEvent(progress, `Generating tests for ${func.name}...`, {
83
+ currentFunction: func.name,
84
+ functionsCompleted: i,
85
+ functionsTotal: totalFunctions
86
+ });
87
+ const generatedTest = await this.generateTestForFunction(func, framework, { includeEdgeCases, generateMocks, coverage });
88
+ tests.push(generatedTest);
89
+ // Emit intermediate result
90
+ yield this.resultEvent(generatedTest, {
91
+ type: 'intermediate',
92
+ progress: i + 1,
93
+ total: totalFunctions
94
+ });
95
+ // Small delay to simulate AI generation (in real impl, this would be LLM call)
96
+ await this.sleep(100);
97
+ }
98
+ // Generate output file
99
+ yield this.progressEvent(85, 'Generating test file...');
100
+ const outputFile = await this.generateTestFile(sourceFile, tests, framework);
101
+ yield this.progressEvent(95, 'Calculating coverage estimate...');
102
+ const estimatedCoverage = this.calculateCoverageEstimate(tests, analysis.totalLines);
103
+ // Final result
104
+ const result = {
105
+ sourceFile,
106
+ framework,
107
+ tests,
108
+ totalTests: tests.reduce((sum, t) => sum + t.testCount, 0),
109
+ estimatedCoverage,
110
+ generationTime: Date.now() - this.startTime,
111
+ outputFile
112
+ };
113
+ yield this.progressEvent(100, `Generated ${result.totalTests} tests in ${outputFile}`);
114
+ yield this.resultEvent(result, { type: 'final' });
115
+ }
116
+ /**
117
+ * Validate source file exists and is readable
118
+ */
119
+ async validateSourceFile(sourceFile) {
120
+ try {
121
+ await fs.access(sourceFile, fs.constants.R_OK);
122
+ }
123
+ catch (error) {
124
+ throw new Error(`Source file not found or not readable: ${sourceFile}`);
125
+ }
126
+ }
127
+ /**
128
+ * Analyze source file to extract functions
129
+ */
130
+ async analyzeSourceFile(sourceFile) {
131
+ const code = await fs.readFile(sourceFile, 'utf-8');
132
+ const functions = [];
133
+ try {
134
+ const ast = (0, parser_1.parse)(code, {
135
+ sourceType: 'module',
136
+ plugins: ['typescript', 'jsx']
137
+ });
138
+ // Use @babel/traverse default export
139
+ const traverseFunc = typeof traverse_1.default === 'function' ? traverse_1.default : traverse_1.default.default;
140
+ traverseFunc(ast, {
141
+ FunctionDeclaration(path) {
142
+ functions.push(this.extractFunctionInfo(path));
143
+ },
144
+ ArrowFunctionExpression(path) {
145
+ if (path.parent.type === 'VariableDeclarator') {
146
+ functions.push(this.extractFunctionInfo(path));
147
+ }
148
+ },
149
+ ClassMethod(path) {
150
+ functions.push(this.extractFunctionInfo(path));
151
+ }
152
+ });
153
+ return {
154
+ functions,
155
+ totalLines: code.split('\n').length
156
+ };
157
+ }
158
+ catch (error) {
159
+ // If parsing fails, return empty analysis
160
+ return {
161
+ functions: [],
162
+ totalLines: code.split('\n').length
163
+ };
164
+ }
165
+ }
166
+ /**
167
+ * Extract function information from AST node
168
+ */
169
+ extractFunctionInfo(path) {
170
+ const node = path.node;
171
+ const name = node.id?.name || node.key?.name || 'anonymous';
172
+ return {
173
+ name,
174
+ params: node.params?.map((p) => p.name || 'param') || [],
175
+ complexity: this.estimateComplexity(node),
176
+ isAsync: node.async || false,
177
+ isExported: this.isExported(path),
178
+ lineStart: node.loc?.start.line || 0,
179
+ lineEnd: node.loc?.end.line || 0
180
+ };
181
+ }
182
+ /**
183
+ * Estimate cyclomatic complexity
184
+ */
185
+ estimateComplexity(node) {
186
+ // Simplified complexity estimation
187
+ let complexity = 1;
188
+ if (node.body) {
189
+ const bodyStr = JSON.stringify(node.body);
190
+ complexity += (bodyStr.match(/if|while|for|case|\&\&|\|\|/g) || []).length;
191
+ }
192
+ return complexity;
193
+ }
194
+ /**
195
+ * Check if function is exported
196
+ */
197
+ isExported(path) {
198
+ let parent = path.parentPath;
199
+ while (parent) {
200
+ if (parent.node.type === 'ExportNamedDeclaration' ||
201
+ parent.node.type === 'ExportDefaultDeclaration') {
202
+ return true;
203
+ }
204
+ parent = parent.parentPath;
205
+ }
206
+ return false;
207
+ }
208
+ /**
209
+ * Generate test for a single function
210
+ */
211
+ async generateTestForFunction(func, framework, options) {
212
+ // In real implementation, this would use LLM to generate tests
213
+ // For now, generate template-based tests
214
+ const tests = [];
215
+ // Basic happy path test
216
+ tests.push(this.generateHappyPathTest(func, framework));
217
+ // Edge cases based on complexity
218
+ if (options.includeEdgeCases) {
219
+ tests.push(...this.generateEdgeCaseTests(func, framework));
220
+ }
221
+ // Error handling tests
222
+ if (func.complexity > 2) {
223
+ tests.push(this.generateErrorTest(func, framework));
224
+ }
225
+ const testCode = tests.join('\n\n');
226
+ return {
227
+ functionName: func.name,
228
+ testCode,
229
+ testCount: tests.length,
230
+ coverageEstimate: Math.min(95, 50 + (tests.length * 15)),
231
+ includesEdgeCases: options.includeEdgeCases,
232
+ includesMocks: options.generateMocks
233
+ };
234
+ }
235
+ /**
236
+ * Generate happy path test
237
+ */
238
+ generateHappyPathTest(func, framework) {
239
+ const testFn = framework === 'jest' ? 'test' : 'it';
240
+ const expectFn = framework === 'mocha' ? 'expect' : 'expect';
241
+ return `${testFn}('${func.name} should work with valid input', ${func.isAsync ? 'async ' : ''}() => {
242
+ // Arrange
243
+ const input = {}; // TODO: Provide valid input
244
+
245
+ // Act
246
+ const result = ${func.isAsync ? 'await ' : ''}${func.name}(input);
247
+
248
+ // Assert
249
+ ${expectFn}(result).toBeDefined();
250
+ });`;
251
+ }
252
+ /**
253
+ * Generate edge case tests
254
+ */
255
+ generateEdgeCaseTests(func, framework) {
256
+ const testFn = framework === 'jest' ? 'test' : 'it';
257
+ const tests = [];
258
+ // Null/undefined test
259
+ tests.push(`${testFn}('${func.name} should handle null/undefined', () => {
260
+ expect(() => ${func.name}(null)).not.toThrow();
261
+ });`);
262
+ // Empty input test
263
+ if (func.params.length > 0) {
264
+ tests.push(`${testFn}('${func.name} should handle empty input', () => {
265
+ const result = ${func.name}({});
266
+ expect(result).toBeDefined();
267
+ });`);
268
+ }
269
+ return tests;
270
+ }
271
+ /**
272
+ * Generate error handling test
273
+ */
274
+ generateErrorTest(func, framework) {
275
+ const testFn = framework === 'jest' ? 'test' : 'it';
276
+ return `${testFn}('${func.name} should handle errors gracefully', ${func.isAsync ? 'async ' : ''}() => {
277
+ const invalidInput = undefined;
278
+
279
+ ${func.isAsync ?
280
+ 'await expect(' + func.name + '(invalidInput)).rejects.toThrow();' :
281
+ 'expect(() => ' + func.name + '(invalidInput)).toThrow();'}
282
+ });`;
283
+ }
284
+ /**
285
+ * Generate test file with all tests
286
+ */
287
+ async generateTestFile(sourceFile, tests, framework) {
288
+ const dir = path.dirname(sourceFile);
289
+ const basename = path.basename(sourceFile, path.extname(sourceFile));
290
+ const outputFile = path.join(dir, `${basename}.test.ts`);
291
+ const imports = this.generateImports(sourceFile, tests, framework);
292
+ const testSuites = tests.map(t => t.testCode).join('\n\n');
293
+ const fileContent = `${imports}\n\ndescribe('${basename}', () => {\n${testSuites}\n});\n`;
294
+ await fs.writeFile(outputFile, fileContent, 'utf-8');
295
+ return outputFile;
296
+ }
297
+ /**
298
+ * Generate import statements
299
+ */
300
+ generateImports(sourceFile, tests, framework) {
301
+ const functionNames = tests.map(t => t.functionName).join(', ');
302
+ const relativePath = './' + path.basename(sourceFile, path.extname(sourceFile));
303
+ let imports = `import { ${functionNames} } from '${relativePath}';\n`;
304
+ if (framework === 'jest') {
305
+ imports += `import { describe, test, expect } from '@jest/globals';\n`;
306
+ }
307
+ else if (framework === 'mocha') {
308
+ imports += `import { describe, it } from 'mocha';\nimport { expect } from 'chai';\n`;
309
+ }
310
+ return imports;
311
+ }
312
+ /**
313
+ * Calculate estimated coverage
314
+ */
315
+ calculateCoverageEstimate(tests, totalLines) {
316
+ const avgCoverage = tests.reduce((sum, t) => sum + t.coverageEstimate, 0) / tests.length;
317
+ return Math.min(95, avgCoverage);
318
+ }
319
+ }
320
+ exports.TestGenerateStreamHandler = TestGenerateStreamHandler;
321
+ //# sourceMappingURL=TestGenerateStreamHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestGenerateStreamHandler.js","sourceRoot":"","sources":["../../src/streaming/TestGenerateStreamHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Streaming API Module
3
+ *
4
+ * Provides AsyncGenerator-based streaming handlers for real-time progress updates.
5
+ * All handlers support for-await-of pattern for incremental result processing.
6
+ *
7
+ * @version 1.0.0
8
+ * @author Agentic QE Team
9
+ */
10
+ export { BaseStreamHandler, StreamEvent } from './BaseStreamHandler';
11
+ export { TestGenerateStreamHandler, TestGenerateParams, TestGenerateResult } from './TestGenerateStreamHandler';
12
+ export { TestExecuteStreamHandler } from '../mcp/streaming/TestExecuteStreamHandler';
13
+ export { CoverageAnalyzeStreamHandler } from '../mcp/streaming/CoverageAnalyzeStreamHandler';
14
+ export { StreamingMCPTool } from '../mcp/streaming/StreamingMCPTool';
15
+ export * from '../mcp/streaming/types';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streaming/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGhH,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Streaming API Module
4
+ *
5
+ * Provides AsyncGenerator-based streaming handlers for real-time progress updates.
6
+ * All handlers support for-await-of pattern for incremental result processing.
7
+ *
8
+ * @version 1.0.0
9
+ * @author Agentic QE Team
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
23
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.StreamingMCPTool = exports.CoverageAnalyzeStreamHandler = exports.TestExecuteStreamHandler = exports.TestGenerateStreamHandler = exports.BaseStreamHandler = void 0;
27
+ var BaseStreamHandler_1 = require("./BaseStreamHandler");
28
+ Object.defineProperty(exports, "BaseStreamHandler", { enumerable: true, get: function () { return BaseStreamHandler_1.BaseStreamHandler; } });
29
+ var TestGenerateStreamHandler_1 = require("./TestGenerateStreamHandler");
30
+ Object.defineProperty(exports, "TestGenerateStreamHandler", { enumerable: true, get: function () { return TestGenerateStreamHandler_1.TestGenerateStreamHandler; } });
31
+ // Re-export MCP streaming handlers
32
+ var TestExecuteStreamHandler_1 = require("../mcp/streaming/TestExecuteStreamHandler");
33
+ Object.defineProperty(exports, "TestExecuteStreamHandler", { enumerable: true, get: function () { return TestExecuteStreamHandler_1.TestExecuteStreamHandler; } });
34
+ var CoverageAnalyzeStreamHandler_1 = require("../mcp/streaming/CoverageAnalyzeStreamHandler");
35
+ Object.defineProperty(exports, "CoverageAnalyzeStreamHandler", { enumerable: true, get: function () { return CoverageAnalyzeStreamHandler_1.CoverageAnalyzeStreamHandler; } });
36
+ var StreamingMCPTool_1 = require("../mcp/streaming/StreamingMCPTool");
37
+ Object.defineProperty(exports, "StreamingMCPTool", { enumerable: true, get: function () { return StreamingMCPTool_1.StreamingMCPTool; } });
38
+ __exportStar(require("../mcp/streaming/types"), exports);
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/streaming/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;AAEH,yDAAqE;AAA5D,sHAAA,iBAAiB,OAAA;AAC1B,yEAAgH;AAAvG,sIAAA,yBAAyB,OAAA;AAElC,mCAAmC;AACnC,sFAAqF;AAA5E,oIAAA,wBAAwB,OAAA;AACjC,8FAA6F;AAApF,4IAAA,4BAA4B,OAAA;AACrC,sEAAqE;AAA5D,oHAAA,gBAAgB,OAAA;AACzB,yDAAuC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Mock Logger for Testing
3
+ *
4
+ * This is a Jest manual mock that automatically replaces the real Logger
5
+ * when jest.mock('@utils/Logger') is called in tests.
6
+ */
7
+ export declare enum LogLevel {
8
+ ERROR = "error",
9
+ WARN = "warn",
10
+ INFO = "info",
11
+ DEBUG = "debug"
12
+ }
13
+ export declare class Logger {
14
+ private static mockInstance;
15
+ static getInstance(): Logger;
16
+ static resetInstance(): void;
17
+ info: jest.Mock<any, any, any>;
18
+ warn: jest.Mock<any, any, any>;
19
+ error: jest.Mock<any, any, any>;
20
+ debug: jest.Mock<any, any, any>;
21
+ log: jest.Mock<any, any, any>;
22
+ setLevel: jest.Mock<any, any, any>;
23
+ getLevel: jest.Mock<any, any, any>;
24
+ child: jest.Mock<any, [], any>;
25
+ }
26
+ //# sourceMappingURL=Logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../../src/utils/__mocks__/Logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAElD,MAAM,CAAC,WAAW,IAAI,MAAM;IAO5B,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B,IAAI,2BAAa;IACjB,IAAI,2BAAa;IACjB,KAAK,2BAAa;IAClB,KAAK,2BAAa;IAClB,GAAG,2BAAa;IAChB,QAAQ,2BAAa;IACrB,QAAQ,2BAAqC;IAC7C,KAAK,0BAEF;CACJ"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Mock Logger for Testing
4
+ *
5
+ * This is a Jest manual mock that automatically replaces the real Logger
6
+ * when jest.mock('@utils/Logger') is called in tests.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.Logger = exports.LogLevel = void 0;
10
+ var LogLevel;
11
+ (function (LogLevel) {
12
+ LogLevel["ERROR"] = "error";
13
+ LogLevel["WARN"] = "warn";
14
+ LogLevel["INFO"] = "info";
15
+ LogLevel["DEBUG"] = "debug";
16
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
17
+ class Logger {
18
+ constructor() {
19
+ this.info = jest.fn();
20
+ this.warn = jest.fn();
21
+ this.error = jest.fn();
22
+ this.debug = jest.fn();
23
+ this.log = jest.fn();
24
+ this.setLevel = jest.fn();
25
+ this.getLevel = jest.fn().mockReturnValue('info');
26
+ this.child = jest.fn(function () {
27
+ return this;
28
+ });
29
+ }
30
+ static getInstance() {
31
+ if (!Logger.mockInstance) {
32
+ Logger.mockInstance = new Logger();
33
+ }
34
+ return Logger.mockInstance;
35
+ }
36
+ static resetInstance() {
37
+ Logger.mockInstance = null;
38
+ }
39
+ }
40
+ exports.Logger = Logger;
41
+ Logger.mockInstance = null;
42
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../src/utils/__mocks__/Logger.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,MAAa,MAAM;IAAnB;QAcE,SAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjB,SAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjB,UAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAClB,UAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAClB,QAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChB,aAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,aAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IArBC,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,CAAC,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7B,CAAC;;AAZH,wBAwBC;AAvBgB,mBAAY,GAAkB,IAAI,AAAtB,CAAuB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agentic-qe",
3
- "version": "1.3.3",
4
- "description": "Agentic Quality Engineering Fleet System - AI-driven quality management platform with learning, pattern reuse, ML-based flaky detection, Multi-Model Router (70-81% cost savings), streaming progress updates, and native TypeScript hooks",
3
+ "version": "1.3.4",
4
+ "description": "Agentic Quality Engineering Fleet System - AI-driven quality management platform with 34 QE skills, learning, pattern reuse, ML-based flaky detection, Multi-Model Router (70-81% cost savings), streaming progress updates, 61 MCP tools, and native TypeScript hooks",
5
5
  "main": "dist/cli/index.js",
6
6
  "types": "dist/cli/index.d.ts",
7
7
  "bin": {
@@ -43,6 +43,9 @@
43
43
  "test:mcp": "node --expose-gc --max-old-space-size=512 --no-compilation-cache node_modules/.bin/jest tests/mcp --runInBand",
44
44
  "test:cli": "node --expose-gc --max-old-space-size=512 --no-compilation-cache node_modules/.bin/jest tests/cli --runInBand",
45
45
  "test:utils": "node --expose-gc --max-old-space-size=768 --no-compilation-cache node_modules/.bin/jest tests/utils --runInBand",
46
+ "test:streaming": "node --expose-gc --max-old-space-size=512 --no-compilation-cache node_modules/.bin/jest tests/streaming --runInBand",
47
+ "test:agentdb": "node --expose-gc --max-old-space-size=1024 --no-compilation-cache node_modules/.bin/jest tests/agentdb --runInBand",
48
+ "test:benchmark": "node --expose-gc --max-old-space-size=2048 --no-compilation-cache node_modules/.bin/jest tests/agentdb/performance-benchmark.test.ts --runInBand --forceExit",
46
49
  "pretest:integration:phase2": "node scripts/check-memory-before-test.js",
47
50
  "test:integration:phase2": "node --expose-gc --max-old-space-size=1024 --no-compilation-cache node_modules/.bin/jest tests/integration/phase2 --runInBand --forceExit",
48
51
  "pretest:integration:phase2:agents": "node scripts/check-memory-before-test.js",
@@ -70,7 +73,12 @@
70
73
  "docs:serve": "npx http-server docs/api -p 8080",
71
74
  "orchestrator": "ts-node scripts/final-go-orchestrator.ts",
72
75
  "orchestrator:test": "ts-node scripts/test-orchestrator.ts",
73
- "query-memory": "ts-node scripts/query-aqe-memory-single.ts"
76
+ "query-memory": "ts-node scripts/query-aqe-memory-single.ts",
77
+ "verify:counts": "tsx scripts/verify-counts.ts",
78
+ "verify:agent-skills": "tsx scripts/verify-agent-skills.ts",
79
+ "verify:features": "tsx scripts/verify-features.ts",
80
+ "verify:all": "npm run verify:counts && npm run verify:agent-skills && npm run verify:features",
81
+ "update:counts": "tsx scripts/update-documentation-counts.ts"
74
82
  },
75
83
  "keywords": [
76
84
  "quality-engineering",
@@ -98,10 +106,13 @@
98
106
  "dependencies": {
99
107
  "@anthropic-ai/sdk": "^0.64.0",
100
108
  "@babel/parser": "^7.24.0",
109
+ "@babel/traverse": "^7.24.0",
101
110
  "@faker-js/faker": "^10.0.0",
102
111
  "@modelcontextprotocol/sdk": "^1.18.2",
103
112
  "@xenova/transformers": "^2.6.0",
113
+ "agentdb": "^1.0.0",
104
114
  "agentic-flow": "^1.7.3",
115
+ "agentic-qe": "^1.3.3",
105
116
  "ajv": "^8.17.1",
106
117
  "ajv-formats": "^3.0.1",
107
118
  "better-sqlite3": "^12.4.1",
@@ -154,6 +165,7 @@
154
165
  "stack-utils": "^2.0.6",
155
166
  "ts-jest": "^29.4.4",
156
167
  "ts-node": "^10.9.1",
168
+ "tsx": "^4.20.6",
157
169
  "typedoc": "^0.28.13",
158
170
  "typescript": "^5.9.3",
159
171
  "uuid": "^11.0.5",