#!/usr/bin/env bash # ============================================================================== # install.sh — Multi-Agent Mux (MAM) Orchestration Installer # ============================================================================== # Idempotent, robust installer to bootstrap MAM orchestration skills # and Python backplane dependencies on any local workspace. # ============================================================================== set -euo pipefail # --- Configuration & Defaults --- TARGET_DIR="${1:-$(pwd)}" VENV_NAME=".venv" MIN_PYTHON_VERSION="3.9" echo "====================================================================" echo "⚡ Starting Multi-Agent Mux (MAM) Installation" echo "📂 Target Workspace: $TARGET_DIR" echo "====================================================================" # --- 1. System Requirements Validation --- echo "🔍 Checking system dependencies..." check_cmd() { local cmd="$1" if ! command -v "$cmd" &>/dev/null; then echo "❌ Error: '$cmd' is not installed. Please install it first." >&2 exit 1 fi } check_cmd tmux check_cmd python3 check_cmd pip3 # Verify Python Version PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")') if python3 -c "import sys; exit(0 if sys.version_info >= (3, 9) else 1)"; then echo "✅ Python $PYTHON_VERSION detected." else echo "❌ Error: Python version must be $MIN_PYTHON_VERSION or higher. Detected: $PYTHON_VERSION" >&2 exit 1 fi # --- 2. Workspace Setup --- cd "$TARGET_DIR" echo "📂 Ensuring metadata directory structure (.mam/)..." mkdir -p .mam/jobs .mam/delegate_job_logs # File permission lockdown on database directory chmod 0700 .mam # --- 3. Check Network File System (NFS) Warnings --- echo "💾 Detecting file system mount type..." if command -v df &>/dev/null && command -v mount &>/dev/null; then MOUNTPOINT="$(df --output=target . 2>/dev/null | tail -1 || echo "")" if [ -n "$MOUNTPOINT" ]; then if mount | grep -q "$MOUNTPOINT.*nfs\|$MOUNTPOINT.*cifs\|$MOUNTPOINT.*fuse.sshfs"; then echo "âš ī¸ WARNING: Target directory is on a network filesystem (NFS/CIFS/SSHFS)." echo " File locks (fcntl.flock) are UNRELIABLE on network storage." echo " The sqlite3 registry will fall back to 'DELETE' journaling instead of WAL." else echo "✅ File system supports WAL (Local storage detected)." fi fi fi # --- 4. Python Virtual Environment Setup --- echo "🐍 Bootstrapping Python virtual environment (.venv)..." if [ ! -d "$VENV_NAME" ]; then python3 -m venv "$VENV_NAME" echo "✅ Virtual environment created." else echo "â„šī¸ Virtual environment (.venv) already exists. Skipping creation." fi # Activate virtual environment # shellcheck disable=SC1091 source "$VENV_NAME"/bin/activate # Install requirements REQ_FILE=".agents/skills/multi-agent-mux-delegate-job/requirements.txt" if [ -f "$REQ_FILE" ]; then echo "đŸ“Ļ Installing backplane dependencies from $REQ_FILE..." pip install --upgrade pip pip install -r "$REQ_FILE" echo "✅ Dependencies installed successfully." else echo "âš ī¸ WARNING: Could not find requirements file: $REQ_FILE" echo " Installing default packages (paho-mqtt, pyyaml) manually..." pip install --upgrade pip pip install "paho-mqtt>=2.0.0" pyyaml fi # --- 5. Generate Environment Template --- ENV_FILE=".env" ENV_EXAMPLE=".env.example" if [ ! -f "$ENV_FILE" ]; then if [ -f "$ENV_EXAMPLE" ]; then echo "📝 Creating configuration from $ENV_EXAMPLE..." cp "$ENV_EXAMPLE" "$ENV_FILE" chmod 0600 "$ENV_FILE" else echo "📝 Creating default $ENV_FILE..." cat < "$ENV_FILE" # ============================================================================== # Multi-Agent Mux (MAM) Environment Settings # ============================================================================== MQTT_BROKER=broker.hivemq.com MQTT_PORT=1883 MQTT_TLS=0 MQTT_CLIENT_ID_PREFIX=mam-agent TMUX_SERVER_NAME=default EOF chmod 0600 "$ENV_FILE" fi echo "✅ Config file .env initialized with chmod 0600." else echo "â„šī¸ $ENV_FILE already exists. Skipping config override." fi echo "====================================================================" echo "🎉 Installation complete!" echo "✨ You can now run the status or monitor skills." echo "💡 Hint: Try executing: .venv/bin/python .agents/skills/multi-agent-mux-delegate-job/scripts/registry.py list" echo "===================================================================="