Messages and delivery
प्रगति मसौदे
प्रगति ड्राफ्ट लंबे समय तक चलने वाले एजेंट टर्न को चैट में जीवंत महसूस कराते हैं, बिना बातचीत को अस्थायी स्थिति उत्तरों के ढेर में बदले।
जब प्रगति ड्राफ्ट सक्षम होते हैं, OpenClaw केवल तब एक दृश्य कार्य-प्रगति संदेश बनाता है जब टर्न यह साबित कर देता है कि वह सचमुच काम कर रहा है, एजेंट के पढ़ने, योजना बनाने, टूल कॉल करने, या अनुमोदन की प्रतीक्षा करने के दौरान उसे अपडेट करता है, और फिर जब चैनल सुरक्षित रूप से ऐसा कर सकता है तो उस ड्राफ्ट को अंतिम उत्तर में बदल देता है।
Shelling...📖 from docs/concepts/progress-drafts.md🔎 Web Search: for "discord edit message"🛠️ Bash: run testsप्रगति ड्राफ्ट का उपयोग तब करें जब आप टूल-प्रधान काम के दौरान एक साफ-सुथरा स्थिति संदेश और टर्न पूरा होने पर अंतिम उत्तर चाहते हों।
त्वरित शुरुआत
streaming.mode: "progress" के साथ प्रति चैनल प्रगति ड्राफ्ट सक्षम करें:
{ channels: { discord: { streaming: { mode: "progress", }, }, },}आमतौर पर इतना पर्याप्त होता है। OpenClaw एक स्वचालित एक-शब्द लेबल चुनेगा, तब तक प्रतीक्षा करेगा जब तक काम कम से कम पांच सेकंड तक न चले या दूसरा कार्य इवेंट न निकले, उपयोगी काम होते समय संक्षिप्त प्रगति पंक्तियां जोड़ेगा, और उस टर्न के लिए डुप्लिकेट स्वतंत्र प्रगति बातचीत को दबा देगा।
उपयोगकर्ताओं को क्या दिखता है
प्रगति ड्राफ्ट के दो भाग होते हैं:
| भाग | उद्देश्य |
|---|---|
| लेबल | Working या Shelling जैसी छोटी शुरुआती/स्थिति पंक्ति। |
| प्रगति पंक्तियां | verbose आउटपुट जैसे ही टूल आइकन और विवरण फॉर्मैटर का उपयोग करते हुए संक्षिप्त रन अपडेट। |
लेबल तब दिखाई देता है जब एजेंट सार्थक काम शुरू करता है और या तो पांच सेकंड तक व्यस्त
रहता है या दूसरा कार्य इवेंट निकालता है। यह रोलिंग प्रगति पंक्ति सूची का हिस्सा होता है,
इसलिए पर्याप्त ठोस काम दिखाई देने के बाद शुरुआती स्थिति स्क्रोल होकर हट जाती है।
केवल सादा टेक्स्ट वाले उत्तर प्रगति ड्राफ्ट नहीं दिखाते। प्रगति पंक्तियां केवल तब जोड़ी जाती
हैं जब एजेंट उपयोगी कार्य अपडेट निकालता है, उदाहरण के लिए 🛠️ Bash: run tests,
🔎 Web Search: for "discord edit message", या ✍️ Write: to /tmp/file।
डिफ़ॉल्ट रूप से वे /verbose जैसा ही संक्षिप्त explain मोड उपयोग करती हैं; डिबग करते समय
और जब आप कच्चे कमांड/विवरण भी जोड़े हुए चाहते हों तो
agents.defaults.toolProgressDetail: "raw" सेट करें।
जहां संभव हो अंतिम उत्तर ड्राफ्ट को बदल देता है; अन्यथा OpenClaw अंतिम उत्तर सामान्य रूप से
भेजता है और चैनल के ट्रांसपोर्ट के अनुसार ड्राफ्ट को साफ करता है या उसे अपडेट करना बंद कर देता है।
मोड चुनें
channels.<channel>.streaming.mode दृश्य कार्य-प्रगति व्यवहार नियंत्रित करता है:
| मोड | सबसे उपयुक्त | चैट में क्या दिखाई देता है |
|---|---|---|
off |
शांत चैनल | केवल अंतिम उत्तर। |
partial |
उत्तर का टेक्स्ट दिखाई देते देखना | नवीनतम उत्तर टेक्स्ट के साथ संपादित एक ड्राफ्ट। |
block |
बड़े उत्तर-पूर्वावलोकन खंड | बड़े खंडों में अपडेट या जोड़ा गया एक पूर्वावलोकन। |
progress |
टूल-प्रधान या लंबे समय तक चलने वाले टर्न | एक स्थिति ड्राफ्ट, फिर अंतिम उत्तर। |
जब उपयोगकर्ताओं को उत्तर टेक्स्ट को टोकन-दर-टोकन स्ट्रीम होते देखने से अधिक "क्या हो रहा है"
की परवाह हो, तब progress चुनें।
जब उत्तर स्वयं ही प्रगति संकेत हो, तब partial चुनें।
जब आप बड़े टेक्स्ट खंडों में ड्राफ्ट पूर्वावलोकन अपडेट चाहते हों, तब block चुनें। Discord
और Telegram पर, streaming.mode: "block" अभी भी पूर्वावलोकन स्ट्रीमिंग है, सामान्य
ब्लॉक डिलीवरी नहीं। जब आप सामान्य ब्लॉक उत्तर चाहते हों तो streaming.block.enabled
या legacy blockStreaming का उपयोग करें।
लेबल कॉन्फ़िगर करें
प्रगति लेबल channels.<channel>.streaming.progress के अंतर्गत रहते हैं।
डिफ़ॉल्ट लेबल auto है, जो OpenClaw के अंतर्निहित एक-शब्द लेबल पूल से चुनता है:
WorkingShellingScuttlingClawingPinchingMoltingBubblingTidingReefingCrackingSiftingBriningNautilingKrillingBarnaclingLobsteringTidepoolingPearlingSnappingSurfacingएक निश्चित लेबल उपयोग करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "Investigating", }, }, }, },}अपना स्वचालित लेबल पूल उपयोग करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "auto", labels: ["Checking", "Reading", "Testing", "Finishing"], }, }, }, },}लेबल छिपाएं और केवल प्रगति पंक्तियां दिखाएं:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: false, }, }, }, },}प्रगति पंक्तियां नियंत्रित करें
प्रगति मोड में प्रगति पंक्तियां डिफ़ॉल्ट रूप से सक्षम होती हैं। वे वास्तविक रन इवेंट से आती हैं: टूल शुरू होना, आइटम अपडेट, टास्क योजनाएं, अनुमोदन, कमांड आउटपुट, पैच सारांश, और इसी तरह की एजेंट गतिविधि।
एकल टूल कॉल अभी चल रही हो तब भी टूल typed प्रगति निकाल सकते हैं। इसी तरह धीमा fetch या search टूल के अंतिम परिणाम लौटाने से पहले दृश्य ड्राफ्ट को अपडेट कर सकता है। प्रगति अपडेट खाली मॉडल सामग्री और स्पष्ट सार्वजनिक चैनल मेटाडेटा के साथ एक आंशिक टूल परिणाम होता है:
{ "content": [], "progress": { "text": "Fetching page content...", "visibility": "channel", "privacy": "public", "id": "web_fetch:fetching" }}OpenClaw चैनल प्रगति UI में केवल progress.text रेंडर करता है। सामान्य टूल परिणाम
बाद में content और details के रूप में आता है, और मॉडल को लौटाया गया यही एकमात्र
भाग होता है।
किसी टूल में प्रगति जोड़ते समय, छोटा, सामान्य संदेश उपयोग करें और उसे तब तक विलंबित रखें जब तक ऑपरेशन उपयोगी होने जितनी देर से लंबित न हो:
const clearProgressTimer = scheduleToolProgress( onUpdate, { text: "Fetching page content...", id: "web_fetch:fetching" }, 5_000, { signal },); try { return await runToolWork();} finally { clearProgressTimer();}इस पैटर्न का अर्थ है कि तेज़ कॉल प्रगति पंक्ति नहीं दिखाते, लंबे कॉल अभी लंबित रहने के दौरान एक पंक्ति दिखाते हैं, और रद्द किए गए कॉल पुराने प्रगति संदेश के दिखाई देने से पहले टाइमर साफ कर देते हैं। प्रगति टेक्स्ट एक सार्वजनिक UI साइड चैनल है, इसलिए उसमें secrets, कच्चे arguments, fetch की गई सामग्री, कमांड आउटपुट, या पेज टेक्स्ट शामिल नहीं होना चाहिए।
OpenClaw प्रगति ड्राफ्ट और /verbose के लिए वही फॉर्मैटर उपयोग करता है:
{ agents: { defaults: { toolProgressDetail: "explain", // explain | raw }, },}"explain" डिफ़ॉल्ट है और ड्राफ्ट को 🛠️ check JS syntax for /tmp/app.js जैसे संक्षिप्त
लेबलों के साथ स्थिर रखता है। "raw" उपलब्ध होने पर अंतर्निहित कमांड/विवरण जोड़ता है,
जो डिबग करते समय उपयोगी है लेकिन चैट में अधिक शोर पैदा करता है।
उदाहरण के लिए, वही कमांड विवरण मोड के आधार पर अलग दिखता है:
| मोड | प्रगति पंक्ति |
|---|---|
explain |
🛠️ check JS syntax for /tmp/app.js |
raw |
🛠️ check JS syntax for /tmp/app.js, node --check /tmp/app.js |
दिखाई देने वाली पंक्तियों की संख्या सीमित करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLines: 4, }, }, }, },}ड्राफ्ट संपादित होने के दौरान चैट-बबल reflow कम करने के लिए प्रगति पंक्तियां स्वचालित रूप से compact की जाती हैं।
OpenClaw लंबे प्रगति पंक्तियों को डिफ़ॉल्ट रूप से छोटा करता है ताकि बार-बार ड्राफ्ट संपादन हर अपडेट पर अलग तरह से wrap न हों। डिफ़ॉल्ट प्रति-पंक्ति बजट 120 वर्ण है। गद्य शब्द सीमा पर कटता है, जबकि path या कच्चे कमांड जैसे लंबे विवरण बीच की ellipsis से छोटे किए जाते हैं ताकि suffix दिखाई देता रहे।
प्रति-पंक्ति बजट समायोजित करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLineChars: 160, }, }, }, },}Slack प्रगति पंक्तियों को एकल टेक्स्ट body के बजाय संरचित Block Kit फ़ील्ड के रूप में रेंडर कर सकता है:
{ channels: { slack: { streaming: { mode: "progress", progress: { render: "rich", }, }, }, },}Rich rendering वही plain-text fallback रखता है ताकि वे चैनल और क्लाइंट जो समृद्ध shape का समर्थन नहीं करते, फिर भी संक्षिप्त प्रगति टेक्स्ट दिखा सकें।
एकल प्रगति ड्राफ्ट रखें लेकिन टूल और टास्क पंक्तियां छिपाएं:
{ channels: { discord: { streaming: { mode: "progress", progress: { toolProgress: false, }, }, }, },}toolProgress: false के साथ, OpenClaw उस टर्न के लिए पुराने standalone
tool-progress संदेशों को फिर भी दबा देता है। यदि कोई लेबल कॉन्फ़िगर है तो उसे छोड़कर,
अंतिम उत्तर तक चैनल दृश्य रूप से शांत रहता है।
चैनल व्यवहार
हर चैनल अपने समर्थित सबसे साफ ट्रांसपोर्ट का उपयोग करता है:
| चैनल | प्रगति ट्रांसपोर्ट | नोट्स |
|---|---|---|
| Discord | एक संदेश भेजें, फिर उसे संपादित करें। | जब वह एक सुरक्षित पूर्वावलोकन संदेश में फिट होता है तो अंतिम टेक्स्ट वहीं संपादित होता है। |
| Matrix | एक इवेंट भेजें, फिर उसे संपादित करें। | अकाउंट-स्तरीय स्ट्रीमिंग कॉन्फ़िग अकाउंट-स्तरीय ड्राफ्ट नियंत्रित करता है। |
| Microsoft Teams | निजी चैट में native Teams stream। | streaming.mode: "block" Teams ब्लॉक डिलीवरी पर मैप होता है। |
| Slack | native stream या संपादन योग्य ड्राफ्ट पोस्ट। | थ्रेड उपलब्धता प्रभावित करती है कि native streaming उपयोग की जा सकती है या नहीं। |
| Telegram | एक संदेश भेजें, फिर उसे संपादित करें। | पुराने दृश्य ड्राफ्ट बदले जा सकते हैं ताकि अंतिम timestamps उपयोगी रहें। |
| Mattermost | संपादन योग्य ड्राफ्ट पोस्ट। | टूल गतिविधि उसी draft-style पोस्ट में समाहित की जाती है। |
सुरक्षित संपादन समर्थन के बिना चैनल आमतौर पर typing indicators या final-only delivery पर fallback करते हैं।
अंतिमकरण
जब अंतिम उत्तर तैयार होता है, OpenClaw चैट को साफ रखने की कोशिश करता है:
- यदि ड्राफ्ट सुरक्षित रूप से अंतिम उत्तर बन सकता है, तो OpenClaw उसे वहीं संपादित करता है।
- यदि चैनल native progress streaming उपयोग करता है, तो native transport द्वारा अंतिम टेक्स्ट स्वीकार किए जाने पर OpenClaw उस stream को अंतिम करता है।
- यदि अंतिम उत्तर में मीडिया, अनुमोदन prompt, स्पष्ट reply target, बहुत अधिक chunks, या असफल edit/send है, तो OpenClaw अंतिम उत्तर को सामान्य चैनल delivery path से भेजता है।
fallback path जानबूझकर है। टेक्स्ट खोने, reply को गलत thread में डालने, या draft को ऐसे payload से overwrite करने से बेहतर है एक नया अंतिम उत्तर भेजना जिसे चैनल सुरक्षित रूप से दर्शा नहीं सकता।
समस्या निवारण
मुझे केवल अंतिम उत्तर दिखता है।
जांचें कि संदेश संभालने वाले account या channel के लिए channels.<channel>.streaming.mode
progress पर सेट है। कुछ group या quote-reply paths किसी turn के लिए draft previews
अक्षम कर सकते हैं जब channel सही message को सुरक्षित रूप से edit नहीं कर सकता।
मुझे label दिखता है लेकिन tool lines नहीं।
streaming.progress.toolProgress जांचें। यदि यह false है, तो OpenClaw single draft
व्यवहार रखता है लेकिन tool और task progress lines छिपा देता है।
मुझे edited draft के बजाय fresh final message दिखता है।
यह safety fallback है। यह media replies, लंबे answers, explicit reply targets, पुराने Telegram drafts, missing Slack thread targets, deleted preview messages, या failed native stream finalization के लिए हो सकता है।
मुझे अब भी standalone progress messages दिखते हैं।
जब draft सक्रिय होता है तो progress mode default standalone tool-progress messages को
दबाता है। यदि standalone messages अब भी दिखाई देते हैं, तो सत्यापित करें कि turn सचमुच
progress mode उपयोग कर रहा है और streaming.mode: "off" या ऐसा channel path नहीं
जो उस message के लिए draft नहीं बना सकता।
Teams Discord या Telegram से अलग व्यवहार करता है।
Microsoft Teams निजी चैट में सामान्य send-and-edit पूर्वावलोकन ट्रांसपोर्ट के बजाय नेटिव स्ट्रीम का उपयोग करता है। Teams streaming.mode: "block" को Teams ब्लॉक डिलीवरी भी मानता है क्योंकि इसमें Discord और Telegram द्वारा उपयोग किया जाने वाला वही ड्राफ्ट-पूर्वावलोकन ब्लॉक मोड नहीं होता।