name: chatto-plugin-update description: "Use when a local Chatto plugin checkout maintained with git must catch up to its remote and the changes must go live in the running Hermes gateway." version: 1.1.0 author: Paul Klumpp license: MIT metadata: hermes:
tags: [chatto, plugin, update, git, gateway]
Ein lokaler Chatto-Plugin-Checkout, der mit git gepflegt wird, soll auf den Stand seines eigenen Remotes gebracht werden, und die Änderungen sollen im laufenden Hermes Gateway aktiv werden.
Der Remote steht hier bewusst nicht: er gehört der Installation, nicht dem
Plugin. git remote -v des Checkouts ist die Wahrheit, und für einen
selbst geklonten Checkout ist das ein privater Remote, den kein mitgeliefertes
Dokument kennen kann.
Nicht anwendbar auf eine per hermes plugins install installierte Instanz.
Deren Checkout gehört Hermes, nicht dem User; dort ist hermes plugins update
chatto-platform der Weg (Schritt 2b). Ein git pull darin umgeht die
Install-Metadaten, die den eingespielten Stand festhalten.
Checkout auflösen. Es gibt zwei dokumentierte Layouts; welches zutrifft, lässt sich nicht raten, also prüfen:
ls -d ~/.hermes/plugins/chatto-platform \
~/.hermes/plugins/platforms/hermes-chatto-plugin 2>/dev/null
REPO auf den existierenden Pfad setzen und in allen folgenden Schritten
mit git -C "$REPO" arbeiten — ohne das laufen die Kommandos im cwd der
Session, im schlimmsten Fall in einem fremden Repository.
bash
git -C "$REPO" fetch --all
git -C "$REPO" status -sb
git -C "$REPO" branch -avv
git -C "$REPO" remote -v # der Remote, von dem gepullt wird
Erst fetchen, dann Sync-Status (ahead/behind) reporten. Aussagen wie
„synchron" nur NACH einem fetch — der lokale status -sb ohne fetch zeigt
ahead/behind nur gegen den zuletzt bekannten Remote-Stand. Aktueller Branch:
git -C "$REPO" branch --show-current. Den alten Stand aus branch -avv
ablesen und für Schritt 3 festhalten.Zusammenführen. Bei einem selbst geklonten Checkout: git -C "$REPO" pull
(Fast-forward). Bei Divergenz: mit dem User abklären, NICHT automatisch
mergen/rebasen.
Bei einer per hermes plugins install installierten Instanz stattdessen:
hermes plugins update chatto-platform
bash
git -C "$REPO" log <alter_stand>..<neuer_stand> # oneline
git -C "$REPO" log <alter_stand>..<neuer_stand> --stat # Datei-Umfang
<alter_stand>/<neuer_stand> sind aus Schritt 2 — den alten Stand dort
abgelesen, nicht geraten, sonst zeigt das Log einen leeren oder zu großen
Bereich. Commits haben ausführliche Messages — daraus eine
nutzerverständliche Zusammenfassung machen: WAS ändert sich für den
Bot-Nutzer, nicht Implementierungsdetails. Für jede Änderung eine Quelle
angeben (Commit-Hash).Gateway-Neustart ANBIETEN (nie selbst ausführen): Plugin-Code-Änderungen werden erst nach einem Neustart des Hermes-Gateways aktiv — die laufende Session hält das alte Modul im Speicher.
/restart als Chat-Nachricht (Gateway-Slash-Command,
„Restart gateway after draining active runs"). Der User tippt es direkt im
Channel/DM. IMMER zuerst diesen Weg nennen./restart genügt.hermes gateway restart oder systemctl restart … aus einer
Bediener-Shell außerhalb des Gateway-Prozesses funktioniert — aber nur
dort. Aus einem Tool-Aufruf dieser Session heraus ist es derselbe
blockierte Fall. Bei benannten Profilen heißt der Unit
hermes-gateway-<profil>, nicht hermes-gateway.service.Nach dem Neustart verifizieren: Plugin-Tools live testen
(chatto_list_rooms via tool_call), im Log prüfen, dass der Adapter sauber
lädt.
git fetch treffen —
ohne fetch ist der lokale Status wertlos.git -C in JEDEM Kommando. git pull ohne -C trifft den Checkout der
Session, nicht den Plugin-Checkout.bash -n skript.sh mit
hermes gateway restart darin wird abgelehnt — auch unter einem anderen
Dateinamen und auch als sh -n. chmod, mv und cp sind nicht betroffen.
Ein Skript also nicht an den Interpreter geben, um es zu prüfen: Inhalt mit den
Datei-Tools lesen. Es lohnt auch nicht, es umzubenennen — der Guard liest
Bytes, nicht Namen./dev/null (oder /dev/zero, /dev/fd/N) lässt der Guard
bewusst fehlschlagen. Das ist keine Störung, sondern das gewollte Verhalten.
Eine Umleitung nach > /dev/null in einer Shell-Datei ist davon nicht
betroffen — die wird maskiert.