faf-cli 2.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 (283) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +227 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +1249 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/ai-analyze.d.ts +18 -0
  8. package/dist/commands/ai-analyze.d.ts.map +1 -0
  9. package/dist/commands/ai-analyze.js +226 -0
  10. package/dist/commands/ai-analyze.js.map +1 -0
  11. package/dist/commands/ai-enhance.d.ts +17 -0
  12. package/dist/commands/ai-enhance.d.ts.map +1 -0
  13. package/dist/commands/ai-enhance.js +278 -0
  14. package/dist/commands/ai-enhance.js.map +1 -0
  15. package/dist/commands/audit.d.ts +11 -0
  16. package/dist/commands/audit.d.ts.map +1 -0
  17. package/dist/commands/audit.js +180 -0
  18. package/dist/commands/audit.js.map +1 -0
  19. package/dist/commands/auto.d.ts +27 -0
  20. package/dist/commands/auto.d.ts.map +1 -0
  21. package/dist/commands/auto.js +106 -0
  22. package/dist/commands/auto.js.map +1 -0
  23. package/dist/commands/bi-sync.d.ts +43 -0
  24. package/dist/commands/bi-sync.d.ts.map +1 -0
  25. package/dist/commands/bi-sync.js +224 -0
  26. package/dist/commands/bi-sync.js.map +1 -0
  27. package/dist/commands/chat.d.ts +6 -0
  28. package/dist/commands/chat.d.ts.map +1 -0
  29. package/dist/commands/chat.js +227 -0
  30. package/dist/commands/chat.js.map +1 -0
  31. package/dist/commands/check.d.ts +15 -0
  32. package/dist/commands/check.d.ts.map +1 -0
  33. package/dist/commands/check.js +58 -0
  34. package/dist/commands/check.js.map +1 -0
  35. package/dist/commands/clear.d.ts +15 -0
  36. package/dist/commands/clear.d.ts.map +1 -0
  37. package/dist/commands/clear.js +167 -0
  38. package/dist/commands/clear.js.map +1 -0
  39. package/dist/commands/commit.d.ts +8 -0
  40. package/dist/commands/commit.d.ts.map +1 -0
  41. package/dist/commands/commit.js +164 -0
  42. package/dist/commands/commit.js.map +1 -0
  43. package/dist/commands/convert.d.ts +19 -0
  44. package/dist/commands/convert.d.ts.map +1 -0
  45. package/dist/commands/convert.js +102 -0
  46. package/dist/commands/convert.js.map +1 -0
  47. package/dist/commands/credit.d.ts +13 -0
  48. package/dist/commands/credit.d.ts.map +1 -0
  49. package/dist/commands/credit.js +149 -0
  50. package/dist/commands/credit.js.map +1 -0
  51. package/dist/commands/edit-helper.d.ts +6 -0
  52. package/dist/commands/edit-helper.d.ts.map +1 -0
  53. package/dist/commands/edit-helper.js +55 -0
  54. package/dist/commands/edit-helper.js.map +1 -0
  55. package/dist/commands/edit.d.ts +14 -0
  56. package/dist/commands/edit.d.ts.map +1 -0
  57. package/dist/commands/edit.js +196 -0
  58. package/dist/commands/edit.js.map +1 -0
  59. package/dist/commands/faf-auth.d.ts +10 -0
  60. package/dist/commands/faf-auth.d.ts.map +1 -0
  61. package/dist/commands/faf-auth.js +162 -0
  62. package/dist/commands/faf-auth.js.map +1 -0
  63. package/dist/commands/faf-dna.d.ts +9 -0
  64. package/dist/commands/faf-dna.d.ts.map +1 -0
  65. package/dist/commands/faf-dna.js +141 -0
  66. package/dist/commands/faf-dna.js.map +1 -0
  67. package/dist/commands/faf-log.d.ts +9 -0
  68. package/dist/commands/faf-log.d.ts.map +1 -0
  69. package/dist/commands/faf-log.js +135 -0
  70. package/dist/commands/faf-log.js.map +1 -0
  71. package/dist/commands/faf-recover.d.ts +3 -0
  72. package/dist/commands/faf-recover.d.ts.map +1 -0
  73. package/dist/commands/faf-recover.js +299 -0
  74. package/dist/commands/faf-recover.js.map +1 -0
  75. package/dist/commands/faf-update.d.ts +9 -0
  76. package/dist/commands/faf-update.d.ts.map +1 -0
  77. package/dist/commands/faf-update.js +68 -0
  78. package/dist/commands/faf-update.js.map +1 -0
  79. package/dist/commands/faq.d.ts +12 -0
  80. package/dist/commands/faq.d.ts.map +1 -0
  81. package/dist/commands/faq.js +84 -0
  82. package/dist/commands/faq.js.map +1 -0
  83. package/dist/commands/flow.d.ts +11 -0
  84. package/dist/commands/flow.d.ts.map +1 -0
  85. package/dist/commands/flow.js +117 -0
  86. package/dist/commands/flow.js.map +1 -0
  87. package/dist/commands/formats.d.ts +12 -0
  88. package/dist/commands/formats.d.ts.map +1 -0
  89. package/dist/commands/formats.js +109 -0
  90. package/dist/commands/formats.js.map +1 -0
  91. package/dist/commands/index.d.ts +14 -0
  92. package/dist/commands/index.d.ts.map +1 -0
  93. package/dist/commands/index.js +443 -0
  94. package/dist/commands/index.js.map +1 -0
  95. package/dist/commands/init.d.ts +14 -0
  96. package/dist/commands/init.d.ts.map +1 -0
  97. package/dist/commands/init.js +202 -0
  98. package/dist/commands/init.js.map +1 -0
  99. package/dist/commands/lint.d.ts +11 -0
  100. package/dist/commands/lint.d.ts.map +1 -0
  101. package/dist/commands/lint.js +269 -0
  102. package/dist/commands/lint.js.map +1 -0
  103. package/dist/commands/mirror.d.ts +7 -0
  104. package/dist/commands/mirror.d.ts.map +1 -0
  105. package/dist/commands/mirror.js +130 -0
  106. package/dist/commands/mirror.js.map +1 -0
  107. package/dist/commands/score.d.ts +11 -0
  108. package/dist/commands/score.d.ts.map +1 -0
  109. package/dist/commands/score.js +192 -0
  110. package/dist/commands/score.js.map +1 -0
  111. package/dist/commands/search.d.ts +16 -0
  112. package/dist/commands/search.d.ts.map +1 -0
  113. package/dist/commands/search.js +174 -0
  114. package/dist/commands/search.js.map +1 -0
  115. package/dist/commands/share.d.ts +17 -0
  116. package/dist/commands/share.d.ts.map +1 -0
  117. package/dist/commands/share.js +260 -0
  118. package/dist/commands/share.js.map +1 -0
  119. package/dist/commands/show.d.ts +10 -0
  120. package/dist/commands/show.d.ts.map +1 -0
  121. package/dist/commands/show.js +167 -0
  122. package/dist/commands/show.js.map +1 -0
  123. package/dist/commands/stacks.d.ts +51 -0
  124. package/dist/commands/stacks.d.ts.map +1 -0
  125. package/dist/commands/stacks.js +180 -0
  126. package/dist/commands/stacks.js.map +1 -0
  127. package/dist/commands/status.d.ts +13 -0
  128. package/dist/commands/status.d.ts.map +1 -0
  129. package/dist/commands/status.js +158 -0
  130. package/dist/commands/status.js.map +1 -0
  131. package/dist/commands/sync.d.ts +11 -0
  132. package/dist/commands/sync.d.ts.map +1 -0
  133. package/dist/commands/sync.js +300 -0
  134. package/dist/commands/sync.js.map +1 -0
  135. package/dist/commands/todo.d.ts +14 -0
  136. package/dist/commands/todo.d.ts.map +1 -0
  137. package/dist/commands/todo.js +279 -0
  138. package/dist/commands/todo.js.map +1 -0
  139. package/dist/commands/trust.d.ts +33 -0
  140. package/dist/commands/trust.d.ts.map +1 -0
  141. package/dist/commands/trust.js +316 -0
  142. package/dist/commands/trust.js.map +1 -0
  143. package/dist/commands/validate.d.ts +11 -0
  144. package/dist/commands/validate.d.ts.map +1 -0
  145. package/dist/commands/validate.js +100 -0
  146. package/dist/commands/validate.js.map +1 -0
  147. package/dist/commands/verify.d.ts +36 -0
  148. package/dist/commands/verify.d.ts.map +1 -0
  149. package/dist/commands/verify.js +194 -0
  150. package/dist/commands/verify.js.map +1 -0
  151. package/dist/commands/version.d.ts +5 -0
  152. package/dist/commands/version.d.ts.map +1 -0
  153. package/dist/commands/version.js +33 -0
  154. package/dist/commands/version.js.map +1 -0
  155. package/dist/commands/vibe.d.ts +7 -0
  156. package/dist/commands/vibe.d.ts.map +1 -0
  157. package/dist/commands/vibe.js +78 -0
  158. package/dist/commands/vibe.js.map +1 -0
  159. package/dist/converters/faf-converters.d.ts +43 -0
  160. package/dist/converters/faf-converters.d.ts.map +1 -0
  161. package/dist/converters/faf-converters.js +186 -0
  162. package/dist/converters/faf-converters.js.map +1 -0
  163. package/dist/engine-bridge.d.ts +35 -0
  164. package/dist/engine-bridge.d.ts.map +1 -0
  165. package/dist/engine-bridge.js +76 -0
  166. package/dist/engine-bridge.js.map +1 -0
  167. package/dist/engines/claude-todo-engine.d.ts +115 -0
  168. package/dist/engines/claude-todo-engine.d.ts.map +1 -0
  169. package/dist/engines/claude-todo-engine.js +346 -0
  170. package/dist/engines/claude-todo-engine.js.map +1 -0
  171. package/dist/engines/drop-coach.d.ts +64 -0
  172. package/dist/engines/drop-coach.d.ts.map +1 -0
  173. package/dist/engines/drop-coach.js +222 -0
  174. package/dist/engines/drop-coach.js.map +1 -0
  175. package/dist/engines/fab-formats-processor.d.ts +167 -0
  176. package/dist/engines/fab-formats-processor.d.ts.map +1 -0
  177. package/dist/engines/fab-formats-processor.js +1274 -0
  178. package/dist/engines/fab-formats-processor.js.map +1 -0
  179. package/dist/engines/faf-dna.d.ts +160 -0
  180. package/dist/engines/faf-dna.d.ts.map +1 -0
  181. package/dist/engines/faf-dna.js +522 -0
  182. package/dist/engines/faf-dna.js.map +1 -0
  183. package/dist/engines/relentless-context-extractor.d.ts +101 -0
  184. package/dist/engines/relentless-context-extractor.d.ts.map +1 -0
  185. package/dist/engines/relentless-context-extractor.js +625 -0
  186. package/dist/engines/relentless-context-extractor.js.map +1 -0
  187. package/dist/fix-once/colors.d.ts +83 -0
  188. package/dist/fix-once/colors.d.ts.map +1 -0
  189. package/dist/fix-once/colors.js +145 -0
  190. package/dist/fix-once/colors.js.map +1 -0
  191. package/dist/fix-once/types.d.ts +258 -0
  192. package/dist/fix-once/types.d.ts.map +1 -0
  193. package/dist/fix-once/types.js +26 -0
  194. package/dist/fix-once/types.js.map +1 -0
  195. package/dist/framework-detector.d.ts +286 -0
  196. package/dist/framework-detector.d.ts.map +1 -0
  197. package/dist/framework-detector.js +782 -0
  198. package/dist/framework-detector.js.map +1 -0
  199. package/dist/generators/faf-generator-championship.d.ts +11 -0
  200. package/dist/generators/faf-generator-championship.d.ts.map +1 -0
  201. package/dist/generators/faf-generator-championship.js +371 -0
  202. package/dist/generators/faf-generator-championship.js.map +1 -0
  203. package/dist/index.d.ts +18 -0
  204. package/dist/index.d.ts.map +1 -0
  205. package/dist/index.js +34 -0
  206. package/dist/index.js.map +1 -0
  207. package/dist/output/experience-manager.d.ts +58 -0
  208. package/dist/output/experience-manager.d.ts.map +1 -0
  209. package/dist/output/experience-manager.js +212 -0
  210. package/dist/output/experience-manager.js.map +1 -0
  211. package/dist/schema/faf-schema.d.ts +92 -0
  212. package/dist/schema/faf-schema.d.ts.map +1 -0
  213. package/dist/schema/faf-schema.js +173 -0
  214. package/dist/schema/faf-schema.js.map +1 -0
  215. package/dist/scoring/championship-scorer.d.ts +114 -0
  216. package/dist/scoring/championship-scorer.d.ts.map +1 -0
  217. package/dist/scoring/championship-scorer.js +380 -0
  218. package/dist/scoring/championship-scorer.js.map +1 -0
  219. package/dist/scoring/score-calculator.d.ts +29 -0
  220. package/dist/scoring/score-calculator.d.ts.map +1 -0
  221. package/dist/scoring/score-calculator.js +520 -0
  222. package/dist/scoring/score-calculator.js.map +1 -0
  223. package/dist/telemetry/analytics.d.ts +74 -0
  224. package/dist/telemetry/analytics.d.ts.map +1 -0
  225. package/dist/telemetry/analytics.js +370 -0
  226. package/dist/telemetry/analytics.js.map +1 -0
  227. package/dist/utils/balance-visualizer.d.ts +38 -0
  228. package/dist/utils/balance-visualizer.d.ts.map +1 -0
  229. package/dist/utils/balance-visualizer.js +196 -0
  230. package/dist/utils/balance-visualizer.js.map +1 -0
  231. package/dist/utils/championship-style.d.ts +110 -0
  232. package/dist/utils/championship-style.d.ts.map +1 -0
  233. package/dist/utils/championship-style.js +213 -0
  234. package/dist/utils/championship-style.js.map +1 -0
  235. package/dist/utils/color-utils.d.ts +17 -0
  236. package/dist/utils/color-utils.d.ts.map +1 -0
  237. package/dist/utils/color-utils.js +96 -0
  238. package/dist/utils/color-utils.js.map +1 -0
  239. package/dist/utils/fab-formats-engine.d.ts +76 -0
  240. package/dist/utils/fab-formats-engine.d.ts.map +1 -0
  241. package/dist/utils/fab-formats-engine.js +424 -0
  242. package/dist/utils/fab-formats-engine.js.map +1 -0
  243. package/dist/utils/fafignore-parser.d.ts +21 -0
  244. package/dist/utils/fafignore-parser.d.ts.map +1 -0
  245. package/dist/utils/fafignore-parser.js +178 -0
  246. package/dist/utils/fafignore-parser.js.map +1 -0
  247. package/dist/utils/file-utils.d.ts +65 -0
  248. package/dist/utils/file-utils.d.ts.map +1 -0
  249. package/dist/utils/file-utils.js +598 -0
  250. package/dist/utils/file-utils.js.map +1 -0
  251. package/dist/utils/platform-detector.d.ts +31 -0
  252. package/dist/utils/platform-detector.d.ts.map +1 -0
  253. package/dist/utils/platform-detector.js +218 -0
  254. package/dist/utils/platform-detector.js.map +1 -0
  255. package/dist/utils/technical-credit.d.ts +36 -0
  256. package/dist/utils/technical-credit.d.ts.map +1 -0
  257. package/dist/utils/technical-credit.js +286 -0
  258. package/dist/utils/technical-credit.js.map +1 -0
  259. package/dist/utils/trust-cache.d.ts +29 -0
  260. package/dist/utils/trust-cache.d.ts.map +1 -0
  261. package/dist/utils/trust-cache.js +123 -0
  262. package/dist/utils/trust-cache.js.map +1 -0
  263. package/dist/utils/turbo-cat-knowledge.d.ts +82 -0
  264. package/dist/utils/turbo-cat-knowledge.d.ts.map +1 -0
  265. package/dist/utils/turbo-cat-knowledge.js +1346 -0
  266. package/dist/utils/turbo-cat-knowledge.js.map +1 -0
  267. package/dist/utils/turbo-cat-pyramid.d.ts +38 -0
  268. package/dist/utils/turbo-cat-pyramid.d.ts.map +1 -0
  269. package/dist/utils/turbo-cat-pyramid.js +287 -0
  270. package/dist/utils/turbo-cat-pyramid.js.map +1 -0
  271. package/dist/utils/turbo-cat.d.ts +92 -0
  272. package/dist/utils/turbo-cat.d.ts.map +1 -0
  273. package/dist/utils/turbo-cat.js +412 -0
  274. package/dist/utils/turbo-cat.js.map +1 -0
  275. package/dist/utils/vibe-sync.d.ts +25 -0
  276. package/dist/utils/vibe-sync.d.ts.map +1 -0
  277. package/dist/utils/vibe-sync.js +169 -0
  278. package/dist/utils/vibe-sync.js.map +1 -0
  279. package/dist/utils/yaml-generator.d.ts +39 -0
  280. package/dist/utils/yaml-generator.d.ts.map +1 -0
  281. package/dist/utils/yaml-generator.js +345 -0
  282. package/dist/utils/yaml-generator.js.map +1 -0
  283. package/package.json +96 -0
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * 🚀 faf init - Initialization Command
4
+ * Generate .faf file from project structure with auto-detection
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.initFafFile = initFafFile;
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const fs_1 = require("fs");
46
+ const path_1 = __importDefault(require("path"));
47
+ const YAML = __importStar(require("yaml"));
48
+ const championship_style_1 = require("../utils/championship-style");
49
+ const technical_credit_1 = require("../utils/technical-credit");
50
+ const file_utils_1 = require("../utils/file-utils");
51
+ const faf_generator_championship_1 = require("../generators/faf-generator-championship");
52
+ const score_calculator_1 = require("../scoring/score-calculator");
53
+ const fafignore_parser_1 = require("../utils/fafignore-parser");
54
+ const balance_visualizer_1 = require("../utils/balance-visualizer");
55
+ const faf_dna_1 = require("../engines/faf-dna");
56
+ const fab_formats_processor_1 = require("../engines/fab-formats-processor");
57
+ const platform_detector_1 = require("../utils/platform-detector");
58
+ async function initFafFile(projectPath, options = {}) {
59
+ const startTime = Date.now();
60
+ // Show the FAF banner
61
+ const { generateFAFHeader } = require('../utils/championship-style');
62
+ console.log(generateFAFHeader());
63
+ try {
64
+ const projectRoot = projectPath || process.cwd();
65
+ const outputPath = options.output ? options.output : `${projectRoot}/.faf`;
66
+ // Check if .faf file already exists
67
+ if ((await (0, file_utils_1.fileExists)(outputPath)) && !options.force && !options.new && !options.choose) {
68
+ const username = require('os').userInfo().username;
69
+ console.log();
70
+ console.log(chalk_1.default.cyan.bold(`👋 Hi ${username}!`));
71
+ console.log();
72
+ console.log(chalk_1.default.green(`🤖 We found a .faf file at: `) + chalk_1.default.cyan(outputPath));
73
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`💡 Do you want to use this one? Or run `) + chalk_1.default.cyan('faf init --new') + championship_style_1.FAF_COLORS.fafOrange(' to create a fresh one?'));
74
+ console.log();
75
+ return; // Don't exit, just return gracefully
76
+ }
77
+ console.log();
78
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.rocket} Initializing .faf file...`));
79
+ // Check for .fafignore
80
+ const fafIgnorePath = path_1.default.join(projectRoot, ".fafignore");
81
+ if (!(await (0, file_utils_1.fileExists)(fafIgnorePath))) {
82
+ console.log(chalk_1.default.gray(" Creating .fafignore with default patterns..."));
83
+ await (0, fafignore_parser_1.createDefaultFafIgnore)(projectRoot);
84
+ console.log(chalk_1.default.green(" ☑️ Created .fafignore (customize to exclude files)"));
85
+ }
86
+ else {
87
+ console.log(chalk_1.default.gray(" Using existing .fafignore file"));
88
+ }
89
+ // Detect project structure
90
+ const projectType = options.template === "auto"
91
+ ? await (0, file_utils_1.detectProjectType)(projectRoot)
92
+ : options.template || (await (0, file_utils_1.detectProjectType)(projectRoot));
93
+ console.log(chalk_1.default.gray(` Detected project type: ${projectType}`));
94
+ // Generate .faf content
95
+ const fafContent = await (0, faf_generator_championship_1.generateFafFromProject)({
96
+ projectType,
97
+ outputPath,
98
+ projectRoot: projectRoot,
99
+ });
100
+ // Write .faf file
101
+ await fs_1.promises.writeFile(outputPath, fafContent, "utf-8");
102
+ const elapsedTime = Date.now() - startTime;
103
+ console.log(chalk_1.default.green(`☑️ Created ${outputPath}`));
104
+ console.log();
105
+ console.log(championship_style_1.FAF_COLORS.fafOrange('🤖 .faf = Foundational AI-context Format = THE JPEG for AI! 🧡⚡️'));
106
+ console.log(championship_style_1.FAF_COLORS.fafOrange('🧡 Trust: Context verified'));
107
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`⚡️ Speed: Generated in ${elapsedTime}ms`));
108
+ console.log(championship_style_1.FAF_COLORS.fafGreen('SPEEDY AI you can TRUST!'));
109
+ console.log();
110
+ // Award technical credit for successful initialization
111
+ await (0, technical_credit_1.autoAwardCredit)('init_success', outputPath);
112
+ // REVOLUTIONARY: Score CLAUDE.md ONLY for birth weight!
113
+ // This is the TRUE starting point - what AI sees initially
114
+ console.log();
115
+ console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.magic_wand} Analyzing CLAUDE.md for birth weight...`));
116
+ const claudeMdPath = path_1.default.join(projectRoot, 'CLAUDE.md');
117
+ let birthWeight = 0;
118
+ let fromClaudeMD = false;
119
+ if (await (0, file_utils_1.fileExists)(claudeMdPath)) {
120
+ // Score ONLY CLAUDE.md for birth weight
121
+ const claudeMdContent = await fs_1.promises.readFile(claudeMdPath, 'utf-8');
122
+ const claudeMdAnalysis = await fab_formats_processor_1.fabFormatsProcessor.processFiles(projectRoot);
123
+ // Calculate birth weight from CLAUDE.md context quality
124
+ // Low scores are GOOD - they show the journey!
125
+ if (claudeMdContent.length < 100) {
126
+ birthWeight = 5; // Almost empty CLAUDE.md
127
+ }
128
+ else if (claudeMdContent.includes('FAF')) {
129
+ birthWeight = 22; // Has some FAF context
130
+ }
131
+ else {
132
+ birthWeight = 12; // Generic CLAUDE.md
133
+ }
134
+ fromClaudeMD = true;
135
+ console.log(championship_style_1.FAF_COLORS.fafOrange(` Birth weight from CLAUDE.md: ${birthWeight}%`));
136
+ console.log(championship_style_1.FAF_COLORS.fafWhite(` (Low scores are normal - they show your growth journey!)`));
137
+ }
138
+ else {
139
+ // No CLAUDE.md - use minimal birth weight
140
+ birthWeight = 0;
141
+ console.log(championship_style_1.FAF_COLORS.fafOrange(` No CLAUDE.md found - birth weight: ${birthWeight}%`));
142
+ }
143
+ // Initialize FAF DNA with birth certificate
144
+ const dnaManager = new faf_dna_1.FafDNAManager(projectRoot);
145
+ const dna = await dnaManager.birth(birthWeight, fromClaudeMD);
146
+ console.log();
147
+ console.log(championship_style_1.FAF_COLORS.fafGreen(`${championship_style_1.FAF_ICONS.dna} FAF DNA created with birth certificate!`));
148
+ console.log(championship_style_1.FAF_COLORS.fafWhite(` Certificate: ${dna.birthCertificate.certificate}`));
149
+ // Now calculate ACTUAL score from full .faf
150
+ const fafData = YAML.parse(fafContent);
151
+ const scoreResult = await (0, score_calculator_1.calculateFafScore)(fafData, outputPath);
152
+ const currentScore = fafData.faf_score ? parseInt(fafData.faf_score.replace('%', '')) : scoreResult.totalScore;
153
+ // Record first growth if different from birth weight
154
+ if (currentScore !== birthWeight) {
155
+ await dnaManager.recordGrowth(currentScore, ['Initial .faf generation from project']);
156
+ }
157
+ // Display with birth weight
158
+ console.log();
159
+ (0, faf_dna_1.displayScoreWithBirthWeight)(currentScore, birthWeight, dna.birthCertificate.born, { showGrowth: true });
160
+ // Show AI|HUMAN Balance
161
+ const balance = balance_visualizer_1.BalanceVisualizer.calculateBalance(fafData);
162
+ console.log(championship_style_1.FAF_COLORS.fafWhite(`${championship_style_1.FAF_ICONS.balance} Balance: `) + balance_visualizer_1.BalanceVisualizer.generateCompactBalance(balance));
163
+ // Detect platform and show VIBE message if applicable
164
+ const platformDetector = new platform_detector_1.PlatformDetector();
165
+ const platformInfo = await platformDetector.detectPlatform(projectRoot);
166
+ if (platformInfo.detected && platformInfo.tier === 'vibe') {
167
+ console.log();
168
+ console.log(championship_style_1.FAF_COLORS.fafOrange('⚡️ FAF VIBE DETECTED! 😽'));
169
+ console.log(championship_style_1.FAF_COLORS.fafCyan(` Platform: ${platformInfo.platform}`));
170
+ console.log(championship_style_1.FAF_COLORS.fafGreen(` Special pricing: $9/month FOREVER!`));
171
+ console.log(championship_style_1.FAF_COLORS.fafWhite(` ${championship_style_1.FAF_ICONS.turbo_cat} TURBO-CAT is ready to make your AI happy!`));
172
+ }
173
+ // Championship Next Steps with DNA lifecycle
174
+ console.log();
175
+ console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.magic_wand} Championship Recommendations:`));
176
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan(' 1. ')}faf auth${championship_style_1.FAF_COLORS.fafCyan(' - Authenticate your FAF DNA')}`);
177
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan(' 2. ')}faf auto${championship_style_1.FAF_COLORS.fafCyan(' - Grow your context automatically')}`);
178
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan(' 3. ')}faf score --details${championship_style_1.FAF_COLORS.fafCyan(' - Track improvement opportunities')}`);
179
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan(' 4. ')}faf trust --detailed${championship_style_1.FAF_COLORS.fafCyan(' - Boost AI happiness')}`);
180
+ console.log(`${championship_style_1.FAF_COLORS.fafCyan(' 5. ')}faf log${championship_style_1.FAF_COLORS.fafCyan(' - View your context evolution')}`);
181
+ // Growth-focused messaging
182
+ const growth = currentScore - birthWeight;
183
+ if (growth > 0) {
184
+ console.log();
185
+ console.log(championship_style_1.FAF_COLORS.fafGreen(`${championship_style_1.FAF_ICONS.rocket} Already improved +${growth}% from birth weight!`));
186
+ }
187
+ if (currentScore < 70) {
188
+ console.log(championship_style_1.FAF_COLORS.fafOrange(` ${championship_style_1.FAF_ICONS.precision} Target 70%+ for championship AI context`));
189
+ }
190
+ else if (currentScore >= 85) {
191
+ console.log(championship_style_1.FAF_COLORS.fafGreen(`${championship_style_1.FAF_ICONS.party} Championship performance achieved! ${championship_style_1.FAF_ICONS.trophy}`));
192
+ }
193
+ console.log();
194
+ console.log(championship_style_1.FAF_COLORS.fafWhite(`Your FAF journey has begun: ${birthWeight}% → ${currentScore}%`));
195
+ }
196
+ catch (error) {
197
+ console.log(chalk_1.default.red("💥 Initialization failed:"));
198
+ console.log(chalk_1.default.red(error instanceof Error ? error.message : String(error)));
199
+ process.exit(1);
200
+ }
201
+ }
202
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 🔧 faf lint - Lint Command
3
+ * Format compliance and style checking for .faf files
4
+ */
5
+ interface LintOptions {
6
+ fix?: boolean;
7
+ schemaVersion?: string;
8
+ }
9
+ export declare function lintFafFile(file?: string, options?: LintOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,iBAmIzE"}
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ /**
3
+ * 🔧 faf lint - Lint Command
4
+ * Format compliance and style checking for .faf files
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.lintFafFile = lintFafFile;
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const fs_1 = require("fs");
46
+ const YAML = __importStar(require("yaml"));
47
+ const file_utils_1 = require("../utils/file-utils");
48
+ const faf_schema_1 = require("../schema/faf-schema");
49
+ async function lintFafFile(file, options = {}) {
50
+ try {
51
+ const fafPath = file || (await (0, file_utils_1.findFafFile)());
52
+ if (!fafPath) {
53
+ console.log(chalk_1.default.red("❌ No .faf file found"));
54
+ console.log(chalk_1.default.yellow('💡 Run "faf init" to create one'));
55
+ process.exit(1);
56
+ }
57
+ console.log(chalk_1.default.blue(`🔧 Linting: ${fafPath}`));
58
+ // Read .faf file
59
+ const content = await fs_1.promises.readFile(fafPath, "utf-8");
60
+ // Parse and analyze
61
+ let fafData;
62
+ const issues = [];
63
+ try {
64
+ fafData = YAML.parse(content);
65
+ }
66
+ catch (parseError) {
67
+ issues.push({
68
+ type: "error",
69
+ message: `YAML parsing error: ${parseError}`,
70
+ fixable: false,
71
+ });
72
+ console.log(chalk_1.default.red("❌ Failed to parse .faf file"));
73
+ console.log(chalk_1.default.red(parseError instanceof Error ? parseError.message : String(parseError)));
74
+ process.exit(1);
75
+ }
76
+ // Run schema validation first
77
+ const validation = (0, faf_schema_1.validateSchema)(fafData, options.schemaVersion);
78
+ // Convert validation results to lint issues
79
+ validation.errors.forEach((error) => {
80
+ issues.push({
81
+ type: "error",
82
+ message: error.message,
83
+ fixable: false,
84
+ });
85
+ });
86
+ validation.warnings.forEach((warning) => {
87
+ issues.push({
88
+ type: "warning",
89
+ message: warning.message,
90
+ fixable: false,
91
+ });
92
+ });
93
+ // Additional lint checks
94
+ performFormatLinting(fafData, content, issues);
95
+ performStyleLinting(fafData, issues);
96
+ performBestPracticeLinting(fafData, issues);
97
+ // Display results
98
+ const errors = issues.filter((i) => i.type === "error");
99
+ const warnings = issues.filter((i) => i.type === "warning");
100
+ const info = issues.filter((i) => i.type === "info");
101
+ const fixableIssues = issues.filter((i) => i.fixable);
102
+ if (errors.length === 0 && warnings.length === 0 && info.length === 0) {
103
+ console.log(chalk_1.default.green("☑️ No linting issues found"));
104
+ return;
105
+ }
106
+ // Show issues by type
107
+ if (errors.length > 0) {
108
+ console.log(chalk_1.default.red(`\n❌ ${errors.length} Error(s):`));
109
+ errors.forEach((error, index) => {
110
+ console.log(chalk_1.default.red(` ${index + 1}. ${error.message}`));
111
+ });
112
+ }
113
+ if (warnings.length > 0) {
114
+ console.log(chalk_1.default.yellow(`\n⚠️ ${warnings.length} Warning(s):`));
115
+ warnings.forEach((warning, index) => {
116
+ console.log(chalk_1.default.yellow(` ${index + 1}. ${warning.message}`));
117
+ });
118
+ }
119
+ if (info.length > 0) {
120
+ console.log(chalk_1.default.blue(`\n💡 ${info.length} Suggestion(s):`));
121
+ info.forEach((suggestion, index) => {
122
+ console.log(chalk_1.default.blue(` ${index + 1}. ${suggestion.message}`));
123
+ });
124
+ }
125
+ // Auto-fix if requested
126
+ if (options.fix && fixableIssues.length > 0) {
127
+ console.log(chalk_1.default.blue(`\n🔧 Auto-fixing ${fixableIssues.length} issue(s)...`));
128
+ fixableIssues.forEach((issue) => {
129
+ if (issue.fix) {
130
+ issue.fix();
131
+ }
132
+ });
133
+ // Write fixed content
134
+ const fixedContent = YAML.stringify(fafData, { lineWidth: 100 });
135
+ await fs_1.promises.writeFile(fafPath, fixedContent, "utf-8");
136
+ console.log(chalk_1.default.green("☑️ Auto-fixes applied"));
137
+ }
138
+ else if (fixableIssues.length > 0) {
139
+ console.log(chalk_1.default.yellow(`\n💡 ${fixableIssues.length} issue(s) can be auto-fixed with --fix`));
140
+ }
141
+ // Exit with error code if there are errors
142
+ if (errors.length > 0) {
143
+ process.exit(1);
144
+ }
145
+ }
146
+ catch (error) {
147
+ console.log(chalk_1.default.red("💥 Linting failed:"));
148
+ console.log(chalk_1.default.red(error instanceof Error ? error.message : String(error)));
149
+ process.exit(1);
150
+ }
151
+ }
152
+ function performFormatLinting(fafData, content, issues) {
153
+ // Check YAML formatting
154
+ try {
155
+ const normalizedYaml = YAML.stringify(fafData, { lineWidth: 100 });
156
+ const currentLines = content.split("\n").map((line) => line.trimEnd());
157
+ const normalizedLines = normalizedYaml
158
+ .split("\n")
159
+ .map((line) => line.trimEnd());
160
+ if (currentLines.length !== normalizedLines.length) {
161
+ issues.push({
162
+ type: "info",
163
+ message: "YAML formatting could be improved",
164
+ fixable: true,
165
+ fix: () => {
166
+ // Fix will be applied in the main function
167
+ },
168
+ });
169
+ }
170
+ }
171
+ catch {
172
+ // Skip formatting check if there are parsing issues
173
+ }
174
+ // Check for trailing whitespace
175
+ const lines = content.split("\n");
176
+ lines.forEach((line, index) => {
177
+ if (line.length > 0 && line !== line.trimEnd()) {
178
+ issues.push({
179
+ type: "warning",
180
+ message: `Trailing whitespace on line ${index + 1}`,
181
+ line: index + 1,
182
+ fixable: true,
183
+ });
184
+ }
185
+ });
186
+ }
187
+ function performStyleLinting(fafData, issues) {
188
+ // Check for consistent naming
189
+ if (fafData.project?.name && fafData.project.name.includes("_")) {
190
+ issues.push({
191
+ type: "info",
192
+ message: "Project name contains underscores - consider kebab-case",
193
+ fixable: false,
194
+ });
195
+ }
196
+ // Check score consistency
197
+ if (fafData.scores) {
198
+ const fafScore = fafData.scores.faf_score;
199
+ const slotPercentage = fafData.scores.slot_based_percentage;
200
+ if (typeof fafScore === "number" && typeof slotPercentage === "number") {
201
+ const expectedSlots = Math.round((fafScore / 100) * 21);
202
+ if (Math.abs(slotPercentage - expectedSlots) > 2) {
203
+ issues.push({
204
+ type: "warning",
205
+ message: "Slot-based percentage may be inconsistent with faf_score",
206
+ fixable: false,
207
+ });
208
+ }
209
+ }
210
+ }
211
+ }
212
+ function performBestPracticeLinting(fafData, issues) {
213
+ // Check for AI instructions
214
+ if (!fafData.ai_instructions || !fafData.ai_instructions.message) {
215
+ issues.push({
216
+ type: "info",
217
+ message: "Consider adding ai_instructions section for better AI context",
218
+ fixable: false,
219
+ });
220
+ }
221
+ // Check for human context
222
+ if (!fafData.human_context) {
223
+ issues.push({
224
+ type: "info",
225
+ message: "Consider adding human_context section (who/what/why/where/when/how)",
226
+ fixable: false,
227
+ });
228
+ }
229
+ // Check timestamp freshness
230
+ if (fafData.generated) {
231
+ try {
232
+ const generated = new Date(fafData.generated);
233
+ const daysSince = (Date.now() - generated.getTime()) / (1000 * 60 * 60 * 24);
234
+ if (daysSince > 30) {
235
+ issues.push({
236
+ type: "warning",
237
+ message: `Generated timestamp is ${Math.round(daysSince)} days old - consider updating`,
238
+ fixable: true,
239
+ fix: () => {
240
+ fafData.generated = new Date().toISOString();
241
+ },
242
+ });
243
+ }
244
+ }
245
+ catch {
246
+ issues.push({
247
+ type: "warning",
248
+ message: "Invalid generated timestamp format",
249
+ fixable: true,
250
+ fix: () => {
251
+ fafData.generated = new Date().toISOString();
252
+ },
253
+ });
254
+ }
255
+ }
256
+ // Check for empty sections
257
+ Object.entries(fafData).forEach(([key, value]) => {
258
+ if (typeof value === "object" &&
259
+ value !== null &&
260
+ Object.keys(value).length === 0) {
261
+ issues.push({
262
+ type: "warning",
263
+ message: `Empty section detected: ${key}`,
264
+ fixable: false,
265
+ });
266
+ }
267
+ });
268
+ }
269
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 🔄 Mirror Command - Context-Mirroring (Bi-sync)
4
+ * Part of the .faf flow: Get .faffed → Mirror → Commit
5
+ */
6
+ export declare function mirrorCommand(targetPath?: string): Promise<void>;
7
+ //# sourceMappingURL=mirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirror.d.ts","sourceRoot":"","sources":["../../src/commands/mirror.ts"],"names":[],"mappings":";AACA;;;GAGG;AASH,wBAAsB,aAAa,CAAC,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiG3E"}
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * 🔄 Mirror Command - Context-Mirroring (Bi-sync)
5
+ * Part of the .faf flow: Get .faffed → Mirror → Commit
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.mirrorCommand = mirrorCommand;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const chalk_1 = __importDefault(require("chalk"));
48
+ const YAML = __importStar(require("yaml"));
49
+ async function mirrorCommand(targetPath = '.') {
50
+ console.log(chalk_1.default.bold.hex('#FF6B35')('\n🔄 Mirroring Context (Bi-sync with CLAUDE.md)...\n'));
51
+ const absolutePath = path.resolve(targetPath);
52
+ try {
53
+ // Check for .faf file
54
+ const fafPath = path.join(absolutePath, '.faf');
55
+ if (!fs.existsSync(fafPath)) {
56
+ console.error(chalk_1.default.red('❌ No .faf file found. Run "faf init" first.'));
57
+ process.exit(1);
58
+ }
59
+ // Check for CLAUDE.md
60
+ const claudePath = path.join(absolutePath, 'CLAUDE.md');
61
+ const hasClaudeMd = fs.existsSync(claudePath);
62
+ if (!hasClaudeMd) {
63
+ console.log(chalk_1.default.yellow('📝 Creating CLAUDE.md from .faf...'));
64
+ // Read .faf and create CLAUDE.md
65
+ const fafContent = fs.readFileSync(fafPath, 'utf-8');
66
+ const fafData = YAML.parse(fafContent);
67
+ const claudeContent = `# 🧡⚡️ CLAUDE.md - AI Context Mirror
68
+ ## Generated from .faf - The JPEG for AI™
69
+
70
+ ### Project: ${fafData.project?.name || 'Unknown'}
71
+ **Stack**: ${fafData.instant_context?.tech_stack || fafData.project?.main_language || 'Unknown'}
72
+ **Goal**: ${fafData.project?.goal || fafData.instant_context?.what_building || 'Unknown'}
73
+
74
+ ### AI Context
75
+ ${YAML.stringify(fafData.instant_context || {}, null, 2)}
76
+
77
+ ### Quality Status
78
+ - **AI Score**: ${fafData.ai_score || 'Not calculated'}
79
+ - **Confidence**: ${fafData.ai_confidence || 'Unknown'}
80
+ - **Handoff Ready**: ${fafData.context_quality?.handoff_ready || false}
81
+
82
+ ---
83
+ *Synced with .faf via Context-Mirroring™*
84
+ *Last sync: ${new Date().toISOString()}*
85
+ `;
86
+ fs.writeFileSync(claudePath, claudeContent);
87
+ console.log(chalk_1.default.green('✅ CLAUDE.md created!'));
88
+ }
89
+ // Perform bi-directional sync
90
+ console.log(chalk_1.default.cyan('🔄 Performing bi-directional sync...'));
91
+ // Read both files
92
+ const fafContent = fs.readFileSync(fafPath, 'utf-8');
93
+ const claudeContent = fs.readFileSync(claudePath, 'utf-8');
94
+ const fafData = YAML.parse(fafContent);
95
+ // Update sync metadata
96
+ if (!fafData.sync_metadata) {
97
+ fafData.sync_metadata = {};
98
+ }
99
+ fafData.sync_metadata.last_mirror = new Date().toISOString();
100
+ fafData.sync_metadata.claude_md_synced = true;
101
+ fafData.sync_metadata.mirror_version = '2.0';
102
+ // Update AI score for mirroring
103
+ if (fafData.ai_score && fafData.ai_score.includes('%')) {
104
+ const currentScore = parseInt(fafData.ai_score);
105
+ if (currentScore < 95) {
106
+ fafData.ai_score = '95%';
107
+ console.log(chalk_1.default.green('📈 AI Score increased to 95% (Context Mirrored)'));
108
+ }
109
+ }
110
+ // Write updated .faf
111
+ const updatedYaml = YAML.stringify(fafData, null, 2);
112
+ fs.writeFileSync(fafPath, updatedYaml);
113
+ // Update CLAUDE.md footer
114
+ const syncFooter = `\n---\n*Context-Mirroring™ Active*\n*Last sync: ${new Date().toISOString()}*\n*Status: Bi-directional sync established*\n`;
115
+ if (!claudeContent.includes('Context-Mirroring™ Active')) {
116
+ fs.appendFileSync(claudePath, syncFooter);
117
+ }
118
+ console.log(chalk_1.default.green('\n✅ Context Mirrored Successfully!'));
119
+ console.log(chalk_1.default.cyan(' • .faf ↔️ CLAUDE.md synced'));
120
+ console.log(chalk_1.default.cyan(' • Bi-directional updates enabled'));
121
+ console.log(chalk_1.default.cyan(' • AI score: 95%'));
122
+ console.log(chalk_1.default.bold.hex('#FF6B35')('\n💡 Next step: Run "faf commit" to lock in excellence at 99%+\n'));
123
+ }
124
+ catch (error) {
125
+ console.error(chalk_1.default.red('❌ Mirror failed:'), error);
126
+ console.error(chalk_1.default.yellow('\nTry running "faf bi-sync" for detailed sync.'));
127
+ process.exit(1);
128
+ }
129
+ }
130
+ //# sourceMappingURL=mirror.js.map