faf-mcp 2.3.0 → 3.0.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 (178) hide show
  1. package/CHANGELOG.md +42 -3
  2. package/CLAUDE.md +7 -7
  3. package/README.md +73 -74
  4. package/dist/src/faf-core/commands/bi-sync.d.ts +1 -3
  5. package/dist/src/faf-core/commands/bi-sync.js +21 -64
  6. package/dist/src/faf-core/commands/bi-sync.js.map +1 -1
  7. package/dist/src/faf-core/commands/sync.js.map +1 -1
  8. package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -1
  9. package/dist/src/faf-core/fix-once/colors.js +1 -1
  10. package/dist/src/faf-core/fix-once/colors.js.map +1 -1
  11. package/dist/src/faf-core/parsers/agents-parser.d.ts +15 -0
  12. package/dist/src/faf-core/parsers/agents-parser.js +29 -123
  13. package/dist/src/faf-core/parsers/agents-parser.js.map +1 -1
  14. package/dist/src/faf-core/parsers/conductor-parser.js +1 -1
  15. package/dist/src/faf-core/parsers/conductor-parser.js.map +1 -1
  16. package/dist/src/faf-core/parsers/cursorrules-parser.d.ts +15 -0
  17. package/dist/src/faf-core/parsers/cursorrules-parser.js +54 -111
  18. package/dist/src/faf-core/parsers/cursorrules-parser.js.map +1 -1
  19. package/dist/src/faf-core/parsers/faf-git-generator.js +0 -1
  20. package/dist/src/faf-core/parsers/faf-git-generator.js.map +1 -1
  21. package/dist/src/faf-core/parsers/gemini-parser.d.ts +10 -0
  22. package/dist/src/faf-core/parsers/gemini-parser.js +19 -77
  23. package/dist/src/faf-core/parsers/gemini-parser.js.map +1 -1
  24. package/dist/src/handlers/engine-adapter.d.ts +13 -12
  25. package/dist/src/handlers/engine-adapter.js +124 -688
  26. package/dist/src/handlers/engine-adapter.js.map +1 -1
  27. package/dist/src/handlers/resources.d.ts +19 -1
  28. package/dist/src/handlers/resources.js +108 -23
  29. package/dist/src/handlers/resources.js.map +1 -1
  30. package/dist/src/handlers/skills.d.ts +70 -0
  31. package/dist/src/handlers/skills.js +174 -0
  32. package/dist/src/handlers/skills.js.map +1 -0
  33. package/dist/src/handlers/tools.d.ts +41 -5
  34. package/dist/src/handlers/tools.js +213 -258
  35. package/dist/src/handlers/tools.js.map +1 -1
  36. package/dist/src/server.d.ts +4 -0
  37. package/dist/src/server.js +51 -6
  38. package/dist/src/server.js.map +1 -1
  39. package/dist/src/utils/faf-cli-bridge.d.ts +2 -0
  40. package/dist/src/utils/faf-cli-bridge.js +16 -0
  41. package/dist/src/utils/faf-cli-bridge.js.map +1 -1
  42. package/package.json +17 -14
  43. package/project.faf +23 -5
  44. package/scripts/check-engines.mjs +53 -0
  45. package/scripts/run-tests.sh +54 -0
  46. package/scripts/sync-version.js +33 -19
  47. package/skills/faf-ide/SKILL.md +40 -0
  48. package/dist/src/config/visibility.d.ts +0 -41
  49. package/dist/src/config/visibility.js +0 -158
  50. package/dist/src/config/visibility.js.map +0 -1
  51. package/dist/src/faf-core/commands/audit.d.ts +0 -21
  52. package/dist/src/faf-core/commands/audit.js +0 -83
  53. package/dist/src/faf-core/commands/audit.js.map +0 -1
  54. package/dist/src/faf-core/commands/auto.d.ts +0 -25
  55. package/dist/src/faf-core/commands/auto.js +0 -74
  56. package/dist/src/faf-core/commands/auto.js.map +0 -1
  57. package/dist/src/faf-core/commands/doctor.d.ts +0 -17
  58. package/dist/src/faf-core/commands/doctor.js +0 -198
  59. package/dist/src/faf-core/commands/doctor.js.map +0 -1
  60. package/dist/src/faf-core/commands/enhance.d.ts +0 -46
  61. package/dist/src/faf-core/commands/enhance.js +0 -360
  62. package/dist/src/faf-core/commands/enhance.js.map +0 -1
  63. package/dist/src/faf-core/commands/formats.d.ts +0 -22
  64. package/dist/src/faf-core/commands/formats.js +0 -117
  65. package/dist/src/faf-core/commands/formats.js.map +0 -1
  66. package/dist/src/faf-core/commands/human.d.ts +0 -27
  67. package/dist/src/faf-core/commands/human.js +0 -183
  68. package/dist/src/faf-core/commands/human.js.map +0 -1
  69. package/dist/src/faf-core/commands/init.d.ts +0 -26
  70. package/dist/src/faf-core/commands/init.js +0 -114
  71. package/dist/src/faf-core/commands/init.js.map +0 -1
  72. package/dist/src/faf-core/commands/innit.d.ts +0 -7
  73. package/dist/src/faf-core/commands/innit.js +0 -13
  74. package/dist/src/faf-core/commands/innit.js.map +0 -1
  75. package/dist/src/faf-core/commands/migrate.d.ts +0 -15
  76. package/dist/src/faf-core/commands/migrate.js +0 -86
  77. package/dist/src/faf-core/commands/migrate.js.map +0 -1
  78. package/dist/src/faf-core/commands/quick.d.ts +0 -16
  79. package/dist/src/faf-core/commands/quick.js +0 -184
  80. package/dist/src/faf-core/commands/quick.js.map +0 -1
  81. package/dist/src/faf-core/commands/readme.d.ts +0 -47
  82. package/dist/src/faf-core/commands/readme.js +0 -361
  83. package/dist/src/faf-core/commands/readme.js.map +0 -1
  84. package/dist/src/faf-core/commands/score.d.ts +0 -47
  85. package/dist/src/faf-core/commands/score.js +0 -49
  86. package/dist/src/faf-core/commands/score.js.map +0 -1
  87. package/dist/src/faf-core/commands/update.d.ts +0 -12
  88. package/dist/src/faf-core/commands/update.js +0 -46
  89. package/dist/src/faf-core/commands/update.js.map +0 -1
  90. package/dist/src/faf-core/commands/validate.d.ts +0 -21
  91. package/dist/src/faf-core/commands/validate.js +0 -81
  92. package/dist/src/faf-core/commands/validate.js.map +0 -1
  93. package/dist/src/faf-core/compiler/faf-compiler.d.ts +0 -138
  94. package/dist/src/faf-core/compiler/faf-compiler.js +0 -1362
  95. package/dist/src/faf-core/compiler/faf-compiler.js.map +0 -1
  96. package/dist/src/faf-core/engines/fab-formats-processor.d.ts +0 -166
  97. package/dist/src/faf-core/engines/fab-formats-processor.js +0 -1274
  98. package/dist/src/faf-core/engines/fab-formats-processor.js.map +0 -1
  99. package/dist/src/faf-core/engines/faf-dna.d.ts +0 -159
  100. package/dist/src/faf-core/engines/faf-dna.js +0 -555
  101. package/dist/src/faf-core/engines/faf-dna.js.map +0 -1
  102. package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +0 -100
  103. package/dist/src/faf-core/engines/relentless-context-extractor.js +0 -625
  104. package/dist/src/faf-core/engines/relentless-context-extractor.js.map +0 -1
  105. package/dist/src/faf-core/fix-once/types.d.ts +0 -257
  106. package/dist/src/faf-core/fix-once/types.js +0 -26
  107. package/dist/src/faf-core/fix-once/types.js.map +0 -1
  108. package/dist/src/faf-core/generators/faf-generator-championship.d.ts +0 -16
  109. package/dist/src/faf-core/generators/faf-generator-championship.js +0 -463
  110. package/dist/src/faf-core/generators/faf-generator-championship.js.map +0 -1
  111. package/dist/src/faf-core/inject.d.ts +0 -19
  112. package/dist/src/faf-core/inject.js +0 -57
  113. package/dist/src/faf-core/inject.js.map +0 -1
  114. package/dist/src/faf-core/parsers/index.d.ts +0 -12
  115. package/dist/src/faf-core/parsers/index.js +0 -29
  116. package/dist/src/faf-core/parsers/index.js.map +0 -1
  117. package/dist/src/faf-core/utils/balance-visualizer.d.ts +0 -37
  118. package/dist/src/faf-core/utils/balance-visualizer.js +0 -197
  119. package/dist/src/faf-core/utils/balance-visualizer.js.map +0 -1
  120. package/dist/src/faf-core/utils/championship-style.d.ts +0 -109
  121. package/dist/src/faf-core/utils/championship-style.js +0 -219
  122. package/dist/src/faf-core/utils/championship-style.js.map +0 -1
  123. package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +0 -73
  124. package/dist/src/faf-core/utils/chrome-extension-detector.js +0 -268
  125. package/dist/src/faf-core/utils/chrome-extension-detector.js.map +0 -1
  126. package/dist/src/faf-core/utils/platform-detector.d.ts +0 -30
  127. package/dist/src/faf-core/utils/platform-detector.js +0 -218
  128. package/dist/src/faf-core/utils/platform-detector.js.map +0 -1
  129. package/dist/src/faf-core/utils/technical-credit.d.ts +0 -35
  130. package/dist/src/faf-core/utils/technical-credit.js +0 -286
  131. package/dist/src/faf-core/utils/technical-credit.js.map +0 -1
  132. package/dist/src/faf-core/utils/yaml-generator.d.ts +0 -41
  133. package/dist/src/faf-core/utils/yaml-generator.js +0 -360
  134. package/dist/src/faf-core/utils/yaml-generator.js.map +0 -1
  135. package/dist/src/handlers/behavioral-instruction.d.ts +0 -16
  136. package/dist/src/handlers/behavioral-instruction.js +0 -43
  137. package/dist/src/handlers/behavioral-instruction.js.map +0 -1
  138. package/dist/src/handlers/championship-tools.d.ts +0 -116
  139. package/dist/src/handlers/championship-tools.js +0 -2320
  140. package/dist/src/handlers/championship-tools.js.map +0 -1
  141. package/dist/src/handlers/cloud-handler.d.ts +0 -59
  142. package/dist/src/handlers/cloud-handler.js +0 -348
  143. package/dist/src/handlers/cloud-handler.js.map +0 -1
  144. package/dist/src/handlers/tool-registry.d.ts +0 -23
  145. package/dist/src/handlers/tool-registry.js +0 -68
  146. package/dist/src/handlers/tool-registry.js.map +0 -1
  147. package/dist/src/handlers/tool-types.d.ts +0 -167
  148. package/dist/src/handlers/tool-types.js +0 -7
  149. package/dist/src/handlers/tool-types.js.map +0 -1
  150. package/dist/src/test-all-functions.d.ts +0 -15
  151. package/dist/src/test-all-functions.js +0 -163
  152. package/dist/src/test-all-functions.js.map +0 -1
  153. package/dist/src/types/mcp-tools.d.ts +0 -53
  154. package/dist/src/types/mcp-tools.js +0 -77
  155. package/dist/src/types/mcp-tools.js.map +0 -1
  156. package/dist/src/types/tool-visibility.d.ts +0 -36
  157. package/dist/src/types/tool-visibility.js +0 -551
  158. package/dist/src/types/tool-visibility.js.map +0 -1
  159. package/dist/src/utils/auto-path-detection.d.ts +0 -26
  160. package/dist/src/utils/auto-path-detection.js +0 -198
  161. package/dist/src/utils/auto-path-detection.js.map +0 -1
  162. package/dist/src/utils/championship-format.d.ts +0 -30
  163. package/dist/src/utils/championship-format.js +0 -81
  164. package/dist/src/utils/championship-format.js.map +0 -1
  165. package/dist/src/utils/cli-detector.d.ts +0 -17
  166. package/dist/src/utils/cli-detector.js +0 -247
  167. package/dist/src/utils/cli-detector.js.map +0 -1
  168. package/dist/src/utils/display-protocol.d.ts +0 -57
  169. package/dist/src/utils/display-protocol.js +0 -131
  170. package/dist/src/utils/display-protocol.js.map +0 -1
  171. package/dist/src/utils/username-detector.d.ts +0 -27
  172. package/dist/src/utils/username-detector.js +0 -90
  173. package/dist/src/utils/username-detector.js.map +0 -1
  174. package/dist/src/utils/visual-style.d.ts +0 -62
  175. package/dist/src/utils/visual-style.js +0 -166
  176. package/dist/src/utils/visual-style.js.map +0 -1
  177. package/scripts/postinstall.js +0 -50
  178. package/skill/SKILL.md +0 -385
