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.
- package/CHANGELOG.md +34 -0
- package/CLAUDE.md +73 -0
- package/LICENSE +22 -0
- package/README.md +165 -0
- package/assets/Project-faf-pckg-json-README.png +0 -0
- package/assets/icons/faf-icon-128.png +0 -0
- package/assets/icons/faf-icon-256.png +0 -0
- package/assets/icons/faf-icon-48.png +0 -0
- package/assets/icons/faf-icon-512.png +0 -0
- package/assets/icons/orange-smiley.svg +6 -0
- package/dist/src/compiler/index.d.ts +7 -0
- package/dist/src/compiler/index.js +24 -0
- package/dist/src/compiler/index.js.map +1 -0
- package/dist/src/compiler/scorer.d.ts +53 -0
- package/dist/src/compiler/scorer.js +189 -0
- package/dist/src/compiler/scorer.js.map +1 -0
- package/dist/src/compiler/slot-validator.d.ts +32 -0
- package/dist/src/compiler/slot-validator.js +293 -0
- package/dist/src/compiler/slot-validator.js.map +1 -0
- package/dist/src/compiler/type-detector.d.ts +62 -0
- package/dist/src/compiler/type-detector.js +388 -0
- package/dist/src/compiler/type-detector.js.map +1 -0
- package/dist/src/config/visibility.d.ts +41 -0
- package/dist/src/config/visibility.js +158 -0
- package/dist/src/config/visibility.js.map +1 -0
- package/dist/src/faf-core/commands/audit.d.ts +21 -0
- package/dist/src/faf-core/commands/audit.js +83 -0
- package/dist/src/faf-core/commands/audit.js.map +1 -0
- package/dist/src/faf-core/commands/auto.d.ts +25 -0
- package/dist/src/faf-core/commands/auto.js +74 -0
- package/dist/src/faf-core/commands/auto.js.map +1 -0
- package/dist/src/faf-core/commands/bi-sync.d.ts +26 -0
- package/dist/src/faf-core/commands/bi-sync.js +157 -0
- package/dist/src/faf-core/commands/bi-sync.js.map +1 -0
- package/dist/src/faf-core/commands/doctor.d.ts +17 -0
- package/dist/src/faf-core/commands/doctor.js +198 -0
- package/dist/src/faf-core/commands/doctor.js.map +1 -0
- package/dist/src/faf-core/commands/enhance.d.ts +46 -0
- package/dist/src/faf-core/commands/enhance.js +360 -0
- package/dist/src/faf-core/commands/enhance.js.map +1 -0
- package/dist/src/faf-core/commands/formats.d.ts +22 -0
- package/dist/src/faf-core/commands/formats.js +117 -0
- package/dist/src/faf-core/commands/formats.js.map +1 -0
- package/dist/src/faf-core/commands/init.d.ts +26 -0
- package/dist/src/faf-core/commands/init.js +114 -0
- package/dist/src/faf-core/commands/init.js.map +1 -0
- package/dist/src/faf-core/commands/innit.d.ts +7 -0
- package/dist/src/faf-core/commands/innit.js +13 -0
- package/dist/src/faf-core/commands/innit.js.map +1 -0
- package/dist/src/faf-core/commands/migrate.d.ts +15 -0
- package/dist/src/faf-core/commands/migrate.js +86 -0
- package/dist/src/faf-core/commands/migrate.js.map +1 -0
- package/dist/src/faf-core/commands/quick.d.ts +16 -0
- package/dist/src/faf-core/commands/quick.js +184 -0
- package/dist/src/faf-core/commands/quick.js.map +1 -0
- package/dist/src/faf-core/commands/score.d.ts +47 -0
- package/dist/src/faf-core/commands/score.js +49 -0
- package/dist/src/faf-core/commands/score.js.map +1 -0
- package/dist/src/faf-core/commands/sync.d.ts +16 -0
- package/dist/src/faf-core/commands/sync.js +210 -0
- package/dist/src/faf-core/commands/sync.js.map +1 -0
- package/dist/src/faf-core/commands/update.d.ts +12 -0
- package/dist/src/faf-core/commands/update.js +46 -0
- package/dist/src/faf-core/commands/update.js.map +1 -0
- package/dist/src/faf-core/commands/validate.d.ts +21 -0
- package/dist/src/faf-core/commands/validate.js +81 -0
- package/dist/src/faf-core/commands/validate.js.map +1 -0
- package/dist/src/faf-core/compiler/faf-compiler.d.ts +138 -0
- package/dist/src/faf-core/compiler/faf-compiler.js +794 -0
- package/dist/src/faf-core/compiler/faf-compiler.js.map +1 -0
- package/dist/src/faf-core/engines/dependency-tsa.d.ts +88 -0
- package/dist/src/faf-core/engines/dependency-tsa.js +361 -0
- package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -0
- package/dist/src/faf-core/engines/fab-formats-processor.d.ts +166 -0
- package/dist/src/faf-core/engines/fab-formats-processor.js +1274 -0
- package/dist/src/faf-core/engines/fab-formats-processor.js.map +1 -0
- package/dist/src/faf-core/engines/faf-dna.d.ts +159 -0
- package/dist/src/faf-core/engines/faf-dna.js +554 -0
- package/dist/src/faf-core/engines/faf-dna.js.map +1 -0
- package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +100 -0
- package/dist/src/faf-core/engines/relentless-context-extractor.js +625 -0
- package/dist/src/faf-core/engines/relentless-context-extractor.js.map +1 -0
- package/dist/src/faf-core/fix-once/colors.d.ts +104 -0
- package/dist/src/faf-core/fix-once/colors.js +236 -0
- package/dist/src/faf-core/fix-once/colors.js.map +1 -0
- package/dist/src/faf-core/fix-once/types.d.ts +257 -0
- package/dist/src/faf-core/fix-once/types.js +26 -0
- package/dist/src/faf-core/fix-once/types.js.map +1 -0
- package/dist/src/faf-core/fix-once/yaml.d.ts +57 -0
- package/dist/src/faf-core/fix-once/yaml.js +172 -0
- package/dist/src/faf-core/fix-once/yaml.js.map +1 -0
- package/dist/src/faf-core/generators/faf-generator-championship.d.ts +16 -0
- package/dist/src/faf-core/generators/faf-generator-championship.js +462 -0
- package/dist/src/faf-core/generators/faf-generator-championship.js.map +1 -0
- package/dist/src/faf-core/utils/balance-visualizer.d.ts +37 -0
- package/dist/src/faf-core/utils/balance-visualizer.js +197 -0
- package/dist/src/faf-core/utils/balance-visualizer.js.map +1 -0
- package/dist/src/faf-core/utils/championship-style.d.ts +109 -0
- package/dist/src/faf-core/utils/championship-style.js +219 -0
- package/dist/src/faf-core/utils/championship-style.js.map +1 -0
- package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +73 -0
- package/dist/src/faf-core/utils/chrome-extension-detector.js +268 -0
- package/dist/src/faf-core/utils/chrome-extension-detector.js.map +1 -0
- package/dist/src/faf-core/utils/fafignore-parser.d.ts +20 -0
- package/dist/src/faf-core/utils/fafignore-parser.js +178 -0
- package/dist/src/faf-core/utils/fafignore-parser.js.map +1 -0
- package/dist/src/faf-core/utils/file-utils.d.ts +112 -0
- package/dist/src/faf-core/utils/file-utils.js +846 -0
- package/dist/src/faf-core/utils/file-utils.js.map +1 -0
- package/dist/src/faf-core/utils/native-file-finder.d.ts +115 -0
- package/dist/src/faf-core/utils/native-file-finder.js +211 -0
- package/dist/src/faf-core/utils/native-file-finder.js.map +1 -0
- package/dist/src/faf-core/utils/platform-detector.d.ts +30 -0
- package/dist/src/faf-core/utils/platform-detector.js +218 -0
- package/dist/src/faf-core/utils/platform-detector.js.map +1 -0
- package/dist/src/faf-core/utils/technical-credit.d.ts +35 -0
- package/dist/src/faf-core/utils/technical-credit.js +286 -0
- package/dist/src/faf-core/utils/technical-credit.js.map +1 -0
- package/dist/src/faf-core/utils/yaml-generator.d.ts +41 -0
- package/dist/src/faf-core/utils/yaml-generator.js +360 -0
- package/dist/src/faf-core/utils/yaml-generator.js.map +1 -0
- package/dist/src/handlers/behavioral-instruction.d.ts +16 -0
- package/dist/src/handlers/behavioral-instruction.js +43 -0
- package/dist/src/handlers/behavioral-instruction.js.map +1 -0
- package/dist/src/handlers/championship-tools.d.ts +113 -0
- package/dist/src/handlers/championship-tools.js +2602 -0
- package/dist/src/handlers/championship-tools.js.map +1 -0
- package/dist/src/handlers/engine-adapter.d.ts +28 -0
- package/dist/src/handlers/engine-adapter.js +603 -0
- package/dist/src/handlers/engine-adapter.js.map +1 -0
- package/dist/src/handlers/fileHandler.d.ts +36 -0
- package/dist/src/handlers/fileHandler.js +246 -0
- package/dist/src/handlers/fileHandler.js.map +1 -0
- package/dist/src/handlers/resources.d.ts +18 -0
- package/dist/src/handlers/resources.js +78 -0
- package/dist/src/handlers/resources.js.map +1 -0
- package/dist/src/handlers/tool-registry.d.ts +23 -0
- package/dist/src/handlers/tool-registry.js +68 -0
- package/dist/src/handlers/tool-registry.js.map +1 -0
- package/dist/src/handlers/tool-types.d.ts +167 -0
- package/dist/src/handlers/tool-types.js +7 -0
- package/dist/src/handlers/tool-types.js.map +1 -0
- package/dist/src/handlers/tools.d.ts +25 -0
- package/dist/src/handlers/tools.js +1168 -0
- package/dist/src/handlers/tools.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +28 -0
- package/dist/src/server.js +179 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/test-all-functions.d.ts +15 -0
- package/dist/src/test-all-functions.js +163 -0
- package/dist/src/test-all-functions.js.map +1 -0
- package/dist/src/types/mcp-tools.d.ts +53 -0
- package/dist/src/types/mcp-tools.js +77 -0
- package/dist/src/types/mcp-tools.js.map +1 -0
- package/dist/src/types/project-types.d.ts +22 -0
- package/dist/src/types/project-types.js +85 -0
- package/dist/src/types/project-types.js.map +1 -0
- package/dist/src/types/slots.d.ts +39 -0
- package/dist/src/types/slots.js +162 -0
- package/dist/src/types/slots.js.map +1 -0
- package/dist/src/types/tool-visibility.d.ts +36 -0
- package/dist/src/types/tool-visibility.js +510 -0
- package/dist/src/types/tool-visibility.js.map +1 -0
- package/dist/src/utils/auto-path-detection.d.ts +26 -0
- package/dist/src/utils/auto-path-detection.js +198 -0
- package/dist/src/utils/auto-path-detection.js.map +1 -0
- package/dist/src/utils/championship-format.d.ts +30 -0
- package/dist/src/utils/championship-format.js +79 -0
- package/dist/src/utils/championship-format.js.map +1 -0
- package/dist/src/utils/cli-detector.d.ts +20 -0
- package/dist/src/utils/cli-detector.js +230 -0
- package/dist/src/utils/cli-detector.js.map +1 -0
- package/dist/src/utils/display-protocol.d.ts +57 -0
- package/dist/src/utils/display-protocol.js +131 -0
- package/dist/src/utils/display-protocol.js.map +1 -0
- package/dist/src/utils/faf-file-finder.d.ts +59 -0
- package/dist/src/utils/faf-file-finder.js +139 -0
- package/dist/src/utils/faf-file-finder.js.map +1 -0
- package/dist/src/utils/fuzzy-detector.d.ts +56 -0
- package/dist/src/utils/fuzzy-detector.js +221 -0
- package/dist/src/utils/fuzzy-detector.js.map +1 -0
- package/dist/src/utils/path-resolver.d.ts +51 -0
- package/dist/src/utils/path-resolver.js +214 -0
- package/dist/src/utils/path-resolver.js.map +1 -0
- package/dist/src/utils/type-guards.d.ts +9 -0
- package/dist/src/utils/type-guards.js +27 -0
- package/dist/src/utils/type-guards.js.map +1 -0
- package/dist/src/utils/username-detector.d.ts +27 -0
- package/dist/src/utils/username-detector.js +90 -0
- package/dist/src/utils/username-detector.js.map +1 -0
- package/dist/src/utils/visual-style.d.ts +62 -0
- package/dist/src/utils/visual-style.js +164 -0
- package/dist/src/utils/visual-style.js.map +1 -0
- package/dist/src/version.d.ts +9 -0
- package/dist/src/version.js +37 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +114 -0
- package/scripts/discord-sync-curated.js +233 -0
- package/scripts/discord-sync-final.js +218 -0
- package/scripts/discord-sync-simple.js +175 -0
- package/scripts/discord-sync-working.js +187 -0
- package/scripts/discord-sync.js +181 -0
- package/scripts/postinstall.js +46 -0
- package/skill/SKILL.md +385 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to faf-mcp will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2025-11-12
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Universal MCP Package** - Platform-agnostic MCP server for all MCP-compatible platforms
|
|
12
|
+
- Works with Claude Desktop, Cursor, Windsurf, VS Code, and any MCP client
|
|
13
|
+
- 50 MCP tools for FAF context management
|
|
14
|
+
- Auto-installs faf-cli as dependency
|
|
15
|
+
- Orange smiley icon included in package
|
|
16
|
+
- **Platform-Specific Documentation** - Setup guides for each major platform
|
|
17
|
+
- Claude Desktop config instructions
|
|
18
|
+
- Cursor IDE integration steps
|
|
19
|
+
- Windsurf Editor setup
|
|
20
|
+
- VS Code MCP extension guide
|
|
21
|
+
|
|
22
|
+
### Technical
|
|
23
|
+
- Based on claude-faf-mcp v3.3.0 codebase
|
|
24
|
+
- 100% standalone operation (bundled FAF engine)
|
|
25
|
+
- 16.2x faster than CLI versions
|
|
26
|
+
- 19ms average execution time
|
|
27
|
+
- Zero external dependencies
|
|
28
|
+
|
|
29
|
+
### Ecosystem
|
|
30
|
+
This is the universal package for FAF MCP integration. Platform-specific packages (cursor-faf-mcp, windsurf-faf-mcp, etc.) may follow based on demand.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
*For claude-faf-mcp changelog history, see: https://github.com/Wolfe-Jam/claude-faf-mcp/blob/main/CHANGELOG.md*
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# 🏎️ CLAUDE.md - faf-mcp Persistent Context
|
|
2
|
+
|
|
3
|
+
## PROJECT STATE: ACTIVE 🚀
|
|
4
|
+
**Current Position:** Universal MCP server for all platforms
|
|
5
|
+
**Tyre Compound:** ULTRASOFT C5 (Maximum Performance)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🎨 CORE CONTEXT
|
|
10
|
+
|
|
11
|
+
### Project Identity
|
|
12
|
+
- **Name:** faf-mcp
|
|
13
|
+
- **Stack:** Node.js/TypeScript
|
|
14
|
+
- **Quality:** F1-INSPIRED (Championship Performance)
|
|
15
|
+
|
|
16
|
+
### Our Mission - Universal MCP Integration
|
|
17
|
+
|
|
18
|
+
**v1.0.0 Launch: PLATFORM-AGNOSTIC**
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
faf-mcp: UNIVERSAL MCP SERVER
|
|
22
|
+
├── Claude Desktop support
|
|
23
|
+
├── Cursor IDE support
|
|
24
|
+
├── Windsurf Editor support
|
|
25
|
+
├── VS Code support
|
|
26
|
+
└── Any MCP-compatible platform
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**CRITICAL: faf-mcp IS THE UNIVERSAL PACKAGE**
|
|
30
|
+
- ✅ Works with ALL MCP platforms
|
|
31
|
+
- ✅ 100% standalone (bundled FAF engine)
|
|
32
|
+
- ✅ Based on proven claude-faf-mcp codebase
|
|
33
|
+
- ✅ Championship-grade performance
|
|
34
|
+
- ✅ Orange smiley icon everywhere
|
|
35
|
+
|
|
36
|
+
**The .faf Position in MCP:**
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Platform Context Protocol
|
|
40
|
+
──────── ─────── ────────
|
|
41
|
+
Claude → .faf → MCP
|
|
42
|
+
Cursor → .faf → MCP
|
|
43
|
+
Windsurf → .faf → MCP
|
|
44
|
+
Any IDE → IANA Format → Open Protocol
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
.FAF provides the standardized Context that makes the Model Context Protocol work for everyone.
|
|
48
|
+
|
|
49
|
+
### Technical Architecture
|
|
50
|
+
- **What Building:** Universal FAF MCP Server - AI Context Intelligence for All Platforms
|
|
51
|
+
- **Main Language:** TypeScript
|
|
52
|
+
|
|
53
|
+
### 📊 Context Quality Status
|
|
54
|
+
- **Overall Assessment:** New (forked from claude-faf-mcp v3.3.0)
|
|
55
|
+
- **Last Updated:** 2025-11-12
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 🎯 Strategic Position
|
|
60
|
+
|
|
61
|
+
**Ecosystem Strategy:**
|
|
62
|
+
- `faf-mcp` - Universal package (primary)
|
|
63
|
+
- `claude-faf-mcp` - Maintained (established metrics)
|
|
64
|
+
- Future: Platform-specific versions based on demand (cursor-faf-mcp, windsurf-faf-mcp, etc.)
|
|
65
|
+
|
|
66
|
+
**Traffic Strategy:**
|
|
67
|
+
- Capture searches across ALL MCP platforms
|
|
68
|
+
- Keywords: mcp, cursor, windsurf, claude, gemini, vscode
|
|
69
|
+
- Aggregate download metrics from universal package
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
**Built with F1-inspired engineering principles** 🏎️⚡
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 wolfejam (team@faf.one) 🏎️⚡ wolfejam.dev
|
|
4
|
+
PODIUM EDITION 🍊
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<div style="display: flex; align-items: center; gap: 12px;">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/Wolfe-Jam/faf/main/assets/logos/orange-smiley.svg" alt="FAF" width="40" />
|
|
3
|
+
<div>
|
|
4
|
+
<h1 style="margin: 0; color: #FF8C00;">faf-mcp</h1>
|
|
5
|
+
<p style="margin: 4px 0 0 0;"><strong>IANA-Registered Format for AI Context</strong> · <code>application/vnd.faf+yaml</code></p>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
> Universal MCP server for .FAF (Foundational AI-context Format) with 50 tools - Works with Claude Desktop, Cursor, Windsurf, and all MCP-compatible platforms
|
|
10
|
+
|
|
11
|
+
[](https://www.npmjs.com/package/faf-mcp)
|
|
12
|
+
[](https://discord.com/invite/3pjzpKsP)
|
|
13
|
+
[](https://chromewebstore.google.com/detail/lnecebepmpjpilldfmndnaofbfjkjlkm)
|
|
14
|
+
[](https://faf.one)
|
|
15
|
+
[](https://opensource.org/licenses/MIT)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 🏁 AI-Readiness Scorecard
|
|
20
|
+
|
|
21
|
+
**The closer you get to 100% the better AI can assist you.**
|
|
22
|
+
|
|
23
|
+
At 55% you are building your project with half a blueprint and basically flipping a coin with AI. .FAF defines, and AI becomes optimized for Context with the project.faf file.
|
|
24
|
+
|
|
25
|
+
<div align="center">
|
|
26
|
+
<img src="./assets/Project-faf-pckg-json-README.png" alt="project.faf file positioning" width="600" />
|
|
27
|
+
<p><em>project.faf lives at the project root, between package.json and README.md</em></p>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
32
|
+
🏎️ FAF AI-READINESS SCORE: 100/100 — PODIUM EDITION
|
|
33
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
34
|
+
|
|
35
|
+
📊 CORE INTELLIGENCE 🎯 CONTEXT DELIVERY
|
|
36
|
+
├─ Project DNA [██████] 100% ├─ MCP Protocol [██████] 100%
|
|
37
|
+
├─ Architecture Map [██████] 100% ├─ 50 Native Tools [██████] 100%
|
|
38
|
+
├─ Domain Model [██████] 100% ├─ IANA Format [██████] 100%
|
|
39
|
+
└─ Version Tracking [██████] 100% └─ Universal Context [██████] 100%
|
|
40
|
+
|
|
41
|
+
🚀 PERFORMANCE ⚡ STANDALONE OPERATION
|
|
42
|
+
├─ 16.2x CLI Speedup [██████] 100% ├─ Zero Dependencies [██████] 100%
|
|
43
|
+
├─ 19ms Avg Execution [██████] 100% ├─ Bundled Engine [██████] 100%
|
|
44
|
+
├─ 50/50 Tools Active [██████] 100% ├─ Direct Function [██████] 100%
|
|
45
|
+
└─ Zero Memory Leaks [██████] 100% └─ 14 Bundled Cmds [██████] 100%
|
|
46
|
+
|
|
47
|
+
🏆 project.faf score: podium
|
|
48
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## ⚡ Quick Start
|
|
54
|
+
|
|
55
|
+
**Copy and paste this to Claude/your AI:**
|
|
56
|
+
|
|
57
|
+
> Install the FAF MCP server: `npm install -g faf-mcp`, then add this to my MCP config: `{"mcpServers": {"faf": {"command": "npx", "args": ["-y", "faf-mcp"]}}}` and restart.
|
|
58
|
+
|
|
59
|
+
### Platform-Specific Setup
|
|
60
|
+
|
|
61
|
+
**Claude Desktop:** Add to `claude_desktop_config.json` ([location guide](https://wolfe-jam.github.io/claude-faf-mcp/))
|
|
62
|
+
|
|
63
|
+
**Cursor IDE:** Add to `~/.cursor/mcp.json` ([setup guide](https://docs.cursor.com/context/model-context-protocol))
|
|
64
|
+
|
|
65
|
+
**Windsurf Editor:** Add to `~/.codeium/windsurf/mcp_config.json` ([Cascade docs](https://docs.windsurf.com/windsurf/cascade/mcp))
|
|
66
|
+
|
|
67
|
+
**VS Code:** Install MCP extension, then add server config
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 🎯 Want a Platform-Specific Package?
|
|
72
|
+
|
|
73
|
+
We're launching `faf-mcp` as the universal package. If you'd prefer a dedicated package for your platform (like `cursor-faf-mcp` or `windsurf-faf-mcp` with tailored setup instructions), **[request it here](https://github.com/Wolfe-Jam/faf-mcp/issues)**.
|
|
74
|
+
|
|
75
|
+
We'll publish platform-specific packages based on demand.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 🎯 What is FAF?
|
|
80
|
+
|
|
81
|
+
**The .FAF Position in the MCP Ecosystem:**
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
Platform Context Protocol
|
|
85
|
+
──────── ─────── ────────
|
|
86
|
+
Claude → .faf → MCP
|
|
87
|
+
Cursor → .faf → MCP
|
|
88
|
+
Windsurf → .faf → MCP
|
|
89
|
+
VS Code → .faf → MCP
|
|
90
|
+
Any IDE → IANA Format → Open Protocol
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**.FAF is the foundational, universal base layer** for any platform using the Model Context Protocol. It provides the standardized Context that makes MCP work for everyone.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 🛠️ Core Features
|
|
98
|
+
|
|
99
|
+
### 50 MCP Tools (100% Standalone)
|
|
100
|
+
- **faf_quick** - Lightning-fast project.faf creation (3ms avg)
|
|
101
|
+
- **faf_enhance** - Intelligent enhancement with auto-detection
|
|
102
|
+
- **faf_read** - Parse and validate FAF files
|
|
103
|
+
- **faf_write** - Create/update FAF with validation
|
|
104
|
+
- **faf_score** - AI-readiness scoring engine
|
|
105
|
+
- **faf_compress** - Intelligent size optimization
|
|
106
|
+
- **14 bundled commands** - Zero CLI dependencies, 16.2x faster
|
|
107
|
+
|
|
108
|
+
### IANA-Registered Standard
|
|
109
|
+
- Official MIME type: `application/vnd.faf+yaml`
|
|
110
|
+
- W3C-compliant structured format
|
|
111
|
+
- Universal AI context protocol
|
|
112
|
+
- Cross-platform compatibility
|
|
113
|
+
|
|
114
|
+
### Championship Performance
|
|
115
|
+
- **16.2x faster** than CLI versions (direct function calls vs process spawning)
|
|
116
|
+
- **19ms average** execution across all bundled commands
|
|
117
|
+
- **Fastest: 1ms** (formats command)
|
|
118
|
+
- **Zero memory leaks** with F1-grade engineering
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 📚 Documentation
|
|
123
|
+
|
|
124
|
+
- **[Full Documentation](https://wolfe-jam.github.io/claude-faf-mcp/)** - Complete guide
|
|
125
|
+
- **[Getting Started](https://github.com/Wolfe-Jam/claude-faf-mcp/blob/main/docs/getting-started.md)** - Installation & setup
|
|
126
|
+
- **[MCP Tools Reference](https://github.com/Wolfe-Jam/claude-faf-mcp/blob/main/docs/mcp-tools.md)** - All 50 tools
|
|
127
|
+
- **[FAQ](https://github.com/Wolfe-Jam/claude-faf-mcp/blob/main/docs/FAQ.md)** - Common questions
|
|
128
|
+
- **[CHANGELOG](./CHANGELOG.md)** - Version history
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 🏆 Why FAF?
|
|
133
|
+
|
|
134
|
+
> "README for the AI era" — Gemini CLI
|
|
135
|
+
|
|
136
|
+
**Persistent Context** - Your project's DNA lives in `project.faf`, readable by any AI or human
|
|
137
|
+
|
|
138
|
+
**Universal Format** - IANA-registered standard works across Claude, Gemini, Cursor, Windsurf, any MCP platform
|
|
139
|
+
|
|
140
|
+
**Zero Setup Tax** - One file (`project.faf`) eliminates AI context setup across your entire team
|
|
141
|
+
|
|
142
|
+
**Championship Engineering** - F1-inspired performance with strict TypeScript, zero runtime errors
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 📦 Ecosystem
|
|
147
|
+
|
|
148
|
+
- **[FAF Format Spec](https://github.com/Wolfe-Jam/faf)** - Official IANA specification
|
|
149
|
+
- **[FAF CLI](https://github.com/Wolfe-Jam/faf-cli)** - Command-line tooling
|
|
150
|
+
- **[claude-faf-mcp](https://github.com/Wolfe-Jam/claude-faf-mcp)** - Claude Desktop-specific package
|
|
151
|
+
- **[Chrome Extension](https://chromewebstore.google.com/detail/lnecebepmpjpilldfmndnaofbfjkjlkm)** - Browser integration
|
|
152
|
+
- **[faf.one](https://faf.one)** - Official website and documentation
|
|
153
|
+
- **[Discord Community](https://discord.com/invite/3pjzpKsP)** - Join the discussion
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 📄 License
|
|
158
|
+
|
|
159
|
+
MIT License - Free and open source
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
**Built with F1-inspired engineering principles** 🏎️⚡
|
|
164
|
+
|
|
165
|
+
*"It's so logical if it didn't exist, AI would have built it itself" — Claude*
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<circle cx="50" cy="50" r="40" fill="#FF6B35" />
|
|
3
|
+
<circle cx="35" cy="40" r="5" fill="black" />
|
|
4
|
+
<circle cx="65" cy="40" r="5" fill="black" />
|
|
5
|
+
<path d="M 30 60 Q 50 70 70 60" stroke="black" stroke-width="3" fill="none" />
|
|
6
|
+
</svg>
|
|
@@ -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
|
+
}
|