claude-faf-mcp 2.7.3 β†’ 2.8.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 (49) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +77 -12
  3. package/dist/src/compiler/index.d.ts +7 -0
  4. package/dist/src/compiler/index.js +24 -0
  5. package/dist/src/compiler/index.js.map +1 -0
  6. package/dist/src/compiler/scorer.d.ts +53 -0
  7. package/dist/src/compiler/scorer.js +189 -0
  8. package/dist/src/compiler/scorer.js.map +1 -0
  9. package/dist/src/compiler/slot-validator.d.ts +32 -0
  10. package/dist/src/compiler/slot-validator.js +293 -0
  11. package/dist/src/compiler/slot-validator.js.map +1 -0
  12. package/dist/src/compiler/type-detector.d.ts +62 -0
  13. package/dist/src/compiler/type-detector.js +388 -0
  14. package/dist/src/compiler/type-detector.js.map +1 -0
  15. package/dist/src/config/visibility.d.ts +41 -0
  16. package/dist/src/config/visibility.js +158 -0
  17. package/dist/src/config/visibility.js.map +1 -0
  18. package/dist/src/handlers/championship-tools.d.ts +14 -1
  19. package/dist/src/handlers/championship-tools.js +728 -562
  20. package/dist/src/handlers/championship-tools.js.map +1 -1
  21. package/dist/src/handlers/tool-registry.d.ts +23 -0
  22. package/dist/src/handlers/tool-registry.js +68 -0
  23. package/dist/src/handlers/tool-registry.js.map +1 -0
  24. package/dist/src/handlers/tool-types.d.ts +36 -1
  25. package/dist/src/handlers/tools.d.ts +1 -0
  26. package/dist/src/handlers/tools.js +47 -2
  27. package/dist/src/handlers/tools.js.map +1 -1
  28. package/dist/src/server.js +5 -4
  29. package/dist/src/server.js.map +1 -1
  30. package/dist/src/types/mcp-tools.d.ts +53 -0
  31. package/dist/src/types/mcp-tools.js +77 -0
  32. package/dist/src/types/mcp-tools.js.map +1 -0
  33. package/dist/src/types/project-types.d.ts +22 -0
  34. package/dist/src/types/project-types.js +85 -0
  35. package/dist/src/types/project-types.js.map +1 -0
  36. package/dist/src/types/slots.d.ts +39 -0
  37. package/dist/src/types/slots.js +162 -0
  38. package/dist/src/types/slots.js.map +1 -0
  39. package/dist/src/types/tool-visibility.d.ts +36 -0
  40. package/dist/src/types/tool-visibility.js +512 -0
  41. package/dist/src/types/tool-visibility.js.map +1 -0
  42. package/dist/src/utils/display-protocol.d.ts +1 -1
  43. package/dist/src/utils/display-protocol.js +1 -1
  44. package/dist/src/version.d.ts +9 -0
  45. package/dist/src/version.js +37 -0
  46. package/dist/src/version.js.map +1 -0
  47. package/package.json +2 -1
  48. package/skill/SKILL.md +385 -0
  49. package/dist/test-file-finder.js +0 -20
package/CHANGELOG.md CHANGED
@@ -5,6 +5,34 @@ All notable changes to claude-faf-mcp will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.8.0] - 2025-11-05
9
+
10
+ ### Added
11
+ - Tool Visibility System - Intelligent filtering to reduce cognitive load
12
+ - 21 Core Tools (default) - Essential workflow tools shown by default
13
+ - 30+ Advanced Tools (opt-in) - Expert-level tools via FAF_MCP_SHOW_ADVANCED env var
14
+ - Tool categorization system (workflow, quality, intelligence, sync, ai, help, trust, file, utility, display)
15
+ - Configuration priority system (ENV > config file > default)
16
+ - Support for ~/.fafrc config file (JSON and key=value formats)
17
+ - Claude Code skill (faf-expert) bundled with package
18
+ - Comprehensive visibility test suite (22 new tests)
19
+
20
+ ### Changed
21
+ - Default tool count reduced from 51 to 21 (59% reduction in cognitive load)
22
+ - Tool filtering performance <10ms (5x better than 50ms target)
23
+ - Professional console output (silent operation, no clutter)
24
+ - README updated with v2.8.0 features and Claude Code skill installation
25
+
26
+ ### Performance
27
+ - Sub-10ms tool filtering for 56 tools
28
+ - Zero regressions in existing functionality
29
+ - 79 total tests passing (57 existing + 22 new)
30
+
31
+ ### Testing
32
+ - WJTTC Gold Certified
33
+ - F1-inspired testing standards applied
34
+ - Complete test report available
35
+
8
36
  ## [2.7.3] - 2025-11-02
