prelude-context 1.6.0 → 1.7.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 (35) hide show
  1. package/README.md +63 -4
  2. package/dist/bin/prelude.js +2 -0
  3. package/dist/bin/prelude.js.map +1 -1
  4. package/dist/src/commands/export.d.ts.map +1 -1
  5. package/dist/src/commands/export.js +5 -3
  6. package/dist/src/commands/export.js.map +1 -1
  7. package/dist/src/commands/init.d.ts.map +1 -1
  8. package/dist/src/commands/init.js +151 -0
  9. package/dist/src/commands/init.js.map +1 -1
  10. package/dist/src/commands/validate.d.ts +3 -0
  11. package/dist/src/commands/validate.d.ts.map +1 -0
  12. package/dist/src/commands/validate.js +203 -0
  13. package/dist/src/commands/validate.js.map +1 -0
  14. package/dist/src/constants.d.ts +1 -1
  15. package/dist/src/constants.d.ts.map +1 -1
  16. package/dist/src/constants.js +4 -1
  17. package/dist/src/constants.js.map +1 -1
  18. package/dist/src/core/claude-md-parser.d.ts +33 -0
  19. package/dist/src/core/claude-md-parser.d.ts.map +1 -0
  20. package/dist/src/core/claude-md-parser.js +410 -0
  21. package/dist/src/core/claude-md-parser.js.map +1 -0
  22. package/dist/src/core/exporter.d.ts +2 -1
  23. package/dist/src/core/exporter.d.ts.map +1 -1
  24. package/dist/src/core/exporter.js +159 -1
  25. package/dist/src/core/exporter.js.map +1 -1
  26. package/dist/src/core/infer.d.ts.map +1 -1
  27. package/dist/src/core/infer.js +403 -21
  28. package/dist/src/core/infer.js.map +1 -1
  29. package/dist/src/core/source-scanner.d.ts.map +1 -1
  30. package/dist/src/core/source-scanner.js +58 -1
  31. package/dist/src/core/source-scanner.js.map +1 -1
  32. package/dist/src/utils/fs.d.ts.map +1 -1
  33. package/dist/src/utils/fs.js +2 -1
  34. package/dist/src/utils/fs.js.map +1 -1
  35. package/package.json +1 -1
@@ -12,5 +12,5 @@ export declare const CONTEXT_FILES: {
12
12
  readonly WATCHLOG: ".watchlog.json";
13
13
  };
14
14
  export declare const WATCH_PATTERNS: readonly ["package.json", "package-lock.json", "pnpm-lock.yaml", "yarn.lock", "bun.lockb", "tsconfig.json", "tailwind.config.js", "tailwind.config.ts", ".eslintrc.json", ".eslintrc.js", "eslint.config.js", ".prettierrc", ".prettierrc.json", "prettier.config.js", "src/**/*", "lib/**/*", "app/**/*", "pages/**/*", "components/**/*", "requirements.txt", "pyproject.toml", "Cargo.toml", "go.mod"];
