Presence
„Presence” w OpenClaw to lekki widok best-effort obejmujący:- sam Gateway, oraz
- klientów połączonych z Gateway (aplikacja Mac, WebChat, CLI itd.)
Pola presence (co się wyświetla)
Wpisy presence to strukturalne obiekty z polami takimi jak:instanceId(opcjonalne, ale zdecydowanie zalecane): stabilna tożsamość klienta (zwykleconnect.client.instanceId)host: przyjazna dla człowieka nazwa hostaip: adres IP w trybie best-effortversion: ciąg wersji klientadeviceFamily/modelIdentifier: wskazówki dotyczące sprzętumode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: „sekundy od ostatniego wejścia użytkownika” (jeśli znane)reason:self,connect,node-connected,periodic, …ts: timestamp ostatniej aktualizacji (ms od epoki)
Producenci (skąd bierze się presence)
Wpisy presence są tworzone przez wiele źródeł i scalane.1) Własny wpis Gateway
Gateway zawsze inicjalizuje własny wpis „self” przy starcie, aby UI pokazywało host gateway jeszcze zanim połączą się jakiekolwiek klienty.2) Połączenie WebSocket
Każdy klient WS zaczyna od żądaniaconnect. Po udanym handshake
Gateway wykonuje upsert wpisu presence dla tego połączenia.
Dlaczego jednorazowe polecenia CLI się nie pojawiają
CLI często łączy się na krótko w celu wykonania jednorazowych poleceń. Aby uniknąć zaśmiecania listy Instances,client.mode === "cli" nie jest zamieniane na wpis presence.
3) Beacony system-event
Klienty mogą wysyłać bogatsze okresowe beacony przez metodę system-event. Aplikacja Mac
używa tego do raportowania nazwy hosta, IP i lastInputSeconds.
4) Połączenia węzłów (role: node)
Gdy węzeł łączy się przez Gateway WebSocket zrole: node, Gateway
wykonuje upsert wpisu presence dla tego węzła (ten sam przepływ co dla innych klientów WS).
Reguły scalania + deduplikacji (dlaczego instanceId ma znaczenie)
Wpisy presence są przechowywane w jednej mapie w pamięci:
- Wpisy są kluczowane przez klucz presence.
- Najlepszym kluczem jest stabilne
instanceId(zconnect.client.instanceId), które przetrwa restarty. - Klucze nie rozróżniają wielkości liter.
instanceId, może pojawić się jako
zduplikowany wiersz.
TTL i ograniczony rozmiar
Presence jest celowo efemeryczne:- TTL: wpisy starsze niż 5 minut są usuwane
- Maksymalna liczba wpisów: 200 (najstarsze są usuwane jako pierwsze)
Zastrzeżenie dotyczące zdalnego połączenia/tunelu (adresy loopback)
Gdy klient łączy się przez tunel SSH / lokalne przekierowanie portu, Gateway może widzieć adres zdalny jako127.0.0.1. Aby nie nadpisywać poprawnego adresu IP raportowanego przez klienta,
adresy zdalne loopback są ignorowane.
Konsumenci
Karta Instances w macOS
Aplikacja macOS renderuje wyniksystem-presence i stosuje mały wskaźnik stanu
(Active/Idle/Stale) na podstawie wieku ostatniej aktualizacji.
Wskazówki debugowania
- Aby zobaczyć surową listę, wywołaj
system-presencewzględem Gateway. - Jeśli widzisz duplikaty:
- potwierdź, że klienty wysyłają stabilne
client.instanceIdw handshake - potwierdź, że okresowe beacony używają tego samego
instanceId - sprawdź, czy we wpisie pochodzącym z połączenia nie brakuje
instanceId(duplikaty są wtedy oczekiwane)
- potwierdź, że klienty wysyłają stabilne