Download entrypoint.sh from Supertbot/hermes: direct link, hf CLI and curl.
- Browser
- Download file 3.39 kB
-
https://huggingface.co/spaces/Supertbot/hermes/resolve/main/entrypoint.sh
- Command line
-
hf download hf://spaces/Supertbot/hermes/entrypoint.sh
-
curl -L -o entrypoint.sh https://huggingface.co/spaces/Supertbot/hermes/resolve/main/entrypoint.sh
3.39 kB
| # Hermes Agent HF Spaces - Production Entrypoint | |
| ts() { date -u +"%H:%M:%S"; } | |
| log() { echo "[$(ts)] [entrypoint] $*"; } | |
| warn() { echo "[$(ts)] [entrypoint] WARN: $*"; } | |
| log "=== Hermes Agent + WebUI starting ===" | |
| # 1. Storage bucket | |
| HERMES_HOME=/data | |
| RETRIES=5 | |
| i=0 | |
| while [ $i -lt $RETRIES ]; do | |
| if [ -d /data ] && touch /data/.write-test 2>/dev/null; then | |
| rm -f /data/.write-test | |
| log "Storage bucket /data writable - using persistent storage" | |
| break | |
| fi | |
| i=$((i+1)) | |
| [ $i -lt $RETRIES ] && log "Waiting for /data... ($i/$RETRIES)" && sleep 1 | |
| done | |
| if ! touch /data/.write-test 2>/dev/null; then | |
| warn "/data not writable - using ephemeral /tmp/.hermes" | |
| HERMES_HOME=/tmp/.hermes | |
| mkdir -p "$HERMES_HOME" | |
| fi | |
| rm -f /data/.write-test 2>/dev/null | |
| export HERMES_HOME | |
| export HERMES_WEBUI_STATE_DIR="${HERMES_HOME}/webui" | |
| log "HERMES_HOME=$HERMES_HOME" | |
| # 2. Export API keys | |
| for VAR in $(env | cut -d= -f1); do | |
| case "$VAR" in | |
| *_API_KEY|*_BOT_TOKEN|*_SECRET_KEY) ;; | |
| *) continue ;; | |
| esac | |
| VAL=$(printenv "$VAR" 2>/dev/null || true) | |
| [ -n "$VAL" ] && export "$VAR" && log "exported: $VAR" | |
| done | |
| # 3. Setup | |
| log "Running setup..." | |
| timeout 60 sh /app/setup-hermes.sh || warn "Setup failed or timed out" | |
| log "Setup done." | |
| # 4. Hermes gateway (Telegram) - optional | |
| TG_TOKEN=$(printenv TELEGRAM_BOT_TOKEN 2>/dev/null || true) | |
| if [ -n "$TG_TOKEN" ]; then | |
| log "Starting hermes gateway (Telegram)..." | |
| ( cd /opt/hermes && HERMES_HOME="$HERMES_HOME" hermes gateway run >> /tmp/hermes-gateway.log 2>&1 ) & | |
| GATEWAY_PID=$! | |
| log "Gateway PID: $GATEWAY_PID" | |
| sleep 3 | |
| else | |
| log "No TELEGRAM_BOT_TOKEN - WebUI-only mode" | |
| fi | |
| # 5. hermes-webui | |
| log "Starting hermes-webui on :8787..." | |
| mkdir -p "${HERMES_HOME}/webui" | |
| PASS="${HERMES_WEBUI_PASSWORD:-}" | |
| [ -n "$PASS" ] && log "WebUI password: ENABLED" || log "WebUI password: DISABLED" | |
| ( | |
| cd /opt/hermes-webui | |
| HERMES_HOME="$HERMES_HOME" \ | |
| HERMES_WEBUI_HOST=127.0.0.1 \ | |
| HERMES_WEBUI_PORT=8787 \ | |
| HERMES_WEBUI_STATE_DIR="${HERMES_HOME}/webui" \ | |
| HERMES_WEBUI_AGENT_DIR=/opt/hermes \ | |
| HERMES_WEBUI_PASSWORD="$PASS" \ | |
| ${HERMES_WEBUI_PYTHON:-python3} server.py >> /tmp/hermes-webui.log 2>&1 | |
| ) & | |
| WEBUI_PID=$! | |
| log "WebUI PID: $WEBUI_PID" | |
| # Wait for webui ready | |
| WAITED=0 | |
| while [ $WAITED -lt 30 ]; do | |
| nc -z 127.0.0.1 8787 2>/dev/null && log "WebUI ready after ${WAITED}s" && break | |
| sleep 2; WAITED=$((WAITED+2)) | |
| done | |
| [ $WAITED -ge 30 ] && warn "WebUI slow to start - check /tmp/hermes-webui.log" | |
| # 6. nginx on 7860 | |
| log "Starting nginx on :7860..." | |
| nginx -g "daemon off;" & | |
| NGINX_PID=$! | |
| log "nginx PID: $NGINX_PID" | |
| log "=== All services started ===" | |
| log " Access: https://<your-space>.hf.space" | |
| log " Logs : /tmp/hermes-webui.log /tmp/hermes-gateway.log" | |
| # 7. Watcher loop | |
| while true; do | |
| sleep 15 | |
| if ! kill -0 $WEBUI_PID 2>/dev/null; then | |
| warn "WebUI died - restarting..." | |
| ( | |
| cd /opt/hermes-webui | |
| HERMES_HOME="$HERMES_HOME" \ | |
| HERMES_WEBUI_HOST=127.0.0.1 \ | |
| HERMES_WEBUI_PORT=8787 \ | |
| HERMES_WEBUI_STATE_DIR="${HERMES_HOME}/webui" \ | |
| HERMES_WEBUI_AGENT_DIR=/opt/hermes \ | |
| HERMES_WEBUI_PASSWORD="$PASS" \ | |
| ${HERMES_WEBUI_PYTHON:-python3} server.py >> /tmp/hermes-webui.log 2>&1 | |
| ) & | |
| WEBUI_PID=$! | |
| log "WebUI restarted PID: $WEBUI_PID" | |
| fi | |
| if ! kill -0 $NGINX_PID 2>/dev/null; then | |
| warn "nginx died - exiting" | |
| exit 1 | |
| fi | |
| done |