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.
- package/README.md +275 -25
- package/dist/big-orange/compare.d.ts.map +1 -1
- package/dist/big-orange/compare.js +14 -16
- package/dist/big-orange/compare.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +137 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +69 -12
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +10 -3
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/drift.d.ts +16 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +517 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/git.d.ts +25 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +355 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +85 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rename.d.ts +18 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +211 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/taf-init.d.ts +14 -0
- package/dist/commands/taf-init.d.ts.map +1 -0
- package/dist/commands/taf-init.js +138 -0
- package/dist/commands/taf-init.js.map +1 -0
- package/dist/commands/taf-log.d.ts +30 -0
- package/dist/commands/taf-log.d.ts.map +1 -0
- package/dist/commands/taf-log.js +303 -0
- package/dist/commands/taf-log.js.map +1 -0
- package/dist/commands/taf-stats.d.ts +8 -0
- package/dist/commands/taf-stats.d.ts.map +1 -0
- package/dist/commands/taf-stats.js +133 -0
- package/dist/commands/taf-stats.js.map +1 -0
- package/dist/commands/taf-validate.d.ts +8 -0
- package/dist/commands/taf-validate.d.ts.map +1 -0
- package/dist/commands/taf-validate.js +108 -0
- package/dist/commands/taf-validate.js.map +1 -0
- package/dist/commands/taf.d.ts +13 -0
- package/dist/commands/taf.d.ts.map +1 -0
- package/dist/commands/taf.js +97 -0
- package/dist/commands/taf.js.map +1 -0
- package/dist/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +18 -0
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/generators/faf-generator-championship.d.ts.map +1 -1
- package/dist/generators/faf-generator-championship.js +1 -0
- package/dist/generators/faf-generator-championship.js.map +1 -1
- package/dist/github/github-extractor.d.ts +56 -0
- package/dist/github/github-extractor.d.ts.map +1 -0
- package/dist/github/github-extractor.js +328 -0
- package/dist/github/github-extractor.js.map +1 -0
- package/dist/github/popular-repos.d.ts +43 -0
- package/dist/github/popular-repos.d.ts.map +1 -0
- package/dist/github/popular-repos.js +205 -0
- package/dist/github/popular-repos.js.map +1 -0
- package/dist/github/repo-selector.d.ts +48 -0
- package/dist/github/repo-selector.d.ts.map +1 -0
- package/dist/github/repo-selector.js +277 -0
- package/dist/github/repo-selector.js.map +1 -0
- package/dist/taf/index.d.ts +17 -0
- package/dist/taf/index.d.ts.map +1 -0
- package/dist/taf/index.js +57 -0
- package/dist/taf/index.js.map +1 -0
- package/dist/taf/logger.d.ts +88 -0
- package/dist/taf/logger.d.ts.map +1 -0
- package/dist/taf/logger.js +137 -0
- package/dist/taf/logger.js.map +1 -0
- package/dist/taf/parser.d.ts +32 -0
- package/dist/taf/parser.d.ts.map +1 -0
- package/dist/taf/parser.js +161 -0
- package/dist/taf/parser.js.map +1 -0
- package/dist/taf/stats.d.ts +31 -0
- package/dist/taf/stats.d.ts.map +1 -0
- package/dist/taf/stats.js +182 -0
- package/dist/taf/stats.js.map +1 -0
- package/dist/taf/types.d.ts +77 -0
- package/dist/taf/types.d.ts.map +1 -0
- package/dist/taf/types.js +9 -0
- package/dist/taf/types.js.map +1 -0
- package/dist/taf/validator.d.ts +18 -0
- package/dist/taf/validator.d.ts.map +1 -0
- package/dist/taf/validator.js +148 -0
- package/dist/taf/validator.js.map +1 -0
- package/dist/utils/file-utils.d.ts +10 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +196 -33
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/native-file-finder.js +1 -1
- package/dist/utils/native-file-finder.js.map +1 -1
- package/dist/utils/yaml-generator.d.ts +1 -0
- package/dist/utils/yaml-generator.d.ts.map +1 -1
- package/dist/utils/yaml-generator.js +1 -0
- package/dist/utils/yaml-generator.js.map +1 -1
- 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"}
|