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,83 @@
1
+ "use strict";
2
+ /**
3
+ * 🔍 faf audit - Comprehensive Quality Audit (Mk3 Bundled)
4
+ * Audit project.faf quality and completeness
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.auditFafFile = auditFafFile;
8
+ const fs_1 = require("fs");
9
+ const yaml_1 = require("../fix-once/yaml");
10
+ const file_utils_1 = require("../utils/file-utils");
11
+ const faf_compiler_1 = require("../compiler/faf-compiler");
12
+ async function auditFafFile(projectPath, options = {}) {
13
+ try {
14
+ const fafPath = projectPath ? `${projectPath}/project.faf` : await (0, file_utils_1.findFafFile)();
15
+ if (!fafPath || !await (0, file_utils_1.fileExists)(fafPath)) {
16
+ return {
17
+ success: false,
18
+ score: 0,
19
+ grade: 'F',
20
+ issues: [{ severity: 'high', message: 'No project.faf file found', fix: 'Run faf init' }],
21
+ strengths: [],
22
+ message: 'No project.faf file found'
23
+ };
24
+ }
25
+ // Read and parse
26
+ const content = await fs_1.promises.readFile(fafPath, 'utf-8');
27
+ const fafData = (0, yaml_1.parse)(content);
28
+ // Run compiler scoring
29
+ const compiler = new faf_compiler_1.FafCompiler();
30
+ const scoreResult = await compiler.compile(fafPath);
31
+ const issues = [];
32
+ const strengths = [];
33
+ // Audit checks
34
+ if (!fafData.project?.name) {
35
+ issues.push({ severity: 'high', message: 'Missing project name', fix: 'Add project.name field' });
36
+ }
37
+ else {
38
+ strengths.push('Project name defined');
39
+ }
40
+ if (!fafData.project?.goal) {
41
+ issues.push({ severity: 'medium', message: 'Missing project goal', fix: 'Add project.goal field' });
42
+ }
43
+ else {
44
+ strengths.push('Project goal defined');
45
+ }
46
+ if (!fafData.stack?.frontend && !fafData.stack?.backend) {
47
+ issues.push({ severity: 'medium', message: 'Stack information incomplete', fix: 'Add stack details' });
48
+ }
49
+ else {
50
+ strengths.push('Stack information present');
51
+ }
52
+ if (!fafData.instant_context?.what_building) {
53
+ issues.push({ severity: 'low', message: 'Missing instant context', fix: 'Add what_building description' });
54
+ }
55
+ else {
56
+ strengths.push('Instant context defined');
57
+ }
58
+ // Determine grade
59
+ const grade = scoreResult.score >= 90 ? 'A' :
60
+ scoreResult.score >= 80 ? 'B' :
61
+ scoreResult.score >= 70 ? 'C' :
62
+ scoreResult.score >= 60 ? 'D' : 'F';
63
+ return {
64
+ success: true,
65
+ score: scoreResult.score,
66
+ grade,
67
+ issues,
68
+ strengths,
69
+ message: `Audit complete - Score: ${scoreResult.score}% (Grade: ${grade})`
70
+ };
71
+ }
72
+ catch (error) {
73
+ return {
74
+ success: false,
75
+ score: 0,
76
+ grade: 'F',
77
+ issues: [{ severity: 'high', message: error instanceof Error ? error.message : 'Audit failed' }],
78
+ strengths: [],
79
+ message: 'Audit failed'
80
+ };
81
+ }
82
+ }
83
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * faf auto - Programmatic API (MCP-ready)
3
+ * Simplified version without interactive prompts
4
+ * No console output, returns structured data
5
+ */
6
+ import { InitResult } from './init.js';
7
+ import { ScoreResult } from './score.js';
8
+ export interface AutoOptions {
9
+ force?: boolean;
10
+ skipAI?: boolean;
11
+ }
12
+ export interface AutoResult {
13
+ success: boolean;
14
+ phase: 'init' | 'score' | 'complete';
15
+ initResult?: InitResult;
16
+ scoreResult?: ScoreResult;
17
+ duration?: number;
18
+ error?: string;
19
+ }
20
+ /**
21
+ * Auto command - programmatic API
22
+ * Initializes if needed, then scores the file
23
+ * Returns structured data, no console output
24
+ */
25
+ export declare function autoCommand(directory?: string, options?: AutoOptions): Promise<AutoResult>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * faf auto - Programmatic API (MCP-ready)
4
+ * Simplified version without interactive prompts
5
+ * No console output, returns structured data
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.autoCommand = autoCommand;
9
+ const file_utils_js_1 = require("../utils/file-utils.js");
10
+ const init_js_1 = require("./init.js");
11
+ const score_js_1 = require("./score.js");
12
+ /**
13
+ * Auto command - programmatic API
14
+ * Initializes if needed, then scores the file
15
+ * Returns structured data, no console output
16
+ */
17
+ async function autoCommand(directory, options = {}) {
18
+ const startTime = Date.now();
19
+ try {
20
+ const targetDir = directory || process.cwd();
21
+ const homeDir = require('os').homedir();
22
+ // CRITICAL: Prevent running in home or root directory
23
+ if (!directory && (targetDir === homeDir || targetDir === '/')) {
24
+ return {
25
+ success: false,
26
+ phase: 'init',
27
+ error: 'Cannot run in home or root directory for safety',
28
+ duration: Date.now() - startTime
29
+ };
30
+ }
31
+ // Step 1: Check if .faf file exists
32
+ const existingFaf = await (0, file_utils_js_1.findFafFile)(targetDir);
33
+ let initResult;
34
+ let fafPath;
35
+ if (!existingFaf || options.force) {
36
+ // Initialize new .faf file
37
+ initResult = await (0, init_js_1.initFafFile)(targetDir, { force: options.force });
38
+ if (!initResult.success || !initResult.outputPath) {
39
+ return {
40
+ success: false,
41
+ phase: 'init',
42
+ initResult,
43
+ error: initResult.error || 'Init failed',
44
+ duration: Date.now() - startTime
45
+ };
46
+ }
47
+ fafPath = initResult.outputPath;
48
+ }
49
+ else {
50
+ fafPath = existingFaf;
51
+ }
52
+ // Step 2: Score the file
53
+ const scoreResult = await (0, score_js_1.scoreFafFile)(fafPath, { json: true });
54
+ const duration = Date.now() - startTime;
55
+ return {
56
+ success: true,
57
+ phase: 'complete',
58
+ initResult,
59
+ scoreResult,
60
+ duration
61
+ };
62
+ }
63
+ catch (error) {
64
+ const duration = Date.now() - startTime;
65
+ const errorMessage = error instanceof Error ? error.message : 'Auto command failed';
66
+ return {
67
+ success: false,
68
+ phase: 'init',
69
+ error: errorMessage,
70
+ duration
71
+ };
72
+ }
73
+ }
74
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/auto.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAyBH,kCAoEC;AA3FD,0DAAqD;AACrD,uCAAoD;AACpD,yCAAuD;AAgBvD;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAC/B,SAAkB,EAClB,UAAuB,EAAE;IAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAExC,sDAAsD;QACtD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,iDAAiD;gBACxD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAW,EAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,UAAkC,CAAC;QACvC,IAAI,OAAe,CAAC;QAEpB,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,2BAA2B;YAC3B,UAAU,GAAG,MAAM,IAAA,qBAAW,EAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YAEpE,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,MAAM;oBACb,UAAU;oBACV,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,aAAa;oBACxC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,WAAW,CAAC;QACxB,CAAC;QAED,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAY,EAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,UAAU;YACjB,UAAU;YACV,WAAW;YACX,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAEpF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,YAAY;YACnB,QAAQ;SACT,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 🔗 Bi-Sync Engine - Mk3 Bundled Edition
3
+ * Revolutionary project.faf ↔ CLAUDE.md Synchronization
4
+ */
5
+ export interface BiSyncOptions {
6
+ auto?: boolean;
7
+ watch?: boolean;
8
+ force?: boolean;
9
+ json?: boolean;
10
+ }
11
+ export interface BiSyncResult {
12
+ success: boolean;
13
+ direction: 'faf-to-claude' | 'claude-to-faf' | 'bidirectional' | 'none';
14
+ filesChanged: string[];
15
+ conflicts: string[];
16
+ duration: number;
17
+ message: string;
18
+ }
19
+ /**
20
+ * 🔄 Convert project.faf YAML content to CLAUDE.md Markdown format
21
+ */
22
+ export declare function fafToClaudeMd(fafContent: string): string;
23
+ /**
24
+ * 🔗 Main Bi-Sync function
25
+ */
26
+ export declare function syncBiDirectional(projectPath?: string, options?: BiSyncOptions): Promise<BiSyncResult>;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * 🔗 Bi-Sync Engine - Mk3 Bundled Edition
4
+ * Revolutionary project.faf ↔ CLAUDE.md Synchronization
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.fafToClaudeMd = fafToClaudeMd;
41
+ exports.syncBiDirectional = syncBiDirectional;
42
+ const yaml_1 = require("../fix-once/yaml");
43
+ const path = __importStar(require("path"));
44
+ const fs_1 = require("fs");
45
+ const file_utils_1 = require("../utils/file-utils");
46
+ /**
47
+ * 🔄 Convert project.faf YAML content to CLAUDE.md Markdown format
48
+ */
49
+ function fafToClaudeMd(fafContent) {
50
+ try {
51
+ const fafData = (0, yaml_1.parse)(fafContent);
52
+ let claudeMd = `# 🏎️ CLAUDE.md - ${fafData.project?.name || 'Project'} Persistent Context & Intelligence\n\n`;
53
+ // Project State
54
+ if (fafData.project) {
55
+ claudeMd += `## PROJECT STATE: ${fafData.context_quality?.overall_assessment || 'ACTIVE'} 🚀\n`;
56
+ if (fafData.project.goal) {
57
+ claudeMd += `**Current Position:** ${fafData.project.goal}\n`;
58
+ }
59
+ claudeMd += `**Tyre Compound:** ULTRASOFT C5 (Maximum Performance)\n\n`;
60
+ claudeMd += `---\n\n`;
61
+ }
62
+ // Core Context
63
+ claudeMd += `## 🎨 CORE CONTEXT\n\n`;
64
+ if (fafData.project) {
65
+ claudeMd += `### Project Identity\n`;
66
+ claudeMd += `- **Name:** ${fafData.project.name || 'Unknown'}\n`;
67
+ if (fafData.instant_context?.tech_stack) {
68
+ claudeMd += `- **Stack:** ${fafData.instant_context.tech_stack}\n`;
69
+ }
70
+ claudeMd += `- **Quality:** F1-INSPIRED (Championship Performance)\n\n`;
71
+ }
72
+ // Technical Context
73
+ if (fafData.instant_context) {
74
+ claudeMd += `### Technical Architecture\n`;
75
+ if (fafData.instant_context.what_building) {
76
+ claudeMd += `- **What Building:** ${fafData.instant_context.what_building}\n`;
77
+ }
78
+ if (fafData.instant_context.main_language) {
79
+ claudeMd += `- **Main Language:** ${fafData.instant_context.main_language}\n`;
80
+ }
81
+ claudeMd += `\n`;
82
+ }
83
+ // Context Quality
84
+ if (fafData.context_quality) {
85
+ claudeMd += `### 📊 Context Quality Status\n`;
86
+ claudeMd += `- **Overall Assessment:** ${fafData.context_quality.overall_assessment || 'Good'}\n`;
87
+ claudeMd += `- **Last Updated:** ${new Date().toISOString().split('T')[0]}\n\n`;
88
+ }
89
+ // Championship Footer
90
+ claudeMd += `---\n\n`;
91
+ claudeMd += `**STATUS: BI-SYNC ACTIVE 🔗 - Synchronized with .faf context!**\n\n`;
92
+ claudeMd += `*Last Sync: ${new Date().toISOString()}*\n`;
93
+ claudeMd += `*Sync Engine: F1-Inspired Software Engineering*\n`;
94
+ claudeMd += `*🏎️⚡️_championship_sync*\n`;
95
+ return claudeMd;
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Failed to convert .faf to CLAUDE.md: ${error instanceof Error ? error.message : String(error)}`);
99
+ }
100
+ }
101
+ /**
102
+ * 🔗 Main Bi-Sync function
103
+ */
104
+ async function syncBiDirectional(projectPath, options = {}) {
105
+ const startTime = Date.now();
106
+ const result = {
107
+ success: false,
108
+ direction: 'none',
109
+ filesChanged: [],
110
+ conflicts: [],
111
+ duration: 0,
112
+ message: ''
113
+ };
114
+ try {
115
+ // Find project.faf file
116
+ const fafPath = projectPath ? path.join(projectPath, 'project.faf') : await (0, file_utils_1.findFafFile)();
117
+ if (!fafPath || !await (0, file_utils_1.fileExists)(fafPath)) {
118
+ result.message = 'No project.faf file found. Run faf init first.';
119
+ result.duration = Date.now() - startTime;
120
+ return result;
121
+ }
122
+ const projectDir = path.dirname(fafPath);
123
+ const claudeMdPath = path.join(projectDir, 'CLAUDE.md');
124
+ // Check what exists
125
+ const claudeMdExists = await (0, file_utils_1.fileExists)(claudeMdPath);
126
+ // Read .faf content
127
+ const fafContent = await fs_1.promises.readFile(fafPath, 'utf-8');
128
+ const fafData = (0, yaml_1.parse)(fafContent);
129
+ const currentScore = fafData.faf_score || '0%';
130
+ if (!claudeMdExists) {
131
+ // Create CLAUDE.md from project.faf
132
+ const claudeMdContent = fafToClaudeMd(fafContent);
133
+ await fs_1.promises.writeFile(claudeMdPath, claudeMdContent, 'utf-8');
134
+ result.success = true;
135
+ result.direction = 'faf-to-claude';
136
+ result.filesChanged.push('CLAUDE.md');
137
+ result.message = `CLAUDE.md created! Bi-sync now active! FAF Score: ${currentScore}`;
138
+ }
139
+ else {
140
+ // Both files exist - update CLAUDE.md from project.faf
141
+ const claudeMdContent = fafToClaudeMd(fafContent);
142
+ await fs_1.promises.writeFile(claudeMdPath, claudeMdContent, 'utf-8');
143
+ result.success = true;
144
+ result.direction = 'faf-to-claude';
145
+ result.filesChanged.push('CLAUDE.md');
146
+ result.message = `Files synchronized! Perfect harmony achieved! FAF Score: ${currentScore}`;
147
+ }
148
+ result.duration = Date.now() - startTime;
149
+ return result;
150
+ }
151
+ catch (error) {
152
+ result.duration = Date.now() - startTime;
153
+ result.message = error instanceof Error ? error.message : 'Sync failed';
154
+ return result;
155
+ }
156
+ }
157
+ //# sourceMappingURL=bi-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bi-sync.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/bi-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 🏥 FAF Doctor - Diagnose and fix common issues (Mk3 Bundled)
3
+ * Health check for your project.faf setup
4
+ */
5
+ interface DiagnosticResult {
6
+ status: 'ok' | 'warning' | 'error';
7
+ message: string;
8
+ fix?: string;
9
+ }
10
+ export interface DoctorResult {
11
+ success: boolean;
12
+ health: 'perfect' | 'good' | 'issues';
13
+ diagnostics: DiagnosticResult[];
14
+ message: string;
15
+ }
16
+ export declare function doctorCommand(projectPath?: string): Promise<DoctorResult>;
17
+ export {};
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ /**
3
+ * 🏥 FAF Doctor - Diagnose and fix common issues (Mk3 Bundled)
4
+ * Health check for your project.faf setup
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.doctorCommand = doctorCommand;
41
+ const fs_1 = require("fs");
42
+ const path = __importStar(require("path"));
43
+ const yaml_1 = require("../fix-once/yaml");
44
+ const file_utils_1 = require("../utils/file-utils");
45
+ const faf_compiler_1 = require("../compiler/faf-compiler");
46
+ async function doctorCommand(projectPath) {
47
+ const results = [];
48
+ const projectRoot = projectPath || process.cwd();
49
+ try {
50
+ // Check 1: project.faf file exists
51
+ const fafPath = await (0, file_utils_1.findFafFile)(projectRoot);
52
+ if (!fafPath) {
53
+ results.push({
54
+ status: 'error',
55
+ message: 'No project.faf file found',
56
+ fix: 'Run: faf init, faf quick, or faf chat to create one'
57
+ });
58
+ }
59
+ else {
60
+ results.push({
61
+ status: 'ok',
62
+ message: `Found project.faf at: ${fafPath}`
63
+ });
64
+ // Check 2: project.faf file validity
65
+ try {
66
+ const content = await fs_1.promises.readFile(fafPath, 'utf-8');
67
+ const fafData = (0, yaml_1.parse)(content);
68
+ if (!fafData) {
69
+ results.push({
70
+ status: 'error',
71
+ message: 'project.faf file is empty',
72
+ fix: 'Run: faf init --force to regenerate'
73
+ });
74
+ }
75
+ else {
76
+ // Check for required fields
77
+ const missingFields = [];
78
+ if (!fafData.project?.name)
79
+ missingFields.push('project.name');
80
+ if (!fafData.project?.goal)
81
+ missingFields.push('project.goal');
82
+ if (missingFields.length > 0) {
83
+ results.push({
84
+ status: 'warning',
85
+ message: `Missing important fields: ${missingFields.join(', ')}`,
86
+ fix: 'Run: faf enhance or faf chat to add missing info'
87
+ });
88
+ }
89
+ else {
90
+ results.push({
91
+ status: 'ok',
92
+ message: 'project.faf structure is valid'
93
+ });
94
+ }
95
+ // Check 3: Score
96
+ const compiler = new faf_compiler_1.FafCompiler();
97
+ const scoreResult = await compiler.compile(fafPath);
98
+ if (scoreResult.score < 30) {
99
+ results.push({
100
+ status: 'error',
101
+ message: `Score too low: ${scoreResult.score}%`,
102
+ fix: 'Run: faf enhance to improve, or faf chat to add context'
103
+ });
104
+ }
105
+ else if (scoreResult.score < 70) {
106
+ results.push({
107
+ status: 'warning',
108
+ message: `Score could be better: ${scoreResult.score}%`,
109
+ fix: 'Target 70%+ for championship AI context'
110
+ });
111
+ }
112
+ else {
113
+ results.push({
114
+ status: 'ok',
115
+ message: `Great score: ${scoreResult.score}%`
116
+ });
117
+ }
118
+ }
119
+ }
120
+ catch (error) {
121
+ results.push({
122
+ status: 'error',
123
+ message: 'project.faf file is corrupted or invalid YAML',
124
+ fix: 'Run: faf recover or faf init --force'
125
+ });
126
+ }
127
+ }
128
+ // Check 4: .fafignore exists
129
+ const fafIgnorePath = path.join(projectRoot, '.fafignore');
130
+ if (!await (0, file_utils_1.fileExists)(fafIgnorePath)) {
131
+ results.push({
132
+ status: 'warning',
133
+ message: 'No .fafignore file',
134
+ fix: '.fafignore helps exclude unnecessary files'
135
+ });
136
+ }
137
+ else {
138
+ results.push({
139
+ status: 'ok',
140
+ message: '.fafignore found'
141
+ });
142
+ }
143
+ // Check 5: Project detection
144
+ const packageJsonPath = path.join(projectRoot, 'package.json');
145
+ const requirementsPath = path.join(projectRoot, 'requirements.txt');
146
+ const goModPath = path.join(projectRoot, 'go.mod');
147
+ if (await (0, file_utils_1.fileExists)(packageJsonPath)) {
148
+ results.push({
149
+ status: 'ok',
150
+ message: 'Node.js/JavaScript project detected'
151
+ });
152
+ }
153
+ else if (await (0, file_utils_1.fileExists)(requirementsPath)) {
154
+ results.push({
155
+ status: 'ok',
156
+ message: 'Python project detected'
157
+ });
158
+ }
159
+ else if (await (0, file_utils_1.fileExists)(goModPath)) {
160
+ results.push({
161
+ status: 'ok',
162
+ message: 'Go project detected'
163
+ });
164
+ }
165
+ else {
166
+ results.push({
167
+ status: 'warning',
168
+ message: 'No standard project files detected',
169
+ fix: 'FAF works best with package.json, requirements.txt, or go.mod'
170
+ });
171
+ }
172
+ // Determine overall health
173
+ const hasErrors = results.some(r => r.status === 'error');
174
+ const hasWarnings = results.some(r => r.status === 'warning');
175
+ const health = !hasErrors && !hasWarnings ? 'perfect' : !hasErrors ? 'good' : 'issues';
176
+ const message = health === 'perfect' ? 'Perfect health! Your FAF setup is championship-ready!' :
177
+ health === 'good' ? 'Good health with minor improvements suggested.' :
178
+ 'Issues detected. Follow the fixes above.';
179
+ return {
180
+ success: true,
181
+ health,
182
+ diagnostics: results,
183
+ message
184
+ };
185
+ }
186
+ catch (error) {
187
+ return {
188
+ success: false,
189
+ health: 'issues',
190
+ diagnostics: [{
191
+ status: 'error',
192
+ message: error instanceof Error ? error.message : 'Health check failed'
193
+ }],
194
+ message: 'Health check failed'
195
+ };
196
+ }
197
+ }
198
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/doctor.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBH,sCAyJC;AA5KD,2BAAoC;AACpC,2CAA6B;AAC7B,2CAAsD;AACtD,oDAA8D;AAC9D,2DAAuD;AAehD,KAAK,UAAU,aAAa,CAAC,WAAoB;IACtD,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAW,EAAC,WAAW,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,qDAAqD;aAC3D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,yBAAyB,OAAO,EAAE;aAC5C,CAAC,CAAC;YAEH,qCAAqC;YACrC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,IAAA,YAAS,EAAC,OAAO,CAAC,CAAC;gBAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,2BAA2B;wBACpC,GAAG,EAAE,qCAAqC;qBAC3C,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,4BAA4B;oBAC5B,MAAM,aAAa,GAAG,EAAE,CAAC;oBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI;wBAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI;wBAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAE/D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7B,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,6BAA6B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;4BAChE,GAAG,EAAE,kDAAkD;yBACxD,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,gCAAgC;yBAC1C,CAAC,CAAC;oBACL,CAAC;oBAED,iBAAiB;oBACjB,MAAM,QAAQ,GAAG,IAAI,0BAAW,EAAE,CAAC;oBACnC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAEpD,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;wBAC3B,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,OAAO;4BACf,OAAO,EAAE,kBAAkB,WAAW,CAAC,KAAK,GAAG;4BAC/C,GAAG,EAAE,yDAAyD;yBAC/D,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;wBAClC,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,0BAA0B,WAAW,CAAC,KAAK,GAAG;4BACvD,GAAG,EAAE,yCAAyC;yBAC/C,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,gBAAgB,WAAW,CAAC,KAAK,GAAG;yBAC9C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,+CAA+C;oBACxD,GAAG,EAAE,sCAAsC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,IAAA,uBAAU,EAAC,aAAa,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,oBAAoB;gBAC7B,GAAG,EAAE,4CAA4C;aAClD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,kBAAkB;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,MAAM,IAAA,uBAAU,EAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,IAAA,uBAAU,EAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,yBAAyB;aACnC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,IAAA,uBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,qBAAqB;aAC/B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,oCAAoC;gBAC7C,GAAG,EAAE,+DAA+D;aACrE,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEvF,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC;YAChF,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC;gBACtE,0CAA0C,CAAC;QAE3D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM;YACN,WAAW,EAAE,OAAO;YACpB,OAAO;SACR,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,CAAC;oBACZ,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;iBACxE,CAAC;YACF,OAAO,EAAE,qBAAqB;SAC/B,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * ⚡ FAF Enhance - MCP-native interactive enhancement
3
+ * Combines auto-detection with intelligent MCP questionnaire
4
+ */
5
+ export interface EnhanceOptions {
6
+ autoFill?: boolean;
7
+ targetScore?: number;
8
+ interactive?: boolean;
9
+ json?: boolean;
10
+ }
11
+ export interface EnhanceResult {
12
+ success: boolean;
13
+ initialScore: number;
14
+ finalScore: number;
15
+ improvements: string[];
16
+ questionsNeeded?: Question[];
17
+ message: string;
18
+ }
19
+ export interface Question {
20
+ id: string;
21
+ question: string;
22
+ header: string;
23
+ description: string;
24
+ defaultValue?: string;
25
+ required: boolean;
26
+ }
27
+ export interface EnhanceAnswers {
28
+ who?: string;
29
+ what?: string;
30
+ why?: string;
31
+ where?: string;
32
+ when?: string;
33
+ how?: string;
34
+ frontend?: string;
35
+ backend?: string;
36
+ database?: string;
37
+ hosting?: string;
38
+ }
39
+ /**
40
+ * Main enhance command - auto-detect mode
41
+ */
42
+ export declare function enhanceCommand(projectPath: string, options?: EnhanceOptions): Promise<EnhanceResult>;
43
+ /**
44
+ * Apply interactive answers and finalize enhancement
45
+ */
46
+ export declare function enhanceWithAnswers(projectPath: string, answers: EnhanceAnswers): Promise<EnhanceResult>;