tokenos 1.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 (111) hide show
  1. package/README.md +571 -0
  2. package/USAGE.md +451 -0
  3. package/dist/config.d.ts +22 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +60 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/db/connection.d.ts +3 -0
  8. package/dist/db/connection.d.ts.map +1 -0
  9. package/dist/db/connection.js +78 -0
  10. package/dist/db/connection.js.map +1 -0
  11. package/dist/db/index.d.ts +4 -0
  12. package/dist/db/index.d.ts.map +1 -0
  13. package/dist/db/index.js +4 -0
  14. package/dist/db/index.js.map +1 -0
  15. package/dist/db/memory.d.ts +6 -0
  16. package/dist/db/memory.d.ts.map +1 -0
  17. package/dist/db/memory.js +62 -0
  18. package/dist/db/memory.js.map +1 -0
  19. package/dist/db/queries.d.ts +29 -0
  20. package/dist/db/queries.d.ts.map +1 -0
  21. package/dist/db/queries.js +215 -0
  22. package/dist/db/queries.js.map +1 -0
  23. package/dist/embeddings/client.d.ts +16 -0
  24. package/dist/embeddings/client.d.ts.map +1 -0
  25. package/dist/embeddings/client.js +70 -0
  26. package/dist/embeddings/client.js.map +1 -0
  27. package/dist/embeddings/index.d.ts +11 -0
  28. package/dist/embeddings/index.d.ts.map +1 -0
  29. package/dist/embeddings/index.js +37 -0
  30. package/dist/embeddings/index.js.map +1 -0
  31. package/dist/embeddings/similarity.d.ts +7 -0
  32. package/dist/embeddings/similarity.d.ts.map +1 -0
  33. package/dist/embeddings/similarity.js +31 -0
  34. package/dist/embeddings/similarity.js.map +1 -0
  35. package/dist/indexer/cli.d.ts +8 -0
  36. package/dist/indexer/cli.d.ts.map +1 -0
  37. package/dist/indexer/cli.js +21 -0
  38. package/dist/indexer/cli.js.map +1 -0
  39. package/dist/indexer/ignore.d.ts +4 -0
  40. package/dist/indexer/ignore.d.ts.map +1 -0
  41. package/dist/indexer/ignore.js +30 -0
  42. package/dist/indexer/ignore.js.map +1 -0
  43. package/dist/indexer/index.d.ts +5 -0
  44. package/dist/indexer/index.d.ts.map +1 -0
  45. package/dist/indexer/index.js +4 -0
  46. package/dist/indexer/index.js.map +1 -0
  47. package/dist/indexer/indexer.d.ts +13 -0
  48. package/dist/indexer/indexer.d.ts.map +1 -0
  49. package/dist/indexer/indexer.js +125 -0
  50. package/dist/indexer/indexer.js.map +1 -0
  51. package/dist/indexer/parser.d.ts +10 -0
  52. package/dist/indexer/parser.d.ts.map +1 -0
  53. package/dist/indexer/parser.js +444 -0
  54. package/dist/indexer/parser.js.map +1 -0
  55. package/dist/indexer/watcher.d.ts +7 -0
  56. package/dist/indexer/watcher.d.ts.map +1 -0
  57. package/dist/indexer/watcher.js +64 -0
  58. package/dist/indexer/watcher.js.map +1 -0
  59. package/dist/main.d.ts +3 -0
  60. package/dist/main.d.ts.map +1 -0
  61. package/dist/main.js +92 -0
  62. package/dist/main.js.map +1 -0
  63. package/dist/reset.d.ts +6 -0
  64. package/dist/reset.d.ts.map +1 -0
  65. package/dist/reset.js +23 -0
  66. package/dist/reset.js.map +1 -0
  67. package/dist/server/index.d.ts +2 -0
  68. package/dist/server/index.d.ts.map +1 -0
  69. package/dist/server/index.js +2 -0
  70. package/dist/server/index.js.map +1 -0
  71. package/dist/server/server.d.ts +4 -0
  72. package/dist/server/server.d.ts.map +1 -0
  73. package/dist/server/server.js +558 -0
  74. package/dist/server/server.js.map +1 -0
  75. package/dist/server/visualize.d.ts +2 -0
  76. package/dist/server/visualize.d.ts.map +1 -0
  77. package/dist/server/visualize.js +299 -0
  78. package/dist/server/visualize.js.map +1 -0
  79. package/dist/test-phase1.d.ts +13 -0
  80. package/dist/test-phase1.d.ts.map +1 -0
  81. package/dist/test-phase1.js +90 -0
  82. package/dist/test-phase1.js.map +1 -0
  83. package/dist/test-phase2.d.ts +13 -0
  84. package/dist/test-phase2.d.ts.map +1 -0
  85. package/dist/test-phase2.js +110 -0
  86. package/dist/test-phase2.js.map +1 -0
  87. package/dist/test-phase3.d.ts +12 -0
  88. package/dist/test-phase3.d.ts.map +1 -0
  89. package/dist/test-phase3.js +85 -0
  90. package/dist/test-phase3.js.map +1 -0
  91. package/dist/types.d.ts +73 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +3 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/cache.d.ts +12 -0
  96. package/dist/utils/cache.d.ts.map +1 -0
  97. package/dist/utils/cache.js +45 -0
  98. package/dist/utils/cache.js.map +1 -0
  99. package/dist/utils/logger.d.ts +16 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +52 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. package/dist/utils/scoring.d.ts +15 -0
  104. package/dist/utils/scoring.d.ts.map +1 -0
  105. package/dist/utils/scoring.js +17 -0
  106. package/dist/utils/scoring.js.map +1 -0
  107. package/dist/verify-parser.d.ts +6 -0
  108. package/dist/verify-parser.d.ts.map +1 -0
  109. package/dist/verify-parser.js +105 -0
  110. package/dist/verify-parser.js.map +1 -0
  111. package/package.json +52 -0
