mcp-codebase-intelligence 0.1.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/dist/graph/code-graph.d.ts +119 -0
  4. package/dist/graph/code-graph.js +279 -0
  5. package/dist/graph/code-graph.js.map +1 -0
  6. package/dist/graph/schema.d.ts +2 -0
  7. package/dist/graph/schema.js +62 -0
  8. package/dist/graph/schema.js.map +1 -0
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.js +171 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/indexer/file-watcher.d.ts +13 -0
  13. package/dist/indexer/file-watcher.js +106 -0
  14. package/dist/indexer/file-watcher.js.map +1 -0
  15. package/dist/indexer/lang-go.d.ts +2 -0
  16. package/dist/indexer/lang-go.js +246 -0
  17. package/dist/indexer/lang-go.js.map +1 -0
  18. package/dist/indexer/lang-java.d.ts +2 -0
  19. package/dist/indexer/lang-java.js +307 -0
  20. package/dist/indexer/lang-java.js.map +1 -0
  21. package/dist/indexer/lang-python.d.ts +2 -0
  22. package/dist/indexer/lang-python.js +232 -0
  23. package/dist/indexer/lang-python.js.map +1 -0
  24. package/dist/indexer/lang-rust.d.ts +2 -0
  25. package/dist/indexer/lang-rust.js +323 -0
  26. package/dist/indexer/lang-rust.js.map +1 -0
  27. package/dist/indexer/language-plugin.d.ts +22 -0
  28. package/dist/indexer/language-plugin.js +22 -0
  29. package/dist/indexer/language-plugin.js.map +1 -0
  30. package/dist/indexer/tree-sitter-indexer.d.ts +12 -0
  31. package/dist/indexer/tree-sitter-indexer.js +618 -0
  32. package/dist/indexer/tree-sitter-indexer.js.map +1 -0
  33. package/dist/lsp/lsp-client.d.ts +45 -0
  34. package/dist/lsp/lsp-client.js +315 -0
  35. package/dist/lsp/lsp-client.js.map +1 -0
  36. package/dist/lsp/lsp-manager.d.ts +13 -0
  37. package/dist/lsp/lsp-manager.js +96 -0
  38. package/dist/lsp/lsp-manager.js.map +1 -0
  39. package/dist/tools/analyze-impact.d.ts +38 -0
  40. package/dist/tools/analyze-impact.js +126 -0
  41. package/dist/tools/analyze-impact.js.map +1 -0
  42. package/dist/tools/architecture-diagram.d.ts +33 -0
  43. package/dist/tools/architecture-diagram.js +216 -0
  44. package/dist/tools/architecture-diagram.js.map +1 -0
  45. package/dist/tools/find-implementations.d.ts +33 -0
  46. package/dist/tools/find-implementations.js +68 -0
  47. package/dist/tools/find-implementations.js.map +1 -0
  48. package/dist/tools/find-symbol.d.ts +39 -0
  49. package/dist/tools/find-symbol.js +52 -0
  50. package/dist/tools/find-symbol.js.map +1 -0
  51. package/dist/tools/get-call-graph.d.ts +40 -0
  52. package/dist/tools/get-call-graph.js +174 -0
  53. package/dist/tools/get-call-graph.js.map +1 -0
  54. package/dist/tools/get-dependencies.d.ts +28 -0
  55. package/dist/tools/get-dependencies.js +68 -0
  56. package/dist/tools/get-dependencies.js.map +1 -0
  57. package/dist/tools/get-exports.d.ts +23 -0
  58. package/dist/tools/get-exports.js +40 -0
  59. package/dist/tools/get-exports.js.map +1 -0
  60. package/dist/tools/get-references.d.ts +28 -0
  61. package/dist/tools/get-references.js +53 -0
  62. package/dist/tools/get-references.js.map +1 -0
  63. package/dist/tools/get-stats.d.ts +15 -0
  64. package/dist/tools/get-stats.js +23 -0
  65. package/dist/tools/get-stats.js.map +1 -0
  66. package/dist/tools/get-type-info.d.ts +33 -0
  67. package/dist/tools/get-type-info.js +69 -0
  68. package/dist/tools/get-type-info.js.map +1 -0
  69. package/dist/tools/goto-definition.d.ts +33 -0
  70. package/dist/tools/goto-definition.js +77 -0
  71. package/dist/tools/goto-definition.js.map +1 -0
  72. package/dist/tools/natural-language-query.d.ts +23 -0
  73. package/dist/tools/natural-language-query.js +426 -0
  74. package/dist/tools/natural-language-query.js.map +1 -0
  75. package/dist/tools/reindex.d.ts +15 -0
  76. package/dist/tools/reindex.js +20 -0
  77. package/dist/tools/reindex.js.map +1 -0
  78. package/dist/tools/semantic-diff.d.ts +32 -0
  79. package/dist/tools/semantic-diff.js +407 -0
  80. package/dist/tools/semantic-diff.js.map +1 -0
  81. package/dist/utils/logger.d.ts +6 -0
  82. package/dist/utils/logger.js +15 -0
  83. package/dist/utils/logger.js.map +1 -0
  84. package/package.json +68 -0
