Format linter issues as a compact string to append to agent tool results. Errors shown first, warnings after.
(issues: List[LintIssue], max_issues: int = 8)
| 241 | # ── Formatting helpers ───────────────────────────────────────────────────────── |
| 242 | |
| 243 | def format_issues(issues: List[LintIssue], max_issues: int = 8) -> str: |
| 244 | """ |
| 245 | Format linter issues as a compact string to append to agent tool results. |
| 246 | Errors shown first, warnings after. |
| 247 | """ |
| 248 | if not issues: |
| 249 | return "" |
| 250 | errors = [i for i in issues if i.severity == "error"] |
| 251 | warnings = [i for i in issues if i.severity != "error"] |
| 252 | shown = (errors + warnings)[:max_issues] |
| 253 | lines = [f"\n\n[LINTER] {len(issues)} issue(s) found:"] |
| 254 | for issue in shown: |
| 255 | prefix = " ✗" if issue.severity == "error" else " ⚠" |
| 256 | lines.append(f"{prefix} Line {issue.line}: [{issue.code}] {issue.message}") |
| 257 | if len(issues) > max_issues: |
| 258 | lines.append(f" ... and {len(issues) - max_issues} more (run /review for full report)") |
| 259 | lines.append("Review and fix any errors before the file is considered done.") |
| 260 | return "\n".join(lines) |
| 261 | |
| 262 | |
| 263 | def get_available_linters() -> List[str]: |