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,603 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FafEngineAdapter = void 0;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const util_1 = require("util");
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const type_guards_js_1 = require("../utils/type-guards.js"); // ✅ FIXED: Removed unused isDefined
|
|
42
|
+
const cli_detector_js_1 = require("../utils/cli-detector.js");
|
|
43
|
+
const score_js_1 = require("../faf-core/commands/score.js");
|
|
44
|
+
const init_js_1 = require("../faf-core/commands/init.js");
|
|
45
|
+
const auto_js_1 = require("../faf-core/commands/auto.js");
|
|
46
|
+
const sync_js_1 = require("../faf-core/commands/sync.js");
|
|
47
|
+
const bi_sync_js_1 = require("../faf-core/commands/bi-sync.js");
|
|
48
|
+
const formats_js_1 = require("../faf-core/commands/formats.js");
|
|
49
|
+
const doctor_js_1 = require("../faf-core/commands/doctor.js");
|
|
50
|
+
const validate_js_1 = require("../faf-core/commands/validate.js");
|
|
51
|
+
const audit_js_1 = require("../faf-core/commands/audit.js");
|
|
52
|
+
const update_js_1 = require("../faf-core/commands/update.js");
|
|
53
|
+
const migrate_js_1 = require("../faf-core/commands/migrate.js");
|
|
54
|
+
const innit_js_1 = require("../faf-core/commands/innit.js");
|
|
55
|
+
const quick_js_1 = require("../faf-core/commands/quick.js");
|
|
56
|
+
const enhance_js_1 = require("../faf-core/commands/enhance.js");
|
|
57
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
58
|
+
// Enhanced PATH for FAF CLI discovery
|
|
59
|
+
const getEnhancedEnv = () => ({
|
|
60
|
+
...process.env,
|
|
61
|
+
PATH: [
|
|
62
|
+
'/usr/local/bin',
|
|
63
|
+
'/opt/homebrew/bin',
|
|
64
|
+
process.env.HOME ? `${process.env.HOME}/.npm/bin` : undefined,
|
|
65
|
+
process.env.HOME ? `${process.env.HOME}/.npm-global/bin` : undefined,
|
|
66
|
+
'/usr/bin',
|
|
67
|
+
'/bin',
|
|
68
|
+
process.env.PATH
|
|
69
|
+
].filter(Boolean).join(':')
|
|
70
|
+
});
|
|
71
|
+
class FafEngineAdapter {
|
|
72
|
+
enginePath;
|
|
73
|
+
detectedCliPath = null;
|
|
74
|
+
cliVersion;
|
|
75
|
+
timeout;
|
|
76
|
+
workingDirectory;
|
|
77
|
+
constructor(enginePath = 'faf', timeout = 30000) {
|
|
78
|
+
this.enginePath = enginePath;
|
|
79
|
+
this.timeout = timeout;
|
|
80
|
+
this.workingDirectory = this.findBestWorkingDirectory();
|
|
81
|
+
// Auto-detect CLI on initialization
|
|
82
|
+
this.detectCli();
|
|
83
|
+
}
|
|
84
|
+
detectCli() {
|
|
85
|
+
const detection = (0, cli_detector_js_1.detectFafCli)();
|
|
86
|
+
if (detection.found && detection.path) {
|
|
87
|
+
this.detectedCliPath = detection.path;
|
|
88
|
+
this.cliVersion = detection.version;
|
|
89
|
+
// Validate version meets minimum requirement
|
|
90
|
+
if (this.cliVersion && !(0, cli_detector_js_1.validateCliVersion)(this.cliVersion, '3.1.1')) {
|
|
91
|
+
console.warn(`FAF CLI version ${this.cliVersion} is below minimum required version 3.1.1. Some features may not work correctly.`);
|
|
92
|
+
}
|
|
93
|
+
console.error(`✅ FAF CLI detected: ${this.detectedCliPath} (v${this.cliVersion || 'unknown'}) via ${detection.method}`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
97
|
+
console.error('⚠️ FAF CLI NOT DETECTED');
|
|
98
|
+
console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
99
|
+
console.error('');
|
|
100
|
+
console.error('INSTALLATION ORDER REQUIRED:');
|
|
101
|
+
console.error(' 1️⃣ npm install -g faf-cli (REQUIRED FIRST)');
|
|
102
|
+
console.error(' 2️⃣ npm install -g claude-faf-mcp (THEN THIS)');
|
|
103
|
+
console.error('');
|
|
104
|
+
console.error('Most MCP tools require faf-cli to be installed.');
|
|
105
|
+
console.error('Only basic file operations will work without it.');
|
|
106
|
+
console.error('');
|
|
107
|
+
console.error('After installing faf-cli, restart Claude Desktop.');
|
|
108
|
+
console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
findBestWorkingDirectory() {
|
|
112
|
+
// Priority 1: Environment variable for explicit control
|
|
113
|
+
const fafWorkingDir = process.env.FAF_WORKING_DIR;
|
|
114
|
+
if (fafWorkingDir && fs.existsSync(fafWorkingDir)) {
|
|
115
|
+
return fafWorkingDir;
|
|
116
|
+
}
|
|
117
|
+
// Priority 2: MCP might pass a working directory hint
|
|
118
|
+
const mcpWorkingDir = process.env.MCP_WORKING_DIR;
|
|
119
|
+
if (mcpWorkingDir && fs.existsSync(mcpWorkingDir)) {
|
|
120
|
+
return mcpWorkingDir;
|
|
121
|
+
}
|
|
122
|
+
// Priority 3: FORCE ~/Projects as universal default
|
|
123
|
+
const homeDir = process.env.HOME ?? process.env.USERPROFILE;
|
|
124
|
+
if (homeDir) {
|
|
125
|
+
// Try capitalized Projects first (macOS/Windows convention)
|
|
126
|
+
const projectsDir = path.join(homeDir, 'Projects');
|
|
127
|
+
if (fs.existsSync(projectsDir)) {
|
|
128
|
+
return projectsDir;
|
|
129
|
+
}
|
|
130
|
+
// Create ~/Projects if it doesn't exist
|
|
131
|
+
try {
|
|
132
|
+
fs.mkdirSync(projectsDir, { recursive: true });
|
|
133
|
+
return projectsDir;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// If we can't create Projects, try lowercase
|
|
137
|
+
const projectsLower = path.join(homeDir, 'projects');
|
|
138
|
+
if (fs.existsSync(projectsLower)) {
|
|
139
|
+
return projectsLower;
|
|
140
|
+
}
|
|
141
|
+
// Fall back to home
|
|
142
|
+
return homeDir;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Priority 4: Current directory if not root
|
|
146
|
+
const currentDir = process.cwd();
|
|
147
|
+
if (currentDir !== '/' && currentDir !== '/root' && fs.existsSync(currentDir)) {
|
|
148
|
+
return currentDir;
|
|
149
|
+
}
|
|
150
|
+
// Last resort: /tmp (should rarely happen)
|
|
151
|
+
return '/tmp';
|
|
152
|
+
}
|
|
153
|
+
async callEngine(command, args = []) {
|
|
154
|
+
const startTime = Date.now();
|
|
155
|
+
// Input validation
|
|
156
|
+
if (!command || typeof command !== 'string') {
|
|
157
|
+
return {
|
|
158
|
+
success: false,
|
|
159
|
+
error: 'Command must be a non-empty string',
|
|
160
|
+
duration: 0
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// ============================================================================
|
|
164
|
+
// MK3 BUNDLED ENGINE - Direct function calls (no CLI dependency!)
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// SCORE command - use bundled FafCompiler
|
|
167
|
+
if (command === 'score') {
|
|
168
|
+
try {
|
|
169
|
+
const filePath = args[0] || this.workingDirectory;
|
|
170
|
+
const result = await (0, score_js_1.scoreFafFile)(filePath, { json: true });
|
|
171
|
+
const duration = Date.now() - startTime;
|
|
172
|
+
return {
|
|
173
|
+
success: true,
|
|
174
|
+
data: result,
|
|
175
|
+
duration
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
const duration = Date.now() - startTime;
|
|
180
|
+
const errorMessage = (0, type_guards_js_1.isError)(error) ? error.message : 'Score command failed';
|
|
181
|
+
return {
|
|
182
|
+
success: false,
|
|
183
|
+
error: errorMessage,
|
|
184
|
+
duration
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// INIT command - use bundled init
|
|
189
|
+
if (command === 'init') {
|
|
190
|
+
try {
|
|
191
|
+
// Filter out flags to get the actual path argument
|
|
192
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
193
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
194
|
+
const force = args.includes('--force');
|
|
195
|
+
const result = await (0, init_js_1.initFafFile)(projectPath, { force });
|
|
196
|
+
const duration = Date.now() - startTime;
|
|
197
|
+
return {
|
|
198
|
+
success: result.success,
|
|
199
|
+
data: result,
|
|
200
|
+
duration
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
const duration = Date.now() - startTime;
|
|
205
|
+
const errorMessage = (0, type_guards_js_1.isError)(error) ? error.message : 'Init command failed';
|
|
206
|
+
return {
|
|
207
|
+
success: false,
|
|
208
|
+
error: errorMessage,
|
|
209
|
+
duration
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// AUTO command - use bundled auto (init + score)
|
|
214
|
+
if (command === 'auto') {
|
|
215
|
+
try {
|
|
216
|
+
// Filter out flags to get the actual path argument
|
|
217
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
218
|
+
const directory = pathArgs[0] || this.workingDirectory;
|
|
219
|
+
const force = args.includes('--force');
|
|
220
|
+
const result = await (0, auto_js_1.autoCommand)(directory, { force });
|
|
221
|
+
const duration = Date.now() - startTime;
|
|
222
|
+
return {
|
|
223
|
+
success: result.success,
|
|
224
|
+
data: result,
|
|
225
|
+
duration
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
const duration = Date.now() - startTime;
|
|
230
|
+
const errorMessage = (0, type_guards_js_1.isError)(error) ? error.message : 'Auto command failed';
|
|
231
|
+
return {
|
|
232
|
+
success: false,
|
|
233
|
+
error: errorMessage,
|
|
234
|
+
duration
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// SYNC command - use bundled sync
|
|
239
|
+
if (command === 'sync') {
|
|
240
|
+
try {
|
|
241
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
242
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
243
|
+
const auto = args.includes('--auto');
|
|
244
|
+
const result = await (0, sync_js_1.syncFafFile)(projectPath, { auto, json: true });
|
|
245
|
+
const duration = Date.now() - startTime;
|
|
246
|
+
return {
|
|
247
|
+
success: result.success,
|
|
248
|
+
data: result,
|
|
249
|
+
duration
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
const duration = Date.now() - startTime;
|
|
254
|
+
return {
|
|
255
|
+
success: false,
|
|
256
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Sync command failed',
|
|
257
|
+
duration
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// BI-SYNC command - use bundled bi-sync
|
|
262
|
+
if (command === 'bi-sync' || command === 'bisync') {
|
|
263
|
+
try {
|
|
264
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
265
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
266
|
+
const result = await (0, bi_sync_js_1.syncBiDirectional)(projectPath, { json: true });
|
|
267
|
+
const duration = Date.now() - startTime;
|
|
268
|
+
return {
|
|
269
|
+
success: result.success,
|
|
270
|
+
data: result,
|
|
271
|
+
duration
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
const duration = Date.now() - startTime;
|
|
276
|
+
return {
|
|
277
|
+
success: false,
|
|
278
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Bi-sync command failed',
|
|
279
|
+
duration
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// FORMATS command - use bundled formats
|
|
284
|
+
if (command === 'formats') {
|
|
285
|
+
try {
|
|
286
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
287
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
288
|
+
const result = await (0, formats_js_1.formatsCommand)(projectPath, { json: true });
|
|
289
|
+
const duration = Date.now() - startTime;
|
|
290
|
+
return {
|
|
291
|
+
success: result.success,
|
|
292
|
+
data: result,
|
|
293
|
+
duration
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
const duration = Date.now() - startTime;
|
|
298
|
+
return {
|
|
299
|
+
success: false,
|
|
300
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Formats command failed',
|
|
301
|
+
duration
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// DOCTOR command - use bundled doctor
|
|
306
|
+
if (command === 'doctor') {
|
|
307
|
+
try {
|
|
308
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
309
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
310
|
+
const result = await (0, doctor_js_1.doctorCommand)(projectPath);
|
|
311
|
+
const duration = Date.now() - startTime;
|
|
312
|
+
return {
|
|
313
|
+
success: result.success,
|
|
314
|
+
data: result,
|
|
315
|
+
duration
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
const duration = Date.now() - startTime;
|
|
320
|
+
return {
|
|
321
|
+
success: false,
|
|
322
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Doctor command failed',
|
|
323
|
+
duration
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// VALIDATE command - use bundled validate
|
|
328
|
+
if (command === 'validate') {
|
|
329
|
+
try {
|
|
330
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
331
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
332
|
+
const result = await (0, validate_js_1.validateFafFile)(projectPath, { json: true });
|
|
333
|
+
const duration = Date.now() - startTime;
|
|
334
|
+
return {
|
|
335
|
+
success: result.success,
|
|
336
|
+
data: result,
|
|
337
|
+
duration
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
const duration = Date.now() - startTime;
|
|
342
|
+
return {
|
|
343
|
+
success: false,
|
|
344
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Validate command failed',
|
|
345
|
+
duration
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// AUDIT command - use bundled audit
|
|
350
|
+
if (command === 'audit') {
|
|
351
|
+
try {
|
|
352
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
353
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
354
|
+
const result = await (0, audit_js_1.auditFafFile)(projectPath, { json: true });
|
|
355
|
+
const duration = Date.now() - startTime;
|
|
356
|
+
return {
|
|
357
|
+
success: result.success,
|
|
358
|
+
data: result,
|
|
359
|
+
duration
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
const duration = Date.now() - startTime;
|
|
364
|
+
return {
|
|
365
|
+
success: false,
|
|
366
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Audit command failed',
|
|
367
|
+
duration
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// UPDATE command - use bundled update
|
|
372
|
+
if (command === 'update') {
|
|
373
|
+
try {
|
|
374
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
375
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
376
|
+
const result = await (0, update_js_1.updateFafFile)(projectPath, { json: true });
|
|
377
|
+
const duration = Date.now() - startTime;
|
|
378
|
+
return {
|
|
379
|
+
success: result.success,
|
|
380
|
+
data: result,
|
|
381
|
+
duration
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
catch (error) {
|
|
385
|
+
const duration = Date.now() - startTime;
|
|
386
|
+
return {
|
|
387
|
+
success: false,
|
|
388
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Update command failed',
|
|
389
|
+
duration
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// MIGRATE command - use bundled migrate
|
|
394
|
+
if (command === 'migrate') {
|
|
395
|
+
try {
|
|
396
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
397
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
398
|
+
const force = args.includes('--force');
|
|
399
|
+
const result = await (0, migrate_js_1.migrateFafFile)(projectPath, { force, json: true });
|
|
400
|
+
const duration = Date.now() - startTime;
|
|
401
|
+
return {
|
|
402
|
+
success: result.success,
|
|
403
|
+
data: result,
|
|
404
|
+
duration
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
const duration = Date.now() - startTime;
|
|
409
|
+
return {
|
|
410
|
+
success: false,
|
|
411
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Migrate command failed',
|
|
412
|
+
duration
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// INNIT command - use bundled innit (British init)
|
|
417
|
+
if (command === 'innit') {
|
|
418
|
+
try {
|
|
419
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
420
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
421
|
+
const force = args.includes('--force');
|
|
422
|
+
const result = await (0, innit_js_1.innitFafFile)(projectPath, { force });
|
|
423
|
+
const duration = Date.now() - startTime;
|
|
424
|
+
return {
|
|
425
|
+
success: result.success,
|
|
426
|
+
data: result,
|
|
427
|
+
duration
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
catch (error) {
|
|
431
|
+
const duration = Date.now() - startTime;
|
|
432
|
+
return {
|
|
433
|
+
success: false,
|
|
434
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Innit command failed',
|
|
435
|
+
duration
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
// QUICK command - use bundled quick
|
|
440
|
+
if (command === 'quick') {
|
|
441
|
+
try {
|
|
442
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
443
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
444
|
+
const input = pathArgs[1]; // optional input string
|
|
445
|
+
const force = args.includes('--force');
|
|
446
|
+
const json = args.includes('--json');
|
|
447
|
+
const result = await (0, quick_js_1.quickCommand)(projectPath, input, { force, json });
|
|
448
|
+
const duration = Date.now() - startTime;
|
|
449
|
+
return {
|
|
450
|
+
success: result.success,
|
|
451
|
+
data: result,
|
|
452
|
+
duration
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
catch (error) {
|
|
456
|
+
const duration = Date.now() - startTime;
|
|
457
|
+
return {
|
|
458
|
+
success: false,
|
|
459
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Quick command failed',
|
|
460
|
+
duration
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
// ENHANCE command - use bundled enhance
|
|
465
|
+
if (command === 'enhance') {
|
|
466
|
+
try {
|
|
467
|
+
const pathArgs = args.filter(arg => !arg.startsWith('--') && !arg.startsWith('-'));
|
|
468
|
+
const projectPath = pathArgs[0] || this.workingDirectory;
|
|
469
|
+
const autoFill = args.includes('--auto-fill');
|
|
470
|
+
const interactive = args.includes('--interactive');
|
|
471
|
+
const json = args.includes('--json');
|
|
472
|
+
const result = await (0, enhance_js_1.enhanceCommand)(projectPath, { autoFill, interactive, json });
|
|
473
|
+
const duration = Date.now() - startTime;
|
|
474
|
+
return {
|
|
475
|
+
success: result.success,
|
|
476
|
+
data: result,
|
|
477
|
+
duration
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
const duration = Date.now() - startTime;
|
|
482
|
+
return {
|
|
483
|
+
success: false,
|
|
484
|
+
error: (0, type_guards_js_1.isError)(error) ? error.message : 'Enhance command failed',
|
|
485
|
+
duration
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// ============================================================================
|
|
490
|
+
// FALLBACK: Shell out to CLI for commands not yet bundled
|
|
491
|
+
// ============================================================================
|
|
492
|
+
// Check if CLI is available
|
|
493
|
+
if (!this.detectedCliPath) {
|
|
494
|
+
const duration = Date.now() - startTime;
|
|
495
|
+
return {
|
|
496
|
+
success: false,
|
|
497
|
+
error: `FAF CLI not detected. Command '${command}' requires faf-cli.\n\nINSTALLATION ORDER:\n 1️⃣ npm install -g faf-cli\n 2️⃣ npm install -g claude-faf-mcp\n\nAfter installing faf-cli, restart Claude Desktop.`,
|
|
498
|
+
duration
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
// Sanitize arguments to prevent injection
|
|
502
|
+
const sanitizedArgs = args.map(arg => typeof arg === 'string' ? arg.replace(/[;&|`$(){}[\]]/g, '') : '');
|
|
503
|
+
try {
|
|
504
|
+
// Use detected absolute path to CLI
|
|
505
|
+
const fullCommand = `"${this.detectedCliPath}" ${command} ${sanitizedArgs.join(' ')}`;
|
|
506
|
+
const { stdout, stderr } = await execAsync(fullCommand, {
|
|
507
|
+
env: getEnhancedEnv(),
|
|
508
|
+
timeout: this.timeout,
|
|
509
|
+
maxBuffer: 1024 * 1024, // 1MB buffer limit
|
|
510
|
+
cwd: this.workingDirectory
|
|
511
|
+
});
|
|
512
|
+
const duration = Date.now() - startTime;
|
|
513
|
+
if (stderr?.trim()) {
|
|
514
|
+
console.warn(`FAF CLI warning: ${stderr.trim()}`);
|
|
515
|
+
}
|
|
516
|
+
return {
|
|
517
|
+
success: true,
|
|
518
|
+
data: this.parseOutput(stdout),
|
|
519
|
+
duration
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
const duration = Date.now() - startTime;
|
|
524
|
+
let errorMessage = 'Unknown error occurred';
|
|
525
|
+
if ((0, type_guards_js_1.isError)(error)) {
|
|
526
|
+
errorMessage = error.message;
|
|
527
|
+
// Handle specific error codes
|
|
528
|
+
if ('code' in error) {
|
|
529
|
+
if (error.code === 'ETIMEDOUT') {
|
|
530
|
+
errorMessage = `Command timed out after ${this.timeout}ms`;
|
|
531
|
+
}
|
|
532
|
+
else if (error.code === 'ENOENT') {
|
|
533
|
+
errorMessage = `FAF CLI not found at ${this.detectedCliPath}. Please reinstall: npm install -g faf-cli`;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// Handle signal termination
|
|
537
|
+
if ('signal' in error && error.signal === 'SIGTERM') {
|
|
538
|
+
errorMessage = 'Command was terminated';
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
console.error(`FAF CLI error: ${errorMessage}`);
|
|
542
|
+
return {
|
|
543
|
+
success: false,
|
|
544
|
+
error: errorMessage,
|
|
545
|
+
duration
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
parseOutput(output) {
|
|
550
|
+
if (!output || output.trim() === '') {
|
|
551
|
+
return { output: '' };
|
|
552
|
+
}
|
|
553
|
+
try {
|
|
554
|
+
return JSON.parse(output);
|
|
555
|
+
}
|
|
556
|
+
catch {
|
|
557
|
+
return { output: output.trim() };
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
// Method to check if FAF CLI is available
|
|
561
|
+
async checkHealth() {
|
|
562
|
+
try {
|
|
563
|
+
const result = await this.callEngine('--version');
|
|
564
|
+
return result.success;
|
|
565
|
+
}
|
|
566
|
+
catch {
|
|
567
|
+
return false;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
// Get the current working directory used by the adapter
|
|
571
|
+
getWorkingDirectory() {
|
|
572
|
+
return this.workingDirectory;
|
|
573
|
+
}
|
|
574
|
+
setWorkingDirectory(dir) {
|
|
575
|
+
if (fs.existsSync(dir)) {
|
|
576
|
+
this.workingDirectory = dir;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
// Auto-detect from file path (when file operations occur)
|
|
580
|
+
updateWorkingDirectoryFromPath(filePath) {
|
|
581
|
+
const dir = path.dirname(filePath);
|
|
582
|
+
if (dir && dir !== '/' && fs.existsSync(dir)) {
|
|
583
|
+
// Only update if it's a real project directory
|
|
584
|
+
if (dir.includes('Users') || dir.includes('home') || dir.includes('projects')) {
|
|
585
|
+
this.workingDirectory = dir;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
// Get the engine path being used
|
|
590
|
+
getEnginePath() {
|
|
591
|
+
return this.enginePath;
|
|
592
|
+
}
|
|
593
|
+
// Get CLI detection info for debugging
|
|
594
|
+
getCliInfo() {
|
|
595
|
+
return {
|
|
596
|
+
detected: this.detectedCliPath !== null,
|
|
597
|
+
path: this.detectedCliPath || undefined,
|
|
598
|
+
version: this.cliVersion
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
exports.FafEngineAdapter = FafEngineAdapter;
|
|
603
|
+
//# sourceMappingURL=engine-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-adapter.js","sourceRoot":"","sources":["../../../src/handlers/engine-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Security validator for file paths
|
|
4
|
+
*/
|
|
5
|
+
export declare class PathValidator {
|
|
6
|
+
private static readonly FORBIDDEN_PATHS;
|
|
7
|
+
private static readonly MAX_FILE_SIZE;
|
|
8
|
+
static validate(filePath: string): {
|
|
9
|
+
valid: boolean;
|
|
10
|
+
error?: string;
|
|
11
|
+
};
|
|
12
|
+
static checkFileSize(filePath: string): Promise<{
|
|
13
|
+
valid: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* FAF Read Tool Definition
|
|
19
|
+
*/
|
|
20
|
+
export declare const fafReadTool: Tool;
|
|
21
|
+
/**
|
|
22
|
+
* FAF Write Tool Definition
|
|
23
|
+
*/
|
|
24
|
+
export declare const fafWriteTool: Tool;
|
|
25
|
+
/**
|
|
26
|
+
* Handle faf_read tool execution
|
|
27
|
+
*/
|
|
28
|
+
export declare function handleFafRead(args: any): Promise<CallToolResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Handle faf_write tool execution
|
|
31
|
+
*/
|
|
32
|
+
export declare function handleFafWrite(args: any): Promise<CallToolResult>;
|
|
33
|
+
export declare const fileHandlers: {
|
|
34
|
+
faf_read: typeof handleFafRead;
|
|
35
|
+
faf_write: typeof handleFafWrite;
|
|
36
|
+
};
|