faf-cli 3.0.5 → 3.1.0
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 +238 -24
- package/assets/screenshots/package-json+project-faf.png +0 -0
- package/dist/big-orange/bigo-push.d.ts +18 -0
- package/dist/big-orange/bigo-push.d.ts.map +1 -0
- package/dist/big-orange/bigo-push.js +88 -0
- package/dist/big-orange/bigo-push.js.map +1 -0
- package/dist/big-orange/compare.d.ts +11 -0
- package/dist/big-orange/compare.d.ts.map +1 -0
- package/dist/big-orange/compare.js +172 -0
- package/dist/big-orange/compare.js.map +1 -0
- package/dist/big-orange/faf-generator.d.ts +22 -0
- package/dist/big-orange/faf-generator.d.ts.map +1 -0
- package/dist/big-orange/faf-generator.js +215 -0
- package/dist/big-orange/faf-generator.js.map +1 -0
- package/dist/big-orange/index.d.ts +7 -0
- package/dist/big-orange/index.d.ts.map +1 -0
- package/dist/big-orange/index.js +96 -0
- package/dist/big-orange/index.js.map +1 -0
- package/dist/big-orange/types.d.ts +62 -0
- package/dist/big-orange/types.d.ts.map +1 -0
- package/dist/big-orange/types.js +7 -0
- package/dist/big-orange/types.js.map +1 -0
- 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 +27 -0
- package/dist/commands/taf-log.d.ts.map +1 -0
- package/dist/commands/taf-log.js +241 -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 +85 -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 +86 -0
- package/dist/taf/logger.d.ts.map +1 -0
- package/dist/taf/logger.js +135 -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 +66 -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 +12 -4
- package/dist/commands/create.d.ts +0 -13
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -78
- package/dist/commands/create.js.map +0 -1
- package/dist/core/platform-adapters.d.ts +0 -76
- package/dist/core/platform-adapters.d.ts.map +0 -1
- package/dist/core/platform-adapters.js +0 -407
- package/dist/core/platform-adapters.js.map +0 -1
- package/dist/core/universal-intelligence-generator.d.ts +0 -156
- package/dist/core/universal-intelligence-generator.d.ts.map +0 -1
- package/dist/core/universal-intelligence-generator.js +0 -352
- package/dist/core/universal-intelligence-generator.js.map +0 -1
- package/dist/enrichment/auto-corrector.d.ts +0 -28
- package/dist/enrichment/auto-corrector.d.ts.map +0 -1
- package/dist/enrichment/auto-corrector.js +0 -106
- package/dist/enrichment/auto-corrector.js.map +0 -1
- package/dist/enrichment/n8n-analyzer.d.ts +0 -259
- package/dist/enrichment/n8n-analyzer.d.ts.map +0 -1
- package/dist/enrichment/n8n-analyzer.js +0 -346
- package/dist/enrichment/n8n-analyzer.js.map +0 -1
- package/dist/enrichment/n8n-faf-generator.d.ts +0 -68
- package/dist/enrichment/n8n-faf-generator.d.ts.map +0 -1
- package/dist/enrichment/n8n-faf-generator.js +0 -354
- package/dist/enrichment/n8n-faf-generator.js.map +0 -1
- package/dist/enrichment/question-asker.d.ts +0 -22
- package/dist/enrichment/question-asker.d.ts.map +0 -1
- package/dist/enrichment/question-asker.js +0 -113
- package/dist/enrichment/question-asker.js.map +0 -1
- package/dist/enrichment/slot-filler.d.ts +0 -73
- package/dist/enrichment/slot-filler.d.ts.map +0 -1
- package/dist/enrichment/slot-filler.js +0 -253
- package/dist/enrichment/slot-filler.js.map +0 -1
- package/dist/scoring/championship-scorer.d.ts +0 -114
- package/dist/scoring/championship-scorer.d.ts.map +0 -1
- package/dist/scoring/championship-scorer.js +0 -380
- package/dist/scoring/championship-scorer.js.map +0 -1
- package/dist/scoring/score-calculator.d.ts +0 -29
- package/dist/scoring/score-calculator.d.ts.map +0 -1
- package/dist/scoring/score-calculator.js +0 -520
- package/dist/scoring/score-calculator.js.map +0 -1
- package/dist/tests/manual-validation.d.ts +0 -8
- package/dist/tests/manual-validation.d.ts.map +0 -1
- package/dist/tests/manual-validation.js +0 -114
- package/dist/tests/manual-validation.js.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIG ORANGE 🍊 - REAL .faf Instance Generator
|
|
3
|
+
* Generates .faf files at different completeness levels using ACTUAL .faf format
|
|
4
|
+
* Based on faf-cli.faf structure
|
|
5
|
+
*/
|
|
6
|
+
import type { FafInstance } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a .faf instance at a specific completeness score
|
|
9
|
+
* Uses real .faf YAML format with slot-based scoring
|
|
10
|
+
*
|
|
11
|
+
* @param score - Completeness level (0-100)
|
|
12
|
+
* @param projectPath - Optional project path for analysis
|
|
13
|
+
* @returns FafInstance with generated YAML content
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateFafInstance(score: number, projectPath?: string): Promise<FafInstance>;
|
|
16
|
+
/**
|
|
17
|
+
* Calculate a project's current .faf birth score
|
|
18
|
+
* @param projectPath - Path to project
|
|
19
|
+
* @returns Birth score (0-100)
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateBirthScore(projectPath: string): Promise<number>;
|
|
22
|
+
//# sourceMappingURL=faf-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faf-generator.d.ts","sourceRoot":"","sources":["../../src/big-orange/faf-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAuMtB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BIG ORANGE 🍊 - REAL .faf Instance Generator
|
|
4
|
+
* Generates .faf files at different completeness levels using ACTUAL .faf format
|
|
5
|
+
* Based on faf-cli.faf structure
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateFafInstance = generateFafInstance;
|
|
9
|
+
exports.calculateBirthScore = calculateBirthScore;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a .faf instance at a specific completeness score
|
|
12
|
+
* Uses real .faf YAML format with slot-based scoring
|
|
13
|
+
*
|
|
14
|
+
* @param score - Completeness level (0-100)
|
|
15
|
+
* @param projectPath - Optional project path for analysis
|
|
16
|
+
* @returns FafInstance with generated YAML content
|
|
17
|
+
*/
|
|
18
|
+
async function generateFafInstance(score, projectPath) {
|
|
19
|
+
if (score === 0) {
|
|
20
|
+
return {
|
|
21
|
+
score: 0,
|
|
22
|
+
content: '',
|
|
23
|
+
metadata: {}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Calculate slots based on score
|
|
27
|
+
// Real .faf has 21 total slots
|
|
28
|
+
const totalSlots = 21;
|
|
29
|
+
const filledSlots = Math.round((score / 100) * totalSlots);
|
|
30
|
+
const slotPercentage = Math.round((filledSlots / totalSlots) * 100);
|
|
31
|
+
// Build .faf content as YAML
|
|
32
|
+
const sections = [];
|
|
33
|
+
// ALWAYS include (even at low scores)
|
|
34
|
+
sections.push(`faf_version: "2.5.0"`);
|
|
35
|
+
sections.push(`ai_scoring_system: "2025-09-20"`);
|
|
36
|
+
sections.push(`ai_score: "${score}%"`);
|
|
37
|
+
// Score 10%+: Add confidence and value
|
|
38
|
+
if (score >= 10) {
|
|
39
|
+
const confidence = score >= 70 ? 'HIGH' : score >= 40 ? 'MEDIUM' : 'LOW';
|
|
40
|
+
sections.push(`ai_confidence: ${confidence}`);
|
|
41
|
+
sections.push(`ai_value: "${score >= 80 ? '30_seconds_replaces_20_minutes' : 'reduced_questions'}"`);
|
|
42
|
+
}
|
|
43
|
+
// Score 20%+: Add ai_tldr
|
|
44
|
+
if (score >= 20) {
|
|
45
|
+
sections.push(`ai_tldr:`);
|
|
46
|
+
sections.push(` project: "Demo Project - Color Picker Component"`);
|
|
47
|
+
sections.push(` stack: ${score >= 50 ? 'React/TypeScript/Vite/Vercel' : 'React'}`);
|
|
48
|
+
sections.push(` quality_bar: ${score >= 80 ? 'ZERO_ERRORS_F1_STANDARDS' : 'STANDARD'}`);
|
|
49
|
+
sections.push(` current_focus: Component development`);
|
|
50
|
+
sections.push(` your_role: Build features with ${score >= 60 ? 'perfect' : 'available'} context`);
|
|
51
|
+
}
|
|
52
|
+
// Score 30%+: Add instant_context
|
|
53
|
+
if (score >= 30) {
|
|
54
|
+
sections.push(`instant_context:`);
|
|
55
|
+
sections.push(` what_building: "Color picker component"`);
|
|
56
|
+
sections.push(` tech_stack: React${score >= 50 ? '/TypeScript/Vite' : ''}`);
|
|
57
|
+
sections.push(` main_language: ${score >= 40 ? 'TypeScript' : 'JavaScript'}`);
|
|
58
|
+
if (score >= 50) {
|
|
59
|
+
sections.push(` deployment: Vercel`);
|
|
60
|
+
sections.push(` key_files:`);
|
|
61
|
+
sections.push(` - package.json`);
|
|
62
|
+
sections.push(` - tsconfig.json`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Score 40%+: Add context_quality
|
|
66
|
+
if (score >= 40) {
|
|
67
|
+
sections.push(`context_quality:`);
|
|
68
|
+
sections.push(` slots_filled: "${filledSlots}/${totalSlots} (${slotPercentage}%)"`);
|
|
69
|
+
sections.push(` ai_confidence: ${score >= 70 ? 'HIGH' : 'MEDIUM'}`);
|
|
70
|
+
sections.push(` handoff_ready: ${score >= 70 ? 'true' : 'false'}`);
|
|
71
|
+
if (score < 90) {
|
|
72
|
+
sections.push(` missing_context:`);
|
|
73
|
+
sections.push(` - ${score < 60 ? 'Project structure' : 'Performance metrics'}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Score 50%+: Add project section
|
|
77
|
+
if (score >= 50) {
|
|
78
|
+
sections.push(`project:`);
|
|
79
|
+
sections.push(` name: Demo Color Picker`);
|
|
80
|
+
sections.push(` goal: "Build reusable color picker component"`);
|
|
81
|
+
sections.push(` main_language: TypeScript`);
|
|
82
|
+
sections.push(` generated: "${new Date().toISOString()}"`);
|
|
83
|
+
if (score >= 80) {
|
|
84
|
+
sections.push(` mission: "🚀 Make Your AI Happy! 🧡 Trust-Driven 🤖"`);
|
|
85
|
+
sections.push(` revolution: "30 seconds replaces 20 minutes of questions"`);
|
|
86
|
+
sections.push(` brand: "F1-Inspired Software Engineering - Championship AI Context"`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Score 60%+: Add ai_instructions
|
|
90
|
+
if (score >= 60) {
|
|
91
|
+
sections.push(`ai_instructions:`);
|
|
92
|
+
sections.push(` priority_order:`);
|
|
93
|
+
sections.push(` - "1. Read THIS .faf file first"`);
|
|
94
|
+
if (score >= 70) {
|
|
95
|
+
sections.push(` - "2. Check CLAUDE.md for session context"`);
|
|
96
|
+
sections.push(` - "3. Review package.json for dependencies"`);
|
|
97
|
+
}
|
|
98
|
+
sections.push(` working_style:`);
|
|
99
|
+
sections.push(` code_first: true`);
|
|
100
|
+
sections.push(` explanations: minimal`);
|
|
101
|
+
sections.push(` quality_bar: ${score >= 80 ? 'zero_errors' : 'standard'}`);
|
|
102
|
+
sections.push(` testing: ${score >= 70 ? 'required' : 'recommended'}`);
|
|
103
|
+
if (score >= 80) {
|
|
104
|
+
sections.push(` warnings:`);
|
|
105
|
+
sections.push(` - All TypeScript must pass strict mode`);
|
|
106
|
+
sections.push(` - Test coverage required for new features`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Score 70%+: Add stack
|
|
110
|
+
if (score >= 70) {
|
|
111
|
+
sections.push(`stack:`);
|
|
112
|
+
sections.push(` frontend: React`);
|
|
113
|
+
sections.push(` css_framework: Tailwind CSS`);
|
|
114
|
+
sections.push(` ui_library: Headless UI`);
|
|
115
|
+
sections.push(` state_management: React Hooks`);
|
|
116
|
+
sections.push(` backend: None`);
|
|
117
|
+
sections.push(` runtime: "Node.js >=18.0.0"`);
|
|
118
|
+
sections.push(` database: None`);
|
|
119
|
+
sections.push(` build: Vite`);
|
|
120
|
+
sections.push(` package_manager: npm`);
|
|
121
|
+
sections.push(` api_type: Component Library`);
|
|
122
|
+
sections.push(` hosting: Vercel`);
|
|
123
|
+
if (score >= 85) {
|
|
124
|
+
sections.push(` cicd: GitHub Actions`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Score 80%+: Add preferences
|
|
128
|
+
if (score >= 80) {
|
|
129
|
+
sections.push(`preferences:`);
|
|
130
|
+
sections.push(` quality_bar: zero_errors`);
|
|
131
|
+
sections.push(` commit_style: conventional_emoji`);
|
|
132
|
+
sections.push(` response_style: concise_code_first`);
|
|
133
|
+
sections.push(` explanation_level: minimal`);
|
|
134
|
+
sections.push(` communication: direct`);
|
|
135
|
+
sections.push(` testing: required`);
|
|
136
|
+
sections.push(` documentation: as_needed`);
|
|
137
|
+
}
|
|
138
|
+
// Score 85%+: Add state
|
|
139
|
+
if (score >= 85) {
|
|
140
|
+
sections.push(`state:`);
|
|
141
|
+
sections.push(` phase: development`);
|
|
142
|
+
sections.push(` version: "1.0.0"`);
|
|
143
|
+
sections.push(` focus: component_implementation`);
|
|
144
|
+
sections.push(` status: green_flag`);
|
|
145
|
+
sections.push(` next_milestone: production_ready`);
|
|
146
|
+
sections.push(` blockers:`);
|
|
147
|
+
}
|
|
148
|
+
// Score 90%+: Add tags
|
|
149
|
+
if (score >= 90) {
|
|
150
|
+
sections.push(`tags:`);
|
|
151
|
+
sections.push(` auto_generated:`);
|
|
152
|
+
sections.push(` - react`);
|
|
153
|
+
sections.push(` - typescript`);
|
|
154
|
+
sections.push(` - component`);
|
|
155
|
+
sections.push(` - color-picker`);
|
|
156
|
+
sections.push(` smart_defaults:`);
|
|
157
|
+
sections.push(` - .faf`);
|
|
158
|
+
sections.push(` - ai-ready`);
|
|
159
|
+
sections.push(` - "2025"`);
|
|
160
|
+
sections.push(` user_defined:`);
|
|
161
|
+
}
|
|
162
|
+
// Score 95%+: Add human_context
|
|
163
|
+
if (score >= 95) {
|
|
164
|
+
sections.push(`human_context:`);
|
|
165
|
+
sections.push(` who: Development team`);
|
|
166
|
+
sections.push(` what: "Reusable color picker component for design system"`);
|
|
167
|
+
sections.push(` why: Standardize color selection across applications`);
|
|
168
|
+
sections.push(` where: Component library`);
|
|
169
|
+
sections.push(` when: "Active development"`);
|
|
170
|
+
sections.push(` how: "TypeScript React component with accessibility"`);
|
|
171
|
+
sections.push(` context_score: ${slotPercentage}`);
|
|
172
|
+
sections.push(` total_prd_score: ${score}`);
|
|
173
|
+
sections.push(` success_rate: "95%"`);
|
|
174
|
+
}
|
|
175
|
+
// Score 99%+: Add ai_scoring_details (championship level)
|
|
176
|
+
if (score >= 99) {
|
|
177
|
+
sections.push(`ai_scoring_details:`);
|
|
178
|
+
sections.push(` system_date: "2025-09-20"`);
|
|
179
|
+
sections.push(` slot_based_percentage: ${slotPercentage}`);
|
|
180
|
+
sections.push(` ai_score: ${score}`);
|
|
181
|
+
sections.push(` total_slots: ${totalSlots}`);
|
|
182
|
+
sections.push(` filled_slots: ${filledSlots}`);
|
|
183
|
+
sections.push(` scoring_method: "Honest percentage - no fake minimums"`);
|
|
184
|
+
sections.push(` trust_embedded: "COUNT ONCE architecture - trust MY embedded scores"`);
|
|
185
|
+
}
|
|
186
|
+
const content = sections.join('\n');
|
|
187
|
+
return {
|
|
188
|
+
score,
|
|
189
|
+
content,
|
|
190
|
+
metadata: {
|
|
191
|
+
framework: 'React',
|
|
192
|
+
language: 'TypeScript',
|
|
193
|
+
styling: 'Tailwind CSS',
|
|
194
|
+
quality_bar: score >= 80 ? 'ZERO_ERRORS_F1_STANDARDS' : 'STANDARD',
|
|
195
|
+
slots_filled: filledSlots,
|
|
196
|
+
total_slots: totalSlots
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Calculate a project's current .faf birth score
|
|
202
|
+
* @param projectPath - Path to project
|
|
203
|
+
* @returns Birth score (0-100)
|
|
204
|
+
*/
|
|
205
|
+
async function calculateBirthScore(projectPath) {
|
|
206
|
+
// TODO: Implement actual .faf file analysis
|
|
207
|
+
// This would:
|
|
208
|
+
// 1. Check if .faf exists
|
|
209
|
+
// 2. Parse the YAML
|
|
210
|
+
// 3. Count filled slots
|
|
211
|
+
// 4. Calculate score based on slot completeness
|
|
212
|
+
// For now, return placeholder
|
|
213
|
+
return 42;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=faf-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faf-generator.js","sourceRoot":"","sources":["../../src/big-orange/faf-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/big-orange/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* BIG ORANGE 🍊 - CLI Command
|
|
5
|
+
* Compare AI responses at different .faf scores
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const commander_1 = require("commander");
|
|
12
|
+
const compare_1 = require("./compare");
|
|
13
|
+
const bigo_push_1 = require("./bigo-push");
|
|
14
|
+
const faf_generator_1 = require("./faf-generator");
|
|
15
|
+
const open_1 = __importDefault(require("open"));
|
|
16
|
+
const program = new commander_1.Command();
|
|
17
|
+
program
|
|
18
|
+
.name('big-orange')
|
|
19
|
+
.description('🍊 Compare AI responses at different .faf context levels')
|
|
20
|
+
.version('1.0.0');
|
|
21
|
+
program
|
|
22
|
+
.command('compare')
|
|
23
|
+
.description('Run side-by-side comparison')
|
|
24
|
+
.argument('[project-path]', 'Path to project to analyze', process.cwd())
|
|
25
|
+
.option('-l, --left <score>', 'Left window .faf score (0-100)', '0')
|
|
26
|
+
.option('-r, --right <score>', 'Right window .faf score (0-100)', '99')
|
|
27
|
+
.option('-p, --prompt <text>', 'Instruction to give both AI instances', 'Build me a color picker component')
|
|
28
|
+
.option('--no-visualize', 'Skip opening browser to view results')
|
|
29
|
+
.action(async (projectPath, options) => {
|
|
30
|
+
console.log('\n🍊 BIG ORANGE - Context Matters\n');
|
|
31
|
+
console.log('═'.repeat(60));
|
|
32
|
+
try {
|
|
33
|
+
// Parse scores
|
|
34
|
+
const leftScore = parseInt(options.left);
|
|
35
|
+
const rightScore = parseInt(options.right);
|
|
36
|
+
// Validate
|
|
37
|
+
if (isNaN(leftScore) || leftScore < 0 || leftScore > 100) {
|
|
38
|
+
throw new Error('Left score must be 0-100');
|
|
39
|
+
}
|
|
40
|
+
if (isNaN(rightScore) || rightScore < 0 || rightScore > 100) {
|
|
41
|
+
throw new Error('Right score must be 0-100');
|
|
42
|
+
}
|
|
43
|
+
// Analyze project (if path provided)
|
|
44
|
+
if (projectPath && projectPath !== process.cwd()) {
|
|
45
|
+
console.log(`\nAnalyzing project: ${projectPath}`);
|
|
46
|
+
const birthScore = await (0, faf_generator_1.calculateBirthScore)(projectPath);
|
|
47
|
+
console.log(`Birth score: ${birthScore}%`);
|
|
48
|
+
}
|
|
49
|
+
console.log('\n');
|
|
50
|
+
// Run comparison
|
|
51
|
+
const results = await (0, compare_1.compareContexts)({
|
|
52
|
+
projectPath,
|
|
53
|
+
leftScore,
|
|
54
|
+
rightScore,
|
|
55
|
+
prompt: options.prompt
|
|
56
|
+
});
|
|
57
|
+
// Push to Big🍊
|
|
58
|
+
console.log('Pushing to Big🍊...');
|
|
59
|
+
const url = await (0, bigo_push_1.pushToBigO)(results);
|
|
60
|
+
// Display results
|
|
61
|
+
console.log('\n═'.repeat(60));
|
|
62
|
+
console.log('\n✅ COMPARISON COMPLETE\n');
|
|
63
|
+
console.log(`Session ID: ${results.sessionId}`);
|
|
64
|
+
console.log(`\nResults:`);
|
|
65
|
+
console.log(` Left (${leftScore}%): ${results.leftWindow.emoji} ${results.leftWindow.timeToComplete.toFixed(1)}s`);
|
|
66
|
+
console.log(` Right (${rightScore}%): ${results.rightWindow.emoji} ${results.rightWindow.timeToComplete.toFixed(1)}s`);
|
|
67
|
+
console.log(`\nDelta: ${results.delta.verdict}`);
|
|
68
|
+
console.log(`\nView at: ${url}\n`);
|
|
69
|
+
// Open browser
|
|
70
|
+
if (options.visualize) {
|
|
71
|
+
console.log('Opening Big🍊 in browser...\n');
|
|
72
|
+
await (0, open_1.default)(url);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('\n❌ Error:', error instanceof Error ? error.message : error);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
program
|
|
81
|
+
.command('demo')
|
|
82
|
+
.description('Run demo comparison with default settings')
|
|
83
|
+
.action(async () => {
|
|
84
|
+
console.log('\n🍊 Running Big Orange Demo\n');
|
|
85
|
+
const results = await (0, compare_1.compareContexts)({
|
|
86
|
+
leftScore: 0,
|
|
87
|
+
rightScore: 99,
|
|
88
|
+
prompt: 'Build me a color picker component'
|
|
89
|
+
});
|
|
90
|
+
const url = await (0, bigo_push_1.pushToBigO)(results);
|
|
91
|
+
console.log(`\n✅ Demo complete!\n`);
|
|
92
|
+
console.log(`View at: ${url}\n`);
|
|
93
|
+
await (0, open_1.default)(url);
|
|
94
|
+
});
|
|
95
|
+
program.parse();
|
|
96
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/big-orange/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIG ORANGE 🍊 - Core Types
|
|
3
|
+
* Domain model for .faf context comparison
|
|
4
|
+
*/
|
|
5
|
+
export interface ProjectAnalysis {
|
|
6
|
+
path: string;
|
|
7
|
+
birthScore: number;
|
|
8
|
+
championshipScore: number;
|
|
9
|
+
gaps: Gap[];
|
|
10
|
+
timestamp: Date;
|
|
11
|
+
}
|
|
12
|
+
export interface Gap {
|
|
13
|
+
category: string;
|
|
14
|
+
severity: 'critical' | 'major' | 'minor';
|
|
15
|
+
description: string;
|
|
16
|
+
impact: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ComparisonRequest {
|
|
19
|
+
projectPath?: string;
|
|
20
|
+
leftScore: number;
|
|
21
|
+
rightScore: number;
|
|
22
|
+
prompt: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ComparisonResults {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
timestamp: Date;
|
|
27
|
+
projectAnalysis?: ProjectAnalysis;
|
|
28
|
+
leftWindow: WindowResults;
|
|
29
|
+
rightWindow: WindowResults;
|
|
30
|
+
delta: DeltaMetrics;
|
|
31
|
+
}
|
|
32
|
+
export interface WindowResults {
|
|
33
|
+
fafScore: number;
|
|
34
|
+
aiResponse: string;
|
|
35
|
+
timeToComplete: number;
|
|
36
|
+
emoji: string;
|
|
37
|
+
fafMetadata?: {
|
|
38
|
+
filled: number;
|
|
39
|
+
total: number;
|
|
40
|
+
checksum: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface DeltaMetrics {
|
|
44
|
+
timeSaved: number;
|
|
45
|
+
scoreImprovement: number;
|
|
46
|
+
verdict: string;
|
|
47
|
+
}
|
|
48
|
+
export interface FafInstance {
|
|
49
|
+
score: number;
|
|
50
|
+
content: string;
|
|
51
|
+
metadata: {
|
|
52
|
+
framework?: string;
|
|
53
|
+
language?: string;
|
|
54
|
+
styling?: string;
|
|
55
|
+
patterns?: string[];
|
|
56
|
+
conventions?: string[];
|
|
57
|
+
quality_bar?: string;
|
|
58
|
+
slots_filled?: number;
|
|
59
|
+
total_slots?: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/big-orange/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,EAAE,aAAa,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/big-orange/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA89C/C,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -77,6 +77,11 @@ const chat_1 = require("./commands/chat");
|
|
|
77
77
|
const convert_1 = require("./commands/convert");
|
|
78
78
|
const notifications_1 = require("./commands/notifications");
|
|
79
79
|
const skills_1 = require("./commands/skills");
|
|
80
|
+
const drift_1 = require("./commands/drift");
|
|
81
|
+
const git_1 = require("./commands/git");
|
|
82
|
+
const taf_1 = require("./commands/taf");
|
|
83
|
+
const migrate_1 = require("./commands/migrate");
|
|
84
|
+
const rename_1 = require("./commands/rename");
|
|
80
85
|
const color_utils_1 = require("./utils/color-utils");
|
|
81
86
|
const championship_style_1 = require("./utils/championship-style");
|
|
82
87
|
const analytics_1 = require("./telemetry/analytics");
|
|
@@ -207,6 +212,38 @@ Examples:
|
|
|
207
212
|
console.log('');
|
|
208
213
|
return (0, init_1.initFafFile)(directory, options);
|
|
209
214
|
}));
|
|
215
|
+
// 🔄 faf migrate - Migrate .faf to project.faf (v1.2.0)
|
|
216
|
+
commander_1.program
|
|
217
|
+
.command('migrate [directory]')
|
|
218
|
+
.description('Migrate .faf (legacy) to project.faf (v1.2.0 standard)')
|
|
219
|
+
.option('-f, --force', 'Overwrite existing project.faf file')
|
|
220
|
+
.option('--dry-run', 'Preview migration without making changes')
|
|
221
|
+
.addHelpText('after', `
|
|
222
|
+
Examples:
|
|
223
|
+
$ faf migrate # Migrate .faf to project.faf
|
|
224
|
+
$ faf migrate --dry-run # Preview migration
|
|
225
|
+
$ faf migrate --force # Overwrite existing project.faf
|
|
226
|
+
|
|
227
|
+
v1.2.0: project.faf is the new standard (visible, like package.json)`)
|
|
228
|
+
.action(withAnalyticsTracking('migrate', (directory, options) => (0, migrate_1.migrateCommand)(directory, options)));
|
|
229
|
+
// 🔄 faf rename - Bulk migration across multiple projects
|
|
230
|
+
commander_1.program
|
|
231
|
+
.command('rename [path]')
|
|
232
|
+
.description('Bulk migrate all .faf files to project.faf recursively')
|
|
233
|
+
.option('-f, --force', 'Overwrite existing project.faf files')
|
|
234
|
+
.option('--dry-run', 'Preview migration without making changes')
|
|
235
|
+
.option('--no-confirm', 'Skip confirmation for large migrations')
|
|
236
|
+
.option('--max-depth <number>', 'Maximum directory depth to search', '10')
|
|
237
|
+
.addHelpText('after', `
|
|
238
|
+
Examples:
|
|
239
|
+
$ faf rename ~/Projects # Migrate all repos in ~/Projects
|
|
240
|
+
$ faf rename . --dry-run # Preview what would be migrated
|
|
241
|
+
$ faf rename ~/code --force # Overwrite existing project.faf files
|
|
242
|
+
$ faf rename --no-confirm # Skip confirmation prompt
|
|
243
|
+
|
|
244
|
+
Power user tool: Migrate your entire system in one command!
|
|
245
|
+
Searches recursively and renames all .faf → project.faf`)
|
|
246
|
+
.action(withAnalyticsTracking('rename', (searchPath, options) => (0, rename_1.renameCommand)(searchPath, options)));
|
|
210
247
|
// 🧬 faf dna - Show your journey at a glance
|
|
211
248
|
commander_1.program
|
|
212
249
|
.command('dna')
|
|
@@ -465,6 +502,69 @@ Integrations:
|
|
|
465
502
|
• MCP server recommendations per stack
|
|
466
503
|
• Quality-gated: 85% minimum (Bronze tier)`)
|
|
467
504
|
.action(withAnalyticsTracking('fam', (subcommand, arg, options) => (0, fam_1.famCommand)(subcommand, arg, options)));
|
|
505
|
+
// 🚀 faf git - GitHub Repository Context Extractor
|
|
506
|
+
commander_1.program
|
|
507
|
+
.command('git [query]')
|
|
508
|
+
.description('🚀 Generate AI context for ANY GitHub repo without cloning')
|
|
509
|
+
.option('-o, --output <path>', 'Output path for .faf file')
|
|
510
|
+
.option('--list', 'Show popular repositories')
|
|
511
|
+
.option('--category <category>', 'Filter popular repos by category')
|
|
512
|
+
.option('--scan', 'Metadata only (skip file tree)')
|
|
513
|
+
.option('--clone', 'Clone repo after generating .faf')
|
|
514
|
+
.addHelpText('after', `
|
|
515
|
+
Examples:
|
|
516
|
+
$ faf git react # Shorthand: facebook/react
|
|
517
|
+
$ faf git svelte # Auto-resolve: sveltejs/svelte
|
|
518
|
+
$ faf git facebook/react # owner/repo format
|
|
519
|
+
$ faf git https://github.com/... # Full URL
|
|
520
|
+
$ faf git --list # Show popular repos
|
|
521
|
+
$ faf git --list --category auth # Show auth libraries
|
|
522
|
+
|
|
523
|
+
# Batch processing (comparison mode)
|
|
524
|
+
$ faf git react vue svelte # Compare multiple repos
|
|
525
|
+
|
|
526
|
+
🚀 Use Cases:
|
|
527
|
+
• Get AI context for libraries you DON'T own
|
|
528
|
+
• Compare repos before choosing one
|
|
529
|
+
• Understand architecture before cloning
|
|
530
|
+
• Ask AI about ANY repo instantly
|
|
531
|
+
|
|
532
|
+
Features:
|
|
533
|
+
• ⚡ <200ms extraction (no clone needed)
|
|
534
|
+
• 🔍 Fuzzy matching for typos (svelt → svelte)
|
|
535
|
+
• 📊 Rich metadata (stars, topics, languages)
|
|
536
|
+
• 🏆 Quality scoring (0-100%)
|
|
537
|
+
• 🎯 Smart shorthand (react → facebook/react)`)
|
|
538
|
+
.action(withAnalyticsTracking('git', (query, options) => (0, git_1.gitCommand)(query, options)));
|
|
539
|
+
// 📊 faf taf - Testing Activity Feed
|
|
540
|
+
commander_1.program
|
|
541
|
+
.command('taf')
|
|
542
|
+
.description('📊 Testing Activity Feed - Git-friendly testing timeline')
|
|
543
|
+
.addHelpText('after', `
|
|
544
|
+
Subcommands:
|
|
545
|
+
init Initialize .taf file
|
|
546
|
+
log Log a test run
|
|
547
|
+
validate Validate .taf format
|
|
548
|
+
stats Show test statistics
|
|
549
|
+
|
|
550
|
+
Examples:
|
|
551
|
+
$ faf taf init # Create .taf file
|
|
552
|
+
$ faf taf log --total 173 --passed 173 --failed 0
|
|
553
|
+
$ faf taf validate # Check format
|
|
554
|
+
$ faf taf stats # View statistics
|
|
555
|
+
|
|
556
|
+
Features:
|
|
557
|
+
• 📝 Git-friendly YAML format (append-only)
|
|
558
|
+
• 🔗 Native Reference with .faf
|
|
559
|
+
• 🏆 Podium scoring (🏆 🥇 🥈 🥉)
|
|
560
|
+
• 📊 Pass rate tracking and trends
|
|
561
|
+
• ⚡ Lightweight (5-60 lines per run)`)
|
|
562
|
+
.action(withAnalyticsTracking('taf', () => {
|
|
563
|
+
// Get raw arguments after 'taf' command
|
|
564
|
+
const tafIndex = process.argv.indexOf('taf');
|
|
565
|
+
const args = tafIndex >= 0 ? process.argv.slice(tafIndex + 1) : [];
|
|
566
|
+
return (0, taf_1.tafCommand)(args);
|
|
567
|
+
}));
|
|
468
568
|
// 📚 faf index - Universal A-Z Reference (The Everything Catalog)
|
|
469
569
|
commander_1.program
|
|
470
570
|
.command('index [term]')
|
|
@@ -879,7 +979,43 @@ Claude Code Consistency:
|
|
|
879
979
|
• Fresh start for .faf system
|
|
880
980
|
• Removes temporary files and cached data`)
|
|
881
981
|
.action((options) => (0, clear_1.clearCommand)(options));
|
|
882
|
-
//
|
|
982
|
+
// 🍊 faf drift - Context-Drift Analyzer
|
|
983
|
+
commander_1.program
|
|
984
|
+
.command('drift')
|
|
985
|
+
.description('🍊 Analyze git history for context-drift - Context-drift makes you pay')
|
|
986
|
+
.option('--since <period>', 'Analyze drift since period (e.g., "90d", "6m")')
|
|
987
|
+
.option('--detailed', 'Show detailed breakdown of drift events')
|
|
988
|
+
.option('--export <file>', 'Export analysis to JSON file')
|
|
989
|
+
.addHelpText('after', `
|
|
990
|
+
Examples:
|
|
991
|
+
$ faf drift # Analyze entire git history
|
|
992
|
+
$ faf drift --since 90d # Last 90 days only
|
|
993
|
+
$ faf drift --detailed # Full breakdown
|
|
994
|
+
$ faf drift --export drift.json # Save to file
|
|
995
|
+
|
|
996
|
+
What is Context-Drift?
|
|
997
|
+
• AI makes decisions without project context
|
|
998
|
+
• Each guess creates drift from your true architecture
|
|
999
|
+
• Drift compounds: auth → state → styling → framework
|
|
1000
|
+
• Eventually: rewrites, migrations, or project death
|
|
1001
|
+
|
|
1002
|
+
What faf drift detects:
|
|
1003
|
+
• Auth system changes (JWT → Firebase → Supabase)
|
|
1004
|
+
• State management swaps (Redux → Zustand)
|
|
1005
|
+
• Styling migrations (CSS → Tailwind)
|
|
1006
|
+
• Framework changes (React → Next.js)
|
|
1007
|
+
• Database migrations (MongoDB → Postgres)
|
|
1008
|
+
|
|
1009
|
+
Shows you:
|
|
1010
|
+
• Files rewritten due to drift
|
|
1011
|
+
• Weeks lost to cascade fixes
|
|
1012
|
+
• Future drift risk level
|
|
1013
|
+
• What .faf would have prevented
|
|
1014
|
+
|
|
1015
|
+
Context-drift makes you pay.
|
|
1016
|
+
.faf keeps you drift-free.`)
|
|
1017
|
+
.action(withAnalyticsTracking('drift', (options) => (0, drift_1.driftCommand)(options)));
|
|
1018
|
+
// ✏️ faf edit - Interactive .faf editor (Claude Code consistency)
|
|
883
1019
|
commander_1.program
|
|
884
1020
|
.command('edit')
|
|
885
1021
|
.description('✏️ Interactive .faf editor with validation')
|