9
37
 
10
38
  ### Fixed
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **πŸ† IANA-Registered Format** - .FAF is now an Internet-standard format.
4
4
  > MCP server for creating official `application/vnd.faf+yaml` files in Claude Desktop
5
- > Official MCP server for FAF (Foundational AI-context Format) with 33+ tools -
5
+ > Official MCP server for FAF (Foundational AI-context Format) with 50+ tools -
6
6
  > Persistent project context that integrates seamlessly with Claude Desktop workflows
7
7
 
8
8
  [![NPM Version](https://img.shields.io/npm/v/claude-faf-mcp?color=FF4500)](https://www.npmjs.com/package/claude-faf-mcp)
@@ -14,7 +14,7 @@
14
14
 
15
15
  **Problem:** AI needs persistent project contextβ€”not just md docs or tools, but foundational infrastructure.
16
16
 
17
- **Solution:** The .faf format is a structured, machine-readable context layer. This MCP server gives Claude 33+ tools to create, score, and improve your project's persistent context through format-driven architecture.
17
+ **Solution:** The .faf format is a structured, machine-readable context layer. This MCP server gives Claude 50+ tools to create, score, and improve your project's persistent context through format-driven architecture.
18
18
 
19
19
  **How it works:** Get a score (0-100%) showing how well AI understands your project. Higher scores = AI more in-tune with your codebase. Use tools to improve your score and context quality. Your .faf context persists across sessions.
20
20
 
@@ -88,16 +88,59 @@ Published to official Anthropic MCP registry with validation by Anthropic engine
88
88
 
89
89
  ---
90
90
 
91
- ## What's New in v2.7.2 - IANA Registration
91
+ ## What's New in v2.8.0 - Tool Visibility System
92
92
 
93
- **v2.7.2 updates documentation with IANA registration achievement.**
93
+ **v2.8.0 introduces intelligent tool filtering to reduce cognitive load.**
94
94
 
95
- On **October 31, 2025**, the Internet Assigned Numbers Authority (IANA) officially registered `.faf` as `application/vnd.faf+yaml` - making it an Internet-standard format alongside PDF, JSON, and XML.
95
+ ### New Features
96
96
 
97
- **What this means:**
98
- - Official Internet media type recognition
99
- - Proper HTTP Content-Type headers
100
- - Browser and email client support
97
+ **21 Core Tools (Default)**
98
+ Essential workflow tools shown by default:
99
+ - Workflow: `faf`, `faf_auto`, `faf_init`, `faf_innit`, `faf_status`
100
+ - Quality: `faf_score`, `faf_validate`, `faf_doctor`, `faf_audit`
101
+ - Intelligence: `faf_formats`, `faf_stacks`, `faf_skills`
102
+ - Sync: `faf_sync`, `faf_bi_sync`, `faf_update`, `faf_migrate`
103
+ - AI: `faf_chat`, `faf_enhance`
104
+ - Help: `faf_index`, `faf_faq`, `faf_about`
105
+
106
+ **30+ Advanced Tools (Opt-in)**
107
+ Expert-level tools available via environment variable:
108
+ - Display variants: `faf_display`, `faf_show`, `faf_check`
109
+ - Trust system: `faf_trust`, `faf_trust_confidence`, `faf_trust_garage`
110
+ - File operations: `faf_read`, `faf_write`, `faf_list`, `faf_exists`
111
+ - DNA tracking: `faf_dna`, `faf_log`, `faf_auth`, `faf_recover`
112
+ - Utilities: `faf_choose`, `faf_clear`, `faf_share`, `faf_credit`
113
+
114
+ **Enable Advanced Tools:**
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "claude-faf-mcp": {
119
+ "command": "claude-faf-mcp",
120
+ "env": {
121
+ "FAF_MCP_SHOW_ADVANCED": "true"
122
+ }
123
+ }
124
+ }
125
+ }
126
+ ```
127
+
128
+ **New! Claude Code Skill**
129
+ The `faf-expert` skill is now available - your on-hand 24/7 FAF specialist:
130
+ - Expert guidance on .faf files and project DNA
131
+ - Tool Visibility System documentation
132
+ - MCP server configuration help
133
+ - AI-readiness scoring assistance
134
+
135
+ ### Performance
136
+ - **<10ms tool filtering** (5x better than 50ms championship target)
137
+ - **79 tests passing** (57 existing + 22 new visibility tests)
138
+ - **Zero regressions** - All existing functionality preserved
139
+ - **WJTTC Gold Certified** - F1-inspired testing standards
140
+
141
+ ### Previous: v2.7.2 - IANA Registration
142
+
143
+ On **October 31, 2025**, IANA officially registered `.faf` as `application/vnd.faf+yaml` - making it an Internet-standard format alongside PDF, JSON, and XML
101
144
  - API standardization across platforms
102
145
 
103
146
  This documentation update adds IANA information throughout the README to reflect this major infrastructure-level achievement.
@@ -205,7 +248,7 @@ Format-driven means the architecture is built on data structure first, not tooli
205
248
  - Email client support
206
249
  - API standardization across platforms
207
250
 
208
- - **33 MCP Tools** - Complete project context management
251
+ - **50+ MCP Tools** - Complete project context management
209
252
  - Project DNA generation and scoring
210
253
  - Bi-directional CLAUDE.md sync
211
254
  - Format validation and conversion
@@ -297,7 +340,7 @@ Full tool documentation available at https://faf.one/docs/tools.
297
340
  1. Drop any project file into Claude Desktop
298
341
  2. Type: "Run faf_auto to analyze this project"
299
342
  3. Get instant context - Claude understands your codebase
300
- 4. Access 33+ commands naturally in conversation
343
+ 4. Access 50+ commands naturally in conversation
301
344
 
302
345
  The .faf file persists across conversations - no need to re-explain your project each time.
303
346
 
@@ -341,9 +384,31 @@ Node.js 18 or later. Claude Desktop (latest version). Operating system: macOS, L
341
384
 
342
385
  ---
343
386
 
387
+ ## Claude Code Skill Installation
388
+
389
+ **NEW**: Install the `faf-expert` skill for enhanced FAF support in Claude Code:
390
+
391
+ ```bash
392
+ # Install from npm package
393
+ mkdir -p ~/.claude/skills/faf-expert
394
+ cp node_modules/claude-faf-mcp/skill/SKILL.md ~/.claude/skills/faf-expert/
395
+
396
+ # Or download directly
397
+ curl -o ~/.claude/skills/faf-expert/SKILL.md \
398
+ https://cdn.jsdelivr.net/npm/claude-faf-mcp@latest/skill/SKILL.md
399
+ ```
400
+
401
+ Restart Claude Code to activate. The skill provides:
402
+ - Expert guidance on .faf files and project DNA
403
+ - v2.8.0 Tool Visibility System documentation
404
+ - MCP server configuration help
405
+ - AI-readiness scoring assistance
406
+
407
+ ---
408
+
344
409
  ## The FAF Ecosystem
345
410
 
346
- faf-cli (npm) - Command line tool for local context management. claude-faf-mcp - This MCP server for Claude Desktop integration. faf.one - Documentation and guides. Chrome Extension - Browser integration for context collection.
411
+ faf-cli (npm) - Command line tool for local context management. claude-faf-mcp - This MCP server for Claude Desktop integration. faf.one - Documentation and guides. Chrome Extension - Browser integration for context collection. faf-expert skill - Claude Code integration for FAF expertise.
347
412
 
348
413
  ---
349
414
 
@@ -0,0 +1,7 @@
1
+ /**
2
+ * FAF Compiler Engine MK3
3
+ * Championship-grade project type detection and scoring
4
+ */
5
+ export * from './type-detector';
6
+ export * from './slot-validator';
7
+ export * from './scorer';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * FAF Compiler Engine MK3
4
+ * Championship-grade project type detection and 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 __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ __exportStar(require("./type-detector"), exports);
22
+ __exportStar(require("./slot-validator"), exports);
23
+ __exportStar(require("./scorer"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compiler/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,kDAAgC;AAChC,mDAAiC;AACjC,2CAAyB"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Compiler Engine Scorer - FAF Compiler Engine MK3
3
+ * Championship-grade scoring with context-aware metrics
4
+ */
5
+ export interface ScoringResult {
6
+ score: number;
7
+ medal: 'trophy' | 'gold' | 'silver' | 'bronze' | 'red' | 'white';
8
+ emoji: string;
9
+ message: string;
10
+ breakdown: {
11
+ totalSlots: 21;
12
+ relevantSlots: number;
13
+ filledSlots: number;
14
+ ignoredSlots: number;
15
+ };
16
+ nextMilestone: {
17
+ targetScore: number;
18
+ medal: string;
19
+ emoji: string;
20
+ slotsNeeded: number;
21
+ message: string;
22
+ } | null;
23
+ }
24
+ export declare class CompilerEngineScorer {
25
+ /**
26
+ * Calculate score with slotignore support
27
+ */
28
+ calculateScore(filledSlots: number, relevantSlots: number, slotignore: string[]): ScoringResult;
29
+ /**
30
+ * Determine medal from score
31
+ */
32
+ private getMedal;
33
+ /**
34
+ * Get medal emoji
35
+ */
36
+ private getMedalEmoji;
37
+ /**
38
+ * Generate contextual message
39
+ */
40
+ private getMessage;
41
+ /**
42
+ * Calculate next milestone
43
+ */
44
+ private getNextMilestone;
45
+ /**
46
+ * Format scoring result as human-readable text
47
+ */
48
+ formatResult(result: ScoringResult, projectType?: string): string;
49
+ /**
50
+ * Generate actionable suggestions based on score
51
+ */
52
+ generateSuggestions(score: number, _medal: string, _missingSlots: string[]): string[];
53
+ }
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * Compiler Engine Scorer - FAF Compiler Engine MK3
4
+ * Championship-grade scoring with context-aware metrics
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CompilerEngineScorer = void 0;
8
+ class CompilerEngineScorer {
9
+ /**
10
+ * Calculate score with slotignore support
11
+ */
12
+ calculateScore(filledSlots, relevantSlots, slotignore) {
13
+ // Calculate score: (filled / relevant) * 100
14
+ const score = Math.round((filledSlots / relevantSlots) * 100);
15
+ // Determine medal
16
+ const medal = this.getMedal(score);
17
+ const emoji = this.getMedalEmoji(medal);
18
+ // Generate message
19
+ const message = this.getMessage(score, filledSlots, relevantSlots, medal);
20
+ // Calculate next milestone
21
+ const nextMilestone = this.getNextMilestone(score, filledSlots, relevantSlots);
22
+ return {
23
+ score,
24
+ medal,
25
+ emoji,
26
+ message,
27
+ breakdown: {
28
+ totalSlots: 21,
29
+ relevantSlots,
30
+ filledSlots,
31
+ ignoredSlots: slotignore.length,
32
+ },
33
+ nextMilestone,
34
+ };
35
+ }
36
+ /**
37
+ * Determine medal from score
38
+ */
39
+ getMedal(score) {
40
+ if (score >= 85)
41
+ return 'trophy'; // Championship grade
42
+ if (score >= 70)
43
+ return 'gold'; // Podium grade
44
+ if (score >= 55)
45
+ return 'silver'; // Strong
46
+ if (score >= 40)
47
+ return 'bronze'; // Decent
48
+ if (score >= 20)
49
+ return 'red'; // Needs work
50
+ return 'white'; // Just started
51
+ }
52
+ /**
53
+ * Get medal emoji
54
+ */
55
+ getMedalEmoji(medal) {
56
+ switch (medal) {
57
+ case 'trophy': return 'πŸ†';
58
+ case 'gold': return 'πŸ₯‡';
59
+ case 'silver': return 'πŸ₯ˆ';
60
+ case 'bronze': return 'πŸ₯‰';
61
+ case 'red': return 'πŸ”΄';
62
+ case 'white': return '🀍';
63
+ default: return 'βšͺ';
64
+ }
65
+ }
66
+ /**
67
+ * Generate contextual message
68
+ */
69
+ getMessage(score, filled, relevant, medal) {
70
+ if (score === 100) {
71
+ return `Perfect ${medal === 'trophy' ? 'Championship' : 'Project'} DNA! All ${filled}/${relevant} relevant slots filled.`;
72
+ }
73
+ if (score >= 85) {
74
+ return `Championship grade! ${filled}/${relevant} slots filled. Podium performance!`;
75
+ }
76
+ if (score >= 70) {
77
+ return `Podium grade! ${filled}/${relevant} slots filled. Strong AI context.`;
78
+ }
79
+ if (score >= 55) {
80
+ return `Solid foundation. ${filled}/${relevant} slots filled. Keep going!`;
81
+ }
82
+ if (score >= 40) {
83
+ return `Decent start. ${filled}/${relevant} slots filled. Room for improvement.`;
84
+ }
85
+ if (score >= 20) {
86
+ return `Getting started. ${filled}/${relevant} slots filled. Focus on core context.`;
87
+ }
88
+ return `Just beginning. ${filled}/${relevant} slots filled. Add project basics first.`;
89
+ }
90
+ /**
91
+ * Calculate next milestone
92
+ */
93
+ getNextMilestone(score, filled, relevant) {
94
+ // Already at 100%
95
+ if (score === 100) {
96
+ return null;
97
+ }
98
+ // Define milestones
99
+ const milestones = [
100
+ { threshold: 85, name: 'trophy', emoji: 'πŸ†', label: 'Championship Grade' },
101
+ { threshold: 70, name: 'gold', emoji: 'πŸ₯‡', label: 'Podium Grade' },
102
+ { threshold: 55, name: 'silver', emoji: 'πŸ₯ˆ', label: 'Solid Foundation' },
103
+ { threshold: 40, name: 'bronze', emoji: 'πŸ₯‰', label: 'Decent Start' },
104
+ { threshold: 20, name: 'red', emoji: 'πŸ”΄', label: 'Getting Started' },
105
+ ];
106
+ // Find next milestone
107
+ const nextMilestone = milestones.find(m => score < m.threshold);
108
+ if (!nextMilestone) {
109
+ // Already above all milestones, aim for 100%
110
+ const slotsNeeded = relevant - filled;
111
+ return {
112
+ targetScore: 100,
113
+ medal: 'trophy',
114
+ emoji: 'πŸ†',
115
+ slotsNeeded,
116
+ message: `Fill ${slotsNeeded} more slot${slotsNeeded === 1 ? '' : 's'} to reach 100% (Perfect!)`,
117
+ };
118
+ }
119
+ // Calculate slots needed
120
+ const targetFilled = Math.ceil((nextMilestone.threshold / 100) * relevant);
121
+ const slotsNeeded = Math.max(1, targetFilled - filled);
122
+ return {
123
+ targetScore: nextMilestone.threshold,
124
+ medal: nextMilestone.name,
125
+ emoji: nextMilestone.emoji,
126
+ slotsNeeded,
127
+ message: `Fill ${slotsNeeded} more slot${slotsNeeded === 1 ? '' : 's'} to reach ${nextMilestone.threshold}% (${nextMilestone.label})`,
128
+ };
129
+ }
130
+ /**
131
+ * Format scoring result as human-readable text
132
+ */
133
+ formatResult(result, projectType) {
134
+ const lines = [];
135
+ // Header
136
+ lines.push(`${result.emoji} Score: ${result.score}%`);
137
+ lines.push('');
138
+ // Message
139
+ lines.push(result.message);
140
+ lines.push('');
141
+ // Breakdown
142
+ lines.push('Breakdown:');
143
+ lines.push(` Total Slots: ${result.breakdown.totalSlots}`);
144
+ if (projectType) {
145
+ lines.push(` Project Type: ${projectType}`);
146
+ }
147
+ lines.push(` Relevant Slots: ${result.breakdown.relevantSlots}`);
148
+ lines.push(` Filled Slots: ${result.breakdown.filledSlots}`);
149
+ if (result.breakdown.ignoredSlots > 0) {
150
+ lines.push(` Ignored Slots: ${result.breakdown.ignoredSlots} (not applicable to this project type)`);
151
+ }
152
+ // Next milestone
153
+ if (result.nextMilestone) {
154
+ lines.push('');
155
+ lines.push('Next Milestone:');
156
+ lines.push(` ${result.nextMilestone.emoji} ${result.nextMilestone.message}`);
157
+ }
158
+ return lines.join('\n');
159
+ }
160
+ /**
161
+ * Generate actionable suggestions based on score
162
+ */
163
+ generateSuggestions(score, _medal, _missingSlots) {
164
+ const suggestions = [];
165
+ if (score < 40) {
166
+ suggestions.push('Start with core slots: project_identity, language, human_context');
167
+ suggestions.push('Add basic documentation: README.md, CLAUDE.md');
168
+ }
169
+ if (score >= 40 && score < 70) {
170
+ suggestions.push('Fill in your tech stack details (frontend, backend, database)');
171
+ suggestions.push('Add build and deployment information');
172
+ }
173
+ if (score >= 70 && score < 85) {
174
+ suggestions.push('Complete architecture details (auth, storage, caching)');
175
+ suggestions.push('Add team workflow and CI/CD information');
176
+ }
177
+ if (score >= 85 && score < 100) {
178
+ suggestions.push('Polish remaining slots for championship grade');
179
+ suggestions.push('Ensure all documentation is up to date');
180
+ }
181
+ if (score === 100) {
182
+ suggestions.push('Perfect! Consider sharing your .faf with the community');
183
+ suggestions.push('Keep it updated as your project evolves');
184
+ }
185
+ return suggestions;
186
+ }
187
+ }
188
+ exports.CompilerEngineScorer = CompilerEngineScorer;
189
+ //# sourceMappingURL=scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../../../src/compiler/scorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Slot Validator - FAF Compiler Engine MK3
3
+ * Championship-grade slot validation with .faf content analysis
4
+ */
5
+ import { ValidationResult } from '../types/slots';
6
+ import { ProjectType } from '../types/project-types';
7
+ export declare class SlotValidator {
8
+ /**
9
+ * Validate all slots against project type
10
+ */
11
+ validate(fafContent: any, projectType: ProjectType): ValidationResult;
12
+ /**
13
+ * Check if a specific slot is filled in .faf content
14
+ */
15
+ private isSlotFilled;
16
+ /**
17
+ * Get the value of a slot from .faf content
18
+ */
19
+ private getSlotValue;
20
+ /**
21
+ * Helper: Check if fafContent has a specific framework
22
+ */
23
+ private hasFramework;
24
+ /**
25
+ * Determine medal from score
26
+ */
27
+ private getMedal;
28
+ /**
29
+ * Load and parse .faf file from directory
30
+ */
31
+ static loadFafFile(projectPath: string): Promise<any | null>;
32
+ }