atlas-pipeline-mcp 1.0.20 → 1.0.21
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/dist/mcp.js +191 -0
- package/dist/mcp.js.map +1 -1
- package/dist/tools/dashboard.d.ts +107 -0
- package/dist/tools/dashboard.d.ts.map +1 -0
- package/dist/tools/dashboard.js +544 -0
- package/dist/tools/dashboard.js.map +1 -0
- package/dist/tools/dependencies.d.ts +105 -0
- package/dist/tools/dependencies.d.ts.map +1 -0
- package/dist/tools/dependencies.js +410 -0
- package/dist/tools/dependencies.js.map +1 -0
- package/dist/tools/profiler.d.ts +83 -0
- package/dist/tools/profiler.d.ts.map +1 -0
- package/dist/tools/profiler.js +385 -0
- package/dist/tools/profiler.js.map +1 -0
- package/dist/tools/refactor.d.ts +63 -0
- package/dist/tools/refactor.d.ts.map +1 -0
- package/dist/tools/refactor.js +308 -0
- package/dist/tools/refactor.js.map +1 -0
- package/dist/tools/review.d.ts +98 -0
- package/dist/tools/review.d.ts.map +1 -0
- package/dist/tools/review.js +428 -0
- package/dist/tools/review.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - AI-Powered Code Refactoring Tool
|
|
3
|
+
*
|
|
4
|
+
* Advanced refactoring capabilities beyond simple code cleanup:
|
|
5
|
+
* - Pattern detection (design patterns, anti-patterns)
|
|
6
|
+
* - Complexity reduction (cyclomatic complexity analysis)
|
|
7
|
+
* - SOLID principles enforcement
|
|
8
|
+
* - Performance hotspot identification
|
|
9
|
+
* - Automated Extract Method/Class/Interface
|
|
10
|
+
* - Dead code elimination
|
|
11
|
+
* - Type inference and migration
|
|
12
|
+
* - Dependency injection suggestions
|
|
13
|
+
*
|
|
14
|
+
* @module refactor
|
|
15
|
+
* @author Nishant Unavane
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
import { getActiveProvider, isNoLLMMode } from '../providers/index.js';
|
|
19
|
+
import { logger, createTimer } from '../utils.js';
|
|
20
|
+
import { validateInput } from './validation.js';
|
|
21
|
+
import { z } from 'zod';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Validation Schema
|
|
24
|
+
// ============================================================================
|
|
25
|
+
const RefactorOptionsSchema = z.object({
|
|
26
|
+
code: z.string().min(1).max(500000),
|
|
27
|
+
language: z.string().min(1),
|
|
28
|
+
filePath: z.string().optional(),
|
|
29
|
+
targets: z.array(z.enum([
|
|
30
|
+
'complexity', 'duplication', 'naming', 'structure',
|
|
31
|
+
'performance', 'solid', 'patterns', 'types',
|
|
32
|
+
'async', 'functional', 'deadcode'
|
|
33
|
+
])).optional(),
|
|
34
|
+
maxComplexity: z.number().min(1).max(50).optional(),
|
|
35
|
+
enforceSOLID: z.boolean().optional(),
|
|
36
|
+
preserveBehavior: z.boolean().optional(),
|
|
37
|
+
addTypes: z.boolean().optional(),
|
|
38
|
+
modernize: z.boolean().optional(),
|
|
39
|
+
projectContext: z.string().optional(),
|
|
40
|
+
dependencies: z.array(z.string()).optional(),
|
|
41
|
+
});
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// Code Metrics Calculator
|
|
44
|
+
// ============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Calculate code metrics for before/after comparison
|
|
47
|
+
*/
|
|
48
|
+
function calculateMetrics(code, language) {
|
|
49
|
+
const lines = code.split('\n');
|
|
50
|
+
const nonEmptyLines = lines.filter(l => l.trim().length > 0);
|
|
51
|
+
const commentLines = lines.filter(l => {
|
|
52
|
+
const trimmed = l.trim();
|
|
53
|
+
return trimmed.startsWith('//') ||
|
|
54
|
+
trimmed.startsWith('/*') ||
|
|
55
|
+
trimmed.startsWith('*') ||
|
|
56
|
+
trimmed.startsWith('#');
|
|
57
|
+
});
|
|
58
|
+
// Simple cyclomatic complexity (count decision points)
|
|
59
|
+
const decisionPoints = (code.match(/\b(if|else|for|while|case|catch|\?|&&|\|\|)\b/g) || []).length;
|
|
60
|
+
const cyclomaticComplexity = decisionPoints + 1;
|
|
61
|
+
// Maintainability Index (simplified formula)
|
|
62
|
+
// MI = max(0, (171 - 5.2 * ln(Halstead Volume) - 0.23 * CC - 16.2 * ln(LOC)) * 100 / 171)
|
|
63
|
+
const volume = Math.log(nonEmptyLines.length + 1) * 10; // Simplified
|
|
64
|
+
const mi = Math.max(0, (171 - 5.2 * volume - 0.23 * cyclomaticComplexity - 16.2 * Math.log(nonEmptyLines.length + 1)) * 100 / 171);
|
|
65
|
+
// Count functions and classes
|
|
66
|
+
const functionCount = (code.match(/\b(function|def|fn|func)\s+\w+/g) || []).length +
|
|
67
|
+
(code.match(/=>\s*{/g) || []).length;
|
|
68
|
+
const classCount = (code.match(/\b(class|struct|interface)\s+\w+/g) || []).length;
|
|
69
|
+
return {
|
|
70
|
+
linesOfCode: nonEmptyLines.length,
|
|
71
|
+
cyclomaticComplexity,
|
|
72
|
+
maintainabilityIndex: Math.round(mi),
|
|
73
|
+
duplicatedLines: 0, // Would need more sophisticated analysis
|
|
74
|
+
functionCount,
|
|
75
|
+
classCount,
|
|
76
|
+
commentRatio: commentLines.length / (nonEmptyLines.length || 1),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Pattern Detection
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Detect common code smells and anti-patterns
|
|
84
|
+
*/
|
|
85
|
+
function detectPatterns(code, language) {
|
|
86
|
+
const smells = [];
|
|
87
|
+
const patterns = [];
|
|
88
|
+
// God Class detection
|
|
89
|
+
if (code.match(/class\s+\w+\s*{[^}]{2000,}}/s)) {
|
|
90
|
+
smells.push('God Class: Class with too many responsibilities');
|
|
91
|
+
}
|
|
92
|
+
// Long Method detection
|
|
93
|
+
const methods = code.match(/(?:function|def|fn)\s+\w+[^{]*{[^}]{500,}}/gs) || [];
|
|
94
|
+
if (methods.length > 0) {
|
|
95
|
+
smells.push(`Long Method: ${methods.length} functions with 50+ lines`);
|
|
96
|
+
}
|
|
97
|
+
// Magic Numbers
|
|
98
|
+
const magicNumbers = code.match(/\b\d{3,}\b/g) || [];
|
|
99
|
+
if (magicNumbers.length > 3) {
|
|
100
|
+
smells.push(`Magic Numbers: ${magicNumbers.length} hardcoded numeric literals`);
|
|
101
|
+
}
|
|
102
|
+
// Nested Conditionals
|
|
103
|
+
if (code.match(/if\s*\([^)]+\)\s*{[^}]*if\s*\([^)]+\)\s*{[^}]*if/s)) {
|
|
104
|
+
smells.push('Deeply Nested Conditionals: Consider guard clauses');
|
|
105
|
+
}
|
|
106
|
+
// Singleton Pattern detection
|
|
107
|
+
if (code.match(/private\s+static\s+\w+\s+instance\s*[=;]/)) {
|
|
108
|
+
patterns.push('Singleton Pattern detected');
|
|
109
|
+
}
|
|
110
|
+
// Factory Pattern detection
|
|
111
|
+
if (code.match(/class\s+\w*Factory/)) {
|
|
112
|
+
patterns.push('Factory Pattern detected');
|
|
113
|
+
}
|
|
114
|
+
// Observer Pattern detection
|
|
115
|
+
if (code.match(/\b(on|addEventListener|subscribe|emit)\b/)) {
|
|
116
|
+
patterns.push('Observer Pattern detected');
|
|
117
|
+
}
|
|
118
|
+
return { smells, patterns };
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Main Refactor Function
|
|
122
|
+
// ============================================================================
|
|
123
|
+
/**
|
|
124
|
+
* AI-powered code refactoring with pattern detection
|
|
125
|
+
*/
|
|
126
|
+
export async function refactorCode(options) {
|
|
127
|
+
const timer = createTimer();
|
|
128
|
+
// Validate input
|
|
129
|
+
const validated = validateInput(RefactorOptionsSchema, options);
|
|
130
|
+
const { code, language, filePath, targets = [], maxComplexity = 10, enforceSOLID = true } = validated;
|
|
131
|
+
logger.info({ language, targets, filePath }, 'Starting code refactoring');
|
|
132
|
+
// Calculate initial metrics
|
|
133
|
+
const beforeMetrics = calculateMetrics(code, language);
|
|
134
|
+
// Detect patterns
|
|
135
|
+
const { smells, patterns } = detectPatterns(code, language);
|
|
136
|
+
const warnings = [];
|
|
137
|
+
const changes = [];
|
|
138
|
+
// Build refactoring prompt
|
|
139
|
+
const targetsStr = targets.length > 0
|
|
140
|
+
? targets.join(', ')
|
|
141
|
+
: 'all common refactorings';
|
|
142
|
+
const prompt = `You are a senior software architect with 50 years of experience. Refactor this ${language} code.
|
|
143
|
+
|
|
144
|
+
**Original Code:**
|
|
145
|
+
\`\`\`${language}
|
|
146
|
+
${code}
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
**Current Metrics:**
|
|
150
|
+
- Lines of Code: ${beforeMetrics.linesOfCode}
|
|
151
|
+
- Cyclomatic Complexity: ${beforeMetrics.cyclomaticComplexity}
|
|
152
|
+
- Maintainability Index: ${beforeMetrics.maintainabilityIndex}/100
|
|
153
|
+
- Functions: ${beforeMetrics.functionCount}
|
|
154
|
+
- Classes: ${beforeMetrics.classCount}
|
|
155
|
+
|
|
156
|
+
**Detected Issues:**
|
|
157
|
+
${smells.length > 0 ? smells.map(s => `- ${s}`).join('\n') : '- No major code smells detected'}
|
|
158
|
+
|
|
159
|
+
**Detected Patterns:**
|
|
160
|
+
${patterns.length > 0 ? patterns.map(p => `- ${p}`).join('\n') : '- No design patterns detected'}
|
|
161
|
+
|
|
162
|
+
**Refactoring Targets:** ${targetsStr}
|
|
163
|
+
**Max Complexity Target:** ${maxComplexity}
|
|
164
|
+
**Enforce SOLID Principles:** ${enforceSOLID ? 'Yes' : 'No'}
|
|
165
|
+
|
|
166
|
+
**Instructions:**
|
|
167
|
+
1. Refactor the code to improve:
|
|
168
|
+
- Readability and maintainability
|
|
169
|
+
- Performance where applicable
|
|
170
|
+
- Type safety (add types if missing)
|
|
171
|
+
- Follow SOLID principles ${enforceSOLID ? '(strictly)' : '(loosely)'}
|
|
172
|
+
- Reduce cyclomatic complexity to ${maxComplexity} or below
|
|
173
|
+
2. Add descriptive comments for complex logic
|
|
174
|
+
3. Use modern ${language} features and best practices
|
|
175
|
+
4. Extract reusable functions/classes
|
|
176
|
+
5. Remove code duplication
|
|
177
|
+
6. Preserve original behavior exactly
|
|
178
|
+
|
|
179
|
+
**Provide:**
|
|
180
|
+
1. The refactored code
|
|
181
|
+
2. A list of changes made (one per line, format: "TYPE: Description")
|
|
182
|
+
3. Suggestions for further improvements
|
|
183
|
+
|
|
184
|
+
Format your response as:
|
|
185
|
+
\`\`\`${language}
|
|
186
|
+
[refactored code here]
|
|
187
|
+
\`\`\`
|
|
188
|
+
|
|
189
|
+
CHANGES:
|
|
190
|
+
- [change 1]
|
|
191
|
+
- [change 2]
|
|
192
|
+
...
|
|
193
|
+
|
|
194
|
+
SUGGESTIONS:
|
|
195
|
+
- [suggestion 1]
|
|
196
|
+
- [suggestion 2]
|
|
197
|
+
...`;
|
|
198
|
+
// Get LLM provider
|
|
199
|
+
let refactoredCode = code;
|
|
200
|
+
let suggestions = [];
|
|
201
|
+
if (isNoLLMMode()) {
|
|
202
|
+
warnings.push('No LLM provider available - using basic refactoring only');
|
|
203
|
+
// Basic automated refactorings without LLM
|
|
204
|
+
refactoredCode = applyBasicRefactorings(code, language, targets);
|
|
205
|
+
suggestions = [
|
|
206
|
+
'Install an LLM provider for advanced AI-powered refactoring',
|
|
207
|
+
'Consider manual code review for complex changes'
|
|
208
|
+
];
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const provider = await getActiveProvider();
|
|
212
|
+
try {
|
|
213
|
+
const response = await provider.complete(prompt, {
|
|
214
|
+
maxTokens: 4000,
|
|
215
|
+
temperature: 0.3, // Lower temp for more consistent refactoring
|
|
216
|
+
});
|
|
217
|
+
const responseText = response.text;
|
|
218
|
+
// Parse response
|
|
219
|
+
const codeMatch = responseText.match(new RegExp(`\`\`\`${language}\\s*([\\s\\S]*?)\`\`\``));
|
|
220
|
+
if (codeMatch && codeMatch[1]) {
|
|
221
|
+
refactoredCode = codeMatch[1].trim();
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
warnings.push('Could not extract refactored code from LLM response');
|
|
225
|
+
refactoredCode = code;
|
|
226
|
+
}
|
|
227
|
+
// Parse changes
|
|
228
|
+
const changesMatch = responseText.match(/CHANGES:\s*([\s\S]*?)(?:SUGGESTIONS:|$)/);
|
|
229
|
+
if (changesMatch && changesMatch[1]) {
|
|
230
|
+
const changeLines = changesMatch[1].trim().split('\n')
|
|
231
|
+
.filter((line) => line.trim().startsWith('-'))
|
|
232
|
+
.map((line) => line.replace(/^-\s*/, '').trim());
|
|
233
|
+
changeLines.forEach((changeLine, idx) => {
|
|
234
|
+
const [typeStr, ...descParts] = changeLine.split(':');
|
|
235
|
+
const type = typeStr?.toLowerCase().trim() || 'structure';
|
|
236
|
+
const description = descParts.join(':').trim();
|
|
237
|
+
if (description) {
|
|
238
|
+
changes.push({
|
|
239
|
+
type,
|
|
240
|
+
description,
|
|
241
|
+
lineNumber: 1, // Would need more sophisticated parsing
|
|
242
|
+
impact: beforeMetrics.cyclomaticComplexity > 15 ? 'high' : 'medium',
|
|
243
|
+
autoApplicable: true,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
// Parse suggestions
|
|
249
|
+
const suggestionsMatch = responseText.match(/SUGGESTIONS:\s*([\s\S]*?)$/);
|
|
250
|
+
if (suggestionsMatch && suggestionsMatch[1]) {
|
|
251
|
+
suggestions = suggestionsMatch[1].trim().split('\n')
|
|
252
|
+
.filter((line) => line.trim().startsWith('-'))
|
|
253
|
+
.map((line) => line.replace(/^-\s*/, '').trim())
|
|
254
|
+
.filter(Boolean);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
logger.error({ error }, 'Refactoring failed');
|
|
259
|
+
warnings.push(`LLM error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
260
|
+
refactoredCode = code;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Calculate final metrics
|
|
264
|
+
const afterMetrics = calculateMetrics(refactoredCode, language);
|
|
265
|
+
// Add metrics comparison to suggestions
|
|
266
|
+
if (afterMetrics.cyclomaticComplexity < beforeMetrics.cyclomaticComplexity) {
|
|
267
|
+
suggestions.unshift(`✅ Complexity reduced from ${beforeMetrics.cyclomaticComplexity} to ${afterMetrics.cyclomaticComplexity}`);
|
|
268
|
+
}
|
|
269
|
+
if (afterMetrics.maintainabilityIndex > beforeMetrics.maintainabilityIndex) {
|
|
270
|
+
suggestions.unshift(`✅ Maintainability improved from ${beforeMetrics.maintainabilityIndex} to ${afterMetrics.maintainabilityIndex}`);
|
|
271
|
+
}
|
|
272
|
+
const executionTimeMs = timer.elapsed();
|
|
273
|
+
logger.info({
|
|
274
|
+
beforeComplexity: beforeMetrics.cyclomaticComplexity,
|
|
275
|
+
afterComplexity: afterMetrics.cyclomaticComplexity,
|
|
276
|
+
changesCount: changes.length,
|
|
277
|
+
executionTimeMs
|
|
278
|
+
}, 'Refactoring completed');
|
|
279
|
+
return {
|
|
280
|
+
originalCode: code,
|
|
281
|
+
refactoredCode,
|
|
282
|
+
changes,
|
|
283
|
+
metrics: afterMetrics,
|
|
284
|
+
suggestions,
|
|
285
|
+
executionTimeMs,
|
|
286
|
+
warnings,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Apply basic refactorings without LLM
|
|
291
|
+
*/
|
|
292
|
+
function applyBasicRefactorings(code, language, targets) {
|
|
293
|
+
let result = code;
|
|
294
|
+
// Remove trailing whitespace
|
|
295
|
+
result = result.split('\n').map(line => line.trimEnd()).join('\n');
|
|
296
|
+
// Consistent indentation
|
|
297
|
+
result = result.replace(/\t/g, ' ');
|
|
298
|
+
// Remove multiple blank lines
|
|
299
|
+
result = result.replace(/\n{3,}/g, '\n\n');
|
|
300
|
+
// Add space after keywords
|
|
301
|
+
result = result.replace(/\b(if|for|while|switch|catch)\(/g, '$1 (');
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
// ============================================================================
|
|
305
|
+
// Export
|
|
306
|
+
// ============================================================================
|
|
307
|
+
export default refactorCode;
|
|
308
|
+
//# sourceMappingURL=refactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor.js","sourceRoot":"","sources":["../../src/tools/refactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - AI Code Review Assistant
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive AI-powered code review capabilities:
|
|
5
|
+
* - Multi-dimensional code quality analysis
|
|
6
|
+
* - Best practices enforcement
|
|
7
|
+
* - Architectural pattern validation
|
|
8
|
+
* - Security vulnerability detection
|
|
9
|
+
* - Performance optimization suggestions
|
|
10
|
+
* - Test coverage recommendations
|
|
11
|
+
* - Documentation quality assessment
|
|
12
|
+
* - Team coding standards compliance
|
|
13
|
+
*
|
|
14
|
+
* @module review
|
|
15
|
+
* @author Nishant Unavane
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
export interface CodeReviewOptions {
|
|
19
|
+
code: string;
|
|
20
|
+
language: string;
|
|
21
|
+
filePath?: string;
|
|
22
|
+
checkQuality?: boolean;
|
|
23
|
+
checkSecurity?: boolean;
|
|
24
|
+
checkPerformance?: boolean;
|
|
25
|
+
checkArchitecture?: boolean;
|
|
26
|
+
checkTests?: boolean;
|
|
27
|
+
checkDocumentation?: boolean;
|
|
28
|
+
framework?: string;
|
|
29
|
+
teamStandards?: string;
|
|
30
|
+
pullRequestContext?: string;
|
|
31
|
+
changedFiles?: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface CodeReviewResult {
|
|
34
|
+
code: string;
|
|
35
|
+
overallScore: number;
|
|
36
|
+
grades: ReviewGrades;
|
|
37
|
+
findings: ReviewFinding[];
|
|
38
|
+
suggestions: ReviewSuggestion[];
|
|
39
|
+
metrics: QualityMetrics;
|
|
40
|
+
summary: string;
|
|
41
|
+
executionTimeMs: number;
|
|
42
|
+
warnings: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface ReviewGrades {
|
|
45
|
+
quality: Grade;
|
|
46
|
+
security: Grade;
|
|
47
|
+
performance: Grade;
|
|
48
|
+
architecture: Grade;
|
|
49
|
+
tests: Grade;
|
|
50
|
+
documentation: Grade;
|
|
51
|
+
}
|
|
52
|
+
export interface Grade {
|
|
53
|
+
score: number;
|
|
54
|
+
letter: 'A+' | 'A' | 'B' | 'C' | 'D' | 'F';
|
|
55
|
+
issues: number;
|
|
56
|
+
strengths: string[];
|
|
57
|
+
weaknesses: string[];
|
|
58
|
+
}
|
|
59
|
+
export interface ReviewFinding {
|
|
60
|
+
severity: 'blocker' | 'critical' | 'major' | 'minor' | 'info';
|
|
61
|
+
category: ReviewCategory;
|
|
62
|
+
title: string;
|
|
63
|
+
description: string;
|
|
64
|
+
location?: CodeLocation;
|
|
65
|
+
suggestion: string;
|
|
66
|
+
autoFixable: boolean;
|
|
67
|
+
references?: string[];
|
|
68
|
+
}
|
|
69
|
+
export type ReviewCategory = 'correctness' | 'security' | 'performance' | 'maintainability' | 'reliability' | 'architecture' | 'testing' | 'documentation' | 'style' | 'best-practices';
|
|
70
|
+
export interface CodeLocation {
|
|
71
|
+
startLine: number;
|
|
72
|
+
endLine: number;
|
|
73
|
+
snippet?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface ReviewSuggestion {
|
|
76
|
+
priority: 'must' | 'should' | 'consider';
|
|
77
|
+
category: string;
|
|
78
|
+
description: string;
|
|
79
|
+
codeExample?: string;
|
|
80
|
+
rationale: string;
|
|
81
|
+
}
|
|
82
|
+
export interface QualityMetrics {
|
|
83
|
+
totalLines: number;
|
|
84
|
+
codeLines: number;
|
|
85
|
+
commentLines: number;
|
|
86
|
+
blankLines: number;
|
|
87
|
+
commentRatio: number;
|
|
88
|
+
averageComplexity: number;
|
|
89
|
+
duplicatedCodeRatio: number;
|
|
90
|
+
testCoverage?: number;
|
|
91
|
+
documentationCoverage: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Comprehensive AI-powered code review
|
|
95
|
+
*/
|
|
96
|
+
export declare function reviewCode(options: CodeReviewOptions): Promise<CodeReviewResult>;
|
|
97
|
+
export default reviewCode;
|
|
98
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/tools/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAG7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9D,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,SAAS,GACT,eAAe,GACf,OAAO,GACP,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAsMD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2PtF;AAMD,eAAe,UAAU,CAAC"}
|