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,135 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * FAF LOG - Complete Context Evolution History
5
+ *
6
+ * Shows every version, growth milestone, and achievement
7
+ * The complete DNA record of your project's AI context
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const commander_1 = require("commander");
11
+ const faf_dna_1 = require("../engines/faf-dna");
12
+ const colors_1 = require("../fix-once/colors");
13
+ const program = new commander_1.Command();
14
+ program
15
+ .name('faf log')
16
+ .description('View the complete evolution history of your FAF context')
17
+ .option('--milestones', 'Show milestones only')
18
+ .option('--analytics', 'Show growth analytics')
19
+ .option('--json', 'Output as JSON')
20
+ .action(async (options) => {
21
+ try {
22
+ const projectPath = process.cwd();
23
+ const dnaManager = new faf_dna_1.FafDNAManager(projectPath);
24
+ // Load DNA
25
+ const dna = await dnaManager.load();
26
+ if (!dna) {
27
+ console.log(colors_1.colors.error('❌ No FAF DNA found'));
28
+ console.log(colors_1.colors.secondary('Run "faf init" to create your project DNA'));
29
+ process.exit(1);
30
+ }
31
+ if (options.json) {
32
+ // JSON output for tooling
33
+ console.log(JSON.stringify(dna, null, 2));
34
+ process.exit(0);
35
+ }
36
+ if (options.milestones) {
37
+ // Milestones view
38
+ console.log();
39
+ console.log(colors_1.colors.primary('🏆 FAF MILESTONES'));
40
+ console.log(colors_1.colors.secondary('═'.repeat(50)));
41
+ console.log();
42
+ for (const milestone of dna.growth.milestones) {
43
+ const growth = milestone.score - dna.birthCertificate.birthWeight;
44
+ const growthStr = growth > 0 ? `+${growth}%` : `${growth}%`;
45
+ console.log(`${milestone.emoji || '📍'} ${colors_1.colors.highlight(milestone.label || milestone.type)}: ` +
46
+ `${colors_1.colors.success(`${milestone.score}%`)} ` +
47
+ `${colors_1.colors.secondary(`(${growthStr} from birth)`)}`);
48
+ console.log(colors_1.colors.secondary(` ${milestone.date.toISOString().split('T')[0]} - ${milestone.version}`));
49
+ console.log();
50
+ }
51
+ // Show journey
52
+ console.log(colors_1.colors.secondary('═'.repeat(50)));
53
+ const journey = dnaManager.getJourney('compact');
54
+ console.log(colors_1.colors.info(`Journey: ${journey}`));
55
+ console.log();
56
+ process.exit(0);
57
+ }
58
+ if (options.analytics) {
59
+ // Analytics view
60
+ console.log();
61
+ console.log(colors_1.colors.primary('📊 FAF GROWTH ANALYTICS'));
62
+ console.log(colors_1.colors.secondary('═'.repeat(50)));
63
+ console.log();
64
+ const analytics = dna.growth;
65
+ const birthWeight = dna.birthCertificate.birthWeight;
66
+ console.log(colors_1.colors.info('Growth Metrics:'));
67
+ console.log(colors_1.colors.secondary(` • Birth Weight: ${birthWeight}%`));
68
+ console.log(colors_1.colors.secondary(` • Current Score: ${dna.current.score}%`));
69
+ console.log(colors_1.colors.highlight(` • Total Growth: +${analytics.totalGrowth}%`));
70
+ console.log();
71
+ console.log(colors_1.colors.info('Time Metrics:'));
72
+ console.log(colors_1.colors.secondary(` • Days Active: ${analytics.daysActive} days`));
73
+ console.log(colors_1.colors.secondary(` • Daily Growth Rate: ${analytics.averageDailyGrowth.toFixed(1)}% per day`));
74
+ console.log();
75
+ console.log(colors_1.colors.info('Records:'));
76
+ console.log(colors_1.colors.secondary(` • Best Day: +${analytics.bestDay.growth}% (${analytics.bestDay.date.toISOString().split('T')[0]})`));
77
+ console.log(colors_1.colors.secondary(` • Best Week: +${analytics.bestWeek.growth}% (starting ${analytics.bestWeek.start.toISOString().split('T')[0]})`));
78
+ console.log();
79
+ console.log(colors_1.colors.info('Achievements:'));
80
+ const achievements = [
81
+ { name: 'First Save', unlocked: !!dna.growth.milestones.find(m => m.type === 'first_save') },
82
+ { name: 'Doubled', unlocked: !!dna.growth.milestones.find(m => m.type === 'doubled') },
83
+ { name: 'Championship (70%)', unlocked: dna.current.score >= 70 },
84
+ { name: 'Elite (85%)', unlocked: dna.current.score >= 85 },
85
+ { name: 'Perfect (100%)', unlocked: dna.current.score >= 100 }
86
+ ];
87
+ achievements.forEach(a => {
88
+ const status = a.unlocked ? colors_1.colors.success('✅') : colors_1.colors.secondary('🔒');
89
+ console.log(` ${status} ${a.name}`);
90
+ });
91
+ console.log();
92
+ process.exit(0);
93
+ }
94
+ // Default: Full log view
95
+ console.log();
96
+ console.log(colors_1.colors.primary('📜 FAF EVOLUTION LOG'));
97
+ console.log(colors_1.colors.secondary('═'.repeat(60)));
98
+ console.log();
99
+ // Birth certificate header
100
+ console.log(colors_1.colors.highlight('BIRTH CERTIFICATE'));
101
+ console.log(colors_1.colors.secondary(`Certificate: ${dna.birthCertificate.certificate}`));
102
+ console.log(colors_1.colors.secondary(`Born: ${dna.birthCertificate.born.toISOString()}`));
103
+ console.log(colors_1.colors.secondary(`Birth Weight: ${dna.birthCertificate.birthWeight}% (from ${dna.birthCertificate.birthWeightSource})`));
104
+ console.log(colors_1.colors.secondary(`Authenticated: ${dna.birthCertificate.authenticated ? 'Yes' : 'No'}`));
105
+ console.log();
106
+ console.log(colors_1.colors.secondary('─'.repeat(60)));
107
+ console.log();
108
+ // Version history
109
+ console.log(colors_1.colors.highlight('VERSION HISTORY'));
110
+ console.log();
111
+ const log = dnaManager.getLog();
112
+ log.forEach(entry => {
113
+ console.log(entry);
114
+ });
115
+ console.log();
116
+ console.log(colors_1.colors.secondary('─'.repeat(60)));
117
+ console.log();
118
+ // Current status
119
+ console.log(colors_1.colors.highlight('CURRENT STATUS'));
120
+ const birthWeightInfo = dnaManager.getBirthWeightDisplay();
121
+ (0, faf_dna_1.displayScoreWithBirthWeight)(birthWeightInfo.current, birthWeightInfo.birthWeight, birthWeightInfo.birthDate, { showGrowth: true, showJourney: true });
122
+ console.log();
123
+ console.log(colors_1.colors.info('Tips:'));
124
+ console.log(colors_1.colors.secondary(' • faf log --milestones - Show milestones only'));
125
+ console.log(colors_1.colors.secondary(' • faf log --analytics - Show growth analytics'));
126
+ console.log(colors_1.colors.secondary(' • faf log --json - Export as JSON'));
127
+ console.log();
128
+ }
129
+ catch (error) {
130
+ console.error(colors_1.colors.error(`❌ Error: ${error.message}`));
131
+ process.exit(1);
132
+ }
133
+ });
134
+ program.parse(process.argv);
135
+ //# sourceMappingURL=faf-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faf-log.js","sourceRoot":"","sources":["../../src/commands/faf-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=faf-recover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faf-recover.d.ts","sourceRoot":"","sources":["../../src/commands/faf-recover.ts"],"names":[],"mappings":""}
@@ -0,0 +1,299 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const commander_1 = require("commander");
41
+ const fs = __importStar(require("fs/promises"));
42
+ const path = __importStar(require("path"));
43
+ const yaml = __importStar(require("yaml"));
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ // Simple color utilities
46
+ const colors = {
47
+ success: (text) => chalk_1.default.green(text),
48
+ error: (text) => chalk_1.default.red(text),
49
+ warning: (text) => chalk_1.default.yellow(text),
50
+ header: (text) => chalk_1.default.bold.cyan(text),
51
+ highlight: (text) => chalk_1.default.yellow.bold(text),
52
+ command: (text) => chalk_1.default.cyan(text),
53
+ file: (text) => chalk_1.default.blue(text),
54
+ url: (text) => chalk_1.default.underline.blue(text)
55
+ };
56
+ // Simple logger
57
+ const logger = {
58
+ error: (message, error) => {
59
+ console.error(colors.error(message));
60
+ if (error)
61
+ console.error(error);
62
+ }
63
+ };
64
+ async function findProjectRoot(startDir) {
65
+ return startDir; // Simple implementation - use current dir
66
+ }
67
+ const program = new commander_1.Command();
68
+ async function fileExists(filePath) {
69
+ try {
70
+ await fs.access(filePath);
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ async function checkFafHealth(projectRoot) {
78
+ const report = {
79
+ status: 'healthy',
80
+ issues: [],
81
+ fixes: [],
82
+ autoFixed: false
83
+ };
84
+ const fafPath = path.join(projectRoot, '.faf');
85
+ const dnaPath = path.join(projectRoot, '.faf-dna.json');
86
+ const backupPath = path.join(projectRoot, '.faf.backup');
87
+ // Check .faf file
88
+ const fafExists = await fileExists(fafPath);
89
+ if (!fafExists) {
90
+ report.status = 'missing';
91
+ report.issues.push('.faf file is missing');
92
+ if (await fileExists(backupPath)) {
93
+ report.status = 'recoverable';
94
+ report.fixes.push('Found .faf.backup - can restore');
95
+ }
96
+ else {
97
+ report.fixes.push('Run: faf init --force to recreate');
98
+ }
99
+ }
100
+ else {
101
+ // Try to parse .faf
102
+ try {
103
+ const content = await fs.readFile(fafPath, 'utf-8');
104
+ yaml.parse(content);
105
+ }
106
+ catch (error) {
107
+ report.status = 'corrupted';
108
+ report.issues.push('.faf file is corrupted (invalid YAML)');
109
+ if (await fileExists(backupPath)) {
110
+ report.status = 'recoverable';
111
+ report.fixes.push('Found .faf.backup - can restore');
112
+ }
113
+ else {
114
+ report.fixes.push('Check git: git checkout HEAD -- .faf');
115
+ report.fixes.push('Or rebuild: faf init --force');
116
+ }
117
+ }
118
+ }
119
+ // Check DNA file
120
+ const dnaExists = await fileExists(dnaPath);
121
+ if (!dnaExists) {
122
+ report.issues.push('.faf-dna.json is missing (journey history lost)');
123
+ report.fixes.push('Run: faf auth to start new journey');
124
+ }
125
+ else {
126
+ try {
127
+ const content = await fs.readFile(dnaPath, 'utf-8');
128
+ JSON.parse(content);
129
+ }
130
+ catch {
131
+ report.issues.push('.faf-dna.json is corrupted');
132
+ report.fixes.push('Delete and recreate: rm .faf-dna.json && faf auth');
133
+ }
134
+ }
135
+ // Check for backups
136
+ const backups = await findBackups(projectRoot);
137
+ if (backups.length > 0) {
138
+ report.fixes.push(`Found ${backups.length} backup(s): ${backups.join(', ')}`);
139
+ }
140
+ return report;
141
+ }
142
+ async function findBackups(projectRoot) {
143
+ const backups = [];
144
+ try {
145
+ const files = await fs.readdir(projectRoot);
146
+ for (const file of files) {
147
+ if (file.startsWith('.faf.backup') || file.endsWith('.faf.bak')) {
148
+ backups.push(file);
149
+ }
150
+ }
151
+ }
152
+ catch {
153
+ // Directory not readable
154
+ }
155
+ return backups;
156
+ }
157
+ async function autoRecover(projectRoot, report) {
158
+ const fafPath = path.join(projectRoot, '.faf');
159
+ const backupPath = path.join(projectRoot, '.faf.backup');
160
+ if (report.status === 'recoverable' && await fileExists(backupPath)) {
161
+ try {
162
+ // Validate backup first
163
+ const backupContent = await fs.readFile(backupPath, 'utf-8');
164
+ yaml.parse(backupContent); // Will throw if invalid
165
+ // Backup is valid, restore it
166
+ await fs.copyFile(backupPath, fafPath);
167
+ console.log(colors.success(`\n✅ Restored .faf from backup`));
168
+ return true;
169
+ }
170
+ catch (error) {
171
+ console.log(colors.error(`\n❌ Backup is also corrupted`));
172
+ return false;
173
+ }
174
+ }
175
+ return false;
176
+ }
177
+ async function showRecoveryPlan(report) {
178
+ console.log('\n' + colors.header('🚨 FAF DISASTER RECOVERY'));
179
+ console.log('═'.repeat(50));
180
+ // Status
181
+ const statusEmoji = {
182
+ healthy: '✅',
183
+ corrupted: '💥',
184
+ missing: '❌',
185
+ recoverable: '🔧'
186
+ }[report.status];
187
+ console.log(`\n${statusEmoji} Status: ${colors.highlight(report.status.toUpperCase())}`);
188
+ // Issues
189
+ if (report.issues.length > 0) {
190
+ console.log('\n' + colors.error('Issues Detected:'));
191
+ report.issues.forEach(issue => {
192
+ console.log(` • ${issue}`);
193
+ });
194
+ }
195
+ // Recovery options
196
+ if (report.fixes.length > 0) {
197
+ console.log('\n' + colors.success('Recovery Options:'));
198
+ report.fixes.forEach((fix, index) => {
199
+ console.log(` ${index + 1}. ${fix}`);
200
+ });
201
+ }
202
+ // Emergency commands
203
+ console.log('\n' + colors.header('EMERGENCY COMMANDS:'));
204
+ console.log('─'.repeat(50));
205
+ console.log(colors.command(' faf recover --auto ') + '# Try automatic recovery');
206
+ console.log(colors.command(' faf recover --backup ') + '# List all backups');
207
+ console.log(colors.command(' faf init --force ') + '# Start fresh (loses history)');
208
+ console.log(colors.command(' faf help disaster ') + '# Full recovery guide');
209
+ // Git recovery
210
+ console.log('\n' + colors.header('GIT RECOVERY:'));
211
+ console.log('─'.repeat(50));
212
+ console.log(colors.command(' git status ') + '# Check git state');
213
+ console.log(colors.command(' git checkout HEAD -- .faf') + '# Restore from git');
214
+ console.log(colors.command(' git log -p .faf ') + '# View .faf history');
215
+ // Support
216
+ console.log('\n' + colors.header('GET HELP:'));
217
+ console.log('─'.repeat(50));
218
+ console.log(` 📚 Docs: ${colors.url('https://faf.dev/disaster-recovery')}`);
219
+ console.log(` 💬 Discord: ${colors.url('https://discord.gg/faf')}`);
220
+ console.log(` 📧 Email: ${colors.url('help@faf.dev')}`);
221
+ }
222
+ program
223
+ .name('faf-recover')
224
+ .description('🚨 Disaster recovery for corrupted or missing FAF files')
225
+ .option('--auto', 'Attempt automatic recovery')
226
+ .option('--backup', 'List available backups')
227
+ .option('--force', 'Force recovery even if risky')
228
+ .option('--check', 'Check health without recovery')
229
+ .action(async (options) => {
230
+ try {
231
+ const projectRoot = await findProjectRoot(process.cwd());
232
+ // Check health
233
+ const report = await checkFafHealth(projectRoot);
234
+ if (options.backup) {
235
+ const backups = await findBackups(projectRoot);
236
+ console.log('\n' + colors.header('📦 AVAILABLE BACKUPS'));
237
+ console.log('═'.repeat(50));
238
+ if (backups.length === 0) {
239
+ console.log(colors.warning('\nNo backups found'));
240
+ console.log('Tip: FAF creates automatic backups before risky operations');
241
+ }
242
+ else {
243
+ for (const backup of backups) {
244
+ const stats = await fs.stat(path.join(projectRoot, backup));
245
+ console.log(`\n • ${colors.file(backup)}`);
246
+ console.log(` Modified: ${stats.mtime.toLocaleString()}`);
247
+ console.log(` Size: ${stats.size} bytes`);
248
+ }
249
+ console.log('\n' + colors.success('To restore a backup:'));
250
+ console.log(colors.command(` cp ${backups[0]} .faf`));
251
+ }
252
+ return;
253
+ }
254
+ if (report.status === 'healthy' && !options.check) {
255
+ console.log(colors.success('\n✅ Your FAF files are healthy!'));
256
+ console.log('\nNo recovery needed. Keep going! 🚀');
257
+ return;
258
+ }
259
+ // Show recovery plan
260
+ await showRecoveryPlan(report);
261
+ // Auto-recover if requested
262
+ if (options.auto && report.status === 'recoverable') {
263
+ console.log('\n' + colors.warning('Attempting automatic recovery...'));
264
+ const recovered = await autoRecover(projectRoot, report);
265
+ if (recovered) {
266
+ console.log(colors.success('\n🎉 Recovery successful!'));
267
+ console.log('Your .faf file has been restored.');
268
+ console.log('\nNext steps:');
269
+ console.log(' 1. Run: faf score # Check your score');
270
+ console.log(' 2. Run: faf dna # Check your journey');
271
+ console.log(' 3. Run: faf update # Save a checkpoint');
272
+ }
273
+ else {
274
+ console.log(colors.error('\n❌ Automatic recovery failed'));
275
+ console.log('Please try manual recovery options above.');
276
+ }
277
+ }
278
+ // Show prevention tips
279
+ if (report.issues.length > 0) {
280
+ console.log('\n' + colors.header('💡 PREVENTION TIPS:'));
281
+ console.log('─'.repeat(50));
282
+ console.log(' • Commit .faf to git regularly');
283
+ console.log(' • Use "faf update" to save checkpoints');
284
+ console.log(' • Enable auto-backup: faf trust --backup-mode');
285
+ console.log(' • Keep score above 70% for best results');
286
+ }
287
+ }
288
+ catch (error) {
289
+ logger.error('Recovery failed:', error);
290
+ console.log(colors.error('\n❌ Critical error during recovery'));
291
+ console.log('\nLast resort options:');
292
+ console.log(' 1. Delete everything and start fresh:');
293
+ console.log(' rm -f .faf .faf-dna.json');
294
+ console.log(' faf init --force');
295
+ console.log(' 2. Contact support: help@faf.dev');
296
+ }
297
+ });
298
+ program.parse(process.argv);
299
+ //# sourceMappingURL=faf-recover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faf-recover.js","sourceRoot":"","sources":["../../src/commands/faf-recover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * FAF UPDATE - Save your current version
4
+ *
5
+ * Simple command: "faf update"
6
+ * Just saves your current version as a checkpoint
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=faf-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faf-update.d.ts","sourceRoot":"","sources":["../../src/commands/faf-update.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * FAF UPDATE - Save your current version
5
+ *
6
+ * Simple command: "faf update"
7
+ * Just saves your current version as a checkpoint
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const commander_1 = require("commander");
11
+ const faf_dna_1 = require("../engines/faf-dna");
12
+ const colors_1 = require("../fix-once/colors");
13
+ const program = new commander_1.Command();
14
+ program
15
+ .name('faf update')
16
+ .description('Save your current FAF version (checkpoint your progress)')
17
+ .action(async () => {
18
+ try {
19
+ const projectPath = process.cwd();
20
+ const dnaManager = new faf_dna_1.FafDNAManager(projectPath);
21
+ // Load DNA
22
+ const dna = await dnaManager.load();
23
+ if (!dna) {
24
+ console.log(colors_1.colors.error('❌ No FAF DNA found'));
25
+ console.log(colors_1.colors.secondary('Run "faf init" to create your project DNA'));
26
+ process.exit(1);
27
+ }
28
+ // Approve current version
29
+ await dnaManager.approve();
30
+ console.log();
31
+ console.log(colors_1.colors.success('✅ VERSION SAVED'));
32
+ console.log();
33
+ // Show update details
34
+ console.log(colors_1.colors.info(`Version: ${dna.current.version}`));
35
+ console.log(colors_1.colors.info(`Score: ${dna.current.score}%`));
36
+ console.log(colors_1.colors.info(`Growth from birth: +${dna.current.score - dna.birthCertificate.birthWeight}%`));
37
+ console.log();
38
+ // Show journey
39
+ const journey = dnaManager.getJourney('compact');
40
+ console.log(colors_1.colors.highlight(`Journey: ${journey}`));
41
+ console.log();
42
+ // Check for milestones
43
+ const milestones = dna.growth.milestones;
44
+ const firstSave = milestones.find(m => m.type === 'first_save');
45
+ if (firstSave && firstSave.version === dna.current.version) {
46
+ console.log(colors_1.colors.success(`🎆 MILESTONE: First Save achieved!`));
47
+ console.log();
48
+ }
49
+ if (dna.current.score >= 85 && !milestones.find(m => m.type === 'elite')) {
50
+ console.log(colors_1.colors.success(`⭐ ACHIEVEMENT: Elite status unlocked!`));
51
+ console.log();
52
+ }
53
+ console.log(colors_1.colors.info('Your progress has been saved! 💾'));
54
+ console.log(colors_1.colors.secondary('You can always return to this version if needed'));
55
+ console.log();
56
+ console.log(colors_1.colors.info('Keep improving:'));
57
+ console.log(colors_1.colors.secondary(' • faf auto - Continue growing your context'));
58
+ console.log(colors_1.colors.secondary(' • faf log - See your complete journey'));
59
+ console.log(colors_1.colors.secondary(' • faf score - Check current status'));
60
+ console.log();
61
+ }
62
+ catch (error) {
63
+ console.error(colors_1.colors.error(`❌ Error: ${error.message}`));
64
+ process.exit(1);
65
+ }
66
+ });
67
+ program.parse(process.argv);
68
+ //# sourceMappingURL=faf-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faf-update.js","sourceRoot":"","sources":["../../src/commands/faf-update.ts"],"names":[],"mappings":";;AACA;;;;;GAKG;;AAEH,yCAAoC;AACpC,gDAAmD;AACnD,+CAA4C;AAE5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,uBAAa,CAAC,WAAW,CAAC,CAAC;QAElD,WAAW;QACX,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAEpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAE3B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,eAAe;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAW,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,uBAAuB;QACvB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAChE,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,eAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 🩵 faf faq - FAQ Command
3
+ * Display FAQ and search functionality
4
+ */
5
+ export interface FaqOptions {
6
+ search?: string;
7
+ }
8
+ /**
9
+ * Display FAQ content
10
+ */
11
+ export declare function faqCommand(options?: FaqOptions): Promise<void>;
12
+ //# sourceMappingURL=faq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/commands/faq.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsExE"}