New commands: - /summarize: Save session decisions/preferences to memory - /maintain: Configuration maintenance (validate, backup, restore, etc.) New automation scripts: - backup.sh: Create timestamped config backup (excludes secrets) - restore.sh: Restore config from backup (with validation) Updates: - component-registry.json: Added new commands - commands/README.md: Updated with new entries - automation/README.md: Documented utility scripts 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
116 lines
2.5 KiB
Bash
Executable File
116 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Restore Claude Code configuration from backup
|
|
# Usage: restore.sh [backup-file]
|
|
|
|
set -euo pipefail
|
|
|
|
CLAUDE_DIR="${HOME}/.claude"
|
|
BACKUP_DIR="${CLAUDE_DIR}/backups"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
echo "📦 Claude Code Configuration Restore"
|
|
echo ""
|
|
|
|
# Get backup file
|
|
BACKUP_FILE="${1:-}"
|
|
|
|
if [[ -z "${BACKUP_FILE}" ]]; then
|
|
# List available backups
|
|
echo "Available backups:"
|
|
echo ""
|
|
if ls -1t "${BACKUP_DIR}"/*.tar.gz 2>/dev/null | head -10; then
|
|
echo ""
|
|
echo "Usage: $0 <backup-file>"
|
|
echo "Example: $0 ${BACKUP_DIR}/claude-config-20260101_120000.tar.gz"
|
|
else
|
|
echo " No backups found in ${BACKUP_DIR}"
|
|
fi
|
|
exit 1
|
|
fi
|
|
|
|
# Verify backup exists
|
|
if [[ ! -f "${BACKUP_FILE}" ]]; then
|
|
echo -e "${RED}Error: Backup file not found: ${BACKUP_FILE}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Confirm restore
|
|
echo -e "${YELLOW}Warning: This will overwrite existing configuration!${NC}"
|
|
echo ""
|
|
echo "Backup: ${BACKUP_FILE}"
|
|
echo "Target: ${CLAUDE_DIR}"
|
|
echo ""
|
|
read -p "Continue? [y/N] " -n 1 -r
|
|
echo ""
|
|
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
echo "Cancelled."
|
|
exit 0
|
|
fi
|
|
|
|
# Create temporary directory
|
|
TEMP_DIR=$(mktemp -d)
|
|
|
|
echo ""
|
|
echo "Extracting backup..."
|
|
tar -xzf "${BACKUP_FILE}" -C "${TEMP_DIR}"
|
|
|
|
# Find the extracted directory
|
|
EXTRACTED_DIR=$(find "${TEMP_DIR}" -maxdepth 1 -type d -name "claude-config-*" | head -1)
|
|
|
|
if [[ -z "${EXTRACTED_DIR}" ]]; then
|
|
echo -e "${RED}Error: Invalid backup format${NC}"
|
|
rm -rf "${TEMP_DIR}"
|
|
exit 1
|
|
fi
|
|
|
|
# Items to restore
|
|
RESTORE_ITEMS=(
|
|
"CLAUDE.md"
|
|
"README.md"
|
|
"settings.json"
|
|
".gitignore"
|
|
".claude-plugin"
|
|
"agents"
|
|
"commands"
|
|
"hooks"
|
|
"skills"
|
|
"workflows"
|
|
"state"
|
|
"automation"
|
|
)
|
|
|
|
echo ""
|
|
echo "Restoring files..."
|
|
for item in "${RESTORE_ITEMS[@]}"; do
|
|
if [[ -e "${EXTRACTED_DIR}/${item}" ]]; then
|
|
# Backup existing before overwrite
|
|
if [[ -e "${CLAUDE_DIR}/${item}" ]]; then
|
|
rm -rf "${CLAUDE_DIR}/${item}"
|
|
fi
|
|
cp -r "${EXTRACTED_DIR}/${item}" "${CLAUDE_DIR}/"
|
|
echo -e " ${GREEN}✓${NC} ${item}"
|
|
fi
|
|
done
|
|
|
|
# Cleanup
|
|
rm -rf "${TEMP_DIR}"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✓${NC} Restore complete!"
|
|
echo ""
|
|
echo "Note: You may need to restart Claude Code for changes to take effect."
|
|
echo ""
|
|
|
|
# Run validation
|
|
if [[ -x "${CLAUDE_DIR}/automation/validate-setup.sh" ]]; then
|
|
echo "Running validation..."
|
|
echo ""
|
|
"${CLAUDE_DIR}/automation/validate-setup.sh" || true
|
|
fi
|