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.
Files changed (39) hide show
  1. package/README.md +59 -3
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +90 -12
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/check.d.ts +19 -3
  6. package/dist/commands/check.d.ts.map +1 -1
  7. package/dist/commands/check.js +280 -37
  8. package/dist/commands/check.js.map +1 -1
  9. package/dist/commands/human.d.ts +19 -0
  10. package/dist/commands/human.d.ts.map +1 -0
  11. package/dist/commands/human.js +205 -0
  12. package/dist/commands/human.js.map +1 -0
  13. package/dist/commands/readme.d.ts +16 -0
  14. package/dist/commands/readme.d.ts.map +1 -0
  15. package/dist/commands/readme.js +453 -0
  16. package/dist/commands/readme.js.map +1 -0
  17. package/dist/engines/fab-formats-processor.d.ts +8 -0
  18. package/dist/engines/fab-formats-processor.d.ts.map +1 -1
  19. package/dist/engines/fab-formats-processor.js +78 -1
  20. package/dist/engines/fab-formats-processor.js.map +1 -1
  21. package/dist/framework-detector.d.ts.map +1 -1
  22. package/dist/framework-detector.js +7 -0
  23. package/dist/framework-detector.js.map +1 -1
  24. package/dist/utils/fab-formats-engine.d.ts +7 -0
  25. package/dist/utils/fab-formats-engine.d.ts.map +1 -1
  26. package/dist/utils/fab-formats-engine.js +23 -1
  27. package/dist/utils/fab-formats-engine.js.map +1 -1
  28. package/dist/utils/file-utils.d.ts.map +1 -1
  29. package/dist/utils/file-utils.js +20 -1
  30. package/dist/utils/file-utils.js.map +1 -1
  31. package/dist/utils/turbo-cat-knowledge.d.ts +2 -0
  32. package/dist/utils/turbo-cat-knowledge.d.ts.map +1 -1
  33. package/dist/utils/turbo-cat-knowledge.js +15 -0
  34. package/dist/utils/turbo-cat-knowledge.js.map +1 -1
  35. package/dist/utils/turbo-cat.d.ts +7 -0
  36. package/dist/utils/turbo-cat.d.ts.map +1 -1
  37. package/dist/utils/turbo-cat.js +30 -2
  38. package/dist/utils/turbo-cat.js.map +1 -1
  39. 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":"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"}
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 project directory and up to 3 levels up
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
  */