ai-mind-map 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.
- package/LICENSE +21 -0
- package/README.md +554 -0
- package/dist/change-tracker/change-log.d.ts +160 -0
- package/dist/change-tracker/change-log.d.ts.map +1 -0
- package/dist/change-tracker/change-log.js +507 -0
- package/dist/change-tracker/change-log.js.map +1 -0
- package/dist/change-tracker/diff-engine.d.ts +149 -0
- package/dist/change-tracker/diff-engine.d.ts.map +1 -0
- package/dist/change-tracker/diff-engine.js +530 -0
- package/dist/change-tracker/diff-engine.js.map +1 -0
- package/dist/change-tracker/watcher.d.ts +137 -0
- package/dist/change-tracker/watcher.d.ts.map +1 -0
- package/dist/change-tracker/watcher.js +300 -0
- package/dist/change-tracker/watcher.js.map +1 -0
- package/dist/cli.d.ts +20 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +937 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +222 -0
- package/dist/config.js.map +1 -0
- package/dist/context/compressor.d.ts +49 -0
- package/dist/context/compressor.d.ts.map +1 -0
- package/dist/context/compressor.js +769 -0
- package/dist/context/compressor.js.map +1 -0
- package/dist/context/progressive-disclosure.d.ts +71 -0
- package/dist/context/progressive-disclosure.d.ts.map +1 -0
- package/dist/context/progressive-disclosure.js +470 -0
- package/dist/context/progressive-disclosure.js.map +1 -0
- package/dist/context/token-budget.d.ts +121 -0
- package/dist/context/token-budget.d.ts.map +1 -0
- package/dist/context/token-budget.js +282 -0
- package/dist/context/token-budget.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +944 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +66 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +946 -0
- package/dist/install.js.map +1 -0
- package/dist/knowledge-graph/architecture.d.ts +213 -0
- package/dist/knowledge-graph/architecture.d.ts.map +1 -0
- package/dist/knowledge-graph/architecture.js +585 -0
- package/dist/knowledge-graph/architecture.js.map +1 -0
- package/dist/knowledge-graph/cypher.d.ts +113 -0
- package/dist/knowledge-graph/cypher.d.ts.map +1 -0
- package/dist/knowledge-graph/cypher.js +1051 -0
- package/dist/knowledge-graph/cypher.js.map +1 -0
- package/dist/knowledge-graph/dead-code.d.ts +121 -0
- package/dist/knowledge-graph/dead-code.d.ts.map +1 -0
- package/dist/knowledge-graph/dead-code.js +331 -0
- package/dist/knowledge-graph/dead-code.js.map +1 -0
- package/dist/knowledge-graph/flow-analyzer.d.ts +167 -0
- package/dist/knowledge-graph/flow-analyzer.d.ts.map +1 -0
- package/dist/knowledge-graph/flow-analyzer.js +739 -0
- package/dist/knowledge-graph/flow-analyzer.js.map +1 -0
- package/dist/knowledge-graph/graph.d.ts +291 -0
- package/dist/knowledge-graph/graph.d.ts.map +1 -0
- package/dist/knowledge-graph/graph.js +978 -0
- package/dist/knowledge-graph/graph.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +17 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +14 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/indexer.d.ts +112 -0
- package/dist/knowledge-graph/indexer.d.ts.map +1 -0
- package/dist/knowledge-graph/indexer.js +506 -0
- package/dist/knowledge-graph/indexer.js.map +1 -0
- package/dist/knowledge-graph/pagerank.d.ts +141 -0
- package/dist/knowledge-graph/pagerank.d.ts.map +1 -0
- package/dist/knowledge-graph/pagerank.js +493 -0
- package/dist/knowledge-graph/pagerank.js.map +1 -0
- package/dist/knowledge-graph/parser.d.ts +55 -0
- package/dist/knowledge-graph/parser.d.ts.map +1 -0
- package/dist/knowledge-graph/parser.js +1090 -0
- package/dist/knowledge-graph/parser.js.map +1 -0
- package/dist/knowledge-graph/snapshot.d.ts +107 -0
- package/dist/knowledge-graph/snapshot.d.ts.map +1 -0
- package/dist/knowledge-graph/snapshot.js +435 -0
- package/dist/knowledge-graph/snapshot.js.map +1 -0
- package/dist/memory/decision-log.d.ts +151 -0
- package/dist/memory/decision-log.d.ts.map +1 -0
- package/dist/memory/decision-log.js +482 -0
- package/dist/memory/decision-log.js.map +1 -0
- package/dist/memory/persistent-memory.d.ts +182 -0
- package/dist/memory/persistent-memory.d.ts.map +1 -0
- package/dist/memory/persistent-memory.js +579 -0
- package/dist/memory/persistent-memory.js.map +1 -0
- package/dist/memory/session-memory.d.ts +165 -0
- package/dist/memory/session-memory.d.ts.map +1 -0
- package/dist/memory/session-memory.js +382 -0
- package/dist/memory/session-memory.js.map +1 -0
- package/dist/stress-test.d.ts +10 -0
- package/dist/stress-test.d.ts.map +1 -0
- package/dist/stress-test.js +258 -0
- package/dist/stress-test.js.map +1 -0
- package/dist/tools/advanced-tools.d.ts +32 -0
- package/dist/tools/advanced-tools.d.ts.map +1 -0
- package/dist/tools/advanced-tools.js +480 -0
- package/dist/tools/advanced-tools.js.map +1 -0
- package/dist/tools/change-tools.d.ts +76 -0
- package/dist/tools/change-tools.d.ts.map +1 -0
- package/dist/tools/change-tools.js +93 -0
- package/dist/tools/change-tools.js.map +1 -0
- package/dist/tools/context-tools.d.ts +68 -0
- package/dist/tools/context-tools.d.ts.map +1 -0
- package/dist/tools/context-tools.js +141 -0
- package/dist/tools/context-tools.js.map +1 -0
- package/dist/tools/debug-tools.d.ts +25 -0
- package/dist/tools/debug-tools.d.ts.map +1 -0
- package/dist/tools/debug-tools.js +286 -0
- package/dist/tools/debug-tools.js.map +1 -0
- package/dist/tools/evolving-tools.d.ts +23 -0
- package/dist/tools/evolving-tools.d.ts.map +1 -0
- package/dist/tools/evolving-tools.js +207 -0
- package/dist/tools/evolving-tools.js.map +1 -0
- package/dist/tools/flow-tools.d.ts +24 -0
- package/dist/tools/flow-tools.d.ts.map +1 -0
- package/dist/tools/flow-tools.js +265 -0
- package/dist/tools/flow-tools.js.map +1 -0
- package/dist/tools/graph-tools.d.ts +71 -0
- package/dist/tools/graph-tools.d.ts.map +1 -0
- package/dist/tools/graph-tools.js +165 -0
- package/dist/tools/graph-tools.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +62 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +195 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/smart-tools.d.ts +23 -0
- package/dist/tools/smart-tools.d.ts.map +1 -0
- package/dist/tools/smart-tools.js +482 -0
- package/dist/tools/smart-tools.js.map +1 -0
- package/dist/tools/snapshot-tools.d.ts +19 -0
- package/dist/tools/snapshot-tools.d.ts.map +1 -0
- package/dist/tools/snapshot-tools.js +149 -0
- package/dist/tools/snapshot-tools.js.map +1 -0
- package/dist/types.d.ts +181 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +45 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +59 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +142 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/token-counter.d.ts +51 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +181 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/install.ps1 +321 -0
- package/install.sh +345 -0
- package/package.json +94 -0
- package/setup.bat +62 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Mind Map — Advanced MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Registers advanced analysis and utility tools on the MCP server.
|
|
5
|
+
* These tools provide Cypher-like graph queries, dead code detection,
|
|
6
|
+
* architecture analysis, code snippet retrieval, text search, project
|
|
7
|
+
* listing, and health diagnostics.
|
|
8
|
+
*
|
|
9
|
+
* Each tool returns structured JSON wrapped in the standard MCP
|
|
10
|
+
* text-content envelope.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
14
|
+
import { resolve, basename } from 'node:path';
|
|
15
|
+
import { CypherEngine } from '../knowledge-graph/cypher.js';
|
|
16
|
+
import { DeadCodeDetector } from '../knowledge-graph/dead-code.js';
|
|
17
|
+
import { ArchitectureAnalyzer } from '../knowledge-graph/architecture.js';
|
|
18
|
+
/** Simple 4-chars-per-token estimator used as default. */
|
|
19
|
+
const defaultEstimator = {
|
|
20
|
+
estimate: (text) => Math.ceil(text.length / 4),
|
|
21
|
+
};
|
|
22
|
+
// ============================================================
|
|
23
|
+
// Helpers
|
|
24
|
+
// ============================================================
|
|
25
|
+
/**
|
|
26
|
+
* Wrap a ToolResult in the MCP text-content format.
|
|
27
|
+
*/
|
|
28
|
+
function mcpText(result) {
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build a successful ToolResult.
|
|
35
|
+
*/
|
|
36
|
+
function ok(data, estimator) {
|
|
37
|
+
const serialised = JSON.stringify(data);
|
|
38
|
+
const tokens = estimator.estimate(serialised);
|
|
39
|
+
return { success: true, data, tokenCount: tokens, tokensSaved: 0 };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build a successful ToolResult with estimated tokens saved vs naïve approach.
|
|
43
|
+
*/
|
|
44
|
+
function okWithSavings(data, tokensSaved, estimator) {
|
|
45
|
+
const serialised = JSON.stringify(data);
|
|
46
|
+
const tokens = estimator.estimate(serialised);
|
|
47
|
+
return { success: true, data, tokenCount: tokens, tokensSaved };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build an error ToolResult.
|
|
51
|
+
*/
|
|
52
|
+
function fail(message) {
|
|
53
|
+
return { success: false, data: null, tokenCount: 0, tokensSaved: 0, message };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Read specific lines from a file, returning the text.
|
|
57
|
+
* Lines are 1-indexed, inclusive on both ends.
|
|
58
|
+
*/
|
|
59
|
+
function readLines(filePath, startLine, endLine) {
|
|
60
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
61
|
+
const lines = content.split('\n');
|
|
62
|
+
// Clamp to valid range
|
|
63
|
+
const start = Math.max(0, startLine - 1);
|
|
64
|
+
const end = Math.min(lines.length, endLine);
|
|
65
|
+
return lines.slice(start, end);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if a file path matches a glob-like pattern (simple implementation).
|
|
69
|
+
* Supports `*` for any characters and `**` for directory traversal.
|
|
70
|
+
*/
|
|
71
|
+
function matchesGlob(filePath, pattern) {
|
|
72
|
+
// Convert glob to regex
|
|
73
|
+
const escaped = pattern
|
|
74
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
75
|
+
.replace(/\*\*/g, '§§') // Placeholder for **
|
|
76
|
+
.replace(/\*/g, '[^/\\\\]*') // * matches anything except separators
|
|
77
|
+
.replace(/§§/g, '.*') // ** matches everything
|
|
78
|
+
.replace(/\?/g, '.'); // ? matches single char
|
|
79
|
+
const regex = new RegExp(`(^|[\\\\/])${escaped}$`, 'i');
|
|
80
|
+
return regex.test(filePath);
|
|
81
|
+
}
|
|
82
|
+
// ============================================================
|
|
83
|
+
// Registration
|
|
84
|
+
// ============================================================
|
|
85
|
+
/**
|
|
86
|
+
* Register all Advanced tools on the given MCP server.
|
|
87
|
+
*
|
|
88
|
+
* @param server The MCP server instance.
|
|
89
|
+
* @param graph Direct reference to the KnowledgeGraph.
|
|
90
|
+
* @param config The MindMapConfig for project settings.
|
|
91
|
+
* @param estimator Optional token estimator (defaults to 4-char heuristic).
|
|
92
|
+
*/
|
|
93
|
+
export function registerAdvancedTools(server, graph, config, estimator = defaultEstimator) {
|
|
94
|
+
// ── mindmap_query_graph ─────────────────────────────────────
|
|
95
|
+
server.tool('mindmap_query_graph', 'Execute a Cypher-like query against the knowledge graph. ' +
|
|
96
|
+
'Supports MATCH, WHERE, RETURN clauses for nodes and relationships. ' +
|
|
97
|
+
'Example: MATCH (f:function) WHERE f.name = "handleRequest" RETURN f', {
|
|
98
|
+
query: z
|
|
99
|
+
.string()
|
|
100
|
+
.describe('Cypher-like query string'),
|
|
101
|
+
project: z
|
|
102
|
+
.string()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe('Optional project path filter to scope the query'),
|
|
105
|
+
}, async ({ query, project }) => {
|
|
106
|
+
try {
|
|
107
|
+
const engine = new CypherEngine(graph);
|
|
108
|
+
const results = engine.execute(query, project);
|
|
109
|
+
return mcpText(ok(results, estimator));
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
113
|
+
return mcpText(fail(`Query failed: ${msg}. Supported syntax: MATCH (n:type) WHERE n.prop = value RETURN n`));
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// ── mindmap_dead_code ───────────────────────────────────────
|
|
117
|
+
server.tool('mindmap_dead_code', 'Detect potentially dead (uncalled) functions and methods in the codebase. ' +
|
|
118
|
+
'Returns a list of symbols with no incoming call edges, ranked by confidence.', {
|
|
119
|
+
filePath: z
|
|
120
|
+
.string()
|
|
121
|
+
.optional()
|
|
122
|
+
.describe('Optional file path to scope detection to a single file'),
|
|
123
|
+
includeExported: z
|
|
124
|
+
.boolean()
|
|
125
|
+
.default(false)
|
|
126
|
+
.describe('Include exported symbols (they may be used externally). Default: false'),
|
|
127
|
+
}, async ({ filePath, includeExported }) => {
|
|
128
|
+
try {
|
|
129
|
+
const detector = new DeadCodeDetector(graph);
|
|
130
|
+
const results = detector.detect({ filePath, includeExported });
|
|
131
|
+
return mcpText(ok(results, estimator));
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
135
|
+
return mcpText(fail(`Dead code detection failed: ${msg}`));
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// ── mindmap_architecture ────────────────────────────────────
|
|
139
|
+
server.tool('mindmap_architecture', 'Get a comprehensive architecture overview of the project. ' +
|
|
140
|
+
'Returns detected languages, entry points, layers, routes, ' +
|
|
141
|
+
'complexity hotspots, and dependency clusters.', {
|
|
142
|
+
projectPath: z
|
|
143
|
+
.string()
|
|
144
|
+
.optional()
|
|
145
|
+
.describe('Optional project root path (defaults to configured project root)'),
|
|
146
|
+
}, async ({ projectPath }) => {
|
|
147
|
+
try {
|
|
148
|
+
const analyzer = new ArchitectureAnalyzer(graph);
|
|
149
|
+
const rootPath = projectPath ?? config.projectRoot;
|
|
150
|
+
const report = analyzer.analyze(rootPath);
|
|
151
|
+
return mcpText(ok(report, estimator));
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
155
|
+
return mcpText(fail(`Architecture analysis failed: ${msg}`));
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// ── mindmap_get_code_snippet ────────────────────────────────
|
|
159
|
+
server.tool('mindmap_get_code_snippet', 'Read the actual source code for a specific function, class, or method by name. ' +
|
|
160
|
+
'Looks up the symbol in the knowledge graph to find its file and line range, ' +
|
|
161
|
+
'then reads exactly those lines (plus 3 lines of context above and below). ' +
|
|
162
|
+
'This is much cheaper than reading an entire file.', {
|
|
163
|
+
symbolName: z
|
|
164
|
+
.string()
|
|
165
|
+
.describe('Name or qualified name of the symbol (e.g., "handleRequest" or "MyClass.myMethod")'),
|
|
166
|
+
filePath: z
|
|
167
|
+
.string()
|
|
168
|
+
.optional()
|
|
169
|
+
.describe('Optional file path to disambiguate when multiple symbols share the same name'),
|
|
170
|
+
}, async ({ symbolName, filePath }) => {
|
|
171
|
+
try {
|
|
172
|
+
// Look up matching nodes in the graph
|
|
173
|
+
const candidates = graph.getNodesByName(symbolName);
|
|
174
|
+
// Also search by qualified name if simple name yields nothing
|
|
175
|
+
let matches = candidates;
|
|
176
|
+
if (matches.length === 0) {
|
|
177
|
+
const searchResults = graph.search(symbolName, 5);
|
|
178
|
+
matches = searchResults.filter((n) => n.name === symbolName ||
|
|
179
|
+
n.qualifiedName === symbolName ||
|
|
180
|
+
n.qualifiedName.endsWith(`.${symbolName}`));
|
|
181
|
+
}
|
|
182
|
+
// Filter by file path if provided
|
|
183
|
+
if (filePath && matches.length > 1) {
|
|
184
|
+
const filtered = matches.filter((n) => n.filePath === filePath || n.filePath.endsWith(filePath));
|
|
185
|
+
if (filtered.length > 0) {
|
|
186
|
+
matches = filtered;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (matches.length === 0) {
|
|
190
|
+
return mcpText(fail(`Symbol not found: "${symbolName}"`));
|
|
191
|
+
}
|
|
192
|
+
// Use the first (best) match
|
|
193
|
+
const node = matches[0];
|
|
194
|
+
const contextLines = 3;
|
|
195
|
+
const startLine = Math.max(1, node.startLine - contextLines);
|
|
196
|
+
const endLine = node.endLine + contextLines;
|
|
197
|
+
// Resolve the file path
|
|
198
|
+
const absolutePath = resolve(config.projectRoot, node.filePath);
|
|
199
|
+
let sourceLines;
|
|
200
|
+
try {
|
|
201
|
+
sourceLines = readLines(absolutePath, startLine, endLine);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return mcpText(fail(`Could not read source file: ${node.filePath} (resolved to ${absolutePath})`));
|
|
205
|
+
}
|
|
206
|
+
const snippet = sourceLines
|
|
207
|
+
.map((line, i) => `${startLine + i}: ${line}`)
|
|
208
|
+
.join('\n');
|
|
209
|
+
// Estimate tokens saved vs reading entire file
|
|
210
|
+
let totalFileTokens = 0;
|
|
211
|
+
try {
|
|
212
|
+
const fullContent = readFileSync(absolutePath, 'utf-8');
|
|
213
|
+
totalFileTokens = estimator.estimate(fullContent);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Ignore — just can't calculate savings
|
|
217
|
+
}
|
|
218
|
+
const snippetTokens = estimator.estimate(snippet);
|
|
219
|
+
const saved = Math.max(0, totalFileTokens - snippetTokens);
|
|
220
|
+
const result = {
|
|
221
|
+
symbol: {
|
|
222
|
+
name: node.name,
|
|
223
|
+
qualifiedName: node.qualifiedName,
|
|
224
|
+
type: node.type,
|
|
225
|
+
filePath: node.filePath,
|
|
226
|
+
startLine: node.startLine,
|
|
227
|
+
endLine: node.endLine,
|
|
228
|
+
signature: node.signature,
|
|
229
|
+
docComment: node.docComment,
|
|
230
|
+
},
|
|
231
|
+
code: snippet,
|
|
232
|
+
lineRange: { start: startLine, end: startLine + sourceLines.length - 1 },
|
|
233
|
+
otherMatches: matches.length > 1
|
|
234
|
+
? matches.slice(1).map((m) => ({
|
|
235
|
+
name: m.qualifiedName,
|
|
236
|
+
filePath: m.filePath,
|
|
237
|
+
startLine: m.startLine,
|
|
238
|
+
}))
|
|
239
|
+
: undefined,
|
|
240
|
+
};
|
|
241
|
+
return mcpText(okWithSavings(result, saved, estimator));
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
245
|
+
return mcpText(fail(`Get code snippet failed: ${msg}`));
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
// ── mindmap_search_code ─────────────────────────────────────
|
|
249
|
+
server.tool('mindmap_search_code', 'Grep-like text search within indexed project files only (respects .gitignore and index scope). ' +
|
|
250
|
+
'Returns matches with file path, line number, line content, and surrounding context lines.', {
|
|
251
|
+
pattern: z
|
|
252
|
+
.string()
|
|
253
|
+
.describe('Text pattern to search for (literal string, not regex)'),
|
|
254
|
+
filePattern: z
|
|
255
|
+
.string()
|
|
256
|
+
.optional()
|
|
257
|
+
.describe('Optional glob pattern to filter files (e.g., "*.ts", "src/**/*.py")'),
|
|
258
|
+
maxResults: z
|
|
259
|
+
.number()
|
|
260
|
+
.int()
|
|
261
|
+
.min(1)
|
|
262
|
+
.max(200)
|
|
263
|
+
.default(20)
|
|
264
|
+
.describe('Maximum number of matches to return (default 20)'),
|
|
265
|
+
}, async ({ pattern, filePattern, maxResults }) => {
|
|
266
|
+
try {
|
|
267
|
+
const indexedFiles = graph.getIndexedFiles();
|
|
268
|
+
if (indexedFiles.length === 0) {
|
|
269
|
+
return mcpText(ok({ matches: [], totalFiles: 0, message: 'No files indexed yet' }, estimator));
|
|
270
|
+
}
|
|
271
|
+
// Filter by file glob pattern if provided
|
|
272
|
+
let filesToSearch = indexedFiles;
|
|
273
|
+
if (filePattern) {
|
|
274
|
+
filesToSearch = indexedFiles.filter((f) => matchesGlob(f, filePattern));
|
|
275
|
+
if (filesToSearch.length === 0) {
|
|
276
|
+
return mcpText(ok({
|
|
277
|
+
matches: [],
|
|
278
|
+
totalFiles: 0,
|
|
279
|
+
message: `No indexed files match pattern: ${filePattern}`,
|
|
280
|
+
}, estimator));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const matches = [];
|
|
284
|
+
const lowerPattern = pattern.toLowerCase();
|
|
285
|
+
let totalFilesSearched = 0;
|
|
286
|
+
for (const file of filesToSearch) {
|
|
287
|
+
if (matches.length >= maxResults)
|
|
288
|
+
break;
|
|
289
|
+
const absolutePath = resolve(config.projectRoot, file);
|
|
290
|
+
let content;
|
|
291
|
+
try {
|
|
292
|
+
content = readFileSync(absolutePath, 'utf-8');
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
continue; // File may have been deleted since indexing
|
|
296
|
+
}
|
|
297
|
+
totalFilesSearched++;
|
|
298
|
+
const lines = content.split('\n');
|
|
299
|
+
for (let i = 0; i < lines.length; i++) {
|
|
300
|
+
if (matches.length >= maxResults)
|
|
301
|
+
break;
|
|
302
|
+
if (lines[i].toLowerCase().includes(lowerPattern)) {
|
|
303
|
+
const contextBefore = lines.slice(Math.max(0, i - 2), i);
|
|
304
|
+
const contextAfter = lines.slice(i + 1, Math.min(lines.length, i + 3));
|
|
305
|
+
matches.push({
|
|
306
|
+
filePath: file,
|
|
307
|
+
line: i + 1,
|
|
308
|
+
content: lines[i],
|
|
309
|
+
context: {
|
|
310
|
+
before: contextBefore,
|
|
311
|
+
after: contextAfter,
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
const result = {
|
|
318
|
+
pattern,
|
|
319
|
+
filePattern: filePattern ?? null,
|
|
320
|
+
matches,
|
|
321
|
+
totalMatches: matches.length,
|
|
322
|
+
totalFilesSearched,
|
|
323
|
+
truncated: matches.length >= maxResults,
|
|
324
|
+
};
|
|
325
|
+
return mcpText(ok(result, estimator));
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
329
|
+
return mcpText(fail(`Code search failed: ${msg}`));
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
// ── mindmap_list_projects ───────────────────────────────────
|
|
333
|
+
server.tool('mindmap_list_projects', 'List all indexed projects with statistics: node counts, edge counts, ' +
|
|
334
|
+
'language breakdown, and last indexed time.', {}, async () => {
|
|
335
|
+
try {
|
|
336
|
+
const stats = graph.getStats();
|
|
337
|
+
const indexedFiles = graph.getIndexedFiles();
|
|
338
|
+
// Group files by top-level directory (project detection heuristic)
|
|
339
|
+
const projectMap = new Map();
|
|
340
|
+
for (const filePath of indexedFiles) {
|
|
341
|
+
// The first path component is the project directory
|
|
342
|
+
const parts = filePath.replace(/\\/g, '/').split('/');
|
|
343
|
+
const projectKey = parts.length > 1 ? parts[0] : basename(config.projectRoot);
|
|
344
|
+
if (!projectMap.has(projectKey)) {
|
|
345
|
+
projectMap.set(projectKey, {
|
|
346
|
+
files: [],
|
|
347
|
+
nodeCount: 0,
|
|
348
|
+
languages: new Set(),
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
projectMap.get(projectKey).files.push(filePath);
|
|
352
|
+
}
|
|
353
|
+
// Enrich with per-project stats
|
|
354
|
+
const projects = Array.from(projectMap.entries()).map(([name, info]) => ({
|
|
355
|
+
name,
|
|
356
|
+
path: resolve(config.projectRoot, name),
|
|
357
|
+
fileCount: info.files.length,
|
|
358
|
+
languages: Array.from(info.languages),
|
|
359
|
+
}));
|
|
360
|
+
const result = {
|
|
361
|
+
configuredRoot: config.projectRoot,
|
|
362
|
+
totalFiles: stats.totalFiles,
|
|
363
|
+
totalNodes: stats.totalNodes,
|
|
364
|
+
totalEdges: stats.totalEdges,
|
|
365
|
+
languageBreakdown: stats.languageBreakdown,
|
|
366
|
+
nodesByType: stats.nodesByType,
|
|
367
|
+
edgesByType: stats.edgesByType,
|
|
368
|
+
projects,
|
|
369
|
+
};
|
|
370
|
+
return mcpText(ok(result, estimator));
|
|
371
|
+
}
|
|
372
|
+
catch (err) {
|
|
373
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
374
|
+
return mcpText(fail(`List projects failed: ${msg}`));
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
// ── mindmap_health ──────────────────────────────────────────
|
|
378
|
+
server.tool('mindmap_health', 'Health check and diagnostics for the AI Mind Map system. ' +
|
|
379
|
+
'Returns database size, index freshness, memory count, system info, ' +
|
|
380
|
+
'and detected agent configurations.', {}, async () => {
|
|
381
|
+
try {
|
|
382
|
+
const stats = graph.getStats();
|
|
383
|
+
const indexedFiles = graph.getIndexedFiles();
|
|
384
|
+
// Database file size
|
|
385
|
+
let dbSizeBytes = 0;
|
|
386
|
+
try {
|
|
387
|
+
const dbPath = resolve(config.projectRoot, config.dbPath);
|
|
388
|
+
const stat = statSync(dbPath);
|
|
389
|
+
dbSizeBytes = stat.size;
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
// Database might be in-memory or path may differ
|
|
393
|
+
}
|
|
394
|
+
// Detect agent configurations
|
|
395
|
+
const detectedAgents = [];
|
|
396
|
+
const agentConfigFiles = [
|
|
397
|
+
'.cursorrules',
|
|
398
|
+
'.cursor/rules',
|
|
399
|
+
'CLAUDE.md',
|
|
400
|
+
'.github/copilot-instructions.md',
|
|
401
|
+
'.windsurfrules',
|
|
402
|
+
'rules.md',
|
|
403
|
+
'.clinerules',
|
|
404
|
+
'.aider.conf.yml',
|
|
405
|
+
'.continue/config.json',
|
|
406
|
+
];
|
|
407
|
+
for (const agentFile of agentConfigFiles) {
|
|
408
|
+
try {
|
|
409
|
+
const agentPath = resolve(config.projectRoot, agentFile);
|
|
410
|
+
statSync(agentPath);
|
|
411
|
+
detectedAgents.push(agentFile);
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
// File does not exist — skip
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
// Index freshness: check the most recent updatedAt across all nodes
|
|
418
|
+
let lastIndexedAt = null;
|
|
419
|
+
let oldestIndexAt = null;
|
|
420
|
+
if (indexedFiles.length > 0) {
|
|
421
|
+
// We query the nodes table directly for timestamps
|
|
422
|
+
const fileNodes = graph.getNodesByType('file');
|
|
423
|
+
if (fileNodes.length > 0) {
|
|
424
|
+
lastIndexedAt = Math.max(...fileNodes.map((n) => n.updatedAt));
|
|
425
|
+
oldestIndexAt = Math.min(...fileNodes.map((n) => n.updatedAt));
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
const now = Date.now();
|
|
429
|
+
const indexAgeMs = lastIndexedAt ? now - lastIndexedAt : null;
|
|
430
|
+
const result = {
|
|
431
|
+
status: 'ok',
|
|
432
|
+
database: {
|
|
433
|
+
path: config.dbPath,
|
|
434
|
+
sizeBytes: dbSizeBytes,
|
|
435
|
+
sizeMB: Number((dbSizeBytes / (1024 * 1024)).toFixed(2)),
|
|
436
|
+
},
|
|
437
|
+
index: {
|
|
438
|
+
totalFiles: stats.totalFiles,
|
|
439
|
+
totalNodes: stats.totalNodes,
|
|
440
|
+
totalEdges: stats.totalEdges,
|
|
441
|
+
lastIndexedAt: lastIndexedAt
|
|
442
|
+
? new Date(lastIndexedAt).toISOString()
|
|
443
|
+
: null,
|
|
444
|
+
oldestIndexAt: oldestIndexAt
|
|
445
|
+
? new Date(oldestIndexAt).toISOString()
|
|
446
|
+
: null,
|
|
447
|
+
indexAgeSeconds: indexAgeMs !== null ? Math.round(indexAgeMs / 1000) : null,
|
|
448
|
+
isFresh: indexAgeMs !== null ? indexAgeMs < 3600_000 : false, // < 1 hour
|
|
449
|
+
},
|
|
450
|
+
graph: {
|
|
451
|
+
nodesByType: stats.nodesByType,
|
|
452
|
+
edgesByType: stats.edgesByType,
|
|
453
|
+
languageBreakdown: stats.languageBreakdown,
|
|
454
|
+
},
|
|
455
|
+
config: {
|
|
456
|
+
projectRoot: config.projectRoot,
|
|
457
|
+
watchEnabled: config.watchEnabled,
|
|
458
|
+
compression: config.compression,
|
|
459
|
+
maxFileSize: config.maxFileSize,
|
|
460
|
+
pageRankEnabled: config.pageRankEnabled,
|
|
461
|
+
tokenBudgets: config.tokenBudgets,
|
|
462
|
+
},
|
|
463
|
+
detectedAgents,
|
|
464
|
+
system: {
|
|
465
|
+
nodeVersion: process.version,
|
|
466
|
+
platform: process.platform,
|
|
467
|
+
arch: process.arch,
|
|
468
|
+
uptime: Math.round(process.uptime()),
|
|
469
|
+
memoryUsageMB: Number((process.memoryUsage().heapUsed / (1024 * 1024)).toFixed(2)),
|
|
470
|
+
},
|
|
471
|
+
};
|
|
472
|
+
return mcpText(ok(result, estimator));
|
|
473
|
+
}
|
|
474
|
+
catch (err) {
|
|
475
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
476
|
+
return mcpText(fail(`Health check failed: ${msg}`));
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=advanced-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-tools.js","sourceRoot":"","sources":["../../src/tools/advanced-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Mind Map — Change Tracking MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Registers all change-tracking-related tools on the MCP server.
|
|
5
|
+
* Each tool returns structured JSON wrapped in the standard MCP
|
|
6
|
+
* text-content envelope.
|
|
7
|
+
*/
|
|
8
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
|
+
import type { FileChange, ChangeSession, GraphNode } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Minimal interface expected of the Change Tracker subsystem.
|
|
12
|
+
*/
|
|
13
|
+
export interface IChangeTracker {
|
|
14
|
+
/**
|
|
15
|
+
* Get a summary of changes since a given time reference.
|
|
16
|
+
*
|
|
17
|
+
* Accepted values for `since`:
|
|
18
|
+
* - 'last_session' — changes since the last AI session ended
|
|
19
|
+
* - 'today' — changes since midnight local time
|
|
20
|
+
* - 'this_week' — changes in the current calendar week
|
|
21
|
+
* - ISO-8601 string — exact timestamp
|
|
22
|
+
*/
|
|
23
|
+
getChanges(since: string): {
|
|
24
|
+
since: string;
|
|
25
|
+
resolvedTimestamp: number;
|
|
26
|
+
changes: FileChange[];
|
|
27
|
+
totalFilesChanged: number;
|
|
28
|
+
totalLinesAdded: number;
|
|
29
|
+
totalLinesRemoved: number;
|
|
30
|
+
summary: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Get a diff summary compared with the last recorded AI session.
|
|
34
|
+
*/
|
|
35
|
+
getSessionDiff(): {
|
|
36
|
+
previousSession: ChangeSession | null;
|
|
37
|
+
changes: FileChange[];
|
|
38
|
+
affectedSymbols: string[];
|
|
39
|
+
summary: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Analyse the blast radius of changes to a file or symbol.
|
|
43
|
+
* At least one of `filePath` or `symbolName` must be provided.
|
|
44
|
+
*/
|
|
45
|
+
analyseImpact(params: {
|
|
46
|
+
filePath?: string;
|
|
47
|
+
symbolName?: string;
|
|
48
|
+
}): {
|
|
49
|
+
target: string;
|
|
50
|
+
directlyAffected: {
|
|
51
|
+
node: GraphNode;
|
|
52
|
+
relationship: string;
|
|
53
|
+
}[];
|
|
54
|
+
transitivelyAffected: {
|
|
55
|
+
node: GraphNode;
|
|
56
|
+
depth: number;
|
|
57
|
+
}[];
|
|
58
|
+
riskLevel: 'low' | 'medium' | 'high';
|
|
59
|
+
summary: string;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Minimal interface for estimating token counts.
|
|
64
|
+
*/
|
|
65
|
+
export interface ITokenEstimator {
|
|
66
|
+
estimate(text: string): number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Register all Change Tracking tools on the given MCP server.
|
|
70
|
+
*
|
|
71
|
+
* @param server The MCP server instance.
|
|
72
|
+
* @param tracker Concrete change-tracker implementation.
|
|
73
|
+
* @param estimator Optional token estimator.
|
|
74
|
+
*/
|
|
75
|
+
export declare function registerChangeTools(server: McpServer, tracker: IChangeTracker, estimator?: ITokenEstimator): void;
|
|
76
|
+
//# sourceMappingURL=change-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-tools.d.ts","sourceRoot":"","sources":["../../src/tools/change-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,SAAS,EAEV,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;OAEG;IACH,cAAc,IAAI;QAChB,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC;QACtC,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG;QACF,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,EAAE;YAAE,IAAI,EAAE,SAAS,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC9D,oBAAoB,EAAE;YAAE,IAAI,EAAE,SAAS,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC3D,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACrC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AA8BD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,EACvB,SAAS,GAAE,eAAkC,GAC5C,IAAI,CAwEN"}
|