faf-cli 4.4.2 → 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 (89) hide show
  1. package/README.md +32 -16
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +75 -10
  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/index.d.ts +12 -0
  21. package/dist/commands/index.d.ts.map +1 -1
  22. package/dist/commands/index.js +5 -4
  23. package/dist/commands/index.js.map +1 -1
  24. package/dist/commands/readme.js +16 -10
  25. package/dist/commands/readme.js.map +1 -1
  26. package/dist/commands/taf-log.d.ts +1 -0
  27. package/dist/commands/taf-log.d.ts.map +1 -1
  28. package/dist/commands/taf-log.js +53 -5
  29. package/dist/commands/taf-log.js.map +1 -1
  30. package/dist/commands/taf-stars.d.ts +8 -0
  31. package/dist/commands/taf-stars.d.ts.map +1 -0
  32. package/dist/commands/taf-stars.js +105 -0
  33. package/dist/commands/taf-stars.js.map +1 -0
  34. package/dist/commands/taf.d.ts +1 -0
  35. package/dist/commands/taf.d.ts.map +1 -1
  36. package/dist/commands/taf.js +9 -0
  37. package/dist/commands/taf.js.map +1 -1
  38. package/dist/compiler/faf-compiler.d.ts.map +1 -1
  39. package/dist/compiler/faf-compiler.js +24 -2
  40. package/dist/compiler/faf-compiler.js.map +1 -1
  41. package/dist/core-extraction-fixes.js +9 -5
  42. package/dist/core-extraction-fixes.js.map +1 -1
  43. package/dist/engines/c-mirror/broadcast/terminal-display.js +2 -1
  44. package/dist/engines/c-mirror/broadcast/terminal-display.js.map +1 -1
  45. package/dist/engines/c-mirror/core/claude-to-faf.js +12 -6
  46. package/dist/engines/c-mirror/core/claude-to-faf.js.map +1 -1
  47. package/dist/engines/c-mirror/core/events/event-emitter.js +12 -6
  48. package/dist/engines/c-mirror/core/events/event-emitter.js.map +1 -1
  49. package/dist/engines/v252-hybrid-engine.js +0 -1
  50. package/dist/engines/v252-hybrid-engine.js.map +1 -1
  51. package/dist/framework-detector.js +14 -7
  52. package/dist/framework-detector.js.map +1 -1
  53. package/dist/github/faf-git-generator.d.ts +16 -22
  54. package/dist/github/faf-git-generator.d.ts.map +1 -1
  55. package/dist/github/faf-git-generator.js +290 -320
  56. package/dist/github/faf-git-generator.js.map +1 -1
  57. package/dist/github/github-extractor.d.ts.map +1 -1
  58. package/dist/github/github-extractor.js +19 -20
  59. package/dist/github/github-extractor.js.map +1 -1
  60. package/dist/github/repo-selector.js +17 -11
  61. package/dist/github/repo-selector.js.map +1 -1
  62. package/dist/smart-faf.js +3 -2
  63. package/dist/smart-faf.js.map +1 -1
  64. package/dist/taf/index.d.ts +4 -0
  65. package/dist/taf/index.d.ts.map +1 -1
  66. package/dist/taf/index.js +16 -1
  67. package/dist/taf/index.js.map +1 -1
  68. package/dist/taf/star-badge.d.ts +32 -0
  69. package/dist/taf/star-badge.d.ts.map +1 -0
  70. package/dist/taf/star-badge.js +158 -0
  71. package/dist/taf/star-badge.js.map +1 -0
  72. package/dist/taf/star-rating.d.ts +30 -0
  73. package/dist/taf/star-rating.d.ts.map +1 -0
  74. package/dist/taf/star-rating.js +79 -0
  75. package/dist/taf/star-rating.js.map +1 -0
  76. package/dist/taf/test-output-parser.d.ts +42 -0
  77. package/dist/taf/test-output-parser.d.ts.map +1 -0
  78. package/dist/taf/test-output-parser.js +114 -0
  79. package/dist/taf/test-output-parser.js.map +1 -0
  80. package/dist/utils/agents-parser.d.ts +60 -0
  81. package/dist/utils/agents-parser.d.ts.map +1 -0
  82. package/dist/utils/agents-parser.js +325 -0
  83. package/dist/utils/agents-parser.js.map +1 -0
  84. package/dist/utils/cursorrules-parser.d.ts +56 -0
  85. package/dist/utils/cursorrules-parser.d.ts.map +1 -0
  86. package/dist/utils/cursorrules-parser.js +315 -0
  87. package/dist/utils/cursorrules-parser.js.map +1 -0
  88. package/package.json +6 -4
  89. package/project.faf +5 -5
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ /**
3
+ * .cursorrules Parser
4
+ *
5
+ * Parses Cursor IDE .cursorrules files for bidirectional
6
+ * interoperability with FAF.
7
+ *
8
+ * .cursorrules Structure:
9
+ * - Free-form markdown with sections
10
+ * - H2: Section headers (optional)
11
+ * - Bullets/paragraphs: Guidelines and rules
12
+ *
13
+ * Note: This generates legacy .cursorrules (single file).
14
+ * The new .cursor/rules/ MDC directory format is a future enhancement.
15
+ */
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.parseCursorRules = parseCursorRules;
21
+ exports.cursorImport = cursorImport;
22
+ exports.cursorExport = cursorExport;
23
+ exports.detectCursorRules = detectCursorRules;
24
+ const fs_1 = require("fs");
25
+ const path_1 = __importDefault(require("path"));
26
+ // ============================================================================
27
+ // Parsing
28
+ // ============================================================================
29
+ /**
30
+ * Parse .cursorrules file content
31
+ */
32
+ function parseCursorRules(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
+ const rawLines = [];
40
+ for (const line of lines) {
41
+ rawLines.push(line);
42
+ // H1 = Project name
43
+ const h1Match = line.match(/^#\s+(?:Project:\s*)?(.+)$/);
44
+ if (h1Match) {
45
+ projectName = h1Match[1].trim();
46
+ continue;
47
+ }
48
+ // H2 = Section header
49
+ const h2Match = line.match(/^##\s+(.+)$/);
50
+ if (h2Match) {
51
+ if (currentSection) {
52
+ sections.push(currentSection);
53
+ }
54
+ currentSection = {
55
+ title: h2Match[1].trim(),
56
+ content: [],
57
+ };
58
+ continue;
59
+ }
60
+ // Bullet point
61
+ const bulletMatch = line.match(/^[-*]\s+(.+)$/);
62
+ if (bulletMatch && currentSection) {
63
+ currentSection.content.push(bulletMatch[1].trim());
64
+ continue;
65
+ }
66
+ // Non-empty line in a section (paragraph text)
67
+ const trimmed = line.trim();
68
+ if (trimmed && currentSection && !trimmed.startsWith('#')) {
69
+ currentSection.content.push(trimmed);
70
+ }
71
+ }
72
+ // Push last section
73
+ if (currentSection) {
74
+ sections.push(currentSection);
75
+ }
76
+ return { projectName, sections, rawLines };
77
+ }
78
+ /**
79
+ * Categorize .cursorrules sections into FAF structure
80
+ */
81
+ function categorizeSections(sections) {
82
+ const rules = [];
83
+ const guidelines = [];
84
+ const codingStyle = [];
85
+ for (const section of sections) {
86
+ const titleLower = section.title.toLowerCase();
87
+ if (titleLower.includes('coding') || titleLower.includes('style') || titleLower.includes('format') || titleLower.includes('convention')) {
88
+ codingStyle.push(...section.content);
89
+ }
90
+ else if (titleLower.includes('rule') || titleLower.includes('constraint') || titleLower.includes('requirement') || titleLower.includes('preference')) {
91
+ rules.push(...section.content);
92
+ }
93
+ else {
94
+ // Default to guidelines
95
+ guidelines.push(...section.content);
96
+ }
97
+ }
98
+ return { rules, guidelines, codingStyle };
99
+ }
100
+ // ============================================================================
101
+ // Import: .cursorrules → FAF
102
+ // ============================================================================
103
+ async function cursorImport(cursorPath) {
104
+ const warnings = [];
105
+ // Check if file exists
106
+ try {
107
+ await fs_1.promises.access(cursorPath);
108
+ }
109
+ catch {
110
+ return {
111
+ success: false,
112
+ faf: createEmptyFaf(),
113
+ warnings: [`.cursorrules not found: ${cursorPath}`],
114
+ sectionsFound: [],
115
+ };
116
+ }
117
+ // Read and parse
118
+ const content = await fs_1.promises.readFile(cursorPath, 'utf-8');
119
+ const parsed = parseCursorRules(content);
120
+ if (parsed.sections.length === 0) {
121
+ warnings.push('No sections found in .cursorrules — treating all content as guidelines');
122
+ // If no sections, treat all non-empty lines as guidelines
123
+ const allLines = parsed.rawLines
124
+ .map(l => l.trim())
125
+ .filter(l => l && !l.startsWith('#'));
126
+ const faf = {
127
+ project: {
128
+ name: parsed.projectName,
129
+ description: 'Imported from .cursorrules',
130
+ type: 'cursor-import',
131
+ rules: [],
132
+ guidelines: allLines,
133
+ codingStyle: [],
134
+ },
135
+ metadata: {
136
+ source: 'cursor',
137
+ imported: new Date().toISOString(),
138
+ },
139
+ };
140
+ return {
141
+ success: true,
142
+ faf,
143
+ warnings,
144
+ sectionsFound: [],
145
+ };
146
+ }
147
+ const { rules, guidelines, codingStyle } = categorizeSections(parsed.sections);
148
+ const faf = {
149
+ project: {
150
+ name: parsed.projectName,
151
+ description: 'Imported from .cursorrules',
152
+ type: 'cursor-import',
153
+ rules,
154
+ guidelines,
155
+ codingStyle,
156
+ },
157
+ metadata: {
158
+ source: 'cursor',
159
+ imported: new Date().toISOString(),
160
+ },
161
+ };
162
+ return {
163
+ success: true,
164
+ faf,
165
+ warnings,
166
+ sectionsFound: parsed.sections.map(s => s.title),
167
+ };
168
+ }
169
+ function createEmptyFaf() {
170
+ return {
171
+ project: {
172
+ name: 'Unknown',
173
+ description: '',
174
+ type: 'cursor-import',
175
+ rules: [],
176
+ guidelines: [],
177
+ codingStyle: [],
178
+ },
179
+ metadata: {
180
+ source: 'cursor',
181
+ imported: new Date().toISOString(),
182
+ },
183
+ };
184
+ }
185
+ // ============================================================================
186
+ // Export: FAF → .cursorrules
187
+ // ============================================================================
188
+ async function cursorExport(fafContent, outputPath) {
189
+ const warnings = [];
190
+ // Build .cursorrules content
191
+ const lines = [];
192
+ // Project header
193
+ const projectName = fafContent.project?.name || fafContent.name || 'My Project';
194
+ const projectGoal = fafContent.project?.goal || fafContent.project?.description || fafContent.ai_tldr?.project || '';
195
+ lines.push(`# ${projectName}`);
196
+ lines.push('');
197
+ if (projectGoal) {
198
+ lines.push(projectGoal);
199
+ lines.push('');
200
+ }
201
+ // Tech Stack section
202
+ const stack = fafContent.stack || fafContent.project?.stack || {};
203
+ const hasStack = stack.frontend || stack.backend || stack.build || stack.runtime;
204
+ if (hasStack) {
205
+ lines.push('## Tech Stack');
206
+ lines.push('');
207
+ if (stack.frontend)
208
+ lines.push(`- Frontend: ${stack.frontend}`);
209
+ if (stack.backend)
210
+ lines.push(`- Backend: ${stack.backend}`);
211
+ if (stack.runtime)
212
+ lines.push(`- Runtime: ${stack.runtime}`);
213
+ if (stack.build)
214
+ lines.push(`- Build: ${stack.build}`);
215
+ if (stack.package_manager)
216
+ lines.push(`- Package Manager: ${stack.package_manager}`);
217
+ if (stack.languages?.length > 0) {
218
+ lines.push(`- Languages: ${stack.languages.join(', ')}`);
219
+ }
220
+ if (stack.frameworks?.length > 0) {
221
+ lines.push(`- Frameworks: ${stack.frameworks.join(', ')}`);
222
+ }
223
+ lines.push('');
224
+ }
225
+ // Coding Standards section
226
+ const warnings_list = fafContent.ai_instructions?.warnings || [];
227
+ const workingStyle = fafContent.ai_instructions?.working_style || {};
228
+ const codingStyle = fafContent.project?.codingStyle || [];
229
+ const styleItems = [...codingStyle, ...warnings_list];
230
+ if (workingStyle.quality_bar)
231
+ styleItems.push(`Quality bar: ${workingStyle.quality_bar}`);
232
+ if (workingStyle.testing)
233
+ styleItems.push(`Testing: ${workingStyle.testing}`);
234
+ if (styleItems.length > 0) {
235
+ lines.push('## Coding Standards');
236
+ lines.push('');
237
+ for (const item of styleItems) {
238
+ lines.push(`- ${item}`);
239
+ }
240
+ lines.push('');
241
+ }
242
+ // Preferences section
243
+ const preferences = fafContent.preferences || {};
244
+ const prefItems = [];
245
+ if (preferences.quality_bar)
246
+ prefItems.push(`Quality bar: ${preferences.quality_bar}`);
247
+ if (preferences.commit_style)
248
+ prefItems.push(`Commit style: ${preferences.commit_style}`);
249
+ if (preferences.response_style)
250
+ prefItems.push(`Response style: ${preferences.response_style}`);
251
+ if (preferences.testing)
252
+ prefItems.push(`Testing: ${preferences.testing}`);
253
+ if (preferences.documentation)
254
+ prefItems.push(`Documentation: ${preferences.documentation}`);
255
+ if (prefItems.length > 0) {
256
+ lines.push('## Preferences');
257
+ lines.push('');
258
+ for (const item of prefItems) {
259
+ lines.push(`- ${item}`);
260
+ }
261
+ lines.push('');
262
+ }
263
+ // Build Commands section
264
+ const howContext = fafContent.human_context?.how || fafContent.context?.how;
265
+ if (howContext) {
266
+ lines.push('## Build Commands');
267
+ lines.push('');
268
+ lines.push(`- ${howContext}`);
269
+ lines.push('');
270
+ }
271
+ // General Instructions (rules + guidelines)
272
+ const rules = fafContent.project?.rules || [];
273
+ const guidelines = fafContent.project?.guidelines || [];
274
+ const generalInstructions = [...rules, ...guidelines];
275
+ if (generalInstructions.length > 0) {
276
+ lines.push('## General Instructions');
277
+ lines.push('');
278
+ for (const item of generalInstructions) {
279
+ lines.push(`- ${item}`);
280
+ }
281
+ lines.push('');
282
+ }
283
+ // Footer
284
+ lines.push('---');
285
+ lines.push(`Generated from project.faf by faf-cli — ${new Date().toISOString().split('T')[0]}`);
286
+ lines.push('');
287
+ // Write file
288
+ const content = lines.join('\n');
289
+ await fs_1.promises.writeFile(outputPath, content);
290
+ return {
291
+ success: true,
292
+ filePath: outputPath,
293
+ warnings,
294
+ };
295
+ }
296
+ // ============================================================================
297
+ // Detection
298
+ // ============================================================================
299
+ async function detectCursorRules(basePath) {
300
+ const possiblePaths = [
301
+ path_1.default.join(basePath, '.cursorrules'),
302
+ path_1.default.join(basePath, '.cursor-rules'),
303
+ ];
304
+ for (const p of possiblePaths) {
305
+ try {
306
+ await fs_1.promises.access(p);
307
+ return p;
308
+ }
309
+ catch {
310
+ continue;
311
+ }
312
+ }
313
+ return null;
314
+ }
315
+ //# sourceMappingURL=cursorrules-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursorrules-parser.js","sourceRoot":"","sources":["../../src/utils/cursorrules-parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "faf-cli",
3
- "version": "4.4.2",
3
+ "version": "4.5.0",
4
4
  "description": "The Persistent AI Context Standard • Foundation Layer for AI • IANA-Registered • Anthropic-Approved • project.faf = AI's foundation",
5
5
  "icon": "https://faf.one/orange-smiley.svg",
6
6
  "logo": "https://faf.one/orange-smiley.svg",
@@ -56,7 +56,7 @@
56
56
  "release:beta": "npm run release -- --type prerelease --preid beta",
57
57
  "release:dry": "npm run release -- --dry-run",
58
58
  "performance": "ts-node scripts/performance-validation.ts",
59
- "performance:ci": "npm run performance -- --tests status,help,index",
59
+ "performance:ci": "npm run performance -- --tests status_command,help_command,index_command",
60
60
  "performance:full": "npm run performance -- --verbose",
61
61
  "version:update": "node scripts/update-version.js",
62
62
  "version:check": "node scripts/version-check.js",
@@ -131,6 +131,7 @@
131
131
  "yaml": "^2.4.1"
132
132
  },
133
133
  "devDependencies": {
134
+ "@eslint/js": "^9.39.2",
134
135
  "@types/inquirer": "^9.0.9",
135
136
  "@types/jest": "^29.5.14",
136
137
  "@types/js-yaml": "^4.0.9",
@@ -143,10 +144,11 @@
143
144
  "prettier": "^3.2.5",
144
145
  "ts-jest": "^29.4.1",
145
146
  "ts-node": "^10.9.2",
146
- "typescript": "^5.3.3"
147
+ "typescript": "^5.3.3",
148
+ "typescript-eslint": "^8.56.0"
147
149
  },
148
150
  "engines": {
149
- "node": ">=14.0.0"
151
+ "node": ">=18.0.0"
150
152
  },
151
153
  "publishConfig": {
152
154
  "access": "public"
package/project.faf CHANGED
@@ -1,5 +1,5 @@
1
1
  faf_version: 2.5.0
2
- generated: 2026-02-17T04:13:29.330Z
2
+ generated: 2026-02-18T19:56:53.057Z
3
3
  ai_scoring_system: 2025-09-20
4
4
  ai_score: 83%
5
5
  ai_confidence: HIGH
@@ -50,7 +50,7 @@ stack:
50
50
  frontend: CLI
51
51
  ui_library: inquirer (interactive prompts)
52
52
  backend: Node.js
53
- runtime: Node.js >=14.0.0
53
+ runtime: Node.js >=18.0.0
54
54
  database: None
55
55
  build: TypeScript (tsc)
56
56
  package_manager: npm
@@ -67,7 +67,7 @@ preferences:
67
67
  documentation: as_needed
68
68
  state:
69
69
  phase: development
70
- version: 4.4.2
70
+ version: 4.5.0
71
71
  focus: production_deployment
72
72
  status: green_flag
73
73
  next_milestone: npm_publication
@@ -132,6 +132,6 @@ gemini:
132
132
  notes: Native Gemini CLI integration via FAF
133
133
  faf_dna:
134
134
  birth_dna: 86
135
- birth_certificate: FAF-2026-CLIX-07DH
136
- birth_date: 2026-02-17T04:13:29.390Z
135
+ birth_certificate: FAF-2026-CLIX-KQPK
136
+ birth_date: 2026-02-18T19:56:53.125Z
137
137
  current_score: 86