मुख्य सामग्री पर जाएं
OpenClaw “उपस्थिति” इनका एक हल्का, सर्वोत्तम-प्रयास दृश्य है:
  • स्वयं Gateway, और
  • Gateway से जुड़े क्लाइंट (mac ऐप, WebChat, CLI, आदि)
उपस्थिति का उपयोग मुख्य रूप से macOS ऐप के इंस्टेंस टैब को रेंडर करने और ऑपरेटर को त्वरित दृश्यता देने के लिए किया जाता है।

उपस्थिति फ़ील्ड (क्या दिखाई देता है)

उपस्थिति प्रविष्टियां ऐसे संरचित ऑब्जेक्ट होती हैं जिनमें इस तरह के फ़ील्ड होते हैं:
  • 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 के बाद से ms)

प्रोड्यूसर (उपस्थिति कहां से आती है)

उपस्थिति प्रविष्टियां कई स्रोतों द्वारा बनाई जाती हैं और मर्ज की जाती हैं।

1) Gateway स्वयं प्रविष्टि

Gateway हमेशा स्टार्टअप पर एक “स्वयं” प्रविष्टि सीड करता है ताकि UI किसी भी क्लाइंट के जुड़ने से पहले भी gateway होस्ट दिखाएं।

2) WebSocket कनेक्ट

हर WS क्लाइंट एक connect अनुरोध से शुरू होता है। सफल हैंडशेक पर Gateway उस कनेक्शन के लिए एक उपस्थिति प्रविष्टि upsert करता है।

एकबारगी CLI कमांड क्यों दिखाई नहीं देते

CLI अक्सर छोटे, एकबारगी कमांड के लिए जुड़ता है। इंस्टेंस सूची को स्पैम होने से बचाने के लिए, client.mode === "cli" को उपस्थिति प्रविष्टि में नहीं बदला जाता।

3) system-event बीकन

क्लाइंट system-event विधि के माध्यम से अधिक समृद्ध आवधिक बीकन भेज सकते हैं। mac ऐप इसका उपयोग होस्ट नाम, IP, और lastInputSeconds रिपोर्ट करने के लिए करता है।

4) Node कनेक्ट (भूमिका: node)

जब कोई node Gateway WebSocket पर role: node के साथ जुड़ता है, तो Gateway उस node के लिए एक उपस्थिति प्रविष्टि upsert करता है (अन्य WS क्लाइंट जैसी ही प्रक्रिया)।

मर्ज + डीडुप नियम (instanceId क्यों महत्वपूर्ण है)

उपस्थिति प्रविष्टियां एक एकल इन-मेमोरी मैप में संग्रहीत होती हैं:
  • प्रविष्टियां एक उपस्थिति कुंजी द्वारा keyed होती हैं।
  • सबसे अच्छी कुंजी एक स्थिर instanceId है (connect.client.instanceId से) जो पुनरारंभों के बाद भी बनी रहती है।
  • कुंजियां केस-असंवेदनशील होती हैं।
यदि कोई क्लाइंट स्थिर instanceId के बिना फिर से जुड़ता है, तो वह डुप्लिकेट पंक्ति के रूप में दिखाई दे सकता है।

TTL और सीमित आकार

उपस्थिति जानबूझकर अस्थायी है:
  • TTL: 5 मिनट से पुरानी प्रविष्टियां हटाई जाती हैं
  • अधिकतम प्रविष्टियां: 200 (सबसे पुरानी पहले हटाई जाती हैं)
यह सूची को ताजा रखता है और असीमित मेमोरी वृद्धि से बचाता है।

रिमोट/टनल सावधानी (loopback IP)

जब कोई क्लाइंट SSH टनल / local पोर्ट फ़ॉरवर्ड के माध्यम से जुड़ता है, तो Gateway रिमोट पते को 127.0.0.1 के रूप में देख सकता है। किसी अच्छे क्लाइंट-रिपोर्ट किए गए IP को ओवरराइट करने से बचाने के लिए, loopback रिमोट पतों को अनदेखा किया जाता है।

उपभोक्ता

macOS इंस्टेंस टैब

macOS ऐप system-presence के आउटपुट को रेंडर करता है और अंतिम अपडेट की उम्र के आधार पर एक छोटा स्थिति संकेतक (सक्रिय/निष्क्रिय/बासी) लागू करता है।

डीबगिंग सुझाव

  • कच्ची सूची देखने के लिए, Gateway के विरुद्ध system-presence कॉल करें।
  • यदि आपको डुप्लिकेट दिखाई दें:
    • पुष्टि करें कि क्लाइंट हैंडशेक में एक स्थिर client.instanceId भेजते हैं
    • पुष्टि करें कि आवधिक बीकन वही instanceId उपयोग करते हैं
    • जांचें कि क्या कनेक्शन-व्युत्पन्न प्रविष्टि में instanceId नहीं है (डुप्लिकेट अपेक्षित हैं)

संबंधित

Typing indicators

टाइपिंग संकेतक कब भेजे जाते हैं और उन्हें कैसे ट्यून करें।

Streaming and chunking

आउटबाउंड स्ट्रीमिंग, चंकिंग, और प्रति-चैनल फ़ॉर्मैटिंग।

Gateway architecture

Gateway घटक और WebSocket प्रोटोकॉल जो उपस्थिति अपडेट चलाता है।

Gateway protocol

connect, system-event, और system-presence के लिए वायर प्रोटोकॉल।