diff options
Diffstat (limited to 'makima/cloudflare-agent/setup.sh')
| -rwxr-xr-x | makima/cloudflare-agent/setup.sh | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/makima/cloudflare-agent/setup.sh b/makima/cloudflare-agent/setup.sh new file mode 100755 index 0000000..acf9cd9 --- /dev/null +++ b/makima/cloudflare-agent/setup.sh @@ -0,0 +1,331 @@ +#!/usr/bin/env bash +# ============================================================================ +# Makima Cloudflare Agent — Interactive Setup Script +# +# Sets up the Cloudflare Workers project for deploying a Makima edge relay +# agent. This agent acts as a WebSocket bridge between the Makima server +# and native daemon instances running on your infrastructure. +# +# Usage: +# chmod +x setup.sh && ./setup.sh +# ============================================================================ + +set -euo pipefail + +# 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' # No Color + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +info() { echo -e "${BLUE}ℹ${NC} $*"; } +success() { echo -e "${GREEN}✔${NC} $*"; } +warn() { echo -e "${YELLOW}⚠${NC} $*"; } +error() { echo -e "${RED}✖${NC} $*"; } + +prompt() { + local var_name="$1" + local prompt_text="$2" + local default_value="${3:-}" + local value + + if [ -n "$default_value" ]; then + echo -ne "${CYAN}?${NC} ${prompt_text} ${BOLD}[${default_value}]${NC}: " + else + echo -ne "${CYAN}?${NC} ${prompt_text}: " + fi + + read -r value + value="${value:-$default_value}" + eval "$var_name=\"$value\"" +} + +confirm() { + local prompt_text="$1" + local default="${2:-y}" + local yn + + if [ "$default" = "y" ]; then + echo -ne "${CYAN}?${NC} ${prompt_text} ${BOLD}[Y/n]${NC}: " + else + echo -ne "${CYAN}?${NC} ${prompt_text} ${BOLD}[y/N]${NC}: " + fi + + read -r yn + yn="${yn:-$default}" + + case "$yn" in + [Yy]*) return 0 ;; + *) return 1 ;; + esac +} + +separator() { + echo "" + echo -e "${BLUE}──────────────────────────────────────────────────────${NC}" + echo "" +} + +# --------------------------------------------------------------------------- +# Header +# --------------------------------------------------------------------------- + +clear 2>/dev/null || true +echo "" +echo -e "${BOLD}${CYAN}" +echo " ╔══════════════════════════════════════════════════╗" +echo " ║ Makima Cloudflare Agent Setup ║" +echo " ║ ║" +echo " ║ Edge relay for distributed task orchestration ║" +echo " ╚══════════════════════════════════════════════════╝" +echo -e "${NC}" +echo "" + +# --------------------------------------------------------------------------- +# 1. Check Prerequisites +# --------------------------------------------------------------------------- + +info "Checking prerequisites..." +echo "" + +missing=0 + +# Node.js +if command -v node &>/dev/null; then + node_version=$(node --version) + # Check if version is 18+ + major_version=$(echo "$node_version" | sed 's/v//' | cut -d. -f1) + if [ "$major_version" -ge 18 ]; then + success "Node.js ${node_version}" + else + error "Node.js ${node_version} (requires v18+)" + missing=1 + fi +else + error "Node.js not found (requires v18+)" + missing=1 +fi + +# npm +if command -v npm &>/dev/null; then + success "npm $(npm --version)" +else + error "npm not found" + missing=1 +fi + +# npx +if command -v npx &>/dev/null; then + success "npx available" +else + error "npx not found" + missing=1 +fi + +if [ "$missing" -eq 1 ]; then + echo "" + error "Missing prerequisites. Please install the missing tools and try again." + echo "" + info "Install Node.js 18+: https://nodejs.org/" + exit 1 +fi + +separator + +# --------------------------------------------------------------------------- +# 2. Gather Configuration +# --------------------------------------------------------------------------- + +info "Let's configure your Makima edge agent." +echo "" + +prompt MAKIMA_SERVER_URL "Makima server WebSocket URL" "wss://api.makima.jp" +echo "" + +prompt MAKIMA_API_KEY "Makima API key (from your server dashboard)" "" +if [ -z "$MAKIMA_API_KEY" ]; then + error "API key is required." + exit 1 +fi +echo "" + +prompt MAKIMA_AGENT_NAME "Agent display name (optional)" "makima-edge" +echo "" + +separator + +# --------------------------------------------------------------------------- +# 3. Install Dependencies +# --------------------------------------------------------------------------- + +info "Installing dependencies..." +echo "" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +npm install 2>&1 | while IFS= read -r line; do + echo " $line" +done + +echo "" +success "Dependencies installed." + +separator + +# --------------------------------------------------------------------------- +# 4. Create .dev.vars (local secrets for development) +# --------------------------------------------------------------------------- + +info "Creating .dev.vars for local development secrets..." + +cat > .dev.vars <<EOF +# Makima Cloudflare Agent — Local Development Secrets +# These are used by 'wrangler dev' and should NOT be committed to git. + +MAKIMA_SERVER_URL=${MAKIMA_SERVER_URL} +MAKIMA_API_KEY=${MAKIMA_API_KEY} +MAKIMA_AGENT_NAME=${MAKIMA_AGENT_NAME} +EOF + +success "Created .dev.vars" +echo "" + +# Ensure .dev.vars is gitignored +if [ -f .gitignore ]; then + if ! grep -q ".dev.vars" .gitignore 2>/dev/null; then + echo ".dev.vars" >> .gitignore + success "Added .dev.vars to .gitignore" + fi +else + echo ".dev.vars" > .gitignore + echo "node_modules/" >> .gitignore + echo ".wrangler/" >> .gitignore + success "Created .gitignore" +fi + +separator + +# --------------------------------------------------------------------------- +# 5. Wrangler Login Check +# --------------------------------------------------------------------------- + +info "Checking Cloudflare authentication..." +echo "" + +if npx wrangler whoami 2>/dev/null | grep -q "You are logged in"; then + success "Already logged in to Cloudflare." +else + warn "Not logged in to Cloudflare." + if confirm "Would you like to log in now?"; then + npx wrangler login + success "Logged in to Cloudflare." + else + warn "Skipping login. You'll need to run 'npx wrangler login' before deploying." + fi +fi + +separator + +# --------------------------------------------------------------------------- +# 6. Set Production Secrets +# --------------------------------------------------------------------------- + +if confirm "Would you like to set production secrets now? (Required before first deploy)"; then + echo "" + info "Setting secrets via Wrangler..." + echo "" + + echo "$MAKIMA_SERVER_URL" | npx wrangler secret put MAKIMA_SERVER_URL 2>&1 | while IFS= read -r line; do + echo " $line" + done + success "Set MAKIMA_SERVER_URL" + + echo "$MAKIMA_API_KEY" | npx wrangler secret put MAKIMA_API_KEY 2>&1 | while IFS= read -r line; do + echo " $line" + done + success "Set MAKIMA_API_KEY" + + if [ -n "$MAKIMA_AGENT_NAME" ]; then + echo "$MAKIMA_AGENT_NAME" | npx wrangler secret put MAKIMA_AGENT_NAME 2>&1 | while IFS= read -r line; do + echo " $line" + done + success "Set MAKIMA_AGENT_NAME" + fi +fi + +separator + +# --------------------------------------------------------------------------- +# 7. Deploy or Dev +# --------------------------------------------------------------------------- + +echo -e "${BOLD}Setup complete!${NC} What would you like to do next?" +echo "" +echo " 1) Deploy to Cloudflare Workers (production)" +echo " 2) Start local development server" +echo " 3) Exit (deploy later)" +echo "" + +prompt NEXT_ACTION "Choose an option" "3" + +case "$NEXT_ACTION" in + 1) + echo "" + info "Deploying to Cloudflare Workers..." + echo "" + npx wrangler deploy 2>&1 | while IFS= read -r line; do + echo " $line" + done + echo "" + success "Deployed! Your Makima edge agent is live." + ;; + 2) + echo "" + info "Starting local development server..." + echo "" + info "Press Ctrl+C to stop." + echo "" + npx wrangler dev + ;; + 3|*) + ;; +esac + +# --------------------------------------------------------------------------- +# 8. Next Steps +# --------------------------------------------------------------------------- + +separator + +echo -e "${BOLD}${GREEN}🎉 Makima Cloudflare Agent is ready!${NC}" +echo "" +echo -e " ${BOLD}Useful commands:${NC}" +echo "" +echo -e " ${CYAN}npm run dev${NC} Start local development server" +echo -e " ${CYAN}npm run deploy${NC} Deploy to Cloudflare Workers" +echo -e " ${CYAN}npm run tail${NC} Stream production logs" +echo "" +echo -e " ${BOLD}API Endpoints (after deploy):${NC}" +echo "" +echo -e " ${CYAN}GET /status${NC} Agent connection status" +echo -e " ${CYAN}GET /health${NC} Health check" +echo -e " ${CYAN}GET /tasks${NC} Task dispatch history" +echo -e " ${CYAN}GET /logs${NC} Connection event logs" +echo -e " ${CYAN}POST /reconnect${NC} Force upstream reconnection" +echo -e " ${CYAN}WS /ws/daemon${NC} Downstream daemon WebSocket" +echo "" +echo -e " ${BOLD}Architecture:${NC}" +echo "" +echo -e " Makima Server ←WebSocket→ ${CYAN}Edge Agent${NC} ←WebSocket→ Native Daemons" +echo "" +echo -e " ${BOLD}Documentation:${NC}" +echo -e " See ${CYAN}README.md${NC} for full setup and architecture details." +echo "" |
