mcp-code-context 2.6.0 → 3.0.6

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 (128) hide show
  1. package/CHANGELOG.md +92 -260
  2. package/README.md +304 -298
  3. package/dist/src/core/engine.d.ts +21 -0
  4. package/dist/src/core/engine.js +68 -0
  5. package/dist/src/core/engine.js.map +1 -0
  6. package/dist/src/core/validator.d.ts +15 -0
  7. package/dist/src/core/validator.js +44 -0
  8. package/dist/src/core/validator.js.map +1 -0
  9. package/dist/src/index.d.ts +7 -11
  10. package/dist/src/index.js +182 -397
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/operations/write.d.ts +51 -0
  13. package/dist/src/operations/write.js +169 -0
  14. package/dist/src/operations/write.js.map +1 -0
  15. package/dist/src/parsers/base.d.ts +28 -0
  16. package/dist/src/parsers/base.js +27 -0
  17. package/dist/src/parsers/base.js.map +1 -0
  18. package/dist/src/parsers/dartTreeSitter.d.ts +13 -0
  19. package/dist/src/parsers/dartTreeSitter.js +91 -0
  20. package/dist/src/parsers/dartTreeSitter.js.map +1 -0
  21. package/dist/src/parsers/php.d.ts +12 -0
  22. package/dist/src/parsers/php.js +86 -0
  23. package/dist/src/parsers/php.js.map +1 -0
  24. package/dist/src/parsers/python.d.ts +12 -0
  25. package/dist/src/parsers/python.js +86 -0
  26. package/dist/src/parsers/python.js.map +1 -0
  27. package/dist/src/parsers/registry.d.ts +15 -0
  28. package/dist/src/parsers/registry.js +70 -0
  29. package/dist/src/parsers/registry.js.map +1 -0
  30. package/dist/src/parsers/typescript.d.ts +13 -0
  31. package/dist/src/parsers/typescript.js +98 -0
  32. package/dist/src/parsers/typescript.js.map +1 -0
  33. package/llms.txt +246 -236
  34. package/mcp-code-context-3.0.2.tgz +0 -0
  35. package/package.json +59 -57
  36. package/tsconfig.tests.json +27 -0
  37. package/.io/RULES.md +0 -12
  38. package/CONTRIBUTING.md +0 -243
  39. package/TROUBLESHOOTING.md +0 -38
  40. package/dist/src/ast/dartCompressor.d.ts +0 -27
  41. package/dist/src/ast/dartCompressor.js +0 -859
  42. package/dist/src/ast/dartCompressor.js.map +0 -1
  43. package/dist/src/ast/phpCompressor.d.ts +0 -24
  44. package/dist/src/ast/phpCompressor.js +0 -634
  45. package/dist/src/ast/phpCompressor.js.map +0 -1
  46. package/dist/src/ast/semanticCompressor.d.ts +0 -22
  47. package/dist/src/ast/semanticCompressor.js +0 -677
  48. package/dist/src/ast/semanticCompressor.js.map +0 -1
  49. package/dist/src/ast/writers/dartWriter.d.ts +0 -37
  50. package/dist/src/ast/writers/dartWriter.js +0 -544
  51. package/dist/src/ast/writers/dartWriter.js.map +0 -1
  52. package/dist/src/ast/writers/phpWriter.d.ts +0 -37
  53. package/dist/src/ast/writers/phpWriter.js +0 -411
  54. package/dist/src/ast/writers/phpWriter.js.map +0 -1
  55. package/dist/src/ast/writers/pyWriter.d.ts +0 -37
  56. package/dist/src/ast/writers/pyWriter.js +0 -355
  57. package/dist/src/ast/writers/pyWriter.js.map +0 -1
  58. package/dist/src/ast/writers/safeRename.d.ts +0 -14
  59. package/dist/src/ast/writers/safeRename.js +0 -258
  60. package/dist/src/ast/writers/safeRename.js.map +0 -1
  61. package/dist/src/ast/writers/symbolWriter.d.ts +0 -64
  62. package/dist/src/ast/writers/symbolWriter.js +0 -174
  63. package/dist/src/ast/writers/symbolWriter.js.map +0 -1
  64. package/dist/src/ast/writers/tsWriter.d.ts +0 -38
  65. package/dist/src/ast/writers/tsWriter.js +0 -344
  66. package/dist/src/ast/writers/tsWriter.js.map +0 -1
  67. package/dist/src/cache/astCache.d.ts +0 -39
  68. package/dist/src/cache/astCache.js +0 -169
  69. package/dist/src/cache/astCache.js.map +0 -1
  70. package/dist/src/handlers/readHandlers.d.ts +0 -70
  71. package/dist/src/handlers/readHandlers.js +0 -455
  72. package/dist/src/handlers/readHandlers.js.map +0 -1
  73. package/dist/src/handlers/utilHandlers.d.ts +0 -31
  74. package/dist/src/handlers/utilHandlers.js +0 -69
  75. package/dist/src/handlers/utilHandlers.js.map +0 -1
  76. package/dist/src/handlers/writeHandlers.d.ts +0 -57
  77. package/dist/src/handlers/writeHandlers.js +0 -499
  78. package/dist/src/handlers/writeHandlers.js.map +0 -1
  79. package/dist/src/tools/readFileLines.d.ts +0 -26
  80. package/dist/src/tools/readFileLines.js +0 -77
  81. package/dist/src/tools/readFileLines.js.map +0 -1
  82. package/dist/src/tools/searchCodePattern.d.ts +0 -37
  83. package/dist/src/tools/searchCodePattern.js +0 -144
  84. package/dist/src/tools/searchCodePattern.js.map +0 -1
  85. package/dist/src/utils/arrayUtils.d.ts +0 -12
  86. package/dist/src/utils/arrayUtils.js +0 -27
  87. package/dist/src/utils/arrayUtils.js.map +0 -1
  88. package/dist/src/utils/backupManager.d.ts +0 -31
  89. package/dist/src/utils/backupManager.js +0 -124
  90. package/dist/src/utils/backupManager.js.map +0 -1
  91. package/dist/src/utils/confirmationCache.d.ts +0 -16
  92. package/dist/src/utils/confirmationCache.js +0 -40
  93. package/dist/src/utils/confirmationCache.js.map +0 -1
  94. package/dist/src/utils/constants.d.ts +0 -46
  95. package/dist/src/utils/constants.js +0 -112
  96. package/dist/src/utils/constants.js.map +0 -1
  97. package/dist/src/utils/dependencyChecker.d.ts +0 -1
  98. package/dist/src/utils/dependencyChecker.js +0 -55
  99. package/dist/src/utils/dependencyChecker.js.map +0 -1
  100. package/dist/src/utils/diffEngine.d.ts +0 -21
  101. package/dist/src/utils/diffEngine.js +0 -163
  102. package/dist/src/utils/diffEngine.js.map +0 -1
  103. package/dist/src/utils/fuzzyMatch.d.ts +0 -8
  104. package/dist/src/utils/fuzzyMatch.js +0 -70
  105. package/dist/src/utils/fuzzyMatch.js.map +0 -1
  106. package/dist/src/utils/ignoreManager.d.ts +0 -29
  107. package/dist/src/utils/ignoreManager.js +0 -144
  108. package/dist/src/utils/ignoreManager.js.map +0 -1
  109. package/dist/src/utils/normalization.d.ts +0 -49
  110. package/dist/src/utils/normalization.js +0 -173
  111. package/dist/src/utils/normalization.js.map +0 -1
  112. package/dist/src/utils/projectRoot.d.ts +0 -17
  113. package/dist/src/utils/projectRoot.js +0 -42
  114. package/dist/src/utils/projectRoot.js.map +0 -1
  115. package/dist/src/utils/secureValidation.d.ts +0 -15
  116. package/dist/src/utils/secureValidation.js +0 -41
  117. package/dist/src/utils/secureValidation.js.map +0 -1
  118. package/dist/src/utils/syntaxValidator.d.ts +0 -15
  119. package/dist/src/utils/syntaxValidator.js +0 -218
  120. package/dist/src/utils/syntaxValidator.js.map +0 -1
  121. package/dist/src/utils/transactionManager.d.ts +0 -46
  122. package/dist/src/utils/transactionManager.js +0 -123
  123. package/dist/src/utils/transactionManager.js.map +0 -1
  124. package/dist/src/utils/validation.d.ts +0 -87
  125. package/dist/src/utils/validation.js +0 -231
  126. package/dist/src/utils/validation.js.map +0 -1
  127. package/docs/ARCHITECTURE.md +0 -300
  128. 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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
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
- }>;