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.
- package/README.md +7 -17
- package/agents/erosolar-code.rules.json +1 -111
- package/agents/general.rules.json +0 -6
- package/dist/bin/erosolar.js +0 -22
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/bin/selfTest.js +2 -190
- package/dist/bin/selfTest.js.map +1 -1
- package/dist/core/agent.d.ts +0 -12
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +12 -75
- package/dist/core/agent.js.map +1 -1
- package/dist/core/contextManager.d.ts +1 -2
- package/dist/core/contextManager.d.ts.map +1 -1
- package/dist/core/contextManager.js +2 -11
- package/dist/core/contextManager.js.map +1 -1
- package/dist/core/multilinePasteHandler.d.ts +4 -8
- package/dist/core/multilinePasteHandler.d.ts.map +1 -1
- package/dist/core/multilinePasteHandler.js +17 -67
- package/dist/core/multilinePasteHandler.js.map +1 -1
- package/dist/core/preferences.js +2 -8
- package/dist/core/preferences.js.map +1 -1
- package/dist/core/resultVerification.d.ts +1 -1
- package/dist/core/resultVerification.d.ts.map +1 -1
- package/dist/core/resultVerification.js +10 -11
- package/dist/core/resultVerification.js.map +1 -1
- package/dist/core/schemaValidator.d.ts.map +1 -1
- package/dist/core/schemaValidator.js +1 -36
- package/dist/core/schemaValidator.js.map +1 -1
- package/dist/core/toolRuntime.d.ts +0 -61
- package/dist/core/toolRuntime.d.ts.map +1 -1
- package/dist/core/toolRuntime.js +1 -303
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/core/unified/schema.d.ts.map +1 -1
- package/dist/core/unified/schema.js +1 -34
- package/dist/core/unified/schema.js.map +1 -1
- package/dist/headless/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +0 -3
- package/dist/headless/headlessApp.js.map +1 -1
- package/dist/providers/anthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropicProvider.js +1 -4
- package/dist/providers/anthropicProvider.js.map +1 -1
- package/dist/shell/bracketedPasteManager.d.ts.map +1 -1
- package/dist/shell/bracketedPasteManager.js +3 -5
- package/dist/shell/bracketedPasteManager.js.map +1 -1
- package/dist/shell/composableMessage.js +2 -2
- package/dist/shell/composableMessage.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +1 -6
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +95 -421
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +0 -7
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/systemPrompt.js +5 -5
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/tools/bashTools.d.ts +0 -8
- package/dist/tools/bashTools.d.ts.map +1 -1
- package/dist/tools/bashTools.js +5 -80
- package/dist/tools/bashTools.js.map +1 -1
- package/dist/tools/diffUtils.d.ts.map +1 -1
- package/dist/tools/diffUtils.js +8 -12
- package/dist/tools/diffUtils.js.map +1 -1
- package/dist/tools/editTools.d.ts.map +1 -1
- package/dist/tools/editTools.js +36 -386
- package/dist/tools/editTools.js.map +1 -1
- package/dist/tools/fileTools.d.ts.map +1 -1
- package/dist/tools/fileTools.js +130 -25
- package/dist/tools/fileTools.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +0 -5
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +0 -21
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +10 -83
- package/dist/ui/persistentPrompt.d.ts.map +1 -1
- package/dist/ui/persistentPrompt.js +119 -521
- package/dist/ui/persistentPrompt.js.map +1 -1
- package/dist/ui/richText.js +4 -4
- package/dist/ui/richText.js.map +1 -1
- package/dist/ui/shortcutsHelp.d.ts.map +1 -1
- package/dist/ui/shortcutsHelp.js +13 -31
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/package.json +1 -4
- package/dist/ui/EnhancedPinnedChatBox.d.ts +0 -93
- package/dist/ui/EnhancedPinnedChatBox.d.ts.map +0 -1
- package/dist/ui/EnhancedPinnedChatBox.js +0 -309
- package/dist/ui/EnhancedPinnedChatBox.js.map +0 -1
- package/dist/ui/PinnedChatBoxEnhancer.d.ts +0 -88
- package/dist/ui/PinnedChatBoxEnhancer.d.ts.map +0 -1
- package/dist/ui/PinnedChatBoxEnhancer.js +0 -205
- package/dist/ui/PinnedChatBoxEnhancer.js.map +0 -1
package/dist/tools/editTools.js
CHANGED
|
@@ -1,194 +1,7 @@
|
|
|
1
|
-
import { readFile, writeFile, stat
|
|
2
|
-
import { join, relative
|
|
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.
|
|
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)
|
|
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
|
|
256
|
-
let fileExists = true;
|
|
257
|
-
let isDirectory = false;
|
|
68
|
+
// Check file exists (async for speed)
|
|
258
69
|
try {
|
|
259
|
-
|
|
260
|
-
isDirectory = fileStat.isDirectory();
|
|
70
|
+
await stat(filePath);
|
|
261
71
|
}
|
|
262
72
|
catch {
|
|
263
|
-
|
|
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
|
-
//
|
|
297
|
-
const
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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,
|
|
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
|
-
//
|
|
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(
|
|
373
|
-
: currentContent.replace(
|
|
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
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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 ?
|
|
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;
|
|
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"}
|