@@ -0,0 +1,77 @@
1
+ import { readFileSync } from "fs";
2
+ export const gotoDefinitionTool = {
3
+ name: "goto_definition",
4
+ description: "Go to the definition of a symbol at a specific position in a file. Uses LSP for precise type-aware resolution — resolves through imports, type aliases, and inheritance.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ file_path: {
9
+ type: "string",
10
+ description: "Absolute path to the file",
11
+ },
12
+ line: {
13
+ type: "number",
14
+ description: "Line number (1-based)",
15
+ },
16
+ character: {
17
+ type: "number",
18
+ description: "Column number (0-based)",
19
+ },
20
+ },
21
+ required: ["file_path", "line", "character"],
22
+ },
23
+ };
24
+ export async function handleGotoDefinition(lspManager, args) {
25
+ const client = lspManager.getClientForFile(args.file_path);
26
+ if (!client) {
27
+ return {
28
+ content: [
29
+ {
30
+ type: "text",
31
+ text: `No LSP server available for ${args.file_path}. LSP features require a running language server.`,
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ const locations = await client.getDefinition(args.file_path, args.line, args.character);
37
+ if (locations.length === 0) {
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: `No definition found at ${args.file_path}:${args.line}:${args.character}`,
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ const results = locations.map((loc) => {
48
+ const filePath = loc.uri.replace("file://", "");
49
+ let context = "";
50
+ try {
51
+ const lines = readFileSync(filePath, "utf-8").split("\n");
52
+ const startLine = Math.max(0, loc.line - 2);
53
+ const endLine = Math.min(lines.length, loc.line + 3);
54
+ context = lines
55
+ .slice(startLine, endLine)
56
+ .map((l, i) => {
57
+ const lineNum = startLine + i + 1;
58
+ const marker = lineNum === loc.line ? " >>>" : " ";
59
+ return `${marker} ${lineNum}: ${l}`;
60
+ })
61
+ .join("\n");
62
+ }
63
+ catch {
64
+ // ignore read errors
65
+ }
66
+ return `${filePath}:${loc.line}:${loc.character}\n${context}`;
67
+ });
68
+ return {
69
+ content: [
70
+ {
71
+ type: "text",
72
+ text: `Definition(s) found:\n\n${results.join("\n\n")}`,
73
+ },
74
+ ],
75
+ };
76
+ }
77
+ //# sourceMappingURL=goto-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goto-definition.js","sourceRoot":"","sources":["../../src/tools/goto-definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { CodeGraph } from "../graph/code-graph.js";
2
+ export declare const naturalLanguageQueryTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ query: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ };
13
+ required: string[];
14
+ };
15
+ };
16
+ export declare function handleNaturalLanguageQuery(graph: CodeGraph, args: {
17
+ query: string;
18
+ }): {
19
+ content: {
20
+ type: "text";
21
+ text: string;
22
+ }[];
23
+ };
@@ -0,0 +1,426 @@
1
+ export const naturalLanguageQueryTool = {
2
+ name: "query_codebase",
3
+ description: "Answer natural language questions about the codebase structure. Examples: 'Find all API endpoints', 'Show the auth flow', 'What modules depend on the database layer?', 'List all exported classes', 'What does the orders module do?'. Translates questions into graph queries.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ query: {
8
+ type: "string",
9
+ description: "Natural language question about the codebase",
10
+ },
11
+ },
12
+ required: ["query"],
13
+ },
14
+ };
15
+ export function handleNaturalLanguageQuery(graph, args) {
16
+ const query = args.query.toLowerCase().trim();
17
+ const intent = classifyIntent(query);
18
+ const db = graph.getDb();
19
+ let text;
20
+ switch (intent.type) {
21
+ case "find_endpoints":
22
+ text = findEndpoints(db);
23
+ break;
24
+ case "find_classes":
25
+ text = findByKind(db, "class", intent.target);
26
+ break;
27
+ case "find_functions":
28
+ text = findByKind(db, "function", intent.target);
29
+ break;
30
+ case "find_interfaces":
31
+ text = findByKind(db, "interface", intent.target);
32
+ break;
33
+ case "find_exports":
34
+ text = findExports(db, intent.target);
35
+ break;
36
+ case "dependency_of":
37
+ text = dependencyOf(graph, intent.target);
38
+ break;
39
+ case "dependents_of":
40
+ text = dependentsOf(graph, intent.target);
41
+ break;
42
+ case "module_summary":
43
+ text = moduleSummary(db, intent.target);
44
+ break;
45
+ case "entry_points":
46
+ text = findEntryPoints(db);
47
+ break;
48
+ case "largest_files":
49
+ text = findLargestFiles(db);
50
+ break;
51
+ case "symbol_search":
52
+ text = symbolSearch(graph, intent.target ?? query);
53
+ break;
54
+ }
55
+ return {
56
+ content: [{ type: "text", text }],
57
+ };
58
+ }
59
+ function classifyIntent(query) {
60
+ // Endpoints / routes / API
61
+ if (/\b(endpoint|route|api|handler|controller)\b/.test(query)) {
62
+ return { type: "find_endpoints" };
63
+ }
64
+ // Classes
65
+ if (/\b(class|classes)\b/.test(query) && !/depend/.test(query)) {
66
+ const target = extractTarget(query);
67
+ return { type: "find_classes", target };
68
+ }
69
+ // Interfaces
70
+ if (/\b(interface|interfaces|contract)\b/.test(query)) {
71
+ const target = extractTarget(query);
72
+ return { type: "find_interfaces", target };
73
+ }
74
+ // Functions
75
+ if (/\b(function|functions|method|methods)\b/.test(query) && !/depend/.test(query)) {
76
+ const target = extractTarget(query);
77
+ return { type: "find_functions", target };
78
+ }
79
+ // Exports
80
+ if (/\b(export|exports|public api)\b/.test(query)) {
81
+ const target = extractTarget(query);
82
+ return { type: "find_exports", target };
83
+ }
84
+ // Dependency / imports: "what does X depend on" / "what does X import"
85
+ if (/\b(depend on|depends on|import|imports from|uses)\b/.test(query)) {
86
+ const target = extractTarget(query);
87
+ if (target)
88
+ return { type: "dependency_of", target };
89
+ }
90
+ // Dependents: "what depends on X" / "who uses X" / "what references X"
91
+ if (/\b(depends on|depend on|who uses|what uses|references|consumers of|callers of)\b/.test(query)) {
92
+ const target = extractAfter(query, /(?:depends? on|who uses|what uses|references|consumers of|callers of)\s+/);
93
+ if (target)
94
+ return { type: "dependents_of", target };
95
+ }
96
+ // Module summary: "what does X do" / "describe X" / "summarize X"
97
+ if (/\b(what does|describe|summarize|overview|about)\b/.test(query)) {
98
+ const target = extractTarget(query);
99
+ if (target)
100
+ return { type: "module_summary", target };
101
+ }
102
+ // Entry points
103
+ if (/\b(entry point|main|entrypoint|start)\b/.test(query)) {
104
+ return { type: "entry_points" };
105
+ }
106
+ // Largest / most complex
107
+ if (/\b(largest|biggest|most complex|most symbols)\b/.test(query)) {
108
+ return { type: "largest_files" };
109
+ }
110
+ // Fallback: symbol search
111
+ const target = extractTarget(query);
112
+ return { type: "symbol_search", target: target || query };
113
+ }
114
+ function extractTarget(query) {
115
+ // Try to extract a meaningful target from the query
116
+ // Look for quoted strings first
117
+ const quoted = query.match(/["'`]([^"'`]+)["'`]/);
118
+ if (quoted)
119
+ return quoted[1];
120
+ // Look for file-like patterns
121
+ const fileLike = query.match(/\b([\w/.-]+\.\w+)\b/);
122
+ if (fileLike)
123
+ return fileLike[1];
124
+ // Look for CamelCase or specific identifiers
125
+ const camel = query.match(/\b([A-Z][a-zA-Z0-9]+)\b/);
126
+ if (camel)
127
+ return camel[1];
128
+ // Try to extract noun after common prepositions
129
+ const afterPrep = query.match(/(?:in|from|of|about|the)\s+(\w+)/);
130
+ if (afterPrep)
131
+ return afterPrep[1];
132
+ return undefined;
133
+ }
134
+ function extractAfter(query, pattern) {
135
+ const match = query.match(pattern);
136
+ if (!match)
137
+ return undefined;
138
+ const rest = query.substring(match.index + match[0].length).trim();
139
+ // Take the first word or quoted string
140
+ const quoted = rest.match(/^["'`]([^"'`]+)["'`]/);
141
+ if (quoted)
142
+ return quoted[1];
143
+ const word = rest.match(/^([\w./-]+)/);
144
+ return word?.[1];
145
+ }
146
+ function findEndpoints(db) {
147
+ // Look for common endpoint patterns: route handlers, HTTP methods, decorators
148
+ const patterns = [
149
+ "app.get", "app.post", "app.put", "app.delete", "app.patch",
150
+ "router.get", "router.post", "router.put", "router.delete",
151
+ "GET", "POST", "PUT", "DELETE", "PATCH",
152
+ "RequestMapping", "GetMapping", "PostMapping",
153
+ "handle", "handler", "endpoint",
154
+ ];
155
+ const results = [];
156
+ // Search for handler-like functions
157
+ const handlerRows = db.prepare(`
158
+ SELECT s.name, s.kind, f.path as file, s.line_start as line, s.signature as sig
159
+ FROM symbols s
160
+ JOIN files f ON s.file_id = f.id
161
+ WHERE (s.name LIKE '%handler%' OR s.name LIKE '%Handler%'
162
+ OR s.name LIKE '%endpoint%' OR s.name LIKE '%Endpoint%'
163
+ OR s.name LIKE '%route%' OR s.name LIKE '%Route%'
164
+ OR s.name LIKE '%controller%' OR s.name LIKE '%Controller%')
165
+ AND s.kind IN ('function', 'method', 'class')
166
+ ORDER BY f.path, s.line_start
167
+ LIMIT 50
168
+ `).all();
169
+ results.push(...handlerRows);
170
+ // Search for HTTP method references
171
+ const refRows = db.prepare(`
172
+ SELECT DISTINCT s.name, s.kind, f.path as file, s.line_start as line, s.signature as sig
173
+ FROM references_ r
174
+ JOIN symbols s ON r.from_symbol_id = s.id
175
+ JOIN files f ON s.file_id = f.id
176
+ WHERE r.to_symbol_bare_name IN ('get', 'post', 'put', 'delete', 'patch')
177
+ AND r.kind = 'call'
178
+ ORDER BY f.path, s.line_start
179
+ LIMIT 50
180
+ `).all();
181
+ results.push(...refRows);
182
+ if (results.length === 0) {
183
+ return "No API endpoints or route handlers found in the indexed codebase.";
184
+ }
185
+ const lines = ["# API Endpoints & Handlers\n"];
186
+ const seen = new Set();
187
+ for (const r of results) {
188
+ const key = `${r.file}:${r.line}:${r.name}`;
189
+ if (seen.has(key))
190
+ continue;
191
+ seen.add(key);
192
+ const sig = r.sig ? ` -- \`${r.sig}\`` : "";
193
+ lines.push(`- **${r.name}** (${r.kind}) in \`${r.file}:${r.line}\`${sig}`);
194
+ }
195
+ return lines.join("\n");
196
+ }
197
+ function findByKind(db, kind, target) {
198
+ const filter = target
199
+ ? `AND (s.name LIKE ? OR f.path LIKE ?)`
200
+ : "";
201
+ const params = [kind];
202
+ if (target) {
203
+ params.push(`%${target}%`, `%${target}%`);
204
+ }
205
+ const rows = db.prepare(`
206
+ SELECT s.name, s.kind, f.path as file, s.line_start as line, s.signature as sig, s.is_exported as exported
207
+ FROM symbols s
208
+ JOIN files f ON s.file_id = f.id
209
+ WHERE s.kind = ? ${filter}
210
+ ORDER BY s.is_exported DESC, f.path, s.line_start
211
+ LIMIT 50
212
+ `).all(...params);
213
+ if (rows.length === 0) {
214
+ return target
215
+ ? `No ${kind}s found matching "${target}".`
216
+ : `No ${kind}s found in the indexed codebase.`;
217
+ }
218
+ const label = kind.charAt(0).toUpperCase() + kind.slice(1);
219
+ const lines = [`# ${label}s${target ? ` matching "${target}"` : ""}\n`];
220
+ for (const r of rows) {
221
+ const exp = r.exported ? " (exported)" : "";
222
+ const sig = r.sig ? ` -- \`${r.sig}\`` : "";
223
+ lines.push(`- **${r.name}**${exp} in \`${r.file}:${r.line}\`${sig}`);
224
+ }
225
+ return lines.join("\n");
226
+ }
227
+ function findExports(db, target) {
228
+ const filter = target ? `AND f.path LIKE ?` : "";
229
+ const params = [];
230
+ if (target)
231
+ params.push(`%${target}%`);
232
+ const rows = db.prepare(`
233
+ SELECT s.name, s.kind, f.path as file, s.line_start as line, s.signature as sig
234
+ FROM symbols s
235
+ JOIN files f ON s.file_id = f.id
236
+ WHERE s.is_exported = 1 ${filter}
237
+ ORDER BY f.path, s.line_start
238
+ LIMIT 100
239
+ `).all(...params);
240
+ if (rows.length === 0) {
241
+ return target
242
+ ? `No exports found in files matching "${target}".`
243
+ : "No exported symbols found.";
244
+ }
245
+ const lines = [`# Exported Symbols${target ? ` (${target})` : ""}\n`];
246
+ // Group by file
247
+ const byFile = new Map();
248
+ for (const r of rows) {
249
+ const list = byFile.get(r.file) ?? [];
250
+ list.push(r);
251
+ byFile.set(r.file, list);
252
+ }
253
+ for (const [file, symbols] of byFile) {
254
+ lines.push(`## ${file}`);
255
+ for (const s of symbols) {
256
+ const sig = s.sig ? ` -- \`${s.sig}\`` : "";
257
+ lines.push(` - ${s.kind} **${s.name}**${sig}`);
258
+ }
259
+ lines.push("");
260
+ }
261
+ return lines.join("\n");
262
+ }
263
+ function dependencyOf(graph, target) {
264
+ const db = graph.getDb();
265
+ // Find files matching the target
266
+ const files = db.prepare(`
267
+ SELECT f.path, i.source_path as importSource, i.imported_name as importedName
268
+ FROM files f
269
+ JOIN imports i ON i.file_id = f.id
270
+ WHERE f.path LIKE ?
271
+ ORDER BY f.path, i.line
272
+ LIMIT 100
273
+ `).all(`%${target}%`);
274
+ if (files.length === 0) {
275
+ return `No imports found for files matching "${target}". The file may not import anything or may not be indexed.`;
276
+ }
277
+ const lines = [`# Dependencies of "${target}"\n`];
278
+ const byFile = new Map();
279
+ for (const r of files) {
280
+ const list = byFile.get(r.path) ?? [];
281
+ list.push({ source: r.importSource, name: r.importedName });
282
+ byFile.set(r.path, list);
283
+ }
284
+ for (const [file, deps] of byFile) {
285
+ lines.push(`## ${file}`);
286
+ for (const d of deps) {
287
+ lines.push(` - \`${d.name}\` from \`${d.source}\``);
288
+ }
289
+ lines.push("");
290
+ }
291
+ return lines.join("\n");
292
+ }
293
+ function dependentsOf(graph, target) {
294
+ const refs = graph.getReferences(target, 2);
295
+ if (refs.length === 0) {
296
+ return `No dependents found for "${target}". It may not be referenced by other symbols.`;
297
+ }
298
+ const lines = [`# Dependents of "${target}"\n`];
299
+ const byFile = new Map();
300
+ for (const r of refs) {
301
+ const list = byFile.get(r.fromFile) ?? [];
302
+ list.push(r);
303
+ byFile.set(r.fromFile, list);
304
+ }
305
+ for (const [file, fileRefs] of byFile) {
306
+ lines.push(`## ${file}`);
307
+ for (const r of fileRefs) {
308
+ lines.push(` - **${r.fromSymbol}** (${r.fromKind}) --[${r.refKind}]--> ${r.toSymbol} (line ${r.refLine})`);
309
+ }
310
+ lines.push("");
311
+ }
312
+ lines.push(`\n**${refs.length} total references across ${byFile.size} files**`);
313
+ return lines.join("\n");
314
+ }
315
+ function moduleSummary(db, target) {
316
+ if (!target)
317
+ return "Please specify a module or file to summarize.";
318
+ // Find matching files
319
+ const files = db.prepare(`
320
+ SELECT id, path FROM files WHERE path LIKE ? LIMIT 10
321
+ `).all(`%${target}%`);
322
+ if (files.length === 0) {
323
+ return `No files found matching "${target}".`;
324
+ }
325
+ const lines = [`# Module Summary: "${target}"\n`];
326
+ for (const file of files) {
327
+ const symbols = db.prepare(`
328
+ SELECT name, kind, line_start as line, signature as sig, is_exported as exported
329
+ FROM symbols WHERE file_id = ?
330
+ ORDER BY line_start
331
+ `).all(file.id);
332
+ const imports = db.prepare(`
333
+ SELECT source_path as source, imported_name as name FROM imports WHERE file_id = ?
334
+ `).all(file.id);
335
+ lines.push(`## ${file.path}`);
336
+ if (imports.length > 0) {
337
+ lines.push(`\n**Imports:** ${imports.map((i) => `\`${i.name}\` from \`${i.source}\``).join(", ")}`);
338
+ }
339
+ const exported = symbols.filter((s) => s.exported);
340
+ const internal = symbols.filter((s) => !s.exported);
341
+ if (exported.length > 0) {
342
+ lines.push(`\n**Exports (${exported.length}):**`);
343
+ for (const s of exported) {
344
+ const sig = s.sig ? ` -- \`${s.sig}\`` : "";
345
+ lines.push(` - ${s.kind} **${s.name}**${sig}`);
346
+ }
347
+ }
348
+ if (internal.length > 0) {
349
+ lines.push(`\n**Internal (${internal.length}):**`);
350
+ for (const s of internal) {
351
+ lines.push(` - ${s.kind} ${s.name}`);
352
+ }
353
+ }
354
+ lines.push("");
355
+ }
356
+ return lines.join("\n");
357
+ }
358
+ function findEntryPoints(db) {
359
+ // Entry points: main functions, index files, files with no importers
360
+ const mainFuncs = db.prepare(`
361
+ SELECT s.name, s.kind, f.path as file, s.line_start as line
362
+ FROM symbols s
363
+ JOIN files f ON s.file_id = f.id
364
+ WHERE s.name IN ('main', 'Main', 'run', 'start', 'init', 'bootstrap', 'setup')
365
+ AND s.kind IN ('function', 'method')
366
+ ORDER BY f.path
367
+ LIMIT 20
368
+ `).all();
369
+ const indexFiles = db.prepare(`
370
+ SELECT path FROM files
371
+ WHERE path LIKE '%/index.%' OR path LIKE '%/main.%' OR path LIKE '%/app.%' OR path LIKE '%/server.%'
372
+ ORDER BY path
373
+ LIMIT 20
374
+ `).all();
375
+ const lines = ["# Entry Points\n"];
376
+ if (mainFuncs.length > 0) {
377
+ lines.push("## Main Functions");
378
+ for (const f of mainFuncs) {
379
+ lines.push(` - **${f.name}** (${f.kind}) in \`${f.file}:${f.line}\``);
380
+ }
381
+ lines.push("");
382
+ }
383
+ if (indexFiles.length > 0) {
384
+ lines.push("## Entry Files");
385
+ for (const f of indexFiles) {
386
+ lines.push(` - \`${f.path}\``);
387
+ }
388
+ lines.push("");
389
+ }
390
+ if (mainFuncs.length === 0 && indexFiles.length === 0) {
391
+ return "No obvious entry points found. Look for files named main.*, index.*, app.*, or functions named main/run/start.";
392
+ }
393
+ return lines.join("\n");
394
+ }
395
+ function findLargestFiles(db) {
396
+ const rows = db.prepare(`
397
+ SELECT f.path, COUNT(s.id) as symbolCount
398
+ FROM files f
399
+ LEFT JOIN symbols s ON s.file_id = f.id
400
+ GROUP BY f.id
401
+ ORDER BY symbolCount DESC
402
+ LIMIT 20
403
+ `).all();
404
+ if (rows.length === 0) {
405
+ return "No files indexed yet.";
406
+ }
407
+ const lines = ["# Largest Files by Symbol Count\n"];
408
+ for (const r of rows) {
409
+ lines.push(`- **${r.symbolCount}** symbols -- \`${r.path}\``);
410
+ }
411
+ return lines.join("\n");
412
+ }
413
+ function symbolSearch(graph, target) {
414
+ const results = graph.findSymbols({ name: target, limit: 30 });
415
+ if (results.length === 0) {
416
+ return `No symbols found matching "${target}". Try a different search term or run reindex.`;
417
+ }
418
+ const lines = [`# Symbols matching "${target}"\n`];
419
+ for (const r of results) {
420
+ const sig = r.signature ? ` -- \`${r.signature}\`` : "";
421
+ const exp = r.isExported ? " (exported)" : "";
422
+ lines.push(`- ${r.kind} **${r.name}**${exp} in \`${r.filePath}:${r.lineStart}\`${sig}`);
423
+ }
424
+ return lines.join("\n");
425
+ }
426
+ //# sourceMappingURL=natural-language-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"natural-language-query.js","sourceRoot":"","sources":["../../src/tools/natural-language-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { FileWatcher } from "../indexer/file-watcher.js";
2
+ export declare const reindexTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {};
8
+ };
9
+ };
10
+ export declare function handleReindex(watcher: FileWatcher): Promise<{
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ }>;
@@ -0,0 +1,20 @@
1
+ export const reindexTool = {
2
+ name: "reindex",
3
+ description: "Trigger a full re-index of the codebase. Useful after major changes or when results seem stale.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {},
7
+ },
8
+ };
9
+ export async function handleReindex(watcher) {
10
+ await watcher.initialIndex();
11
+ return {
12
+ content: [
13
+ {
14
+ type: "text",
15
+ text: "Re-indexing complete.",
16
+ },
17
+ ],
18
+ };
19
+ }
20
+ //# sourceMappingURL=reindex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reindex.js","sourceRoot":"","sources":["../../src/tools/reindex.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,iGAAiG;IAC9G,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE,EAAE;KACf;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAoB;IACtD,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;IAE7B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,uBAAuB;aAC9B;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { CodeGraph } from "../graph/code-graph.js";
2
+ export declare const semanticDiffTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ git_ref: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ diff: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ depth: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ };
21
+ };
22
+ };
23
+ export declare function handleSemanticDiff(graph: CodeGraph, args: {
24
+ diff?: string;
25
+ git_ref?: string;
26
+ depth?: number;
27
+ }, projectRoot?: string): {
28
+ content: {
29
+ type: "text";
30
+ text: string;
31
+ }[];
32
+ };