erosolar-cli 1.7.155 → 1.7.157

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 (90) hide show
  1. package/README.md +7 -17
  2. package/agents/erosolar-code.rules.json +1 -111
  3. package/agents/general.rules.json +0 -6
  4. package/dist/bin/erosolar.js +0 -22
  5. package/dist/bin/erosolar.js.map +1 -1
  6. package/dist/bin/selfTest.js +2 -190
  7. package/dist/bin/selfTest.js.map +1 -1
  8. package/dist/core/agent.d.ts +0 -12
  9. package/dist/core/agent.d.ts.map +1 -1
  10. package/dist/core/agent.js +12 -75
  11. package/dist/core/agent.js.map +1 -1
  12. package/dist/core/contextManager.d.ts +1 -2
  13. package/dist/core/contextManager.d.ts.map +1 -1
  14. package/dist/core/contextManager.js +2 -11
  15. package/dist/core/contextManager.js.map +1 -1
  16. package/dist/core/multilinePasteHandler.d.ts +4 -8
  17. package/dist/core/multilinePasteHandler.d.ts.map +1 -1
  18. package/dist/core/multilinePasteHandler.js +17 -67
  19. package/dist/core/multilinePasteHandler.js.map +1 -1
  20. package/dist/core/preferences.js +2 -8
  21. package/dist/core/preferences.js.map +1 -1
  22. package/dist/core/resultVerification.d.ts +1 -1
  23. package/dist/core/resultVerification.d.ts.map +1 -1
  24. package/dist/core/resultVerification.js +10 -11
  25. package/dist/core/resultVerification.js.map +1 -1
  26. package/dist/core/schemaValidator.d.ts.map +1 -1
  27. package/dist/core/schemaValidator.js +1 -36
  28. package/dist/core/schemaValidator.js.map +1 -1
  29. package/dist/core/toolRuntime.d.ts +0 -61
  30. package/dist/core/toolRuntime.d.ts.map +1 -1
  31. package/dist/core/toolRuntime.js +1 -303
  32. package/dist/core/toolRuntime.js.map +1 -1
  33. package/dist/core/unified/schema.d.ts.map +1 -1
  34. package/dist/core/unified/schema.js +1 -34
  35. package/dist/core/unified/schema.js.map +1 -1
  36. package/dist/headless/headlessApp.d.ts.map +1 -1
  37. package/dist/headless/headlessApp.js +0 -3
  38. package/dist/headless/headlessApp.js.map +1 -1
  39. package/dist/providers/anthropicProvider.d.ts.map +1 -1
  40. package/dist/providers/anthropicProvider.js +1 -4
  41. package/dist/providers/anthropicProvider.js.map +1 -1
  42. package/dist/shell/bracketedPasteManager.d.ts.map +1 -1
  43. package/dist/shell/bracketedPasteManager.js +3 -5
  44. package/dist/shell/bracketedPasteManager.js.map +1 -1
  45. package/dist/shell/composableMessage.js +2 -2
  46. package/dist/shell/composableMessage.js.map +1 -1
  47. package/dist/shell/interactiveShell.d.ts +1 -6
  48. package/dist/shell/interactiveShell.d.ts.map +1 -1
  49. package/dist/shell/interactiveShell.js +95 -421
  50. package/dist/shell/interactiveShell.js.map +1 -1
  51. package/dist/shell/shellApp.d.ts.map +1 -1
  52. package/dist/shell/shellApp.js +0 -7
  53. package/dist/shell/shellApp.js.map +1 -1
  54. package/dist/shell/systemPrompt.js +5 -5
  55. package/dist/shell/systemPrompt.js.map +1 -1
  56. package/dist/tools/bashTools.d.ts +0 -8
  57. package/dist/tools/bashTools.d.ts.map +1 -1
  58. package/dist/tools/bashTools.js +5 -80
  59. package/dist/tools/bashTools.js.map +1 -1
  60. package/dist/tools/diffUtils.d.ts.map +1 -1
  61. package/dist/tools/diffUtils.js +8 -12
  62. package/dist/tools/diffUtils.js.map +1 -1
  63. package/dist/tools/editTools.d.ts.map +1 -1
  64. package/dist/tools/editTools.js +36 -386
  65. package/dist/tools/editTools.js.map +1 -1
  66. package/dist/tools/fileTools.d.ts.map +1 -1
  67. package/dist/tools/fileTools.js +130 -25
  68. package/dist/tools/fileTools.js.map +1 -1
  69. package/dist/ui/ShellUIAdapter.d.ts +0 -5
  70. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  71. package/dist/ui/ShellUIAdapter.js +0 -21
  72. package/dist/ui/ShellUIAdapter.js.map +1 -1
  73. package/dist/ui/persistentPrompt.d.ts +10 -83
  74. package/dist/ui/persistentPrompt.d.ts.map +1 -1
  75. package/dist/ui/persistentPrompt.js +119 -521
  76. package/dist/ui/persistentPrompt.js.map +1 -1
  77. package/dist/ui/richText.js +4 -4
  78. package/dist/ui/richText.js.map +1 -1
  79. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  80. package/dist/ui/shortcutsHelp.js +13 -31
  81. package/dist/ui/shortcutsHelp.js.map +1 -1
  82. package/package.json +1 -4
  83. package/dist/ui/EnhancedPinnedChatBox.d.ts +0 -93
  84. package/dist/ui/EnhancedPinnedChatBox.d.ts.map +0 -1
  85. package/dist/ui/EnhancedPinnedChatBox.js +0 -309
  86. package/dist/ui/EnhancedPinnedChatBox.js.map +0 -1
  87. package/dist/ui/PinnedChatBoxEnhancer.d.ts +0 -88
  88. package/dist/ui/PinnedChatBoxEnhancer.d.ts.map +0 -1
  89. package/dist/ui/PinnedChatBoxEnhancer.js +0 -205
  90. package/dist/ui/PinnedChatBoxEnhancer.js.map +0 -1
