agentic-qe 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/.claude/skills/sherlock-review/SKILL.md +786 -0
  2. package/CHANGELOG.md +531 -0
  3. package/README.md +37 -21
  4. package/dist/agents/BaseAgent.d.ts +8 -10
  5. package/dist/agents/BaseAgent.d.ts.map +1 -1
  6. package/dist/agents/BaseAgent.js +41 -43
  7. package/dist/agents/BaseAgent.js.map +1 -1
  8. package/dist/agents/CoverageAnalyzerAgent.js +2 -2
  9. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  10. package/dist/agents/LearningAgent.d.ts +2 -2
  11. package/dist/agents/LearningAgent.d.ts.map +1 -1
  12. package/dist/agents/LearningAgent.js +4 -4
  13. package/dist/agents/LearningAgent.js.map +1 -1
  14. package/dist/agents/TestExecutorAgent.d.ts +9 -0
  15. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  16. package/dist/agents/TestExecutorAgent.js +60 -0
  17. package/dist/agents/TestExecutorAgent.js.map +1 -1
  18. package/dist/agents/examples/batchAnalyze.d.ts +252 -0
  19. package/dist/agents/examples/batchAnalyze.d.ts.map +1 -0
  20. package/dist/agents/examples/batchAnalyze.js +259 -0
  21. package/dist/agents/examples/batchAnalyze.js.map +1 -0
  22. package/dist/agents/examples/batchGenerate.d.ts +153 -0
  23. package/dist/agents/examples/batchGenerate.d.ts.map +1 -0
  24. package/dist/agents/examples/batchGenerate.js +166 -0
  25. package/dist/agents/examples/batchGenerate.js.map +1 -0
  26. package/dist/agents/generateWithPII.d.ts +128 -0
  27. package/dist/agents/generateWithPII.d.ts.map +1 -0
  28. package/dist/agents/generateWithPII.js +175 -0
  29. package/dist/agents/generateWithPII.js.map +1 -0
  30. package/dist/cli/commands/init.d.ts +6 -3
  31. package/dist/cli/commands/init.d.ts.map +1 -1
  32. package/dist/cli/commands/init.js +51 -46
  33. package/dist/cli/commands/init.js.map +1 -1
  34. package/dist/cli/commands/learn/index.d.ts +4 -0
  35. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  36. package/dist/cli/commands/learn/index.js +57 -0
  37. package/dist/cli/commands/learn/index.js.map +1 -1
  38. package/dist/cli/index.js +14 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/core/memory/AgentDBManager.d.ts +5 -0
  41. package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
  42. package/dist/core/memory/AgentDBManager.js +19 -1
  43. package/dist/core/memory/AgentDBManager.js.map +1 -1
  44. package/dist/core/memory/RealAgentDBAdapter.d.ts +8 -0
  45. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  46. package/dist/core/memory/RealAgentDBAdapter.js +74 -17
  47. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  48. package/dist/core/memory/ReasoningBankAdapter.d.ts +4 -0
  49. package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
  50. package/dist/core/memory/ReasoningBankAdapter.js +20 -0
  51. package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
  52. package/dist/core/memory/SwarmMemoryManager.d.ts +8 -0
  53. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  54. package/dist/core/memory/SwarmMemoryManager.js +33 -0
  55. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  56. package/dist/learning/ImprovementLoop.js +2 -2
  57. package/dist/learning/ImprovementLoop.js.map +1 -1
  58. package/dist/learning/LearningEngine.d.ts +11 -7
  59. package/dist/learning/LearningEngine.d.ts.map +1 -1
  60. package/dist/learning/LearningEngine.js +156 -72
  61. package/dist/learning/LearningEngine.js.map +1 -1
  62. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +83 -0
  63. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +1 -0
  64. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +130 -0
  65. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +1 -0
  66. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +58 -0
  67. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +1 -0
  68. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +84 -0
  69. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +1 -0
  70. package/dist/mcp/handlers/filtered/index.d.ts +47 -0
  71. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -0
  72. package/dist/mcp/handlers/filtered/index.js +63 -0
  73. package/dist/mcp/handlers/filtered/index.js.map +1 -0
  74. package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts +57 -0
  75. package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts.map +1 -0
  76. package/dist/mcp/handlers/filtered/performance-tester-filtered.js +83 -0
  77. package/dist/mcp/handlers/filtered/performance-tester-filtered.js.map +1 -0
  78. package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts +57 -0
  79. package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts.map +1 -0
  80. package/dist/mcp/handlers/filtered/quality-assessor-filtered.js +93 -0
  81. package/dist/mcp/handlers/filtered/quality-assessor-filtered.js.map +1 -0
  82. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +54 -0
  83. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +1 -0
  84. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +73 -0
  85. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +1 -0
  86. package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts +61 -0
  87. package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts.map +1 -0
  88. package/dist/mcp/handlers/filtered/test-executor-filtered.js +117 -0
  89. package/dist/mcp/handlers/filtered/test-executor-filtered.js.map +1 -0
  90. package/dist/mcp/handlers/phase2/Phase2Tools.js +2 -2
  91. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  92. package/dist/mcp/tools/deprecated.d.ts +8 -8
  93. package/dist/scripts/backup-helper.d.ts +64 -0
  94. package/dist/scripts/backup-helper.d.ts.map +1 -0
  95. package/dist/scripts/backup-helper.js +251 -0
  96. package/dist/scripts/backup-helper.js.map +1 -0
  97. package/dist/scripts/migrate-with-backup.d.ts +15 -0
  98. package/dist/scripts/migrate-with-backup.d.ts.map +1 -0
  99. package/dist/scripts/migrate-with-backup.js +194 -0
  100. package/dist/scripts/migrate-with-backup.js.map +1 -0
  101. package/dist/security/pii-tokenization.d.ts +216 -0
  102. package/dist/security/pii-tokenization.d.ts.map +1 -0
  103. package/dist/security/pii-tokenization.js +325 -0
  104. package/dist/security/pii-tokenization.js.map +1 -0
  105. package/dist/utils/EmbeddingGenerator.d.ts +35 -0
  106. package/dist/utils/EmbeddingGenerator.d.ts.map +1 -0
  107. package/dist/utils/EmbeddingGenerator.js +72 -0
  108. package/dist/utils/EmbeddingGenerator.js.map +1 -0
  109. package/dist/utils/batch-operations.d.ts +215 -0
  110. package/dist/utils/batch-operations.d.ts.map +1 -0
  111. package/dist/utils/batch-operations.js +266 -0
  112. package/dist/utils/batch-operations.js.map +1 -0
  113. package/dist/utils/filtering.d.ts +180 -0
  114. package/dist/utils/filtering.d.ts.map +1 -0
  115. package/dist/utils/filtering.js +288 -0
  116. package/dist/utils/filtering.js.map +1 -0
  117. package/dist/utils/prompt-cache-examples.d.ts +111 -0
  118. package/dist/utils/prompt-cache-examples.d.ts.map +1 -0
  119. package/dist/utils/prompt-cache-examples.js +416 -0
  120. package/dist/utils/prompt-cache-examples.js.map +1 -0
  121. package/dist/utils/prompt-cache.d.ts +305 -0
  122. package/dist/utils/prompt-cache.d.ts.map +1 -0
  123. package/dist/utils/prompt-cache.js +448 -0
  124. package/dist/utils/prompt-cache.js.map +1 -0
  125. package/package.json +6 -3
