diff --git a/src/cleveragents/tui/permissions/models.py b/src/cleveragents/tui/permissions/models.py index 8cbb3f905..a5eba5afe 100644 --- a/src/cleveragents/tui/permissions/models.py +++ b/src/cleveragents/tui/permissions/models.py @@ -139,21 +139,22 @@ class PermissionRequest(BaseModel): return left, right def auto_diff(self, *, context_lines: int = 3) -> str: - """Select unified or split diff based on available terminal width. + """Generate a context diff string for this file change. - Returns split (side-by-side) format for terminals >= 120 columns, - unified diff format otherwise. + Uses context diff format with *** and --- delimiters per spec ยง30139. """ - import shutil + import difflib - terminal_width = shutil.get_terminal_size().columns - if terminal_width >= 120: - left, right = self.split_diff() - lines: list[str] = [] - for l_line, r_line in zip(left, right, strict=True): - lines.append(f"{l_line:<40} | {r_line}") - return "\n".join(lines) - return self.unified_diff(context_lines=context_lines) + before_lines = (self.before_content or "").splitlines(keepends=True) + after_lines = (self.after_content or "").splitlines(keepends=True) + diff_lines = difflib.context_diff( + before_lines, + after_lines, + fromfile=f"a/{self.path}", + tofile=f"b/{self.path}", + n=context_lines, + ) + return "".join(diff_lines) def render_diff( self,