faf-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/CLAUDE.md +73 -0
  3. package/LICENSE +22 -0
  4. package/README.md +165 -0
  5. package/assets/Project-faf-pckg-json-README.png +0 -0
  6. package/assets/icons/faf-icon-128.png +0 -0
  7. package/assets/icons/faf-icon-256.png +0 -0
  8. package/assets/icons/faf-icon-48.png +0 -0
  9. package/assets/icons/faf-icon-512.png +0 -0
  10. package/assets/icons/orange-smiley.svg +6 -0
  11. package/dist/src/compiler/index.d.ts +7 -0
  12. package/dist/src/compiler/index.js +24 -0
  13. package/dist/src/compiler/index.js.map +1 -0
  14. package/dist/src/compiler/scorer.d.ts +53 -0
  15. package/dist/src/compiler/scorer.js +189 -0
  16. package/dist/src/compiler/scorer.js.map +1 -0
  17. package/dist/src/compiler/slot-validator.d.ts +32 -0
  18. package/dist/src/compiler/slot-validator.js +293 -0
  19. package/dist/src/compiler/slot-validator.js.map +1 -0
  20. package/dist/src/compiler/type-detector.d.ts +62 -0
  21. package/dist/src/compiler/type-detector.js +388 -0
  22. package/dist/src/compiler/type-detector.js.map +1 -0
  23. package/dist/src/config/visibility.d.ts +41 -0
  24. package/dist/src/config/visibility.js +158 -0
  25. package/dist/src/config/visibility.js.map +1 -0
  26. package/dist/src/faf-core/commands/audit.d.ts +21 -0
  27. package/dist/src/faf-core/commands/audit.js +83 -0
  28. package/dist/src/faf-core/commands/audit.js.map +1 -0
  29. package/dist/src/faf-core/commands/auto.d.ts +25 -0
  30. package/dist/src/faf-core/commands/auto.js +74 -0
  31. package/dist/src/faf-core/commands/auto.js.map +1 -0
  32. package/dist/src/faf-core/commands/bi-sync.d.ts +26 -0
  33. package/dist/src/faf-core/commands/bi-sync.js +157 -0
  34. package/dist/src/faf-core/commands/bi-sync.js.map +1 -0
  35. package/dist/src/faf-core/commands/doctor.d.ts +17 -0
  36. package/dist/src/faf-core/commands/doctor.js +198 -0
  37. package/dist/src/faf-core/commands/doctor.js.map +1 -0
  38. package/dist/src/faf-core/commands/enhance.d.ts +46 -0
  39. package/dist/src/faf-core/commands/enhance.js +360 -0
  40. package/dist/src/faf-core/commands/enhance.js.map +1 -0
  41. package/dist/src/faf-core/commands/formats.d.ts +22 -0
  42. package/dist/src/faf-core/commands/formats.js +117 -0
  43. package/dist/src/faf-core/commands/formats.js.map +1 -0
  44. package/dist/src/faf-core/commands/init.d.ts +26 -0
  45. package/dist/src/faf-core/commands/init.js +114 -0
  46. package/dist/src/faf-core/commands/init.js.map +1 -0
  47. package/dist/src/faf-core/commands/innit.d.ts +7 -0
  48. package/dist/src/faf-core/commands/innit.js +13 -0
  49. package/dist/src/faf-core/commands/innit.js.map +1 -0
  50. package/dist/src/faf-core/commands/migrate.d.ts +15 -0
  51. package/dist/src/faf-core/commands/migrate.js +86 -0
  52. package/dist/src/faf-core/commands/migrate.js.map +1 -0
  53. package/dist/src/faf-core/commands/quick.d.ts +16 -0
  54. package/dist/src/faf-core/commands/quick.js +184 -0
  55. package/dist/src/faf-core/commands/quick.js.map +1 -0
  56. package/dist/src/faf-core/commands/score.d.ts +47 -0
  57. package/dist/src/faf-core/commands/score.js +49 -0
  58. package/dist/src/faf-core/commands/score.js.map +1 -0
  59. package/dist/src/faf-core/commands/sync.d.ts +16 -0
  60. package/dist/src/faf-core/commands/sync.js +210 -0
  61. package/dist/src/faf-core/commands/sync.js.map +1 -0
  62. package/dist/src/faf-core/commands/update.d.ts +12 -0
  63. package/dist/src/faf-core/commands/update.js +46 -0
  64. package/dist/src/faf-core/commands/update.js.map +1 -0
  65. package/dist/src/faf-core/commands/validate.d.ts +21 -0
  66. package/dist/src/faf-core/commands/validate.js +81 -0
  67. package/dist/src/faf-core/commands/validate.js.map +1 -0
  68. package/dist/src/faf-core/compiler/faf-compiler.d.ts +138 -0
  69. package/dist/src/faf-core/compiler/faf-compiler.js +794 -0
  70. package/dist/src/faf-core/compiler/faf-compiler.js.map +1 -0
  71. package/dist/src/faf-core/engines/dependency-tsa.d.ts +88 -0
  72. package/dist/src/faf-core/engines/dependency-tsa.js +361 -0
  73. package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -0
  74. package/dist/src/faf-core/engines/fab-formats-processor.d.ts +166 -0
  75. package/dist/src/faf-core/engines/fab-formats-processor.js +1274 -0
  76. package/dist/src/faf-core/engines/fab-formats-processor.js.map +1 -0
  77. package/dist/src/faf-core/engines/faf-dna.d.ts +159 -0
  78. package/dist/src/faf-core/engines/faf-dna.js +554 -0
  79. package/dist/src/faf-core/engines/faf-dna.js.map +1 -0
  80. package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +100 -0
  81. package/dist/src/faf-core/engines/relentless-context-extractor.js +625 -0
  82. package/dist/src/faf-core/engines/relentless-context-extractor.js.map +1 -0
  83. package/dist/src/faf-core/fix-once/colors.d.ts +104 -0
  84. package/dist/src/faf-core/fix-once/colors.js +236 -0
  85. package/dist/src/faf-core/fix-once/colors.js.map +1 -0
  86. package/dist/src/faf-core/fix-once/types.d.ts +257 -0
  87. package/dist/src/faf-core/fix-once/types.js +26 -0
  88. package/dist/src/faf-core/fix-once/types.js.map +1 -0
  89. package/dist/src/faf-core/fix-once/yaml.d.ts +57 -0
  90. package/dist/src/faf-core/fix-once/yaml.js +172 -0
  91. package/dist/src/faf-core/fix-once/yaml.js.map +1 -0
  92. package/dist/src/faf-core/generators/faf-generator-championship.d.ts +16 -0
  93. package/dist/src/faf-core/generators/faf-generator-championship.js +462 -0
  94. package/dist/src/faf-core/generators/faf-generator-championship.js.map +1 -0
  95. package/dist/src/faf-core/utils/balance-visualizer.d.ts +37 -0
  96. package/dist/src/faf-core/utils/balance-visualizer.js +197 -0
  97. package/dist/src/faf-core/utils/balance-visualizer.js.map +1 -0
  98. package/dist/src/faf-core/utils/championship-style.d.ts +109 -0
  99. package/dist/src/faf-core/utils/championship-style.js +219 -0
  100. package/dist/src/faf-core/utils/championship-style.js.map +1 -0
  101. package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +73 -0
  102. package/dist/src/faf-core/utils/chrome-extension-detector.js +268 -0
  103. package/dist/src/faf-core/utils/chrome-extension-detector.js.map +1 -0
  104. package/dist/src/faf-core/utils/fafignore-parser.d.ts +20 -0
  105. package/dist/src/faf-core/utils/fafignore-parser.js +178 -0
  106. package/dist/src/faf-core/utils/fafignore-parser.js.map +1 -0
  107. package/dist/src/faf-core/utils/file-utils.d.ts +112 -0
  108. package/dist/src/faf-core/utils/file-utils.js +846 -0
  109. package/dist/src/faf-core/utils/file-utils.js.map +1 -0
  110. package/dist/src/faf-core/utils/native-file-finder.d.ts +115 -0
  111. package/dist/src/faf-core/utils/native-file-finder.js +211 -0
  112. package/dist/src/faf-core/utils/native-file-finder.js.map +1 -0
  113. package/dist/src/faf-core/utils/platform-detector.d.ts +30 -0
  114. package/dist/src/faf-core/utils/platform-detector.js +218 -0
  115. package/dist/src/faf-core/utils/platform-detector.js.map +1 -0
  116. package/dist/src/faf-core/utils/technical-credit.d.ts +35 -0
  117. package/dist/src/faf-core/utils/technical-credit.js +286 -0
  118. package/dist/src/faf-core/utils/technical-credit.js.map +1 -0
  119. package/dist/src/faf-core/utils/yaml-generator.d.ts +41 -0
  120. package/dist/src/faf-core/utils/yaml-generator.js +360 -0
  121. package/dist/src/faf-core/utils/yaml-generator.js.map +1 -0
  122. package/dist/src/handlers/behavioral-instruction.d.ts +16 -0
  123. package/dist/src/handlers/behavioral-instruction.js +43 -0
  124. package/dist/src/handlers/behavioral-instruction.js.map +1 -0
  125. package/dist/src/handlers/championship-tools.d.ts +113 -0
  126. package/dist/src/handlers/championship-tools.js +2602 -0
  127. package/dist/src/handlers/championship-tools.js.map +1 -0
  128. package/dist/src/handlers/engine-adapter.d.ts +28 -0
  129. package/dist/src/handlers/engine-adapter.js +603 -0
  130. package/dist/src/handlers/engine-adapter.js.map +1 -0
  131. package/dist/src/handlers/fileHandler.d.ts +36 -0
  132. package/dist/src/handlers/fileHandler.js +246 -0
  133. package/dist/src/handlers/fileHandler.js.map +1 -0
  134. package/dist/src/handlers/resources.d.ts +18 -0
  135. package/dist/src/handlers/resources.js +78 -0
  136. package/dist/src/handlers/resources.js.map +1 -0
  137. package/dist/src/handlers/tool-registry.d.ts +23 -0
  138. package/dist/src/handlers/tool-registry.js +68 -0
  139. package/dist/src/handlers/tool-registry.js.map +1 -0
  140. package/dist/src/handlers/tool-types.d.ts +167 -0
  141. package/dist/src/handlers/tool-types.js +7 -0
  142. package/dist/src/handlers/tool-types.js.map +1 -0
  143. package/dist/src/handlers/tools.d.ts +25 -0
  144. package/dist/src/handlers/tools.js +1168 -0
  145. package/dist/src/handlers/tools.js.map +1 -0
  146. package/dist/src/index.d.ts +2 -0
  147. package/dist/src/index.js +17 -0
  148. package/dist/src/index.js.map +1 -0
  149. package/dist/src/server.d.ts +28 -0
  150. package/dist/src/server.js +179 -0
  151. package/dist/src/server.js.map +1 -0
  152. package/dist/src/test-all-functions.d.ts +15 -0
  153. package/dist/src/test-all-functions.js +163 -0
  154. package/dist/src/test-all-functions.js.map +1 -0
  155. package/dist/src/types/mcp-tools.d.ts +53 -0
  156. package/dist/src/types/mcp-tools.js +77 -0
  157. package/dist/src/types/mcp-tools.js.map +1 -0
  158. package/dist/src/types/project-types.d.ts +22 -0
  159. package/dist/src/types/project-types.js +85 -0
  160. package/dist/src/types/project-types.js.map +1 -0
  161. package/dist/src/types/slots.d.ts +39 -0
  162. package/dist/src/types/slots.js +162 -0
  163. package/dist/src/types/slots.js.map +1 -0
  164. package/dist/src/types/tool-visibility.d.ts +36 -0
  165. package/dist/src/types/tool-visibility.js +510 -0
  166. package/dist/src/types/tool-visibility.js.map +1 -0
  167. package/dist/src/utils/auto-path-detection.d.ts +26 -0
  168. package/dist/src/utils/auto-path-detection.js +198 -0
  169. package/dist/src/utils/auto-path-detection.js.map +1 -0
  170. package/dist/src/utils/championship-format.d.ts +30 -0
  171. package/dist/src/utils/championship-format.js +79 -0
  172. package/dist/src/utils/championship-format.js.map +1 -0
  173. package/dist/src/utils/cli-detector.d.ts +20 -0
  174. package/dist/src/utils/cli-detector.js +230 -0
  175. package/dist/src/utils/cli-detector.js.map +1 -0
  176. package/dist/src/utils/display-protocol.d.ts +57 -0
  177. package/dist/src/utils/display-protocol.js +131 -0
  178. package/dist/src/utils/display-protocol.js.map +1 -0
  179. package/dist/src/utils/faf-file-finder.d.ts +59 -0
  180. package/dist/src/utils/faf-file-finder.js +139 -0
  181. package/dist/src/utils/faf-file-finder.js.map +1 -0
  182. package/dist/src/utils/fuzzy-detector.d.ts +56 -0
  183. package/dist/src/utils/fuzzy-detector.js +221 -0
  184. package/dist/src/utils/fuzzy-detector.js.map +1 -0
  185. package/dist/src/utils/path-resolver.d.ts +51 -0
  186. package/dist/src/utils/path-resolver.js +214 -0
  187. package/dist/src/utils/path-resolver.js.map +1 -0
  188. package/dist/src/utils/type-guards.d.ts +9 -0
  189. package/dist/src/utils/type-guards.js +27 -0
  190. package/dist/src/utils/type-guards.js.map +1 -0
  191. package/dist/src/utils/username-detector.d.ts +27 -0
  192. package/dist/src/utils/username-detector.js +90 -0
  193. package/dist/src/utils/username-detector.js.map +1 -0
  194. package/dist/src/utils/visual-style.d.ts +62 -0
  195. package/dist/src/utils/visual-style.js +164 -0
  196. package/dist/src/utils/visual-style.js.map +1 -0
  197. package/dist/src/version.d.ts +9 -0
  198. package/dist/src/version.js +37 -0
  199. package/dist/src/version.js.map +1 -0
  200. package/package.json +114 -0
  201. package/scripts/discord-sync-curated.js +233 -0
  202. package/scripts/discord-sync-final.js +218 -0
  203. package/scripts/discord-sync-simple.js +175 -0
  204. package/scripts/discord-sync-working.js +187 -0
  205. package/scripts/discord-sync.js +181 -0
  206. package/scripts/postinstall.js +46 -0
  207. package/skill/SKILL.md +385 -0
@@ -0,0 +1,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
+ };