Welle 3 · Lucys Freiheiten je Aktionsart, Rückfragen mit „ja 7“, Lucy untersucht rote Hinweise, Wochenbericht
- services/lucy_autonomie.py: Stufe je Aktionsart (nur lesen, erst fragen, selbst handeln), Start „mehr Freiheit“;
Meldung danach (POST /api/lucy/gehandelt)
- services/rueckfragen.py: nummerierte Rückfragen, nur Knöpfe der Oberfläche (ERLAUBT), „ja“ führt genau die
gespeicherte Aktion aus, 24 h gültig, hinfällig wenn der Hinweis weg ist, Nachprüfung danach
- notify.sh -k: Antworttasten (Antworttastatur über den Direktweg, ohne Eingriff in Hermes)
- services/ermittlung.py: Wächter meldet rote Hinweise an Lucy; Knopf wird Rückfrage, Lucy sieht über den
api_server nach und schickt Ursache und Weg als eine Nachricht
- services/wochenbericht.py + mc2-wochenbericht.timer (So 07:30): feste Sätze, Absatz vom Modell, offene
App-Updates als Rückfragen
- MCP: Werkzeuge fragen die Freiheiten (auf_bitte), neu: freiheiten, rueckfragen, rueckfrage_beantworten,
sicherheitsupdates_einspielen, snapshot_zurueckspielen, snapshots, geraet_logs, dienst_logs
- Ausführer-Aktion journal (nur lesend), POST /api/homelab/ziele/{id}/sicherheitsupdates
- Läufe des Homelabs mit flock (Oberfläche und Steward schreiben beide)
- Skill homelab-orchestrator, SOUL-Abschnitt als Kopie in deploy/nur-box
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
dd23f3fb4c
commit
12cefb427a
@@ -1330,6 +1330,24 @@ def a_changelog(p: dict) -> tuple[int, str]:
|
||||
return 0, json.dumps(ergebnis, ensure_ascii=False)
|
||||
|
||||
|
||||
JOURNAL_BEFEHL = ("if command -v journalctl >/dev/null 2>&1; then journalctl -p warning -n {n} --no-pager -o short-iso "
|
||||
"--since -24h; elif [ -r /var/log/messages ]; then tail -n {n} /var/log/messages; "
|
||||
"else echo '(kein Protokoll gefunden)'; fi")
|
||||
|
||||
|
||||
def a_journal(p: dict) -> tuple[int, str]:
|
||||
"""Warnungen und Fehler der letzten 24 Stunden aus dem Journal eines Containers (seit 25.09.2026, nur lesend): Damit
|
||||
liest Lucy, was hinter einem roten Hinweis steckt. Ohne systemd (Alpine) die letzten Zeilen von /var/log/messages."""
|
||||
art, vmid = _gast_pruefen(p.get("vmid"))
|
||||
if art != "lxc":
|
||||
raise ValueError("Protokolle gibt es nur von Containern")
|
||||
zeilen = p.get("zeilen", 80)
|
||||
if not isinstance(zeilen, int) or not 20 <= zeilen <= 300:
|
||||
raise ValueError("zeilen muss zwischen 20 und 300 liegen")
|
||||
code, text = _im_gast(vmid, JOURNAL_BEFEHL.format(n=zeilen), 60)
|
||||
return code, text[-12000:]
|
||||
|
||||
|
||||
# Die einzigen Etiketten, die der Server setzen oder entfernen lassen kann (seit 25.09.2026).
|
||||
SETZBARE_ETIKETTEN = ("watcher", AUSGENOMMEN)
|
||||
|
||||
@@ -1400,9 +1418,9 @@ AKTIONEN = {"snapshot": a_snapshot, "update": a_update, "os_update": a_os_update
|
||||
"host_neustart": a_host_neustart, "bericht": a_bericht,
|
||||
"sichern": a_sichern, "sicherung_zurueck": a_sicherung_zurueck, "sicherung_loeschen": a_sicherung_loeschen,
|
||||
"kernel_aufraeumen": a_kernel_aufraeumen, "sicherung_probe": a_sicherung_probe,
|
||||
"etikett_setzen": a_etikett_setzen, "changelog": a_changelog}
|
||||
"etikett_setzen": a_etikett_setzen, "changelog": a_changelog, "journal": a_journal}
|
||||
# Was auch im Nur-Lesen-Modus geht: Es liest nur.
|
||||
NUR_LESEND = {a_bericht, a_sicherung_probe, a_changelog}
|
||||
NUR_LESEND = {a_bericht, a_sicherung_probe, a_changelog, a_journal}
|
||||
|
||||
|
||||
def ausfuehren(auftrag: dict) -> dict:
|
||||
|
||||
Reference in New Issue
Block a user