प्रवेश बिंदु
- Gateway RPC:
agentऔरagent.wait। - CLI:
openclaw agent।
रन क्रम
agentRPC पैरामीटर सत्यापित करता है, सत्र (sessionKey/sessionId) का समाधान करता है, सत्र मेटाडेटा सहेजता है, और तुरंत{ runId, acceptedAt }लौटाता है।agentCommandटर्न चलाता है: मॉडल + चिंतन/विस्तृत/ट्रेस डिफ़ॉल्ट का समाधान करता है, Skills स्नैपशॉट लोड करता है,runEmbeddedAgentको कॉल करता है, और यदि एम्बेडेड लूप ने पहले से ऐसा कोई उत्सर्जन नहीं किया है, तो फ़ॉलबैक जीवनचक्र समाप्ति/त्रुटि उत्सर्जित करता है।runEmbeddedAgent: प्रति-सत्र और वैश्विक कतारों के माध्यम से रन क्रमबद्ध करता है, मॉडल + प्रमाणीकरण प्रोफ़ाइल का समाधान करता है, OpenClaw सत्र बनाता है, रनटाइम इवेंट की सदस्यता लेता है, सहायक/टूल डेल्टा स्ट्रीम करता है, रन टाइमआउट लागू करता है (समाप्ति पर निरस्त करके), और उपयोग मेटाडेटा के साथ पेलोड लौटाता है। Codex ऐप-सर्वर टर्न के लिए, यह ऐसे स्वीकृत टर्न को भी निरस्त करता है जो टर्मिनल इवेंट से पहले ऐप-सर्वर प्रगति उत्पन्न करना बंद कर देता है।subscribeEmbeddedAgentSessionरनटाइम इवेंट कोagentस्ट्रीम से जोड़ता है: टूल इवेंट कोstream: "tool", सहायक डेल्टा कोstream: "assistant", जीवनचक्र इवेंट कोstream: "lifecycle"(phase: "start" | "end" | "error")।agent.wait(waitForAgentRun) किसीrunIdपर जीवनचक्र समाप्ति/त्रुटि की प्रतीक्षा करता है और{ status: ok|error|timeout, startedAt, endedAt, error? }लौटाता है।
कतारबद्धता और समवर्तीता
रन प्रति सत्र कुंजी (सत्र लेन) क्रमबद्ध होते हैं और वैकल्पिक रूप से वैश्विक लेन से होकर गुजरते हैं, जिससे टूल/सत्र रेस रोकी जाती हैं। संदेश चैनल एक कतार मोड (steer/followup/collect/interrupt) चुनते हैं, जो इस लेन प्रणाली को इनपुट देता है; कमांड कतार देखें। ट्रांसक्रिप्ट लेखन को सत्र फ़ाइल पर सत्र लेखन लॉक द्वारा अतिरिक्त सुरक्षा दी जाती है। लॉक प्रक्रिया-जागरूक और फ़ाइल-आधारित है, इसलिए यह उन लेखकों को भी पकड़ता है जो प्रक्रिया-अंतर्गत कतार को बायपास करते हैं या किसी अन्य प्रक्रिया से आते हैं। सत्र को व्यस्त बताए जाने से पहले लेखक डिफ़ॉल्ट रूप से अधिकतम 60 सेकंड प्रतीक्षा करते हैं (एन्वायरमेंट ओवरराइडOPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS)।
सत्र लेखन लॉक डिफ़ॉल्ट रूप से पुनःप्रवेशी नहीं होते। एक ही तार्किक लेखक को बनाए रखते हुए जानबूझकर उसी लॉक के अधिग्रहण को नेस्ट करने वाले हेल्पर को allowReentrant: true के साथ ऑप्ट इन करना होगा।
सत्र और कार्यक्षेत्र की तैयारी
- कार्यस्थल का समाधान करके उसे बनाया जाता है; सैंडबॉक्स किए गए रन को सैंडबॉक्स कार्यस्थल रूट पर पुनर्निर्देशित किया जा सकता है।
- Skills लोड किए जाते हैं (या स्नैपशॉट से पुनः उपयोग किए जाते हैं) और एन्वायरमेंट तथा प्रॉम्प्ट में अंतःक्षेपित किए जाते हैं।
- बूटस्ट्रैप/संदर्भ फ़ाइलों का समाधान करके उन्हें सिस्टम प्रॉम्प्ट में अंतःक्षेपित किया जाता है।
- स्ट्रीमिंग शुरू होने से पहले सत्र लेखन लॉक अधिग्रहित किया जाता है और सत्र ट्रांसक्रिप्ट लक्ष्य तैयार किया जाता है। बाद में ट्रांसक्रिप्ट को पुनः लिखने, Compaction करने या छोटा करने वाले किसी भी पथ को SQLite ट्रांसक्रिप्ट पंक्तियों में बदलाव करने से पहले यही लॉक लेना होगा।
प्रॉम्प्ट संयोजन
सिस्टम प्रॉम्प्ट OpenClaw के आधार प्रॉम्प्ट, Skills प्रॉम्प्ट, बूटस्ट्रैप संदर्भ और प्रति-रन ओवरराइड से बनाया जाता है। मॉडल-विशिष्ट सीमाएँ और Compaction आरक्षित टोकन लागू किए जाते हैं। मॉडल क्या देखता है, इसके लिए सिस्टम प्रॉम्प्ट देखें।हुक
OpenClaw में दो हुक प्रणालियाँ हैं:- आंतरिक हुक (Gateway हुक): कमांड और जीवनचक्र इवेंट के लिए इवेंट-संचालित स्क्रिप्ट।
- Plugin हुक: एजेंट/टूल जीवनचक्र और Gateway पाइपलाइन के भीतर विस्तार बिंदु।
आंतरिक हुक (Gateway हुक)
agent:bootstrap: सिस्टम प्रॉम्प्ट को अंतिम रूप दिए जाने से पहले बूटस्ट्रैप फ़ाइलें बनाते समय चलता है। बूटस्ट्रैप संदर्भ फ़ाइलें जोड़ने या हटाने के लिए इसका उपयोग करें।- कमांड हुक:
/new,/reset,/stop, और अन्य कमांड इवेंट (हुक दस्तावेज़ देखें)।
Plugin हुक
ये एजेंट लूप या Gateway पाइपलाइन के भीतर चलते हैं:
जावक/टूल गार्ड के लिए हुक निर्णय नियम:
before_tool_call:{ block: true }अंतिम है और कम-प्राथमिकता वाले हैंडलर को रोकता है।{ block: false }कोई कार्रवाई नहीं करता और किसी पिछले ब्लॉक को साफ़ नहीं करता।before_install: ऊपर जैसे ही अंतिम/कोई-कार्रवाई-नहीं अर्थ। ऑपरेटर-स्वामित्व वाले स्थापना अनुमति/अवरोध निर्णयों, जिन्हें CLI स्थापना और अपडेट पथों को शामिल करना आवश्यक है, के लिएbefore_installनहीं, बल्किsecurity.installPolicyका उपयोग करें।message_sending:{ cancel: true }अंतिम है और कम-प्राथमिकता वाले हैंडलर को रोकता है।{ cancel: false }कोई कार्रवाई नहीं करता और किसी पिछले निरस्तीकरण को साफ़ नहीं करता।
स्ट्रीमिंग
- सहायक डेल्टा एजेंट रनटाइम से
assistantइवेंट के रूप में स्ट्रीम होते हैं। - ब्लॉक स्ट्रीमिंग
text_endयाmessage_endपर आंशिक उत्तर उत्सर्जित कर सकती है। - रीज़निंग स्ट्रीमिंग एक अलग स्ट्रीम हो सकती है या उत्तरों को अवरुद्ध कर सकती है।
- खंडीकरण और ब्लॉक उत्तर व्यवहार के लिए स्ट्रीमिंग देखें।
टूल निष्पादन
- टूल आरंभ/अपडेट/समाप्ति इवेंट
toolस्ट्रीम पर उत्सर्जित होते हैं। - लॉगिंग/उत्सर्जन से पहले टूल परिणामों का आकार और छवि पेलोड के लिए शोधन किया जाता है।
- डुप्लिकेट सहायक पुष्टियों को रोकने के लिए संदेश टूल प्रेषण ट्रैक किए जाते हैं।
उत्तर का स्वरूप निर्धारण
अंतिम पेलोड सहायक टेक्स्ट (साथ में वैकल्पिक रीज़निंग), इनलाइन टूल सारांश (जब विस्तृत मोड चालू हो और अनुमति हो), और मॉडल में त्रुटि होने पर सहायक त्रुटि टेक्स्ट से संयोजित किए जाते हैं।- सटीक मौन टोकन
NO_REPLYको जावक पेलोड से फ़िल्टर किया जाता है। - संदेश टूल के डुप्लिकेट अंतिम पेलोड सूची से हटा दिए जाते हैं।
- यदि कोई रेंडर करने योग्य पेलोड शेष नहीं रहता और किसी टूल में त्रुटि हुई है, तो एक फ़ॉलबैक टूल त्रुटि उत्तर उत्सर्जित किया जाता है, बशर्ते किसी संदेश टूल ने पहले से उपयोगकर्ता को दिखाई देने वाला उत्तर न भेजा हो।
Compaction और पुनः प्रयास
स्वचालित Compactioncompaction स्ट्रीम इवेंट उत्सर्जित करता है और पुनः प्रयास ट्रिगर कर सकता है। पुनः प्रयास पर, डुप्लिकेट आउटपुट से बचने के लिए इन-मेमोरी बफ़र और टूल सारांश रीसेट किए जाते हैं। Compaction देखें।
इवेंट स्ट्रीम
lifecycle:subscribeEmbeddedAgentSessionद्वारा उत्सर्जित (और फ़ॉलबैक के रूप मेंagentCommandद्वारा)।assistant: एजेंट रनटाइम से स्ट्रीम किए गए डेल्टा।tool: एजेंट रनटाइम से स्ट्रीम किए गए टूल इवेंट।
चैट चैनल प्रबंधन
सहायक डेल्टा चैटdelta संदेशों में बफ़र होते हैं। जीवनचक्र समाप्ति/त्रुटि पर चैट final उत्सर्जित होता है।
टाइमआउट
अटके हुए सेशन का निदान
निदान सक्षम होने पर, अंतर्निहित दो-मिनट की सीमा ऐसे लंबेprocessing सेशन को वर्गीकृत करती है जिनमें कोई प्रतिक्रिया, टूल, स्थिति, अवरोध या ACP प्रगति नहीं देखी गई है:
- सक्रिय एम्बेडेड रन, मॉडल कॉल और टूल कॉल को
session.long_runningके रूप में रिपोर्ट किया जाता है। स्वामित्व वाली मौन मॉडल कॉल निरस्तीकरण सीमा तकsession.long_runningबनी रहती हैं, ताकि धीमे या गैर-स्ट्रीमिंग प्रदाताओं को बहुत जल्दी रुका हुआ न माना जाए। - हाल की प्रगति के बिना सक्रिय कार्य को
session.stalledके रूप में रिपोर्ट किया जाता है। स्वामित्व वाली मॉडल कॉल निरस्तीकरण सीमा पर या उसके बादsession.stalledमें बदल जाती हैं; स्वामी-रहित पुरानी मॉडल/टूल गतिविधि को लंबे समय से चल रही गतिविधि के रूप में छिपाया नहीं जाता। session.stuckपुनर्प्राप्त किए जा सकने वाले पुराने सेशन रिकॉर्ड-रखरखाव के लिए आरक्षित है, जिसमें पुरानी स्वामी-रहित मॉडल/टूल गतिविधि वाले निष्क्रिय कतारबद्ध सेशन शामिल हैं।
session.stuck निदान के बीच का अंतराल बढ़ता जाता है।
कार्य समय से पहले कहाँ समाप्त हो सकते हैं
- एजेंट समय-समाप्ति (निरस्तीकरण)
- AbortSignal (रद्द करना)
- Gateway डिस्कनेक्शन या RPC समय-समाप्ति
agent.waitसमय-समाप्ति (केवल प्रतीक्षा, एजेंट को नहीं रोकती)
संबंधित
- टूल - उपलब्ध एजेंट टूल
- हुक - एजेंट जीवनचक्र घटनाओं से ट्रिगर होने वाली इवेंट-संचालित स्क्रिप्ट
- Compaction - लंबी बातचीत को किस प्रकार संक्षेपित किया जाता है
- निष्पादन अनुमोदन - शेल कमांड के लिए अनुमोदन द्वार
- चिंतन - चिंतन/तर्क स्तर का कॉन्फ़िगरेशन