Przeglądaj źródła

Better error handling when unable to apply diffs (#71)

Matt Rubens 1 rok temu
rodzic
commit
355dc822dd
4 zmienionych plików z 13 dodań i 6 usunięć
  1. 4 0
      CHANGELOG.md
  2. 2 2
      package-lock.json
  3. 1 1
      package.json
  4. 6 3
      src/core/Cline.ts

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 # Roo Cline Changelog
 
+## [2.1.19]
+
+- Better error handling for diff editing
+
 ## [2.1.18]
 
 - Diff editing bugfix to handle Windows line endings

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "roo-cline",
-  "version": "2.1.18",
+  "version": "2.1.19",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "roo-cline",
-      "version": "2.1.18",
+      "version": "2.1.19",
       "dependencies": {
         "@anthropic-ai/bedrock-sdk": "^0.10.2",
         "@anthropic-ai/sdk": "^0.26.0",

+ 1 - 1
package.json

@@ -3,7 +3,7 @@
   "displayName": "Roo Cline",
   "description": "A fork of Cline, an autonomous coding agent, with some added experimental configuration and automation features.",
   "publisher": "RooVeterinaryInc",
-  "version": "2.1.18",
+  "version": "2.1.19",
   "icon": "assets/icons/rocket.png",
   "galleryBanner": {
     "color": "#617A91",

+ 6 - 3
src/core/Cline.ts

@@ -1208,12 +1208,12 @@ export class Cline {
 									pushToolResult(await this.sayAndCreateMissingParamError("apply_diff", "diff"))
 									break
 								}
-								this.consecutiveMistakeCount = 0
 
 								const absolutePath = path.resolve(cwd, relPath)
 								const fileExists = await fileExistsAtPath(absolutePath)
 
 								if (!fileExists) {
+									this.consecutiveMistakeCount++
 									await this.say("error", `File does not exist at path: ${absolutePath}`)
 									pushToolResult(`Error: File does not exist at path: ${absolutePath}`)
 									break
@@ -1224,11 +1224,14 @@ export class Cline {
 								// Apply the diff to the original content
 								let newContent = this.diffStrategy?.applyDiff(originalContent, diffContent) ?? false
 								if (newContent === false) {
-									await this.say("error", `Error applying diff to file: ${absolutePath}`)
-									pushToolResult(`Error applying diff to file: ${absolutePath}`)
+									this.consecutiveMistakeCount++
+									await this.say("error", `Unable to apply diff to file - contents are out of sync: ${absolutePath}`)
+									pushToolResult(`Error applying diff to file: ${absolutePath} - contents are out of sync. Try re-reading the relevant lines of the file and applying the diff again.`)
 									break
 								}
 
+								this.consecutiveMistakeCount = 0
+
 								// Show diff view before asking for approval
 								this.diffViewProvider.editType = "modify"
 								await this.diffViewProvider.open(relPath);