Features: - New install-claude-code.sh script for automated Claude Code installation - Z.AI API integration (GLM models: glm-4.5-air, glm-4.7) - Automated and manual installation modes - Supercharge.sh now offers to install Claude Code if not present - Updated README with comprehensive Claude Code installation guide Z.AI Models: - glm-4.5-air: Fast, efficient model (Haiku class) - glm-4.7: Powerful model (Sonnet/Opus class) Documentation: https://docs.z.ai/devpack/tool/claude
491 lines
17 KiB
Bash
Executable File
491 lines
17 KiB
Bash
Executable File
#!/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
|
|
# - Optional Claude Code installation with Z.AI API support
|
|
#
|
|
# Usage: ./supercharge.sh [options]
|
|
# --skip-deps Skip dependency installation
|
|
# --dev-mode Development mode (verbose output)
|
|
#
|
|
# For Claude Code installation: ./install-claude-code.sh [options]
|
|
# --auto Automatic installation with API key prompt (default)
|
|
# --manual Show manual installation steps only
|
|
# --skip-install Skip Claude Code installation, just configure API
|
|
################################################################################
|
|
|
|
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_warn "Claude Code CLI not found!"
|
|
echo ""
|
|
echo -e "${YELLOW}Claude Code is required to use these customizations.${NC}"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " 1. Install Claude Code with Z.AI API support (recommended)"
|
|
echo " 2. Install manually later"
|
|
echo " 3. Exit to install first"
|
|
echo ""
|
|
read -p "Choose option [1/2/3]: " -n 1 -r choice
|
|
echo ""
|
|
|
|
case $choice in
|
|
1)
|
|
log_info "Running Claude Code installer..."
|
|
bash "$SCRIPT_DIR/install-claude-code.sh" --auto
|
|
if ! command -v claude &> /dev/null; then
|
|
log_error "Claude Code installation failed. Please install manually."
|
|
exit 1
|
|
fi
|
|
log_success "Claude Code installed successfully"
|
|
;;
|
|
2)
|
|
log_warn "Skipping Claude Code installation"
|
|
log_info "You can install it later with: ./install-claude-code.sh"
|
|
return 1
|
|
;;
|
|
3)
|
|
log_info "Please install Claude Code first:"
|
|
echo " npm install -g @anthropic-ai/claude-code"
|
|
echo " Or run: ./install-claude-code.sh"
|
|
exit 1
|
|
;;
|
|
*)
|
|
log_error "Invalid choice"
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
log_success "Claude Code found: $(claude --version 2>/dev/null || echo 'installed')"
|
|
return 0
|
|
}
|
|
|
|
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
|
|
if ! check_claude_code; then
|
|
log_info "Customizations installed. Install Claude Code to use them."
|
|
echo ""
|
|
echo -e "${CYAN}Install Claude Code:${NC}"
|
|
echo " npm install -g @anthropic-ai/claude-code"
|
|
echo " Or run: ./install-claude-code.sh"
|
|
echo ""
|
|
exit 0
|
|
fi
|
|
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 "$@"
|