mcp-code-context 2.5.1 → 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.
Files changed (129) hide show
  1. package/CHANGELOG.md +92 -236
  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 -234
  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/PLAN_v2.5.0.md +0 -407
  40. package/TROUBLESHOOTING.md +0 -38
  41. package/dist/src/ast/dartCompressor.d.ts +0 -27
  42. package/dist/src/ast/dartCompressor.js +0 -859
  43. package/dist/src/ast/dartCompressor.js.map +0 -1
  44. package/dist/src/ast/phpCompressor.d.ts +0 -24
  45. package/dist/src/ast/phpCompressor.js +0 -634
  46. package/dist/src/ast/phpCompressor.js.map +0 -1
  47. package/dist/src/ast/semanticCompressor.d.ts +0 -22
  48. package/dist/src/ast/semanticCompressor.js +0 -677
  49. package/dist/src/ast/semanticCompressor.js.map +0 -1
  50. package/dist/src/ast/writers/dartWriter.d.ts +0 -37
  51. package/dist/src/ast/writers/dartWriter.js +0 -544
  52. package/dist/src/ast/writers/dartWriter.js.map +0 -1
  53. package/dist/src/ast/writers/phpWriter.d.ts +0 -37
  54. package/dist/src/ast/writers/phpWriter.js +0 -411
  55. package/dist/src/ast/writers/phpWriter.js.map +0 -1
  56. package/dist/src/ast/writers/pyWriter.d.ts +0 -37
  57. package/dist/src/ast/writers/pyWriter.js +0 -355
  58. package/dist/src/ast/writers/pyWriter.js.map +0 -1
  59. package/dist/src/ast/writers/safeRename.d.ts +0 -14
  60. package/dist/src/ast/writers/safeRename.js +0 -258
  61. package/dist/src/ast/writers/safeRename.js.map +0 -1
  62. package/dist/src/ast/writers/symbolWriter.d.ts +0 -64
  63. package/dist/src/ast/writers/symbolWriter.js +0 -174
  64. package/dist/src/ast/writers/symbolWriter.js.map +0 -1
  65. package/dist/src/ast/writers/tsWriter.d.ts +0 -38
  66. package/dist/src/ast/writers/tsWriter.js +0 -344
  67. package/dist/src/ast/writers/tsWriter.js.map +0 -1
  68. package/dist/src/cache/astCache.d.ts +0 -39
  69. package/dist/src/cache/astCache.js +0 -169
  70. package/dist/src/cache/astCache.js.map +0 -1
  71. package/dist/src/handlers/readHandlers.d.ts +0 -70
  72. package/dist/src/handlers/readHandlers.js +0 -455
  73. package/dist/src/handlers/readHandlers.js.map +0 -1
  74. package/dist/src/handlers/utilHandlers.d.ts +0 -31
  75. package/dist/src/handlers/utilHandlers.js +0 -69
  76. package/dist/src/handlers/utilHandlers.js.map +0 -1
  77. package/dist/src/handlers/writeHandlers.d.ts +0 -57
  78. package/dist/src/handlers/writeHandlers.js +0 -499
  79. package/dist/src/handlers/writeHandlers.js.map +0 -1
  80. package/dist/src/tools/readFileLines.d.ts +0 -26
  81. package/dist/src/tools/readFileLines.js +0 -77
  82. package/dist/src/tools/readFileLines.js.map +0 -1
  83. package/dist/src/tools/searchCodePattern.d.ts +0 -37
  84. package/dist/src/tools/searchCodePattern.js +0 -144
  85. package/dist/src/tools/searchCodePattern.js.map +0 -1
  86. package/dist/src/utils/arrayUtils.d.ts +0 -12
  87. package/dist/src/utils/arrayUtils.js +0 -27
  88. package/dist/src/utils/arrayUtils.js.map +0 -1
  89. package/dist/src/utils/backupManager.d.ts +0 -31
  90. package/dist/src/utils/backupManager.js +0 -124
  91. package/dist/src/utils/backupManager.js.map +0 -1
  92. package/dist/src/utils/confirmationCache.d.ts +0 -16
  93. package/dist/src/utils/confirmationCache.js +0 -40
  94. package/dist/src/utils/confirmationCache.js.map +0 -1
  95. package/dist/src/utils/constants.d.ts +0 -46
  96. package/dist/src/utils/constants.js +0 -112
  97. package/dist/src/utils/constants.js.map +0 -1
  98. package/dist/src/utils/dependencyChecker.d.ts +0 -1
  99. package/dist/src/utils/dependencyChecker.js +0 -55
  100. package/dist/src/utils/dependencyChecker.js.map +0 -1
  101. package/dist/src/utils/diffEngine.d.ts +0 -21
  102. package/dist/src/utils/diffEngine.js +0 -163
  103. package/dist/src/utils/diffEngine.js.map +0 -1
  104. package/dist/src/utils/fuzzyMatch.d.ts +0 -8
  105. package/dist/src/utils/fuzzyMatch.js +0 -69
  106. package/dist/src/utils/fuzzyMatch.js.map +0 -1
  107. package/dist/src/utils/ignoreManager.d.ts +0 -30
  108. package/dist/src/utils/ignoreManager.js +0 -186
  109. package/dist/src/utils/ignoreManager.js.map +0 -1
  110. package/dist/src/utils/normalization.d.ts +0 -49
  111. package/dist/src/utils/normalization.js +0 -173
  112. package/dist/src/utils/normalization.js.map +0 -1
  113. package/dist/src/utils/projectRoot.d.ts +0 -17
  114. package/dist/src/utils/projectRoot.js +0 -42
  115. package/dist/src/utils/projectRoot.js.map +0 -1
  116. package/dist/src/utils/secureValidation.d.ts +0 -15
  117. package/dist/src/utils/secureValidation.js +0 -41
  118. package/dist/src/utils/secureValidation.js.map +0 -1
  119. package/dist/src/utils/syntaxValidator.d.ts +0 -15
  120. package/dist/src/utils/syntaxValidator.js +0 -218
  121. package/dist/src/utils/syntaxValidator.js.map +0 -1
  122. package/dist/src/utils/transactionManager.d.ts +0 -46
  123. package/dist/src/utils/transactionManager.js +0 -123
  124. package/dist/src/utils/transactionManager.js.map +0 -1
  125. package/dist/src/utils/validation.d.ts +0 -87
  126. package/dist/src/utils/validation.js +0 -231
  127. package/dist/src/utils/validation.js.map +0 -1
  128. package/docs/ARCHITECTURE.md +0 -300
  129. 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
- }>;