faf-mcp 2.3.0 → 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 +42 -3
- package/CLAUDE.md +7 -7
- package/README.md +73 -74
- 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 +124 -688
- 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 +17 -14
- package/project.faf +23 -5
- package/scripts/check-engines.mjs +53 -0
- package/scripts/run-tests.sh +54 -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,463 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 🏎️ Championship .faf Generator
|
|
4
|
-
* Uses FAB-FORMATS Power Unit for 86%+ context extraction
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.generateFafFromProject = generateFafFromProject;
|
|
11
|
-
const fs_1 = require("fs");
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const file_utils_1 = require("../utils/file-utils");
|
|
14
|
-
const yaml_generator_1 = require("../utils/yaml-generator");
|
|
15
|
-
const fab_formats_processor_1 = require("../engines/fab-formats-processor");
|
|
16
|
-
const relentless_context_extractor_1 = require("../engines/relentless-context-extractor");
|
|
17
|
-
async function generateFafFromProject(options) {
|
|
18
|
-
const { projectType, projectRoot } = options;
|
|
19
|
-
// Validate projectRoot
|
|
20
|
-
if (!projectRoot || typeof projectRoot !== 'string') {
|
|
21
|
-
throw new Error(`Invalid projectRoot: ${projectRoot}. Expected a valid directory path.`);
|
|
22
|
-
}
|
|
23
|
-
// Read README.md if available (HUMAN CONTEXT SOURCE)
|
|
24
|
-
let readmeData = {};
|
|
25
|
-
const readmePath = path_1.default.join(projectRoot, "README.md");
|
|
26
|
-
try {
|
|
27
|
-
const readmeContent = await fs_1.promises.readFile(readmePath, "utf-8");
|
|
28
|
-
readmeData = extractReadmeContext(readmeContent);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// Continue without README data
|
|
32
|
-
}
|
|
33
|
-
// Read package.json if available (JavaScript projects)
|
|
34
|
-
const packageJsonPath = await (0, file_utils_1.findPackageJson)(projectRoot);
|
|
35
|
-
let packageData = {};
|
|
36
|
-
if (packageJsonPath) {
|
|
37
|
-
try {
|
|
38
|
-
const content = await fs_1.promises.readFile(packageJsonPath, "utf-8");
|
|
39
|
-
packageData = JSON.parse(content);
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
// Continue without package.json data
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Read pyproject.toml if available (Python projects)
|
|
46
|
-
const pyprojectPath = await (0, file_utils_1.findPyprojectToml)(projectRoot);
|
|
47
|
-
const pyprojectData = {};
|
|
48
|
-
if (pyprojectPath) {
|
|
49
|
-
try {
|
|
50
|
-
const content = await fs_1.promises.readFile(pyprojectPath, "utf-8");
|
|
51
|
-
// Basic parsing for Python projects
|
|
52
|
-
if (content.includes('[tool.poetry]')) {
|
|
53
|
-
pyprojectData.packageManager = 'Poetry';
|
|
54
|
-
}
|
|
55
|
-
const nameMatch = content.match(/name\s*=\s*"([^"]+)"/);
|
|
56
|
-
if (nameMatch) {
|
|
57
|
-
pyprojectData.name = nameMatch[1];
|
|
58
|
-
}
|
|
59
|
-
const descMatch = content.match(/description\s*=\s*"([^"]+)"/);
|
|
60
|
-
if (descMatch) {
|
|
61
|
-
pyprojectData.description = descMatch[1];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Continue without pyproject.toml data
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Read requirements.txt if available (Python projects)
|
|
69
|
-
const requirementsPath = await (0, file_utils_1.findRequirementsTxt)(projectRoot);
|
|
70
|
-
const requirementsData = {};
|
|
71
|
-
if (requirementsPath) {
|
|
72
|
-
try {
|
|
73
|
-
const content = await fs_1.promises.readFile(requirementsPath, "utf-8");
|
|
74
|
-
const lines = content.split('\n').filter(line => line && !line.startsWith('#'));
|
|
75
|
-
requirementsData.dependencies = lines;
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
// Continue without requirements.txt data
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// 🏎️ CHAMPIONSHIP ENGINE - FAB-FORMATS Power Unit with 150+ handlers!
|
|
82
|
-
const fabProcessor = new fab_formats_processor_1.FabFormatsProcessor();
|
|
83
|
-
let fabAnalysis;
|
|
84
|
-
try {
|
|
85
|
-
fabAnalysis = await fabProcessor.processFiles(projectRoot);
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// Fallback to empty analysis if discovery fails
|
|
89
|
-
fabAnalysis = {
|
|
90
|
-
results: [],
|
|
91
|
-
totalBonus: 0,
|
|
92
|
-
context: {},
|
|
93
|
-
qualityMetrics: {
|
|
94
|
-
highestGrade: 'MINIMAL',
|
|
95
|
-
averageScore: 0,
|
|
96
|
-
filesCovered: 0,
|
|
97
|
-
intelligenceDepth: 0
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
// 🏎️ AERO PACKAGE - RelentlessContextExtractor for human context!
|
|
102
|
-
let humanContext;
|
|
103
|
-
try {
|
|
104
|
-
humanContext = await relentless_context_extractor_1.relentlessExtractor.extractFromProject(projectRoot);
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// Fallback to empty context
|
|
108
|
-
humanContext = null;
|
|
109
|
-
}
|
|
110
|
-
// TypeScript configuration analysis
|
|
111
|
-
const tsConfigPath = await (0, file_utils_1.findTsConfig)(projectRoot);
|
|
112
|
-
let tsContext = null;
|
|
113
|
-
if (tsConfigPath) {
|
|
114
|
-
const result = await (0, file_utils_1.analyzeTsConfig)(tsConfigPath);
|
|
115
|
-
if (result) {
|
|
116
|
-
tsContext = result;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// START ENHANCED SCORING - Championship grade with FAB-FORMATS!
|
|
120
|
-
// HONEST SCORING: 0% is a valid score - no free points for merely existing!
|
|
121
|
-
let enhancedScore = 0;
|
|
122
|
-
// Map all discovered slots (21-slot system)
|
|
123
|
-
const contextSlotsFilled = {};
|
|
124
|
-
// IF: Quick mode data takes priority (user explicitly provided it)
|
|
125
|
-
if (options.projectGoal) {
|
|
126
|
-
contextSlotsFilled['project_goal'] = options.projectGoal;
|
|
127
|
-
}
|
|
128
|
-
if (options.projectName) {
|
|
129
|
-
contextSlotsFilled['project_name'] = options.projectName;
|
|
130
|
-
}
|
|
131
|
-
if (options.mainLanguage) {
|
|
132
|
-
contextSlotsFilled['main_language'] = options.mainLanguage;
|
|
133
|
-
}
|
|
134
|
-
if (options.framework && options.framework !== 'none') {
|
|
135
|
-
contextSlotsFilled['framework'] = options.framework;
|
|
136
|
-
}
|
|
137
|
-
if (options.hosting && options.hosting !== 'cloud') {
|
|
138
|
-
contextSlotsFilled['hosting'] = options.hosting;
|
|
139
|
-
}
|
|
140
|
-
// Apply championship context extraction
|
|
141
|
-
if (fabAnalysis.context) {
|
|
142
|
-
const ctx = fabAnalysis.context;
|
|
143
|
-
// Technical slots (15) - only fill if not already set by quick mode
|
|
144
|
-
if (ctx.projectName && !contextSlotsFilled['project_name'])
|
|
145
|
-
contextSlotsFilled['project_name'] = ctx.projectName;
|
|
146
|
-
if (ctx.projectGoal && !contextSlotsFilled['project_goal'])
|
|
147
|
-
contextSlotsFilled['project_goal'] = ctx.projectGoal;
|
|
148
|
-
if (ctx.mainLanguage)
|
|
149
|
-
contextSlotsFilled['main_language'] = ctx.mainLanguage;
|
|
150
|
-
if (ctx.framework)
|
|
151
|
-
contextSlotsFilled['framework'] = ctx.framework;
|
|
152
|
-
if (ctx.backend)
|
|
153
|
-
contextSlotsFilled['backend'] = ctx.backend;
|
|
154
|
-
if (ctx.server)
|
|
155
|
-
contextSlotsFilled['server'] = ctx.server;
|
|
156
|
-
if (ctx.apiType)
|
|
157
|
-
contextSlotsFilled['api_type'] = ctx.apiType;
|
|
158
|
-
if (ctx.database)
|
|
159
|
-
contextSlotsFilled['database'] = ctx.database;
|
|
160
|
-
if (ctx.hosting)
|
|
161
|
-
contextSlotsFilled['hosting'] = ctx.hosting;
|
|
162
|
-
if (ctx.cicd)
|
|
163
|
-
contextSlotsFilled['cicd'] = ctx.cicd;
|
|
164
|
-
if (ctx.buildTool)
|
|
165
|
-
contextSlotsFilled['build_tool'] = ctx.buildTool;
|
|
166
|
-
if (ctx.packageManager)
|
|
167
|
-
contextSlotsFilled['package_manager'] = ctx.packageManager;
|
|
168
|
-
if (ctx.testFramework)
|
|
169
|
-
contextSlotsFilled['test_framework'] = ctx.testFramework;
|
|
170
|
-
if (ctx.linter)
|
|
171
|
-
contextSlotsFilled['linter'] = ctx.linter;
|
|
172
|
-
// Human context slots (6 W's)
|
|
173
|
-
if (ctx.targetUser)
|
|
174
|
-
contextSlotsFilled['who'] = ctx.targetUser;
|
|
175
|
-
if (ctx.coreProblem)
|
|
176
|
-
contextSlotsFilled['what'] = ctx.coreProblem;
|
|
177
|
-
if (ctx.missionPurpose)
|
|
178
|
-
contextSlotsFilled['why'] = ctx.missionPurpose;
|
|
179
|
-
if (ctx.deploymentMarket)
|
|
180
|
-
contextSlotsFilled['where'] = ctx.deploymentMarket;
|
|
181
|
-
if (ctx.timeline)
|
|
182
|
-
contextSlotsFilled['when'] = ctx.timeline;
|
|
183
|
-
if (ctx.approach)
|
|
184
|
-
contextSlotsFilled['how'] = ctx.approach;
|
|
185
|
-
}
|
|
186
|
-
// Apply RELENTLESS human context extraction (overrides if higher confidence)
|
|
187
|
-
if (humanContext) {
|
|
188
|
-
if (humanContext.who.confidence === 'CERTAIN' || !contextSlotsFilled['who']) {
|
|
189
|
-
contextSlotsFilled['who'] = humanContext.who.value;
|
|
190
|
-
}
|
|
191
|
-
if (humanContext.what.confidence === 'CERTAIN' || !contextSlotsFilled['what']) {
|
|
192
|
-
contextSlotsFilled['what'] = humanContext.what.value;
|
|
193
|
-
}
|
|
194
|
-
if (humanContext.why.confidence === 'CERTAIN' || !contextSlotsFilled['why']) {
|
|
195
|
-
contextSlotsFilled['why'] = humanContext.why.value;
|
|
196
|
-
}
|
|
197
|
-
if (humanContext.where.confidence === 'CERTAIN' || !contextSlotsFilled['where']) {
|
|
198
|
-
contextSlotsFilled['where'] = humanContext.where.value;
|
|
199
|
-
}
|
|
200
|
-
if (humanContext.when.confidence === 'CERTAIN' || !contextSlotsFilled['when']) {
|
|
201
|
-
contextSlotsFilled['when'] = humanContext.when.value;
|
|
202
|
-
}
|
|
203
|
-
if (humanContext.how.confidence === 'CERTAIN' || !contextSlotsFilled['how']) {
|
|
204
|
-
contextSlotsFilled['how'] = humanContext.how.value;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
// CLI-specific detection and smart slot reuse
|
|
208
|
-
const deps = {
|
|
209
|
-
...packageData.dependencies,
|
|
210
|
-
...packageData.devDependencies
|
|
211
|
-
};
|
|
212
|
-
const isCLI = packageData.bin ||
|
|
213
|
-
packageData.name?.includes('cli') ||
|
|
214
|
-
packageData.keywords?.includes('cli') ||
|
|
215
|
-
packageData.keywords?.includes('command-line') ||
|
|
216
|
-
deps?.commander ||
|
|
217
|
-
deps?.yargs ||
|
|
218
|
-
deps?.oclif ||
|
|
219
|
-
deps?.inquirer;
|
|
220
|
-
if (isCLI) {
|
|
221
|
-
// Smart slot reuse for CLI projects
|
|
222
|
-
contextSlotsFilled['framework'] = 'CLI'; // frontend = CLI
|
|
223
|
-
contextSlotsFilled['api_type'] = 'CLI';
|
|
224
|
-
contextSlotsFilled['hosting'] = 'npm registry';
|
|
225
|
-
contextSlotsFilled['backend'] = 'Node.js';
|
|
226
|
-
// Detect terminal UI framework
|
|
227
|
-
if (deps?.chalk)
|
|
228
|
-
contextSlotsFilled['css_framework'] = 'chalk (terminal colors)';
|
|
229
|
-
else if (deps?.colors)
|
|
230
|
-
contextSlotsFilled['css_framework'] = 'colors';
|
|
231
|
-
else if (deps?.ora)
|
|
232
|
-
contextSlotsFilled['css_framework'] = 'ora';
|
|
233
|
-
// Detect interactive framework
|
|
234
|
-
if (deps?.inquirer)
|
|
235
|
-
contextSlotsFilled['ui_library'] = 'inquirer (interactive prompts)';
|
|
236
|
-
else if (deps?.prompts)
|
|
237
|
-
contextSlotsFilled['ui_library'] = 'prompts';
|
|
238
|
-
else if (deps?.enquirer)
|
|
239
|
-
contextSlotsFilled['ui_library'] = 'enquirer';
|
|
240
|
-
// Detect CLI framework
|
|
241
|
-
if (deps?.commander)
|
|
242
|
-
contextSlotsFilled['cli_framework'] = 'commander';
|
|
243
|
-
else if (deps?.yargs)
|
|
244
|
-
contextSlotsFilled['cli_framework'] = 'yargs';
|
|
245
|
-
else if (deps?.oclif)
|
|
246
|
-
contextSlotsFilled['cli_framework'] = 'oclif';
|
|
247
|
-
// Detect runtime
|
|
248
|
-
if (packageData.engines?.node) {
|
|
249
|
-
contextSlotsFilled['runtime'] = `Node.js ${packageData.engines.node}`;
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
contextSlotsFilled['runtime'] = 'Node.js v16+';
|
|
253
|
-
}
|
|
254
|
-
// Detect build system
|
|
255
|
-
if (deps?.typescript || deps?.['@types/node']) {
|
|
256
|
-
contextSlotsFilled['build_tool'] = 'TypeScript (tsc)';
|
|
257
|
-
}
|
|
258
|
-
// Detect testing
|
|
259
|
-
if (deps?.jest)
|
|
260
|
-
contextSlotsFilled['test_framework'] = 'Jest';
|
|
261
|
-
else if (deps?.mocha)
|
|
262
|
-
contextSlotsFilled['test_framework'] = 'Mocha';
|
|
263
|
-
else if (deps?.vitest)
|
|
264
|
-
contextSlotsFilled['test_framework'] = 'Vitest';
|
|
265
|
-
// Detect CI/CD - check for .github/workflows directory
|
|
266
|
-
try {
|
|
267
|
-
const githubWorkflowsPath = path_1.default.join(projectRoot, '.github', 'workflows');
|
|
268
|
-
const githubWorkflowsExists = await fs_1.promises.access(githubWorkflowsPath).then(() => true).catch(() => false);
|
|
269
|
-
if (githubWorkflowsExists) {
|
|
270
|
-
contextSlotsFilled['cicd'] = 'GitHub Actions';
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
// Continue without CI/CD detection
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
// Override with package.json if more specific
|
|
278
|
-
if (packageData.name && !contextSlotsFilled['project_name']) {
|
|
279
|
-
contextSlotsFilled['project_name'] = packageData.name;
|
|
280
|
-
}
|
|
281
|
-
if (packageData.description && !contextSlotsFilled['project_goal']) {
|
|
282
|
-
contextSlotsFilled['project_goal'] = packageData.description;
|
|
283
|
-
}
|
|
284
|
-
// Override with pyproject.toml for Python projects
|
|
285
|
-
if (pyprojectData.name && !contextSlotsFilled['project_name']) {
|
|
286
|
-
contextSlotsFilled['project_name'] = pyprojectData.name;
|
|
287
|
-
}
|
|
288
|
-
if (pyprojectData.description && !contextSlotsFilled['project_goal']) {
|
|
289
|
-
contextSlotsFilled['project_goal'] = pyprojectData.description;
|
|
290
|
-
}
|
|
291
|
-
// Apply README data (human context priority)
|
|
292
|
-
if (readmeData.projectName && !contextSlotsFilled['project_name']) {
|
|
293
|
-
contextSlotsFilled['project_name'] = readmeData.projectName;
|
|
294
|
-
}
|
|
295
|
-
if (readmeData.description && !contextSlotsFilled['project_goal']) {
|
|
296
|
-
contextSlotsFilled['project_goal'] = readmeData.description;
|
|
297
|
-
}
|
|
298
|
-
if (readmeData.targetUser && !contextSlotsFilled['who']) {
|
|
299
|
-
contextSlotsFilled['who'] = readmeData.targetUser;
|
|
300
|
-
}
|
|
301
|
-
// Calculate slot-based score
|
|
302
|
-
const technicalSlots = [
|
|
303
|
-
'project_name', 'project_goal', 'main_language', 'framework',
|
|
304
|
-
'backend', 'server', 'api_type', 'database', 'hosting',
|
|
305
|
-
'cicd', 'build_tool', 'package_manager', 'test_framework', 'linter'
|
|
306
|
-
];
|
|
307
|
-
const humanSlots = ['who', 'what', 'why', 'where', 'when', 'how'];
|
|
308
|
-
let technicalFilled = 0;
|
|
309
|
-
let humanFilled = 0;
|
|
310
|
-
technicalSlots.forEach(slot => {
|
|
311
|
-
if (contextSlotsFilled[slot]) {
|
|
312
|
-
technicalFilled++;
|
|
313
|
-
enhancedScore += 4; // Each technical slot = 4%
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
humanSlots.forEach(slot => {
|
|
317
|
-
if (contextSlotsFilled[slot]) {
|
|
318
|
-
humanFilled++;
|
|
319
|
-
enhancedScore += 5; // Each human slot = 5%
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
// Quality bonuses from FAB-FORMATS
|
|
323
|
-
if (fabAnalysis.qualityMetrics) {
|
|
324
|
-
const grade = fabAnalysis.qualityMetrics.highestGrade;
|
|
325
|
-
if (grade === 'EXCEPTIONAL') {
|
|
326
|
-
enhancedScore += 20;
|
|
327
|
-
}
|
|
328
|
-
else if (grade === 'PROFESSIONAL') {
|
|
329
|
-
enhancedScore += 15;
|
|
330
|
-
}
|
|
331
|
-
else if (grade === 'GOOD') {
|
|
332
|
-
enhancedScore += 10;
|
|
333
|
-
}
|
|
334
|
-
else if (grade === 'BASIC') {
|
|
335
|
-
enhancedScore += 5;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
// Intelligence depth bonus
|
|
339
|
-
if (fabAnalysis.qualityMetrics.intelligenceDepth > 80) {
|
|
340
|
-
enhancedScore += 15;
|
|
341
|
-
}
|
|
342
|
-
else if (fabAnalysis.qualityMetrics.intelligenceDepth > 60) {
|
|
343
|
-
enhancedScore += 10;
|
|
344
|
-
}
|
|
345
|
-
else if (fabAnalysis.qualityMetrics.intelligenceDepth > 40) {
|
|
346
|
-
enhancedScore += 5;
|
|
347
|
-
}
|
|
348
|
-
// TypeScript bonus
|
|
349
|
-
if (tsContext) {
|
|
350
|
-
enhancedScore += 5;
|
|
351
|
-
if (tsContext.strictMode) {
|
|
352
|
-
enhancedScore += 5;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
// Cap at 99% (100% requires human verification)
|
|
356
|
-
const fafScore = Math.min(Math.round(enhancedScore), 99);
|
|
357
|
-
// Build confidence level
|
|
358
|
-
let _confidence = 'LOW';
|
|
359
|
-
if (fafScore >= 85)
|
|
360
|
-
_confidence = 'HIGH';
|
|
361
|
-
else if (fafScore >= 70)
|
|
362
|
-
_confidence = 'GOOD';
|
|
363
|
-
else if (fafScore >= 50)
|
|
364
|
-
_confidence = 'MODERATE';
|
|
365
|
-
// Build quality indicators
|
|
366
|
-
const qualityIndicators = [];
|
|
367
|
-
if (fabAnalysis.qualityMetrics.highestGrade === 'EXCEPTIONAL') {
|
|
368
|
-
qualityIndicators.push('Exceptional project structure');
|
|
369
|
-
}
|
|
370
|
-
if (fabAnalysis.qualityMetrics.filesCovered > 10) {
|
|
371
|
-
qualityIndicators.push('Comprehensive file coverage');
|
|
372
|
-
}
|
|
373
|
-
if (technicalFilled >= 10) {
|
|
374
|
-
qualityIndicators.push('Rich technical context');
|
|
375
|
-
}
|
|
376
|
-
if (humanFilled >= 3) {
|
|
377
|
-
qualityIndicators.push('Strong human context');
|
|
378
|
-
}
|
|
379
|
-
if (tsContext?.strictMode) {
|
|
380
|
-
qualityIndicators.push('TypeScript strict mode');
|
|
381
|
-
}
|
|
382
|
-
// Extract the stack for display
|
|
383
|
-
const _stack = {
|
|
384
|
-
frontend: contextSlotsFilled['framework'] || packageData.dependencies?.react ? 'React' : undefined,
|
|
385
|
-
backend: contextSlotsFilled['backend'],
|
|
386
|
-
database: contextSlotsFilled['database'],
|
|
387
|
-
build: contextSlotsFilled['build_tool'],
|
|
388
|
-
package_manager: contextSlotsFilled['package_manager'] || 'npm',
|
|
389
|
-
hosting: contextSlotsFilled['hosting'],
|
|
390
|
-
};
|
|
391
|
-
// Build the data structure for generateFafContent
|
|
392
|
-
const fafData = {
|
|
393
|
-
projectName: contextSlotsFilled['project_name'] || path_1.default.basename(projectRoot),
|
|
394
|
-
projectGoal: contextSlotsFilled['project_goal'] || 'Build amazing software',
|
|
395
|
-
mainLanguage: contextSlotsFilled['main_language'] || 'JavaScript',
|
|
396
|
-
framework: contextSlotsFilled['framework'] || 'None',
|
|
397
|
-
cssFramework: contextSlotsFilled['css_framework'] || undefined,
|
|
398
|
-
uiLibrary: contextSlotsFilled['ui_library'] || undefined,
|
|
399
|
-
stateManagement: undefined,
|
|
400
|
-
backend: contextSlotsFilled['backend'] || 'None',
|
|
401
|
-
apiType: contextSlotsFilled['api_type'] || 'REST',
|
|
402
|
-
server: contextSlotsFilled['runtime'] || contextSlotsFilled['server'] || 'None',
|
|
403
|
-
database: contextSlotsFilled['database'] || 'None',
|
|
404
|
-
connection: 'None',
|
|
405
|
-
hosting: contextSlotsFilled['hosting'] || 'None',
|
|
406
|
-
buildTool: contextSlotsFilled['build_tool'] || 'None',
|
|
407
|
-
packageManager: contextSlotsFilled['package_manager'] || 'npm',
|
|
408
|
-
cicd: contextSlotsFilled['cicd'] || 'None',
|
|
409
|
-
fafScore,
|
|
410
|
-
slotBasedPercentage: Math.round(((technicalFilled + humanFilled) / 21) * 100),
|
|
411
|
-
projectType, // Pass project type for compiler slot-filling patterns
|
|
412
|
-
// Human Context (Project Details)
|
|
413
|
-
targetUser: contextSlotsFilled['who'],
|
|
414
|
-
coreProblem: contextSlotsFilled['what'],
|
|
415
|
-
missionPurpose: contextSlotsFilled['why'],
|
|
416
|
-
deploymentMarket: contextSlotsFilled['where'],
|
|
417
|
-
timeline: contextSlotsFilled['when'],
|
|
418
|
-
approach: contextSlotsFilled['how'],
|
|
419
|
-
// Quality indicators
|
|
420
|
-
qualityIndicators,
|
|
421
|
-
fabFormatsIntelligence: {
|
|
422
|
-
filesAnalyzed: fabAnalysis.results.length,
|
|
423
|
-
totalIntelligence: fabAnalysis.totalBonus,
|
|
424
|
-
highestGrade: fabAnalysis.qualityMetrics.highestGrade,
|
|
425
|
-
depth: fabAnalysis.qualityMetrics.intelligenceDepth
|
|
426
|
-
}
|
|
427
|
-
};
|
|
428
|
-
// Generate YAML content
|
|
429
|
-
const content = (0, yaml_generator_1.generateFafContent)(fafData);
|
|
430
|
-
return content;
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Extract context from README.md
|
|
434
|
-
*/
|
|
435
|
-
function extractReadmeContext(content) {
|
|
436
|
-
const context = {};
|
|
437
|
-
// Extract project name from title
|
|
438
|
-
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
439
|
-
if (titleMatch) {
|
|
440
|
-
context.projectName = titleMatch[1].trim();
|
|
441
|
-
}
|
|
442
|
-
// Extract description from first paragraph or description section
|
|
443
|
-
const descMatch = content.match(/^#+\s+(?:description|about|overview|introduction)\s*\n+(.+?)(?:\n#|\n\n#|$)/ims);
|
|
444
|
-
if (descMatch) {
|
|
445
|
-
context.description = descMatch[1].trim().substring(0, 200);
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
// Try to get first paragraph after title
|
|
449
|
-
const firstParaMatch = content.match(/^#\s+.+\n+(.+?)(?:\n#|\n\n#|$)/ms);
|
|
450
|
-
if (firstParaMatch) {
|
|
451
|
-
context.description = firstParaMatch[1].trim().substring(0, 200);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
// Look for target users
|
|
455
|
-
if (content.match(/##\s+(?:for\s+)?(?:developers|engineers|teams)/i)) {
|
|
456
|
-
context.targetUser = 'Developers';
|
|
457
|
-
}
|
|
458
|
-
else if (content.match(/##\s+(?:for\s+)?(?:users|customers|clients)/i)) {
|
|
459
|
-
context.targetUser = 'End users';
|
|
460
|
-
}
|
|
461
|
-
return context;
|
|
462
|
-
}
|
|
463
|
-
//# sourceMappingURL=faf-generator-championship.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"faf-generator-championship.js","sourceRoot":"","sources":["../../../../src/faf-core/generators/faf-generator-championship.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Block markers for the faf-managed front section. Markdown files use HTML
|
|
3
|
-
* comments; non-markdown files (.cursorrules) pass hash-comment markers.
|
|
4
|
-
*/
|
|
5
|
-
export declare const FAF_START = "<!-- faf:start -->";
|
|
6
|
-
export declare const FAF_END = "<!-- faf:end -->";
|
|
7
|
-
/**
|
|
8
|
-
* Non-destructively write a faf-managed block into a file.
|
|
9
|
-
*
|
|
10
|
-
* - no file -> create it with just the block
|
|
11
|
-
* - markers present -> replace ONLY between them (update in place)
|
|
12
|
-
* - legacy faf file (metastamp, no markers) -> reclaim in place (no duplication)
|
|
13
|
-
* - genuine user file -> prefix the block; preserve everything below
|
|
14
|
-
*
|
|
15
|
-
* Idempotent: re-runs update the block, never duplicate or destroy user content.
|
|
16
|
-
* faf owns what's between the markers; the user owns everything else.
|
|
17
|
-
* Enhance, never replace.
|
|
18
|
-
*/
|
|
19
|
-
export declare function injectFafBlock(path: string, block: string, start?: string, end?: string): Promise<void>;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FAF_END = exports.FAF_START = void 0;
|
|
4
|
-
exports.injectFafBlock = injectFafBlock;
|
|
5
|
-
const fs_1 = require("fs");
|
|
6
|
-
/**
|
|
7
|
-
* Block markers for the faf-managed front section. Markdown files use HTML
|
|
8
|
-
* comments; non-markdown files (.cursorrules) pass hash-comment markers.
|
|
9
|
-
*/
|
|
10
|
-
exports.FAF_START = '<!-- faf:start -->';
|
|
11
|
-
exports.FAF_END = '<!-- faf:end -->';
|
|
12
|
-
/**
|
|
13
|
-
* faf's own metastamp fingerprint. Every faf-generated file begins with it and a
|
|
14
|
-
* user never hand-writes it — so a markerless file led by it is legacy faf output
|
|
15
|
-
* we can safely reclaim, never genuine user content.
|
|
16
|
-
*/
|
|
17
|
-
const FAF_METASTAMP = '<!-- faf:';
|
|
18
|
-
/**
|
|
19
|
-
* Non-destructively write a faf-managed block into a file.
|
|
20
|
-
*
|
|
21
|
-
* - no file -> create it with just the block
|
|
22
|
-
* - markers present -> replace ONLY between them (update in place)
|
|
23
|
-
* - legacy faf file (metastamp, no markers) -> reclaim in place (no duplication)
|
|
24
|
-
* - genuine user file -> prefix the block; preserve everything below
|
|
25
|
-
*
|
|
26
|
-
* Idempotent: re-runs update the block, never duplicate or destroy user content.
|
|
27
|
-
* faf owns what's between the markers; the user owns everything else.
|
|
28
|
-
* Enhance, never replace.
|
|
29
|
-
*/
|
|
30
|
-
async function injectFafBlock(path, block, start = exports.FAF_START, end = exports.FAF_END) {
|
|
31
|
-
const wrapped = `${start}\n${block.trim()}\n${end}`;
|
|
32
|
-
let existing = null;
|
|
33
|
-
try {
|
|
34
|
-
existing = await fs_1.promises.readFile(path, 'utf-8');
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
existing = null; // file does not exist yet
|
|
38
|
-
}
|
|
39
|
-
if (existing === null) {
|
|
40
|
-
await fs_1.promises.writeFile(path, `${wrapped}\n`, 'utf-8');
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const s = existing.indexOf(start);
|
|
44
|
-
const e = existing.indexOf(end);
|
|
45
|
-
if (s !== -1 && e !== -1 && e > s) {
|
|
46
|
-
await fs_1.promises.writeFile(path, existing.slice(0, s) + wrapped + existing.slice(e + end.length), 'utf-8');
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (existing.trimStart().startsWith(FAF_METASTAMP)) {
|
|
50
|
-
// Legacy faf output — reclaim in place, no duplication.
|
|
51
|
-
await fs_1.promises.writeFile(path, `${wrapped}\n`, 'utf-8');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
// Genuine user file — prefix the block, preserve everything.
|
|
55
|
-
await fs_1.promises.writeFile(path, `${wrapped}\n\n${existing}`, 'utf-8');
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=inject.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/faf-core/inject.ts"],"names":[],"mappings":";;;AA4BA,wCAmCC;AA/DD,2BAAoC;AAEpC;;;GAGG;AACU,QAAA,SAAS,GAAG,oBAAoB,CAAC;AACjC,QAAA,OAAO,GAAG,kBAAkB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAa,EACb,QAAgB,iBAAS,EACzB,MAAc,eAAO;IAErB,MAAM,OAAO,GAAG,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;IAEpD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,IAAI,CAAC,CAAC,0BAA0B;IAC7C,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACnG,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,wDAAwD;QACxD,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,OAAO,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parsers Index - v4.5.0 Interop Edition
|
|
3
|
-
*
|
|
4
|
-
* Re-exports all parser modules for convenient access.
|
|
5
|
-
*/
|
|
6
|
-
export * from './agents-parser.js';
|
|
7
|
-
export * from './cursorrules-parser.js';
|
|
8
|
-
export * from './gemini-parser.js';
|
|
9
|
-
export * from './conductor-parser.js';
|
|
10
|
-
export * from './slot-counter.js';
|
|
11
|
-
export * from './github-extractor.js';
|
|
12
|
-
export * from './faf-git-generator.js';
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Parsers Index - v4.5.0 Interop Edition
|
|
4
|
-
*
|
|
5
|
-
* Re-exports all parser modules for convenient access.
|
|
6
|
-
*/
|
|
7
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
-
if (k2 === undefined) k2 = k;
|
|
9
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(o, k2, desc);
|
|
14
|
-
}) : (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
o[k2] = m[k];
|
|
17
|
-
}));
|
|
18
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
__exportStar(require("./agents-parser.js"), exports);
|
|
23
|
-
__exportStar(require("./cursorrules-parser.js"), exports);
|
|
24
|
-
__exportStar(require("./gemini-parser.js"), exports);
|
|
25
|
-
__exportStar(require("./conductor-parser.js"), exports);
|
|
26
|
-
__exportStar(require("./slot-counter.js"), exports);
|
|
27
|
-
__exportStar(require("./github-extractor.js"), exports);
|
|
28
|
-
__exportStar(require("./faf-git-generator.js"), exports);
|
|
29
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/faf-core/parsers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,0DAAwC;AACxC,qDAAmC;AACnC,wDAAsC;AACtC,oDAAkC;AAClC,wDAAsC;AACtC,yDAAuC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 🎯 AI|HUMAN Balance Visualizer
|
|
3
|
-
* Visual-only gamification that drives +144% human context completion
|
|
4
|
-
* The 50/50 eternal truth: AI detects tech (50%), humans provide meaning (50%)
|
|
5
|
-
*/
|
|
6
|
-
export interface BalanceData {
|
|
7
|
-
aiPercentage: number;
|
|
8
|
-
humanPercentage: number;
|
|
9
|
-
isBalanced: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare class BalanceVisualizer {
|
|
12
|
-
private static readonly BAR_WIDTH;
|
|
13
|
-
private static readonly CYAN;
|
|
14
|
-
private static readonly ORANGE;
|
|
15
|
-
private static readonly GREEN;
|
|
16
|
-
/**
|
|
17
|
-
* Calculate balance from FAF data
|
|
18
|
-
* Matches fafdev.tools calculation - INDEPENDENT percentages
|
|
19
|
-
* AI: How complete is technical context (0-100%)
|
|
20
|
-
* HUMAN: How complete is human context (0-100%)
|
|
21
|
-
* Perfect balance when both are high and similar
|
|
22
|
-
*/
|
|
23
|
-
static calculateBalance(fafData: any): BalanceData;
|
|
24
|
-
/**
|
|
25
|
-
* Generate the visual balance bar
|
|
26
|
-
* Matches fafdev.tools - single bar showing AI|HUMAN proportion
|
|
27
|
-
*/
|
|
28
|
-
static generateBalanceBar(balance: BalanceData): string;
|
|
29
|
-
/**
|
|
30
|
-
* Generate a compact balance indicator for inline display
|
|
31
|
-
*/
|
|
32
|
-
static generateCompactBalance(balance: BalanceData): string;
|
|
33
|
-
/**
|
|
34
|
-
* Get balance achievement message for gamification
|
|
35
|
-
*/
|
|
36
|
-
static getAchievementMessage(balance: BalanceData): string | null;
|
|
37
|
-
}
|