faf-mcp 1.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 (207) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/CLAUDE.md +73 -0
  3. package/LICENSE +22 -0
  4. package/README.md +165 -0
  5. package/assets/Project-faf-pckg-json-README.png +0 -0
  6. package/assets/icons/faf-icon-128.png +0 -0
  7. package/assets/icons/faf-icon-256.png +0 -0
  8. package/assets/icons/faf-icon-48.png +0 -0
  9. package/assets/icons/faf-icon-512.png +0 -0
  10. package/assets/icons/orange-smiley.svg +6 -0
  11. package/dist/src/compiler/index.d.ts +7 -0
  12. package/dist/src/compiler/index.js +24 -0
  13. package/dist/src/compiler/index.js.map +1 -0
  14. package/dist/src/compiler/scorer.d.ts +53 -0
  15. package/dist/src/compiler/scorer.js +189 -0
  16. package/dist/src/compiler/scorer.js.map +1 -0
  17. package/dist/src/compiler/slot-validator.d.ts +32 -0
  18. package/dist/src/compiler/slot-validator.js +293 -0
  19. package/dist/src/compiler/slot-validator.js.map +1 -0
  20. package/dist/src/compiler/type-detector.d.ts +62 -0
  21. package/dist/src/compiler/type-detector.js +388 -0
  22. package/dist/src/compiler/type-detector.js.map +1 -0
  23. package/dist/src/config/visibility.d.ts +41 -0
  24. package/dist/src/config/visibility.js +158 -0
  25. package/dist/src/config/visibility.js.map +1 -0
  26. package/dist/src/faf-core/commands/audit.d.ts +21 -0
  27. package/dist/src/faf-core/commands/audit.js +83 -0
  28. package/dist/src/faf-core/commands/audit.js.map +1 -0
  29. package/dist/src/faf-core/commands/auto.d.ts +25 -0
  30. package/dist/src/faf-core/commands/auto.js +74 -0
  31. package/dist/src/faf-core/commands/auto.js.map +1 -0
  32. package/dist/src/faf-core/commands/bi-sync.d.ts +26 -0
  33. package/dist/src/faf-core/commands/bi-sync.js +157 -0
  34. package/dist/src/faf-core/commands/bi-sync.js.map +1 -0
  35. package/dist/src/faf-core/commands/doctor.d.ts +17 -0
  36. package/dist/src/faf-core/commands/doctor.js +198 -0
  37. package/dist/src/faf-core/commands/doctor.js.map +1 -0
  38. package/dist/src/faf-core/commands/enhance.d.ts +46 -0
  39. package/dist/src/faf-core/commands/enhance.js +360 -0
  40. package/dist/src/faf-core/commands/enhance.js.map +1 -0
  41. package/dist/src/faf-core/commands/formats.d.ts +22 -0
  42. package/dist/src/faf-core/commands/formats.js +117 -0
  43. package/dist/src/faf-core/commands/formats.js.map +1 -0
  44. package/dist/src/faf-core/commands/init.d.ts +26 -0
  45. package/dist/src/faf-core/commands/init.js +114 -0
  46. package/dist/src/faf-core/commands/init.js.map +1 -0
  47. package/dist/src/faf-core/commands/innit.d.ts +7 -0
  48. package/dist/src/faf-core/commands/innit.js +13 -0
  49. package/dist/src/faf-core/commands/innit.js.map +1 -0
  50. package/dist/src/faf-core/commands/migrate.d.ts +15 -0
  51. package/dist/src/faf-core/commands/migrate.js +86 -0
  52. package/dist/src/faf-core/commands/migrate.js.map +1 -0
  53. package/dist/src/faf-core/commands/quick.d.ts +16 -0
  54. package/dist/src/faf-core/commands/quick.js +184 -0
  55. package/dist/src/faf-core/commands/quick.js.map +1 -0
  56. package/dist/src/faf-core/commands/score.d.ts +47 -0
  57. package/dist/src/faf-core/commands/score.js +49 -0
  58. package/dist/src/faf-core/commands/score.js.map +1 -0
  59. package/dist/src/faf-core/commands/sync.d.ts +16 -0
  60. package/dist/src/faf-core/commands/sync.js +210 -0
  61. package/dist/src/faf-core/commands/sync.js.map +1 -0
  62. package/dist/src/faf-core/commands/update.d.ts +12 -0
  63. package/dist/src/faf-core/commands/update.js +46 -0
  64. package/dist/src/faf-core/commands/update.js.map +1 -0
  65. package/dist/src/faf-core/commands/validate.d.ts +21 -0
  66. package/dist/src/faf-core/commands/validate.js +81 -0
  67. package/dist/src/faf-core/commands/validate.js.map +1 -0
  68. package/dist/src/faf-core/compiler/faf-compiler.d.ts +138 -0
  69. package/dist/src/faf-core/compiler/faf-compiler.js +794 -0
  70. package/dist/src/faf-core/compiler/faf-compiler.js.map +1 -0
  71. package/dist/src/faf-core/engines/dependency-tsa.d.ts +88 -0
  72. package/dist/src/faf-core/engines/dependency-tsa.js +361 -0
  73. package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -0
  74. package/dist/src/faf-core/engines/fab-formats-processor.d.ts +166 -0
  75. package/dist/src/faf-core/engines/fab-formats-processor.js +1274 -0
  76. package/dist/src/faf-core/engines/fab-formats-processor.js.map +1 -0
  77. package/dist/src/faf-core/engines/faf-dna.d.ts +159 -0
  78. package/dist/src/faf-core/engines/faf-dna.js +554 -0
  79. package/dist/src/faf-core/engines/faf-dna.js.map +1 -0
  80. package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +100 -0
  81. package/dist/src/faf-core/engines/relentless-context-extractor.js +625 -0
  82. package/dist/src/faf-core/engines/relentless-context-extractor.js.map +1 -0
  83. package/dist/src/faf-core/fix-once/colors.d.ts +104 -0
  84. package/dist/src/faf-core/fix-once/colors.js +236 -0
  85. package/dist/src/faf-core/fix-once/colors.js.map +1 -0
  86. package/dist/src/faf-core/fix-once/types.d.ts +257 -0
  87. package/dist/src/faf-core/fix-once/types.js +26 -0
  88. package/dist/src/faf-core/fix-once/types.js.map +1 -0
  89. package/dist/src/faf-core/fix-once/yaml.d.ts +57 -0
  90. package/dist/src/faf-core/fix-once/yaml.js +172 -0
  91. package/dist/src/faf-core/fix-once/yaml.js.map +1 -0
  92. package/dist/src/faf-core/generators/faf-generator-championship.d.ts +16 -0
  93. package/dist/src/faf-core/generators/faf-generator-championship.js +462 -0
  94. package/dist/src/faf-core/generators/faf-generator-championship.js.map +1 -0
  95. package/dist/src/faf-core/utils/balance-visualizer.d.ts +37 -0
  96. package/dist/src/faf-core/utils/balance-visualizer.js +197 -0
  97. package/dist/src/faf-core/utils/balance-visualizer.js.map +1 -0
  98. package/dist/src/faf-core/utils/championship-style.d.ts +109 -0
  99. package/dist/src/faf-core/utils/championship-style.js +219 -0
  100. package/dist/src/faf-core/utils/championship-style.js.map +1 -0
  101. package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +73 -0
  102. package/dist/src/faf-core/utils/chrome-extension-detector.js +268 -0
  103. package/dist/src/faf-core/utils/chrome-extension-detector.js.map +1 -0
  104. package/dist/src/faf-core/utils/fafignore-parser.d.ts +20 -0
  105. package/dist/src/faf-core/utils/fafignore-parser.js +178 -0
  106. package/dist/src/faf-core/utils/fafignore-parser.js.map +1 -0
  107. package/dist/src/faf-core/utils/file-utils.d.ts +112 -0
  108. package/dist/src/faf-core/utils/file-utils.js +846 -0
  109. package/dist/src/faf-core/utils/file-utils.js.map +1 -0
  110. package/dist/src/faf-core/utils/native-file-finder.d.ts +115 -0
  111. package/dist/src/faf-core/utils/native-file-finder.js +211 -0
  112. package/dist/src/faf-core/utils/native-file-finder.js.map +1 -0
  113. package/dist/src/faf-core/utils/platform-detector.d.ts +30 -0
  114. package/dist/src/faf-core/utils/platform-detector.js +218 -0
  115. package/dist/src/faf-core/utils/platform-detector.js.map +1 -0
  116. package/dist/src/faf-core/utils/technical-credit.d.ts +35 -0
  117. package/dist/src/faf-core/utils/technical-credit.js +286 -0
  118. package/dist/src/faf-core/utils/technical-credit.js.map +1 -0
  119. package/dist/src/faf-core/utils/yaml-generator.d.ts +41 -0
  120. package/dist/src/faf-core/utils/yaml-generator.js +360 -0
  121. package/dist/src/faf-core/utils/yaml-generator.js.map +1 -0
  122. package/dist/src/handlers/behavioral-instruction.d.ts +16 -0
  123. package/dist/src/handlers/behavioral-instruction.js +43 -0
  124. package/dist/src/handlers/behavioral-instruction.js.map +1 -0
  125. package/dist/src/handlers/championship-tools.d.ts +113 -0
  126. package/dist/src/handlers/championship-tools.js +2602 -0
  127. package/dist/src/handlers/championship-tools.js.map +1 -0
  128. package/dist/src/handlers/engine-adapter.d.ts +28 -0
  129. package/dist/src/handlers/engine-adapter.js +603 -0
  130. package/dist/src/handlers/engine-adapter.js.map +1 -0
  131. package/dist/src/handlers/fileHandler.d.ts +36 -0
  132. package/dist/src/handlers/fileHandler.js +246 -0
  133. package/dist/src/handlers/fileHandler.js.map +1 -0
  134. package/dist/src/handlers/resources.d.ts +18 -0
  135. package/dist/src/handlers/resources.js +78 -0
  136. package/dist/src/handlers/resources.js.map +1 -0
  137. package/dist/src/handlers/tool-registry.d.ts +23 -0
  138. package/dist/src/handlers/tool-registry.js +68 -0
  139. package/dist/src/handlers/tool-registry.js.map +1 -0
  140. package/dist/src/handlers/tool-types.d.ts +167 -0
  141. package/dist/src/handlers/tool-types.js +7 -0
  142. package/dist/src/handlers/tool-types.js.map +1 -0
  143. package/dist/src/handlers/tools.d.ts +25 -0
  144. package/dist/src/handlers/tools.js +1168 -0
  145. package/dist/src/handlers/tools.js.map +1 -0
  146. package/dist/src/index.d.ts +2 -0
  147. package/dist/src/index.js +17 -0
  148. package/dist/src/index.js.map +1 -0
  149. package/dist/src/server.d.ts +28 -0
  150. package/dist/src/server.js +179 -0
  151. package/dist/src/server.js.map +1 -0
  152. package/dist/src/test-all-functions.d.ts +15 -0
  153. package/dist/src/test-all-functions.js +163 -0
  154. package/dist/src/test-all-functions.js.map +1 -0
  155. package/dist/src/types/mcp-tools.d.ts +53 -0
  156. package/dist/src/types/mcp-tools.js +77 -0
  157. package/dist/src/types/mcp-tools.js.map +1 -0
  158. package/dist/src/types/project-types.d.ts +22 -0
  159. package/dist/src/types/project-types.js +85 -0
  160. package/dist/src/types/project-types.js.map +1 -0
  161. package/dist/src/types/slots.d.ts +39 -0
  162. package/dist/src/types/slots.js +162 -0
  163. package/dist/src/types/slots.js.map +1 -0
  164. package/dist/src/types/tool-visibility.d.ts +36 -0
  165. package/dist/src/types/tool-visibility.js +510 -0
  166. package/dist/src/types/tool-visibility.js.map +1 -0
  167. package/dist/src/utils/auto-path-detection.d.ts +26 -0
  168. package/dist/src/utils/auto-path-detection.js +198 -0
  169. package/dist/src/utils/auto-path-detection.js.map +1 -0
  170. package/dist/src/utils/championship-format.d.ts +30 -0
  171. package/dist/src/utils/championship-format.js +79 -0
  172. package/dist/src/utils/championship-format.js.map +1 -0
  173. package/dist/src/utils/cli-detector.d.ts +20 -0
  174. package/dist/src/utils/cli-detector.js +230 -0
  175. package/dist/src/utils/cli-detector.js.map +1 -0
  176. package/dist/src/utils/display-protocol.d.ts +57 -0
  177. package/dist/src/utils/display-protocol.js +131 -0
  178. package/dist/src/utils/display-protocol.js.map +1 -0
  179. package/dist/src/utils/faf-file-finder.d.ts +59 -0
  180. package/dist/src/utils/faf-file-finder.js +139 -0
  181. package/dist/src/utils/faf-file-finder.js.map +1 -0
  182. package/dist/src/utils/fuzzy-detector.d.ts +56 -0
  183. package/dist/src/utils/fuzzy-detector.js +221 -0
  184. package/dist/src/utils/fuzzy-detector.js.map +1 -0
  185. package/dist/src/utils/path-resolver.d.ts +51 -0
  186. package/dist/src/utils/path-resolver.js +214 -0
  187. package/dist/src/utils/path-resolver.js.map +1 -0
  188. package/dist/src/utils/type-guards.d.ts +9 -0
  189. package/dist/src/utils/type-guards.js +27 -0
  190. package/dist/src/utils/type-guards.js.map +1 -0
  191. package/dist/src/utils/username-detector.d.ts +27 -0
  192. package/dist/src/utils/username-detector.js +90 -0
  193. package/dist/src/utils/username-detector.js.map +1 -0
  194. package/dist/src/utils/visual-style.d.ts +62 -0
  195. package/dist/src/utils/visual-style.js +164 -0
  196. package/dist/src/utils/visual-style.js.map +1 -0
  197. package/dist/src/version.d.ts +9 -0
  198. package/dist/src/version.js +37 -0
  199. package/dist/src/version.js.map +1 -0
  200. package/package.json +114 -0
  201. package/scripts/discord-sync-curated.js +233 -0
  202. package/scripts/discord-sync-final.js +218 -0
  203. package/scripts/discord-sync-simple.js +175 -0
  204. package/scripts/discord-sync-working.js +187 -0
  205. package/scripts/discord-sync.js +181 -0
  206. package/scripts/postinstall.js +46 -0
  207. package/skill/SKILL.md +385 -0
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+ /**
3
+ * Project Type Detector - FAF Compiler Engine MK3
4
+ * Championship-grade type detection with intelligent confidence scoring
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ProjectTypeDetector = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const project_types_1 = require("../types/project-types");
44
+ class ProjectTypeDetector {
45
+ projectPath;
46
+ packageJson = null;
47
+ constructor(projectPath) {
48
+ this.projectPath = projectPath;
49
+ }
50
+ /**
51
+ * Detect project type from file system analysis
52
+ */
53
+ async detect() {
54
+ // Load package.json if it exists
55
+ await this.loadPackageJson();
56
+ // Detection priority (as per spec)
57
+ // 1. Explicit markers
58
+ const explicitType = this.detectExplicitMarkers();
59
+ if (explicitType) {
60
+ return this.createResult(explicitType.type, explicitType.confidence, explicitType.reasoning);
61
+ }
62
+ // 2. Framework signatures
63
+ const frameworkType = this.detectFrameworkSignatures();
64
+ if (frameworkType) {
65
+ return this.createResult(frameworkType.type, frameworkType.confidence, frameworkType.reasoning);
66
+ }
67
+ // 3. Structure analysis
68
+ const structureType = await this.analyzeStructure();
69
+ if (structureType) {
70
+ return this.createResult(structureType.type, structureType.confidence, structureType.reasoning);
71
+ }
72
+ // 4. Package.json analysis
73
+ const packageType = this.analyzePackageJson();
74
+ if (packageType) {
75
+ return this.createResult(packageType.type, packageType.confidence, packageType.reasoning);
76
+ }
77
+ // 5. Default to full-stack (safe fallback)
78
+ return this.createResult('full-stack', 50, 'Defaulted to full-stack (unable to determine specific type)');
79
+ }
80
+ /**
81
+ * Check for explicit file markers
82
+ */
83
+ detectExplicitMarkers() {
84
+ // Browser extension
85
+ if (this.hasFile('manifest.json')) {
86
+ return {
87
+ type: 'browser-extension',
88
+ confidence: 95,
89
+ reasoning: 'Found manifest.json (browser extension marker)',
90
+ };
91
+ }
92
+ // Documentation site
93
+ if (this.hasFile('docusaurus.config.js') || this.hasFile('docusaurus.config.ts')) {
94
+ return {
95
+ type: 'docs-site',
96
+ confidence: 95,
97
+ reasoning: 'Found Docusaurus config',
98
+ };
99
+ }
100
+ if (this.hasFile('vitepress.config.js') || this.hasFile('vitepress.config.ts') || this.hasFile('.vitepress/config.js')) {
101
+ return {
102
+ type: 'docs-site',
103
+ confidence: 95,
104
+ reasoning: 'Found VitePress config',
105
+ };
106
+ }
107
+ if (this.hasFile('nextra.config.js') || this.hasFile('next.config.js')) {
108
+ const hasDocs = this.hasDirectory('pages') || this.hasDirectory('docs');
109
+ if (hasDocs) {
110
+ return {
111
+ type: 'docs-site',
112
+ confidence: 90,
113
+ reasoning: 'Found Next.js config with docs structure',
114
+ };
115
+ }
116
+ }
117
+ // Monorepo
118
+ if (this.hasFile('pnpm-workspace.yaml')) {
119
+ return {
120
+ type: 'monorepo',
121
+ confidence: 95,
122
+ reasoning: 'Found pnpm-workspace.yaml',
123
+ };
124
+ }
125
+ if (this.hasFile('lerna.json')) {
126
+ return {
127
+ type: 'monorepo',
128
+ confidence: 95,
129
+ reasoning: 'Found lerna.json',
130
+ };
131
+ }
132
+ if (this.hasFile('nx.json')) {
133
+ return {
134
+ type: 'monorepo',
135
+ confidence: 95,
136
+ reasoning: 'Found nx.json (Nx monorepo)',
137
+ };
138
+ }
139
+ if (this.hasFile('turbo.json')) {
140
+ return {
141
+ type: 'monorepo',
142
+ confidence: 95,
143
+ reasoning: 'Found turbo.json (Turborepo)',
144
+ };
145
+ }
146
+ // Serverless
147
+ if (this.hasFile('serverless.yml') || this.hasFile('serverless.yaml')) {
148
+ return {
149
+ type: 'serverless',
150
+ confidence: 95,
151
+ reasoning: 'Found serverless config',
152
+ };
153
+ }
154
+ // Microservices
155
+ if (this.hasFile('docker-compose.yml') || this.hasFile('docker-compose.yaml')) {
156
+ if (this.hasDirectory('k8s') || this.hasDirectory('kubernetes')) {
157
+ return {
158
+ type: 'microservices',
159
+ confidence: 90,
160
+ reasoning: 'Found docker-compose + k8s configs',
161
+ };
162
+ }
163
+ }
164
+ return null;
165
+ }
166
+ /**
167
+ * Detect framework signatures from dependencies
168
+ */
169
+ detectFrameworkSignatures() {
170
+ if (!this.packageJson)
171
+ return null;
172
+ const allDeps = {
173
+ ...this.packageJson.dependencies,
174
+ ...this.packageJson.devDependencies,
175
+ };
176
+ // MCP Server
177
+ if (allDeps['@modelcontextprotocol/sdk']) {
178
+ return {
179
+ type: 'mcp-server',
180
+ confidence: 95,
181
+ reasoning: 'Found @modelcontextprotocol/sdk dependency',
182
+ };
183
+ }
184
+ // Desktop app
185
+ if (allDeps['electron'] || allDeps['@tauri-apps/api']) {
186
+ return {
187
+ type: 'desktop-app',
188
+ confidence: 95,
189
+ reasoning: allDeps['electron'] ? 'Found Electron dependency' : 'Found Tauri dependency',
190
+ };
191
+ }
192
+ // Mobile app
193
+ if (allDeps['react-native'] || allDeps['expo']) {
194
+ return {
195
+ type: 'mobile-app',
196
+ confidence: 95,
197
+ reasoning: allDeps['react-native'] ? 'Found React Native dependency' : 'Found Expo dependency',
198
+ };
199
+ }
200
+ if (allDeps['flutter']) {
201
+ return {
202
+ type: 'mobile-app',
203
+ confidence: 95,
204
+ reasoning: 'Found Flutter dependency',
205
+ };
206
+ }
207
+ return null;
208
+ }
209
+ /**
210
+ * Analyze project structure
211
+ */
212
+ async analyzeStructure() {
213
+ const hasFrontend = this.hasFrontendFramework();
214
+ const hasBackend = this.hasBackendFramework();
215
+ const hasDatabase = this.hasDatabaseDependency();
216
+ // Full-stack (all three)
217
+ if (hasFrontend && hasBackend && hasDatabase) {
218
+ return {
219
+ type: 'full-stack',
220
+ confidence: 90,
221
+ reasoning: 'Has frontend + backend + database',
222
+ };
223
+ }
224
+ // API backend (backend, no frontend)
225
+ if (hasBackend && !hasFrontend) {
226
+ return {
227
+ type: 'api-backend',
228
+ confidence: 85,
229
+ reasoning: 'Has backend framework, no frontend',
230
+ };
231
+ }
232
+ // SPA or Vibe site (frontend, no backend)
233
+ if (hasFrontend && !hasBackend) {
234
+ const isStaticOnly = await this.isStaticOnly();
235
+ if (isStaticOnly) {
236
+ return {
237
+ type: 'vibe-site',
238
+ confidence: 80,
239
+ reasoning: 'Static site with minimal dependencies',
240
+ };
241
+ }
242
+ return {
243
+ type: 'spa',
244
+ confidence: 85,
245
+ reasoning: 'Has frontend framework, no backend',
246
+ };
247
+ }
248
+ return null;
249
+ }
250
+ /**
251
+ * Analyze package.json for library/CLI patterns
252
+ */
253
+ analyzePackageJson() {
254
+ if (!this.packageJson)
255
+ return null;
256
+ // CLI tool
257
+ if (this.packageJson.bin) {
258
+ return {
259
+ type: 'cli-tool',
260
+ confidence: 90,
261
+ reasoning: 'Has bin field in package.json',
262
+ };
263
+ }
264
+ // Library
265
+ if (this.packageJson.main || this.packageJson.exports) {
266
+ const hasSrcDir = this.hasDirectory('src');
267
+ const hasNoAppStructure = !this.hasDirectory('pages') && !this.hasDirectory('app') && !this.hasDirectory('routes');
268
+ if (hasSrcDir && hasNoAppStructure) {
269
+ return {
270
+ type: 'library',
271
+ confidence: 85,
272
+ reasoning: 'Has main/exports field with library structure',
273
+ };
274
+ }
275
+ }
276
+ return null;
277
+ }
278
+ /**
279
+ * Create TypeDetectionResult from detected type
280
+ */
281
+ createResult(type, confidence, reasoning) {
282
+ return {
283
+ type,
284
+ confidence,
285
+ slotignore: project_types_1.SLOT_IGNORE_BY_TYPE[type],
286
+ relevantSlots: project_types_1.RELEVANT_SLOTS_BY_TYPE[type],
287
+ reasoning,
288
+ };
289
+ }
290
+ /**
291
+ * Helper: Check if file exists
292
+ */
293
+ hasFile(fileName) {
294
+ try {
295
+ const filePath = path.join(this.projectPath, fileName);
296
+ return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
297
+ }
298
+ catch {
299
+ return false;
300
+ }
301
+ }
302
+ /**
303
+ * Helper: Check if directory exists
304
+ */
305
+ hasDirectory(dirName) {
306
+ try {
307
+ const dirPath = path.join(this.projectPath, dirName);
308
+ return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();
309
+ }
310
+ catch {
311
+ return false;
312
+ }
313
+ }
314
+ /**
315
+ * Helper: Load package.json
316
+ */
317
+ async loadPackageJson() {
318
+ try {
319
+ const pkgPath = path.join(this.projectPath, 'package.json');
320
+ if (fs.existsSync(pkgPath)) {
321
+ const content = fs.readFileSync(pkgPath, 'utf-8');
322
+ this.packageJson = JSON.parse(content);
323
+ }
324
+ }
325
+ catch {
326
+ // Silently fail if package.json doesn't exist or can't be parsed
327
+ }
328
+ }
329
+ /**
330
+ * Helper: Check if has frontend framework
331
+ */
332
+ hasFrontendFramework() {
333
+ if (!this.packageJson)
334
+ return false;
335
+ const allDeps = {
336
+ ...this.packageJson.dependencies,
337
+ ...this.packageJson.devDependencies,
338
+ };
339
+ const frontendFrameworks = ['react', 'vue', 'svelte', '@angular/core', 'solid-js', 'preact'];
340
+ return frontendFrameworks.some(fw => allDeps[fw]);
341
+ }
342
+ /**
343
+ * Helper: Check if has backend framework
344
+ */
345
+ hasBackendFramework() {
346
+ if (!this.packageJson)
347
+ return false;
348
+ const allDeps = {
349
+ ...this.packageJson.dependencies,
350
+ ...this.packageJson.devDependencies,
351
+ };
352
+ const backendFrameworks = ['express', 'koa', 'hono', '@hono/node-server', 'fastify', 'nestjs'];
353
+ return backendFrameworks.some(fw => allDeps[fw]);
354
+ }
355
+ /**
356
+ * Helper: Check if has database dependency
357
+ */
358
+ hasDatabaseDependency() {
359
+ if (!this.packageJson)
360
+ return false;
361
+ const allDeps = {
362
+ ...this.packageJson.dependencies,
363
+ ...this.packageJson.devDependencies,
364
+ };
365
+ const databases = ['pg', 'mysql', 'mongodb', 'mongoose', 'prisma', '@supabase/supabase-js', 'sqlite3', 'better-sqlite3'];
366
+ return databases.some(db => allDeps[db]);
367
+ }
368
+ /**
369
+ * Helper: Check if static-only site
370
+ */
371
+ async isStaticOnly() {
372
+ if (!this.packageJson)
373
+ return true;
374
+ const allDeps = {
375
+ ...this.packageJson.dependencies,
376
+ ...this.packageJson.devDependencies,
377
+ };
378
+ // Count total dependencies
379
+ const depCount = Object.keys(allDeps).length;
380
+ // Static sites typically have < 10 dependencies
381
+ // and no server/state management libraries
382
+ const hasServerDeps = allDeps['express'] || allDeps['next'] || allDeps['@sveltejs/kit'];
383
+ const hasStateMgmt = allDeps['redux'] || allDeps['zustand'] || allDeps['@tanstack/react-query'];
384
+ return depCount < 10 && !hasServerDeps && !hasStateMgmt;
385
+ }
386
+ }
387
+ exports.ProjectTypeDetector = ProjectTypeDetector;
388
+ //# sourceMappingURL=type-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-detector.js","sourceRoot":"","sources":["../../../src/compiler/type-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 🏎️ FAF Tool Visibility Configuration - v2.8.0
3
+ * Controls which tools are visible (core vs all)
4
+ * Championship-grade configuration management
5
+ */
6
+ export interface VisibilityConfig {
7
+ showAdvanced: boolean;
8
+ source: 'env' | 'flag' | 'config' | 'default';
9
+ }
10
+ export interface FafConfig {
11
+ showAdvanced?: boolean;
12
+ [key: string]: unknown;
13
+ }
14
+ /**
15
+ * Get visibility configuration from multiple sources
16
+ * Priority: ENV var > config file > default
17
+ */
18
+ export declare function getVisibilityConfig(): VisibilityConfig;
19
+ /**
20
+ * Read configuration from .fafrc file
21
+ * Checks multiple locations:
22
+ * 1. ~/.fafrc (home directory)
23
+ * 2. ./.fafrc (current working directory)
24
+ */
25
+ export declare function readConfigFile(): FafConfig | null;
26
+ /**
27
+ * Write configuration to ~/.fafrc file
28
+ */
29
+ export declare function writeConfigFile(config: FafConfig): boolean;
30
+ /**
31
+ * Enable advanced tools
32
+ */
33
+ export declare function enableAdvancedTools(): boolean;
34
+ /**
35
+ * Disable advanced tools (show core only)
36
+ */
37
+ export declare function disableAdvancedTools(): boolean;
38
+ /**
39
+ * Get current tool visibility status (for logging)
40
+ */
41
+ export declare function getVisibilityStatus(): string;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ /**
3
+ * 🏎️ FAF Tool Visibility Configuration - v2.8.0
4
+ * Controls which tools are visible (core vs all)
5
+ * Championship-grade configuration management
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
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.getVisibilityConfig = getVisibilityConfig;
42
+ exports.readConfigFile = readConfigFile;
43
+ exports.writeConfigFile = writeConfigFile;
44
+ exports.enableAdvancedTools = enableAdvancedTools;
45
+ exports.disableAdvancedTools = disableAdvancedTools;
46
+ exports.getVisibilityStatus = getVisibilityStatus;
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const os = __importStar(require("os"));
50
+ /**
51
+ * Get visibility configuration from multiple sources
52
+ * Priority: ENV var > config file > default
53
+ */
54
+ function getVisibilityConfig() {
55
+ // 1. Check ENV: FAF_MCP_SHOW_ADVANCED=true
56
+ if (process.env.FAF_MCP_SHOW_ADVANCED === 'true') {
57
+ return { showAdvanced: true, source: 'env' };
58
+ }
59
+ // 2. Check config file: ~/.fafrc or .fafrc
60
+ const configFile = readConfigFile();
61
+ if (configFile?.showAdvanced === true) {
62
+ return { showAdvanced: true, source: 'config' };
63
+ }
64
+ // 3. Default: core only (changed from "show all" to align with spec)
65
+ // NOTE: For backward compatibility during transition, you may want to
66
+ // temporarily set default to `true` and notify users to update config
67
+ return { showAdvanced: false, source: 'default' };
68
+ }
69
+ /**
70
+ * Read configuration from .fafrc file
71
+ * Checks multiple locations:
72
+ * 1. ~/.fafrc (home directory)
73
+ * 2. ./.fafrc (current working directory)
74
+ */
75
+ function readConfigFile() {
76
+ const configPaths = [
77
+ path.join(os.homedir(), '.fafrc'),
78
+ path.join(process.cwd(), '.fafrc'),
79
+ ];
80
+ for (const configPath of configPaths) {
81
+ try {
82
+ if (fs.existsSync(configPath)) {
83
+ const content = fs.readFileSync(configPath, 'utf-8');
84
+ // Support both JSON and simple key=value format
85
+ if (content.trim().startsWith('{')) {
86
+ // JSON format
87
+ return JSON.parse(content);
88
+ }
89
+ else {
90
+ // Simple key=value format
91
+ const config = {};
92
+ const lines = content.split('\n');
93
+ for (const line of lines) {
94
+ const trimmed = line.trim();
95
+ if (!trimmed || trimmed.startsWith('#'))
96
+ continue;
97
+ const [key, value] = trimmed.split('=').map((s) => s.trim());
98
+ if (key === 'showAdvanced' || key === 'FAF_SHOW_ADVANCED') {
99
+ config.showAdvanced = value === 'true';
100
+ }
101
+ }
102
+ return config;
103
+ }
104
+ }
105
+ }
106
+ catch (error) {
107
+ // Silently ignore config file errors - graceful degradation
108
+ // Config file is optional, errors are non-critical
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ /**
114
+ * Write configuration to ~/.fafrc file
115
+ */
116
+ function writeConfigFile(config) {
117
+ const configPath = path.join(os.homedir(), '.fafrc');
118
+ try {
119
+ const content = JSON.stringify(config, null, 2);
120
+ fs.writeFileSync(configPath, content, 'utf-8');
121
+ return true;
122
+ }
123
+ catch (error) {
124
+ // Silent failure - config file write is optional
125
+ return false;
126
+ }
127
+ }
128
+ /**
129
+ * Enable advanced tools
130
+ */
131
+ function enableAdvancedTools() {
132
+ const config = readConfigFile() || {};
133
+ config.showAdvanced = true;
134
+ return writeConfigFile(config);
135
+ }
136
+ /**
137
+ * Disable advanced tools (show core only)
138
+ */
139
+ function disableAdvancedTools() {
140
+ const config = readConfigFile() || {};
141
+ config.showAdvanced = false;
142
+ return writeConfigFile(config);
143
+ }
144
+ /**
145
+ * Get current tool visibility status (for logging)
146
+ */
147
+ function getVisibilityStatus() {
148
+ const config = getVisibilityConfig();
149
+ const toolCount = config.showAdvanced ? '51 (ALL)' : '20 (CORE)';
150
+ const sourceEmoji = {
151
+ env: '🌍',
152
+ flag: '🚩',
153
+ config: '⚙️',
154
+ default: '🏁',
155
+ };
156
+ return `${sourceEmoji[config.source]} ${toolCount} tools via ${config.source.toUpperCase()}`;
157
+ }
158
+ //# sourceMappingURL=visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../../src/config/visibility.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,kDAgBC;AAQD,wCAwCC;AAKD,0CAWC;AAKD,kDAIC;AAKD,oDAIC;AAKD,kDAWC;AApID,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAYzB;;;GAGG;AACH,SAAgB,mBAAmB;IACjC,2CAA2C;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,2CAA2C;IAC3C,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,UAAU,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IAED,qEAAqE;IACrE,sEAAsE;IACtE,sEAAsE;IACtE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc;IAC5B,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC;KACnC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAErD,gDAAgD;gBAChD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,cAAc;oBACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,0BAA0B;oBAC1B,MAAM,MAAM,GAAc,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;4BAAE,SAAS;wBAElD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC7D,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;4BAC1D,MAAM,CAAC,YAAY,GAAG,KAAK,KAAK,MAAM,CAAC;wBACzC,CAAC;oBACH,CAAC;oBAED,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4DAA4D;YAC5D,mDAAmD;QACrD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAiB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iDAAiD;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,MAAM,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,MAAM,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IACjE,MAAM,WAAW,GAAG;QAClB,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,cAAc,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 🔍 faf audit - Comprehensive Quality Audit (Mk3 Bundled)
3
+ * Audit project.faf quality and completeness
4
+ */
5
+ export interface AuditOptions {
6
+ json?: boolean;
7
+ verbose?: boolean;
8
+ }
9
+ export interface AuditResult {
10
+ success: boolean;
11
+ score: number;
12
+ grade: string;
13
+ issues: Array<{
14
+ severity: 'high' | 'medium' | 'low';
15
+ message: string;
16
+ fix?: string;
17
+ }>;
18
+ strengths: string[];
19
+ message: string;
20
+ }
21
+ export declare function auditFafFile(projectPath?: string, options?: AuditOptions): Promise<AuditResult>;