@@ -1,463 +0,0 @@
1
- "use strict";
2
- /**
3
- * 🏎️ Championship .faf Generator
4
- * Uses FAB-FORMATS Power Unit for 86%+ context extraction
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.generateFafFromProject = generateFafFromProject;
11
- const fs_1 = require("fs");
12
- const path_1 = __importDefault(require("path"));
13
- const file_utils_1 = require("../utils/file-utils");
14
- const yaml_generator_1 = require("../utils/yaml-generator");
15
- const fab_formats_processor_1 = require("../engines/fab-formats-processor");
16
- const relentless_context_extractor_1 = require("../engines/relentless-context-extractor");
17
- async function generateFafFromProject(options) {
18
- const { projectType, projectRoot } = options;
19
- // Validate projectRoot
20
- if (!projectRoot || typeof projectRoot !== 'string') {
21
- throw new Error(`Invalid projectRoot: ${projectRoot}. Expected a valid directory path.`);
22
- }
23
- // Read README.md if available (HUMAN CONTEXT SOURCE)
24
- let readmeData = {};
25
- const readmePath = path_1.default.join(projectRoot, "README.md");
26
- try {
27
- const readmeContent = await fs_1.promises.readFile(readmePath, "utf-8");
28
- readmeData = extractReadmeContext(readmeContent);
29
- }
30
- catch {
31
- // Continue without README data
32
- }
33
- // Read package.json if available (JavaScript projects)
34
- const packageJsonPath = await (0, file_utils_1.findPackageJson)(projectRoot);
35
- let packageData = {};
36
- if (packageJsonPath) {
37
- try {
38
- const content = await fs_1.promises.readFile(packageJsonPath, "utf-8");
39
- packageData = JSON.parse(content);
40
- }
41
- catch {
42
- // Continue without package.json data
43
- }
44
- }
45
- // Read pyproject.toml if available (Python projects)
46
- const pyprojectPath = await (0, file_utils_1.findPyprojectToml)(projectRoot);
47
- const pyprojectData = {};
48
- if (pyprojectPath) {
49
- try {
50
- const content = await fs_1.promises.readFile(pyprojectPath, "utf-8");
51
- // Basic parsing for Python projects
52
- if (content.includes('[tool.poetry]')) {
53
- pyprojectData.packageManager = 'Poetry';
54
- }
55
- const nameMatch = content.match(/name\s*=\s*"([^"]+)"/);
56
- if (nameMatch) {
57
- pyprojectData.name = nameMatch[1];
58
- }
59
- const descMatch = content.match(/description\s*=\s*"([^"]+)"/);
60
- if (descMatch) {
61
- pyprojectData.description = descMatch[1];
62
- }
63
- }
64
- catch {
65
- // Continue without pyproject.toml data
66
- }
67
- }
68
- // Read requirements.txt if available (Python projects)
69
- const requirementsPath = await (0, file_utils_1.findRequirementsTxt)(projectRoot);
70
- const requirementsData = {};
71
- if (requirementsPath) {
72
- try {
73
- const content = await fs_1.promises.readFile(requirementsPath, "utf-8");
74
- const lines = content.split('\n').filter(line => line && !line.startsWith('#'));
75
- requirementsData.dependencies = lines;
76
- }
77
- catch {
78
- // Continue without requirements.txt data
79
- }
80
- }
81
- // 🏎️ CHAMPIONSHIP ENGINE - FAB-FORMATS Power Unit with 150+ handlers!
82
- const fabProcessor = new fab_formats_processor_1.FabFormatsProcessor();
83
- let fabAnalysis;
84
- try {
85
- fabAnalysis = await fabProcessor.processFiles(projectRoot);
86
- }
87
- catch {
88
- // Fallback to empty analysis if discovery fails
89
- fabAnalysis = {
90
- results: [],
91
- totalBonus: 0,
92
- context: {},
93
- qualityMetrics: {
94
- highestGrade: 'MINIMAL',
95
- averageScore: 0,
96
- filesCovered: 0,
97
- intelligenceDepth: 0
98
- }
99
- };
100
- }
101
- // 🏎️ AERO PACKAGE - RelentlessContextExtractor for human context!
102
- let humanContext;
103
- try {
104
- humanContext = await relentless_context_extractor_1.relentlessExtractor.extractFromProject(projectRoot);
105
- }
106
- catch {
107
- // Fallback to empty context
108
- humanContext = null;
109
- }
110
- // TypeScript configuration analysis
111
- const tsConfigPath = await (0, file_utils_1.findTsConfig)(projectRoot);
112
- let tsContext = null;
113
- if (tsConfigPath) {
114
- const result = await (0, file_utils_1.analyzeTsConfig)(tsConfigPath);
115
- if (result) {
116
- tsContext = result;
117
- }
118
- }
119
- // START ENHANCED SCORING - Championship grade with FAB-FORMATS!
120
- // HONEST SCORING: 0% is a valid score - no free points for merely existing!
121
- let enhancedScore = 0;
122
- // Map all discovered slots (21-slot system)
123
- const contextSlotsFilled = {};
124
- // IF: Quick mode data takes priority (user explicitly provided it)
125
- if (options.projectGoal) {
126
- contextSlotsFilled['project_goal'] = options.projectGoal;
127
- }
128
- if (options.projectName) {
129
- contextSlotsFilled['project_name'] = options.projectName;
130
- }
131
- if (options.mainLanguage) {
132
- contextSlotsFilled['main_language'] = options.mainLanguage;
133
- }
134
- if (options.framework && options.framework !== 'none') {
135
- contextSlotsFilled['framework'] = options.framework;
136
- }
137
- if (options.hosting && options.hosting !== 'cloud') {
138
- contextSlotsFilled['hosting'] = options.hosting;
139
- }
140
- // Apply championship context extraction
141
- if (fabAnalysis.context) {
142
- const ctx = fabAnalysis.context;
143
- // Technical slots (15) - only fill if not already set by quick mode
144
- if (ctx.projectName && !contextSlotsFilled['project_name'])
145
- contextSlotsFilled['project_name'] = ctx.projectName;
146
- if (ctx.projectGoal && !contextSlotsFilled['project_goal'])
147
- contextSlotsFilled['project_goal'] = ctx.projectGoal;
148
- if (ctx.mainLanguage)
149
- contextSlotsFilled['main_language'] = ctx.mainLanguage;
150
- if (ctx.framework)
151
- contextSlotsFilled['framework'] = ctx.framework;
152
- if (ctx.backend)
153
- contextSlotsFilled['backend'] = ctx.backend;
154
- if (ctx.server)
155
- contextSlotsFilled['server'] = ctx.server;
156
- if (ctx.apiType)
157
- contextSlotsFilled['api_type'] = ctx.apiType;
158
- if (ctx.database)
159
- contextSlotsFilled['database'] = ctx.database;
160
- if (ctx.hosting)
161
- contextSlotsFilled['hosting'] = ctx.hosting;
162
- if (ctx.cicd)
163
- contextSlotsFilled['cicd'] = ctx.cicd;
164
- if (ctx.buildTool)
165
- contextSlotsFilled['build_tool'] = ctx.buildTool;
166
- if (ctx.packageManager)
167
- contextSlotsFilled['package_manager'] = ctx.packageManager;
168
- if (ctx.testFramework)
169
- contextSlotsFilled['test_framework'] = ctx.testFramework;
170
- if (ctx.linter)
171
- contextSlotsFilled['linter'] = ctx.linter;
172
- // Human context slots (6 W's)
173
- if (ctx.targetUser)
174
- contextSlotsFilled['who'] = ctx.targetUser;
175
- if (ctx.coreProblem)
176
- contextSlotsFilled['what'] = ctx.coreProblem;
177
- if (ctx.missionPurpose)
178
- contextSlotsFilled['why'] = ctx.missionPurpose;
179
- if (ctx.deploymentMarket)
180
- contextSlotsFilled['where'] = ctx.deploymentMarket;
181
- if (ctx.timeline)
182
- contextSlotsFilled['when'] = ctx.timeline;
183
- if (ctx.approach)
184
- contextSlotsFilled['how'] = ctx.approach;
185
- }
186
- // Apply RELENTLESS human context extraction (overrides if higher confidence)
187
- if (humanContext) {
188
- if (humanContext.who.confidence === 'CERTAIN' || !contextSlotsFilled['who']) {
189
- contextSlotsFilled['who'] = humanContext.who.value;
190
- }
191
- if (humanContext.what.confidence === 'CERTAIN' || !contextSlotsFilled['what']) {
192
- contextSlotsFilled['what'] = humanContext.what.value;
193
- }
194
- if (humanContext.why.confidence === 'CERTAIN' || !contextSlotsFilled['why']) {
195
- contextSlotsFilled['why'] = humanContext.why.value;
196
- }
197
- if (humanContext.where.confidence === 'CERTAIN' || !contextSlotsFilled['where']) {
198
- contextSlotsFilled['where'] = humanContext.where.value;
199
- }
200
- if (humanContext.when.confidence === 'CERTAIN' || !contextSlotsFilled['when']) {
201
- contextSlotsFilled['when'] = humanContext.when.value;
202
- }
203
- if (humanContext.how.confidence === 'CERTAIN' || !contextSlotsFilled['how']) {
204
- contextSlotsFilled['how'] = humanContext.how.value;
205
- }
206
- }
207
- // CLI-specific detection and smart slot reuse
208
- const deps = {
209
- ...packageData.dependencies,
210
- ...packageData.devDependencies
211
- };
212
- const isCLI = packageData.bin ||
213
- packageData.name?.includes('cli') ||
214
- packageData.keywords?.includes('cli') ||
215
- packageData.keywords?.includes('command-line') ||
216
- deps?.commander ||
217
- deps?.yargs ||
218
- deps?.oclif ||
219
- deps?.inquirer;
220
- if (isCLI) {
221
- // Smart slot reuse for CLI projects
222
- contextSlotsFilled['framework'] = 'CLI'; // frontend = CLI
223
- contextSlotsFilled['api_type'] = 'CLI';
224
- contextSlotsFilled['hosting'] = 'npm registry';
225
- contextSlotsFilled['backend'] = 'Node.js';
226
- // Detect terminal UI framework
227
- if (deps?.chalk)
228
- contextSlotsFilled['css_framework'] = 'chalk (terminal colors)';
229
- else if (deps?.colors)
230
- contextSlotsFilled['css_framework'] = 'colors';
231
- else if (deps?.ora)
232
- contextSlotsFilled['css_framework'] = 'ora';
233
- // Detect interactive framework
234
- if (deps?.inquirer)
235
- contextSlotsFilled['ui_library'] = 'inquirer (interactive prompts)';
236
- else if (deps?.prompts)
237
- contextSlotsFilled['ui_library'] = 'prompts';
238
- else if (deps?.enquirer)
239
- contextSlotsFilled['ui_library'] = 'enquirer';
240
- // Detect CLI framework
241
- if (deps?.commander)
242
- contextSlotsFilled['cli_framework'] = 'commander';
243
- else if (deps?.yargs)
244
- contextSlotsFilled['cli_framework'] = 'yargs';
245
- else if (deps?.oclif)
246
- contextSlotsFilled['cli_framework'] = 'oclif';
247
- // Detect runtime
248
- if (packageData.engines?.node) {
249
- contextSlotsFilled['runtime'] = `Node.js ${packageData.engines.node}`;
250
- }
251
- else {
252
- contextSlotsFilled['runtime'] = 'Node.js v16+';
253
- }
254
- // Detect build system
255
- if (deps?.typescript || deps?.['@types/node']) {
256
- contextSlotsFilled['build_tool'] = 'TypeScript (tsc)';
257
- }
258
- // Detect testing
259
- if (deps?.jest)
260
- contextSlotsFilled['test_framework'] = 'Jest';
261
- else if (deps?.mocha)
262
- contextSlotsFilled['test_framework'] = 'Mocha';
263
- else if (deps?.vitest)
264
- contextSlotsFilled['test_framework'] = 'Vitest';
265
- // Detect CI/CD - check for .github/workflows directory
266
- try {
267
- const githubWorkflowsPath = path_1.default.join(projectRoot, '.github', 'workflows');
268
- const githubWorkflowsExists = await fs_1.promises.access(githubWorkflowsPath).then(() => true).catch(() => false);
269
- if (githubWorkflowsExists) {
270
- contextSlotsFilled['cicd'] = 'GitHub Actions';
271
- }
272
- }
273
- catch {
274
- // Continue without CI/CD detection
275
- }
276
- }
277
- // Override with package.json if more specific
278
- if (packageData.name && !contextSlotsFilled['project_name']) {
279
- contextSlotsFilled['project_name'] = packageData.name;
280
- }
281
- if (packageData.description && !contextSlotsFilled['project_goal']) {
282
- contextSlotsFilled['project_goal'] = packageData.description;
283
- }
284
- // Override with pyproject.toml for Python projects
285
- if (pyprojectData.name && !contextSlotsFilled['project_name']) {
286
- contextSlotsFilled['project_name'] = pyprojectData.name;
287
- }
288
- if (pyprojectData.description && !contextSlotsFilled['project_goal']) {
289
- contextSlotsFilled['project_goal'] = pyprojectData.description;
290
- }
291
- // Apply README data (human context priority)
292
- if (readmeData.projectName && !contextSlotsFilled['project_name']) {
293
- contextSlotsFilled['project_name'] = readmeData.projectName;
294
- }
295
- if (readmeData.description && !contextSlotsFilled['project_goal']) {
296
- contextSlotsFilled['project_goal'] = readmeData.description;
297
- }
298
- if (readmeData.targetUser && !contextSlotsFilled['who']) {
299
- contextSlotsFilled['who'] = readmeData.targetUser;
300
- }
301
- // Calculate slot-based score
302
- const technicalSlots = [
303
- 'project_name', 'project_goal', 'main_language', 'framework',
304
- 'backend', 'server', 'api_type', 'database', 'hosting',
305
- 'cicd', 'build_tool', 'package_manager', 'test_framework', 'linter'
306
- ];
307
- const humanSlots = ['who', 'what', 'why', 'where', 'when', 'how'];
308
- let technicalFilled = 0;
309
- let humanFilled = 0;
310
- technicalSlots.forEach(slot => {
311
- if (contextSlotsFilled[slot]) {
312
- technicalFilled++;
313
- enhancedScore += 4; // Each technical slot = 4%
314
- }
315
- });
316
- humanSlots.forEach(slot => {
317
- if (contextSlotsFilled[slot]) {
318
- humanFilled++;
319
- enhancedScore += 5; // Each human slot = 5%
320
- }
321
- });
322
- // Quality bonuses from FAB-FORMATS
323
- if (fabAnalysis.qualityMetrics) {
324
- const grade = fabAnalysis.qualityMetrics.highestGrade;
325
- if (grade === 'EXCEPTIONAL') {
326
- enhancedScore += 20;
327
- }
328
- else if (grade === 'PROFESSIONAL') {
329
- enhancedScore += 15;
330
- }
331
- else if (grade === 'GOOD') {
332
- enhancedScore += 10;
333
- }
334
- else if (grade === 'BASIC') {
335
- enhancedScore += 5;
336
- }
337
- }
338
- // Intelligence depth bonus
339
- if (fabAnalysis.qualityMetrics.intelligenceDepth > 80) {
340
- enhancedScore += 15;
341
- }
342
- else if (fabAnalysis.qualityMetrics.intelligenceDepth > 60) {
343
- enhancedScore += 10;
344
- }
345
- else if (fabAnalysis.qualityMetrics.intelligenceDepth > 40) {
346
- enhancedScore += 5;
347
- }
348
- // TypeScript bonus
349
- if (tsContext) {
350
- enhancedScore += 5;
351
- if (tsContext.strictMode) {
352
- enhancedScore += 5;
353
- }
354
- }
355
- // Cap at 99% (100% requires human verification)
356
- const fafScore = Math.min(Math.round(enhancedScore), 99);
357
- // Build confidence level
358
- let _confidence = 'LOW';
359
- if (fafScore >= 85)
360
- _confidence = 'HIGH';
361
- else if (fafScore >= 70)
362
- _confidence = 'GOOD';
363
- else if (fafScore >= 50)
364
- _confidence = 'MODERATE';
365
- // Build quality indicators
366
- const qualityIndicators = [];
367
- if (fabAnalysis.qualityMetrics.highestGrade === 'EXCEPTIONAL') {
368
- qualityIndicators.push('Exceptional project structure');
369
- }
370
- if (fabAnalysis.qualityMetrics.filesCovered > 10) {
371
- qualityIndicators.push('Comprehensive file coverage');
372
- }
373
- if (technicalFilled >= 10) {
374
- qualityIndicators.push('Rich technical context');
375
- }
376
- if (humanFilled >= 3) {
377
- qualityIndicators.push('Strong human context');
378
- }
379
- if (tsContext?.strictMode) {
380
- qualityIndicators.push('TypeScript strict mode');
381
- }
382
- // Extract the stack for display
383
- const _stack = {
384
- frontend: contextSlotsFilled['framework'] || packageData.dependencies?.react ? 'React' : undefined,
385
- backend: contextSlotsFilled['backend'],
386
- database: contextSlotsFilled['database'],
387
- build: contextSlotsFilled['build_tool'],
388
- package_manager: contextSlotsFilled['package_manager'] || 'npm',
389
- hosting: contextSlotsFilled['hosting'],
390
- };
391
- // Build the data structure for generateFafContent
392
- const fafData = {
393
- projectName: contextSlotsFilled['project_name'] || path_1.default.basename(projectRoot),
394
- projectGoal: contextSlotsFilled['project_goal'] || 'Build amazing software',
395
- mainLanguage: contextSlotsFilled['main_language'] || 'JavaScript',
396
- framework: contextSlotsFilled['framework'] || 'None',
397
- cssFramework: contextSlotsFilled['css_framework'] || undefined,
398
- uiLibrary: contextSlotsFilled['ui_library'] || undefined,
399
- stateManagement: undefined,
400
- backend: contextSlotsFilled['backend'] || 'None',
401
- apiType: contextSlotsFilled['api_type'] || 'REST',
402
- server: contextSlotsFilled['runtime'] || contextSlotsFilled['server'] || 'None',
403
- database: contextSlotsFilled['database'] || 'None',
404
- connection: 'None',
405
- hosting: contextSlotsFilled['hosting'] || 'None',
406
- buildTool: contextSlotsFilled['build_tool'] || 'None',
407
- packageManager: contextSlotsFilled['package_manager'] || 'npm',
408
- cicd: contextSlotsFilled['cicd'] || 'None',
409
- fafScore,
410
- slotBasedPercentage: Math.round(((technicalFilled + humanFilled) / 21) * 100),
411
- projectType, // Pass project type for compiler slot-filling patterns
412
- // Human Context (Project Details)
413
- targetUser: contextSlotsFilled['who'],
414
- coreProblem: contextSlotsFilled['what'],
415
- missionPurpose: contextSlotsFilled['why'],
416
- deploymentMarket: contextSlotsFilled['where'],
417
- timeline: contextSlotsFilled['when'],
418
- approach: contextSlotsFilled['how'],
419
- // Quality indicators
420
- qualityIndicators,
421
- fabFormatsIntelligence: {
422
- filesAnalyzed: fabAnalysis.results.length,
423
- totalIntelligence: fabAnalysis.totalBonus,
424
- highestGrade: fabAnalysis.qualityMetrics.highestGrade,
425
- depth: fabAnalysis.qualityMetrics.intelligenceDepth
426
- }
427
- };
428
- // Generate YAML content
429
- const content = (0, yaml_generator_1.generateFafContent)(fafData);
430
- return content;
431
- }
432
- /**
433
- * Extract context from README.md
434
- */
435
- function extractReadmeContext(content) {
436
- const context = {};
437
- // Extract project name from title
438
- const titleMatch = content.match(/^#\s+(.+)$/m);
439
- if (titleMatch) {
440
- context.projectName = titleMatch[1].trim();
441
- }
442
- // Extract description from first paragraph or description section
443
- const descMatch = content.match(/^#+\s+(?:description|about|overview|introduction)\s*\n+(.+?)(?:\n#|\n\n#|$)/ims);
444
- if (descMatch) {
445
- context.description = descMatch[1].trim().substring(0, 200);
446
- }
447
- else {
448
- // Try to get first paragraph after title
449
- const firstParaMatch = content.match(/^#\s+.+\n+(.+?)(?:\n#|\n\n#|$)/ms);
450
- if (firstParaMatch) {
451
- context.description = firstParaMatch[1].trim().substring(0, 200);
452
- }
453
- }
454
- // Look for target users
455
- if (content.match(/##\s+(?:for\s+)?(?:developers|engineers|teams)/i)) {
456
- context.targetUser = 'Developers';
457
- }
458
- else if (content.match(/##\s+(?:for\s+)?(?:users|customers|clients)/i)) {
459
- context.targetUser = 'End users';
460
- }
461
- return context;
462
- }
463
- //# sourceMappingURL=faf-generator-championship.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"faf-generator-championship.js","sourceRoot":"","sources":["../../../../src/faf-core/generators/faf-generator-championship.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Block markers for the faf-managed front section. Markdown files use HTML
3
- * comments; non-markdown files (.cursorrules) pass hash-comment markers.
4
- */
5
- export declare const FAF_START = "<!-- faf:start -->";
6
- export declare const FAF_END = "<!-- faf:end -->";
7
- /**
8
- * Non-destructively write a faf-managed block into a file.
9
- *
10
- * - no file -> create it with just the block
11
- * - markers present -> replace ONLY between them (update in place)
12
- * - legacy faf file (metastamp, no markers) -> reclaim in place (no duplication)
13
- * - genuine user file -> prefix the block; preserve everything below
14
- *
15
- * Idempotent: re-runs update the block, never duplicate or destroy user content.
16
- * faf owns what's between the markers; the user owns everything else.
17
- * Enhance, never replace.
18
- */
19
- export declare function injectFafBlock(path: string, block: string, start?: string, end?: string): Promise<void>;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FAF_END = exports.FAF_START = void 0;
4
- exports.injectFafBlock = injectFafBlock;
5
- const fs_1 = require("fs");
6
- /**
7
- * Block markers for the faf-managed front section. Markdown files use HTML
8
- * comments; non-markdown files (.cursorrules) pass hash-comment markers.
9
- */
10
- exports.FAF_START = '<!-- faf:start -->';
11
- exports.FAF_END = '<!-- faf:end -->';
12
- /**
13
- * faf's own metastamp fingerprint. Every faf-generated file begins with it and a
14
- * user never hand-writes it — so a markerless file led by it is legacy faf output
15
- * we can safely reclaim, never genuine user content.
16
- */
17
- const FAF_METASTAMP = '<!-- faf:';
18
- /**
19
- * Non-destructively write a faf-managed block into a file.
20
- *
21
- * - no file -> create it with just the block
22
- * - markers present -> replace ONLY between them (update in place)
23
- * - legacy faf file (metastamp, no markers) -> reclaim in place (no duplication)
24
- * - genuine user file -> prefix the block; preserve everything below
25
- *
26
- * Idempotent: re-runs update the block, never duplicate or destroy user content.
27
- * faf owns what's between the markers; the user owns everything else.
28
- * Enhance, never replace.
29
- */
30
- async function injectFafBlock(path, block, start = exports.FAF_START, end = exports.FAF_END) {
31
- const wrapped = `${start}\n${block.trim()}\n${end}`;
32
- let existing = null;
33
- try {
34
- existing = await fs_1.promises.readFile(path, 'utf-8');
35
- }
36
- catch {
37
- existing = null; // file does not exist yet
38
- }
39
- if (existing === null) {
40
- await fs_1.promises.writeFile(path, `${wrapped}\n`, 'utf-8');
41
- return;
42
- }
43
- const s = existing.indexOf(start);
44
- const e = existing.indexOf(end);
45
- if (s !== -1 && e !== -1 && e > s) {
46
- await fs_1.promises.writeFile(path, existing.slice(0, s) + wrapped + existing.slice(e + end.length), 'utf-8');
47
- return;
48
- }
49
- if (existing.trimStart().startsWith(FAF_METASTAMP)) {
50
- // Legacy faf output — reclaim in place, no duplication.
51
- await fs_1.promises.writeFile(path, `${wrapped}\n`, 'utf-8');
52
- return;
53
- }
54
- // Genuine user file — prefix the block, preserve everything.
55
- await fs_1.promises.writeFile(path, `${wrapped}\n\n${existing}`, 'utf-8');
56
- }
57
- //# sourceMappingURL=inject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/faf-core/inject.ts"],"names":[],"mappings":";;;AA4BA,wCAmCC;AA/DD,2BAAoC;AAEpC;;;GAGG;AACU,QAAA,SAAS,GAAG,oBAAoB,CAAC;AACjC,QAAA,OAAO,GAAG,kBAAkB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAa,EACb,QAAgB,iBAAS,EACzB,MAAc,eAAO;IAErB,MAAM,OAAO,GAAG,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;IAEpD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,IAAI,CAAC,CAAC,0BAA0B;IAC7C,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACnG,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,wDAAwD;QACxD,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,OAAO,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Parsers Index - v4.5.0 Interop Edition
3
- *
4
- * Re-exports all parser modules for convenient access.
5
- */
6
- export * from './agents-parser.js';
7
- export * from './cursorrules-parser.js';
8
- export * from './gemini-parser.js';
9
- export * from './conductor-parser.js';
10
- export * from './slot-counter.js';
11
- export * from './github-extractor.js';
12
- export * from './faf-git-generator.js';
@@ -1,29 +0,0 @@
1
- "use strict";
2
- /**
3
- * Parsers Index - v4.5.0 Interop Edition
4
- *
5
- * Re-exports all parser modules for convenient access.
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
19
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- __exportStar(require("./agents-parser.js"), exports);
23
- __exportStar(require("./cursorrules-parser.js"), exports);
24
- __exportStar(require("./gemini-parser.js"), exports);
25
- __exportStar(require("./conductor-parser.js"), exports);
26
- __exportStar(require("./slot-counter.js"), exports);
27
- __exportStar(require("./github-extractor.js"), exports);
28
- __exportStar(require("./faf-git-generator.js"), exports);
29
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/faf-core/parsers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,0DAAwC;AACxC,qDAAmC;AACnC,wDAAsC;AACtC,oDAAkC;AAClC,wDAAsC;AACtC,yDAAuC"}
@@ -1,37 +0,0 @@
1
- /**
2
- * 🎯 AI|HUMAN Balance Visualizer
3
- * Visual-only gamification that drives +144% human context completion
4
- * The 50/50 eternal truth: AI detects tech (50%), humans provide meaning (50%)
5
- */
6
- export interface BalanceData {
7
- aiPercentage: number;
8
- humanPercentage: number;
9
- isBalanced: boolean;
10
- }
11
- export declare class BalanceVisualizer {
12
- private static readonly BAR_WIDTH;
13
- private static readonly CYAN;
14
- private static readonly ORANGE;
15
- private static readonly GREEN;
16
- /**
17
- * Calculate balance from FAF data
18
- * Matches fafdev.tools calculation - INDEPENDENT percentages
19
- * AI: How complete is technical context (0-100%)
20
- * HUMAN: How complete is human context (0-100%)
21
- * Perfect balance when both are high and similar
22
- */
23
- static calculateBalance(fafData: any): BalanceData;
24
- /**
25
- * Generate the visual balance bar
26
- * Matches fafdev.tools - single bar showing AI|HUMAN proportion
27
- */
28
- static generateBalanceBar(balance: BalanceData): string;
29
- /**
30
- * Generate a compact balance indicator for inline display
31
- */
32
- static generateCompactBalance(balance: BalanceData): string;
33
- /**
34
- * Get balance achievement message for gamification
35
- */
36
- static getAchievementMessage(balance: BalanceData): string | null;
37
- }