hermes / entrypoint.sh
Subsequently's picture
Update entrypoint.sh
9ad0837 verified
Raw History Blame Contribute Delete
3.39 kB
#!/bin/sh
# 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