faf-mcp 2.3.1 → 3.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 +26 -3
- package/CLAUDE.md +6 -6
- package/README.md +71 -72
- package/dist/src/faf-core/commands/bi-sync.d.ts +1 -3
- package/dist/src/faf-core/commands/bi-sync.js +21 -64
- package/dist/src/faf-core/commands/bi-sync.js.map +1 -1
- package/dist/src/faf-core/commands/sync.js.map +1 -1
- package/dist/src/faf-core/engines/dependency-tsa.js.map +1 -1
- package/dist/src/faf-core/fix-once/colors.js +1 -1
- package/dist/src/faf-core/fix-once/colors.js.map +1 -1
- package/dist/src/faf-core/parsers/agents-parser.d.ts +15 -0
- package/dist/src/faf-core/parsers/agents-parser.js +29 -123
- package/dist/src/faf-core/parsers/agents-parser.js.map +1 -1
- package/dist/src/faf-core/parsers/conductor-parser.js +1 -1
- package/dist/src/faf-core/parsers/conductor-parser.js.map +1 -1
- package/dist/src/faf-core/parsers/cursorrules-parser.d.ts +15 -0
- package/dist/src/faf-core/parsers/cursorrules-parser.js +54 -111
- package/dist/src/faf-core/parsers/cursorrules-parser.js.map +1 -1
- package/dist/src/faf-core/parsers/faf-git-generator.js +0 -1
- package/dist/src/faf-core/parsers/faf-git-generator.js.map +1 -1
- package/dist/src/faf-core/parsers/gemini-parser.d.ts +10 -0
- package/dist/src/faf-core/parsers/gemini-parser.js +19 -77
- package/dist/src/faf-core/parsers/gemini-parser.js.map +1 -1
- package/dist/src/handlers/engine-adapter.d.ts +13 -12
- package/dist/src/handlers/engine-adapter.js +103 -682
- package/dist/src/handlers/engine-adapter.js.map +1 -1
- package/dist/src/handlers/resources.d.ts +19 -1
- package/dist/src/handlers/resources.js +108 -23
- package/dist/src/handlers/resources.js.map +1 -1
- package/dist/src/handlers/skills.d.ts +70 -0
- package/dist/src/handlers/skills.js +174 -0
- package/dist/src/handlers/skills.js.map +1 -0
- package/dist/src/handlers/tools.d.ts +41 -5
- package/dist/src/handlers/tools.js +213 -258
- package/dist/src/handlers/tools.js.map +1 -1
- package/dist/src/server.d.ts +4 -0
- package/dist/src/server.js +51 -6
- package/dist/src/server.js.map +1 -1
- package/dist/src/utils/faf-cli-bridge.d.ts +2 -0
- package/dist/src/utils/faf-cli-bridge.js +16 -0
- package/dist/src/utils/faf-cli-bridge.js.map +1 -1
- package/package.json +16 -13
- package/project.faf +11 -6
- package/scripts/check-engines.mjs +53 -0
- package/scripts/sync-version.js +33 -19
- package/skills/faf-ide/SKILL.md +40 -0
- package/dist/src/config/visibility.d.ts +0 -41
- package/dist/src/config/visibility.js +0 -158
- package/dist/src/config/visibility.js.map +0 -1
- package/dist/src/faf-core/commands/audit.d.ts +0 -21
- package/dist/src/faf-core/commands/audit.js +0 -83
- package/dist/src/faf-core/commands/audit.js.map +0 -1
- package/dist/src/faf-core/commands/auto.d.ts +0 -25
- package/dist/src/faf-core/commands/auto.js +0 -74
- package/dist/src/faf-core/commands/auto.js.map +0 -1
- package/dist/src/faf-core/commands/doctor.d.ts +0 -17
- package/dist/src/faf-core/commands/doctor.js +0 -198
- package/dist/src/faf-core/commands/doctor.js.map +0 -1
- package/dist/src/faf-core/commands/enhance.d.ts +0 -46
- package/dist/src/faf-core/commands/enhance.js +0 -360
- package/dist/src/faf-core/commands/enhance.js.map +0 -1
- package/dist/src/faf-core/commands/formats.d.ts +0 -22
- package/dist/src/faf-core/commands/formats.js +0 -117
- package/dist/src/faf-core/commands/formats.js.map +0 -1
- package/dist/src/faf-core/commands/human.d.ts +0 -27
- package/dist/src/faf-core/commands/human.js +0 -183
- package/dist/src/faf-core/commands/human.js.map +0 -1
- package/dist/src/faf-core/commands/init.d.ts +0 -26
- package/dist/src/faf-core/commands/init.js +0 -114
- package/dist/src/faf-core/commands/init.js.map +0 -1
- package/dist/src/faf-core/commands/innit.d.ts +0 -7
- package/dist/src/faf-core/commands/innit.js +0 -13
- package/dist/src/faf-core/commands/innit.js.map +0 -1
- package/dist/src/faf-core/commands/migrate.d.ts +0 -15
- package/dist/src/faf-core/commands/migrate.js +0 -86
- package/dist/src/faf-core/commands/migrate.js.map +0 -1
- package/dist/src/faf-core/commands/quick.d.ts +0 -16
- package/dist/src/faf-core/commands/quick.js +0 -184
- package/dist/src/faf-core/commands/quick.js.map +0 -1
- package/dist/src/faf-core/commands/readme.d.ts +0 -47
- package/dist/src/faf-core/commands/readme.js +0 -361
- package/dist/src/faf-core/commands/readme.js.map +0 -1
- package/dist/src/faf-core/commands/score.d.ts +0 -47
- package/dist/src/faf-core/commands/score.js +0 -49
- package/dist/src/faf-core/commands/score.js.map +0 -1
- package/dist/src/faf-core/commands/update.d.ts +0 -12
- package/dist/src/faf-core/commands/update.js +0 -46
- package/dist/src/faf-core/commands/update.js.map +0 -1
- package/dist/src/faf-core/commands/validate.d.ts +0 -21
- package/dist/src/faf-core/commands/validate.js +0 -81
- package/dist/src/faf-core/commands/validate.js.map +0 -1
- package/dist/src/faf-core/compiler/faf-compiler.d.ts +0 -138
- package/dist/src/faf-core/compiler/faf-compiler.js +0 -1362
- package/dist/src/faf-core/compiler/faf-compiler.js.map +0 -1
- package/dist/src/faf-core/engines/fab-formats-processor.d.ts +0 -166
- package/dist/src/faf-core/engines/fab-formats-processor.js +0 -1274
- package/dist/src/faf-core/engines/fab-formats-processor.js.map +0 -1
- package/dist/src/faf-core/engines/faf-dna.d.ts +0 -159
- package/dist/src/faf-core/engines/faf-dna.js +0 -555
- package/dist/src/faf-core/engines/faf-dna.js.map +0 -1
- package/dist/src/faf-core/engines/relentless-context-extractor.d.ts +0 -100
- package/dist/src/faf-core/engines/relentless-context-extractor.js +0 -625
- package/dist/src/faf-core/engines/relentless-context-extractor.js.map +0 -1
- package/dist/src/faf-core/fix-once/types.d.ts +0 -257
- package/dist/src/faf-core/fix-once/types.js +0 -26
- package/dist/src/faf-core/fix-once/types.js.map +0 -1
- package/dist/src/faf-core/generators/faf-generator-championship.d.ts +0 -16
- package/dist/src/faf-core/generators/faf-generator-championship.js +0 -463
- package/dist/src/faf-core/generators/faf-generator-championship.js.map +0 -1
- package/dist/src/faf-core/inject.d.ts +0 -19
- package/dist/src/faf-core/inject.js +0 -57
- package/dist/src/faf-core/inject.js.map +0 -1
- package/dist/src/faf-core/parsers/index.d.ts +0 -12
- package/dist/src/faf-core/parsers/index.js +0 -29
- package/dist/src/faf-core/parsers/index.js.map +0 -1
- package/dist/src/faf-core/utils/balance-visualizer.d.ts +0 -37
- package/dist/src/faf-core/utils/balance-visualizer.js +0 -197
- package/dist/src/faf-core/utils/balance-visualizer.js.map +0 -1
- package/dist/src/faf-core/utils/championship-style.d.ts +0 -109
- package/dist/src/faf-core/utils/championship-style.js +0 -219
- package/dist/src/faf-core/utils/championship-style.js.map +0 -1
- package/dist/src/faf-core/utils/chrome-extension-detector.d.ts +0 -73
- package/dist/src/faf-core/utils/chrome-extension-detector.js +0 -268
- package/dist/src/faf-core/utils/chrome-extension-detector.js.map +0 -1
- package/dist/src/faf-core/utils/platform-detector.d.ts +0 -30
- package/dist/src/faf-core/utils/platform-detector.js +0 -218
- package/dist/src/faf-core/utils/platform-detector.js.map +0 -1
- package/dist/src/faf-core/utils/technical-credit.d.ts +0 -35
- package/dist/src/faf-core/utils/technical-credit.js +0 -286
- package/dist/src/faf-core/utils/technical-credit.js.map +0 -1
- package/dist/src/faf-core/utils/yaml-generator.d.ts +0 -41
- package/dist/src/faf-core/utils/yaml-generator.js +0 -360
- package/dist/src/faf-core/utils/yaml-generator.js.map +0 -1
- package/dist/src/handlers/behavioral-instruction.d.ts +0 -16
- package/dist/src/handlers/behavioral-instruction.js +0 -43
- package/dist/src/handlers/behavioral-instruction.js.map +0 -1
- package/dist/src/handlers/championship-tools.d.ts +0 -116
- package/dist/src/handlers/championship-tools.js +0 -2320
- package/dist/src/handlers/championship-tools.js.map +0 -1
- package/dist/src/handlers/cloud-handler.d.ts +0 -59
- package/dist/src/handlers/cloud-handler.js +0 -348
- package/dist/src/handlers/cloud-handler.js.map +0 -1
- package/dist/src/handlers/tool-registry.d.ts +0 -23
- package/dist/src/handlers/tool-registry.js +0 -68
- package/dist/src/handlers/tool-registry.js.map +0 -1
- package/dist/src/handlers/tool-types.d.ts +0 -167
- package/dist/src/handlers/tool-types.js +0 -7
- package/dist/src/handlers/tool-types.js.map +0 -1
- package/dist/src/test-all-functions.d.ts +0 -15
- package/dist/src/test-all-functions.js +0 -163
- package/dist/src/test-all-functions.js.map +0 -1
- package/dist/src/types/mcp-tools.d.ts +0 -53
- package/dist/src/types/mcp-tools.js +0 -77
- package/dist/src/types/mcp-tools.js.map +0 -1
- package/dist/src/types/tool-visibility.d.ts +0 -36
- package/dist/src/types/tool-visibility.js +0 -551
- package/dist/src/types/tool-visibility.js.map +0 -1
- package/dist/src/utils/auto-path-detection.d.ts +0 -26
- package/dist/src/utils/auto-path-detection.js +0 -198
- package/dist/src/utils/auto-path-detection.js.map +0 -1
- package/dist/src/utils/championship-format.d.ts +0 -30
- package/dist/src/utils/championship-format.js +0 -81
- package/dist/src/utils/championship-format.js.map +0 -1
- package/dist/src/utils/cli-detector.d.ts +0 -17
- package/dist/src/utils/cli-detector.js +0 -247
- package/dist/src/utils/cli-detector.js.map +0 -1
- package/dist/src/utils/display-protocol.d.ts +0 -57
- package/dist/src/utils/display-protocol.js +0 -131
- package/dist/src/utils/display-protocol.js.map +0 -1
- package/dist/src/utils/username-detector.d.ts +0 -27
- package/dist/src/utils/username-detector.js +0 -90
- package/dist/src/utils/username-detector.js.map +0 -1
- package/dist/src/utils/visual-style.d.ts +0 -62
- package/dist/src/utils/visual-style.js +0 -166
- package/dist/src/utils/visual-style.js.map +0 -1
- package/scripts/postinstall.js +0 -50
- package/skill/SKILL.md +0 -385
|
@@ -1,74 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/auto.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAyBH,kCAoEC;AA3FD,0DAAqD;AACrD,uCAAyD;AACzD,yCAA4D;AAgB5D;;;;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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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 {};
|
|
@@ -1,198 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
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>;
|