agentmap 0.6.0 → 0.7.1
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/dist/cli.js +16 -11
- package/dist/cli.js.map +1 -1
- package/dist/extract/markdown.d.ts.map +1 -1
- package/dist/extract/markdown.js +5 -17
- package/dist/extract/markdown.js.map +1 -1
- package/dist/extract/marker.d.ts +6 -1
- package/dist/extract/marker.d.ts.map +1 -1
- package/dist/extract/marker.js +26 -18
- package/dist/extract/marker.js.map +1 -1
- package/dist/extract/utils.d.ts +6 -0
- package/dist/extract/utils.d.ts.map +1 -0
- package/dist/extract/utils.js +28 -0
- package/dist/extract/utils.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/map/truncate.d.ts +12 -0
- package/dist/map/truncate.d.ts.map +1 -0
- package/dist/map/truncate.js +77 -0
- package/dist/map/truncate.js.map +1 -0
- package/dist/map/yaml.d.ts +1 -0
- package/dist/map/yaml.d.ts.map +1 -1
- package/dist/map/yaml.js +13 -5
- package/dist/map/yaml.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +33 -25
- package/dist/scanner.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { writeFile } from 'fs/promises';
|
|
4
4
|
import { resolve } from 'path';
|
|
5
5
|
import { cac } from 'cac';
|
|
6
|
-
import { generateMap,
|
|
6
|
+
import { generateMap, toYaml } from './index.js';
|
|
7
7
|
const cli = cac('agentmap');
|
|
8
8
|
const NO_FILES_MESSAGE = `No files found with header comments.
|
|
9
9
|
|
|
@@ -20,14 +20,15 @@ cli
|
|
|
20
20
|
.command('[dir]', 'Generate a YAML map of the codebase')
|
|
21
21
|
.option('-o, --output <file>', 'Write output to file (default: stdout)')
|
|
22
22
|
.option('-i, --ignore <pattern>', 'Ignore pattern (can be repeated)', { type: [] })
|
|
23
|
-
.option('-
|
|
23
|
+
.option('-f, --filter <pattern>', 'Filter pattern - only include matching files (can be repeated)', { type: [] })
|
|
24
24
|
.action(async (dir, options) => {
|
|
25
25
|
const targetDir = resolve(dir ?? '.');
|
|
26
26
|
try {
|
|
27
27
|
const map = await generateMap({
|
|
28
28
|
dir: targetDir,
|
|
29
29
|
ignore: options.ignore,
|
|
30
|
-
|
|
30
|
+
filter: options.filter,
|
|
31
|
+
diff: true,
|
|
31
32
|
});
|
|
32
33
|
// Check if map is empty (only has root key with empty object)
|
|
33
34
|
const rootKey = Object.keys(map)[0];
|
|
@@ -36,11 +37,7 @@ cli
|
|
|
36
37
|
console.error(NO_FILES_MESSAGE);
|
|
37
38
|
process.exit(0);
|
|
38
39
|
}
|
|
39
|
-
const yaml =
|
|
40
|
-
dir: targetDir,
|
|
41
|
-
ignore: options.ignore,
|
|
42
|
-
diff: options.diff,
|
|
43
|
-
});
|
|
40
|
+
const yaml = toYaml(map);
|
|
44
41
|
if (options.output) {
|
|
45
42
|
await writeFile(options.output, yaml, 'utf8');
|
|
46
43
|
console.error(`Wrote map to ${options.output}`);
|
|
@@ -94,9 +91,17 @@ After adding comments to all important files, run \`npx -y agentmap\` to verify
|
|
|
94
91
|
|
|
95
92
|
You can run this prompt again anytime to keep file descriptions up to date as the codebase evolves.
|
|
96
93
|
|
|
97
|
-
Finally,
|
|
94
|
+
Finally, add these instructions to the project's AGENTS.md or CLAUDE.md file (create it if it doesn't exist):
|
|
95
|
+
|
|
96
|
+
\`\`\`markdown
|
|
97
|
+
## Codebase Map
|
|
98
|
+
|
|
99
|
+
Run \`npx -y agentmap\` to see the repo structure with file descriptions, definitions, and git diff status.
|
|
100
|
+
|
|
101
|
+
When editing files with top-level description comments, keep them accurate and up-to-date with your changes.
|
|
102
|
+
\`\`\`
|
|
98
103
|
|
|
99
|
-
For OpenCode:
|
|
104
|
+
For OpenCode users, also set up the agentmap plugin so future sessions automatically get the codebase map:
|
|
100
105
|
1. Add "@agentmap/opencode" to the plugin array in ~/.config/opencode/config.json
|
|
101
106
|
- Create the file if it doesn't exist
|
|
102
107
|
- If a plugin array already exists, append to it
|
|
@@ -108,6 +113,6 @@ cli
|
|
|
108
113
|
console.log(PROMPT_TEXT);
|
|
109
114
|
});
|
|
110
115
|
cli.help();
|
|
111
|
-
cli.version('0.
|
|
116
|
+
cli.version('0.7.1');
|
|
112
117
|
cli.parse();
|
|
113
118
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,+CAA+C;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAA;AAE3B,MAAM,gBAAgB,GAAG;;;;;;;;;;CAUxB,CAAA;AAED,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,qCAAqC,CAAC;KACvD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;KACvE,MAAM,CAAC,wBAAwB,EAAE,kCAAkC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;KAClF,MAAM,CAAC,wBAAwB,EAAE,gEAAgE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;KAChH,MAAM,CAAC,KAAK,EAAE,GAAuB,EAAE,OAAkE,EAAE,EAAE;IAC5G,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAA;IAErC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC;YAC5B,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QAEF,8DAA8D;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;QAC9B,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;YAC7C,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAuDyC,CAAA;AAE7D,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,2DAA2D,CAAC;KAC9E,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AAC1B,CAAC,CAAC,CAAA;AAEJ,GAAG,CAAC,IAAI,EAAE,CAAA;AACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAEpB,GAAG,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extract/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extract/markdown.ts"],"names":[],"mappings":"AAqKA;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BzF"}
|
package/dist/extract/markdown.js
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
1
|
// Extract description from markdown files using marked AST.
|
|
2
|
-
import { open } from 'fs/promises';
|
|
3
2
|
import { Lexer } from 'marked';
|
|
3
|
+
import { readFirstLines } from './utils.js';
|
|
4
4
|
const MAX_LINES = 50;
|
|
5
5
|
const MAX_DESC_LINES = 25;
|
|
6
|
-
/**
|
|
7
|
-
* Read the first N lines of a file
|
|
8
|
-
*/
|
|
9
|
-
async function readFirstLines(filepath, maxLines) {
|
|
10
|
-
const handle = await open(filepath, 'r');
|
|
11
|
-
try {
|
|
12
|
-
const buffer = Buffer.alloc(maxLines * 200);
|
|
13
|
-
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
14
|
-
const content = buffer.toString('utf8', 0, bytesRead);
|
|
15
|
-
const lines = content.split('\n').slice(0, maxLines);
|
|
16
|
-
return lines.join('\n');
|
|
17
|
-
}
|
|
18
|
-
finally {
|
|
19
|
-
await handle.close();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
6
|
/**
|
|
23
7
|
* Truncate lines to MAX_DESC_LINES, adding indicator if truncated
|
|
24
8
|
*/
|
|
@@ -166,6 +150,10 @@ function extractTextFromTokens(tokens) {
|
|
|
166
150
|
*/
|
|
167
151
|
export async function extractMarkdownDescription(filepath) {
|
|
168
152
|
const head = await readFirstLines(filepath, MAX_LINES);
|
|
153
|
+
if (head === null) {
|
|
154
|
+
// File couldn't be read - skip silently
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
169
157
|
try {
|
|
170
158
|
// Parse markdown to tokens using marked lexer
|
|
171
159
|
const lexer = new Lexer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/extract/markdown.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/extract/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/extract/marker.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MarkerResult } from '../types.js';
|
|
1
|
+
import type { MarkerResult, Language } from '../types.js';
|
|
2
2
|
export { extractMarkdownDescription } from './markdown.js';
|
|
3
3
|
/**
|
|
4
4
|
* Extract header comment/docstring from a file.
|
|
@@ -12,4 +12,9 @@ export { extractMarkdownDescription } from './markdown.js';
|
|
|
12
12
|
* - //! inner doc comments (Rust)
|
|
13
13
|
*/
|
|
14
14
|
export declare function extractMarker(filepath: string): Promise<MarkerResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Extract header comment/docstring from code string.
|
|
17
|
+
* Use this when you already have the file content to avoid re-reading.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractMarkerFromCode(code: string, language: Language): Promise<MarkerResult>;
|
|
15
20
|
//# sourceMappingURL=marker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../src/extract/marker.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../src/extract/marker.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAc,MAAM,aAAa,CAAA;AAErE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AA8C1D;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAa3E;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBnG"}
|
package/dist/extract/marker.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Extract file header comment/docstring using tree-sitter.
|
|
2
2
|
// Detects standard comment styles from existing projects.
|
|
3
3
|
// Automatically skips license headers (Copyright, SPDX, etc.).
|
|
4
|
-
import { open } from 'fs/promises';
|
|
5
4
|
import { parseCode, detectLanguage } from '../parser/index.js';
|
|
5
|
+
import { readFirstLines } from './utils.js';
|
|
6
6
|
export { extractMarkdownDescription } from './markdown.js';
|
|
7
7
|
const MAX_LINES = 50;
|
|
8
8
|
const MAX_DESC_LINES = 25;
|
|
@@ -42,23 +42,6 @@ function truncateDescription(lines) {
|
|
|
42
42
|
truncated.push(`... and ${remaining} more lines`);
|
|
43
43
|
return truncated.join('\n');
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Read the first N lines of a file
|
|
47
|
-
*/
|
|
48
|
-
async function readFirstLines(filepath, maxLines) {
|
|
49
|
-
const handle = await open(filepath, 'r');
|
|
50
|
-
try {
|
|
51
|
-
// Read enough bytes for ~50 lines (generous estimate)
|
|
52
|
-
const buffer = Buffer.alloc(maxLines * 200);
|
|
53
|
-
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
54
|
-
const content = buffer.toString('utf8', 0, bytesRead);
|
|
55
|
-
const lines = content.split('\n').slice(0, maxLines);
|
|
56
|
-
return lines.join('\n');
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
await handle.close();
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
45
|
/**
|
|
63
46
|
* Extract header comment/docstring from a file.
|
|
64
47
|
* Uses tree-sitter for clean AST-based extraction.
|
|
@@ -76,6 +59,20 @@ export async function extractMarker(filepath) {
|
|
|
76
59
|
return { found: false };
|
|
77
60
|
}
|
|
78
61
|
const head = await readFirstLines(filepath, MAX_LINES);
|
|
62
|
+
if (head === null) {
|
|
63
|
+
// File couldn't be read - skip silently
|
|
64
|
+
return { found: false };
|
|
65
|
+
}
|
|
66
|
+
return extractMarkerFromCode(head, language);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract header comment/docstring from code string.
|
|
70
|
+
* Use this when you already have the file content to avoid re-reading.
|
|
71
|
+
*/
|
|
72
|
+
export async function extractMarkerFromCode(code, language) {
|
|
73
|
+
// Only parse first MAX_LINES worth of content for efficiency
|
|
74
|
+
const lines = code.split('\n').slice(0, MAX_LINES);
|
|
75
|
+
const head = lines.join('\n');
|
|
79
76
|
const tree = await parseCode(head, language);
|
|
80
77
|
const description = extractHeaderFromAST(tree.rootNode, language);
|
|
81
78
|
if (description === null) {
|
|
@@ -208,11 +205,22 @@ function extractConsecutiveComments(children, startIdx, language) {
|
|
|
208
205
|
}
|
|
209
206
|
return truncateDescription(lines);
|
|
210
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Check if comment is a TypeScript triple-slash reference directive
|
|
210
|
+
* These are compiler directives, not actual comments
|
|
211
|
+
*/
|
|
212
|
+
function isReferenceDirective(text) {
|
|
213
|
+
return /^\/\/\/\s*<reference\s/.test(text);
|
|
214
|
+
}
|
|
211
215
|
/**
|
|
212
216
|
* Extract text content from a comment node
|
|
213
217
|
*/
|
|
214
218
|
function extractCommentText(node, language) {
|
|
215
219
|
const text = node.text;
|
|
220
|
+
// Skip TypeScript triple-slash reference directives
|
|
221
|
+
if (isReferenceDirective(text)) {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
216
224
|
// Rust: line_comment may have doc_comment child with actual content
|
|
217
225
|
if (language === 'rust' && node.type === 'line_comment') {
|
|
218
226
|
const docComment = findChild(node, 'doc_comment');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker.js","sourceRoot":"","sources":["../../src/extract/marker.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,0DAA0D;AAC1D,+DAA+D;AAE/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"marker.js","sourceRoot":"","sources":["../../src/extract/marker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/extract/utils.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkB/F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Shared utilities for file extraction.
|
|
2
|
+
import { open } from 'fs/promises';
|
|
3
|
+
/**
|
|
4
|
+
* Read the first N lines of a file.
|
|
5
|
+
* Returns null if file cannot be read (ENOENT, permission denied, etc.)
|
|
6
|
+
*/
|
|
7
|
+
export async function readFirstLines(filepath, maxLines) {
|
|
8
|
+
let handle;
|
|
9
|
+
try {
|
|
10
|
+
handle = await open(filepath, 'r');
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// File doesn't exist or can't be opened - skip silently
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
// Read enough bytes for ~maxLines lines (generous estimate)
|
|
18
|
+
const buffer = Buffer.alloc(maxLines * 200);
|
|
19
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
20
|
+
const content = buffer.toString('utf8', 0, bytesRead);
|
|
21
|
+
const lines = content.split('\n').slice(0, maxLines);
|
|
22
|
+
return lines.join('\n');
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
await handle.close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/extract/utils.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAgB;IACrE,IAAI,MAAM,CAAA;IACV,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAA;QAC3C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { GenerateOptions, MapNode } from './types.js';
|
|
2
2
|
export { toYaml } from './map/yaml.js';
|
|
3
|
+
export { truncateMap, truncateDefs } from './map/truncate.js';
|
|
3
4
|
export type { DefEntry, Definition, DefinitionDiff, DefinitionStatus, DiffHunk, FileDiffStats, FileEntry, FileDiff, FileResult, GenerateOptions, Language, MapNode, MarkerResult, } from './types.js';
|
|
4
5
|
/**
|
|
5
6
|
* Check if directory is inside a git repository
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE7D,YAAY,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,eAAe,EACf,QAAQ,EACR,OAAO,EACP,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIpD;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAejF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBpF"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,9 @@ import { resolve } from 'path';
|
|
|
5
5
|
import { scanDirectory } from './scanner.js';
|
|
6
6
|
import { buildMap, getRootName } from './map/builder.js';
|
|
7
7
|
import { toYaml } from './map/yaml.js';
|
|
8
|
+
import { truncateMap } from './map/truncate.js';
|
|
8
9
|
export { toYaml } from './map/yaml.js';
|
|
10
|
+
export { truncateMap, truncateDefs } from './map/truncate.js';
|
|
9
11
|
/**
|
|
10
12
|
* Check if directory is inside a git repository
|
|
11
13
|
*/
|
|
@@ -26,6 +28,7 @@ export function isHomeDirectory(dir) {
|
|
|
26
28
|
const resolved = resolve(dir);
|
|
27
29
|
return resolved === home;
|
|
28
30
|
}
|
|
31
|
+
const DEFAULT_MAX_DEFS = 25;
|
|
29
32
|
/**
|
|
30
33
|
* Generate a map object from a directory
|
|
31
34
|
* Returns empty map if not in a git repo or if directory is home
|
|
@@ -38,7 +41,10 @@ export async function generateMap(options = {}) {
|
|
|
38
41
|
return { [rootName]: {} };
|
|
39
42
|
}
|
|
40
43
|
const results = await scanDirectory({ ...options, dir });
|
|
41
|
-
|
|
44
|
+
const map = buildMap(results, rootName);
|
|
45
|
+
// Apply truncation (default 25)
|
|
46
|
+
const maxDefs = options.maxDefs ?? DEFAULT_MAX_DEFS;
|
|
47
|
+
return truncateMap(map, maxDefs);
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
44
50
|
* Generate a YAML string map from a directory
|
|
@@ -56,6 +62,9 @@ export async function generateMapYaml(options = {}) {
|
|
|
56
62
|
}
|
|
57
63
|
const rootName = getRootName(dir);
|
|
58
64
|
const map = buildMap(results, rootName);
|
|
59
|
-
|
|
65
|
+
// Apply truncation (default 25)
|
|
66
|
+
const maxDefs = options.maxDefs ?? DEFAULT_MAX_DEFS;
|
|
67
|
+
const truncated = truncateMap(map, maxDefs);
|
|
68
|
+
return toYaml(truncated);
|
|
60
69
|
}
|
|
61
70
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FileEntry, MapNode } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Truncate definitions in a file entry to maxDefs
|
|
4
|
+
* If file has exported symbols, shows only exports field instead
|
|
5
|
+
* Otherwise uses current truncation behavior
|
|
6
|
+
*/
|
|
7
|
+
export declare function truncateDefs(entry: FileEntry, maxDefs?: number): FileEntry;
|
|
8
|
+
/**
|
|
9
|
+
* Recursively truncate defs in all files in the map
|
|
10
|
+
*/
|
|
11
|
+
export declare function truncateMap(node: MapNode, maxDefs?: number): MapNode;
|
|
12
|
+
//# sourceMappingURL=truncate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/map/truncate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAoB/D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,MAAyB,GAAG,SAAS,CA0C5F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,MAAyB,GAAG,OAAO,CActF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Truncate definitions in map to limit context size.
|
|
2
|
+
const DEFAULT_MAX_DEFS = 25;
|
|
3
|
+
/**
|
|
4
|
+
* Check if a def value indicates exported or extern
|
|
5
|
+
*/
|
|
6
|
+
function isExportedDef(value) {
|
|
7
|
+
return value.includes('exported') || value.includes('extern');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if a value is a FileEntry (has description or defs)
|
|
11
|
+
*/
|
|
12
|
+
function isFileEntry(value) {
|
|
13
|
+
if (!value || typeof value !== 'object')
|
|
14
|
+
return false;
|
|
15
|
+
const obj = value;
|
|
16
|
+
return 'description' in obj || 'defs' in obj;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Truncate definitions in a file entry to maxDefs
|
|
20
|
+
* If file has exported symbols, shows only exports field instead
|
|
21
|
+
* Otherwise uses current truncation behavior
|
|
22
|
+
*/
|
|
23
|
+
export function truncateDefs(entry, maxDefs = DEFAULT_MAX_DEFS) {
|
|
24
|
+
if (!entry.defs)
|
|
25
|
+
return entry;
|
|
26
|
+
const defNames = Object.keys(entry.defs);
|
|
27
|
+
if (defNames.length <= maxDefs)
|
|
28
|
+
return entry;
|
|
29
|
+
// Filter to only exported/extern definitions
|
|
30
|
+
const exportedNames = defNames.filter(name => isExportedDef(entry.defs[name]));
|
|
31
|
+
// If we have exports, use exports field instead of defs
|
|
32
|
+
if (exportedNames.length > 0) {
|
|
33
|
+
const exports = {};
|
|
34
|
+
const maxExports = Math.min(exportedNames.length, maxDefs);
|
|
35
|
+
for (let i = 0; i < maxExports; i++) {
|
|
36
|
+
const name = exportedNames[i];
|
|
37
|
+
exports[name] = entry.defs[name];
|
|
38
|
+
}
|
|
39
|
+
// Add marker if exports were also truncated
|
|
40
|
+
if (exportedNames.length > maxDefs) {
|
|
41
|
+
const remaining = exportedNames.length - maxDefs;
|
|
42
|
+
exports[`__more_${remaining}__`] = `${remaining} more exports`;
|
|
43
|
+
}
|
|
44
|
+
// Return with exports instead of defs
|
|
45
|
+
const { defs, ...rest } = entry;
|
|
46
|
+
return { ...rest, exports };
|
|
47
|
+
}
|
|
48
|
+
// No exports found - use current truncation behavior
|
|
49
|
+
const truncated = {};
|
|
50
|
+
for (let i = 0; i < maxDefs; i++) {
|
|
51
|
+
const name = defNames[i];
|
|
52
|
+
truncated[name] = entry.defs[name];
|
|
53
|
+
}
|
|
54
|
+
const remaining = defNames.length - maxDefs;
|
|
55
|
+
// Add marker that will be converted to comment
|
|
56
|
+
truncated[`__more_${remaining}__`] = `${remaining} more definitions`;
|
|
57
|
+
return { ...entry, defs: truncated };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Recursively truncate defs in all files in the map
|
|
61
|
+
*/
|
|
62
|
+
export function truncateMap(node, maxDefs = DEFAULT_MAX_DEFS) {
|
|
63
|
+
const result = {};
|
|
64
|
+
for (const [key, value] of Object.entries(node)) {
|
|
65
|
+
if (isFileEntry(value)) {
|
|
66
|
+
result[key] = truncateDefs(value, maxDefs);
|
|
67
|
+
}
|
|
68
|
+
else if (value && typeof value === 'object') {
|
|
69
|
+
result[key] = truncateMap(value, maxDefs);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
result[key] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=truncate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/map/truncate.ts"],"names":[],"mappings":"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"}
|
package/dist/map/yaml.d.ts
CHANGED
package/dist/map/yaml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AA0C1C;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU3C"}
|
package/dist/map/yaml.js
CHANGED
|
@@ -8,7 +8,7 @@ function isReadme(key) {
|
|
|
8
8
|
return lower === 'readme.md' || lower === 'readme';
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Custom key sorter: description first, then diff, then defs, then README files, then alphabetical
|
|
11
|
+
* Custom key sorter: description first, then diff, then defs/exports, then README files, then alphabetical
|
|
12
12
|
*/
|
|
13
13
|
function sortKeys(a, b) {
|
|
14
14
|
// description always first
|
|
@@ -21,10 +21,10 @@ function sortKeys(a, b) {
|
|
|
21
21
|
return -1;
|
|
22
22
|
if (b === 'diff')
|
|
23
23
|
return 1;
|
|
24
|
-
// defs third
|
|
25
|
-
if (a === 'defs')
|
|
24
|
+
// defs/exports third
|
|
25
|
+
if (a === 'defs' || a === 'exports')
|
|
26
26
|
return -1;
|
|
27
|
-
if (b === 'defs')
|
|
27
|
+
if (b === 'defs' || b === 'exports')
|
|
28
28
|
return 1;
|
|
29
29
|
// README files come before other files
|
|
30
30
|
const aIsReadme = isReadme(a);
|
|
@@ -36,11 +36,18 @@ function sortKeys(a, b) {
|
|
|
36
36
|
// alphabetical for everything else
|
|
37
37
|
return a.localeCompare(b);
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Convert __more_N__ markers to YAML comments
|
|
41
|
+
*/
|
|
42
|
+
function markersToComments(yamlStr) {
|
|
43
|
+
return yamlStr.replace(/^(\s*)__more_(\d+)__: (\d+ more (?:definitions|exports))$/gm, '$1# ... $3');
|
|
44
|
+
}
|
|
39
45
|
/**
|
|
40
46
|
* Convert map object to YAML string
|
|
47
|
+
* Automatically converts truncation markers to comments
|
|
41
48
|
*/
|
|
42
49
|
export function toYaml(map) {
|
|
43
|
-
|
|
50
|
+
const yamlStr = yaml.dump(map, {
|
|
44
51
|
indent: 2,
|
|
45
52
|
lineWidth: -1, // Don't wrap lines
|
|
46
53
|
noRefs: true, // Don't use YAML references
|
|
@@ -48,5 +55,6 @@ export function toYaml(map) {
|
|
|
48
55
|
quotingType: '"',
|
|
49
56
|
forceQuotes: false,
|
|
50
57
|
});
|
|
58
|
+
return markersToComments(yamlStr);
|
|
51
59
|
}
|
|
52
60
|
//# sourceMappingURL=yaml.js.map
|
package/dist/map/yaml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAG1B;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,2BAA2B;IAC3B,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAA;IACjC,cAAc;IACd,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAA;IAC1B,
|
|
1
|
+
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/map/yaml.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAG1B;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,2BAA2B;IAC3B,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,CAAA;IACjC,cAAc;IACd,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,CAAA;IAC1B,qBAAqB;IACrB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAC7C,uCAAuC;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IACtC,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAA;IACrC,mCAAmC;IACnC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,OAAO,CAAC,OAAO,CACpB,6DAA6D,EAC7D,YAAY,CACb,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC,CAAC,EAAG,mBAAmB;QACnC,MAAM,EAAE,IAAI,EAAI,4BAA4B;QAC5C,QAAQ,EAAQ,qCAAqC;QACrD,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAA;IACF,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
|
package/dist/scanner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAA2B,MAAM,YAAY,CAAA;AAuDtF;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsExF"}
|
package/dist/scanner.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Scan directory for files with header comments/docstrings.
|
|
2
2
|
import { execSync } from 'child_process';
|
|
3
|
+
import pLimit from 'p-limit';
|
|
3
4
|
import picomatch from 'picomatch';
|
|
4
5
|
import { readFile } from 'fs/promises';
|
|
5
6
|
import { join, normalize } from 'path';
|
|
6
|
-
import {
|
|
7
|
+
import { extractMarkerFromCode, extractMarkdownDescription } from './extract/marker.js';
|
|
7
8
|
import { extractDefinitions } from './extract/definitions.js';
|
|
8
9
|
import { getAllDiffData, applyDiffToDefinitions } from './extract/git-status.js';
|
|
9
10
|
import { parseCode, detectLanguage, LANGUAGE_EXTENSIONS } from './parser/index.js';
|
|
@@ -60,11 +61,17 @@ export async function scanDirectory(options = {}) {
|
|
|
60
61
|
const dir = options.dir ?? process.cwd();
|
|
61
62
|
// Filter out null/undefined/empty patterns (cac can pass [null] when option not used)
|
|
62
63
|
const ignorePatterns = (options.ignore ?? []).filter((p) => !!p);
|
|
64
|
+
const filterPatterns = (options.filter ?? []).filter((p) => !!p);
|
|
63
65
|
const includeDiff = options.diff ?? false;
|
|
64
66
|
// Get file list from git (caller should ensure we're in a git repo)
|
|
65
67
|
let files = getGitFiles(dir);
|
|
66
68
|
// Filter by supported extensions or README files
|
|
67
69
|
files = files.filter(f => isSupportedFile(f) || isReadmeFile(f));
|
|
70
|
+
// Filter by filter patterns (only include matching files)
|
|
71
|
+
if (filterPatterns.length > 0) {
|
|
72
|
+
const isIncluded = picomatch(filterPatterns);
|
|
73
|
+
files = files.filter(f => isIncluded(f));
|
|
74
|
+
}
|
|
68
75
|
// Filter by ignore patterns
|
|
69
76
|
if (ignorePatterns.length > 0) {
|
|
70
77
|
const isIgnored = picomatch(ignorePatterns);
|
|
@@ -90,26 +97,27 @@ export async function scanDirectory(options = {}) {
|
|
|
90
97
|
fileDiffs = null;
|
|
91
98
|
}
|
|
92
99
|
}
|
|
93
|
-
// Process
|
|
94
|
-
const
|
|
95
|
-
|
|
100
|
+
// Process files in parallel with concurrency limit
|
|
101
|
+
const limit = pLimit(20);
|
|
102
|
+
const resultPromises = files.map(relativePath => {
|
|
96
103
|
const fullPath = join(dir, relativePath);
|
|
97
104
|
// Normalize path for lookup (handle Windows backslashes)
|
|
98
105
|
const normalizedPath = relativePath.replace(/\\/g, '/');
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
results.push(result);
|
|
106
|
+
const fileDiff = fileDiffs?.get(normalizedPath);
|
|
107
|
+
const stats = fileStats?.get(normalizedPath);
|
|
108
|
+
return limit(async () => {
|
|
109
|
+
try {
|
|
110
|
+
return await processFile(fullPath, relativePath, fileDiff, stats);
|
|
105
111
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
catch (err) {
|
|
113
|
+
// Skip files that fail to process
|
|
114
|
+
console.error(`Warning: Failed to process ${relativePath}:`, err);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
const results = await Promise.all(resultPromises);
|
|
120
|
+
return results.filter((r) => r !== null);
|
|
113
121
|
}
|
|
114
122
|
/**
|
|
115
123
|
* Process a single file - check for marker and extract definitions
|
|
@@ -128,19 +136,19 @@ async function processFile(fullPath, relativePath, fileDiff, fileStats) {
|
|
|
128
136
|
diff: fileStats,
|
|
129
137
|
};
|
|
130
138
|
}
|
|
131
|
-
//
|
|
132
|
-
const marker = await extractMarker(fullPath);
|
|
133
|
-
if (!marker.found) {
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
// Detect language
|
|
139
|
+
// Detect language first
|
|
137
140
|
const language = detectLanguage(relativePath);
|
|
138
141
|
if (!language) {
|
|
139
142
|
return null;
|
|
140
143
|
}
|
|
141
|
-
// Read
|
|
144
|
+
// Read file once for both marker extraction and definition parsing
|
|
142
145
|
const code = await readFile(fullPath, 'utf8');
|
|
143
|
-
//
|
|
146
|
+
// Check for marker using the code we already read
|
|
147
|
+
const marker = await extractMarkerFromCode(code, language);
|
|
148
|
+
if (!marker.found) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
// Parse and extract definitions using the same code
|
|
144
152
|
const tree = await parseCode(code, language);
|
|
145
153
|
let definitions = extractDefinitions(tree.rootNode, language);
|
|
146
154
|
// Apply diff info if available (for definition-level stats)
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -83,10 +83,14 @@ export interface GenerateOptions {
|
|
|
83
83
|
dir?: string;
|
|
84
84
|
/** Glob patterns to ignore */
|
|
85
85
|
ignore?: string[];
|
|
86
|
+
/** Glob patterns to filter - only include matching files */
|
|
87
|
+
filter?: string[];
|
|
86
88
|
/** Include git diff status for definitions */
|
|
87
89
|
diff?: boolean;
|
|
88
90
|
/** Git ref to diff against (default: HEAD for unstaged, --cached for staged) */
|
|
89
91
|
diffBase?: string;
|
|
92
|
+
/** Max definitions per file before truncation (default: 25) */
|
|
93
|
+
maxDefs?: number;
|
|
90
94
|
}
|
|
91
95
|
/**
|
|
92
96
|
* A hunk from git diff output
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,IAAI,GACJ,KAAK,GACL,KAAK,CAAA;AAET;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,MAAM,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,IAAI,GACJ,KAAK,GACL,KAAK,CAAA;AAET;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,MAAM,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;AAC1C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentmap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Generate a YAML map of your codebase for AI agent context",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"cac": "^6.7.14",
|
|
39
39
|
"js-yaml": "^4.1.0",
|
|
40
40
|
"marked": "^17.0.1",
|
|
41
|
+
"p-limit": "^7.2.0",
|
|
41
42
|
"picomatch": "^4.0.2",
|
|
42
43
|
"tree-sitter-cpp": "^0.23.4",
|
|
43
44
|
"tree-sitter-go": "^0.23.4",
|