mirror of
https://github.com/SuperClaude-Org/SuperClaude_Framework.git
synced 2025-12-17 09:46:06 +00:00
364 lines
10 KiB
Bash
364 lines
10 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
################################################################################
|
|||
|
|
# SuperClaude Framework Installation Script
|
|||
|
|
################################################################################
|
|||
|
|
#
|
|||
|
|
# This script installs SuperClaude Framework directly from the Git repository.
|
|||
|
|
# It performs the following steps:
|
|||
|
|
# 1. Checks prerequisites (Python 3.10+, UV package manager)
|
|||
|
|
# 2. Installs SuperClaude package in editable mode
|
|||
|
|
# 3. Installs 30 slash commands to ~/.claude/commands/
|
|||
|
|
# 4. Verifies installation
|
|||
|
|
# 5. Provides next steps guidance
|
|||
|
|
#
|
|||
|
|
# Usage:
|
|||
|
|
# ./install.sh # Interactive installation
|
|||
|
|
# ./install.sh --yes # Non-interactive (auto-yes to prompts)
|
|||
|
|
# ./install.sh --help # Show help message
|
|||
|
|
#
|
|||
|
|
################################################################################
|
|||
|
|
|
|||
|
|
set -e # Exit on error
|
|||
|
|
|
|||
|
|
# Color codes for output
|
|||
|
|
readonly RED='\033[0;31m'
|
|||
|
|
readonly GREEN='\033[0;32m'
|
|||
|
|
readonly YELLOW='\033[1;33m'
|
|||
|
|
readonly BLUE='\033[0;34m'
|
|||
|
|
readonly CYAN='\033[0;36m'
|
|||
|
|
readonly NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
# Script directory
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
PROJECT_ROOT="$SCRIPT_DIR"
|
|||
|
|
|
|||
|
|
# Installation options
|
|||
|
|
AUTO_YES=false
|
|||
|
|
|
|||
|
|
################################################################################
|
|||
|
|
# Helper Functions
|
|||
|
|
################################################################################
|
|||
|
|
|
|||
|
|
print_header() {
|
|||
|
|
printf "%b\n" "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|||
|
|
printf "%b\n" "${CYAN}$1${NC}"
|
|||
|
|
printf "%b\n" "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
print_success() {
|
|||
|
|
printf "%b\n" "${GREEN}✅ $1${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
print_error() {
|
|||
|
|
printf "%b\n" "${RED}❌ $1${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
print_warning() {
|
|||
|
|
printf "%b\n" "${YELLOW}⚠️ $1${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
print_info() {
|
|||
|
|
printf "%b\n" "${BLUE}ℹ️ $1${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
print_step() {
|
|||
|
|
printf "%b\n" "${CYAN}🔹 $1${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
confirm() {
|
|||
|
|
if [ "$AUTO_YES" = true ]; then
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
local prompt="$1"
|
|||
|
|
local default="${2:-y}"
|
|||
|
|
|
|||
|
|
if [ "$default" = "y" ]; then
|
|||
|
|
prompt="$prompt [Y/n]: "
|
|||
|
|
else
|
|||
|
|
prompt="$prompt [y/N]: "
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
read -p "$prompt" -r response
|
|||
|
|
response=${response:-$default}
|
|||
|
|
|
|||
|
|
if [[ "$response" =~ ^[Yy]$ ]]; then
|
|||
|
|
return 0
|
|||
|
|
else
|
|||
|
|
return 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
################################################################################
|
|||
|
|
# Prerequisite Checks
|
|||
|
|
################################################################################
|
|||
|
|
|
|||
|
|
check_python() {
|
|||
|
|
print_step "Checking Python installation..."
|
|||
|
|
|
|||
|
|
if ! command -v python3 &> /dev/null; then
|
|||
|
|
print_error "Python 3 is not installed"
|
|||
|
|
print_info "Please install Python 3.10 or higher from https://www.python.org/"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
local python_version=$(python3 --version 2>&1 | awk '{print $2}')
|
|||
|
|
local major_version=$(echo "$python_version" | cut -d. -f1)
|
|||
|
|
local minor_version=$(echo "$python_version" | cut -d. -f2)
|
|||
|
|
|
|||
|
|
if [ "$major_version" -lt 3 ] || ([ "$major_version" -eq 3 ] && [ "$minor_version" -lt 10 ]); then
|
|||
|
|
print_error "Python $python_version found, but Python 3.10+ is required"
|
|||
|
|
print_info "Please upgrade Python from https://www.python.org/"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
print_success "Python $python_version found"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
check_git() {
|
|||
|
|
print_step "Checking Git installation..."
|
|||
|
|
|
|||
|
|
if ! command -v git &> /dev/null; then
|
|||
|
|
print_warning "Git is not installed"
|
|||
|
|
print_info "Git is recommended for development. Install from https://git-scm.com/"
|
|||
|
|
else
|
|||
|
|
local git_version=$(git --version 2>&1 | awk '{print $3}')
|
|||
|
|
print_success "Git $git_version found"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
check_uv() {
|
|||
|
|
print_step "Checking UV package manager..."
|
|||
|
|
|
|||
|
|
if ! command -v uv &> /dev/null; then
|
|||
|
|
print_warning "UV package manager is not installed"
|
|||
|
|
return 1
|
|||
|
|
else
|
|||
|
|
local uv_version=$(uv --version 2>&1 | awk '{print $2}')
|
|||
|
|
print_success "UV $uv_version found"
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
install_uv() {
|
|||
|
|
print_step "Installing UV package manager..."
|
|||
|
|
|
|||
|
|
if ! confirm "Would you like to install UV now?"; then
|
|||
|
|
print_error "UV is required for SuperClaude installation"
|
|||
|
|
print_info "You can install UV manually: curl -LsSf https://astral.sh/uv/install.sh | sh"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
print_info "Installing UV (this may take a moment)..."
|
|||
|
|
if curl -LsSf https://astral.sh/uv/install.sh | sh; then
|
|||
|
|
print_success "UV installed successfully"
|
|||
|
|
|
|||
|
|
# Add UV to PATH for current session
|
|||
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|||
|
|
|
|||
|
|
# Verify UV is now available
|
|||
|
|
if ! command -v uv &> /dev/null; then
|
|||
|
|
print_warning "UV installed but not in PATH"
|
|||
|
|
print_info "Please restart your terminal or run: source ~/.bashrc (or ~/.zshrc)"
|
|||
|
|
print_info "Then run this script again"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
print_error "Failed to install UV"
|
|||
|
|
print_info "Please install UV manually: https://github.com/astral-sh/uv"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
################################################################################
|
|||
|
|
# Installation Functions
|
|||
|
|
################################################################################
|
|||
|
|
|
|||
|
|
install_package() {
|
|||
|
|
print_step "Installing SuperClaude package..."
|
|||
|
|
|
|||
|
|
cd "$PROJECT_ROOT"
|
|||
|
|
|
|||
|
|
# Check if pyproject.toml exists
|
|||
|
|
if [ ! -f "pyproject.toml" ]; then
|
|||
|
|
print_error "pyproject.toml not found in $PROJECT_ROOT"
|
|||
|
|
print_info "Are you running this script from the SuperClaude repository root?"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Install in editable mode with dev dependencies
|
|||
|
|
print_info "Running: uv pip install -e \".[dev]\""
|
|||
|
|
if uv pip install -e ".[dev]"; then
|
|||
|
|
print_success "SuperClaude package installed successfully"
|
|||
|
|
else
|
|||
|
|
print_error "Failed to install SuperClaude package"
|
|||
|
|
print_info "Try running manually: uv pip install -e \".[dev]\""
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
install_commands() {
|
|||
|
|
print_step "Installing slash commands..."
|
|||
|
|
|
|||
|
|
# Check if superclaude command is available
|
|||
|
|
if ! command -v superclaude &> /dev/null; then
|
|||
|
|
print_error "superclaude command not found"
|
|||
|
|
print_info "Package installation may have failed"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
print_info "Installing 30 slash commands to ~/.claude/commands/sc/"
|
|||
|
|
if superclaude install; then
|
|||
|
|
print_success "Slash commands installed successfully"
|
|||
|
|
else
|
|||
|
|
print_error "Failed to install slash commands"
|
|||
|
|
print_info "Try running manually: superclaude install"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
verify_installation() {
|
|||
|
|
print_step "Verifying installation..."
|
|||
|
|
|
|||
|
|
# Check package version
|
|||
|
|
local version=$(superclaude --version 2>&1)
|
|||
|
|
print_info "Installed version: $version"
|
|||
|
|
|
|||
|
|
# Run doctor command
|
|||
|
|
print_info "Running health check..."
|
|||
|
|
if superclaude doctor; then
|
|||
|
|
print_success "Installation verified successfully"
|
|||
|
|
else
|
|||
|
|
print_warning "Health check completed with warnings"
|
|||
|
|
print_info "You can run 'superclaude doctor' anytime to check status"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# List installed commands
|
|||
|
|
print_info "Installed commands:"
|
|||
|
|
superclaude install --list | head -n 10
|
|||
|
|
echo " ... and more (30 commands total)"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
################################################################################
|
|||
|
|
# Main Installation Flow
|
|||
|
|
################################################################################
|
|||
|
|
|
|||
|
|
show_help() {
|
|||
|
|
cat << EOF
|
|||
|
|
SuperClaude Framework Installation Script
|
|||
|
|
|
|||
|
|
Usage:
|
|||
|
|
./install.sh [OPTIONS]
|
|||
|
|
|
|||
|
|
Options:
|
|||
|
|
--yes Non-interactive mode (auto-yes to all prompts)
|
|||
|
|
--help Show this help message
|
|||
|
|
|
|||
|
|
Description:
|
|||
|
|
Installs SuperClaude Framework directly from the Git repository.
|
|||
|
|
Performs installation in editable/development mode with all features.
|
|||
|
|
|
|||
|
|
Requirements:
|
|||
|
|
- Python 3.10 or higher
|
|||
|
|
- UV package manager (will be installed if missing)
|
|||
|
|
|
|||
|
|
Examples:
|
|||
|
|
./install.sh # Interactive installation
|
|||
|
|
./install.sh --yes # Non-interactive installation
|
|||
|
|
|
|||
|
|
For more information:
|
|||
|
|
https://github.com/SuperClaude-Org/SuperClaude_Framework
|
|||
|
|
EOF
|
|||
|
|
exit 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
parse_args() {
|
|||
|
|
while [[ $# -gt 0 ]]; do
|
|||
|
|
case $1 in
|
|||
|
|
--yes|-y)
|
|||
|
|
AUTO_YES=true
|
|||
|
|
shift
|
|||
|
|
;;
|
|||
|
|
--help|-h)
|
|||
|
|
show_help
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
print_error "Unknown option: $1"
|
|||
|
|
echo "Run './install.sh --help' for usage information"
|
|||
|
|
exit 1
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
done
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main() {
|
|||
|
|
# Parse command line arguments
|
|||
|
|
parse_args "$@"
|
|||
|
|
|
|||
|
|
# Print header
|
|||
|
|
clear
|
|||
|
|
print_header "🚀 SuperClaude Framework Installation"
|
|||
|
|
echo ""
|
|||
|
|
print_info "This script will install SuperClaude Framework in development mode"
|
|||
|
|
print_info "Installation location: $PROJECT_ROOT"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
if [ "$AUTO_YES" != true ]; then
|
|||
|
|
if ! confirm "Continue with installation?"; then
|
|||
|
|
print_info "Installation cancelled"
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Phase 1: Check prerequisites
|
|||
|
|
print_header "📋 Phase 1: Checking Prerequisites"
|
|||
|
|
check_python
|
|||
|
|
check_git
|
|||
|
|
if ! check_uv; then
|
|||
|
|
install_uv
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Phase 2: Install package
|
|||
|
|
print_header "📦 Phase 2: Installing SuperClaude Package"
|
|||
|
|
install_package
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Phase 3: Install commands
|
|||
|
|
print_header "⚙️ Phase 3: Installing Slash Commands"
|
|||
|
|
install_commands
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Phase 4: Verify installation
|
|||
|
|
print_header "✅ Phase 4: Verifying Installation"
|
|||
|
|
verify_installation
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Phase 5: Next steps
|
|||
|
|
print_header "🎉 Installation Complete!"
|
|||
|
|
echo ""
|
|||
|
|
print_success "SuperClaude Framework is now installed!"
|
|||
|
|
echo ""
|
|||
|
|
print_info "Next Steps:"
|
|||
|
|
echo " 1. Run health check: superclaude doctor"
|
|||
|
|
echo " 2. View all commands: superclaude install --list"
|
|||
|
|
echo " 3. Try a command: /sc:help"
|
|||
|
|
echo ""
|
|||
|
|
print_info "Optional - Install MCP Servers for enhanced features:"
|
|||
|
|
echo " • List available servers: superclaude mcp --list"
|
|||
|
|
echo " • Interactive installation: superclaude mcp"
|
|||
|
|
echo " • Specific servers: superclaude mcp --servers tavily context7"
|
|||
|
|
echo ""
|
|||
|
|
print_info "Documentation:"
|
|||
|
|
echo " • Quick Start: docs/getting-started/quick-start.md"
|
|||
|
|
echo " • User Guide: docs/user-guide/"
|
|||
|
|
echo " • Commands: docs/reference/commands-list.md"
|
|||
|
|
echo ""
|
|||
|
|
print_success "Happy coding with SuperClaude! 🚀"
|
|||
|
|
echo ""
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Run main function
|
|||
|
|
main "$@"
|