@@ -1,194 +1,7 @@
1
- import { readFile, writeFile, stat, mkdir, copyFile } from 'node:fs/promises';
2
- import { join, relative, dirname, basename } from 'node:path';
1
+ import { readFile, writeFile, stat } from 'node:fs/promises';
2
+ import { join, relative } from 'node:path';
3
3
  import { buildError } from '../core/errors.js';
4
4
  import { buildDiffSegmentsFast, formatDiffLines } from './diffUtils.js';
5
- import { theme } from '../ui/theme.js';
6
- /**
7
- * Safety thresholds for edit operations.
8
- * These prevent accidental destructive edits from corrupting files.
9
- *
10
- * The guards protect against:
11
- * 1. Accidental mass deletions (old_string too large)
12
- * 2. Insertion edits gone wrong (old_string contains extra content)
13
- * 3. Disproportionate changes (removing many lines to add few)
14
- */
15
- const EDIT_SAFETY = {
16
- /** Max lines that can be removed in a single edit without warning */
17
- MAX_REMOVED_LINES_WARN: 50,
18
- /** Max percentage of file that can be removed in a single edit */
19
- MAX_REMOVAL_PERCENTAGE: 30,
20
- /** Create backup if removing more than this many lines */
21
- BACKUP_THRESHOLD_LINES: 20,
22
- /** Reject edits where old_string is more than this many times larger than new_string (chars) */
23
- MAX_SIZE_RATIO: 10,
24
- /** Minimum old_string size (chars) to trigger size ratio check */
25
- SIZE_RATIO_MIN_CHARS: 300,
26
- /** Reject edits where old_string has more than this many times more lines than new_string */
27
- MAX_LINE_RATIO: 5,
28
- /** Minimum old_string lines to trigger line ratio check */
29
- LINE_RATIO_MIN_LINES: 10,
30
- /** Absolute max lines that can be removed in a single edit (requires explicit confirmation) */
31
- ABSOLUTE_MAX_REMOVED_LINES: 100,
32
- /** Reject if old_string contains new_string AND old_string is much larger (botched insertion) */
33
- INSERTION_OVERHEAD_RATIO: 3,
34
- };
35
- /**
36
- * Create a backup of a file before potentially destructive edit.
37
- * Backups are stored in .erosolar/backups/ with timestamp.
38
- */
39
- async function createEditBackup(workingDir, filePath) {
40
- try {
41
- const backupDir = join(workingDir, '.erosolar', 'backups');
42
- await mkdir(backupDir, { recursive: true });
43
- const fileName = basename(filePath);
44
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
45
- const backupPath = join(backupDir, `${fileName}.${timestamp}.bak`);
46
- await copyFile(filePath, backupPath);
47
- return backupPath;
48
- }
49
- catch {
50
- return null;
51
- }
52
- }
53
- /**
54
- * Validate edit safety - check if the edit is potentially destructive.
55
- * Returns rejection message if edit should be blocked, warning if concerning, null if safe.
56
- *
57
- * This function implements multiple safety checks to prevent catastrophic edits:
58
- * 1. Character size ratio check (old_string vs new_string chars)
59
- * 2. Line count ratio check (old_string vs new_string lines)
60
- * 3. Absolute line removal limit
61
- * 4. Botched insertion detection (old_string contains new_string but is much larger)
62
- * 5. File percentage removal check
63
- */
64
- function validateEditSafety(oldString, newString, totalFileLines, filePath) {
65
- const oldLines = oldString.split('\n').length;
66
- const newLines = newString.split('\n').length;
67
- const removedLines = Math.max(0, oldLines - newLines);
68
- const removalPercentage = totalFileLines > 0 ? (removedLines / totalFileLines) * 100 : 0;
69
- let warning = null;
70
- let shouldBackup = false;
71
- // Check 1: Absolute line removal limit
72
- // Removing more than 100 lines in a single edit is almost always wrong
73
- if (removedLines > EDIT_SAFETY.ABSOLUTE_MAX_REMOVED_LINES) {
74
- const rejection = [
75
- `🛑 EDIT REJECTED: Too many lines removed`,
76
- ``,
77
- `old_string: ${oldLines} lines`,
78
- `new_string: ${newLines} lines`,
79
- `Lines removed: ${removedLines} (max allowed in single edit: ${EDIT_SAFETY.ABSOLUTE_MAX_REMOVED_LINES})`,
80
- ``,
81
- `This edit would delete ${removedLines} lines (${removalPercentage.toFixed(1)}% of file).`,
82
- `Such large deletions are almost always errors.`,
83
- ``,
84
- `To fix:`,
85
- `1. Use a smaller, more targeted old_string with just the lines you want to change`,
86
- `2. If you truly need to delete many lines, do it in smaller batches`,
87
- `3. Re-read the file to ensure you have the current content`,
88
- ``,
89
- `File: ${filePath}`,
90
- ].join('\n');
91
- return { rejection, warning: null, shouldBackup: true };
92
- }
93
- // Check 2: Character size ratio (old_string suspiciously larger than new_string)
94
- // This catches cases where the LLM accidentally included too much content
95
- if (oldString.length > EDIT_SAFETY.SIZE_RATIO_MIN_CHARS) {
96
- const sizeRatio = oldString.length / Math.max(1, newString.length);
97
- if (sizeRatio > EDIT_SAFETY.MAX_SIZE_RATIO) {
98
- const rejection = [
99
- `🛑 SUSPICIOUS EDIT REJECTED: Character size mismatch`,
100
- ``,
101
- `old_string: ${oldString.length} chars (${oldLines} lines)`,
102
- `new_string: ${newString.length} chars (${newLines} lines)`,
103
- `Size ratio: ${sizeRatio.toFixed(1)}x (max allowed: ${EDIT_SAFETY.MAX_SIZE_RATIO}x)`,
104
- ``,
105
- `This usually indicates an error - old_string contains more content than intended.`,
106
- `The edit would remove ${removedLines} lines (${removalPercentage.toFixed(1)}% of file).`,
107
- ``,
108
- `To fix:`,
109
- `1. Use a smaller, more targeted old_string`,
110
- `2. Break the edit into multiple smaller changes`,
111
- `3. Only include the specific lines you want to change`,
112
- ``,
113
- `File: ${filePath}`,
114
- ].join('\n');
115
- return { rejection, warning: null, shouldBackup: true };
116
- }
117
- }
118
- // Check 3: Line count ratio (catches "many lines to few lines" edits)
119
- // Even if character counts are similar, replacing 50 lines with 5 is suspicious
120
- if (oldLines >= EDIT_SAFETY.LINE_RATIO_MIN_LINES) {
121
- const lineRatio = oldLines / Math.max(1, newLines);
122
- if (lineRatio > EDIT_SAFETY.MAX_LINE_RATIO) {
123
- const rejection = [
124
- `🛑 SUSPICIOUS EDIT REJECTED: Line count mismatch`,
125
- ``,
126
- `old_string: ${oldLines} lines`,
127
- `new_string: ${newLines} lines`,
128
- `Line ratio: ${lineRatio.toFixed(1)}x (max allowed: ${EDIT_SAFETY.MAX_LINE_RATIO}x)`,
129
- ``,
130
- `This looks like a botched edit - you're replacing ${oldLines} lines with only ${newLines} lines.`,
131
- `Such disproportionate changes usually indicate old_string is too large.`,
132
- ``,
133
- `To fix:`,
134
- `1. Use a smaller old_string containing only the lines you want to modify`,
135
- `2. If deleting content, do it in smaller, targeted edits`,
136
- `3. Check that you copied the correct lines from the file`,
137
- ``,
138
- `File: ${filePath}`,
139
- ].join('\n');
140
- return { rejection, warning: null, shouldBackup: true };
141
- }
142
- }
143
- // Check 4: Botched insertion detection
144
- // If old_string CONTAINS new_string (or vice versa) but is much larger,
145
- // this indicates a failed attempt to insert content that accidentally captured extra lines
146
- if (oldLines >= EDIT_SAFETY.LINE_RATIO_MIN_LINES && newLines >= 1) {
147
- const normalizedOld = oldString.trim();
148
- const normalizedNew = newString.trim();
149
- // Check if this looks like a botched insertion (new_string is a subset of old_string)
150
- if (normalizedOld.includes(normalizedNew) && normalizedOld.length > normalizedNew.length * EDIT_SAFETY.INSERTION_OVERHEAD_RATIO) {
151
- const rejection = [
152
- `🛑 BOTCHED INSERTION DETECTED`,
153
- ``,
154
- `old_string: ${oldLines} lines (${oldString.length} chars)`,
155
- `new_string: ${newLines} lines (${newString.length} chars)`,
156
- ``,
157
- `It looks like you tried to insert content, but old_string captured extra lines.`,
158
- `The new_string is contained within old_string, meaning you're accidentally`,
159
- `deleting ${removedLines} lines that shouldn't be touched.`,
160
- ``,
161
- `To fix:`,
162
- `1. Use a smaller old_string with just the immediate context around your insertion point`,
163
- `2. Include only 2-3 lines before/after where you want to add content`,
164
- `3. Do not include unrelated code in old_string`,
165
- ``,
166
- `File: ${filePath}`,
167
- ].join('\n');
168
- return { rejection, warning: null, shouldBackup: true };
169
- }
170
- // Check the reverse: old_string is contained in new_string but new_string has way more content
171
- // This could indicate copying the wrong thing
172
- if (normalizedNew.includes(normalizedOld) && normalizedNew.length > normalizedOld.length * EDIT_SAFETY.INSERTION_OVERHEAD_RATIO && newLines > oldLines + 50) {
173
- warning = `⚠ Large insertion: adding ${newLines - oldLines} lines. Verify this is intentional.`;
174
- shouldBackup = true;
175
- }
176
- }
177
- // Check 5: File percentage removal
178
- if (removedLines > EDIT_SAFETY.MAX_REMOVED_LINES_WARN) {
179
- warning = `⚠ Large edit: removing ${removedLines} lines (${removalPercentage.toFixed(1)}% of file)`;
180
- shouldBackup = true;
181
- }
182
- else if (removalPercentage > EDIT_SAFETY.MAX_REMOVAL_PERCENTAGE && removedLines > 10) {
183
- warning = `⚠ Large edit: removing ${removalPercentage.toFixed(1)}% of file (${removedLines} lines)`;
184
- shouldBackup = true;
185
- }
186
- // Check if should create backup
187
- if (removedLines > EDIT_SAFETY.BACKUP_THRESHOLD_LINES) {
188
- shouldBackup = true;
189
- }
190
- return { rejection: null, warning, shouldBackup };
191
- }
192
5
  /**
193
6
  * Creates the Edit tool for surgical file modifications using exact string replacement.
194
7
  *
@@ -208,7 +21,7 @@ export function createEditTools(workingDir) {
208
21
  return [
209
22
  {
210
23
  name: 'Edit',
211
- description: 'Performs exact string replacements in files. Use for surgical edits when you know the exact text to replace. The edit will FAIL if old_string is not unique unless replace_all is true. To create a NEW file, use old_string: "" (empty) and new_string with the file content.',
24
+ description: 'Performs exact string replacements in files. Use for surgical edits when you know the exact text to replace. The edit will FAIL if old_string is not unique unless replace_all is true.',
212
25
  parameters: {
213
26
  type: 'object',
214
27
  properties: {
@@ -218,7 +31,7 @@ export function createEditTools(workingDir) {
218
31
  },
219
32
  old_string: {
220
33
  type: 'string',
221
- description: 'The exact text to replace (must match precisely including indentation and whitespace). Use empty string "" to create a new file.',
34
+ description: 'The exact text to replace (must match precisely including indentation and whitespace)',
222
35
  },
223
36
  new_string: {
224
37
  type: 'string',
@@ -252,125 +65,43 @@ export function createEditTools(workingDir) {
252
65
  }
253
66
  try {
254
67
  const filePath = resolveFilePath(workingDir, pathArg);
255
- // Check if file exists and is not a directory
256
- let fileExists = true;
257
- let isDirectory = false;
68
+ // Check file exists (async for speed)
258
69
  try {
259
- const fileStat = await stat(filePath);
260
- isDirectory = fileStat.isDirectory();
70
+ await stat(filePath);
261
71
  }
262
72
  catch {
263
- fileExists = false;
264
- }
265
- // Reject directory paths
266
- if (isDirectory) {
267
- return `Error: Cannot edit a directory: ${filePath}\n\nProvide a file path, not a directory path.`;
268
- }
269
- // Handle file creation when old_string is empty and file doesn't exist
270
- if (!fileExists) {
271
- if (oldString !== '') {
272
- return `Error: File not found: ${filePath}\n\nTo create a new file, use old_string: "" (empty string) and new_string: "<file content>"`;
273
- }
274
- // Create new file with new_string as content
275
- const dir = dirname(filePath);
276
- try {
277
- await mkdir(dir, { recursive: true });
278
- }
279
- catch {
280
- // Directory may already exist
281
- }
282
- await writeFile(filePath, newString, 'utf-8');
283
- const relativePath = relative(workingDir, filePath);
284
- const displayPath = relativePath && !relativePath.startsWith('..') ? relativePath : filePath;
285
- const lineCount = newString.split('\n').length;
286
- return [
287
- `✓ Created ${displayPath}`,
288
- `Lines: ${lineCount}`,
289
- ].join('\n');
73
+ return `Error: File not found: ${filePath}`;
290
74
  }
291
75
  // Read current content (async for speed)
292
76
  const currentContent = await readFile(filePath, 'utf-8');
293
77
  // Check if old_string exists in file
294
- let matchedOldString = oldString;
295
78
  if (!currentContent.includes(oldString)) {
296
- // Try auto-correction for common issues
297
- const corrected = tryAutoCorrectMatch(currentContent, oldString);
298
- if (corrected) {
299
- matchedOldString = corrected;
300
- }
301
- else {
302
- // Provide helpful debugging info when match fails
303
- const oldLines = oldString.split('\n');
304
- const firstLine = oldLines[0] || '';
305
- const lineCount = oldLines.length;
306
- const hints = findSimilarLines(currentContent, firstLine, filePath);
307
- // Check if first line exists but multiline block doesn't match
308
- const firstLineExists = currentContent.includes(firstLine);
309
- const isMultiline = lineCount > 1;
310
- const isGenericStart = firstLine.trim().length < 10 || /^[\s/*{}[\]()]+$/.test(firstLine.trim());
311
- const errorParts = ['Error: old_string not found in file.', ''];
312
- errorParts.push(`File: ${filePath}`);
313
- // Show what we're searching for
314
- if (isMultiline) {
315
- errorParts.push(`Searching for ${lineCount}-line block starting with: ${JSON.stringify(firstLine.substring(0, 60))}${firstLine.length > 60 ? '...' : ''}`);
316
- if (lineCount > 1 && oldLines[1]) {
317
- errorParts.push(` Line 2: ${JSON.stringify(oldLines[1].substring(0, 60))}${(oldLines[1]?.length ?? 0) > 60 ? '...' : ''}`);
318
- }
319
- if (lineCount > 2 && oldLines[2]) {
320
- errorParts.push(` Line 3: ${JSON.stringify(oldLines[2].substring(0, 60))}${(oldLines[2]?.length ?? 0) > 60 ? '...' : ''}`);
321
- }
322
- if (lineCount > 3) {
323
- errorParts.push(` ... (${lineCount - 3} more lines)`);
324
- }
325
- }
326
- else {
327
- errorParts.push(`Searching for: ${JSON.stringify(firstLine.substring(0, 80))}${firstLine.length > 80 ? '...' : ''}`);
328
- }
329
- errorParts.push('');
330
- // Diagnostic message based on the situation
331
- if (firstLineExists && isMultiline) {
332
- errorParts.push('⚠ First line was found, but the complete block does not match.');
333
- errorParts.push(' The file content may have changed or there are whitespace differences.');
334
- errorParts.push('');
335
- }
336
- else if (isGenericStart) {
337
- errorParts.push('⚠ The search string starts with a very generic pattern.');
338
- errorParts.push(' Include more unique context to identify the correct location.');
339
- errorParts.push('');
340
- }
341
- errorParts.push(hints);
342
- errorParts.push('');
343
- errorParts.push('Tips:');
344
- errorParts.push('- Ensure exact whitespace/indentation matches');
345
- errorParts.push('- Copy text directly from Read output');
346
- errorParts.push('- Check for tabs vs spaces');
347
- if (isMultiline && firstLineExists) {
348
- errorParts.push('- Re-read the file to get current content');
349
- }
350
- return errorParts.join('\n');
351
- }
79
+ // Provide helpful debugging info when match fails
80
+ const firstLine = oldString.split('\n')[0] || '';
81
+ const hints = findSimilarLines(currentContent, firstLine, filePath);
82
+ return [
83
+ 'Error: old_string not found in file.',
84
+ '',
85
+ `File: ${filePath}`,
86
+ `Searching for: ${JSON.stringify(firstLine.substring(0, 80))}${firstLine.length > 80 ? '...' : ''}`,
87
+ '',
88
+ hints,
89
+ '',
90
+ 'Tips:',
91
+ '- Ensure exact whitespace/indentation matches',
92
+ '- Copy text directly from Read output',
93
+ '- Check for tabs vs spaces',
94
+ ].join('\n');
352
95
  }
353
96
  // Count occurrences
354
- const occurrences = countOccurrences(currentContent, matchedOldString);
97
+ const occurrences = countOccurrences(currentContent, oldString);
355
98
  if (!replaceAll && occurrences > 1) {
356
99
  return `Error: old_string appears ${occurrences} times in the file. Either:\n1. Provide a larger unique string that includes more context\n2. Set replace_all: true to replace all ${occurrences} occurrences\n\nFile: ${filePath}`;
357
100
  }
358
- // Validate edit safety - prevent accidentally destructive edits
359
- const totalFileLines = currentContent.split('\n').length;
360
- const safety = validateEditSafety(matchedOldString, newString, totalFileLines, filePath);
361
- // Reject suspicious edits (e.g., old_string is 15x larger than new_string)
362
- if (safety.rejection) {
363
- return safety.rejection;
364
- }
365
- // Create backup if this is a risky edit
366
- let backupPath = null;
367
- if (safety.shouldBackup) {
368
- backupPath = await createEditBackup(workingDir, filePath);
369
- }
370
- // Perform replacement using the matched string (may be auto-corrected)
101
+ // Perform replacement
371
102
  const newContent = replaceAll
372
- ? currentContent.split(matchedOldString).join(newString)
373
- : currentContent.replace(matchedOldString, newString);
103
+ ? currentContent.split(oldString).join(newString)
104
+ : currentContent.replace(oldString, newString);
374
105
  // Generate diff (fast in-memory algorithm, no git spawning)
375
106
  const diffSegments = buildDiffSegmentsFast(currentContent, newContent);
376
107
  // Write file (async for speed)
@@ -383,29 +114,15 @@ export function createEditTools(workingDir) {
383
114
  const occurrencesText = replaceAll ? ` (${occurrences} occurrence${occurrences > 1 ? 's' : ''})` : '';
384
115
  const diffLines = formatDiffLines(diffSegments);
385
116
  const diffBlock = diffLines.length > 0
386
- ? diffLines.join('\n')
117
+ ? ['```diff', ...diffLines, '```'].join('\n')
387
118
  : '(No visual diff - whitespace or formatting changes only)';
388
- // Colorize the change summary: green for additions, red for removals
389
- const addedText = theme.diff.added(`+${addedLines}`);
390
- const removedText = theme.diff.removed(`-${removedLines}`);
391
- // Build result message with optional warning and backup info
392
- const resultParts = [];
393
- // Add warning if present
394
- if (safety.warning) {
395
- resultParts.push(safety.warning);
396
- resultParts.push('');
397
- }
398
- resultParts.push(`✓ Edited ${displayPath}${occurrencesText}`);
399
- resultParts.push(`Lines changed: ${addedText} / ${removedText}`);
400
- // Add backup info if created
401
- if (backupPath) {
402
- const relBackup = relative(workingDir, backupPath);
403
- resultParts.push(`Backup: ${relBackup}`);
404
- }
405
- resultParts.push('');
406
- resultParts.push('Diff preview:');
407
- resultParts.push(diffBlock);
408
- return resultParts.join('\n');
119
+ return [
120
+ `✓ Edited ${displayPath}${occurrencesText}`,
121
+ `Lines changed: +${addedLines} / -${removedLines}`,
122
+ '',
123
+ 'Diff preview:',
124
+ diffBlock,
125
+ ].join('\n');
409
126
  }
410
127
  catch (error) {
411
128
  return buildError('editing file', error, {
@@ -433,73 +150,6 @@ function countOccurrences(text, search) {
433
150
  }
434
151
  return count;
435
152
  }
436
- /**
437
- * Try to auto-correct common whitespace mismatches.
438
- * Returns the corrected string that matches the file content, or null if no match found.
439
- */
440
- function tryAutoCorrectMatch(content, oldString) {
441
- // Strategy 1: Normalize line endings (CRLF -> LF)
442
- const normalizedOld = oldString.replace(/\r\n/g, '\n');
443
- if (content.includes(normalizedOld)) {
444
- return normalizedOld;
445
- }
446
- // Strategy 2: Try with tabs converted to spaces (2-space)
447
- const tabsToSpaces2 = oldString.replace(/\t/g, ' ');
448
- if (content.includes(tabsToSpaces2)) {
449
- return tabsToSpaces2;
450
- }
451
- // Strategy 3: Try with tabs converted to spaces (4-space)
452
- const tabsToSpaces4 = oldString.replace(/\t/g, ' ');
453
- if (content.includes(tabsToSpaces4)) {
454
- return tabsToSpaces4;
455
- }
456
- // Strategy 4: Try with spaces converted to tabs
457
- const spacesToTabs = oldString.replace(/ /g, '\t');
458
- if (content.includes(spacesToTabs)) {
459
- return spacesToTabs;
460
- }
461
- // Strategy 5: Try trimming trailing whitespace from each line
462
- const trimmedLines = oldString.split('\n').map(line => line.trimEnd()).join('\n');
463
- if (content.includes(trimmedLines)) {
464
- return trimmedLines;
465
- }
466
- // Strategy 6: Line-by-line fuzzy match for multiline strings
467
- if (oldString.includes('\n')) {
468
- const oldLines = oldString.split('\n');
469
- const contentLines = content.split('\n');
470
- // Try to find a block of lines that matches after trimming
471
- for (let i = 0; i <= contentLines.length - oldLines.length; i++) {
472
- let matches = true;
473
- for (let j = 0; j < oldLines.length; j++) {
474
- const contentLine = contentLines[i + j] || '';
475
- const oldLine = oldLines[j] || '';
476
- // Compare trimmed versions
477
- if (contentLine.trim() !== oldLine.trim()) {
478
- matches = false;
479
- break;
480
- }
481
- }
482
- if (matches) {
483
- // Return the actual content from the file
484
- return contentLines.slice(i, i + oldLines.length).join('\n');
485
- }
486
- }
487
- }
488
- // Strategy 7: Single-line exact trimmed match
489
- // Find a line in the file that matches when trimmed (handles tabs/spaces/indentation differences)
490
- if (!oldString.includes('\n')) {
491
- const searchTrimmed = oldString.trim();
492
- if (searchTrimmed) {
493
- const contentLines = content.split('\n');
494
- for (const line of contentLines) {
495
- if (line.trim() === searchTrimmed) {
496
- return line;
497
- }
498
- }
499
- }
500
- }
501
- return null;
502
- }
503
153
  /**
504
154
  * Find lines in the file that are similar to the search text.
505
155
  * Enhanced with whitespace detection and auto-correction suggestions.
@@ -545,7 +195,7 @@ function findSimilarLines(content, searchFirstLine, _filePath) {
545
195
  matches.sort((a, b) => b.similarity - a.similarity);
546
196
  const topMatches = matches.slice(0, 3);
547
197
  const suggestions = topMatches.map(m => {
548
- const truncated = m.line.length > 80 ? `${m.line.substring(0, 77)}...` : m.line;
198
+ const truncated = m.line.length > 80 ? m.line.substring(0, 77) + '...' : m.line;
549
199
  const issueNote = m.issue ? ` (${m.issue})` : '';
550
200
  return ` Line ${m.lineNum}${issueNote}: ${JSON.stringify(truncated)}`;
551
201
  });
@@ -1 +1 @@
1
- {"version":3,"file":"editTools.js","sourceRoot":"","sources":["../../src/tools/editTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editTools.js","sourceRoot":"","sources":["../../src/tools/editTools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fileTools.d.ts","sourceRoot":"","sources":["../../src/tools/fileTools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAuLpE"}
1
+ {"version":3,"file":"fileTools.d.ts","sourceRoot":"","sources":["../../src/tools/fileTools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAa7D,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAuPpE"}