@@ -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"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * Batch Test Generation Example
4
+ *
5
+ * Demonstrates using the BatchOperationManager to generate tests
6
+ * for multiple files in parallel with automatic retry and timeout handling.
7
+ *
8
+ * Performance Improvement:
9
+ * - Sequential: 3 files × 2s = 6s
10
+ * - Batched: max(2s) with 5 concurrent = ~2s
11
+ * - Speedup: 3x faster
12
+ *
13
+ * @module agents/examples/batchGenerate
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.generateTestsForFiles = generateTestsForFiles;
17
+ exports.generateTestsForDirectory = generateTestsForDirectory;
18
+ exports.generateTestsWithPriority = generateTestsWithPriority;
19
+ const batch_operations_1 = require("../../utils/batch-operations");
20
+ /**
21
+ * Batch test generation for multiple files
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const files = [
26
+ * { filePath: 'src/utils/parser.ts' },
27
+ * { filePath: 'src/utils/validator.ts' },
28
+ * { filePath: 'src/utils/formatter.ts' }
29
+ * ];
30
+ *
31
+ * const result = await generateTestsForFiles(files, {
32
+ * framework: 'jest',
33
+ * targetCoverage: 80,
34
+ * maxConcurrent: 5,
35
+ * onProgress: (completed, total, file) => {
36
+ * console.log(`Progress: ${completed}/${total} - ${file}`);
37
+ * }
38
+ * });
39
+ *
40
+ * console.log(`Generated ${result.results.length} test files`);
41
+ * console.log(`Success rate: ${result.successRate * 100}%`);
42
+ * console.log(`Total time: ${result.totalTime}ms`);
43
+ * ```
44
+ */
45
+ async function generateTestsForFiles(files, config) {
46
+ const batchManager = new batch_operations_1.BatchOperationManager();
47
+ const { framework, targetCoverage = 80, maxConcurrent = 5, timeout = 60000, retryOnError = true, onProgress, } = config;
48
+ // Handler function for single file generation
49
+ const generateForFile = async (input) => {
50
+ const startTime = Date.now();
51
+ // This would call your actual test generation service
52
+ // For now, this is a placeholder that shows the integration pattern
53
+ const result = await generateUnitTestsForFile({
54
+ filePath: input.filePath,
55
+ content: input.content,
56
+ framework,
57
+ targetCoverage,
58
+ ...input.config,
59
+ });
60
+ const generationTime = Date.now() - startTime;
61
+ return {
62
+ filePath: input.filePath,
63
+ testFilePath: getTestFilePath(input.filePath, framework),
64
+ result,
65
+ generationTime,
66
+ };
67
+ };
68
+ // Execute batch generation
69
+ return batchManager.batchExecute(files, generateForFile, {
70
+ maxConcurrent,
71
+ timeout,
72
+ retryOnError,
73
+ maxRetries: 3,
74
+ failFast: false,
75
+ onProgress: (completed, total) => {
76
+ const currentFile = files[completed - 1]?.filePath || 'unknown';
77
+ onProgress?.(completed, total, currentFile);
78
+ },
79
+ });
80
+ }
81
+ /**
82
+ * Placeholder for actual test generation implementation
83
+ * Replace this with your actual TestGeneratorAgent call
84
+ */
85
+ async function generateUnitTestsForFile(params) {
86
+ // This would integrate with your TestGeneratorAgent
87
+ // For demonstration purposes only
88
+ throw new Error('Not implemented - integrate with TestGeneratorAgent');
89
+ }
90
+ /**
91
+ * Get test file path based on source file path
92
+ */
93
+ function getTestFilePath(sourcePath, framework) {
94
+ const extension = framework === 'jest' || framework === 'vitest' ? '.test.ts' : '.spec.ts';
95
+ return sourcePath.replace(/\.(ts|js)$/, extension);
96
+ }
97
+ /**
98
+ * Batch generate tests for an entire directory
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const result = await generateTestsForDirectory('src/utils', {
103
+ * framework: 'jest',
104
+ * pattern: '**\/*.ts',
105
+ * exclude: ['**\/*.test.ts', '**\/*.spec.ts'],
106
+ * maxConcurrent: 5
107
+ * });
108
+ * ```
109
+ */
110
+ async function generateTestsForDirectory(directory, config) {
111
+ const { pattern = '**/*.ts', exclude = ['**/*.test.ts', '**/*.spec.ts'] } = config;
112
+ // Find all matching files (would use glob or similar)
113
+ const files = await findSourceFiles(directory, pattern, exclude);
114
+ return generateTestsForFiles(files, config);
115
+ }
116
+ /**
117
+ * Placeholder for file discovery
118
+ * Replace with actual glob implementation
119
+ */
120
+ async function findSourceFiles(directory, pattern, exclude) {
121
+ // This would use glob or a similar file discovery mechanism
122
+ throw new Error('Not implemented - integrate with file system utilities');
123
+ }
124
+ /**
125
+ * Batch generate tests with intelligent prioritization
126
+ *
127
+ * Prioritizes files by:
128
+ * 1. Code complexity (higher first)
129
+ * 2. Current test coverage (lower first)
130
+ * 3. Change frequency (higher first)
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * const result = await generateTestsWithPriority(
135
+ * [
136
+ * { filePath: 'src/complex.ts', complexity: 15, coverage: 20 },
137
+ * { filePath: 'src/simple.ts', complexity: 3, coverage: 80 },
138
+ * ],
139
+ * { framework: 'jest' }
140
+ * );
141
+ * ```
142
+ */
143
+ async function generateTestsWithPriority(files, config) {
144
+ // Sort by priority score
145
+ const prioritized = [...files].sort((a, b) => {
146
+ const scoreA = calculatePriorityScore(a);
147
+ const scoreB = calculatePriorityScore(b);
148
+ return scoreB - scoreA; // Higher score first
149
+ });
150
+ return generateTestsForFiles(prioritized, config);
151
+ }
152
+ /**
153
+ * Calculate priority score for a file
154
+ * Higher score = higher priority
155
+ */
156
+ function calculatePriorityScore(file) {
157
+ const complexity = file.complexity || 5;
158
+ const coverage = file.coverage || 50;
159
+ const changeFrequency = file.changeFrequency || 1;
160
+ // Normalize to 0-100 scale and weight
161
+ const complexityScore = Math.min(complexity * 5, 100) * 0.4;
162
+ const coverageScore = (100 - coverage) * 0.4; // Invert: lower coverage = higher priority
163
+ const changeScore = Math.min(changeFrequency * 10, 100) * 0.2;
164
+ return complexityScore + coverageScore + changeScore;
165
+ }
166
+ //# sourceMappingURL=batchGenerate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchGenerate.js","sourceRoot":"","sources":["../../../src/agents/examples/batchGenerate.ts"],"names":[],"mappings":"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"}