Fix: Convert all shell scripts from CRLF to LF
Fixed Windows line endings (CRLF) in all shell scripts to Unix format (LF): - supercharge.sh (main installation script) - agents/*.sh (all agent management scripts) - hooks/*.sh (all hook scripts) - skills/ui-ux-pro-max/scripts/wordpress_safe_update.sh All scripts now pass bash syntax validation.
This commit is contained in:
880
supercharge.sh
880
supercharge.sh
@@ -1,440 +1,440 @@
|
||||
#!/bin/bash
|
||||
################################################################################
|
||||
# SuperCharge Claude Code - Ultimate Installation Script
|
||||
################################################################################
|
||||
# This script transforms any Claude Code installation into a supercharged
|
||||
# version with all customizations, skills, agents, plugins, and integrations.
|
||||
#
|
||||
# Features:
|
||||
# - 30+ Custom Skills (cognitive, development, UI/UX, brainstorming)
|
||||
# - RalphLoop autonomous agent integration
|
||||
# - Multi-AI consultation (Qwen integration)
|
||||
# - Agent management system with sync capabilities
|
||||
# - Custom hooks for session management
|
||||
# - MCP servers integration
|
||||
# - Plugin marketplace setup
|
||||
#
|
||||
# Usage: ./supercharge.sh [options]
|
||||
# --skip-deps Skip dependency installation
|
||||
# --dev-mode Development mode (verbose output)
|
||||
################################################################################
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Claude config directory
|
||||
CLAUDE_DIR="${HOME}/.claude"
|
||||
|
||||
# Backup directory
|
||||
BACKUP_DIR="${HOME}/.claude-backup-$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Flags
|
||||
SKIP_DEPS=false
|
||||
DEV_MODE=false
|
||||
|
||||
################################################################################
|
||||
# Helper Functions
|
||||
################################################################################
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
log_step() {
|
||||
echo -e "${CYAN}${BOLD}==>${NC} ${BOLD}$1${NC}"
|
||||
}
|
||||
|
||||
print_banner() {
|
||||
echo -e "${CYAN}${BOLD}"
|
||||
cat << "EOF"
|
||||
╔═══════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ ███████╗██╗ █████╗ ██████╗ ║
|
||||
║ ██╔════╝██║ ██╔══██╗██╔════╝ ║
|
||||
║ ███████╗██║ ███████║██║ ███╗ ║
|
||||
║ ╚════██║██║ ██╔══██║██║ ██║ ║
|
||||
║ ███████║███████╗██║ ██║╚██████╔╝ ║
|
||||
║ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ║
|
||||
║ ║
|
||||
║ ███████╗██╗ ██╗███████╗███╗ ██╗ ║
|
||||
║ ██╔════╝╚██╗██╔╝██╔════╝████╗ ██║ ║
|
||||
║ █████╗ ╚███╔╝ █████╗ ██╔██╗ ██║ ║
|
||||
║ ██╔══╝ ██╔██╗ ██╔══╝ ██║╚██╗██║ ║
|
||||
║ ███████╗██║██╗██║███████╗██║ ╚████║ ║
|
||||
║ ╚══════╝╚═╝╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ ║
|
||||
║ ║
|
||||
║ Ultimate Installation Script ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════════════════════════╝
|
||||
EOF
|
||||
echo -e "${NC}"
|
||||
}
|
||||
|
||||
check_claude_code() {
|
||||
log_step "Checking for Claude Code installation..."
|
||||
|
||||
if ! command -v claude &> /dev/null; then
|
||||
log_error "Claude Code CLI not found!"
|
||||
echo "Please install Claude Code first: https://claude.com/claude-code"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Claude Code found: $(claude --version 2>/dev/null || echo 'installed')"
|
||||
}
|
||||
|
||||
backup_existing_config() {
|
||||
log_step "Backing up existing configuration..."
|
||||
|
||||
if [ -d "$CLAUDE_DIR" ]; then
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
cp -r "$CLAUDE_DIR" "$BACKUP_DIR/"
|
||||
log_success "Backup created at: $BACKUP_DIR"
|
||||
else
|
||||
log_info "No existing configuration to backup"
|
||||
fi
|
||||
}
|
||||
|
||||
install_dependencies() {
|
||||
if [ "$SKIP_DEPS" = true ]; then
|
||||
log_warn "Skipping dependency installation"
|
||||
return
|
||||
fi
|
||||
|
||||
log_step "Checking and installing dependencies..."
|
||||
|
||||
# Check Python 3
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
log_warn "Python 3 not found. Some features may not work."
|
||||
else
|
||||
log_success "Python 3 found: $(python3 --version)"
|
||||
fi
|
||||
|
||||
# Check Node.js
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_warn "Node.js not found. Some features may not work."
|
||||
else
|
||||
log_success "Node.js found: $(node --version)"
|
||||
fi
|
||||
|
||||
# Check Git
|
||||
if ! command -v git &> /dev/null; then
|
||||
log_error "Git not found. Please install Git first."
|
||||
exit 1
|
||||
else
|
||||
log_success "Git found: $(git --version)"
|
||||
fi
|
||||
|
||||
# Install Ralph Orchestrator if not present
|
||||
if ! command -v ralph &> /dev/null; then
|
||||
log_info "Installing Ralph Orchestrator..."
|
||||
if command -v pip3 &> /dev/null; then
|
||||
pip3 install ralph-orchestrator 2>/dev/null || log_warn "Failed to install Ralph Orchestrator"
|
||||
else
|
||||
log_warn "pip3 not found. Skipping Ralph Orchestrator installation."
|
||||
fi
|
||||
else
|
||||
log_success "Ralph Orchestrator found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_skills() {
|
||||
log_step "Installing custom skills..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/skills"
|
||||
|
||||
# Copy all skills
|
||||
if [ -d "$SCRIPT_DIR/skills" ]; then
|
||||
cp -r "$SCRIPT_DIR/skills/"* "$CLAUDE_DIR/skills/" 2>/dev/null || true
|
||||
local skill_count=$(find "$SCRIPT_DIR/skills" -name "SKILL.md" | wc -l)
|
||||
log_success "Installed $skill_count custom skills"
|
||||
else
|
||||
log_warn "Skills directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_agents() {
|
||||
log_step "Installing agent management system..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/agents"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/agents" ]; then
|
||||
cp -r "$SCRIPT_DIR/agents/"* "$CLAUDE_DIR/agents/" 2>/dev/null || true
|
||||
log_success "Agent management system installed"
|
||||
|
||||
# Make scripts executable
|
||||
find "$CLAUDE_DIR/agents" -name "*.sh" -exec chmod +x {} \;
|
||||
else
|
||||
log_warn "Agents directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_hooks() {
|
||||
log_step "Installing custom hooks..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/hooks"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/hooks" ]; then
|
||||
cp -r "$SCRIPT_DIR/hooks/"* "$CLAUDE_DIR/hooks/" 2>/dev/null || true
|
||||
|
||||
# Make hook scripts executable
|
||||
find "$CLAUDE_DIR/hooks" -name "*.sh" -exec chmod +x {} \;
|
||||
|
||||
log_success "Custom hooks installed"
|
||||
else
|
||||
log_warn "Hooks directory not found"
|
||||
fi
|
||||
|
||||
# Install hooks.json if it doesn't exist
|
||||
if [ -f "$SCRIPT_DIR/templates/hooks.json" ] && [ ! -f "$CLAUDE_DIR/hooks.json" ]; then
|
||||
cp "$SCRIPT_DIR/templates/hooks.json" "$CLAUDE_DIR/hooks.json"
|
||||
log_success "Hooks configuration installed"
|
||||
fi
|
||||
}
|
||||
|
||||
install_commands() {
|
||||
log_step "Installing custom commands..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/commands"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/commands" ]; then
|
||||
cp -r "$SCRIPT_DIR/commands/"* "$CLAUDE_DIR/commands/" 2>/dev/null || true
|
||||
local cmd_count=$(ls -1 "$SCRIPT_DIR/commands" 2>/dev/null | wc -l)
|
||||
log_success "Installed $cmd_count custom commands"
|
||||
else
|
||||
log_warn "Commands directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_plugins() {
|
||||
log_step "Installing plugin references..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/plugins"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/plugins" ]; then
|
||||
cp -r "$SCRIPT_DIR/plugins/"* "$CLAUDE_DIR/plugins/" 2>/dev/null || true
|
||||
local plugin_count=$(find "$SCRIPT_DIR/plugins" -type d -mindepth 1 | wc -l)
|
||||
log_success "Installed $plugin_count plugin references"
|
||||
else
|
||||
log_warn "Plugins directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_binaries() {
|
||||
log_step "Installing custom binaries..."
|
||||
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/bin/ralphloop" ]; then
|
||||
cp "$SCRIPT_DIR/bin/ralphloop" "$HOME/.local/bin/"
|
||||
chmod +x "$HOME/.local/bin/ralphloop"
|
||||
|
||||
# Add to PATH if not already there
|
||||
if ! echo "$PATH" | grep -q "$HOME/.local/bin"; then
|
||||
echo "" >> "$HOME/.bashrc"
|
||||
echo "# SuperCharge Claude Code - Add local bin to PATH" >> "$HOME/.bashrc"
|
||||
echo "export PATH=\"\$HOME/.local/bin:\$PATH\"" >> "$HOME/.bashrc"
|
||||
log_info "Added ~/.local/bin to PATH in .bashrc"
|
||||
fi
|
||||
|
||||
log_success "RalphLoop wrapper installed"
|
||||
else
|
||||
log_warn "RalphLoop binary not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_scripts() {
|
||||
log_step "Installing utility scripts..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/scripts"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/scripts" ]; then
|
||||
cp -r "$SCRIPT_DIR/scripts/"* "$CLAUDE_DIR/scripts/" 2>/dev/null || true
|
||||
|
||||
# Make scripts executable
|
||||
find "$CLAUDE_DIR/scripts" -name "*.sh" -exec chmod +x {} \;
|
||||
|
||||
log_success "Utility scripts installed"
|
||||
else
|
||||
log_warn "Scripts directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_config_templates() {
|
||||
log_step "Installing configuration templates..."
|
||||
|
||||
if [ -d "$SCRIPT_DIR/templates" ]; then
|
||||
# Install config.json if not exists
|
||||
if [ -f "$SCRIPT_DIR/templates/config.json" ] && [ ! -f "$CLAUDE_DIR/config.json" ]; then
|
||||
cp "$SCRIPT_DIR/templates/config.json" "$CLAUDE_DIR/config.json"
|
||||
log_success "config.json installed"
|
||||
fi
|
||||
|
||||
# Merge settings.json
|
||||
if [ -f "$SCRIPT_DIR/templates/settings.json" ]; then
|
||||
if [ -f "$CLAUDE_DIR/settings.json" ]; then
|
||||
# Merge existing settings with template
|
||||
local temp_file=$(mktemp)
|
||||
python3 -c "
|
||||
import json
|
||||
import sys
|
||||
|
||||
try:
|
||||
with open('$CLAUDE_DIR/settings.json', 'r') as f:
|
||||
existing = json.load(f)
|
||||
except:
|
||||
existing = {}
|
||||
|
||||
try:
|
||||
with open('$SCRIPT_DIR/templates/settings.json', 'r') as f:
|
||||
template = json.load(f)
|
||||
except:
|
||||
template = {}
|
||||
|
||||
# Merge: template values take precedence for keys that exist in template
|
||||
for key in template:
|
||||
if key != 'permissions': # Don't override permissions
|
||||
existing[key] = template[key]
|
||||
|
||||
with open('$temp_file', 'w') as f:
|
||||
json.dump(existing, f, indent=2)
|
||||
" 2>/dev/null || cp "$SCRIPT_DIR/templates/settings.json" "$temp_file"
|
||||
mv "$temp_file" "$CLAUDE_DIR/settings.json"
|
||||
else
|
||||
cp "$SCRIPT_DIR/templates/settings.json" "$CLAUDE_DIR/settings.json"
|
||||
fi
|
||||
log_success "settings.json configured"
|
||||
fi
|
||||
|
||||
# Install settings.local.json if not exists
|
||||
if [ -f "$SCRIPT_DIR/templates/settings.local.json" ] && [ ! -f "$CLAUDE_DIR/settings.local.json" ]; then
|
||||
cp "$SCRIPT_DIR/templates/settings.local.json" "$CLAUDE_DIR/settings.local.json"
|
||||
log_success "settings.local.json installed"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
sync_agents() {
|
||||
log_step "Syncing agents from repository..."
|
||||
|
||||
if [ -f "$CLAUDE_DIR/scripts/sync-agents.sh" ]; then
|
||||
bash "$CLAUDE_DIR/scripts/sync-agents.sh" 2>/dev/null || log_warn "Agent sync completed with warnings"
|
||||
log_success "Agent sync completed"
|
||||
else
|
||||
log_warn "sync-agents.sh not found"
|
||||
fi
|
||||
}
|
||||
|
||||
print_summary() {
|
||||
echo ""
|
||||
echo -e "${GREEN}${BOLD}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}${BOLD}║ INSTALLATION COMPLETE! ║${NC}"
|
||||
echo -e "${GREEN}${BOLD}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${BOLD}Your Claude Code installation is now SUPERCHARGED!${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Installed Features:${NC}"
|
||||
echo -e " ${GREEN}✓${NC} 30+ Custom Skills (cognitive, development, UI/UX)"
|
||||
echo -e " ${GREEN}✓${NC} RalphLoop Autonomous Agent Integration"
|
||||
echo -e " ${GREEN}✓${NC} Multi-AI Consultation (Qwen)"
|
||||
echo -e " ${GREEN}✓${NC} Agent Management System"
|
||||
echo -e " ${GREEN}✓${NC} Custom Hooks & Commands"
|
||||
echo -e " ${GREEN}✓${NC} Plugin Marketplace Setup"
|
||||
echo ""
|
||||
echo -e "${CYAN}New Commands Available:${NC}"
|
||||
echo -e " ${YELLOW}/ralph${NC} - Autonomous \"Tackle Until Solved\" agent"
|
||||
echo -e " ${YELLOW}/brainstorm${NC} - Multi-AI brainstorming session"
|
||||
echo -e " ${YELLOW}/write-plan${NC} - Create implementation plans"
|
||||
echo -e " ${YELLOW}/execute-plan${NC} - Execute written plans"
|
||||
echo ""
|
||||
echo -e "${CYAN}Quick Start:${NC}"
|
||||
echo -e " 1. Restart your terminal or run: ${YELLOW}source ~/.bashrc${NC}"
|
||||
echo -e " 2. Run Claude Code: ${YELLOW}claude${NC}"
|
||||
echo -e " 3. Try: ${YELLOW}/ralph \"Design a microservices architecture\"${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Configuration:${NC}"
|
||||
echo -e " Config dir: ${YELLOW}$CLAUDE_DIR${NC}"
|
||||
echo -e " Backup: ${YELLOW}$BACKUP_DIR${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Optional Configuration:${NC}"
|
||||
echo -e " ${YELLOW}export RALPH_AGENT=claude${NC} # Set Ralph agent"
|
||||
echo -e " ${YELLOW}export RALPH_MAX_ITERATIONS=100${NC} # Set max iterations"
|
||||
echo -e " ${YELLOW}export QWEN_CONSULT_MODE=always${NC} # Qwen consultation mode"
|
||||
echo ""
|
||||
echo -e "${GREEN}${BOLD}Enjoy your supercharged Claude Code experience!${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Main Installation
|
||||
################################################################################
|
||||
|
||||
main() {
|
||||
print_banner
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--skip-deps)
|
||||
SKIP_DEPS=true
|
||||
shift
|
||||
;;
|
||||
--dev-mode)
|
||||
DEV_MODE=true
|
||||
set -x
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [options]"
|
||||
echo " --skip-deps Skip dependency installation"
|
||||
echo " --dev-mode Development mode (verbose output)"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Run installation steps
|
||||
check_claude_code
|
||||
backup_existing_config
|
||||
install_dependencies
|
||||
install_skills
|
||||
install_agents
|
||||
install_hooks
|
||||
install_commands
|
||||
install_plugins
|
||||
install_binaries
|
||||
install_scripts
|
||||
install_config_templates
|
||||
sync_agents
|
||||
|
||||
print_summary
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
#!/bin/bash
|
||||
################################################################################
|
||||
# SuperCharge Claude Code - Ultimate Installation Script
|
||||
################################################################################
|
||||
# This script transforms any Claude Code installation into a supercharged
|
||||
# version with all customizations, skills, agents, plugins, and integrations.
|
||||
#
|
||||
# Features:
|
||||
# - 30+ Custom Skills (cognitive, development, UI/UX, brainstorming)
|
||||
# - RalphLoop autonomous agent integration
|
||||
# - Multi-AI consultation (Qwen integration)
|
||||
# - Agent management system with sync capabilities
|
||||
# - Custom hooks for session management
|
||||
# - MCP servers integration
|
||||
# - Plugin marketplace setup
|
||||
#
|
||||
# Usage: ./supercharge.sh [options]
|
||||
# --skip-deps Skip dependency installation
|
||||
# --dev-mode Development mode (verbose output)
|
||||
################################################################################
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Claude config directory
|
||||
CLAUDE_DIR="${HOME}/.claude"
|
||||
|
||||
# Backup directory
|
||||
BACKUP_DIR="${HOME}/.claude-backup-$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Flags
|
||||
SKIP_DEPS=false
|
||||
DEV_MODE=false
|
||||
|
||||
################################################################################
|
||||
# Helper Functions
|
||||
################################################################################
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
log_step() {
|
||||
echo -e "${CYAN}${BOLD}==>${NC} ${BOLD}$1${NC}"
|
||||
}
|
||||
|
||||
print_banner() {
|
||||
echo -e "${CYAN}${BOLD}"
|
||||
cat << "EOF"
|
||||
╔═══════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ ███████╗██╗ █████╗ ██████╗ ║
|
||||
║ ██╔════╝██║ ██╔══██╗██╔════╝ ║
|
||||
║ ███████╗██║ ███████║██║ ███╗ ║
|
||||
║ ╚════██║██║ ██╔══██║██║ ██║ ║
|
||||
║ ███████║███████╗██║ ██║╚██████╔╝ ║
|
||||
║ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ║
|
||||
║ ║
|
||||
║ ███████╗██╗ ██╗███████╗███╗ ██╗ ║
|
||||
║ ██╔════╝╚██╗██╔╝██╔════╝████╗ ██║ ║
|
||||
║ █████╗ ╚███╔╝ █████╗ ██╔██╗ ██║ ║
|
||||
║ ██╔══╝ ██╔██╗ ██╔══╝ ██║╚██╗██║ ║
|
||||
║ ███████╗██║██╗██║███████╗██║ ╚████║ ║
|
||||
║ ╚══════╝╚═╝╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ ║
|
||||
║ ║
|
||||
║ Ultimate Installation Script ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════════════════════════╝
|
||||
EOF
|
||||
echo -e "${NC}"
|
||||
}
|
||||
|
||||
check_claude_code() {
|
||||
log_step "Checking for Claude Code installation..."
|
||||
|
||||
if ! command -v claude &> /dev/null; then
|
||||
log_error "Claude Code CLI not found!"
|
||||
echo "Please install Claude Code first: https://claude.com/claude-code"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Claude Code found: $(claude --version 2>/dev/null || echo 'installed')"
|
||||
}
|
||||
|
||||
backup_existing_config() {
|
||||
log_step "Backing up existing configuration..."
|
||||
|
||||
if [ -d "$CLAUDE_DIR" ]; then
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
cp -r "$CLAUDE_DIR" "$BACKUP_DIR/"
|
||||
log_success "Backup created at: $BACKUP_DIR"
|
||||
else
|
||||
log_info "No existing configuration to backup"
|
||||
fi
|
||||
}
|
||||
|
||||
install_dependencies() {
|
||||
if [ "$SKIP_DEPS" = true ]; then
|
||||
log_warn "Skipping dependency installation"
|
||||
return
|
||||
fi
|
||||
|
||||
log_step "Checking and installing dependencies..."
|
||||
|
||||
# Check Python 3
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
log_warn "Python 3 not found. Some features may not work."
|
||||
else
|
||||
log_success "Python 3 found: $(python3 --version)"
|
||||
fi
|
||||
|
||||
# Check Node.js
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_warn "Node.js not found. Some features may not work."
|
||||
else
|
||||
log_success "Node.js found: $(node --version)"
|
||||
fi
|
||||
|
||||
# Check Git
|
||||
if ! command -v git &> /dev/null; then
|
||||
log_error "Git not found. Please install Git first."
|
||||
exit 1
|
||||
else
|
||||
log_success "Git found: $(git --version)"
|
||||
fi
|
||||
|
||||
# Install Ralph Orchestrator if not present
|
||||
if ! command -v ralph &> /dev/null; then
|
||||
log_info "Installing Ralph Orchestrator..."
|
||||
if command -v pip3 &> /dev/null; then
|
||||
pip3 install ralph-orchestrator 2>/dev/null || log_warn "Failed to install Ralph Orchestrator"
|
||||
else
|
||||
log_warn "pip3 not found. Skipping Ralph Orchestrator installation."
|
||||
fi
|
||||
else
|
||||
log_success "Ralph Orchestrator found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_skills() {
|
||||
log_step "Installing custom skills..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/skills"
|
||||
|
||||
# Copy all skills
|
||||
if [ -d "$SCRIPT_DIR/skills" ]; then
|
||||
cp -r "$SCRIPT_DIR/skills/"* "$CLAUDE_DIR/skills/" 2>/dev/null || true
|
||||
local skill_count=$(find "$SCRIPT_DIR/skills" -name "SKILL.md" | wc -l)
|
||||
log_success "Installed $skill_count custom skills"
|
||||
else
|
||||
log_warn "Skills directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_agents() {
|
||||
log_step "Installing agent management system..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/agents"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/agents" ]; then
|
||||
cp -r "$SCRIPT_DIR/agents/"* "$CLAUDE_DIR/agents/" 2>/dev/null || true
|
||||
log_success "Agent management system installed"
|
||||
|
||||
# Make scripts executable
|
||||
find "$CLAUDE_DIR/agents" -name "*.sh" -exec chmod +x {} \;
|
||||
else
|
||||
log_warn "Agents directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_hooks() {
|
||||
log_step "Installing custom hooks..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/hooks"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/hooks" ]; then
|
||||
cp -r "$SCRIPT_DIR/hooks/"* "$CLAUDE_DIR/hooks/" 2>/dev/null || true
|
||||
|
||||
# Make hook scripts executable
|
||||
find "$CLAUDE_DIR/hooks" -name "*.sh" -exec chmod +x {} \;
|
||||
|
||||
log_success "Custom hooks installed"
|
||||
else
|
||||
log_warn "Hooks directory not found"
|
||||
fi
|
||||
|
||||
# Install hooks.json if it doesn't exist
|
||||
if [ -f "$SCRIPT_DIR/templates/hooks.json" ] && [ ! -f "$CLAUDE_DIR/hooks.json" ]; then
|
||||
cp "$SCRIPT_DIR/templates/hooks.json" "$CLAUDE_DIR/hooks.json"
|
||||
log_success "Hooks configuration installed"
|
||||
fi
|
||||
}
|
||||
|
||||
install_commands() {
|
||||
log_step "Installing custom commands..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/commands"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/commands" ]; then
|
||||
cp -r "$SCRIPT_DIR/commands/"* "$CLAUDE_DIR/commands/" 2>/dev/null || true
|
||||
local cmd_count=$(ls -1 "$SCRIPT_DIR/commands" 2>/dev/null | wc -l)
|
||||
log_success "Installed $cmd_count custom commands"
|
||||
else
|
||||
log_warn "Commands directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_plugins() {
|
||||
log_step "Installing plugin references..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/plugins"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/plugins" ]; then
|
||||
cp -r "$SCRIPT_DIR/plugins/"* "$CLAUDE_DIR/plugins/" 2>/dev/null || true
|
||||
local plugin_count=$(find "$SCRIPT_DIR/plugins" -type d -mindepth 1 | wc -l)
|
||||
log_success "Installed $plugin_count plugin references"
|
||||
else
|
||||
log_warn "Plugins directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_binaries() {
|
||||
log_step "Installing custom binaries..."
|
||||
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
|
||||
if [ -f "$SCRIPT_DIR/bin/ralphloop" ]; then
|
||||
cp "$SCRIPT_DIR/bin/ralphloop" "$HOME/.local/bin/"
|
||||
chmod +x "$HOME/.local/bin/ralphloop"
|
||||
|
||||
# Add to PATH if not already there
|
||||
if ! echo "$PATH" | grep -q "$HOME/.local/bin"; then
|
||||
echo "" >> "$HOME/.bashrc"
|
||||
echo "# SuperCharge Claude Code - Add local bin to PATH" >> "$HOME/.bashrc"
|
||||
echo "export PATH=\"\$HOME/.local/bin:\$PATH\"" >> "$HOME/.bashrc"
|
||||
log_info "Added ~/.local/bin to PATH in .bashrc"
|
||||
fi
|
||||
|
||||
log_success "RalphLoop wrapper installed"
|
||||
else
|
||||
log_warn "RalphLoop binary not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_scripts() {
|
||||
log_step "Installing utility scripts..."
|
||||
|
||||
mkdir -p "$CLAUDE_DIR/scripts"
|
||||
|
||||
if [ -d "$SCRIPT_DIR/scripts" ]; then
|
||||
cp -r "$SCRIPT_DIR/scripts/"* "$CLAUDE_DIR/scripts/" 2>/dev/null || true
|
||||
|
||||
# Make scripts executable
|
||||
find "$CLAUDE_DIR/scripts" -name "*.sh" -exec chmod +x {} \;
|
||||
|
||||
log_success "Utility scripts installed"
|
||||
else
|
||||
log_warn "Scripts directory not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_config_templates() {
|
||||
log_step "Installing configuration templates..."
|
||||
|
||||
if [ -d "$SCRIPT_DIR/templates" ]; then
|
||||
# Install config.json if not exists
|
||||
if [ -f "$SCRIPT_DIR/templates/config.json" ] && [ ! -f "$CLAUDE_DIR/config.json" ]; then
|
||||
cp "$SCRIPT_DIR/templates/config.json" "$CLAUDE_DIR/config.json"
|
||||
log_success "config.json installed"
|
||||
fi
|
||||
|
||||
# Merge settings.json
|
||||
if [ -f "$SCRIPT_DIR/templates/settings.json" ]; then
|
||||
if [ -f "$CLAUDE_DIR/settings.json" ]; then
|
||||
# Merge existing settings with template
|
||||
local temp_file=$(mktemp)
|
||||
python3 -c "
|
||||
import json
|
||||
import sys
|
||||
|
||||
try:
|
||||
with open('$CLAUDE_DIR/settings.json', 'r') as f:
|
||||
existing = json.load(f)
|
||||
except:
|
||||
existing = {}
|
||||
|
||||
try:
|
||||
with open('$SCRIPT_DIR/templates/settings.json', 'r') as f:
|
||||
template = json.load(f)
|
||||
except:
|
||||
template = {}
|
||||
|
||||
# Merge: template values take precedence for keys that exist in template
|
||||
for key in template:
|
||||
if key != 'permissions': # Don't override permissions
|
||||
existing[key] = template[key]
|
||||
|
||||
with open('$temp_file', 'w') as f:
|
||||
json.dump(existing, f, indent=2)
|
||||
" 2>/dev/null || cp "$SCRIPT_DIR/templates/settings.json" "$temp_file"
|
||||
mv "$temp_file" "$CLAUDE_DIR/settings.json"
|
||||
else
|
||||
cp "$SCRIPT_DIR/templates/settings.json" "$CLAUDE_DIR/settings.json"
|
||||
fi
|
||||
log_success "settings.json configured"
|
||||
fi
|
||||
|
||||
# Install settings.local.json if not exists
|
||||
if [ -f "$SCRIPT_DIR/templates/settings.local.json" ] && [ ! -f "$CLAUDE_DIR/settings.local.json" ]; then
|
||||
cp "$SCRIPT_DIR/templates/settings.local.json" "$CLAUDE_DIR/settings.local.json"
|
||||
log_success "settings.local.json installed"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
sync_agents() {
|
||||
log_step "Syncing agents from repository..."
|
||||
|
||||
if [ -f "$CLAUDE_DIR/scripts/sync-agents.sh" ]; then
|
||||
bash "$CLAUDE_DIR/scripts/sync-agents.sh" 2>/dev/null || log_warn "Agent sync completed with warnings"
|
||||
log_success "Agent sync completed"
|
||||
else
|
||||
log_warn "sync-agents.sh not found"
|
||||
fi
|
||||
}
|
||||
|
||||
print_summary() {
|
||||
echo ""
|
||||
echo -e "${GREEN}${BOLD}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}${BOLD}║ INSTALLATION COMPLETE! ║${NC}"
|
||||
echo -e "${GREEN}${BOLD}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${BOLD}Your Claude Code installation is now SUPERCHARGED!${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Installed Features:${NC}"
|
||||
echo -e " ${GREEN}✓${NC} 30+ Custom Skills (cognitive, development, UI/UX)"
|
||||
echo -e " ${GREEN}✓${NC} RalphLoop Autonomous Agent Integration"
|
||||
echo -e " ${GREEN}✓${NC} Multi-AI Consultation (Qwen)"
|
||||
echo -e " ${GREEN}✓${NC} Agent Management System"
|
||||
echo -e " ${GREEN}✓${NC} Custom Hooks & Commands"
|
||||
echo -e " ${GREEN}✓${NC} Plugin Marketplace Setup"
|
||||
echo ""
|
||||
echo -e "${CYAN}New Commands Available:${NC}"
|
||||
echo -e " ${YELLOW}/ralph${NC} - Autonomous \"Tackle Until Solved\" agent"
|
||||
echo -e " ${YELLOW}/brainstorm${NC} - Multi-AI brainstorming session"
|
||||
echo -e " ${YELLOW}/write-plan${NC} - Create implementation plans"
|
||||
echo -e " ${YELLOW}/execute-plan${NC} - Execute written plans"
|
||||
echo ""
|
||||
echo -e "${CYAN}Quick Start:${NC}"
|
||||
echo -e " 1. Restart your terminal or run: ${YELLOW}source ~/.bashrc${NC}"
|
||||
echo -e " 2. Run Claude Code: ${YELLOW}claude${NC}"
|
||||
echo -e " 3. Try: ${YELLOW}/ralph \"Design a microservices architecture\"${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Configuration:${NC}"
|
||||
echo -e " Config dir: ${YELLOW}$CLAUDE_DIR${NC}"
|
||||
echo -e " Backup: ${YELLOW}$BACKUP_DIR${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Optional Configuration:${NC}"
|
||||
echo -e " ${YELLOW}export RALPH_AGENT=claude${NC} # Set Ralph agent"
|
||||
echo -e " ${YELLOW}export RALPH_MAX_ITERATIONS=100${NC} # Set max iterations"
|
||||
echo -e " ${YELLOW}export QWEN_CONSULT_MODE=always${NC} # Qwen consultation mode"
|
||||
echo ""
|
||||
echo -e "${GREEN}${BOLD}Enjoy your supercharged Claude Code experience!${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Main Installation
|
||||
################################################################################
|
||||
|
||||
main() {
|
||||
print_banner
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--skip-deps)
|
||||
SKIP_DEPS=true
|
||||
shift
|
||||
;;
|
||||
--dev-mode)
|
||||
DEV_MODE=true
|
||||
set -x
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [options]"
|
||||
echo " --skip-deps Skip dependency installation"
|
||||
echo " --dev-mode Development mode (verbose output)"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Run installation steps
|
||||
check_claude_code
|
||||
backup_existing_config
|
||||
install_dependencies
|
||||
install_skills
|
||||
install_agents
|
||||
install_hooks
|
||||
install_commands
|
||||
install_plugins
|
||||
install_binaries
|
||||
install_scripts
|
||||
install_config_templates
|
||||
sync_agents
|
||||
|
||||
print_summary
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user