mcp-code-context 2.6.0 → 3.0.4
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/CHANGELOG.md +92 -260
- package/README.md +304 -298
- package/dist/src/core/engine.d.ts +21 -0
- package/dist/src/core/engine.js +68 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/validator.d.ts +15 -0
- package/dist/src/core/validator.js +44 -0
- package/dist/src/core/validator.js.map +1 -0
- package/dist/src/index.d.ts +7 -11
- package/dist/src/index.js +182 -397
- package/dist/src/index.js.map +1 -1
- package/dist/src/operations/write.d.ts +51 -0
- package/dist/src/operations/write.js +169 -0
- package/dist/src/operations/write.js.map +1 -0
- package/dist/src/parsers/base.d.ts +28 -0
- package/dist/src/parsers/base.js +27 -0
- package/dist/src/parsers/base.js.map +1 -0
- package/dist/src/parsers/dartTreeSitter.d.ts +13 -0
- package/dist/src/parsers/dartTreeSitter.js +91 -0
- package/dist/src/parsers/dartTreeSitter.js.map +1 -0
- package/dist/src/parsers/php.d.ts +12 -0
- package/dist/src/parsers/php.js +86 -0
- package/dist/src/parsers/php.js.map +1 -0
- package/dist/src/parsers/python.d.ts +12 -0
- package/dist/src/parsers/python.js +86 -0
- package/dist/src/parsers/python.js.map +1 -0
- package/dist/src/parsers/registry.d.ts +15 -0
- package/dist/src/parsers/registry.js +70 -0
- package/dist/src/parsers/registry.js.map +1 -0
- package/dist/src/parsers/typescript.d.ts +13 -0
- package/dist/src/parsers/typescript.js +98 -0
- package/dist/src/parsers/typescript.js.map +1 -0
- package/llms.txt +246 -236
- package/mcp-code-context-3.0.2.tgz +0 -0
- package/package.json +59 -57
- package/tsconfig.tests.json +27 -0
- package/.io/RULES.md +0 -12
- package/CONTRIBUTING.md +0 -243
- package/TROUBLESHOOTING.md +0 -38
- package/dist/src/ast/dartCompressor.d.ts +0 -27
- package/dist/src/ast/dartCompressor.js +0 -859
- package/dist/src/ast/dartCompressor.js.map +0 -1
- package/dist/src/ast/phpCompressor.d.ts +0 -24
- package/dist/src/ast/phpCompressor.js +0 -634
- package/dist/src/ast/phpCompressor.js.map +0 -1
- package/dist/src/ast/semanticCompressor.d.ts +0 -22
- package/dist/src/ast/semanticCompressor.js +0 -677
- package/dist/src/ast/semanticCompressor.js.map +0 -1
- package/dist/src/ast/writers/dartWriter.d.ts +0 -37
- package/dist/src/ast/writers/dartWriter.js +0 -544
- package/dist/src/ast/writers/dartWriter.js.map +0 -1
- package/dist/src/ast/writers/phpWriter.d.ts +0 -37
- package/dist/src/ast/writers/phpWriter.js +0 -411
- package/dist/src/ast/writers/phpWriter.js.map +0 -1
- package/dist/src/ast/writers/pyWriter.d.ts +0 -37
- package/dist/src/ast/writers/pyWriter.js +0 -355
- package/dist/src/ast/writers/pyWriter.js.map +0 -1
- package/dist/src/ast/writers/safeRename.d.ts +0 -14
- package/dist/src/ast/writers/safeRename.js +0 -258
- package/dist/src/ast/writers/safeRename.js.map +0 -1
- package/dist/src/ast/writers/symbolWriter.d.ts +0 -64
- package/dist/src/ast/writers/symbolWriter.js +0 -174
- package/dist/src/ast/writers/symbolWriter.js.map +0 -1
- package/dist/src/ast/writers/tsWriter.d.ts +0 -38
- package/dist/src/ast/writers/tsWriter.js +0 -344
- package/dist/src/ast/writers/tsWriter.js.map +0 -1
- package/dist/src/cache/astCache.d.ts +0 -39
- package/dist/src/cache/astCache.js +0 -169
- package/dist/src/cache/astCache.js.map +0 -1
- package/dist/src/handlers/readHandlers.d.ts +0 -70
- package/dist/src/handlers/readHandlers.js +0 -455
- package/dist/src/handlers/readHandlers.js.map +0 -1
- package/dist/src/handlers/utilHandlers.d.ts +0 -31
- package/dist/src/handlers/utilHandlers.js +0 -69
- package/dist/src/handlers/utilHandlers.js.map +0 -1
- package/dist/src/handlers/writeHandlers.d.ts +0 -57
- package/dist/src/handlers/writeHandlers.js +0 -499
- package/dist/src/handlers/writeHandlers.js.map +0 -1
- package/dist/src/tools/readFileLines.d.ts +0 -26
- package/dist/src/tools/readFileLines.js +0 -77
- package/dist/src/tools/readFileLines.js.map +0 -1
- package/dist/src/tools/searchCodePattern.d.ts +0 -37
- package/dist/src/tools/searchCodePattern.js +0 -144
- package/dist/src/tools/searchCodePattern.js.map +0 -1
- package/dist/src/utils/arrayUtils.d.ts +0 -12
- package/dist/src/utils/arrayUtils.js +0 -27
- package/dist/src/utils/arrayUtils.js.map +0 -1
- package/dist/src/utils/backupManager.d.ts +0 -31
- package/dist/src/utils/backupManager.js +0 -124
- package/dist/src/utils/backupManager.js.map +0 -1
- package/dist/src/utils/confirmationCache.d.ts +0 -16
- package/dist/src/utils/confirmationCache.js +0 -40
- package/dist/src/utils/confirmationCache.js.map +0 -1
- package/dist/src/utils/constants.d.ts +0 -46
- package/dist/src/utils/constants.js +0 -112
- package/dist/src/utils/constants.js.map +0 -1
- package/dist/src/utils/dependencyChecker.d.ts +0 -1
- package/dist/src/utils/dependencyChecker.js +0 -55
- package/dist/src/utils/dependencyChecker.js.map +0 -1
- package/dist/src/utils/diffEngine.d.ts +0 -21
- package/dist/src/utils/diffEngine.js +0 -163
- package/dist/src/utils/diffEngine.js.map +0 -1
- package/dist/src/utils/fuzzyMatch.d.ts +0 -8
- package/dist/src/utils/fuzzyMatch.js +0 -70
- package/dist/src/utils/fuzzyMatch.js.map +0 -1
- package/dist/src/utils/ignoreManager.d.ts +0 -29
- package/dist/src/utils/ignoreManager.js +0 -144
- package/dist/src/utils/ignoreManager.js.map +0 -1
- package/dist/src/utils/normalization.d.ts +0 -49
- package/dist/src/utils/normalization.js +0 -173
- package/dist/src/utils/normalization.js.map +0 -1
- package/dist/src/utils/projectRoot.d.ts +0 -17
- package/dist/src/utils/projectRoot.js +0 -42
- package/dist/src/utils/projectRoot.js.map +0 -1
- package/dist/src/utils/secureValidation.d.ts +0 -15
- package/dist/src/utils/secureValidation.js +0 -41
- package/dist/src/utils/secureValidation.js.map +0 -1
- package/dist/src/utils/syntaxValidator.d.ts +0 -15
- package/dist/src/utils/syntaxValidator.js +0 -218
- package/dist/src/utils/syntaxValidator.js.map +0 -1
- package/dist/src/utils/transactionManager.d.ts +0 -46
- package/dist/src/utils/transactionManager.js +0 -123
- package/dist/src/utils/transactionManager.js.map +0 -1
- package/dist/src/utils/validation.d.ts +0 -87
- package/dist/src/utils/validation.js +0 -231
- package/dist/src/utils/validation.js.map +0 -1
- package/docs/ARCHITECTURE.md +0 -300
- package/docs/architecture/ADR-001-modular-handlers.md +0 -119
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* readHandlers.ts — Read Tool Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles all read-only operations:
|
|
5
|
-
* - get_semantic_repo_map
|
|
6
|
-
* - read_file_surgical
|
|
7
|
-
* - analyze_impact
|
|
8
|
-
* - read_file_lines
|
|
9
|
-
* - search_code_pattern
|
|
10
|
-
*/
|
|
11
|
-
import * as fs from "node:fs";
|
|
12
|
-
import * as path from "node:path";
|
|
13
|
-
import { IgnoreManager } from "../utils/ignoreManager.js";
|
|
14
|
-
import { compressFile, extractSymbol } from "../ast/semanticCompressor.js";
|
|
15
|
-
import { extractFallbackSymbols, findClosestSymbols } from "../utils/fuzzyMatch.js";
|
|
16
|
-
import { readFileLines } from "../tools/readFileLines.js";
|
|
17
|
-
import { searchCodePattern } from "../tools/searchCodePattern.js";
|
|
18
|
-
import { compressionCache, symbolCache, getSymbolCacheKey } from "../cache/astCache.js";
|
|
19
|
-
import { validateFilePath, validateDirectoryPath, validateFileSize, validateFileContent, } from "../utils/validation.js";
|
|
20
|
-
import { SOURCE_EXTENSIONS, IMPORTABLE_EXTENSIONS, MAX_FILES_FOR_REPO_MAP, } from "../utils/constants.js";
|
|
21
|
-
// ─── Handler: get_semantic_repo_map ─────────────────────────────────
|
|
22
|
-
export async function handleGetSemanticRepoMap(args, signal) {
|
|
23
|
-
const directoryPath = args.directoryPath;
|
|
24
|
-
const format = args.format || "xml";
|
|
25
|
-
if (!directoryPath) {
|
|
26
|
-
return errorResponse("Missing required parameter: directoryPath");
|
|
27
|
-
}
|
|
28
|
-
const validation = validateDirectoryPath(directoryPath);
|
|
29
|
-
if (!validation.valid) {
|
|
30
|
-
return errorResponse(validation.error);
|
|
31
|
-
}
|
|
32
|
-
const resolvedPath = validation.normalizedPath;
|
|
33
|
-
const ignoreManager = new IgnoreManager(resolvedPath);
|
|
34
|
-
const controller = new AbortController();
|
|
35
|
-
const timeout = setTimeout(() => controller.abort(), 60000);
|
|
36
|
-
try {
|
|
37
|
-
if (signal?.aborted)
|
|
38
|
-
throw new Error("Operation cancelled");
|
|
39
|
-
const files = await ignoreManager.walkDirectoryAsync(resolvedPath, controller.signal);
|
|
40
|
-
// CRITICAL: Limit files to prevent timeout
|
|
41
|
-
if (files.length > MAX_FILES_FOR_REPO_MAP) {
|
|
42
|
-
return errorResponse(`Repository too large (${files.length} files). ` +
|
|
43
|
-
`get_semantic_repo_map supports up to ${MAX_FILES_FOR_REPO_MAP} files. ` +
|
|
44
|
-
`Use a more specific directory path or increase MAX_FILES_FOR_REPO_MAP.`);
|
|
45
|
-
}
|
|
46
|
-
const projectName = path.basename(resolvedPath);
|
|
47
|
-
const entries = [];
|
|
48
|
-
let skippedCount = 0;
|
|
49
|
-
// Process files in batches to avoid blocking
|
|
50
|
-
const { processBatched } = await import("../utils/arrayUtils.js");
|
|
51
|
-
let failureCount = 0;
|
|
52
|
-
const results = await processBatched(files, async (file) => {
|
|
53
|
-
// Circuit breaker: abort if >10% failures
|
|
54
|
-
if (failureCount > files.length * 0.1) {
|
|
55
|
-
throw new Error(`Circuit breaker: ${failureCount} failures (>10% of ${files.length} files)`);
|
|
56
|
-
}
|
|
57
|
-
const ext = path.extname(file).toLowerCase();
|
|
58
|
-
if (!SOURCE_EXTENSIONS.has(ext)) {
|
|
59
|
-
return { skipped: true };
|
|
60
|
-
}
|
|
61
|
-
// Validate file size
|
|
62
|
-
const sizeValidation = validateFileSize(file);
|
|
63
|
-
if (!sizeValidation.valid) {
|
|
64
|
-
return { skipped: true };
|
|
65
|
-
}
|
|
66
|
-
let content;
|
|
67
|
-
try {
|
|
68
|
-
content = await fs.promises.readFile(file, "utf-8");
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
failureCount++;
|
|
72
|
-
return { skipped: true };
|
|
73
|
-
}
|
|
74
|
-
// Validate content
|
|
75
|
-
const contentValidation = validateFileContent(content);
|
|
76
|
-
if (!contentValidation.valid) {
|
|
77
|
-
return { skipped: true };
|
|
78
|
-
}
|
|
79
|
-
const relativePath = path.relative(resolvedPath, file).replace(/\\/g, "/");
|
|
80
|
-
const language = getLanguageName(ext);
|
|
81
|
-
// Check cache first
|
|
82
|
-
const cacheKey = file;
|
|
83
|
-
let compressed = compressionCache.get(cacheKey, file);
|
|
84
|
-
if (!compressed) {
|
|
85
|
-
compressed = compressFile(file, content);
|
|
86
|
-
compressionCache.set(cacheKey, compressed, file);
|
|
87
|
-
}
|
|
88
|
-
return { entry: { relativePath, language, compressed } };
|
|
89
|
-
}, 50);
|
|
90
|
-
for (const result of results) {
|
|
91
|
-
if ('skipped' in result) {
|
|
92
|
-
skippedCount++;
|
|
93
|
-
}
|
|
94
|
-
else if ('entry' in result) {
|
|
95
|
-
entries.push(result.entry);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const output = format === "markdown"
|
|
99
|
-
? formatAsMarkdown(projectName, resolvedPath, entries, skippedCount)
|
|
100
|
-
: formatAsXml(projectName, resolvedPath, entries, skippedCount);
|
|
101
|
-
return {
|
|
102
|
-
content: [{ type: "text", text: output }],
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
clearTimeout(timeout);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// ─── Handler: read_file_surgical ────────────────────────────────────
|
|
110
|
-
export async function handleReadFileSurgical(args) {
|
|
111
|
-
const filePath = args.filePath;
|
|
112
|
-
const symbolName = args.symbolName;
|
|
113
|
-
const className = args.className;
|
|
114
|
-
if (!filePath) {
|
|
115
|
-
return errorResponse("Missing required parameter: filePath");
|
|
116
|
-
}
|
|
117
|
-
const validation = validateFilePath(filePath);
|
|
118
|
-
if (!validation.valid) {
|
|
119
|
-
return errorResponse(validation.error);
|
|
120
|
-
}
|
|
121
|
-
const resolvedPath = validation.normalizedPath;
|
|
122
|
-
// Validate file size
|
|
123
|
-
const sizeValidation = validateFileSize(resolvedPath);
|
|
124
|
-
if (!sizeValidation.valid) {
|
|
125
|
-
return errorResponse(sizeValidation.error);
|
|
126
|
-
}
|
|
127
|
-
let content;
|
|
128
|
-
try {
|
|
129
|
-
content = await fs.promises.readFile(resolvedPath, "utf-8");
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
133
|
-
return errorResponse(`Failed to read file: ${msg}`);
|
|
134
|
-
}
|
|
135
|
-
// Validate content
|
|
136
|
-
const contentValidation = validateFileContent(content);
|
|
137
|
-
if (!contentValidation.valid) {
|
|
138
|
-
return errorResponse(contentValidation.error);
|
|
139
|
-
}
|
|
140
|
-
if (!symbolName) {
|
|
141
|
-
return {
|
|
142
|
-
content: [
|
|
143
|
-
{
|
|
144
|
-
type: "text",
|
|
145
|
-
text: `// File: ${resolvedPath}\n// Lines: ${content.split("\n").length}\n\n${content}`,
|
|
146
|
-
},
|
|
147
|
-
],
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
// Check cache
|
|
151
|
-
const cacheKey = getSymbolCacheKey(resolvedPath, symbolName, className);
|
|
152
|
-
let extracted = symbolCache.get(cacheKey, resolvedPath);
|
|
153
|
-
if (extracted === undefined) {
|
|
154
|
-
extracted = extractSymbol(content, symbolName, resolvedPath, className);
|
|
155
|
-
symbolCache.set(cacheKey, extracted, resolvedPath);
|
|
156
|
-
}
|
|
157
|
-
if (extracted === null) {
|
|
158
|
-
const available = extractFallbackSymbols(content);
|
|
159
|
-
const closest = findClosestSymbols(symbolName, available, 5);
|
|
160
|
-
const availableFormatted = available.slice(0, 15).map(s => `${s.name} (${s.type}${s.className ? ` in ${s.className}` : ''})`);
|
|
161
|
-
if (available.length > 15)
|
|
162
|
-
availableFormatted.push(`...and ${available.length - 15} more`);
|
|
163
|
-
const suggestions = [];
|
|
164
|
-
if (className) {
|
|
165
|
-
const inOtherClass = available.find(s => s.name === symbolName && s.className !== className);
|
|
166
|
-
if (inOtherClass)
|
|
167
|
-
suggestions.push(`Did you mean '${symbolName}' in class '${inOtherClass.className}'?`);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
const needsScope = available.filter(s => s.name === symbolName && s.className);
|
|
171
|
-
if (needsScope.length > 0)
|
|
172
|
-
suggestions.push(`Symbol '${symbolName}' exists in class '${needsScope[0].className}'. Use className parameter.`);
|
|
173
|
-
}
|
|
174
|
-
if (closest.length > 0) {
|
|
175
|
-
suggestions.push(`Similar: ${closest.map(s => s.name).join(', ')}`);
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
isError: true,
|
|
179
|
-
content: [
|
|
180
|
-
{
|
|
181
|
-
type: "text",
|
|
182
|
-
text: JSON.stringify({
|
|
183
|
-
error: `Symbol '${symbolName}' not found`,
|
|
184
|
-
available_symbols: availableFormatted,
|
|
185
|
-
suggestions
|
|
186
|
-
}, null, 2),
|
|
187
|
-
},
|
|
188
|
-
],
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
content: [
|
|
193
|
-
{
|
|
194
|
-
type: "text",
|
|
195
|
-
text: `// Symbol: ${symbolName}\n// File: ${resolvedPath}\n\n${extracted}`,
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
// ─── Handler: analyze_impact ────────────────────────────────────────
|
|
201
|
-
export async function handleAnalyzeImpact(args) {
|
|
202
|
-
const filePath = args.filePath;
|
|
203
|
-
let rootDir = args.rootDir;
|
|
204
|
-
if (!filePath) {
|
|
205
|
-
return errorResponse("Missing required parameter: filePath");
|
|
206
|
-
}
|
|
207
|
-
const validation = validateFilePath(filePath);
|
|
208
|
-
if (!validation.valid) {
|
|
209
|
-
return errorResponse(validation.error);
|
|
210
|
-
}
|
|
211
|
-
const resolvedPath = validation.normalizedPath;
|
|
212
|
-
if (!rootDir) {
|
|
213
|
-
rootDir = findProjectRoot(resolvedPath);
|
|
214
|
-
}
|
|
215
|
-
if (!rootDir || !fs.existsSync(rootDir)) {
|
|
216
|
-
return errorResponse(`Could not determine project root for ${resolvedPath}`);
|
|
217
|
-
}
|
|
218
|
-
rootDir = path.resolve(rootDir);
|
|
219
|
-
const ignoreManager = new IgnoreManager(rootDir);
|
|
220
|
-
const allFiles = await ignoreManager.walkDirectoryAsync();
|
|
221
|
-
const targetRelative = path.relative(rootDir, resolvedPath).replace(/\\/g, "/");
|
|
222
|
-
const importPatterns = [
|
|
223
|
-
/import\s+(?:[\s\S]*?)\s+from\s+['"]([^'"]+)['"]/gm,
|
|
224
|
-
/import\s*\(\s*['"]([^'"]+)['"]\s*\)/gm,
|
|
225
|
-
/require\s*\(\s*['"]([^'"]+)['"]\s*\)/gm,
|
|
226
|
-
/from\s+(\S+)\s+import/gm,
|
|
227
|
-
/^import\s+(\S+)/gm,
|
|
228
|
-
/^\s*use\s+([\w\\]+)/gm,
|
|
229
|
-
/(?:require_once|require|include_once|include)\s*\(?\s*['"]([^'"]+)['"]\s*\)?/gm,
|
|
230
|
-
/^\s*import\s+['"]([^'"]+)['"]\s*;/gm,
|
|
231
|
-
];
|
|
232
|
-
const dependents = [];
|
|
233
|
-
// Process files in batches
|
|
234
|
-
const { processBatched } = await import("../utils/arrayUtils.js");
|
|
235
|
-
const results = await processBatched(allFiles.filter(f => path.resolve(f) !== resolvedPath), async (file) => {
|
|
236
|
-
const ext = path.extname(file).toLowerCase();
|
|
237
|
-
if (!IMPORTABLE_EXTENSIONS.has(ext))
|
|
238
|
-
return null;
|
|
239
|
-
let content;
|
|
240
|
-
try {
|
|
241
|
-
content = await fs.promises.readFile(file, "utf-8");
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
return null;
|
|
245
|
-
}
|
|
246
|
-
let isDependent = false;
|
|
247
|
-
const matchedImports = [];
|
|
248
|
-
for (const pattern of importPatterns) {
|
|
249
|
-
const regex = new RegExp(pattern.source, pattern.flags);
|
|
250
|
-
let match;
|
|
251
|
-
while ((match = regex.exec(content)) !== null) {
|
|
252
|
-
const importPath = match[1];
|
|
253
|
-
if (resolveImportMatch(importPath, resolvedPath, file, rootDir)) {
|
|
254
|
-
matchedImports.push(match[0].trim());
|
|
255
|
-
isDependent = true;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
if (isDependent) {
|
|
260
|
-
return {
|
|
261
|
-
file: path.relative(rootDir, file).replace(/\\/g, "/"),
|
|
262
|
-
imports: [...new Set(matchedImports)],
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
return null;
|
|
266
|
-
}, 50);
|
|
267
|
-
dependents.push(...results.filter(r => r !== null));
|
|
268
|
-
const report = buildImpactReport(targetRelative, rootDir, dependents);
|
|
269
|
-
return {
|
|
270
|
-
content: [{ type: "text", text: report }],
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
// ─── Handler: read_file_lines ───────────────────────────────────────
|
|
274
|
-
export async function handleReadFileLines(args) {
|
|
275
|
-
const result = readFileLines(args);
|
|
276
|
-
if (!result.success) {
|
|
277
|
-
return errorResponse(result.error || "Unknown error reading file lines");
|
|
278
|
-
}
|
|
279
|
-
const { content, lineRange } = result;
|
|
280
|
-
const header = lineRange
|
|
281
|
-
? `// Lines ${lineRange.start}-${lineRange.end}\n// File: ${args.filePath}\n\n`
|
|
282
|
-
: `// File: ${args.filePath}\n\n`;
|
|
283
|
-
return {
|
|
284
|
-
content: [
|
|
285
|
-
{
|
|
286
|
-
type: "text",
|
|
287
|
-
text: header + content,
|
|
288
|
-
},
|
|
289
|
-
],
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
// ─── Handler: search_code_pattern ───────────────────────────────────
|
|
293
|
-
export async function handleSearchCodePattern(args) {
|
|
294
|
-
const result = await searchCodePattern(args);
|
|
295
|
-
if (!result.success) {
|
|
296
|
-
return errorResponse(result.error || "Unknown error searching code");
|
|
297
|
-
}
|
|
298
|
-
const { matches, totalMatches } = result;
|
|
299
|
-
if (!matches || matches.length === 0) {
|
|
300
|
-
return {
|
|
301
|
-
content: [
|
|
302
|
-
{
|
|
303
|
-
type: "text",
|
|
304
|
-
text: `# Search Results\n\nNo matches found for pattern: "${args.pattern}"`,
|
|
305
|
-
},
|
|
306
|
-
],
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
const lines = [
|
|
310
|
-
`# Search Results`,
|
|
311
|
-
``,
|
|
312
|
-
`**Pattern:** \`${args.pattern}\``,
|
|
313
|
-
`**Root:** \`${args.rootDir}\``,
|
|
314
|
-
`**Matches:** ${totalMatches} (showing ${matches.length})`,
|
|
315
|
-
``,
|
|
316
|
-
];
|
|
317
|
-
for (const match of matches) {
|
|
318
|
-
lines.push(`## \`${match.file}\` (line ${match.lineNumber})`);
|
|
319
|
-
lines.push(``);
|
|
320
|
-
if (match.context) {
|
|
321
|
-
lines.push("```");
|
|
322
|
-
lines.push(...match.context);
|
|
323
|
-
lines.push("```");
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
lines.push(`\`\`\`\n${match.line}\n\`\`\``);
|
|
327
|
-
}
|
|
328
|
-
lines.push(``);
|
|
329
|
-
}
|
|
330
|
-
return {
|
|
331
|
-
content: [
|
|
332
|
-
{
|
|
333
|
-
type: "text",
|
|
334
|
-
text: lines.join("\n"),
|
|
335
|
-
},
|
|
336
|
-
],
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
// ─── Utility Functions ──────────────────────────────────────────────
|
|
340
|
-
function errorResponse(message) {
|
|
341
|
-
return {
|
|
342
|
-
content: [{ type: "text", text: `❌ ${message}` }],
|
|
343
|
-
isError: true,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
function getLanguageName(ext) {
|
|
347
|
-
const map = {
|
|
348
|
-
".ts": "TypeScript", ".tsx": "TypeScript JSX", ".js": "JavaScript",
|
|
349
|
-
".jsx": "JavaScript JSX", ".py": "Python", ".php": "PHP", ".dart": "Dart",
|
|
350
|
-
};
|
|
351
|
-
return map[ext] || ext.substring(1).toUpperCase();
|
|
352
|
-
}
|
|
353
|
-
function formatAsXml(projectName, projectPath, entries, skippedCount) {
|
|
354
|
-
const lines = [
|
|
355
|
-
`<?xml version="1.0" encoding="UTF-8"?>`,
|
|
356
|
-
`<repository name="${esc(projectName)}" path="${esc(projectPath)}" files="${entries.length}" skipped="${skippedCount}">`,
|
|
357
|
-
` <file_tree>`,
|
|
358
|
-
];
|
|
359
|
-
for (const entry of entries) {
|
|
360
|
-
lines.push(` <file path="${esc(entry.relativePath)}" language="${esc(entry.language)}" />`);
|
|
361
|
-
}
|
|
362
|
-
lines.push(` </file_tree>`);
|
|
363
|
-
for (const entry of entries) {
|
|
364
|
-
lines.push(` <file path="${esc(entry.relativePath)}" language="${esc(entry.language)}">`);
|
|
365
|
-
lines.push(`<compressed>${entry.compressed}</compressed>`);
|
|
366
|
-
lines.push(` </file>`);
|
|
367
|
-
}
|
|
368
|
-
lines.push(`</repository>`);
|
|
369
|
-
return lines.join("\n");
|
|
370
|
-
}
|
|
371
|
-
function formatAsMarkdown(projectName, projectPath, entries, skippedCount) {
|
|
372
|
-
const lines = [
|
|
373
|
-
`# Repository Map: ${projectName}`,
|
|
374
|
-
``,
|
|
375
|
-
`> **Path:** \`${projectPath}\``,
|
|
376
|
-
`> **Files:** ${entries.length} | **Skipped:** ${skippedCount}`,
|
|
377
|
-
``,
|
|
378
|
-
];
|
|
379
|
-
for (const entry of entries) {
|
|
380
|
-
lines.push(`- \`${entry.relativePath}\` *(${entry.language})*`);
|
|
381
|
-
}
|
|
382
|
-
return lines.join("\n");
|
|
383
|
-
}
|
|
384
|
-
function buildImpactReport(targetRelative, rootDir, dependents) {
|
|
385
|
-
const lines = [
|
|
386
|
-
`# Impact Analysis`,
|
|
387
|
-
``,
|
|
388
|
-
`**Target:** \`${targetRelative}\``,
|
|
389
|
-
`**Dependents:** ${dependents.length}`,
|
|
390
|
-
``,
|
|
391
|
-
];
|
|
392
|
-
if (dependents.length === 0) {
|
|
393
|
-
lines.push(`No dependencies found.`);
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
for (const dep of dependents) {
|
|
397
|
-
lines.push(`### \`${dep.file}\``);
|
|
398
|
-
for (const imp of dep.imports) {
|
|
399
|
-
lines.push(`- \`${imp}\``);
|
|
400
|
-
}
|
|
401
|
-
lines.push(``);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
return lines.join("\n");
|
|
405
|
-
}
|
|
406
|
-
function esc(str) {
|
|
407
|
-
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
408
|
-
}
|
|
409
|
-
function resolveImportMatch(importPath, targetFile, sourceFile, rootDir) {
|
|
410
|
-
const normalized = importPath.replace(/\\/g, "/");
|
|
411
|
-
const targetResolved = path.resolve(targetFile);
|
|
412
|
-
const targetBaseName = path.basename(targetFile, path.extname(targetFile));
|
|
413
|
-
if (normalized.startsWith(".")) {
|
|
414
|
-
const sourceDir = path.dirname(sourceFile);
|
|
415
|
-
// Remove .js extension from import path (TypeScript ESM imports use .js for .ts files)
|
|
416
|
-
const cleanImportPath = normalized.replace(/\.js$/, "");
|
|
417
|
-
const resolved = path.resolve(sourceDir, cleanImportPath);
|
|
418
|
-
const candidates = [
|
|
419
|
-
resolved,
|
|
420
|
-
resolved + ".ts",
|
|
421
|
-
resolved + ".tsx",
|
|
422
|
-
resolved + ".js",
|
|
423
|
-
resolved + ".jsx",
|
|
424
|
-
resolved + ".mts",
|
|
425
|
-
resolved + ".mjs",
|
|
426
|
-
resolved + ".php",
|
|
427
|
-
resolved + ".dart",
|
|
428
|
-
resolved + ".py",
|
|
429
|
-
path.join(resolved, "index.ts"),
|
|
430
|
-
path.join(resolved, "index.js"),
|
|
431
|
-
path.join(resolved, "index.mjs"),
|
|
432
|
-
];
|
|
433
|
-
for (const candidate of candidates) {
|
|
434
|
-
if (path.resolve(candidate) === targetResolved) {
|
|
435
|
-
return true;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
return normalized.endsWith(targetBaseName);
|
|
440
|
-
}
|
|
441
|
-
function findProjectRoot(filePath) {
|
|
442
|
-
const ROOT_MARKERS = ["package.json", ".git", "pubspec.yaml"];
|
|
443
|
-
let current = path.dirname(path.resolve(filePath));
|
|
444
|
-
const root = path.parse(current).root;
|
|
445
|
-
while (current !== root) {
|
|
446
|
-
for (const marker of ROOT_MARKERS) {
|
|
447
|
-
if (fs.existsSync(path.join(current, marker))) {
|
|
448
|
-
return current;
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
current = path.dirname(current);
|
|
452
|
-
}
|
|
453
|
-
return undefined;
|
|
454
|
-
}
|
|
455
|
-
//# sourceMappingURL=readHandlers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readHandlers.js","sourceRoot":"","sources":["../../../src/handlers/readHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* utilHandlers.ts — Utility Tool Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles utility operations:
|
|
5
|
-
* - rollback_file
|
|
6
|
-
* - clean_backups
|
|
7
|
-
*/
|
|
8
|
-
export declare function handleRollbackFile(args: Record<string, unknown>): Promise<{
|
|
9
|
-
content: {
|
|
10
|
-
type: "text";
|
|
11
|
-
text: string;
|
|
12
|
-
}[];
|
|
13
|
-
isError: boolean;
|
|
14
|
-
} | {
|
|
15
|
-
content: {
|
|
16
|
-
type: "text";
|
|
17
|
-
text: string;
|
|
18
|
-
}[];
|
|
19
|
-
}>;
|
|
20
|
-
export declare function handleCleanBackups(args: Record<string, unknown>): Promise<{
|
|
21
|
-
content: {
|
|
22
|
-
type: "text";
|
|
23
|
-
text: string;
|
|
24
|
-
}[];
|
|
25
|
-
isError: boolean;
|
|
26
|
-
} | {
|
|
27
|
-
content: {
|
|
28
|
-
type: "text";
|
|
29
|
-
text: string;
|
|
30
|
-
}[];
|
|
31
|
-
}>;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* utilHandlers.ts — Utility Tool Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles utility operations:
|
|
5
|
-
* - rollback_file
|
|
6
|
-
* - clean_backups
|
|
7
|
-
*/
|
|
8
|
-
import * as path from "node:path";
|
|
9
|
-
import { restoreBackup, cleanAllBackups } from "../utils/backupManager.js";
|
|
10
|
-
import { validateFilePath, validateDirectoryPath } from "../utils/validation.js";
|
|
11
|
-
// ─── Handler: rollback_file ─────────────────────────────────────────
|
|
12
|
-
export async function handleRollbackFile(args) {
|
|
13
|
-
const filePath = args.filePath;
|
|
14
|
-
const steps = args.steps || 1;
|
|
15
|
-
if (!filePath)
|
|
16
|
-
return errorResponse("Missing required parameter: filePath");
|
|
17
|
-
const validation = validateFilePath(filePath);
|
|
18
|
-
if (!validation.valid) {
|
|
19
|
-
return errorResponse(validation.error);
|
|
20
|
-
}
|
|
21
|
-
const resolvedPath = validation.normalizedPath;
|
|
22
|
-
if (steps < 1 || steps > 5) {
|
|
23
|
-
return errorResponse("Steps must be between 1 and 5");
|
|
24
|
-
}
|
|
25
|
-
const success = restoreBackup(resolvedPath, steps);
|
|
26
|
-
if (!success) {
|
|
27
|
-
return errorResponse(`No backup found for step ${steps}`);
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
content: [{
|
|
31
|
-
type: "text",
|
|
32
|
-
text: `// ⏪ Rollback successful\n// Reverted ${path.basename(resolvedPath)} to ${steps} step(s) ago\n// File: ${resolvedPath}`,
|
|
33
|
-
}],
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
// ─── Handler: clean_backups ─────────────────────────────────────────
|
|
37
|
-
export async function handleCleanBackups(args) {
|
|
38
|
-
const projectRoot = args.projectRoot;
|
|
39
|
-
if (!projectRoot)
|
|
40
|
-
return errorResponse("Missing required parameter: projectRoot");
|
|
41
|
-
const validation = validateDirectoryPath(projectRoot);
|
|
42
|
-
if (!validation.valid) {
|
|
43
|
-
return errorResponse(validation.error);
|
|
44
|
-
}
|
|
45
|
-
const resolvedPath = validation.normalizedPath;
|
|
46
|
-
const success = cleanAllBackups(resolvedPath);
|
|
47
|
-
if (!success) {
|
|
48
|
-
return {
|
|
49
|
-
content: [{
|
|
50
|
-
type: "text",
|
|
51
|
-
text: `// ℹ️ No backups found\n// No .mcp-backups directory at: ${resolvedPath}`,
|
|
52
|
-
}],
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
content: [{
|
|
57
|
-
type: "text",
|
|
58
|
-
text: `// 🧹 Cleanup successful\n// Removed all backups from: ${resolvedPath}/.mcp-backups`,
|
|
59
|
-
}],
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// ─── Utility Functions ──────────────────────────────────────────────
|
|
63
|
-
function errorResponse(message) {
|
|
64
|
-
return {
|
|
65
|
-
content: [{ type: "text", text: `❌ ${message}` }],
|
|
66
|
-
isError: true,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=utilHandlers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utilHandlers.js","sourceRoot":"","sources":["../../../src/handlers/utilHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA6B;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAkB,CAAC;IACzC,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,sCAAsC,CAAC,CAAC;IAE5E,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,cAAe,CAAC;IAEhD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,+BAA+B,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yCAAyC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,0BAA0B,YAAY,EAAE;aAC/H,CAAC;KACH,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA6B;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAqB,CAAC;IAE/C,IAAI,CAAC,WAAW;QAAE,OAAO,aAAa,CAAC,yCAAyC,CAAC,CAAC;IAElF,MAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,cAAe,CAAC;IAEhD,MAAM,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4DAA4D,YAAY,EAAE;iBACjF,CAAC;SACH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,0DAA0D,YAAY,eAAe;aAC5F,CAAC;KACH,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* writeHandlers.ts — Write Tool Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles all write operations with two-phase confirmation:
|
|
5
|
-
* - write_file_surgical
|
|
6
|
-
* - insert_symbol
|
|
7
|
-
* - rename_symbol
|
|
8
|
-
* - remove_symbol
|
|
9
|
-
*/
|
|
10
|
-
export declare function handleWriteFileSurgical(args: Record<string, unknown>): Promise<{
|
|
11
|
-
content: {
|
|
12
|
-
type: "text";
|
|
13
|
-
text: string;
|
|
14
|
-
}[];
|
|
15
|
-
isError: boolean;
|
|
16
|
-
} | {
|
|
17
|
-
content: {
|
|
18
|
-
type: "text";
|
|
19
|
-
text: string;
|
|
20
|
-
}[];
|
|
21
|
-
}>;
|
|
22
|
-
export declare function handleInsertSymbol(args: Record<string, unknown>): Promise<{
|
|
23
|
-
content: {
|
|
24
|
-
type: "text";
|
|
25
|
-
text: string;
|
|
26
|
-
}[];
|
|
27
|
-
isError: boolean;
|
|
28
|
-
} | {
|
|
29
|
-
content: {
|
|
30
|
-
type: "text";
|
|
31
|
-
text: string;
|
|
32
|
-
}[];
|
|
33
|
-
}>;
|
|
34
|
-
export declare function handleRenameSymbol(args: Record<string, unknown>): Promise<{
|
|
35
|
-
content: {
|
|
36
|
-
type: "text";
|
|
37
|
-
text: string;
|
|
38
|
-
}[];
|
|
39
|
-
isError: boolean;
|
|
40
|
-
} | {
|
|
41
|
-
content: {
|
|
42
|
-
type: "text";
|
|
43
|
-
text: string;
|
|
44
|
-
}[];
|
|
45
|
-
}>;
|
|
46
|
-
export declare function handleRemoveSymbol(args: Record<string, unknown>): Promise<{
|
|
47
|
-
content: {
|
|
48
|
-
type: "text";
|
|
49
|
-
text: string;
|
|
50
|
-
}[];
|
|
51
|
-
isError: boolean;
|
|
52
|
-
} | {
|
|
53
|
-
content: {
|
|
54
|
-
type: "text";
|
|
55
|
-
text: string;
|
|
56
|
-
}[];
|
|
57
|
-
}>;
|