Index
remedies
¶
Remedy implementations for self-healing.
This package contains all built-in remedies:
Automatic remedies (safe, apply without confirmation): - CreateMissingWorkspaceRemedy: Creates missing workspace directories - CreateMissingParentDirsRemedy: Creates missing parent directories - FixPathSeparatorsRemedy: Fixes Windows path separators on Unix
Suggested remedies (require user confirmation): - SuggestJinjaFixRemedy: Suggests fixes for Jinja template errors
Diagnostic remedies (provide guidance only): - DiagnoseAuthErrorRemedy: Diagnoses authentication failures - DiagnoseMissingCLIRemedy: Diagnoses missing Claude CLI
Classes¶
Remedy
¶
Bases: Protocol
Protocol for remediation actions.
Remedies diagnose specific error patterns and can optionally apply fixes. Each remedy must implement: - name: Unique identifier - category: AUTOMATIC, SUGGESTED, or DIAGNOSTIC - risk_level: LOW, MEDIUM, or HIGH - description: Human-readable explanation - diagnose(): Check if this remedy applies - preview(): Show what would change - apply(): Make the actual changes - rollback(): Undo changes if needed - generate_diagnostic(): Provide guidance for manual fix
Attributes¶
Functions¶
diagnose
¶
Check if this remedy applies to the error.
Returns Diagnosis if applicable, None otherwise. The diagnosis includes confidence score and fix suggestion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
context
|
ErrorContext
|
Error context with diagnostic information. |
required |
Returns:
| Type | Description |
|---|---|
Diagnosis | None
|
Diagnosis if this remedy can help, None otherwise. |
Source code in src/marianne/healing/remedies/base.py
preview
¶
Show what would be changed without making changes.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
context
|
ErrorContext
|
Error context. |
required |
Returns:
| Type | Description |
|---|---|
str
|
Human-readable description of planned changes. |
apply
¶
Apply the remedy.
Only called if diagnose() returned a Diagnosis and: - category == AUTOMATIC, or - category == SUGGESTED and user confirmed
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
context
|
ErrorContext
|
Error context. |
required |
Returns:
| Type | Description |
|---|---|
RemedyResult
|
Result with success status and details. |
Source code in src/marianne/healing/remedies/base.py
rollback
¶
Undo the remedy if possible.
Called if remedy was applied but subsequent validation failed.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result
|
RemedyResult
|
The result from apply(). |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if rollback succeeded, False otherwise. |
Source code in src/marianne/healing/remedies/base.py
generate_diagnostic
¶
Generate detailed diagnostic message.
Called for DIAGNOSTIC category, or when user declines SUGGESTED.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
context
|
ErrorContext
|
Error context. |
required |
Returns:
| Type | Description |
|---|---|
str
|
Formatted guidance for manual fix. |
Source code in src/marianne/healing/remedies/base.py
RemedyCategory
¶
Bases: str, Enum
Determines how a remedy is applied.
AUTOMATIC: Applied without asking (safe, reversible operations) SUGGESTED: Requires user confirmation (modifies files) DIAGNOSTIC: Cannot auto-fix, provides guidance only
RemedyResult
dataclass
¶
RemedyResult(success, message, action_taken, rollback_command=None, created_paths=list(), modified_files=list(), backup_paths=list())
Result of applying a remedy.
Tracks what was done and how to undo it if needed.
Attributes¶
rollback_command
class-attribute
instance-attribute
¶
Shell command to undo the remedy (if possible).
created_paths
class-attribute
instance-attribute
¶
Paths that were created by the remedy.
modified_files
class-attribute
instance-attribute
¶
Files that were modified by the remedy.
backup_paths
class-attribute
instance-attribute
¶
Backup files created before modification.
Functions¶
RiskLevel
¶
Bases: str, Enum
Risk level of applying the remedy.
Used to inform users about the potential impact of the fix.
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
¶
Check for authentication-related errors.
Source code in src/marianne/healing/remedies/diagnostics.py
apply
¶
Diagnostic only - no automatic fix.
Source code in src/marianne/healing/remedies/diagnostics.py
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
¶
Check for missing CLI errors.
Source code in src/marianne/healing/remedies/diagnostics.py
apply
¶
Diagnostic only - no automatic fix.
SuggestJinjaFixRemedy
¶
Bases: BaseRemedy
Suggests fixes for Jinja template errors.
Triggers when: - Error relates to Jinja template rendering - Error message contains template syntax or undefined variable info
This is a SUGGESTED remedy because: - Fixing templates requires modifying config files - User should verify the suggested fix is correct
Functions¶
diagnose
¶
Check for Jinja template issues.
Source code in src/marianne/healing/remedies/jinja.py
apply
¶
This remedy only suggests - user must manually fix.
The actual fix requires modifying the config file, which should be done by the user or with their explicit approval.
Source code in src/marianne/healing/remedies/jinja.py
CreateMissingParentDirsRemedy
¶
Bases: BaseRemedy
Creates missing parent directories for validation paths.
Triggers when: - Error relates to a file path that doesn't exist - The missing path is for an output/validation file - Multiple directories need to be created
Slightly lower confidence than workspace remedy since it creates potentially multiple directories.
Functions¶
diagnose
¶
Check for missing parent directories in validation paths.
Source code in src/marianne/healing/remedies/paths.py
apply
¶
Create missing parent directories.
Source code in src/marianne/healing/remedies/paths.py
CreateMissingWorkspaceRemedy
¶
Bases: BaseRemedy
Creates missing workspace directories.
Triggers when: - Error code E601 (PREFLIGHT_PATH_MISSING) - Error message mentions workspace directory - Parent directory exists (so we're not creating deep trees)
This is the highest-confidence, lowest-risk remedy - creating a single directory is always safe and reversible.
Functions¶
diagnose
¶
Check if workspace is missing but parent exists.
Source code in src/marianne/healing/remedies/paths.py
apply
¶
Create the workspace directory.
Source code in src/marianne/healing/remedies/paths.py
FixPathSeparatorsRemedy
¶
Bases: BaseRemedy
Fixes Windows path separators on Unix systems.
Triggers when: - Running on Unix (not Windows) - Paths in config contain backslashes - Error relates to file not found
This is an automatic fix because it's non-destructive (only affects in-memory config, not files on disk).
Functions¶
diagnose
¶
Check for Windows path separators on Unix.
Source code in src/marianne/healing/remedies/paths.py
apply
¶
Note: This remedy doesn't modify files - it's informational.
The actual fix needs to be applied in the config loader. This remedy serves to diagnose and suggest the fix.