driftdetect 0.8.2 → 0.8.3

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.
@@ -0,0 +1,477 @@
1
+ /**
2
+ * Next Steps Command - drift next-steps
3
+ *
4
+ * Analyzes the current project state and recommends the most relevant
5
+ * next actions based on project type, patterns found, and current status.
6
+ *
7
+ * This is the "what should I do next?" command for new users.
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 { createSpinner } from '../ui/spinner.js';
14
+ import { createCLIPatternService } from '../services/pattern-service-factory.js';
15
+ const DRIFT_DIR = '.drift';
16
+ /**
17
+ * Detect languages in the project
18
+ */
19
+ async function detectLanguages(rootDir) {
20
+ const languages = [];
21
+ const extensions = {
22
+ '.ts': 'typescript',
23
+ '.tsx': 'typescript',
24
+ '.js': 'javascript',
25
+ '.jsx': 'javascript',
26
+ '.py': 'python',
27
+ '.java': 'java',
28
+ '.cs': 'csharp',
29
+ '.php': 'php',
30
+ '.go': 'go',
31
+ '.rs': 'rust',
32
+ '.cpp': 'cpp',
33
+ '.cc': 'cpp',
34
+ '.h': 'cpp',
35
+ };
36
+ async function scanDir(dir, depth = 0) {
37
+ if (depth > 3)
38
+ return; // Don't go too deep
39
+ try {
40
+ const entries = await fs.readdir(dir, { withFileTypes: true });
41
+ for (const entry of entries) {
42
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' ||
43
+ entry.name === 'vendor' || entry.name === 'dist' || entry.name === 'build') {
44
+ continue;
45
+ }
46
+ if (entry.isDirectory()) {
47
+ await scanDir(path.join(dir, entry.name), depth + 1);
48
+ }
49
+ else if (entry.isFile()) {
50
+ const ext = path.extname(entry.name).toLowerCase();
51
+ const lang = extensions[ext];
52
+ if (lang && !languages.includes(lang)) {
53
+ languages.push(lang);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ catch {
59
+ // Ignore errors
60
+ }
61
+ }
62
+ await scanDir(rootDir);
63
+ return languages;
64
+ }
65
+ /**
66
+ * Detect frameworks based on config files
67
+ */
68
+ async function detectFrameworks(rootDir) {
69
+ const frameworks = [];
70
+ const frameworkFiles = {
71
+ 'package.json': 'node',
72
+ 'next.config.js': 'nextjs',
73
+ 'next.config.mjs': 'nextjs',
74
+ 'nuxt.config.js': 'nuxt',
75
+ 'angular.json': 'angular',
76
+ 'vue.config.js': 'vue',
77
+ 'svelte.config.js': 'svelte',
78
+ 'requirements.txt': 'python',
79
+ 'pyproject.toml': 'python',
80
+ 'manage.py': 'django',
81
+ 'pom.xml': 'maven',
82
+ 'build.gradle': 'gradle',
83
+ 'composer.json': 'php',
84
+ 'artisan': 'laravel',
85
+ 'go.mod': 'go',
86
+ 'Cargo.toml': 'rust',
87
+ 'CMakeLists.txt': 'cmake',
88
+ };
89
+ for (const [file, framework] of Object.entries(frameworkFiles)) {
90
+ try {
91
+ await fs.access(path.join(rootDir, file));
92
+ if (!frameworks.includes(framework)) {
93
+ frameworks.push(framework);
94
+ }
95
+ }
96
+ catch {
97
+ // File doesn't exist
98
+ }
99
+ }
100
+ // Check package.json for specific frameworks
101
+ try {
102
+ const pkgPath = path.join(rootDir, 'package.json');
103
+ const pkgContent = await fs.readFile(pkgPath, 'utf-8');
104
+ const pkg = JSON.parse(pkgContent);
105
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
106
+ if (deps['react'])
107
+ frameworks.push('react');
108
+ if (deps['express'])
109
+ frameworks.push('express');
110
+ if (deps['@nestjs/core'])
111
+ frameworks.push('nestjs');
112
+ if (deps['fastify'])
113
+ frameworks.push('fastify');
114
+ if (deps['koa'])
115
+ frameworks.push('koa');
116
+ }
117
+ catch {
118
+ // No package.json
119
+ }
120
+ return [...new Set(frameworks)];
121
+ }
122
+ /**
123
+ * Check if analysis data exists
124
+ */
125
+ async function checkAnalysisData(rootDir) {
126
+ const driftDir = path.join(rootDir, DRIFT_DIR);
127
+ const checks = {
128
+ hasCallGraph: false,
129
+ hasTestTopology: false,
130
+ hasCoupling: false,
131
+ hasErrorHandling: false,
132
+ hasBoundaries: false,
133
+ };
134
+ try {
135
+ await fs.access(path.join(driftDir, 'call-graph'));
136
+ checks.hasCallGraph = true;
137
+ }
138
+ catch { /* */ }
139
+ try {
140
+ await fs.access(path.join(driftDir, 'test-topology'));
141
+ checks.hasTestTopology = true;
142
+ }
143
+ catch { /* */ }
144
+ try {
145
+ await fs.access(path.join(driftDir, 'module-coupling'));
146
+ checks.hasCoupling = true;
147
+ }
148
+ catch { /* */ }
149
+ try {
150
+ await fs.access(path.join(driftDir, 'error-handling'));
151
+ checks.hasErrorHandling = true;
152
+ }
153
+ catch { /* */ }
154
+ try {
155
+ await fs.access(path.join(driftDir, 'boundaries'));
156
+ checks.hasBoundaries = true;
157
+ }
158
+ catch { /* */ }
159
+ return checks;
160
+ }
161
+ /**
162
+ * Analyze the project state
163
+ */
164
+ async function analyzeProject(rootDir) {
165
+ const analysis = {
166
+ initialized: false,
167
+ scanned: false,
168
+ hasPatterns: false,
169
+ patternCount: 0,
170
+ discoveredCount: 0,
171
+ approvedCount: 0,
172
+ languages: [],
173
+ frameworks: [],
174
+ hasCallGraph: false,
175
+ hasTestTopology: false,
176
+ hasCoupling: false,
177
+ hasErrorHandling: false,
178
+ hasBoundaries: false,
179
+ };
180
+ // Check if initialized
181
+ try {
182
+ await fs.access(path.join(rootDir, DRIFT_DIR));
183
+ analysis.initialized = true;
184
+ }
185
+ catch {
186
+ return analysis;
187
+ }
188
+ // Check if scanned (has patterns directory with content)
189
+ try {
190
+ const patternsDir = path.join(rootDir, DRIFT_DIR, 'patterns', 'discovered');
191
+ const files = await fs.readdir(patternsDir);
192
+ analysis.scanned = files.length > 0;
193
+ }
194
+ catch {
195
+ // Check lake patterns as fallback
196
+ try {
197
+ const lakeDir = path.join(rootDir, DRIFT_DIR, 'lake', 'patterns');
198
+ const files = await fs.readdir(lakeDir);
199
+ analysis.scanned = files.length > 0;
200
+ }
201
+ catch { /* */ }
202
+ }
203
+ // Get pattern counts
204
+ if (analysis.scanned) {
205
+ try {
206
+ const service = createCLIPatternService(rootDir);
207
+ const status = await service.getStatus();
208
+ analysis.hasPatterns = status.totalPatterns > 0;
209
+ analysis.patternCount = status.totalPatterns;
210
+ analysis.discoveredCount = status.byStatus.discovered;
211
+ analysis.approvedCount = status.byStatus.approved;
212
+ }
213
+ catch {
214
+ // Pattern service not available
215
+ }
216
+ }
217
+ // Detect languages and frameworks
218
+ analysis.languages = await detectLanguages(rootDir);
219
+ analysis.frameworks = await detectFrameworks(rootDir);
220
+ // Check analysis data
221
+ const analysisData = await checkAnalysisData(rootDir);
222
+ Object.assign(analysis, analysisData);
223
+ return analysis;
224
+ }
225
+ /**
226
+ * Generate next steps based on analysis
227
+ */
228
+ function generateNextSteps(analysis) {
229
+ const steps = [];
230
+ // Not initialized
231
+ if (!analysis.initialized) {
232
+ steps.push({
233
+ priority: 'high',
234
+ command: 'drift init',
235
+ description: 'Initialize Drift in this project',
236
+ reason: 'Drift is not yet initialized. This creates the .drift/ directory and configuration.',
237
+ });
238
+ return steps;
239
+ }
240
+ // Not scanned
241
+ if (!analysis.scanned) {
242
+ steps.push({
243
+ priority: 'high',
244
+ command: 'drift scan',
245
+ description: 'Scan your codebase for patterns',
246
+ reason: 'No patterns found. Run a scan to discover your codebase conventions.',
247
+ });
248
+ return steps;
249
+ }
250
+ // Has discovered patterns to review
251
+ if (analysis.discoveredCount > 0) {
252
+ steps.push({
253
+ priority: 'high',
254
+ command: 'drift status --detailed',
255
+ description: 'Review discovered patterns',
256
+ reason: `You have ${analysis.discoveredCount} patterns awaiting review. Approve the ones that represent your conventions.`,
257
+ });
258
+ if (analysis.discoveredCount > 5) {
259
+ steps.push({
260
+ priority: 'medium',
261
+ command: 'drift approve --category api',
262
+ description: 'Approve patterns by category',
263
+ reason: 'With many patterns, approving by category is faster than one-by-one.',
264
+ });
265
+ }
266
+ }
267
+ // Language-specific commands
268
+ if (analysis.languages.includes('typescript') || analysis.languages.includes('javascript')) {
269
+ steps.push({
270
+ priority: 'medium',
271
+ command: 'drift ts status',
272
+ description: 'Analyze TypeScript/JavaScript project',
273
+ reason: 'Get TypeScript-specific insights: routes, components, hooks, error handling.',
274
+ });
275
+ if (analysis.frameworks.includes('react')) {
276
+ steps.push({
277
+ priority: 'medium',
278
+ command: 'drift ts components',
279
+ description: 'List React components',
280
+ reason: 'See all React components and their patterns.',
281
+ });
282
+ }
283
+ if (analysis.frameworks.includes('express') || analysis.frameworks.includes('nestjs') || analysis.frameworks.includes('fastify')) {
284
+ steps.push({
285
+ priority: 'medium',
286
+ command: 'drift ts routes',
287
+ description: 'List API routes',
288
+ reason: 'See all HTTP endpoints in your backend.',
289
+ });
290
+ }
291
+ }
292
+ if (analysis.languages.includes('python')) {
293
+ steps.push({
294
+ priority: 'medium',
295
+ command: 'drift py status',
296
+ description: 'Analyze Python project',
297
+ reason: 'Get Python-specific insights: routes, decorators, async patterns.',
298
+ });
299
+ }
300
+ if (analysis.languages.includes('go')) {
301
+ steps.push({
302
+ priority: 'medium',
303
+ command: 'drift go status',
304
+ description: 'Analyze Go project',
305
+ reason: 'Get Go-specific insights: routes, interfaces, goroutines.',
306
+ });
307
+ }
308
+ if (analysis.languages.includes('rust')) {
309
+ steps.push({
310
+ priority: 'medium',
311
+ command: 'drift rust status',
312
+ description: 'Analyze Rust project',
313
+ reason: 'Get Rust-specific insights: traits, error handling, async patterns.',
314
+ });
315
+ }
316
+ if (analysis.languages.includes('java')) {
317
+ steps.push({
318
+ priority: 'medium',
319
+ command: 'drift java status',
320
+ description: 'Analyze Java project',
321
+ reason: 'Get Java-specific insights: routes, annotations, data access.',
322
+ });
323
+ }
324
+ if (analysis.languages.includes('php')) {
325
+ steps.push({
326
+ priority: 'medium',
327
+ command: 'drift php status',
328
+ description: 'Analyze PHP project',
329
+ reason: 'Get PHP-specific insights: routes, traits, data access.',
330
+ });
331
+ }
332
+ // Build analysis data if not present
333
+ if (!analysis.hasCallGraph) {
334
+ steps.push({
335
+ priority: 'medium',
336
+ command: 'drift callgraph build',
337
+ description: 'Build call graph',
338
+ reason: 'Enables impact analysis and data flow tracking.',
339
+ });
340
+ }
341
+ if (!analysis.hasTestTopology) {
342
+ steps.push({
343
+ priority: 'medium',
344
+ command: 'drift test-topology build',
345
+ description: 'Build test topology',
346
+ reason: 'Maps tests to code for coverage analysis and affected test detection.',
347
+ });
348
+ }
349
+ if (!analysis.hasCoupling) {
350
+ steps.push({
351
+ priority: 'low',
352
+ command: 'drift coupling build',
353
+ description: 'Build coupling analysis',
354
+ reason: 'Detects dependency cycles and highly coupled modules.',
355
+ });
356
+ }
357
+ if (!analysis.hasErrorHandling) {
358
+ steps.push({
359
+ priority: 'low',
360
+ command: 'drift error-handling build',
361
+ description: 'Build error handling map',
362
+ reason: 'Finds error handling gaps and unhandled exceptions.',
363
+ });
364
+ }
365
+ // MCP setup suggestion
366
+ steps.push({
367
+ priority: 'medium',
368
+ command: 'npx driftdetect-mcp',
369
+ description: 'Connect to AI agents via MCP',
370
+ reason: 'Let Claude, Cursor, or other AI agents use your patterns for better code generation.',
371
+ });
372
+ // Dashboard
373
+ steps.push({
374
+ priority: 'low',
375
+ command: 'drift dashboard',
376
+ description: 'Launch web dashboard',
377
+ reason: 'Visual exploration of patterns, violations, and codebase health.',
378
+ });
379
+ return steps;
380
+ }
381
+ /**
382
+ * Next steps command action
383
+ */
384
+ async function nextStepsAction(options) {
385
+ const rootDir = process.cwd();
386
+ const format = options.format ?? 'text';
387
+ const spinner = format === 'text' ? createSpinner('Analyzing project...') : null;
388
+ spinner?.start();
389
+ const analysis = await analyzeProject(rootDir);
390
+ const steps = generateNextSteps(analysis);
391
+ spinner?.stop();
392
+ // JSON output
393
+ if (format === 'json') {
394
+ console.log(JSON.stringify({
395
+ analysis,
396
+ steps,
397
+ }, null, 2));
398
+ return;
399
+ }
400
+ // Text output
401
+ console.log();
402
+ console.log(chalk.bold('🧭 Drift - Next Steps'));
403
+ console.log(chalk.gray('═'.repeat(60)));
404
+ console.log();
405
+ // Project status summary
406
+ console.log(chalk.bold('Project Status'));
407
+ console.log(chalk.gray('─'.repeat(40)));
408
+ console.log(` Initialized: ${analysis.initialized ? chalk.green('✓') : chalk.red('✗')}`);
409
+ console.log(` Scanned: ${analysis.scanned ? chalk.green('✓') : chalk.red('✗')}`);
410
+ console.log(` Patterns: ${chalk.cyan(analysis.patternCount)} (${chalk.green(analysis.approvedCount)} approved, ${chalk.yellow(analysis.discoveredCount)} pending)`);
411
+ if (analysis.languages.length > 0) {
412
+ console.log(` Languages: ${chalk.cyan(analysis.languages.join(', '))}`);
413
+ }
414
+ if (analysis.frameworks.length > 0) {
415
+ console.log(` Frameworks: ${chalk.cyan(analysis.frameworks.join(', '))}`);
416
+ }
417
+ console.log();
418
+ // Analysis data status
419
+ console.log(chalk.bold('Analysis Data'));
420
+ console.log(chalk.gray('─'.repeat(40)));
421
+ console.log(` Call Graph: ${analysis.hasCallGraph ? chalk.green('✓ built') : chalk.gray('○ not built')}`);
422
+ console.log(` Test Topology: ${analysis.hasTestTopology ? chalk.green('✓ built') : chalk.gray('○ not built')}`);
423
+ console.log(` Coupling: ${analysis.hasCoupling ? chalk.green('✓ built') : chalk.gray('○ not built')}`);
424
+ console.log(` Error Handling: ${analysis.hasErrorHandling ? chalk.green('✓ built') : chalk.gray('○ not built')}`);
425
+ console.log();
426
+ // Recommended next steps
427
+ console.log(chalk.bold('Recommended Next Steps'));
428
+ console.log(chalk.gray('─'.repeat(40)));
429
+ console.log();
430
+ const highPriority = steps.filter(s => s.priority === 'high');
431
+ const mediumPriority = steps.filter(s => s.priority === 'medium');
432
+ const lowPriority = steps.filter(s => s.priority === 'low');
433
+ if (highPriority.length > 0) {
434
+ console.log(chalk.red.bold(' 🔴 High Priority'));
435
+ for (const step of highPriority) {
436
+ console.log();
437
+ console.log(` ${chalk.cyan(step.command)}`);
438
+ console.log(` ${step.description}`);
439
+ console.log(chalk.gray(` → ${step.reason}`));
440
+ }
441
+ console.log();
442
+ }
443
+ if (mediumPriority.length > 0) {
444
+ console.log(chalk.yellow.bold(' 🟡 Recommended'));
445
+ for (const step of mediumPriority.slice(0, 5)) {
446
+ console.log();
447
+ console.log(` ${chalk.cyan(step.command)}`);
448
+ console.log(` ${step.description}`);
449
+ if (options.verbose) {
450
+ console.log(chalk.gray(` → ${step.reason}`));
451
+ }
452
+ }
453
+ if (mediumPriority.length > 5) {
454
+ console.log(chalk.gray(`\n ... and ${mediumPriority.length - 5} more`));
455
+ }
456
+ console.log();
457
+ }
458
+ if (lowPriority.length > 0 && options.verbose) {
459
+ console.log(chalk.blue.bold(' 🔵 Optional'));
460
+ for (const step of lowPriority.slice(0, 3)) {
461
+ console.log();
462
+ console.log(` ${chalk.cyan(step.command)}`);
463
+ console.log(` ${step.description}`);
464
+ }
465
+ console.log();
466
+ }
467
+ // Quick tip
468
+ console.log(chalk.gray('─'.repeat(60)));
469
+ console.log(chalk.gray('Tip: Run with --verbose to see all recommendations and reasons.'));
470
+ console.log();
471
+ }
472
+ export const nextStepsCommand = new Command('next-steps')
473
+ .description('Get personalized recommendations for what to do next')
474
+ .option('-f, --format <format>', 'Output format (text, json)', 'text')
475
+ .option('-v, --verbose', 'Show all recommendations with detailed reasons')
476
+ .action(nextStepsAction);
477
+ //# sourceMappingURL=next-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../src/commands/next-steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Troubleshoot Command - drift troubleshoot
3
+ *
4
+ * Diagnoses common issues and provides targeted fixes.
5
+ * Helps users resolve problems without searching documentation.
6
+ */
7
+ import { Command } from 'commander';
8
+ export interface TroubleshootOptions {
9
+ format?: 'text' | 'json';
10
+ verbose?: boolean;
11
+ fix?: boolean;
12
+ }
13
+ export declare const troubleshootCommand: Command;
14
+ //# sourceMappingURL=troubleshoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"troubleshoot.d.ts","sourceRoot":"","sources":["../../src/commands/troubleshoot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAwfD,eAAO,MAAM,mBAAmB,SAKH,CAAC"}