agentic-qe 1.6.1 → 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.
- package/.claude/skills/sherlock-review/SKILL.md +786 -0
- package/CHANGELOG.md +651 -0
- package/README.md +52 -8
- package/dist/agents/BaseAgent.d.ts +30 -10
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +115 -43
- 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/FleetCommanderAgent.d.ts +16 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +35 -20
- package/dist/agents/FleetCommanderAgent.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 +9 -0
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +60 -0
- 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/index.d.ts.map +1 -1
- package/dist/agents/index.js +0 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts +5 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +10 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/agentdb/learn.d.ts.map +1 -1
- package/dist/cli/commands/agentdb/learn.js +190 -71
- package/dist/cli/commands/agentdb/learn.js.map +1 -1
- package/dist/cli/commands/debug/agent.d.ts.map +1 -1
- package/dist/cli/commands/debug/agent.js +40 -13
- package/dist/cli/commands/debug/agent.js.map +1 -1
- package/dist/cli/commands/debug/diagnostics.js +38 -11
- package/dist/cli/commands/debug/diagnostics.js.map +1 -1
- package/dist/cli/commands/debug/health-check.js +47 -12
- package/dist/cli/commands/debug/health-check.js.map +1 -1
- package/dist/cli/commands/debug/profile.js +7 -7
- package/dist/cli/commands/debug/profile.js.map +1 -1
- package/dist/cli/commands/debug/trace.js +4 -4
- package/dist/cli/commands/debug/trace.js.map +1 -1
- package/dist/cli/commands/debug/troubleshoot.js +41 -27
- package/dist/cli/commands/debug/troubleshoot.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 +71 -54
- 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/commands/test/clean.d.ts.map +1 -1
- package/dist/cli/commands/test/clean.js +26 -9
- package/dist/cli/commands/test/clean.js.map +1 -1
- package/dist/cli/commands/test/debug.js +6 -7
- package/dist/cli/commands/test/debug.js.map +1 -1
- package/dist/cli/commands/test/diff.js +4 -37
- package/dist/cli/commands/test/diff.js.map +1 -1
- package/dist/cli/commands/test/profile.js +7 -40
- package/dist/cli/commands/test/profile.js.map +1 -1
- package/dist/cli/commands/test/trace.js +4 -37
- package/dist/cli/commands/test/trace.js.map +1 -1
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ArtifactWorkflow.d.ts +4 -0
- package/dist/core/ArtifactWorkflow.d.ts.map +1 -1
- package/dist/core/ArtifactWorkflow.js +34 -13
- package/dist/core/ArtifactWorkflow.js.map +1 -1
- package/dist/core/coordination/BlackboardCoordination.d.ts +4 -0
- package/dist/core/coordination/BlackboardCoordination.d.ts.map +1 -1
- package/dist/core/coordination/BlackboardCoordination.js +28 -22
- package/dist/core/coordination/BlackboardCoordination.js.map +1 -1
- package/dist/core/coordination/ConsensusGating.d.ts +4 -0
- package/dist/core/coordination/ConsensusGating.d.ts.map +1 -1
- package/dist/core/coordination/ConsensusGating.js +25 -18
- package/dist/core/coordination/ConsensusGating.js.map +1 -1
- package/dist/core/memory/AgentDBManager.d.ts +5 -0
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
- package/dist/core/memory/AgentDBManager.js +19 -1
- package/dist/core/memory/AgentDBManager.js.map +1 -1
- package/dist/core/memory/AgentDBService.d.ts.map +1 -1
- package/dist/core/memory/AgentDBService.js +6 -3
- package/dist/core/memory/AgentDBService.js.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.d.ts +8 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +74 -17
- 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/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 +157 -73
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/StateExtractor.d.ts +1 -1
- package/dist/learning/StateExtractor.d.ts.map +1 -1
- package/dist/learning/StateExtractor.js +62 -13
- package/dist/learning/StateExtractor.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/mcp/tools/deprecated.d.ts +8 -8
- 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/Config.d.ts.map +1 -1
- package/dist/utils/Config.js +14 -5
- package/dist/utils/Config.js.map +1 -1
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +5 -2
- package/dist/utils/Database.js.map +1 -1
- 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/Logger.d.ts +1 -1
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +4 -4
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/SecurityScanner.js +1 -1
- package/dist/utils/SecurityScanner.js.map +1 -1
- 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 +6 -3
|
@@ -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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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Generator with PII Tokenization
|
|
3
|
+
*
|
|
4
|
+
* Integrates PIITokenizer with TestGeneratorAgent to ensure GDPR/CCPA compliance
|
|
5
|
+
* when generating tests with realistic data.
|
|
6
|
+
*
|
|
7
|
+
* @module agents/generateWithPII
|
|
8
|
+
* @compliance GDPR Article 25, CCPA Section 1798.100, PCI-DSS 3.4
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Test generation result with PII tracking
|
|
12
|
+
*/
|
|
13
|
+
export interface TestGenerationWithPIIResult {
|
|
14
|
+
/** Generated test file path */
|
|
15
|
+
testFile: string;
|
|
16
|
+
/** Final test code with original PII (for file output only) */
|
|
17
|
+
testCode: string;
|
|
18
|
+
/** Tokenized version (safe for logs/database) */
|
|
19
|
+
tokenizedCode: string;
|
|
20
|
+
/** PII statistics for audit trail */
|
|
21
|
+
piiStats: {
|
|
22
|
+
emails: number;
|
|
23
|
+
phones: number;
|
|
24
|
+
ssns: number;
|
|
25
|
+
creditCards: number;
|
|
26
|
+
names: number;
|
|
27
|
+
total: number;
|
|
28
|
+
};
|
|
29
|
+
/** Framework used */
|
|
30
|
+
framework: 'jest' | 'vitest';
|
|
31
|
+
/** Success indicator */
|
|
32
|
+
success: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate test code with PII tokenization for compliance
|
|
36
|
+
*
|
|
37
|
+
* **WORKFLOW:**
|
|
38
|
+
* 1. Generate test code using TestGeneratorAgent
|
|
39
|
+
* 2. Tokenize PII before logging or storing
|
|
40
|
+
* 3. Store tokenized version in database (GDPR compliant)
|
|
41
|
+
* 4. Return detokenized version for file writing (user-controlled)
|
|
42
|
+
* 5. Clear reverse map to minimize data retention
|
|
43
|
+
*
|
|
44
|
+
* @param params - Test generation parameters
|
|
45
|
+
* @returns Test generation result with PII tracking
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const result = await generateTestWithRealisticData({
|
|
50
|
+
* sourceFile: '/src/UserService.ts',
|
|
51
|
+
* framework: 'jest',
|
|
52
|
+
* includeRealisticData: true
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* // Tokenized version stored in database (GDPR compliant)
|
|
56
|
+
* await db.storeTest({
|
|
57
|
+
* sourceFile: result.testFile,
|
|
58
|
+
* testCode: result.tokenizedCode,
|
|
59
|
+
* framework: result.framework
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* // Original PII written to file (user-controlled)
|
|
63
|
+
* await fs.writeFile(result.testFile, result.testCode);
|
|
64
|
+
*
|
|
65
|
+
* console.log(`Generated test with ${result.piiStats.total} PII instances`);
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function generateTestWithRealisticData(params: {
|
|
69
|
+
sourceFile: string;
|
|
70
|
+
framework: 'jest' | 'vitest';
|
|
71
|
+
includeRealisticData?: boolean;
|
|
72
|
+
}): Promise<TestGenerationWithPIIResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Batch generate tests with PII tokenization
|
|
75
|
+
*
|
|
76
|
+
* Processes multiple source files concurrently while maintaining PII compliance.
|
|
77
|
+
*
|
|
78
|
+
* @param files - Source files to generate tests for
|
|
79
|
+
* @param framework - Testing framework to use
|
|
80
|
+
* @returns Array of test generation results
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const results = await batchGenerateTestsWithPII(
|
|
85
|
+
* ['/src/UserService.ts', '/src/PaymentService.ts'],
|
|
86
|
+
* 'jest'
|
|
87
|
+
* );
|
|
88
|
+
*
|
|
89
|
+
* // Store all tokenized versions
|
|
90
|
+
* await Promise.all(results.map(r => db.storeTest({
|
|
91
|
+
* sourceFile: r.testFile,
|
|
92
|
+
* testCode: r.tokenizedCode
|
|
93
|
+
* })));
|
|
94
|
+
*
|
|
95
|
+
* // Write original versions to files
|
|
96
|
+
* await Promise.all(results.map(r =>
|
|
97
|
+
* fs.writeFile(r.testFile, r.testCode)
|
|
98
|
+
* ));
|
|
99
|
+
*
|
|
100
|
+
* const totalPII = results.reduce((sum, r) => sum + r.piiStats.total, 0);
|
|
101
|
+
* console.log(`Total PII instances across all tests: ${totalPII}`);
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function batchGenerateTestsWithPII(files: string[], framework: 'jest' | 'vitest'): Promise<TestGenerationWithPIIResult[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Validate PII tokenization compliance
|
|
107
|
+
*
|
|
108
|
+
* Ensures that tokenized content contains no PII for audit purposes.
|
|
109
|
+
*
|
|
110
|
+
* @param tokenizedContent - Content to validate
|
|
111
|
+
* @returns Validation result with any detected PII
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* const { tokenized } = tokenizer.tokenize(testCode);
|
|
116
|
+
* const validation = validateNoLeakedPII(tokenized);
|
|
117
|
+
*
|
|
118
|
+
* if (!validation.compliant) {
|
|
119
|
+
* console.error('PII leak detected!', validation.leakedPII);
|
|
120
|
+
* throw new Error('GDPR compliance violation');
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function validateNoLeakedPII(tokenizedContent: string): {
|
|
125
|
+
compliant: boolean;
|
|
126
|
+
leakedPII: string[];
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=generateWithPII.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateWithPII.d.ts","sourceRoot":"","sources":["../../src/agents/generateWithPII.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IAEtB,qCAAqC;IACrC,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE7B,wBAAwB;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,6BAA6B,CAAC,MAAM,EAAE;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAqDvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,GAAG,QAAQ,GAC3B,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAUxC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG;IAC7D,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAgBA"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Test Generator with PII Tokenization
|
|
4
|
+
*
|
|
5
|
+
* Integrates PIITokenizer with TestGeneratorAgent to ensure GDPR/CCPA compliance
|
|
6
|
+
* when generating tests with realistic data.
|
|
7
|
+
*
|
|
8
|
+
* @module agents/generateWithPII
|
|
9
|
+
* @compliance GDPR Article 25, CCPA Section 1798.100, PCI-DSS 3.4
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.generateTestWithRealisticData = generateTestWithRealisticData;
|
|
13
|
+
exports.batchGenerateTestsWithPII = batchGenerateTestsWithPII;
|
|
14
|
+
exports.validateNoLeakedPII = validateNoLeakedPII;
|
|
15
|
+
const pii_tokenization_1 = require("../security/pii-tokenization");
|
|
16
|
+
/**
|
|
17
|
+
* Generate test code with PII tokenization for compliance
|
|
18
|
+
*
|
|
19
|
+
* **WORKFLOW:**
|
|
20
|
+
* 1. Generate test code using TestGeneratorAgent
|
|
21
|
+
* 2. Tokenize PII before logging or storing
|
|
22
|
+
* 3. Store tokenized version in database (GDPR compliant)
|
|
23
|
+
* 4. Return detokenized version for file writing (user-controlled)
|
|
24
|
+
* 5. Clear reverse map to minimize data retention
|
|
25
|
+
*
|
|
26
|
+
* @param params - Test generation parameters
|
|
27
|
+
* @returns Test generation result with PII tracking
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const result = await generateTestWithRealisticData({
|
|
32
|
+
* sourceFile: '/src/UserService.ts',
|
|
33
|
+
* framework: 'jest',
|
|
34
|
+
* includeRealisticData: true
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Tokenized version stored in database (GDPR compliant)
|
|
38
|
+
* await db.storeTest({
|
|
39
|
+
* sourceFile: result.testFile,
|
|
40
|
+
* testCode: result.tokenizedCode,
|
|
41
|
+
* framework: result.framework
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // Original PII written to file (user-controlled)
|
|
45
|
+
* await fs.writeFile(result.testFile, result.testCode);
|
|
46
|
+
*
|
|
47
|
+
* console.log(`Generated test with ${result.piiStats.total} PII instances`);
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
async function generateTestWithRealisticData(params) {
|
|
51
|
+
const tokenizer = new pii_tokenization_1.PIITokenizer();
|
|
52
|
+
try {
|
|
53
|
+
// Step 1: Generate test code using TestGeneratorAgent
|
|
54
|
+
// Note: This is a simplified example - actual TestGeneratorAgent construction
|
|
55
|
+
// would require proper context, memoryStore, and eventBus setup
|
|
56
|
+
const testCode = `
|
|
57
|
+
// Generated test with realistic data
|
|
58
|
+
import { describe, it, expect } from '${params.framework}';
|
|
59
|
+
|
|
60
|
+
describe('User Service Tests', () => {
|
|
61
|
+
it('should handle user creation', () => {
|
|
62
|
+
const user = {
|
|
63
|
+
email: 'test@example.com',
|
|
64
|
+
phone: '555-1234',
|
|
65
|
+
// PII data would be here in actual generation
|
|
66
|
+
};
|
|
67
|
+
expect(user).toBeDefined();
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
`.trim();
|
|
71
|
+
// Step 2: Tokenize PII before logging or storing
|
|
72
|
+
const { tokenized, reverseMap, piiCount, piiBreakdown } = tokenizer.tokenize(testCode);
|
|
73
|
+
// Step 3: Log tokenized version (safe, GDPR compliant)
|
|
74
|
+
console.log(`[PII Tokenization] Generated test with ${piiCount} PII instances (tokenized)`);
|
|
75
|
+
console.log('[PII Breakdown]', piiBreakdown);
|
|
76
|
+
// Tokenized content is safe for logging
|
|
77
|
+
if (process.env.DEBUG_TESTS === 'true') {
|
|
78
|
+
console.log('[Tokenized Content]', tokenized.substring(0, 500));
|
|
79
|
+
}
|
|
80
|
+
// Step 4: Restore original PII for file writing
|
|
81
|
+
const finalCode = tokenizer.detokenize(tokenized, reverseMap);
|
|
82
|
+
return {
|
|
83
|
+
testFile: params.sourceFile.replace(/\.ts$/, '.test.ts'),
|
|
84
|
+
testCode: finalCode, // Original PII for file output
|
|
85
|
+
tokenizedCode: tokenized, // PII-free version for database/logs
|
|
86
|
+
piiStats: {
|
|
87
|
+
...piiBreakdown,
|
|
88
|
+
total: piiCount,
|
|
89
|
+
},
|
|
90
|
+
framework: params.framework,
|
|
91
|
+
success: true,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
// Step 5: CRITICAL - Clear reverse map to minimize data retention (GDPR Article 5(1)(e))
|
|
96
|
+
tokenizer.clear();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Batch generate tests with PII tokenization
|
|
101
|
+
*
|
|
102
|
+
* Processes multiple source files concurrently while maintaining PII compliance.
|
|
103
|
+
*
|
|
104
|
+
* @param files - Source files to generate tests for
|
|
105
|
+
* @param framework - Testing framework to use
|
|
106
|
+
* @returns Array of test generation results
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* const results = await batchGenerateTestsWithPII(
|
|
111
|
+
* ['/src/UserService.ts', '/src/PaymentService.ts'],
|
|
112
|
+
* 'jest'
|
|
113
|
+
* );
|
|
114
|
+
*
|
|
115
|
+
* // Store all tokenized versions
|
|
116
|
+
* await Promise.all(results.map(r => db.storeTest({
|
|
117
|
+
* sourceFile: r.testFile,
|
|
118
|
+
* testCode: r.tokenizedCode
|
|
119
|
+
* })));
|
|
120
|
+
*
|
|
121
|
+
* // Write original versions to files
|
|
122
|
+
* await Promise.all(results.map(r =>
|
|
123
|
+
* fs.writeFile(r.testFile, r.testCode)
|
|
124
|
+
* ));
|
|
125
|
+
*
|
|
126
|
+
* const totalPII = results.reduce((sum, r) => sum + r.piiStats.total, 0);
|
|
127
|
+
* console.log(`Total PII instances across all tests: ${totalPII}`);
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
async function batchGenerateTestsWithPII(files, framework) {
|
|
131
|
+
return Promise.all(files.map(sourceFile => generateTestWithRealisticData({
|
|
132
|
+
sourceFile,
|
|
133
|
+
framework,
|
|
134
|
+
includeRealisticData: true,
|
|
135
|
+
})));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Validate PII tokenization compliance
|
|
139
|
+
*
|
|
140
|
+
* Ensures that tokenized content contains no PII for audit purposes.
|
|
141
|
+
*
|
|
142
|
+
* @param tokenizedContent - Content to validate
|
|
143
|
+
* @returns Validation result with any detected PII
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* const { tokenized } = tokenizer.tokenize(testCode);
|
|
148
|
+
* const validation = validateNoLeakedPII(tokenized);
|
|
149
|
+
*
|
|
150
|
+
* if (!validation.compliant) {
|
|
151
|
+
* console.error('PII leak detected!', validation.leakedPII);
|
|
152
|
+
* throw new Error('GDPR compliance violation');
|
|
153
|
+
* }
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
function validateNoLeakedPII(tokenizedContent) {
|
|
157
|
+
const detector = new pii_tokenization_1.PIITokenizer();
|
|
158
|
+
const { piiCount, piiBreakdown } = detector.tokenize(tokenizedContent);
|
|
159
|
+
const leakedPII = [];
|
|
160
|
+
if (piiBreakdown.emails > 0)
|
|
161
|
+
leakedPII.push(`${piiBreakdown.emails} emails`);
|
|
162
|
+
if (piiBreakdown.phones > 0)
|
|
163
|
+
leakedPII.push(`${piiBreakdown.phones} phones`);
|
|
164
|
+
if (piiBreakdown.ssns > 0)
|
|
165
|
+
leakedPII.push(`${piiBreakdown.ssns} SSNs`);
|
|
166
|
+
if (piiBreakdown.creditCards > 0)
|
|
167
|
+
leakedPII.push(`${piiBreakdown.creditCards} credit cards`);
|
|
168
|
+
if (piiBreakdown.names > 0)
|
|
169
|
+
leakedPII.push(`${piiBreakdown.names} names`);
|
|
170
|
+
return {
|
|
171
|
+
compliant: piiCount === 0,
|
|
172
|
+
leakedPII,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=generateWithPII.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateWithPII.js","sourceRoot":"","sources":["../../src/agents/generateWithPII.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8BhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,aAAa,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,MAAM,EAAE,oBAAoB;IAIxC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8BhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,aAAa,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,MAAM,EAAE,oBAAoB;IAIxC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;IAuRzE;;OAEG;IACH,iBAAiB,IAAI,WAAW,EAAE;IAwBlC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA6W/B;AAGD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAQ/G"}
|
package/dist/agents/index.js
CHANGED
|
@@ -183,8 +183,6 @@ class QEAgentFactory {
|
|
|
183
183
|
requiredMetrics: ['coverage', 'quality-score', 'security-scan']
|
|
184
184
|
}
|
|
185
185
|
};
|
|
186
|
-
// TODO: Uncomment when DeploymentReadinessAgent is implemented
|
|
187
|
-
// return new DeploymentReadinessAgent(deploymentConfig);
|
|
188
186
|
throw new Error(`Agent type ${type} implementation in progress. Week 2 P0.`);
|
|
189
187
|
}
|
|
190
188
|
case types_1.QEAgentType.PERFORMANCE_TESTER: {
|