#!/bin/bash set -euo pipefail HERMES_PY="/home/missminute/hermes-venv/bin/python3" APP_DIR="/home/missminute/app" log() { echo "[$(date '+%H:%M:%S')] [setup] $*"; } # ── PATH ────────────────────────────────────────────────────── export PATH="/home/missminute/hermes-venv/bin:/home/missminute/.local/bin:/home/missminute/.cargo/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin" export VIRTUAL_ENV="/home/missminute/hermes-venv" # ── SECURITY: Nuke stray API keys that might hijack model routing ── # OPENROUTER_API_KEY is intentionally NOT unset here when it is a # configured fallback provider. BUT we force HERMES_INFERENCE_PROVIDER=custom # to prevent the hermes-agent bug (Issue #5358) where the presence of # OPENROUTER_API_KEY causes the gateway to silently override config.yaml # model.provider and route everything through OpenRouter. unset GEMINI_API_KEY GOOGLE_API_KEY GROQ_API_KEY \ OPENAI_API_KEY ANTHROPIC_API_KEY 2>/dev/null || true # ── CRITICAL: Force hermes to respect config.yaml provider ──── # Without this, if OPENROUTER_API_KEY exists in env, hermes gateway # ignores model.base_url and routes to OpenRouter (confirmed hermes bug). export HERMES_INFERENCE_PROVIDER=custom log "Missminute OS — Setup Starting" log "Python: $(${HERMES_PY} --version 2>&1)" log "Node: $(node --version 2>&1)" log "npm: $(npm --version 2>&1)" log "openclaw: $(openclaw --version 2>&1 || echo 'not found')" log "hermes: $(hermes --version 2>&1 || echo 'not found')" # ── Verify llm_config.json ──────────────────────────────────── if [ ! -f "${APP_DIR}/llm_config.json" ]; then log "ERROR: llm_config.json not found at ${APP_DIR}/llm_config.json" exit 1 fi # ── Run config fusion ───────────────────────────────────────── log "Running config fusion..." eval "$(${HERMES_PY} ${APP_DIR}/config_fusion.py)" log "Config fusion complete" log " Model: ${LLM_MODEL}" log " API URL: ${LLM_BASE_URL}" # ── Exec supervisor ─────────────────────────────────────────── log "Handing off to supervisor (main.py)..." exec "${HERMES_PY}" "${APP_DIR}/main.py"