#!/usr/bin/env bash set -euo pipefail GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' log_info() { echo -e "${GREEN}$*${NC}"; } log_warn() { echo -e "${YELLOW}$*${NC}"; } log_err() { echo -e "${RED}$*${NC}"; } require_cmd() { local cmd="$1" if ! command -v "$cmd" >/dev/null 2>&1; then log_err "ERROR: Missing required command: $cmd" exit 1 fi } node_major_version() { node -v 2>/dev/null | sed 's/^v//' | cut -d. -f1 } echo -e "${GREEN}=== OpenClaw + GitHub Copilot CLI Setup ===${NC}" echo "Current time: $(date)" echo "" require_cmd curl # Step 1: Install / verify Node.js >= 22 need_node_install=false if ! command -v node >/dev/null 2>&1; then need_node_install=true else node_major="$(node_major_version || true)" if ! echo "$node_major" | grep -Eq '^[0-9]+$' || [ "$node_major" -lt 22 ]; then need_node_install=true fi fi if [ "$need_node_install" = true ]; then log_warn "Node.js >= 22 not found. Installing via Homebrew..." if ! command -v brew >/dev/null 2>&1; then log_err "Homebrew not found. Install it first:" echo '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' exit 1 fi brew install node fi log_info "Node.js ready ($(node -v))." # Step 2: Install / verify OpenClaw if ! command -v openclaw >/dev/null 2>&1; then log_warn "OpenClaw not found. Installing via npm..." require_cmd npm npm install -g openclaw else log_info "OpenClaw already installed ($(openclaw --version))." fi # Step 3: Install / verify GitHub Copilot CLI if ! command -v copilot >/dev/null 2>&1; then if command -v brew >/dev/null 2>&1; then log_warn "Copilot CLI not found. Installing prerelease via Homebrew..." brew install copilot-cli@prerelease || { log_warn "Homebrew install failed, falling back to npm package..." npm install -g @github/copilot-cli } else log_warn "Homebrew not found. Installing Copilot CLI via npm..." npm install -g @github/copilot-cli fi else log_info "Copilot CLI already installed ($(copilot --version 2>/dev/null || echo present))." fi echo "" log_info "Setup complete (Copilot-first)." echo "" echo "Next steps (target machine):" echo "1. Authenticate Copilot CLI with enterprise account:" echo " copilot auth login" echo " copilot auth status" echo "2. Start/verify OpenClaw gateway:" echo " openclaw gateway restart" echo " openclaw status --deep" echo "3. Discover and set Copilot models:" echo " openclaw models refresh || true" echo " openclaw models list" echo " openclaw models set github-copilot/" echo "4. Configure fallbacks:" echo " openclaw models fallbacks clear" echo " openclaw models fallbacks add github-copilot/" echo " openclaw models fallbacks add github-copilot/" echo "5. Optional strict provider lock:" echo " openclaw config set --json providers.github-copilot.enabled true" echo " openclaw config set --json providers.openai.enabled false" echo " openclaw config set --json providers.anthropic.enabled false" echo " openclaw config set --json providers.openrouter.enabled false" echo "6. Install Copilot guardrails (recommended):" echo " bash ./scripts/install_copilot_guardrails.sh" echo "7. Ensure recommended hooks are enabled:" echo " openclaw hooks enable boot-md" echo " openclaw hooks enable command-logger" echo " openclaw hooks enable session-memory"