Install
openclaw skills install @jason-aka-chen/meta-debuggerAI-powered self-debugging system that identifies, analyzes, and fixes errors automatically. Learns from past errors, builds error patterns, generates fix suggestions, and can apply fixes autonomously. Essential capability for self-healing AI systems.
openclaw skills install @jason-aka-chen/meta-debuggerSelf-diagnosing and self-healing AI capability.
pip install json traceback ast
from meta_debugger import MetaDebugger
debugger = MetaDebugger(
name="my_assistant",
auto_fix=True,
safe_mode=True
)
@debugger.error_handler
def handle_api_error(error, context):
"""Custom error handler"""
return {
'action': 'retry',
'max_retries': 3,
'backoff': 'exponential'
}
@debugger.error_handler
def handle_timeout(error, context):
"""Handle timeout errors"""
return {
'action': 'increase_timeout',
'new_timeout': 60
}
@debugger.wrap
def call_api(url, params):
"""Function that might fail"""
return requests.get(url, params=params)
# Analyze an error
analysis = debugger.analyze(
error=ValueError("Invalid input"),
context={'input': user_input, 'function': 'process_data'}
)
print(analysis)
# {
# 'root_cause': 'Type mismatch',
# 'severity': 'medium',
# 'suggestions': [
# 'Convert input to correct type',
# 'Add input validation'
# ]
# }
# Apply fix
result = debugger.apply_fix(analysis)
# Get error patterns
patterns = debugger.get_error_patterns()
# Get common fixes
fixes = debugger.get_common_fixes()
# Get prevention suggestions
prevention = debugger.get_prevention_tips()
| Method | Description |
|---|---|
@error_handler | Decorator for error handlers |
register_handler(type, handler) | Register custom handler |
handle(error, context) | Handle an error |
| Method | Description |
|---|---|
analyze(error, context) | Analyze error root cause |
get_stack_trace(error) | Parse stack trace |
find_similar(error) | Find similar past errors |
| Method | Description |
|---|---|
generate_fixes(error) | Generate fix candidates |
rank_fixes(fixes) | Rank fixes by probability |
apply_fix(fix) | Apply a fix |
| Method | Description |
|---|---|
add_guardrail(check) | Add pre-execution check |
validate_input(input, rules) | Validate inputs |
build_pattern(error) | Build error pattern |
| Method | Description |
|---|---|
record_error(error, context) | Record error for learning |
record_fix(error, fix, success) | Record fix result |
get_insights() | Get learned insights |
ERROR_PATTERNS = {
"timeout": {
"causes": ["network", "server_load", "query_complexity"],
"fixes": ["increase_timeout", "retry", "cache"],
"prevention": ["timeout_guards", "circuit_breaker"]
},
"value_error": {
"causes": ["type_mismatch", "invalid_format", "out_of_range"],
"fixes": ["type_conversion", "validation", "default_value"],
"prevention": ["input_validation", "schema_check"]
},
"connection_error": {
"causes": ["network_down", "server_unavailable", "auth_failed"],
"fixes": ["retry", "reconnect", "fallback"],
"prevention": ["health_check", "load_balancing"]
}
}
{
'strategy': 'retry',
'max_attempts': 3,
'backoff': 'exponential',
'backoff_base': 2,
'max_delay': 60
}
{
'strategy': 'fallback',
'primary': 'api_v1',
'fallback': 'api_v2',
'condition': 'primary_unavailable'
}
{
'strategy': 'circuit_breaker',
'failure_threshold': 5,
'timeout': 60,
'half_open_requests': 3
}
{
'strategy': 'default',
'field': 'result',
'default': {'status': 'unknown'}
}
from meta_debugger import MetaDebugger
# Initialize
debugger = MetaDebugger("production_assistant")
# Register handlers
@debugger.error_handler
def handle_api_error(error, context):
if "timeout" in str(error).lower():
return {'action': 'retry', 'max_retries': 3}
elif "auth" in str(error).lower():
return {'action': 'refresh_token'}
return {'action': 'log_and_continue'}
# Wrap risky function
@debugger.wrap
def fetch_stock_data(symbol):
# This might fail
return api.get(f"/stock/{symbol}")
# Use it
try:
data = fetch_stock_data("600519")
except Exception as e:
# Debugger automatically handles
debugger.handle(e, {'function': 'fetch_stock_data', 'symbol': '600519'})
class MySkill:
def __init__(self):
self.debugger = MetaDebugger()
def execute(self, input):
try:
return self._execute(input)
except Exception as e:
return self.debugger.handle(e, {'skill': 'MySkill', 'input': input})
@hookimpl
def on_error(error, context):
debugger = MetaDebugger()
return debugger.handle(error, context)
| Metric | Description |
|---|---|
| error_rate | Errors per 1000 calls |
| fix_success_rate | Successful fixes |
| avg_recovery_time | Time to recover |
| prevented_errors | Errors caught by guards |