agentic-qe 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/qe-quality-analyzer.md +405 -0
- package/CHANGELOG.md +109 -0
- package/CONTRIBUTING.md +51 -0
- package/README.md +669 -162
- package/bin/aqe +90 -938
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +6 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +58 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +316 -48
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +48 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +217 -10
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +75 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +177 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts +42 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +232 -13
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +33 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +656 -39
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/index.js +367 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +5 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +7 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +57 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +289 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +46 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +215 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +119 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +353 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +10 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +16 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +288 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +9 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +94 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +17 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/package.json +25 -3
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* QEReasoningBank - Intelligent Test Pattern Storage and Retrieval System
|
|
4
|
+
*
|
|
5
|
+
* @module reasoning/QEReasoningBank
|
|
6
|
+
* @version 1.1.0
|
|
7
|
+
*
|
|
8
|
+
* @description
|
|
9
|
+
* The QEReasoningBank provides a centralized system for storing, retrieving,
|
|
10
|
+
* and sharing test patterns across projects and frameworks. It uses in-memory
|
|
11
|
+
* storage with indexing for high-performance pattern matching.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { QEReasoningBank } from './reasoning/QEReasoningBank';
|
|
16
|
+
* import { TestPattern, PatternQuery } from './reasoning/types';
|
|
17
|
+
*
|
|
18
|
+
* // Initialize ReasoningBank
|
|
19
|
+
* const reasoningBank = new QEReasoningBank();
|
|
20
|
+
*
|
|
21
|
+
* // Store a pattern
|
|
22
|
+
* await reasoningBank.storePattern(pattern);
|
|
23
|
+
*
|
|
24
|
+
* // Find similar patterns
|
|
25
|
+
* const matches = await reasoningBank.findMatchingPatterns({
|
|
26
|
+
* codeType: 'test',
|
|
27
|
+
* framework: 'jest',
|
|
28
|
+
* keywords: ['api', 'controller']
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.QEReasoningBank = void 0;
|
|
34
|
+
/**
|
|
35
|
+
* QEReasoningBank - Main class for pattern storage and retrieval
|
|
36
|
+
*
|
|
37
|
+
* **Key Features:**
|
|
38
|
+
* - In-memory pattern storage with indexing
|
|
39
|
+
* - Fast pattern matching (< 50ms p95)
|
|
40
|
+
* - Pattern versioning and history tracking
|
|
41
|
+
* - Usage tracking and analytics
|
|
42
|
+
* - Pattern quality scoring
|
|
43
|
+
*
|
|
44
|
+
* **Performance Characteristics:**
|
|
45
|
+
* - Pattern lookup: < 50ms (p95)
|
|
46
|
+
* - Pattern storage: < 25ms (p95)
|
|
47
|
+
* - Supports 100+ patterns per project
|
|
48
|
+
*
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
51
|
+
class QEReasoningBank {
|
|
52
|
+
constructor() {
|
|
53
|
+
this.patterns = new Map();
|
|
54
|
+
this.patternIndex = new Map();
|
|
55
|
+
this.versionHistory = new Map();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Store a new test pattern
|
|
59
|
+
*/
|
|
60
|
+
async storePattern(pattern) {
|
|
61
|
+
// Validate pattern
|
|
62
|
+
if (!pattern.id || !pattern.name || !pattern.template) {
|
|
63
|
+
throw new Error('Invalid pattern: id, name, and template are required');
|
|
64
|
+
}
|
|
65
|
+
if (pattern.confidence < 0 || pattern.confidence > 1) {
|
|
66
|
+
throw new Error('Confidence must be between 0 and 1');
|
|
67
|
+
}
|
|
68
|
+
// Version existing pattern
|
|
69
|
+
if (this.patterns.has(pattern.id)) {
|
|
70
|
+
const existing = this.patterns.get(pattern.id);
|
|
71
|
+
const history = this.versionHistory.get(pattern.id) || [];
|
|
72
|
+
history.push({ ...existing });
|
|
73
|
+
this.versionHistory.set(pattern.id, history);
|
|
74
|
+
}
|
|
75
|
+
// Store pattern
|
|
76
|
+
this.patterns.set(pattern.id, { ...pattern });
|
|
77
|
+
// Update index for fast lookup
|
|
78
|
+
this.updateIndex(pattern);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Retrieve pattern by ID
|
|
82
|
+
*/
|
|
83
|
+
async getPattern(id) {
|
|
84
|
+
return this.patterns.get(id) || null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Find matching patterns for a code context
|
|
88
|
+
*/
|
|
89
|
+
async findMatchingPatterns(context, limit = 10) {
|
|
90
|
+
const matches = [];
|
|
91
|
+
for (const pattern of Array.from(this.patterns.values())) {
|
|
92
|
+
const confidence = this.calculateMatchConfidence(pattern, context);
|
|
93
|
+
if (confidence > 0.3) { // Threshold
|
|
94
|
+
matches.push({
|
|
95
|
+
pattern,
|
|
96
|
+
confidence,
|
|
97
|
+
reasoning: this.generateReasoning(pattern, context),
|
|
98
|
+
applicability: confidence * pattern.successRate
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Sort by applicability
|
|
103
|
+
matches.sort((a, b) => b.applicability - a.applicability);
|
|
104
|
+
return matches.slice(0, limit);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Update pattern success metrics
|
|
108
|
+
*/
|
|
109
|
+
async updatePatternMetrics(patternId, success) {
|
|
110
|
+
const pattern = this.patterns.get(patternId);
|
|
111
|
+
if (!pattern) {
|
|
112
|
+
throw new Error(`Pattern not found: ${patternId}`);
|
|
113
|
+
}
|
|
114
|
+
// Update usage count
|
|
115
|
+
pattern.usageCount++;
|
|
116
|
+
// Update success rate using exponential moving average
|
|
117
|
+
const alpha = 0.3;
|
|
118
|
+
pattern.successRate =
|
|
119
|
+
pattern.successRate * (1 - alpha) + (success ? 1 : 0) * alpha;
|
|
120
|
+
// Update timestamp
|
|
121
|
+
pattern.metadata.updatedAt = new Date();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get pattern statistics
|
|
125
|
+
*/
|
|
126
|
+
async getStatistics() {
|
|
127
|
+
const patterns = Array.from(this.patterns.values());
|
|
128
|
+
const stats = {
|
|
129
|
+
totalPatterns: patterns.length,
|
|
130
|
+
averageConfidence: patterns.reduce((sum, p) => sum + p.confidence, 0) / patterns.length || 0,
|
|
131
|
+
averageSuccessRate: patterns.reduce((sum, p) => sum + p.successRate, 0) / patterns.length || 0,
|
|
132
|
+
byCategory: {},
|
|
133
|
+
byFramework: {}
|
|
134
|
+
};
|
|
135
|
+
for (const pattern of patterns) {
|
|
136
|
+
stats.byCategory[pattern.category] = (stats.byCategory[pattern.category] || 0) + 1;
|
|
137
|
+
stats.byFramework[pattern.framework] = (stats.byFramework[pattern.framework] || 0) + 1;
|
|
138
|
+
}
|
|
139
|
+
return stats;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get version history for a pattern
|
|
143
|
+
*/
|
|
144
|
+
async getVersionHistory(patternId) {
|
|
145
|
+
return this.versionHistory.get(patternId) || [];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Search patterns by tags
|
|
149
|
+
*/
|
|
150
|
+
async searchByTags(tags) {
|
|
151
|
+
const results = [];
|
|
152
|
+
for (const pattern of Array.from(this.patterns.values())) {
|
|
153
|
+
const matchCount = pattern.metadata.tags.filter(tag => tags.includes(tag)).length;
|
|
154
|
+
if (matchCount > 0) {
|
|
155
|
+
results.push(pattern);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Sort by tag match count and success rate
|
|
159
|
+
results.sort((a, b) => {
|
|
160
|
+
const aMatches = a.metadata.tags.filter(t => tags.includes(t)).length;
|
|
161
|
+
const bMatches = b.metadata.tags.filter(t => tags.includes(t)).length;
|
|
162
|
+
if (aMatches !== bMatches) {
|
|
163
|
+
return bMatches - aMatches;
|
|
164
|
+
}
|
|
165
|
+
return b.successRate - a.successRate;
|
|
166
|
+
});
|
|
167
|
+
return results;
|
|
168
|
+
}
|
|
169
|
+
// Private helper methods
|
|
170
|
+
updateIndex(pattern) {
|
|
171
|
+
// Index by category
|
|
172
|
+
if (!this.patternIndex.has(pattern.category)) {
|
|
173
|
+
this.patternIndex.set(pattern.category, new Set());
|
|
174
|
+
}
|
|
175
|
+
this.patternIndex.get(pattern.category).add(pattern.id);
|
|
176
|
+
// Index by tags
|
|
177
|
+
for (const tag of pattern.metadata.tags) {
|
|
178
|
+
if (!this.patternIndex.has(`tag:${tag}`)) {
|
|
179
|
+
this.patternIndex.set(`tag:${tag}`, new Set());
|
|
180
|
+
}
|
|
181
|
+
this.patternIndex.get(`tag:${tag}`).add(pattern.id);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
calculateMatchConfidence(pattern, context) {
|
|
185
|
+
let score = 0;
|
|
186
|
+
let factors = 0;
|
|
187
|
+
// Framework match (35% weight)
|
|
188
|
+
if (context.framework) {
|
|
189
|
+
factors++;
|
|
190
|
+
if (pattern.framework === context.framework) {
|
|
191
|
+
score += 0.35;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Language match (25% weight)
|
|
195
|
+
if (context.language) {
|
|
196
|
+
factors++;
|
|
197
|
+
if (pattern.language === context.language) {
|
|
198
|
+
score += 0.25;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Keyword match (30% weight)
|
|
202
|
+
if (context.keywords && context.keywords.length > 0) {
|
|
203
|
+
factors++;
|
|
204
|
+
const matchingKeywords = context.keywords.filter(kw => pattern.metadata.tags.includes(kw) ||
|
|
205
|
+
pattern.name.toLowerCase().includes(kw.toLowerCase()) ||
|
|
206
|
+
pattern.description.toLowerCase().includes(kw.toLowerCase()));
|
|
207
|
+
score += (matchingKeywords.length / context.keywords.length) * 0.30;
|
|
208
|
+
}
|
|
209
|
+
// Pattern confidence (10% weight)
|
|
210
|
+
factors++;
|
|
211
|
+
score += pattern.confidence * 0.10;
|
|
212
|
+
return factors > 0 ? Math.min(score, 1.0) : 0;
|
|
213
|
+
}
|
|
214
|
+
generateReasoning(pattern, context) {
|
|
215
|
+
const reasons = [];
|
|
216
|
+
if (context.framework && pattern.framework === context.framework) {
|
|
217
|
+
reasons.push(`Framework match: ${pattern.framework}`);
|
|
218
|
+
}
|
|
219
|
+
if (context.language && pattern.language === context.language) {
|
|
220
|
+
reasons.push(`Language match: ${pattern.language}`);
|
|
221
|
+
}
|
|
222
|
+
if (context.keywords) {
|
|
223
|
+
const matchingKeywords = context.keywords.filter(kw => pattern.metadata.tags.includes(kw));
|
|
224
|
+
if (matchingKeywords.length > 0) {
|
|
225
|
+
reasons.push(`Tag matches: ${matchingKeywords.join(', ')}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
reasons.push(`Success rate: ${(pattern.successRate * 100).toFixed(1)}%`);
|
|
229
|
+
reasons.push(`Used ${pattern.usageCount} times`);
|
|
230
|
+
return reasons.join('; ');
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.QEReasoningBank = QEReasoningBank;
|
|
234
|
+
exports.default = QEReasoningBank;
|
|
235
|
+
//# sourceMappingURL=QEReasoningBank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QEReasoningBank.js","sourceRoot":"","sources":["../../src/reasoning/QEReasoningBank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TestTemplateCreator - Create reusable test templates from patterns
|
|
3
|
+
* Phase 2 (v1.1.0) - Pattern Extraction Specialist
|
|
4
|
+
*
|
|
5
|
+
* Generalizes specific tests into reusable templates by:
|
|
6
|
+
* - Parameterizing test inputs
|
|
7
|
+
* - Creating framework-agnostic structures
|
|
8
|
+
* - Supporting template validation
|
|
9
|
+
* - Generating code for multiple frameworks
|
|
10
|
+
*/
|
|
11
|
+
import { TestTemplate, TestPattern, TestFramework } from '../types/pattern.types';
|
|
12
|
+
export declare class TestTemplateCreator {
|
|
13
|
+
private logger;
|
|
14
|
+
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Create template from test pattern
|
|
17
|
+
*/
|
|
18
|
+
createTemplate(pattern: TestPattern): Promise<TestTemplate>;
|
|
19
|
+
/**
|
|
20
|
+
* Create templates from multiple patterns
|
|
21
|
+
*/
|
|
22
|
+
createTemplates(patterns: TestPattern[]): Promise<TestTemplate[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Build template structure from pattern
|
|
25
|
+
*/
|
|
26
|
+
private buildTemplateStructure;
|
|
27
|
+
/**
|
|
28
|
+
* Extract parameters from pattern
|
|
29
|
+
*/
|
|
30
|
+
private extractParameters;
|
|
31
|
+
/**
|
|
32
|
+
* Create validation rules
|
|
33
|
+
*/
|
|
34
|
+
private createValidationRules;
|
|
35
|
+
/**
|
|
36
|
+
* Create code generators for different frameworks
|
|
37
|
+
*/
|
|
38
|
+
private createCodeGenerators;
|
|
39
|
+
/**
|
|
40
|
+
* Generate Jest code
|
|
41
|
+
*/
|
|
42
|
+
private generateJestCode;
|
|
43
|
+
/**
|
|
44
|
+
* Generate Mocha code
|
|
45
|
+
*/
|
|
46
|
+
private generateMochaCode;
|
|
47
|
+
/**
|
|
48
|
+
* Generate Cypress code
|
|
49
|
+
*/
|
|
50
|
+
private generateCypressCode;
|
|
51
|
+
/**
|
|
52
|
+
* Generate Vitest code
|
|
53
|
+
*/
|
|
54
|
+
private generateVitestCode;
|
|
55
|
+
/**
|
|
56
|
+
* Generate Jasmine code
|
|
57
|
+
*/
|
|
58
|
+
private generateJasmineCode;
|
|
59
|
+
/**
|
|
60
|
+
* Generate AVA code
|
|
61
|
+
*/
|
|
62
|
+
private generateAvaCode;
|
|
63
|
+
/**
|
|
64
|
+
* Get pattern-specific setup code
|
|
65
|
+
*/
|
|
66
|
+
private getPatternSpecificSetup;
|
|
67
|
+
/**
|
|
68
|
+
* Get pattern-specific assertion code
|
|
69
|
+
*/
|
|
70
|
+
private getPatternSpecificAssertion;
|
|
71
|
+
/**
|
|
72
|
+
* Helper methods for structure building
|
|
73
|
+
*/
|
|
74
|
+
private needsSetup;
|
|
75
|
+
private needsTeardown;
|
|
76
|
+
private createSetupNode;
|
|
77
|
+
private createArrangeNode;
|
|
78
|
+
private createActNode;
|
|
79
|
+
private createAssertNode;
|
|
80
|
+
private createTeardownNode;
|
|
81
|
+
private generateTemplateId;
|
|
82
|
+
private generateDescription;
|
|
83
|
+
/**
|
|
84
|
+
* Validate template
|
|
85
|
+
*/
|
|
86
|
+
validateTemplate(template: TestTemplate, params: Record<string, any>): Promise<{
|
|
87
|
+
valid: boolean;
|
|
88
|
+
errors: string[];
|
|
89
|
+
}>;
|
|
90
|
+
/**
|
|
91
|
+
* Instantiate template with parameters
|
|
92
|
+
*/
|
|
93
|
+
instantiateTemplate(template: TestTemplate, framework: TestFramework, params: Record<string, any>): Promise<string>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=TestTemplateCreator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestTemplateCreator.d.ts","sourceRoot":"","sources":["../../src/reasoning/TestTemplateCreator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,YAAY,EACZ,WAAW,EAKX,aAAa,EAEd,MAAM,wBAAwB,CAAC;AAIhC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;;IAMvB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BjE;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAevE;;OAEG;YACW,sBAAsB;IA0CpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4GzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAenC;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAoB1H;;OAEG;IACG,mBAAmB,CACvB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC;CAsBnB"}
|