Release and CI
الاختبارات
-
حزمة الاختبار الكاملة (مجموعات الاختبارات، المباشر، Docker): الاختبار
-
التحقق من صحة التحديثات وحزمة Plugin: اختبار التحديثات وPlugins
-
pnpm test:force: يقتل أي عملية Gateway متبقية تحتجز منفذ التحكم الافتراضي، ثم يشغّل مجموعة Vitest الكاملة مع منفذ Gateway معزول كي لا تتصادم اختبارات الخادم مع مثيل قيد التشغيل. استخدم هذا عندما تترك عملية Gateway سابقة المنفذ 18789 مشغولًا. -
pnpm test:coverage: يشغّل مجموعة اختبارات الوحدة مع تغطية V8 (عبرvitest.unit.config.ts). هذا حاجز تغطية لمسار الوحدة الافتراضي، وليس تغطية لكل ملفات المستودع كله. الحدود الدنيا هي 70% للأسطر/الدوال/العبارات و55% للفروع. لأنcoverage.allيساوي false ومسار التغطية الافتراضي يقيّد نطاق التضمين إلى اختبارات الوحدة غير السريعة ذات ملفات المصدر الشقيقة، فإن الحاجز يقيس المصدر المملوك لهذا المسار بدلًا من كل استيراد عابر يصادف تحميله. -
pnpm test:coverage:changed: يشغّل تغطية الوحدة فقط للملفات التي تغيرت منذorigin/main. -
pnpm test:changed: تشغيل اختبار تغييرات ذكي ورخيص. يشغّل أهدافًا دقيقة من تعديلات الاختبارات المباشرة، وملفات*.test.tsالشقيقة، وتعيينات المصدر الصريحة، ومخطط الاستيراد المحلي. يتم تخطي تغييرات النطاق الواسع/الإعدادات/الحزم ما لم تُعيّن إلى اختبارات دقيقة. -
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed: تشغيل اختبار تغييرات واسع وصريح. استخدمه عندما ينبغي لتعديل في عدة الاختبار/الإعدادات/الحزمة أن يرجع إلى سلوك Vitest الأوسع لاختبارات التغييرات. -
pnpm changed:lanes: يعرض المسارات المعمارية التي يفعّلها الفرق مقابلorigin/main. -
pnpm check:changed: يشغّل حاجز الفحص الذكي للتغييرات للفرق مقابلorigin/main. يشغّل أوامر فحص الأنواع والـ lint والحراسة للمسارات المعمارية المتأثرة، لكنه لا يشغّل اختبارات Vitest. استخدمpnpm test:changedأوpnpm test <target>الصريح لإثبات الاختبارات. -
pnpm test: يوجّه أهداف الملفات/الأدلة الصريحة عبر مسارات Vitest محددة النطاق. تستخدم التشغيلات غير المستهدفة مجموعات تقسيم ثابتة وتتوسع إلى إعدادات طرفية للتنفيذ المتوازي المحلي؛ وتتوسع مجموعة الإضافات دائمًا إلى إعدادات التقسيم لكل إضافة بدلًا من عملية مشروع جذر واحدة ضخمة. -
تنتهي تشغيلات مغلف الاختبار بملخص قصير بصيغة
[test] passed|failed|skipped ... in .... يبقى سطر مدة Vitest نفسه كتفصيل لكل تقسيم. -
حالة اختبار OpenClaw المشتركة: استخدم
src/test-utils/openclaw-test-state.tsمن Vitest عندما يحتاج الاختبار إلىHOMEمعزول، أوOPENCLAW_STATE_DIR، أوOPENCLAW_CONFIG_PATH، أو نموذج إعدادات، أو مساحة عمل، أو دليل وكيل، أو مخزن ملف تعريف مصادقة. -
مساعدين E2E للعمليات: استخدم
test/helpers/openclaw-test-instance.tsعندما يحتاج اختبار E2E على مستوى عملية Vitest إلى Gateway قيد التشغيل، وبيئة CLI، والتقاط سجلات، وتنظيف في مكان واحد. -
مساعدين E2E لـ Docker/Bash: يمكن للمسارات التي تستورد
scripts/lib/docker-e2e-image.shتمريرdocker_e2e_test_state_shell_b64 <label> <scenario>إلى الحاوية وفك ترميزه باستخدامscripts/lib/openclaw-e2e-instance.sh؛ ويمكن للنصوص متعددة الـ home تمريرdocker_e2e_test_state_function_b64واستدعاءopenclaw_test_state_create <label> <scenario>في كل تدفق. يمكن للمتصلين ذوي المستوى الأدنى استخدامscripts/lib/openclaw-test-state.mjs shell --label <name> --scenario <name>لمقتطف shell داخل الحاوية، أوnode scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonلملف بيئة مضيف قابل للاستيراد. تحافظ--قبلcreateعلى ألا تعامل أوقات تشغيل Node الأحدث--env-fileكعلم Node. يمكن لمسارات Docker/Bash التي تطلق Gateway استيرادscripts/lib/openclaw-e2e-instance.shداخل الحاوية لحل نقطة الدخول، وبدء OpenAI وهمي، وتشغيل Gateway في المقدمة/الخلفية، ومجسات الجاهزية، وتصدير بيئة الحالة، وتفريغ السجلات، وتنظيف العمليات. -
تحدّث تشغيلات التقسيم الكاملة، والإضافات، وأنماط التضمين بيانات التوقيت المحلية في
.artifacts/vitest-shard-timings.json؛ وتستخدم التشغيلات اللاحقة لكامل الإعدادات هذه التوقيتات لموازنة التقسيمات البطيئة والسريعة. تضيف تقسيمات CI ذات نمط التضمين اسم التقسيم إلى مفتاح التوقيت، مما يبقي توقيتات التقسيمات المفلترة مرئية من دون استبدال بيانات توقيت كامل الإعدادات. عيّنOPENCLAW_TEST_PROJECTS_TIMINGS=0لتجاهل أداة التوقيت المحلية. -
تُوجّه ملفات اختبارات
plugin-sdkوcommandsالمحددة الآن عبر مسارات خفيفة مخصصة لا تبقي إلاtest/setup.ts، مع إبقاء الحالات الثقيلة وقت التشغيل على مساراتها الحالية. -
تُعيّن ملفات المصدر ذات الاختبارات الشقيقة إلى ذلك الشقيق قبل الرجوع إلى أنماط أدلة أوسع. تستخدم تعديلات المساعدين تحت
src/channels/plugins/contracts/test-helpers، وsrc/plugin-sdk/test-helpers، وsrc/plugins/contractsمخطط استيراد محليًا لتشغيل الاختبارات المستورِدة بدلًا من تشغيل كل تقسيم على نطاق واسع عندما يكون مسار الاعتمادية دقيقًا. -
ينقسم
auto-replyالآن أيضًا إلى ثلاثة إعدادات مخصصة (core، وtop-level، وreply) حتى لا تهيمن عدة الرد على اختبارات الحالة/الرموز/المساعدين الأخف في المستوى الأعلى. -
أصبح إعداد Vitest الأساسي افتراضيًا إلى
pool: "threads"وisolate: false، مع تمكين المشغّل المشترك غير المعزول عبر إعدادات المستودع. -
pnpm test:channelsيشغّلvitest.channels.config.ts. -
pnpm test:extensionsوpnpm test extensionsيشغّلان كل تقسيمات الإضافات/Plugin. تعمل إضافات القنوات الثقيلة، وPlugin المتصفح، وOpenAI كتقسيمات مخصصة؛ وتبقى مجموعات Plugin الأخرى مجمعة. استخدمpnpm test extensions/<id>لمسار Plugin مضمّن واحد. -
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يقيس أداء مجموعة تغييرات worktree الحالية من دون الالتزام أولًا. -
pnpm test:perf:profile:main: يكتب ملف تعريف CPU للخيط الرئيسي في Vitest (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: يكتب ملفات تعريف CPU + heap لمشغّل الوحدة (.artifacts/vitest-runner-profile). -
pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: يشغّل كل إعدادات Vitest الطرفية للمجموعة الكاملة تسلسليًا ويكتب بيانات المدة المجمعة إضافة إلى ملفات JSON/السجلات لكل إعداد. يستخدم Test Performance Agent هذا كخط أساس قبل محاولة إصلاح الاختبارات البطيئة. -
pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json: يقارن التقارير المجمعة بعد تغيير يركز على الأداء. -
تكامل Gateway: الاشتراك عبر
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testأوpnpm test:gateway. -
pnpm test:e2e: يشغّل اختبارات دخان Gateway من طرف إلى طرف (إقران متعدد المثيلات عبر WS/HTTP/node). الافتراضي هوthreads+isolate: falseمع عمال تكيفيين فيvitest.e2e.config.ts؛ اضبطه باستخدامOPENCLAW_E2E_WORKERS=<n>وعيّنOPENCLAW_E2E_VERBOSE=1للسجلات المفصلة. -
pnpm test:live: يشغّل اختبارات المزود الحية (minimax/zai). يتطلب مفاتيح API وLIVE=1(أو*_LIVE_TEST=1الخاص بالمزود) لإلغاء التخطي. -
pnpm test:docker:all: يبني صورة الاختبار الحي المشتركة، ويحزم OpenClaw مرة واحدة كحزمة npm tarball، ويبني/يعيد استخدام صورة مشغّل Node/Git عارية إضافة إلى صورة وظيفية تثبّت تلك الحزمة في/app، ثم يشغّل مسارات دخان Docker معOPENCLAW_SKIP_DOCKER_BUILD=1عبر مجدول موزون. تُستخدم الصورة العارية (OPENCLAW_DOCKER_E2E_BARE_IMAGE) لمسارات المثبّت/التحديث/اعتماديات Plugin؛ وتربط تلك المسارات حزمة tarball المبنية مسبقًا بدلًا من استخدام مصادر المستودع المنسوخة. تُستخدم الصورة الوظيفية (OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE) لمسارات وظائف التطبيق المبني العادية.scripts/package-openclaw-for-docker.mjsهو حازم الحزم المحلي/CI الوحيد ويتحقق من tarball إضافة إلىdist/postinstall-inventory.jsonقبل أن يستهلكها Docker. تعيش تعريفات مسارات Docker في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خطة CI المملوكة للمجدول للمسارات المحددة، وأنواع الصور، واحتياجات الحزمة/الصورة الحية، وسيناريوهات الحالة، وفحوصات بيانات الاعتماد من دون بناء Docker أو تشغيله. يتحكمOPENCLAW_DOCKER_ALL_PARALLELISM=<n>في خانات العمليات ويكون افتراضيًا 10؛ ويتحكمOPENCLAW_DOCKER_ALL_TAIL_PARALLELISM=<n>في تجمع الذيل الحساس للمزود ويكون افتراضيًا 10. تكون حدود المسارات الثقيلة افتراضيًاOPENCLAW_DOCKER_ALL_LIVE_LIMIT=9، وOPENCLAW_DOCKER_ALL_NPM_LIMIT=10، وOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7؛ وتكون حدود المزود افتراضيًا مسارًا ثقيلًا واحدًا لكل مزود عبرOPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT=4، وOPENCLAW_DOCKER_ALL_LIVE_CODEX_LIMIT=4، وOPENCLAW_DOCKER_ALL_LIVE_GEMINI_LIMIT=4. استخدمOPENCLAW_DOCKER_ALL_WEIGHT_LIMITأوOPENCLAW_DOCKER_ALL_DOCKER_LIMITللمضيفين الأكبر. إذا تجاوز مسار واحد حد الوزن أو المورد الفعلي على مضيف منخفض التوازي، فما زال بإمكانه البدء من تجمع فارغ وسيعمل وحده حتى يحرر السعة. يتم تدرج بدايات المسارات بمقدار ثانيتين افتراضيًا لتجنب عواصف إنشاء Docker daemon محليًا؛ تجاوز ذلك باستخدامOPENCLAW_DOCKER_ALL_START_STAGGER_MS=<ms>. يجري المشغّل فحص Docker تمهيديًا افتراضيًا، وينظف حاويات E2E القديمة لـ OpenClaw، ويصدر حالة المسارات النشطة كل 30 ثانية، ويشارك ذاكرات التخزين المؤقت لأدوات CLI الخاصة بالمزود بين المسارات المتوافقة، ويعيد محاولة إخفاقات المزود الحي العابرة مرة واحدة افتراضيًا (OPENCLAW_DOCKER_ALL_LIVE_RETRIES=<n>)، ويخزن توقيتات المسارات في.artifacts/docker-tests/lane-timings.jsonللترتيب من الأطول أولًا في التشغيلات اللاحقة. استخدمOPENCLAW_DOCKER_ALL_DRY_RUN=1لطباعة بيان المسارات من دون تشغيل Docker، أوOPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS=<ms>لضبط خرج الحالة، أوOPENCLAW_DOCKER_ALL_TIMINGS=0لتعطيل إعادة استخدام التوقيتات. استخدمOPENCLAW_DOCKER_ALL_LIVE_MODE=skipللمسارات الحتمية/المحلية فقط أوOPENCLAW_DOCKER_ALL_LIVE_MODE=onlyلمسارات المزود الحي فقط؛ وأسماء الحزم البديلة هيpnpm test:docker:local:allوpnpm test:docker:live:all. يدمج وضع live-only مسارات live الرئيسية والذيلية في تجمع واحد مرتب من الأطول أولًا حتى تتمكن حاويات المزود من تعبئة عمل Claude وCodex وGemini معًا. يتوقف المشغّل عن جدولة مسارات مجمعة جديدة بعد أول إخفاق ما لم يتم تعيينOPENCLAW_DOCKER_ALL_FAIL_FAST=0، ولكل مسار مهلة احتياطية مدتها 120 دقيقة يمكن تجاوزها باستخدامOPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS؛ تستخدم مسارات live/tail المحددة حدودًا أكثر صرامة لكل مسار. لأوامر إعداد Docker الخلفية الخاصة بـ CLI مهلة خاصة بها عبرOPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS(الافتراضي 180). تُكتب سجلات كل مسار، و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>لطباعة أوامر إعادة تشغيل مستهدفة ورخيصة. -
pnpm test:docker:browser-cdp-snapshot: يبني حاوية E2E مصدرية مدعومة بـ Chromium، ويبدأ CDP خامًا إضافة إلى Gateway معزول، ويشغّلbrowser doctor --deep، ويتحقق من أن لقطات أدوار CDP تتضمن عناوين URL للروابط، والعناصر القابلة للنقر المرقاة بالمؤشر، ومراجع iframe، وبيانات تعريف الإطار. -
يمكن تشغيل مجسات Docker الحية للخلفية الخاصة بـ CLI كمسارات مركزة، مثل
pnpm test:docker:live-cli-backend:codex، أوpnpm test:docker:live-cli-backend:codex:resume، أوpnpm test:docker:live-cli-backend:codex:mcp. لدى Claude وGemini أسماء بديلة مطابقة لـ:resumeو:mcp. -
pnpm test:docker:openwebui: يبدأ OpenClaw + Open WebUI داخل Docker، ويسجّل الدخول عبر Open WebUI، ويتحقق من/api/models، ثم يشغّل محادثة حقيقية عبر الوكيل من خلال/api/chat/completions. يتطلب مفتاح نموذج حيًا صالحًا للاستخدام (مثل OpenAI في~/.profile)، ويسحب صورة Open WebUI خارجية، ولا يُتوقع أن يكون ثابتًا في CI مثل مجموعات اختبارات الوحدة/e2e العادية. -
pnpm test:docker:mcp-channels: يبدأ حاوية Gateway مزروعة البيانات وحاوية عميل ثانية تُشغّلopenclaw mcp serve، ثم يتحقق من اكتشاف المحادثات الموجّهة، وقراءة النصوص، وبيانات تعريف المرفقات، وسلوك طابور الأحداث الحية، وتوجيه الإرسال الصادر، وإشعارات القناة + الأذونات بأسلوب Claude عبر جسر stdio الحقيقي. يقرأ تأكيد إشعار Claude إطارات stdio MCP الخام مباشرةً بحيث يعكس اختبار الدخان ما يصدره الجسر فعليًا. -
pnpm test:docker:upgrade-survivor: يثبّت حزمة OpenClaw tarball المعبأة فوق نموذج مستخدم قديم متّسخ، ويشغّل تحديث الحزمة ثم doctor غير تفاعلي من دون مفاتيح موفّر أو قناة حية، ثم يبدأ Gateway عبر local loopback ويتحقق من بقاء الوكلاء، وإعدادات القنوات، وقوائم السماح للـ Plugin، وملفات مساحة العمل/الجلسة، وحالة تبعيات Plugin القديمة المتقادمة، وبدء التشغيل، وحالة RPC. -
pnpm test:docker:published-upgrade-survivor: يثبّتopenclaw@latestافتراضيًا، ويزرع ملفات مستخدم موجودة واقعية من دون مفاتيح موفّر أو قناة حية، ويهيئ خط الأساس هذا باستخدام وصفة أمرopenclaw config setمضمّنة، ويحدّث ذلك التثبيت المنشور إلى حزمة OpenClaw tarball المعبأة، ويشغّل doctor غير تفاعلي، ويكتب.artifacts/upgrade-survivor/summary.json، ثم يبدأ Gateway عبر local loopback ويتحقق من أن النوايا المهيأة، وملفات مساحة العمل/الجلسة، وإعدادات Plugin المتقادمة وحالة التبعيات القديمة، وبدء التشغيل، و/healthz، و/readyz، وحالة RPC تبقى أو تُصلح بشكل نظيف. تجاوز خط أساس واحدًا باستخدامOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC، أو وسّع مصفوفة محلية دقيقة باستخدامOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECSمثل[email protected] [email protected] [email protected]، أو أضف نماذج سيناريو باستخدامOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues؛ تتضمن مجموعة reported-issuesconfigured-plugin-installsللتحقق من أن OpenClaw plugins الخارجية المهيأة تُثبّت تلقائيًا أثناء الترقية، وstale-source-plugin-shadowلمنع ظلال Plugin المصدرية فقط من كسر بدء التشغيل. يعرّض Package Acceptance هذه القيم باسمpublished_upgrade_survivor_baselineوpublished_upgrade_survivor_baselinesوpublished_upgrade_survivor_scenarios، ويحل رموز خط الأساس الوصفية مثلlast-stable-4أوall-since-2026.4.23قبل تسليم مواصفات الحزم الدقيقة إلى مسارات Docker. -
pnpm test:docker:update-migration: يشغّل عُدّة published-upgrade survivor في سيناريوplugin-deps-cleanupكثيف التنظيف، بدءًا من[email protected]افتراضيًا. يوسّع سير عملUpdate Migrationالمنفصل هذا المسار باستخدامbaselines=all-since-2026.4.23بحيث تُحدّث كل حزمة مستقرة منشورة منذ.23فصاعدًا إلى المرشح وتثبت تنظيف تبعيات Plugin المهيأة خارج Full Release CI. -
pnpm test:docker:plugins: يشغّل اختبار دخان للتثبيت/التحديث للمسار المحلي، وfile:، وحزم سجل npm ذات التبعيات المرفوعة، ومراجع git المتحركة، ونماذج ClawHub، وتحديثات السوق، وتمكين/فحص حزمة Claude.
بوابة PR المحلية
لفحوصات إنزال/بوابة PR المحلية، شغّل:
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
معيار زمن استجابة النموذج (مفاتيح محلية)
السكربت: scripts/bench-model.ts
الاستخدام:
source ~/.profile && pnpm tsx scripts/bench-model.ts --runs 10- بيئة اختيارية:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - المطالبة الافتراضية: "ردّ بكلمة واحدة: ok. بدون علامات ترقيم أو نص إضافي."
آخر تشغيل (2025-12-31، 20 تشغيلاً):
- الوسيط minimax 1279ms (الحد الأدنى 1114، الحد الأقصى 2431)
- الوسيط opus 2454ms (الحد الأدنى 1224، الحد الأقصى 3170)
معيار بدء تشغيل CLI
السكربت: scripts/bench-cli-startup.ts
الاستخدام:
pnpm test:startup:benchpnpm test:startup:bench:smokepnpm test:startup:bench:savepnpm test:startup:bench:updatepnpm test:startup:bench:checkpnpm tsx scripts/bench-cli-startup.tspnpm tsx scripts/bench-cli-startup.ts --runs 12pnpm tsx scripts/bench-cli-startup.ts --preset realpnpm tsx scripts/bench-cli-startup.ts --preset real --case status --case gatewayStatus --runs 3pnpm tsx scripts/bench-cli-startup.ts --preset real --case tasksJson --case tasksListJson --case tasksAuditJson --runs 3pnpm tsx scripts/bench-cli-startup.ts --entry openclaw.mjs --entry-secondary dist/entry.js --preset allpnpm tsx scripts/bench-cli-startup.ts --preset all --output .artifacts/cli-startup-bench-all.jsonpnpm tsx scripts/bench-cli-startup.ts --preset real --case gatewayStatusJson --output .artifacts/cli-startup-bench-smoke.jsonpnpm tsx scripts/bench-cli-startup.ts --preset real --cpu-prof-dir .artifacts/cli-cpupnpm tsx scripts/bench-cli-startup.ts --json
الإعدادات المسبقة:
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 - يحدّث
pnpm test:startup:bench:updateملف الأساس المضمّن في المستودع عندtest/fixtures/cli-startup-bench.jsonباستخدامruns=5وwarmup=1
الملف المضمّن في المستودع:
test/fixtures/cli-startup-bench.json- حدّثه باستخدام
pnpm test:startup:bench:update - قارن النتائج الحالية مع الملف باستخدام
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker اختياري؛ وهذا مطلوب فقط لاختبارات الدخان الخاصة بالإعداد الأولي ضمن الحاويات.
تدفق بدء بارد كامل في حاوية Linux نظيفة:
scripts/e2e/onboard-docker.sh
يقود هذا السكربت المعالج التفاعلي عبر طرفية زائفة، ويتحقق من ملفات الإعداد/مساحة العمل/الجلسة، ثم يبدأ Gateway ويشغّل openclaw health.
اختبار دخان استيراد QR (Docker)
يتأكد من تحميل مساعد وقت تشغيل QR المعتمد ضمن بيئات تشغيل Docker Node المدعومة (Node 24 افتراضيًا، وNode 22 متوافق):
pnpm test:docker:qr