token-pilot 0.2.3 → 0.3.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 (47) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +31 -0
  3. package/README.md +14 -8
  4. package/dist/ast-index/client.d.ts +48 -1
  5. package/dist/ast-index/client.d.ts.map +1 -1
  6. package/dist/ast-index/client.js +240 -38
  7. package/dist/ast-index/client.js.map +1 -1
  8. package/dist/ast-index/types.d.ts +77 -0
  9. package/dist/ast-index/types.d.ts.map +1 -1
  10. package/dist/core/symbol-resolver.d.ts.map +1 -1
  11. package/dist/core/symbol-resolver.js +45 -10
  12. package/dist/core/symbol-resolver.js.map +1 -1
  13. package/dist/core/validation.d.ts +13 -0
  14. package/dist/core/validation.d.ts.map +1 -1
  15. package/dist/core/validation.js +33 -0
  16. package/dist/core/validation.js.map +1 -1
  17. package/dist/formatters/structure.js +1 -1
  18. package/dist/formatters/structure.js.map +1 -1
  19. package/dist/handlers/changed-symbols.d.ts +11 -0
  20. package/dist/handlers/changed-symbols.d.ts.map +1 -0
  21. package/dist/handlers/changed-symbols.js +44 -0
  22. package/dist/handlers/changed-symbols.js.map +1 -0
  23. package/dist/handlers/export-ast-index.d.ts +3 -0
  24. package/dist/handlers/export-ast-index.d.ts.map +1 -1
  25. package/dist/handlers/export-ast-index.js +69 -1
  26. package/dist/handlers/export-ast-index.js.map +1 -1
  27. package/dist/handlers/find-callers.d.ts +12 -0
  28. package/dist/handlers/find-callers.d.ts.map +1 -0
  29. package/dist/handlers/find-callers.js +54 -0
  30. package/dist/handlers/find-callers.js.map +1 -0
  31. package/dist/handlers/find-unused.d.ts +13 -0
  32. package/dist/handlers/find-unused.d.ts.map +1 -0
  33. package/dist/handlers/find-unused.js +38 -0
  34. package/dist/handlers/find-unused.js.map +1 -0
  35. package/dist/handlers/find-usages.d.ts +8 -0
  36. package/dist/handlers/find-usages.d.ts.map +1 -1
  37. package/dist/handlers/find-usages.js +79 -12
  38. package/dist/handlers/find-usages.js.map +1 -1
  39. package/dist/handlers/non-code.js +90 -11
  40. package/dist/handlers/non-code.js.map +1 -1
  41. package/dist/handlers/project-overview.d.ts.map +1 -1
  42. package/dist/handlers/project-overview.js +62 -57
  43. package/dist/handlers/project-overview.js.map +1 -1
  44. package/dist/server.d.ts.map +1 -1
  45. package/dist/server.js +66 -3
  46. package/dist/server.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ import type { AstIndexClient } from '../ast-index/client.js';
