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
|
@@ -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":"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"}
|
|
@@ -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>;
|