atlas-pipeline-mcp 1.0.20 → 1.0.22
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/advanced-testgen.d.ts +93 -0
- package/dist/tools/advanced-testgen.d.ts.map +1 -0
- package/dist/tools/advanced-testgen.js +382 -0
- package/dist/tools/advanced-testgen.js.map +1 -0
- package/dist/tools/architecture-advisor.d.ts +174 -0
- package/dist/tools/architecture-advisor.d.ts.map +1 -0
- package/dist/tools/architecture-advisor.js +509 -0
- package/dist/tools/architecture-advisor.js.map +1 -0
- package/dist/tools/code-migration.d.ts +86 -0
- package/dist/tools/code-migration.d.ts.map +1 -0
- package/dist/tools/code-migration.js +339 -0
- package/dist/tools/code-migration.js.map +1 -0
- 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/ml-predictor.d.ts +84 -0
- package/dist/tools/ml-predictor.d.ts.map +1 -0
- package/dist/tools/ml-predictor.js +407 -0
- package/dist/tools/ml-predictor.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/rag-search.d.ts +88 -0
- package/dist/tools/rag-search.d.ts.map +1 -0
- package/dist/tools/rag-search.js +338 -0
- package/dist/tools/rag-search.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 +2 -2
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Intelligent Code Migration Assistant
|
|
3
|
+
*
|
|
4
|
+
* AI-powered code migration and modernization:
|
|
5
|
+
* - Framework upgrades (React 17→18, Vue 2→3, etc.)
|
|
6
|
+
* - Language conversion (JS→TS, Python 2→3)
|
|
7
|
+
* - API migration (deprecated→modern APIs)
|
|
8
|
+
* - Dependency upgrades with breaking change handling
|
|
9
|
+
* - Architecture modernization (Class→Functional, Callbacks→Promises→Async/Await)
|
|
10
|
+
* - Build tool migration (Webpack→Vite, etc.)
|
|
11
|
+
* - Database migration generation
|
|
12
|
+
* - CI/CD pipeline modernization
|
|
13
|
+
*
|
|
14
|
+
* @module code-migration
|
|
15
|
+
* @author Nishant Unavane
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
import { promises as fs } from 'fs';
|
|
19
|
+
import { join } from 'path';
|
|
20
|
+
import { logger, createTimer } from '../utils.js';
|
|
21
|
+
import { z } from 'zod';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Validation Schema
|
|
24
|
+
// ============================================================================
|
|
25
|
+
const MigrationOptionsSchema = z.object({
|
|
26
|
+
projectPath: z.string().min(1),
|
|
27
|
+
migrationType: z.enum([
|
|
28
|
+
'javascript-to-typescript',
|
|
29
|
+
'react-upgrade',
|
|
30
|
+
'vue-upgrade',
|
|
31
|
+
'python-2-to-3',
|
|
32
|
+
'class-to-functional',
|
|
33
|
+
'callback-to-async',
|
|
34
|
+
'webpack-to-vite',
|
|
35
|
+
'jest-to-vitest',
|
|
36
|
+
'commonjs-to-esm',
|
|
37
|
+
'api-migration',
|
|
38
|
+
'database-migration',
|
|
39
|
+
'custom',
|
|
40
|
+
]),
|
|
41
|
+
from: z.string(),
|
|
42
|
+
to: z.string(),
|
|
43
|
+
files: z.array(z.string()).optional(),
|
|
44
|
+
filePattern: z.string().optional(),
|
|
45
|
+
strategy: z.enum(['safe', 'aggressive', 'manual']).optional(),
|
|
46
|
+
preserveComments: z.boolean().optional(),
|
|
47
|
+
createBackup: z.boolean().optional(),
|
|
48
|
+
dryRun: z.boolean().optional(),
|
|
49
|
+
handleBreakingChanges: z.boolean().optional(),
|
|
50
|
+
updateDependencies: z.boolean().optional(),
|
|
51
|
+
generateTests: z.boolean().optional(),
|
|
52
|
+
});
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Migration Strategies
|
|
55
|
+
// ============================================================================
|
|
56
|
+
/**
|
|
57
|
+
* Migrate JavaScript to TypeScript
|
|
58
|
+
*/
|
|
59
|
+
async function migrateJSToTS(code, filePath) {
|
|
60
|
+
const changes = [];
|
|
61
|
+
const lines = code.split('\n');
|
|
62
|
+
// Add type annotations to function parameters
|
|
63
|
+
const functionPattern = /function\s+(\w+)\s*\(([^)]*)\)/g;
|
|
64
|
+
let match;
|
|
65
|
+
while ((match = functionPattern.exec(code)) !== null) {
|
|
66
|
+
const funcName = match[1];
|
|
67
|
+
const params = match[2];
|
|
68
|
+
if (params && !params.includes(':')) {
|
|
69
|
+
const typedParams = params.split(',').map(p => `${p.trim()}: any`).join(', ');
|
|
70
|
+
const before = match[0];
|
|
71
|
+
const after = `function ${funcName}(${typedParams}): any`;
|
|
72
|
+
changes.push({
|
|
73
|
+
filePath,
|
|
74
|
+
changeType: 'type-annotation',
|
|
75
|
+
description: `Added type annotations to function ${funcName}`,
|
|
76
|
+
before,
|
|
77
|
+
after,
|
|
78
|
+
automated: true,
|
|
79
|
+
confidence: 0.7,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Convert var to let/const
|
|
84
|
+
const varPattern = /\bvar\s+(\w+)/g;
|
|
85
|
+
while ((match = varPattern.exec(code)) !== null) {
|
|
86
|
+
changes.push({
|
|
87
|
+
filePath,
|
|
88
|
+
changeType: 'syntax',
|
|
89
|
+
description: 'Converted var to const/let',
|
|
90
|
+
before: `var ${match[1]}`,
|
|
91
|
+
after: `const ${match[1]}`,
|
|
92
|
+
automated: true,
|
|
93
|
+
confidence: 0.9,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return changes;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Migrate from callbacks to async/await
|
|
100
|
+
*/
|
|
101
|
+
async function migrateCallbackToAsync(code, filePath) {
|
|
102
|
+
const changes = [];
|
|
103
|
+
// Detect callback patterns
|
|
104
|
+
const callbackPattern = /(\w+)\s*\([^)]*,\s*function\s*\(([^)]*)\)\s*{([^}]*)}/g;
|
|
105
|
+
let match;
|
|
106
|
+
while ((match = callbackPattern.exec(code)) !== null) {
|
|
107
|
+
const funcName = match[1];
|
|
108
|
+
const params = match[2];
|
|
109
|
+
const body = match[3];
|
|
110
|
+
if (!funcName || !body)
|
|
111
|
+
continue;
|
|
112
|
+
// Convert to async/await
|
|
113
|
+
const before = match[0];
|
|
114
|
+
const after = `const result = await ${funcName}Async();\n// Process: ${body.trim()}`;
|
|
115
|
+
changes.push({
|
|
116
|
+
filePath,
|
|
117
|
+
changeType: 'syntax',
|
|
118
|
+
description: `Converted callback to async/await for ${funcName}`,
|
|
119
|
+
before,
|
|
120
|
+
after,
|
|
121
|
+
automated: false, // Requires manual verification
|
|
122
|
+
confidence: 0.6,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return changes;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Migrate React class components to functional
|
|
129
|
+
*/
|
|
130
|
+
async function migrateReactClassToFunctional(code, filePath) {
|
|
131
|
+
const changes = [];
|
|
132
|
+
// Detect class components
|
|
133
|
+
if (/class\s+\w+\s+extends\s+React\.Component/.test(code)) {
|
|
134
|
+
changes.push({
|
|
135
|
+
filePath,
|
|
136
|
+
changeType: 'structure',
|
|
137
|
+
description: 'Convert class component to functional component with hooks',
|
|
138
|
+
before: code.substring(0, 100) + '...',
|
|
139
|
+
after: '// Converted to functional component\nconst Component = () => {\n // Use useState, useEffect hooks\n}',
|
|
140
|
+
automated: false,
|
|
141
|
+
confidence: 0.5,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Convert this.state to useState
|
|
145
|
+
const statePattern = /this\.state\.(\w+)/g;
|
|
146
|
+
let match;
|
|
147
|
+
const stateVars = new Set();
|
|
148
|
+
while ((match = statePattern.exec(code)) !== null) {
|
|
149
|
+
if (match[1]) {
|
|
150
|
+
stateVars.add(match[1]);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (stateVars.size > 0) {
|
|
154
|
+
changes.push({
|
|
155
|
+
filePath,
|
|
156
|
+
changeType: 'api',
|
|
157
|
+
description: `Convert ${stateVars.size} state variables to useState hooks`,
|
|
158
|
+
before: `this.state = { ${Array.from(stateVars).join(', ')} }`,
|
|
159
|
+
after: Array.from(stateVars).map(v => `const [${v}, set${v.charAt(0).toUpperCase() + v.slice(1)}] = useState()`).join('\n'),
|
|
160
|
+
automated: false,
|
|
161
|
+
confidence: 0.7,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return changes;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Migrate CommonJS to ESM
|
|
168
|
+
*/
|
|
169
|
+
async function migrateCommonJSToESM(code, filePath) {
|
|
170
|
+
const changes = [];
|
|
171
|
+
// Convert require to import
|
|
172
|
+
const requirePattern = /const\s+(\w+)\s*=\s*require\(['"]([^'"]+)['"]\)/g;
|
|
173
|
+
let match;
|
|
174
|
+
while ((match = requirePattern.exec(code)) !== null) {
|
|
175
|
+
const varName = match[1];
|
|
176
|
+
const modulePath = match[2];
|
|
177
|
+
changes.push({
|
|
178
|
+
filePath,
|
|
179
|
+
changeType: 'import',
|
|
180
|
+
description: 'Convert require to import',
|
|
181
|
+
before: match[0],
|
|
182
|
+
after: `import ${varName} from '${modulePath}'`,
|
|
183
|
+
automated: true,
|
|
184
|
+
confidence: 0.95,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// Convert module.exports to export
|
|
188
|
+
if (/module\.exports\s*=/.test(code)) {
|
|
189
|
+
changes.push({
|
|
190
|
+
filePath,
|
|
191
|
+
changeType: 'export',
|
|
192
|
+
description: 'Convert module.exports to export default',
|
|
193
|
+
before: 'module.exports = ',
|
|
194
|
+
after: 'export default ',
|
|
195
|
+
automated: true,
|
|
196
|
+
confidence: 0.9,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return changes;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Detect breaking changes
|
|
203
|
+
*/
|
|
204
|
+
function detectBreakingChanges(changes, migrationType) {
|
|
205
|
+
const breakingChanges = [];
|
|
206
|
+
// API changes with low confidence are potential breaking changes
|
|
207
|
+
const riskyChanges = changes.filter(c => c.changeType === 'api' && c.confidence < 0.8);
|
|
208
|
+
for (const change of riskyChanges) {
|
|
209
|
+
breakingChanges.push({
|
|
210
|
+
filePath: change.filePath,
|
|
211
|
+
issue: change.description,
|
|
212
|
+
impact: 'medium',
|
|
213
|
+
manualAction: 'Review and test this change carefully',
|
|
214
|
+
documentation: 'Check official migration guide',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return breakingChanges;
|
|
218
|
+
}
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// Main Migration Function
|
|
221
|
+
// ============================================================================
|
|
222
|
+
/**
|
|
223
|
+
* Intelligent code migration
|
|
224
|
+
*/
|
|
225
|
+
export async function migrateCode(options) {
|
|
226
|
+
const timer = createTimer();
|
|
227
|
+
const { projectPath, migrationType, from, to, files = [], strategy = 'safe', preserveComments = true, createBackup = true, dryRun = false, handleBreakingChanges = true, } = MigrationOptionsSchema.parse(options);
|
|
228
|
+
logger.info({ migrationType, from, to, dryRun }, 'Starting code migration');
|
|
229
|
+
// Collect files to migrate
|
|
230
|
+
const targetFiles = files.length > 0 ? files : [
|
|
231
|
+
join(projectPath, 'src', 'index.ts'),
|
|
232
|
+
];
|
|
233
|
+
let allChanges = [];
|
|
234
|
+
let filesAnalyzed = 0;
|
|
235
|
+
let filesMigrated = 0;
|
|
236
|
+
let filesSkipped = 0;
|
|
237
|
+
// Process each file
|
|
238
|
+
for (const filePath of targetFiles) {
|
|
239
|
+
try {
|
|
240
|
+
const code = await fs.readFile(filePath, 'utf-8');
|
|
241
|
+
filesAnalyzed++;
|
|
242
|
+
let changes = [];
|
|
243
|
+
// Apply migration strategy
|
|
244
|
+
switch (migrationType) {
|
|
245
|
+
case 'javascript-to-typescript':
|
|
246
|
+
changes = await migrateJSToTS(code, filePath);
|
|
247
|
+
break;
|
|
248
|
+
case 'callback-to-async':
|
|
249
|
+
changes = await migrateCallbackToAsync(code, filePath);
|
|
250
|
+
break;
|
|
251
|
+
case 'class-to-functional':
|
|
252
|
+
changes = await migrateReactClassToFunctional(code, filePath);
|
|
253
|
+
break;
|
|
254
|
+
case 'commonjs-to-esm':
|
|
255
|
+
changes = await migrateCommonJSToESM(code, filePath);
|
|
256
|
+
break;
|
|
257
|
+
default:
|
|
258
|
+
logger.warn({ migrationType }, 'Migration type not yet implemented');
|
|
259
|
+
}
|
|
260
|
+
if (changes.length > 0) {
|
|
261
|
+
allChanges = allChanges.concat(changes);
|
|
262
|
+
filesMigrated++;
|
|
263
|
+
// Apply changes if not dry run
|
|
264
|
+
if (!dryRun && strategy === 'aggressive') {
|
|
265
|
+
let newCode = code;
|
|
266
|
+
for (const change of changes.filter(c => c.automated)) {
|
|
267
|
+
newCode = newCode.replace(change.before, change.after);
|
|
268
|
+
}
|
|
269
|
+
if (createBackup) {
|
|
270
|
+
await fs.writeFile(`${filePath}.backup`, code);
|
|
271
|
+
}
|
|
272
|
+
await fs.writeFile(filePath, newCode);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
filesSkipped++;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
logger.error({ error, filePath }, 'Error processing file');
|
|
281
|
+
filesSkipped++;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Detect breaking changes
|
|
285
|
+
const breakingChanges = handleBreakingChanges
|
|
286
|
+
? detectBreakingChanges(allChanges, migrationType)
|
|
287
|
+
: [];
|
|
288
|
+
// Generate warnings
|
|
289
|
+
const warnings = [];
|
|
290
|
+
if (allChanges.some(c => !c.automated)) {
|
|
291
|
+
warnings.push({
|
|
292
|
+
filePath: 'multiple',
|
|
293
|
+
message: 'Some changes require manual intervention',
|
|
294
|
+
severity: 'warning',
|
|
295
|
+
suggestion: 'Review all changes marked as manual',
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
const stats = {
|
|
299
|
+
linesChanged: allChanges.length,
|
|
300
|
+
apiCallsUpdated: allChanges.filter(c => c.changeType === 'api').length,
|
|
301
|
+
dependenciesUpdated: 0,
|
|
302
|
+
testsGenerated: 0,
|
|
303
|
+
backupsCreated: createBackup ? filesMigrated : 0,
|
|
304
|
+
};
|
|
305
|
+
const recommendations = [
|
|
306
|
+
'Run all tests after migration',
|
|
307
|
+
'Review breaking changes carefully',
|
|
308
|
+
'Update documentation to reflect changes',
|
|
309
|
+
'Consider gradual rollout of migrated code',
|
|
310
|
+
];
|
|
311
|
+
const migrationTimeMs = timer.elapsed();
|
|
312
|
+
logger.info({
|
|
313
|
+
filesMigrated,
|
|
314
|
+
changesCount: allChanges.length,
|
|
315
|
+
breakingChanges: breakingChanges.length,
|
|
316
|
+
migrationTimeMs
|
|
317
|
+
}, 'Migration completed');
|
|
318
|
+
return {
|
|
319
|
+
success: true,
|
|
320
|
+
migrationType,
|
|
321
|
+
from,
|
|
322
|
+
to,
|
|
323
|
+
filesAnalyzed,
|
|
324
|
+
filesMigrated,
|
|
325
|
+
filesSkipped,
|
|
326
|
+
changes: allChanges,
|
|
327
|
+
breakingChanges,
|
|
328
|
+
warnings,
|
|
329
|
+
stats,
|
|
330
|
+
recommendations,
|
|
331
|
+
migrationTimeMs,
|
|
332
|
+
dryRun,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
// ============================================================================
|
|
336
|
+
// Export
|
|
337
|
+
// ============================================================================
|
|
338
|
+
export default migrateCode;
|
|
339
|
+
//# sourceMappingURL=code-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-migration.js","sourceRoot":"","sources":["../../src/tools/code-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Live Code Metrics Dashboard Generator
|
|
3
|
+
*
|
|
4
|
+
* Generate beautiful, real-time HTML dashboards for code metrics:
|
|
5
|
+
* - Interactive visualizations
|
|
6
|
+
* - Complexity trends over time
|
|
7
|
+
* - Dependency graphs
|
|
8
|
+
* - Test coverage maps
|
|
9
|
+
* - Performance hotspots
|
|
10
|
+
* - Security audit results
|
|
11
|
+
* - Team velocity metrics
|
|
12
|
+
* - Technical debt tracking
|
|
13
|
+
*
|
|
14
|
+
* @module dashboard
|
|
15
|
+
* @author Nishant Unavane
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
export interface DashboardOptions {
|
|
19
|
+
projectPath: string;
|
|
20
|
+
outputPath?: string;
|
|
21
|
+
includeComplexity?: boolean;
|
|
22
|
+
includeCoverage?: boolean;
|
|
23
|
+
includeDependencies?: boolean;
|
|
24
|
+
includeSecurity?: boolean;
|
|
25
|
+
includePerformance?: boolean;
|
|
26
|
+
includeGitStats?: boolean;
|
|
27
|
+
metricsData?: ProjectMetrics;
|
|
28
|
+
historicalData?: HistoricalMetrics[];
|
|
29
|
+
title?: string;
|
|
30
|
+
theme?: 'light' | 'dark' | 'auto';
|
|
31
|
+
refreshInterval?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ProjectMetrics {
|
|
34
|
+
timestamp: string;
|
|
35
|
+
complexity: ComplexityMetrics;
|
|
36
|
+
coverage: CoverageMetrics;
|
|
37
|
+
dependencies: DependencyMetrics;
|
|
38
|
+
security: SecurityMetrics;
|
|
39
|
+
performance: PerformanceMetrics;
|
|
40
|
+
git: GitMetrics;
|
|
41
|
+
}
|
|
42
|
+
export interface ComplexityMetrics {
|
|
43
|
+
averageCyclomaticComplexity: number;
|
|
44
|
+
maxComplexity: number;
|
|
45
|
+
filesAboveThreshold: number;
|
|
46
|
+
maintainabilityIndex: number;
|
|
47
|
+
technicalDebt: {
|
|
48
|
+
hours: number;
|
|
49
|
+
cost: string;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface CoverageMetrics {
|
|
53
|
+
lineCoverage: number;
|
|
54
|
+
branchCoverage: number;
|
|
55
|
+
functionCoverage: number;
|
|
56
|
+
uncoveredFiles: number;
|
|
57
|
+
totalStatements: number;
|
|
58
|
+
coveredStatements: number;
|
|
59
|
+
}
|
|
60
|
+
export interface DependencyMetrics {
|
|
61
|
+
total: number;
|
|
62
|
+
direct: number;
|
|
63
|
+
transitive: number;
|
|
64
|
+
outdated: number;
|
|
65
|
+
vulnerable: number;
|
|
66
|
+
totalSize: number;
|
|
67
|
+
}
|
|
68
|
+
export interface SecurityMetrics {
|
|
69
|
+
vulnerabilities: {
|
|
70
|
+
critical: number;
|
|
71
|
+
high: number;
|
|
72
|
+
medium: number;
|
|
73
|
+
low: number;
|
|
74
|
+
};
|
|
75
|
+
score: number;
|
|
76
|
+
lastScanDate: string;
|
|
77
|
+
}
|
|
78
|
+
export interface PerformanceMetrics {
|
|
79
|
+
buildTime: number;
|
|
80
|
+
bundleSize: number;
|
|
81
|
+
loadTime: number;
|
|
82
|
+
memoryUsage: number;
|
|
83
|
+
}
|
|
84
|
+
export interface GitMetrics {
|
|
85
|
+
totalCommits: number;
|
|
86
|
+
contributors: number;
|
|
87
|
+
filesChanged: number;
|
|
88
|
+
linesAdded: number;
|
|
89
|
+
linesDeleted: number;
|
|
90
|
+
branchCount: number;
|
|
91
|
+
}
|
|
92
|
+
export interface HistoricalMetrics {
|
|
93
|
+
date: string;
|
|
94
|
+
metrics: ProjectMetrics;
|
|
95
|
+
}
|
|
96
|
+
export interface DashboardResult {
|
|
97
|
+
htmlPath: string;
|
|
98
|
+
htmlContent: string;
|
|
99
|
+
metrics: ProjectMetrics;
|
|
100
|
+
executionTimeMs: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Generate interactive HTML dashboard
|
|
104
|
+
*/
|
|
105
|
+
export declare function generateDashboard(options: DashboardOptions): Promise<DashboardResult>;
|
|
106
|
+
export default generateDashboard;
|
|
107
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"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"}
|