- حزمة الاختبار الكاملة (مجموعات الاختبارات، الاختبارات الحية، Docker): الاختبار
- التحقق من التحديثات وحزم Plugin: اختبار التحديثات وPlugins
الإعداد الافتراضي للوكيل
تشغّل جلسات الوكيل الاختبارات وعمليات التحقق كثيفة الحوسبة عن بُعد عبر Crabbox. تستخدم شيفرة المشرفين الموثوقين Blacksmith Testbox افتراضيًا. يقوم سير عمل Testbox المُعدّ بتحميل بيانات الاعتماد، لذلك يجب أن تستخدم شيفرة المساهمين غير الموثوقين أو التفرعات CI للتفرعات بلا أسرار، أو AWS Crabbox المباشر والمُنقّى بدلًا منه. عندما يُرجّح أن تتطلب مهمة شيفرة موثوقة اختبارات أو إثباتًا مكثفًا، ابدأ الإحماء المسبق فورًا في جلسة أوامر تعمل في الخلفية، وواصل العمل أثناء تجهيزها، وأعِد استخدام المعرّفtbx_... المُعاد، وزامن نسخة العمل الحالية في كل تشغيل،
وأوقفها قبل التسليم:
.crabbox/testbox-leases/.
تستمر التعديلات التي تقتصر على المصدر في إعادة استخدام الصندوق المُسخّن. يؤدي تغيّر أساس الدمج أو ملف القفل
أو مدخل مدير الحزم أو الغلاف أو سير عمل Testbox إلى الإخفاق الآمن، ويتطلب
حجزًا جديدًا. وتستمر كل عملية تشغيل في مزامنة نسخة العمل الحالية.
يُخصّص OPENCLAW_TESTBOX_ALLOW_STALE=1 للتشخيص المتعمّد فقط، وليس
لإثبات الإصدار.
أوامر الاختبار المحلية أدناه مخصّصة لسير عمل البشر أو لحالة احتياطية صريحة للوكيل
يطلبها المستخدم. يجب الإبلاغ عن عدم توفر المزوّد البعيد؛ فهذا
لا يمنح إذنًا لتشغيل بوابة تحقق محلية واسعة بصمت.
بالنسبة إلى الشيفرة غير الموثوقة، نفّذ الإحماء المسبق باستخدام --provider aws. يجب أن تضبط كل عملية تشغيل
CRABBOX_ENV_ALLOW=CI، وتمرّر --provider aws --no-hydrate، وتستخدم
مجلد HOME بعيدًا مؤقتًا وجديدًا قبل تثبيت الاعتماديات أو تشغيل
الاختبارات. استخدم حجزًا جديدًا مُسخّنًا ومخصّصًا لذلك المصدر غير الموثوق؛ ولا تُعِد أبدًا استخدام
حجز موثوق أو جرى تحميل بيانات الاعتماد فيه سابقًا. شغّل ملف Crabbox التنفيذي الموثوق والمثبّت
من نسخة main موثوقة ونظيفة، واجلب طلب السحب البعيد فقط باستخدام
--fresh-pr؛ ولا تنفّذ أبدًا غلاف نسخة العمل غير الموثوقة أو إعداداتها محليًا.
ألغِ ضبط CRABBOX_AWS_INSTANCE_PROFILE، وأخفق بأمان ما لم تكن قيمة
aws.instanceProfile المحلولة فارغة. قبل أي تثبيت أو اختبار، استخدم
أدوات موثوقة ذات مسارات مطلقة لفرض رمز IMDSv2، وإثبات أن نقطة نهاية بيانات اعتماد IAM
تعيد 404، والتحقق من أن git rev-parse HEAD البعيد يساوي قيمة SHA الكاملة
لرأس طلب السحب الذي تمت مراجعته. اربط الحجز بقيمة SHA هذه وأوقفه وأعد إحماءه عند تغيّر الرأس.
ارفع scripts/crabbox-untrusted-bootstrap.sh الموثوق من نسخة
main نظيفة إلى جانب --fresh-pr؛ فهو يثبّت إصدارات Node وpnpm المثبّتة،
ويتحقق من SHA وتثبيت إصدار مدير الحزم، ويعزل HOME، ويثبّت الاعتماديات،
ثم ينفّذ الاختبار المطلوب. إذا تعذّر على الوسيط إثبات عدم وجود دور أو عدم وجود طلب سحب بعيد،
فاستخدم CI للتفرعات بلا أسرار. لا تستخدم hydrate-github أو --no-sync أو
سير عمل Testbox محمّلًا ببيانات الاعتماد.
ألغِ ضبط جميع تجاوزات CRABBOX_TAILSCALE*، وافرض --network public --tailscale=false، وامسح أعلام عقدة الخروج/الشبكة المحلية، واشترط أن يفيد crabbox inspect
بوجود شبكة عامة من دون حالة Tailscale قبل رفع أي برنامج نصي.
الترتيب المحلي المعتاد
pnpm test:changedلإثبات Vitest ضمن نطاق التغييرات.pnpm test <path-or-filter>لملف واحد أو دليل أو هدف صريح.pnpm testفقط عندما تحتاج عمدًا إلى مجموعة Vitest المحلية الكاملة.
pnpm test* / pnpm check* / pnpm crabbox:run:
- حالة احتياطية محلية لملف صغير يطلبها المستخدم صراحةً:
node scripts/run-vitest.mjs <path-or-filter>. - بوابات التغييرات أو الإثبات الواسع:
node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox ... -- env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changedلكي يعمل pnpm داخل Testbox. - تمثل قيمة
exitCodeالنهائية للغلاف وبيانات التوقيت بصيغة JSON نتيجة الأمر. قد تظهر عملية Blacksmith GitHub Actions المفوّضة بالحالةcancelledبعد نجاح أمر SSH لأن Testbox يُوقَف من خارج إجراء إبقاء الاتصال؛ تحقّق من ملخص الغلاف ومخرجات الأمر قبل اعتبار ذلك إخفاقًا. OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: يُبقي تسلسل عمليات التحقق الثقيلة داخل شجرة العمل الحالية بدلًا من دليل Git المشترك لأوامر مثلpnpm check:changedوpnpm test ...المستهدف. استخدمه فقط على المضيفات المحلية عالية السعة عندما تشغّل عمدًا عمليات تحقق مستقلة عبر أشجار عمل مرتبطة.
الأوامر الأساسية
تنتهي عمليات تشغيل غلاف الاختبار بملخص قصير[test] passed|failed|skipped ... in ...؛ ويظل سطر المدة الخاص بـ Vitest هو تفاصيل كل شظية.
حالة الاختبار المشتركة ومساعدات العمليات
src/test-utils/openclaw-test-state.ts: استخدمه من Vitest عندما يحتاج الاختبار إلىHOMEأوOPENCLAW_STATE_DIRأوOPENCLAW_CONFIG_PATHأو نموذج إعدادات أو مساحة عمل أو دليل وكيل أو مخزن ملفات تعريف المصادقة، على نحو معزول.pnpm test:env-mutations:report: تقرير غير حاجب للاختبارات/بيئات الاختبار التي تعدّلHOMEأوOPENCLAW_STATE_DIRأوOPENCLAW_CONFIG_PATHأوOPENCLAW_WORKSPACE_DIRأو مفاتيح البيئة المرتبطة بها مباشرةً. استخدمه للعثور على المرشحين للترحيل إلى مساعد حالة الاختبار المشتركة.test/helpers/openclaw-test-instance.ts: لاختبارات E2E على مستوى العملية التي تحتاج إلى Gateway قيد التشغيل وبيئة CLI والتقاط السجلات والتنظيف في مكان واحد.- يمكن لمسارات Docker/Bash الخاصة باختبارات E2E التي تستورد
scripts/lib/docker-e2e-image.shتمريرdocker_e2e_test_state_shell_b64 <label> <scenario>إلى الحاوية وفك ترميزه باستخدامscripts/lib/openclaw-e2e-instance.sh؛ ويمكن للبرامج النصية متعددة الأدلة الرئيسية تمريرdocker_e2e_test_state_function_b64واستدعاءopenclaw_test_state_create <label> <scenario>في كل تدفق. يكتبnode scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonملف بيئة للمضيف يمكن استيراده (تحافظ--قبلcreateعلى عدم تعامل إصدارات Node الأحدث مع--env-fileعلى أنه علم Node). يمكن للمسارات التي تشغّل Gateway استيرادscripts/lib/openclaw-e2e-instance.shلحل نقطة الدخول، وبدء OpenAI الوهمي، والتشغيل في المقدمة/الخلفية، وفحوص الجاهزية، وتصدير بيئة الحالة، وتفريغ السجلات، وتنظيف العمليات.
مسارات واجهة التحكم وTUI والامتدادات
- اختبارات E2E لواجهة التحكم باستخدام محاكاة: يشغّل
pnpm test:ui:e2eمسار Vitest + Playwright الذي يبدأ واجهة تحكم Vite ويتحكم في صفحة Chromium حقيقية مقابل WebSocket محاكى لـ Gateway. توجد الاختبارات فيui/src/**/*.e2e.test.ts، وتوجد عناصر المحاكاة/التحكم المشتركة فيui/src/test-helpers/control-ui-e2e.ts. يتضمنpnpm test:e2eهذا المسار. تستخدم عمليات تشغيل الوكيل Testbox/Crabbox افتراضيًا، بما في ذلك الإثبات المستهدف؛ استخدمnode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tsفقط كخيار احتياطي محلي صريح. - اختبارات TUI PTY: يشغّل
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsمسار PTY السريع ذي الواجهة الخلفية الوهمية. يشغّلOPENCLAW_TUI_PTY_INCLUDE_LOCAL=1أوpnpm tui:pty:test:watch --mode localاختبار الدخان الأبطأ لـtui --local، والذي يحاكي نقطة نهاية النموذج الخارجية فقط. تحقّق من نص مرئي ثابت أو استدعاءات التجهيزات، وليس من لقطات ANSI الأولية. - يشغّل
pnpm test:extensionsوpnpm test extensionsجميع أجزاء الامتدادات/الإضافات. تعمل Plugins القنوات الثقيلة وPlugin المتصفح وOpenAI كأجزاء مخصصة؛ وتبقى مجموعات Plugins الأخرى مجمّعة. يشغّلpnpm test extensions/<id>مسار Plugin مضمّنة واحدة. - تُربط ملفات المصدر التي لها اختبارات شقيقة بذلك الاختبار الشقيق قبل الرجوع إلى أنماط glob أوسع للدليل. تستخدم تعديلات الأدوات المساعدة ضمن
src/channels/plugins/contracts/test-helpersوsrc/plugin-sdk/test-helpersوsrc/plugins/contractsرسمًا بيانيًا محليًا للاستيراد لتشغيل الاختبارات التي تستوردها بدلًا من تشغيل كل جزء على نطاق واسع عندما يكون مسار التبعية دقيقًا. - تتفرع أهداف أدلة العقود إلى مسارات العقود الخاصة بها: يشغّل
pnpm test src/channels/plugins/contractsإعدادات عقود القنوات الأربعة، ويشغّلpnpm test src/plugins/contractsإعداد عقود Plugins، لأن مشروعيchannels/pluginsالعامين يستبعدانcontracts/**. - ينقسم
auto-replyإلى ثلاثة إعدادات مخصصة (coreوtop-levelوreply) كي لا تهيمن أداة اختبار الردود على اختبارات الحالة/الرموز المميزة/الأدوات المساعدة الأخف في المستوى الأعلى. - تُوجَّه ملفات اختبار محددة في
plugin-sdkوcommandsعبر مسارات خفيفة مخصصة لا تُبقي سوىtest/setup.ts، مع إبقاء الحالات كثيفة التشغيل في مساراتها الحالية. - يستخدم إعداد Vitest الأساسي افتراضيًا
pool: "threads"وisolate: false، مع تمكين مشغّل الاختبارات المشترك غير المعزول عبر إعدادات المستودع. - يشغّل
pnpm test:channelsالملفvitest.channels.config.ts.
Gateway واختبارات E2E
- تكامل Gateway اختياري:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testأوpnpm test:gateway. pnpm test:e2e: تجميع اختبارات E2E للمستودع =pnpm test:e2e:gateway && pnpm test:ui:e2e.pnpm test:e2e:gateway: اختبارات دخان شاملة لـ Gateway (إقران WS/HTTP/Node متعدد النُسخ). تستخدم افتراضيًاthreadsمعisolate: falseوعمّالًا متكيفين فيvitest.e2e.config.ts؛ اضبطها باستخدامOPENCLAW_E2E_WORKERS=<n>، وفعّل السجلات التفصيلية باستخدامOPENCLAW_E2E_VERBOSE=1.pnpm test:live: اختبارات مباشرة لموفري الخدمة (Claude/Minimax/DeepSeek/z.ai/إلخ، مقيّدة بالنمط*.live.test.ts). تتطلب مفاتيح API وLIVE=1(أوOPENCLAW_LIVE_TEST=1) لإلغاء التخطي؛ ويمكن تفعيل المخرجات التفصيلية باستخدامOPENCLAW_LIVE_TEST_QUIET=0.
حزمة Docker الكاملة (pnpm test:docker:all)
تبني صورة الاختبارات المباشرة المشتركة، وتحزم OpenClaw مرة واحدة في أرشيف npm، وتبني/تعيد استخدام صورة تشغيل أساسية تتضمن Node/Git وصورة وظيفية تثبّت ذلك الأرشيف في /app، ثم تشغّل مسارات اختبارات الدخان في Docker من خلال مجدول موزون. يمثّل scripts/package-openclaw-for-docker.mjs أداة التحزيم الوحيدة المحلية/الخاصة بالتكامل المستمر، ويتحقق من الأرشيف ومن dist/postinstall-inventory.json قبل أن يستخدمه Docker.
- الصورة الأساسية (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): مسارات المثبّت/التحديث/تبعيات Plugins؛ تُركّب الأرشيف المبني مسبقًا بدلًا من نسخ مصادر المستودع. - الصورة الوظيفية (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): مسارات وظائف التطبيق المبني العادية. - تعريفات المسارات:
scripts/lib/docker-e2e-scenarios.mjs. المخطط:scripts/lib/docker-e2e-plan.mjs. المنفّذ:scripts/test-docker-all.mjs. - يُخرج
node scripts/test-docker-all.mjs --plan-jsonخطة التكامل المستمر التي يملكها المجدول (المسارات، وأنواع الصور، واحتياجات الحزمة/الصورة المباشرة، وسيناريوهات الحالة، وعمليات التحقق من بيانات الاعتماد) دون بناء Docker أو تشغيله.
نمط متغيرات البيئة لحدود الموارد هو
OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (يُحوّل اسم المورد إلى أحرف كبيرة، وتُدمج المحارف غير الأبجدية الرقمية في _).
سلوك آخر: يجري المشغّل فحوصات Docker التمهيدية افتراضيًا، وينظّف حاويات OpenClaw E2E القديمة، ويشارك ذاكرات التخزين المؤقت لأدوات CLI الخاصة بموفّري الخدمة بين المسارات المتوافقة، ويتوقف عن جدولة مسارات مجمّعة جديدة بعد أول فشل ما لم يُضبط OPENCLAW_DOCKER_ALL_FAIL_FAST=0. إذا تجاوز أحد المسارات الحد الفعلي للوزن/الموارد على مضيف منخفض التوازي، فلا يزال بإمكانه البدء من تجمّع فارغ والعمل منفردًا حتى يحرر السعة. تُكتب سجلات كل مسار وsummary.json وfailures.json وتوقيتات المراحل ضمن .artifacts/docker-tests/<run-id>/؛ استخدم pnpm test:docker:timings <summary.json> لفحص المسارات البطيئة، وpnpm test:docker:rerun <run-id|summary.json|failures.json> لطباعة أوامر إعادة تشغيل موجّهة ومنخفضة التكلفة.
مسارات Docker البارزة
بوابة طلب السحب المحلية
لفحوصات اعتماد/بوابة طلب السحب المحلية، شغّل:pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
pnpm test بشكل متقطع على مضيف محمّل، فأعد تشغيله مرة واحدة قبل اعتباره تراجعًا، ثم اعزل المشكلة باستخدام pnpm test <path/to/test>. للمضيفين محدودي الذاكرة:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
أدوات أداء الاختبارات
- يفعّل
pnpm test:perf:importsإعداد تقارير مدة الاستيراد وتفاصيله في Vitest، مع الاستمرار في استخدام توجيه المسارات المحددة للأهداف الصريحة من الملفات/الأدلة. ويحصرpnpm test:perf:imports:changedالتحليل نفسه في الملفات التي تغيرت منذorigin/main. - يقيس
pnpm test:perf:changed:bench -- --ref <git-ref>أداء مسار الوضع المتغير الموجّه مقارنةً بالتشغيل الأصلي للمشروع الجذري لنفس فرق git المُثبَت؛ بينما يقيسpnpm test:perf:changed:bench -- --worktreeأداء مجموعة تغييرات شجرة العمل الحالية من دون تثبيتها أولًا. - يكتب
pnpm test:perf:profile:mainملف تعريف CPU لخيط Vitest الرئيسي (.artifacts/vitest-main-profile)؛ ويكتبpnpm test:perf:profile:runnerملفات تعريف CPU والذاكرة الديناميكية لمشغّل اختبارات الوحدة (.artifacts/vitest-runner-profile). - يشغّل
pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.jsonكل إعداد فرعي لمجموعة Vitest الكاملة تسلسليًا، ويكتب بيانات المدة المجمعة، بالإضافة إلى عناصر JSON/السجل لكل إعداد. تعزل تقارير المجموعة الكاملة الملفات افتراضيًا، كي لا تُحتسب مخططات الوحدات المحتفظ بها وتوقفات GC الناتجة من الملفات السابقة على التأكيدات اللاحقة؛ ولا تمرّر-- --no-isolateإلا عند تحليل تراكم العامل المشترك عمدًا. يستخدم وكيل أداء الاختبارات هذا خطًا أساسًا قبل محاولة إصلاح الاختبارات البطيئة. يقارنpnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonالتقارير المجمعة بعد تغيير يركز على الأداء. - تحدّث عمليات تشغيل الأجزاء الكاملة وأجزاء الإضافات وأجزاء نمط التضمين بيانات التوقيت المحلية في
.artifacts/vitest-shard-timings.json؛ وتستخدم عمليات التشغيل اللاحقة للإعداد الكامل تلك التوقيتات لموازنة الأجزاء البطيئة والسريعة. تُلحق أجزاء CI ذات نمط التضمين اسم الجزء بمفتاح التوقيت، ما يُبقي توقيتات الأجزاء المرشّحة ظاهرة من دون استبدال بيانات توقيت الإعداد الكامل. عيّنOPENCLAW_TEST_PROJECTS_TIMINGS=0لتجاهل عنصر التوقيت المحلي.
قياسات الأداء
زمن استجابة النموذج (scripts/bench-model.ts)
زمن استجابة النموذج (scripts/bench-model.ts)
MINIMAX_API_KEY، وMINIMAX_BASE_URL، وMINIMAX_MODEL، وANTHROPIC_API_KEY. الموجّه الافتراضي: «أجب بكلمة واحدة: ok. من دون علامات ترقيم أو نص إضافي.»بدء تشغيل CLI (scripts/bench-cli-startup.ts)
بدء تشغيل CLI (scripts/bench-cli-startup.ts)
startup:--version، و--help، وhealth، وhealth --json، وstatus --json، وstatusreal:health، وstatus، وstatus --json، وsessions، وsessions --json، وtasks --json، وtasks list --json، وtasks audit --json، وagents list --json، وgateway status، وgateway status --json، وgateway health --json، وconfig get gateway.portall: الإعدادان المسبقان معًا
sampleCount، والمتوسط، وp50، وp95، والقيمة الدنيا/العليا، وتوزيع رمز الخروج/الإشارة، والحد الأقصى لـRSS لكل أمر. يكتب --cpu-prof-dir / --heap-prof-dir ملفات تعريف V8 لكل تشغيل.الناتج المحفوظ: يكتب pnpm test:startup:bench:smoke إلى .artifacts/cli-startup-bench-smoke.json؛ ويكتب pnpm test:startup:bench:save إلى .artifacts/cli-startup-bench-all.json (runs=5 warmup=1). التثبيت المُدرج في المستودع: test/fixtures/cli-startup-bench.json، ويُحدَّث بواسطة pnpm test:startup:bench:update، وتُجرى مقارنته بواسطة pnpm test:startup:bench:check.بدء تشغيل Gateway (scripts/bench-gateway-startup.ts)
بدء تشغيل Gateway (scripts/bench-gateway-startup.ts)
يستخدم افتراضيًا مدخل CLI المبني في معرّفات الحالات:
dist/entry.js؛ شغّل pnpm build أولًا. مرّر --entry scripts/run-node.mjs لقياس مشغّل المصدر بدلًا منه، وأبقِ تلك النتائج منفصلة عن الخطوط الأساسية للمدخل المبني.default، وskipChannels (يُتخطى بدء تشغيل القنوات)، وoneInternalHook، وallInternalHooks، وfiftyPlugins (50 Plugin من بيان التعريف)، وfiftyStartupLazyPlugins (50 Plugin من بيان التعريف بتحميل كسول عند بدء التشغيل).يتضمن الناتج أول ناتج للعملية، و/healthz، و/readyz، ووقت سجل استماع HTTP، ووقت سجل جاهزية Gateway، ووقت CPU، ونسبة نواة CPU، والحد الأقصى لـRSS، والذاكرة الديناميكية، ومقاييس تتبع بدء التشغيل، وتأخير حلقة الأحداث، ومقاييس تفاصيل جدول البحث الخاص بالـPlugin. يعيّن البرنامج النصي OPENCLAW_GATEWAY_STARTUP_TRACE=1 في بيئة Gateway الفرعية.يمثل /healthz حالة التشغيل (يمكن لخادم HTTP الرد). ويمثل /readyz الجاهزية للاستخدام (استقرت العمليات الجانبية للـPlugin عند بدء التشغيل، والقنوات، والأعمال الحرجة للجاهزية التي تلي الإرفاق). تُرسل خطافات بدء التشغيل بشكل غير متزامن ولا تشكل جزءًا من ضمان الجاهزية. وقت سجل الجاهزية هو الطابع الزمني الداخلي لـGateway، وهو مفيد لإسناد الوقت إلى العملية، لكنه ليس بديلًا عن فحص /readyz الخارجي.استخدم ناتج JSON أو --output عند مقارنة التغييرات. ولا تستخدم --cpu-prof-dir إلا بعد أن يشير ناتج التتبع إلى أعمال استيراد أو ترجمة برمجية أو أعمال مقيّدة بالـCPU لا تستطيع توقيتات المراحل وحدها تفسيرها.إعادة تشغيل Gateway (scripts/bench-gateway-restart.ts)
إعادة تشغيل Gateway (scripts/bench-gateway-restart.ts)
لنظامي macOS وLinux فقط (يستخدم SIGUSR1 لإعادة التشغيل داخل العملية؛ ويفشل فورًا على Windows). يستخدم الإعداد الافتراضي نفسه للمدخل المبني، وخيار التجاوز معرّفات الحالات:
--entry scripts/run-node.mjs نفسه المستخدم في بدء تشغيل Gateway أعلاه.skipChannels، وskipChannelsAcpxProbe (فحص بدء تشغيل ACPX مفعّل)، وskipChannelsNoAcpxProbe (الفحص معطّل)، وdefault، وfiftyPlugins.يتضمن الناتج حالة /healthz التالية، وحالة /readyz التالية، ومدة التوقف، وتوقيت الجاهزية بعد إعادة التشغيل، وCPU، وRSS، ومقاييس تتبع بدء تشغيل العملية البديلة، ومقاييس تتبع إعادة التشغيل لمعالجة الإشارة، وانتظار انتهاء العمل النشط، ومراحل الإغلاق، وبدء التشغيل التالي، وتوقيت الجاهزية، ولقطات الذاكرة. يعيّن البرنامج النصي OPENCLAW_GATEWAY_STARTUP_TRACE=1 وOPENCLAW_GATEWAY_RESTART_TRACE=1.استخدم مقياس الأداء هذا عندما يمس تغييرٌ ما إشارات إعادة التشغيل، أو معالجات الإغلاق، أو بدء التشغيل بعد إعادة التشغيل، أو إيقاف العمليات الجانبية، أو تسليم الخدمة، أو الجاهزية بعد إعادة التشغيل. ابدأ بـskipChannels لعزل آليات Gateway عن بدء تشغيل القنوات؛ ولا تستخدم default أو الحالات كثيفة الـPlugin إلا بعد أن تفسّر الحالة المحدودة مسار إعادة التشغيل. مقاييس التتبع تلميحات للإسناد وليست أحكامًا — قيّم تغيير إعادة التشغيل باستخدام عينات متعددة، ونطاق المالك المطابق، وسلوك /healthz//readyz، وعقد إعادة التشغيل الظاهر للمستخدم.الاختبار الشامل للتأهيل (Docker)
اختياري؛ ولا يلزم إلا لاختبارات الدخان للتأهيل داخل الحاويات. تدفق بدء التشغيل البارد الكامل داخل حاوية Linux نظيفة:openclaw health.