openclaw doctor هو أداة الإصلاح + الترحيل في OpenClaw. تصلح الإعدادات/الحالة القديمة، وتتحقق من السلامة، وتوفر خطوات إصلاح قابلة للتنفيذ.
البدء السريع
أوضاع التشغيل دون واجهة وأوضاع الأتمتة
- --yes
- --fix
- --lint
- --fix --force
- --non-interactive
- --deep
وضع الفحص للقراءة فقط
openclaw doctor --lint هو النظير الملائم للأتمتة لـ
openclaw doctor --fix. يستخدم كلاهما فحوصات سلامة doctor، لكن موقفهما
مختلف:
| الوضع | المطالبات | يكتب الإعدادات/الحالة | المخرجات | استخدمه من أجل |
|---|---|---|---|---|
openclaw doctor | نعم | لا | تقرير سلامة ودود | إنسان يتحقق من الحالة |
openclaw doctor --fix | أحيانًا | نعم، وفق سياسة الإصلاح | سجل إصلاح ودود | تطبيق الإصلاحات المعتمدة |
openclaw doctor --lint | لا | لا | نتائج منظمة | CI، والتمهيد، وبوابات المراجعة |
repair().
يطبّق doctor --fix تلك الإصلاحات عند وجودها ويواصل استخدام مسار إصلاح
doctor الموجود للفحوصات التي لم تُرحّل بعد.
يفصل عقد الإصلاح المنظم أيضًا تقارير الإصلاح عن الاكتشاف:
يبلّغ detect() عن النتائج الحالية، بينما يستطيع repair() الإبلاغ عن التغييرات،
وفروقات الإعدادات/الملفات، والآثار الجانبية غير الملفية. هذا يبقي مسار الترحيل مفتوحًا
لإخراج doctor --fix --dry-run والفروقات مستقبلًا دون جعل فحوصات الفحص
تخطط للطفرات.
أمثلة:
ok: ما إذا كانت أي نتيجة مرئية قد بلغت عتبة الشدة المحددةchecksRun: عدد فحوصات السلامة المنفذةchecksSkipped: الفحوصات التي تخطاها الملف المحدد، أو--only، أو--skipfindings: تشخيصات منظمة تتضمنcheckId، وseverity، وmessage، وpath، وline، وcolumn، وocPath، وfixHintاختياريًا
0: لا توجد نتائج عند العتبة المحددة أو أعلى منها1: نتيجة واحدة أو أكثر بلغت العتبة المحددة2: فشل في الأمر/وقت التشغيل قبل أن يمكن إصدار نتائج الفحص
--severity-min info|warning|error للتحكم في ما يُطبع وما
يسبب خروج الفحص برمز غير صفري. استخدم --all لتشغيل مخزون الفحص الكامل،
بما في ذلك الفحوصات الأعمق التي تتطلب الاشتراك والمستبعدة من مجموعة الأتمتة الافتراضية. استخدم --only <id> لبوابات تمهيد ضيقة و
--skip <id> لاستبعاد فحص مزعج مؤقتًا مع إبقاء بقية
تشغيل الفحص نشطًا.
يجب إقران خيارات إخراج الفحص مثل --json، و--severity-min، و--all، و--only، و
--skip مع --lint؛ أما تشغيلات doctor العادية وتشغيلات الإصلاح فترفضها.
ما الذي يفعله (ملخص)
Health, UI, and updates
Health, UI, and updates
- تحديث تمهيدي اختياري لتثبيتات git (تفاعلي فقط).
- فحص حداثة بروتوكول الواجهة (يعيد بناء Control UI عندما يكون مخطط البروتوكول أحدث).
- فحص سلامة + مطالبة بإعادة التشغيل.
- ملخص حالة Skills (مؤهل/مفقود/محظور) وحالة Plugin.
Config and migrations
Config and migrations
- تطبيع الإعدادات للقيم القديمة.
- ترحيل إعدادات Talk من حقول
talk.*المسطحة القديمة إلىtalk.provider+talk.providers.<provider>. - فحوصات ترحيل المتصفح لإعدادات إضافة Chrome القديمة وجاهزية Chrome MCP.
- تحذيرات تجاوز موفر OpenCode (
models.providers.opencode/models.providers.opencode-go). - ترحيل موفر/ملف OpenAI Codex القديم (
openai-codex→openai) وتحذيرات التظليل لـmodels.providers.openai-codexالقديمة. - فحص متطلبات OAuth TLS الأساسية لملفات OpenAI Codex OAuth.
- تحذيرات قائمة السماح لـ Plugin/الأداة عندما تكون
plugins.allowمقيّدة لكن سياسة الأداة لا تزال تطلب أدوات البدل أو الأدوات المملوكة لـ Plugin. - ترحيل الحالة القديمة على القرص (الجلسات/دليل الوكيل/مصادقة WhatsApp).
- ترحيل مفاتيح عقد بيان Plugin القديمة (
speechProviders,realtimeTranscriptionProviders,realtimeVoiceProviders,mediaUnderstandingProviders,imageGenerationProviders,videoGenerationProviders,webFetchProviders,webSearchProviders→contracts). - ترحيل مخزن Cron القديم (
jobId، وschedule.cron، وحقول التسليم/الحمولة ذات المستوى الأعلى، وحمولةprovider، ومهام Webhook الاحتياطيةnotify: true). - تنظيف سياسة وقت تشغيل الوكيل الكامل القديمة؛ سياسة وقت تشغيل الموفر/النموذج هي محدد المسار النشط.
- تنظيف إعدادات Plugin القديمة عند تمكين Plugin؛ عندما تكون
plugins.enabled=false، تُعامل مراجع Plugin القديمة كإعداد احتواء خامد وتُحفظ.
State and integrity
State and integrity
- فحص ملف قفل الجلسة وتنظيف الأقفال القديمة.
- إصلاح نصوص الجلسات للفروع المكررة لإعادة كتابة المطالبة التي أنشأتها إصدارات 2026.4.24 المتأثرة.
- اكتشاف شاهدة استرداد إعادة تشغيل الوكيل الفرعي العالق، مع دعم
--fixلمسح أعلام الاسترداد المجهض القديمة حتى لا يستمر بدء التشغيل في معاملة التابع على أنه مجهض إعادة التشغيل. - فحوصات سلامة الحالة والأذونات (الجلسات، النصوص، دليل الحالة).
- فحوصات أذونات ملف الإعدادات (chmod 600) عند التشغيل محليًا.
- سلامة مصادقة النموذج: تفحص انتهاء صلاحية OAuth، ويمكنها تحديث الرموز التي توشك على الانتهاء، وتبلّغ عن حالات تهدئة/تعطيل ملف المصادقة.
Gateway, services, and supervisors
Gateway, services, and supervisors
- إصلاح صورة العزل عند تمكين العزل.
- ترحيل الخدمة القديمة واكتشاف Gateway إضافي.
- ترحيل حالة قناة Matrix القديمة (في وضع
--fix/--repair). - فحوصات وقت تشغيل Gateway (الخدمة مثبتة لكنها لا تعمل؛ تسمية launchd مخزنة مؤقتًا).
- تحذيرات حالة القنوات (مستكشفة من Gateway الجاري).
- توجد فحوصات الأذونات الخاصة بالقنوات تحت
openclaw channels capabilities؛ على سبيل المثال، تُراجع أذونات قناة Discord الصوتية باستخدامopenclaw channels capabilities --channel discord --target channel:<channel-id>. - فحوصات استجابة WhatsApp لتدهور سلامة حلقة أحداث Gateway مع استمرار عمل عملاء TUI المحليين؛ يوقف
--fixفقط عملاء TUI المحليين المتحقق منهم. - إصلاح مسار Codex لمراجع نماذج
openai-codex/*القديمة في النماذج الأساسية، والاحتياطيات، ونماذج إنشاء الصور/الفيديو، وتجاوزات Heartbeat/الوكيل الفرعي/Compaction، والخطافات، وتجاوزات نماذج القنوات، وتثبيتات مسارات الجلسات؛ يعيد--fixكتابتها إلىopenai/*، ويرحّل ملفات/ترتيب مصادقةopenai-codex:*إلىopenai:*، ويزيل تثبيتات وقت تشغيل الجلسة/الوكيل الكامل القديمة، ويترك مراجع وكيل OpenAI القياسية على حزمة Codex الافتراضية. - تدقيق إعدادات المشرف (launchd/systemd/schtasks) مع إصلاح اختياري.
- تنظيف بيئة الوكيل المضمنة لخدمات Gateway التي التقطت قيم shell
HTTP_PROXY/HTTPS_PROXY/NO_PROXYأثناء التثبيت أو التحديث. - فحوصات أفضل ممارسات وقت تشغيل Gateway (Node مقابل Bun، ومسارات مديري الإصدارات).
- تشخيصات تعارض منفذ Gateway (الافتراضي
18789).
Auth, security, and pairing
Auth, security, and pairing
- تحذيرات أمنية لسياسات الرسائل المباشرة المفتوحة.
- فحوصات مصادقة Gateway لوضع الرمز المحلي (تعرض إنشاء رمز عند عدم وجود مصدر رمز؛ لا تستبدل إعدادات SecretRef للرموز).
- اكتشاف مشكلات إقران الجهاز (طلبات الإقران الأولى المعلقة، وترقيات الدور/النطاق المعلقة، وانحراف ذاكرة التخزين المؤقتة المحلية القديمة لرمز الجهاز، وانحراف مصادقة سجل الإقران).
Workspace and shell
Workspace and shell
- فحص systemd linger على Linux.
- فحص حجم ملف تمهيد مساحة العمل (تحذيرات الاقتطاع/القرب من الحد لملفات السياق).
- فحص جاهزية Skills للوكيل الافتراضي؛ يبلّغ عن Skills المسموح بها ذات المتطلبات المفقودة من الثنائيات أو البيئة أو الإعدادات أو نظام التشغيل، ويمكن لـ
--fixتعطيل Skills غير المتاحة فيskills.entries. - فحص حالة إكمال shell والتثبيت/الترقية التلقائية.
- فحص جاهزية موفر تضمين بحث الذاكرة (نموذج محلي، أو مفتاح API بعيد، أو ثنائي QMD).
- فحوصات تثبيت المصدر (عدم تطابق مساحة عمل pnpm، أصول واجهة مفقودة، ثنائي tsx مفقود).
- يكتب إعدادات محدثة + بيانات معالج التعريف.
ملء Dreams UI الرجعي وإعادة تعيينها
يتضمن مشهد Dreams في Control UI إجراءات الملء الرجعي وإعادة التعيين ومسح المثبّت لسير عمل Dreaming المثبّت. تستخدم هذه الإجراءات طرق RPC بأسلوب doctor عبر Gateway، لكنها ليست جزءًا من إصلاح/ترحيلopenclaw doctor عبر CLI.
ما تفعله:
- يفحص الملء الرجعي ملفات
memory/YYYY-MM-DD.mdالتاريخية في مساحة العمل النشطة، ويشغّل مرور يوميات REM المثبّتة، ويكتب إدخالات ملء رجعي قابلة للعكس فيDREAMS.md. - تزيل إعادة التعيين فقط إدخالات يوميات الملء الرجعي المعلّمة تلك من
DREAMS.md. - يزيل مسح المثبّت فقط الإدخالات المرحلية قصيرة الأجل المثبّتة فقط التي جاءت من إعادة التشغيل التاريخية ولم تراكم بعد استدعاءً حيًا أو دعمًا يوميًا.
- لا تعدّل
MEMORY.md - لا تشغّل ترحيلات doctor الكاملة
- لا تدرج المرشحين المثبّتين تلقائيًا في مخزن الترقية قصيرة الأجل الحي إلا إذا شغّلت مسار CLI المرحلي صراحةً أولًا
DREAMS.md سطح المراجعة.
السلوك التفصيلي والمبررات
0. Optional update (git installs)
0. Optional update (git installs)
1. Config normalization
1. Config normalization
messages.ackReaction دون تجاوز خاص بالقناة)، فإن doctor يطبّعها إلى المخطط الحالي.يشمل ذلك حقول Talk المسطحة القديمة. إعداد الكلام العام الحالي في Talk هو talk.provider + talk.providers.<provider>، وإعداد الصوت الفوري هو talk.realtime.*. يعيد doctor كتابة أشكال talk.voiceId / talk.voiceAliases / talk.modelId / talk.outputFormat / talk.apiKey القديمة إلى خريطة الموفر، ويعيد كتابة محددات الوقت الفوري القديمة ذات المستوى الأعلى (talk.mode، وtalk.transport، وtalk.brain، وtalk.model، وtalk.voice) إلى talk.realtime.تحذّر أداة الفحص أيضًا عندما تكون plugins.allow غير فارغة وتستخدم سياسة الأدوات
إدخالات أدوات مملوكة لملحق أو حرف بدل. لا يطابق tools.allow: ["*"] إلا الأدوات
من الملحقات التي تُحمّل فعليًا؛ ولا يتجاوز قائمة السماح الحصرية للملحقات.2. ترحيلات مفاتيح التكوين القديمة
2. ترحيلات مفاتيح التكوين القديمة
openclaw doctor.ستقوم أداة الفحص بما يلي:- شرح مفاتيح التكوين القديمة التي عُثر عليها.
- عرض الترحيل الذي طبقته.
- إعادة كتابة
~/.openclaw/openclaw.jsonبالمخطط المحدّث.
openclaw doctor --fix؛ ولا يعيد كتابة openclaw.json عند بدء التشغيل. تُعالج ترحيلات مخزن مهام Cron أيضًا بواسطة openclaw doctor --fix.الترحيلات الحالية:routing.allowFrom→channels.whatsapp.allowFromrouting.groupChat.requireMention→channels.whatsapp/telegram/imessage.groups."*".requireMentionrouting.groupChat.historyLimit→messages.groupChat.historyLimitrouting.groupChat.mentionPatterns→messages.groupChat.mentionPatternschannels.telegram.requireMention→channels.telegram.groups."*".requireMention- إزالة
channels.webchatوgateway.webchatالمتقاعدين routing.queue→messages.queuerouting.bindings→bindingsعلى المستوى الأعلىrouting.agents/routing.defaultAgentId→agents.list+agents.list[].defaulttalk.voiceId/talk.voiceAliases/talk.modelId/talk.outputFormat/talk.apiKeyالقديمة →talk.provider+talk.providers.<provider>- محددات Talk الفورية القديمة على المستوى الأعلى (
talk.mode/talk.transport/talk.brain/talk.model/talk.voice) +talk.provider/talk.providers→talk.realtime routing.agentToAgent→tools.agentToAgentrouting.transcribeAudio→tools.media.audio.modelsmessages.tts.<provider>(openai/elevenlabs/microsoft/edge) →messages.tts.providers.<provider>messages.tts.provider: "edge"وmessages.tts.providers.edge→messages.tts.provider: "microsoft"وmessages.tts.providers.microsoft- حقول اختيار متحدث TTS (
voice/voiceName/voiceId) →speakerVoice/speakerVoiceId channels.discord.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.voice.tts.providers.<provider>channels.discord.accounts.<id>.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.accounts.<id>.voice.tts.providers.<provider>plugins.entries.voice-call.config.tts.<provider>(openai/elevenlabs/microsoft/edge) →plugins.entries.voice-call.config.tts.providers.<provider>plugins.entries.voice-call.config.tts.provider: "edge"وplugins.entries.voice-call.config.tts.providers.edge→provider: "microsoft"وproviders.microsoftplugins.entries.voice-call.config.provider: "log"→"mock"plugins.entries.voice-call.config.twilio.from→plugins.entries.voice-call.config.fromNumberplugins.entries.voice-call.config.streaming.sttProvider→plugins.entries.voice-call.config.streaming.providerplugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold→plugins.entries.voice-call.config.streaming.providers.openai.*bindings[].match.accountID→bindings[].match.accountId- بالنسبة إلى القنوات التي تحتوي على
accountsمسماة مع بقاء قيم قناة على المستوى الأعلى لحساب واحد، انقل تلك القيم ذات نطاق الحساب إلى الحساب المُرقّى المختار لتلك القناة (accounts.defaultلمعظم القنوات؛ يمكن لـ Matrix الحفاظ على هدف مسمى/افتراضي مطابق موجود) identity→agents.list[].identityagent.*→agents.defaults+tools.*(tools/elevated/exec/sandbox/subagents)agent.model/allowedModels/modelAliases/modelFallbacks/imageModelFallbacks→agents.defaults.models+agents.defaults.model.primary/fallbacks+agents.defaults.imageModel.primary/fallbacks- إزالة
agents.defaults.llm؛ استخدمmodels.providers.<id>.timeoutSecondsلمهلات المزوّد/النموذج البطيئة، وأبقِ مهلة الوكيل/التشغيل أعلى من تلك القيمة عندما يجب أن يستمر التشغيل كله مدة أطول browser.ssrfPolicy.allowPrivateNetwork→browser.ssrfPolicy.dangerouslyAllowPrivateNetworkbrowser.profiles.*.driver: "extension"→"existing-session"- إزالة
browser.relayBindHost(إعداد ترحيل الإضافة القديم) models.providers.*.api: "openai"القديمة →"openai-completions"(يتخطى بدء تشغيل Gateway أيضًا المزوّدين الذين عُيّنت قيمةapiلديهم إلى قيمة تعداد مستقبلية أو غير معروفة بدلًا من الفشل المغلق)- إزالة
plugins.entries.codex.config.codexDynamicToolsProfile؛ يحافظ خادم تطبيق Codex دائمًا على أدوات مساحة العمل الأصلية لـ Codex كأدوات أصلية
- إذا جرى تكوين إدخالين أو أكثر من
channels.<channel>.accountsبدونchannels.<channel>.defaultAccountأوaccounts.default، تحذّر أداة الفحص من أن توجيه الاحتياط قد يختار حسابًا غير متوقع. - إذا عُيّن
channels.<channel>.defaultAccountإلى معرّف حساب غير معروف، تحذّر أداة الفحص وتعرض معرّفات الحسابات المكوّنة.
2b. تجاوزات مزوّد OpenCode
2b. تجاوزات مزوّد OpenCode
models.providers.opencode أو opencode-zen أو opencode-go يدويًا، فإنه يتجاوز كتالوج OpenCode المدمج من openclaw/plugin-sdk/llm. قد يفرض ذلك النماذج على API خاطئة أو يصفّر التكاليف. تحذّر أداة الفحص لكي تتمكن من إزالة التجاوز واستعادة توجيه API والتكاليف لكل نموذج.2c. ترحيل المتصفح وجاهزية Chrome MCP
2c. ترحيل المتصفح وجاهزية Chrome MCP
- تصبح
browser.profiles.*.driver: "extension"القيمة"existing-session" - تُزال
browser.relayBindHost
defaultProfile: "user" أو ملف تعريف existing-session مكوّنًا:- تتحقق مما إذا كان Google Chrome مثبتًا على المضيف نفسه لملفات التعريف الافتراضية ذات الاتصال التلقائي
- تتحقق من إصدار Chrome المكتشف وتحذّر عندما يكون أقل من Chrome 144
- تذكّرك بتمكين التصحيح عن بُعد في صفحة فحص المتصفح (مثل
chrome://inspect/#remote-debuggingأوbrave://inspect/#remote-debuggingأوedge://inspect/#remote-debugging)
- متصفحًا مستندًا إلى Chromium بإصدار 144+ على مضيف gateway/node
- تشغيل المتصفح محليًا
- تمكين التصحيح عن بُعد في ذلك المتصفح
- الموافقة على مطالبة موافقة الإرفاق الأولى في المتصفح
existing-session على حدود مسارات Chrome MCP الحالية؛ لا تزال المسارات المتقدمة مثل responsebody، وتصدير PDF، واعتراض التنزيلات، وإجراءات الدُفعات تتطلب متصفحًا مُدارًا أو ملف تعريف CDP خامًا.لا ينطبق هذا الفحص على Docker أو sandbox أو remote-browser أو تدفقات headless الأخرى. تستمر تلك في استخدام CDP الخام.2d. متطلبات OAuth TLS الأساسية
2d. متطلبات OAuth TLS الأساسية
UNABLE_TO_GET_ISSUER_CERT_LOCALLY، أو شهادة منتهية الصلاحية، أو شهادة موقعة ذاتيًا)، تطبع أداة الفحص إرشادات إصلاح خاصة بالنظام الأساسي. على macOS مع Node من Homebrew، يكون الإصلاح عادةً brew postinstall ca-certificates. مع --deep، يعمل الفحص حتى إذا كان Gateway سليمًا.2e. تجاوزات مزوّد Codex OAuth
2e. تجاوزات مزوّد Codex OAuth
models.providers.openai-codex، فقد تحجب مسار مزوّد Codex OAuth المدمج الذي تستخدمه الإصدارات الأحدث تلقائيًا. تحذّر أداة الفحص عندما ترى إعدادات النقل القديمة هذه بجانب Codex OAuth لكي تتمكن من إزالة تجاوز النقل القديم أو إعادة كتابته واستعادة سلوك التوجيه/الاحتياط المدمج. لا تزال الوكلاء المخصصون والتجاوزات الخاصة بالرؤوس فقط مدعومة ولا تؤدي إلى هذا التحذير.2f. إصلاح مسار Codex
2f. إصلاح مسار Codex
openai-codex/*. يستخدم توجيه حزمة Codex الأصلية مراجع النماذج القانونية openai/*؛ تمر دورات وكيل OpenAI عبر حزمة خادم تطبيق Codex بدلًا من مسار مزوّد OpenAI في OpenClaw.في وضع --fix / --repair، تعيد أداة الفحص كتابة مراجع الوكيل الافتراضي والمراجع لكل وكيل المتأثرة، بما في ذلك النماذج الأساسية، والاحتياطات، ونماذج توليد الصور/الفيديو، وتجاوزات heartbeat/subagent/compaction، والخطافات، وتجاوزات نموذج القناة، وحالة مسار الجلسة المستمرة القديمة:- تصبح
openai-codex/gpt-*القيمةopenai/gpt-*. - ينتقل قصد Codex إلى إدخالات
agentRuntime.id: "codex"ذات نطاق المزوّد/النموذج لمراجع نماذج الوكلاء المُصلحة. - تُزال إعدادات وقت تشغيل الوكيل كاملة القديمة ودبابيس وقت تشغيل الجلسة المستمرة لأن اختيار وقت التشغيل ذو نطاق مزوّد/نموذج.
- تُحفظ سياسة وقت تشغيل المزوّد/النموذج الحالية ما لم يحتج مرجع النموذج القديم المُصلح إلى توجيه Codex للحفاظ على مسار المصادقة القديم.
- تُحفظ قوائم احتياط النماذج الحالية مع إعادة كتابة إدخالاتها القديمة؛ وتنتقل إعدادات كل نموذج المنسوخة من المفتاح القديم إلى مفتاح
openai/*القانوني. - تُصلح
modelProvider/providerOverrideوmodel/modelOverrideللجلسات المستمرة، وإشعارات الاحتياط، ودبابيس ملف تعريف المصادقة عبر جميع مخازن جلسات الوكلاء المكتشفة. - تعني
/codex ...“التحكم في محادثة Codex أصلية من الدردشة أو ربطها.” - تعني
/acp ...أوruntime: "acp"“استخدام محوّل ACP/acpx الخارجي.”
2g. تنظيف مسار الجلسة
2g. تنظيف مسار الجلسة
openclaw doctor --fix مسح الحالة القديمة المنشأة تلقائيًا مثل دبابيس النموذج modelOverrideSource: "auto"، وبيانات تعريف نموذج وقت التشغيل، ومعرّفات الحزمة المثبتة، وارتباطات جلسة CLI، وتجاوزات ملف تعريف المصادقة التلقائية عندما لا يعود مسارها المالك مكوّنًا. تُبلّغ اختيارات نموذج الجلسة الصريحة الخاصة بالمستخدم أو القديمة للمراجعة اليدوية وتُترك كما هي؛ بدّلها باستخدام /model ... أو /new أو أعد ضبط الجلسة عندما لا يعود ذلك المسار مقصودًا.3. ترحيلات الحالة القديمة (تخطيط القرص)
3. ترحيلات الحالة القديمة (تخطيط القرص)
- مخزن الجلسات + النصوص:
- من
~/.openclaw/sessions/إلى~/.openclaw/agents/<agentId>/sessions/
- من
- دليل الوكيل:
- من
~/.openclaw/agent/إلى~/.openclaw/agents/<agentId>/agent/
- من
- حالة مصادقة WhatsApp (Baileys):
- من
~/.openclaw/credentials/*.jsonالقديمة (باستثناءoauth.json) - إلى
~/.openclaw/credentials/whatsapp/<accountId>/...(معرّف الحساب الافتراضي:default)
- من
openclaw doctor فقط. تقارن تسوية مزوّد Talk/خريطة المزوّدين الآن بالمساواة البنيوية، لذلك لم تعد الاختلافات في ترتيب المفاتيح فقط تؤدي إلى تكرار تغييرات doctor --fix عديمة الأثر.3أ. ترحيلات بيانات تعريف Plugin القديمة
3أ. ترحيلات بيانات تعريف Plugin القديمة
speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders, webSearchProviders). عند العثور عليها، يعرض نقلها إلى كائن contracts وإعادة كتابة ملف بيانات التعريف في موضعه. هذا الترحيل قابل للتكرار بأمان؛ إذا كان مفتاح contracts يحتوي بالفعل على القيم نفسها، يزال المفتاح القديم من دون تكرار البيانات.3ب. ترحيلات مخزن Cron القديم
3ب. ترحيلات مخزن Cron القديم
~/.openclaw/cron/jobs.json افتراضيا، أو cron.store عند تجاوزه) بحثا عن أشكال المهام القديمة التي لا يزال المجدول يقبلها للتوافق.تشمل تنظيفات Cron الحالية:jobId→idschedule.cron→schedule.expr- حقول الحمولة العلوية (
message,model,thinking, …) →payload - حقول التسليم العلوية (
deliver,channel,to,provider, …) →delivery - الأسماء البديلة لتسليم
providerفي الحمولة →delivery.channelصريح - مهام Webhook الاحتياطية القديمة
notify: true→ تسليم Webhook صريح منcron.webhookعند ضبطه؛ تحتفظ مهام الإعلان بتسليم الدردشة وتحصل علىdelivery.completionDestination. عند عدم ضبطcron.webhook، تزال علامةnotifyالعلوية غير الفعالة للمهام التي بلا هدف (مع الحفاظ على التسليم الحالي، بما في ذلك الإعلان) لأن تسليم وقت التشغيل لا يقرأها أبدا
jobs-quarantine.json بجانب المخزن النشط قبل إزالتها من jobs.json؛ يبلغ Doctor عن الصفوف المعزولة حتى تتمكن من مراجعتها أو إصلاحها يدويا.يطبع بدء تشغيل Gateway إسقاط وقت التشغيل ويتجاهل علامة notify العلوية، لكنه يترك إعداد Cron المستمر لإصلاح Doctor. عند عدم ضبط cron.webhook، يزيل Doctor العلامة غير الفعالة للمهام التي لا تملك هدف ترحيل (delivery.mode بلا قيمة/غائب، أو هدف Webhook غير قابل للاستخدام، أو تسليم إعلان/دردشة موجود)، تاركا التسليم الحالي دون تغيير، بحيث لا تعيد عمليات doctor --fix المتكررة التحذير من المهمة نفسها. إذا كان cron.webhook مضبوطا لكنه ليس عنوان URL صالحا من نوع HTTP(S)، يبقى Doctor محذرا ويترك العلامة حتى تتمكن من إصلاح عنوان URL.على Linux، يحذر Doctor أيضا عندما لا يزال crontab الخاص بالمستخدم يستدعي ~/.openclaw/bin/ensure-whatsapp.sh القديم. هذا السكربت المحلي للمضيف لا يصان بواسطة OpenClaw الحالي ويمكنه كتابة رسائل Gateway inactive زائفة إلى ~/.openclaw/logs/whatsapp-health.log عندما يتعذر على Cron الوصول إلى ناقل مستخدم systemd. أزل إدخال crontab القديم باستخدام crontab -e؛ استخدم openclaw channels status --probe وopenclaw doctor وopenclaw gateway status لفحوصات الصحة الحالية.3ج. تنظيف أقفال الجلسات
3ج. تنظيف أقفال الجلسات
--fix / --repair يزيل تلقائيا الأقفال ذات المالكين الميتين، أو اليتامى، أو المعاد تدويرهم، أو المشوهين والقدامى، أو غير التابعين لـ OpenClaw. يبلغ عن الأقفال القديمة التي لا تزال مملوكة لعملية OpenClaw حية لكنه يتركها في مكانها حتى لا يقطع Doctor كاتب سجل محادثة نشطا.3د. إصلاح فرع سجل محادثة الجلسة
3د. إصلاح فرع سجل محادثة الجلسة
--fix / --repair، ينسخ Doctor كل ملف متأثر احتياطيا بجانب الأصل ويعيد كتابة سجل المحادثة إلى الفرع النشط حتى لا يرى قراء سجل Gateway والذاكرة أدوارا مكررة بعد الآن.4. فحوصات سلامة الحالة (استمرارية الجلسات، والتوجيه، والسلامة)
4. فحوصات سلامة الحالة (استمرارية الجلسات، والتوجيه، والسلامة)
- دليل الحالة مفقود: يحذر من فقدان كارثي للحالة، ويطلب إعادة إنشاء الدليل، ويذكرك بأنه لا يمكنه استرداد البيانات المفقودة.
- أذونات دليل الحالة: يتحقق من قابلية الكتابة؛ يعرض إصلاح الأذونات (ويصدر تلميح
chownعند اكتشاف عدم تطابق المالك/المجموعة). - دليل حالة متزامن سحابيا على macOS: يحذر عندما يتحلل مسار الحالة تحت iCloud Drive (
~/Library/Mobile Documents/com~apple~CloudDocs/...) أو~/Library/CloudStorage/...لأن المسارات المدعومة بالمزامنة قد تسبب إدخالا/إخراجا أبطأ وسباقات قفل/مزامنة. - دليل حالة Linux على SD أو eMMC: يحذر عندما تتحلل الحالة إلى مصدر تركيب
mmcblk*، لأن الإدخال/الإخراج العشوائي المدعوم بـ SD أو eMMC قد يكون أبطأ ويتآكل أسرع تحت كتابات الجلسات وبيانات الاعتماد. - دليل حالة Linux متطاير: يحذر عندما تتحلل الحالة إلى
tmpfsأوramfs، لأن الجلسات وبيانات الاعتماد والإعدادات وحالة SQLite مع ملفات WAL/دفتر اليومية الجانبية ستختفي عند إعادة التشغيل. لا توسم تركيبات Dockeroverlayعمدا لأن طبقاتها القابلة للكتابة تبقى عبر إعادة تشغيل المضيف ما دام الحاوي باقيا. - أدلة الجلسات مفقودة:
sessions/ودليل مخزن الجلسات مطلوبان لاستمرار السجل وتجنب أعطالENOENT. - عدم تطابق سجل المحادثة: يحذر عندما تكون إدخالات الجلسات الحديثة لديها ملفات سجل محادثة مفقودة.
- جلسة رئيسية “JSONL بسطر واحد”: يوسم عندما يحتوي سجل المحادثة الرئيسي على سطر واحد فقط (السجل لا يتراكم).
- أدلة حالة متعددة: يحذر عندما توجد مجلدات
~/.openclawمتعددة عبر أدلة المنزل أو عندما يشيرOPENCLAW_STATE_DIRإلى مكان آخر (يمكن أن ينقسم السجل بين التثبيتات). - تذكير الوضع البعيد: إذا كان
gateway.mode=remote، يذكرك Doctor بتشغيله على المضيف البعيد (الحالة تعيش هناك). - أذونات ملف الإعدادات: يحذر إذا كان
~/.openclaw/openclaw.jsonقابلا للقراءة من المجموعة/العالم ويعرض تشديده إلى600.
5. صحة مصادقة النموذج (انتهاء OAuth)
5. صحة مصادقة النموذج (انتهاء OAuth)
--non-interactive محاولات التحديث.عندما يفشل تحديث OAuth بشكل دائم (مثل refresh_token_reused، أو invalid_grant، أو عندما يطلب منك المزود تسجيل الدخول مجددا)، يبلغ Doctor بأن إعادة المصادقة مطلوبة ويطبع أمر openclaw models auth login --provider ... الدقيق لتشغيله.يبلغ Doctor أيضا عن ملفات تعريف المصادقة غير القابلة للاستخدام مؤقتا بسبب:- فترات تهدئة قصيرة (حدود معدل/مهلات/فشل مصادقة)
- تعطيلات أطول (فشل فوترة/رصيد)
openclaw doctor --fix مرة واحدة من طرفية تفاعلية لترحيل الرموز القديمة المدعومة بـ Keychain موضعيا إلى auth-profiles.json؛ بعد ذلك، تحل الأدوار المضمنة (Telegram، وCron، وإرسال الوكيل الفرعي) هذه الرموز كملفات تعريف OpenAI OAuth قانونية.6. تحقق نموذج الخطافات
6. تحقق نموذج الخطافات
hooks.gmail.model مضبوطا، يتحقق Doctor من مرجع النموذج مقابل الفهرس وقائمة السماح ويحذر عندما لا يمكن حله أو يكون غير مسموح به.7. إصلاح صورة وضع الحماية
7. إصلاح صورة وضع الحماية
7ب. تنظيف تثبيت Plugin
7ب. تنظيف تثبيت Plugin
openclaw doctor --fix / openclaw doctor --repair. يغطي هذا جذور التبعيات المولدة القديمة، وأدلة مرحلة التثبيت القديمة، وبقايا الحزم المحلية من كود إصلاح تبعيات Plugin المضمنة سابقا، والنسخ المدارة من npm اليتيمة أو المستعادة لملحقات @openclaw/* المضمنة التي يمكن أن تحجب بيانات التعريف المضمنة الحالية. يعيد Doctor أيضا ربط حزمة openclaw المضيفة داخل Plugins npm المدارة التي تعلن peerDependencies.openclaw، حتى تستمر استيرادات وقت التشغيل المحلية للحزمة مثل openclaw/plugin-sdk/* في الحل بعد التحديثات أو إصلاحات npm.يمكن لـ Doctor أيضا إعادة تثبيت Plugins القابلة للتنزيل المفقودة عندما تشير الإعدادات إليها لكن سجل Plugins المحلي لا يستطيع العثور عليها. تشمل الأمثلة plugins.entries المادية، وإعدادات القنوات/المزودين/البحث المضبوطة، وأوقات تشغيل الوكلاء المضبوطة. أثناء تحديثات الحزم، يتجنب Doctor تشغيل إصلاح Plugin بمدير الحزم أثناء تبديل الحزمة الأساسية؛ شغل openclaw doctor --fix مجددا بعد التحديث إذا كان Plugin مضبوط لا يزال يحتاج إلى استرداد. لا يشغل بدء تشغيل Gateway وإعادة تحميل الإعدادات مديري حزم؛ تبقى عمليات تثبيت Plugins عملا صريحا عبر Doctor/التثبيت/التحديث.8. ترحيلات خدمة Gateway وتلميحات التنظيف
8. ترحيلات خدمة Gateway وتلميحات التنظيف
openclaw gateway status --deep أو openclaw doctor --deep، ثم أزل المكرر أو اضبط OPENCLAW_SERVICE_REPAIR_POLICY=external عندما يكون مشرف نظام مالكا لدورة حياة Gateway.8ب. ترحيل Matrix عند بدء التشغيل
8ب. ترحيل Matrix عند بدء التشغيل
--fix / --repair) لقطة ما قبل الترحيل ثم يشغل خطوات الترحيل بأفضل جهد: ترحيل حالة Matrix القديمة وتحضير الحالة المشفرة القديمة. كلتا الخطوتين غير قاتلتين؛ تسجل الأخطاء ويستمر بدء التشغيل. في وضع القراءة فقط (openclaw doctor من دون --fix) يتم تجاوز هذا الفحص بالكامل.8ج. اقتران الأجهزة وانحراف المصادقة
8ج. اقتران الأجهزة وانحراف المصادقة
- طلبات اقتران أول مرة معلقة
- ترقيات أدوار معلقة للأجهزة المقترنة بالفعل
- ترقيات نطاق معلقة للأجهزة المقترنة بالفعل
- إصلاحات عدم تطابق المفتاح العام عندما لا يزال معرف الجهاز مطابقا لكن هوية الجهاز لم تعد تطابق السجل الموافق عليه
- سجلات مقترنة ينقصها رمز نشط لدور موافق عليه
- رموز مقترنة تنحرف نطاقاتها خارج خط أساس الاقتران الموافق عليه
- إدخالات رموز أجهزة مخزنة مؤقتا محليا للجهاز الحالي تسبق تدوير رمز من جهة Gateway أو تحمل بيانات وصفية قديمة للنطاق
- افحص الطلبات المعلقة باستخدام
openclaw devices list - وافق على الطلب الدقيق باستخدام
openclaw devices approve <requestId> - دور رمزا جديدا باستخدام
openclaw devices rotate --device <deviceId> --role <role> - أزل سجلا قديما وأعد الموافقة عليه باستخدام
openclaw devices remove <deviceId>
9. تحذيرات الأمان
9. تحذيرات الأمان
10. systemd linger (Linux)
10. systemd linger (Linux)
11. حالة مساحة العمل (Skills وPlugins وTaskFlows)
11. حالة مساحة العمل (Skills وPlugins وTaskFlows)
- حالة Skills: يحصي Skills المؤهلة، وناقصة المتطلبات، والمحظورة بقائمة السماح.
- حالة Plugin: يحصي Plugins المفعّلة/المعطّلة/التي حدثت بها أخطاء؛ ويسرد معرّفات Plugin لأي أخطاء؛ ويبلّغ عن قدرات Plugin الحزمة.
- تحذيرات توافق Plugin: يعلّم Plugins التي لديها مشكلات توافق مع وقت التشغيل الحالي.
- تشخيصات Plugin: يعرض أي تحذيرات أو أخطاء وقت التحميل صادرة عن سجلّ Plugin.
- استرداد TaskFlow: يعرض TaskFlows المُدارة المريبة التي تحتاج إلى فحص يدوي أو إلغاء.
11b. حجم ملف التمهيد
11b. حجم ملف التمهيد
AGENTS.md أو CLAUDE.md أو ملفات سياق أخرى مُحقنة) قريبة من ميزانية الأحرف المهيأة أو تتجاوزها. يبلّغ لكل ملف عن عدد الأحرف الخام مقابل المُحقنة، ونسبة الاقتطاع، وسبب الاقتطاع (max/file أو max/total)، وإجمالي الأحرف المُحقنة كنسبة من الميزانية الكلية. عندما تكون الملفات مقتطعة أو قريبة من الحد، يطبع doctor تلميحات لضبط agents.defaults.bootstrapMaxChars وagents.defaults.bootstrapTotalMaxChars.11d. تنظيف Plugin القناة القديمة
11d. تنظيف Plugin القناة القديمة
openclaw doctor --fix Plugin قناة مفقودة، فإنه يزيل أيضًا إعدادات القناة العالقة التي كانت تشير إلى ذلك Plugin: إدخالات channels.<id>، وأهداف Heartbeat التي سمّت القناة، وتجاوزات agents.*.models["<channel>/*"]. يمنع ذلك حلقات إقلاع Gateway حيث يكون وقت تشغيل القناة قد اختفى لكن الإعدادات ما زالت تطلب من Gateway الارتباط به.11c. إكمال الصدفة
11c. إكمال الصدفة
- إذا كان ملف تعريف الصدفة يستخدم نمط إكمال ديناميكيًا بطيئًا (
source <(openclaw completion ...))، يرقّيه doctor إلى متغير الملف المخبأ الأسرع. - إذا كان الإكمال مهيأ في ملف التعريف لكن ملف الذاكرة المخبأة مفقود، يعيد doctor توليد الذاكرة المخبأة تلقائيًا.
- إذا لم يكن أي إكمال مهيأ على الإطلاق، يطلب doctor تثبيته (الوضع التفاعلي فقط؛ يُتخطى مع
--non-interactive).
openclaw completion --write-state لإعادة توليد الذاكرة المخبأة يدويًا.12. فحوصات مصادقة Gateway (الرمز المحلي)
12. فحوصات مصادقة Gateway (الرمز المحلي)
- إذا كان وضع الرمز يحتاج إلى رمز ولا يوجد مصدر رمز، يعرض doctor توليد واحد.
- إذا كان
gateway.auth.tokenمُدارًا عبر SecretRef لكنه غير متاح، يحذّر doctor ولا يستبدله بنص صريح. - يفرض
openclaw doctor --generate-gateway-tokenالتوليد فقط عندما لا يكون أي SecretRef رمز مهيأ.
12b. إصلاحات مدركة لـ SecretRef للقراءة فقط
12b. إصلاحات مدركة لـ SecretRef للقراءة فقط
- يستخدم
openclaw doctor --fixالآن نموذج ملخص SecretRef للقراءة فقط نفسه الذي تستخدمه أوامر عائلة الحالة لإصلاحات الإعدادات الموجّهة. - مثال: يحاول إصلاح Telegram
allowFrom/groupAllowFrom@usernameاستخدام بيانات اعتماد البوت المهيأة عند توفرها. - إذا كان رمز بوت Telegram مهيأ عبر SecretRef لكنه غير متاح في مسار الأمر الحالي، يبلّغ doctor أن بيانات الاعتماد مهيأة لكنها غير متاحة ويتخطى الحل التلقائي بدلًا من التعطل أو الإبلاغ خطأً عن أن الرمز مفقود.
13. فحص صحة Gateway + إعادة التشغيل
13. فحص صحة Gateway + إعادة التشغيل
13b. جاهزية بحث الذاكرة
13b. جاهزية بحث الذاكرة
- خلفية QMD: يتحقق مما إذا كان الملف التنفيذي
qmdمتاحًا وقابلًا للبدء. إن لم يكن كذلك، يطبع إرشادات إصلاح تشمل حزمة npm وخيار مسار يدوي للملف التنفيذي. - مزوّد محلي صريح: يفحص وجود ملف نموذج محلي أو عنوان URL معروف لنموذج بعيد/قابل للتنزيل. إذا كان مفقودًا، يقترح الانتقال إلى مزوّد بعيد.
- مزوّد بعيد صريح (
openaiوvoyageوما إلى ذلك): يتحقق من وجود مفتاح API في البيئة أو مخزن المصادقة. يطبع تلميحات إصلاح قابلة للتنفيذ إذا كان مفقودًا. - مزوّد تلقائي قديم: يعامل
memorySearch.provider: "auto"على أنه OpenAI، ويفحص جاهزية OpenAI، ويعيدdoctor --fixكتابته إلىprovider: "openai".
openclaw memory status --deep للتحقق من جاهزية التضمين في وقت التشغيل.14. تحذيرات حالة القناة
14. تحذيرات حالة القناة
15. تدقيق إعدادات المشرف + الإصلاح
15. تدقيق إعدادات المشرف + الإصلاح
- يطلب
openclaw doctorالتأكيد قبل إعادة كتابة إعدادات المشرف. - يقبل
openclaw doctor --yesمطالبات الإصلاح الافتراضية. - يطبّق
openclaw doctor --fixالإصلاحات الموصى بها من دون مطالبات (--repairاسم مستعار). - يكتب
openclaw doctor --fix --forceفوق إعدادات المشرف المخصصة. - يجعل
OPENCLAW_SERVICE_REPAIR_POLICY=externaldoctor للقراءة فقط بالنسبة إلى دورة حياة خدمة Gateway. ما زال يبلّغ عن صحة الخدمة ويشغّل إصلاحات غير خدمية، لكنه يتخطى تثبيت/بدء/إعادة تشغيل/تمهيد الخدمة، وإعادة كتابة إعدادات المشرف، وتنظيف الخدمات القديمة لأن مشرفًا خارجيًا يملك تلك الدورة. - على Linux، لا يعيد doctor كتابة بيانات تعريف الأمر/نقطة الدخول أثناء نشاط وحدة Gateway المطابقة في systemd. كما يتجاهل وحدات Gateway-like الإضافية غير القديمة وغير النشطة أثناء فحص الخدمات المكررة حتى لا تنشئ ملفات الخدمات المرافقة ضجيج تنظيف.
- إذا كانت مصادقة الرمز تتطلب رمزًا وكان
gateway.auth.tokenمُدارًا عبر SecretRef، يتحقق تثبيت/إصلاح خدمة doctor من SecretRef لكنه لا يحفظ قيم الرمز النصية الصريحة المحلولة في بيانات تعريف بيئة خدمة المشرف. - يكتشف doctor قيم بيئة الخدمة المُدارة المدعومة بـ
.env/SecretRef التي ضمّنتها تثبيتات LaunchAgent أو systemd أو Windows Scheduled Task القديمة بشكل مباشر، ويعيد كتابة بيانات تعريف الخدمة بحيث تُحمّل تلك القيم من مصدر وقت التشغيل بدلًا من تعريف المشرف. - يكتشف doctor عندما لا يزال أمر الخدمة يثبّت
--portقديمًا بعد تغيّرgateway.portويعيد كتابة بيانات تعريف الخدمة إلى المنفذ الحالي. - إذا كانت مصادقة الرمز تتطلب رمزًا وكان SecretRef الرمز المهيأ غير محلول، يحظر doctor مسار التثبيت/الإصلاح مع إرشادات قابلة للتنفيذ.
- إذا كان كل من
gateway.auth.tokenوgateway.auth.passwordمهيأين وكانgateway.auth.modeغير مضبوط، يحظر doctor التثبيت/الإصلاح حتى يُضبط الوضع صراحةً. - بالنسبة إلى وحدات Linux user-systemd، تشمل فحوصات انحراف رمز doctor الآن مصدري
Environment=وEnvironmentFile=عند مقارنة بيانات تعريف مصادقة الخدمة. - ترفض إصلاحات خدمة doctor إعادة كتابة خدمة Gateway أو إيقافها أو إعادة تشغيلها من ملف OpenClaw تنفيذي أقدم عندما تكون الإعدادات قد كُتبت آخر مرة بواسطة إصدار أحدث. راجع استكشاف أخطاء Gateway وإصلاحها.
- يمكنك دائمًا فرض إعادة كتابة كاملة عبر
openclaw gateway install --force.
16. تشخيصات وقت تشغيل Gateway والمنفذ
16. تشخيصات وقت تشغيل Gateway والمنفذ
18789) ويبلّغ عن الأسباب المرجحة (Gateway يعمل بالفعل، نفق SSH).17. أفضل ممارسات وقت تشغيل Gateway
17. أفضل ممارسات وقت تشغيل Gateway
nvm أو fnm أو volta أو asdf وما إلى ذلك). تتطلب قنوات WhatsApp + Telegram Node، ويمكن أن تنكسر مسارات مدير الإصدارات بعد الترقيات لأن الخدمة لا تحمّل تهيئة الصدفة الخاصة بك. يعرض doctor الترحيل إلى تثبيت Node نظامي عندما يكون متاحًا (Homebrew/apt/choco).تستخدم LaunchAgents المثبتة أو المُصلحة حديثًا على macOS مسار PATH نظاميًا قياسيًا (/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin) بدلًا من نسخ PATH الصدفة التفاعلية، بحيث تبقى الملفات التنفيذية النظامية المُدارة بواسطة Homebrew متاحة بينما لا تغيّر أدلة Volta وasdf وfnm وpnpm ومديري الإصدارات الآخرين أي Node تحلّه العمليات الفرعية. ما زالت خدمات Linux تحتفظ بجذور بيئة صريحة (NVM_DIR وFNM_DIR وVOLTA_HOME وASDF_DATA_DIR وBUN_INSTALL وPNPM_HOME) وأدلة user-bin مستقرة، لكن أدلة احتياطية مخمّنة لمدير الإصدارات لا تُكتب إلى PATH الخدمة إلا عندما تكون تلك الأدلة موجودة على القرص.18. كتابة الإعدادات + بيانات معالج الإعداد التعريفية
18. كتابة الإعدادات + بيانات معالج الإعداد التعريفية
19. تلميحات مساحة العمل (النسخ الاحتياطي + نظام الذاكرة)
19. تلميحات مساحة العمل (النسخ الاحتياطي + نظام الذاكرة)