Messages and delivery
प्रगति के प्रारूप
प्रगति ड्राफ़्ट किसी एजेंट के काम करते समय अस्थायी "अभी भी काम जारी है" जवाबों के ढेर के बजाय, एक चैनल संदेश को लाइव स्थिति पंक्ति में बदल देते हैं। channels.<channel>.streaming.mode: "progress" सेट करें और OpenClaw वास्तविक काम शुरू होते ही संदेश बनाता है, एजेंट के पढ़ने, योजना बनाने, टूल कॉल करने या अनुमोदन की प्रतीक्षा करने के दौरान उसे संपादित करता है, फिर उसे अंतिम उत्तर में बदल देता है।
काम जारी है...📖 docs/concepts/progress-drafts.md से🔎 वेब खोज: "discord edit message" के लिए🛠️ Bash: परीक्षण चलाएँत्वरित शुरुआत
{ channels: { discord: { streaming: { mode: "progress", }, }, },}यहाँ से डिफ़ॉल्ट हैं: 5 सेकंड की आरंभ देरी, उपयोगी काम होने के दौरान संक्षिप्त प्रगति पंक्तियाँ, और उस टर्न के लिए पुराने अलग-अलग प्रगति संदेशों का दमन। कच्चे टूल-पंक्ति ड्राफ़्ट एक स्वचालित एक-शब्द लेबल का उपयोग करते हैं; स्थिति शीर्षक उस अनावश्यक शीर्षक को छोड़ देता है, जब तक आप किसी को स्पष्ट रूप से कॉन्फ़िगर न करें।
यह पृष्ठ प्रगति-ड्राफ़्ट अनुभव और उसके कॉन्फ़िग विकल्पों को समझाता है। पूर्ण स्ट्रीमिंग-मोड मैट्रिक्स, प्रति-चैनल रनटाइम नोट्स और पुराने कुंजी माइग्रेशन के लिए स्ट्रीमिंग और चंकिंग देखें।
उपयोगकर्ताओं को क्या दिखाई देता है
| भाग | उद्देश्य |
|---|---|
| स्थिति शीर्षक | Discord और Telegram पर, मॉडल प्रस्तावना; Discord एक उपयोगिता पूरक जोड़ता है। |
| लेबल | Working जैसी वैकल्पिक आरंभिक/स्थिति पंक्ति। |
| प्रगति पंक्तियाँ | /verbose के समान टूल आइकन और विवरण फ़ॉर्मैटर का उपयोग करने वाले संक्षिप्त रन अपडेट। |
कच्ची टूल प्रगति के लिए, एजेंट के सार्थक काम शुरू करने और प्रारंभिक देरी तक व्यस्त रहने के बाद लेबल दिखाई देता है।
यह चलती प्रगति-पंक्ति सूची के शीर्ष पर रहता है, इसलिए पर्याप्त ठोस कार्य पंक्तियाँ दिखाई देने पर स्क्रॉल होकर हट जाता है। स्थिति शीर्षक केवल एजेंट की साधारण भाषा वाली स्थिति दिखाता है, जब तक कोई लेबल स्पष्ट रूप से कॉन्फ़िगर न किया गया हो। केवल सादे टेक्स्ट वाले जवाब कभी भी प्रगति ड्राफ़्ट नहीं दिखाते; पंक्ति केवल वास्तविक कार्य अपडेट के लिए दिखाई देती है, उदाहरण के लिए 🛠️ Bash: run tests, 🔎 Web Search: for "discord edit message", या ✍️ Write: to /tmp/file।
जब चैनल सुरक्षित रूप से ऐसा कर सकता है, तो अंतिम उत्तर ड्राफ़्ट को उसी स्थान पर बदल देता है; अन्यथा OpenClaw सामान्य डिलीवरी के माध्यम से अंतिम उत्तर भेजता है और ड्राफ़्ट को साफ़ करता है या अपडेट करना रोक देता है (अंतिमीकरण देखें)।
मोड चुनें
channels.<channel>.streaming.mode दिखाई देने वाले प्रगति-अधीन व्यवहार को नियंत्रित करता है:
| मोड | इसके लिए सर्वोत्तम | चैट में क्या दिखाई देता है |
|---|---|---|
off |
शांत चैनल | केवल अंतिम उत्तर। |
partial |
उत्तर टेक्स्ट को प्रकट होते देखना | नवीनतम उत्तर टेक्स्ट के साथ संपादित एक ड्राफ़्ट। |
block |
बड़े उत्तर-पूर्वावलोकन चंक | बड़े चंकों में अपडेट या संलग्न किया गया एक पूर्वावलोकन। |
progress |
टूल-प्रधान या लंबे समय तक चलने वाले टर्न | एक स्थिति ड्राफ़्ट, फिर अंतिम उत्तर। |
जब उपयोगकर्ताओं को उत्तर टेक्स्ट को टोकन-दर-टोकन स्ट्रीम होते देखने की तुलना में "क्या हो रहा है" अधिक महत्वपूर्ण हो, तब progress चुनें; जब उत्तर टेक्स्ट स्वयं प्रगति संकेत हो, तब partial; बड़े पूर्वावलोकन चंकों के लिए block। Discord और Telegram पर, streaming.mode: "block" अभी भी पूर्वावलोकन स्ट्रीमिंग है, सामान्य ब्लॉक-जवाब डिलीवरी नहीं — उसके लिए streaming.block.enabled का उपयोग करें।
लेबल कॉन्फ़िगर करें
प्रगति लेबल channels.<channel>.streaming.progress के अंतर्गत रहते हैं। डिफ़ॉल्ट कच्चा टूल-पंक्ति लेबल "auto" है, जो साधारण अंतर्निहित Working लेबल का उपयोग करता है। स्थिति शीर्षक उस अंतर्निहित लेबल को छिपाता है; यदि आप उसके ऊपर भी लेबल चाहते हैं, तो label: "auto" स्पष्ट रूप से सेट करें:
काम जारी हैएक निश्चित लेबल का उपयोग करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "Investigating", }, }, }, },}अपने लेबल पूल का उपयोग करें (label: "auto" होने पर भी यादृच्छिक रूप से/सीड के अनुसार चुना जाता है):
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "auto", labels: ["Checking", "Reading", "Testing", "Finishing"], }, }, }, },}लेबल छिपाएँ और केवल प्रगति पंक्तियाँ दिखाएँ:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: false, }, }, }, },}प्रगति पंक्तियाँ नियंत्रित करें
प्रगति पंक्तियाँ वास्तविक रन इवेंट से आती हैं: टूल आरंभ, आइटम अपडेट, कार्य योजनाएँ, अनुमोदन, कमांड आउटपुट, पैच सारांश और इसी तरह की एजेंट गतिविधि।
वे डिफ़ॉल्ट रूप से सक्षम होती हैं (progress.toolProgress, डिफ़ॉल्ट true)।
एकल कॉल के अभी भी चलते समय टूल टाइप की गई प्रगति भी उत्सर्जित कर सकते हैं। इसी तरह धीमा फ़ेच या खोज टूल द्वारा अंतिम परिणाम लौटाए जाने से पहले दिखाई देने वाले ड्राफ़्ट को अपडेट करता है। प्रगति अपडेट खाली मॉडल सामग्री और स्पष्ट सार्वजनिक चैनल मेटाडेटा वाला आंशिक टूल परिणाम है:
{ "content": [], "progress": { "text": "Fetching page content...", "visibility": "channel", "privacy": "public", "id": "web_fetch:fetching" }}OpenClaw चैनल प्रगति UI में केवल progress.text रेंडर करता है। सामान्य टूल परिणाम बाद में भी content/details के रूप में आता है और मॉडल को लौटाया जाने वाला एकमात्र भाग होता है।
किसी टूल में प्रगति जोड़ते समय एक छोटा, सामान्य संदेश उत्सर्जित करें और उसे तब तक विलंबित करें जब तक ऑपरेशन उपयोगी होने लायक पर्याप्त समय से लंबित न हो। web_fetch 5-सेकंड की देरी के साथ ठीक यही करता है:
const clearProgressTimer = scheduleToolProgress( onUpdate, { text: "Fetching page content...", id: "web_fetch:fetching" }, 5_000, { signal },); try { return await runToolWork();} finally { clearProgressTimer();}तेज़ कॉल कोई प्रगति पंक्ति नहीं दिखाते; लंबे कॉल लंबित रहते हुए एक पंक्ति दिखाते हैं; रद्द किए गए कॉल पुरानी प्रगति दिखाई देने से पहले टाइमर साफ़ कर देते हैं। प्रगति टेक्स्ट एक सार्वजनिक UI साइड चैनल है, इसलिए इसमें कभी भी सीक्रेट, कच्चे आर्ग्युमेंट, फ़ेच की गई सामग्री, कमांड आउटपुट या पृष्ठ टेक्स्ट शामिल नहीं होना चाहिए।
विवरण मोड
OpenClaw प्रगति ड्राफ़्ट और /verbose के लिए समान फ़ॉर्मैटर का उपयोग करता है:
{ agents: { defaults: { toolProgressDetail: "explain", // explain | raw }, },}"explain" डिफ़ॉल्ट है और संक्षिप्त लेबल के साथ ड्राफ़्ट को स्थिर रखता है।
"raw" उपलब्ध होने पर अंतर्निहित कमांड जोड़ता है, जो डीबगिंग के दौरान उपयोगी लेकिन चैट में अधिक शोरपूर्ण होता है। उदाहरण के लिए, एक node --check /tmp/app.js कॉल मोड के अनुसार अलग तरह से रेंडर होता है:
| मोड | प्रगति पंक्ति |
|---|---|
explain |
🛠️ check js syntax for /tmp/app.js |
raw |
🛠️ check js syntax for /tmp/app.js · node --check /tmp/app.js |
कमांड/एक्ज़ेक टेक्स्ट
streaming.progress.commandText (डिफ़ॉल्ट "raw") नियंत्रित करता है कि ऊपर दिए गए विवरण मोड से स्वतंत्र रूप से एक्ज़ेक/Bash प्रगति पंक्तियों के पास कितना कमांड विवरण दिखाई देता है। कमांड टेक्स्ट को पूरी तरह छिपाते हुए टूल-प्रगति पंक्ति को दिखाई देने देने के लिए इसे "status" पर सेट करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { commandText: "status", }, }, }, },}टिप्पणी लेन
streaming.progress.commentary (डिफ़ॉल्ट false) मॉडल के टूल-पूर्व टिप्पणी/प्रस्तावना वर्णन (💬, उदाहरण के लिए "मैं जाँच करूँगा... फिर ...") को ड्राफ़्ट में टूल पंक्तियों के बीच रखता है। सभी चैनलों में साझा कॉन्फ़िग संरचना के लिए स्ट्रीमिंग और चंकिंग देखें।
टिप्पणी लेन सक्षम होने पर, प्रस्तावनाएँ केवल उन्हीं बीच में रखी गई 💬 पंक्तियों के रूप में रेंडर होती हैं; नीचे दिया गया स्थिति शीर्षक रास्ते से हट जाता है ताकि लेन अपना दस्तावेज़ीकृत स्वरूप बनाए रखे।
स्थिति शीर्षक
प्रगति मोड में Discord और Telegram पर, मॉडल की टाइप की गई टूल-पूर्व प्रस्तावना उपलब्ध होने पर ड्राफ़्ट का स्थिति शीर्षक बन जाती है। अन्य प्रगति-मोड चैनल अपना मौजूदा स्थिति व्यवहार बनाए रखते हैं। शीर्षक डिफ़ॉल्ट रूप से चालू रहता है और छोटे टर्न के लिए सामान्य गतिविधि गेट को बायपास नहीं करता; streaming.progress.commentary सक्षम करने पर प्रस्तावनाएँ इसके बजाय बीच में रखी गई टिप्पणी लेन को सौंप दी जाती हैं।
Discord पर, जब एजेंट के लिए कोई उपयोगिता मॉडल निर्धारित होता है — एक स्पष्ट utilityModel, या प्राथमिक प्रदाता का घोषित छोटा-मॉडल डिफ़ॉल्ट (OpenAI → gpt-5.6-luna, Anthropic → claude-haiku-4-5) — तब मॉडल द्वारा कोई प्रस्तावना उत्सर्जित न करने या लगभग 20 सेकंड तक शांत रहने पर वह साधारण भाषा में एक छोटा पूरक प्रदान करता है (आज Telegram का शीर्षक केवल प्रस्तावना पर आधारित है):
आपके कॉन्फ़िग में डिफ़ॉल्ट मॉडल अपडेट किया जा रहा है, फिर उसे अपनाने के लिए Gateway पुनः आरंभ किया जा रहा है। एक एजेंट सूचीकरण कॉल विफल हुई और उसे फिर से आज़माया जा रहा है।उपयोगिता वर्णन डिफ़ॉल्ट रूप से चालू है (streaming.progress.narration, डिफ़ॉल्ट true) और कभी भी प्राथमिक मॉडल पर फ़ॉलबैक नहीं करता: यह केवल स्पष्ट utilityModel या एजेंट के प्राथमिक प्रदाता हेतु प्रदाता-घोषित डिफ़ॉल्ट के साथ चलता है। उपयोगिता रूटिंग को पूरी तरह अक्षम करने के लिए utilityModel: "" सेट करें। टूल पंक्तियाँ नीचे जमा होती रहती हैं और यदि दोनों स्थिति स्रोत रुक जाते हैं, तो फिर दिखाई देती हैं। ड्राफ़्ट संपादन अभी भी सामान्य गतिविधि गेट और वास्तविक टेक्स्ट परिवर्तन की प्रतीक्षा करते हैं, जिससे तेज़ टर्न पर चमक से बचाव होता है और व्यस्त चैनलों में संपादन की बारंबारता कम होती है। केवल उपयोगिता-मॉडल पूरक को अक्षम करने के लिए narration: false सेट करें; मॉडल प्रस्तावना शीर्षक सक्षम रहते हैं:
{ channels: { discord: { streaming: { mode: "progress", progress: { narration: false, }, }, }, },}वर्णन इनपुट सीमित और संपादित होता है: उपयोगिता मॉडल को आने वाले अनुरोध का टेक्स्ट और वही संक्षिप्त, संपादित टूल सारांश मिलते हैं जिन्हें ड्राफ़्ट रेंडर करेगा — कच्चा कमांड आउटपुट या टूल परिणाम कभी नहीं। commandText: "status" के साथ, वर्णन इनपुट एक्ज़ेक/Bash कमांड टेक्स्ट भी छोड़ देता है, जो ड्राफ़्ट में दिखाई देने वाली सामग्री से मेल खाता है।
पंक्ति सीमाएँ
दिखाई देने वाली पंक्तियों की संख्या सीमित करें (डिफ़ॉल्ट 8):
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLines: 4, }, }, }, },}ड्राफ़्ट संपादित होते समय चैट-बबल के पुनः प्रवाह को कम करने के लिए प्रगति पंक्तियाँ स्वचालित रूप से संक्षिप्त की जाती हैं, और OpenClaw लंबी पंक्तियों को काटता है ताकि बार-बार किए गए ड्राफ़्ट संपादन हर अपडेट पर अलग तरह से न लिपटें। प्रति-पंक्ति डिफ़ॉल्ट सीमा 120 वर्ण है; गद्य शब्द सीमा पर कटता है, जबकि पथ या कच्चे कमांड जैसे लंबे विवरण मध्य एलिप्सिस से छोटे किए जाते हैं ताकि प्रत्यय दिखाई देता रहे।
प्रति-पंक्ति सीमा समायोजित करें:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLineChars: 160, }, }, }, },}समृद्ध रेंडरिंग (Slack)
Slack प्रगति पंक्तियों को सादे टेक्स्ट के बजाय संरचित Block Kit फ़ील्ड के रूप में रेंडर कर सकता है:
{ channels: { slack: { streaming: { mode: "progress", progress: { render: "rich", }, }, }, },}समृद्ध रेंडरिंग हमेशा Block Kit फ़ील्ड के साथ वही सादा-टेक्स्ट मुख्य भाग भेजती है, इसलिए जो क्लाइंट अधिक समृद्ध संरचना रेंडर नहीं कर सकते वे भी संक्षिप्त प्रगति टेक्स्ट दिखाते हैं।
टूल/कार्य पंक्तियाँ छिपाएँ
एकल प्रगति ड्राफ़्ट बनाए रखें, लेकिन टूल और कार्य पंक्तियाँ छिपाएँ:
{ channels: { discord: { streaming: { mode: "progress", progress: { toolProgress: false, }, }, }, },}toolProgress: false के साथ, OpenClaw उस टर्न के लिए पुराने अलग-अलग
टूल-प्रगति संदेशों को अब भी रोकता है — अंतिम उत्तर आने तक चैनल दृश्य रूप से
शांत रहता है, सिवाय लेबल के, यदि कोई कॉन्फ़िगर किया गया हो।
चैनल का व्यवहार
| चैनल | प्रगति परिवहन | टिप्पणियाँ |
|---|---|---|
| Discord | एक संदेश भेजें, फिर उसे संपादित करें। | डिफ़ॉल्ट रूप से progress मोड होता है; अंतिम उत्तर में -# गतिविधि रसीद होती है और उत्तर पहुँचने के बाद स्थिति ड्राफ़्ट हटा दिया जाता है। |
| Matrix | एक इवेंट भेजें, फिर उसे संपादित करें। | खाता-स्तरीय स्ट्रीमिंग कॉन्फ़िगरेशन खाता-स्तरीय ड्राफ़्ट नियंत्रित करता है। |
| Microsoft Teams | निजी चैट में मूल Teams स्ट्रीम। | इसके बजाय streaming.mode: "block" को Teams ब्लॉक डिलीवरी से मैप किया जाता है। |
| Slack | मूल स्ट्रीम या संपादन योग्य ड्राफ़्ट पोस्ट। | उत्तर थ्रेड का लक्ष्य आवश्यक है; बिना लक्ष्य वाले शीर्ष-स्तरीय DM को अब भी ड्राफ़्ट पूर्वावलोकन पोस्ट और संपादन मिलते हैं। |
| Telegram | एक संदेश भेजें, फिर उसे संपादित करें। | यदि प्रगति ड्राफ़्ट और उत्तर के बीच कोई संदेश आ जाता है, तो क्लाइंट में स्क्रॉल उछालने के बजाय ड्राफ़्ट उसके नीचे दोबारा पोस्ट होता है (पहले नया पोस्ट करें, फिर पुराना हटाएँ)। |
| Mattermost | संपादन योग्य ड्राफ़्ट पोस्ट। | block मोड पूर्ण हुए टेक्स्ट और टूल-गतिविधि पोस्ट के बीच अदला-बदली करता है; अन्य मोड टूल गतिविधि को उसी ड्राफ़्ट-शैली की पोस्ट में समाहित करते हैं। |
सुरक्षित संपादन समर्थन के बिना चैनल टाइपिंग संकेतकों या केवल-अंतिम डिलीवरी का उपयोग करते हैं। प्रत्येक चैनल के पूर्ण रनटाइम-व्यवहार विवरण के लिए स्ट्रीमिंग और खंडन देखें।
अंतिम रूप देना
अंतिम उत्तर तैयार होने पर, OpenClaw चैट को साफ़ रखने का प्रयास करता है:
- Discord पर
progressमोड में, अंतिम उत्तर एक नए संदेश के रूप में भेजा जाता है, जिसके अंत में एक छोटी-#गतिविधि रसीद जोड़ी जाती है (उदाहरण के लिए-# 🧠 2 thoughts · 🛠️ 5 tool calls · ⏱️ 12s), और उस उत्तर की डिलीवरी होने के बाद स्थिति ड्राफ़्ट हटा दिया जाता है। व्यस्त चैनलों में उत्तर के ऊपर कोई अनाथ टूल लॉग नहीं रहता; त्रुटि वाले अंतिम उत्तर विफल टर्न के दृश्य रिकॉर्ड के रूप में ड्राफ़्ट को बनाए रखते हैं। - यदि ड्राफ़्ट सुरक्षित रूप से अंतिम उत्तर बन सकता है (
partial/blockमोड), तो OpenClaw उसे उसी स्थान पर संपादित करता है। - यदि चैनल मूल प्रगति स्ट्रीमिंग का उपयोग करता है, तो मूल परिवहन द्वारा अंतिम टेक्स्ट स्वीकार किए जाने पर OpenClaw उस स्ट्रीम को अंतिम रूप देता है।
- अन्यथा (मीडिया, अनुमोदन प्रॉम्प्ट, स्पष्ट उत्तर लक्ष्य, बहुत अधिक खंड, या विफल संपादन/भेजना) OpenClaw ड्राफ़्ट को अधिलेखित करने के बजाय सामान्य चैनल डिलीवरी पथ से अंतिम उत्तर भेजता है।
यह फ़ॉलबैक जानबूझकर रखा गया है: नया अंतिम उत्तर भेजना टेक्स्ट खोने, उत्तर को गलत थ्रेड में डालने, या ड्राफ़्ट को ऐसे पेलोड से अधिलेखित करने से बेहतर है जिसे चैनल सुरक्षित रूप से प्रस्तुत नहीं कर सकता।
समस्या निवारण
मुझे केवल अंतिम उत्तर दिखाई देता है।
जाँचें कि संदेश संभालने वाले खाते या चैनल के लिए channels.<channel>.streaming.mode
का मान progress है। कुछ समूह या उद्धरण-उत्तर पथ किसी टर्न के लिए
ड्राफ़्ट पूर्वावलोकन अक्षम कर देते हैं, जब चैनल सही संदेश को सुरक्षित रूप से
संपादित नहीं कर सकता।
मुझे लेबल दिखाई देता है, लेकिन टूल पंक्तियाँ नहीं।
streaming.progress.toolProgress जाँचें। यदि यह false है, तो OpenClaw
एकल ड्राफ़्ट का व्यवहार बनाए रखता है, लेकिन टूल और कार्य प्रगति पंक्तियाँ छिपाता है।
मुझे संपादित ड्राफ़्ट के बजाय एक नया अंतिम संदेश दिखाई देता है।
यह अंतिम रूप देना में वर्णित सुरक्षा फ़ॉलबैक है। यह मीडिया उत्तरों, लंबे उत्तरों, स्पष्ट उत्तर लक्ष्यों, पुराने Telegram ड्राफ़्ट, अनुपलब्ध Slack थ्रेड लक्ष्यों, हटाए गए पूर्वावलोकन संदेशों या विफल मूल स्ट्रीम अंतिमीकरण के कारण हो सकता है।
मुझे अब भी अलग-अलग प्रगति संदेश दिखाई देते हैं।
जब भी कोई ड्राफ़्ट सक्रिय होता है, प्रगति मोड डिफ़ॉल्ट अलग-अलग टूल-प्रगति संदेशों को
रोकता है। यदि अलग-अलग संदेश अब भी दिखाई देते हैं, तो पुष्टि करें कि टर्न
वास्तव में progress मोड का उपयोग कर रहा है, न कि streaming.mode: "off" या ऐसे चैनल
पथ का जो उस संदेश के लिए ड्राफ़्ट नहीं बना सकता।
Teams का व्यवहार Discord या Telegram से अलग है।
Microsoft Teams सामान्य भेजें-और-संपादित-करें पूर्वावलोकन परिवहन के बजाय निजी चैट में
मूल स्ट्रीम का उपयोग करता है, और streaming.mode: "block" को Teams
ब्लॉक डिलीवरी से मैप करता है, क्योंकि इसमें Discord और
Telegram जैसा ड्राफ़्ट-पूर्वावलोकन ब्लॉक मोड नहीं है।