@@ -0,0 +1,558 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { z } from "zod";
4
+ import { getNode, getNodesByName, getNodesByNameAndType, getNodesWithEmbeddings, getNeighbors, getConnectedNodes, getTopNodes, searchNodesExtended, searchMemories, } from "../db/index.js";
5
+ import { generateEmbedding, rankBySimilarity } from "../embeddings/index.js";
6
+ import { logger } from "../utils/logger.js";
7
+ // ───── Constants ──────────────────────────────────────────────────────────────
8
+ /** Truncate responses at this size to prevent overwhelming the LLM context */
9
+ const CHARACTER_LIMIT = 25_000;
10
+ // ───── Helpers ────────────────────────────────────────────────────────────────
11
+ function truncate(text) {
12
+ if (text.length <= CHARACTER_LIMIT)
13
+ return text;
14
+ return (text.slice(0, CHARACTER_LIMIT) +
15
+ `\n\n[...truncated: response exceeded ${CHARACTER_LIMIT} chars. ` +
16
+ `Use a smaller depth, tighter query, or add a type filter to reduce results.]`);
17
+ }
18
+ function buildSubgraph(startId, maxDepth, options) {
19
+ const visitedNodes = new Map();
20
+ const visitedEdges = [];
21
+ const queue = [{ id: startId, depth: 0 }];
22
+ while (queue.length > 0) {
23
+ const item = queue.shift();
24
+ if (visitedNodes.has(item.id) || item.depth > maxDepth)
25
+ continue;
26
+ const node = getNode(item.id);
27
+ if (!node)
28
+ continue;
29
+ if (options?.nodeTypes && options.nodeTypes.length > 0 && !options.nodeTypes.includes(node.type)) {
30
+ continue;
31
+ }
32
+ visitedNodes.set(item.id, node);
33
+ if (item.depth < maxDepth) {
34
+ for (const edge of getNeighbors(item.id)) {
35
+ if (options?.edgeTypes && options.edgeTypes.length > 0 && !options.edgeTypes.includes(edge.type)) {
36
+ continue;
37
+ }
38
+ visitedEdges.push(edge);
39
+ const nextId = edge.from_node === item.id ? edge.to_node : edge.from_node;
40
+ if (!visitedNodes.has(nextId)) {
41
+ queue.push({ id: nextId, depth: item.depth + 1 });
42
+ }
43
+ }
44
+ }
45
+ }
46
+ return { nodes: Array.from(visitedNodes.values()), edges: visitedEdges };
47
+ }
48
+ function compressNode(node, options) {
49
+ let metaObj = undefined;
50
+ if (node.meta) {
51
+ try {
52
+ metaObj = typeof node.meta === 'string' ? JSON.parse(node.meta) : node.meta;
53
+ }
54
+ catch { }
55
+ }
56
+ const includeCode = options?.includeCode ?? false;
57
+ const includeSummary = options?.includeSummary ?? true;
58
+ const includeEmbedding = options?.includeEmbedding ?? false;
59
+ return {
60
+ id: node.id,
61
+ name: node.name,
62
+ type: node.type,
63
+ ...(includeSummary ? { summary: node.summary } : {}),
64
+ importance: node.importance,
65
+ meta: metaObj,
66
+ ...(includeCode ? { code_snippet: node.code_snippet } : {}),
67
+ ...(includeEmbedding && node.embedding ? { embedding: node.embedding } : {}),
68
+ };
69
+ }
70
+ function compressGraph(graph, options) {
71
+ return {
72
+ nodes: graph.nodes.map(n => compressNode(n, options)),
73
+ edges: graph.edges,
74
+ };
75
+ }
76
+ // ───── Zod schemas (defined once, reused in tool registration) ────────────────
77
+ const ResponseFormatSchema = z
78
+ .enum(["json", "markdown"])
79
+ .default("json")
80
+ .describe("Output format — 'json' for programmatic use, 'markdown' for human-readable");
81
+ const NodeIdSchema = z
82
+ .string()
83
+ .describe("Node ID in the format filePath::name (e.g. 'src/utils/cache.ts::LRUCache')");
84
+ // ───── Server factory ─────────────────────────────────────────────────────────
85
+ export function createServer() {
86
+ const server = new McpServer({ name: "tokenos-server", version: "1.1.0" });
87
+ // ── search ─────────────────────────────────────────────────────────────────
88
+ server.registerTool("search", {
89
+ title: "Search",
90
+ description: `Smart search that understands intent and returns the most relevant code and context.
91
+
92
+ Args:
93
+ - query (string): Natural language question or search term.
94
+ - response_format: 'json' (default) or 'markdown'
95
+
96
+ Returns:
97
+ Compressed, relevant context (code + relationships + memory).`,
98
+ inputSchema: z.object({
99
+ query: z.string().describe("Search query"),
100
+ response_format: ResponseFormatSchema,
101
+ }),
102
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
103
+ }, async ({ query, response_format }) => {
104
+ // 1. Detect Intent
105
+ const q = query.toLowerCase();
106
+ let mode = "semantic";
107
+ if (q.includes("trace") || q.includes("flow") || q.includes("how") || q.includes("why")) {
108
+ mode = "trace";
109
+ }
110
+ else if (q.includes("where") || q.includes("what") || q.includes("find")) {
111
+ mode = "explore";
112
+ }
113
+ else if (q.includes("depend") || q.includes("import") || q.includes("export")) {
114
+ mode = "dependency";
115
+ }
116
+ // 2. Hybrid Search
117
+ const textResults = searchNodesExtended(query);
118
+ const semanticVec = await generateEmbedding(query);
119
+ let semanticResults = [];
120
+ if (semanticVec) {
121
+ const candidates = getNodesWithEmbeddings();
122
+ semanticResults = rankBySimilarity(semanticVec, candidates, 10);
123
+ }
124
+ const combined = [...textResults.slice(0, 10), ...semanticResults.slice(0, 5)];
125
+ const uniqueIds = Array.from(new Set(combined.map(n => n.id)));
126
+ // 3. Expand Graph
127
+ const depth = mode === "trace" ? 2 : 1;
128
+ const finalGraph = { nodes: [], edges: [] };
129
+ const options = {};
130
+ if (mode === "dependency") {
131
+ options.edgeTypes = ["IMPORTS", "EXPORTS"];
132
+ }
133
+ const seen = new Set();
134
+ for (const id of uniqueIds.slice(0, 5)) {
135
+ if (seen.has(id))
136
+ continue;
137
+ const sub = buildSubgraph(id, depth, options);
138
+ for (const n of sub.nodes) {
139
+ if (!seen.has(n.id)) {
140
+ finalGraph.nodes.push(n);
141
+ seen.add(n.id);
142
+ }
143
+ }
144
+ finalGraph.edges.push(...sub.edges);
145
+ }
146
+ // De-duplicate edges
147
+ const edgeSet = new Set();
148
+ const uniqueEdges = [];
149
+ for (const e of finalGraph.edges) {
150
+ const key = `${e.from_node}|${e.to_node}|${e.type}`;
151
+ if (!edgeSet.has(key)) {
152
+ edgeSet.add(key);
153
+ uniqueEdges.push(e);
154
+ }
155
+ }
156
+ finalGraph.edges = uniqueEdges;
157
+ // 4. Memory Retreival
158
+ const memories = searchMemories(query).slice(0, 3);
159
+ const output = {
160
+ mode,
161
+ graph: compressGraph(finalGraph),
162
+ memories: memories.map(m => ({
163
+ id: m.id,
164
+ title: m.title,
165
+ summary: m.summary,
166
+ key_points: m.key_points,
167
+ tags: m.tags,
168
+ })),
169
+ };
170
+ let text;
171
+ if (response_format === "markdown") {
172
+ text = [
173
+ `# Cognitive Search: "${query}"`,
174
+ `Detected Mode: **${mode}**`,
175
+ "",
176
+ `## Codebase Context (${output.graph.nodes.length} nodes)`,
177
+ ...output.graph.nodes.map(n => `- **${n.name}** (${n.type})\n ${n.summary || ""}`),
178
+ "",
179
+ `## Related Memories (${output.memories.length})`,
180
+ ...output.memories.map(m => `### ${m.title}\n${m.summary}\n`),
181
+ ].join("\n");
182
+ }
183
+ else {
184
+ text = JSON.stringify(output, null, 2);
185
+ }
186
+ return {
187
+ content: [{ type: "text", text: truncate(text) }],
188
+ structuredContent: output,
189
+ };
190
+ });
191
+ // ── find_nodes ──────────────────────────────────────────────────────────────
192
+ server.registerTool("find_nodes", {
193
+ title: "Find Nodes",
194
+ description: `Find code elements by name, type, or meaning.
195
+
196
+ Args:
197
+ - query (string): Function name, class name, or a natural-language description
198
+ - type: Optional filter — 'function' | 'class' | 'file' | 'import' | 'variable' | 'component' | 'interface' | 'type_alias' | 'enum' | 'route'
199
+ - mode: 'text' (default) or 'semantic' (Ollama embedding search)
200
+ - limit (1–50, default 10): Max results per page
201
+ - offset (default 0): Results to skip for pagination
202
+ - response_format: 'json' (default) or 'markdown'
203
+
204
+ Returns:
205
+ List of matching nodes with relevance ranking.`,
206
+ inputSchema: z.object({
207
+ query: z.string().describe("Search query — function name, class name, or description"),
208
+ type: z
209
+ .enum(["function", "class", "file", "import", "variable", "component", "interface", "type_alias", "enum", "route"])
210
+ .optional()
211
+ .describe("Filter by node type"),
212
+ mode: z
213
+ .enum(["text", "semantic"])
214
+ .default("text")
215
+ .describe("Search mode — text (default) or semantic (requires Ollama)"),
216
+ limit: z.number().int().min(1).max(50).default(10).describe("Max results to return"),
217
+ offset: z
218
+ .number()
219
+ .int()
220
+ .min(0)
221
+ .default(0)
222
+ .describe("Results to skip for pagination"),
223
+ response_format: ResponseFormatSchema,
224
+ }),
225
+ annotations: {
226
+ readOnlyHint: true,
227
+ destructiveHint: false,
228
+ idempotentHint: true,
229
+ openWorldHint: false,
230
+ },
231
+ }, async ({ query, type, mode, limit, offset, response_format }) => {
232
+ try {
233
+ let allResults;
234
+ if (mode === "semantic") {
235
+ const queryVec = await generateEmbedding(query);
236
+ if (queryVec) {
237
+ // Only load nodes that have embeddings (+ optional type filter at SQL level)
238
+ const candidates = getNodesWithEmbeddings(type);
239
+ allResults = rankBySimilarity(queryVec, candidates, limit + offset);
240
+ }
241
+ else {
242
+ logger.warn("tokenos", "Ollama unavailable, falling back to text search");
243
+ allResults = getNodesByName(query).map((n) => ({ ...n, similarity: undefined }));
244
+ }
245
+ }
246
+ else {
247
+ // Text search: AND filter when type provided, extended meta search otherwise
248
+ const results = type
249
+ ? getNodesByNameAndType(query, type)
250
+ : searchNodesExtended(query);
251
+ allResults = results
252
+ .sort((a, b) => b.importance - a.importance)
253
+ .map((n) => ({ ...n, similarity: undefined }));
254
+ }
255
+ const total = allResults.length;
256
+ const page = allResults.slice(offset, offset + limit);
257
+ const hasMore = offset + page.length < total;
258
+ const output = {
259
+ total,
260
+ count: page.length,
261
+ offset,
262
+ has_more: hasMore,
263
+ ...(hasMore ? { next_offset: offset + page.length } : {}),
264
+ nodes: page.map(n => compressNode(n)),
265
+ };
266
+ let text;
267
+ if (response_format === "markdown") {
268
+ const lines = [
269
+ `# Search: "${query}"`,
270
+ `Found **${total}** nodes — showing ${page.length} from offset ${offset}`,
271
+ "",
272
+ ];
273
+ for (const n of page) {
274
+ const metaStr = n.meta ? (() => {
275
+ try {
276
+ const m = JSON.parse(n.meta);
277
+ const parts = [];
278
+ if (m.role)
279
+ parts.push(`role: ${m.role}`);
280
+ if (m.tab)
281
+ parts.push(`tab: ${m.tab}`);
282
+ if (m.feature)
283
+ parts.push(`feature: ${m.feature}`);
284
+ if (m.route)
285
+ parts.push(`route: ${m.route}`);
286
+ return parts.length ? ` — ${parts.join(", ")}` : "";
287
+ }
288
+ catch {
289
+ return "";
290
+ }
291
+ })() : "";
292
+ lines.push(`## ${n.name} \`(${n.type})\`${metaStr}`);
293
+ lines.push(`- **ID**: \`${n.id}\``);
294
+ lines.push(`- **File**: ${n.file_path}`);
295
+ lines.push(`- **Importance**: ${n.importance}`);
296
+ if (n.similarity != null)
297
+ lines.push(`- **Similarity**: ${n.similarity.toFixed(3)}`);
298
+ lines.push("");
299
+ }
300
+ if (hasMore)
301
+ lines.push(`> Use \`offset=${offset + page.length}\` to see more results.`);
302
+ text = lines.join("\n");
303
+ }
304
+ else {
305
+ text = JSON.stringify(output, null, 2);
306
+ }
307
+ return {
308
+ content: [{ type: "text", text: truncate(text) }],
309
+ structuredContent: output,
310
+ };
311
+ }
312
+ catch (error) {
313
+ return {
314
+ isError: true,
315
+ content: [
316
+ {
317
+ type: "text",
318
+ text: `Error searching nodes: ${error instanceof Error ? error.message : String(error)}. Try a different query or check the database.`,
319
+ },
320
+ ],
321
+ };
322
+ }
323
+ });
324
+ // ── get_node ────────────────────────────────────────────────────────────────
325
+ server.registerTool("get_node", {
326
+ title: "Get Node",
327
+ description: `Get full details of a specific code element.
328
+
329
+ Args:
330
+ - id (string): Node ID in format 'filePath::name'
331
+ - response_format: 'json' (default) or 'markdown'
332
+
333
+ Returns:
334
+ Complete node data (code, type, file, importance).`,
335
+ inputSchema: z.object({
336
+ id: NodeIdSchema,
337
+ response_format: ResponseFormatSchema,
338
+ }),
339
+ annotations: {
340
+ readOnlyHint: true,
341
+ destructiveHint: false,
342
+ idempotentHint: true,
343
+ openWorldHint: false,
344
+ },
345
+ }, async ({ id, response_format }) => {
346
+ const node = getNode(id);
347
+ if (!node) {
348
+ return {
349
+ isError: true,
350
+ content: [
351
+ {
352
+ type: "text",
353
+ text: `Node not found: "${id}". Use find_nodes to find the correct ID.`,
354
+ },
355
+ ],
356
+ };
357
+ }
358
+ const compressedNode = compressNode(node, { includeCode: true });
359
+ let text;
360
+ if (response_format === "markdown") {
361
+ const lines = [
362
+ `# ${node.name} \`(${node.type})\``,
363
+ `- **ID**: \`${node.id}\``,
364
+ `- **File**: ${node.file_path}`,
365
+ `- **Importance**: ${node.importance}`,
366
+ ];
367
+ if (node.summary)
368
+ lines.push(`- **Summary**: ${node.summary}`);
369
+ if (node.code_snippet)
370
+ lines.push(`\n\`\`\`typescript\n${node.code_snippet}\n\`\`\``);
371
+ text = lines.join("\n");
372
+ }
373
+ else {
374
+ text = JSON.stringify(compressedNode, null, 2);
375
+ }
376
+ return {
377
+ content: [{ type: "text", text }],
378
+ structuredContent: compressedNode,
379
+ };
380
+ });
381
+ // ── get_connections ─────────────────────────────────────────────────────────
382
+ server.registerTool("get_connections", {
383
+ title: "Get Connections",
384
+ description: `Get directly related code elements.
385
+
386
+ Args:
387
+ - id (string): Node ID to find connections for
388
+ - response_format: 'json' (default) or 'markdown'
389
+
390
+ Returns:
391
+ Connected nodes and their relationships.`,
392
+ inputSchema: z.object({
393
+ id: NodeIdSchema,
394
+ response_format: ResponseFormatSchema,
395
+ }),
396
+ annotations: {
397
+ readOnlyHint: true,
398
+ destructiveHint: false,
399
+ idempotentHint: true,
400
+ openWorldHint: false,
401
+ },
402
+ }, async ({ id, response_format }) => {
403
+ const node = getNode(id);
404
+ if (!node) {
405
+ return {
406
+ isError: true,
407
+ content: [
408
+ {
409
+ type: "text",
410
+ text: `Node not found: "${id}". Use find_nodes to find the correct ID.`,
411
+ },
412
+ ],
413
+ };
414
+ }
415
+ const edges = getNeighbors(id);
416
+ const connectedNodes = getConnectedNodes(id);
417
+ const output = {
418
+ node: compressNode(node),
419
+ edges,
420
+ connected_nodes: connectedNodes.map(n => compressNode(n))
421
+ };
422
+ let text;
423
+ if (response_format === "markdown") {
424
+ const lines = [
425
+ `# Neighbors of \`${node.name}\``,
426
+ `**${edges.length}** edges · **${connectedNodes.length}** connected nodes`,
427
+ "",
428
+ "## Edges",
429
+ ];
430
+ for (const e of edges) {
431
+ lines.push(`- \`${e.from_node}\` → \`${e.to_node}\` **(${e.type})**`);
432
+ }
433
+ if (connectedNodes.length > 0) {
434
+ lines.push("", "## Connected Nodes");
435
+ for (const n of connectedNodes) {
436
+ lines.push(`- **${n.name}** \`(${n.type})\` — importance: ${n.importance}`);
437
+ }
438
+ }
439
+ text = lines.join("\n");
440
+ }
441
+ else {
442
+ text = JSON.stringify(output, null, 2);
443
+ }
444
+ return {
445
+ content: [{ type: "text", text: truncate(text) }],
446
+ structuredContent: output,
447
+ };
448
+ });
449
+ // ── explore ─────────────────────────────────────────────────────────────────
450
+ server.registerTool("explore", {
451
+ title: "Explore",
452
+ description: `Explore surrounding code context from a starting point.
453
+
454
+ Args:
455
+ - id (string): Starting node ID
456
+ - depth (1–3, default 2): Max traversal depth
457
+
458
+ Returns:
459
+ Local graph (nodes + relationships).`,
460
+ inputSchema: z.object({
461
+ id: NodeIdSchema,
462
+ depth: z
463
+ .number()
464
+ .int()
465
+ .min(1)
466
+ .max(3)
467
+ .default(2)
468
+ .describe("Max traversal depth (1–3, default 2)"),
469
+ }),
470
+ annotations: {
471
+ readOnlyHint: true,
472
+ destructiveHint: false,
473
+ idempotentHint: true,
474
+ openWorldHint: false,
475
+ },
476
+ }, async ({ id, depth }) => {
477
+ const startNode = getNode(id);
478
+ if (!startNode) {
479
+ return {
480
+ isError: true,
481
+ content: [
482
+ {
483
+ type: "text",
484
+ text: `Node not found: "${id}". Use find_nodes to find the correct ID.`,
485
+ },
486
+ ],
487
+ };
488
+ }
489
+ const subgraph = buildSubgraph(id, depth);
490
+ const output = compressGraph(subgraph);
491
+ return {
492
+ content: [{ type: "text", text: truncate(JSON.stringify(output, null, 2)) }],
493
+ structuredContent: output,
494
+ };
495
+ });
496
+ // ── top_nodes ───────────────────────────────────────────────────────────────
497
+ server.registerTool("top_nodes", {
498
+ title: "Top Nodes",
499
+ description: `Get the most important parts of the codebase.
500
+
501
+ Args:
502
+ - limit (1–100, default 20): Max nodes to return
503
+ - response_format: 'json' (default) or 'markdown'
504
+
505
+ Returns:
506
+ Ranked list of high-impact nodes.`,
507
+ inputSchema: z.object({
508
+ limit: z.number().int().min(1).max(100).default(20).describe("Max nodes to return"),
509
+ response_format: ResponseFormatSchema,
510
+ }),
511
+ annotations: {
512
+ readOnlyHint: true,
513
+ destructiveHint: false,
514
+ idempotentHint: true,
515
+ openWorldHint: false,
516
+ },
517
+ }, async ({ limit, response_format }) => {
518
+ try {
519
+ const nodes = getTopNodes(limit);
520
+ const outputNodes = nodes.map(n => compressNode(n));
521
+ let text;
522
+ if (response_format === "markdown") {
523
+ const lines = [`# Top ${nodes.length} Important Nodes`, ""];
524
+ for (const [i, n] of nodes.entries()) {
525
+ lines.push(`${i + 1}. **${n.name}** \`(${n.type})\` — score: **${n.importance}**`);
526
+ lines.push(` \`${n.file_path}\``);
527
+ }
528
+ text = lines.join("\n");
529
+ }
530
+ else {
531
+ text = JSON.stringify({ count: outputNodes.length, nodes: outputNodes }, null, 2);
532
+ }
533
+ return {
534
+ content: [{ type: "text", text }],
535
+ structuredContent: { count: outputNodes.length, nodes: outputNodes },
536
+ };
537
+ }
538
+ catch (error) {
539
+ return {
540
+ isError: true,
541
+ content: [
542
+ {
543
+ type: "text",
544
+ text: `Error fetching important nodes: ${error instanceof Error ? error.message : String(error)}`,
545
+ },
546
+ ],
547
+ };
548
+ }
549
+ });
550
+ return server;
551
+ }
552
+ export async function startServer() {
553
+ const server = createServer();
554
+ const transport = new StdioServerTransport();
555
+ await server.connect(transport);
556
+ // logger handles the "server running on stdio" via viteLike inside main.ts, but let's keep it quiet here or as debug
557
+ }
558
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function startVisualizationServer(): Promise<void>;
2
+ //# sourceMappingURL=visualize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualize.d.ts","sourceRoot":"","sources":["../../src/server/visualize.ts"],"names":[],"mappings":"AAwPA,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2D9D"}