Browse Source

fix(tools): Resolve intermittent hangs and lack of clear error feedback in apply_diff tool (#5391)

* fix(tools): Resolve intermittent hangs and lack of clear error feedback in apply_diff tool (#5390)

* fix: show user-friendly error message for XML parsing failures

- Keep detailed XML structure instructions only for LLM via pushToolResult
- Show simple error message to user via cline.say
- Aligns with established error handling pattern in codebase

* feat: add telemetry for XML parsing errors

- Track XML parsing errors using captureDiffApplicationError
- Include consecutive mistake count for better error analysis
- Helps monitor and debug XML parsing issues in production

---------

Co-authored-by: Example User <[email protected]>
Co-authored-by: Daniel Riccio <[email protected]>
lhish 6 months ago
parent
commit
8e7d9e092d
1 changed files with 6 additions and 1 deletions
  1. 6 1
      src/core/tools/multiApplyDiffTool.ts

+ 6 - 1
src/core/tools/multiApplyDiffTool.ts

@@ -159,7 +159,12 @@ Expected structure:
 </args>
 
 Original error: ${errorMessage}`
-			throw new Error(detailedError)
+			cline.consecutiveMistakeCount++
+			cline.recordToolError("apply_diff")
+			TelemetryService.instance.captureDiffApplicationError(cline.taskId, cline.consecutiveMistakeCount)
+			await cline.say("diff_error", `Failed to parse apply_diff XML: ${errorMessage}`)
+			pushToolResult(detailedError)
+			return
 		}
 	} else if (legacyPath && typeof legacyDiffContent === "string") {
 		// Handle legacy parameters (old way)