Skip to content

diagnostics

diagnostics

Diagnostic-only remedies for self-healing.

These remedies cannot automatically fix issues but provide detailed guidance for manual resolution: - DiagnoseAuthErrorRemedy: Diagnoses authentication failures - DiagnoseMissingCLIRemedy: Diagnoses missing Claude CLI

Classes

DiagnoseAuthErrorRemedy

Bases: BaseRemedy

Diagnoses authentication failures.

Triggers when: - Error relates to API key or authentication - Error code indicates auth failure

This is DIAGNOSTIC only because: - We cannot create API keys - User must configure authentication themselves

Functions
diagnose
diagnose(context)

Check for authentication-related errors.

Source code in src/marianne/healing/remedies/diagnostics.py
def diagnose(self, context: "ErrorContext") -> Diagnosis | None:
    """Check for authentication-related errors."""
    # Check for auth-related error codes
    auth_codes = ("E101", "E102", "E401", "E403")  # Rate limit / auth codes
    if context.error_code in auth_codes:
        return self._diagnose_from_code(context)

    # Check message patterns
    auth_patterns = [
        r"api.?key",
        r"auth.*failed",
        r"authentication",
        r"unauthorized",
        r"invalid.*key",
        r"missing.*key",
        r"401",
        r"403",
        r"ANTHROPIC_API_KEY",
    ]

    message_lower = context.error_message.lower()
    if any(re.search(p, message_lower, re.IGNORECASE) for p in auth_patterns):
        return self._diagnose_from_message(context)

    return None
apply
apply(context)

Diagnostic only - no automatic fix.

Source code in src/marianne/healing/remedies/diagnostics.py
def apply(self, context: "ErrorContext") -> RemedyResult:
    """Diagnostic only - no automatic fix."""
    self.diagnose(context)
    return RemedyResult(
        success=True,
        message="Diagnostic information provided",
        action_taken="diagnosis only",
    )

DiagnoseMissingCLIRemedy

Bases: BaseRemedy

Diagnoses missing Claude CLI.

Triggers when: - Error indicates Claude CLI not found - Backend is configured for CLI but binary missing

This is DIAGNOSTIC only because: - Installation requires system-level changes - User should verify installation method for their system

Functions
diagnose
diagnose(context)

Check for missing CLI errors.

Source code in src/marianne/healing/remedies/diagnostics.py
def diagnose(self, context: "ErrorContext") -> Diagnosis | None:
    """Check for missing CLI errors."""
    # Check for CLI-related error codes
    # Check if it's specifically about CLI
    if context.error_code in ("E601", "E901") and self._is_cli_error(context.error_message):
        return self._create_diagnosis(context)

    # Check message patterns
    cli_patterns = [
        r"claude.*not found",
        r"command.*claude.*not found",
        r"executable.*claude.*not found",
        r"cannot find.*claude",
        r"cli.*not.*installed",
    ]

    message_lower = context.error_message.lower()
    if any(re.search(p, message_lower, re.IGNORECASE) for p in cli_patterns):
        return self._create_diagnosis(context)

    return None
apply
apply(context)

Diagnostic only - no automatic fix.

Source code in src/marianne/healing/remedies/diagnostics.py
def apply(self, context: "ErrorContext") -> RemedyResult:
    """Diagnostic only - no automatic fix."""
    return RemedyResult(
        success=True,
        message="Diagnostic information provided",
        action_taken="diagnosis only",
    )