Multi-agent
สถานะออนไลน์
OpenClaw "presence" เป็นมุมมองแบบเบาและทำงานอย่างสุดความสามารถของ:
- ตัว Gateway เอง และ
- ไคลเอ็นต์ที่ผู้ใช้มองเห็นซึ่งเชื่อมต่อกับ Gateway (แอป Mac, WebChat, โหนด เป็นต้น)
Presence แสดงผลเมทาดาทาการเชื่อมต่อแบบสดในหน้า Devices ของ Control UI (ภายใต้ Settings → Devices) และแท็บ Instances ของแอป macOS
หน้านี้ครอบคลุมรายชื่อไคลเอ็นต์ของ Gateway หากต้องการตรวจหา Mac ที่ใช้งานล่าสุด และกำหนดเส้นทางการแจ้งเตือนของโหนดไปยังเครื่องนั้น โปรดดู Presence ของคอมพิวเตอร์ที่ใช้งานอยู่
ฟิลด์ Presence (ข้อมูลที่แสดง)
รายการ Presence เป็นออบเจ็กต์ที่มีโครงสร้างพร้อมฟิลด์ต่างๆ เช่น:
instanceId(ไม่บังคับแต่แนะนำอย่างยิ่ง): ข้อมูลประจำตัวไคลเอ็นต์ที่คงที่ (โดยทั่วไปคือconnect.client.instanceId)host: ชื่อโฮสต์ที่มนุษย์เข้าใจได้ง่ายip: ที่อยู่ IP ที่ระบุอย่างสุดความสามารถversion: สตริงเวอร์ชันของไคลเอ็นต์deviceFamily/modelIdentifier: ข้อมูลบ่งชี้ฮาร์ดแวร์mode:ui,webchat,cli,backend,node,probe,testlastInputSeconds: จำนวนวินาทีตั้งแต่การป้อนข้อมูลครั้งล่าสุดของผู้ใช้ หากทราบreason: สตริงรูปแบบอิสระที่ไคลเอ็นต์ระบุ โดยตัว Gateway เองจะส่งเฉพาะself,connectและdisconnectdeviceId,roles,scopes: ข้อมูลประจำตัวอุปกรณ์และข้อมูลบ่งชี้บทบาท/ขอบเขตจากการแฮนด์เชคการเชื่อมต่อts: การประทับเวลาของการอัปเดตล่าสุด (มิลลิวินาทีตั้งแต่ epoch)
แหล่งสร้าง (Presence มาจากที่ใด)
รายการ Presence ถูกสร้างจากหลายแหล่งและถูก ผสาน เข้าด้วยกัน
1) รายการของ Gateway เอง
Gateway จะสร้างรายการ "self" เริ่มต้นเสมอเมื่อเริ่มทำงาน เพื่อให้ UI แสดงโฮสต์ของ Gateway แม้ก่อนที่จะมีไคลเอ็นต์เชื่อมต่อ
2) การเชื่อมต่อ WebSocket
ไคลเอ็นต์ WS ทุกตัวเริ่มต้นด้วยคำขอ connect เมื่อแฮนด์เชคสำเร็จ
Gateway จะเพิ่มหรืออัปเดตรายการ Presence สำหรับการเชื่อมต่อนั้น
เหตุใดการเชื่อมต่อระยะสั้นของระนาบควบคุมจึงไม่ปรากฏ
คำสั่ง CLI, ไคลเอ็นต์ RPC ฝั่งแบ็กเอนด์ และโพรบมักเชื่อมต่อเพียงชั่วครู่ เพื่อหลีกเลี่ยง
การเก็บความเปลี่ยนแปลงเหล่านั้นไว้ตลอด TTL ของ Presence ไคลเอ็นต์ในโหมด cli, backend
หรือ probe จะ ไม่ ถูกแปลงเป็นรายการ Presence ไคลเอ็นต์ในโหมดทดสอบ
ยังคงได้รับการติดตาม เนื่องจากชุดทดสอบใช้ไคลเอ็นต์เหล่านี้แทนไคลเอ็นต์จริง
3) บีคอน system-event
ไคลเอ็นต์สามารถส่งบีคอนตามช่วงเวลาที่มีข้อมูลละเอียดขึ้นผ่านเมธอด system-event แอป Mac
ใช้วิธีนี้เพื่อรายงานชื่อโฮสต์, IP, เวอร์ชัน และเมทาดาทาความพร้อมใช้งาน กิจกรรมจาก
การป้อนข้อมูลทางกายภาพไม่ใช่ส่วนหนึ่งของบีคอนทั่วไปนี้ เหตุการณ์โหนดแบบเนทีฟสำหรับวัตถุประสงค์เฉพาะ
ที่อธิบายไว้ใน Presence ของคอมพิวเตอร์ที่ใช้งานอยู่ เป็นผู้รับผิดชอบข้อมูลดังกล่าว
Mac ติดแท็กบีคอนเหล่านี้ด้วย system-presence-clear-last-input; Gateway เวอร์ชันปัจจุบัน
ใช้เครื่องหมายที่เข้ากันได้ย้อนหลังนี้เพื่อลบข้อมูลความใหม่ของการป้อนข้อมูลที่อาจหลงเหลือจาก
แอปเวอร์ชันเก่า บีคอนยังมีค่าคงที่ 30 วัน เพื่อให้ Gateway เวอร์ชันเก่าที่
ละเว้นแท็กเขียนทับค่าความใหม่ที่แน่นอนแทนการเก็บค่านั้นไว้ ไม่มีการสุ่มตัวอย่างกิจกรรมใหม่
สำหรับค่าความเข้ากันได้นี้
4) การเชื่อมต่อของโหนด (บทบาท: node)
เมื่อโหนดเชื่อมต่อผ่าน WebSocket ของ Gateway ด้วย role: node Gateway
จะเพิ่มหรืออัปเดตรายการ Presence สำหรับโหนดนั้น (เป็นขั้นตอนเดียวกับไคลเอ็นต์ WS อื่นๆ)
กฎการผสานและขจัดรายการซ้ำ (เหตุใด instanceId จึงสำคัญ)
รายการ Presence ถูกจัดเก็บไว้ในแมปในหน่วยความจำเพียงชุดเดียว โดยใช้คีย์แบบไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่
จากค่าแรกที่มีอยู่ตามลำดับดังนี้: ID อุปกรณ์ที่จับคู่, connect.client.instanceId
หรือ ID ประจำการเชื่อมต่อเป็นทางเลือกสุดท้าย
ไคลเอ็นต์ระยะสั้นของระนาบควบคุมจะไม่ถูกติดตามเลย (ดู
ด้านบน) ดังนั้น ID การเชื่อมต่อของไคลเอ็นต์เหล่านี้จึงไม่กลายเป็นคีย์ สำหรับไคลเอ็นต์อื่นทั้งหมด
การใช้ ID การเชื่อมต่อเป็นทางเลือกสำรองหมายความว่าไคลเอ็นต์ที่เชื่อมต่อใหม่โดยไม่มี
instanceId ที่คงที่จะแสดงเป็นแถว ซ้ำ
TTL และขนาดที่มีขอบเขตจำกัด
Presence ถูกออกแบบให้เป็นข้อมูลชั่วคราว:
- TTL: รายการที่เก่ากว่า 5 นาทีจะถูกตัดออก
- จำนวนรายการสูงสุด: 200 (รายการที่เก่าที่สุดจะถูกนำออกก่อน)
วิธีนี้ช่วยให้รายการเป็นปัจจุบันและหลีกเลี่ยงการใช้หน่วยความจำที่เพิ่มขึ้นอย่างไม่มีขอบเขต
ข้อควรระวังเกี่ยวกับการเชื่อมต่อระยะไกล/ทันเนล (IP แบบลูปแบ็ก)
เมื่อไคลเอ็นต์เชื่อมต่อผ่านทันเนล SSH / การส่งต่อพอร์ตภายในเครื่อง Gateway
อาจเห็นที่อยู่ระยะไกลเป็น 127.0.0.1 เพื่อหลีกเลี่ยงการบันทึกที่อยู่ทันเนลนั้น
เป็น IP ของไคลเอ็นต์ การจัดการการเชื่อมต่อจะละเว้น ip ทั้งหมดสำหรับ
ไคลเอ็นต์ที่ตรวจพบว่าเป็นภายในเครื่อง (ลูปแบ็ก) แทนการเขียนที่อยู่ลูปแบ็ก
ลงในรายการ
ส่วนที่นำข้อมูลไปใช้
หน้า Devices ของ Control UI
หน้า Devices เชื่อมโยง system-presence เข้ากับระเบียนการจับคู่และโหนด
ที่จัดเก็บถาวร โดยปักหมุดบีคอนของ Gateway เองไว้เป็นลำดับแรก และใช้ ID อุปกรณ์หรือ
อินสแตนซ์ที่ตรงกันสำหรับเมทาดาทาแพลตฟอร์ม เวอร์ชัน โมเดล และความใหม่ของการป้อนข้อมูลแบบสด
แท็บ Instances ของ macOS
แอป macOS แสดงผลลัพธ์จาก system-presence และใช้ตัวบ่งชี้สถานะขนาดเล็ก
(Active/Idle/Stale) ตามอายุของการอัปเดตล่าสุด
เคล็ดลับการแก้ไขข้อบกพร่อง
- หากต้องการดูรายการดิบ ให้เรียก
system-presenceกับ Gateway - หากพบรายการซ้ำ:
- ตรวจสอบว่าไคลเอ็นต์ส่ง
client.instanceIdที่คงที่ในการแฮนด์เชค - ตรวจสอบว่าบีคอนตามช่วงเวลาใช้
instanceIdเดียวกัน - ตรวจสอบว่ารายการที่ได้จากการเชื่อมต่อไม่มี
instanceIdหรือไม่ (คาดว่าจะเกิดรายการซ้ำ)
- ตรวจสอบว่าไคลเอ็นต์ส่ง
ที่เกี่ยวข้อง
วิธีที่การป้อนข้อมูลทางกายภาพบน Mac ใช้เลือกโหนดที่ใช้งานอยู่และกำหนดเส้นทางการแจ้งเตือนการเชื่อมต่อ
เวลาที่ส่งตัวบ่งชี้การพิมพ์และวิธีปรับแต่ง
การสตรีมขาออก การแบ่งส่วน และการจัดรูปแบบแยกตามช่องทาง
ส่วนประกอบของ Gateway และโปรโตคอล WebSocket ที่ขับเคลื่อนการอัปเดต Presence
โปรโตคอลบนสายสื่อสารสำหรับ connect, system-event และ system-presence