112 lines
3 KiB
Bash
112 lines
3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Claude Hooks Uninstallation Script
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Colors for output
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
CLAUDE_CONFIG_DIR="$HOME/.config/claude"
|
||
|
|
HOOKS_CONFIG_FILE="$CLAUDE_CONFIG_DIR/hooks.json"
|
||
|
|
|
||
|
|
echo -e "${BLUE}Claude Code Hooks Uninstallation${NC}"
|
||
|
|
echo "===================================="
|
||
|
|
|
||
|
|
# Warn user about data loss
|
||
|
|
echo -e "${YELLOW}WARNING:${NC} This will remove:"
|
||
|
|
echo "- Hook configuration from Claude Code"
|
||
|
|
echo "- All learned patterns and session data"
|
||
|
|
echo "- Backup files (if in project directory)"
|
||
|
|
echo ""
|
||
|
|
read -p "Are you sure you want to continue? (y/N): " -n 1 -r
|
||
|
|
echo
|
||
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
|
|
echo "Uninstallation cancelled."
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Remove hooks from Claude settings
|
||
|
|
if [ -f "$HOME/.config/claude/settings.json" ]; then
|
||
|
|
echo -n "Removing hooks from Claude settings... "
|
||
|
|
|
||
|
|
# Backup settings
|
||
|
|
cp "$HOME/.config/claude/settings.json" "$HOME/.config/claude/settings.json.backup"
|
||
|
|
|
||
|
|
# Remove hooks configuration
|
||
|
|
python3 << 'EOF'
|
||
|
|
import json
|
||
|
|
import sys
|
||
|
|
|
||
|
|
try:
|
||
|
|
with open('/home/usr/.config/claude/settings.json', 'r') as f:
|
||
|
|
settings = json.load(f)
|
||
|
|
|
||
|
|
# Remove hooks section
|
||
|
|
if 'hooks' in settings:
|
||
|
|
del settings['hooks']
|
||
|
|
|
||
|
|
with open('/home/usr/.config/claude/settings.json', 'w') as f:
|
||
|
|
json.dump(settings, f, indent=2)
|
||
|
|
|
||
|
|
print("SUCCESS")
|
||
|
|
else:
|
||
|
|
print("NO HOOKS FOUND")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"ERROR: {e}")
|
||
|
|
sys.exit(1)
|
||
|
|
EOF
|
||
|
|
|
||
|
|
echo -e "${GREEN}Hooks removed from Claude settings${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}No Claude settings file found${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Remove hooks configuration file
|
||
|
|
if [ -f "$HOOKS_CONFIG_FILE" ]; then
|
||
|
|
echo -n "Removing hooks configuration file... "
|
||
|
|
rm -f "$HOOKS_CONFIG_FILE"
|
||
|
|
echo -e "${GREEN}SUCCESS${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Ask about removing data
|
||
|
|
echo ""
|
||
|
|
read -p "Remove learned patterns and session data? (y/N): " -n 1 -r
|
||
|
|
echo
|
||
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
|
|
echo -n "Removing hook data... "
|
||
|
|
rm -rf ".claude_hooks"
|
||
|
|
rm -f "LAST_SESSION.md" "ACTIVE_TODOS.md" "RECOVERY_GUIDE.md"
|
||
|
|
echo -e "${GREEN}SUCCESS${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Ask about removing project files
|
||
|
|
echo ""
|
||
|
|
read -p "Remove project files (hooks, scripts, etc.)? This cannot be undone! (y/N): " -n 1 -r
|
||
|
|
echo
|
||
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
|
|
CLAUDE_HOOKS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
|
echo -n "Removing project files... "
|
||
|
|
cd ..
|
||
|
|
rm -rf "$CLAUDE_HOOKS_DIR"
|
||
|
|
echo -e "${GREEN}SUCCESS${NC}"
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}Complete uninstallation finished!${NC}"
|
||
|
|
echo "All files have been removed."
|
||
|
|
else
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}Partial uninstallation finished!${NC}"
|
||
|
|
echo "Hooks disabled, but project files remain."
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo -e "${BLUE}Post-uninstallation:${NC}"
|
||
|
|
echo "1. Restart Claude Code to ensure hooks are disabled"
|
||
|
|
echo "2. Check that no hook-related errors appear"
|
||
|
|
echo "3. Your backup files (if any) remain in git history"
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}Claude Code Hooks successfully removed.${NC}"
|