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,293 @@
1
+ "use strict";
2
+ /**
3
+ * Slot Validator - FAF Compiler Engine MK3
4
+ * Championship-grade slot validation with .faf content analysis
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.SlotValidator = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const yaml = __importStar(require("js-yaml"));
44
+ const slots_1 = require("../types/slots");
45
+ const project_types_1 = require("../types/project-types");
46
+ class SlotValidator {
47
+ /**
48
+ * Validate all slots against project type
49
+ */
50
+ validate(fafContent, projectType) {
51
+ const allSlots = slots_1.UNIVERSAL_SLOTS;
52
+ const ignoredSlots = project_types_1.SLOT_IGNORE_BY_TYPE[projectType];
53
+ const relevantSlots = 21 - ignoredSlots.length;
54
+ // Check each slot
55
+ const slots = allSlots.map(slot => {
56
+ const slotName = slot.name;
57
+ const isIgnored = ignoredSlots.includes(slotName);
58
+ const isRequired = !isIgnored;
59
+ const isFilled = this.isSlotFilled(slotName, fafContent);
60
+ return {
61
+ slotNumber: slot.number,
62
+ slotName: slotName,
63
+ required: isRequired,
64
+ filled: isFilled,
65
+ value: this.getSlotValue(slotName, fafContent),
66
+ points: isFilled && isRequired ? 1 : 0,
67
+ };
68
+ });
69
+ // Count filled slots (only count required slots)
70
+ const filledSlots = slots.filter(s => s.required && s.filled).length;
71
+ // Calculate score
72
+ const score = Math.round((filledSlots / relevantSlots) * 100);
73
+ // Determine medal
74
+ const medal = this.getMedal(score);
75
+ return {
76
+ totalSlots: 21,
77
+ relevantSlots,
78
+ filledSlots,
79
+ slots,
80
+ score,
81
+ medal,
82
+ };
83
+ }
84
+ /**
85
+ * Check if a specific slot is filled in .faf content
86
+ */
87
+ isSlotFilled(slotName, fafContent) {
88
+ if (!fafContent)
89
+ return false;
90
+ // Map slot names to .faf structure
91
+ switch (slotName) {
92
+ // Core Project (Slots 1-4)
93
+ case 'project_identity':
94
+ return !!(fafContent.project?.name &&
95
+ fafContent.project?.version);
96
+ case 'language':
97
+ return !!(fafContent.tech?.language ||
98
+ fafContent.project?.primary_language);
99
+ case 'human_context':
100
+ return !!(fafContent.human_context?.what ||
101
+ fafContent.human_context?.why ||
102
+ fafContent.project?.goal);
103
+ case 'documentation':
104
+ return !!(fafContent.files?.readme ||
105
+ fafContent.files?.claude_md ||
106
+ fafContent.documentation);
107
+ // Stack (Slots 5-14)
108
+ case 'frontend':
109
+ return !!(fafContent.tech?.frontend ||
110
+ fafContent.stack?.frontend ||
111
+ this.hasFramework(fafContent, ['react', 'vue', 'svelte', 'angular']));
112
+ case 'backend':
113
+ return !!(fafContent.tech?.backend ||
114
+ fafContent.stack?.backend ||
115
+ this.hasFramework(fafContent, ['express', 'fastapi', 'nestjs', 'rails']));
116
+ case 'database':
117
+ return !!(fafContent.tech?.database ||
118
+ fafContent.stack?.database ||
119
+ this.hasFramework(fafContent, ['postgresql', 'mongodb', 'mysql', 'supabase']));
120
+ case 'build_tool':
121
+ return !!(fafContent.tech?.build ||
122
+ fafContent.stack?.build_tool ||
123
+ this.hasFramework(fafContent, ['vite', 'webpack', 'esbuild', 'rollup']));
124
+ case 'package_manager':
125
+ return !!(fafContent.tech?.package_manager ||
126
+ fafContent.stack?.package_manager ||
127
+ this.hasFramework(fafContent, ['npm', 'pnpm', 'yarn', 'bun']));
128
+ case 'api':
129
+ return !!(fafContent.tech?.api ||
130
+ fafContent.stack?.api ||
131
+ fafContent.api_type);
132
+ case 'hosting':
133
+ return !!(fafContent.tech?.hosting ||
134
+ fafContent.stack?.hosting ||
135
+ fafContent.deployment?.platform);
136
+ case 'cicd':
137
+ return !!(fafContent.tech?.cicd ||
138
+ fafContent.stack?.cicd ||
139
+ fafContent.ci_cd);
140
+ case 'testing':
141
+ return !!(fafContent.tech?.testing ||
142
+ fafContent.stack?.testing ||
143
+ this.hasFramework(fafContent, ['vitest', 'jest', 'pytest', 'mocha']));
144
+ case 'css':
145
+ return !!(fafContent.tech?.css ||
146
+ fafContent.stack?.styling ||
147
+ this.hasFramework(fafContent, ['tailwind', 'css-modules', 'styled-components']));
148
+ // Architecture (Slots 15-21)
149
+ case 'ui_library':
150
+ return !!(fafContent.tech?.ui_library ||
151
+ fafContent.stack?.ui_components ||
152
+ this.hasFramework(fafContent, ['shadcn', 'mui', 'chakra']));
153
+ case 'state':
154
+ return !!(fafContent.tech?.state ||
155
+ fafContent.stack?.state_management ||
156
+ this.hasFramework(fafContent, ['zustand', 'redux', 'mobx']));
157
+ case 'runtime':
158
+ return !!(fafContent.tech?.runtime ||
159
+ fafContent.stack?.runtime ||
160
+ this.hasFramework(fafContent, ['node', 'deno', 'bun', 'browser']));
161
+ case 'auth':
162
+ return !!(fafContent.tech?.auth ||
163
+ fafContent.stack?.authentication ||
164
+ fafContent.authentication);
165
+ case 'storage':
166
+ return !!(fafContent.tech?.storage ||
167
+ fafContent.stack?.file_storage ||
168
+ fafContent.storage);
169
+ case 'caching':
170
+ return !!(fafContent.tech?.caching ||
171
+ fafContent.stack?.caching ||
172
+ this.hasFramework(fafContent, ['redis', 'memcached']));
173
+ case 'team':
174
+ return !!(fafContent.team ||
175
+ fafContent.workflow ||
176
+ fafContent.contributors);
177
+ default:
178
+ return false;
179
+ }
180
+ }
181
+ /**
182
+ * Get the value of a slot from .faf content
183
+ */
184
+ getSlotValue(slotName, fafContent) {
185
+ if (!fafContent)
186
+ return null;
187
+ switch (slotName) {
188
+ case 'project_identity':
189
+ return {
190
+ name: fafContent.project?.name,
191
+ version: fafContent.project?.version,
192
+ type: fafContent.project?.type,
193
+ };
194
+ case 'language':
195
+ return fafContent.tech?.language || fafContent.project?.primary_language;
196
+ case 'human_context':
197
+ return fafContent.human_context;
198
+ case 'frontend':
199
+ return fafContent.tech?.frontend || fafContent.stack?.frontend;
200
+ case 'backend':
201
+ return fafContent.tech?.backend || fafContent.stack?.backend;
202
+ case 'database':
203
+ return fafContent.tech?.database || fafContent.stack?.database;
204
+ case 'build_tool':
205
+ return fafContent.tech?.build || fafContent.stack?.build_tool;
206
+ case 'package_manager':
207
+ return fafContent.tech?.package_manager || fafContent.stack?.package_manager;
208
+ case 'api':
209
+ return fafContent.tech?.api || fafContent.api_type;
210
+ case 'hosting':
211
+ return fafContent.tech?.hosting || fafContent.deployment?.platform;
212
+ case 'cicd':
213
+ return fafContent.tech?.cicd || fafContent.ci_cd;
214
+ case 'testing':
215
+ return fafContent.tech?.testing || fafContent.stack?.testing;
216
+ case 'css':
217
+ return fafContent.tech?.css || fafContent.stack?.styling;
218
+ case 'ui_library':
219
+ return fafContent.tech?.ui_library || fafContent.stack?.ui_components;
220
+ case 'state':
221
+ return fafContent.tech?.state || fafContent.stack?.state_management;
222
+ case 'runtime':
223
+ return fafContent.tech?.runtime || fafContent.stack?.runtime;
224
+ case 'auth':
225
+ return fafContent.tech?.auth || fafContent.authentication;
226
+ case 'storage':
227
+ return fafContent.tech?.storage || fafContent.storage;
228
+ case 'caching':
229
+ return fafContent.tech?.caching || fafContent.stack?.caching;
230
+ case 'team':
231
+ return fafContent.team || fafContent.workflow;
232
+ default:
233
+ return null;
234
+ }
235
+ }
236
+ /**
237
+ * Helper: Check if fafContent has a specific framework
238
+ */
239
+ hasFramework(fafContent, frameworks) {
240
+ if (!fafContent)
241
+ return false;
242
+ // Check in various locations
243
+ const techString = JSON.stringify(fafContent.tech || {}).toLowerCase();
244
+ const stackString = JSON.stringify(fafContent.stack || {}).toLowerCase();
245
+ const allString = JSON.stringify(fafContent).toLowerCase();
246
+ return frameworks.some(fw => {
247
+ const lowerFw = fw.toLowerCase();
248
+ return techString.includes(lowerFw) ||
249
+ stackString.includes(lowerFw) ||
250
+ allString.includes(lowerFw);
251
+ });
252
+ }
253
+ /**
254
+ * Determine medal from score
255
+ */
256
+ getMedal(score) {
257
+ if (score >= 85)
258
+ return 'trophy'; // 🏆
259
+ if (score >= 70)
260
+ return 'gold'; // 🥇
261
+ if (score >= 55)
262
+ return 'silver'; // 🥈
263
+ if (score >= 40)
264
+ return 'bronze'; // 🥉
265
+ if (score >= 20)
266
+ return 'red'; // 🔴
267
+ return 'white'; // 🤍
268
+ }
269
+ /**
270
+ * Load and parse .faf file from directory
271
+ */
272
+ static async loadFafFile(projectPath) {
273
+ try {
274
+ // Try .faf first
275
+ let fafPath = path.join(projectPath, '.faf');
276
+ if (!fs.existsSync(fafPath)) {
277
+ // Try project.faf (v1.2.0 standard)
278
+ fafPath = path.join(projectPath, 'project.faf');
279
+ }
280
+ if (!fs.existsSync(fafPath)) {
281
+ return null;
282
+ }
283
+ const content = fs.readFileSync(fafPath, 'utf-8');
284
+ return yaml.load(content);
285
+ }
286
+ catch (error) {
287
+ console.error('Error loading .faf file:', error);
288
+ return null;
289
+ }
290
+ }
291
+ }
292
+ exports.SlotValidator = SlotValidator;
293
+ //# sourceMappingURL=slot-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-validator.js","sourceRoot":"","sources":["../../../src/compiler/slot-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Project Type Detector - FAF Compiler Engine MK3
3
+ * Championship-grade type detection with intelligent confidence scoring
4
+ */
5
+ import { TypeDetectionResult } from '../types/project-types';
6
+ export declare class ProjectTypeDetector {
7
+ private projectPath;
8
+ private packageJson;
9
+ constructor(projectPath: string);
10
+ /**
11
+ * Detect project type from file system analysis
12
+ */
13
+ detect(): Promise<TypeDetectionResult>;
14
+ /**
15
+ * Check for explicit file markers
16
+ */
17
+ private detectExplicitMarkers;
18
+ /**
19
+ * Detect framework signatures from dependencies
20
+ */
21
+ private detectFrameworkSignatures;
22
+ /**
23
+ * Analyze project structure
24
+ */
25
+ private analyzeStructure;
26
+ /**
27
+ * Analyze package.json for library/CLI patterns
28
+ */
29
+ private analyzePackageJson;
30
+ /**
31
+ * Create TypeDetectionResult from detected type
32
+ */
33
+ private createResult;
34
+ /**
35
+ * Helper: Check if file exists
36
+ */
37
+ private hasFile;
38
+ /**
39
+ * Helper: Check if directory exists
40
+ */
41
+ private hasDirectory;
42
+ /**
43
+ * Helper: Load package.json
44
+ */
45
+ private loadPackageJson;
46
+ /**
47
+ * Helper: Check if has frontend framework
48
+ */
49
+ private hasFrontendFramework;
50
+ /**
51
+ * Helper: Check if has backend framework
52
+ */
53
+ private hasBackendFramework;
54
+ /**
55
+ * Helper: Check if has database dependency
56
+ */
57
+ private hasDatabaseDependency;
58
+ /**
59
+ * Helper: Check if static-only site
60
+ */
61
+ private isStaticOnly;
62
+ }