2
+ export interface FindUnusedArgs {
3
+ module?: string;
4
+ export_only?: boolean;
5
+ limit?: number;
6
+ }
7
+ export declare function handleFindUnused(args: FindUnusedArgs, astIndex: AstIndexClient): Promise<{
8
+ content: Array<{
9
+ type: 'text';
10
+ text: string;
11
+ }>;
12
+ }>;
13
+ //# sourceMappingURL=find-unused.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-unused.d.ts","sourceRoot":"","sources":["../../src/handlers/find-unused.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0C7D"}
@@ -0,0 +1,38 @@
1
+ export async function handleFindUnused(args, astIndex) {
2
+ const unused = await astIndex.unusedSymbols({
3
+ module: args.module,
4
+ exportOnly: args.export_only,
5
+ limit: args.limit ?? 30,
6
+ });
7
+ if (unused.length === 0) {
8
+ return {
9
+ content: [{
10
+ type: 'text',
11
+ text: args.module
12
+ ? `No unused symbols found in module "${args.module}".`
13
+ : 'No unused symbols found in the project.',
14
+ }],
15
+ };
16
+ }
17
+ const lines = [
18
+ `UNUSED SYMBOLS: ${unused.length} potentially unused`,
19
+ '',
20
+ ];
21
+ // Group by file
22
+ const byFile = new Map();
23
+ for (const sym of unused) {
24
+ const existing = byFile.get(sym.path) ?? [];
25
+ existing.push(sym);
26
+ byFile.set(sym.path, existing);
27
+ }
28
+ for (const [file, symbols] of byFile) {
29
+ lines.push(` ${file}:`);
30
+ for (const s of symbols) {
31
+ lines.push(` ${s.kind} ${s.name} (L${s.line})`);
32
+ }
33
+ }
34
+ lines.push('');
35
+ lines.push('NOTE: These symbols have no detected usages in the indexed codebase. Verify before removing — they may be used dynamically or in tests.');
36
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
37
+ }
38
+ //# sourceMappingURL=find-unused.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-unused.js","sourceRoot":"","sources":["../../src/handlers/find-unused.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAoB,EACpB,QAAwB;IAExB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC;QAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,WAAW;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;KACxB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,MAAM;wBACf,CAAC,CAAC,sCAAsC,IAAI,CAAC,MAAM,IAAI;wBACvD,CAAC,CAAC,yCAAyC;iBAC9C,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,mBAAmB,MAAM,CAAC,MAAM,qBAAqB;QACrD,EAAE;KACH,CAAC;IAEF,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yIAAyI,CAAC,CAAC;IAEtJ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
@@ -2,6 +2,14 @@ import type { AstIndexClient } from '../ast-index/client.js';
2
2
  export interface FindUsagesArgs {
3
3
  symbol: string;
4
4
  }
