faf-cli 3.0.6 → 3.1.1

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 (105) hide show
  1. package/README.md +275 -25
  2. package/dist/big-orange/compare.d.ts.map +1 -1
  3. package/dist/big-orange/compare.js +14 -16
  4. package/dist/big-orange/compare.js.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +137 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/auto.d.ts.map +1 -1
  9. package/dist/commands/auto.js +69 -12
  10. package/dist/commands/auto.js.map +1 -1
  11. package/dist/commands/bi-sync.d.ts.map +1 -1
  12. package/dist/commands/bi-sync.js +10 -3
  13. package/dist/commands/bi-sync.js.map +1 -1
  14. package/dist/commands/drift.d.ts +16 -0
  15. package/dist/commands/drift.d.ts.map +1 -0
  16. package/dist/commands/drift.js +517 -0
  17. package/dist/commands/drift.js.map +1 -0
  18. package/dist/commands/git.d.ts +25 -0
  19. package/dist/commands/git.d.ts.map +1 -0
  20. package/dist/commands/git.js +355 -0
  21. package/dist/commands/git.js.map +1 -0
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +5 -4
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/migrate.d.ts +11 -0
  26. package/dist/commands/migrate.d.ts.map +1 -0
  27. package/dist/commands/migrate.js +85 -0
  28. package/dist/commands/migrate.js.map +1 -0
  29. package/dist/commands/rename.d.ts +18 -0
  30. package/dist/commands/rename.d.ts.map +1 -0
  31. package/dist/commands/rename.js +211 -0
  32. package/dist/commands/rename.js.map +1 -0
  33. package/dist/commands/taf-init.d.ts +14 -0
  34. package/dist/commands/taf-init.d.ts.map +1 -0
  35. package/dist/commands/taf-init.js +138 -0
  36. package/dist/commands/taf-init.js.map +1 -0
  37. package/dist/commands/taf-log.d.ts +30 -0
  38. package/dist/commands/taf-log.d.ts.map +1 -0
  39. package/dist/commands/taf-log.js +303 -0
  40. package/dist/commands/taf-log.js.map +1 -0
  41. package/dist/commands/taf-stats.d.ts +8 -0
  42. package/dist/commands/taf-stats.d.ts.map +1 -0
  43. package/dist/commands/taf-stats.js +133 -0
  44. package/dist/commands/taf-stats.js.map +1 -0
  45. package/dist/commands/taf-validate.d.ts +8 -0
  46. package/dist/commands/taf-validate.d.ts.map +1 -0
  47. package/dist/commands/taf-validate.js +108 -0
  48. package/dist/commands/taf-validate.js.map +1 -0
  49. package/dist/commands/taf.d.ts +13 -0
  50. package/dist/commands/taf.d.ts.map +1 -0
  51. package/dist/commands/taf.js +97 -0
  52. package/dist/commands/taf.js.map +1 -0
  53. package/dist/compiler/faf-compiler.d.ts.map +1 -1
  54. package/dist/compiler/faf-compiler.js +18 -0
  55. package/dist/compiler/faf-compiler.js.map +1 -1
  56. package/dist/generators/faf-generator-championship.d.ts.map +1 -1
  57. package/dist/generators/faf-generator-championship.js +1 -0
  58. package/dist/generators/faf-generator-championship.js.map +1 -1
  59. package/dist/github/github-extractor.d.ts +56 -0
  60. package/dist/github/github-extractor.d.ts.map +1 -0
  61. package/dist/github/github-extractor.js +328 -0
  62. package/dist/github/github-extractor.js.map +1 -0
  63. package/dist/github/popular-repos.d.ts +43 -0
  64. package/dist/github/popular-repos.d.ts.map +1 -0
  65. package/dist/github/popular-repos.js +205 -0
  66. package/dist/github/popular-repos.js.map +1 -0
  67. package/dist/github/repo-selector.d.ts +48 -0
  68. package/dist/github/repo-selector.d.ts.map +1 -0
  69. package/dist/github/repo-selector.js +277 -0
  70. package/dist/github/repo-selector.js.map +1 -0
  71. package/dist/taf/index.d.ts +17 -0
  72. package/dist/taf/index.d.ts.map +1 -0
  73. package/dist/taf/index.js +57 -0
  74. package/dist/taf/index.js.map +1 -0
  75. package/dist/taf/logger.d.ts +88 -0
  76. package/dist/taf/logger.d.ts.map +1 -0
  77. package/dist/taf/logger.js +137 -0
  78. package/dist/taf/logger.js.map +1 -0
  79. package/dist/taf/parser.d.ts +32 -0
  80. package/dist/taf/parser.d.ts.map +1 -0
  81. package/dist/taf/parser.js +161 -0
  82. package/dist/taf/parser.js.map +1 -0
  83. package/dist/taf/stats.d.ts +31 -0
  84. package/dist/taf/stats.d.ts.map +1 -0
  85. package/dist/taf/stats.js +182 -0
  86. package/dist/taf/stats.js.map +1 -0
  87. package/dist/taf/types.d.ts +77 -0
  88. package/dist/taf/types.d.ts.map +1 -0
  89. package/dist/taf/types.js +9 -0
  90. package/dist/taf/types.js.map +1 -0
  91. package/dist/taf/validator.d.ts +18 -0
  92. package/dist/taf/validator.d.ts.map +1 -0
  93. package/dist/taf/validator.js +148 -0
  94. package/dist/taf/validator.js.map +1 -0
  95. package/dist/utils/file-utils.d.ts +10 -0
  96. package/dist/utils/file-utils.d.ts.map +1 -1
  97. package/dist/utils/file-utils.js +196 -33
  98. package/dist/utils/file-utils.js.map +1 -1
  99. package/dist/utils/native-file-finder.js +1 -1
  100. package/dist/utils/native-file-finder.js.map +1 -1
  101. package/dist/utils/yaml-generator.d.ts +1 -0
  102. package/dist/utils/yaml-generator.d.ts.map +1 -1
  103. package/dist/utils/yaml-generator.js +1 -0
  104. package/dist/utils/yaml-generator.js.map +1 -1
  105. package/package.json +9 -4
