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,499 +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
- import * as fs from "node:fs";
11
- import * as path from "node:path";
12
- import { IgnoreManager } from "../utils/ignoreManager.js";
13
- import { replaceSymbol, insertCode, renameInFile, renameReferencesInFile, removeSymbolFromFile, WRITABLE_EXTENSIONS, } from "../ast/writers/symbolWriter.js";
14
- import { generateDiff, generateMultiFileDiff } from "../utils/diffEngine.js";
15
- import { createBackup, restoreBackup } from "../utils/backupManager.js";
16
- import { extractFallbackSymbols, findClosestSymbols } from "../utils/fuzzyMatch.js";
17
- import { confirmationCache } from "../utils/confirmationCache.js";
18
- import { invalidateFileCache } from "../cache/astCache.js";
19
- import { TransactionManager } from "../utils/transactionManager.js";
20
- import { validateSymbolName, } from "../utils/validation.js";
21
- import { IMPORTABLE_EXTENSIONS } from "../utils/constants.js";
22
- import { checkSymbolUsage } from "../utils/dependencyChecker.js";
23
- // ─── Handler: write_file_surgical ───────────────────────────────────
24
- export async function handleWriteFileSurgical(args) {
25
- const filePath = args.filePath;
26
- const symbolName = args.symbolName;
27
- const newContent = args.newContent;
28
- const className = args.className;
29
- const confirmationToken = args.confirmationToken;
30
- const confirm = args.confirm;
31
- if (!filePath)
32
- return errorResponse("Missing required parameter: filePath");
33
- // PHASE 2: Apply
34
- if (confirmationToken && confirm) {
35
- const pending = confirmationCache.consume(confirmationToken);
36
- if (!pending || pending.operation !== "write_file_surgical") {
37
- return errorResponse("Invalid or expired confirmation token");
38
- }
39
- const resolvedPath = pending.filePath;
40
- try {
41
- createBackup(resolvedPath);
42
- }
43
- catch (error) {
44
- return errorResponse(`Backup failed: ${error instanceof Error ? error.message : String(error)}`);
45
- }
46
- try {
47
- fs.writeFileSync(resolvedPath, pending.payload.newContentFull, "utf-8");
48
- // Post-write validation
49
- const { validateSyntax } = await import("../utils/syntaxValidator.js");
50
- const validation = await validateSyntax(resolvedPath, pending.payload.newContentFull);
51
- if (!validation.valid) {
52
- restoreBackup(resolvedPath);
53
- const diagnostics = validation.diagnostics?.join("\n") || "";
54
- return errorResponse(`Syntax error after write:\n${validation.error}${diagnostics ? "\n" + diagnostics : ""}`);
55
- }
56
- invalidateFileCache(resolvedPath);
57
- }
58
- catch (error) {
59
- restoreBackup(resolvedPath);
60
- return errorResponse(`Write failed: ${error instanceof Error ? error.message : String(error)}`);
61
- }
62
- return {
63
- content: [
64
- {
65
- type: "text",
66
- text: `// ✅ Symbol "${pending.payload.symbolName}" replaced\n// File: ${resolvedPath}\n\n${pending.payload.diff}`,
67
- },
68
- ],
69
- };
70
- }
71
- // PHASE 1: Dry-Run
72
- if (!symbolName)
73
- return errorResponse("Missing required parameter: symbolName");
74
- if (!newContent)
75
- return errorResponse("Missing required parameter: newContent");
76
- // Validate symbol name
77
- const symbolValidation = validateSymbolName(symbolName);
78
- if (!symbolValidation.valid) {
79
- return errorResponse(symbolValidation.error);
80
- }
81
- // SECURITY: Use secure validation with project boundary enforcement
82
- const { validateFilePathSecure } = await import("../utils/secureValidation.js");
83
- const validation = validateFilePathSecure(filePath);
84
- if (!validation.valid) {
85
- return errorResponse(validation.error);
86
- }
87
- const resolvedPath = validation.resolvedPath;
88
- const ext = path.extname(resolvedPath).toLowerCase();
89
- if (!WRITABLE_EXTENSIONS.has(ext)) {
90
- return errorResponse(`Unsupported file type: ${ext}`);
91
- }
92
- let content;
93
- try {
94
- content = await fs.promises.readFile(resolvedPath, "utf-8");
95
- }
96
- catch (error) {
97
- return errorResponse(`Read failed: ${error instanceof Error ? error.message : String(error)}`);
98
- }
99
- const result = replaceSymbol(resolvedPath, content, symbolName, newContent, className);
100
- if (!result.success) {
101
- const isNotFoundError = result.error && result.error.includes("not found");
102
- if (isNotFoundError) {
103
- const available = extractFallbackSymbols(content);
104
- const closest = findClosestSymbols(symbolName, available, 5);
105
- const availableFormatted = available.slice(0, 15).map(s => `${s.name} (${s.type}${s.className ? ` in ${s.className}` : ''})`);
106
- if (available.length > 15)
107
- availableFormatted.push(`...and ${available.length - 15} more`);
108
- const suggestions = [];
109
- if (className) {
110
- const inOtherClass = available.find(s => s.name === symbolName && s.className !== className);
111
- if (inOtherClass)
112
- suggestions.push(`Try className: '${inOtherClass.className}'`);
113
- }
114
- else {
115
- const needsScope = available.filter(s => s.name === symbolName && s.className);
116
- if (needsScope.length > 0)
117
- suggestions.push(`Use className: '${needsScope[0].className}'`);
118
- }
119
- if (closest.length > 0) {
120
- suggestions.push(`Similar: ${closest.map(s => s.name).join(', ')}`);
121
- }
122
- return {
123
- isError: true,
124
- content: [
125
- {
126
- type: "text",
127
- text: JSON.stringify({
128
- error: result.error,
129
- available_symbols: availableFormatted,
130
- suggestions
131
- }, null, 2),
132
- },
133
- ],
134
- };
135
- }
136
- return errorResponse(result.error || "Unknown error");
137
- }
138
- const diff = generateDiff(content, result.newContent, resolvedPath);
139
- const token = confirmationCache.add("write_file_surgical", resolvedPath, {
140
- symbolName,
141
- newContentFull: result.newContent,
142
- diff,
143
- });
144
- return {
145
- content: [
146
- {
147
- type: "text",
148
- text: `// 🔍 DRY-RUN: Review changes below\n// To apply: confirmationToken: "${token}", confirm: true\n\n${diff}`,
149
- },
150
- ],
151
- };
152
- }
153
- // ─── Handler: insert_symbol ─────────────────────────────────────────
154
- export async function handleInsertSymbol(args) {
155
- const filePath = args.filePath;
156
- const code = args.code;
157
- const anchorSymbol = args.anchorSymbol || null;
158
- const position = args.position || "after";
159
- const className = args.className;
160
- const confirmationToken = args.confirmationToken;
161
- const confirm = args.confirm;
162
- if (!filePath)
163
- return errorResponse("Missing required parameter: filePath");
164
- // PHASE 2
165
- if (confirmationToken && confirm) {
166
- const pending = confirmationCache.consume(confirmationToken);
167
- if (!pending || pending.operation !== "insert_symbol") {
168
- return errorResponse("Invalid or expired confirmation token");
169
- }
170
- const resolvedPath = pending.filePath;
171
- try {
172
- createBackup(resolvedPath);
173
- }
174
- catch (error) {
175
- return errorResponse(`Backup failed: ${error instanceof Error ? error.message : String(error)}`);
176
- }
177
- try {
178
- fs.writeFileSync(resolvedPath, pending.payload.newContentFull, "utf-8");
179
- // Post-write validation
180
- const { validateSyntax } = await import("../utils/syntaxValidator.js");
181
- const validation = await validateSyntax(resolvedPath, pending.payload.newContentFull);
182
- if (!validation.valid) {
183
- restoreBackup(resolvedPath);
184
- const diagnostics = validation.diagnostics?.join("\n") || "";
185
- return errorResponse(`Syntax error after write:\n${validation.error}${diagnostics ? "\n" + diagnostics : ""}`);
186
- }
187
- invalidateFileCache(resolvedPath);
188
- }
189
- catch (error) {
190
- restoreBackup(resolvedPath);
191
- return errorResponse(`Write failed: ${error instanceof Error ? error.message : String(error)}`);
192
- }
193
- return {
194
- content: [
195
- {
196
- type: "text",
197
- text: `// ✅ Code inserted\n// File: ${resolvedPath}\n\n${pending.payload.diff}`,
198
- },
199
- ],
200
- };
201
- }
202
- // PHASE 1
203
- if (!code)
204
- return errorResponse("Missing required parameter: code");
205
- // SECURITY: Use secure validation with project boundary enforcement
206
- const { validateFilePathSecure } = await import("../utils/secureValidation.js");
207
- const validation = validateFilePathSecure(filePath);
208
- if (!validation.valid) {
209
- return errorResponse(validation.error);
210
- }
211
- const resolvedPath = validation.resolvedPath;
212
- const ext = path.extname(resolvedPath).toLowerCase();
213
- if (!WRITABLE_EXTENSIONS.has(ext)) {
214
- return errorResponse(`Unsupported file type: ${ext}`);
215
- }
216
- let fileContent;
217
- try {
218
- fileContent = await fs.promises.readFile(resolvedPath, "utf-8");
219
- }
220
- catch (error) {
221
- return errorResponse(`Read failed: ${error instanceof Error ? error.message : String(error)}`);
222
- }
223
- const result = insertCode(resolvedPath, fileContent, code, anchorSymbol, position, className);
224
- if (!result.success) {
225
- return errorResponse(result.error || "Unknown error");
226
- }
227
- const diff = generateDiff(fileContent, result.newContent, resolvedPath);
228
- const token = confirmationCache.add("insert_symbol", resolvedPath, {
229
- newContentFull: result.newContent,
230
- diff,
231
- anchorSymbol,
232
- position
233
- });
234
- return {
235
- content: [
236
- {
237
- type: "text",
238
- text: `// 🔍 DRY-RUN: Review changes below\n// To apply: confirmationToken: "${token}", confirm: true\n\n${diff}`,
239
- },
240
- ],
241
- };
242
- }
243
- // ─── Handler: rename_symbol ─────────────────────────────────────────
244
- export async function handleRenameSymbol(args) {
245
- const filePath = args.filePath;
246
- const oldName = args.oldName;
247
- const newName = args.newName;
248
- const rootDir = args.rootDir;
249
- const confirmationToken = args.confirmationToken;
250
- const confirm = args.confirm;
251
- if (!filePath)
252
- return errorResponse("Missing required parameter: filePath");
253
- // PHASE 2
254
- if (confirmationToken && confirm) {
255
- const pending = confirmationCache.consume(confirmationToken);
256
- if (!pending || pending.operation !== "rename_symbol") {
257
- return errorResponse("Invalid or expired confirmation token");
258
- }
259
- const results = pending.payload.results;
260
- const transaction = new TransactionManager();
261
- transaction.stageMultiple(results.map((r) => ({
262
- filePath: r.filePath,
263
- newContent: r.newContent
264
- })));
265
- const commitResult = await transaction.commit();
266
- if (!commitResult.success) {
267
- return errorResponse(commitResult.error);
268
- }
269
- for (const res of results) {
270
- invalidateFileCache(res.filePath);
271
- }
272
- return {
273
- content: [{
274
- type: "text",
275
- text: `// ✅ Rename applied\n\n${pending.payload.diff}`,
276
- }],
277
- };
278
- }
279
- // PHASE 1
280
- if (!oldName)
281
- return errorResponse("Missing required parameter: oldName");
282
- if (!newName)
283
- return errorResponse("Missing required parameter: newName");
284
- // Validate symbol names
285
- const oldValidation = validateSymbolName(oldName);
286
- if (!oldValidation.valid) {
287
- return errorResponse(`Invalid oldName: ${oldValidation.error}`);
288
- }
289
- const newValidation = validateSymbolName(newName);
290
- if (!newValidation.valid) {
291
- return errorResponse(`Invalid newName: ${newValidation.error}`);
292
- }
293
- // SECURITY: Use secure validation with project boundary enforcement
294
- const { validateFilePathSecure } = await import("../utils/secureValidation.js");
295
- const validation = validateFilePathSecure(filePath);
296
- if (!validation.valid) {
297
- return errorResponse(validation.error);
298
- }
299
- const resolvedPath = validation.resolvedPath;
300
- // SECURITY: Block cross-file rename for languages without AST support
301
- const ext = path.extname(resolvedPath).toLowerCase();
302
- if (['.dart', '.py', '.pyi'].includes(ext)) {
303
- return errorResponse(`⚠️ Cross-file rename not supported for ${ext} files.\n\n` +
304
- `Reason: No AST parser available for safe refactoring across multiple files.\n` +
305
- `Risk: Regex-based rename may corrupt strings, comments, or unrelated code.\n\n` +
306
- `Recommendation: Use IDE refactoring tools:\n` +
307
- ` • Dart: VS Code with Dart extension (F2 key)\n` +
308
- ` • Python: PyCharm, VS Code with Pylance (F2 key)\n\n` +
309
- `Alternative: Use write_file_surgical to rename within a single file.`);
310
- }
311
- let sourceContent;
312
- try {
313
- sourceContent = await fs.promises.readFile(resolvedPath, "utf-8");
314
- }
315
- catch (error) {
316
- return errorResponse(`Read failed: ${error instanceof Error ? error.message : String(error)}`);
317
- }
318
- const sourceResult = renameInFile(resolvedPath, sourceContent, oldName, newName);
319
- if (!sourceResult.success) {
320
- return errorResponse(sourceResult.error || `Symbol "${oldName}" not found`);
321
- }
322
- const results = [
323
- {
324
- filePath: resolvedPath,
325
- oldContent: sourceContent,
326
- newContent: sourceResult.newContent,
327
- },
328
- ];
329
- const projectRoot = rootDir ? path.resolve(rootDir) : findProjectRoot(resolvedPath);
330
- if (projectRoot) {
331
- const ignoreManager = new IgnoreManager(projectRoot);
332
- const allFiles = await ignoreManager.walkDirectoryAsync();
333
- const { processBatched } = await import("../utils/arrayUtils.js");
334
- const dependentResults = await processBatched(allFiles.filter(f => path.resolve(f) !== resolvedPath), async (dependentFile) => {
335
- const ext = path.extname(dependentFile).toLowerCase();
336
- if (!IMPORTABLE_EXTENSIONS.has(ext))
337
- return null;
338
- let depContent;
339
- try {
340
- depContent = await fs.promises.readFile(dependentFile, "utf-8");
341
- }
342
- catch {
343
- return null;
344
- }
345
- const escaped = oldName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
346
- const regex = new RegExp(`(?<=^|[^a-zA-Z0-9_$])(${escaped})(?=[^a-zA-Z0-9_$]|$)`);
347
- if (!regex.test(depContent))
348
- return null;
349
- const depResult = renameReferencesInFile(dependentFile, depContent, oldName, newName);
350
- if (depResult.success && depResult.newContent !== depContent) {
351
- return {
352
- filePath: path.resolve(dependentFile),
353
- oldContent: depContent,
354
- newContent: depResult.newContent,
355
- };
356
- }
357
- return null;
358
- }, 50);
359
- results.push(...dependentResults.filter(r => r !== null));
360
- }
361
- const multiDiff = generateMultiFileDiff(results);
362
- const token = confirmationCache.add("rename_symbol", resolvedPath, {
363
- results,
364
- diff: multiDiff
365
- });
366
- return {
367
- content: [{
368
- type: "text",
369
- text: `// 🔍 DRY-RUN: Review changes below\n// To apply: confirmationToken: "${token}", confirm: true\n\n${multiDiff}`,
370
- }],
371
- };
372
- }
373
- // ─── Handler: remove_symbol ─────────────────────────────────────────
374
- export async function handleRemoveSymbol(args) {
375
- const filePath = args.filePath;
376
- const symbolName = args.symbolName;
377
- const className = args.className;
378
- const force = args.force || false;
379
- const confirmationToken = args.confirmationToken;
380
- const confirm = args.confirm;
381
- if (!filePath)
382
- return errorResponse("Missing required parameter: filePath");
383
- // PHASE 2
384
- if (confirmationToken && confirm) {
385
- const pending = confirmationCache.consume(confirmationToken);
386
- if (!pending || pending.operation !== "remove_symbol") {
387
- return errorResponse("Invalid or expired confirmation token");
388
- }
389
- const resolvedPath = pending.filePath;
390
- try {
391
- createBackup(resolvedPath);
392
- }
393
- catch (e) { }
394
- try {
395
- fs.writeFileSync(resolvedPath, pending.payload.newContentFull, "utf-8");
396
- // Post-write validation
397
- const { validateSyntax } = await import("../utils/syntaxValidator.js");
398
- const validation = await validateSyntax(resolvedPath, pending.payload.newContentFull);
399
- if (!validation.valid) {
400
- restoreBackup(resolvedPath);
401
- const diagnostics = validation.diagnostics?.join("\n") || "";
402
- return errorResponse(`Syntax error after write:\n${validation.error}${diagnostics ? "\n" + diagnostics : ""}`);
403
- }
404
- invalidateFileCache(resolvedPath);
405
- }
406
- catch (error) {
407
- restoreBackup(resolvedPath);
408
- return errorResponse(`Write failed: ${error instanceof Error ? error.message : String(error)}`);
409
- }
410
- return {
411
- content: [{
412
- type: "text",
413
- text: `// ✅ Symbol "${pending.payload.symbolName}" removed\n\n${pending.payload.diff}`,
414
- }],
415
- };
416
- }
417
- if (!symbolName)
418
- return errorResponse("Missing required parameter: symbolName");
419
- // Validate symbol name
420
- const symbolValidation = validateSymbolName(symbolName);
421
- if (!symbolValidation.valid) {
422
- return errorResponse(symbolValidation.error);
423
- }
424
- // SECURITY: Use secure validation with project boundary enforcement
425
- const { validateFilePathSecure } = await import("../utils/secureValidation.js");
426
- const validation = validateFilePathSecure(filePath);
427
- if (!validation.valid) {
428
- return errorResponse(validation.error);
429
- }
430
- const resolvedPath = validation.resolvedPath;
431
- let fileContent;
432
- try {
433
- fileContent = await fs.promises.readFile(resolvedPath, "utf-8");
434
- }
435
- catch (error) {
436
- return errorResponse(`Read failed: ${error instanceof Error ? error.message : String(error)}`);
437
- }
438
- // Safety check
439
- if (!force) {
440
- const projectRoot = findProjectRoot(resolvedPath);
441
- if (projectRoot) {
442
- const ignoreManager = new IgnoreManager(projectRoot);
443
- const allFiles = await ignoreManager.walkDirectoryAsync();
444
- for (const f of allFiles) {
445
- if (path.resolve(f) === resolvedPath)
446
- continue;
447
- const fExt = path.extname(f).toLowerCase();
448
- if (!IMPORTABLE_EXTENSIONS.has(fExt))
449
- continue;
450
- try {
451
- const fContent = await fs.promises.readFile(f, "utf-8");
452
- const isUsed = await checkSymbolUsage(f, fContent, symbolName);
453
- if (isUsed) {
454
- return errorResponse(`Symbol "${symbolName}" used in ${path.relative(projectRoot, f)}. Use force: true to delete.`);
455
- }
456
- }
457
- catch { }
458
- }
459
- }
460
- }
461
- const result = removeSymbolFromFile(resolvedPath, fileContent, symbolName, className);
462
- if (!result.success) {
463
- return errorResponse(result.error || "Unknown error");
464
- }
465
- const diff = generateDiff(fileContent, result.newContent, resolvedPath);
466
- const token = confirmationCache.add("remove_symbol", resolvedPath, {
467
- symbolName,
468
- newContentFull: result.newContent,
469
- diff
470
- });
471
- return {
472
- content: [{
473
- type: "text",
474
- text: `// 🔍 DRY-RUN: Review changes below\n// To apply: confirmationToken: "${token}", confirm: true\n\n${diff}`,
475
- }],
476
- };
477
- }
478
- // ─── Utility Functions ──────────────────────────────────────────────
479
- function errorResponse(message) {
480
- return {
481
- content: [{ type: "text", text: `❌ ${message}` }],
482
- isError: true,
483
- };
484
- }
485
- function findProjectRoot(filePath) {
486
- const ROOT_MARKERS = ["package.json", ".git", "pubspec.yaml"];
487
- let current = path.dirname(path.resolve(filePath));
488
- const root = path.parse(current).root;
489
- while (current !== root) {
490
- for (const marker of ROOT_MARKERS) {
491
- if (fs.existsSync(path.join(current, marker))) {
492
- return current;
493
- }
494
- }
495
- current = path.dirname(current);
496
- }
497
- return undefined;
498
- }
499
- //# sourceMappingURL=writeHandlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"writeHandlers.js","sourceRoot":"","sources":["../../../src/handlers/writeHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAEL,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAA6B;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAkB,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAoB,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAoB,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAA+B,CAAC;IAEvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAuC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8B,CAAC;IAEpD,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,sCAAsC,CAAC,CAAC;IAE5E,iBAAiB;IACjB,IAAI,iBAAiB,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,qBAAqB,EAAE,CAAC;YAC5D,OAAO,aAAa,CAAC,uCAAuC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC;YACH,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAExE,wBAAwB;YACxB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACtF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7D,OAAO,aAAa,CAAC,8BAA8B,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjH,CAAC;YAED,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,aAAa,CAAC,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gBAAgB,OAAO,CAAC,OAAO,CAAC,UAAU,wBAAwB,YAAY,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;iBAClH;aACF;SACF,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,UAAU;QAAE,OAAO,aAAa,CAAC,wCAAwC,CAAC,CAAC;IAChF,IAAI,CAAC,UAAU;QAAE,OAAO,aAAa,CAAC,wCAAwC,CAAC,CAAC;IAEhF,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,gBAAgB,CAAC,KAAM,CAAC,CAAC;IAChD,CAAC;IAED,oEAAoE;IACpE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,YAAa,CAAC;IAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAAgB,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEpG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3E,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAE7D,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9H,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE;gBAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,SAAS,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;YAE3F,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBAC7F,IAAI,YAAY;oBAAE,WAAW,CAAC,IAAI,CAAC,mBAAmB,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC/E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;oBAAE,WAAW,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,iBAAiB,EAAE,kBAAkB;4BACrC,WAAW;yBACZ,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ;iBACF;aACF,CAAC;QACN,CAAC;QACD,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEpE,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,qBAAqB,EAAE,YAAY,EAAE;QACvE,UAAU;QACV,cAAc,EAAE,MAAM,CAAC,UAAU;QACjC,IAAI;KACL,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yEAAyE,KAAK,uBAAuB,IAAI,EAAE;aAClH;SACF;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA6B;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAkB,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;IACjC,MAAM,YAAY,GAAI,IAAI,CAAC,YAAuB,IAAI,IAAI,CAAC;IAC3D,MAAM,QAAQ,GAAI,IAAI,CAAC,QAA2B,IAAI,OAAO,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,SAA+B,CAAC;IAEvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAuC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8B,CAAC;IAEpD,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,sCAAsC,CAAC,CAAC;IAE5E,UAAU;IACV,IAAI,iBAAiB,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YACtD,OAAO,aAAa,CAAC,uCAAuC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC;YACH,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAExE,wBAAwB;YACxB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACtF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7D,OAAO,aAAa,CAAC,8BAA8B,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjH,CAAC;YAED,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,aAAa,CAAC,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gCAAgC,YAAY,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;iBAChF;aACF;SACF,CAAC;IACJ,CAAC;IAED,UAAU;IACV,IAAI,CAAC,IAAI;QAAE,OAAO,aAAa,CAAC,kCAAkC,CAAC,CAAC;IAEpE,oEAAoE;IACpE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,YAAa,CAAC;IAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAAgB,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE3G,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAExE,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE;QACjE,cAAc,EAAE,MAAM,CAAC,UAAU;QACjC,IAAI;QACJ,YAAY;QACZ,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yEAAyE,KAAK,uBAAuB,IAAI,EAAE;aAClH;SACF;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA6B;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAkB,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAC;IAEnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAuC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8B,CAAC;IAEpD,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,sCAAsC,CAAC,CAAC;IAE5E,UAAU;IACV,IAAI,iBAAiB,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YACtD,OAAO,aAAa,CAAC,uCAAuC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAExC,MAAM,WAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC7C,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACjD,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CAAC,CAAC;QAEL,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,aAAa,CAAC,YAAY,CAAC,KAAM,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,0BAA0B,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;iBACvD,CAAC;SACH,CAAC;IACJ,CAAC;IAED,UAAU;IACV,IAAI,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC,qCAAqC,CAAC,CAAC;IAC1E,IAAI,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC,qCAAqC,CAAC,CAAC;IAE1E,wBAAwB;IACxB,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,oBAAoB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,oBAAoB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,oEAAoE;IACpE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,YAAa,CAAC;IAE9C,sEAAsE;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,aAAa,CAClB,0CAA0C,GAAG,aAAa;YAC1D,+EAA+E;YAC/E,gFAAgF;YAChF,8CAA8C;YAC9C,kDAAkD;YAClD,wDAAwD;YACxD,sEAAsE,CACvE,CAAC;IACJ,CAAC;IAED,IAAI,aAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC,YAAY,CAAC,KAAK,IAAI,WAAW,OAAO,aAAa,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,OAAO,GAAmE;QAC9E;YACE,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,aAAa;YACzB,UAAU,EAAE,YAAY,CAAC,UAAU;SACpC;KACF,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACpF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAE1D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClE,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAC3C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,EACtD,KAAK,EAAE,aAAa,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEjD,IAAI,UAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,yBAAyB,OAAO,uBAAuB,CAAC,CAAC;YAClF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEzC,MAAM,SAAS,GAAG,sBAAsB,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACtF,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC7D,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBACrC,UAAU,EAAE,UAAU;oBACtB,UAAU,EAAE,SAAS,CAAC,UAAU;iBACjC,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EACD,EAAE,CACH,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE;QACjE,OAAO;QACP,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yEAAyE,KAAK,uBAAuB,SAAS,EAAE;aACvH,CAAC;KACH,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA6B;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAkB,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAoB,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAA+B,CAAC;IACvD,MAAM,KAAK,GAAI,IAAI,CAAC,KAAiB,IAAI,KAAK,CAAC;IAE/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAuC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8B,CAAC;IAEpD,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,sCAAsC,CAAC,CAAC;IAE5E,UAAU;IACV,IAAI,iBAAiB,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YACtD,OAAO,aAAa,CAAC,uCAAuC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC;YAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAEhD,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAExE,wBAAwB;YACxB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACtF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7D,OAAO,aAAa,CAAC,8BAA8B,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjH,CAAC;YAED,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,aAAa,CAAC,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gBAAgB,OAAO,CAAC,OAAO,CAAC,UAAU,gBAAgB,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;iBACvF,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,aAAa,CAAC,wCAAwC,CAAC,CAAC;IAEhF,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,gBAAgB,CAAC,KAAM,CAAC,CAAC;IAChD,CAAC;IAED,oEAAoE;IACpE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,YAAa,CAAC;IAE9C,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,eAAe;IACf,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAC;YAE1D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY;oBAAE,SAAS;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAE/C,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAE/D,IAAI,MAAM,EAAE,CAAC;wBACV,OAAO,aAAa,CAAC,WAAW,UAAU,aAAa,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,8BAA8B,CAAC,CAAC;oBACvH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACtF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAExE,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE;QACjE,UAAU;QACV,cAAc,EAAE,MAAM,CAAC,UAAU;QACjC,IAAI;KACL,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yEAAyE,KAAK,uBAAuB,IAAI,EAAE;aAClH,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;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEtC,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;QACxB,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * read_file_lines — Read specific line ranges from a file
3
- *
4
- * Efficiently reads only the requested lines without loading the entire file into memory.
5
- * Supports reading by exact line range or around a pattern match.
6
- */
7
- export interface ReadFileLinesArgs {
8
- filePath: string;
9
- startLine?: number;
10
- endLine?: number;
11
- aroundPattern?: string;
12
- contextLines?: number;
13
- }
14
- export interface ReadFileLinesResult {
15
- success: boolean;
16
- content?: string;
17
- error?: string;
18
- lineRange?: {
19
- start: number;
20
- end: number;
21
- };
22
- }
23
- /**
24
- * Read specific lines from a file
25
- */
26
- export declare function readFileLines(args: ReadFileLinesArgs): ReadFileLinesResult;
@@ -1,77 +0,0 @@
1
- /**
2
- * read_file_lines — Read specific line ranges from a file
3
- *
4
- * Efficiently reads only the requested lines without loading the entire file into memory.
5
- * Supports reading by exact line range or around a pattern match.
6
- */
7
- import * as fs from "node:fs";
8
- import * as path from "node:path";
9
- /**
10
- * Read specific lines from a file
11
- */
12
- export function readFileLines(args) {
13
- const { filePath, startLine, endLine, aroundPattern, contextLines = 5 } = args;
14
- const resolvedPath = path.resolve(filePath);
15
- if (!fs.existsSync(resolvedPath)) {
16
- return {
17
- success: false,
18
- error: `File not found: ${resolvedPath}`,
19
- };
20
- }
21
- let content;
22
- try {
23
- content = fs.readFileSync(resolvedPath, "utf-8");
24
- }
25
- catch (error) {
26
- return {
27
- success: false,
28
- error: `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,
29
- };
30
- }
31
- const lines = content.split("\n");
32
- const totalLines = lines.length;
33
- // Mode 1: Exact line range
34
- if (startLine !== undefined && endLine !== undefined) {
35
- if (startLine < 1 || endLine < 1 || startLine > totalLines || endLine > totalLines) {
36
- return {
37
- success: false,
38
- error: `Invalid line range: ${startLine}-${endLine}. File has ${totalLines} lines.`,
39
- };
40
- }
41
- if (startLine > endLine) {
42
- return {
43
- success: false,
44
- error: `startLine (${startLine}) must be <= endLine (${endLine})`,
45
- };
46
- }
47
- const selectedLines = lines.slice(startLine - 1, endLine);
48
- return {
49
- success: true,
50
- content: selectedLines.join("\n"),
51
- lineRange: { start: startLine, end: endLine },
52
- };
53
- }
54
- // Mode 2: Around pattern
55
- if (aroundPattern) {
56
- const matchIndex = lines.findIndex((line) => line.includes(aroundPattern));
57
- if (matchIndex === -1) {
58
- return {
59
- success: false,
60
- error: `Pattern "${aroundPattern}" not found in file`,
61
- };
62
- }
63
- const start = Math.max(0, matchIndex - contextLines);
64
- const end = Math.min(totalLines - 1, matchIndex + contextLines);
65
- const selectedLines = lines.slice(start, end + 1);
66
- return {
67
- success: true,
68
- content: selectedLines.join("\n"),
69
- lineRange: { start: start + 1, end: end + 1 },
70
- };
71
- }
72
- return {
73
- success: false,
74
- error: "Must provide either (startLine + endLine) or aroundPattern",
75
- };
76
- }
77
- //# sourceMappingURL=readFileLines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readFileLines.js","sourceRoot":"","sources":["../../../src/tools/readFileLines.ts"],"names":[],"mappings":"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"}