agentic-qe 1.7.0 → 1.8.1
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/skills/sherlock-review/SKILL.md +786 -0
- package/CHANGELOG.md +625 -0
- package/README.md +42 -55
- package/dist/agents/BaseAgent.d.ts +10 -10
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +96 -78
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +2 -2
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +2 -2
- package/dist/agents/LearningAgent.d.ts.map +1 -1
- package/dist/agents/LearningAgent.js +4 -4
- package/dist/agents/LearningAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +41 -2
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +314 -64
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/examples/batchAnalyze.d.ts +252 -0
- package/dist/agents/examples/batchAnalyze.d.ts.map +1 -0
- package/dist/agents/examples/batchAnalyze.js +259 -0
- package/dist/agents/examples/batchAnalyze.js.map +1 -0
- package/dist/agents/examples/batchGenerate.d.ts +153 -0
- package/dist/agents/examples/batchGenerate.d.ts.map +1 -0
- package/dist/agents/examples/batchGenerate.js +166 -0
- package/dist/agents/examples/batchGenerate.js.map +1 -0
- package/dist/agents/generateWithPII.d.ts +128 -0
- package/dist/agents/generateWithPII.d.ts.map +1 -0
- package/dist/agents/generateWithPII.js +175 -0
- package/dist/agents/generateWithPII.js.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts +1 -6
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +0 -7
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/init.d.ts +6 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +51 -46
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +4 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +57 -0
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/AdapterConfig.d.ts +108 -0
- package/dist/core/memory/AdapterConfig.d.ts.map +1 -0
- package/dist/core/memory/AdapterConfig.js +189 -0
- package/dist/core/memory/AdapterConfig.js.map +1 -0
- package/dist/core/memory/AdapterFactory.d.ts +72 -0
- package/dist/core/memory/AdapterFactory.d.ts.map +1 -0
- package/dist/core/memory/AdapterFactory.js +152 -0
- package/dist/core/memory/AdapterFactory.js.map +1 -0
- package/dist/core/memory/AgentDBManager.d.ts +28 -5
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
- package/dist/core/memory/AgentDBManager.js +99 -73
- package/dist/core/memory/AgentDBManager.js.map +1 -1
- package/dist/core/memory/PatternCache.d.ts +105 -0
- package/dist/core/memory/PatternCache.d.ts.map +1 -0
- package/dist/core/memory/PatternCache.js +183 -0
- package/dist/core/memory/PatternCache.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +14 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +153 -16
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.d.ts +4 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.js +20 -0
- package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +8 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +33 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +6 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +12 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/neural/NeuralTrainer.d.ts +2 -6
- package/dist/core/neural/NeuralTrainer.d.ts.map +1 -1
- package/dist/core/neural/NeuralTrainer.js +7 -25
- package/dist/core/neural/NeuralTrainer.js.map +1 -1
- package/dist/learning/ImprovementLoop.js +2 -2
- package/dist/learning/ImprovementLoop.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +11 -7
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +156 -72
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +83 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +130 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +58 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +84 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/index.d.ts +47 -0
- package/dist/mcp/handlers/filtered/index.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/index.js +63 -0
- package/dist/mcp/handlers/filtered/index.js.map +1 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts +57 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.js +83 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts +57 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.js +93 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +54 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js +73 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts +61 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.js +117 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +2 -2
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/scripts/backup-helper.d.ts +64 -0
- package/dist/scripts/backup-helper.d.ts.map +1 -0
- package/dist/scripts/backup-helper.js +251 -0
- package/dist/scripts/backup-helper.js.map +1 -0
- package/dist/scripts/migrate-with-backup.d.ts +15 -0
- package/dist/scripts/migrate-with-backup.d.ts.map +1 -0
- package/dist/scripts/migrate-with-backup.js +194 -0
- package/dist/scripts/migrate-with-backup.js.map +1 -0
- package/dist/security/pii-tokenization.d.ts +216 -0
- package/dist/security/pii-tokenization.d.ts.map +1 -0
- package/dist/security/pii-tokenization.js +325 -0
- package/dist/security/pii-tokenization.js.map +1 -0
- package/dist/utils/EmbeddingGenerator.d.ts +35 -0
- package/dist/utils/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/utils/EmbeddingGenerator.js +72 -0
- package/dist/utils/EmbeddingGenerator.js.map +1 -0
- package/dist/utils/batch-operations.d.ts +215 -0
- package/dist/utils/batch-operations.d.ts.map +1 -0
- package/dist/utils/batch-operations.js +266 -0
- package/dist/utils/batch-operations.js.map +1 -0
- package/dist/utils/filtering.d.ts +180 -0
- package/dist/utils/filtering.d.ts.map +1 -0
- package/dist/utils/filtering.js +288 -0
- package/dist/utils/filtering.js.map +1 -0
- package/dist/utils/prompt-cache-examples.d.ts +111 -0
- package/dist/utils/prompt-cache-examples.d.ts.map +1 -0
- package/dist/utils/prompt-cache-examples.js +416 -0
- package/dist/utils/prompt-cache-examples.js.map +1 -0
- package/dist/utils/prompt-cache.d.ts +305 -0
- package/dist/utils/prompt-cache.d.ts.map +1 -0
- package/dist/utils/prompt-cache.js +448 -0
- package/dist/utils/prompt-cache.js.map +1 -0
- package/package.json +7 -16
- package/dist/mcp/tools/deprecated.d.ts +0 -1390
- package/dist/mcp/tools/deprecated.d.ts.map +0 -1
- package/dist/mcp/tools/deprecated.js +0 -859
- package/dist/mcp/tools/deprecated.js.map +0 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Coverage Analysis Example
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates using the BatchOperationManager to analyze coverage
|
|
5
|
+
* for multiple modules/packages in parallel.
|
|
6
|
+
*
|
|
7
|
+
* Performance Improvement:
|
|
8
|
+
* - Sequential: 10 modules × 1s = 10s
|
|
9
|
+
* - Batched: max(1s) with 5 concurrent = ~2s
|
|
10
|
+
* - Speedup: 5x faster
|
|
11
|
+
*
|
|
12
|
+
* @module agents/examples/batchAnalyze
|
|
13
|
+
*/
|
|
14
|
+
import { type BatchResult } from '../../utils/batch-operations';
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for batch coverage analysis
|
|
17
|
+
*/
|
|
18
|
+
export interface BatchAnalyzeConfig {
|
|
19
|
+
/**
|
|
20
|
+
* Coverage threshold percentage
|
|
21
|
+
*/
|
|
22
|
+
threshold?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Maximum concurrent analysis operations
|
|
25
|
+
* @default 5
|
|
26
|
+
*/
|
|
27
|
+
maxConcurrent?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Timeout per module in milliseconds
|
|
30
|
+
* @default 60000 (60 seconds)
|
|
31
|
+
*/
|
|
32
|
+
timeout?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Enable retry on failure
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
retryOnError?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Include detailed file-level coverage
|
|
40
|
+
*/
|
|
41
|
+
includeDetails?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Progress callback
|
|
44
|
+
*/
|
|
45
|
+
onProgress?: (completed: number, total: number, module: string) => void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Input for a single module analysis
|
|
49
|
+
*/
|
|
50
|
+
export interface ModuleAnalysisInput {
|
|
51
|
+
/**
|
|
52
|
+
* Module name or path
|
|
53
|
+
*/
|
|
54
|
+
moduleName: string;
|
|
55
|
+
/**
|
|
56
|
+
* Path to coverage data file (lcov, json, etc.)
|
|
57
|
+
*/
|
|
58
|
+
coverageDataPath?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Module-specific configuration
|
|
61
|
+
*/
|
|
62
|
+
config?: {
|
|
63
|
+
threshold?: number;
|
|
64
|
+
includeSubmodules?: boolean;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Coverage gap information
|
|
69
|
+
*/
|
|
70
|
+
export interface CoverageGap {
|
|
71
|
+
/**
|
|
72
|
+
* File path
|
|
73
|
+
*/
|
|
74
|
+
filePath: string;
|
|
75
|
+
/**
|
|
76
|
+
* Current coverage percentage
|
|
77
|
+
*/
|
|
78
|
+
coverage: number;
|
|
79
|
+
/**
|
|
80
|
+
* Uncovered lines
|
|
81
|
+
*/
|
|
82
|
+
uncoveredLines: number[];
|
|
83
|
+
/**
|
|
84
|
+
* Uncovered branches
|
|
85
|
+
*/
|
|
86
|
+
uncoveredBranches?: Array<{
|
|
87
|
+
line: number;
|
|
88
|
+
branch: number;
|
|
89
|
+
}>;
|
|
90
|
+
/**
|
|
91
|
+
* Priority (high/medium/low)
|
|
92
|
+
*/
|
|
93
|
+
priority: 'high' | 'medium' | 'low';
|
|
94
|
+
/**
|
|
95
|
+
* Complexity metrics
|
|
96
|
+
*/
|
|
97
|
+
complexity?: {
|
|
98
|
+
cyclomatic: number;
|
|
99
|
+
cognitive: number;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Result for a single module analysis
|
|
104
|
+
*/
|
|
105
|
+
export interface ModuleAnalysisResult {
|
|
106
|
+
/**
|
|
107
|
+
* Module name
|
|
108
|
+
*/
|
|
109
|
+
moduleName: string;
|
|
110
|
+
/**
|
|
111
|
+
* Overall coverage metrics
|
|
112
|
+
*/
|
|
113
|
+
coverage: {
|
|
114
|
+
lines: number;
|
|
115
|
+
branches: number;
|
|
116
|
+
functions: number;
|
|
117
|
+
statements: number;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Coverage gaps found
|
|
121
|
+
*/
|
|
122
|
+
gaps: CoverageGap[];
|
|
123
|
+
/**
|
|
124
|
+
* Number of files analyzed
|
|
125
|
+
*/
|
|
126
|
+
filesAnalyzed: number;
|
|
127
|
+
/**
|
|
128
|
+
* Analysis time in milliseconds
|
|
129
|
+
*/
|
|
130
|
+
analysisTime: number;
|
|
131
|
+
/**
|
|
132
|
+
* Recommendations for improvement
|
|
133
|
+
*/
|
|
134
|
+
recommendations?: string[];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Batch analyze coverage for multiple modules
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* const modules = [
|
|
142
|
+
* { moduleName: 'auth', coverageDataPath: 'coverage/auth/lcov.info' },
|
|
143
|
+
* { moduleName: 'api', coverageDataPath: 'coverage/api/lcov.info' },
|
|
144
|
+
* { moduleName: 'ui', coverageDataPath: 'coverage/ui/lcov.info' }
|
|
145
|
+
* ];
|
|
146
|
+
*
|
|
147
|
+
* const result = await analyzeCoverageForModules(modules, {
|
|
148
|
+
* threshold: 80,
|
|
149
|
+
* maxConcurrent: 5,
|
|
150
|
+
* includeDetails: true,
|
|
151
|
+
* onProgress: (completed, total, module) => {
|
|
152
|
+
* console.log(`Analyzed ${completed}/${total}: ${module}`);
|
|
153
|
+
* }
|
|
154
|
+
* });
|
|
155
|
+
*
|
|
156
|
+
* console.log(`Analyzed ${result.results.length} modules`);
|
|
157
|
+
* console.log(`Success rate: ${result.successRate * 100}%`);
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export declare function analyzeCoverageForModules(modules: ModuleAnalysisInput[], config: BatchAnalyzeConfig): Promise<BatchResult<ModuleAnalysisResult>>;
|
|
161
|
+
/**
|
|
162
|
+
* Batch analyze coverage with gap prioritization
|
|
163
|
+
*
|
|
164
|
+
* Analyzes all modules and returns a prioritized list of files to test.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* const result = await analyzeCoverageWithPriority(modules, {
|
|
169
|
+
* threshold: 80,
|
|
170
|
+
* topN: 20 // Return top 20 gaps
|
|
171
|
+
* });
|
|
172
|
+
*
|
|
173
|
+
* console.log('Top coverage gaps to address:');
|
|
174
|
+
* result.prioritizedGaps.forEach((gap, idx) => {
|
|
175
|
+
* console.log(`${idx + 1}. ${gap.filePath} (${gap.coverage}%)`);
|
|
176
|
+
* });
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export declare function analyzeCoverageWithPriority(modules: ModuleAnalysisInput[], config: BatchAnalyzeConfig & {
|
|
180
|
+
topN?: number;
|
|
181
|
+
}): Promise<BatchResult<ModuleAnalysisResult> & {
|
|
182
|
+
prioritizedGaps: CoverageGap[];
|
|
183
|
+
overallCoverage: {
|
|
184
|
+
lines: number;
|
|
185
|
+
branches: number;
|
|
186
|
+
functions: number;
|
|
187
|
+
statements: number;
|
|
188
|
+
};
|
|
189
|
+
}>;
|
|
190
|
+
/**
|
|
191
|
+
* Continuous coverage monitoring with batch analysis
|
|
192
|
+
*
|
|
193
|
+
* Runs coverage analysis at intervals and tracks trends over time.
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* const monitor = new CoverageMonitor(modules, {
|
|
198
|
+
* interval: 60000, // 1 minute
|
|
199
|
+
* threshold: 80,
|
|
200
|
+
* onCoverageChange: (current, previous) => {
|
|
201
|
+
* console.log(`Coverage changed: ${previous}% -> ${current}%`);
|
|
202
|
+
* }
|
|
203
|
+
* });
|
|
204
|
+
*
|
|
205
|
+
* await monitor.start();
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export declare class CoverageMonitor {
|
|
209
|
+
private modules;
|
|
210
|
+
private config;
|
|
211
|
+
private intervalId?;
|
|
212
|
+
private previousCoverage?;
|
|
213
|
+
constructor(modules: ModuleAnalysisInput[], config: BatchAnalyzeConfig & {
|
|
214
|
+
interval?: number;
|
|
215
|
+
onCoverageChange?: (current: number, previous: number) => void;
|
|
216
|
+
});
|
|
217
|
+
start(): Promise<void>;
|
|
218
|
+
stop(): void;
|
|
219
|
+
private runAnalysis;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Analyze coverage delta between two points in time
|
|
223
|
+
*
|
|
224
|
+
* Useful for PR validation to ensure coverage doesn't decrease.
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* const delta = await analyzeCoverageDelta(
|
|
229
|
+
* modules,
|
|
230
|
+
* 'baseline-coverage.json',
|
|
231
|
+
* 'current-coverage.json',
|
|
232
|
+
* { threshold: 80 }
|
|
233
|
+
* );
|
|
234
|
+
*
|
|
235
|
+
* if (delta.overallChange < 0) {
|
|
236
|
+
* console.error('Coverage decreased!');
|
|
237
|
+
* process.exit(1);
|
|
238
|
+
* }
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
export declare function analyzeCoverageDelta(modules: ModuleAnalysisInput[], baselinePath: string, currentPath: string, config: BatchAnalyzeConfig): Promise<{
|
|
242
|
+
overallChange: number;
|
|
243
|
+
moduleChanges: Array<{
|
|
244
|
+
module: string;
|
|
245
|
+
before: number;
|
|
246
|
+
after: number;
|
|
247
|
+
change: number;
|
|
248
|
+
}>;
|
|
249
|
+
newGaps: CoverageGap[];
|
|
250
|
+
fixedGaps: CoverageGap[];
|
|
251
|
+
}>;
|
|
252
|
+
//# sourceMappingURL=batchAnalyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchAnalyze.d.ts","sourceRoot":"","sources":["../../../src/agents/examples/batchAnalyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Batch Coverage Analysis Example
|
|
4
|
+
*
|
|
5
|
+
* Demonstrates using the BatchOperationManager to analyze coverage
|
|
6
|
+
* for multiple modules/packages in parallel.
|
|
7
|
+
*
|
|
8
|
+
* Performance Improvement:
|
|
9
|
+
* - Sequential: 10 modules × 1s = 10s
|
|
10
|
+
* - Batched: max(1s) with 5 concurrent = ~2s
|
|
11
|
+
* - Speedup: 5x faster
|
|
12
|
+
*
|
|
13
|
+
* @module agents/examples/batchAnalyze
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.CoverageMonitor = void 0;
|
|
17
|
+
exports.analyzeCoverageForModules = analyzeCoverageForModules;
|
|
18
|
+
exports.analyzeCoverageWithPriority = analyzeCoverageWithPriority;
|
|
19
|
+
exports.analyzeCoverageDelta = analyzeCoverageDelta;
|
|
20
|
+
const batch_operations_1 = require("../../utils/batch-operations");
|
|
21
|
+
/**
|
|
22
|
+
* Batch analyze coverage for multiple modules
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const modules = [
|
|
27
|
+
* { moduleName: 'auth', coverageDataPath: 'coverage/auth/lcov.info' },
|
|
28
|
+
* { moduleName: 'api', coverageDataPath: 'coverage/api/lcov.info' },
|
|
29
|
+
* { moduleName: 'ui', coverageDataPath: 'coverage/ui/lcov.info' }
|
|
30
|
+
* ];
|
|
31
|
+
*
|
|
32
|
+
* const result = await analyzeCoverageForModules(modules, {
|
|
33
|
+
* threshold: 80,
|
|
34
|
+
* maxConcurrent: 5,
|
|
35
|
+
* includeDetails: true,
|
|
36
|
+
* onProgress: (completed, total, module) => {
|
|
37
|
+
* console.log(`Analyzed ${completed}/${total}: ${module}`);
|
|
38
|
+
* }
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* console.log(`Analyzed ${result.results.length} modules`);
|
|
42
|
+
* console.log(`Success rate: ${result.successRate * 100}%`);
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
async function analyzeCoverageForModules(modules, config) {
|
|
46
|
+
const batchManager = new batch_operations_1.BatchOperationManager();
|
|
47
|
+
const { threshold = 80, maxConcurrent = 5, timeout = 60000, retryOnError = true, includeDetails = false, onProgress, } = config;
|
|
48
|
+
// Handler function for single module analysis
|
|
49
|
+
const analyzeModule = async (input) => {
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
// This would call your actual coverage analysis service
|
|
52
|
+
const coverage = await analyzeCoverageData({
|
|
53
|
+
moduleName: input.moduleName,
|
|
54
|
+
coverageDataPath: input.coverageDataPath,
|
|
55
|
+
threshold: input.config?.threshold || threshold,
|
|
56
|
+
includeDetails,
|
|
57
|
+
});
|
|
58
|
+
// Find gaps (files below threshold)
|
|
59
|
+
const gaps = findCoverageGaps(coverage, threshold);
|
|
60
|
+
// Generate recommendations
|
|
61
|
+
const recommendations = includeDetails
|
|
62
|
+
? generateRecommendations(gaps)
|
|
63
|
+
: undefined;
|
|
64
|
+
const analysisTime = Date.now() - startTime;
|
|
65
|
+
return {
|
|
66
|
+
moduleName: input.moduleName,
|
|
67
|
+
coverage: coverage.summary,
|
|
68
|
+
gaps,
|
|
69
|
+
filesAnalyzed: coverage.files.length,
|
|
70
|
+
analysisTime,
|
|
71
|
+
recommendations,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
// Execute batch analysis
|
|
75
|
+
return batchManager.batchExecute(modules, analyzeModule, {
|
|
76
|
+
maxConcurrent,
|
|
77
|
+
timeout,
|
|
78
|
+
retryOnError,
|
|
79
|
+
maxRetries: 3,
|
|
80
|
+
failFast: false,
|
|
81
|
+
onProgress: (completed, total) => {
|
|
82
|
+
const currentModule = modules[completed - 1]?.moduleName || 'unknown';
|
|
83
|
+
onProgress?.(completed, total, currentModule);
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Placeholder for actual coverage analysis implementation
|
|
89
|
+
*/
|
|
90
|
+
async function analyzeCoverageData(params) {
|
|
91
|
+
// This would integrate with your CoverageAnalyzerAgent
|
|
92
|
+
throw new Error('Not implemented - integrate with CoverageAnalyzerAgent');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Find coverage gaps below threshold
|
|
96
|
+
*/
|
|
97
|
+
function findCoverageGaps(coverage, threshold) {
|
|
98
|
+
return coverage.files
|
|
99
|
+
.filter((file) => file.coverage < threshold)
|
|
100
|
+
.map((file) => {
|
|
101
|
+
const priority = file.coverage < threshold - 20
|
|
102
|
+
? 'high'
|
|
103
|
+
: file.coverage < threshold - 10
|
|
104
|
+
? 'medium'
|
|
105
|
+
: 'low';
|
|
106
|
+
return {
|
|
107
|
+
filePath: file.path,
|
|
108
|
+
coverage: file.coverage,
|
|
109
|
+
uncoveredLines: [], // Would be populated from actual coverage data
|
|
110
|
+
priority,
|
|
111
|
+
};
|
|
112
|
+
})
|
|
113
|
+
.sort((a, b) => a.coverage - b.coverage); // Worst coverage first
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Generate improvement recommendations
|
|
117
|
+
*/
|
|
118
|
+
function generateRecommendations(gaps) {
|
|
119
|
+
const recommendations = [];
|
|
120
|
+
if (gaps.length === 0) {
|
|
121
|
+
return ['All files meet coverage threshold'];
|
|
122
|
+
}
|
|
123
|
+
const highPriorityGaps = gaps.filter((g) => g.priority === 'high');
|
|
124
|
+
if (highPriorityGaps.length > 0) {
|
|
125
|
+
recommendations.push(`Focus on ${highPriorityGaps.length} high-priority files with <60% coverage`);
|
|
126
|
+
}
|
|
127
|
+
const avgCoverage = gaps.reduce((sum, g) => sum + g.coverage, 0) / gaps.length;
|
|
128
|
+
if (avgCoverage < 50) {
|
|
129
|
+
recommendations.push('Consider implementing integration tests to improve overall coverage');
|
|
130
|
+
}
|
|
131
|
+
if (gaps.length > 10) {
|
|
132
|
+
recommendations.push('Use batch test generation to address multiple gaps simultaneously');
|
|
133
|
+
}
|
|
134
|
+
return recommendations;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Batch analyze coverage with gap prioritization
|
|
138
|
+
*
|
|
139
|
+
* Analyzes all modules and returns a prioritized list of files to test.
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const result = await analyzeCoverageWithPriority(modules, {
|
|
144
|
+
* threshold: 80,
|
|
145
|
+
* topN: 20 // Return top 20 gaps
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* console.log('Top coverage gaps to address:');
|
|
149
|
+
* result.prioritizedGaps.forEach((gap, idx) => {
|
|
150
|
+
* console.log(`${idx + 1}. ${gap.filePath} (${gap.coverage}%)`);
|
|
151
|
+
* });
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
async function analyzeCoverageWithPriority(modules, config) {
|
|
155
|
+
const result = await analyzeCoverageForModules(modules, config);
|
|
156
|
+
// Aggregate all gaps
|
|
157
|
+
const allGaps = result.results.flatMap((r) => r.gaps);
|
|
158
|
+
// Sort by priority and coverage
|
|
159
|
+
const prioritizedGaps = allGaps
|
|
160
|
+
.sort((a, b) => {
|
|
161
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
162
|
+
const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
163
|
+
return priorityDiff !== 0 ? priorityDiff : a.coverage - b.coverage;
|
|
164
|
+
})
|
|
165
|
+
.slice(0, config.topN || 50);
|
|
166
|
+
// Calculate overall coverage
|
|
167
|
+
const totalCoverage = result.results.reduce((sum, r) => ({
|
|
168
|
+
lines: sum.lines + r.coverage.lines,
|
|
169
|
+
branches: sum.branches + r.coverage.branches,
|
|
170
|
+
functions: sum.functions + r.coverage.functions,
|
|
171
|
+
statements: sum.statements + r.coverage.statements,
|
|
172
|
+
}), { lines: 0, branches: 0, functions: 0, statements: 0 });
|
|
173
|
+
const count = result.results.length || 1;
|
|
174
|
+
const overallCoverage = {
|
|
175
|
+
lines: totalCoverage.lines / count,
|
|
176
|
+
branches: totalCoverage.branches / count,
|
|
177
|
+
functions: totalCoverage.functions / count,
|
|
178
|
+
statements: totalCoverage.statements / count,
|
|
179
|
+
};
|
|
180
|
+
return {
|
|
181
|
+
...result,
|
|
182
|
+
prioritizedGaps,
|
|
183
|
+
overallCoverage,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Continuous coverage monitoring with batch analysis
|
|
188
|
+
*
|
|
189
|
+
* Runs coverage analysis at intervals and tracks trends over time.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```typescript
|
|
193
|
+
* const monitor = new CoverageMonitor(modules, {
|
|
194
|
+
* interval: 60000, // 1 minute
|
|
195
|
+
* threshold: 80,
|
|
196
|
+
* onCoverageChange: (current, previous) => {
|
|
197
|
+
* console.log(`Coverage changed: ${previous}% -> ${current}%`);
|
|
198
|
+
* }
|
|
199
|
+
* });
|
|
200
|
+
*
|
|
201
|
+
* await monitor.start();
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
class CoverageMonitor {
|
|
205
|
+
constructor(modules, config) {
|
|
206
|
+
this.modules = modules;
|
|
207
|
+
this.config = config;
|
|
208
|
+
}
|
|
209
|
+
async start() {
|
|
210
|
+
const interval = this.config.interval || 60000;
|
|
211
|
+
// Initial analysis
|
|
212
|
+
await this.runAnalysis();
|
|
213
|
+
// Schedule periodic analysis
|
|
214
|
+
this.intervalId = setInterval(() => {
|
|
215
|
+
this.runAnalysis();
|
|
216
|
+
}, interval);
|
|
217
|
+
}
|
|
218
|
+
stop() {
|
|
219
|
+
if (this.intervalId) {
|
|
220
|
+
clearInterval(this.intervalId);
|
|
221
|
+
this.intervalId = undefined;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async runAnalysis() {
|
|
225
|
+
const result = await analyzeCoverageWithPriority(this.modules, this.config);
|
|
226
|
+
const currentCoverage = result.overallCoverage.lines;
|
|
227
|
+
if (this.previousCoverage !== undefined &&
|
|
228
|
+
this.config.onCoverageChange) {
|
|
229
|
+
this.config.onCoverageChange(currentCoverage, this.previousCoverage);
|
|
230
|
+
}
|
|
231
|
+
this.previousCoverage = currentCoverage;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.CoverageMonitor = CoverageMonitor;
|
|
235
|
+
/**
|
|
236
|
+
* Analyze coverage delta between two points in time
|
|
237
|
+
*
|
|
238
|
+
* Useful for PR validation to ensure coverage doesn't decrease.
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* const delta = await analyzeCoverageDelta(
|
|
243
|
+
* modules,
|
|
244
|
+
* 'baseline-coverage.json',
|
|
245
|
+
* 'current-coverage.json',
|
|
246
|
+
* { threshold: 80 }
|
|
247
|
+
* );
|
|
248
|
+
*
|
|
249
|
+
* if (delta.overallChange < 0) {
|
|
250
|
+
* console.error('Coverage decreased!');
|
|
251
|
+
* process.exit(1);
|
|
252
|
+
* }
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
async function analyzeCoverageDelta(modules, baselinePath, currentPath, config) {
|
|
256
|
+
// This would load baseline and current coverage, then compare
|
|
257
|
+
throw new Error('Not implemented - integrate with coverage comparison logic');
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=batchAnalyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchAnalyze.js","sourceRoot":"","sources":["../../../src/agents/examples/batchAnalyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Test Generation Example
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates using the BatchOperationManager to generate tests
|
|
5
|
+
* for multiple files in parallel with automatic retry and timeout handling.
|
|
6
|
+
*
|
|
7
|
+
* Performance Improvement:
|
|
8
|
+
* - Sequential: 3 files × 2s = 6s
|
|
9
|
+
* - Batched: max(2s) with 5 concurrent = ~2s
|
|
10
|
+
* - Speedup: 3x faster
|
|
11
|
+
*
|
|
12
|
+
* @module agents/examples/batchGenerate
|
|
13
|
+
*/
|
|
14
|
+
import { type BatchResult } from '../../utils/batch-operations';
|
|
15
|
+
import type { TestGenerationRequest, TestGenerationResult } from '../TestGeneratorAgent';
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for batch test generation
|
|
18
|
+
*/
|
|
19
|
+
export interface BatchGenerateConfig {
|
|
20
|
+
/**
|
|
21
|
+
* Test framework to use
|
|
22
|
+
*/
|
|
23
|
+
framework: 'jest' | 'vitest' | 'mocha';
|
|
24
|
+
/**
|
|
25
|
+
* Target coverage percentage
|
|
26
|
+
*/
|
|
27
|
+
targetCoverage?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Maximum concurrent file processing
|
|
30
|
+
* @default 5
|
|
31
|
+
*/
|
|
32
|
+
maxConcurrent?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Timeout per file in milliseconds
|
|
35
|
+
* @default 60000 (60 seconds)
|
|
36
|
+
*/
|
|
37
|
+
timeout?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Enable retry on failure
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
42
|
+
retryOnError?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Progress callback
|
|
45
|
+
*/
|
|
46
|
+
onProgress?: (completed: number, total: number, file: string) => void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Single file test generation input
|
|
50
|
+
*/
|
|
51
|
+
export interface FileGenerationInput {
|
|
52
|
+
/**
|
|
53
|
+
* Path to source file
|
|
54
|
+
*/
|
|
55
|
+
filePath: string;
|
|
56
|
+
/**
|
|
57
|
+
* File content (optional, will read if not provided)
|
|
58
|
+
*/
|
|
59
|
+
content?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Custom configuration for this file
|
|
62
|
+
*/
|
|
63
|
+
config?: Partial<TestGenerationRequest>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Result for a single file
|
|
67
|
+
*/
|
|
68
|
+
export interface FileGenerationResult {
|
|
69
|
+
/**
|
|
70
|
+
* Source file path
|
|
71
|
+
*/
|
|
72
|
+
filePath: string;
|
|
73
|
+
/**
|
|
74
|
+
* Generated test file path
|
|
75
|
+
*/
|
|
76
|
+
testFilePath: string;
|
|
77
|
+
/**
|
|
78
|
+
* Test generation result
|
|
79
|
+
*/
|
|
80
|
+
result: TestGenerationResult;
|
|
81
|
+
/**
|
|
82
|
+
* Generation time in milliseconds
|
|
83
|
+
*/
|
|
84
|
+
generationTime: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Batch test generation for multiple files
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const files = [
|
|
92
|
+
* { filePath: 'src/utils/parser.ts' },
|
|
93
|
+
* { filePath: 'src/utils/validator.ts' },
|
|
94
|
+
* { filePath: 'src/utils/formatter.ts' }
|
|
95
|
+
* ];
|
|
96
|
+
*
|
|
97
|
+
* const result = await generateTestsForFiles(files, {
|
|
98
|
+
* framework: 'jest',
|
|
99
|
+
* targetCoverage: 80,
|
|
100
|
+
* maxConcurrent: 5,
|
|
101
|
+
* onProgress: (completed, total, file) => {
|
|
102
|
+
* console.log(`Progress: ${completed}/${total} - ${file}`);
|
|
103
|
+
* }
|
|
104
|
+
* });
|
|
105
|
+
*
|
|
106
|
+
* console.log(`Generated ${result.results.length} test files`);
|
|
107
|
+
* console.log(`Success rate: ${result.successRate * 100}%`);
|
|
108
|
+
* console.log(`Total time: ${result.totalTime}ms`);
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function generateTestsForFiles(files: FileGenerationInput[], config: BatchGenerateConfig): Promise<BatchResult<FileGenerationResult>>;
|
|
112
|
+
/**
|
|
113
|
+
* Batch generate tests for an entire directory
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const result = await generateTestsForDirectory('src/utils', {
|
|
118
|
+
* framework: 'jest',
|
|
119
|
+
* pattern: '**\/*.ts',
|
|
120
|
+
* exclude: ['**\/*.test.ts', '**\/*.spec.ts'],
|
|
121
|
+
* maxConcurrent: 5
|
|
122
|
+
* });
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
export declare function generateTestsForDirectory(directory: string, config: BatchGenerateConfig & {
|
|
126
|
+
pattern?: string;
|
|
127
|
+
exclude?: string[];
|
|
128
|
+
}): Promise<BatchResult<FileGenerationResult>>;
|
|
129
|
+
/**
|
|
130
|
+
* Batch generate tests with intelligent prioritization
|
|
131
|
+
*
|
|
132
|
+
* Prioritizes files by:
|
|
133
|
+
* 1. Code complexity (higher first)
|
|
134
|
+
* 2. Current test coverage (lower first)
|
|
135
|
+
* 3. Change frequency (higher first)
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const result = await generateTestsWithPriority(
|
|
140
|
+
* [
|
|
141
|
+
* { filePath: 'src/complex.ts', complexity: 15, coverage: 20 },
|
|
142
|
+
* { filePath: 'src/simple.ts', complexity: 3, coverage: 80 },
|
|
143
|
+
* ],
|
|
144
|
+
* { framework: 'jest' }
|
|
145
|
+
* );
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export declare function generateTestsWithPriority(files: Array<FileGenerationInput & {
|
|
149
|
+
complexity?: number;
|
|
150
|
+
coverage?: number;
|
|
151
|
+
changeFrequency?: number;
|
|
152
|
+
}>, config: BatchGenerateConfig): Promise<BatchResult<FileGenerationResult>>;
|
|
153
|
+
//# sourceMappingURL=batchGenerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchGenerate.d.ts","sourceRoot":"","sources":["../../../src/agents/examples/batchGenerate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAkD5C;AAyBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,GACA,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAO5C;AAeD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,KAAK,CACV,mBAAmB,GAAG;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CACF,EACD,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAS5C"}
|