- NEW: services/hermes/service.init — wartet auf Hermes-API, konfiguriert Provider aus shared.env (OpenRouter bevorzugt), gibt Dashboard-URL aus - NEW: services/paperclip/service.init — extrahiert PaperClip-Setup aus main() in eigenständiges Skript (Patch, Onboarding, Bootstrap-URL) - NEW: run_service_inits() in deploy_script.sh — ruft automatisch alle service.init-Skripte nach dem Start auf - CLEANUP: main() in deploy_script.sh ist jetzt schlank und generisch
124 lines
4.6 KiB
Bash
124 lines
4.6 KiB
Bash
#!/usr/bin/env bash
|
|
###############################################################################
|
|
# hermes service.init — läuft nach dem Start des Hermes-Containers
|
|
# Richtet Hermes vollständig ein:
|
|
# 1. Wartet, bis die API antwortet
|
|
# 2. Konfiguriert den Standard-Provider (OpenRouter)
|
|
# 3. Gibt Status und Dashboard-URL aus
|
|
###############################################################################
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
SHARED_ENV="${SCRIPT_DIR}/../shared.env"
|
|
CONTAINER="hermes"
|
|
API_PORT="8642"
|
|
DASHBOARD_PORT="9119"
|
|
API_BASE="http://127.0.0.1:${API_PORT}"
|
|
|
|
log() { echo -e "\e[32m[HERMES-INIT]\e[0m $*"; }
|
|
warn() { echo -e "\e[33m[HERMES-INIT][WARN]\e[0m $*"; }
|
|
err() { echo -e "\e[31m[HERMES-INIT][ERROR]\e[0m $*" >&2; }
|
|
|
|
###############################################################################
|
|
# 1. Shared API Keys laden
|
|
###############################################################################
|
|
OPENROUTER_API_KEY=""
|
|
MISTRAL_API_KEY=""
|
|
|
|
if [[ -f "${SHARED_ENV}" ]]; then
|
|
# shellcheck source=/dev/null
|
|
source "${SHARED_ENV}"
|
|
fi
|
|
|
|
if [[ -z "${OPENROUTER_API_KEY}" && -z "${MISTRAL_API_KEY}" ]]; then
|
|
warn "Kein API Key in shared.env gefunden. Hermes wird ohne Provider-Konfiguration gestartet."
|
|
fi
|
|
|
|
###############################################################################
|
|
# 2. Auf Hermes-API warten
|
|
###############################################################################
|
|
log "Warte auf Hermes API (${API_BASE}/health)..."
|
|
for i in {1..30}; do
|
|
if docker exec "${CONTAINER}" wget -qO- "${API_BASE}/health" >/dev/null 2>&1; then
|
|
log "Hermes API antwortet!"
|
|
break
|
|
fi
|
|
if [[ $i -eq 30 ]]; then
|
|
err "Hermes API hat nach 60s nicht geantwortet. Logs:"
|
|
docker logs "${CONTAINER}" --tail 20 >&2
|
|
exit 1
|
|
fi
|
|
sleep 2
|
|
done
|
|
|
|
###############################################################################
|
|
# 3. Provider konfigurieren (idempotent)
|
|
###############################################################################
|
|
configure_provider() {
|
|
local provider_name="$1"
|
|
local api_key="$2"
|
|
local base_url="$3"
|
|
local model="$4"
|
|
|
|
log "Konfiguriere Provider: ${provider_name} (${base_url})..."
|
|
|
|
# Hermes REST API: Provider setzen
|
|
# POST /api/config/provider — setzt den Standard-LLM-Provider
|
|
local response
|
|
response=$(docker exec "${CONTAINER}" wget -qO- \
|
|
--header="Content-Type: application/json" \
|
|
--post-data="{\"provider\":\"${provider_name}\",\"apiKey\":\"${api_key}\",\"baseUrl\":\"${base_url}\",\"model\":\"${model}\"}" \
|
|
"${API_BASE}/api/config/provider" 2>/dev/null || echo "FAILED")
|
|
|
|
if [[ "${response}" == "FAILED" ]]; then
|
|
# Fallback: hermes CLI direkt im Container
|
|
log "REST-API-Konfiguration fehlgeschlagen — versuche hermes CLI..."
|
|
docker exec "${CONTAINER}" hermes config set \
|
|
--provider "${provider_name}" \
|
|
--api-key "${api_key}" \
|
|
--base-url "${base_url}" \
|
|
--model "${model}" 2>/dev/null || \
|
|
warn "CLI-Konfiguration ebenfalls fehlgeschlagen. Manuelle Konfiguration über ${DASHBOARD_URL} nötig."
|
|
else
|
|
log "Provider ${provider_name} erfolgreich konfiguriert."
|
|
fi
|
|
}
|
|
|
|
# Provider wählen: OpenRouter hat Vorrang vor Mistral
|
|
if [[ -n "${OPENROUTER_API_KEY}" ]]; then
|
|
configure_provider \
|
|
"openrouter" \
|
|
"${OPENROUTER_API_KEY}" \
|
|
"https://openrouter.ai/api/v1" \
|
|
"openrouter/auto"
|
|
elif [[ -n "${MISTRAL_API_KEY}" ]]; then
|
|
configure_provider \
|
|
"mistral" \
|
|
"${MISTRAL_API_KEY}" \
|
|
"https://api.mistral.ai/v1" \
|
|
"mistral-large-latest"
|
|
else
|
|
warn "Kein Provider konfiguriert — Hermes läuft ohne LLM."
|
|
fi
|
|
|
|
###############################################################################
|
|
# 4. Status & Dashboard-URL ausgeben
|
|
###############################################################################
|
|
DASHBOARD_URL="https://hermes.paperclip.orfel.de"
|
|
|
|
log "========================================================="
|
|
log " HERMES SETUP ABGESCHLOSSEN"
|
|
log "========================================================="
|
|
log " Dashboard: ${DASHBOARD_URL}"
|
|
log " Interne API: http://hermes:${API_PORT}"
|
|
log " PaperClip Adapter-URL: http://hermes:${API_PORT}"
|
|
log "========================================================="
|
|
log " In PaperClip einbinden:"
|
|
log " → Hire Agent → Adapter: hermes_gateway"
|
|
log " → Gateway URL: http://hermes:${API_PORT}"
|
|
log "========================================================="
|
|
|
|
echo ""
|
|
echo "Hermes Logs (letzte 10):"
|
|
docker logs "${CONTAINER}" --tail 10 2>&1
|