feat(edit): Prevent no-op edits (#3520)

This commit is contained in:
Wen Sun 2025-07-22 06:24:02 +09:00 committed by GitHub
parent 1969d805f2
commit b4d00ab4fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 0 deletions

View File

@ -608,6 +608,19 @@ describe('EditTool', () => {
/User modified the `new_string` content/,
);
});
it('should return error if old_string and new_string are identical', async () => {
const initialContent = 'This is some identical text.';
fs.writeFileSync(filePath, initialContent, 'utf8');
const params: EditToolParams = {
file_path: filePath,
old_string: 'identical',
new_string: 'identical',
};
const result = await tool.execute(params, new AbortController().signal);
expect(result.llmContent).toMatch(/No changes to apply/);
expect(result.returnDisplay).toMatch(/No changes to apply/);
});
});
describe('getDescription', () => {

View File

@ -246,6 +246,11 @@ Expectation for required parameters:
display: `Failed to edit, expected ${expectedReplacements} ${occurenceTerm} but found ${occurrences}.`,
raw: `Failed to edit, Expected ${expectedReplacements} ${occurenceTerm} but found ${occurrences} for old_string in file: ${params.file_path}`,
};
} else if (finalOldString === finalNewString) {
error = {
display: `No changes to apply. The old_string and new_string are identical.`,
raw: `No changes to apply. The old_string and new_string are identical in file: ${params.file_path}`,
};
}
} else {
// Should not happen if fileExists and no exception was thrown, but defensively: