330 lines
10 KiB
Bash
Executable File
330 lines
10 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
################################################################################
|
|
# Claude Code Customizations - Master Control Script
|
|
# Provides an interactive menu for all setup operations
|
|
################################################################################
|
|
|
|
# Colors
|
|
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'
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
# Script paths
|
|
INSTALL_SCRIPT="$SCRIPT_DIR/install-claude-customizations.sh"
|
|
EXPORT_SCRIPT="$SCRIPT_DIR/export-claude-customizations.sh"
|
|
PACKAGE_SCRIPT="$SCRIPT_DIR/create-complete-package.sh"
|
|
VERIFY_SCRIPT="$SCRIPT_DIR/verify-claude-setup.sh"
|
|
|
|
# Helper functions
|
|
print_header() {
|
|
clear
|
|
echo -e "${CYAN}╔══════════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${CYAN}║${NC} ${BOLD}Claude Code Customizations - Setup Manager${NC} ${CYAN}║${NC}"
|
|
echo -e "${CYAN}╚══════════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
}
|
|
|
|
print_menu() {
|
|
print_header
|
|
echo -e "${BOLD}Main Menu:${NC}"
|
|
echo ""
|
|
echo -e " ${GREEN}1${NC}) 📦 Create Complete Package (recommended for distribution)"
|
|
echo -e " ${GREEN}2${NC}) 📥 Install Customizations (on new machine)"
|
|
echo -e " ${GREEN}3${NC}) 📤 Export Customizations (backup/transfer)"
|
|
echo -e " ${GREEN}4${NC}) ✅ Verify Installation"
|
|
echo -e " ${GREEN}5${NC}) 📋 Show Package Contents"
|
|
echo -e " ${GREEN}6${NC}) 📖 View Documentation"
|
|
echo -e " ${GREEN}7${NC}) 🧹 Clean Backup Files"
|
|
echo ""
|
|
echo -e " ${YELLOW}0${NC}) 🚪 Exit"
|
|
echo ""
|
|
echo -ne "${CYAN}Select an option: ${NC}"
|
|
}
|
|
|
|
check_script() {
|
|
local script="$1"
|
|
local name="$2"
|
|
|
|
if [ ! -f "$script" ]; then
|
|
echo -e "${RED}✗ Error: $name not found at $script${NC}"
|
|
return 1
|
|
fi
|
|
|
|
if [ ! -x "$script" ]; then
|
|
echo -e "${YELLOW}⚠ Making $name executable...${NC}"
|
|
chmod +x "$script"
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
create_package() {
|
|
print_header
|
|
echo -e "${BOLD}Create Complete Package${NC}"
|
|
echo "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo "This will create a complete package with all agents, plugins,"
|
|
echo "and configurations ready for distribution."
|
|
echo ""
|
|
read -p "Continue? (y/N): " confirm
|
|
|
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
return
|
|
fi
|
|
|
|
if check_script "$PACKAGE_SCRIPT" "Package Script"; then
|
|
echo ""
|
|
bash "$PACKAGE_SCRIPT"
|
|
fi
|
|
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
}
|
|
|
|
install_customizations() {
|
|
print_header
|
|
echo -e "${BOLD}Install Customizations${NC}"
|
|
echo "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo "This will install Claude Code customizations on this machine."
|
|
echo ""
|
|
echo "Note: If you're creating a complete package, use option 1 instead."
|
|
echo ""
|
|
|
|
if check_script "$INSTALL_SCRIPT" "Install Script"; then
|
|
echo ""
|
|
bash "$INSTALL_SCRIPT"
|
|
fi
|
|
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
}
|
|
|
|
export_customizations() {
|
|
print_header
|
|
echo -e "${BOLD}Export Customizations${NC}"
|
|
echo "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo "This will export your current customizations to a package"
|
|
echo "for backup or transfer to another machine."
|
|
echo ""
|
|
read -p "Continue? (y/N): " confirm
|
|
|
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
return
|
|
fi
|
|
|
|
if check_script "$EXPORT_SCRIPT" "Export Script"; then
|
|
echo ""
|
|
bash "$EXPORT_SCRIPT"
|
|
fi
|
|
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
}
|
|
|
|
verify_installation() {
|
|
print_header
|
|
|
|
if check_script "$VERIFY_SCRIPT" "Verify Script"; then
|
|
bash "$VERIFY_SCRIPT"
|
|
fi
|
|
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
}
|
|
|
|
show_contents() {
|
|
print_header
|
|
echo -e "${BOLD}Package Contents${NC}"
|
|
echo "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
CLAUDE_DIR="$HOME/.claude"
|
|
|
|
if [ ! -d "$CLAUDE_DIR" ]; then
|
|
echo -e "${RED}No Claude Code directory found at $CLAUDE_DIR${NC}"
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
return
|
|
fi
|
|
|
|
echo -e "${CYAN}Agent Categories:${NC}"
|
|
for category in engineering marketing product studio-operations project-management testing design bonus; do
|
|
if [ -d "$CLAUDE_DIR/agents/$category" ]; then
|
|
count=$(ls -1 "$CLAUDE_DIR/agents/$category"/*.md 2>/dev/null | wc -l)
|
|
if [ $count -gt 0 ]; then
|
|
printf " %-25s %2d agents\n" "$category" "$count"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Configuration Files:${NC}"
|
|
echo " settings.json"
|
|
echo " settings.local.json"
|
|
echo " plugins/installed_plugins.json"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}MCP Tools:${NC}"
|
|
echo " • zai-mcp-server (vision analysis)"
|
|
echo " • web-search-prime"
|
|
echo " • web-reader"
|
|
echo " • zread (GitHub)"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Skills:${NC}"
|
|
echo " • glm-plan-bug:case-feedback"
|
|
echo " • glm-plan-usage:usage-query"
|
|
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
}
|
|
|
|
view_documentation() {
|
|
print_header
|
|
echo -e "${BOLD}Documentation${NC}"
|
|
echo "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
DOCS=(
|
|
"SCRIPTS-GUIDE.md:Script usage guide"
|
|
"CLAUDE-CUSTOMIZATIONS-README.md:Complete feature documentation"
|
|
)
|
|
|
|
echo "Available documentation:"
|
|
echo ""
|
|
|
|
for doc in "${DOCS[@]}"; do
|
|
file="${doc%%:*}"
|
|
desc="${doc##*:}"
|
|
if [ -f "$SCRIPT_DIR/$file" ]; then
|
|
echo -e " ${GREEN}✓${NC} $file"
|
|
echo " $desc"
|
|
else
|
|
echo -e " ${RED}✗${NC} $file (not found)"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Would you like to view a document?"
|
|
echo " 1) SCRIPTS-GUIDE.md"
|
|
echo " 2) CLAUDE-CUSTOMIZATIONS-README.md"
|
|
echo " 0) Back"
|
|
echo ""
|
|
read -p "Select: " doc_choice
|
|
|
|
case $doc_choice in
|
|
1)
|
|
if [ -f "$SCRIPT_DIR/SCRIPTS-GUIDE.md" ]; then
|
|
less "$SCRIPT_DIR/SCRIPTS-GUIDE.md"
|
|
fi
|
|
;;
|
|
2)
|
|
if [ -f "$SCRIPT_DIR/CLAUDE-CUSTOMIZATIONS-README.md" ]; then
|
|
less "$SCRIPT_DIR/CLAUDE-CUSTOMIZATIONS-README.md"
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
clean_backups() {
|
|
print_header
|
|
echo -e "${BOLD}Clean Backup Files${NC}"
|
|
echo "═══════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# Find backup directories
|
|
BACKUPS=$(find "$HOME" -maxdepth 1 -name ".claude-backup-*" -type d 2>/dev/null)
|
|
PACKAGES=$(find "$HOME" -maxdepth 1 -name "claude-customizations-*.tar.gz" -type f 2>/dev/null)
|
|
EXPORT_DIRS=$(find "$HOME" -maxdepth 1 -name "claude-*-export" -type d 2>/dev/null)
|
|
|
|
BACKUP_COUNT=$(echo "$BACKUPS" | grep -c "^" || echo 0)
|
|
PACKAGE_COUNT=$(echo "$PACKAGES" | grep -c "^" || echo 0)
|
|
EXPORT_COUNT=$(echo "$EXPORT_DIRS" | grep -c "^" || echo 0)
|
|
|
|
echo "Found:"
|
|
echo " • $BACKUP_COUNT backup directories"
|
|
echo " • $PACKAGE_COUNT package archives"
|
|
echo " • $EXPORT_COUNT export directories"
|
|
echo ""
|
|
|
|
if [ $((BACKUP_COUNT + PACKAGE_COUNT + EXPORT_COUNT)) -eq 0 ]; then
|
|
echo -e "${GREEN}No backup files to clean${NC}"
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
return
|
|
fi
|
|
|
|
read -p "Clean all backup files? (y/N): " confirm
|
|
|
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
return
|
|
fi
|
|
|
|
echo ""
|
|
echo "Cleaning..."
|
|
|
|
if [ -n "$BACKUPS" ]; then
|
|
echo "$BACKUPS" | while read -r backup; do
|
|
echo " Removing: $backup"
|
|
rm -rf "$backup"
|
|
done
|
|
fi
|
|
|
|
if [ -n "$PACKAGES" ]; then
|
|
echo "$PACKAGES" | while read -r package; do
|
|
echo " Removing: $package"
|
|
rm -f "$package"
|
|
done
|
|
fi
|
|
|
|
if [ -n "$EXPORT_DIRS" ]; then
|
|
echo "$EXPORT_DIRS" | while read -r export_dir; do
|
|
echo " Removing: $export_dir"
|
|
rm -rf "$export_dir"
|
|
done
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✓ Cleanup complete${NC}"
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
}
|
|
|
|
# Main loop
|
|
main() {
|
|
while true; do
|
|
print_menu
|
|
read -r choice
|
|
echo ""
|
|
|
|
case $choice in
|
|
1) create_package ;;
|
|
2) install_customizations ;;
|
|
3) export_customizations ;;
|
|
4) verify_installation ;;
|
|
5) show_contents ;;
|
|
6) view_documentation ;;
|
|
7) clean_backups ;;
|
|
0)
|
|
echo "Goodbye!"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}Invalid option. Please try again.${NC}"
|
|
sleep 1
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Run main function
|
|
main
|