WOrks perfect
This commit is contained in:
Executable
+139
@@ -0,0 +1,139 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import re
|
||||
|
||||
def setup_claude_whoops_config():
|
||||
"""Create ~/.claude_whoops directory and default system message"""
|
||||
config_dir = os.path.expanduser("~/.claude_whoops")
|
||||
os.makedirs(config_dir, exist_ok=True)
|
||||
|
||||
system_msg_path = os.path.join(config_dir, "system_message")
|
||||
|
||||
# Only create if doesn't exist
|
||||
if not os.path.exists(system_msg_path):
|
||||
default_message = """Please read ~/.tmux_context to see the user context at the moment. It is his terminal output. Maybe he has an issue that you can solve."""
|
||||
with open(system_msg_path, 'w') as f:
|
||||
f.write(default_message)
|
||||
print(f"✓ Created {system_msg_path}")
|
||||
else:
|
||||
print(f"✓ {system_msg_path} already exists (not overwriting)")
|
||||
|
||||
def install_command_handler():
|
||||
"""Install or update command not found handler in .bashrc"""
|
||||
bashrc_path = os.path.expanduser("~/.bashrc")
|
||||
|
||||
# Read existing content
|
||||
if os.path.exists(bashrc_path):
|
||||
with open(bashrc_path, 'r') as f:
|
||||
content = f.read()
|
||||
else:
|
||||
content = ""
|
||||
|
||||
# Remove DPE command-not-found handler source line
|
||||
content = re.sub(r'\[ -f /etc/dpe-command-not-found\.sh \].*\n', '', content)
|
||||
|
||||
# Remove ALL existing command_not_found handlers/handles
|
||||
content = re.sub(
|
||||
r'# Claude command not found handlers?\n'
|
||||
r'command_not_found_hand(?:ler|le)\(\) \{[^}]*\}\n+',
|
||||
'',
|
||||
content,
|
||||
flags=re.MULTILINE | re.DOTALL
|
||||
)
|
||||
# Remove any other command_not_found_handler or handle definitions
|
||||
content = re.sub(
|
||||
r'command_not_found_hand(?:ler|le)\(\) \{[^}]*\}\n*',
|
||||
'',
|
||||
content,
|
||||
flags=re.DOTALL
|
||||
)
|
||||
|
||||
# Add new handlers at the end (both bash standard and DPE variant)
|
||||
handler = '''# Claude command not found handlers
|
||||
command_not_found_handler() {
|
||||
local cmd="$1"
|
||||
shift
|
||||
|
||||
# Capture tmux pane if available
|
||||
if command -v tmux >/dev/null 2>&1 && [ -n "$TMUX" ]; then
|
||||
tmux capture-pane -p > "$HOME/.tmux_context" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Build prompt with system message if configured
|
||||
local prompt="$cmd $*"
|
||||
if [ -f "$HOME/.claude_whoops/system_message" ]; then
|
||||
local sys_msg=$(cat "$HOME/.claude_whoops/system_message")
|
||||
prompt="$sys_msg
|
||||
|
||||
$prompt"
|
||||
fi
|
||||
|
||||
# Execute claude with prompt (bypass permissions for smooth UX)
|
||||
claude --permission-mode bypassPermissions -p "$prompt"
|
||||
return 127
|
||||
}
|
||||
|
||||
# DPE variant
|
||||
command_not_found_handle() {
|
||||
local cmd="$1"
|
||||
shift
|
||||
|
||||
# Capture tmux pane if available
|
||||
if command -v tmux >/dev/null 2>&1 && [ -n "$TMUX" ]; then
|
||||
tmux capture-pane -p > "$HOME/.tmux_context" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Build prompt with system message if configured
|
||||
local prompt="$cmd $*"
|
||||
if [ -f "$HOME/.claude_whoops/system_message" ]; then
|
||||
local sys_msg=$(cat "$HOME/.claude_whoops/system_message")
|
||||
prompt="$sys_msg
|
||||
|
||||
$prompt"
|
||||
fi
|
||||
|
||||
# Execute claude with prompt (bypass permissions for smooth UX)
|
||||
claude --permission-mode bypassPermissions -p "$prompt"
|
||||
return 127
|
||||
}
|
||||
'''
|
||||
|
||||
content = content.rstrip() + '\n\n' + handler
|
||||
|
||||
# Write back
|
||||
with open(bashrc_path, 'w') as f:
|
||||
f.write(content)
|
||||
|
||||
print("✓ Installed Claude command not found handlers in ~/.bashrc")
|
||||
|
||||
def print_documentation():
|
||||
"""Print concise professional documentation"""
|
||||
msg_file = os.path.expanduser("~/.claude_whoops/system_message")
|
||||
current_msg = ""
|
||||
if os.path.exists(msg_file):
|
||||
with open(msg_file, 'r') as f:
|
||||
current_msg = f.read().strip()
|
||||
|
||||
docs = f"""CLAUDE COMMAND NOT FOUND INTEGRATION
|
||||
|
||||
Overview:
|
||||
Intercepts unknown commands, captures tmux context, sends to Claude for analysis.
|
||||
|
||||
Configuration:
|
||||
~/.bashrc Handler functions (command_not_found_handler/handle)
|
||||
~/.claude_whoops/system_message System prompt (customize here)
|
||||
~/.tmux_context Terminal context (generated on-demand)
|
||||
|
||||
Current system message:
|
||||
{current_msg}
|
||||
|
||||
Customize:
|
||||
Edit ~/.claude_whoops/system_message to change Claude's behavior.
|
||||
Run python3 install.py to refresh handlers (preserves custom config).
|
||||
"""
|
||||
print(docs)
|
||||
|
||||
if __name__ == "__main__":
|
||||
setup_claude_whoops_config()
|
||||
install_command_handler()
|
||||
print_documentation()
|
||||
Reference in New Issue
Block a user