driftdetect 0.9.29 → 0.9.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/bin/drift.js +3 -1
  2. package/dist/bin/drift.js.map +1 -1
  3. package/dist/commands/approve.d.ts +6 -0
  4. package/dist/commands/approve.d.ts.map +1 -1
  5. package/dist/commands/approve.js +91 -2
  6. package/dist/commands/approve.js.map +1 -1
  7. package/dist/commands/audit.d.ts +29 -0
  8. package/dist/commands/audit.d.ts.map +1 -0
  9. package/dist/commands/audit.js +495 -0
  10. package/dist/commands/audit.js.map +1 -0
  11. package/dist/commands/callgraph.d.ts.map +1 -1
  12. package/dist/commands/callgraph.js +174 -39
  13. package/dist/commands/callgraph.js.map +1 -1
  14. package/dist/commands/coupling.d.ts.map +1 -1
  15. package/dist/commands/coupling.js +131 -1
  16. package/dist/commands/coupling.js.map +1 -1
  17. package/dist/commands/env.d.ts.map +1 -1
  18. package/dist/commands/env.js +80 -1
  19. package/dist/commands/env.js.map +1 -1
  20. package/dist/commands/error-handling.d.ts.map +1 -1
  21. package/dist/commands/error-handling.js +126 -1
  22. package/dist/commands/error-handling.js.map +1 -1
  23. package/dist/commands/index.d.ts +1 -0
  24. package/dist/commands/index.d.ts.map +1 -1
  25. package/dist/commands/index.js +2 -0
  26. package/dist/commands/index.js.map +1 -1
  27. package/dist/commands/scan.d.ts +4 -0
  28. package/dist/commands/scan.d.ts.map +1 -1
  29. package/dist/commands/scan.js +490 -181
  30. package/dist/commands/scan.js.map +1 -1
  31. package/dist/commands/watch.d.ts.map +1 -1
  32. package/dist/commands/watch.js +3 -2
  33. package/dist/commands/watch.js.map +1 -1
  34. package/dist/commands/wrappers.d.ts.map +1 -1
  35. package/dist/commands/wrappers.js +184 -0
  36. package/dist/commands/wrappers.js.map +1 -1
  37. package/package.json +13 -13
