#!/bin/bash # # Setup script for workflow template # - Installs pnpm if missing # - Installs dependencies # - Sets up pre-commit hook # - Installs Feynman skill and memory (if Feynman detected) # set -e echo "==========================================" echo "Workflow Template Setup" echo "==========================================" echo "" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # ============================================ # Step 0: Check for feynman directory # ============================================ FEYNMAN_DIR="" FEYNMAN_SKILLS_DIR="" FEYNMAN_DETECTED=false # Check common feynman locations if [ -d "$HOME/.feynman/agent/skills" ]; then FEYNMAN_DIR="$HOME/.feynman" FEYNMAN_SKILLS_DIR="$HOME/.feynman/agent/skills" FEYNMAN_DETECTED=true elif [ -d "$HOME/.config/feynman/agent/skills" ]; then FEYNMAN_DIR="$HOME/.config/feynman" FEYNMAN_SKILLS_DIR="$HOME/.config/feynman/agent/skills" FEYNMAN_DETECTED=true fi # Check if skill already installed SKILL_INSTALLED=false if [ -d "feynman/skills/workflow-bootstrap" ]; then if [ "$FEYNMAN_DETECTED" = true ] && [ -d "$FEYNMAN_SKILLS_DIR/workflow-bootstrap" ]; then SKILL_INSTALLED=true fi fi # ============================================ # Step 1: Check/install pnpm echo "Checking for pnpm..." if command -v pnpm &> /dev/null; then echo -e "${GREEN}pnpm found: $(pnpm --version)${NC}" else echo -e "${YELLOW}pnpm not found. Installing...${NC}" # Try corepack first (ships with Node 16+) if command -v corepack &> /dev/null; then echo "Using corepack to enable pnpm..." corepack enable corepack prepare pnpm@latest --activate # Try npm as fallback elif command -v npm &> /dev/null; then echo "Using npm to install pnpm globally..." npm install -g pnpm else echo "" echo -e "${RED}ERROR: Neither pnpm, corepack, nor npm found.${NC}" echo "" echo "Please install Node.js first:" echo " - https://nodejs.org (recommended)" echo " - Or via your system's package manager" echo "" echo "After installing Node.js, re-run this setup:" echo " pnpm run setup" echo "" exit 1 fi echo -e "${GREEN}pnpm installed: $(pnpm --version)${NC}" fi echo "" # Step 2: Install dependencies echo "Installing dependencies..." pnpm install # Step 3: Install pre-commit hook echo "" echo "Setting up pre-commit hook..." # Detect git directory if [ -d ".git" ]; then mkdir -p .git/hooks else echo -e "${YELLOW}Warning: .git directory not found. Run 'git init' first if this is a new repo.${NC}" echo "Creating hooks directory anyway..." mkdir -p .git/hooks fi # Create pre-commit hook cat > .git/hooks/pre-commit << 'EOF' #!/bin/bash # Pre-commit hook for issue-based workflow # Automatically installed by pnpm run setup node .hooks/issue-linter.js EOF chmod +x .git/hooks/pre-commit # Also make setup script executable chmod +x scripts/setup.sh echo -e "${GREEN}Pre-commit hook installed.${NC}" echo "" # ============================================ # Step 4: Install Feynman configs (if feynman detected) # ============================================ if [ "$FEYNMAN_DETECTED" = true ] && [ "$SKILL_INSTALLED" = false ]; then echo "==========================================" echo "Feynman Detected" echo "==========================================" echo "" echo -e "${YELLOW}Feynman installation found at: $FEYNMAN_DIR${NC}" # Check if feynman directory is writable if [ -w "$FEYNMAN_SKILLS_DIR" ]; then echo "Installing workflow-bootstrap skill..." mkdir -p "$FEYNMAN_SKILLS_DIR/workflow-bootstrap" cp -f feynman/skills/workflow-bootstrap/SKILL.md "$FEYNMAN_SKILLS_DIR/workflow-bootstrap/" echo -e "${GREEN}Skill installed to: $FEYNMAN_SKILLS_DIR/workflow-bootstrap/${NC}" # Also create/update memory in the project if .feynman exists if [ -d ".feynman" ]; then if [ ! -f ".feynman/memory.md" ]; then echo "Creating .feynman/memory.md..." cp feynman/memory-template.md .feynman/memory.md echo -e "${GREEN}Memory template installed to: .feynman/memory.md${NC}" else echo -e "${YELLOW}.feynman/memory.md already exists. Skipping.${NC}" fi fi echo "" echo "Feynman can now bootstrap this workflow for any new project." echo "Trigger phrases:" echo " - 'feynman, start a new project'" echo " - 'set up the workflow'" echo " - 'apply the workflow template'" echo "" else echo -e "${YELLOW}Warning: Feynman skills directory not writable.${NC}" echo "To install the workflow-bootstrap skill manually:" echo " mkdir -p $FEYNMAN_SKILLS_DIR/workflow-bootstrap" echo " cp feynman/skills/workflow-bootstrap/SKILL.md $FEYNMAN_SKILLS_DIR/workflow-bootstrap/" echo "" fi elif [ "$SKILL_INSTALLED" = true ]; then echo -e "${GREEN}Workflow-bootstrap skill already installed.${NC}" else echo "==========================================" echo "Feynman Not Detected" echo "==========================================" echo "" echo -e "${YELLOW}Feynman not found. The workflow-bootstrap skill was not installed.${NC}" echo "" echo "To install Feynman: https://github.com/your-org/feynman" echo "" echo "After installing Feynman, you can manually copy the skill:" echo " mkdir -p ~/.feynman/agent/skills" echo " cp -r feynman/skills/* ~/.feynman/agent/skills/" echo "" fi # Step 5: Summary echo "==========================================" echo -e "${GREEN}Setup complete!${NC}" echo "==========================================" echo "" echo "Next steps:" echo " 1. Read docs/workflow/INDEX.md" echo " 2. Check .issues/INDEX.md for open issues" echo " 3. Start working on an issue or create a new one" echo "" echo "The pre-commit hook will validate issue files before every commit." echo "Code changes without a valid issue file will be rejected." echo ""