Provide support for escaping section markers so that the model can
add or remove lines like:
=======
by escaping them in the search or replace string:
\=======
A state machine tracks apply_diff markers appear in correct sequence:
SEARCH -> SEPARATOR -> REPLACE. Prevents syntax corruption from interleaved or
malformed blocks by validating before processing matches.
If a model tries to interleave diff markers, then the state machine will
return a response to the model like this so it can correct. testing
shows that this works on Claude 3.5, 3.7 and gemini-2.0-flash-thinking:
```xml
<error_details>
ERROR: Special marker '=======' found in your diff content at line 7:
When removing merge conflict markers like '=======' from files, you MUST escape them
in your SEARCH section by prepending a backslash (\) at the beginning of the line:
CORRECT FORMAT:
<<<<<<< SEARCH
content before
\======= <-- Note the backslash here in this example
content after
=======
replacement content
>>>>>>> REPLACE
Without escaping, the system confuses your content with diff syntax markers.
You may use multiple diff blocks in a single diff request, but ANY of ONLY the following separators that occur within SEARCH or REPLACE content must be must be escaped, as follows:
\<<<<<<< SEARCH
\=======
\>>>>>>> REPLACE
</error_details>
```
Fixes: #1557Fixes: #1408
Signed-off-by: Eric Wheeler <roo-code@z.ewheeler.org>
- Refactored the `inferIndentation` function to streamline indentation handling for context and added lines.
- Improved the `applyContextMatching` and `applyDMP` functions for better clarity and efficiency in processing changes.
- Code was formatted
- Improved the `identifyAnchors` function to return the first and last non-empty lines of the search string.
- Updated the `findAnchorMatch` function to validate anchor uniqueness and context more effectively.
- Removed unused complexity calculations and streamlined the anchor validation process.
- Modified applyContextMatching and applyDMP functions to accept a confidenceThreshold parameter, enhancing flexibility in edit strategies.
- Updated validateEditResult and related functions to utilize the new confidenceThreshold, improving consistency across validation processes.
- Adjusted findExactMatch, findSimilarityMatch, findLevenshteinMatch, and findAnchorMatch functions to incorporate confidenceThreshold, ensuring adaptive behavior based on user settings.
- Introduced tests for the NewUnifiedDiffStrategy constructor to verify default and custom confidence thresholds.
- Ensured that the minimum confidence threshold is enforced, preventing values below 0.8.
- Enhanced test coverage for the strategy's initialization logic, improving overall reliability and maintainability.
- Added support for an experimental diff strategy in the Cline class, allowing users to opt for a new unified diff approach.
- Updated the getDiffStrategy function to accommodate the experimental strategy, adjusting the fuzzy match threshold accordingly.
- Integrated experimentalDiffStrategy into the global state management, enabling persistence across sessions.
- Enhanced the ClineProvider and related components to handle the new experimental strategy, including UI updates for user settings.
- Improved task history management to include the experimentalDiffStrategy setting, ensuring consistency in task execution.
- Updated relevant interfaces and types to reflect the new experimentalDiffStrategy property.
- Improved error messages for cases where no hunks are found in the diff, providing clearer guidance on format requirements.
- Added detailed debug information for search and edit failures, including context line ratios and potential issues to assist users in troubleshooting.
- Streamlined the logic for determining the cause of edit failures, distinguishing between search and content mismatch errors.
- Enhanced overall readability and maintainability of the code with consistent formatting and structured comments.
- Improved logging within the applyGitFallback function to provide clearer insights during the commit and cherry-pick processes.
- Streamlined error handling to ensure more informative console outputs when operations fail.
- Maintained consistent formatting and indentation for better readability and maintainability of the code.
- Ensured temporary directory cleanup is handled correctly in all scenarios, preventing potential resource leaks.
- Cleaned up formatting in the parseUnifiedDiff method to ensure consistent indentation and spacing.
- Updated documentation to clarify format requirements for generating unified diffs.
- Added error handling for cases where no hunks are found in the provided diff, improving robustness.
- Enhanced overall readability of the code by standardizing comments and structure.
- Refactored the parseUnifiedDiff method to streamline the processing of diff lines and improve context line management.
- Added handling for empty context lines to ensure accurate representation in hunks.
- Updated the tool description to clarify requirements for generating unified diffs, emphasizing the importance of preserving indentation and grouping related changes.
- Improved overall readability and consistency of the code by standardizing formatting and indentation practices.