019bd6d18b
- services/announce.py: persistenter Briefkasten (/srv/models/mc2-announce.json), POST /api/voice/announce + GET /api/voice/announcements (Cursor-Polling) - services/sentry.py: Health-Wächter (Engine/Hirn/Hermes/Mem0/Voice/Platte), flankenerkannt (Alarm nach 3 Fehl-Ticks, Entwarnung, 6h-Erinnerung), meldet in Briefkasten + Telegram; Hirn-Verdrängung durch IDE-Last = kein Alarm - notify.sh spiegelt jede Telegram-Meldung in den Briefkasten (Updates/Radar erreichen damit auch die Desktop-Lucy) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
2.2 KiB
Bash
60 lines
2.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Meldeweg der Box (Autonomie E1): eine Nachricht an den User schicken.
|
|
# Primär: hermes send → Telegram (nutzt Gateway-Credentials, kein LLM nötig).
|
|
# Fallback: Logfile + wall (falls Telegram/hermes nicht erreichbar).
|
|
#
|
|
# Nutzung: notify.sh "Nachricht" (oder via stdin: echo msg | notify.sh)
|
|
# notify.sh -s "[Update]" "Text" (Betreffzeile voranstellen)
|
|
# Exit 0 = zugestellt (Telegram ODER Fallback-Log geschrieben).
|
|
set -uo pipefail
|
|
|
|
LOG="${MC_NOTIFY_LOG:-$HOME/mc2-notify.log}"
|
|
SUBJECT=""
|
|
|
|
while getopts ":s:" opt; do
|
|
case "$opt" in
|
|
s) SUBJECT="$OPTARG" ;;
|
|
*) echo "usage: notify.sh [-s subject] <nachricht>" >&2; exit 2 ;;
|
|
esac
|
|
done
|
|
shift $((OPTIND - 1))
|
|
|
|
MSG="${1:-}"
|
|
[ -z "$MSG" ] && [ ! -t 0 ] && MSG="$(cat)"
|
|
if [ -z "$MSG" ]; then
|
|
echo "usage: notify.sh [-s subject] <nachricht>" >&2
|
|
exit 2
|
|
fi
|
|
|
|
TS="$(date '+%Y-%m-%d %H:%M:%S')"
|
|
|
|
# Lucy-Briefkasten (Proaktivität A3): Meldung zusätzlich an MC2 spiegeln — die Desktop-Lucy
|
|
# spricht sie dann von sich aus. Best-effort (darf den Telegram-Weg nie aufhalten).
|
|
# MC_NOTIFY_NO_ANNOUNCE=1 unterdrückt das (der Health-Wächter legt seine Einträge selbst ab).
|
|
if [ "${MC_NOTIFY_NO_ANNOUNCE:-0}" != "1" ]; then
|
|
curl -sf -m 3 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \
|
|
-H 'Content-Type: application/json' \
|
|
--data "$(python3 - "$SUBJECT" "$MSG" <<'PY'
|
|
import json, sys
|
|
print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], "source": "notify"}))
|
|
PY
|
|
)" >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen).
|
|
if [ -n "$SUBJECT" ]; then
|
|
SEND_OUT="$(bash -lc 'hermes send --to telegram --subject "$1" -- "$2"' _ "$SUBJECT" "$MSG" 2>&1)"
|
|
else
|
|
SEND_OUT="$(bash -lc 'hermes send --to telegram -- "$1"' _ "$MSG" 2>&1)"
|
|
fi
|
|
if [ $? -eq 0 ]; then
|
|
echo "$TS OK telegram: $MSG" >> "$LOG"
|
|
exit 0
|
|
fi
|
|
|
|
# Fallback: Logfile + wall — Meldung darf nie verloren gehen.
|
|
echo "$TS FALLBACK (telegram fehlgeschlagen: $SEND_OUT): $MSG" >> "$LOG"
|
|
printf '%s\n' "MC2-Meldung: ${SUBJECT:+$SUBJECT }$MSG" | wall 2>/dev/null || true
|
|
echo "WARN: Telegram fehlgeschlagen, in $LOG protokolliert" >&2
|
|
exit 0
|