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
package/README.md CHANGED
@@ -1,22 +1,68 @@
1
- # 🩵⚡️faf-cli v3.0.5 - 🏆 1st Persistent Project AI Context CLI
2
- Powered by Anthropic-Approved code
3
- and featuring New Skills.md 🎸 integration
1
+ # faf-cli
2
+
3
+ ## TL;DR
4
+
5
+ **Problem:** AI needs persistent project context to work at its best.
6
+
7
+ **Solution:** The .faf format provides that context. This CLI creates, scores, and improves .faf files from your codebase.
8
+
9
+ **How it works:** Run `faf init` to create your .faf file. Get a score (0-100%) showing context quality. Higher scores = AI more in-tune with your project. Use `faf auto` and other commands to improve your score quickly. Align your .faf file with CLAUDE.md to maintain context persistently with bi-sync.
10
+
11
+ **Install:**
12
+ ```bash
13
+ # npm (works everywhere)
14
+ npm install -g faf-cli
15
+
16
+ # Homebrew (macOS/Linux)
17
+ brew install faf-cli
18
+ ```
19
+
20
+ **Quick start:**
21
+ ```bash
22
+ cd your-project
23
+ faf init # Creates .faf file
24
+ faf score # Check AI-readiness (0-100%)
25
+ ```
26
+
27
+ **CLI vs MCP clarity**
28
+ - **faf-cli** (this): Runs on your machine locally in a terminal
29
+ - **claude-faf-mcp** ([npm](https://www.npmjs.com/package/claude-faf-mcp)): Runs through Claude Desktop as a tool
30
+
31
+ Same .faf, different way to use. Same Project DNA and scoring. Same capabilities (create, score, improve). Different execution layer.
32
+
33
+ Use CLI for raw speed and local development; use MCP for AI-integrated workflows. No feature gaps between them - pick based on your flow.
34
+
35
+ [Website](https://faf.one) | [GitHub](https://github.com/Wolfe-Jam/faf-cli) | [Discussions](https://github.com/Wolfe-Jam/faf-cli/discussions)
36
+
37
+ ---
38
+
39
+ ### 📸 See It In Action
4
40
 
5
41
  <div align="center">
42
+ <img src="./assets/screenshots/package-json+project-faf.png" alt="project.faf sits between package.json and README.md" width="500" />
6
43
 
7
- <img src="https://cdn.jsdelivr.net/npm/faf-cli@latest/assets/icons/orange-smiley.svg" alt="FAF Logo" width="64" />
44
+ **`project.faf` sits right between `package.json` and `README.md`** - exactly where it belongs.
45
+
46
+ Visible. Discoverable. Universal.
47
+ </div>
48
+
49
+ ---
50
+
51
+ ## 📚 Complete Documentation
8
52
 
9
- ## **FREE FOR ALL DEVS** 🆓 **Growing Fast** 📈 **AI-Context, On-Demand.**
53
+ **For developers who want the full story**, here's everything about FAF's architecture, testing, and championship engineering standards.
10
54
 
11
- **Project DNA ✨ for Claude Code/ any AI CLI** •
12
- **Zero Faff Innit™🇬🇧**
55
+ <div align="center">
56
+
57
+ <img src="https://cdn.jsdelivr.net/npm/faf-cli@latest/assets/icons/orange-smiley.svg" alt="FAF Logo" width="64" />
58
+
59
+ **Free for all devs** 🆓 • **Project DNA ✨ for any AI** • **Zero Faff™🇬🇧**
13
60
 
14
61
  [![NPM Version](https://img.shields.io/npm/v/faf-cli?color=FF4500)](https://www.npmjs.com/package/faf-cli)
15
62
  [![Downloads](https://img.shields.io/npm/dt/faf-cli?color=00CCFF)](https://www.npmjs.com/package/faf-cli)
16
63
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
17
- [![TypeScript](https://img.shields.io/badge/TypeScript-100%25-3178C6?logo=typescript)](https://www.typescriptlang.org/)
18
64
 
19
- **[Website](https://faf.one)** • **[GitHub](https://github.com/Wolfe-Jam/faf-cli)** • **[Community](https://github.com/Wolfe-Jam/faf-cli/discussions)** • **[npm](https://www.npmjs.com/package/faf-cli)**
65
+ **[Website](https://faf.one)** • **[GitHub](https://github.com/Wolfe-Jam/faf-cli)** • **[Community](https://github.com/Wolfe-Jam/faf-cli/discussions)**
20
66
 
21
67
  </div>
22
68
 
@@ -36,13 +82,181 @@ npm install -g faf-cli
36
82
  brew install faf-cli
37
83
  ```
38
84
 
39
- **One line. Zero config. Championship context.** 🏁
85
+ **One line. Zero config. Podium context.** 🏁
86
+
87
+ ---
88
+
89
+ ## 🎉 What's New in v3.1.0
90
+
91
+ ### 🔥 THE VISIBILITY REVOLUTION 🔥
92
+
93
+ **AI context just became UNIVERSAL. project.faf is here.**
94
+
95
+ For too long, `.faf` lived in the shadows - hidden, invisible, forgotten. **NOT ANYMORE.**
96
+
97
+ ### 📂 Introducing: `project.faf`
98
+
99
+ ## **`package.json` for AI**
100
+
101
+ **Just like `package.json` tells npm what your project needs...**
102
+ **`project.faf` tells AI what your project IS.**
103
+
104
+ | File | Purpose | Who Reads It |
105
+ |------|---------|--------------|
106
+ | `package.json` | Dependencies, scripts, metadata | npm, Node.js, developers |
107
+ | `project.faf` | **Context, architecture, purpose** | **AI, Claude, Cursor, any AI tool** |
108
+
109
+ **Same pattern. Same universality. Same necessity.**
110
+
111
+ **VISIBLE. DISCOVERABLE. UNIVERSAL.**
112
+
113
+ ```bash
114
+ # The old way (hidden like .env)
115
+ ls -la
116
+ .env # 🔒 Hidden (secrets - SHOULD be hidden)
117
+ .faf # 👻 Hidden (AI context - SHOULD be visible!)
118
+
119
+ # The NEW WAY (visible like package.json)
120
+ ls
121
+ package.json # ✅ Visible (dependencies - everyone needs to see)
122
+ project.faf # ✅ Visible (AI context - AI needs to find this!)
123
+ .env # 🔒 Still hidden (secrets stay secret)
124
+ ```
125
+
126
+ **`.env` hides secrets. `project.faf` shares context.**
127
+
128
+ **`.faf` was hiding in the wrong category. `project.faf` fixes that.**
129
+
130
+ ### 🚀 Why This Changes Everything
131
+
132
+ **Before:**
133
+ - Hidden `.faf` files easily forgotten
134
+ - Hard to discover in new projects
135
+ - "Wait, does this project have AI context?"
136
+ - Invisible to Git UIs, IDEs, file managers
137
+
138
+ **After:**
139
+ - `project.faf` sits next to `package.json`
140
+ - **IMPOSSIBLE TO MISS**
141
+ - Universal pattern developers already know
142
+ - Every project SHOWS its AI-readiness
143
+
144
+ ### 🔺 The Golden Triangle
145
+
146
+ **Three sides. Closed loop. Complete accountability.**
147
+
148
+ ```
149
+ project.faf
150
+ (WHAT IT IS)
151
+ / \
152
+ / \
153
+ / \
154
+ repo ←→ .taf
155
+ (CODE) (PROOF IT WORKS)
156
+ ```
157
+
158
+ Every project needs three things:
159
+ - **Code that works** (repo)
160
+ - **Context for AI** (project.faf)
161
+ - **Proof it works** (.taf - git-tracked testing timeline)
162
+
163
+ **TAF** (Testing Audit File) format tracks every test run in git. On-the-fly CI/CD updates. Permanent audit trail. Unheard of in CI/CD.
164
+
165
+ **Traditional CI/CD:** Tests run → Results disappear → No permanent record
166
+ **TAF:** Tests run → .taf updates → Git commits → Permanent timeline
167
+
168
+ Format defined in **faf-taf-git** (GitHub Actions native support).
169
+
170
+ ### ✨ The Essential Trio
171
+
172
+ ```bash
173
+ your-project/
174
+ ├── package.json # What your project NEEDS (dependencies)
175
+ ├── project.faf # What your project IS (context for AI)
176
+ └── tsconfig.json # How your project BUILDS (TypeScript config)
177
+ ```
178
+
179
+ **`package.json`** → Tells npm: "Install these dependencies"
180
+ **`project.faf`** → Tells AI: "This is what I am, this is my purpose"
181
+ **`tsconfig.json`** → Tells TypeScript: "Compile with these settings"
182
+
183
+ **All visible. All universal. All essential.**
184
+
185
+ **You wouldn't skip `package.json`. Don't skip `project.faf`.**
186
+
187
+ ### 🔥 New Commands
188
+
189
+ **1. `faf migrate` - Instant Upgrade**
190
+ ```bash
191
+ faf migrate
192
+ # .faf → project.faf (27ms)
193
+ ```
194
+
195
+ **2. `faf rename` - Bulk Power**
196
+ ```bash
197
+ faf rename
198
+ # Recursively migrates ENTIRE monorepo tree
199
+ # Found 147 .faf files? ✅ Migrated in 420ms
200
+ ```
201
+
202
+ **3. Auto-Magic for New Projects**
203
+ ```bash
204
+ faf init # Creates project.faf (not .faf)
205
+ faf auto # Creates project.faf
206
+ ```
207
+
208
+ ### 🎯 Championship Detection Upgrade
209
+
210
+ **TSA Engine Integration** - "We're INSPECTORS, not trash collectors"
211
+
212
+ **Before (naive):**
213
+ ```
214
+ Has 'commander' in package.json? → Maybe CLI
215
+ ```
216
+
217
+ **After (championship):**
218
+ ```
219
+ 'commander' imported 10+ times? → DEFINITELY CLI
220
+ Analyzes CORE dependencies (actual usage)
221
+ 95% accuracy vs 70% accuracy
222
+ ```
223
+
224
+ ### ⚡ Performance
225
+
226
+ - **migrate:** 27ms (54% faster than 50ms target)
227
+ - **rename:** 27ms for 3 files (73% faster than target)
228
+ - **championship grade** across all operations
229
+
230
+ ### 🏆 WJTTC GOLD Certification
231
+
232
+ **97/100 Championship Score**
233
+ - Project Understanding: 20/20
234
+ - TURBO-CAT Knowledge: 20/20
235
+ - Architecture Understanding: 20/20
236
+
237
+ Full report: 194KB comprehensive test suite
238
+
239
+ ### 🔙 100% Backward Compatible
240
+
241
+ **Still works with `.faf` files** - graceful transition, no breaking changes.
242
+
243
+ Your old `.faf` files keep working. Migrate when ready.
244
+
245
+ ### 🌍 The Vision
246
+
247
+ **Every project with a `package.json` should have a `project.faf`**
248
+
249
+ Just like every TypeScript project has `tsconfig.json`, every Rust project has `Cargo.toml`, every Python project has `requirements.txt`...
250
+
251
+ **Every AI-augmented project has `project.faf`**
252
+
253
+ **This is the new universal standard for AI context.**
40
254
 
41
255
  ---
42
256
 
43
257
  ## 🎉 What's New in v3.0.0
44
258
 
45
- ### The Championship Release
259
+ ### The Podium Release
46
260
 
47
261
  **The biggest release yet:**
48
262
 
@@ -50,10 +264,10 @@ brew install faf-cli
50
264
  - 💨 **TURBO Model Introduced** - Like VS Code + Copilot, Spotify Free + Premium, Zoom Basic + Pro
51
265
  - 😽 **TURBO-CAT™ Format Discovery** - Introduced in v2.0.0, now purring at full power in v3.0.0 - 153 validated formats organized in a perfect pyramid
52
266
  - 🧬 **Birth DNA Lifecycle** - Track your project's evolution from birth to championship
53
- - 🏆 **7-Tier Championship Scoring** - 🏆 🥇 🥈 🥉 🟢 🟡 🔴 🤍 - From Lonely Heart to Podium Champion
267
+ - 🏆 **7-Tier Podium Scoring** - 🏆 🥇 🥈 🥉 🟢 🟡 🔴 🤍 - From Lonely Heart to Podium Champion
54
268
  - ⚖️ **AI | HUMAN Balance** - 50|50 system = Optimal Context for championship performance
55
269
  - 🔗 **Context-Mirroring w/Bi-Sync** - Bidirectional .faf ↔ CLAUDE.md synchronization
56
- - ⚡ **Championship Speed** - 8ms bi-sync, <50ms all commands, 18ms avg, 0ms operations achieved
270
+ - ⚡ **Podium Speed** - 8ms bi-sync, <50ms all commands, 18ms avg, 0ms operations achieved
57
271
  - 🏁 **WJTTC GOLD Certified** - 1,000+ comprehensive tests, unique test suite
58
272
  - 🤖 **BIG-3 AI Validation** - Verified by Google Gemini, Anthropic Claude, OpenAI Codex
59
273
  - 🌐 **Universal AI Support** - Claude Code, OpenAI Codex CLI, Gemini CLI, Cursor, Warp, Copilot, Windsurf, ALL AI coding assistants
@@ -155,7 +369,7 @@ faf formats
155
369
 
156
370
  ### **FAF v3.0.3 (FREE FOR ALL DEVS)** 🆓
157
371
 
158
- ✅ **41 Championship Commands**
372
+ ✅ **41 Podium Commands**
159
373
  - Project initialization & auto-detection
160
374
  - TURBO-CAT format discovery (153 formats)
161
375
  - Birth DNA lifecycle tracking
@@ -324,7 +538,7 @@ You're gonna end up with a **CAVITY**.
324
538
 
325
539
  ### The Solution: Project DNA
326
540
 
327
- - ✅ **Championship context** (85-99% quality scores)
541
+ - ✅ **Podium context** (85-99% quality scores)
328
542
  - ✅ **Persistent intelligence** - AI remembers your project perfectly
329
543
  - ✅ **Seamless collaboration** - Human + AI working together optimally
330
544
  - ✅ **Project health monitoring** - Track context quality over time
@@ -337,7 +551,7 @@ You're gonna end up with a **CAVITY**.
337
551
 
338
552
  ### 🏎️ Power Commands
339
553
  ```bash
340
- faf auto # ONE COMMAND TO RULE THEM ALL - Zero to Championship
554
+ faf auto # ONE COMMAND TO RULE THEM ALL - Zero to Podium
341
555
  faf init # Create .faf from your project
342
556
  faf enhance # Real AI analysis & improvements
343
557
  faf analyze # Claude-first intelligence
@@ -453,12 +667,12 @@ faf # Interactive menu (use faf auto instead)
453
667
 
454
668
  ---
455
669
 
456
- ## 🏆 Championship Scoring
670
+ ## 🏆 Podium Scoring
457
671
 
458
672
  Track your project's AI-readiness with F1-inspired tiers:
459
673
 
460
674
  ```
461
- 🏆 Trophy (100%) - Championship - Perfect 50|50 AI|HUMAN balance
675
+ 🏆 Trophy (100%) - Podium - Perfect 50|50 AI|HUMAN balance
462
676
  🥇 Gold (99%) - Gold standard
463
677
  🥈 Silver (95-98%) - Excellence
464
678
  🥉 Bronze (85-94%) - Production ready
@@ -481,7 +695,7 @@ Status: Bronze - Production Ready
481
695
 
482
696
  Next milestone: 95% 🥈 Silver (6 points to go!)
483
697
 
484
- 🏎️ FAF Championship Status
698
+ 🏎️ FAF Podium Status
485
699
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
486
700
  Initial DNA: 12% (born 2025-10-03)
487
701
  Growth: +77% over 4 days
@@ -490,7 +704,7 @@ Next Milestone: 95% 🥈 Silver (6% to go!)
490
704
 
491
705
  ---
492
706
 
493
- ## ⚖️ AI | HUMAN Balance - The 50|50 Championship System
707
+ ## ⚖️ AI | HUMAN Balance - The 50|50 Podium System
494
708
 
495
709
  **NEW in v3.0.0:** Track the perfect balance between AI-readable and human-readable content.
496
710
 
@@ -581,7 +795,7 @@ Automation: n8n workflows, OpenAI Builder, Google Opal, Make.com - AI-Automat
581
795
  | **Cost** | Per-query fees | Zero runtime cost |
582
796
  | **Versioning** | Difficult | Git-friendly YAML |
583
797
 
584
- **.faf is RAG's output—captured once, reused infinitely.** Championship efficiency.
798
+ **.faf is RAG's output—captured once, reused infinitely.** Podium efficiency.
585
799
 
586
800
  ### Universal Pattern
587
801
 
@@ -599,7 +813,7 @@ Same pattern. Same output. Universal by design.
599
813
 
600
814
  ---
601
815
 
602
- ## 🏆 WJTTC Championship Testing
816
+ ## 🏆 WJTTC Podium Testing
603
817
 
604
818
  **FAF CLI v3.0.3 is WJTTC GOLD Certified** - tested to F1-grade standards.
605
819
 
@@ -610,7 +824,7 @@ Same pattern. Same output. Universal by design.
610
824
 
611
825
  **Battle-tested with 12,500+ test iterations across 5 testing tiers:**
612
826
  - ✅ **BIG-3 AI Validation** (11,200 iterations - Claude, ChatGPT/Codex, Gemini)
613
- - ✅ **287 Automated Tests** (191 Jest unit + 66 Championship Safety + 30 YOLO torture)
827
+ - ✅ **287 Automated Tests** (191 Jest unit + 66 Podium Safety + 30 YOLO torture)
614
828
  - ✅ **730 Empirical C.O.R.E Tests** (100% MCP protocol compliance)
615
829
  - ✅ **301 Context-On-Demand Tests** (Torture testing, edge cases, stress scenarios)
616
830
  - ✅ **35+ Test Documents** (Comprehensive validation reports)
@@ -778,7 +992,7 @@ Copy cats? Why bother.
778
992
 
779
993
  <div align="center">
780
994
 
781
- ## 🏁 v3.0.3 - Championship Edition
995
+ ## 🏁 v3.0.3 - Podium Edition
782
996
 
783
997
  **FREE FOR ALL DEVS** 🆓 • **Growing Fast** 📈 • **AI-Context, On-Demand.**
784
998
 
@@ -0,0 +1,18 @@
1
+ /**
2
+ * BIG ORANGE 🍊 - Output Handler
3
+ * Pushes comparison results to Big🍊 web visualization
4
+ */
5
+ import type { ComparisonResults } from './types';
6
+ /**
7
+ * Push comparison results to Big🍊
8
+ * @param results - Comparison results to store
9
+ * @returns URL to view results
10
+ */
11
+ export declare function pushToBigO(results: ComparisonResults): Promise<string>;
12
+ /**
13
+ * Fetch session results (for Big🍊 web app)
14
+ * @param sessionId - Session ID to fetch
15
+ * @returns Comparison results
16
+ */
17
+ export declare function fetchSession(sessionId: string): Promise<ComparisonResults | null>;
18
+ //# sourceMappingURL=bigo-push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigo-push.d.ts","sourceRoot":"","sources":["../../src/big-orange/bigo-push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B5E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYvF"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * BIG ORANGE 🍊 - Output Handler
4
+ * Pushes comparison results to Big🍊 web visualization
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.pushToBigO = pushToBigO;
41
+ exports.fetchSession = fetchSession;
42
+ const promises_1 = require("fs/promises");
43
+ const path_1 = require("path");
44
+ /**
45
+ * Push comparison results to Big🍊
46
+ * @param results - Comparison results to store
47
+ * @returns URL to view results
48
+ */
49
+ async function pushToBigO(results) {
50
+ const sessionId = results.sessionId;
51
+ // For now: Write to file system
52
+ // Later: POST to API endpoint
53
+ const dataDir = process.env.BIGO_DATA_DIR || '/tmp/big-orange-sessions';
54
+ const sessionFile = (0, path_1.join)(dataDir, `${sessionId}.json`);
55
+ try {
56
+ // Ensure directory exists
57
+ await (0, promises_1.mkdir)(dataDir, { recursive: true });
58
+ // Write session data
59
+ await (0, promises_1.writeFile)(sessionFile, JSON.stringify(results, null, 2), 'utf-8');
60
+ console.log(`✓ Session saved: ${sessionFile}`);
61
+ }
62
+ catch (error) {
63
+ console.error('Failed to save session:', error);
64
+ throw error;
65
+ }
66
+ // Return URL to Big🍊
67
+ const baseUrl = process.env.BIGO_URL || 'https://fafdev.tools';
68
+ return `${baseUrl}/BigO?session=${sessionId}`;
69
+ }
70
+ /**
71
+ * Fetch session results (for Big🍊 web app)
72
+ * @param sessionId - Session ID to fetch
73
+ * @returns Comparison results
74
+ */
75
+ async function fetchSession(sessionId) {
76
+ const dataDir = process.env.BIGO_DATA_DIR || '/tmp/big-orange-sessions';
77
+ const sessionFile = (0, path_1.join)(dataDir, `${sessionId}.json`);
78
+ try {
79
+ const { readFile } = await Promise.resolve().then(() => __importStar(require('fs/promises')));
80
+ const data = await readFile(sessionFile, 'utf-8');
81
+ return JSON.parse(data);
82
+ }
83
+ catch (error) {
84
+ console.error(`Session not found: ${sessionId}`);
85
+ return null;
86
+ }
87
+ }
88
+ //# sourceMappingURL=bigo-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigo-push.js","sourceRoot":"","sources":["../../src/big-orange/bigo-push.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWH,gCA8BC;AAOD,oCAYC;AA1DD,0CAA+C;AAC/C,+BAA4B;AAG5B;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAEpC,gCAAgC;IAChC,8BAA8B;IAE9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAC;IACxE,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,IAAA,gBAAK,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,qBAAqB;QACrB,MAAM,IAAA,oBAAS,EACb,WAAW,EACX,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAChC,OAAO,CACR,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAEjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,sBAAsB,CAAC;IAC/D,OAAO,GAAG,OAAO,iBAAiB,SAAS,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,0BAA0B,CAAC;IACxE,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * BIG ORANGE 🍊 - Core Comparison Logic
3
+ * Compares AI responses with different .faf context levels
4
+ */
5
+ import type { ComparisonRequest, ComparisonResults } from './types';
6
+ /**
7
+ * Compare AI responses at two different .faf scores
8
+ * Calls Claude API twice in parallel with different context levels
9
+ */
10
+ export declare function compareContexts(request: ComparisonRequest): Promise<ComparisonResults>;
11
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/big-orange/compare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAiB,MAAM,SAAS,CAAC;AAOnF;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAuC5B"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * BIG ORANGE 🍊 - Core Comparison Logic
4
+ * Compares AI responses with different .faf context levels
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.compareContexts = compareContexts;
11
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
12
+ const crypto_1 = require("crypto");
13
+ const faf_generator_1 = require("./faf-generator");
14
+ const faf_compiler_1 = require("../compiler/faf-compiler");
15
+ const fs_1 = require("fs");
16
+ const os_1 = require("os");
17
+ const path_1 = require("path");
18
+ /**
19
+ * Compare AI responses at two different .faf scores
20
+ * Calls Claude API twice in parallel with different context levels
21
+ */
22
+ async function compareContexts(request) {
23
+ console.log(`\n🍊 Comparing ${request.leftScore}% vs ${request.rightScore}%`);
24
+ console.log(`Prompt: "${request.prompt}"\n`);
25
+ // 1. Generate .faf instances at specified scores
26
+ const [leftFaf, rightFaf] = await Promise.all([
27
+ (0, faf_generator_1.generateFafInstance)(request.leftScore, request.projectPath),
28
+ (0, faf_generator_1.generateFafInstance)(request.rightScore, request.projectPath)
29
+ ]);
30
+ console.log(`Generated .faf instances:`);
31
+ console.log(` Left: ${request.leftScore}% (${leftFaf.content.length} chars)`);
32
+ console.log(` Right: ${request.rightScore}% (${rightFaf.content.length} chars)\n`);
33
+ // 2. Call Claude API with both contexts
34
+ console.log('Calling Claude API...');
35
+ const client = new sdk_1.default({ apiKey: process.env.ANTHROPIC_API_KEY });
36
+ const [leftResponse, rightResponse] = await Promise.all([
37
+ callClaudeWithContext(client, request.prompt, leftFaf.content, request.leftScore),
38
+ callClaudeWithContext(client, request.prompt, rightFaf.content, request.rightScore)
39
+ ]);
40
+ console.log('✓ Both responses received\n');
41
+ // 3. Calculate delta metrics
42
+ const delta = calculateDelta(leftResponse, rightResponse);
43
+ const results = {
44
+ sessionId: (0, crypto_1.randomUUID)(),
45
+ timestamp: new Date(),
46
+ leftWindow: leftResponse,
47
+ rightWindow: rightResponse,
48
+ delta
49
+ };
50
+ return results;
51
+ }
52
+ /**
53
+ * Call Claude API with specific .faf context
54
+ * Uses FafCompiler for real scoring, no fake metrics
55
+ */
56
+ async function callClaudeWithContext(client, prompt, fafContent, score) {
57
+ const startTime = Date.now();
58
+ // Build system prompt based on .faf score
59
+ const systemPrompt = score > 0
60
+ ? `You are a developer with this project context:\n\n${fafContent}\n\nUse this context to inform your response.`
61
+ : 'You are a developer with no project context. Ask clarifying questions as needed.';
62
+ try {
63
+ // Call Claude API
64
+ const response = await client.messages.create({
65
+ model: 'claude-sonnet-4-20250514',
66
+ max_tokens: 4000,
67
+ system: systemPrompt,
68
+ messages: [{
69
+ role: 'user',
70
+ content: prompt
71
+ }]
72
+ });
73
+ const timeToComplete = (Date.now() - startTime) / 1000;
74
+ const aiResponse = response.content[0].type === 'text'
75
+ ? response.content[0].text
76
+ : '';
77
+ // Get real FAF score using FafCompiler
78
+ const { emoji, metadata } = await scoreFafContent(fafContent, score);
79
+ return {
80
+ fafScore: score,
81
+ aiResponse,
82
+ timeToComplete,
83
+ emoji,
84
+ fafMetadata: metadata
85
+ };
86
+ }
87
+ catch (error) {
88
+ console.error(`Error calling Claude (score ${score}%):`, error);
89
+ throw error;
90
+ }
91
+ }
92
+ /**
93
+ * Score .faf content using FafCompiler
94
+ * Returns championship emoji and metadata
95
+ */
96
+ async function scoreFafContent(fafContent, expectedScore) {
97
+ // Write .faf to temp file
98
+ const tempDir = (0, path_1.join)((0, os_1.tmpdir)(), 'big-orange-scoring');
99
+ (0, fs_1.mkdirSync)(tempDir, { recursive: true });
100
+ const tempFafPath = (0, path_1.join)(tempDir, `temp-${Date.now()}.faf`);
101
+ try {
102
+ (0, fs_1.writeFileSync)(tempFafPath, fafContent);
103
+ // Use FafCompiler to score
104
+ const compiler = new faf_compiler_1.FafCompiler();
105
+ const result = await compiler.compile(tempFafPath);
106
+ // Get championship emoji based on score
107
+ const emoji = getChampionshipEmoji(result.score);
108
+ return {
109
+ emoji,
110
+ metadata: {
111
+ filled: result.filled,
112
+ total: result.total,
113
+ checksum: result.checksum
114
+ }
115
+ };
116
+ }
117
+ catch (error) {
118
+ console.error('Error scoring .faf:', error);
119
+ // Fallback to expected score
120
+ return {
121
+ emoji: getChampionshipEmoji(expectedScore)
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * Get championship emoji based on score
127
+ * Uses FAF CLI's standard scoring tiers
128
+ */
129
+ function getChampionshipEmoji(score) {
130
+ if (score >= 100)
131
+ return '🏆'; // Trophy (championship)
132
+ if (score >= 99)
133
+ return '🥇'; // Gold
134
+ if (score >= 95)
135
+ return '🥈'; // Silver (Target 2)
136
+ if (score >= 85)
137
+ return '🥉'; // Bronze (Target 1)
138
+ if (score >= 70)
139
+ return '🟢'; // Green (GO!)
140
+ if (score >= 55)
141
+ return '🟡'; // Yellow (Caution)
142
+ if (score >= 10)
143
+ return '🔴'; // Red (Pit Stop)
144
+ return '🤍'; // White (empty)
145
+ }
146
+ /**
147
+ * Calculate delta metrics between two responses
148
+ * Simple comparison: time saved and score improvement
149
+ */
150
+ function calculateDelta(left, right) {
151
+ const timeSaved = left.timeToComplete - right.timeToComplete;
152
+ const scoreImprovement = right.fafScore - left.fafScore;
153
+ // Generate verdict
154
+ let verdict = '';
155
+ if (scoreImprovement > 0) {
156
+ if (timeSaved > 0) {
157
+ verdict = `.faf-${right.fafScore}% completed ${timeSaved.toFixed(1)}s faster with ${scoreImprovement}% better context`;
158
+ }
159
+ else {
160
+ verdict = `.faf-${right.fafScore}% had ${scoreImprovement}% better context`;
161
+ }
162
+ }
163
+ else {
164
+ verdict = 'Context levels comparison complete';
165
+ }
166
+ return {
167
+ timeSaved,
168
+ scoreImprovement,
169
+ verdict
170
+ };
171
+ }
172
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/big-orange/compare.ts"],"names":[],"mappings":"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"}