Release and CI
آزمونها
-
کیت کامل آزمون (مجموعهها، زنده، Docker): آزمون
-
اعتبارسنجی بهروزرسانی و بسته Plugin: آزمون بهروزرسانیها و Plugin
-
pnpm test:force: هر فرایند Gateway باقیماندهای را که پورت کنترل پیشفرض را نگه داشته باشد میکشد، سپس مجموعهٔ کامل Vitest را با یک پورت Gateway ایزوله اجرا میکند تا تستهای سرور با نمونهٔ در حال اجرا تداخل نداشته باشند. وقتی اجرای قبلی Gateway پورت 18789 را اشغال کرده است از این استفاده کنید. -
pnpm test:coverage: مجموعهٔ واحد را با پوشش V8 اجرا میکند (از طریقvitest.unit.config.ts). این یک گیت پوشش مسیر پیشفرض واحد است، نه پوشش همهٔ فایلهای کل مخزن. آستانهها برای خطها/تابعها/دستورها 70% و برای شاخهها 55% هستند. چونcoverage.allبرابر false است و مسیر پیشفرض، پوشش را به تستهای واحد غیرسریع با فایلهای منبع همنشین محدود میکند، گیت بهجای هر import گذرایی که اتفاقا بارگذاری میشود، منبع متعلق به این مسیر را اندازهگیری میکند. -
pnpm test:coverage:changed: پوشش واحد را فقط برای فایلهایی اجرا میکند که از زمانorigin/mainتغییر کردهاند. -
pnpm test:changed: اجرای ارزان تست تغییرات هوشمند. هدفهای دقیق را از ویرایش مستقیم تستها، فایلهای همنشین*.test.ts، نگاشتهای صریح منبع و گراف import محلی اجرا میکند. تغییرات گسترده/پیکربندی/بسته نادیده گرفته میشوند مگر اینکه به تستهای دقیق نگاشت شوند. -
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed: اجرای صریح و گستردهٔ تست تغییرات. وقتی ویرایش چارچوب تست/پیکربندی/بسته باید به رفتار گستردهتر تست تغییرات Vitest برگردد از این استفاده کنید. -
pnpm changed:lanes: مسیرهای معماری فعالشده توسط diff نسبت بهorigin/mainرا نشان میدهد. -
pnpm check:changed: گیت بررسی تغییرات هوشمند را برای diff نسبت بهorigin/mainاجرا میکند. برای مسیرهای معماری تحت تأثیر، typecheck، lint و فرمانهای نگهبان را اجرا میکند، اما تستهای Vitest را اجرا نمیکند. برای اثبات تست ازpnpm test:changedیاpnpm test <target>صریح استفاده کنید. -
pnpm test: هدفهای صریح فایل/دایرکتوری را از مسیرهای محدودهدار Vitest عبور میدهد. اجراهای بدون هدف از گروههای شارد ثابت استفاده میکنند و برای اجرای موازی محلی به پیکربندیهای برگ گسترش مییابند؛ گروه extension همیشه بهجای یک فرایند عظیم پروژهٔ ریشه، به پیکربندیهای شارد هر extension گسترش مییابد. -
اجراهای پوشش تست با خلاصهٔ کوتاه
[test] passed|failed|skipped ... in ...پایان مییابند. خط مدتزمان خود Vitest بهعنوان جزئیات هر شارد باقی میماند. -
وضعیت تست مشترک OpenClaw: وقتی یک تست به
HOME،OPENCLAW_STATE_DIR،OPENCLAW_CONFIG_PATH، fixture پیکربندی، workspace، دایرکتوری agent یا فروشگاه auth-profile ایزوله نیاز دارد، از Vitest ازsrc/test-utils/openclaw-test-state.tsاستفاده کنید. -
کمککنندههای E2E فرایند: وقتی یک تست E2E در سطح فرایند Vitest به یک Gateway در حال اجرا، محیط CLI، ضبط log و پاکسازی در یک جا نیاز دارد، از
test/helpers/openclaw-test-instance.tsاستفاده کنید. -
کمککنندههای E2E Docker/Bash: مسیرهایی که
scripts/lib/docker-e2e-image.shرا source میکنند میتوانندdocker_e2e_test_state_shell_b64 <label> <scenario>را به کانتینر بدهند و آن را باscripts/lib/openclaw-e2e-instance.shdecode کنند؛ اسکریپتهای چندخانهای میتوانندdocker_e2e_test_state_function_b64را بدهند و در هر جریانopenclaw_test_state_create <label> <scenario>را فراخوانی کنند. فراخوانهای سطح پایینتر میتوانند برای یک snippet پوستهٔ داخل کانتینر ازscripts/lib/openclaw-test-state.mjs shell --label <name> --scenario <name>، یا برای یک فایل محیط host قابل source ازnode scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonاستفاده کنند.--پیش ازcreateباعث میشود runtimeهای جدیدتر Node،--env-fileرا بهعنوان flag Node در نظر نگیرند. مسیرهای Docker/Bash که Gateway راهاندازی میکنند میتوانند داخل کانتینرscripts/lib/openclaw-e2e-instance.shرا source کنند تا resolution نقطهٔ ورود، راهاندازی mock OpenAI، اجرای پیشزمینه/پسزمینه Gateway، probeهای آمادگی، export محیط وضعیت، dumpهای log و پاکسازی فرایند انجام شود. -
اجراهای شارد کامل، extension و include-pattern دادههای زمانبندی محلی را در
.artifacts/vitest-shard-timings.jsonبهروزرسانی میکنند؛ اجراهای بعدی کل پیکربندی از این زمانبندیها برای متعادلکردن شاردهای کند و سریع استفاده میکنند. شاردهای CI مربوط به include-pattern نام شارد را به کلید زمانبندی اضافه میکنند، که باعث میشود زمانبندی شاردهای فیلترشده بدون جایگزینکردن دادههای زمانبندی کل پیکربندی قابل مشاهده بماند. برای نادیدهگرفتن artifact زمانبندی محلی،OPENCLAW_TEST_PROJECTS_TIMINGS=0را تنظیم کنید. -
فایلهای تست منتخب
plugin-sdkوcommandsاکنون از مسیرهای سبک اختصاصی عبور میکنند که فقطtest/setup.tsرا نگه میدارند و موارد سنگین runtime را روی مسیرهای موجودشان باقی میگذارند. -
فایلهای منبع دارای تست همنشین، پیش از بازگشت به globهای دایرکتوری گستردهتر، به همان همنشین نگاشت میشوند. ویرایشهای helper زیر
src/channels/plugins/contracts/test-helpers،src/plugin-sdk/test-helpersوsrc/plugins/contractsاز گراف import محلی برای اجرای تستهای importکننده استفاده میکنند، بهجای اینکه وقتی مسیر وابستگی دقیق است همهٔ شاردها را گسترده اجرا کنند. -
auto-replyاکنون به سه پیکربندی اختصاصی (core،top-level،reply) هم تقسیم میشود تا چارچوب reply بر تستهای سبکتر وضعیت/توکن/helper سطح بالا غالب نشود. -
پیکربندی پایهٔ Vitest اکنون بهصورت پیشفرض
pool: "threads"وisolate: falseدارد، و runner غیرایزولهٔ مشترک در سراسر پیکربندیهای مخزن فعال است. -
pnpm test:channelsفایلvitest.channels.config.tsرا اجرا میکند. -
pnpm test:extensionsوpnpm test extensionsهمهٔ شاردهای extension/Plugin را اجرا میکنند. Pluginهای کانال سنگین، Plugin مرورگر و OpenAI بهعنوان شاردهای اختصاصی اجرا میشوند؛ گروههای دیگر Plugin بهصورت دستهای باقی میمانند. برای یک مسیر Plugin باندلشده ازpnpm test extensions/<id>استفاده کنید. -
pnpm test:perf:imports: گزارشدهی مدتزمان import و breakdown import در Vitest را فعال میکند، درحالیکه همچنان برای هدفهای صریح فایل/دایرکتوری از مسیریابی محدودهدار استفاده میکند. -
pnpm test:perf:imports:changed: همان profiling مربوط به import است، اما فقط برای فایلهایی که از زمانorigin/mainتغییر کردهاند. -
pnpm test:perf:changed:bench -- --ref <git-ref>مسیر حالت تغییرات مسیریابیشده را در برابر اجرای native پروژهٔ ریشه برای همان diff کامیتشدهٔ git benchmark میکند. -
pnpm test:perf:changed:bench -- --worktreeمجموعهٔ تغییرات worktree فعلی را بدون اینکه ابتدا commit شود benchmark میکند. -
pnpm test:perf:profile:main: یک profile CPU برای thread اصلی Vitest مینویسد (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: profileهای CPU + heap برای runner واحد مینویسد (.artifacts/vitest-runner-profile). -
pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: هر پیکربندی برگ Vitest مربوط به مجموعهٔ کامل را بهصورت سری اجرا میکند و دادههای مدتزمان گروهبندیشده بههمراه artifactهای JSON/log برای هر پیکربندی را مینویسد. Test Performance Agent پیش از تلاش برای اصلاح تستهای کند از این بهعنوان baseline خود استفاده میکند. -
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بهصورت opt-in فعال میشود. -
pnpm test:e2e: تستهای smoke انتهابهانتهای Gateway را اجرا میکند (جفتسازی چندنمونهای WS/HTTP/node). بهصورت پیشفرض ازthreads+isolate: falseبا workerهای adaptive درvitest.e2e.config.tsاستفاده میکند؛ باOPENCLAW_E2E_WORKERS=<n>تنظیم کنید و برای logهای verbose مقدارOPENCLAW_E2E_VERBOSE=1را بگذارید. -
pnpm test:live: تستهای live provider را اجرا میکند (minimax/zai). برای خارجشدن از حالت skip به کلیدهای API وLIVE=1(یا*_LIVE_TEST=1مخصوص provider) نیاز دارد. -
pnpm test:docker:all: تصویر live-test مشترک را میسازد، OpenClaw را یکبار بهعنوان tarball npm بستهبندی میکند، یک تصویر runner خام Node/Git بههمراه یک تصویر functional که آن tarball را در/appنصب میکند میسازد/بازاستفاده میکند، سپس مسیرهای smoke Docker را باOPENCLAW_SKIP_DOCKER_BUILD=1از طریق یک scheduler وزندار اجرا میکند. تصویر خام (OPENCLAW_DOCKER_E2E_BARE_IMAGE) برای مسیرهای installer/update/plugin-dependency استفاده میشود؛ آن مسیرها بهجای استفاده از منبعهای کپیشدهٔ مخزن، tarball ازپیشساختهشده را mount میکنند. تصویر functional (OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE) برای مسیرهای عملکرد معمول برنامهٔ ساختهشده استفاده میشود.scripts/package-openclaw-for-docker.mjsتنها packer بستهٔ محلی/CI است و پیش از مصرف توسط Docker، tarball بههمراهdist/postinstall-inventory.jsonرا اعتبارسنجی میکند. تعریف مسیرهای Docker درscripts/lib/docker-e2e-scenarios.mjsقرار دارد؛ منطق planner درscripts/lib/docker-e2e-plan.mjsقرار دارد؛scripts/test-docker-all.mjsبرنامهٔ انتخابشده را اجرا میکند.node scripts/test-docker-all.mjs --plan-jsonبرنامهٔ CI متعلق به scheduler را برای مسیرهای منتخب، نوعهای تصویر، نیازهای package/live-image، سناریوهای وضعیت و بررسیهای credential بدون ساختن یا اجرای Docker منتشر میکند.OPENCLAW_DOCKER_ALL_PARALLELISM=<n>slotهای فرایند را کنترل میکند و مقدار پیشفرض آن 10 است؛OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM=<n>pool انتهایی حساس به provider را کنترل میکند و مقدار پیشفرض آن 10 است. سقفهای مسیر سنگین بهصورت پیشفرضOPENCLAW_DOCKER_ALL_LIVE_LIMIT=9،OPENCLAW_DOCKER_ALL_NPM_LIMIT=10وOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7هستند؛ سقفهای provider بهصورت پیشفرض از طریقOPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT=4،OPENCLAW_DOCKER_ALL_LIVE_CODEX_LIMIT=4وOPENCLAW_DOCKER_ALL_LIVE_GEMINI_LIMIT=4به یک مسیر سنگین برای هر provider محدود میشوند. برای hostهای بزرگتر ازOPENCLAW_DOCKER_ALL_WEIGHT_LIMITیاOPENCLAW_DOCKER_ALL_DOCKER_LIMITاستفاده کنید. اگر یک مسیر روی host با موازیسازی پایین از سقف مؤثر وزن یا منبع عبور کند، همچنان میتواند از یک pool خالی شروع شود و تا زمانی که ظرفیت را آزاد کند تنها اجرا خواهد شد. شروع مسیرها بهصورت پیشفرض با فاصلهٔ 2 ثانیه انجام میشود تا از هجوم create در daemon محلی Docker جلوگیری شود؛ باOPENCLAW_DOCKER_ALL_START_STAGGER_MS=<ms>بازنویسی کنید. runner بهصورت پیشفرض Docker را preflight میکند، کانتینرهای کهنهٔ OpenClaw E2E را پاک میکند، هر 30 ثانیه وضعیت مسیرهای فعال را منتشر میکند، cacheهای ابزار CLI provider را بین مسیرهای سازگار بهاشتراک میگذارد، شکستهای گذرای live-provider را بهصورت پیشفرض یکبار retry میکند (OPENCLAW_DOCKER_ALL_LIVE_RETRIES=<n>)، و زمانبندی مسیرها را برای مرتبسازی طولانیتر-اول در اجراهای بعدی در.artifacts/docker-tests/lane-timings.jsonذخیره میکند. برای چاپ manifest مسیر بدون اجرای Docker ازOPENCLAW_DOCKER_ALL_DRY_RUN=1، برای تنظیم خروجی وضعیت ازOPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS=<ms>، یا برای غیرفعالکردن بازاستفادهٔ زمانبندی ازOPENCLAW_DOCKER_ALL_TIMINGS=0استفاده کنید. برای فقط مسیرهای قطعی/محلی ازOPENCLAW_DOCKER_ALL_LIVE_MODE=skipیا برای فقط مسیرهای live-provider ازOPENCLAW_DOCKER_ALL_LIVE_MODE=onlyاستفاده کنید؛ aliasهای package عبارتاند ازpnpm test:docker:local:allوpnpm test:docker:live:all. حالت live-only مسیرهای live اصلی و انتهایی را در یک pool طولانیتر-اول ادغام میکند تا bucketهای provider بتوانند کارهای Claude، Codex و Gemini را با هم بستهبندی کنند. runner پس از نخستین شکست، زمانبندی مسیرهای pooled جدید را متوقف میکند مگر اینکهOPENCLAW_DOCKER_ALL_FAIL_FAST=0تنظیم شده باشد، و هر مسیر یک timeout fallback 120 دقیقهای دارد که باOPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MSقابل بازنویسی است؛ مسیرهای live/tail منتخب سقفهای سختگیرانهتر برای هر مسیر دارند. فرمانهای راهاندازی Docker مربوط به backend CLI، timeout مخصوص خود را از طریقOPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDSدارند (پیشفرض 180). logهای هر مسیر،summary.json،failures.jsonو زمانبندیهای phase زیر.artifacts/docker-tests/<run-id>/نوشته میشوند؛ برای بررسی مسیرهای کند ازpnpm test:docker:timings <summary.json>و برای چاپ فرمانهای rerun هدفمند ارزان ازpnpm test:docker:rerun <run-id|summary.json|failures.json>استفاده کنید. -
pnpm test:docker:browser-cdp-snapshot: یک کانتینر E2E منبع مبتنی بر Chromium میسازد، CDP خام بههمراه یک Gateway ایزوله را شروع میکند،browser doctor --deepرا اجرا میکند، و بررسی میکند snapshotهای نقش CDP شامل URLهای link، clickables ارتقایافته با cursor، refs iframe و metadata فریم باشند. -
probeهای Docker زندهٔ backend 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 aliasهای متناظر:resumeو:mcpدارند. -
pnpm test:docker:openwebui: OpenClaw + Open WebUI را در Docker شروع میکند، از طریق Open WebUI وارد میشود،/api/modelsرا بررسی میکند، سپس یک chat واقعی proxied را از طریق/api/chat/completionsاجرا میکند. به یک کلید مدل live قابل استفاده نیاز دارد (برای مثال OpenAI در~/.profile)، یک تصویر خارجی Open WebUI را pull میکند، و انتظار نمیرود مانند مجموعههای معمول unit/e2e در CI پایدار باشد. -
pnpm test:docker:mcp-channels: یک کانتینر Gateway با دادههای اولیه و یک کانتینر کلاینت دوم را راهاندازی میکند کهopenclaw mcp serveرا اجرا میکند، سپس کشف گفتوگوی مسیریابیشده، خواندن رونوشتها، فرادادهٔ پیوست، رفتار صف رویداد زنده، مسیریابی ارسال خروجی، و اعلانهای کانال و مجوز به سبک Claude را از طریق پل واقعی stdio بررسی میکند. ادعای اعلان Claude فریمهای خام MCP در stdio را مستقیماً میخواند تا دودآزمایی بازتاب دهد که پل واقعاً چه چیزی منتشر میکند. -
pnpm test:docker:upgrade-survivor: آرشیو tarball بستهبندیشدهٔ OpenClaw را روی یک fixture کاربر قدیمی آلوده نصب میکند، بهروزرسانی بسته بههمراه doctor غیرتعاملی را بدون کلیدهای زندهٔ ارائهدهنده یا کانال اجرا میکند، سپس یک Gateway حلقهبازگشت را راهاندازی میکند و بررسی میکند که عاملها، پیکربندی کانال، فهرستهای مجاز Plugin، فایلهای workspace/session، وضعیت وابستگی Plugin قدیمی و منسوخ، راهاندازی، و وضعیت RPC باقی بمانند. -
pnpm test:docker:published-upgrade-survivor: بهصورت پیشفرضopenclaw@latestرا نصب میکند، فایلهای واقعگرایانهٔ کاربر موجود را بدون کلیدهای زندهٔ ارائهدهنده یا کانال مقداردهی اولیه میکند، آن خط مبنا را با یک دستورالعمل آمادهٔ فرمانopenclaw config setپیکربندی میکند، آن نصب منتشرشده را به آرشیو tarball بستهبندیشدهٔ OpenClaw بهروزرسانی میکند، doctor غیرتعاملی را اجرا میکند،.artifacts/upgrade-survivor/summary.jsonرا مینویسد، سپس یک Gateway حلقهبازگشت را راهاندازی میکند و بررسی میکند که intentهای پیکربندیشده، فایلهای workspace/session، پیکربندی کهنهٔ Plugin و وضعیت وابستگی قدیمی، راهاندازی،/healthz،/readyz، و وضعیت RPC باقی بمانند یا تمیز ترمیم شوند. یک خط مبنا را باOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECبازنویسی کنید، یک ماتریس محلی دقیق را باOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECSمانند[email protected] [email protected] [email protected]گسترش دهید، یا fixtureهای سناریو را باOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issuesاضافه کنید؛ مجموعهٔ reported-issues شاملconfigured-plugin-installsاست تا بررسی کند Pluginهای خارجی پیکربندیشدهٔ OpenClaw هنگام ارتقا بهصورت خودکار نصب میشوند و شاملstale-source-plugin-shadowاست تا سایههای Plugin فقط-منبع باعث خرابی راهاندازی نشوند. پذیرش بسته این موارد را بهصورت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: harness بازماندهٔ ارتقای منتشرشده را در سناریوی پرپاکسازیplugin-deps-cleanupاجرا میکند و بهصورت پیشفرض از[email protected]شروع میکند. workflow جداگانهٔ مهاجرت بهروزرسانی این مسیر را باbaselines=all-since-2026.4.23گسترش میدهد تا هر بستهٔ پایدار منتشرشده از.23به بعد به نامزد بهروزرسانی شود و پاکسازی وابستگی Plugin پیکربندیشده را خارج از CI انتشار کامل اثبات کند. -
pnpm test:docker:plugins: دودآزمایی نصب/بهروزرسانی را برای مسیر محلی،file:، بستههای رجیستری npm با وابستگیهای hoistشده، ارجاعهای متحرک git، fixtureهای ClawHub، بهروزرسانیهای marketplace، و فعالسازی/بازبینی بستهٔ Claude اجرا میکند.
گیت PR محلی
برای بررسیهای محلی land/gate مربوط به 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، کمینه/بیشینه، توزیع exit-code/signal، و خلاصههای بیشینه RSS برای هر فرمان است. گزینههای اختیاری --cpu-prof-dir / --heap-prof-dir برای هر اجرا پروفایلهای V8 مینویسند تا زمانسنجی و ثبت پروفایل از همان harness استفاده کنند.
قراردادهای خروجی ذخیرهشده:
pnpm test:startup:bench:smokeآرتیفکت 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:updatefixture مبنای ثبتشده در مخزن را درtest/fixtures/cli-startup-bench.jsonبا استفاده ازruns=5وwarmup=1تازهسازی میکند
fixture ثبتشده در مخزن:
test/fixtures/cli-startup-bench.json- تازهسازی با
pnpm test:startup:bench:update - مقایسه نتایج فعلی با fixture با
pnpm test:startup:bench:check
E2E راهاندازی اولیه (Docker)
Docker اختیاری است؛ این فقط برای تستهای smoke راهاندازی اولیه کانتینری لازم است.
جریان cold-start کامل در یک کانتینر Linux تمیز:
scripts/e2e/onboard-docker.sh
این اسکریپت wizard تعاملی را از طریق یک pseudo-tty هدایت میکند، فایلهای config/workspace/session را تأیید میکند، سپس Gateway را شروع میکند و openclaw health را اجرا میکند.
smoke واردکردن QR (Docker)
اطمینان میدهد helper نگهداریشده runtime QR زیر runtimeهای Docker Node پشتیبانیشده بارگذاری میشود (پیشفرض Node 24، سازگار با Node 22):
pnpm test:docker:qr