Spaces:
Sleeping
Sleeping
| """Managed Claude Code diagnostic classification.""" | |
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| _BENIGN_STDERR_MARKERS = ("claude.ai connectors are disabled",) | |
| class ManagedClaudeStderrDiagnostics: | |
| """Classified stderr lines from one managed Claude Code invocation.""" | |
| benign_lines: tuple[str, ...] | |
| fatal_lines: tuple[str, ...] | |
| def fatal_text(self) -> str | None: | |
| text = "\n".join(self.fatal_lines).strip() | |
| return text or None | |
| def has_benign(self) -> bool: | |
| return bool(self.benign_lines) | |
| def classify_managed_claude_stderr( | |
| stderr_text: str, | |
| ) -> ManagedClaudeStderrDiagnostics: | |
| """Classify known benign Claude Code diagnostics separately from failures.""" | |
| benign_lines: list[str] = [] | |
| fatal_lines: list[str] = [] | |
| for line in _stderr_lines(stderr_text): | |
| lowered = line.lower() | |
| if any(marker in lowered for marker in _BENIGN_STDERR_MARKERS): | |
| benign_lines.append(line) | |
| else: | |
| fatal_lines.append(line) | |
| return ManagedClaudeStderrDiagnostics( | |
| benign_lines=tuple(benign_lines), | |
| fatal_lines=tuple(fatal_lines), | |
| ) | |
| def _stderr_lines(stderr_text: str) -> tuple[str, ...]: | |
| stripped = stderr_text.strip() | |
| if not stripped: | |
| return () | |
| return tuple(line.strip() for line in stripped.splitlines() if line.strip()) | |