@@ -0,0 +1,517 @@
1
+ "use strict";
2
+ /**
3
+ * 🍊 Drift Command - Context-Drift Makes You Pay
4
+ * Analyzes git history to detect and quantify context-drift
5
+ *
6
+ * Shows the cascade of poor decisions when AI lacks context
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.driftCommand = driftCommand;
13
+ const child_process_1 = require("child_process");
14
+ const fs_1 = require("fs");
15
+ const path_1 = __importDefault(require("path"));
16
+ const colors_1 = require("../fix-once/colors");
17
+ const championship_style_1 = require("../utils/championship-style");
18
+ const file_utils_1 = require("../utils/file-utils");
19
+ const faf_compiler_1 = require("../compiler/faf-compiler");
20
+ /**
21
+ * Drift detection patterns for common technology changes
22
+ */
23
+ const DRIFT_PATTERNS = {
24
+ auth: {
25
+ packages: [
26
+ 'passport', 'next-auth', '@supabase/auth-helpers',
27
+ 'firebase/auth', 'auth0', '@auth0/nextjs-auth0',
28
+ 'lucia-auth', 'better-auth'
29
+ ],
30
+ commits: /migrate.*auth|switch.*auth|replace.*auth|move.*auth|refactor.*auth/i,
31
+ files: /auth|login|session|user.*auth/i,
32
+ severity: 'high',
33
+ estimatedCost: '2-3 weeks'
34
+ },
35
+ state: {
36
+ packages: [
37
+ 'redux', '@reduxjs/toolkit', 'zustand', 'jotai',
38
+ 'mobx', 'recoil', 'valtio', 'nanostores'
39
+ ],
40
+ commits: /migrate.*state|switch.*store|replace.*redux|move.*state/i,
41
+ files: /store|state|redux|zustand|atoms/i,
42
+ severity: 'medium',
43
+ estimatedCost: '3-5 days'
44
+ },
45
+ styling: {
46
+ packages: [
47
+ 'styled-components', '@emotion/react', '@emotion/styled',
48
+ 'tailwindcss', 'sass', 'less', 'postcss',
49
+ '@vanilla-extract/css', 'linaria'
50
+ ],
51
+ commits: /migrate.*css|switch.*styling|replace.*styles|tailwind.*migration/i,
52
+ files: /\.css$|\.scss$|\.less$|tailwind\.config|styled\./i,
53
+ severity: 'medium',
54
+ estimatedCost: '1 week'
55
+ },
56
+ framework: {
57
+ packages: [
58
+ 'react', 'vue', 'svelte', 'next', 'vite', 'remix',
59
+ 'express', 'fastify', 'hono', 'nestjs'
60
+ ],
61
+ commits: /migrate.*framework|switch to|upgrade to|move to.*next|vite.*migration/i,
62
+ files: /app\/|pages\/|routes\//i,
63
+ severity: 'high',
64
+ estimatedCost: '2-4 weeks'
65
+ },
66
+ database: {
67
+ packages: [
68
+ 'prisma', '@prisma/client', 'drizzle-orm', 'typeorm',
69
+ 'mongoose', '@supabase/supabase-js', 'postgres', 'mysql2'
70
+ ],
71
+ commits: /migrate.*database|switch.*db|replace.*orm|prisma.*drizzle|db.*migration/i,
72
+ files: /schema|migrations|models|prisma|drizzle/i,
73
+ severity: 'high',
74
+ estimatedCost: '1-2 weeks'
75
+ }
76
+ };
77
+ /**
78
+ * Check if directory is a git repository
79
+ */
80
+ function isGitRepo(dir) {
81
+ try {
82
+ (0, child_process_1.execSync)('git rev-parse --git-dir', { cwd: dir, stdio: 'ignore' });
83
+ return true;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Get git log data
91
+ */
92
+ function getGitLog(projectDir, since) {
93
+ try {
94
+ const sinceFlag = since ? `--since="${since}"` : '--all';
95
+ const cmd = `git log ${sinceFlag} --numstat --date=short --pretty=format:"%H|%ad|%s"`;
96
+ return (0, child_process_1.execSync)(cmd, { cwd: projectDir, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
97
+ }
98
+ catch (error) {
99
+ return '';
100
+ }
101
+ }
102
+ /**
103
+ * Get package.json history
104
+ */
105
+ function getPackageHistory(projectDir) {
106
+ try {
107
+ const cmd = 'git log --all -p package.json';
108
+ return (0, child_process_1.execSync)(cmd, { cwd: projectDir, encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
109
+ }
110
+ catch {
111
+ return '';
112
+ }
113
+ }
114
+ /**
115
+ * Parse git log to extract commits
116
+ */
117
+ function parseGitLog(logOutput) {
118
+ const commits = [];
119
+ const lines = logOutput.split('\n');
120
+ let currentCommit = null;
121
+ for (const line of lines) {
122
+ if (line.includes('|')) {
123
+ const [hash, date, message] = line.split('|');
124
+ currentCommit = { hash, date, message, filesChanged: 0 };
125
+ commits.push(currentCommit);
126
+ }
127
+ else if (currentCommit && line.trim() && !line.startsWith('-')) {
128
+ // numstat line: additions deletions filename
129
+ currentCommit.filesChanged++;
130
+ }
131
+ }
132
+ return commits;
133
+ }
134
+ /**
135
+ * Detect package changes from package.json history
136
+ */
137
+ function detectPackageChanges(packageHistory) {
138
+ const changes = new Map();
139
+ for (const [category, config] of Object.entries(DRIFT_PATTERNS)) {
140
+ const categoryChanges = [];
141
+ for (const pkg of config.packages) {
142
+ // Look for additions and removals
143
+ const addPattern = new RegExp(`\\+.*"${pkg}"`, 'g');
144
+ const removePattern = new RegExp(`-.*"${pkg}"`, 'g');
145
+ const additions = packageHistory.match(addPattern);
146
+ const removals = packageHistory.match(removePattern);
147
+ if (additions && removals) {
148
+ categoryChanges.push(`${pkg} (added then removed)`);
149
+ }
150
+ else if (additions) {
151
+ categoryChanges.push(`${pkg} (added)`);
152
+ }
153
+ else if (removals) {
154
+ categoryChanges.push(`${pkg} (removed)`);
155
+ }
156
+ }
157
+ if (categoryChanges.length > 0) {
158
+ changes.set(category, categoryChanges);
159
+ }
160
+ }
161
+ return changes;
162
+ }
163
+ /**
164
+ * Detect drift events from commits
165
+ */
166
+ function detectDriftEvents(commits, packageChanges) {
167
+ const events = [];
168
+ const startDate = commits.length > 0 ? new Date(commits[commits.length - 1].date) : new Date();
169
+ // Detect from commit messages and file changes
170
+ for (const commit of commits) {
171
+ const commitDate = new Date(commit.date);
172
+ const daysSinceStart = Math.floor((commitDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));
173
+ for (const [type, config] of Object.entries(DRIFT_PATTERNS)) {
174
+ if (config.commits.test(commit.message)) {
175
+ events.push({
176
+ type: type,
177
+ severity: config.severity,
178
+ day: daysSinceStart,
179
+ description: commit.message,
180
+ filesChanged: commit.filesChanged,
181
+ commits: [commit.hash.substring(0, 7)],
182
+ estimatedCost: config.estimatedCost
183
+ });
184
+ }
185
+ }
186
+ }
187
+ // Add package change events
188
+ for (const [type, changes] of packageChanges.entries()) {
189
+ if (changes.length > 1) {
190
+ // Multiple changes = drift
191
+ events.push({
192
+ type: type,
193
+ severity: DRIFT_PATTERNS[type].severity,
194
+ day: 0, // Approximate
195
+ description: `Multiple ${type} changes detected: ${changes.join(', ')}`,
196
+ filesChanged: 0,
197
+ commits: [],
198
+ estimatedCost: DRIFT_PATTERNS[type].estimatedCost
199
+ });
200
+ }
201
+ }
202
+ return events;
203
+ }
204
+ /**
205
+ * Calculate drift summary
206
+ */
207
+ function calculateSummary(events) {
208
+ const totalEvents = events.length;
209
+ const filesRewritten = events.reduce((sum, e) => sum + e.filesChanged, 0);
210
+ // Estimate cascade fix commits (rough heuristic: 2-5 fix commits per drift event)
211
+ const cascadeFixCommits = totalEvents * 3;
212
+ // Sum up estimated time lost
213
+ const totalWeeks = events.reduce((sum, e) => {
214
+ const match = e.estimatedCost.match(/(\d+)-?(\d+)?/);
215
+ if (match) {
216
+ const min = parseInt(match[1]);
217
+ const max = match[2] ? parseInt(match[2]) : min;
218
+ const avg = (min + max) / 2;
219
+ if (e.estimatedCost.includes('week')) {
220
+ return sum + avg;
221
+ }
222
+ else if (e.estimatedCost.includes('day')) {
223
+ return sum + (avg / 5); // Convert days to weeks
224
+ }
225
+ }
226
+ return sum;
227
+ }, 0);
228
+ const estimatedTimeLost = totalWeeks >= 1
229
+ ? `${Math.floor(totalWeeks)}-${Math.ceil(totalWeeks + 1)} weeks`
230
+ : `${Math.floor(totalWeeks * 5)}-${Math.ceil((totalWeeks + 0.5) * 5)} days`;
231
+ return {
232
+ totalEvents,
233
+ filesRewritten,
234
+ cascadeFixCommits,
235
+ estimatedTimeLost
236
+ };
237
+ }
238
+ /**
239
+ * Assess future drift risk
240
+ */
241
+ function assessFutureRisk(events) {
242
+ const recentEvents = events.filter(e => e.day > 0); // Rough filter
243
+ const highSeverityCount = events.filter(e => e.severity === 'high').length;
244
+ let level = 'low';
245
+ if (highSeverityCount >= 2 || recentEvents.length >= 4) {
246
+ level = 'high';
247
+ }
248
+ else if (highSeverityCount >= 1 || recentEvents.length >= 2) {
249
+ level = 'medium';
250
+ }
251
+ const inconsistencies = [];
252
+ const categoryCount = new Map();
253
+ for (const event of events) {
254
+ categoryCount.set(event.type, (categoryCount.get(event.type) || 0) + 1);
255
+ }
256
+ for (const [type, count] of categoryCount.entries()) {
257
+ if (count >= 2) {
258
+ inconsistencies.push(`Multiple ${type} changes (${count} detected)`);
259
+ }
260
+ }
261
+ const nextEventLikely = level === 'high'
262
+ ? '2-3 weeks'
263
+ : level === 'medium'
264
+ ? '1-2 months'
265
+ : '6+ months';
266
+ return {
267
+ level,
268
+ inconsistencies,
269
+ nextEventLikely
270
+ };
271
+ }
272
+ /**
273
+ * Generate .faf recommendations to prevent future drift
274
+ */
275
+ function generateRecommendations(events) {
276
+ const recommendations = {};
277
+ // Based on detected drift, suggest locked-in decisions
278
+ for (const event of events) {
279
+ if (event.type === 'auth' && !recommendations.auth) {
280
+ recommendations.auth = {
281
+ provider: 'supabase', // Example - would detect from final state
282
+ method: 'oauth'
283
+ };
284
+ }
285
+ if (event.type === 'state' && !recommendations.state) {
286
+ recommendations.state = {
287
+ library: 'zustand' // Example
288
+ };
289
+ }
290
+ if (event.type === 'styling' && !recommendations.styling) {
291
+ recommendations.styling = {
292
+ approach: 'tailwind' // Example
293
+ };
294
+ }
295
+ }
296
+ return recommendations;
297
+ }
298
+ /**
299
+ * Perform drift analysis
300
+ */
301
+ async function analyzeDrift(projectDir, options) {
302
+ const projectName = path_1.default.basename(projectDir);
303
+ // Get git data
304
+ const gitLog = getGitLog(projectDir, options.since);
305
+ const packageHistory = getPackageHistory(projectDir);
306
+ // Parse commits
307
+ const commits = parseGitLog(gitLog);
308
+ const totalCommits = commits.length;
309
+ const daysAnalyzed = commits.length > 0
310
+ ? Math.floor((new Date(commits[0].date).getTime() - new Date(commits[commits.length - 1].date).getTime()) / (1000 * 60 * 60 * 24))
311
+ : 0;
312
+ // Detect package changes
313
+ const packageChanges = detectPackageChanges(packageHistory);
314
+ // Detect drift events
315
+ const events = detectDriftEvents(commits, packageChanges);
316
+ // Get current .faf score
317
+ let currentFafScore = 0;
318
+ try {
319
+ const fafPath = await (0, file_utils_1.findFafFile)(projectDir);
320
+ if (fafPath) {
321
+ const compiler = new faf_compiler_1.FafCompiler();
322
+ const result = await compiler.compile(fafPath);
323
+ currentFafScore = result.score || 0;
324
+ }
325
+ }
326
+ catch {
327
+ // No .faf file
328
+ }
329
+ // Calculate summary
330
+ const summary = calculateSummary(events);
331
+ // Assess future risk
332
+ const futureRisk = assessFutureRisk(events);
333
+ // Generate recommendations
334
+ const fafRecommendations = generateRecommendations(events);
335
+ const weeksSaved = summary.estimatedTimeLost;
336
+ return {
337
+ project: projectName,
338
+ totalCommits,
339
+ daysAnalyzed,
340
+ currentFafScore,
341
+ events,
342
+ summary,
343
+ futureRisk,
344
+ prevention: {
345
+ fafRecommendations,
346
+ weeksSaved
347
+ }
348
+ };
349
+ }
350
+ /**
351
+ * Display drift analysis results
352
+ */
353
+ function displayDriftAnalysis(analysis) {
354
+ const { project, totalCommits, daysAnalyzed, currentFafScore, events, summary, futureRisk, prevention } = analysis;
355
+ console.log();
356
+ console.log(championship_style_1.FAF_COLORS.fafOrange('🍊 FAF DRIFT ANALYSIS'));
357
+ console.log();
358
+ console.log(`Project: ${championship_style_1.FAF_COLORS.fafCyan(project)}`);
359
+ console.log(`Analyzed: ${totalCommits} commits over ${daysAnalyzed} days`);
360
+ console.log(`Current .faf: ${currentFafScore > 0 ? `${currentFafScore}% ${getFafEmoji(currentFafScore)}` : 'None (0% 🤍)'}`);
361
+ console.log();
362
+ console.log(championship_style_1.FAF_COLORS.fafCyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
363
+ console.log();
364
+ if (events.length === 0) {
365
+ console.log(championship_style_1.FAF_COLORS.fafGreen('✓ No drift detected!'));
366
+ console.log();
367
+ console.log('Your project shows consistent architecture.');
368
+ console.log();
369
+ if (currentFafScore === 0) {
370
+ console.log(championship_style_1.FAF_COLORS.fafOrange('💡 Lock in your current decisions:'));
371
+ console.log(` ${championship_style_1.FAF_COLORS.fafCyan('faf init')} - Create .faf to prevent future drift`);
372
+ }
373
+ console.log();
374
+ return;
375
+ }
376
+ console.log(championship_style_1.FAF_COLORS.fafOrange('DETECTED DRIFT EVENTS:'));
377
+ console.log();
378
+ // Group events by type
379
+ const eventsByType = new Map();
380
+ for (const event of events) {
381
+ const list = eventsByType.get(event.type) || [];
382
+ list.push(event);
383
+ eventsByType.set(event.type, list);
384
+ }
385
+ // Display by type
386
+ for (const [type, typeEvents] of eventsByType.entries()) {
387
+ const emoji = getSeverityEmoji(typeEvents[0].severity);
388
+ const typeLabel = type.charAt(0).toUpperCase() + type.slice(1);
389
+ const changeSuffix = typeEvents.length > 1 ? 's' : '';
390
+ console.log(`${emoji} ${championship_style_1.FAF_COLORS.fafOrange(typeLabel + ' (' + typeEvents.length + ' change' + changeSuffix + ')')}`);
391
+ for (let i = 0; i < typeEvents.length; i++) {
392
+ const event = typeEvents[i];
393
+ const prefix = i === typeEvents.length - 1 ? '└─' : '├─';
394
+ console.log(' ' + championship_style_1.FAF_COLORS.fafCyan(prefix) + ' ' + event.description);
395
+ if (event.filesChanged > 0) {
396
+ console.log(' ' + event.filesChanged + ' files changed');
397
+ }
398
+ }
399
+ console.log(' Drift Cost: ' + championship_style_1.FAF_COLORS.fafOrange(typeEvents[0].estimatedCost));
400
+ console.log();
401
+ }
402
+ console.log(championship_style_1.FAF_COLORS.fafCyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
403
+ console.log();
404
+ console.log(championship_style_1.FAF_COLORS.fafOrange('DRIFT SUMMARY:'));
405
+ console.log();
406
+ console.log('Total Drift Events: ' + championship_style_1.FAF_COLORS.fafOrange(summary.totalEvents.toString()));
407
+ console.log('Files Rewritten: ' + championship_style_1.FAF_COLORS.fafOrange(summary.filesRewritten.toString()));
408
+ console.log('Cascade-Fix Commits: ' + championship_style_1.FAF_COLORS.fafOrange(summary.cascadeFixCommits.toString()));
409
+ console.log('Estimated Time Lost: ' + championship_style_1.FAF_COLORS.fafOrange(summary.estimatedTimeLost));
410
+ console.log();
411
+ console.log(championship_style_1.FAF_COLORS.fafCyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
412
+ console.log();
413
+ console.log(championship_style_1.FAF_COLORS.fafOrange('DRIFT RISK (Future):'));
414
+ console.log();
415
+ if (futureRisk.inconsistencies.length > 0) {
416
+ console.log('Current inconsistencies detected:');
417
+ for (const inconsistency of futureRisk.inconsistencies) {
418
+ console.log(` - ${inconsistency}`);
419
+ }
420
+ console.log();
421
+ }
422
+ const riskEmoji = futureRisk.level === 'high' ? '🔴' : futureRisk.level === 'medium' ? '🟡' : '🟢';
423
+ const riskLabel = futureRisk.level.toUpperCase();
424
+ console.log('Risk Level: ' + riskEmoji + ' ' + championship_style_1.FAF_COLORS.fafOrange(riskLabel));
425
+ console.log('Next drift event likely within: ' + futureRisk.nextEventLikely);
426
+ console.log();
427
+ console.log(championship_style_1.FAF_COLORS.fafCyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
428
+ console.log();
429
+ console.log(championship_style_1.FAF_COLORS.fafGreen('WITH .FAF FROM DAY 1:'));
430
+ console.log();
431
+ console.log('If you had defined in .faf:');
432
+ if (Object.keys(prevention.fafRecommendations).length > 0) {
433
+ for (const [key, value] of Object.entries(prevention.fafRecommendations)) {
434
+ console.log(` ${key}: ${JSON.stringify(value)}`);
435
+ }
436
+ }
437
+ else {
438
+ console.log(' Your architectural decisions locked in');
439
+ }
440
+ console.log();
441
+ console.log('You would have:');
442
+ console.log('✓ Zero rewrites (saved ' + championship_style_1.FAF_COLORS.fafGreen(prevention.weeksSaved) + ')');
443
+ console.log('✓ Consistent architecture from start');
444
+ console.log('✓ ' + summary.filesRewritten + ' files never rewritten');
445
+ console.log('✓ Project ' + summary.estimatedTimeLost + ' ahead');
446
+ console.log();
447
+ console.log(championship_style_1.FAF_COLORS.fafCyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
448
+ console.log();
449
+ console.log(championship_style_1.FAF_COLORS.fafOrange('STOP THE DRIFT:'));
450
+ console.log();
451
+ console.log(` ${championship_style_1.FAF_COLORS.fafCyan('faf init')} Create .faf to lock in decisions`);
452
+ console.log(` ${championship_style_1.FAF_COLORS.fafCyan('faf auto')} Auto-generate championship .faf`);
453
+ console.log(` ${championship_style_1.FAF_COLORS.fafCyan('faf drift --help')} Learn more`);
454
+ console.log();
455
+ console.log(championship_style_1.FAF_COLORS.fafOrange('Context-drift makes you pay.'));
456
+ console.log(championship_style_1.FAF_COLORS.fafGreen('.faf keeps you drift-free.'));
457
+ console.log();
458
+ }
459
+ /**
460
+ * Get emoji for .faf score
461
+ */
462
+ function getFafEmoji(score) {
463
+ if (score >= 85)
464
+ return '🏆';
465
+ if (score >= 70)
466
+ return '🥇';
467
+ if (score >= 55)
468
+ return '🥈';
469
+ if (score >= 40)
470
+ return '🥉';
471
+ if (score >= 35)
472
+ return '🟢';
473
+ if (score >= 20)
474
+ return '🟡';
475
+ if (score >= 10)
476
+ return '🔴';
477
+ return '🤍';
478
+ }
479
+ /**
480
+ * Get emoji for severity level
481
+ */
482
+ function getSeverityEmoji(severity) {
483
+ return severity === 'high' ? '🔴' : severity === 'medium' ? '🟡' : '🟢';
484
+ }
485
+ /**
486
+ * Main drift command handler
487
+ */
488
+ async function driftCommand(options = {}) {
489
+ try {
490
+ const projectDir = process.cwd();
491
+ // Check if git repo
492
+ if (!isGitRepo(projectDir)) {
493
+ console.log(colors_1.chalk.red('❌ Not a git repository'));
494
+ console.log(colors_1.chalk.dim('💡 faf drift requires git history to analyze'));
495
+ process.exit(1);
496
+ }
497
+ console.log();
498
+ console.log(championship_style_1.FAF_COLORS.fafOrange('🍊 Analyzing git history for context-drift...'));
499
+ console.log();
500
+ // Analyze drift
501
+ const analysis = await analyzeDrift(projectDir, options);
502
+ // Display results
503
+ displayDriftAnalysis(analysis);
504
+ // Export if requested
505
+ if (options.export) {
506
+ const exportPath = path_1.default.resolve(projectDir, options.export);
507
+ await fs_1.promises.writeFile(exportPath, JSON.stringify(analysis, null, 2), 'utf-8');
508
+ console.log(championship_style_1.FAF_COLORS.fafGreen(`✓ Analysis exported to: ${exportPath}`));
509
+ console.log();
510
+ }
511
+ }
512
+ catch (error) {
513
+ console.error(colors_1.chalk.red('❌ Error analyzing drift:'), error);
514
+ process.exit(1);
515
+ }
516
+ }
517
+ //# sourceMappingURL=drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 🏆 faf git - GitHub Repository Context Extractor
3
+ *
4
+ * Generate AI-ready context for ANY GitHub repo without cloning
5
+ *
6
+ * Features:
7
+ * - Shorthand resolution (react → facebook/react)
8
+ * - Fuzzy matching for typos (svelte → sveltejs/svelte)
9
+ * - Interactive selection for ambiguous queries
10
+ * - Rich metadata extraction (stars, topics, languages)
11
+ * - Quality scoring
12
+ * - Batch processing (compare multiple repos)
13
+ */
14
+ export interface GitOptions {
15
+ output?: string;
16
+ list?: boolean;
17
+ category?: string;
18
+ scan?: boolean;
19
+ clone?: boolean;
20
+ }
21
+ /**
22
+ * Main faf git command
23
+ */
24
+ export declare function gitCommand(query?: string, options?: any): Promise<void>;
25
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqCH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,iBA2HjE"}