#!/usr/bin/env bash set -Euo pipefail CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/hermes-stack-maintenance/config.env" failures=0 ok() { printf '✓ %s\n' "$*"; } bad() { printf '✗ %s\n' "$*"; failures=$((failures + 1)); } [[ -r "$CONFIG_FILE" ]] || { bad "$CONFIG_FILE fehlt" exit 1 } # shellcheck disable=SC1090 source "$CONFIG_FILE" for command in git curl jq tar zstd systemctl hermes; do if command -v "$command" >/dev/null 2>&1; then ok "$command vorhanden"; else bad "$command fehlt"; fi done for script in "$HOME/.local/libexec"/hermes-stack-*; do [[ -f "$script" ]] || continue if bash -n "$script"; then ok "Syntax: ${script##*/}"; else bad "Syntaxfehler: ${script##*/}"; fi done if [[ -d "$HERMES_REPO/.git" ]]; then ok "Hermes-Git-Checkout vorhanden" dirty="$(git -C "$HERMES_REPO" status --porcelain --untracked-files=all | grep -vxF '?? .install_method' || true)" if [[ -z "$dirty" ]]; then ok "Hermes-Checkout sauber"; else bad "Hermes-Checkout enthält lokale Änderungen"; fi else bad "Hermes-Git-Checkout fehlt" fi if systemctl --user is-active --quiet "$GATEWAY_SERVICE"; then ok "Gateway aktiv"; else bad "Gateway inaktiv"; fi if hermes gateway status >/dev/null 2>&1; then ok "Gateway gesund"; else bad "Gateway-Status fehlgeschlagen"; fi if curl --fail --silent --max-time 5 "$LLAMA_URL/health" | jq -e '.status == "ok"' >/dev/null 2>&1; then ok "llama.cpp-Endpunkt gesund" else bad "llama.cpp-Endpunkt nicht gesund" fi set +u set -a # shellcheck disable=SC1090 source "$HERMES_ENV" 2>/dev/null || true set +a set -u if [[ -n "${SIGNAL_HTTP_URL:-}" ]]; then status="$(curl --silent --output /dev/null --max-time 5 --write-out '%{http_code}' \ "${SIGNAL_HTTP_URL%/}/api/v1/check" || true)" if [[ "$status" =~ ^2[0-9][0-9]$ ]]; then ok "signal-cli HTTP erreichbar"; else bad "signal-cli HTTP nicht erreichbar"; fi fi printf '\nFehler: %d\n' "$failures" ((failures == 0))