openclaw doctor
Gateway, चैनलों, plugins, skills, मॉडल रूटिंग, स्थानीय स्थिति और कॉन्फ़िग माइग्रेशन के लिए स्वास्थ्य जाँच और त्वरित सुधार। जब भी कोई चीज़ अपेक्षा के अनुरूप काम न कर रही हो और आप चाहते हों कि एक कमांड बताए कि क्या गलत है, इसका उपयोग करें।
जब Gateway स्थिति अवनत SecretRef स्वामियों की रिपोर्ट करती है, तो doctor प्रत्येक कोल्ड या स्टेल स्वामी, प्रभावित कॉन्फ़िग पथ, संशोधित कारण और openclaw secrets reload पुनः प्रयास कमांड के साथ सीक्रेट रनटाइम अवनति चेतावनी दिखाता है।
जब चैनल इनग्रेस इवेंट डेड-लेटर किए जाते हैं, तो doctor प्रत्येक प्रभावित चैनल अकाउंट का नाम बताता है और जाँच तथा पुनर्प्राप्ति के लिए openclaw channels dead-letters list की ओर इंगित करता है।
संबंधित:
- समस्या निवारण: समस्या निवारण
- सुरक्षा ऑडिट: सुरक्षा
कार्यप्रणालियाँ
Doctor की पाँच कार्यप्रणालियाँ हैं:
जब ऑटोमेशन को स्थिर परिणाम चाहिए, तो
--lint को प्राथमिकता दें। जब कोई मानव ऑपरेटर चाहता हो कि doctor कॉन्फ़िग या स्थिति को संपादित करे, तो --fix को प्राथमिकता दें।
उदाहरण
doctor के बजाय चैनल प्रोब का उपयोग करें:
channels capabilities किसी विशिष्ट चैनल लक्ष्य के लिए बॉट की प्रभावी अनुमतियों की रिपोर्ट करता है। channels status --probe सभी कॉन्फ़िगर किए गए चैनलों और वॉइस ऑटो-जॉइन लक्ष्यों का ऑडिट करता है।
विकल्प
--severity-min, --all, --only, और --skip केवल --lint के साथ स्वीकार किए जाते हैं; --json को --lint, --post-upgrade, --state-sqlite, और --session-sqlite के साथ स्वीकार किया जाता है।
लिंट मोड
openclaw doctor --lint केवल-पढ़ने योग्य है: कोई प्रॉम्प्ट नहीं, कोई सुधार नहीं, कोई कॉन्फ़िग/स्थिति पुनर्लेखन नहीं।
--severity-min यह नियंत्रित करता है कि कौन-से निष्कर्ष दिखें और एग्ज़िट सीमा क्या हो: कम गंभीरता वाले info/warning निष्कर्ष मौजूद होने पर भी openclaw doctor --lint --severity-min error कुछ भी प्रदर्शित किए बिना 0 के साथ बाहर निकल सकता है।
--all यह नियंत्रित करता है कि गंभीरता फ़िल्टरिंग से पहले कौन-सी जाँच चुनी जाएँ। डिफ़ॉल्ट लिंट रन उन जाँचों को बाहर रखता है जो गहरी, ऐतिहासिक या सुधार योग्य पुराने अवशेष दिखाने की अधिक संभावना वाली हैं; पूरी सूची के लिए --all का उपयोग करें। --only <id> सबसे सटीक चयनकर्ता है और आईडी द्वारा किसी भी पंजीकृत जाँच को चला सकता है।
core/doctor/local-audio-acceleration किसी स्पीच मॉडल को लोड किए बिना स्वतः चयनित स्थानीय STT कमांड, सक्षम/अनुरोधित/देखे गए बैकएंड के अलग-अलग प्रमाण और फ़ॉलबैक क्रम की रिपोर्ट करता है। यह एक सूचनात्मक निष्कर्ष उत्सर्जित करता है, इसलिए इसे प्रदर्शित करने के लिए --severity-min info शामिल करें।
संरचित स्वास्थ्य जाँच
आधुनिक doctor जाँच एक छोटे विभाजित अनुबंध का उपयोग करती हैं:detect(), doctor --lint को संचालित करता है। repair() वैकल्पिक है और केवल doctor --fix / doctor --repair के अंतर्गत चलता है। जो जाँच अभी तक इस स्वरूप में माइग्रेट नहीं हुई हैं, वे अब भी पुराने doctor योगदान प्रवाह का उपयोग करती हैं।
मरम्मत संदर्भ dryRun/diff अनुरोध ले जा सकते हैं; मरम्मत परिणाम संरचित diffs (कॉन्फ़िगरेशन/फ़ाइल संपादन) और effects (सेवा, प्रक्रिया, पैकेज, स्थिति या अन्य दुष्प्रभाव) लौटा सकते हैं, ताकि परिवर्तित जाँचें म्यूटेशन योजना को detect() में स्थानांतरित किए बिना doctor --fix --dry-run की ओर बढ़ सकें।
repair(), status: "repaired" | "skipped" | "failed" की रिपोर्ट करता है (स्थिति न देने का अर्थ repaired है)। जब मरम्मत skipped या failed लौटाती है, तो Doctor कारण की रिपोर्ट करता है और उस जाँच का सत्यापन छोड़ देता है। सफल मरम्मत के बाद, Doctor मरम्मत किए गए निष्कर्षों के दायरे में detect() को फिर से चलाता है; यदि निष्कर्ष अब भी मौजूद है, तो Doctor परिवर्तन को पूर्ण मानने के बजाय मरम्मत चेतावनी की रिपोर्ट करता है।
एक निष्कर्ष में ये शामिल होते हैं:
आधुनिकीकरण की गई मुख्य Doctor जाँचें उस क्रमबद्ध Doctor योगदान से जुड़ी रहती हैं, जो उनके मानवीय
doctor / doctor --fix व्यवहार का स्वामी है। साझा संरचित स्वास्थ्य रजिस्ट्री विस्तार बिंदु है: बंडल की गई और Plugin-समर्थित जाँचें मुख्य Doctor जाँचों के बाद चलती हैं, जब उनका स्वामी पैकेज उन्हें सक्रिय कमांड पथ में पंजीकृत कर देता है। openclaw/plugin-sdk/health, Plugin लेखकों के लिए यही अनुबंध उपलब्ध कराता है।
जाँच चयन
--only और --skip पूर्ण जाँच आईडी स्वीकार करते हैं और उन्हें दोहराया जा सकता है। यदि कोई --only आईडी पंजीकृत नहीं है, तो उस आईडी के लिए कोई जाँच नहीं चलती; यह पुष्टि करने के लिए कि केंद्रित गेट आपकी अपेक्षित जाँचें चुनता है, आउटपुट में checksRun/checksSkipped का उपयोग करें।
अपग्रेड-पश्चात मोड
openclaw doctor --post-upgrade, बिल्ड या अपग्रेड के बाद श्रृंखलाबद्ध रूप से चलाने के लिए Plugin संगतता परीक्षण चलाता है। निष्कर्ष stdout पर जाते हैं; यदि किसी निष्कर्ष में level: "error" है, तो निकास कोड 1 होता है। मशीन-पठनीय आवरण ({ probesRun, findings }) के लिए --json जोड़ें, जो CI, सामुदायिक fork-upgrade Skill और अन्य अपग्रेड-पश्चात स्मोक टूलिंग के लिए उपयुक्त है। यदि स्थापित Plugin इंडेक्स अनुपस्थित या विकृत है, तो भी JSON मोड plugin.index_unavailable त्रुटि निष्कर्ष के साथ आवरण उत्सर्जित करता है।
कंटेनर इमेज स्टार्टअप सामान्य “अपडेट करने के बाद Doctor चलाएँ”
प्रवाह का अपवाद है। जब openclaw gateway run किसी नए OpenClaw संस्करण पर शुरू होता है, तो यह
तैयार होने की रिपोर्ट करने से पहले सुरक्षित स्थिति और Plugin मरम्मत चलाता है। यदि मरम्मत
सुरक्षित रूप से पूरी नहीं हो सकती, तो स्टार्टअप बंद हो जाता है और आपको कंटेनर को
सामान्य रूप से पुनः आरंभ करने से पहले उसी माउंट की गई स्थिति/कॉन्फ़िगरेशन के विरुद्ध
openclaw doctor --fix के साथ उसी इमेज को एक बार चलाने के लिए कहता है।
विरासती स्थिति माइग्रेशन
openclaw doctor --fix स्थायी फ़ाइल-से-SQLite माइग्रेशन का एकमात्र स्वामी है। यह प्रत्येक पहचाने गए स्रोत को सत्यापित करके उस पर दावा करता है, कैनोनिकल पंक्तियाँ लिखता और सत्यापित करता है, माइग्रेशन रसीद दर्ज करता है, फिर सेवानिवृत्त स्रोत हटा देता है। रनटाइम कोड लेज़ी इम्पोर्ट या फ़ॉलबैक रीड नहीं करता।
इसमें <state-dir>/mcp-oauth/*.json के अंतर्गत सेवानिवृत्त MCP OAuth फ़ाइलें शामिल हैं। मरम्मत से पहले Gateway रोकें। Doctor मान्य क्रेडेंशियल को <state-dir>/state/openclaw.sqlite में इम्पोर्ट करता है, दोनों स्टोर मौजूद होने पर मौजूदा कैनोनिकल SQLite सत्र बनाए रखता है, अप्रचलित स्थायी OAuth state मान हटाता है, और पुनः बनाई गई पुरानी फ़ाइल को लॉग-आउट किए गए क्रेडेंशियल पुनर्जीवित करने से रोकने के लिए अपनी रसीद का उपयोग करता है। सेवानिवृत्त .lock साइडकार विफलता पर बंद हो जाते हैं: यदि Doctor किसी पुराने स्वामी की रिपोर्ट करता है, तो सत्यापित करें कि कोई पुरानी OpenClaw प्रक्रिया नहीं चल रही है, वह साइडकार हटाएँ और Doctor फिर से चलाएँ।
साझा स्थिति SQLite Compaction
स्कीमा संस्करण निर्धारण, अखंडता जाँच और डाउनग्रेड पुनर्प्राप्ति के लिए डेटाबेस स्कीमा देखें।openclaw doctor --state-sqlite compact,
<state-dir>/state/openclaw.sqlite पर स्थित कैनोनिकल साझा स्थिति डेटाबेस के लिए स्पष्ट ऑफ़लाइन रखरखाव है।
यह कोई मनमाना डेटाबेस पथ स्वीकार नहीं करता, सामान्य Gateway संचालन द्वारा कभी लागू नहीं किया जाता,
और openclaw doctor --fix का भाग नहीं है। कमांड Gateway स्टार्टअप वाला समान स्थिति स्वामित्व लॉक
प्राप्त करता है और सत्यापन, चेकपॉइंटिंग, VACUUM तथा अंतिम अखंडता जाँचों तक उसे
बनाए रखता है। जब कोई Gateway या अन्य SQLite रखरखाव कमांड उस लॉक का स्वामी होता है, तो यह
चलने से मना कर देता है। जब OPENCLAW_ALLOW_MULTI_GATEWAY=1 प्रति-कॉन्फ़िगरेशन Gateway सिंगलटन को छोड़ता है,
तब भी स्थिति लॉक सक्रिय रहता है, इसलिए रखरखाव द्वारा उसका पता लगाने के लिए ऑपरेटर शेल को
Gateway सेवा का परिवेश इनहेरिट करने की आवश्यकता नहीं होती।
पहले Gateway रोकें और सत्यापित बैकअप बनाएँ:
- कैनोनिकल साझा-स्थिति पथ पर एक नियमित फ़ाइल आवश्यक है। अनुपस्थित
डेटाबेस को
skippedके रूप में रिपोर्ट किया जाता है और कमांड सफलतापूर्वक समाप्त होता है। - चेकपॉइंटिंग या फ़ाइल बदलने से पहले वर्तमान समर्थित स्कीमा संस्करण और
schema_meta.role = "global"को सत्यापित करता है। - एक गैर-व्यस्त
wal_checkpoint(TRUNCATE)आवश्यक है। यदि चेकपॉइंट व्यस्त है, तो शेष सभी OpenClaw प्रक्रियाएँ रोकें और पुनः प्रयास करें। auto_vacuumकोINCREMENTALपर सेट करता है, पूर्णVACUUMचलाता है और फिर से चेकपॉइंट करता है।quick_check,integrity_checkऔरforeign_key_checkचलाता है, फिर डेटाबेस और SQLite साइडकार फ़ाइलों पर केवल-स्वामी अनुमतियाँ पुनः लागू करता है।
auto_vacuum मान के साथ पुनः प्राप्त बाइट तथा quick_check और
integrity_check परिणामों की रिपोर्ट करता है। foreign_key_check को विफलता पर बंद होने के
नियम के साथ लागू किया जाता है और इसका कोई अलग सफलता फ़ील्ड नहीं है। SQLite, auto_vacuum को
कोई नहीं के लिए 0, पूर्ण के लिए 1 और वृद्धिशील के लिए 2 के रूप में रिपोर्ट करता है।
जब स्कीमा पुराना हो, चल रहे OpenClaw बिल्ड से नया हो या किसी एजेंट डेटाबेस का हो, तो
Compaction बिना म्यूटेशन के विफल हो जाता है। पुराने साझा-स्थिति स्कीमा के लिए पहले
openclaw doctor --fix चलाएँ। नए स्कीमा के लिए संगत बैकअप पुनर्स्थापित करें या OpenClaw अपग्रेड करें।
सत्र SQLite माइग्रेशन
OpenClaw, Gateway स्टार्टअप के दौरान औरopenclaw doctor --fix के दौरान विरासती सत्र पंक्तियों
और ट्रांसक्रिप्ट इतिहास को प्रत्येक एजेंट के SQLite डेटाबेस में स्वचालित रूप से इम्पोर्ट करता है।
openclaw doctor --session-sqlite <mode> उस माइग्रेशन के लिए लक्षित निरीक्षण और सत्यापन टूल है। वर्तमान रनटाइम
सत्र पंक्तियाँ ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite में रहती हैं। विरासती
sessions.json फ़ाइलें माइग्रेशन स्रोत हैं। सक्रिय ट्रांसक्रिप्ट JSONL फ़ाइलों को
इम्पोर्ट करके सफल इम्पोर्ट के बाद सक्रिय सत्र निर्देशिका से बाहर अभिलेखित किया जाता है;
अभिलेख-स्तरीय JSONL फ़ाइलें सहायक आर्टिफ़ैक्ट रहती हैं, रनटाइम फ़ॉलबैक नहीं।
मोड:
चयनकर्ता:
- डिफ़ॉल्ट: कॉन्फ़िगर किया गया डिफ़ॉल्ट एजेंट स्टोर, जब वह विरासती स्टोर फ़ाइल मौजूद हो।
--session-sqlite-agent <id>: एक कॉन्फ़िगर किया गया एजेंट।--session-sqlite-all-agents: कॉन्फ़िगर किए गए एजेंट स्टोर और खोजे गए एजेंट स्टोर।--session-sqlite-store <path>: एक स्पष्ट विरासतीsessions.jsonपथ।
import चलाने से पहले OpenClaw स्थिति निर्देशिका का बैकअप लें।
जब कोई चुनी गई विरासती प्रविष्टि SQLite में अनुपस्थित होती है, कोई सत्र आईडी भिन्न होती है या
ट्रांसक्रिप्ट घटना संख्या भिन्न होती है, तो validate गैर-शून्य मान के साथ समाप्त होता है।
--session-sqlite-store <path> का उपयोग करते समय जाँचें कि रिपोर्ट में अपेक्षित लक्ष्य संख्या मौजूद है;
कोई अस्तित्वहीन स्पष्ट स्टोर पथ किसी लक्ष्य का चयन नहीं करता।
SQLite विलोपन पहले डेटाबेस के भीतर पृष्ठ पुनः प्राप्त करते हैं; वे आवश्यक रूप से
डेटाबेस फ़ाइल को तुरंत छोटा नहीं करते। बड़े ट्रांसक्रिप्ट हटाने या अभिलेखित करने के बाद,
WAL फ़ाइलों को चेकपॉइंट करने, VACUUM चलाने और डेटाबेस तथा WAL के पहले/बाद के
आकार रिपोर्ट करने के लिए openclaw doctor --session-sqlite compact --session-sqlite-all-agents चलाएँ। Compaction के लिए वर्तमान एजेंट स्कीमा वाली
एक नियमित फ़ाइल, चुने गए एजेंट का स्थायी स्वामी मेटाडेटा और Doctor प्रक्रिया में कोई खुला
हैंडल न होना आवश्यक है। विनाशकारी import, compact, recover और
restore मोड अपने पूरे संचालन के दौरान Gateway स्टार्टअप वाला समान स्थिति स्वामित्व लॉक
बनाए रखते हैं; inspect, dry-run और validate केवल-पठन रहते हैं और
उसे प्राप्त नहीं करते। पहले Gateway रोकें। विनाशकारी मोड सक्रिय लेखनों या किसी अन्य रखरखाव
कमांड के साथ प्रतिस्पर्धा करने के बजाय विफल हो जाते हैं। विनाशकारी --session-sqlite-store
लक्ष्य सक्रिय स्थिति निर्देशिका के भीतर होना चाहिए; किसी अन्य स्थापना का रखरखाव करने से पहले
OPENCLAW_STATE_DIR को स्टोर की स्वामी स्थिति निर्देशिका पर सेट करें। मौजूदा हार्ड-लिंक किए गए
लक्ष्य अस्वीकार कर दिए जाते हैं, क्योंकि कोई अन्य पथ लॉक की गई स्थिति निर्देशिका से बाहर
उसी डेटाबेस inode को साझा कर सकता है। यही स्वामित्व जाँचें SQLite WAL, साझा-मेमोरी और
रोलबैक-जर्नल साइडकार को भी कवर करती हैं।
प्रत्येक इम्पोर्ट ट्रांसक्रिप्ट आर्टिफ़ैक्ट को अभिलेख में ले जाने से पहले
~/.openclaw/session-sqlite-migration-runs/ के अंतर्गत एक मेनिफ़ेस्ट लिखता है।
यदि आर्टिफ़ैक्ट स्थानांतरित होने के बाद स्टार्टअप किसी विफल सत्र SQLite माइग्रेशन की रिपोर्ट करता है,
तो पुनर्प्राप्ति चलाएँ:
.failure.md और .failure.json रिपोर्टों को रीफ़्रेश करती है, और GitHub इश्यू
बॉडी तैयार करती है जिसमें ट्रांसक्रिप्ट की सामग्री, अपरिष्कृत एनवायरनमेंट, सीक्रेट और असीमित
कॉन्फ़िग शामिल नहीं होते। जब कोई विफल माइग्रेशन मैनिफ़ेस्ट मौजूद नहीं होता, लेकिन चयनित एजेंट SQLite
डेटाबेस दूषित होता है, डेटाबेस नहीं होता, या उसमें मुख्य
डेटाबेस के बिना जर्नल साइडकार होते हैं, तो पुनर्प्राप्ति संपूर्ण फ़ाइल सेट को एक अस्थायी निरीक्षण
डायरेक्टरी में कॉपी करती है। SQLite उस अस्थायी कॉपी में मान्य हॉट जर्नल को
quick_check, integrity_check, और foreign_key_check के चलने से पहले रोल बैक कर सकता है, जबकि
मूल फ़ॉरेंसिक फ़ाइलें अपरिवर्तित रहती हैं। विफल अखंडता जाँच या अनाथ
साइडकार, खोजे गए पूरे सेट का नाम एक .corrupt-<timestamp> प्रत्यय के साथ बदलकर
DB, WAL, SHM, और रोलबैक-जर्नल फ़ाइलों को संरक्षित रखते हैं। पकड़ी गई नाम-बदलने की
विफलता, विफलता की रिपोर्ट करने से पहले पहले से स्थानांतरित फ़ाइलों को वापस ले जाती है, ताकि
पुनर्प्राप्त किए जा सकने वाले फ़ाइल सेट को चुपचाप विभाजित न किया जाए। पुनर्प्राप्ति से पहले Gateway बंद करें;
सक्रिय रूप से बदल रहे SQLite फ़ाइल सेट को कॉपी करना या उसका नाम बदलना असुरक्षित है और अलग-अलग
ऑपरेटिंग सिस्टम पर अलग तरह से व्यवहार करता है। --github-issue --yes के साथ, doctor
GitHub CLI का उपयोग करके openclaw/openclaw में इश्यू बनाता है; पुष्टि के बिना
यह स्थानीय सहायता रिपोर्ट लिखता है और पहले से भरा हुआ इश्यू URL प्रिंट करता है।
restore निम्न-स्तरीय पूर्ववत कार्रवाई बनी रहती है। यह मैनिफ़ेस्ट के
sourcePath -> archivePath रिकॉर्ड का उपयोग करती है, संग्रहीत कलाकृतियों को केवल तभी वापस ले जाती है जब
मूल पथ मौजूद न हो, दोनों पथ मौजूद होने पर टकराव की रिपोर्ट करती है, और
SQLite डेटाबेस को उसी स्थान पर छोड़ देती है।
सत्र SQLite माइग्रेशन के बाद डाउनग्रेड करना
फ़ाइल-समर्थित OpenClaw के किसी पुराने संस्करण को शुरू करने से पहले, संग्रहीत पुरानी ट्रांसक्रिप्ट कलाकृतियों को पुनर्स्थापित करें:sessions.json प्रविष्टियाँ और sessionFile पथ पढ़ते
हैं। SQLite माइग्रेशन के बाद, सफल आयात सक्रिय JSONL
ट्रांसक्रिप्ट को session-sqlite-import-archive/ में स्थानांतरित कर देते हैं, इसलिए पुराना रनटाइम
उस इतिहास को तब तक नहीं देख सकता जब तक पुनर्स्थापना उन मैनिफ़ेस्ट-दर्ज कलाकृतियों को
उनके मूल पथों पर वापस नहीं ले जाती।
पुनर्स्थापना SQLite डेटा को नहीं मिटाती। SQLite पर स्विच होने के बाद बनाए गए सत्र
केवल SQLite में मौजूद होते हैं और पुराने रनटाइम में दिखाई नहीं देंगे। यदि आप बाद में
फिर से अपग्रेड करते हैं, तो ऊपर दिया गया सामान्य माइग्रेशन सत्यापन क्रम चलाएँ, ताकि OpenClaw
आयात करने से पहले पुनर्स्थापित पुरानी कलाकृतियों की SQLite पंक्तियों से तुलना कर सके।
टिप्पणियाँ
- Nix मोड (
OPENCLAW_NIX_MODE=1) में, केवल-पढ़ने योग्य doctor जाँचें अब भी काम करती हैं, लेकिनdoctor --fix,doctor --repair,doctor --yes, औरdoctor --generate-gateway-tokenअक्षम रहते हैं क्योंकिopenclaw.jsonअपरिवर्तनीय है। इसके बजाय इस इंस्टॉलेशन के लिए Nix स्रोत संपादित करें; nix-openclaw के लिए, एजेंट-प्रथम त्वरित शुरुआत का उपयोग करें। - इंटरैक्टिव प्रॉम्प्ट (कीचेन/OAuth सुधार आदि) केवल तभी चलते हैं जब stdin एक TTY हो और
--non-interactiveसेट न हो। हेडलेस रन (Cron, Telegram, कोई टर्मिनल नहीं) प्रॉम्प्ट छोड़ देते हैं। - गैर-इंटरैक्टिव
doctorरन अग्रिम Plugin लोडिंग छोड़ देते हैं, ताकि हेडलेस स्वास्थ्य जाँचें तेज़ बनी रहें। इंटरैक्टिव सत्र अब भी पुराने स्वास्थ्य/मरम्मत प्रवाह के लिए आवश्यक Plugin सतहें लोड करते हैं। --lint,--non-interactiveसे अधिक सख्त है: हमेशा केवल-पढ़ने योग्य, कभी प्रॉम्प्ट नहीं करता और कभी सुरक्षित माइग्रेशन लागू नहीं करता। जब आप चाहते हों कि doctor बदलाव करे, तोdoctor --fixयाdoctor --repairका उपयोग करें।- डिफ़ॉल्ट रूप से सीक्रेट जाँचते समय doctor
execSecretRefs निष्पादित नहीं करता। केवल तभी--allow-execका उपयोग करें (--lintके साथ या उसके बिना), जब आप जानबूझकर चाहते हों कि doctor उन कॉन्फ़िगर किए गए सीक्रेट रिज़ॉल्वर को चलाए। - कोई भी कॉन्फ़िगरेशन लेखन (
--fixमरम्मत सहित) बैकअप को~/.openclaw/openclaw.json.bakमें घुमाता है (क्रमांकित.bak.1...bak.4रिंग के साथ)।--fixस्कीमा सत्यापन द्वारा रिपोर्ट की गई अज्ञात कॉन्फ़िगरेशन कुंजियाँ भी हटाता है और प्रत्येक हटाव सूचीबद्ध करता है; अपडेट जारी रहने के दौरान यह इसे छोड़ देता है, ताकि आंशिक रूप से लिखी गई अपग्रेड स्थिति का माइग्रेशन पूरा होने से पहले उसे हटाया न जाए। - यदि
openclaw.jsonको पार्स नहीं किया जा सकता और अंतिम ज्ञात-सही कॉन्फ़िगरेशन पुनर्प्राप्त नहीं हो सकता, तोdoctor --fixमूल कोopenclaw.json.clobbered.<timestamp>के रूप में सुरक्षित रखता है, वर्तमान फ़ाइल को अपरिवर्तित छोड़ता है और आंशिक प्रतिस्थापन लिखने के बजाय त्रुटि के साथ बाहर निकलता है। - जब कोई अन्य पर्यवेक्षक Gateway जीवनचक्र का स्वामी हो, तब
OPENCLAW_SERVICE_REPAIR_POLICY=externalसेट करें। Doctor अब भी Gateway/सेवा स्वास्थ्य की रिपोर्ट करता है और गैर-सेवा मरम्मत लागू करता है, लेकिन सेवा इंस्टॉल/शुरू/पुनः आरंभ/बूटस्ट्रैप और पुरानी सेवा सफ़ाई छोड़ देता है। - Doctor प्रबंधित Gateway की लागू हीप सीमा और वर्तमान होस्ट या कंटेनर मेमोरी सीमा के लिए उपयोग की गई अनुकूली व्युत्पत्ति की रिपोर्ट करता है। मरम्मत पास के बाहर यही रिपोर्ट पाने के लिए
openclaw gateway statusका उपयोग करें। - Linux पर, doctor निष्क्रिय अतिरिक्त Gateway-जैसी systemd इकाइयों को अनदेखा करता है और मरम्मत के दौरान चल रही systemd Gateway सेवा के कमांड/एंट्रीपॉइंट मेटाडेटा को दोबारा नहीं लिखता। पहले सेवा रोकें, या सक्रिय लॉन्चर को बदलने के लिए
openclaw gateway install --forceका उपयोग करें। doctor --fix --non-interactiveअनुपलब्ध या पुराने Gateway सेवा-परिभाषाओं की रिपोर्ट करता है, लेकिन अपडेट मरम्मत मोड के बाहर उन्हें इंस्टॉल या दोबारा नहीं लिखता। अनुपलब्ध सेवा के लिएopenclaw gateway install, या लॉन्चर बदलने के लिएopenclaw gateway install --forceचलाएँ।- स्थिति-अखंडता जाँचें सत्र निर्देशिका में अनाथ ट्रांसक्रिप्ट फ़ाइलों का पता लगाती हैं। उन्हें
.deleted.<timestamp>के रूप में संग्रहित करने के लिए इंटरैक्टिव पुष्टि आवश्यक है;--fix,--yes, और हेडलेस रन उन्हें वहीं छोड़ देते हैं। - Doctor पुराने Cron जॉब आकारों के लिए
~/.openclaw/cron/jobs.json(याcron.store) को स्कैन करता है और SQLite में कैनोनिकल पंक्तियाँ आयात करने से पहले उन्हें दोबारा लिखता है। - Doctor स्पष्ट
payload.modelओवरराइड वाले Cron जॉब की रिपोर्ट करता है, जिसमें प्रदाता-नेमस्पेस गणनाएँ औरagents.defaults.modelके साथ असंगतियाँ शामिल हैं, ताकि डिफ़ॉल्ट मॉडल इनहेरिट न करने वाले शेड्यूल किए गए जॉब प्रमाणीकरण या बिलिंग जाँच के दौरान दिखाई दें। - Doctor उन Cron जॉब की रिपोर्ट करता है जिन्हें अब भी प्रगति में (
state.runningAtMs) चिह्नित किया गया है, जिससेopenclaw cron listउन्हेंrunningके रूप में दिखा सकता है। यह जाँच केवल-पढ़ने योग्य है: यदि कोई Gateway वर्तमान में किसी चिह्नित जॉब को निष्पादित नहीं कर रहा है, तो अगला Cron सेवा स्टार्टअप बाधित रन दर्ज करता है और चिह्न साफ़ कर देता है। - Linux पर, जब उपयोगकर्ता का crontab अब भी अनुरक्षण-रहित पुराने
~/.openclaw/bin/ensure-whatsapp.shको चलाता है, तब doctor चेतावनी देता है, क्योंकि Cron के पास systemd उपयोगकर्ता-बस परिवेश न होने पर यहGateway inactiveकी ग़लत रिपोर्ट कर सकता है। - WhatsApp सक्षम होने पर, doctor स्थानीय
openclaw-tuiक्लाइंट के अब भी चलते रहने के साथ अवनत Gateway इवेंट लूप की जाँच करता है।doctor --fixकेवल सत्यापित स्थानीय TUI क्लाइंट रोकता है, ताकि WhatsApp उत्तर पुराने TUI रीफ़्रेश लूप के पीछे कतारबद्ध न हों। - जब HTTP(S) प्रॉक्सी परिवेश चर मौजूद हों लेकिन
tools.web.fetch.useTrustedEnvProxyअक्षम हो, तब doctor समझाता है किweb_fetchअब भी प्रत्यक्ष रूटिंग का उपयोग करता है, एक छोटी प्रत्यक्ष TLS कनेक्टिविटी जाँच चलाता है और स्पष्ट ऑप्ट-इन का नाम बताता है। यह कभी भी प्रॉक्सी विश्वास अपने-आप सक्षम नहीं करता। - Doctor प्राथमिक मॉडल, फ़ॉलबैक, मॉडल अनुमतिसूचियों, छवि/वीडियो जनरेशन मॉडल, Heartbeat/सबएजेंट/Compaction ओवरराइड, हुक, चैनल मॉडल ओवरराइड, Cron पेलोड और पुराने सत्र/ट्रांसक्रिप्ट रूट पिन में पुराने
codex/*औरopenai-codex/*मॉडल संदर्भों को कैनोनिकलopenai/*संदर्भों में दोबारा लिखता है। सुरक्षित होने पर--fixपुरानेmodels.providers.codexऔरmodels.providers.openai-codexकॉन्फ़िगरेशन को भी मर्ज करता है, पुरानेopenai-codex:*प्रमाणीकरण प्रोफ़ाइल औरauth.order.openai-codexप्रविष्टियों कोopenai:*में माइग्रेट करता है, Codex अभिप्राय को प्रदाता/मॉडल-स्कोप वालेagentRuntime.id: "codex"प्रविष्टियों पर ले जाता है, पुराने पूरे-एजेंट/सत्र रनटाइम पिन हटाता है और सुधारे गए OpenAI एजेंट संदर्भों को प्रत्यक्ष OpenAI API-कुंजी प्रमाणीकरण के बजाय Codex प्रमाणीकरण रूटिंग पर रखता है। - Doctor उन गैर-रिक्त
auth.order.<provider>सूचियों की रिपोर्ट करता है जिनकी संदर्भित सभी प्रोफ़ाइल हट चुकी हैं, जबकि संगत संग्रहीत क्रेडेंशियल मौजूद हैं।doctor --fixकेवल उन पुराने ओवरराइड को हटाता है और स्वचालित प्रति-एजेंट क्रेडेंशियल चयन पुनर्स्थापित करता है; स्पष्ट रिक्त क्रम, आंशिक रूप से सक्रिय सूचियाँ और संगत संग्रहीत क्रेडेंशियल के बिना क्रम अपरिवर्तित रहते हैं। यदि सक्रिय SQLite प्रमाणीकरण स्टोर अपठनीय या विकृत है, तो doctor समझाता है कि उसने यह मरम्मत क्यों छोड़ी। यदि चल रहे Gateway का कॉन्फ़िगरेशन पुनः लोड मोड लेखन को अपने-आप लागू नहीं करता, तो प्रमाणीकरण स्थिति दोबारा जाँचने से पहले Gateway को पुनः आरंभ करें। - Doctor पुराने OpenClaw संस्करणों की पुरानी Plugin निर्भरता स्टेजिंग स्थिति साफ़ करता है और उसे पीयर निर्भरता घोषित करने वाले प्रबंधित npm Plugins के लिए होस्ट
openclawपैकेज को दोबारा लिंक करता है। यह कॉन्फ़िगरेशन द्वारा संदर्भित अनुपलब्ध डाउनलोड-योग्य Plugins (plugins.entries, कॉन्फ़िगर किए गए चैनल, कॉन्फ़िगर की गई प्रदाता/खोज सेटिंग्स, कॉन्फ़िगर किए गए एजेंट रनटाइम) की भी मरम्मत करता है। पैकेज अपडेट के दौरान, पैकेज अदला-बदली पूरी होने तक doctor पैकेज-मैनेजर Plugin मरम्मत छोड़ देता है; यदि किसी कॉन्फ़िगर किए गए Plugin को अब भी पुनर्प्राप्ति चाहिए, तो बाद मेंopenclaw doctor --fixदोबारा चलाएँ। यदि डाउनलोड विफल होता है, तो doctor इंस्टॉलेशन त्रुटि रिपोर्ट करता है और अगली मरम्मत कोशिश के लिए कॉन्फ़िगर की गई Plugin प्रविष्टि सुरक्षित रखता है। - Plugin खोज स्वस्थ होने पर, doctor
plugins.allow/plugins.deny/plugins.entriesसे अनुपलब्ध Plugin आईडी हटाकर, साथ ही उनसे मेल खाने वाले लटकते चैनल कॉन्फ़िगरेशन, Heartbeat लक्ष्य और चैनल मॉडल ओवरराइड हटाकर पुराने Plugin कॉन्फ़िगरेशन की मरम्मत करता है। - Doctor प्रभावित
plugins.entries.<id>प्रविष्टि को अक्षम करके और उसका अमान्यconfigपेलोड हटाकर अमान्य Plugin कॉन्फ़िगरेशन को क्वारंटीन करता है। Gateway स्टार्टअप पहले से केवल उस ख़राब Plugin को छोड़ता है, इसलिए अन्य Plugins और चैनल चलते रहते हैं। - Doctor सेवानिवृत्त
plugins.entries.codex.config.codexDynamicToolsProfileको हटाता है; Codex ऐप-सर्वर हमेशा Codex-मूल वर्कस्पेस टूल को मूल ही रखता है। - Doctor पुराने समतल Talk कॉन्फ़िगरेशन (
talk.voiceId,talk.modelId, और संबंधित प्रविष्टियों) कोtalk.provider+talk.providers.<provider>में अपने-आप माइग्रेट करता है। जब केवल ऑब्जेक्ट कुंजियों के क्रम का अंतर हो, तब बार-बारdoctor --fixचलाने पर Talk सामान्यीकरण की रिपोर्ट या उसे लागू नहीं किया जाता। - Doctor में मेमोरी-खोज तत्परता जाँच शामिल है और एम्बेडिंग क्रेडेंशियल अनुपलब्ध होने पर यह
openclaw configure --section modelकी अनुशंसा कर सकता है। - कोई कमांड स्वामी कॉन्फ़िगर न होने पर doctor चेतावनी देता है। कमांड स्वामी वह मानव ऑपरेटर खाता है जिसे केवल-स्वामी कमांड चलाने और ख़तरनाक कार्रवाइयों को स्वीकृत करने की अनुमति है। DM पेयरिंग केवल किसी व्यक्ति को बॉट से बात करने देती है; यदि आपने प्रथम-स्वामी बूटस्ट्रैप के अस्तित्व में आने से पहले किसी प्रेषक को स्वीकृत किया था, तो
commands.ownerAllowFromस्पष्ट रूप से सेट करें। - Codex-मोड एजेंट कॉन्फ़िगर होने और ऑपरेटर के Codex होम में व्यक्तिगत Codex CLI एसेट मौजूद होने पर doctor एक सूचना नोट रिपोर्ट करता है। स्थानीय Codex ऐप-सर्वर लॉन्च पृथक प्रति-एजेंट होम का उपयोग करते हैं; आवश्यकता होने पर पहले Codex Plugin इंस्टॉल करें, फिर उन एसेट की सूची बनाने के लिए
openclaw migrate plan codexका उपयोग करें जिन्हें जानबूझकर प्रोमोट किया जाना चाहिए। - डिफ़ॉल्ट एजेंट के लिए अनुमत Skills वर्तमान रनटाइम परिवेश में अनुपलब्ध होने पर doctor चेतावनी देता है (अनुपलब्ध बाइनरी, परिवेश चर, कॉन्फ़िगरेशन या OS आवश्यकताएँ)।
doctor --fix,skills.entries.<skill>.enabled=falseके साथ उन अनुपलब्ध Skills को अक्षम कर सकता है; यदि आप Skill को सक्रिय रखना चाहते हैं, तो इसके बजाय अनुपलब्ध आवश्यकता को इंस्टॉल/कॉन्फ़िगर करें। - यदि सैंडबॉक्स मोड सक्षम है लेकिन Docker अनुपलब्ध है, तो doctor सुधार उपाय (
install Dockerयाopenclaw config set agents.defaults.sandbox.mode off) के साथ उच्च-संकेत चेतावनी रिपोर्ट करता है। - यदि पुराने सैंडबॉक्स रजिस्ट्री फ़ाइलें या शार्ड निर्देशिकाएँ मौजूद हैं (
~/.openclaw/sandbox/containers.json,~/.openclaw/sandbox/browsers.json,~/.openclaw/sandbox/containers/, या~/.openclaw/sandbox/browsers/), तो doctor उनकी रिपोर्ट करता है;--fixमान्य प्रविष्टियों को SQLite में माइग्रेट करता है और अमान्य पुरानी फ़ाइलों को क्वारंटीन करता है। - यदि
gateway.auth.token/gateway.auth.passwordSecretRef-प्रबंधित हैं और वर्तमान कमांड पथ में अनुपलब्ध हैं, तो doctor केवल-पढ़ने योग्य चेतावनी रिपोर्ट करता है और प्लेनटेक्स्ट फ़ॉलबैक क्रेडेंशियल नहीं लिखता। exec-समर्थित SecretRefs के लिए,--allow-execमौजूद न होने पर doctor निष्पादन छोड़ देता है। - यदि सुधार पथ में चैनल SecretRef निरीक्षण विफल होता है, तो doctor जल्दी बाहर निकलने के बजाय जारी रहता है और चेतावनी रिपोर्ट करता है।
- स्थिति-निर्देशिका माइग्रेशन के बाद, जब सक्षम डिफ़ॉल्ट Telegram या Discord खाते परिवेश फ़ॉलबैक पर निर्भर हों और
TELEGRAM_BOT_TOKENयाDISCORD_BOT_TOKENdoctor प्रक्रिया के लिए अनुपलब्ध हो, तब doctor चेतावनी देता है। - Telegram
allowFromउपयोगकर्ता नाम के स्वचालित रिज़ॉल्यूशन (doctor --fix) के लिए वर्तमान कमांड पथ में रिज़ॉल्व किया जा सकने वाला Telegram टोकन आवश्यक है। यदि टोकन निरीक्षण अनुपलब्ध है, तो doctor चेतावनी रिपोर्ट करता है और उस पास के लिए स्वचालित रिज़ॉल्यूशन छोड़ देता है।
macOS: launchctl परिवेश ओवरराइड
यदि आपने पहले launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (या ...PASSWORD) चलाया था, तो वह मान आपकी कॉन्फ़िगरेशन फ़ाइल को ओवरराइड करता है और लगातार “अनधिकृत” त्रुटियाँ उत्पन्न कर सकता है।