Gateway
Gateway प्रोटोकॉल
Gateway WS प्रोटोकॉल OpenClaw के लिए एकमात्र नियंत्रण तल और Node परिवहन है। ऑपरेटर और Node क्लाइंट (CLI, वेब UI, macOS ऐप, iOS/Android Node, हेडलेस Node) WebSocket पर कनेक्ट होते हैं और हैंडशेक के समय एक भूमिका और स्कोप घोषित करते हैं।
npm पैकेज
ये पैकेज OpenClaw रिलीज़ शृंखलाओं के साथ भेजे जाते हैं। प्रारंभिक रोलआउट के दौरान,
पहला पैकेज-सहित रिलीज़ प्रकाशित होने तक npm E404 लौटा सकता है।
@openclaw/gateway-protocolस्कीमा, वैलिडेटर, TypeScript प्रकार, हल्के फ़्रेम और त्रुटि सहायक तथा संस्करण कॉन्स्टेंट प्रकाशित करता है। इसके टारबॉल में जनरेट किया गयाprotocol.schema.jsonमशीन-पठनीय अनुबंध शामिल है।@openclaw/gateway-clientसंदर्भ Node क्लाइंट और@openclaw/gateway-client/browserपर एक ब्राउज़र-सुरक्षित एंट्री प्रकाशित करता है।
एप्लिकेशन जीवनचक्र मार्गदर्शन के लिए, Gateway क्लाइंट बनाना देखें। Gateway को चाइल्ड प्रोसेस के रूप में पर्यवेक्षित करने वाले ऐप्स के लिए, OpenClaw एम्बेड करना देखें।
परिवहन और फ़्रेमिंग
- WebSocket, टेक्स्ट फ़्रेम, JSON पेलोड।
- पहला फ़्रेम
connectअनुरोध होना आवश्यक है। - कनेक्ट होने से पहले के फ़्रेम 64 KiB (
MAX_PREAUTH_PAYLOAD_BYTES) तक सीमित हैं। हैंडशेक के बाद,hello-ok.policy.maxPayloadऔरhello-ok.policy.maxBufferedBytesका पालन करें। डायग्नोस्टिक्स सक्षम होने पर, बहुत बड़े इनबाउंड फ़्रेम और धीमे आउटबाउंड बफ़र, Gateway द्वारा फ़्रेम बंद करने या हटाने से पहलेpayload.largeइवेंट उत्सर्जित करते हैं। इन इवेंट मेंsurface, बाइट आकार, सीमाएँ और एक सुरक्षित कारण कोड होते हैं; संदेश बॉडी, अटैचमेंट सामग्री, कच्चे फ़्रेम बाइट, टोकन, कुकी या सीक्रेट कभी नहीं होते।
फ़्रेम संरचनाएँ:
- अनुरोध:
{type:"req", id, method, params} - प्रतिक्रिया:
{type:"res", id, ok, payload|error} - इवेंट:
{type:"event", event, payload, seq?, stateVersion?}
प्रतिक्रिया त्रुटियाँ { code, message, details?, retryable?, retryAfterMs? } का उपयोग करती हैं।
क्लाइंट को code और details.code के आधार पर शाखा बनानी चाहिए; message मानव-पठनीय रहता है
और बदल सकता है, सिवाय उन स्थानों के जहाँ संगतता नोट कुछ और कहता हो। विधि-स्तरीय
प्राधिकरण विफलताएँ संरचित अनुपलब्ध-स्कोप विवरण के साथ शीर्ष-स्तरीय
code: "FORBIDDEN" का उपयोग करती हैं:
- अनुपलब्ध स्कोप:
{ code: "MISSING_SCOPE", missingScope, requiredScopes }।requiredScopesअनुरोधित ऑपरेशन के लिए ज्ञात स्कोप का पूर्ण सेट है। पुराने क्लाइंट के लिए विरासतीmissing scope: <scope>संदेश बनाए रखा गया है।
क्लाइंट को पहले details पढ़ना चाहिए और विरासती संदेश का उपयोग केवल संगतता
फ़ॉलबैक के रूप में करना चाहिए। readMissingScopeError और readMissingScopeErrorDetails
@openclaw/gateway-protocol/gateway-error-details से एक्सपोर्ट किए जाते हैं; ब्राउज़र-सुरक्षित Gateway क्लाइंट
उन्हें @openclaw/gateway-client/browser से फिर से एक्सपोर्ट करता है।
स्कीमा @openclaw/gateway-protocol/schema से GatewayErrorDetailsSchema,
MissingScopeErrorDetailsSchema के रूप में एक्सपोर्ट किए जाते हैं।
HTTP स्कोप विफलताएँ error.details के अंतर्गत MISSING_SCOPE ऑब्जेक्ट को प्रतिबिंबित करती हैं और
HTTP स्थिति 403 का उपयोग करती हैं।
दुष्प्रभाव उत्पन्न करने वाली विधियों को आइडेम्पोटेंसी कुंजियों की आवश्यकता होती है (स्कीमा देखें)।
हैंडशेक
Gateway कनेक्ट होने से पहले एक चुनौती भेजता है:
{ "type": "event", "event": "connect.challenge", "payload": { "nonce": "…", "ts": 1737264000000 }}क्लाइंट connect से उत्तर देता है:
{ "type": "req", "id": "…", "method": "connect", "params": { "minProtocol": 4, "maxProtocol": 4, "client": { "id": "cli", "version": "1.2.3", "platform": "macos", "mode": "operator" }, "role": "operator", "scopes": ["operator.read", "operator.write"], "caps": [], "commands": [], "permissions": {}, "auth": { "token": "…" }, "locale": "en-US", "userAgent": "openclaw-cli/1.2.3", "device": { "id": "device_fingerprint", "publicKey": "…", "signature": "…", "signedAt": 1737264000000, "nonce": "…" } }}Gateway hello-ok से प्रतिक्रिया देता है:
{ "type": "res", "id": "…", "ok": true, "payload": { "type": "hello-ok", "protocol": 4, "server": { "version": "…", "connId": "…" }, "features": { "methods": ["…"], "events": ["…"] }, "snapshot": { "…": "…" }, "auth": { "role": "operator", "scopes": ["operator.read", "operator.write"] }, "policy": { "maxPayload": 26214400, "maxBufferedBytes": 52428800, "tickIntervalMs": 15000 } }}server, features, snapshot, policy और auth, सभी
HelloOkSchema (packages/gateway-protocol/src/schema/frames.ts) के लिए आवश्यक हैं। auth
डिवाइस टोकन जारी न होने पर भी तय की गई भूमिका/स्कोप की रिपोर्ट करता है (ऊपर दी गई
संरचना)। pluginSurfaceUrls वैकल्पिक है और Plugin सतह नामों (जैसे
canvas) को स्कोप किए गए होस्टेड URL से मैप करता है; इसकी समय-सीमा समाप्त हो सकती है, इसलिए Node
नई एंट्री के लिए { "surface": "canvas" } के साथ node.pluginSurface.refresh को कॉल करते हैं।
बहिष्कृत canvasHostUrl / canvasCapability / node.canvas.capability.refresh
पथ समर्थित नहीं है; Plugin सतहों का उपयोग करें।
स्नैपशॉट का वैकल्पिक appliedConfigHash, सक्रिय Gateway रनटाइम द्वारा स्वीकार किया गया
रिज़ॉल्व किया हुआ स्रोत-कॉन्फ़िग संशोधन है। क्लाइंट इसकी तुलना
config.get.configRevisionHash से करके यह निर्धारित कर सकते हैं कि क्या नए सहेजे गए कॉन्फ़िग को अभी भी
रीस्टार्ट की आवश्यकता है। config.get.hash, कॉन्फ़िग लेखन टकराव गार्ड द्वारा उपयोग किया जाने वाला
कच्चा रूट-फ़ाइल संशोधन बना रहता है।
जब Gateway अभी भी स्टार्टअप साइडकार को पूरा कर रहा हो, तब connect,
details.reason: "startup-sidecars" और retryAfterMs के साथ पुनः प्रयास योग्य
UNAVAILABLE त्रुटि लौटा सकता है। इसे अंतिम हैंडशेक विफलता मानने के बजाय
अपनी कनेक्शन सीमा के भीतर पुनः प्रयास करें।
डिवाइस टोकन जारी होने पर, hello-ok.auth उसे जोड़ता है:
{ "auth": { "deviceToken": "…", "role": "operator", "scopes": ["operator.read", "operator.write"] }}अंतर्निहित QR/सेटअप-कोड बूटस्ट्रैप एक मोबाइल हैंडऑफ़ पथ है। सफल बेसलाइन सेटअप-कोड कनेक्शन एक प्राथमिक Node टोकन और एक सीमित ऑपरेटर टोकन लौटाता है:
{ "auth": { "deviceToken": "…", "role": "node", "scopes": [], "deviceTokens": [ { "deviceToken": "…", "role": "operator", "scopes": ["operator.approvals", "operator.read", "operator.talk.secrets", "operator.write"] } ] }}इस ऑपरेटर हैंडऑफ़ को जानबूझकर सीमित रखा गया है: यह मोबाइल
ऑपरेटर लूप और नेटिव सेटअप शुरू करने के लिए पर्याप्त है, जिसमें Talk
कॉन्फ़िग पढ़ने के लिए operator.talk.secrets शामिल है, लेकिन इसमें पेयरिंग-म्यूटेशन स्कोप और
operator.admin नहीं हैं। अधिक व्यापक पेयरिंग/एडमिन पहुँच के लिए अलग स्वीकृत
पेयरिंग या टोकन प्रवाह आवश्यक है। hello-ok.auth.deviceTokens को केवल तभी स्थायी रूप से सहेजें जब
बूटस्ट्रैप प्रमाणीकरण किसी विश्वसनीय परिवहन (wss:// या लूपबैक/स्थानीय पेयरिंग)
पर चला हो।
विश्वसनीय समान-प्रोसेस बैकएंड क्लाइंट (client.id: "gateway-client",
client.mode: "backend"), साझा Gateway टोकन/पासवर्ड से प्रमाणीकरण करते समय
सीधे लूपबैक कनेक्शन पर device को छोड़ सकते हैं। यह पथ आंतरिक
नियंत्रण-तल RPC (जैसे सबएजेंट सत्र अपडेट) के लिए आरक्षित है और पुरानी
CLI/डिवाइस पेयरिंग बेसलाइन को स्थानीय बैकएंड कार्य अवरुद्ध करने से रोकता है। रिमोट,
ब्राउज़र-मूल, Node और स्पष्ट डिवाइस-टोकन/डिवाइस-पहचान क्लाइंट अभी भी
सामान्य पेयरिंग और स्कोप-अपग्रेड जाँच से गुजरते हैं।
वर्कर भूमिका और बंद प्रोटोकॉल
क्लाउड वर्कर Gateway-स्वामित्व वाली, होस्ट-कुंजी-पिन की गई SSH टनल के माध्यम से
एक समर्पित लूपबैक प्रवेश का उपयोग करते हैं। यह केवल वर्कर पहचान स्वीकार करता है और
सामान्य प्रमाणीकरण, Node इवेंट, ऑपरेटर RPC या Plugin विधियों को कभी डिस्पैच नहीं करता।
एक सख्त connect, परिवेश, बंडल हैश, स्वामी युग, RPC-सेट संस्करण,
समाप्ति और एक शून्य-योग्य सत्र से बंधे, स्थिर अवस्था में हैश किए गए, अल्पकालिक क्रेडेंशियल
को सत्यापित करता है; यह वर्तमान संस्करण और सुविधा सेट की अलग से जाँच करता है। सफलता पर न्यूनतम
worker-hello-ok लौटता है; सुविधा वार्ता सामान्य प्रोटोकॉल संस्करण से स्वतंत्र है।
फ़्रेम 64 KiB से कम रहते हैं, सिवाय तय किए गए worker.inference.start
फ़्रेम के, जो 25 MiB तक हो सकता है। बंद अनुमति-सूची में worker.heartbeat,
worker.transcript.commit, worker.live-event, worker.inference.start और
worker.inference.cancel शामिल हैं।
ट्रांसक्रिप्ट कमिट स्वामी-युग फ़ेंसिंग, Gateway-स्वामित्व वाली सत्र बाइंडिंग, बेस-लीफ़ कंपेयर-एंड-स्वैप और टिकाऊ अनुक्रम रीप्ले का उपयोग करते हैं; Gateway सामान्य सत्र राइटर के माध्यम से ट्रांसक्रिप्ट एंट्री और पैरेंट ID जनरेट करता है। प्रत्येक RPC पर स्वामित्व और समाप्ति की दोबारा जाँच की जाती है।
क्लाइंट क्षमताएँ
ऑपरेटर क्लाइंट connect.params.caps में वैकल्पिक क्षमताएँ घोषित कर सकते हैं:
tool-events: संरचित टूल जीवनचक्र इवेंट स्वीकार करता है।inline-widgets: होस्ट किए गए इनलाइन विजेट टूल परिणाम रेंडर कर सकता है।
क्लाइंट क्षमताएँ कनेक्ट किए गए क्लाइंट का वर्णन करती हैं, प्राधिकरण का नहीं। एजेंट टूल आवश्यक क्षमताएँ घोषित कर सकते हैं; जब तक प्रत्येक आवश्यकता मूल क्लाइंट के caps में उपस्थित न हो, Gateway उन टूल को छोड़ देता है। चैनल से शुरू किए गए रन में कोई Gateway क्लाइंट क्षमता नहीं होती, इसलिए क्षमता-नियंत्रित टूल तब भी अनुपलब्ध रहते हैं जब टूल नीति उन्हें स्पष्ट रूप से अनुमति देती है।
Node कनेक्शन उदाहरण
{ "type": "req", "id": "…", "method": "connect", "params": { "minProtocol": 4, "maxProtocol": 4, "client": { "id": "ios-node", "version": "1.2.3", "platform": "ios", "mode": "node" }, "role": "node", "scopes": [], "caps": ["camera", "canvas", "screen", "location", "voice"], "commands": ["camera.snap", "canvas.navigate", "screen.record", "location.get"], "permissions": { "camera.capture": true, "screen.record": false }, "auth": { "token": "…" }, "locale": "en-US", "userAgent": "openclaw-ios/1.2.3", "device": { "id": "device_fingerprint", "publicKey": "…", "signature": "…", "signedAt": 1737264000000, "nonce": "…" } }}Node कनेक्ट होते समय क्षमता दावे घोषित करते हैं:
caps:camera,canvas,screen,location,voice,talkजैसी उच्च-स्तरीय श्रेणियाँ।commands: इनवोक के लिए कमांड अनुमति-सूची।permissions: विस्तृत टॉगल (जैसेscreen.record,camera.capture)।
Gateway इन्हें दावों के रूप में मानता है और सर्वर-साइड अनुमति-सूचियाँ लागू करता है।
भूमिकाएँ और स्कोप
संपूर्ण ऑपरेटर स्कोप मॉडल, स्वीकृति-समय जाँच और साझा-सीक्रेट अर्थविज्ञान के लिए, ऑपरेटर स्कोप देखें।
भूमिकाएँ:
operator: नियंत्रण-तल क्लाइंट (CLI/UI/ऑटोमेशन)।node: क्षमता होस्ट (camera/screen/canvas/system.run)।worker: समर्पित, बंद वर्कर प्रोटोकॉल पर क्लाउड निष्पादन होस्ट।
ऑपरेटर स्कोप (src/gateway/operator-scopes.ts), पूर्ण बंद सेट:
operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
includeSecrets: true के साथ talk.config को operator.talk.secrets (या
operator.admin) की आवश्यकता होती है। सीक्रेट शामिल होने पर, सक्रिय Talk प्रदाता
क्रेडेंशियल को talk.resolved.config.apiKey से पढ़ें; talk.providers.<id>.apiKey
स्रोत-आकार में बना रहता है और SecretRef ऑब्जेक्ट या संपादित स्ट्रिंग हो सकता है।
Plugin-पंजीकृत Gateway RPC विधियाँ अपने ऑपरेटर स्कोप का अनुरोध कर सकती हैं,
लेकिन ये आरक्षित कोर प्रीफ़िक्स हमेशा operator.admin
(src/shared/gateway-method-policy.ts) में रिज़ॉल्व होते हैं: config.*, exec.approvals.*,
wizard.*, update.*।
विधि स्कोप केवल पहला गेट है। chat.send के माध्यम से पहुँचने वाले कुछ
स्लैश कमांड अधिक सख्त कमांड-स्तरीय जाँच लागू करते हैं: स्थायी /config set और
/config unset लेखन के लिए operator.admin आवश्यक है, उन Gateway क्लाइंट के लिए भी
जिनके पास पहले से निम्न ऑपरेटर स्कोप है।
node.pair.approve में आधार विधि स्कोप (operator.pairing) के अतिरिक्त,
लंबित अनुरोध के घोषित commands (src/infra/node-pairing-authz.ts) पर आधारित
एक अतिरिक्त स्वीकृति-समय स्कोप जाँच होती है:
| घोषित कमांड | आवश्यक स्कोप |
|---|---|
| कोई नहीं | operator.pairing |
| सामान्य कमांड | operator.pairing + operator.write |
इसमें system.run, system.run.prepare, system.which, browser.proxy, fs.listDir, या system.execApprovals.get/set शामिल हैं |
operator.pairing + operator.admin |
क्षमताएँ/कमांड/अनुमतियाँ (नोड)
नोड कनेक्ट होते समय क्षमता के दावे घोषित करते हैं:
caps: उच्च-स्तरीय क्षमता श्रेणियाँ, जैसेcamera,canvas,screen,location,voice, औरtalk।commands: इनवोक के लिए कमांड अनुमत-सूची।permissions: सूक्ष्म टॉगल (उदा.screen.record,camera.capture)।
Gateway इन्हें दावे मानता है और सर्वर-साइड अनुमत-सूचियाँ लागू करता है।
कनेक्ट किए गए नोड सफल कनेक्ट या पुनः कनेक्ट के बाद node.pluginTools.update के साथ वैकल्पिक, एजेंट को दिखाई देने वाले Plugin या MCP टूल
डिस्क्रिप्टर प्रकाशित कर सकते हैं। हेडलेस नोड होस्ट घोषणात्मक MCP इन्वेंटरी
परिवर्तनों को लागू करने के लिए पुनः शुरू होते हैं। यह अपडेट विधि प्रकाशन का एकमात्र मार्ग है; Plugin टूल डिस्क्रिप्टर
connect पैरामीटर में स्वीकार नहीं किए जाते। प्रत्येक डिस्क्रिप्टर को प्रदाता-सुरक्षित टूल name का उपयोग करना और
नोड की वर्तमान कमांड अनुमत-सूची में मौजूद command का नाम देना आवश्यक है। Gateway युग्मित नोड से प्राप्त डिस्क्रिप्टर
मेटाडेटा पर भरोसा करता है, स्वीकृत कमांड
सतह से बाहर के डिस्क्रिप्टर फ़िल्टर करता है, नोड के डिस्कनेक्ट होने पर उन्हें हटा देता है और किसी अन्य नोड के कैटलॉग में
परिवर्तन करने के ऑपरेटर प्रयासों को अस्वीकार करता है। नोड द्वारा प्रकाशित डिस्क्रिप्टर अनदेखे करने के लिए gateway.nodes.pluginTools.enabled: false
सेट करें।
कनेक्ट किए गए नोड होस्ट अपना संपूर्ण प्रतिस्थापन Skills कैटलॉग
node.skills.update के साथ प्रकाशित करते हैं। यह नोड-भूमिका विधि नोड Skills के प्रकाशन का एकमात्र
मार्ग है; Skills connect पैरामीटर में स्वीकार नहीं किए जाते। प्रत्येक डिस्क्रिप्टर में
एक सुरक्षित नाम, विवरण और सीमित SKILL.md सामग्री होती है। Gateway उस
सामग्री को सामान्य Skills लोडर से पार्स करता है, नोड के कनेक्ट रहने तक उसे एजेंट Skills स्नैपशॉट में
शामिल करता है और डिस्कनेक्ट होने पर हटा देता है। नोड द्वारा प्रकाशित Skills अनदेखे करने के लिए
gateway.nodes.allowSkills: false सेट करें।
उपस्थिति
system-presenceडिवाइस पहचान के अनुसार कुंजीबद्ध प्रविष्टियाँ लौटाता है, जिनमेंdeviceId,roles, औरscopesशामिल हैं, ताकि UI प्रत्येक डिवाइस के लिए एक पंक्ति दिखा सकें, भले वह ऑपरेटर और नोड दोनों के रूप में कनेक्ट हो।node.listमें वैकल्पिकlastSeenAtMsऔरlastSeenReasonशामिल होते हैं। कनेक्ट किए गए नोडconnectकारण के साथ वर्तमान कनेक्शन समय रिपोर्ट करते हैं; युग्मित नोड किसी विश्वसनीय नोड इवेंट के माध्यम से टिकाऊ पृष्ठभूमि उपस्थिति भी रिपोर्ट कर सकते हैं।
मूल macOS नोड सीमित इनपुट निष्क्रिय समय के साथ प्रमाणित node.presence.activity इवेंट भी भेज सकते हैं।
Gateway अपनी घड़ी पर गतिविधि टाइमस्टैम्प प्राप्त करता है, node.list और
node.describe के माध्यम से सबसे हाल में सक्रिय कनेक्टेड Mac को प्रदर्शित करता है और पठन-स्कोप वाले क्लाइंट को node.presence अपडेट प्रसारित करता है।
जब उपयोगकर्ता गतिविधि साझाकरण अक्षम करता है, तो ऐप { "action": "clear" } भेजता है;
Gateway केवल उसी प्रमाणित नोड कनेक्शन के टाइमस्टैम्प साफ़ करता है।
इस स्वीकृत क्रिया से पुराने Gateway इसे अनहैंडल्ड के रूप में लौटाते हैं, इसलिए Mac
नोड एक बार पुनः कनेक्ट होता है और डिस्कनेक्ट क्लीनअप को पुरानी कनेक्शन स्थिति हटाने देता है।
चयन, गोपनीयता, मॉडल संदर्भ और सूचना-रूटिंग व्यवहार के लिए
सक्रिय कंप्यूटर उपस्थिति देखें।
नोड पृष्ठभूमि सक्रिय इवेंट
नोड यह दर्ज करने के लिए event: "node.presence.alive" के साथ node.event कॉल करते हैं कि कोई
युग्मित नोड पृष्ठभूमि वेक के दौरान सक्रिय था, बिना उसे कनेक्टेड चिह्नित किए:
{ "event": "node.presence.alive", "payloadJSON": "{\"trigger\":\"silent_push\",\"sentAtMs\":1737264000000,\"displayName\":\"Peter's iPhone\",\"version\":\"2026.4.28\",\"platform\":\"iOS 18.4.0\",\"deviceFamily\":\"iPhone\",\"modelIdentifier\":\"iPhone17,1\",\"pushTransport\":\"relay\"}"}trigger एक बंद एनम है: background, silent_push, bg_app_refresh,
significant_location, manual, connect। अज्ञात मान
background (src/shared/node-presence.ts) में सामान्यीकृत होते हैं। इवेंट केवल
प्रमाणित नोड डिवाइस सत्रों के लिए स्थायी रहता है; डिवाइस-रहित या अयुग्मित सत्र
handled: false लौटाते हैं।
सफल Gateway एक संरचित परिणाम लौटाते हैं:
{ "ok": true, "event": "node.presence.alive", "handled": true, "reason": "persisted"}पुराने Gateway node.event के लिए केवल { "ok": true } लौटा सकते हैं; इसे
स्वीकृत RPC मानें, टिकाऊ उपस्थिति स्थायित्व नहीं।
प्रसारण इवेंट स्कोपिंग
सर्वर द्वारा पुश किए गए प्रसारण इवेंट स्कोप-गेटेड होते हैं, ताकि युग्मन-स्कोप वाले या केवल-नोड
सत्र निष्क्रिय रूप से सत्र सामग्री प्राप्त न करें
(src/gateway/server-broadcast.ts):
- चैट, एजेंट और टूल-परिणाम फ़्रेम (स्ट्रीम किए गए
agentइवेंट, टूल-परिणाम इवेंट) के लिए कम-से-कमoperator.readआवश्यक है। इसके बिना सत्र इन फ़्रेम को पूरी तरह छोड़ देते हैं। - Plugin-परिभाषित
plugin.*प्रसारण डिफ़ॉल्ट रूप सेoperator.writeयाoperator.adminतक सीमित होते हैं;plugin.approval.requested/plugin.approval.resolvedजैसी स्पष्ट प्रविष्टियाँ इसके बजायoperator.approvalsका उपयोग करती हैं। - स्थिति/ट्रांसपोर्ट इवेंट (
heartbeat,presence,tick, कनेक्ट/डिस्कनेक्ट जीवनचक्र) अप्रतिबंधित रहते हैं, ताकि प्रत्येक प्रमाणित सत्र को ट्रांसपोर्ट की स्थिति दिखाई दे सके। - अज्ञात प्रसारण इवेंट परिवार डिफ़ॉल्ट रूप से स्कोप-गेटेड (विफलता पर बंद) होते हैं, जब तक कोई पंजीकृत हैंडलर स्पष्ट रूप से उन्हें शिथिल न करे।
प्रत्येक क्लाइंट कनेक्शन अपनी प्रति-क्लाइंट क्रम संख्या रखता है, इसलिए अलग-अलग क्लाइंट द्वारा इवेंट स्ट्रीम के अलग-अलग स्कोप-फ़िल्टर किए गए उपसमुच्चय देखने पर भी प्रसारण उस सॉकेट पर एकदिश रूप से क्रमबद्ध रहते हैं।
RPC विधि परिवार
hello-ok.features.methods, src/gateway/server-methods-list.ts और लोड किए गए Plugin/चैनल विधि
निर्यातों से निर्मित एक रूढ़िवादी खोज सूची है—यह प्रत्येक विधि का जनरेट किया गया डंप नहीं है और कुछ विधियाँ (उदाहरण के लिए
push.test, web.login.start, web.login.wait, sessions.usage)
वास्तविक, कॉल करने योग्य विधियाँ होने के बावजूद जानबूझकर खोज से बाहर रखी जाती हैं।
इसे सुविधा खोज मानें, src/gateway/server-methods/*.ts की पूर्ण गणना नहीं।
सिस्टम और पहचान
healthकैश किया हुआ या नए सिरे से जाँचा गया Gateway स्वास्थ्य स्नैपशॉट लौटाता है।diagnostics.stabilityहाल का सीमित नैदानिक स्थिरता रिकॉर्डर लौटाता है: इवेंट नाम, गणनाएँ, बाइट आकार, मेमोरी रीडिंग, क्यू/सत्र स्थिति, चैनल/Plugin नाम, सत्र आईडी। कोई चैट टेक्स्ट, Webhook बॉडी, टूल आउटपुट, रॉ अनुरोध/प्रतिक्रिया बॉडी, टोकन, कुकी या सीक्रेट नहीं।operator.readआवश्यक है।status,/status-शैली का Gateway सारांश लौटाता है; संवेदनशील फ़ील्ड केवल एडमिन-स्कोप वाले ऑपरेटर क्लाइंट के लिए।gateway.identity.getरिले और युग्मन प्रवाहों द्वारा उपयोग की जाने वाली Gateway डिवाइस पहचान लौटाता है।system-presenceकनेक्ट किए गए ऑपरेटर/नोड डिवाइसों के लिए वर्तमान उपस्थिति स्नैपशॉट लौटाता है।system-eventएक सिस्टम इवेंट जोड़ता है और उपस्थिति संदर्भ को अपडेट/प्रसारित कर सकता है।last-heartbeatनवीनतम स्थायी Heartbeat इवेंट लौटाता है।set-heartbeatsGateway पर Heartbeat प्रोसेसिंग टॉगल करता है।gateway.suspend.prepareकेवल तभी एक छोटी सहयोगात्मक-निलंबन लीज़ बनाता है, जब ट्रैक किया गया Gateway कार्य निष्क्रिय हो।gateway.suspend.statusउस लीज़ की जाँच करता है औरgateway.suspend.resumeथॉ के बाद या निरस्त होस्ट ऑपरेशन के पश्चात उसे जारी करता है।
मॉडल और उपयोग
models.listरनटाइम-अनुमत मॉडल कैटलॉग लौटाता है। नीचे "models.listदृश्य" देखें।usage.statusप्रदाता उपयोग विंडो/शेष कोटा सारांश लौटाता है।usage.costकिसी दिनांक सीमा के लिए समेकित लागत-उपयोग सारांश लौटाता है। एक एजेंट के लिएagentIdपास करें या कॉन्फ़िगर किए गए एजेंटों को समेकित करने के लिएagentScope: "all"पास करें।doctor.memory.statusसक्रिय डिफ़ॉल्ट एजेंट वर्कस्पेस के लिए वेक्टर-मेमोरी / कैश किए गए एम्बेडिंग की तत्परता लौटाता है। केवल स्पष्ट लाइव एम्बेडिंग प्रदाता पिंग के लिए{ "probe": true }या{ "deep": true }पास करें। Dreaming स्टोर आँकड़ों को एक एजेंट वर्कस्पेस तक सीमित करने के लिए{ "agentId": "agent-id" }पास करें; इसे छोड़ने पर कॉन्फ़िगर किए गए Dreaming वर्कस्पेस समेकित होते हैं।doctor.memory.dreamDiary,doctor.memory.backfillDreamDiary,doctor.memory.resetDreamDiary,doctor.memory.resetGroundedShortTerm,doctor.memory.repairDreamingArtifacts, औरdoctor.memory.dedupeDreamDiaryवैकल्पिक{ "agentId": "agent-id" }स्वीकार करते हैं; इसे छोड़ने पर वे कॉन्फ़िगर किए गए डिफ़ॉल्ट एजेंट वर्कस्पेस पर काम करते हैं।doctor.memory.remHarnessरिमोट कंट्रोल-प्लेन क्लाइंट के लिए सीमित, केवल-पठन REM हार्नेस पूर्वावलोकन लौटाता है, जिसमें वर्कस्पेस पथ, मेमोरी अंश, रेंडर किया गया आधारयुक्त Markdown और गहन प्रोमोशन उम्मीदवार शामिल हैं।operator.readआवश्यक है।sessions.usageप्रति-सत्र उपयोग सारांश लौटाता है। एक एजेंट के लिएagentIdपास करें या कॉन्फ़िगर किए गए एजेंटों को एक साथ सूचीबद्ध करने के लिएagentScope: "all"पास करें। दोनों उपयोग विधियाँ DST-जागरूक कैलेंडर-दिन सीमाओं और बकेट के लिए IANAtimeZoneसहितmode: "specific"स्वीकार करती हैं। पुराने क्लाइंट के लिए और जब Gateway रनटाइम अनुरोधित ज़ोन को नहीं पहचानता, तब फ़ॉलबैक के रूप मेंutcOffsetसमर्थित रहता है।sessions.usage.timeseriesएक सत्र के लिए समय-श्रृंखला उपयोग लौटाता है।sessions.usage.logsएक सत्र के लिए उपयोग लॉग प्रविष्टियाँ लौटाता है।
चैनल और लॉगिन सहायक
channels.statusअंतर्निहित + बंडल किए गए चैनल/Plugin स्थिति सारांश लौटाता है।channels.logoutजहाँ चैनल इसका समर्थन करता है, वहाँ किसी विशिष्ट चैनल/खाते को लॉग आउट करता है।web.login.startवर्तमान QR-सक्षम वेब चैनल प्रदाता के लिए QR/वेब लॉगिन प्रवाह शुरू करता है।web.login.waitउस प्रवाह के पूरा होने की प्रतीक्षा करता है और सफलता पर चैनल शुरू करता है।push.testपंजीकृत iOS नोड को एक परीक्षण APNs पुश भेजता है।voicewake.getसंग्रहीत वेक-वर्ड ट्रिगर लौटाता है।voicewake.setवेक-वर्ड ट्रिगर अपडेट करता है और परिवर्तन प्रसारित करता है।
Plugin प्रबंधन
plugins.list(operator.read) इंस्टॉल किए गए Plugin की सूची के साथ स्थानीय रूप से चयनित आधिकारिक विकल्प, निदान, और यह जानकारी लौटाता है कि वर्तमान इंस्टॉल मोड बदलावों की अनुमति देता है या नहीं।plugins.search(operator.read) इंस्टॉल किए जा सकने वाले ClawHub कोड-Plugin और बंडल-Plugin समूहों को खोजता है। 1 से 100 तक गैर-रिक्तqueryऔर वैकल्पिकlimitपास करें।plugins.install(operator.admin) या तो{ source: "official", pluginId }वाली आधिकारिक कैटलॉग प्रविष्टि या{ source: "clawhub", packageName, version?, acknowledgeClawHubRisk? }वाला ClawHub पैकेज इंस्टॉल करता है। ClawHub इंस्टॉल Gateway के विश्वास, अखंडता और इंस्टॉल-नीति जाँचों को बनाए रखते हैं। सफल इंस्टॉल के लिए Gateway पुनः आरंभ करना आवश्यक है।plugins.setEnabled(operator.admin){ pluginId, enabled }के साथ इंस्टॉल किए गए एक Plugin की सक्षम करने की नीति बदलता है। प्रतिक्रिया में अपडेट की गई कैटलॉग प्रविष्टि, पुनः आरंभ मेटाडेटा और स्लॉट-चयन संबंधी चेतावनियाँ शामिल होती हैं।plugins.uninstall(operator.admin){ pluginId }के साथ बाहरी रूप से इंस्टॉल किए गए एक Plugin को हटाता है: कॉन्फ़िगरेशन संदर्भ, इंस्टॉल रिकॉर्ड और प्रबंधित फ़ाइलें। बंडल किए गए Plugin अनइंस्टॉल नहीं किए जा सकते, केवल अक्षम किए जा सकते हैं। प्रतिक्रिया हटाने की कार्रवाइयों को सूचीबद्ध करती है और हमेशा Gateway पुनः आरंभ करने की आवश्यकता बताती है।
संदेश और लॉग
sendचैट रनर के बाहर चैनल/खाते/थ्रेड को लक्षित करके भेजने के लिए प्रत्यक्ष आउटबाउंड-डिलीवरी RPC है।logs.tailकर्सर/सीमा और अधिकतम-बाइट नियंत्रणों के साथ कॉन्फ़िगर किए गए Gateway फ़ाइल-लॉग का अंतिम भाग लौटाता है।
ऑपरेटर टर्मिनल
terminal.openकिसी स्पष्टagentIdया डिफ़ॉल्ट एजेंट के लिए होस्ट PTY शुरू करता है और निर्धारित एजेंट, कार्यशील डायरेक्टरी, शेल तथा परिसीमन स्थिति लौटाता है।terminal.input,terminal.resize, औरterminal.closeकेवल कॉल करने वाले कनेक्शन के स्वामित्व वाले सत्रों पर काम करते हैं।terminal.uploadअधिकतम 16 MiB की एक base64 फ़ाइल स्वीकार करता है, उसे सत्र के Gateway या युग्मित-Node होस्ट पर निजी 24-घंटे की अस्थायी डायरेक्टरी में रखता है और निरपेक्ष पथ लौटाता है। कॉलर को अभी भी उस पथ को पेस्ट करना या किसी अन्य प्रकार से उपयोग करना होगा; RPC कभी भी टर्मिनल इनपुट नहीं लिखता या कोई कमांड निष्पादित नहीं करता।terminal.dataऔरterminal.exitईवेंट केवल सत्र के स्वामी कनेक्शन पर स्ट्रीम होते हैं।- जिन सत्रों का कनेक्शन टूट जाता है उन्हें समाप्त नहीं, बल्कि अलग किया जाता है: वे
gateway.terminal.detachedSessionTimeoutSeconds(डिफ़ॉल्ट 300;0कनेक्शन टूटने पर समाप्त करने की व्यवस्था पुनर्स्थापित करता है) तक पुनः संलग्न किए जा सकते हैं, जबकि हालिया आउटपुट सीमित सर्वर-साइड बफ़र में एकत्र होता रहता है। terminal.listसंलग्न किए जा सकने वाले सत्र लौटाता है;terminal.attachकिसी सक्रिय या अलग किए गए सत्र को कॉल करने वाले कनेक्शन से पुनः बाँधता है और पुनर्चालन बफ़र लौटाता है (tmux-शैली अधिग्रहण—पिछले सक्रिय स्वामी को कारणdetachedके साथterminal.exitप्राप्त होता है);terminal.textबिना संलग्न किए बफ़र को सादे टेक्स्ट के रूप में पढ़ता है।- प्रत्येक टर्मिनल विधि के लिए
operator.adminआवश्यक है;gateway.terminal.enabledस्पष्ट रूप से true होना चाहिए। पूर्णतः सैंडबॉक्स किए गए एजेंट अस्वीकार कर दिए जाते हैं और एजेंट नीति में बदलाव मौजूदा तथा प्रक्रियाधीन PTY को बंद कर देता है, जिसमें अलग किए गए PTY भी शामिल हैं।
Talk और TTS
talk.catalogवाक्, स्ट्रीमिंग ट्रांसक्रिप्शन और रीयलटाइम वॉइस के लिए केवल-पढ़ने योग्य Talk प्रदाता कैटलॉग लौटाता है: प्रामाणिक प्रदाता आईडी, रजिस्ट्री उपनाम, लेबल, कॉन्फ़िगर की गई स्थिति, वैकल्पिक समूह-स्तरीयreadyपरिणाम, उपलब्ध मॉडल/वॉइस आईडी, प्रामाणिक मोड, ट्रांसपोर्ट, ब्रेन रणनीतियाँ और रीयलटाइम ऑडियो/क्षमता फ़्लैग; यह प्रदाता सीक्रेट लौटाए या वैश्विक कॉन्फ़िगरेशन बदले बिना ऐसा करता है। वर्तमान Gateway रनटाइम प्रदाता चयन लागू करने के बादreadyसेट करते हैं; पुराने Gateway पर इसकी अनुपस्थिति को असत्यापित मानें।talk.configप्रभावी Talk कॉन्फ़िगरेशन पेलोड लौटाता है;includeSecretsके लिएoperator.talk.secrets(याoperator.admin) आवश्यक है।talk.session.createrealtime/gateway-relay,transcription/gateway-relay, याstt-tts/managed-roomके लिए Gateway के स्वामित्व वाला Talk सत्र बनाता है।stt-tts/managed-roomके लिए,sessionKeyपास करने वालेoperator.writeकॉलर को सीमित सत्र-कुंजी दृश्यता के लिएspawnedByभी पास करना होगा; बिना सीमांकन वालाsessionKeyनिर्माण औरbrain: "direct-tools"के लिएoperator.adminआवश्यक है।talk.session.joinप्रबंधित-कक्ष सत्र टोकन को सत्यापित करता है, आवश्यकतानुसारsession.readyयाsession.replacedउत्सर्जित करता है और कक्ष/सत्र मेटाडेटा के साथ हालिया Talk ईवेंट लौटाता है, लेकिन कभी भी प्लेनटेक्स्ट टोकन या उसका हैश नहीं लौटाता।talk.session.appendAudioGateway के स्वामित्व वाले रीयलटाइम रिले और ट्रांसक्रिप्शन सत्रों में base64 PCM इनपुट ऑडियो जोड़ता है।talk.session.startTurn,talk.session.endTurn, औरtalk.session.cancelTurnस्थिति साफ़ होने से पहले पुराने टर्न को अस्वीकार करते हुए प्रबंधित-कक्ष टर्न जीवनचक्र संचालित करते हैं।talk.session.cancelOutputसहायक का ऑडियो आउटपुट रोकता है, मुख्यतः Gateway रिले सत्रों में VAD-नियंत्रित बीच में बोलने के लिए।talk.session.submitToolResultGateway के स्वामित्व वाले रीयलटाइम रिले सत्र द्वारा उत्सर्जित प्रदाता टूल कॉल को पूरा करता है। अनुरोध प्रदाता ब्रिज द्वारा उपलब्ध कराए गए किसी भी अतुल्यकालिक पूर्णता संकेत की प्रतीक्षा करता है; विफल सबमिशन संबद्ध रन को सक्रिय रखते हैं और सफल टूल-परिणाम ईवेंट उत्सर्जित नहीं करते। अंतरिम टूल आउटपुट के लिएoptions: { willContinue: true }पास करें या जब प्रदाता ब्रिज दमन समर्थन घोषित करता हो और परिणाम से दूसरी प्रतिक्रिया शुरू नहीं होनी चाहिए, तबoptions: { suppressResponse: true }पास करें।talk.session.steerGateway के स्वामित्व वाले एजेंट-समर्थित Talk सत्र में सक्रिय-रन वॉइस नियंत्रण भेजता है:{ sessionId, text, mode? }, जहाँmode,status,steer,cancel, याfollowupहै; छोड़े गए मोड को बोले गए टेक्स्ट से वर्गीकृत किया जाता है।talk.session.closeGateway के स्वामित्व वाले रिले, ट्रांसक्रिप्शन या प्रबंधित-कक्ष सत्र को बंद करता है और अंतिम Talk ईवेंट उत्सर्जित करता है।talk.modeWebChat/Control UI क्लाइंट के लिए वर्तमान Talk मोड स्थिति सेट/प्रसारित करता है।talk.client.createwebrtcयाprovider-websocketका उपयोग करके क्लाइंट के स्वामित्व वाला रीयलटाइम प्रदाता सत्र बनाता या फिर से शुरू करता है, जबकि Gateway क्रेडेंशियल, निर्देश, टूल नीति और लौटाए गएvoiceSessionIdका स्वामित्व रखता है। क्लाइंटsessionKeyपास करते हैं और एक कॉल के दौरान प्रदाता ट्रांसपोर्ट बदलते समयvoiceSessionIdका पुनः उपयोग करते हैं।talk.client.transcriptसामान्य एजेंट सत्र में एक अंतिम रूप दिया गया{ role, text }आइटम जोड़ता है। आवश्यकentryId,voiceSessionIdके भीतर इडेम्पोटेंट है; पुनः प्रयास ट्रांसक्रिप्ट संदेशों की प्रतिलिपि नहीं बनाते।talk.client.closeलंबित ट्रांसक्रिप्ट लेखन के बाद तार्किक वॉइस सत्र बंद करता है। बंद करना इडेम्पोटेंट है और यह सत्र के अंतिम गैर-WebChat चैनल पर केवल-म्यूटेशन कॉल सारांश पहुँचा सकता है।talk.client.toolCallक्लाइंट के स्वामित्व वाले रीयलटाइम ट्रांसपोर्ट को प्रदाता टूल कॉल Gateway नीति तक अग्रेषित करने देता है। पहला समर्थित टूलopenclaw_agent_consultहै; क्लाइंट को एक रन आईडी मिलती है और वे प्रदाता-विशिष्ट टूल परिणाम सबमिट करने से पहले सामान्य चैट जीवनचक्र ईवेंट की प्रतीक्षा करते हैं। वॉइस-बाउंड उच्च-प्रभाव वाली कार्रवाइयाँ तब तकVOICE_CONFIRMATION_REQUIRED:<id>लौटाती हैं, जब तक बाद का अंतिम रूप दिया गया उपयोगकर्ता कथन उस सटीक कार्रवाई की स्पष्ट रूप से पुष्टि नहीं करता और अगला परामर्शconfirmationIdप्रदान नहीं करता।talk.client.steerक्लाइंट के स्वामित्व वाले रीयलटाइम ट्रांसपोर्ट के लिए सक्रिय-रन वॉइस नियंत्रण भेजता है। GatewaysessionKeyसे सक्रिय एम्बेडेड रन निर्धारित करता है और निर्देशन को चुपचाप छोड़ने के बजाय संरचित स्वीकृत/अस्वीकृत परिणाम लौटाता है।talk.eventरीयलटाइम, ट्रांसक्रिप्शन, STT/TTS, प्रबंधित-कक्ष, टेलीफ़ोनी और मीटिंग एडाप्टर के लिए एकल Talk ईवेंट चैनल है।talk.speakसक्रिय Talk वाक् प्रदाता के माध्यम से वाक् संश्लेषित करता है।tts.statusTTS सक्षम स्थिति, सक्रिय प्रदाता, फ़ॉलबैक प्रदाता और प्रदाता कॉन्फ़िगरेशन स्थिति लौटाता है।tts.providersदृश्यमान TTS प्रदाता सूची लौटाता है।tts.enableऔरtts.disableTTS प्राथमिकता स्थिति को टॉगल करते हैं।tts.setProviderपसंदीदा TTS प्रदाता को अपडेट करता है।tts.convertएकबारगी टेक्स्ट-से-वाक् रूपांतरण चलाता है।tts.speak(operator.write) कॉन्फ़िगर की गई सामान्य TTS प्रदाता शृंखला के साथ गैर-रिक्तtextरेंडर करता है और एक संपूर्ण क्लिप को इनलाइनaudioBase64के रूप में लौटाता है, साथ हीproviderऔर वैकल्पिकoutputFormat,mimeType, तथाfileExtensionमेटाडेटा भी लौटाता है।tts.convertके विपरीत, यह Gateway-स्थानीय पथ नहीं लौटाता;talk.speakके विपरीत, इसे Talk प्रदाता की आवश्यकता नहीं होती।tts.maxTextLengthसे अधिक टेक्स्टINVALID_REQUESTलौटाता है; संश्लेषण विफलताएँUNAVAILABLEलौटाती हैं।
सीक्रेट, कॉन्फ़िगरेशन, अपडेट और विज़ार्ड
secrets.reloadसक्रिय SecretRefs को फिर से रिज़ॉल्व करता है और स्वामी-जागरूक रनटाइम स्थिति को परमाण्विक रूप से प्रकाशित करता है। पात्र स्वामी विफलताएँwarningCountके साथ कोल्ड या स्टेल डिग्रेडेशन के रूप में प्रकाशित हो सकती हैं; सख्त या अमैप्ड विफलताएँ रीलोड को अस्वीकार करती हैं और सक्रिय स्नैपशॉट को सुरक्षित रखती हैं।secrets.resolveकिसी विशिष्ट कमांड/लक्ष्य सेट के लिए कमांड-लक्ष्य सीक्रेट असाइनमेंट रिज़ॉल्व करता है।config.getवर्तमान ऑन-डिस्क कॉन्फ़िगरेशन स्नैपशॉट, रॉ रूट-फ़ाइलhash, रिज़ॉल्व किया गयाconfigRevisionHash, और सक्रिय Gateway रनटाइम द्वारा स्वीकार किए गए रिज़ॉल्व किए गए संशोधन के लिए वैकल्पिकappliedConfigHashलौटाता है।config.setसत्यापित कॉन्फ़िगरेशन पेलोड लिखता है।config.patchआंशिक कॉन्फ़िगरेशन अपडेट को मर्ज करता है। विनाशकारी ऐरे प्रतिस्थापन के लिए प्रभावित पथ काreplacePathsमें होना आवश्यक है; ऐरे प्रविष्टियों के अंतर्गत नेस्टेड ऐरेagents.entries.*.skillsजैसे[]पथों का उपयोग करते हैं।config.applyपूर्ण कॉन्फ़िगरेशन पेलोड को सत्यापित करके प्रतिस्थापित करता है।config.schemaControl UI और CLI टूलिंग द्वारा उपयोग किया जाने वाला लाइव कॉन्फ़िगरेशन स्कीमा पेलोड लौटाता है: स्कीमा,uiHints, संस्करण, जनरेशन मेटाडेटा, और लोड किए जा सकने पर Plugin + चैनल स्कीमा मेटाडेटा। इसमें UI के समान लेबल/सहायता टेक्स्ट सेtitle/descriptionमेटाडेटा शामिल होता है, जिसमें मेल खाने वाला फ़ील्ड दस्तावेज़ उपलब्ध होने पर नेस्टेड ऑब्जेक्ट, वाइल्डकार्ड, ऐरे-आइटम औरanyOf/oneOf/allOfसंयोजन शाखाएँ शामिल हैं।config.schema.lookupएक कॉन्फ़िगरेशन पथ के लिए पथ-स्कोप्ड लुकअप पेलोड लौटाता है: सामान्यीकृत पथ, एक शैलो स्कीमा नोड, मेल खाने वाला संकेत +hintPath, वैकल्पिकreloadKind, और UI/CLI ड्रिल-डाउन के लिए निकटतम चाइल्ड सारांश।reloadKind,restart,hot, याnone(src/config/schema.ts) में से एक है और अनुरोधित पथ के लिए Gateway कॉन्फ़िगरेशन रीलोड प्लानर को प्रतिबिंबित करता है। लुकअप स्कीमा नोड उपयोगकर्ता-दृश्य दस्तावेज़ और सामान्य सत्यापन फ़ील्ड (title,description,type,enum,const,format,pattern, संख्यात्मक/स्ट्रिंग/ऐरे/ऑब्जेक्ट सीमाएँ,additionalProperties,deprecated,readOnly,writeOnly) बनाए रखते हैं। चाइल्ड सारांशkey, सामान्यीकृतpath,type,required,hasChildren, वैकल्पिकreloadKind, और मेल खाने वालाhint/hintPathप्रदर्शित करते हैं।update.runGateway अपडेट प्रवाह चलाता है और केवल अपडेट सफल होने पर पुनरारंभ शेड्यूल करता है; सत्र वाले कॉलरcontinuationMessageशामिल कर सकते हैं, ताकि स्टार्टअप पुनरारंभ निरंतरता कतार के माध्यम से एजेंट का एक अनुवर्ती टर्न फिर से शुरू करे। कंट्रोल प्लेन से पैकेज-मैनेजर अपडेट और पर्यवेक्षित git-checkout अपडेट, लाइव Gateway के भीतर पैकेज ट्री को प्रतिस्थापित करने या checkout/build आउटपुट को बदलने के बजाय एक अलग किए गए प्रबंधित-सेवा हैंडऑफ़ का उपयोग करते हैं। आरंभ किया गया हैंडऑफ़result.reason: "managed-service-handoff-started"औरhandoff.status: "started"के साथok: trueलौटाता है। उसी Gateway प्रक्रिया द्वारा संभाला गया दूसरा समवर्तीupdate.run,result.reason: "managed-service-handoff-already-running"औरhandoff.status: "already-running"के साथok: falseलौटाता है; उसकी निरंतरता स्वीकार नहीं की जाती, इसलिए सक्रिय अपडेट पूरा होने के बाद कॉलर पुनः प्रयास कर सकता है। स्टैंडअलोन CLI अपडेटर और प्रतिस्थापन Gateway प्रक्रियाएँ इस प्रक्रिया-स्थानीय गार्ड के बाहर हैं। अनुपलब्ध या विफल हैंडऑफ़managed-service-handoff-unavailableयाmanaged-service-handoff-failedके साथok: false, तथा मैन्युअल शेल अपडेट आवश्यक होने परhandoff.commandलौटाते हैं। अनुपलब्ध का अर्थ है कि OpenClaw में सुरक्षित सुपरवाइज़र सीमा या स्थायी सेवा पहचान का अभाव है, जैसे systemd के लिएOPENCLAW_SYSTEMD_UNIT। आरंभ किए गए हैंडऑफ़ के दौरान पुनरारंभ सेंटिनल थोड़े समय के लिएstats.reason: "restart-health-pending"रिपोर्ट कर सकता है; निरंतरता तब तक विलंबित रहती है, जब तक CLI पुनरारंभ किए गए Gateway को सत्यापित करके अंतिमokसेंटिनल नहीं लिख देता।update.statusनवीनतम अपडेट पुनरारंभ सेंटिनल को रीफ़्रेश करके लौटाता है, जिसमें उपलब्ध होने पर पुनरारंभ के बाद चल रहा संस्करण शामिल होता है।wizard.start,wizard.next,wizard.status, औरwizard.cancelऑनबोर्डिंग विज़ार्ड को WS RPC के माध्यम से उपलब्ध कराते हैं।
एजेंट और कार्यक्षेत्र सहायक
agents.listGateway को दिखाई देने वाली एजेंट प्रविष्टियाँ लौटाता है, जिनमें प्रभावी मॉडल/रनटाइम मेटाडेटा और वैकल्पिक अर्थगतkind(agentयाsystem) शामिल हैं। पूर्ण टाइप्ड रोस्टर प्राप्त करने के लिए क्लाइंटagent-kindहैंडशेक क्षमता घोषित करते हैं; इसके बिना क्लाइंट सिस्टम पंक्तियों से रहित पुराना, सिलेक्टर-सुरक्षित रोस्टर बनाए रखते हैं। प्रकार-जागरूक क्लाइंट सामान्य सिलेक्टरों सेsystemपंक्तियाँ बाहर रखते हैं, जबकि उन्हें डायग्नोस्टिक दृश्यों में बनाए रखते हैं। पुराने v4 Gatewaykindके बिना पंक्तियाँ लौटा सकते हैं।agents.create,agents.update, औरagents.deleteएजेंट रिकॉर्ड और कार्यक्षेत्र वायरिंग का प्रबंधन करते हैं।agents.files.list,agents.files.get, औरagents.files.setकिसी एजेंट के लिए उपलब्ध कराई गई बूटस्ट्रैप कार्यक्षेत्र फ़ाइलों का प्रबंधन करते हैं।audit.activity.listसंस्करणयुक्त, केवल-मेटाडेटा गतिविधि लेजर लौटाता है;audit.listसंगतता-सुरक्षित रन/टूल RPC बना रहता है।agents.workspace.listऔरagents.workspace.get(operator.read), ऑपरेटर स्कोप में वर्णित विश्वसनीय ऑपरेटर डोमेन के क्लाइंट के लिए एजेंट की कार्यक्षेत्र डायरेक्टरी की केवल-पढ़ने योग्य, पृष्ठांकित ब्राउज़िंग उपलब्ध कराते हैं। अनुरोध केवल कार्यक्षेत्र-सापेक्ष पथ स्वीकार करते हैं; रीड वास्तविक पथ में बदले गए कार्यक्षेत्र रूट तक सीमित रहते हैं (सिमलिंक और हार्डलिंक एस्केप अस्वीकार किए जाते हैं), आकार-सीमित होते हैं, और UTF-8 टेक्स्ट तथा सामान्य इमेज प्रकारों (base64) तक सीमित रहते हैं। प्रतिक्रियाएँ होस्ट कार्यक्षेत्र पथ प्रदर्शित नहीं करतीं। इस नेमस्पेस में कोई लेखन ऑपरेशन नहीं है।tasks.list,tasks.get, औरtasks.cancelSDK और ऑपरेटर क्लाइंट के लिए Gateway टास्क लेजर उपलब्ध कराते हैं। नीचे टास्क लेजर RPC देखें।artifacts.list,artifacts.get, औरartifacts.downloadस्पष्टsessionKey,runId, याtaskIdस्कोप के लिए ट्रांसक्रिप्ट से प्राप्त आर्टिफ़ैक्ट सारांश और डाउनलोड उपलब्ध कराते हैं। रन और टास्क क्वेरी स्वामी सत्र को सर्वर-साइड पर रिज़ॉल्व करती हैं और केवल मेल खाने वाले उद्गम वाला ट्रांसक्रिप्ट मीडिया लौटाती हैं; असुरक्षित या स्थानीय URL स्रोतों को सर्वर-साइड पर फ़ेच करने के बजाय असमर्थित डाउनलोड लौटाए जाते हैं।environments.listऔरenvironments.statusGateway-स्थानीय और Node परिवेश खोज को बनाए रखते हैं। कॉन्फ़िगर किए गए क्लाउड वर्कर और पुराने प्रोफ़ाइल द्वारा छोड़े गए स्थायी रिकॉर्ड,providerId, वैकल्पिकleaseId,state,ageMs, वैकल्पिकidleMs, औरattachedSessionIdsके साथworkerमेटाडेटा जोड़ते हैं। वर्कर जीवनचक्र स्थितियाँrequested,provisioning,bootstrapping,ready,attached,idle,draining,destroying,destroyed,failed, औरorphanedहैं।environments.create({ profileId, idempotencyKey }) कॉन्फ़िगर की गई Plugin प्रदाता प्रोफ़ाइल से एक वर्कर प्रोविज़न करता है; समान कुंजी वाले पुनः प्रयास स्थायी ऑपरेशन का पुनः उपयोग करते हैं।environments.destroy({ environmentId }) स्थायी वर्कर परिवेश को इडेम्पोटेंट रूप से हटाने का अनुरोध करता है। दोनों कोoperator.adminआवश्यक है, दोनों कंट्रोल-प्लेन लेखन हैं, और दोनों स्थिति प्रतिक्रियाओं में प्रयुक्त समान परिवेश सारांश संरचना लौटाते हैं।agent.identity.getकिसी एजेंट या सत्र के लिए प्रभावी सहायक पहचान लौटाता है।agent.waitरन समाप्त होने की प्रतीक्षा करता है और उपलब्ध होने पर अंतिम स्नैपशॉट लौटाता है।
सत्र नियंत्रण
sessions.listवर्तमान सत्र अनुक्रमणिका लौटाता है, जिसमें एजेंट रनटाइम बैकएंड कॉन्फ़िगर होने पर प्रत्येक पंक्ति काagentRuntimeमेटाडेटा शामिल होता है। क्लाउड-वर्कर प्लेसमेंट सक्षम होने या टिकाऊ पुनर्प्राप्ति स्थिति मौजूद होने पर, सत्र पंक्तियों में एक बंदplacementस्थिति (local,requested,provisioning,syncing,starting,active,draining,reconciling,reclaimed, याfailed) के साथ स्थिति-विशिष्ट परिवेश, स्वामी-युग, कार्यक्षेत्र, बंडल, ACK-कर्सर या पुनर्प्राप्ति फ़ील्ड भी शामिल होते हैं।sessions.subscribeऔरsessions.unsubscribeवर्तमान WS क्लाइंट के लिए सत्र परिवर्तन इवेंट सदस्यताओं को चालू या बंद करते हैं।sessions.messages.subscribeऔरsessions.messages.unsubscribeकिसी एक सत्र के लिए ट्रांसक्रिप्ट/संदेश इवेंट सदस्यताओं को चालू या बंद करते हैं। उन अनुमोदनों के लिए सैनिटाइज़ किए गएsession.approvalजीवनचक्र इवेंट भी प्राप्त करने हेतुincludeApprovals: trueपास करें, जिनके स्थायी ऑडियंस में वही सटीक सत्र शामिल है और जिनकी समीक्षक बाइंडिंग सदस्यता लेने वाले क्लाइंट को अधिकृत करती है। तब सदस्यता प्रतिक्रिया में एक सीमित लंबितapprovalReplayशामिल होता है;truncatedके false होने पर यह प्रामाणिक होता है। ऑप्ट-इन प्रत्येक सदस्यता कॉल के लिए होता है, स्थायी नहीं: उसी सत्र कीincludeApprovals: trueके बिना दोबारा सदस्यता लेने पर मौजूदा अनुमोदन सदस्यता हट जाती है। सामान्य सत्र-पठन प्राधिकार के अतिरिक्त, इस ऑप्ट-इन के लिएoperator.admin, या युग्मित डिवाइस परoperator.approvalsआवश्यक है।sessions.previewविशिष्ट सत्र कुंजियों के लिए सीमित ट्रांसक्रिप्ट पूर्वावलोकन लौटाता है।sessions.describeकिसी सटीक सत्र कुंजी के लिए एक Gateway सत्र पंक्ति लौटाता है।sessions.resolveकिसी सत्र लक्ष्य को हल या कैनॉनिकलाइज़ करता है।sessions.createएक नई सत्र प्रविष्टि बनाता है। वैकल्पिकmodelऔरthinkingLevelमान प्रारंभिक मॉडल और रीजनिंग ओवरराइड को परमाण्विक रूप से स्थायी करते हैं।worktree: trueएक प्रबंधित वर्कट्री का प्रावधान करता है; वैकल्पिकworktreeBaseRef/worktreeNameआधार रेफ़ और शाखा नाम चुनते हैं, औरexecNode(operator.admin) सत्र निष्पादन को किसी Node होस्ट से बाँधता है। बनाया गया वर्कट्री परिणाम में दोहराया जाता है और सत्र पंक्ति (worktree: { id, branch, repoRoot }) पर स्थायी किया जाता है। जब प्रविष्टि बन जाती है लेकिन उसका नेस्टेड प्रारंभिकchat.sendअस्वीकार हो जाता है, तो सफल परिणाम मेंrunStarted: falseऔरrunErrorशामिल होते हैं; क्लाइंट प्रॉम्प्ट को बनाए रखकर लौटाई गई सत्र कुंजी के विरुद्ध पुनः प्रयास कर सकते हैं।emitCommandHooks: trueके साथparentSessionKeyपास करने वाले कॉलर को किसी अलग चाइल्ड की जीवनचक्र व्यवस्था भी घोषित करनी चाहिए:succeedsParent: true,session_endके साथ पैरेंट को समाप्त करता है, जबकिfalseपैरेंट को सक्रिय रखता है और केवल चाइल्ड काsession_startउत्सर्जित करता है।succeedsParentको छोड़ देने पर मौजूदा क्लाइंट के लिए विरासती पैरेंट-रोलओवर व्यवहार बना रहता है। इस व्यवस्था के लिए पैरेंट लिंकेज और कमांड हुक, दोनों आवश्यक हैं; कोई फ़ोर्क अपने पैरेंट को सफल नहीं कर सकता। मुख्य सत्र का उसी स्थान पर रीसेट होने का व्यवहार अपरिवर्तित रहता है, क्योंकि कोई अलग चाइल्ड नहीं बनाया जाता। नई पंक्तियों पर विश्वसनीय निर्माण सीम से केवल-एक-बार लिखी जाने वाली निर्माण उत्पत्ति (createdVia,createdActor,createdAt) अंकित की जाती है; किसी मौजूदा कुंजी को अपनाने पर इसे दोबारा अंकित नहीं किया जाता। मानव प्रोफ़ाइल अभिनेताओं के लिए, पंक्ति को प्रक्षेपित करते समयcreatedActor.labelको वर्तमान उपयोगकर्ता प्रोफ़ाइल से हल किया जाता है और इसे सत्र प्रविष्टि पर कभी संग्रहीत नहीं किया जाता, इसलिए प्रोफ़ाइल का नाम बदलने पर विचलन नहीं होता। सत्र पंक्तियों मेंparentSessionKey(नेविगेशन पैरेंट, स्थायी),controlOwnerSessionKey(लाइव होने पर रनटाइम नियंत्रक),forkSource(फ़ोर्क के लिए सटीक स्रोत कुंजी + ट्रांसक्रिप्ट जनरेशन), औरpreviousSessionId(उसी कुंजी के अंतर्गत पिछला ट्रांसक्रिप्ट जनरेशन) भी होते हैं।sessions.dispatch(operator.admin) किसी सत्र-स्वामित्व वाले प्रबंधित वर्कट्री सहित मौजूदा स्थानीय OpenClaw सत्र को कॉन्फ़िगर किए गए क्लाउड-वर्कर प्रोफ़ाइल में ले जाता है।{ key, profileId, agentId? }पास करें। कोई वर्कर प्रोफ़ाइल कॉन्फ़िगर न होने पर यह विधि अनुपस्थित रहती है, सक्रिय कार्य को समाप्त होने देने से पहले स्थानीय टर्न प्रवेश बंद करती है, और प्लेसमेंट केactiveवर्कर स्वामित्व तक पहुँचने के बाद ही लौटती है। डिस्पैच एकतरफ़ा है; वर्कर से स्थानीय में वापस खींचना इस RPC का भाग नहीं है।sessions.groups.list,sessions.groups.put,sessions.groups.rename, औरsessions.groups.deleteGateway-स्वामित्व वाली कस्टम सत्र समूह सूची (नाम + प्रदर्शन क्रम) को प्रबंधित करते हैं। सदस्यता प्रत्येक सत्र केcategoryफ़ील्ड पर रहती है; नाम बदलने और हटाने पर सर्वर की ओर से सदस्य सत्र अपडेट होते हैं।sessions.sendकिसी मौजूदा सत्र में संदेश भेजता है।sessions.steerसक्रिय सत्र के लिए बाधित-करें-और-दिशा-दें प्रकार है।sessions.abortकिसी सत्र का सक्रिय कार्य रद्द करता है।keyके साथ वैकल्पिकrunIdपास करें, या उन सक्रिय रन के लिए केवलrunIdपास करें जिन्हें Gateway किसी सत्र से संबद्ध कर सकता है।runIdदेने पर रद्दीकरण उसी रन तक सीमित रहता है। केवल-कुंजी वाले गैर-ग्लोबल अनुरोध परclearQueued: trueसेट करने से उस सत्र के स्वामित्व वाली फ़ॉलोअप और लेन कतारें भी हटा दी जाती हैं।clearQueuedको छोड़ने वाले मौजूदा कॉलर उन कतारों को बनाए रखते हैं। शाब्दिकglobalकुंजी मौजूदा एजेंट-योग्यchat.abortस्वामित्व नियम बनाए रखती है और गैर-ग्लोबल फ़ॉलोअप या लेन सफ़ाई नहीं करती।sessions.patchसत्र मेटाडेटा/ओवरराइड अपडेट करता है और हल किया गया कैनॉनिकल मॉडल तथा प्रभावीagentRuntimeरिपोर्ट करता है। स्पॉन वंशावली (spawnedBy,spawnedWorkspaceDir,spawnedCwd,spawnDepth,subagentRole,subagentControlScope) अब सार्वजनिक रूप से पैच नहीं की जा सकती; ये तथ्य विश्वसनीय निर्माण पथों द्वारा केवल एक बार लिखे जाते हैं, और इन्हें अब भी भेजने वाले अनुरोध अस्वीकार कर दिए जाते हैं।sessions.reset,sessions.delete, औरsessions.compactसत्र रखरखाव करते हैं।sessions.getपूर्ण संग्रहीत सत्र पंक्ति लौटाता है।- चैट निष्पादन अब भी
chat.history,chat.send,chat.abort, औरchat.injectका उपयोग करता है। UI क्लाइंट के लिएchat.historyको प्रदर्शन हेतु सामान्यीकृत किया जाता है: दृश्यमान टेक्स्ट से इनलाइन डायरेक्टिव टैग हटा दिए जाते हैं, सादे-टेक्स्ट वाले टूल-कॉल XML पेलोड (<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>, और काटे गए टूल-कॉल ब्लॉक) तथा लीक हुए ASCII/पूर्ण-चौड़ाई मॉडल नियंत्रण टोकन हटा दिए जाते हैं, पूर्णतः मौन-टोकन सहायक पंक्तियाँ (सटीकNO_REPLY/no_reply) छोड़ दी जाती हैं, और बहुत बड़ी पंक्तियों को प्लेसहोल्डर से बदला जा सकता है। chat.message.getकिसी एक दृश्यमान ट्रांसक्रिप्ट प्रविष्टि के लिए योगात्मक, सीमित पूर्ण-संदेश रीडर है।sessionKey, सत्र चयन के एजेंट-स्कोप्ड होने पर वैकल्पिकagentId, और पहलेchat.historyके माध्यम से सामने आया ट्रांसक्रिप्टmessageIdपास करें; यदि संग्रहीत प्रविष्टि अब भी उपलब्ध है और बहुत बड़ी नहीं है, तो Gateway हल्की हिस्ट्री की काट-छाँट सीमा के बिना वही प्रदर्शन-सामान्यीकृत प्रक्षेपण लौटाता है।chat.toolTitlesControl UI में रेंडर किए गए टूल कॉल के लिए छोटे उद्देश्य शीर्षक लौटाता है (बैच में, सीमित इनपुट के साथ अधिकतम 24 आइटम)। यह सुविधाgateway.controlUi.toolTitlesके माध्यम से ऑप्ट-इन है (डिफ़ॉल्ट रूप से बंद); अक्षम Gateway बिना मॉडल कॉल के{ titles: {}, disabled: true }का उत्तर देते हैं, ताकि क्लाइंट पूछना बंद कर दें। सक्षम होने पर, शीर्षक मानक यूटिलिटी-मॉडल रूटिंग का उपयोग करते हैं: स्पष्ट रूप से कॉन्फ़िगर किया गयाutilityModel(एक ऑपरेटर निर्णय, जो सभी यूटिलिटी कार्यों की तरह सीमित कार्य सामग्री चुने गए प्रदाता को भेज सकता है), अन्यथा सत्र प्रदाता का घोषित छोटा-मॉडल डिफ़ॉल्ट, ताकि कोई नया निर्गमन गंतव्य अप्रत्यक्ष रूप से न दिखाई दे; खालीutilityModelइन्हें पूरी तरह अक्षम कर देता है। शीर्षक कभी भी प्राथमिक मॉडल पर फ़ॉलबैक नहीं करते। परिणामों को टूल नाम + इनपुट के आधार पर प्रत्येक एजेंट की स्थिति डेटाबेस में कैश किया जाता है, इसलिए बार-बार देखने पर समान कॉल का दोबारा शुल्क नहीं लगता।chat.sendस्वचालित कटऑफ़ से पहले शुरू हुए मॉडल कॉल के लिए फ़ास्ट मोड उपयोग करने हेतु एक-टर्नfastMode: "auto"स्वीकार करता है, फिर बाद के पुनः प्रयास, फ़ॉलबैक, टूल-परिणाम या निरंतरता कॉल को फ़ास्ट मोड के बिना शुरू करता है। कटऑफ़ डिफ़ॉल्ट रूप से 60 सेकंड (DEFAULT_FAST_MODE_AUTO_ON_SECONDS) होता है और इसेagents.defaults.models["<provider>/<model>"].params.fastAutoOnSecondsसे प्रत्येक मॉडल के लिए कॉन्फ़िगर किया जा सकता है। कोईchat.sendकॉलर उस अनुरोध के लिए कटऑफ़ ओवरराइड करने हेतु एक-टर्नfastAutoOnSecondsपास कर सकता है। केवल इस अनुरोध के लिए संग्रहीत कतार मोड ओवरराइड करने हेतुqueueMode(steer,followup,collect, याinterrupt) पास करें; स्पष्ट Control UI दिशा-परिवर्तन क्रियाएँqueueMode: "steer"का उपयोग करती हैं। इंटरैक्टिव क्लाइंट अपने द्वारा प्रदर्शित सक्रिय ट्रांसक्रिप्ट-शाखा लीफ़ के साथexpectedLeafEntryId, या प्रामाणिक खाली ट्रांसक्रिप्ट के लिएnullपास कर सकते हैं; यदि किसी अन्य क्लाइंट ने पहले शाखा बदल दी हो, तो Gatewaydetails.reason: "active-leaf-changed"के साथ भेजना अस्वीकार कर देता है।
डिवाइस युग्मन और डिवाइस टोकन
device.pair.listलंबित और अनुमोदित युग्मित डिवाइस लौटाता है।device.pair.setupCodeएक मोबाइल सेटअप कोड और, डिफ़ॉल्ट रूप से, PNG QR डेटा URL बनाता है। इसके लिएoperator.adminआवश्यक है और इसे जानबूझकर विज्ञापित खोज से बाहर रखा गया है। परिणाम मेंsetupCode, वैकल्पिकqrDataUrl,gatewayUrl, गैर-गोपनीयauthलेबल, औरurlSourceशामिल होते हैं।device.pair.approve,device.pair.reject, औरdevice.pair.removeडिवाइस-युग्मन रिकॉर्ड प्रबंधित करते हैं।device.pair.renameएक ऑपरेटर लेबल ({ deviceId, label }) निर्दिष्ट करता है, जिसे क्लाइंट द्वारा रिपोर्ट किए गए प्रदर्शन नाम पर वरीयता दी जाती है और जो डिवाइस की मरम्मत या पुनः अनुमोदन के बाद भी बना रहता है।device.token.rotateकिसी युग्मित डिवाइस टोकन को उसकी अनुमोदित भूमिका और कॉलर स्कोप की सीमाओं के भीतर रोटेट करता है।device.token.revokeकिसी युग्मित डिवाइस टोकन को उसकी अनुमोदित भूमिका और कॉलर स्कोप की सीमाओं के भीतर निरस्त करता है।
सेटअप कोड में अल्पकालिक बूटस्ट्रैप क्रेडेंशियल अंतर्निहित होता है। क्लाइंट को युग्मन प्रवाह के बाद इसे लॉग या स्थायी नहीं करना चाहिए।
Node युग्मन, आह्वान और लंबित कार्य
node.pair.list,node.pair.approve,node.pair.reject, औरnode.pair.removeNode क्षमता अनुमोदनों को कवर करते हैं।node.pair.requestऔरnode.pair.verifyको स्वतंत्र Node युग्मन स्टोर के साथ 2026.7 में हटा दिया गया था; लंबित अनुरोध Node कनेक्ट होने के दौरान Gateway द्वारा बनाए जाते हैं।node.listऔरnode.describeज्ञात/कनेक्टेड Node स्थिति लौटाते हैं।node.renameकिसी युग्मित Node लेबल को अपडेट करता है।node.invokeकिसी कनेक्टेड Node को कमांड अग्रेषित करता है।node.invoke.resultकिसी आह्वान अनुरोध का परिणाम लौटाता है।mcp.tools.call.v1किसी कॉन्फ़िगर किए गए Node-स्थानीय MCP टूल को कॉल करने के लिए हेडलेस Node-होस्ट कमांड है। इसेnode.invokeके माध्यम से ले जाया जाता है, इसके लिए Node द्वारा कमांड घोषित करना आवश्यक है, और यह युग्मन अनुमोदन तथाgateway.nodes.commands.denyके अधीन रहता है।node.eventNode से उत्पन्न इवेंट को वापस Gateway में ले जाता है।node.pluginTools.updateकनेक्टेड Node के एजेंट-दृश्यमान Plugin/MCP टूल विवरणकों को बदलने का एकमात्र प्रकाशन पथ है;connectपैरामीटर उन्हें नहीं ले जाते।node.pending.pullऔरnode.pending.ackकनेक्टेड-Node कतार API हैं।node.pending.enqueueऔरnode.pending.drainऑफ़लाइन/डिस्कनेक्टेड Node के लिए टिकाऊ लंबित कार्य प्रबंधित करते हैं।
अनुमोदन समूह
approval.historyexec, plugin और system-agent अनुरोधों (दायराoperator.approvals) के लिए 30 दिनों तक रखे गए नवीनतम-प्रथम अंतिम अनुमोदन लौटाता है। यह कर्सर पृष्ठांकन के साथ वैकल्पिक प्रकार फ़िल्टर का समर्थन करता है; लंबित अनुमोदन इतिहास की पंक्तियाँ नहीं हैं।approval.getऔरapproval.resolveप्रकार-निरपेक्ष टिकाऊ अनुमोदन विधियाँ हैं (दायराoperator.approvals)।approval.getस्थिरurlPathके साथ स्वच्छ किया गया लंबित या रखा गया अंतिम प्रक्षेपण लौटाता है;approval.resolveविहित अनुमोदन आईडी, स्पष्टkindऔर निर्णय स्वीकार करता है, पहले उत्तर को अंतिम मानने वाला समाधान लागू करता है और हमेशा दर्ज किया गया विहित परिणाम लौटाता है।exec.approval.request,exec.approval.get,exec.approval.listऔरexec.approval.resolveएकबारगी exec अनुमोदन अनुरोधों के साथ लंबित अनुमोदन खोज/पुनर्चालन को कवर करते हैं। वे उसी टिकाऊ अनुमोदन रजिस्ट्री पर प्रोटोकॉल-सीमा अडैप्टर हैं।exec.approval.waitDecisionएक लंबित exec अनुमोदन की प्रतीक्षा करता है और अंतिम निर्णय (या टाइमआउट होने परnull) लौटाता है।exec.approvals.getऔरexec.approvals.setGateway की exec अनुमोदन नीति के स्नैपशॉट प्रबंधित करते हैं।exec.approvals.node.getऔरexec.approvals.node.setNode रिले कमांड के माध्यम से Node-स्थानीय exec अनुमोदन नीति प्रबंधित करते हैं।plugin.approval.request,plugin.approval.list,plugin.approval.waitDecisionऔरplugin.approval.resolvePlugin द्वारा परिभाषित अनुमोदन प्रवाहों को कवर करते हैं।
Control UI कमांड
ui.command,operator.writeकॉलर को उन कनेक्टेड Control UI क्लाइंट को टाइपयुक्त लेआउट और नेविगेशन कमांड भेजने देता है जोui-commandsक्षमता घोषित करते हैं।- कमांड पेन विभाजन/बंद करना/फ़ोकस, साइडबार दृश्यता, टर्मिनल/ब्राउज़र पैनल की दृश्यता और डॉक तथा सत्र नेविगेशन को कवर करते हैं।
- प्रोटोकॉल v1 जानबूझकर प्रत्येक कनेक्टेड और सक्षम Control UI तक प्रसारित होता है। यदि कोई कनेक्टेड नहीं है, तो लेआउट बदलने का दिखावा करने के बजाय अनुरोध
UNAVAILABLEके साथ विफल होता है।
स्वचालन, Skills और उपकरण
- स्वचालन:
wakeतत्काल या अगले Heartbeat पर सक्रियण-पाठ अंतःक्षेप निर्धारित करता है;cron.get,cron.list,cron.status,cron.add,cron.update,cron.remove,cron.run,cron.runsनिर्धारित कार्य प्रबंधित करते हैं। cron.runमैन्युअल संचालनों के लिए कतारबद्ध करने की शैली वाला RPC बना रहता है। जिन क्लाइंट को पूर्णता संबंधी अर्थविज्ञान चाहिए, उन्हें लौटाया गयाrunIdपढ़ना औरcron.runsको पोल करना चाहिए।cron.runsवैकल्पिक गैर-रिक्तrunIdफ़िल्टर स्वीकार करता है, ताकि क्लाइंट उसी जॉब की अन्य इतिहास प्रविष्टियों से होड़ किए बिना कतारबद्ध मैन्युअल संचालन का अनुसरण कर सकें।- Skills और उपकरण:
commands.list,skills.*,tools.catalog,tools.effective,tools.invoke। नीचे ऑपरेटर सहायक विधियाँ देखें।
सामान्य इवेंट समूह
chat: UI चैट अपडेट, जैसेchat.injectऔर अन्य केवल-प्रतिलेख चैट इवेंट। प्रोटोकॉल v4 में, डेल्टा पेलोडdeltaTextरखते हैं;messageसंचयी सहायक स्नैपशॉट बना रहता है। गैर-उपसर्ग प्रतिस्थापनreplace=trueसेट करते हैं और प्रतिस्थापन पाठ के रूप मेंdeltaTextका उपयोग करते हैं।session.message,session.operation,session.tool: सदस्यता लिए गए सत्र के लिए प्रतिलेख, प्रगति में चल रहा सत्र संचालन और इवेंट-स्ट्रीम अपडेट।session.approval: स्पष्ट रूप से सहमति देने वाले सटीक-सत्र सदस्य के लिए स्वच्छ किया गया लंबित और अंतिम अनुमोदन सत्य। चाइल्ड अनुमोदन स्थायी पूर्वज ऑडियंस का उपयोग करते हैं; इवेंट कभी भी प्रतिलेख परिवर्तित नहीं करते या एजेंट को सक्रिय नहीं करते।sessions.changed: सत्र इंडेक्स या मेटाडेटा बदला।presence: सिस्टम उपस्थिति स्नैपशॉट अपडेट।tick: आवधिक कीपअलाइव/सक्रियता इवेंट।health: Gateway स्वास्थ्य स्नैपशॉट अपडेट।heartbeat: Heartbeat इवेंट स्ट्रीम अपडेट।cron: Cron संचालन/जॉब परिवर्तन इवेंट।shutdown: Gateway शटडाउन सूचना।node.pair.requested/node.pair.resolved: Node पेयरिंग जीवनचक्र।node.invoke.request: Node इनवोक अनुरोध प्रसारण।device.pair.requested/device.pair.resolved: पेयर किए गए डिवाइस का जीवनचक्र।voicewake.changed: वेक-वर्ड ट्रिगर कॉन्फ़िगरेशन बदला।config.changed: कॉन्फ़िगरेशन लेखन स्थायी हुआ (पेलोड में कॉन्फ़िगरेशन पथ, नया स्नैपशॉट हैश और टाइमस्टैम्प होता है—कॉन्फ़िगरेशन सामग्री कभी नहीं)। ऑपरेटर-पठन दायरे वाला; क्लाइंटconfig.getके माध्यम से रीफ़्रेश करते हैं।exec.approval.requested/exec.approval.resolved: exec अनुमोदन जीवनचक्र।plugin.approval.requested/plugin.approval.resolved: Plugin अनुमोदन जीवनचक्र।
Node सहायक विधियाँ
स्वतः-अनुमति जाँच के लिए कौशल निष्पादनयोग्य फ़ाइलों की वर्तमान सूची प्राप्त करने हेतु
Node, skills.bins को कॉल कर सकते हैं।
ऑडिट लेजर RPC
audit.activity.list ऑपरेटर क्लाइंट को एजेंट संचालन, उपकरण क्रिया और सहमति-आधारित संदेश
जीवनचक्र मेटाडेटा का स्थिर नवीनतम-प्रथम दृश्य देता है। इसके लिए
operator.read आवश्यक है। क्वेरी 30 दिनों से पुराने रिकॉर्ड बाहर रखती हैं और साझा
SQLite लेजर की सीमा 100,000 रिकॉर्ड है। समय-सीमा समाप्त पंक्तियाँ
Gateway स्टार्टअप, प्रति घंटे रखरखाव और बाद के लेखनों के दौरान हटाई जाती हैं। डेटा मॉडल और गोपनीयता अर्थविज्ञान के लिए
ऑडिट इतिहास देखें।
- पैरामीटर: वैकल्पिक सटीक
agentId,sessionKeyयाrunId; वैकल्पिकkind("agent_run","tool_action"या"message"); वैकल्पिकstatus("started","succeeded","failed","cancelled","timed_out","blocked"या"unknown"); वैकल्पिक संदेशdirection("inbound"या"outbound") और सटीकchannel; वैकल्पिक समावेशीafter/beforeयूनिक्स-मिलीसेकंड सीमाएँ;1से500तक वैकल्पिकlimit; और पिछले पृष्ठ का वैकल्पिक स्ट्रिंगcursor। - परिणाम:
{ "events": AuditActivityEventV1[], "nextCursor"?: string }।
नामित V1 परिणाम यूनियन में एजेंट-संचालन, उपकरण-क्रिया, इनबाउंड-संदेश
और आउटबाउंड-संदेश के लिए अलग-अलग स्कीमा हैं। eventType डिस्क्रिमिनेटर क्रमशः
agent_run, tool_action, inbound_message या outbound_message है; kind और
संदेश direction फ़िल्टरिंग और प्रदर्शन के लिए उपलब्ध रहते हैं। प्रत्येक इवेंट में पूर्णांक
schemaVersion: 1 होता है। संदेश पहचान संदर्भ सटीक
hmac-sha256:v1:<32 hex key id>:<64 hex digest> प्रारूप का उपयोग करते हैं; चैनल-प्रेषक अभिनेता
आईडी भी इसी प्रारूप का उपयोग करती है।
सभी वेरिएंट के लिए eventType, schemaVersion, eventId, sequence,
sourceSequence, occurredAt, kind, action, status, actor और
redaction आवश्यक हैं। वेरिएंट फ़ील्ड ये हैं:
eventType |
आवश्यक फ़ील्ड | वैकल्पिक फ़ील्ड |
|---|---|---|
agent_run |
agentId, runId; kind: "agent_run" |
sessionKey, sessionId, errorCode |
tool_action |
agentId, runId; kind: "tool_action" |
sessionKey, sessionId, toolCallId, toolName, errorCode |
inbound_message |
direction: "inbound", channel, conversationKind, outcome |
agentId, runId, durationMs, resultCount, पहचान संदर्भ, reasonCode, errorCode |
outbound_message |
direction: "outbound", channel, conversationKind, outcome |
agentId, runId, durationMs, resultCount, पहचान संदर्भ, reasonCode, deliveryKind, failureStage, errorCode |
बंद संदेश एनम ये हैं:
conversationKind:direct,group,channelयाunknown।- इनबाउंड
outcome:completed,skippedयाfailed; वैकल्पिकreasonCode:duplicate,reply_operation_active,reply_operation_aborted,fast_abort,plugin_bound_handled,plugin_bound_unavailable,plugin_bound_declined,plugin_bound_error,before_dispatch_handled,acp_dispatch_completed,acp_dispatch_failed,acp_dispatch_emptyयाacp_dispatch_aborted। - आउटबाउंड
outcome:sent,suppressed,failedयाunknown; वैकल्पिकreasonCode:cancelled_by_message_sending_hook,cancelled_by_reply_payload_sending_hook,empty_after_message_sending_hook,empty_after_reply_payload_sending_hookयाno_visible_payload। जो अडैप्टर कोई प्लेटफ़ॉर्म पहचान नहीं लौटाता, वहunknownहै, क्योंकि बाहरी दुष्प्रभाव को असत्य सिद्ध नहीं किया जा सकता। deliveryKind:text,mediaयाother;failureStage:platform_send,queueयाunknown।
अंतिम फ़ील्ड सहसंबद्ध हैं, स्वतंत्र रूप से वैकल्पिक नहीं:
| वेरिएंट | अंतिम मैपिंग |
|---|---|
| एजेंट संचालन | started में errorCode नहीं होता; प्रत्येक गैर-सफल पूर्ण स्थिति के लिए उसका मेल खाता run_* कोड आवश्यक है। |
| उपकरण क्रिया | started और सफल स्थिति में errorCode नहीं होता; प्रत्येक अन्य पूर्ण स्थिति के लिए उसका मेल खाता tool_* कोड आवश्यक है। |
| इनबाउंड संदेश | सफल = completed; अवरुद्ध = skipped; विफल = failed के साथ message_processing_failed। reasonCode, मौजूद होने पर, उसी अंतिम समूह से संबंधित होना चाहिए। |
| आउटबाउंड संदेश | सफल = sent; अवरुद्ध = suppressed के साथ reasonCode; विफल = failed के साथ errorCode और failureStage; अज्ञात = unknown के साथ failureStage। |
प्रत्येक गतिविधि इवेंट में स्थिर इवेंट आईडी, एकदिश बढ़ता लेजर अनुक्रम,
स्रोत इवेंट अनुक्रम, टाइमस्टैम्प, अभिनेता, क्रिया, स्थिति, पूर्णांक
schemaVersion: 1 और redaction: "metadata_only" शामिल हैं। संचालन और उपकरण रिकॉर्ड के लिए
एजेंट और संचालन उद्गम आवश्यक हैं तथा उनमें सत्र उद्गम शामिल हो सकता है। संदेश
रिकॉर्ड में एजेंट और संचालन आईडी शामिल हो सकती हैं, लेकिन जानबूझकर कभी भी
sessionKey या sessionId शामिल नहीं होते; इसलिए sessionKey क्वेरी फ़िल्टर केवल
संचालन और उपकरण पंक्तियों पर लागू होता है। उपकरण इवेंट में उपकरण कॉल आईडी और उपकरण नाम शामिल हो सकते हैं।
संदेश रिकॉर्ड message.inbound.processed या
message.outbound.finished का उपयोग करते हैं और दिशा, चैनल, वार्तालाप प्रकार,
सामान्यीकृत परिणाम, तथा वैकल्पिक वितरण प्रकार, विफलता चरण, अवधि,
परिणाम संख्या, कारण कोड, और इंस्टॉलेशन-स्थानीय कुंजीयुक्त
खाता/वार्तालाप/संदेश/लक्ष्य छद्मनाम जोड़ते हैं। ये छद्मनाम
सहसंबंध में सहायता करते हैं, लेकिन अनामिकीकरण नहीं हैं: स्थिति डेटाबेस में उनकी कुंजी होती है,
जबकि RPC और CLI निर्यातों में नहीं। लेजर प्रॉम्प्ट, संदेश
मुख्य भाग, टूल तर्क, टूल परिणाम, कमांड आउटपुट या अपरिष्कृत त्रुटि टेक्स्ट संग्रहीत नहीं करता।
रन/टूल sessionKey मान अपरिष्कृत सहसंबंध मेटाडेटा बने रहते हैं और उनमें
प्लेटफ़ॉर्म खाता या पीयर आईडी समाहित हो सकती हैं; संदेश रिकॉर्ड में सत्र कुंजियाँ शामिल नहीं होतीं।
इनबाउंड पंक्तियों के लिए, durationMs कोर डिस्पैच से उसके समापन तक का मापन करता है और
resultCount अंतिम रूप दिए गए कतारबद्ध टूल, ब्लॉक और उत्तर पेलोड की गणना करता है।
आउटबाउंड पंक्तियों के लिए, durationMs वितरण स्वामित्व से अभिस्वीकृति,
डेड लेटर या समाधान तक (कतारबद्ध प्रतीक्षा समय सहित) की अवधि को समेटता है, और resultCount
पहचाने गए वास्तविक प्लेटफ़ॉर्म प्रेषणों की गणना करता है। deliveryKind, मौजूद होने पर,
हुक और रेंडरिंग के बाद प्रभावी पेलोड का वर्णन करता है; दबाई गई या
क्रैश-संदिग्ध पंक्तियों में यह शामिल नहीं होता।
वर्तमान संदेश कवरेज में कोर
डिस्पैच तक पहुँचने वाले स्वीकृत इनबाउंड संदेश शामिल हैं, जिनमें कोर डुप्लिकेट/समापन परिणाम भी शामिल हैं। आउटबाउंड कवरेज
साझा टिकाऊ वितरण तक पहुँचने वाले प्रत्येक मूल तार्किक उत्तर पेलोड के लिए
एक समापन पंक्ति लिखता है; खंडन और अडैप्टर फ़ैन-आउट को resultCount में समेकित किया जाता है। कतारबद्ध
पुनः प्रयास योग्य या संदिग्ध प्रेषण केवल अभिस्वीकृति, डेड
लेटर या समाधान के बाद रिकॉर्ड किए जाते हैं। उन साझा
सीमाओं को दरकिनार करने वाले Plugin-स्थानीय और प्रत्यक्ष-प्रेषण पथ अभी कवर नहीं किए गए हैं। सीमित वर्कर कतार सर्वोत्तम-प्रयास
आधारित है और विफलता या संतृप्ति पर रिकॉर्ड छोड़ सकती है, इसलिए यह सतह
हानिरहित अनुपालन संग्रह नहीं है।
रिकॉर्डिंग डिफ़ॉल्ट रूप से चालू होती है और
audit.enabled द्वारा नियंत्रित होती है। संदेश रिकॉर्डिंग
अलग से audit.messages द्वारा नियंत्रित होती है और डिफ़ॉल्ट रूप से "off" होती है। जब
रिकॉर्डिंग अक्षम होती है, तब audit.activity.list पहले लिखे गए रिकॉर्ड की
समाप्ति तक उन्हें प्रस्तुत करता रहता है।
जारी किए गए audit.list अनुरोध, परिणाम और AuditEvent स्कीमा
अपरिवर्तित रहते हैं और केवल एजेंट-रन तथा टूल-क्रिया रिकॉर्ड लौटाते हैं। नए ऑपरेटर
क्लाइंट को audit.activity.list कॉल करना चाहिए, जब Gateway इसका विज्ञापन करे। पुराने
Gateway या तो unknown method: audit.activity.list रिपोर्ट कर सकते हैं या, क्योंकि
जारी किए गए संस्करणों में प्राधिकरण विधि खोज से पहले होता था, पठन-स्कोप वाले अनुरोध को missing scope: operator.admin रिपोर्ट कर सकते हैं। बाद वाले को विधि की अनुपस्थिति
केवल तभी मानें, जब विधि का विज्ञापन नहीं किया गया था। इसके बाद क्लाइंट audit.list का पुनः प्रयास
केवल तभी कर सकता है, जब उसके फ़िल्टर को संदेश प्रकार, दिशा या चैनल
समर्थन की आवश्यकता न हो।
टेक्स्ट क्वेरी और सीमित JSON निर्यातों के लिए openclaw audit का उपयोग करें।
कार्य लेजर RPC
ऑपरेटर क्लाइंट कार्य लेजर RPC (packages/gateway-protocol/src/schema/tasks.ts) के माध्यम से
Gateway पृष्ठभूमि कार्य रिकॉर्ड का निरीक्षण और निरस्तीकरण करते हैं। ये
साफ़ किए गए कार्य सारांश लौटाते हैं, अपरिष्कृत रनटाइम स्थिति नहीं।
tasks.listके लिएoperator.readआवश्यक है।- पैरामीटर: वैकल्पिक
status("queued","running","completed","failed","cancelled"या"timed_out") या उन स्थितियों की एक सरणी, वैकल्पिकagentId, वैकल्पिकsessionKey,1से500तक वैकल्पिकlimit, और वैकल्पिक स्ट्रिंगcursor। - परिणाम:
{ "tasks": TaskSummary[], "nextCursor"?: string }।
- पैरामीटर: वैकल्पिक
tasks.getके लिएoperator.readआवश्यक है।- पैरामीटर:
{ "taskId": string }। - परिणाम:
{ "task": TaskSummary }। - अनुपलब्ध कार्य आईडी Gateway की नॉट-फाउंड त्रुटि संरचना लौटाती हैं।
- पैरामीटर:
tasks.cancelके लिएoperator.writeआवश्यक है।- पैरामीटर:
{ "taskId": string, "reason"?: string }। - परिणाम:
{ "found": boolean, "cancelled": boolean, "reason"?: string, "task"?: TaskSummary }। foundबताता है कि लेजर में मेल खाता कार्य था या नहीं।cancelledबताता है कि रनटाइम ने निरस्तीकरण स्वीकार किया या रिकॉर्ड किया अथवा नहीं।
- पैरामीटर:
TaskSummary में id, status और वैकल्पिक मेटाडेटा शामिल हैं: kind,
runtime, title, agentId, sessionKey, childSessionKey, ownerKey,
runId, taskId, flowId, parentTaskId, sourceId, टाइमस्टैम्प, प्रगति,
समापन सारांश और साफ़ किया गया त्रुटि टेक्स्ट। agentId कार्य निष्पादित करने वाले
एजेंट की पहचान करता है; sessionKey और ownerKey अनुरोधकर्ता और नियंत्रण
संदर्भ को बनाए रखते हैं।
ऑपरेटर सहायक विधियाँ
commands.list(operator.read) किसी एजेंट के लिए रनटाइम कमांड सूची प्राप्त करता है।agentIdवैकल्पिक है; डिफ़ॉल्ट एजेंट कार्यस्थान पढ़ने के लिए इसे छोड़ दें।scopeनियंत्रित करता है कि प्राथमिकnameकिस सतह को लक्षित करता है:textप्रारंभिक/के बिना प्राथमिक टेक्स्ट कमांड टोकन लौटाता है;nativeऔर डिफ़ॉल्टbothपथ उपलब्ध होने पर प्रदाता-सजग नेटिव नाम लौटाते हैं।textAliases/modelऔर/mजैसे हूबहू स्लैश उपनाम रखता है।nativeNameमौजूद होने पर प्रदाता-सजग नेटिव कमांड नाम रखता है।providerवैकल्पिक है और केवल नेटिव नामकरण तथा नेटिव Plugin कमांड उपलब्धता को प्रभावित करता है।includeArgs=falseप्रतिक्रिया से क्रमबद्ध तर्क मेटाडेटा हटा देता है।
tools.catalog(operator.read) किसी एजेंट के लिए रनटाइम टूल कैटलॉग प्राप्त करता है। प्रतिक्रिया में समूहित टूल और उद्गम मेटाडेटा शामिल होते हैं:source:coreयाpluginpluginId:source="plugin"होने पर Plugin स्वामीoptional: क्या Plugin टूल वैकल्पिक है
tools.effective(operator.read) किसी सत्र के लिए रनटाइम-प्रभावी टूल सूची प्राप्त करता है।sessionKeyआवश्यक है।- Gateway कॉलर द्वारा दी गई प्रमाणीकरण या वितरण प्रसंग को स्वीकार करने के बजाय सर्वर-साइड सत्र से विश्वसनीय रनटाइम प्रसंग प्राप्त करता है।
- प्रतिक्रिया सक्रिय सूची का सत्र-स्कोप वाला, सर्वर-व्युत्पन्न प्रक्षेपण है, जिसमें कोर, Plugin, चैनल और पहले से खोजे गए MCP सर्वर टूल शामिल हैं।
tools.effectiveMCP के लिए केवल-पठन है: यह अंतिम टूल नीति के माध्यम से किसी सक्रिय सत्र MCP कैटलॉग को प्रक्षेपित कर सकता है, लेकिन MCP रनटाइम नहीं बनाता, ट्रांसपोर्ट कनेक्ट नहीं करता, याtools/listजारी नहीं करता। यदि कोई मेल खाता सक्रिय कैटलॉग मौजूद नहीं है, तो प्रतिक्रिया मेंmcp-not-yet-connected,mcp-not-yet-listedयाmcp-stale-catalogजैसी सूचना शामिल हो सकती है।- प्रभावी टूल प्रविष्टियाँ
source="core",source="plugin",source="channel"याsource="mcp"का उपयोग करती हैं।
tools.invoke(operator.write)/tools/invokeके समान Gateway नीति पथ के माध्यम से एक उपलब्ध टूल का आह्वान करता है।nameआवश्यक है।args,sessionKey,agentId,confirmऔरidempotencyKeyवैकल्पिक हैं।- यदि
sessionKeyऔरagentIdदोनों मौजूद हैं, तो समाधान किया गया सत्र एजेंटagentIdसे मेल खाना चाहिए। - केवल-स्वामी कोर रैपर, जैसे
cron,gatewayऔरnodes, के लिए स्वामी/व्यवस्थापक पहचान (operator.admin) आवश्यक है, भले हीtools.invokeस्वयंoperator.writeहो। - प्रतिक्रिया SDK-उन्मुख आवरण है, जिसमें
ok,toolName, वैकल्पिकoutputऔर टाइप किए गएerrorफ़ील्ड होते हैं। अनुमोदन या नीति अस्वीकृतियाँ Gateway टूल नीति पाइपलाइन को दरकिनार करने के बजाय पेलोड मेंok:falseलौटाती हैं।
skills.status(operator.read) किसी एजेंट के लिए दृश्यमान Skills सूची प्राप्त करता है।agentIdवैकल्पिक है; डिफ़ॉल्ट एजेंट कार्यस्थान पढ़ने के लिए इसे छोड़ दें।- प्रतिक्रिया में अपरिष्कृत गुप्त मानों को उजागर किए बिना पात्रता, अनुपलब्ध आवश्यकताएँ, कॉन्फ़िगरेशन जाँच और साफ़ किए गए इंस्टॉल विकल्प शामिल होते हैं।
skills.searchऔरskills.detail(operator.read) ClawHub खोज मेटाडेटा लौटाते हैं।skills.upload.begin,skills.upload.chunkऔरskills.upload.commit(operator.admin) किसी निजी Skill संग्रह को इंस्टॉल करने से पहले तैयार करते हैं। यह विश्वसनीय क्लाइंट के लिए एक अलग व्यवस्थापक अपलोड पथ है, सामान्य ClawHub Skill इंस्टॉल प्रवाह नहीं, और डिफ़ॉल्ट रूप से तब तक अक्षम रहता है जब तकskills.install.allowUploadedArchivesसक्षम न हो।skills.upload.begin({ kind: "skill-archive", slug, sizeBytes, sha256?, force?, idempotencyKey? })उस स्लग और फ़ोर्स मान से बँधा अपलोड बनाता है।skills.upload.chunk({ uploadId, offset, dataBase64 })सटीक डिकोड किए गए ऑफ़सेट पर बाइट जोड़ता है।skills.upload.commit({ uploadId, sha256? })अंतिम आकार और SHA-256 सत्यापित करता है। कमिट केवल अपलोड को अंतिम रूप देता है; यह Skill इंस्टॉल नहीं करता।- अपलोड किए गए Skill संग्रह ऐसे zip संग्रह होते हैं जिनमें
SKILL.mdरूट होता है। संग्रह का आंतरिक डायरेक्टरी नाम कभी भी इंस्टॉल लक्ष्य नहीं चुनता।
skills.install(operator.admin) के तीन मोड हैं:- ClawHub मोड:
{ source: "clawhub", slug, version?, force? }डिफ़ॉल्ट एजेंट कार्यस्थान कीskills/डायरेक्टरी में एक Skill फ़ोल्डर इंस्टॉल करता है। - अपलोड मोड:
{ source: "upload", uploadId, slug, force?, sha256?, timeoutMs? }प्रतिबद्ध अपलोड को डिफ़ॉल्ट एजेंट कार्यस्थान कीskills/<slug>डायरेक्टरी में इंस्टॉल करता है। स्लग और फ़ोर्स मान मूलskills.upload.beginअनुरोध से मेल खाने चाहिए। जब तकskills.install.allowUploadedArchivesसक्षम न हो, इसे अस्वीकार किया जाता है; यह सेटिंग ClawHub इंस्टॉल को प्रभावित नहीं करती। - Gateway इंस्टॉलर मोड:
{ name, installId, timeoutMs? }Gateway होस्ट पर घोषितmetadata.openclaw.installक्रिया चलाता है। पुराने क्लाइंट अभी भीdangerouslyForceUnsafeInstallभेज सकते हैं; यह फ़ील्ड पदावनत है, केवल प्रोटोकॉल संगतता के लिए स्वीकार किया जाता है और अनदेखा किया जाता है। ऑपरेटर-स्वामित्व वाले इंस्टॉल निर्णयों के लिएsecurity.installPolicyका उपयोग करें।
- ClawHub मोड:
skills.update(operator.admin) के दो मोड हैं:- ClawHub मोड डिफ़ॉल्ट एजेंट कार्यस्थान में एक ट्रैक किए गए स्लग या सभी ट्रैक किए गए ClawHub इंस्टॉल को अपडेट करता है।
- कॉन्फ़िगरेशन मोड
skills.entries.<skillKey>मानों, जैसेenabled,apiKeyऔरenv, को पैच करता है।
models.list दृश्य
models.list एक वैकल्पिक view पैरामीटर
(src/agents/model-catalog-visibility.ts) स्वीकार करता है:
- छोड़ा गया या
"default": यदिagents.defaults.modelPolicy.allowकॉन्फ़िगर किया गया है, तो प्रतिक्रिया अनुमत कैटलॉग होती है, जिसमेंprovider/*प्रविष्टियों के लिए गतिशील रूप से खोजे गए मॉडल शामिल होते हैं। अन्यथा प्रतिक्रिया पूर्ण Gateway कैटलॉग होती है। "configured": पिकर-आकार का व्यवहार। यदिagents.defaults.modelPolicy.allowकॉन्फ़िगर किया गया है, तो उसे फिर भी प्राथमिकता मिलती है, जिसमेंprovider/*प्रविष्टियों के लिए प्रदाता-स्कोप वाली खोज शामिल है। अनुमति-सूची के बिना, प्रतिक्रिया स्पष्टmodels.providers.<provider>.modelsप्रविष्टियों का उपयोग करती है और केवल तब पूर्ण कैटलॉग पर वापस जाती है, जब कोई कॉन्फ़िगर की गई मॉडल पंक्ति मौजूद न हो।"provider-config": स्रोत-निर्मितmodels.providers.*.modelsसूची, पिकर अनुमति-सूचियों से स्वतंत्र। पंक्तियों में सार्वजनिक मॉडल क्षमताएँ और रूट-सजग उपलब्धता शामिल होती हैं, लेकिन प्रदाता एंडपॉइंट, प्रमाणीकरण सामग्री और रनटाइम अनुरोध कॉन्फ़िगरेशन शामिल नहीं होते।"all": पूर्ण Gateway कैटलॉग,agents.defaults.modelPolicy.allowको दरकिनार करते हुए। इसका उपयोग निदान/खोज UI के लिए करें, सामान्य मॉडल पिकर के लिए नहीं।
निष्पादन अनुमोदन
- जब किसी exec अनुरोध को अनुमोदन की आवश्यकता होती है, तो Gateway
exec.approval.requestedप्रसारित करता है। - ऑपरेटर क्लाइंट
exec.approval.resolveको कॉल करके समाधान करते हैं (इसके लिएoperator.approvalsआवश्यक है)। host=nodeके लिए,exec.approval.requestमेंsystemRunPlan(कैनोनिकलargv/cwd/rawCommand/सत्र मेटाडेटा) शामिल होना चाहिए। जिन अनुरोधों मेंsystemRunPlanनहीं होता, उन्हें अस्वीकार कर दिया जाता है।- अनुमोदन के बाद, अग्रेषित
node.invoke system.runकॉल उसी कैनोनिकलsystemRunPlanको आधिकारिक कमांड/cwd/सत्र संदर्भ के रूप में पुनः उपयोग करती हैं। - यदि कोई कॉलर तैयार करने और अंतिम अनुमोदित
system.runअग्रेषण के बीचcommand,rawCommand,cwd,agentId, याsessionKeyमें बदलाव करता है, तो Gateway बदले हुए पेलोड पर भरोसा करने के बजाय रन को अस्वीकार कर देता है।
एजेंट डिलीवरी फ़ॉलबैक
agentअनुरोधों में आउटबाउंड डिलीवरी का अनुरोध करने के लिएdeliver=trueशामिल हो सकता है।bestEffortDeliver=false(डिफ़ॉल्ट) सख्त व्यवहार बनाए रखता है: अनसुलझे या केवल-आंतरिक डिलीवरी लक्ष्यINVALID_REQUESTलौटाते हैं।- जब कोई बाहरी डिलीवरी-योग्य रूट हल नहीं किया जा सकता (उदाहरण के लिए आंतरिक/webchat
सत्र या अस्पष्ट मल्टी-चैनल कॉन्फ़िगरेशन), तब
bestEffortDeliver=trueकेवल-सत्र निष्पादन पर फ़ॉलबैक की अनुमति देता है। - यदि डिलीवरी का अनुरोध किया गया था, तो अंतिम
agentपरिणामों मेंresult.deliveryStatusशामिल हो सकता है, जिसमेंopenclaw agent --json --deliverके लिए दस्तावेज़ित वहीsent,suppressed,partial_failed, औरfailedस्थितियाँ उपयोग की जाती हैं।
संस्करण निर्धारण
PROTOCOL_VERSION,MIN_CLIENT_PROTOCOL_VERSION,MIN_NODE_PROTOCOL_VERSION, औरMIN_PROBE_PROTOCOL_VERSIONpackages/gateway-protocol/src/version.tsमें मौजूद हैं।- क्लाइंट
minProtocol+maxProtocolभेजते हैं। ऑपरेटर और UI क्लाइंट को उस सीमा में वर्तमान प्रोटोकॉल शामिल करना आवश्यक है; वर्तमान क्लाइंट और सर्वर प्रोटोकॉल v4 चलाते हैं। role: "node"औरclient.mode: "node"दोनों वाले प्रमाणित क्लाइंट N-1 Node प्रोटोकॉल (वर्तमान में v3) का उपयोग कर सकते हैं। हल्के रीस्टार्ट प्रोब समान N-1 विंडो का उपयोग करते हैं। इस संगतता विंडो से डिवाइस प्रमाणीकरण, पेयरिंग, स्कोप, कमांड नीति और exec अनुमोदन अपरिवर्तित रहते हैं। Plugin-स्वामित्व वाली Node क्षमताएँ और कमांड तब तक उपलब्ध नहीं कराए जाते, जब तक Node वर्तमान प्रोटोकॉल पर अपग्रेड नहीं हो जाता, क्योंकि उनकी होस्ट की गई सतहें N-1 अनुबंध का हिस्सा नहीं हैं।- स्कीमा और मॉडल TypeBox परिभाषाओं से जनरेट किए जाते हैं:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
क्लाइंट स्थिरांक
संदर्भ क्लाइंट कार्यान्वयन packages/gateway-client/src/ में मौजूद है
(OpenClaw इसे पतले src/gateway/client.ts फ़साड के माध्यम से रैप करता है)। ये
डिफ़ॉल्ट प्रोटोकॉल v4 में स्थिर हैं और तृतीय-पक्ष क्लाइंट के लिए अपेक्षित आधार-रेखा हैं।
| स्थिरांक | डिफ़ॉल्ट | स्रोत |
|---|---|---|
PROTOCOL_VERSION |
4 |
packages/gateway-protocol/src/version.ts |
MIN_CLIENT_PROTOCOL_VERSION |
4 |
packages/gateway-protocol/src/version.ts |
MIN_NODE_PROTOCOL_VERSION |
3 |
packages/gateway-protocol/src/version.ts |
MIN_PROBE_PROTOCOL_VERSION |
3 |
packages/gateway-protocol/src/version.ts |
| अनुरोध टाइमआउट (प्रति RPC) | 30_000 ms |
packages/gateway-client/src/client.ts (requestTimeoutMs) |
| प्रीऑथ / कनेक्ट-चैलेंज टाइमआउट | 15_000 ms |
packages/gateway-client/src/timeouts.ts (OPENCLAW_HANDSHAKE_TIMEOUT_MS env युग्मित सर्वर/क्लाइंट बजट बढ़ा सकता है) |
| प्रारंभिक पुनःकनेक्ट बैकऑफ़ | 1_000 ms |
packages/gateway-client/src/client.ts (GATEWAY_RECONNECT_POLICY) |
| अधिकतम पुनःकनेक्ट बैकऑफ़ | 30_000 ms |
packages/gateway-client/src/client.ts (GATEWAY_RECONNECT_POLICY) |
| डिवाइस-टोकन बंद होने के बाद तेज़-पुनःप्रयास क्लैंप | 250 ms |
packages/gateway-client/src/client.ts |
terminate() से पहले बलपूर्वक-रोकने की छूट |
250 ms |
FORCE_STOP_TERMINATE_GRACE_MS |
stopAndWait() डिफ़ॉल्ट टाइमआउट |
1_000 ms |
STOP_AND_WAIT_TIMEOUT_MS |
डिफ़ॉल्ट टिक अंतराल (hello-ok से पहले) |
30_000 ms |
packages/gateway-client/src/client.ts |
| टिक-टाइमआउट क्लोज़ | जब मौन tickIntervalMs * 2 से अधिक हो, तब कोड 4000 |
packages/gateway-client/src/client.ts |
MAX_PAYLOAD_BYTES |
25 * 1024 * 1024 (25 MB) |
src/gateway/server-constants.ts |
सर्वर प्रभावी policy.tickIntervalMs,
policy.maxPayload, और policy.maxBufferedBytes को hello-ok में घोषित करता है; क्लाइंट को
प्री-हैंडशेक डिफ़ॉल्ट के बजाय उन मानों का पालन करना चाहिए।
जब प्रत्येक लंबित अनुरोध की अपनी समय-सीमा होती है, तो संदर्भ क्लाइंट सीमित अनुरोधों को उनकी कॉन्फ़िगर की गई समय-सीमा नियंत्रित करने देता है। सीमित
timeoutMs के बिना कोई expectFinal अनुरोध, timeoutMs: null वाला कोई भी अनुरोध, या सीमित और
असीमित अनुरोधों का मिश्रण टिक वॉचडॉग को सक्रिय रखता है। यदि इनबाउंड ईवेंट और
प्रतिक्रियाएँ टिक-टाइमआउट सीमा के बाद भी मौन रहती हैं, तो क्लाइंट
कोड 4000 के साथ सॉकेट बंद करता है, प्रत्येक लंबित अनुरोध को अस्वीकार करता है और पुनः कनेक्ट करता है। यह
पुनः कनेक्ट होने के बाद अस्वीकृत अनुरोधों को दोबारा नहीं चलाता।
प्रमाणीकरण
- साझा-सीक्रेट Gateway प्रमाणीकरण कॉन्फ़िगर किए गए
gateway.auth.mode("none" | "token" | "password" | "trusted-proxy") के आधार परconnect.params.auth.tokenयाconnect.params.auth.passwordका उपयोग करता है। - Tailscale Serve (
gateway.auth.allowTailscale: true) या गैर-लूपबैकgateway.auth.mode: "trusted-proxy"जैसे पहचान-युक्त मोड,connect.params.auth.*के बजाय अनुरोध हेडर से कनेक्ट प्रमाणीकरण जाँच पूरी करते हैं। - निजी-इनग्रेस
gateway.auth.mode: "none"साझा-सीक्रेट कनेक्ट प्रमाणीकरण को पूरी तरह छोड़ देता है; उस मोड को सार्वजनिक/अविश्वसनीय इनग्रेस पर उजागर न करें। - पेयरिंग के बाद, Gateway कनेक्शन की भूमिका + स्कोप तक सीमित एक डिवाइस
टोकन जारी करता है, जो
hello-ok.auth.deviceTokenमें लौटाया जाता है। क्लाइंट को प्रत्येक सफल कनेक्ट के बाद इसे स्थायी रूप से सहेजना चाहिए। - उस संग्रहीत डिवाइस टोकन से पुनः कनेक्ट करते समय उस टोकन के लिए संग्रहीत स्वीकृत स्कोप सेट का भी पुनः उपयोग किया जाना चाहिए। इससे पहले से दी गई रीड/प्रोब/स्टेटस पहुँच सुरक्षित रहती है और पुनः कनेक्शन चुपचाप किसी अधिक सीमित, अंतर्निहित केवल-एडमिन स्कोप में सिमटने से बचते हैं।
- क्लाइंट-साइड कनेक्ट प्रमाणीकरण संयोजन (
packages/gateway-client/src/client.tsमेंselectConnectAuth):auth.passwordस्वतंत्र है और सेट होने पर हमेशा अग्रेषित किया जाता है।auth.tokenको प्राथमिकता क्रम में भरा जाता है: पहले स्पष्ट साझा टोकन, फिर स्पष्टdeviceToken, और फिर संग्रहीत प्रति-डिवाइस टोकन (deviceId+roleद्वारा कुंजीबद्ध)।auth.bootstrapTokenकेवल तभी भेजा जाता है, जब उपरोक्त में से किसी ने भीauth.tokenका समाधान न किया हो। साझा टोकन या कोई भी हल किया गया डिवाइस टोकन इसे रोक देता है।- एकल-प्रयास
AUTH_TOKEN_MISMATCHपुनः प्रयास पर संग्रहीत डिवाइस टोकन का स्वतः-प्रोमोशन केवल विश्वसनीय एंडपॉइंट तक सीमित है: लूपबैक, या पिन किए गएtlsFingerprintवालाwss://। पिनिंग के बिना सार्वजनिकwss://योग्य नहीं है।
- अंतर्निहित सेटअप-कोड बूटस्ट्रैप विश्वसनीय मोबाइल हैंडऑफ़ के लिए प्राथमिक
Node
hello-ok.auth.deviceTokenके साथhello-ok.auth.deviceTokensमें एक सीमित ऑपरेटर टोकन लौटाता है। ऑपरेटर टोकन में नेटिव Talk कॉन्फ़िगरेशन रीड के लिएoperator.talk.secretsशामिल है, लेकिन पेयरिंग-म्यूटेशन स्कोप औरoperator.adminशामिल नहीं हैं। - जब कोई गैर-बेसलाइन सेटअप-कोड बूटस्ट्रैप स्वीकृति की प्रतीक्षा करता है,
PAIRING_REQUIREDविवरण मेंrecommendedNextStep: "wait_then_retry",retryable: true, औरpauseReconnect: falseशामिल होते हैं। अनुरोध स्वीकृत होने या टोकन अमान्य होने तक उसी बूटस्ट्रैप टोकन से पुनः कनेक्ट करते रहें। hello-ok.auth.deviceTokensको केवल तभी स्थायी रूप से सहेजें, जब कनेक्ट नेwss://या लूपबैक/स्थानीय पेयरिंग जैसे विश्वसनीय ट्रांसपोर्ट पर बूटस्ट्रैप प्रमाणीकरण का उपयोग किया हो।- यदि कोई क्लाइंट स्पष्ट
deviceTokenया स्पष्टscopesदेता है, तो कॉलर द्वारा अनुरोधित वह स्कोप सेट प्रामाणिक बना रहता है; कैश किए गए स्कोप का पुनः उपयोग केवल तब होता है, जब क्लाइंट संग्रहीत प्रति-डिवाइस टोकन का पुनः उपयोग कर रहा हो। - डिवाइस टोकन को
device.token.rotateऔरdevice.token.revokeके माध्यम से रोटेट/निरस्त किया जा सकता है (operator.pairingआवश्यक है)। किसी Node या अन्य गैर-ऑपरेटर भूमिका को रोटेट या निरस्त करने के लिएoperator.adminभी आवश्यक है। device.token.rotateरोटेशन मेटाडेटा लौटाता है। यह प्रतिस्थापन बेयरर टोकन केवल उसी डिवाइस की उन कॉल के लिए दोहराता है, जो पहले से उस डिवाइस टोकन से प्रमाणित हैं, ताकि केवल-टोकन क्लाइंट पुनः कनेक्ट करने से पहले अपना प्रतिस्थापन सहेज सकें। साझा/एडमिन रोटेशन बेयरर टोकन नहीं दोहराते।- टोकन जारी करना, रोटेशन और निरसन उस डिवाइस की पेयरिंग प्रविष्टि में दर्ज स्वीकृत भूमिका सेट तक सीमित रहते हैं; टोकन म्यूटेशन उस डिवाइस भूमिका का विस्तार या उसे लक्षित नहीं कर सकता, जिसे पेयरिंग स्वीकृति ने कभी प्रदान नहीं किया।
- पेयर किए गए डिवाइस टोकन सत्रों के लिए, डिवाइस प्रबंधन स्वयं तक सीमित
रहता है, जब तक कॉलर के पास
operator.adminभी न हो: गैर-एडमिन कॉलर केवल अपनी डिवाइस प्रविष्टि का ऑपरेटर टोकन प्रबंधित कर सकते हैं। Node और अन्य गैर-ऑपरेटर टोकन का प्रबंधन केवल एडमिन कर सकता है, भले ही वह कॉलर का अपना डिवाइस हो। device.token.rotateऔरdevice.token.revokeलक्षित ऑपरेटर टोकन स्कोप सेट की जाँच कॉलर के वर्तमान सत्र स्कोप से भी करते हैं। गैर-एडमिन कॉलर अपने पास पहले से मौजूद ऑपरेटर टोकन से अधिक व्यापक टोकन को रोटेट या निरस्त नहीं कर सकते।- प्रमाणीकरण विफलताओं में
error.details.codeऔर पुनर्प्राप्ति संकेत शामिल हैं:error.details.canRetryWithDeviceToken(बूलियन)error.details.recommendedNextStep:retry_with_device_token,update_auth_configuration,update_auth_credentials,wait_then_retry,review_auth_configuration(packages/gateway-protocol/src/connect-error-details.ts) में से एक।
AUTH_TOKEN_MISMATCHके लिए क्लाइंट व्यवहार:- विश्वसनीय क्लाइंट कैश किए गए प्रति-डिवाइस टोकन के साथ एक सीमित पुनः प्रयास कर सकते हैं।
- यदि वह पुनः प्रयास विफल हो जाए, तो स्वचालित पुनः कनेक्ट लूप रोकें और ऑपरेटर कार्रवाई संबंधी मार्गदर्शन दिखाएँ।
AUTH_SCOPE_MISMATCHका अर्थ है कि डिवाइस टोकन पहचाना गया था, लेकिन वह अनुरोधित भूमिका/स्कोप को कवर नहीं करता। इसे खराब टोकन के रूप में प्रस्तुत न करें; ऑपरेटर को पुनः पेयर करने या अधिक सीमित/व्यापक स्कोप अनुबंध स्वीकृत करने के लिए कहें।
डिवाइस पहचान और पेयरिंग
- Nodes को कीपेयर फ़िंगरप्रिंट से प्राप्त एक स्थिर डिवाइस पहचान
(
device.id) शामिल करनी चाहिए। - Gateways प्रति डिवाइस + भूमिका टोकन जारी करते हैं।
- नई डिवाइस ID के लिए पेयरिंग स्वीकृति आवश्यक है, जब तक स्थानीय स्वतः-स्वीकृति सक्षम न हो।
- पेयरिंग स्वतः-स्वीकृति सीधे स्थानीय लूपबैक कनेक्ट पर केंद्रित है।
- OpenClaw में विश्वसनीय साझा-सीक्रेट सहायक प्रवाहों के लिए एक सीमित बैकएंड/कंटेनर-स्थानीय स्व-कनेक्ट पथ भी है।
- समान-होस्ट टेलनेट या LAN कनेक्ट को पेयरिंग के लिए अब भी रिमोट माना जाता है और इनके लिए स्वीकृति आवश्यक है।
- WS क्लाइंट सामान्यतः
connectके दौरानdeviceपहचान शामिल करते हैं (ऑपरेटर + Node)। बिना डिवाइस वाले ऑपरेटर के एकमात्र अपवाद स्पष्ट विश्वास पथ हैं:- सफल
gateway.auth.mode: "trusted-proxy"ऑपरेटर Control UI प्रमाणीकरण। - आरक्षित आंतरिक सहायक पथ पर सीधे-लूपबैक
gateway-clientबैकएंड RPC।
- सफल
- डिवाइस पहचान छोड़ने से स्कोप पर प्रभाव पड़ता है। जब किसी स्पष्ट विश्वास
पथ से बिना डिवाइस वाले ऑपरेटर कनेक्शन की अनुमति दी जाती है, तब भी OpenClaw
स्वयं-घोषित स्कोप को खाली सेट में साफ़ कर देता है, जब तक उस पथ के लिए नामित
स्कोप-संरक्षण अपवाद न हो। इसके बाद स्कोप-गेटेड विधियाँ
missing scopeके साथ विफल हो जाती हैं। - आरक्षित सीधे-लूपबैक
gateway-clientबैकएंड सहायक पथ केवल आंतरिक स्थानीय कंट्रोल-प्लेन RPC के लिए स्कोप सुरक्षित रखता है; कस्टम बैकएंड ID को यह अपवाद नहीं मिलता। - सभी कनेक्शन को सर्वर द्वारा दिए गए
connect.challengeनॉन्स पर हस्ताक्षर करना आवश्यक है।
डिवाइस प्रमाणीकरण माइग्रेशन निदान
उन पुराने क्लाइंट के लिए, जो अभी भी प्री-चैलेंज हस्ताक्षर व्यवहार का उपयोग करते हैं,
connect, error.details.code के अंतर्गत स्थिर error.details.reason
के साथ DEVICE_AUTH_* विवरण कोड लौटाता है।
सामान्य माइग्रेशन विफलताएँ:
| संदेश | details.code | details.reason | अर्थ |
|---|---|---|---|
device nonce required |
DEVICE_AUTH_NONCE_REQUIRED |
device-nonce-missing |
क्लाइंट ने device.nonce छोड़ दिया (या रिक्त भेजा)। |
device nonce mismatch |
DEVICE_AUTH_NONCE_MISMATCH |
device-nonce-mismatch |
क्लाइंट ने पुराने/गलत नॉन्स से हस्ताक्षर किए। |
device signature invalid |
DEVICE_AUTH_SIGNATURE_INVALID |
device-signature |
हस्ताक्षर पेलोड v2 पेलोड से मेल नहीं खाता। |
device signature expired |
DEVICE_AUTH_SIGNATURE_EXPIRED |
device-signature-stale |
हस्ताक्षरित टाइमस्टैम्प अनुमत अंतर से बाहर है। |
device identity mismatch |
DEVICE_AUTH_DEVICE_ID_MISMATCH |
device-id-mismatch |
device.id सार्वजनिक कुंजी फ़िंगरप्रिंट से मेल नहीं खाता। |
device public key invalid |
DEVICE_AUTH_PUBLIC_KEY_INVALID |
device-public-key |
सार्वजनिक कुंजी प्रारूप/कैनॉनिकलाइज़ेशन विफल रहा। |
माइग्रेशन लक्ष्य:
- हमेशा
connect.challengeकी प्रतीक्षा करें। - सर्वर नॉन्स शामिल करने वाले v2 पेलोड पर हस्ताक्षर करें।
connect.params.device.nonceमें वही नॉन्स भेजें।- वरीय हस्ताक्षर पेलोड
v3(packages/gateway-client/src/device-auth.tsमेंbuildDeviceAuthPayloadV3) है, जो डिवाइस/क्लाइंट/भूमिका/स्कोप/टोकन/नॉन्स फ़ील्ड के अतिरिक्तplatformऔरdeviceFamilyको भी बाँधता है। - संगतता के लिए पुराने
v2हस्ताक्षर अभी भी स्वीकार किए जाते हैं, लेकिन पेयर किए गए डिवाइस की मेटाडेटा पिनिंग पुनः कनेक्ट होने पर भी कमांड नीति नियंत्रित करती है।
TLS और पिनिंग
- WS कनेक्शन के लिए TLS समर्थित है (
gateway.tlsकॉन्फ़िगरेशन)। - क्लाइंट वैकल्पिक रूप से
gateway.remote.tlsFingerprintया CLI--tls-fingerprintके माध्यम से Gateway प्रमाणपत्र फ़िंगरप्रिंट पिन कर सकते हैं।
दायरा
यह प्रोटोकॉल संपूर्ण Gateway API उपलब्ध कराता है: स्टेटस, चैनल, मॉडल, चैट,
एजेंट, सत्र, Nodes, स्वीकृतियाँ और बहुत कुछ। सटीक सतह packages/gateway-protocol/src/schema.ts
से पुनः निर्यात किए गए TypeBox स्कीमा द्वारा परिभाषित होती है।