Multi-agent
Kehadiran
OpenClaw "kehadiran" adalah tampilan ringan dengan upaya terbaik untuk:
- Gateway itu sendiri, dan
- klien yang terhubung ke Gateway (aplikasi mac, WebChat, CLI, dll.)
Kehadiran digunakan terutama untuk merender tab Instans aplikasi macOS dan untuk memberikan visibilitas operator secara cepat.
Bidang kehadiran (yang ditampilkan)
Entri kehadiran adalah objek terstruktur dengan bidang seperti:
instanceId(opsional tetapi sangat disarankan): identitas klien yang stabil (biasanyaconnect.client.instanceId)host: nama host yang mudah dipahami manusiaip: alamat IP dengan upaya terbaikversion: string versi kliendeviceFamily/modelIdentifier: petunjuk perangkat kerasmode:ui,webchat,cli,backend,probe,test,node, ...lastInputSeconds: "detik sejak input pengguna terakhir" (jika diketahui)reason:self,connect,node-connected,periodic, ...ts: stempel waktu pembaruan terakhir (md sejak epoch)
Produsen (asal kehadiran)
Entri kehadiran dihasilkan oleh beberapa sumber dan digabungkan.
1) Entri mandiri Gateway
Gateway selalu menyiapkan entri "mandiri" saat startup agar UI menampilkan host gateway bahkan sebelum ada klien yang terhubung.
2) Koneksi WebSocket
Setiap klien WS dimulai dengan permintaan connect. Setelah handshake berhasil,
Gateway melakukan upsert entri kehadiran untuk koneksi tersebut.
Mengapa perintah CLI sekali jalan tidak muncul
CLI sering terhubung untuk perintah singkat sekali jalan. Untuk menghindari spam pada
daftar Instans, client.mode === "cli" tidak diubah menjadi entri kehadiran.
3) Beacon system-event
Klien dapat mengirim beacon berkala yang lebih kaya melalui metode system-event. Aplikasi mac
menggunakan ini untuk melaporkan nama host, IP, dan lastInputSeconds.
4) Koneksi Node (role: node)
Ketika sebuah node terhubung melalui WebSocket Gateway dengan role: node, Gateway
melakukan upsert entri kehadiran untuk node tersebut (alur yang sama seperti klien WS lainnya).
Aturan penggabungan + deduplikasi (mengapa instanceId penting)
Entri kehadiran disimpan dalam satu map dalam memori:
- Entri diberi kunci berdasarkan kunci kehadiran.
- Kunci terbaik adalah
instanceIdyang stabil (dariconnect.client.instanceId) yang bertahan setelah restart. - Kunci tidak peka huruf besar/kecil.
Jika klien terhubung ulang tanpa instanceId yang stabil, klien tersebut dapat muncul sebagai
baris duplikat.
TTL dan ukuran terbatas
Kehadiran sengaja dibuat sementara:
- TTL: entri yang lebih lama dari 5 menit dipangkas
- Entri maksimum: 200 (yang paling lama dihapus terlebih dahulu)
Ini menjaga daftar tetap segar dan menghindari pertumbuhan memori tanpa batas.
Catatan remote/tunnel (IP loopback)
Ketika klien terhubung melalui tunnel SSH / penerusan port lokal, Gateway dapat
melihat alamat remote sebagai 127.0.0.1. Untuk menghindari penimpaan IP baik yang dilaporkan klien,
alamat remote loopback diabaikan.
Konsumen
Tab Instans macOS
Aplikasi macOS merender keluaran system-presence dan menerapkan indikator status kecil
(Aktif/Menganggur/Kedaluwarsa) berdasarkan usia pembaruan terakhir.
Tips debugging
- Untuk melihat daftar mentah, panggil
system-presenceterhadap Gateway. - Jika Anda melihat duplikat:
- pastikan klien mengirim
client.instanceIdyang stabil dalam handshake - pastikan beacon berkala menggunakan
instanceIdyang sama - periksa apakah entri yang diturunkan dari koneksi tidak memiliki
instanceId(duplikat memang diharapkan)
- pastikan klien mengirim
Terkait
Kapan indikator mengetik dikirim dan cara menyesuaikannya.
Streaming keluar, chunking, dan pemformatan per saluran.
Komponen Gateway dan protokol WebSocket yang mendorong pembaruan kehadiran.
Protokol wire untuk connect, system-event, dan system-presence.