La “presenza” di OpenClaw è una vista leggera, best-effort, di:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- il Gateway stesso, e
- i client connessi al Gateway (app Mac, WebChat, CLI, ecc.)
Campi di presenza (cosa viene mostrato)
Le voci di presenza sono oggetti strutturati con campi come:instanceId(facoltativo ma fortemente consigliato): identità stabile del client (di solitoconnect.client.instanceId)host: nome host leggibileip: indirizzo IP best-effortversion: stringa della versione del clientdeviceFamily/modelIdentifier: suggerimenti sull’hardwaremode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: “secondi dall’ultimo input dell’utente” (se noto)reason:self,connect,node-connected,periodic, …ts: timestamp dell’ultimo aggiornamento (ms dall’epoch)
Produttori (da dove proviene la presenza)
Le voci di presenza sono prodotte da più sorgenti e unite.1) Voce self del Gateway
Il Gateway inizializza sempre una voce “self” all’avvio, così le UI mostrano l’host del Gateway anche prima che si connettano client.2) Connessione WebSocket
Ogni client WS inizia con una richiestaconnect. Dopo un handshake riuscito, il
Gateway esegue l’upsert di una voce di presenza per quella connessione.
Perché i comandi CLI una tantum non vengono mostrati
La CLI spesso si connette per comandi brevi e una tantum. Per evitare di riempire di rumore l’elenco Istanze,client.mode === "cli" non viene trasformato in una voce di presenza.
3) Beacon system-event
I client possono inviare beacon periodici più ricchi tramite il metodo system-event. L’app Mac
lo usa per segnalare nome host, IP e lastInputSeconds.
4) Connessioni Node (role: node)
Quando un node si connette tramite il WebSocket del Gateway conrole: node, il Gateway
esegue l’upsert di una voce di presenza per quel node (lo stesso flusso degli altri client WS).
Regole di unione e deduplicazione (perché instanceId è importante)
Le voci di presenza sono memorizzate in una singola mappa in memoria:
- Le voci sono indicizzate da una chiave di presenza.
- La chiave migliore è un
instanceIdstabile (daconnect.client.instanceId) che sopravvive ai riavvii. - Le chiavi non distinguono tra maiuscole e minuscole.
instanceId stabile, può comparire come riga
duplicata.
TTL e dimensione limitata
La presenza è intenzionalmente effimera:- TTL: le voci più vecchie di 5 minuti vengono eliminate
- Voci massime: 200 (le più vecchie vengono rimosse per prime)
Avvertenza su remoto/tunnel (IP di loopback)
Quando un client si connette tramite un tunnel SSH o un inoltro di porta locale, il Gateway può vedere l’indirizzo remoto come127.0.0.1. Per evitare di sovrascrivere un IP valido segnalato dal client,
gli indirizzi remoti di loopback vengono ignorati.
Consumatori
Scheda Istanze di macOS
L’app macOS renderizza l’output disystem-presence e applica un piccolo indicatore di stato
(Attivo/Inattivo/Obsoleto) in base all’età dell’ultimo aggiornamento.
Suggerimenti per il debug
- Per vedere l’elenco grezzo, chiama
system-presencesul Gateway. - Se vedi duplicati:
- verifica che i client inviino un
client.instanceIdstabile nell’handshake - verifica che i beacon periodici usino lo stesso
instanceId - controlla se nella voce derivata dalla connessione manca
instanceId(in quel caso i duplicati sono previsti)
- verifica che i client inviino un
Correlati
Indicatori di digitazione
Quando vengono inviati gli indicatori di digitazione e come configurarli.
Streaming e suddivisione in chunk
Streaming in uscita, suddivisione in chunk e formattazione per canale.
Architettura del Gateway
Componenti del Gateway e protocollo WebSocket che guida gli aggiornamenti di presenza.
Protocollo del Gateway
Il protocollo wire per
connect, system-event e system-presence.