agentmap 0.3.0 → 0.4.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.
Files changed (42) hide show
  1. package/dist/cli.js +39 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/extract/definitions.d.ts.map +1 -1
  4. package/dist/extract/definitions.js +0 -1
  5. package/dist/extract/definitions.js.map +1 -1
  6. package/dist/extract/definitions.test.js +40 -40
  7. package/dist/extract/definitions.test.js.map +1 -1
  8. package/dist/extract/git-status.d.ts.map +1 -1
  9. package/dist/extract/git-status.js +0 -1
  10. package/dist/extract/git-status.js.map +1 -1
  11. package/dist/extract/marker.d.ts +9 -2
  12. package/dist/extract/marker.d.ts.map +1 -1
  13. package/dist/extract/marker.js +211 -103
  14. package/dist/extract/marker.js.map +1 -1
  15. package/dist/extract/marker.test.d.ts +2 -0
  16. package/dist/extract/marker.test.d.ts.map +1 -0
  17. package/dist/extract/marker.test.js +374 -0
  18. package/dist/extract/marker.test.js.map +1 -0
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +8 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/map/builder.d.ts.map +1 -1
  24. package/dist/map/builder.js +2 -6
  25. package/dist/map/builder.js.map +1 -1
  26. package/dist/map/yaml.d.ts.map +1 -1
  27. package/dist/map/yaml.js +0 -1
  28. package/dist/map/yaml.js.map +1 -1
  29. package/dist/parser/index.d.ts.map +1 -1
  30. package/dist/parser/index.js +0 -1
  31. package/dist/parser/index.js.map +1 -1
  32. package/dist/parser/languages.d.ts.map +1 -1
  33. package/dist/parser/languages.js +0 -1
  34. package/dist/parser/languages.js.map +1 -1
  35. package/dist/scanner.d.ts +1 -1
  36. package/dist/scanner.d.ts.map +1 -1
  37. package/dist/scanner.js +2 -3
  38. package/dist/scanner.js.map +1 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/types.js +0 -1
  41. package/dist/types.js.map +1 -1
  42. package/package.json +1 -1
@@ -1,144 +1,252 @@
1
- // @agentmap
2
- // Extract @agentmap marker and description from file header.
1
+ // Extract file header comment/docstring using tree-sitter.
2
+ // Detects standard comment styles from existing projects.
3
3
  import { open } from 'fs/promises';
4
- const MARKER = '@agentmap';
5
- const MAX_BYTES = 30_000; // ~300 lines worth
4
+ import { parseCode, detectLanguage } from '../parser/index.js';
5
+ const MAX_LINES = 50;
6
+ const MAX_DESC_LINES = 20;
6
7
  /**
7
- * Read the first N bytes of a file
8
+ * Read the first N lines of a file
8
9
  */
