faf-cli 3.1.5 → 3.2.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/README.md +59 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +90 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.d.ts +19 -3
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +280 -37
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/human.d.ts +19 -0
- package/dist/commands/human.d.ts.map +1 -0
- package/dist/commands/human.js +205 -0
- package/dist/commands/human.js.map +1 -0
- package/dist/commands/readme.d.ts +16 -0
- package/dist/commands/readme.d.ts.map +1 -0
- package/dist/commands/readme.js +453 -0
- package/dist/commands/readme.js.map +1 -0
- package/dist/engines/fab-formats-processor.d.ts +8 -0
- package/dist/engines/fab-formats-processor.d.ts.map +1 -1
- package/dist/engines/fab-formats-processor.js +78 -1
- package/dist/engines/fab-formats-processor.js.map +1 -1
- package/dist/framework-detector.d.ts.map +1 -1
- package/dist/framework-detector.js +7 -0
- package/dist/framework-detector.js.map +1 -1
- package/dist/utils/fab-formats-engine.d.ts +7 -0
- package/dist/utils/fab-formats-engine.d.ts.map +1 -1
- package/dist/utils/fab-formats-engine.js +23 -1
- package/dist/utils/fab-formats-engine.js.map +1 -1
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +20 -1
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/turbo-cat-knowledge.d.ts +2 -0
- package/dist/utils/turbo-cat-knowledge.d.ts.map +1 -1
- package/dist/utils/turbo-cat-knowledge.js +15 -0
- package/dist/utils/turbo-cat-knowledge.js.map +1 -1
- package/dist/utils/turbo-cat.d.ts +7 -0
- package/dist/utils/turbo-cat.d.ts.map +1 -1
- package/dist/utils/turbo-cat.js +30 -2
- package/dist/utils/turbo-cat.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 📖 faf readme - Extract 6 Ws from README intelligently
|
|
4
|
+
* Reads README.md and fills human_context slots smartly
|
|
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.readmeCommand = readmeCommand;
|
|
11
|
+
const colors_1 = require("../fix-once/colors");
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const yaml_1 = require("../fix-once/yaml");
|
|
15
|
+
const championship_style_1 = require("../utils/championship-style");
|
|
16
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
17
|
+
const check_1 = require("./check");
|
|
18
|
+
/**
|
|
19
|
+
* Extract the 6 Ws from README content using intelligent pattern matching
|
|
20
|
+
*/
|
|
21
|
+
function extractSixWs(content, projectName) {
|
|
22
|
+
const result = {
|
|
23
|
+
who: null,
|
|
24
|
+
what: null,
|
|
25
|
+
why: null,
|
|
26
|
+
where: null,
|
|
27
|
+
when: null,
|
|
28
|
+
how: null,
|
|
29
|
+
confidence: 0,
|
|
30
|
+
sources: {}
|
|
31
|
+
};
|
|
32
|
+
let confidencePoints = 0;
|
|
33
|
+
// === WHAT: Project description, purpose (most important - do first) ===
|
|
34
|
+
// Pattern 1: Bold subtitle after H1 (common: **The Crown: Description**)
|
|
35
|
+
const boldSubtitleMatch = content.match(/^#\s+[^\n]+\n+\*\*([^*]+)\*\*/m);
|
|
36
|
+
if (boldSubtitleMatch && boldSubtitleMatch[1]) {
|
|
37
|
+
const extracted = cleanExtract(boldSubtitleMatch[1]);
|
|
38
|
+
if (extracted.length > 10 && extracted.length < 150) {
|
|
39
|
+
result.what = extracted;
|
|
40
|
+
result.sources.what = 'README subtitle';
|
|
41
|
+
confidencePoints += 25;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Pattern 2: Blockquote tagline
|
|
45
|
+
if (!result.what) {
|
|
46
|
+
const blockquoteMatch = content.match(/(?:^|\n)>\s*([^\n]{30,})/m);
|
|
47
|
+
if (blockquoteMatch && blockquoteMatch[1]) {
|
|
48
|
+
const extracted = cleanExtract(blockquoteMatch[1]);
|
|
49
|
+
if (extracted.length > 20 && !extracted.startsWith('[') && !extracted.startsWith('!')) {
|
|
50
|
+
result.what = extracted;
|
|
51
|
+
result.sources.what = 'README tagline';
|
|
52
|
+
confidencePoints += 25;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Pattern 3: First descriptive paragraph after title (skip code blocks, lists)
|
|
57
|
+
if (!result.what) {
|
|
58
|
+
const firstParaMatch = content.match(/^#\s+[^\n]+\n+(?:\*\*[^*]+\*\*\n+)?(?:\*[^\n]+\*\n+)?([A-Z][^#\n`*|]{30,})/m);
|
|
59
|
+
if (firstParaMatch && firstParaMatch[1]) {
|
|
60
|
+
const extracted = cleanExtract(firstParaMatch[1]);
|
|
61
|
+
if (extracted.length > 30 && extracted.length < 250) {
|
|
62
|
+
result.what = extracted;
|
|
63
|
+
result.sources.what = 'README first paragraph';
|
|
64
|
+
confidencePoints += 20;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Pattern 4: TL;DR Solution
|
|
69
|
+
if (!result.what) {
|
|
70
|
+
const tldrMatch = content.match(/##\s*TL;?DR\s*\n+([\s\S]*?)(?=\n##|\n---|\*\*Install|$)/i);
|
|
71
|
+
if (tldrMatch && tldrMatch[1]) {
|
|
72
|
+
const solutionMatch = tldrMatch[1].match(/\*\*Solution:\*\*\s*([^\n]+)/i);
|
|
73
|
+
if (solutionMatch) {
|
|
74
|
+
result.what = cleanExtract(solutionMatch[1]);
|
|
75
|
+
result.sources.what = 'TL;DR Solution';
|
|
76
|
+
confidencePoints += 25;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Pattern 5: "This is..." statement
|
|
81
|
+
if (!result.what) {
|
|
82
|
+
const thisIsMatch = content.match(/This\s+is\s+(?:the\s+)?(?:a\s+)?([^.\n]{20,100})/i);
|
|
83
|
+
if (thisIsMatch && thisIsMatch[1]) {
|
|
84
|
+
result.what = cleanExtract(thisIsMatch[1]);
|
|
85
|
+
result.sources.what = 'README "This is" statement';
|
|
86
|
+
confidencePoints += 18;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Pattern 6: "A single X that..." description
|
|
90
|
+
if (!result.what) {
|
|
91
|
+
const singleThatMatch = content.match(/A\s+single\s+([^.]+that[^.]+)/i);
|
|
92
|
+
if (singleThatMatch && singleThatMatch[1]) {
|
|
93
|
+
result.what = cleanExtract(singleThatMatch[1]);
|
|
94
|
+
result.sources.what = 'README functional description';
|
|
95
|
+
confidencePoints += 18;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// === WHY: Problem/motivation ===
|
|
99
|
+
// Pattern 1: **Problem:** statement
|
|
100
|
+
const problemMatch = content.match(/\*\*Problem:\*\*\s*([^\n]+)/i);
|
|
101
|
+
if (problemMatch && problemMatch[1]) {
|
|
102
|
+
result.why = cleanExtract(problemMatch[1]);
|
|
103
|
+
result.sources.why = 'README problem statement';
|
|
104
|
+
confidencePoints += 20;
|
|
105
|
+
}
|
|
106
|
+
// Pattern 2: ## Why section
|
|
107
|
+
if (!result.why) {
|
|
108
|
+
const whySectionMatch = content.match(/##\s*Why[^#\n]*\n+([\s\S]*?)(?=\n##|$)/i);
|
|
109
|
+
if (whySectionMatch && whySectionMatch[1]) {
|
|
110
|
+
// Get first meaningful line
|
|
111
|
+
const firstLine = whySectionMatch[1].split('\n').find(l => l.trim() && !l.startsWith('|') && !l.startsWith('-'));
|
|
112
|
+
if (firstLine) {
|
|
113
|
+
result.why = cleanExtract(firstLine);
|
|
114
|
+
result.sources.why = 'README Why section';
|
|
115
|
+
confidencePoints += 18;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Pattern 3: Tagline with time savings ("30 seconds replaces 20 minutes")
|
|
120
|
+
if (!result.why) {
|
|
121
|
+
const timeSavingsMatch = content.match(/(\d+\s*(?:seconds?|minutes?|hours?)\s+(?:replaces?|vs|instead of)[^.\n]+)/i);
|
|
122
|
+
if (timeSavingsMatch) {
|
|
123
|
+
result.why = cleanExtract(timeSavingsMatch[1]);
|
|
124
|
+
result.sources.why = 'README value proposition';
|
|
125
|
+
confidencePoints += 15;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Pattern 4: Performance metrics as why (common in tech READMEs)
|
|
129
|
+
if (!result.why) {
|
|
130
|
+
// Look for "Xx smaller/faster" pattern with clean extraction
|
|
131
|
+
const perfMatch = content.match(/(\d+x\s+(?:smaller|faster|more|better))/i);
|
|
132
|
+
if (perfMatch) {
|
|
133
|
+
result.why = perfMatch[1];
|
|
134
|
+
result.sources.why = 'README performance benefit';
|
|
135
|
+
confidencePoints += 12;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// === WHO: Target audience ===
|
|
139
|
+
// Pattern 1: "for X" in description
|
|
140
|
+
const forMatch = content.match(/(?:for|optimized for|designed for)\s+([^.\n]+(?:Grok|xAI|AI|developers?|teams?|users?)[^.\n]*)/i);
|
|
141
|
+
if (forMatch && forMatch[1]) {
|
|
142
|
+
const extracted = cleanExtract(forMatch[1]);
|
|
143
|
+
if (extracted.length >= 5 && extracted.length <= 100) {
|
|
144
|
+
result.who = extracted;
|
|
145
|
+
result.sources.who = 'README target';
|
|
146
|
+
confidencePoints += 15;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Pattern 2: Infer from technology mentions
|
|
150
|
+
if (!result.who) {
|
|
151
|
+
const techTargets = [];
|
|
152
|
+
if (content.includes('Grok') || content.includes('xAI'))
|
|
153
|
+
techTargets.push('xAI/Grok users');
|
|
154
|
+
if (content.includes('Claude'))
|
|
155
|
+
techTargets.push('Claude users');
|
|
156
|
+
if (content.includes('MCP') || content.includes('Model Context Protocol'))
|
|
157
|
+
techTargets.push('MCP developers');
|
|
158
|
+
if (content.includes('WASM') || content.includes('WebAssembly'))
|
|
159
|
+
techTargets.push('WASM/Edge developers');
|
|
160
|
+
if (content.includes('browser') || content.includes('Browser'))
|
|
161
|
+
techTargets.push('browser apps');
|
|
162
|
+
if (techTargets.length > 0) {
|
|
163
|
+
result.who = techTargets.slice(0, 3).join(', ');
|
|
164
|
+
result.sources.who = 'Inferred from technology mentions';
|
|
165
|
+
confidencePoints += 10;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// === WHERE: Platform, environment ===
|
|
169
|
+
const platforms = [];
|
|
170
|
+
// Explicit platform patterns
|
|
171
|
+
if (content.includes('Rust') || content.includes('cargo'))
|
|
172
|
+
platforms.push('Rust/Cargo');
|
|
173
|
+
if (content.includes('WASM') || content.includes('WebAssembly') || content.match(/\.wasm/))
|
|
174
|
+
platforms.push('WASM');
|
|
175
|
+
if (content.includes('browser') || content.includes('Browser'))
|
|
176
|
+
platforms.push('Browser');
|
|
177
|
+
if (content.includes('npm install') || content.includes('package.json'))
|
|
178
|
+
platforms.push('npm');
|
|
179
|
+
if (content.includes('Homebrew') || content.includes('brew install'))
|
|
180
|
+
platforms.push('Homebrew');
|
|
181
|
+
if (content.includes('Zig'))
|
|
182
|
+
platforms.push('Zig');
|
|
183
|
+
if (content.includes('edge function') || content.includes('Edge'))
|
|
184
|
+
platforms.push('Edge');
|
|
185
|
+
if (content.includes('MCP'))
|
|
186
|
+
platforms.push('MCP');
|
|
187
|
+
if (platforms.length > 0) {
|
|
188
|
+
result.where = platforms.slice(0, 4).join(', ');
|
|
189
|
+
result.sources.where = 'README platform mentions';
|
|
190
|
+
confidencePoints += 10;
|
|
191
|
+
}
|
|
192
|
+
// === WHEN: Version, date, or status ===
|
|
193
|
+
// Pattern 1: Explicit date in header
|
|
194
|
+
const dateMatch = content.match(/\*([A-Z][a-z]+\s+(?:Day,?\s+)?[A-Z][a-z]+\s+\d{1,2},?\s+\d{4})\*/);
|
|
195
|
+
if (dateMatch) {
|
|
196
|
+
result.when = dateMatch[1];
|
|
197
|
+
result.sources.when = 'README date';
|
|
198
|
+
confidencePoints += 15;
|
|
199
|
+
}
|
|
200
|
+
// Pattern 2: Status badges/mentions
|
|
201
|
+
if (!result.when) {
|
|
202
|
+
if (content.includes('xAI Exclusive') || content.includes('xAI-exclusive')) {
|
|
203
|
+
result.when = 'xAI Exclusive release';
|
|
204
|
+
result.sources.when = 'README exclusivity';
|
|
205
|
+
confidencePoints += 12;
|
|
206
|
+
}
|
|
207
|
+
else if (content.includes('IANA') || content.includes('registered')) {
|
|
208
|
+
result.when = 'IANA-registered standard';
|
|
209
|
+
result.sources.when = 'README official status';
|
|
210
|
+
confidencePoints += 15;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Pattern 3: Test suite status
|
|
214
|
+
if (!result.when) {
|
|
215
|
+
const testMatch = content.match(/(\d+)\/\1\s*(?:tests?|passing)/i);
|
|
216
|
+
if (testMatch) {
|
|
217
|
+
result.when = `${testMatch[1]} tests passing (production ready)`;
|
|
218
|
+
result.sources.when = 'README test status';
|
|
219
|
+
confidencePoints += 10;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// === HOW: Installation/getting started ===
|
|
223
|
+
// Pattern 1: Quick Start section code block - skip comments, get actual command
|
|
224
|
+
const quickStartSection = content.match(/##\s*Quick\s*Start\s*\n+([\s\S]*?)(?=\n##|$)/i);
|
|
225
|
+
if (quickStartSection) {
|
|
226
|
+
const codeBlock = quickStartSection[1].match(/```(?:bash|sh)?\n([\s\S]*?)```/);
|
|
227
|
+
if (codeBlock) {
|
|
228
|
+
// Find first non-comment line
|
|
229
|
+
const lines = codeBlock[1].split('\n').filter(l => l.trim() && !l.trim().startsWith('#'));
|
|
230
|
+
if (lines.length > 0) {
|
|
231
|
+
result.how = cleanExtract(lines[0]);
|
|
232
|
+
result.sources.how = 'README Quick Start';
|
|
233
|
+
confidencePoints += 15;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Pattern 2: One-click or simple commands
|
|
238
|
+
if (!result.how) {
|
|
239
|
+
const oneClickMatch = content.match(/(?:one-click|one click)[^\n]*\n+```[^\n]*\n([^\n]+)/i);
|
|
240
|
+
if (oneClickMatch) {
|
|
241
|
+
result.how = cleanExtract(oneClickMatch[1]);
|
|
242
|
+
result.sources.how = 'README one-click demo';
|
|
243
|
+
confidencePoints += 15;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Pattern 3: Build command
|
|
247
|
+
if (!result.how) {
|
|
248
|
+
const buildMatch = content.match(/```(?:bash|sh)?\n((?:zig|cargo|npm|yarn)\s+(?:build|install)[^\n]*)/);
|
|
249
|
+
if (buildMatch) {
|
|
250
|
+
result.how = cleanExtract(buildMatch[1]);
|
|
251
|
+
result.sources.how = 'README build command';
|
|
252
|
+
confidencePoints += 12;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Pattern 4: npm/brew install
|
|
256
|
+
if (!result.how) {
|
|
257
|
+
const npmMatch = content.match(/npm\s+install\s+(?:-g\s+)?([^\s\n`]+)/);
|
|
258
|
+
if (npmMatch) {
|
|
259
|
+
result.how = `npm install -g ${npmMatch[1]}`;
|
|
260
|
+
result.sources.how = 'README npm install';
|
|
261
|
+
confidencePoints += 15;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Calculate overall confidence
|
|
265
|
+
const filledCount = [result.who, result.what, result.why, result.where, result.when, result.how]
|
|
266
|
+
.filter(v => v !== null).length;
|
|
267
|
+
// Scale based on filled slots
|
|
268
|
+
result.confidence = Math.min(100, Math.round((confidencePoints / 100) * 100 * (filledCount / 6) * 1.2));
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Clean extracted text
|
|
273
|
+
*/
|
|
274
|
+
function cleanExtract(text) {
|
|
275
|
+
return text
|
|
276
|
+
.replace(/^\s*[-*•]\s*/, '') // Remove list markers
|
|
277
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') // Convert links to text
|
|
278
|
+
.replace(/`([^`]+)`/g, '$1') // Remove code backticks
|
|
279
|
+
.replace(/\*\*([^*]+)\*\*/g, '$1') // Remove bold markers
|
|
280
|
+
.replace(/\*\*$/g, '') // Remove trailing **
|
|
281
|
+
.replace(/^\*\*/g, '') // Remove leading **
|
|
282
|
+
.replace(/\*([^*]+)\*/g, '$1') // Remove italic markers
|
|
283
|
+
.replace(/\*$/g, '') // Remove trailing *
|
|
284
|
+
.replace(/^\*/g, '') // Remove leading *
|
|
285
|
+
.replace(/\s+/g, ' ') // Normalize whitespace
|
|
286
|
+
.trim()
|
|
287
|
+
.slice(0, 200); // Limit length
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Find README file in project
|
|
291
|
+
*/
|
|
292
|
+
async function findReadme(projectRoot) {
|
|
293
|
+
const readmeNames = [
|
|
294
|
+
'README.md',
|
|
295
|
+
'readme.md',
|
|
296
|
+
'Readme.md',
|
|
297
|
+
'README.MD',
|
|
298
|
+
'README',
|
|
299
|
+
'readme',
|
|
300
|
+
'README.txt',
|
|
301
|
+
'readme.txt'
|
|
302
|
+
];
|
|
303
|
+
for (const name of readmeNames) {
|
|
304
|
+
const readmePath = path_1.default.join(projectRoot, name);
|
|
305
|
+
if (await (0, file_utils_1.fileExists)(readmePath)) {
|
|
306
|
+
return readmePath;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Main readme command
|
|
313
|
+
*/
|
|
314
|
+
async function readmeCommand(projectPath, options = {}) {
|
|
315
|
+
const startTime = Date.now();
|
|
316
|
+
const projectRoot = projectPath || process.cwd();
|
|
317
|
+
try {
|
|
318
|
+
console.log();
|
|
319
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(`${championship_style_1.FAF_ICONS.turbo_cat} faf readme - Smart 6 Ws Extraction`));
|
|
320
|
+
console.log(colors_1.chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
321
|
+
// Find README
|
|
322
|
+
const readmePath = options.file
|
|
323
|
+
? path_1.default.resolve(projectRoot, options.file)
|
|
324
|
+
: await findReadme(projectRoot);
|
|
325
|
+
if (!readmePath || !(await (0, file_utils_1.fileExists)(readmePath))) {
|
|
326
|
+
console.log(colors_1.chalk.red(`\n❌ No README found in ${projectRoot}`));
|
|
327
|
+
console.log(colors_1.chalk.yellow(' Create a README.md first, or specify with --file'));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
console.log(colors_1.chalk.gray(`\n Reading: ${path_1.default.basename(readmePath)}`));
|
|
331
|
+
// Read README content
|
|
332
|
+
const readmeContent = await fs_1.promises.readFile(readmePath, 'utf-8');
|
|
333
|
+
// Get project name from package.json if available
|
|
334
|
+
let projectName;
|
|
335
|
+
const packageJsonPath = path_1.default.join(projectRoot, 'package.json');
|
|
336
|
+
if (await (0, file_utils_1.fileExists)(packageJsonPath)) {
|
|
337
|
+
try {
|
|
338
|
+
const pkg = JSON.parse(await fs_1.promises.readFile(packageJsonPath, 'utf-8'));
|
|
339
|
+
projectName = pkg.name;
|
|
340
|
+
}
|
|
341
|
+
catch { /* ignore */ }
|
|
342
|
+
}
|
|
343
|
+
// Extract 6 Ws
|
|
344
|
+
const extracted = extractSixWs(readmeContent, projectName);
|
|
345
|
+
const elapsedTime = Date.now() - startTime;
|
|
346
|
+
// Display results
|
|
347
|
+
console.log();
|
|
348
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.precision} Extracted Human Context (6 Ws):`));
|
|
349
|
+
console.log(colors_1.chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
350
|
+
const displayField = (name, value, source) => {
|
|
351
|
+
const label = colors_1.chalk.cyan(` ${name.padEnd(6)}:`);
|
|
352
|
+
if (value) {
|
|
353
|
+
console.log(`${label} ${colors_1.chalk.white(value)}`);
|
|
354
|
+
if (source && !options.quiet) {
|
|
355
|
+
console.log(colors_1.chalk.gray(` └─ ${source}`));
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
console.log(`${label} ${colors_1.chalk.gray('(not found)')}`);
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
displayField('WHO', extracted.who, extracted.sources.who);
|
|
363
|
+
displayField('WHAT', extracted.what, extracted.sources.what);
|
|
364
|
+
displayField('WHY', extracted.why, extracted.sources.why);
|
|
365
|
+
displayField('WHERE', extracted.where, extracted.sources.where);
|
|
366
|
+
displayField('WHEN', extracted.when, extracted.sources.when);
|
|
367
|
+
displayField('HOW', extracted.how, extracted.sources.how);
|
|
368
|
+
// Show confidence
|
|
369
|
+
const filledCount = [extracted.who, extracted.what, extracted.why, extracted.where, extracted.when, extracted.how]
|
|
370
|
+
.filter(v => v !== null).length;
|
|
371
|
+
console.log();
|
|
372
|
+
console.log(colors_1.chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
373
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(` Filled: ${filledCount}/6 slots`));
|
|
374
|
+
console.log(championship_style_1.FAF_COLORS.fafCyan(` Confidence: ${extracted.confidence}%`));
|
|
375
|
+
console.log(colors_1.chalk.gray(` Time: ${elapsedTime}ms`));
|
|
376
|
+
// Apply to .faf if requested
|
|
377
|
+
if (options.apply) {
|
|
378
|
+
const fafPath = await (0, file_utils_1.findFafFile)(projectRoot);
|
|
379
|
+
if (!fafPath) {
|
|
380
|
+
console.log();
|
|
381
|
+
console.log(colors_1.chalk.yellow(`⚠️ No .faf file found. Run 'faf init' first.`));
|
|
382
|
+
console.log(colors_1.chalk.gray(' Then run: faf readme --apply'));
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
console.log();
|
|
386
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.rocket} Applying to ${path_1.default.basename(fafPath)}...`));
|
|
387
|
+
// Read existing .faf
|
|
388
|
+
const fafContent = await fs_1.promises.readFile(fafPath, 'utf-8');
|
|
389
|
+
const fafData = (0, yaml_1.parse)(fafContent) || {};
|
|
390
|
+
// Merge human_context (only fill empty slots)
|
|
391
|
+
if (!fafData.human_context) {
|
|
392
|
+
fafData.human_context = {};
|
|
393
|
+
}
|
|
394
|
+
let appliedCount = 0;
|
|
395
|
+
let skippedProtected = 0;
|
|
396
|
+
const fields = ['who', 'what', 'why', 'where', 'when', 'how'];
|
|
397
|
+
for (const field of fields) {
|
|
398
|
+
const value = extracted[field];
|
|
399
|
+
const existingValue = fafData.human_context[field];
|
|
400
|
+
const isEmpty = !existingValue || existingValue === null || existingValue === '';
|
|
401
|
+
// Check if field is protected
|
|
402
|
+
if ((0, check_1.isFieldProtected)(fafData, field)) {
|
|
403
|
+
skippedProtected++;
|
|
404
|
+
console.log(colors_1.chalk.gray(` 🔒 Skipped ${field} (protected)`));
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
if (value && (isEmpty || options.force)) {
|
|
408
|
+
fafData.human_context[field] = value;
|
|
409
|
+
appliedCount++;
|
|
410
|
+
if (options.force && !isEmpty) {
|
|
411
|
+
console.log(colors_1.chalk.yellow(` ↻ Replaced ${field}`));
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
console.log(colors_1.chalk.green(` ☑️ Filled ${field}`));
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if (appliedCount > 0) {
|
|
419
|
+
// Write updated .faf
|
|
420
|
+
await fs_1.promises.writeFile(fafPath, (0, yaml_1.stringify)(fafData), 'utf-8');
|
|
421
|
+
console.log();
|
|
422
|
+
console.log(championship_style_1.FAF_COLORS.fafGreen(`☑️ Applied ${appliedCount} fields to ${path_1.default.basename(fafPath)}`));
|
|
423
|
+
if (skippedProtected > 0) {
|
|
424
|
+
console.log(colors_1.chalk.gray(` (${skippedProtected} protected fields unchanged)`));
|
|
425
|
+
}
|
|
426
|
+
console.log(colors_1.chalk.gray(' Run: faf score --details to see your new score'));
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
console.log();
|
|
430
|
+
if (skippedProtected > 0) {
|
|
431
|
+
console.log(colors_1.chalk.gray(` ${skippedProtected} protected fields unchanged`));
|
|
432
|
+
console.log(colors_1.chalk.gray(' Use: faf check --unlock to remove protection'));
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
console.log(colors_1.chalk.gray(' All slots already filled or no new data extracted'));
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
else if (filledCount > 0) {
|
|
440
|
+
// Show hint to apply
|
|
441
|
+
console.log();
|
|
442
|
+
console.log(championship_style_1.FAF_COLORS.fafOrange(`${championship_style_1.FAF_ICONS.magic_wand} To apply these to your .faf:`));
|
|
443
|
+
console.log(colors_1.chalk.white(' faf readme --apply'));
|
|
444
|
+
}
|
|
445
|
+
console.log();
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
console.log(colors_1.chalk.red(`\n❌ README extraction failed:`));
|
|
449
|
+
console.log(colors_1.chalk.red(error instanceof Error ? error.message : String(error)));
|
|
450
|
+
process.exit(1);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
//# sourceMappingURL=readme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../../src/commands/readme.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,10 @@ export declare class FabFormatsProcessor {
|
|
|
71
71
|
* Stage 1: Discover all relevant files (no reading yet!)
|
|
72
72
|
*/
|
|
73
73
|
private discoverFiles;
|
|
74
|
+
/**
|
|
75
|
+
* Check if directory has a .git folder (indicates project boundary)
|
|
76
|
+
*/
|
|
77
|
+
private hasGitDirectory;
|
|
74
78
|
/**
|
|
75
79
|
* Check if file is relevant for intelligence extraction
|
|
76
80
|
*/
|
|
@@ -115,6 +119,10 @@ export declare class FabFormatsProcessor {
|
|
|
115
119
|
* Process go.mod
|
|
116
120
|
*/
|
|
117
121
|
private processGoMod;
|
|
122
|
+
/**
|
|
123
|
+
* Process build.zig
|
|
124
|
+
*/
|
|
125
|
+
private processBuildZig;
|
|
118
126
|
/**
|
|
119
127
|
* Process Maven pom.xml
|
|
120
128
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fab-formats-processor.d.ts","sourceRoot":"","sources":["../../src/engines/fab-formats-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAE7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,EAAE;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAID,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,YAAY,CAAa;IAEjC;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoCnE;;OAEG;YACW,aAAa;
|
|
1
|
+
{"version":3,"file":"fab-formats-processor.d.ts","sourceRoot":"","sources":["../../src/engines/fab-formats-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,11 +100,14 @@ class FabFormatsProcessor {
|
|
|
100
100
|
'go.mod',
|
|
101
101
|
'pom.xml',
|
|
102
102
|
'build.gradle',
|
|
103
|
+
'build.zig', // Zig build file
|
|
103
104
|
'Gemfile',
|
|
104
105
|
'composer.json',
|
|
105
106
|
'.faf'
|
|
106
107
|
];
|
|
107
|
-
// Check
|
|
108
|
+
// MONOREPO SUPPORT: Check if starting directory has its own .git
|
|
109
|
+
const hasOwnGit = await this.hasGitDirectory(projectDir);
|
|
110
|
+
// Check project directory and up to 3 levels up (unless in monorepo)
|
|
108
111
|
let currentDir = projectDir;
|
|
109
112
|
for (let level = 0; level < 4; level++) {
|
|
110
113
|
if (visited.has(currentDir))
|
|
@@ -123,6 +126,10 @@ class FabFormatsProcessor {
|
|
|
123
126
|
discovered.push(fullPath);
|
|
124
127
|
}
|
|
125
128
|
}
|
|
129
|
+
// MONOREPO BOUNDARY: If project has its own .git, stop after first dir
|
|
130
|
+
if (hasOwnGit && level === 0) {
|
|
131
|
+
break; // Don't pollute with parent project configs
|
|
132
|
+
}
|
|
126
133
|
// Move up one directory
|
|
127
134
|
const parentDir = path.dirname(currentDir);
|
|
128
135
|
if (parentDir === currentDir)
|
|
@@ -136,6 +143,19 @@ class FabFormatsProcessor {
|
|
|
136
143
|
}
|
|
137
144
|
return discovered;
|
|
138
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if directory has a .git folder (indicates project boundary)
|
|
148
|
+
*/
|
|
149
|
+
async hasGitDirectory(dir) {
|
|
150
|
+
try {
|
|
151
|
+
const gitPath = path.join(dir, '.git');
|
|
152
|
+
const stats = await fs_1.promises.stat(gitPath);
|
|
153
|
+
return stats.isDirectory();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
139
159
|
/**
|
|
140
160
|
* Check if file is relevant for intelligence extraction
|
|
141
161
|
*/
|
|
@@ -218,6 +238,9 @@ class FabFormatsProcessor {
|
|
|
218
238
|
else if (fileName === 'go.mod') {
|
|
219
239
|
return this.processGoMod(fileName, content);
|
|
220
240
|
}
|
|
241
|
+
else if (fileName === 'build.zig') {
|
|
242
|
+
return this.processBuildZig(fileName, content);
|
|
243
|
+
}
|
|
221
244
|
else if (fileName === 'pom.xml') {
|
|
222
245
|
return this.processMavenPom(fileName, content);
|
|
223
246
|
}
|
|
@@ -265,6 +288,8 @@ class FabFormatsProcessor {
|
|
|
265
288
|
return 'package-manager-python-modern';
|
|
266
289
|
if (fileName === 'go.mod')
|
|
267
290
|
return 'package-manager-go';
|
|
291
|
+
if (fileName === 'build.zig')
|
|
292
|
+
return 'package-manager-zig';
|
|
268
293
|
if (fileName === 'pom.xml')
|
|
269
294
|
return 'package-manager-java';
|
|
270
295
|
if (fileName === 'build.gradle')
|
|
@@ -857,6 +882,58 @@ class FabFormatsProcessor {
|
|
|
857
882
|
category: 'package-manager-go'
|
|
858
883
|
};
|
|
859
884
|
}
|
|
885
|
+
/**
|
|
886
|
+
* Process build.zig
|
|
887
|
+
*/
|
|
888
|
+
async processBuildZig(fileName, content) {
|
|
889
|
+
let intelligenceBonus = 70;
|
|
890
|
+
const metadata = {};
|
|
891
|
+
if (!this.context.mainLanguage) {
|
|
892
|
+
this.context.mainLanguage = 'Zig';
|
|
893
|
+
}
|
|
894
|
+
if (!this.context.packageManager) {
|
|
895
|
+
this.context.packageManager = 'Zig Package Manager';
|
|
896
|
+
}
|
|
897
|
+
if (!this.context.buildTool) {
|
|
898
|
+
this.context.buildTool = 'zig build';
|
|
899
|
+
}
|
|
900
|
+
// Extract project name from .name field
|
|
901
|
+
const nameMatch = content.match(/\.name\s*=\s*"([^"]+)"/);
|
|
902
|
+
if (nameMatch && !this.context.projectName) {
|
|
903
|
+
this.context.projectName = nameMatch[1];
|
|
904
|
+
intelligenceBonus += 10;
|
|
905
|
+
}
|
|
906
|
+
// Check for WASM target
|
|
907
|
+
if (!this.context.framework) {
|
|
908
|
+
if (content.includes('wasm32') || content.includes('.wasm')) {
|
|
909
|
+
this.context.framework = 'Zig WASM';
|
|
910
|
+
metadata.runtime = 'WASM32';
|
|
911
|
+
intelligenceBonus += 25;
|
|
912
|
+
}
|
|
913
|
+
else if (content.includes('addExecutable')) {
|
|
914
|
+
this.context.framework = 'Zig CLI';
|
|
915
|
+
intelligenceBonus += 15;
|
|
916
|
+
}
|
|
917
|
+
else if (content.includes('addStaticLibrary') || content.includes('addSharedLibrary')) {
|
|
918
|
+
this.context.framework = 'Zig Library';
|
|
919
|
+
intelligenceBonus += 15;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
// Check for test step
|
|
923
|
+
if (content.includes('addTest')) {
|
|
924
|
+
metadata.hasTests = true;
|
|
925
|
+
intelligenceBonus += 10;
|
|
926
|
+
}
|
|
927
|
+
return {
|
|
928
|
+
fileName,
|
|
929
|
+
fileType: 'build.zig',
|
|
930
|
+
intelligenceBonus,
|
|
931
|
+
detectedLanguage: 'Zig',
|
|
932
|
+
detectedFramework: this.context.framework,
|
|
933
|
+
metadata,
|
|
934
|
+
category: 'package-manager-zig'
|
|
935
|
+
};
|
|
936
|
+
}
|
|
860
937
|
/**
|
|
861
938
|
* Process Maven pom.xml
|
|
862
939
|
*/
|