Präsenz
OpenClaw-„Presence“ ist eine leichtgewichtige, Best‑Effort-Ansicht von:- dem Gateway selbst und
- Clients, die mit dem Gateway verbunden sind (macOS-App, WebChat, CLI usw.)
Presence-Felder (was angezeigt wird)
Presence-Einträge sind strukturierte Objekte mit Feldern wie:instanceId(optional, aber dringend empfohlen): stabile Client-Identität (meistconnect.client.instanceId)host: benutzerfreundlicher Hostnameip: Best‑Effort-IP-Adresseversion: Client-VersionsstringdeviceFamily/modelIdentifier: Hardware-Hinweisemode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: „Sekunden seit letzter Benutzereingabe“ (falls bekannt)reason:self,connect,node-connected,periodic, …ts: Zeitstempel der letzten Aktualisierung (ms seit Epoche)
Erzeuger (woher Presence stammt)
Presence-Einträge werden von mehreren Quellen erzeugt und zusammengeführt.1. Gateway-Selbsteintrag
Das Gateway legt beim Start immer einen „Self“-Eintrag an, sodass UIs den Gateway-Host anzeigen, noch bevor sich Clients verbinden.2. WebSocket-Verbindung
Jeder WS-Client beginnt mit einerconnect-Anfrage. Nach erfolgreichem
Handshake führt das Gateway ein Upsert eines Presence-Eintrags für diese
Verbindung aus.
Warum einmalige CLI-Befehle nicht erscheinen
Die CLI verbindet sich häufig nur kurz für einmalige Befehle. Um ein Überfluten der Instances-Liste zu vermeiden, wirdclient.mode === "cli" nicht
in einen Presence-Eintrag umgewandelt.
3. system-event-Beacons
Clients können reichhaltigere periodische Beacons über die Methode
system-event senden. Die macOS-App nutzt dies, um Hostname, IP und
lastInputSeconds zu melden.
4. Node-Verbindungen (Rolle: node)
Wenn sich ein Node über den Gateway-WebSocket mitrole: node verbindet,
führt das Gateway ein Upsert eines Presence-Eintrags für diesen Node aus
(gleicher Ablauf wie bei anderen WS-Clients).
Merge- und Deduplizierungsregeln (warum instanceId wichtig ist)
Presence-Einträge werden in einer einzigen In-Memory-Map gespeichert:
- Einträge werden durch einen Presence-Schlüssel identifiziert.
- Der beste Schlüssel ist eine stabile
instanceId(ausconnect.client.instanceId), die Neustarts überdauert. - Schlüssel sind nicht groß-/kleinschreibungssensitiv.
instanceId erneut verbindet, kann
er als doppelte Zeile erscheinen.
TTL und begrenzte Größe
Presence ist absichtlich ephemer:- TTL: Einträge, die älter als 5 Minuten sind, werden entfernt
- Max. Einträge: 200 (älteste werden zuerst verworfen)
Remote-/Tunnel-Hinweis (Loopback-IP-Adressen)
Wenn sich ein Client über einen SSH-Tunnel / lokale Portweiterleitung verbindet, kann das Gateway die entfernte Adresse als127.0.0.1 sehen. Um eine gute,
vom Client gemeldete IP nicht zu überschreiben, werden Loopback-Remote-Adressen
ignoriert.
Konsumenten
Registerkarte „Instances“ in macOS
Die macOS-App rendert die Ausgabe vonsystem-presence und wendet einen kleinen
Statusindikator (Aktiv/Idle/Veraltet) basierend auf dem Alter der letzten
Aktualisierung an.
Debugging-Tipps
- Um die Rohdatenliste zu sehen, rufen Sie
system-presencegegen das Gateway auf. - Wenn Sie Duplikate sehen:
- bestätigen Sie, dass Clients beim Handshake eine stabile
client.instanceIdsenden - bestätigen Sie, dass periodische Beacons dieselbe
instanceIdverwenden - prüfen Sie, ob dem verbindungsbasierten Eintrag
instanceIdfehlt (Duplikate sind dann zu erwarten)
- bestätigen Sie, dass Clients beim Handshake eine stabile