feat: Morgen-Digest für gebündelte nächtliche Telegram-Nachrichten
Ampel / ampel (push) Successful in 22s
Ampel / ampel (push) Successful in 22s
This commit is contained in:
@@ -89,6 +89,9 @@ cp "$SRC/deploy/mc2-selfsmoke.timer" "$HOME/.config/systemd/user/mc2-selfsmoke.t
|
|||||||
# Bagatell-Annahme (Ideen-Queue, 10.07.2026): reine Doku-Vorschläge nachts ohne Klick einspielen.
|
# Bagatell-Annahme (Ideen-Queue, 10.07.2026): reine Doku-Vorschläge nachts ohne Klick einspielen.
|
||||||
cp "$SRC/deploy/mc2-bagatell.service" "$HOME/.config/systemd/user/mc2-bagatell.service"
|
cp "$SRC/deploy/mc2-bagatell.service" "$HOME/.config/systemd/user/mc2-bagatell.service"
|
||||||
cp "$SRC/deploy/mc2-bagatell.timer" "$HOME/.config/systemd/user/mc2-bagatell.timer"
|
cp "$SRC/deploy/mc2-bagatell.timer" "$HOME/.config/systemd/user/mc2-bagatell.timer"
|
||||||
|
# Morgen-Digest (Nächtliche Telegram-Zusammenfassung, 26.07.2026): fasst alle Meldungen zwischen 0 und 7 Uhr zusammen.
|
||||||
|
cp "$SRC/deploy/mc2-morgen-digest.service" "$HOME/.config/systemd/user/mc2-morgen-digest.service"
|
||||||
|
cp "$SRC/deploy/mc2-morgen-digest.timer" "$HOME/.config/systemd/user/mc2-morgen-digest.timer"
|
||||||
# Evolution-Radar-Feed (Autonomie E4): Hermes-cron speist ihn als Prompt ein.
|
# Evolution-Radar-Feed (Autonomie E4): Hermes-cron speist ihn als Prompt ein.
|
||||||
# Cron-Job selbst wird EINMALIG registriert (hermes cron create, siehe docs/RUNBOOK.md).
|
# Cron-Job selbst wird EINMALIG registriert (hermes cron create, siehe docs/RUNBOOK.md).
|
||||||
mkdir -p "$HOME/.hermes/scripts"
|
mkdir -p "$HOME/.hermes/scripts"
|
||||||
@@ -248,6 +251,7 @@ systemctl --user enable --now mc2-backup.timer >/dev/null 2>&1 || true
|
|||||||
# Router/Engine/Hermes dürfen So 04:30 automatisch (Fangnetz Backup→Postcheck→Rollback+Pin).
|
# Router/Engine/Hermes dürfen So 04:30 automatisch (Fangnetz Backup→Postcheck→Rollback+Pin).
|
||||||
systemctl --user enable --now mc2-selfsmoke.timer >/dev/null 2>&1 || true
|
systemctl --user enable --now mc2-selfsmoke.timer >/dev/null 2>&1 || true
|
||||||
systemctl --user enable --now mc2-bagatell.timer >/dev/null 2>&1 || true
|
systemctl --user enable --now mc2-bagatell.timer >/dev/null 2>&1 || true
|
||||||
|
systemctl --user enable --now mc2-morgen-digest.timer >/dev/null 2>&1 || true
|
||||||
loginctl enable-linger "$USER" >/dev/null 2>&1 || true
|
loginctl enable-linger "$USER" >/dev/null 2>&1 || true
|
||||||
# Mem0-Sidecar VOR dem Backend (re)starten, damit /api/memory sofort bedient wird.
|
# Mem0-Sidecar VOR dem Backend (re)starten, damit /api/memory sofort bedient wird.
|
||||||
[ -x "$HOME/.mem0/venv/bin/python" ] && systemctl --user restart mem0-service 2>/dev/null || true
|
[ -x "$HOME/.mem0/venv/bin/python" ] && systemctl --user restart mem0-service 2>/dev/null || true
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=MC2 Morgen-Digest (Nächtliche Telegram-Zusammenfassung)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash %h/mission-control-v2/deploy/morgen-digest.sh
|
||||||
|
TimeoutStartSec=300
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Timer für MC2 Morgen-Digest (07:00 Uhr)
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*-*-* 07:00:00
|
||||||
|
Persistent=true
|
||||||
|
RandomizedDelaySec=5m
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Morgen-Digest: Sammelt die zurückgehaltenen nächtlichen Meldungen (00:00 - 06:59)
|
||||||
|
# und lässt Lucy (LLM) eine Telegram-Zusammenfassung daraus bauen.
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
NIGHT_QUEUE="$HOME/.hermes/night-queue.txt"
|
||||||
|
if [ ! -f "$NIGHT_QUEUE" ]; then
|
||||||
|
# Keine nächtlichen Meldungen
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Wenn die Datei existiert, aber leer ist, löschen und beenden.
|
||||||
|
if [ ! -s "$NIGHT_QUEUE" ]; then
|
||||||
|
rm -f "$NIGHT_QUEUE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
EVIDENCE="$(cat "$NIGHT_QUEUE")"
|
||||||
|
|
||||||
|
PROMPT="Du bist Lucy, die KI-Assistenz der Mission-Control-Box.
|
||||||
|
Hier sind die Systemmeldungen der vergangenen Nacht.
|
||||||
|
Fasse sie für den Commander zu einem kurzen, kompakten Morgen-Digest zusammen.
|
||||||
|
Es soll sich flüssig lesen, Wichtiges (Erfolge/Probleme) hervorheben und redundante Infos bündeln.
|
||||||
|
Schreibe eine schöne, direkte Telegram-Nachricht.
|
||||||
|
|
||||||
|
Nächtliche Meldungen:
|
||||||
|
$EVIDENCE"
|
||||||
|
|
||||||
|
# LLM aufrufen (llama-swap / gpt-oss-120b)
|
||||||
|
ENDPOINT="${CHEF_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}"
|
||||||
|
MODEL="${CHEF_MODEL:-gpt-oss-120b}"
|
||||||
|
|
||||||
|
REQ="$(jq -n --arg m "$MODEL" --arg sys "Du bist Lucy." --arg usr "$PROMPT" --argjson mt 1200 \
|
||||||
|
'{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}],
|
||||||
|
max_tokens:$mt, temperature:0.4}')"
|
||||||
|
|
||||||
|
DIGEST="$(curl -s -m 180 "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$REQ" \
|
||||||
|
| python3 -c '
|
||||||
|
import json, sys
|
||||||
|
try:
|
||||||
|
d = json.load(sys.stdin)
|
||||||
|
msg = d["choices"][0]["message"]
|
||||||
|
print((msg.get("content") or msg.get("reasoning_content") or "").strip())
|
||||||
|
except Exception:
|
||||||
|
pass'
|
||||||
|
)"
|
||||||
|
|
||||||
|
if [ -n "$DIGEST" ]; then
|
||||||
|
# Sende den Digest via hermes send (Telegram)
|
||||||
|
bash -lc 'hermes send --to telegram --subject "[🌅 Morgen-Digest]" -- "$1"' _ "$DIGEST"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Erfolgreich gesendet, Queue leeren
|
||||||
|
rm -f "$NIGHT_QUEUE"
|
||||||
|
else
|
||||||
|
echo "Fehler beim Senden des Morgen-Digests an Telegram. Queue bleibt erhalten." >&2
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Leerer Digest vom LLM. Queue bleibt erhalten." >&2
|
||||||
|
fi
|
||||||
@@ -41,6 +41,23 @@ PY
|
|||||||
)" >/dev/null 2>&1 || true
|
)" >/dev/null 2>&1 || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Nachtweiche: Zwischen 00:00 und 06:59 Uhr (inklusive) fangen wir Telegram-Nachrichten ab
|
||||||
|
# und sammeln sie für den Morgen-Digest, ES SEI DENN es ist ein Alarm.
|
||||||
|
HOUR="$(date +%H)"
|
||||||
|
if [ "$HOUR" -ge 0 ] && [ "$HOUR" -lt 7 ]; then
|
||||||
|
case "${SUBJECT,,}" in
|
||||||
|
*alarm*|*notfall*)
|
||||||
|
;; # Alarme gehen immer sofort durch
|
||||||
|
*)
|
||||||
|
# Sammeln für Morgen-Digest
|
||||||
|
NIGHT_QUEUE="$HOME/.hermes/night-queue.txt"
|
||||||
|
echo "- ${SUBJECT:+$SUBJECT: }$MSG" >> "$NIGHT_QUEUE"
|
||||||
|
echo "$TS QUEUED für Morgen-Digest: $MSG" >> "$LOG"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
# Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen).
|
# Primärweg: Telegram via hermes send (Login-Shell-PATH, falls aus Timer/cron aufgerufen).
|
||||||
if [ -n "$SUBJECT" ]; then
|
if [ -n "$SUBJECT" ]; then
|
||||||
SEND_OUT="$(bash -lc 'hermes send --to telegram --subject "$1" -- "$2"' _ "$SUBJECT" "$MSG" 2>&1)"
|
SEND_OUT="$(bash -lc 'hermes send --to telegram --subject "$1" -- "$2"' _ "$SUBJECT" "$MSG" 2>&1)"
|
||||||
|
|||||||
Reference in New Issue
Block a user