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.
Files changed (167) hide show
  1. package/README.md +238 -24
  2. package/assets/screenshots/package-json+project-faf.png +0 -0
  3. package/dist/big-orange/bigo-push.d.ts +18 -0
  4. package/dist/big-orange/bigo-push.d.ts.map +1 -0
  5. package/dist/big-orange/bigo-push.js +88 -0
  6. package/dist/big-orange/bigo-push.js.map +1 -0
  7. package/dist/big-orange/compare.d.ts +11 -0
  8. package/dist/big-orange/compare.d.ts.map +1 -0
  9. package/dist/big-orange/compare.js +172 -0
  10. package/dist/big-orange/compare.js.map +1 -0
  11. package/dist/big-orange/faf-generator.d.ts +22 -0
  12. package/dist/big-orange/faf-generator.d.ts.map +1 -0
  13. package/dist/big-orange/faf-generator.js +215 -0
  14. package/dist/big-orange/faf-generator.js.map +1 -0
  15. package/dist/big-orange/index.d.ts +7 -0
  16. package/dist/big-orange/index.d.ts.map +1 -0
  17. package/dist/big-orange/index.js +96 -0
  18. package/dist/big-orange/index.js.map +1 -0
  19. package/dist/big-orange/types.d.ts +62 -0
  20. package/dist/big-orange/types.d.ts.map +1 -0
  21. package/dist/big-orange/types.js +7 -0
  22. package/dist/big-orange/types.js.map +1 -0
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +137 -1
  25. package/dist/cli.js.map +1 -1
  26. package/dist/commands/auto.d.ts.map +1 -1
  27. package/dist/commands/auto.js +69 -12
  28. package/dist/commands/auto.js.map +1 -1
  29. package/dist/commands/bi-sync.d.ts.map +1 -1
  30. package/dist/commands/bi-sync.js +10 -3
  31. package/dist/commands/bi-sync.js.map +1 -1
  32. package/dist/commands/drift.d.ts +16 -0
  33. package/dist/commands/drift.d.ts.map +1 -0
  34. package/dist/commands/drift.js +517 -0
  35. package/dist/commands/drift.js.map +1 -0
  36. package/dist/commands/git.d.ts +25 -0
  37. package/dist/commands/git.d.ts.map +1 -0
  38. package/dist/commands/git.js +355 -0
  39. package/dist/commands/git.js.map +1 -0
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +5 -4
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/migrate.d.ts +11 -0
  44. package/dist/commands/migrate.d.ts.map +1 -0
  45. package/dist/commands/migrate.js +85 -0
  46. package/dist/commands/migrate.js.map +1 -0
  47. package/dist/commands/rename.d.ts +18 -0
  48. package/dist/commands/rename.d.ts.map +1 -0
  49. package/dist/commands/rename.js +211 -0
  50. package/dist/commands/rename.js.map +1 -0
  51. package/dist/commands/taf-init.d.ts +14 -0
  52. package/dist/commands/taf-init.d.ts.map +1 -0
  53. package/dist/commands/taf-init.js +138 -0
  54. package/dist/commands/taf-init.js.map +1 -0
  55. package/dist/commands/taf-log.d.ts +27 -0
  56. package/dist/commands/taf-log.d.ts.map +1 -0
  57. package/dist/commands/taf-log.js +241 -0
  58. package/dist/commands/taf-log.js.map +1 -0
  59. package/dist/commands/taf-stats.d.ts +8 -0
  60. package/dist/commands/taf-stats.d.ts.map +1 -0
  61. package/dist/commands/taf-stats.js +133 -0
  62. package/dist/commands/taf-stats.js.map +1 -0
  63. package/dist/commands/taf-validate.d.ts +8 -0
  64. package/dist/commands/taf-validate.d.ts.map +1 -0
  65. package/dist/commands/taf-validate.js +108 -0
  66. package/dist/commands/taf-validate.js.map +1 -0
  67. package/dist/commands/taf.d.ts +13 -0
  68. package/dist/commands/taf.d.ts.map +1 -0
  69. package/dist/commands/taf.js +85 -0
  70. package/dist/commands/taf.js.map +1 -0
  71. package/dist/compiler/faf-compiler.d.ts.map +1 -1
  72. package/dist/compiler/faf-compiler.js +18 -0
  73. package/dist/compiler/faf-compiler.js.map +1 -1
  74. package/dist/generators/faf-generator-championship.d.ts.map +1 -1
  75. package/dist/generators/faf-generator-championship.js +1 -0
  76. package/dist/generators/faf-generator-championship.js.map +1 -1
  77. package/dist/github/github-extractor.d.ts +56 -0
  78. package/dist/github/github-extractor.d.ts.map +1 -0
  79. package/dist/github/github-extractor.js +328 -0
  80. package/dist/github/github-extractor.js.map +1 -0
  81. package/dist/github/popular-repos.d.ts +43 -0
  82. package/dist/github/popular-repos.d.ts.map +1 -0
  83. package/dist/github/popular-repos.js +205 -0
  84. package/dist/github/popular-repos.js.map +1 -0
  85. package/dist/github/repo-selector.d.ts +48 -0
  86. package/dist/github/repo-selector.d.ts.map +1 -0
  87. package/dist/github/repo-selector.js +277 -0
  88. package/dist/github/repo-selector.js.map +1 -0
  89. package/dist/taf/index.d.ts +17 -0
  90. package/dist/taf/index.d.ts.map +1 -0
  91. package/dist/taf/index.js +57 -0
  92. package/dist/taf/index.js.map +1 -0
  93. package/dist/taf/logger.d.ts +86 -0
  94. package/dist/taf/logger.d.ts.map +1 -0
  95. package/dist/taf/logger.js +135 -0
  96. package/dist/taf/logger.js.map +1 -0
  97. package/dist/taf/parser.d.ts +32 -0
  98. package/dist/taf/parser.d.ts.map +1 -0
  99. package/dist/taf/parser.js +161 -0
  100. package/dist/taf/parser.js.map +1 -0
  101. package/dist/taf/stats.d.ts +31 -0
  102. package/dist/taf/stats.d.ts.map +1 -0
  103. package/dist/taf/stats.js +182 -0
  104. package/dist/taf/stats.js.map +1 -0
  105. package/dist/taf/types.d.ts +66 -0
  106. package/dist/taf/types.d.ts.map +1 -0
  107. package/dist/taf/types.js +9 -0
  108. package/dist/taf/types.js.map +1 -0
  109. package/dist/taf/validator.d.ts +18 -0
  110. package/dist/taf/validator.d.ts.map +1 -0
  111. package/dist/taf/validator.js +148 -0
  112. package/dist/taf/validator.js.map +1 -0
  113. package/dist/utils/file-utils.d.ts +10 -0
  114. package/dist/utils/file-utils.d.ts.map +1 -1
  115. package/dist/utils/file-utils.js +196 -33
  116. package/dist/utils/file-utils.js.map +1 -1
  117. package/dist/utils/native-file-finder.js +1 -1
  118. package/dist/utils/native-file-finder.js.map +1 -1
  119. package/dist/utils/yaml-generator.d.ts +1 -0
  120. package/dist/utils/yaml-generator.d.ts.map +1 -1
  121. package/dist/utils/yaml-generator.js +1 -0
  122. package/dist/utils/yaml-generator.js.map +1 -1
  123. package/package.json +12 -4
  124. package/dist/commands/create.d.ts +0 -13
  125. package/dist/commands/create.d.ts.map +0 -1
  126. package/dist/commands/create.js +0 -78
  127. package/dist/commands/create.js.map +0 -1
  128. package/dist/core/platform-adapters.d.ts +0 -76
  129. package/dist/core/platform-adapters.d.ts.map +0 -1
  130. package/dist/core/platform-adapters.js +0 -407
  131. package/dist/core/platform-adapters.js.map +0 -1
  132. package/dist/core/universal-intelligence-generator.d.ts +0 -156
  133. package/dist/core/universal-intelligence-generator.d.ts.map +0 -1
  134. package/dist/core/universal-intelligence-generator.js +0 -352
  135. package/dist/core/universal-intelligence-generator.js.map +0 -1
  136. package/dist/enrichment/auto-corrector.d.ts +0 -28
  137. package/dist/enrichment/auto-corrector.d.ts.map +0 -1
  138. package/dist/enrichment/auto-corrector.js +0 -106
  139. package/dist/enrichment/auto-corrector.js.map +0 -1
  140. package/dist/enrichment/n8n-analyzer.d.ts +0 -259
  141. package/dist/enrichment/n8n-analyzer.d.ts.map +0 -1
  142. package/dist/enrichment/n8n-analyzer.js +0 -346
  143. package/dist/enrichment/n8n-analyzer.js.map +0 -1
  144. package/dist/enrichment/n8n-faf-generator.d.ts +0 -68
  145. package/dist/enrichment/n8n-faf-generator.d.ts.map +0 -1
  146. package/dist/enrichment/n8n-faf-generator.js +0 -354
  147. package/dist/enrichment/n8n-faf-generator.js.map +0 -1
  148. package/dist/enrichment/question-asker.d.ts +0 -22
  149. package/dist/enrichment/question-asker.d.ts.map +0 -1
  150. package/dist/enrichment/question-asker.js +0 -113
  151. package/dist/enrichment/question-asker.js.map +0 -1
  152. package/dist/enrichment/slot-filler.d.ts +0 -73
  153. package/dist/enrichment/slot-filler.d.ts.map +0 -1
  154. package/dist/enrichment/slot-filler.js +0 -253
  155. package/dist/enrichment/slot-filler.js.map +0 -1
  156. package/dist/scoring/championship-scorer.d.ts +0 -114
  157. package/dist/scoring/championship-scorer.d.ts.map +0 -1
  158. package/dist/scoring/championship-scorer.js +0 -380
  159. package/dist/scoring/championship-scorer.js.map +0 -1
  160. package/dist/scoring/score-calculator.d.ts +0 -29
  161. package/dist/scoring/score-calculator.d.ts.map +0 -1
  162. package/dist/scoring/score-calculator.js +0 -520
  163. package/dist/scoring/score-calculator.js.map +0 -1
  164. package/dist/tests/manual-validation.d.ts +0 -8
  165. package/dist/tests/manual-validation.d.ts.map +0 -1
  166. package/dist/tests/manual-validation.js +0 -114
  167. 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,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * BIG ORANGE 🍊 - CLI Command
4
+ * Compare AI responses at different .faf scores
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ "use strict";
2
+ /**
3
+ * BIG ORANGE 🍊 - Core Types
4
+ * Domain model for .faf context comparison
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -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;AAi1C/C,OAAO,EAAE,OAAO,EAAE,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
- // ✏️ faf edit - Interactive .faf editor (Claude Code consistency)
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')