- Enhanced by:
- Mocking and utilities (, ) to allow for more focused unit testing of .
- Adding comprehensive tests for the private method, covering new and existing file scenarios, as well as error handling.
- Expanding tests for and to verify behavior with the new content correction logic, including diff generation and directory creation.
- Refined by:
- Introducing robust mocking for and its methods (, , ) to simulate LLM interactions accurately.
- Adding extensive test scenarios for , categorized by how matches and how is processed, including direct matches, unescaping, and LLM-based corrections.
- Including tests for edge cases like no matches or multiple matches.
- Adding a utility for better test isolation.
Final fix for https://github.com/google-gemini/gemini-cli/issues/484
This commit significantly improves the `replace` tool's robustness by introducing a multi-stage correction mechanism. This directly addresses challenges with LLM-generated tool inputs, particularly the over-escaping of strings sometimes observed with Gemini models, and other minor discrepancies that previously led to failed edits.
The correction process is as follows:
1. **Targeted Unescaping:** The system first applies a specialized unescaping function to the `old_string` and `new_string` to counteract common LLM-induced escaping patterns.
2. **LLM-Powered Discrepancy Resolution:** If a unique match for the `old_string` is still not found, the system leverages a Gemini model (`gemini-2.5-flash-preview-04-17`) to:
* Identify the most probable intended `old_string` in the file by intelligently correcting minor formatting or escaping differences.
* Adjust the `new_string` to correspond with any corrections made to the `old_string`, maintaining the original edit's intent.
This enhancement makes the `replace` tool more resilient and effective, leading to a higher success rate for automated code modifications. The `expected_replacements` parameter has been removed as the tool now focuses on finding a single, unique, and correctable match. The tool's description and error reporting have been updated to reflect these new capabilities.
Fixes https://b.corp.google.com/issues/416933027