15
- export declare const IGNORE_PATTERNS: readonly ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/build/**", "**/.next/**", "**/.context/**", "**/*.test.*", "**/*.spec.*", "**/__pycache__/**", "**/*.egg-info/**", "**/.venv/**", "**/venv/**", "**/.mypy_cache/**", "**/.ruff_cache/**", "**/.pytest_cache/**"];
15
+ export declare const IGNORE_PATTERNS: readonly ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/build/**", "**/.next/**", "**/.context/**", "**/*.test.*", "**/*.spec.*", "**/__pycache__/**", "**/*.egg-info/**", "**/.venv/**", "**/venv/**", "**/.mypy_cache/**", "**/.ruff_cache/**", "**/.pytest_cache/**", "**/target/debug/**", "**/target/release/**", "**/vendor/**"];
16
16
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AAEX,eAAO,MAAM,cAAc,2YAwBjB,CAAC;AAEX,eAAO,MAAM,eAAe,kRAgBlB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AAEX,eAAO,MAAM,cAAc,2YAwBjB,CAAC;AAEX,eAAO,MAAM,eAAe,gVAmBlB,CAAC"}
@@ -51,6 +51,9 @@ export const IGNORE_PATTERNS = [
51
51
  '**/venv/**',
52
52
  '**/.mypy_cache/**',
53
53
  '**/.ruff_cache/**',
54
- '**/.pytest_cache/**'
54
+ '**/.pytest_cache/**',
55
+ '**/target/debug/**',
56
+ '**/target/release/**',
57
+ '**/vendor/**'
55
58
  ];
56
59
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,YAAY;IACnB,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,gBAAgB;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,kBAAkB;IAClB,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,YAAY;IACZ,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,YAAY;IACZ,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;CACb,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,YAAY;IACnB,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,kBAAkB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,gBAAgB;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,kBAAkB;IAClB,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,YAAY;IACZ,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,YAAY;IACZ,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,cAAc;CACN,CAAC"}
@@ -0,0 +1,33 @@
1
+ export interface ClaudeMdData {
2
+ projectName?: string;
3
+ description?: string;
4
+ commands?: {
5
+ name: string;
6
+ description: string;
7
+ }[];
8
+ architecture?: {
9
+ type?: string;
10
+ patterns?: string[];
11
+ directories?: {
12
+ path: string;
13
+ purpose?: string;
14
+ }[];
15
+ };
16
+ constraints?: {
17
+ mustUse?: string[];
18
+ mustNotUse?: string[];
19
+ };
20
+ conventions?: string[];
21
+ stack?: {
22
+ language?: string;
23
+ frameworks?: string[];
24
+ database?: string;
25
+ testing?: string;
26
+ };
27
+ }
28
+ /**
29
+ * Parse a CLAUDE.md file and extract structured data.
30
+ * Best-effort — never throws on malformed input.
31
+ */
32
+ export declare function parseClaudeMd(filePath: string): Promise<ClaudeMdData>;
33
+ //# sourceMappingURL=claude-md-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md-parser.d.ts","sourceRoot":"","sources":["../../../src/core/claude-md-parser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,YAAY,CAAC,EAAE;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACpD,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAQD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA8F3E"}
@@ -0,0 +1,410 @@
1
+ import { readFile } from 'fs/promises';
2
+ /**
3
+ * Parse a CLAUDE.md file and extract structured data.
4
+ * Best-effort — never throws on malformed input.
5
+ */
6
+ export async function parseClaudeMd(filePath) {
7
+ let content;
8
+ try {
9
+ content = await readFile(filePath, 'utf-8');
10
+ }
11
+ catch {
12
+ return {};
13
+ }
14
+ const sections = splitSections(content);
15
+ const data = {};
16
+ // Extract project name from first heading
17
+ const firstH1 = sections.find(s => s.level === 1);
18
+ if (firstH1) {
19
+ data.projectName = cleanProjectName(firstH1.heading);
20
+ // Description is the first paragraph after the first heading
21
+ const desc = extractFirstParagraph(firstH1.body);
22
+ if (desc) {
23
+ data.description = desc;
24
+ }
25
+ }
26
+ // If no H1, try the first H2
27
+ if (!data.projectName) {
28
+ const firstH2 = sections.find(s => s.level === 2);
29
+ if (firstH2) {
30
+ // Check if there's text before first section that describes the project
31
+ const preamble = content.split(/^#{1,2}\s/m)[0].trim();
32
+ if (preamble) {
33
+ data.description = extractFirstParagraph(preamble);
34
+ }
35
+ }
36
+ }
37
+ // If no description yet, look for sections with descriptive headings
38
+ if (!data.description) {
39
+ const descSection = findSection(sections, ['what is', 'about', 'overview', 'identity', 'description']);
40
+ if (descSection) {
41
+ const desc = extractFirstParagraph(descSection.body);
42
+ if (desc)
43
+ data.description = desc;
44
+ }
45
+ }
46
+ // Extract commands
47
+ const cmdSection = findSection(sections, ['commands', 'scripts', 'usage', 'cli commands', 'cli']);
48
+ if (cmdSection) {
49
+ data.commands = extractCommands(cmdSection.body);
50
+ }
51
+ // Extract architecture
52
+ const archSection = findSection(sections, ['architecture', 'structure', 'project structure', 'file structure', 'directory structure']);
53
+ if (archSection) {
54
+ data.architecture = extractArchitecture(archSection.body);
55
+ }
56
+ // If no architecture section, try to extract directory info from any code block with paths
57
+ if (!data.architecture?.directories?.length) {
58
+ for (const section of sections) {
59
+ const dirs = extractDirectoryList(section.body);
60
+ if (dirs.length > 0) {
61
+ if (!data.architecture)
62
+ data.architecture = {};
63
+ data.architecture.directories = dirs;
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ // Extract constraints and conventions
69
+ const constraintSection = findSection(sections, ['rules', 'constraints', 'important', 'critical rules', 'things to be careful about']);
70
+ const conventionSection = findSection(sections, ['conventions', 'style', 'code style', 'coding standards']);
71
+ if (constraintSection) {
72
+ data.constraints = extractConstraints(constraintSection.body);
73
+ // Also pull conventions from constraint sections
74
+ const convs = extractConventions(constraintSection.body);
75
+ if (convs.length > 0) {
76
+ data.conventions = convs;
77
+ }
78
+ }
79
+ if (conventionSection) {
80
+ const convs = extractConventions(conventionSection.body);
81
+ if (convs.length > 0) {
82
+ data.conventions = [...(data.conventions || []), ...convs];
83
+ }
84
+ }
85
+ // Extract stack info from various sections
86
+ data.stack = extractStackInfo(content, sections);
87
+ if (data.stack && !data.stack.language && !data.stack.frameworks?.length && !data.stack.database && !data.stack.testing) {
88
+ delete data.stack;
89
+ }
90
+ return data;
91
+ }
92
+ function splitSections(content) {
93
+ const sections = [];
94
+ const lines = content.split('\n');
95
+ let currentHeading = '';
96
+ let currentLevel = 0;
97
+ let bodyLines = [];
98
+ for (const line of lines) {
99
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
100
+ if (headingMatch) {
101
+ // Save previous section
102
+ if (currentHeading || bodyLines.length > 0) {
103
+ sections.push({
104
+ heading: currentHeading,
105
+ level: currentLevel,
106
+ body: bodyLines.join('\n').trim()
107
+ });
108
+ }
109
+ currentLevel = headingMatch[1].length;
110
+ currentHeading = headingMatch[2].trim();
111
+ bodyLines = [];
112
+ }
113
+ else {
114
+ bodyLines.push(line);
115
+ }
116
+ }
117
+ // Save last section
118
+ if (currentHeading || bodyLines.length > 0) {
119
+ sections.push({
120
+ heading: currentHeading,
121
+ level: currentLevel,
122
+ body: bodyLines.join('\n').trim()
123
+ });
124
+ }
125
+ return sections;
126
+ }
127
+ function findSection(sections, keywords) {
128
+ return sections.find(s => {
129
+ const lower = s.heading.toLowerCase();
130
+ return keywords.some(kw => lower.includes(kw));
131
+ });
132
+ }
133
+ function cleanProjectName(heading) {
134
+ // Remove common prefixes/suffixes like "CLAUDE.md —", "# ", version info
135
+ let name = heading
136
+ .replace(/^CLAUDE\.md\s*[—–-]\s*/i, '')
137
+ .replace(/\s*v\d+\.\d+(\.\d+)?$/i, '')
138
+ .replace(/\s*[—–-]\s*.*$/, '') // Remove everything after em-dash
139
+ .trim();
140
+ // If the heading is just "CLAUDE.md", skip it
141
+ if (/^CLAUDE\.md$/i.test(name)) {
142
+ return '';
143
+ }
144
+ return name;
145
+ }
146
+ function extractFirstParagraph(text) {
147
+ const lines = text.split('\n');
148
+ const paragraphLines = [];
149
+ for (const line of lines) {
150
+ const trimmed = line.trim();
151
+ // Skip empty lines at the start
152
+ if (paragraphLines.length === 0 && !trimmed)
153
+ continue;
154
+ // Skip headings, code fences, lists at the start
155
+ if (paragraphLines.length === 0 && (trimmed.startsWith('#') || trimmed.startsWith('```') || trimmed.startsWith('- ') || trimmed.startsWith('* ')))
156
+ continue;
157
+ // End paragraph at empty line or heading
158
+ if (trimmed === '' && paragraphLines.length > 0)
159
+ break;
160
+ if (trimmed.startsWith('#'))
161
+ break;
162
+ if (trimmed.startsWith('```'))
163
+ break;
164
+ paragraphLines.push(trimmed);
165
+ }
166
+ const result = paragraphLines.join(' ').trim();
167
+ return result.length > 0 ? result : undefined;
168
+ }
169
+ function extractCommands(body) {
170
+ const commands = [];
171
+ // Match code blocks with shell commands
172
+ const codeBlockRegex = /```(?:bash|sh|shell|zsh)?\n([\s\S]*?)```/g;
173
+ let match;
174
+ while ((match = codeBlockRegex.exec(body)) !== null) {
175
+ const block = match[1];
176
+ for (const line of block.split('\n')) {
177
+ const trimmed = line.trim();
178
+ if (!trimmed || trimmed.startsWith('#'))
179
+ continue;
180
+ // Extract command and inline comment
181
+ const commentMatch = trimmed.match(/^(.+?)\s+#\s+(.+)$/);
182
+ if (commentMatch) {
183
+ commands.push({ name: commentMatch[1].trim(), description: commentMatch[2].trim() });
184
+ }
185
+ else {
186
+ commands.push({ name: trimmed, description: '' });
187
+ }
188
+ }
189
+ }
190
+ // Also check for table-style commands: | command | description |
191
+ const tableRows = body.match(/\|\s*`([^`]+)`\s*\|\s*([^|]+)\|/g);
192
+ if (tableRows) {
193
+ for (const row of tableRows) {
194
+ const cells = row.match(/\|\s*`([^`]+)`\s*\|\s*([^|]+)\|/);
195
+ if (cells) {
196
+ commands.push({ name: cells[1].trim(), description: cells[2].trim() });
197
+ }
198
+ }
199
+ }
200
+ // Check for list-style: - `command` — description
201
+ const listRegex = /^[-*]\s+`([^`]+)`\s*[—–-]\s*(.+)$/gm;
202
+ while ((match = listRegex.exec(body)) !== null) {
203
+ commands.push({ name: match[1].trim(), description: match[2].trim() });
204
+ }
205
+ return commands;
206
+ }
207
+ function extractArchitecture(body) {
208
+ const arch = {};
209
+ // Detect architecture type from keywords
210
+ const lower = body.toLowerCase();
211
+ if (lower.includes('monorepo'))
212
+ arch.type = 'monorepo';
213
+ else if (lower.includes('microservice'))
214
+ arch.type = 'microservices';
215
+ else if (lower.includes('monolith'))
216
+ arch.type = 'monolith';
217
+ else if (lower.includes('cli') && lower.includes('tool'))
218
+ arch.type = 'cli';
219
+ else if (lower.includes('library') || lower.includes('sdk'))
220
+ arch.type = 'library';
221
+ else if (lower.includes('fullstack') || lower.includes('full-stack'))
222
+ arch.type = 'fullstack';
223
+ else if (lower.includes('backend') && lower.includes('frontend'))
224
+ arch.type = 'fullstack';
225
+ else if (lower.includes('api') && !lower.includes('frontend'))
226
+ arch.type = 'backend';
227
+ // Extract patterns
228
+ const patterns = [];
229
+ const patternKeywords = [
230
+ 'mvc', 'mvvm', 'event-driven', 'event driven', 'cqrs', 'pub/sub', 'pubsub',
231
+ 'repository pattern', 'factory pattern', 'singleton', 'observer',
232
+ 'pipe and filter', 'pipeline', 'layered', 'hexagonal', 'clean architecture',
233
+ 'domain-driven', 'ddd', 'serverless', 'microkernel'
234
+ ];
235
+ for (const kw of patternKeywords) {
236
+ if (lower.includes(kw)) {
237
+ patterns.push(kw);
238
+ }
239
+ }
240
+ if (patterns.length > 0)
241
+ arch.patterns = patterns;
242
+ // Extract directories
243
+ const dirs = extractDirectoryList(body);
244
+ if (dirs.length > 0)
245
+ arch.directories = dirs;
246
+ return arch;
247
+ }
248
+ function extractDirectoryList(body) {
249
+ const dirs = [];
250
+ // Code block with directory tree (path followed by description)
251
+ const codeBlockRegex = /```[^\n]*\n([\s\S]*?)```/g;
252
+ let match;
253
+ while ((match = codeBlockRegex.exec(body)) !== null) {
254
+ const block = match[1];
255
+ for (const line of block.split('\n')) {
256
+ const trimmed = line.trim();
257
+ // Match lines like: src/core/ Business logic
258
+ // or: src/core/ — Business logic
259
+ const dirMatch = trimmed.match(/^(\S+\/\S*)\s+[—–-]?\s*(.+)$/);
260
+ if (dirMatch && !dirMatch[1].startsWith('#') && !dirMatch[1].startsWith('$')) {
261
+ dirs.push({ path: dirMatch[1], purpose: dirMatch[2].trim() });
262
+ }
263
+ }
264
+ }
265
+ // Markdown list with paths: - `src/core/` — Business logic
266
+ // or: - src/core/ — Business logic
267
+ const listRegex = /^[-*]\s+`?([^\s`]+\/[^\s`]*)`?\s*[—–-]+\s*(.+)$/gm;
268
+ while ((match = listRegex.exec(body)) !== null) {
269
+ // Avoid duplicates
270
+ const path = match[1];
271
+ if (!dirs.some(d => d.path === path)) {
272
+ dirs.push({ path, purpose: match[2].trim() });
273
+ }
274
+ }
275
+ return dirs;
276
+ }
277
+ function extractConstraints(body) {
278
+ const mustUse = [];
279
+ const mustNotUse = [];
280
+ const lines = body.split('\n');
281
+ for (const line of lines) {
282
+ const lower = line.toLowerCase();
283
+ const trimmed = line.replace(/^[-*\d.)\s]+/, '').replace(/\*\*/g, '').trim();
284
+ if (!trimmed)
285
+ continue;
286
+ // "must use", "always use", "required"
287
+ if (lower.includes('must use') || lower.includes('always use') || lower.includes('required:')) {
288
+ mustUse.push(trimmed);
289
+ }
290
+ // "must not", "never", "do not", "don't", "avoid"
291
+ else if (lower.includes('must not') || lower.includes('never ') || lower.includes('do not ') ||
292
+ lower.includes("don't") || lower.includes('avoid ') || lower.includes('no ') && lower.includes('use')) {
293
+ mustNotUse.push(trimmed);
294
+ }
295
+ }
296
+ const result = {};
297
+ if (mustUse.length > 0)
298
+ result.mustUse = mustUse;
299
+ if (mustNotUse.length > 0)
300
+ result.mustNotUse = mustNotUse;
301
+ return Object.keys(result).length > 0 ? result : undefined;
302
+ }
303
+ function extractConventions(body) {
304
+ const conventions = [];
305
+ // Extract bullet points as conventions
306
+ const listRegex = /^[-*]\s+\*?\*?(.+?)\*?\*?\s*$/gm;
307
+ let match;
308
+ while ((match = listRegex.exec(body)) !== null) {
309
+ const item = match[1].replace(/\*\*/g, '').trim();
310
+ if (item.length > 10 && item.length < 200) {
311
+ conventions.push(item);
312
+ }
313
+ }
314
+ // Extract numbered list items
315
+ const numberedRegex = /^\d+\.\s+\*?\*?(.+?)\*?\*?\s*$/gm;
316
+ while ((match = numberedRegex.exec(body)) !== null) {
317
+ const item = match[1].replace(/\*\*/g, '').trim();
318
+ if (item.length > 10 && item.length < 200) {
319
+ conventions.push(item);
320
+ }
321
+ }
322
+ return conventions;
323
+ }
324
+ function extractStackInfo(content, sections) {
325
+ const stack = {};
326
+ const lower = content.toLowerCase();
327
+ // Detect language
328
+ const languagePatterns = [
329
+ [/\btypescript\b/i, 'TypeScript'],
330
+ [/\bpython\s*3?\b/i, 'Python'],
331
+ [/\brust\b/i, 'Rust'],
332
+ [/\bgo\b(?:lang)?/i, 'Go'],
333
+ [/\bruby\b/i, 'Ruby'],
334
+ [/\bjava\b(?!script)/i, 'Java'],
335
+ [/\bkotlin\b/i, 'Kotlin'],
336
+ [/\bswift\b/i, 'Swift'],
337
+ [/\bc#\b|csharp/i, 'C#'],
338
+ [/\bjavascript\b/i, 'JavaScript'],
339
+ ];
340
+ for (const [pattern, lang] of languagePatterns) {
341
+ if (pattern.test(content)) {
342
+ stack.language = lang;
343
+ break;
344
+ }
345
+ }
346
+ // Detect frameworks
347
+ const frameworks = [];
348
+ const frameworkPatterns = [
349
+ [/\bnext\.?js\b/i, 'Next.js'],
350
+ [/\breact\b/i, 'React'],
351
+ [/\bvue\b/i, 'Vue'],
352
+ [/\bangular\b/i, 'Angular'],
353
+ [/\bsvelte\b/i, 'Svelte'],
354
+ [/\bexpress\b/i, 'Express'],
355
+ [/\bfastapi\b/i, 'FastAPI'],
356
+ [/\bflask\b/i, 'Flask'],
357
+ [/\bdjango\b/i, 'Django'],
358
+ [/\brails\b/i, 'Rails'],
359
+ [/\bspring\b/i, 'Spring'],
360
+ [/\bactix\b/i, 'Actix'],
361
+ [/\brocket\b/i, 'Rocket'],
362
+ [/\bnuxt\b/i, 'Nuxt'],
363
+ [/\bastro\b/i, 'Astro'],
364
+ [/\bremix\b/i, 'Remix'],
365
+ [/\btailwind\b/i, 'Tailwind CSS'],
366
+ ];
367
+ for (const [pattern, name] of frameworkPatterns) {
368
+ if (pattern.test(content)) {
369
+ frameworks.push(name);
370
+ }
371
+ }
372
+ if (frameworks.length > 0)
373
+ stack.frameworks = frameworks;
374
+ // Detect database
375
+ const dbPatterns = [
376
+ [/\bpostgres(?:ql)?\b/i, 'PostgreSQL'],
377
+ [/\bsupabase\b/i, 'Supabase (PostgreSQL)'],
378
+ [/\bmysql\b/i, 'MySQL'],
379
+ [/\bmongodb\b/i, 'MongoDB'],
380
+ [/\bredis\b/i, 'Redis'],
381
+ [/\bsqlite\b/i, 'SQLite'],
382
+ [/\bfirestore\b/i, 'Firestore'],
383
+ [/\bdynamodb\b/i, 'DynamoDB'],
384
+ ];
385
+ for (const [pattern, db] of dbPatterns) {
386
+ if (pattern.test(content)) {
387
+ stack.database = db;
388
+ break;
389
+ }
390
+ }
391
+ // Detect testing framework
392
+ const testPatterns = [
393
+ [/\bvitest\b/i, 'Vitest'],
394
+ [/\bjest\b/i, 'Jest'],
395
+ [/\bmocha\b/i, 'Mocha'],
396
+ [/\bpytest\b/i, 'pytest'],
397
+ [/\bunittest\b/i, 'unittest'],
398
+ [/\brspec\b/i, 'RSpec'],
399
+ [/\bcypress\b/i, 'Cypress'],
400
+ [/\bplaywright\b/i, 'Playwright'],
401
+ ];
402
+ for (const [pattern, test] of testPatterns) {
403
+ if (pattern.test(content)) {
404
+ stack.testing = test;
405
+ break;
406
+ }
407
+ }
408
+ return (stack.language || stack.frameworks?.length || stack.database || stack.testing) ? stack : undefined;
409
+ }
410
+ //# sourceMappingURL=claude-md-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md-parser.js","sourceRoot":"","sources":["../../../src/core/claude-md-parser.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare function exportToMarkdown(rootDir: string): Promise<string>;
2
2
  export declare function exportToJSON(rootDir: string): Promise<object>;
3
- export declare function saveExport(rootDir: string, format?: 'md' | 'json'): Promise<string>;
3
+ export declare function exportToClaudeMd(rootDir: string): Promise<string>;
4
+ export declare function saveExport(rootDir: string, format?: 'md' | 'json' | 'claude-md' | 'cursorrules'): Promise<string>;
4
5
  //# sourceMappingURL=exporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/core/exporter.ts"],"names":[],"mappings":"AAKA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqOvE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,GAAG,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/F"}
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/core/exporter.ts"],"names":[],"mappings":"AAKA,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqOvE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnE;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkJvE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,aAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7H"}