Gateway-स्वामित्व वाला पेयरिंग (विकल्प B)
Gateway-स्वामित्व वाली pairing में, Gateway यह तय करने का स्रोत है कि कौन से nodes जुड़ने की अनुमति रखते हैं। UIs (macOS ऐप, भविष्य के क्लाइंट) केवल फ्रंटएंड हैं जो लंबित अनुरोधों को स्वीकृत या अस्वीकार करते हैं। महत्वपूर्ण: WS nodesconnect के दौरान device pairing (role node) का उपयोग करते हैं।
node.pair.* एक अलग pairing स्टोर है और WS handshake को gate नहीं करता।
केवल वे क्लाइंट जो स्पष्ट रूप से node.pair.* कॉल करते हैं, इस फ़्लो का उपयोग करते हैं।
अवधारणाएँ
- लंबित अनुरोध: किसी नोड ने जुड़ने का अनुरोध किया; अनुमोदन आवश्यक है।
- पेयर किया गया नोड: अनुमोदित नोड जिसके लिए एक auth टोकन जारी किया गया है।
- Transport: Gateway WS endpoint अनुरोधों को फ़ॉरवर्ड करता है, लेकिन सदस्यता तय नहीं करता। (लेगेसी TCP ब्रिज समर्थन अप्रचलित/हटा दिया गया है।)
पेयरिंग कैसे काम करता है
- एक नोड Gateway WS से जुड़ता है और पेयरिंग का अनुरोध करता है।
- Gateway एक लंबित अनुरोध संग्रहीत करता है और
node.pair.requestedउत्सर्जित करता है। - आप अनुरोध को स्वीकृत या अस्वीकृत करते हैं (CLI या UI)।
- स्वीकृति पर, Gateway एक नया टोकन जारी करता है (री‑पेयर पर टोकन रोटेट होते हैं)।
- नोड टोकन का उपयोग करके पुनः कनेक्ट होता है और अब “पेयर” हो जाता है।
CLI वर्कफ़्लो (हेडलैस‑फ्रेंडली)
nodes status पेयर किए गए/कनेक्टेड नोड्स और उनकी क्षमताएँ दिखाता है।
API सतह (gateway प्रोटोकॉल)
इवेंट्स:node.pair.requested— नया लंबित अनुरोध बनाए जाने पर उत्सर्जित।node.pair.resolved— अनुरोध के स्वीकृत/अस्वीकृत/समाप्त होने पर उत्सर्जित।
node.pair.request— एक लंबित अनुरोध बनाएँ या पुनः उपयोग करें।node.pair.list— लंबित + पेयर किए गए नोड्स की सूची।node.pair.approve— एक लंबित अनुरोध को स्वीकृत करें (टोकन जारी करता है)।node.pair.reject— एक लंबित अनुरोध को अस्वीकृत करें।node.pair.verify—{ nodeId, token }सत्यापित करें।
node.pair.requestप्रति नोड आइडेम्पोटेंट है: बार‑बार कॉल करने पर वही लंबित अनुरोध लौटाया जाता है।- स्वीकृति हमेशा एक नया टोकन उत्पन्न करती है;
node.pair.requestसे कभी भी टोकन वापस नहीं किया जाता। - अनुरोधों में स्वचालित‑अनुमोदन फ्लो के लिए संकेत के रूप में
silent: trueशामिल हो सकता है।
स्वचालित‑अनुमोदन (macOS ऐप)
macOS ऐप वैकल्पिक रूप से साइलेंट अनुमोदन का प्रयास कर सकता है जब:- अनुरोध
silentके रूप में चिह्नित हो, और - ऐप उसी उपयोगकर्ता का उपयोग करके Gateway होस्ट से SSH कनेक्शन सत्यापित कर सके।
भंडारण (स्थानीय, निजी)
पेयरिंग स्थिति Gateway स्टेट डायरेक्टरी के अंतर्गत संग्रहीत होती है (डिफ़ॉल्ट~/.openclaw):
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
OPENCLAW_STATE_DIR को ओवरराइड करते हैं, तो nodes/ फ़ोल्डर उसके साथ स्थानांतरित हो जाता है।
सुरक्षा नोट्स:
- टोकन गुप्त होते हैं;
paired.jsonको संवेदनशील मानें। - टोकन रोटेट करने के लिए पुनः‑अनुमोदन आवश्यक है (या नोड एंट्री हटानी होगी)।
परिवहन व्यवहार
- परिवहन स्टेटलेस है; यह सदस्यता संग्रहीत नहीं करता।
- यदि Gateway ऑफ़लाइन है या पेयरिंग अक्षम है, तो नोड्स पेयर नहीं कर सकते।
- यदि Gateway रिमोट मोड में है, तो भी पेयरिंग रिमोट Gateway के स्टोर के विरुद्ध ही होती है।