@@ -0,0 +1,495 @@
1
+ /**
2
+ * Audit Command - drift audit
3
+ *
4
+ * Run pattern audit to detect duplicates, validate cross-references,
5
+ * and generate approval recommendations.
6
+ *
7
+ * @requirements AUDIT-SYSTEM.md
8
+ */
9
+ import { Command } from 'commander';
10
+ import * as fs from 'node:fs/promises';
11
+ import * as path from 'node:path';
12
+ import chalk from 'chalk';
13
+ import { AuditEngine, AuditStore, PatternStore, } from 'driftdetect-core';
14
+ import { createSpinner, status } from '../ui/spinner.js';
15
+ /** Directory name for drift configuration */
16
+ const DRIFT_DIR = '.drift';
17
+ /**
18
+ * Check if drift is initialized
19
+ */
20
+ async function isDriftInitialized(rootDir) {
21
+ try {
22
+ await fs.access(path.join(rootDir, DRIFT_DIR));
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ /**
30
+ * Resolve the project root directory
31
+ */
32
+ async function resolveProjectRoot(rootOption) {
33
+ if (rootOption) {
34
+ return path.resolve(rootOption);
35
+ }
36
+ let current = process.cwd();
37
+ const root = path.parse(current).root;
38
+ while (current !== root) {
39
+ try {
40
+ await fs.access(path.join(current, DRIFT_DIR));
41
+ return current;
42
+ }
43
+ catch {
44
+ current = path.dirname(current);
45
+ }
46
+ }
47
+ return process.cwd();
48
+ }
49
+ /**
50
+ * Format health score with color
51
+ */
52
+ function formatHealthScore(score) {
53
+ if (score >= 85)
54
+ return chalk.green(`${score}/100`);
55
+ if (score >= 70)
56
+ return chalk.yellow(`${score}/100`);
57
+ return chalk.red(`${score}/100`);
58
+ }
59
+ /**
60
+ * Format recommendation with color
61
+ */
62
+ function formatRecommendation(rec) {
63
+ switch (rec) {
64
+ case 'auto-approve':
65
+ return chalk.green('✓ Auto-approve');
66
+ case 'review':
67
+ return chalk.yellow('⚠ Review');
68
+ case 'likely-false-positive':
69
+ return chalk.red('✗ Likely false positive');
70
+ default:
71
+ return rec;
72
+ }
73
+ }
74
+ /**
75
+ * Print audit summary in text format
76
+ */
77
+ function printTextSummary(result, verbose) {
78
+ console.log();
79
+ console.log(chalk.bold('📊 Audit Summary'));
80
+ console.log(chalk.gray('─'.repeat(50)));
81
+ console.log(` Total patterns: ${chalk.cyan(result.summary.totalPatterns)}`);
82
+ console.log(` Auto-approve eligible: ${chalk.green(result.summary.autoApproveEligible)} (≥90% confidence)`);
83
+ console.log(` Needs review: ${chalk.yellow(result.summary.flaggedForReview)}`);
84
+ console.log(` Likely false positives:${chalk.red(result.summary.likelyFalsePositives)}`);
85
+ console.log(` Duplicate candidates: ${chalk.magenta(result.summary.duplicateCandidates)}`);
86
+ console.log();
87
+ console.log(` Health Score: ${formatHealthScore(result.summary.healthScore)}`);
88
+ console.log();
89
+ // Category breakdown
90
+ const categories = Object.entries(result.summary.byCategory)
91
+ .filter(([_, data]) => data.total > 0)
92
+ .sort((a, b) => b[1].total - a[1].total);
93
+ if (categories.length > 0) {
94
+ console.log(chalk.bold('By Category'));
95
+ console.log(chalk.gray('─'.repeat(50)));
96
+ for (const [category, data] of categories) {
97
+ const avgConf = (data.avgConfidence * 100).toFixed(0);
98
+ console.log(` ${category.padEnd(15)} ${String(data.total).padStart(3)} patterns ` +
99
+ `(${chalk.green(data.autoApproveEligible)} auto, ` +
100
+ `${chalk.yellow(data.flaggedForReview)} review, ` +
101
+ `${chalk.red(data.likelyFalsePositives)} fp) ` +
102
+ `avg: ${avgConf}%`);
103
+ }
104
+ console.log();
105
+ }
106
+ // Duplicates
107
+ if (result.duplicates.length > 0) {
108
+ console.log(chalk.bold.magenta(`⚠️ ${result.duplicates.length} Duplicate Groups Detected`));
109
+ console.log(chalk.gray('─'.repeat(50)));
110
+ for (const group of result.duplicates.slice(0, 5)) {
111
+ console.log(` ${chalk.magenta(group.id)}: ${group.patternNames.join(', ')}`);
112
+ console.log(chalk.gray(` Similarity: ${(group.similarity * 100).toFixed(0)}% | ${group.reason}`));
113
+ console.log(chalk.gray(` Recommendation: ${group.recommendation}`));
114
+ }
115
+ if (result.duplicates.length > 5) {
116
+ console.log(chalk.gray(` ... and ${result.duplicates.length - 5} more`));
117
+ }
118
+ console.log();
119
+ }
120
+ // Cross-validation issues
121
+ const issues = result.crossValidation.issues.filter(i => i.severity !== 'info');
122
+ if (issues.length > 0) {
123
+ console.log(chalk.bold.yellow(`⚠️ ${issues.length} Cross-Validation Issues`));
124
+ console.log(chalk.gray('─'.repeat(50)));
125
+ for (const issue of issues.slice(0, 5)) {
126
+ const icon = issue.severity === 'error' ? '🔴' : '🟡';
127
+ console.log(` ${icon} ${issue.message}`);
128
+ }
129
+ if (issues.length > 5) {
130
+ console.log(chalk.gray(` ... and ${issues.length - 5} more`));
131
+ }
132
+ console.log();
133
+ }
134
+ // Degradation
135
+ if (result.degradation) {
136
+ const deg = result.degradation;
137
+ const trendIcon = deg.trend === 'improving' ? '📈' : deg.trend === 'declining' ? '📉' : '➡️';
138
+ console.log(chalk.bold(`${trendIcon} Trend: ${deg.trend}`));
139
+ console.log(chalk.gray('─'.repeat(50)));
140
+ console.log(` Health delta: ${deg.healthScoreDelta >= 0 ? '+' : ''}${deg.healthScoreDelta}`);
141
+ console.log(` Confidence delta: ${deg.confidenceDelta >= 0 ? '+' : ''}${(deg.confidenceDelta * 100).toFixed(1)}%`);
142
+ if (deg.newIssues.length > 0) {
143
+ console.log(` New issues: ${deg.newIssues.length}`);
144
+ }
145
+ if (deg.resolvedIssues.length > 0) {
146
+ console.log(` Resolved issues: ${deg.resolvedIssues.length}`);
147
+ }
148
+ console.log();
149
+ }
150
+ // Verbose: show all patterns
151
+ if (verbose) {
152
+ console.log(chalk.bold('Pattern Details'));
153
+ console.log(chalk.gray('─'.repeat(50)));
154
+ for (const p of result.patterns.slice(0, 20)) {
155
+ console.log(` ${p.id.slice(0, 8)} ${p.name.slice(0, 30).padEnd(30)} ${formatRecommendation(p.recommendation)}`);
156
+ if (p.reasons.length > 0) {
157
+ console.log(chalk.gray(` ${p.reasons[0]}`));
158
+ }
159
+ }
160
+ if (result.patterns.length > 20) {
161
+ console.log(chalk.gray(` ... and ${result.patterns.length - 20} more`));
162
+ }
163
+ console.log();
164
+ }
165
+ }
166
+ /**
167
+ * Print review report for agent assistance
168
+ */
169
+ function printReviewReport(result) {
170
+ console.log();
171
+ console.log(chalk.bold('🤖 Audit Review Report'));
172
+ console.log(chalk.gray('═'.repeat(60)));
173
+ console.log();
174
+ console.log(`Generated: ${result.generatedAt}`);
175
+ console.log(`Scan Hash: ${result.scanHash}`);
176
+ console.log(`Health Score: ${result.summary.healthScore}/100`);
177
+ console.log();
178
+ // Auto-approve candidates
179
+ const autoApprove = result.patterns.filter(p => p.recommendation === 'auto-approve');
180
+ if (autoApprove.length > 0) {
181
+ console.log(chalk.bold.green(`✓ Auto-Approve Candidates (${autoApprove.length})`));
182
+ console.log(chalk.gray('─'.repeat(60)));
183
+ for (const p of autoApprove) {
184
+ console.log(` ${chalk.green('•')} ${p.name} (${p.category})`);
185
+ console.log(chalk.gray(` ID: ${p.id}`));
186
+ console.log(chalk.gray(` Confidence: ${(p.confidence * 100).toFixed(0)}% | Locations: ${p.locationCount}`));
187
+ console.log(chalk.gray(` Reasons: ${p.reasons.join(', ')}`));
188
+ console.log();
189
+ }
190
+ }
191
+ // Review candidates
192
+ const review = result.patterns.filter(p => p.recommendation === 'review');
193
+ if (review.length > 0) {
194
+ console.log(chalk.bold.yellow(`⚠ Needs Review (${review.length})`));
195
+ console.log(chalk.gray('─'.repeat(60)));
196
+ for (const p of review.slice(0, 10)) {
197
+ console.log(` ${chalk.yellow('•')} ${p.name} (${p.category})`);
198
+ console.log(chalk.gray(` ID: ${p.id}`));
199
+ console.log(chalk.gray(` Confidence: ${(p.confidence * 100).toFixed(0)}% | Locations: ${p.locationCount} | Outliers: ${p.outlierCount}`));
200
+ console.log(chalk.gray(` Reasons: ${p.reasons.join(', ')}`));
201
+ console.log();
202
+ }
203
+ if (review.length > 10) {
204
+ console.log(chalk.gray(` ... and ${review.length - 10} more`));
205
+ console.log();
206
+ }
207
+ }
208
+ // Likely false positives
209
+ const falsePositives = result.patterns.filter(p => p.recommendation === 'likely-false-positive');
210
+ if (falsePositives.length > 0) {
211
+ console.log(chalk.bold.red(`✗ Likely False Positives (${falsePositives.length})`));
212
+ console.log(chalk.gray('─'.repeat(60)));
213
+ for (const p of falsePositives.slice(0, 5)) {
214
+ console.log(` ${chalk.red('•')} ${p.name} (${p.category})`);
215
+ console.log(chalk.gray(` ID: ${p.id}`));
216
+ console.log(chalk.gray(` Confidence: ${(p.confidence * 100).toFixed(0)}%`));
217
+ console.log(chalk.gray(` Reasons: ${p.reasons.join(', ')}`));
218
+ console.log();
219
+ }
220
+ if (falsePositives.length > 5) {
221
+ console.log(chalk.gray(` ... and ${falsePositives.length - 5} more`));
222
+ console.log();
223
+ }
224
+ }
225
+ // Agent instructions
226
+ console.log(chalk.bold('📋 Recommended Actions'));
227
+ console.log(chalk.gray('─'.repeat(60)));
228
+ if (autoApprove.length > 0) {
229
+ console.log(` 1. Run ${chalk.cyan('drift approve --auto')} to approve ${autoApprove.length} high-confidence patterns`);
230
+ }
231
+ if (review.length > 0) {
232
+ console.log(` 2. Review ${review.length} patterns manually or with agent assistance`);
233
+ }
234
+ if (falsePositives.length > 0) {
235
+ console.log(` 3. Consider ignoring ${falsePositives.length} likely false positives with ${chalk.cyan('drift ignore <id>')}`);
236
+ }
237
+ if (result.duplicates.length > 0) {
238
+ console.log(` 4. Review ${result.duplicates.length} duplicate groups for potential merging`);
239
+ }
240
+ console.log();
241
+ }
242
+ /**
243
+ * Audit command implementation
244
+ */
245
+ async function auditAction(options) {
246
+ const rootDir = await resolveProjectRoot(options.root);
247
+ const verbose = options.verbose ?? false;
248
+ const format = options.format ?? 'text';
249
+ const ciMode = options.ci ?? false;
250
+ const threshold = options.threshold ?? 85;
251
+ if (format === 'text' && !ciMode) {
252
+ console.log();
253
+ console.log(chalk.bold('🔍 Drift - Pattern Audit'));
254
+ console.log(chalk.dim(`Project: ${rootDir}`));
255
+ console.log();
256
+ }
257
+ // Check if initialized
258
+ if (!(await isDriftInitialized(rootDir))) {
259
+ if (format === 'json') {
260
+ console.log(JSON.stringify({ error: 'Drift is not initialized' }));
261
+ }
262
+ else {
263
+ status.error('Drift is not initialized. Run `drift init` first.');
264
+ }
265
+ process.exit(1);
266
+ }
267
+ // Load patterns
268
+ const spinner = format === 'text' ? createSpinner('Loading patterns...') : null;
269
+ spinner?.start();
270
+ const patternStore = new PatternStore({ rootDir });
271
+ await patternStore.initialize();
272
+ const patterns = patternStore.getAll();
273
+ spinner?.succeed(`Loaded ${patterns.length} patterns`);
274
+ if (patterns.length === 0) {
275
+ if (format === 'json') {
276
+ console.log(JSON.stringify({ error: 'No patterns found', patterns: 0 }));
277
+ }
278
+ else {
279
+ status.info('No patterns found. Run `drift scan` first.');
280
+ }
281
+ return;
282
+ }
283
+ // Run audit
284
+ const auditSpinner = format === 'text' ? createSpinner('Running audit...') : null;
285
+ auditSpinner?.start();
286
+ const auditEngine = new AuditEngine({ rootDir });
287
+ const auditStore = new AuditStore({ rootDir });
288
+ const auditOptions = {
289
+ crossValidateCallGraph: true,
290
+ crossValidateConstraints: true,
291
+ compareToPrevious: true,
292
+ };
293
+ const result = await auditEngine.runAudit(patterns, auditOptions);
294
+ // Compare to previous if requested
295
+ if (options.compare || auditOptions.compareToPrevious) {
296
+ const previousDate = options.compare;
297
+ const previous = previousDate
298
+ ? await auditStore.loadSnapshot(previousDate)
299
+ : await auditStore.loadLatest();
300
+ if (previous) {
301
+ result.degradation = auditStore.compareAudits(result, previous);
302
+ }
303
+ }
304
+ // Save audit
305
+ await auditStore.saveAudit(result);
306
+ auditSpinner?.succeed('Audit complete');
307
+ // Output based on format
308
+ if (format === 'json') {
309
+ console.log(JSON.stringify(result, null, 2));
310
+ }
311
+ else if (format === 'markdown') {
312
+ // Markdown output for export
313
+ console.log(`# Drift Audit Report\n`);
314
+ console.log(`Generated: ${result.generatedAt}\n`);
315
+ console.log(`## Summary\n`);
316
+ console.log(`- Total Patterns: ${result.summary.totalPatterns}`);
317
+ console.log(`- Health Score: ${result.summary.healthScore}/100`);
318
+ console.log(`- Auto-approve Eligible: ${result.summary.autoApproveEligible}`);
319
+ console.log(`- Needs Review: ${result.summary.flaggedForReview}`);
320
+ console.log(`- Likely False Positives: ${result.summary.likelyFalsePositives}`);
321
+ console.log(`- Duplicate Candidates: ${result.summary.duplicateCandidates}\n`);
322
+ }
323
+ else if (options.review) {
324
+ printReviewReport(result);
325
+ }
326
+ else {
327
+ printTextSummary(result, verbose);
328
+ }
329
+ // Export to file if requested
330
+ if (options.export) {
331
+ const exportPath = path.resolve(options.export);
332
+ await fs.writeFile(exportPath, JSON.stringify(result, null, 2));
333
+ if (format === 'text') {
334
+ status.success(`Exported audit to ${exportPath}`);
335
+ }
336
+ }
337
+ // CI mode: exit with error if below threshold
338
+ if (ciMode) {
339
+ if (result.summary.healthScore < threshold) {
340
+ console.log(chalk.red(`\n❌ Health score ${result.summary.healthScore} is below threshold ${threshold}`));
341
+ process.exit(1);
342
+ }
343
+ else {
344
+ console.log(chalk.green(`\n✓ Health score ${result.summary.healthScore} meets threshold ${threshold}`));
345
+ }
346
+ }
347
+ // Show next steps
348
+ if (format === 'text' && !ciMode && !options.review) {
349
+ console.log(chalk.gray('Next steps:'));
350
+ if (result.summary.autoApproveEligible > 0) {
351
+ console.log(chalk.cyan(` drift approve --auto`) + chalk.gray(` - Auto-approve ${result.summary.autoApproveEligible} high-confidence patterns`));
352
+ }
353
+ console.log(chalk.cyan(` drift audit --review`) + chalk.gray(` - Generate detailed review report`));
354
+ console.log();
355
+ }
356
+ }
357
+ /**
358
+ * Status subcommand - show current audit status
359
+ */
360
+ async function auditStatusAction(options) {
361
+ const rootDir = await resolveProjectRoot(options.root);
362
+ const format = options.format ?? 'text';
363
+ if (!(await isDriftInitialized(rootDir))) {
364
+ if (format === 'json') {
365
+ console.log(JSON.stringify({ error: 'Drift is not initialized' }));
366
+ }
367
+ else {
368
+ status.error('Drift is not initialized. Run `drift init` first.');
369
+ }
370
+ process.exit(1);
371
+ }
372
+ const auditStore = new AuditStore({ rootDir });
373
+ const latest = await auditStore.loadLatest();
374
+ if (!latest) {
375
+ if (format === 'json') {
376
+ console.log(JSON.stringify({ error: 'No audit found', hasAudit: false }));
377
+ }
378
+ else {
379
+ status.info('No audit found. Run `drift audit` first.');
380
+ }
381
+ return;
382
+ }
383
+ if (format === 'json') {
384
+ console.log(JSON.stringify({
385
+ hasAudit: true,
386
+ generatedAt: latest.generatedAt,
387
+ healthScore: latest.summary.healthScore,
388
+ totalPatterns: latest.summary.totalPatterns,
389
+ autoApproveEligible: latest.summary.autoApproveEligible,
390
+ flaggedForReview: latest.summary.flaggedForReview,
391
+ likelyFalsePositives: latest.summary.likelyFalsePositives,
392
+ duplicateCandidates: latest.summary.duplicateCandidates,
393
+ }));
394
+ }
395
+ else {
396
+ console.log();
397
+ console.log(chalk.bold('📊 Last Audit Status'));
398
+ console.log(chalk.gray('─'.repeat(40)));
399
+ console.log(` Generated: ${latest.generatedAt}`);
400
+ console.log(` Health Score: ${formatHealthScore(latest.summary.healthScore)}`);
401
+ console.log(` Total Patterns: ${latest.summary.totalPatterns}`);
402
+ console.log(` Auto-approve Eligible: ${chalk.green(latest.summary.autoApproveEligible)}`);
403
+ console.log(` Needs Review: ${chalk.yellow(latest.summary.flaggedForReview)}`);
404
+ console.log(` Likely False Positives:${chalk.red(latest.summary.likelyFalsePositives)}`);
405
+ console.log(` Duplicate Candidates: ${chalk.magenta(latest.summary.duplicateCandidates)}`);
406
+ console.log();
407
+ }
408
+ }
409
+ /**
410
+ * Trends subcommand - show quality trends over time
411
+ */
412
+ async function auditTrendsAction(options) {
413
+ const rootDir = await resolveProjectRoot(options.root);
414
+ const format = options.format ?? 'text';
415
+ if (!(await isDriftInitialized(rootDir))) {
416
+ if (format === 'json') {
417
+ console.log(JSON.stringify({ error: 'Drift is not initialized' }));
418
+ }
419
+ else {
420
+ status.error('Drift is not initialized. Run `drift init` first.');
421
+ }
422
+ process.exit(1);
423
+ }
424
+ const auditStore = new AuditStore({ rootDir });
425
+ const tracking = await auditStore.getDegradationTracking();
426
+ if (!tracking || tracking.history.length === 0) {
427
+ if (format === 'json') {
428
+ console.log(JSON.stringify({ error: 'No audit history found', hasHistory: false }));
429
+ }
430
+ else {
431
+ status.info('No audit history found. Run `drift audit` multiple times to build history.');
432
+ }
433
+ return;
434
+ }
435
+ if (format === 'json') {
436
+ console.log(JSON.stringify(tracking, null, 2));
437
+ }
438
+ else {
439
+ console.log();
440
+ console.log(chalk.bold('📈 Audit Trends'));
441
+ console.log(chalk.gray('─'.repeat(50)));
442
+ console.log(` Health Trend: ${tracking.trends.healthTrend}`);
443
+ console.log(` Confidence Trend: ${tracking.trends.confidenceTrend}`);
444
+ console.log(` Pattern Growth: ${tracking.trends.patternGrowth}`);
445
+ console.log();
446
+ if (tracking.alerts.length > 0) {
447
+ console.log(chalk.bold.yellow('⚠️ Active Alerts'));
448
+ console.log(chalk.gray('─'.repeat(50)));
449
+ for (const alert of tracking.alerts) {
450
+ const icon = alert.severity === 'critical' ? '🔴' : alert.severity === 'warning' ? '🟡' : '🔵';
451
+ console.log(` ${icon} ${alert.message}`);
452
+ }
453
+ console.log();
454
+ }
455
+ console.log(chalk.bold('History (last 7 entries)'));
456
+ console.log(chalk.gray('─'.repeat(50)));
457
+ for (const entry of tracking.history.slice(-7).reverse()) {
458
+ console.log(` ${entry.date} Health: ${String(entry.healthScore).padStart(3)} ` +
459
+ `Patterns: ${String(entry.totalPatterns).padStart(4)} ` +
460
+ `Approved: ${String(entry.approvedCount).padStart(3)}`);
461
+ }
462
+ console.log();
463
+ }
464
+ }
465
+ // Main command
466
+ export const auditCommand = new Command('audit')
467
+ .description('Run pattern audit to detect duplicates, validate cross-references, and generate recommendations')
468
+ .option('-r, --root <path>', 'Project root directory')
469
+ .option('--review', 'Generate detailed review report (for agent or human)')
470
+ .option('--compare <date>', 'Compare to audit from specific date (YYYY-MM-DD)')
471
+ .option('--ci', 'CI mode - exit 1 if health below threshold')
472
+ .option('--threshold <number>', 'Health score threshold for CI (default: 85)', '85')
473
+ .option('-f, --format <format>', 'Output format (text, json, markdown)', 'text')
474
+ .option('-e, --export <file>', 'Export audit to file')
475
+ .option('--verbose', 'Enable verbose output')
476
+ .action((options) => {
477
+ if (typeof options.threshold === 'string') {
478
+ options.threshold = parseInt(options.threshold, 10);
479
+ }
480
+ return auditAction(options);
481
+ });
482
+ // Subcommands
483
+ auditCommand
484
+ .command('status')
485
+ .description('Show current audit status')
486
+ .option('-r, --root <path>', 'Project root directory')
487
+ .option('-f, --format <format>', 'Output format (text, json)', 'text')
488
+ .action(auditStatusAction);
489
+ auditCommand
490
+ .command('trends')
491
+ .description('Show quality trends over time')
492
+ .option('-r, --root <path>', 'Project root directory')
493
+ .option('-f, --format <format>', 'Output format (text, json)', 'text')
494
+ .action(auditTrendsAction);
495
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"callgraph.d.ts","sourceRoot":"","sources":["../../src/commands/callgraph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAw7CD;;GAEG;AACH,eAAO,MAAM,gBAAgB,SAGN,CAAC"}
1
+ {"version":3,"file":"callgraph.d.ts","sourceRoot":"","sources":["../../src/commands/callgraph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0iDD;;GAEG;AACH,eAAO,MAAM,gBAAgB,SAGN,CAAC"}