5
+ /**
6
+ * Find all usages of a symbol across the project.
7
+ *
8
+ * Strategy: combine ast-index `refs` (structured: definitions + usages)
9
+ * with `search` (text: catches imports and self-references that refs misses).
10
+ * Filter search results to exact word matches only (no substring matches).
11
+ * Deduplicate by file:line.
12
+ */
5
13
  export declare function handleFindUsages(args: FindUsagesArgs, astIndex: AstIndexClient): Promise<{
6
14
  content: Array<{
7
15
  type: 'text';
@@ -1 +1 @@
1
- {"version":3,"file":"find-usages.d.ts","sourceRoot":"","sources":["../../src/handlers/find-usages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA4B7D"}
1
+ {"version":3,"file":"find-usages.d.ts","sourceRoot":"","sources":["../../src/handlers/find-usages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AASD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0F7D"}
@@ -1,25 +1,92 @@
1
+ /**
2
+ * Escape special regex characters in a string.
3
+ */
4
+ function escapeRegex(s) {
5
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
6
+ }
7
+ /**
8
+ * Find all usages of a symbol across the project.
9
+ *
10
+ * Strategy: combine ast-index `refs` (structured: definitions + usages)
11
+ * with `search` (text: catches imports and self-references that refs misses).
12
+ * Filter search results to exact word matches only (no substring matches).
13
+ * Deduplicate by file:line.
14
+ */
1
15
  export async function handleFindUsages(args, astIndex) {
2
- const results = await astIndex.usages(args.symbol);
3
- if (results.length === 0) {
16
+ // Run refs + search in parallel
17
+ const [refs, searchResults] = await Promise.all([
18
+ astIndex.refs(args.symbol),
19
+ astIndex.search(args.symbol),
20
+ ]);
21
+ // Build dedup set from refs
22
+ const seen = new Set();
23
+ for (const d of refs.definitions)
24
+ seen.add(`${d.path}:${d.line}`);
25
+ for (const i of refs.imports)
26
+ seen.add(`${i.path}:${i.line}`);
27
+ for (const u of refs.usages)
28
+ seen.add(`${u.path}:${u.line}`);
29
+ // Filter search results: exact word match only, not already in refs
30
+ const wordBoundary = new RegExp(`(?<![a-zA-Z0-9_])${escapeRegex(args.symbol)}(?![a-zA-Z0-9_])`);
31
+ const additional = [];
32
+ for (const r of searchResults) {
33
+ const key = `${r.file}:${r.line}`;
34
+ if (seen.has(key))
35
+ continue;
36
+ if (!wordBoundary.test(r.text))
37
+ continue;
38
+ seen.add(key);
39
+ additional.push(r);
40
+ }
41
+ // Categorize additional results
42
+ const additionalImports = additional.filter(r => /\bimport\b/.test(r.text));
43
+ const additionalOther = additional.filter(r => !/\bimport\b/.test(r.text));
44
+ // Merge imports: refs.imports + additional imports
45
+ const allImports = [
46
+ ...refs.imports.map(i => ({ file: i.path, line: i.line, text: (i.context ?? i.name).trim() })),
47
+ ...additionalImports.map(r => ({ file: r.file, line: r.line, text: r.text })),
48
+ ];
49
+ // Total count
50
+ const totalCount = refs.definitions.length + allImports.length + refs.usages.length + additionalOther.length;
51
+ if (totalCount === 0) {
4
52
  const hints = [`No usages found for "${args.symbol}".`];
5
53
  if (!astIndex.isAvailable()) {
6
- hints.push('WARNING: ast-index is not available. Install it: cargo install ast-index');
7
- }
8
- else {
9
- hints.push('TIP: Index may not cover this language/project. Run `ast-index build` in the project root.');
10
- hints.push('TIP: Use Grep as a fallback for text-based search.');
54
+ hints.push('WARNING: ast-index is not available.');
11
55
  }
12
56
  return { content: [{ type: 'text', text: hints.join('\n') }] };
13
57
  }
14
58
  const lines = [
15
- `USAGES: "${args.symbol}" (${results.length} total)`,
59
+ `REFS: "${args.symbol}" (${totalCount} total: ${refs.definitions.length} definitions, ${allImports.length} imports, ${refs.usages.length + additionalOther.length} usages)`,
16
60
  '',
17
61
  ];
18
- for (const r of results) {
19
- lines.push(` ${r.file}:${r.line}`);
20
- lines.push(` ${r.text.trim()}`);
62
+ if (refs.definitions.length > 0) {
63
+ lines.push('DEFINITIONS:');
64
+ for (const d of refs.definitions) {
65
+ lines.push(` ${d.path}:${d.line}`);
66
+ lines.push(` ${(d.signature ?? d.name).trim()}`);
67
+ }
68
+ lines.push('');
69
+ }
70
+ if (allImports.length > 0) {
71
+ lines.push('IMPORTS:');
72
+ for (const i of allImports) {
73
+ lines.push(` ${i.file}:${i.line}`);
74
+ lines.push(` ${i.text}`);
75
+ }
76
+ lines.push('');
77
+ }
78
+ const allUsages = [
79
+ ...refs.usages.map(u => ({ file: u.path, line: u.line, text: (u.context ?? u.name).trim() })),
80
+ ...additionalOther,
81
+ ];
82
+ if (allUsages.length > 0) {
83
+ lines.push('USAGES:');
84
+ for (const u of allUsages) {
85
+ lines.push(` ${u.file}:${u.line}`);
86
+ lines.push(` ${u.text}`);
87
+ }
88
+ lines.push('');
21
89
  }
22
- lines.push('');
23
90
  lines.push('HINT: Use read_symbol() or read_range() to load specific results.');
24
91
  return { content: [{ type: 'text', text: lines.join('\n') }] };
25
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-usages.js","sourceRoot":"","sources":["../../src/handlers/find-usages.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAoB,EACpB,QAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,wBAAwB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;YACzG,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,YAAY,IAAI,CAAC,MAAM,MAAM,OAAO,CAAC,MAAM,SAAS;QACpD,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"find-usages.js","sourceRoot":"","sources":["../../src/handlers/find-usages.ts"],"names":[],"mappings":"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"}
@@ -93,24 +93,103 @@ function summarizeYaml(filePath, content, lineCount) {
93
93
  const lines = [
94
94
  `FILE: ${filePath} (${lineCount} lines, YAML)`,
95
95
  '',
96
- 'TOP-LEVEL KEYS:',
96
+ 'STRUCTURE:',
97
97
  ];
98
- // Simple YAML key extraction (top-level keys that start at column 0)
99
- const topKeys = [];
100
- for (const line of content.split('\n')) {
101
- const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):/);
102
- if (match && !line.startsWith('#')) {
103
- topKeys.push(match[1]);
98
+ const rawLines = content.split('\n');
99
+ const roots = [];
100
+ // Stack tracks parent nodes at each indent level
101
+ const stack = [];
102
+ for (const line of rawLines) {
103
+ // Skip comments and empty lines
104
+ if (line.trim().startsWith('#') || !line.trim())
105
+ continue;
106
+ // Count leading spaces
107
+ const indentMatch = line.match(/^(\s*)/);
108
+ const indent = indentMatch ? indentMatch[1].length : 0;
109
+ // Array item: `- key: value` or just `- value`
110
+ const arrayMatch = line.match(/^(\s*)- /);
111
+ if (arrayMatch) {
112
+ // Count array item for nearest parent
113
+ if (stack.length > 0) {
114
+ // Find parent at indent level <= arrayMatch indent
115
+ while (stack.length > 0 && stack[stack.length - 1].indent >= indent) {
116
+ stack.pop();
117
+ }
118
+ if (stack.length > 0) {
119
+ stack[stack.length - 1].node.arrayItems++;
120
+ }
121
+ }
122
+ continue;
104
123
  }
124
+ // Key: value or Key:
125
+ const keyMatch = line.match(/^(\s*)([a-zA-Z_][a-zA-Z0-9_.-]*):\s*(.*)/);
126
+ if (!keyMatch)
127
+ continue;
128
+ const keyIndent = keyMatch[1].length;
129
+ const key = keyMatch[2];
130
+ const rawValue = keyMatch[3].replace(/#.*$/, '').trim(); // strip inline comments
131
+ const node = {
132
+ key,
133
+ value: rawValue && !rawValue.startsWith('{') && !rawValue.startsWith('[') && !rawValue.startsWith('|') && !rawValue.startsWith('>')
134
+ ? rawValue
135
+ : undefined,
136
+ children: [],
137
+ arrayItems: 0,
138
+ };
139
+ // Pop stack until we find a parent with less indent
140
+ while (stack.length > 0 && stack[stack.length - 1].indent >= keyIndent) {
141
+ stack.pop();
142
+ }
143
+ if (stack.length > 0) {
144
+ const parent = stack[stack.length - 1].node;
145
+ if (parent.children.length < 20) {
146
+ parent.children.push(node);
147
+ }
148
+ }
149
+ else {
150
+ roots.push(node);
151
+ }
152
+ stack.push({ node, indent: keyIndent });
105
153
  }
106
- for (const key of topKeys) {
107
- lines.push(` ${key}`);
108
- }
109
- if (topKeys.length === 0) {
154
+ if (roots.length === 0) {
110
155
  lines.push(' (no top-level keys detected)');
111
156
  }
157
+ else {
158
+ for (const root of roots) {
159
+ formatYamlNode(root, lines, 1, 3); // max 3 levels deep
160
+ }
161
+ }
112
162
  return lines.join('\n');
113
163
  }
164
+ function formatYamlNode(node, lines, depth, maxDepth) {
165
+ const indent = ' '.repeat(depth);
166
+ if (node.value) {
167
+ // Key with scalar value
168
+ lines.push(`${indent}${node.key}: ${node.value}`);
169
+ }
170
+ else if (node.arrayItems > 0 && node.children.length === 0) {
171
+ // Key with array of scalars
172
+ lines.push(`${indent}${node.key}: [${node.arrayItems} items]`);
173
+ }
174
+ else if (node.children.length > 0) {
175
+ // Key with children
176
+ lines.push(`${indent}${node.key}:`);
177
+ if (depth < maxDepth) {
178
+ for (const child of node.children) {
179
+ formatYamlNode(child, lines, depth + 1, maxDepth);
180
+ }
181
+ if (node.arrayItems > 0) {
182
+ lines.push(`${indent} (+ ${node.arrayItems} list items)`);
183
+ }
184
+ }
185
+ else {
186
+ lines.push(`${indent} (${node.children.length} keys${node.arrayItems > 0 ? `, ${node.arrayItems} items` : ''})`);
187
+ }
188
+ }
189
+ else {
190
+ lines.push(`${indent}${node.key}`);
191
+ }
192
+ }
114
193
  function summarizeMarkdown(filePath, content, lineCount) {
115
194
  const lines = [
116
195
  `FILE: ${filePath} (${lineCount} lines, Markdown)`,
@@ -1 +1 @@
1
- {"version":3,"file":"non-code.js","sourceRoot":"","sources":["../../src/handlers/non-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"non-code.js","sourceRoot":"","sources":["../../src/handlers/non-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-overview.d.ts","sourceRoot":"","sources":["../../src/handlers/project-overview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiE7D"}
1
+ {"version":3,"file":"project-overview.d.ts","sourceRoot":"","sources":["../../src/handlers/project-overview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA8E7D"}
@@ -1,73 +1,82 @@
1
- import { readFile, readdir } from 'node:fs/promises';
1
+ import { readFile } from 'node:fs/promises';
2
2
  import { resolve, basename } from 'node:path';
3
3
  export async function handleProjectOverview(projectRoot, astIndex) {
4
- const lines = [
5
- `PROJECT OVERVIEW: ${projectRoot}`,
6
- '',
7
- ];
8
- // 1. Read package.json / Cargo.toml etc. for project info
4
+ const lines = [];
5
+ // 1. Project info from package.json / Cargo.toml etc.
9
6
  const projectInfo = await detectProjectInfo(projectRoot);
10
7
  if (projectInfo) {
11
- lines.push(`Project: ${projectInfo.name} v${projectInfo.version}`);
8
+ lines.push(`PROJECT: ${projectInfo.name} v${projectInfo.version}`);
12
9
  if (projectInfo.description)
13
- lines.push(`Description: ${projectInfo.description}`);
14
- lines.push(`Type: ${projectInfo.type}`);
10
+ lines.push(` ${projectInfo.description}`);
15
11
  lines.push('');
16
12
  }
17
- // 2. Top-level directory listing
18
- try {
19
- const entries = await readdir(projectRoot, { withFileTypes: true });
20
- const dirs = entries
21
- .filter(e => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules')
22
- .map(e => e.name)
23
- .sort();
24
- const files = entries
25
- .filter(e => e.isFile() && !e.name.startsWith('.'))
26
- .map(e => e.name)
27
- .sort();
28
- if (dirs.length > 0 || files.length > 0) {
29
- lines.push('STRUCTURE:');
30
- for (const d of dirs) {
31
- lines.push(` ${d}/`);
32
- }
33
- for (const f of files.slice(0, 15)) {
34
- lines.push(` ${f}`);
13
+ else {
14
+ lines.push(`PROJECT: ${basename(projectRoot)}`);
15
+ lines.push('');
16
+ }
17
+ // 2. ast-index map directory structure with file counts and symbol kinds
18
+ if (astIndex.isAvailable()) {
19
+ const [mapData, convData] = await Promise.all([
20
+ astIndex.map(),
21
+ astIndex.conventions(),
22
+ ]);
23
+ if (mapData) {
24
+ lines.push(`TYPE: ${mapData.project_type} (${mapData.file_count} files)`);
25
+ lines.push('');
26
+ // Conventions
27
+ if (convData) {
28
+ if (convData.architecture.length > 0) {
29
+ lines.push(`ARCHITECTURE: ${convData.architecture.join(', ')}`);
30
+ }
31
+ const fwList = [];
32
+ for (const [category, frameworks] of Object.entries(convData.frameworks)) {
33
+ for (const fw of frameworks) {
34
+ fwList.push(`${fw.name} (${category})`);
35
+ }
36
+ }
37
+ if (fwList.length > 0) {
38
+ lines.push(`FRAMEWORKS: ${fwList.join(', ')}`);
39
+ }
40
+ if (convData.naming_patterns.length > 0) {
41
+ const patterns = convData.naming_patterns
42
+ .slice(0, 8)
43
+ .map(p => `${p.suffix}(${p.count})`)
44
+ .join(', ');
45
+ lines.push(`PATTERNS: ${patterns}`);
46
+ }
47
+ lines.push('');
35
48
  }
36
- if (files.length > 15) {
37
- lines.push(` ... and ${files.length - 15} more files`);
49
+ // Directory map
50
+ lines.push('MAP:');
51
+ for (const group of mapData.groups) {
52
+ const kinds = group.kinds
53
+ ? ' — ' + Object.entries(group.kinds).map(([k, v]) => `${v} ${k}`).join(', ')
54
+ : '';
55
+ lines.push(` ${group.path} (${group.file_count} files${kinds})`);
38
56
  }
39
57
  lines.push('');
40
58
  }
41
- }
42
- catch { /* ignore */ }
43
- // 3. ast-index stats (indexed files, languages)
44
- if (astIndex.isAvailable()) {
45
- try {
46
- const statsText = await astIndex.stats();
47
- if (statsText) {
48
- const filesMatch = statsText.match(/Files:\s*(\d+)/);
49
- const symbolsMatch = statsText.match(/Symbols:\s*(\d+)/);
50
- const refsMatch = statsText.match(/Refs:\s*(\d+)/);
51
- const projectType = statsText.match(/Project:\s*(.+)/);
52
- lines.push('INDEX:');
53
- if (projectType)
54
- lines.push(` Detected: ${projectType[1].trim()}`);
55
- if (filesMatch)
56
- lines.push(` Files indexed: ${filesMatch[1]}`);
57
- if (symbolsMatch)
58
- lines.push(` Symbols: ${symbolsMatch[1]}`);
59
- if (refsMatch)
60
- lines.push(` References: ${refsMatch[1]}`);
61
- lines.push('');
59
+ else {
60
+ // Fallback to stats
61
+ try {
62
+ const statsText = await astIndex.stats();
63
+ if (statsText) {
64
+ const filesMatch = statsText.match(/Files:\s*(\d+)/);
65
+ const symbolsMatch = statsText.match(/Symbols:\s*(\d+)/);
66
+ if (filesMatch)
67
+ lines.push(`Files indexed: ${filesMatch[1]}`);
68
+ if (symbolsMatch)
69
+ lines.push(`Symbols: ${symbolsMatch[1]}`);
70
+ lines.push('');
71
+ }
62
72
  }
73
+ catch { /* ignore */ }
63
74
  }
64
- catch { /* ast-index stats not available */ }
65
75
  }
66
- lines.push('HINT: Use smart_read() on individual files, or search_code() to find specific symbols.');
76
+ lines.push('HINT: Use smart_read() on files, search_code() for symbols, find_callers() for call analysis.');
67
77
  return { content: [{ type: 'text', text: lines.join('\n') }] };
68
78
  }
69
79
  async function detectProjectInfo(projectRoot) {
70
- // Try package.json
71
80
  try {
72
81
  const pkg = JSON.parse(await readFile(resolve(projectRoot, 'package.json'), 'utf-8'));
73
82
  return {
@@ -78,7 +87,6 @@ async function detectProjectInfo(projectRoot) {
78
87
  };
79
88
  }
80
89
  catch { /* not a node project */ }
81
- // Try composer.json (PHP)
82
90
  try {
83
91
  const composer = JSON.parse(await readFile(resolve(projectRoot, 'composer.json'), 'utf-8'));
84
92
  return {
@@ -89,7 +97,6 @@ async function detectProjectInfo(projectRoot) {
89
97
  };
90
98
  }
91
99
  catch { /* not a php project */ }
92
- // Try Cargo.toml
93
100
  try {
94
101
  const cargo = await readFile(resolve(projectRoot, 'Cargo.toml'), 'utf-8');
95
102
  const name = cargo.match(/^name\s*=\s*"(.+?)"/m)?.[1] ?? 'unknown';
@@ -97,7 +104,6 @@ async function detectProjectInfo(projectRoot) {
97
104
  return { name, version, type: 'Rust' };
98
105
  }
99
106
  catch { /* not a rust project */ }
100
- // Try pyproject.toml
101
107
  try {
102
108
  const pyproject = await readFile(resolve(projectRoot, 'pyproject.toml'), 'utf-8');
103
109
  const name = pyproject.match(/^name\s*=\s*"(.+?)"/m)?.[1] ?? 'unknown';
@@ -105,7 +111,6 @@ async function detectProjectInfo(projectRoot) {
105
111
  return { name, version, type: 'Python' };
106
112
  }
107
113
  catch { /* not a python project */ }
108
- // Try go.mod
109
114
  try {
110
115
  const gomod = await readFile(resolve(projectRoot, 'go.mod'), 'utf-8');
111
116
  const name = gomod.match(/^module\s+(.+)/m)?.[1] ?? 'unknown';
@@ -1 +1 @@
1
- {"version":3,"file":"project-overview.js","sourceRoot":"","sources":["../../src/handlers/project-overview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-overview.js","sourceRoot":"","sources":["../../src/handlers/project-overview.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA2CnE,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkYrD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAiDnE,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAicrD"}