9
- async function readHead(filepath, maxBytes) {
10
+ async function readFirstLines(filepath, maxLines) {
10
11
  const handle = await open(filepath, 'r');
11
12
  try {
12
- const buffer = Buffer.alloc(maxBytes);
13
- const { bytesRead } = await handle.read(buffer, 0, maxBytes, 0);
14
- return buffer.toString('utf8', 0, bytesRead);
13
+ // Read enough bytes for ~50 lines (generous estimate)
14
+ const buffer = Buffer.alloc(maxLines * 200);
15
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
16
+ const content = buffer.toString('utf8', 0, bytesRead);
17
+ const lines = content.split('\n').slice(0, maxLines);
18
+ return lines.join('\n');
15
19
  }
16
20
  finally {
17
21
  await handle.close();
18
22
  }
19
23
  }
20
24
  /**
21
- * Check if file has @agentmap marker and extract description.
22
- * Only reads first ~30KB of file for performance.
25
+ * Extract header comment/docstring from a file.
26
+ * Uses tree-sitter for clean AST-based extraction.
27
+ *
28
+ * Supports:
29
+ * - // line comments (JS/TS/Go/Rust)
30
+ * - /* block comments (JS/TS/Go/Rust)
31
+ * - # line comments (Python)
32
+ * - """ docstrings (Python)
33
+ * - //! inner doc comments (Rust)
23
34
  */
24
35
  export async function extractMarker(filepath) {
25
- const head = await readHead(filepath, MAX_BYTES);
26
- const lines = head.split('\n');
27
- // Find the marker line
28
- let markerLineIndex = -1;
29
- for (let i = 0; i < lines.length; i++) {
30
- const line = lines[i].trim();
31
- // Skip empty lines at start
32
- if (line === '')
33
- continue;
34
- // Check if this line contains the marker
35
- if (line.includes(MARKER)) {
36
- markerLineIndex = i;
37
- break;
38
- }
39
- // If we hit a non-comment, non-empty line before finding marker, stop
40
- if (!isCommentLine(line)) {
41
- return { found: false };
42
- }
36
+ const language = detectLanguage(filepath);
37
+ if (!language) {
38
+ return { found: false };
43
39
  }
44
- if (markerLineIndex === -1) {
40
+ const head = await readFirstLines(filepath, MAX_LINES);
41
+ const tree = await parseCode(head, language);
42
+ const description = extractHeaderFromAST(tree.rootNode, language);
43
+ if (description === null) {
45
44
  return { found: false };
46
45
  }
47
- // Extract description from lines after marker
48
- const description = extractDescription(lines, markerLineIndex);
49
46
  return {
50
47
  found: true,
51
48
  description: description || undefined,
52
49
  };
53
50
  }
54
51
  /**
55
- * Check if a line is a comment
52
+ * Check if a node is a JS/TS directive like "use strict" or "use client"
56
53
  */
57
- function isCommentLine(line) {
58
- const trimmed = line.trim();
59
- return (trimmed.startsWith('//') ||
60
- trimmed.startsWith('#') ||
61
- trimmed.startsWith('/*') ||
62
- trimmed.startsWith('*') ||
63
- trimmed.startsWith('"""') ||
64
- trimmed.startsWith("'''") ||
65
- trimmed.endsWith('*/') ||
66
- trimmed.endsWith('"""') ||
67
- trimmed.endsWith("'''"));
54
+ function isDirective(node) {
55
+ if (node.type !== 'expression_statement')
56
+ return false;
57
+ const str = node.child(0);
58
+ if (str?.type !== 'string')
59
+ return false;
60
+ const text = str.text;
61
+ // Check for known directives (with quotes)
62
+ return /^["']use (strict|client|server)["']$/.test(text);
68
63
  }
69
64
  /**
70
- * Extract description text from comment lines after marker
65
+ * Extract header comment from AST root node
71
66
  */
72
- function extractDescription(lines, markerLineIndex) {
73
- const descLines = [];
74
- // Check if marker is on its own line or has text after it
75
- const markerLine = lines[markerLineIndex];
76
- const markerText = extractTextAfterMarker(markerLine);
77
- if (markerText) {
78
- descLines.push(markerText);
79
- }
80
- // Continue reading comment lines after marker
81
- for (let i = markerLineIndex + 1; i < lines.length; i++) {
82
- const line = lines[i];
83
- const trimmed = line.trim();
84
- // Empty line in comments is ok, include it
85
- if (trimmed === '') {
86
- // But stop if we've already collected some description
87
- if (descLines.length > 0) {
88
- // Check if next non-empty line is still a comment
89
- let nextNonEmpty = i + 1;
90
- while (nextNonEmpty < lines.length && lines[nextNonEmpty].trim() === '') {
91
- nextNonEmpty++;
92
- }
93
- if (nextNonEmpty < lines.length && !isCommentLine(lines[nextNonEmpty].trim())) {
94
- break;
95
- }
96
- }
97
- continue;
67
+ function extractHeaderFromAST(root, language) {
68
+ const children = getChildren(root);
69
+ if (children.length === 0) {
70
+ return null;
71
+ }
72
+ let startIdx = 0;
73
+ // Skip shebang if present
74
+ // Python/shell: comment node starting with #!
75
+ // JS/TS: hash_bang_line node
76
+ const firstChild = children[0];
77
+ if (firstChild?.type === 'hash_bang_line' ||
78
+ (firstChild?.type === 'comment' && firstChild.text.startsWith('#!'))) {
79
+ startIdx = 1;
80
+ }
81
+ // Skip JS/TS directives like "use strict", "use client"
82
+ while (startIdx < children.length && isDirective(children[startIdx])) {
83
+ startIdx++;
84
+ }
85
+ if (startIdx >= children.length) {
86
+ return null;
87
+ }
88
+ const first = children[startIdx];
89
+ // Python: check for module docstring (expression_statement containing string)
90
+ if (language === 'python' && first.type === 'expression_statement') {
91
+ const str = first.childForFieldName('expression') ?? first.child(0);
92
+ if (str?.type === 'string') {
93
+ return extractPythonDocstring(str);
98
94
  }
99
- // Stop at non-comment line
100
- if (!isCommentLine(trimmed)) {
95
+ }
96
+ // Collect consecutive comment nodes at the start
97
+ if (isCommentNode(first)) {
98
+ return extractConsecutiveComments(children, startIdx, language);
99
+ }
100
+ return null;
101
+ }
102
+ /**
103
+ * Check if a node is a comment
104
+ */
105
+ function isCommentNode(node) {
106
+ return (node.type === 'comment' ||
107
+ node.type === 'line_comment' ||
108
+ node.type === 'block_comment');
109
+ }
110
+ /**
111
+ * Extract consecutive comment nodes and combine their text
112
+ */
113
+ function extractConsecutiveComments(children, startIdx, language) {
114
+ const lines = [];
115
+ for (let i = startIdx; i < children.length; i++) {
116
+ const node = children[i];
117
+ if (!isCommentNode(node)) {
101
118
  break;
102
119
  }
103
- // Stop at end of block comment
104
- if (trimmed === '*/' || trimmed === '"""' || trimmed === "'''") {
120
+ const text = extractCommentText(node, language);
121
+ if (text !== null) {
122
+ lines.push(...text.split('\n'));
123
+ }
124
+ // Limit description length
125
+ if (lines.length >= MAX_DESC_LINES) {
105
126
  break;
106
127
  }
107
- // Extract text from comment line
108
- const text = stripCommentPrefix(trimmed);
109
- if (text !== null) {
110
- descLines.push(text);
128
+ }
129
+ return lines.slice(0, MAX_DESC_LINES).join('\n').trim();
130
+ }
131
+ /**
132
+ * Extract text content from a comment node
133
+ */
134
+ function extractCommentText(node, language) {
135
+ const text = node.text;
136
+ // Rust: line_comment may have doc_comment child with actual content
137
+ if (language === 'rust' && node.type === 'line_comment') {
138
+ const docComment = findChild(node, 'doc_comment');
139
+ if (docComment) {
140
+ return docComment.text.trim();
141
+ }
142
+ // Regular // comment - strip prefix
143
+ return stripLinePrefix(text, '//');
144
+ }
145
+ // Block comment /* */ or /** */ (including Rust block_comment)
146
+ if (text.startsWith('/*') || node.type === 'block_comment') {
147
+ return extractBlockCommentText(text);
148
+ }
149
+ // Line comment // or #
150
+ if (text.startsWith('//')) {
151
+ return stripLinePrefix(text, '//');
152
+ }
153
+ if (text.startsWith('#')) {
154
+ return stripLinePrefix(text, '#');
155
+ }
156
+ return text.trim();
157
+ }
158
+ /**
159
+ * Strip comment prefix and optional following space
160
+ * Handles //!, ///, //, ##, #
161
+ */
162
+ function stripLinePrefix(text, prefix) {
163
+ let content = text.slice(prefix.length);
164
+ // Strip optional ! or / after // (for //! and ///)
165
+ if (prefix === '//' && (content.startsWith('!') || content.startsWith('/'))) {
166
+ content = content.slice(1);
167
+ }
168
+ // Strip optional extra # after # (for ##)
169
+ if (prefix === '#' && content.startsWith('#')) {
170
+ content = content.slice(1);
171
+ }
172
+ // Strip optional leading space
173
+ if (content.startsWith(' ')) {
174
+ content = content.slice(1);
175
+ }
176
+ return content.trimEnd();
177
+ }
178
+ /**
179
+ * Extract text from block comment, stripping delimiters and * prefixes
180
+ */
181
+ function extractBlockCommentText(text) {
182
+ // Remove /* and */
183
+ let content = text.slice(2);
184
+ if (content.endsWith('*/')) {
185
+ content = content.slice(0, -2);
186
+ }
187
+ // Remove leading * for JSDoc style
188
+ if (content.startsWith('*')) {
189
+ content = content.slice(1);
190
+ }
191
+ // Process lines, removing * prefixes
192
+ const lines = content.split('\n').map(line => {
193
+ const trimmed = line.trim();
194
+ if (trimmed.startsWith('* ')) {
195
+ return trimmed.slice(2);
111
196
  }
197
+ if (trimmed === '*') {
198
+ return '';
199
+ }
200
+ if (trimmed.startsWith('*')) {
201
+ return trimmed.slice(1).trim();
202
+ }
203
+ return trimmed;
204
+ });
205
+ return lines.join('\n').trim();
206
+ }
207
+ /**
208
+ * Extract Python docstring content from string node
209
+ */
210
+ function extractPythonDocstring(node) {
211
+ // Find string_content child which has the actual text
212
+ const content = findChild(node, 'string_content');
213
+ if (content) {
214
+ const lines = content.text.trim().split('\n');
215
+ return lines.slice(0, MAX_DESC_LINES).join('\n').trim();
216
+ }
217
+ // Fallback: extract from full text
218
+ let text = node.text;
219
+ // Remove triple quotes
220
+ if (text.startsWith('"""') || text.startsWith("'''")) {
221
+ text = text.slice(3);
112
222
  }
113
- return descLines.join('\n').trim();
223
+ if (text.endsWith('"""') || text.endsWith("'''")) {
224
+ text = text.slice(0, -3);
225
+ }
226
+ const lines = text.trim().split('\n');
227
+ return lines.slice(0, MAX_DESC_LINES).join('\n').trim();
114
228
  }
115
229
  /**
116
- * Extract text after @agentmap marker on the same line
230
+ * Get all children of a node as array
117
231
  */
118
- function extractTextAfterMarker(line) {
119
- const idx = line.indexOf(MARKER);
120
- if (idx === -1)
121
- return '';
122
- const after = line.slice(idx + MARKER.length).trim();
123
- return after;
232
+ function getChildren(node) {
233
+ const children = [];
234
+ for (let i = 0; i < node.childCount; i++) {
235
+ const child = node.child(i);
236
+ if (child)
237
+ children.push(child);
238
+ }
239
+ return children;
124
240
  }
125
241
  /**
126
- * Strip comment prefix from a line
242
+ * Find first child of given type
127
243
  */
128
- function stripCommentPrefix(line) {
129
- // Handle various comment styles
130
- if (line.startsWith('///'))
131
- return line.slice(3).trim();
132
- if (line.startsWith('//'))
133
- return line.slice(2).trim();
134
- if (line.startsWith('##'))
135
- return line.slice(2).trim();
136
- if (line.startsWith('#'))
137
- return line.slice(1).trim();
138
- if (line.startsWith('*'))
139
- return line.slice(1).trim();
140
- if (line.startsWith('/*'))
141
- return line.slice(2).trim();
142
- return line;
244
+ function findChild(node, type) {
245
+ for (let i = 0; i < node.childCount; i++) {
246
+ const child = node.child(i);
247
+ if (child?.type === type)
248
+ return child;
249
+ }
250
+ return null;
143
251
  }
144
252
  //# sourceMappingURL=marker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marker.js","sourceRoot":"","sources":["../../src/extract/marker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marker.js","sourceRoot":"","sources":["../../src/extract/marker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=marker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker.test.d.ts","sourceRoot":"","sources":["../../src/extract/marker.test.ts"],"names":[],"mappings":""}