OpenClaw “presence” เป็นมุมมองแบบเบาและพยายามให้ดีที่สุดของ: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.
- ตัว Gateway เอง และ
- ไคลเอนต์ที่เชื่อมต่อกับ Gateway (แอป mac, WebChat, CLI ฯลฯ)
ฟิลด์ Presence (สิ่งที่แสดงขึ้นมา)
รายการ Presence เป็นอ็อบเจ็กต์ที่มีโครงสร้างพร้อมฟิลด์ เช่น:instanceId(ไม่บังคับแต่แนะนำอย่างยิ่ง): ตัวตนไคลเอนต์ที่เสถียร (โดยปกติคือconnect.client.instanceId)host: ชื่อโฮสต์ที่มนุษย์อ่านเข้าใจง่ายip: ที่อยู่ IP แบบพยายามให้ดีที่สุดversion: สตริงเวอร์ชันของไคลเอนต์deviceFamily/modelIdentifier: คำใบ้เกี่ยวกับฮาร์ดแวร์mode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: “จำนวนวินาทีตั้งแต่มีอินพุตจากผู้ใช้ครั้งล่าสุด” (ถ้าทราบ)reason:self,connect,node-connected,periodic, …ts: เวลาประทับการอัปเดตล่าสุด (มิลลิวินาทีนับตั้งแต่ epoch)
ผู้ผลิตข้อมูล (presence มาจากที่ใด)
รายการ Presence ถูกสร้างจากหลายแหล่งและถูก รวม เข้าด้วยกัน1) รายการ self ของ Gateway
Gateway จะตั้งค่าเริ่มต้นรายการ “self” ตอนเริ่มทำงานเสมอ เพื่อให้ UI แสดงโฮสต์ของ Gateway แม้ก่อนที่ไคลเอนต์ใด ๆ จะเชื่อมต่อ2) การเชื่อมต่อ WebSocket
ไคลเอนต์ WS ทุกตัวเริ่มด้วยคำขอconnect เมื่อ handshake สำเร็จ
Gateway จะ upsert รายการ Presence สำหรับการเชื่อมต่อนั้น
เหตุผลที่คำสั่ง CLI แบบครั้งเดียวไม่แสดงขึ้นมา
CLI มักเชื่อมต่อสำหรับคำสั่งสั้น ๆ แบบครั้งเดียว เพื่อหลีกเลี่ยงการทำให้รายการ Instances เต็มไปด้วยรายการไม่จำเป็นclient.mode === "cli" จึง ไม่ ถูกเปลี่ยนเป็นรายการ Presence
3) beacon system-event
ไคลเอนต์สามารถส่ง beacon ตามรอบที่มีข้อมูลสมบูรณ์ขึ้นผ่านเมธอด system-event แอป mac
ใช้สิ่งนี้เพื่อรายงานชื่อโฮสต์, IP และ lastInputSeconds
4) การเชื่อมต่อของ Node (role: node)
เมื่อ node เชื่อมต่อผ่าน WebSocket ของ Gateway ด้วยrole: node Gateway
จะ upsert รายการ Presence สำหรับ node นั้น (เป็น flow เดียวกับไคลเอนต์ WS อื่น ๆ)
กฎการรวม + การลบรายการซ้ำ (เหตุผลที่ instanceId สำคัญ)
รายการ Presence ถูกเก็บไว้ในแผนที่ในหน่วยความจำชุดเดียว:
- รายการถูก key ด้วย presence key
- key ที่ดีที่สุดคือ
instanceIdที่เสถียร (จากconnect.client.instanceId) ซึ่งคงอยู่ข้ามการรีสตาร์ต - key ไม่สนใจตัวพิมพ์เล็กใหญ่
instanceId ที่เสถียร อาจแสดงเป็นแถว
ซ้ำ
TTL และขนาดที่จำกัด
Presence มีลักษณะชั่วคราวโดยตั้งใจ:- TTL: รายการที่เก่ากว่า 5 นาทีจะถูกตัดออก
- จำนวนรายการสูงสุด: 200 (รายการเก่าสุดถูกลบทิ้งก่อน)
ข้อควรระวังเกี่ยวกับรีโมต/ทันเนล (IP แบบ loopback)
เมื่อไคลเอนต์เชื่อมต่อผ่าน SSH tunnel / local port forward Gateway อาจ เห็นที่อยู่ระยะไกลเป็น127.0.0.1 เพื่อหลีกเลี่ยงการเขียนทับ IP ที่ไคลเอนต์รายงานมาอย่างถูกต้อง
ที่อยู่ระยะไกลแบบ loopback จะถูกละเว้น
ผู้บริโภคข้อมูล
แท็บ Instances ของ macOS
แอป macOS แสดงผลลัพธ์ของsystem-presence และใช้ตัวบ่งชี้สถานะขนาดเล็ก
(Active/Idle/Stale) ตามอายุของการอัปเดตล่าสุด
เคล็ดลับการดีบัก
- หากต้องการดูรายการดิบ ให้เรียก
system-presenceกับ Gateway - หากคุณเห็นรายการซ้ำ:
- ยืนยันว่าไคลเอนต์ส่ง
client.instanceIdที่เสถียรใน handshake - ยืนยันว่า beacon ตามรอบใช้
instanceIdเดียวกัน - ตรวจสอบว่ารายการที่ได้จากการเชื่อมต่อขาด
instanceIdหรือไม่ (รายการซ้ำเป็นสิ่งที่คาดไว้)
- ยืนยันว่าไคลเอนต์ส่ง
ที่เกี่ยวข้อง
ตัวบ่งชี้การพิมพ์
เมื่อใดที่ตัวบ่งชี้การพิมพ์ถูกส่ง และวิธีปรับแต่ง
การสตรีมและการแบ่งชังก์
การสตรีมขาออก การแบ่งชังก์ และการจัดรูปแบบแยกตามช่องทาง
สถาปัตยกรรม Gateway
คอมโพเนนต์ของ Gateway และโปรโตคอล WebSocket ที่ขับเคลื่อนการอัปเดต Presence
โปรโตคอล Gateway
โปรโตคอลบนสายสำหรับ
connect, system-event และ system-presence