faf-cli 4.4.4 → 4.5.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 (62) hide show
  1. package/README.md +27 -17
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +63 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agents.d.ts +14 -0
  6. package/dist/commands/agents.d.ts.map +1 -0
  7. package/dist/commands/agents.js +353 -0
  8. package/dist/commands/agents.js.map +1 -0
  9. package/dist/commands/bi-sync.d.ts +3 -0
  10. package/dist/commands/bi-sync.d.ts.map +1 -1
  11. package/dist/commands/bi-sync.js +38 -0
  12. package/dist/commands/bi-sync.js.map +1 -1
  13. package/dist/commands/cursor.d.ts +13 -0
  14. package/dist/commands/cursor.d.ts.map +1 -0
  15. package/dist/commands/cursor.js +310 -0
  16. package/dist/commands/cursor.js.map +1 -0
  17. package/dist/commands/go.d.ts.map +1 -1
  18. package/dist/commands/go.js +22 -19
  19. package/dist/commands/go.js.map +1 -1
  20. package/dist/commands/taf-log.d.ts +1 -0
  21. package/dist/commands/taf-log.d.ts.map +1 -1
  22. package/dist/commands/taf-log.js +53 -5
  23. package/dist/commands/taf-log.js.map +1 -1
  24. package/dist/commands/taf-stars.d.ts +8 -0
  25. package/dist/commands/taf-stars.d.ts.map +1 -0
  26. package/dist/commands/taf-stars.js +105 -0
  27. package/dist/commands/taf-stars.js.map +1 -0
  28. package/dist/commands/taf.d.ts +1 -0
  29. package/dist/commands/taf.d.ts.map +1 -1
  30. package/dist/commands/taf.js +9 -0
  31. package/dist/commands/taf.js.map +1 -1
  32. package/dist/compiler/faf-compiler.d.ts.map +1 -1
  33. package/dist/compiler/faf-compiler.js +24 -2
  34. package/dist/compiler/faf-compiler.js.map +1 -1
  35. package/dist/github/repo-selector.js +4 -4
  36. package/dist/github/repo-selector.js.map +1 -1
  37. package/dist/taf/index.d.ts +4 -0
  38. package/dist/taf/index.d.ts.map +1 -1
  39. package/dist/taf/index.js +16 -1
  40. package/dist/taf/index.js.map +1 -1
  41. package/dist/taf/star-badge.d.ts +32 -0
  42. package/dist/taf/star-badge.d.ts.map +1 -0
  43. package/dist/taf/star-badge.js +158 -0
  44. package/dist/taf/star-badge.js.map +1 -0
  45. package/dist/taf/star-rating.d.ts +30 -0
  46. package/dist/taf/star-rating.d.ts.map +1 -0
  47. package/dist/taf/star-rating.js +79 -0
  48. package/dist/taf/star-rating.js.map +1 -0
  49. package/dist/taf/test-output-parser.d.ts +42 -0
  50. package/dist/taf/test-output-parser.d.ts.map +1 -0
  51. package/dist/taf/test-output-parser.js +114 -0
  52. package/dist/taf/test-output-parser.js.map +1 -0
  53. package/dist/utils/agents-parser.d.ts +60 -0
  54. package/dist/utils/agents-parser.d.ts.map +1 -0
  55. package/dist/utils/agents-parser.js +325 -0
  56. package/dist/utils/agents-parser.js.map +1 -0
  57. package/dist/utils/cursorrules-parser.d.ts +56 -0
  58. package/dist/utils/cursorrules-parser.d.ts.map +1 -0
  59. package/dist/utils/cursorrules-parser.js +315 -0
  60. package/dist/utils/cursorrules-parser.js.map +1 -0
  61. package/package.json +1 -1
  62. package/project.faf +4 -4
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ /**
3
+ * AGENTS.md Parser
4
+ *
5
+ * Parses OpenAI Codex / Linux Foundation AGENTS.md files for bidirectional
6
+ * interoperability with FAF.
7
+ *
8
+ * AGENTS.md Structure:
9
+ * - H1: Project name
10
+ * - H2: Section headers (Project Overview, Tech Stack, etc.)
11
+ * - Bullets: Specific guidelines
12
+ *
13
+ * @see https://github.com/anthropics/claude-code/issues/27050
14
+ */
15
+ var __importDefault = (this && this.__importDefault) || function (mod) {
16
+ return (mod && mod.__esModule) ? mod : { "default": mod };
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.parseAgentsMd = parseAgentsMd;
20
+ exports.agentsImport = agentsImport;
21
+ exports.agentsExport = agentsExport;
22
+ exports.detectAgentsMd = detectAgentsMd;
23
+ exports.detectGlobalAgentsMd = detectGlobalAgentsMd;
24
+ const fs_1 = require("fs");
25
+ const path_1 = __importDefault(require("path"));
26
+ // ============================================================================
27
+ // Parsing
28
+ // ============================================================================
29
+ /**
30
+ * Parse AGENTS.md file content
31
+ */
32
+ function parseAgentsMd(content) {
33
+ // Strip BOM and normalize line endings (Windows \r\n, old Mac \r)
34
+ const normalized = content.replace(/^\uFEFF/, '').replace(/\r\n/g, '\n').replace(/\r/g, '\n');
35
+ const lines = normalized.split('\n');
36
+ let projectName = 'Unknown Project';
37
+ const sections = [];
38
+ let currentSection = null;
39
+ for (const line of lines) {
40
+ // H1 = Project name
41
+ const h1Match = line.match(/^#\s+(?:Project:\s*)?(.+)$/);
42
+ if (h1Match) {
43
+ projectName = h1Match[1].trim();
44
+ continue;
45
+ }
46
+ // H2 = Section header
47
+ const h2Match = line.match(/^##\s+(.+)$/);
48
+ if (h2Match) {
49
+ if (currentSection) {
50
+ sections.push(currentSection);
51
+ }
52
+ currentSection = {
53
+ title: h2Match[1].trim(),
54
+ content: [],
55
+ };
56
+ continue;
57
+ }
58
+ // Bullet point
59
+ const bulletMatch = line.match(/^[-*]\s+(.+)$/);
60
+ if (bulletMatch && currentSection) {
61
+ currentSection.content.push(bulletMatch[1].trim());
62
+ }
63
+ }
64
+ // Push last section
65
+ if (currentSection) {
66
+ sections.push(currentSection);
67
+ }
68
+ return { projectName, sections };
69
+ }
70
+ /**
71
+ * Categorize AGENTS.md sections into FAF structure
72
+ */
73
+ function categorizeSections(sections) {
74
+ const rules = [];
75
+ const guidelines = [];
76
+ const codingStyle = [];
77
+ const buildCommands = [];
78
+ const architecture = [];
79
+ for (const section of sections) {
80
+ const titleLower = section.title.toLowerCase();
81
+ if (titleLower.includes('build') || titleLower.includes('test') || titleLower.includes('command')) {
82
+ buildCommands.push(...section.content);
83
+ }
84
+ else if (titleLower.includes('architect') || titleLower.includes('structure') || titleLower.includes('design')) {
85
+ architecture.push(...section.content);
86
+ }
87
+ else if (titleLower.includes('coding') || titleLower.includes('style') || titleLower.includes('format') || titleLower.includes('guideline')) {
88
+ codingStyle.push(...section.content);
89
+ }
90
+ else if (titleLower.includes('rule') || titleLower.includes('constraint') || titleLower.includes('requirement') || titleLower.includes('warning')) {
91
+ rules.push(...section.content);
92
+ }
93
+ else {
94
+ // Default to guidelines (includes "Project Overview", "Tech Stack", etc.)
95
+ guidelines.push(...section.content);
96
+ }
97
+ }
98
+ return { rules, guidelines, codingStyle, buildCommands, architecture };
99
+ }
100
+ // ============================================================================
101
+ // Import: AGENTS.md → FAF
102
+ // ============================================================================
103
+ async function agentsImport(agentsPath) {
104
+ const warnings = [];
105
+ // Check if file exists
106
+ try {
107
+ await fs_1.promises.access(agentsPath);
108
+ }
109
+ catch {
110
+ return {
111
+ success: false,
112
+ faf: createEmptyFaf(),
113
+ warnings: [`AGENTS.md not found: ${agentsPath}`],
114
+ sectionsFound: [],
115
+ };
116
+ }
117
+ // Read and parse
118
+ const content = await fs_1.promises.readFile(agentsPath, 'utf-8');
119
+ const parsed = parseAgentsMd(content);
120
+ if (parsed.sections.length === 0) {
121
+ warnings.push('No sections found in AGENTS.md');
122
+ }
123
+ const { rules, guidelines, codingStyle, buildCommands, architecture } = categorizeSections(parsed.sections);
124
+ const faf = {
125
+ project: {
126
+ name: parsed.projectName,
127
+ description: `Imported from AGENTS.md`,
128
+ type: 'agents-import',
129
+ rules,
130
+ guidelines,
131
+ codingStyle,
132
+ buildCommands,
133
+ architecture,
134
+ },
135
+ metadata: {
136
+ source: 'agents',
137
+ imported: new Date().toISOString(),
138
+ },
139
+ };
140
+ return {
141
+ success: true,
142
+ faf,
143
+ warnings,
144
+ sectionsFound: parsed.sections.map(s => s.title),
145
+ };
146
+ }
147
+ function createEmptyFaf() {
148
+ return {
149
+ project: {
150
+ name: 'Unknown',
151
+ description: '',
152
+ type: 'agents-import',
153
+ rules: [],
154
+ guidelines: [],
155
+ codingStyle: [],
156
+ buildCommands: [],
157
+ architecture: [],
158
+ },
159
+ metadata: {
160
+ source: 'agents',
161
+ imported: new Date().toISOString(),
162
+ },
163
+ };
164
+ }
165
+ // ============================================================================
166
+ // Export: FAF → AGENTS.md
167
+ // ============================================================================
168
+ async function agentsExport(fafContent, outputPath) {
169
+ const warnings = [];
170
+ // Build AGENTS.md content
171
+ const lines = [];
172
+ // Project header
173
+ const projectName = fafContent.project?.name || fafContent.name || 'My Project';
174
+ const projectGoal = fafContent.project?.goal || fafContent.project?.description || fafContent.ai_tldr?.project || '';
175
+ lines.push(`# ${projectName}`);
176
+ lines.push('');
177
+ // Project Overview section
178
+ lines.push('## Project Overview');
179
+ lines.push('');
180
+ if (projectGoal) {
181
+ lines.push(`- ${projectGoal}`);
182
+ }
183
+ if (fafContent.instant_context?.what_building) {
184
+ lines.push(`- ${fafContent.instant_context.what_building}`);
185
+ }
186
+ lines.push('');
187
+ // Tech Stack section
188
+ const stack = fafContent.stack || fafContent.project?.stack || {};
189
+ const hasStack = stack.frontend || stack.backend || stack.build || stack.runtime || stack.database;
190
+ if (hasStack) {
191
+ lines.push('## Tech Stack');
192
+ lines.push('');
193
+ if (stack.frontend)
194
+ lines.push(`- Frontend: ${stack.frontend}`);
195
+ if (stack.backend)
196
+ lines.push(`- Backend: ${stack.backend}`);
197
+ if (stack.runtime)
198
+ lines.push(`- Runtime: ${stack.runtime}`);
199
+ if (stack.build)
200
+ lines.push(`- Build: ${stack.build}`);
201
+ if (stack.database && stack.database !== 'None')
202
+ lines.push(`- Database: ${stack.database}`);
203
+ if (stack.package_manager)
204
+ lines.push(`- Package Manager: ${stack.package_manager}`);
205
+ if (stack.hosting)
206
+ lines.push(`- Hosting: ${stack.hosting}`);
207
+ if (stack.cicd)
208
+ lines.push(`- CI/CD: ${stack.cicd}`);
209
+ // Also include languages/frameworks arrays if present
210
+ if (stack.languages?.length > 0) {
211
+ lines.push(`- Languages: ${stack.languages.join(', ')}`);
212
+ }
213
+ if (stack.frameworks?.length > 0) {
214
+ lines.push(`- Frameworks: ${stack.frameworks.join(', ')}`);
215
+ }
216
+ lines.push('');
217
+ }
218
+ // Code Style Guidelines section
219
+ const warnings_list = fafContent.ai_instructions?.warnings || [];
220
+ const codingStyle = fafContent.project?.codingStyle || [];
221
+ const preferences = fafContent.preferences || {};
222
+ const styleItems = [...codingStyle, ...warnings_list];
223
+ if (preferences.quality_bar)
224
+ styleItems.push(`Quality bar: ${preferences.quality_bar}`);
225
+ if (preferences.commit_style)
226
+ styleItems.push(`Commit style: ${preferences.commit_style}`);
227
+ if (preferences.testing)
228
+ styleItems.push(`Testing: ${preferences.testing}`);
229
+ if (styleItems.length > 0) {
230
+ lines.push('## Code Style Guidelines');
231
+ lines.push('');
232
+ for (const item of styleItems) {
233
+ lines.push(`- ${item}`);
234
+ }
235
+ lines.push('');
236
+ }
237
+ // Build and Test Commands section
238
+ const howContext = fafContent.human_context?.how || fafContent.context?.how;
239
+ const buildCommands = fafContent.project?.buildCommands || [];
240
+ if (howContext || buildCommands.length > 0) {
241
+ lines.push('## Build and Test Commands');
242
+ lines.push('');
243
+ if (howContext)
244
+ lines.push(`- ${howContext}`);
245
+ for (const cmd of buildCommands) {
246
+ lines.push(`- ${cmd}`);
247
+ }
248
+ lines.push('');
249
+ }
250
+ // Architecture section
251
+ const humanContext = fafContent.human_context || {};
252
+ const architecture = fafContent.project?.architecture || [];
253
+ const archItems = [...architecture];
254
+ if (humanContext.what)
255
+ archItems.push(humanContext.what);
256
+ if (humanContext.where)
257
+ archItems.push(`Deployed: ${humanContext.where}`);
258
+ if (archItems.length > 0) {
259
+ lines.push('## Architecture');
260
+ lines.push('');
261
+ for (const item of archItems) {
262
+ lines.push(`- ${item}`);
263
+ }
264
+ lines.push('');
265
+ }
266
+ // General Instructions (rules + guidelines)
267
+ const rules = fafContent.project?.rules || [];
268
+ const guidelines = fafContent.project?.guidelines || [];
269
+ const generalInstructions = [...rules, ...guidelines];
270
+ if (generalInstructions.length > 0) {
271
+ lines.push('## General Instructions');
272
+ lines.push('');
273
+ for (const item of generalInstructions) {
274
+ lines.push(`- ${item}`);
275
+ }
276
+ lines.push('');
277
+ }
278
+ // Footer
279
+ lines.push('---');
280
+ lines.push(`*Generated from project.faf by faf-cli — ${new Date().toISOString().split('T')[0]}*`);
281
+ lines.push('');
282
+ // Write file
283
+ const content = lines.join('\n');
284
+ await fs_1.promises.writeFile(outputPath, content);
285
+ return {
286
+ success: true,
287
+ filePath: outputPath,
288
+ warnings,
289
+ };
290
+ }
291
+ // ============================================================================
292
+ // Detection
293
+ // ============================================================================
294
+ async function detectAgentsMd(basePath) {
295
+ const possiblePaths = [
296
+ path_1.default.join(basePath, 'AGENTS.md'),
297
+ path_1.default.join(basePath, 'agents.md'),
298
+ path_1.default.join(basePath, 'Agents.md'),
299
+ ];
300
+ for (const p of possiblePaths) {
301
+ try {
302
+ await fs_1.promises.access(p);
303
+ return p;
304
+ }
305
+ catch {
306
+ continue;
307
+ }
308
+ }
309
+ return null;
310
+ }
311
+ /**
312
+ * Check for global AGENTS.md (~/.codex/AGENTS.md)
313
+ */
314
+ async function detectGlobalAgentsMd() {
315
+ const home = process.env.HOME || process.env.USERPROFILE || '';
316
+ const globalPath = path_1.default.join(home, '.codex', 'AGENTS.md');
317
+ try {
318
+ await fs_1.promises.access(globalPath);
319
+ return globalPath;
320
+ }
321
+ catch {
322
+ return null;
323
+ }
324
+ }
325
+ //# sourceMappingURL=agents-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-parser.js","sourceRoot":"","sources":["../../src/utils/agents-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * .cursorrules Parser
3
+ *
4
+ * Parses Cursor IDE .cursorrules files for bidirectional
5
+ * interoperability with FAF.
6
+ *
7
+ * .cursorrules Structure:
8
+ * - Free-form markdown with sections
9
+ * - H2: Section headers (optional)
10
+ * - Bullets/paragraphs: Guidelines and rules
11
+ *
12
+ * Note: This generates legacy .cursorrules (single file).
13
+ * The new .cursor/rules/ MDC directory format is a future enhancement.
14
+ */
15
+ export interface CursorRulesSection {
16
+ title: string;
17
+ content: string[];
18
+ }
19
+ export interface CursorRulesFile {
20
+ projectName: string;
21
+ sections: CursorRulesSection[];
22
+ rawLines: string[];
23
+ }
24
+ export interface FafFromCursor {
25
+ project: {
26
+ name: string;
27
+ description: string;
28
+ type: string;
29
+ rules: string[];
30
+ guidelines: string[];
31
+ codingStyle: string[];
32
+ };
33
+ metadata: {
34
+ source: string;
35
+ imported: string;
36
+ };
37
+ }
38
+ export interface CursorImportResult {
39
+ success: boolean;
40
+ faf: FafFromCursor;
41
+ warnings: string[];
42
+ sectionsFound: string[];
43
+ }
44
+ export interface CursorExportResult {
45
+ success: boolean;
46
+ filePath: string;
47
+ warnings: string[];
48
+ }
49
+ /**
50
+ * Parse .cursorrules file content
51
+ */
52
+ export declare function parseCursorRules(content: string): CursorRulesFile;
53
+ export declare function cursorImport(cursorPath: string): Promise<CursorImportResult>;
54
+ export declare function cursorExport(fafContent: any, outputPath: string): Promise<CursorExportResult>;
55
+ export declare function detectCursorRules(basePath: string): Promise<string | null>;
56
+ //# sourceMappingURL=cursorrules-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursorrules-parser.d.ts","sourceRoot":"","sources":["../../src/utils/cursorrules-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAoDjE;AAkCD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwElF;AAuBD,wBAAsB,YAAY,CAChC,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CA6G7B;AAMD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBhF"}