faf-cli 4.4.4 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -21
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +151 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts +14 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +353 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/bi-sync.d.ts +4 -0
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +51 -0
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/cursor.d.ts +13 -0
- package/dist/commands/cursor.d.ts.map +1 -0
- package/dist/commands/cursor.js +310 -0
- package/dist/commands/cursor.js.map +1 -0
- package/dist/commands/go.d.ts.map +1 -1
- package/dist/commands/go.js +22 -19
- package/dist/commands/go.js.map +1 -1
- package/dist/commands/memory.d.ts +14 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +293 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/pro.d.ts +10 -0
- package/dist/commands/pro.d.ts.map +1 -0
- package/dist/commands/pro.js +113 -0
- package/dist/commands/pro.js.map +1 -0
- package/dist/commands/ram.d.ts +17 -0
- package/dist/commands/ram.d.ts.map +1 -0
- package/dist/commands/ram.js +303 -0
- package/dist/commands/ram.js.map +1 -0
- package/dist/commands/readme.js +8 -8
- package/dist/commands/readme.js.map +1 -1
- package/dist/commands/sixws.js +1 -1
- package/dist/commands/taf-log.d.ts +1 -0
- package/dist/commands/taf-log.d.ts.map +1 -1
- package/dist/commands/taf-log.js +53 -5
- package/dist/commands/taf-log.js.map +1 -1
- package/dist/commands/taf-stars.d.ts +8 -0
- package/dist/commands/taf-stars.d.ts.map +1 -0
- package/dist/commands/taf-stars.js +105 -0
- package/dist/commands/taf-stars.js.map +1 -0
- package/dist/commands/taf.d.ts +1 -0
- package/dist/commands/taf.d.ts.map +1 -1
- package/dist/commands/taf.js +9 -0
- package/dist/commands/taf.js.map +1 -1
- package/dist/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +24 -2
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/engines/v252-hybrid-engine.d.ts +1 -1
- package/dist/engines/v252-hybrid-engine.d.ts.map +1 -1
- package/dist/engines/v252-hybrid-engine.js +1 -1
- package/dist/engines/v252-hybrid-engine.js.map +1 -1
- package/dist/github/repo-selector.js +4 -4
- package/dist/github/repo-selector.js.map +1 -1
- package/dist/licensing/license-messages.d.ts +20 -0
- package/dist/licensing/license-messages.d.ts.map +1 -0
- package/dist/licensing/license-messages.js +77 -0
- package/dist/licensing/license-messages.js.map +1 -0
- package/dist/licensing/pro-gate.d.ts +54 -0
- package/dist/licensing/pro-gate.d.ts.map +1 -0
- package/dist/licensing/pro-gate.js +243 -0
- package/dist/licensing/pro-gate.js.map +1 -0
- package/dist/taf/index.d.ts +4 -0
- package/dist/taf/index.d.ts.map +1 -1
- package/dist/taf/index.js +16 -1
- package/dist/taf/index.js.map +1 -1
- package/dist/taf/star-badge.d.ts +32 -0
- package/dist/taf/star-badge.d.ts.map +1 -0
- package/dist/taf/star-badge.js +158 -0
- package/dist/taf/star-badge.js.map +1 -0
- package/dist/taf/star-rating.d.ts +30 -0
- package/dist/taf/star-rating.d.ts.map +1 -0
- package/dist/taf/star-rating.js +79 -0
- package/dist/taf/star-rating.js.map +1 -0
- package/dist/taf/test-output-parser.d.ts +42 -0
- package/dist/taf/test-output-parser.d.ts.map +1 -0
- package/dist/taf/test-output-parser.js +114 -0
- package/dist/taf/test-output-parser.js.map +1 -0
- package/dist/utils/agents-parser.d.ts +60 -0
- package/dist/utils/agents-parser.d.ts.map +1 -0
- package/dist/utils/agents-parser.js +325 -0
- package/dist/utils/agents-parser.js.map +1 -0
- package/dist/utils/cursorrules-parser.d.ts +56 -0
- package/dist/utils/cursorrules-parser.d.ts.map +1 -0
- package/dist/utils/cursorrules-parser.js +315 -0
- package/dist/utils/cursorrules-parser.js.map +1 -0
- package/dist/utils/memory-parser.d.ts +95 -0
- package/dist/utils/memory-parser.d.ts.map +1 -0
- package/dist/utils/memory-parser.js +408 -0
- package/dist/utils/memory-parser.js.map +1 -0
- package/package.json +1 -1
- package/project.faf +12 -20
|
@@ -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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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MEMORY.md Parser — Claude Code Auto-Memory Interop
|
|
3
|
+
*
|
|
4
|
+
* Bidirectional interoperability between FAF and Claude Code's
|
|
5
|
+
* auto-memory system (~/.claude/projects/<id>/memory/MEMORY.md).
|
|
6
|
+
*
|
|
7
|
+
* Key difference from other targets: MEMORY.md lives OUTSIDE the
|
|
8
|
+
* project root, has a 200-line auto-load ceiling, and must MERGE
|
|
9
|
+
* (not overwrite) to preserve Claude's own notes.
|
|
10
|
+
*
|
|
11
|
+
* Path convention:
|
|
12
|
+
* ~/.claude/projects/<project-id>/memory/MEMORY.md
|
|
13
|
+
* project-id = absolute path with / replaced by -
|
|
14
|
+
* e.g. /Users/wolfejam/FAF/cli → -Users-wolfejam-FAF-cli
|
|
15
|
+
*/
|
|
16
|
+
export interface MemoryMdSection {
|
|
17
|
+
title: string;
|
|
18
|
+
content: string;
|
|
19
|
+
}
|
|
20
|
+
export interface MemoryMdFile {
|
|
21
|
+
fafSection: string | null;
|
|
22
|
+
claudeNotes: string;
|
|
23
|
+
totalLines: number;
|
|
24
|
+
}
|
|
25
|
+
export interface MemoryImportResult {
|
|
26
|
+
success: boolean;
|
|
27
|
+
warnings: string[];
|
|
28
|
+
harvested: {
|
|
29
|
+
patterns: string[];
|
|
30
|
+
conventions: string[];
|
|
31
|
+
keyFiles: string[];
|
|
32
|
+
notes: string[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface MemoryExportResult {
|
|
36
|
+
success: boolean;
|
|
37
|
+
filePath: string;
|
|
38
|
+
linesWritten: number;
|
|
39
|
+
warnings: string[];
|
|
40
|
+
merged: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compute Claude Code project ID from an absolute path.
|
|
44
|
+
* Convention: /Users/wolfejam/FAF/cli → -Users-wolfejam-FAF-cli
|
|
45
|
+
*/
|
|
46
|
+
export declare function computeProjectId(projectPath: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Get the git repository root for a directory.
|
|
49
|
+
* Returns null if not in a git repo.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getGitRoot(cwd?: string): string | null;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the memory directory for a project.
|
|
54
|
+
* → ~/.claude/projects/-Users-wolfejam-FAF-cli/memory/
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveMemoryDir(projectPath: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Resolve the full MEMORY.md path for a project.
|
|
59
|
+
* → ~/.claude/projects/-Users-wolfejam-FAF-cli/memory/MEMORY.md
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveMemoryPath(projectPath: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Parse MEMORY.md into our section and Claude's notes.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseMemoryMd(content: string): MemoryMdFile;
|
|
66
|
+
/**
|
|
67
|
+
* Export .faf data to MEMORY.md.
|
|
68
|
+
* Merge mode (default): replace only our section, preserve Claude's notes.
|
|
69
|
+
* Force mode: overwrite entire file.
|
|
70
|
+
*/
|
|
71
|
+
export declare function memoryExport(fafContent: any, outputPath: string, options?: {
|
|
72
|
+
merge?: boolean;
|
|
73
|
+
}): Promise<MemoryExportResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Import/harvest Claude's notes from MEMORY.md into structured data.
|
|
76
|
+
* Conservative: only extracts clearly structured entries.
|
|
77
|
+
*/
|
|
78
|
+
export declare function memoryImport(memoryPath: string): Promise<MemoryImportResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Detect MEMORY.md at Claude's expected path for this project.
|
|
81
|
+
* Returns the path if found, null otherwise.
|
|
82
|
+
*/
|
|
83
|
+
export declare function detectMemoryMd(projectPath: string): Promise<string | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Get memory status for display.
|
|
86
|
+
*/
|
|
87
|
+
export declare function getMemoryStatus(projectPath: string): Promise<{
|
|
88
|
+
exists: boolean;
|
|
89
|
+
path: string;
|
|
90
|
+
totalLines: number;
|
|
91
|
+
fafSectionLines: number;
|
|
92
|
+
claudeNotesLines: number;
|
|
93
|
+
hasFafSection: boolean;
|
|
94
|
+
}>;
|
|
95
|
+
//# sourceMappingURL=memory-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-parser.d.ts","sourceRoot":"","sources":["../../src/utils/memory-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAaD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA6B3D;AA4GD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAsD7B;AAMD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmElF;AAMD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQhF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC,CAwBD"}
|