Release and CI
Pengujian
- Kit pengujian lengkap (suite, langsung, Docker): Pengujian
- Validasi pembaruan dan paket Plugin: Menguji pembaruan dan Plugin
Default agen
Sesi agen menjalankan pengujian dan validasi yang intensif secara komputasi dari jarak jauh melalui Crabbox. Kode pengelola tepercaya secara default menggunakan Blacksmith Testbox. Alur kerja Testbox yang dikonfigurasi memuat kredensial, sehingga kode kontributor tidak tepercaya atau kode fork harus menggunakan CI fork tanpa rahasia atau AWS Crabbox langsung yang disanitasi.
Jika tugas kode tepercaya kemungkinan memerlukan pengujian atau pembuktian berat, lakukan pemanasan awal
segera dalam sesi perintah latar belakang, lanjutkan pekerjaan selama proses pemuatan berlangsung,
gunakan kembali id tbx_... yang dikembalikan, sinkronkan checkout saat ini pada setiap proses, dan
hentikan sebelum serah terima:
node scripts/crabbox-wrapper.mjs warmup --provider blacksmith-testbox --keep --timing-jsonSetelah penggunaan ulang pertama berhasil, pembungkus mencatat basis lease,
dependensi, dan sidik jari alur kerja Testbox di bawah .crabbox/testbox-leases/.
Pengeditan khusus sumber tetap menggunakan ulang kotak yang telah dipanaskan. Perubahan basis penggabungan, lockfile,
masukan pengelola paket, pembungkus, atau alur kerja Testbox akan ditutup saat gagal dan memerlukan
lease baru. Setiap proses tetap menyinkronkan checkout saat ini.
OPENCLAW_TESTBOX_ALLOW_STALE=1 hanya untuk diagnostik yang disengaja, bukan
pembuktian rilis.
Perintah pengujian lokal di bawah ditujukan untuk alur kerja manusia atau fallback agen eksplisit yang diminta pengguna. Ketidaktersediaan penyedia jarak jauh harus dilaporkan; hal tersebut bukan izin untuk menjalankan gate lokal yang luas secara diam-diam.
Untuk kode tidak tepercaya, lakukan pemanasan awal dengan --provider aws. Setiap proses harus menetapkan
CRABBOX_ENV_ALLOW=CI, meneruskan --provider aws --no-hydrate, dan menggunakan
HOME jarak jauh sementara yang baru sebelum memasang dependensi atau menjalankan
pengujian. Gunakan lease yang baru dipanaskan dan dikhususkan untuk sumber tidak tepercaya tersebut; jangan pernah menggunakan ulang
lease tepercaya atau yang sebelumnya telah dimuati. Jalankan biner Crabbox tepercaya yang telah terpasang
dari checkout main tepercaya yang bersih dan ambil hanya PR jarak jauh dengan
--fresh-pr; jangan pernah menjalankan pembungkus atau konfigurasi checkout tidak tepercaya secara lokal.
Hapus penetapan CRABBOX_AWS_INSTANCE_PROFILE dan tutup saat gagal kecuali
aws.instanceProfile yang dihasilkan kosong. Sebelum pemasangan/pengujian apa pun, gunakan alat
berjalur absolut yang tepercaya untuk mewajibkan token IMDSv2, membuktikan bahwa endpoint kredensial IAM
mengembalikan 404, dan memverifikasi bahwa git rev-parse HEAD jarak jauh sama dengan SHA lengkap
head PR yang telah ditinjau. Ikat lease ke SHA tersebut dan hentikan/panaskan ulang saat head
berubah. Unggah scripts/crabbox-untrusted-bootstrap.sh tepercaya dari main yang bersih
bersama --fresh-pr; skrip tersebut memasang Node/pnpm yang disematkan, memverifikasi SHA
dan penyematan pengelola paket, mengisolasi HOME, memasang dependensi, lalu menjalankan
pengujian yang diminta. Jika broker tidak dapat membuktikan bahwa tidak ada peran atau tidak ada PR jarak jauh,
gunakan CI fork tanpa rahasia. Jangan gunakan hydrate-github, --no-sync, atau
alur kerja Testbox yang dimuati kredensial.
Hapus penetapan semua penggantian CRABBOX_TAILSCALE*, paksa --network public --tailscale=false, bersihkan flag simpul keluar/LAN, dan wajibkan crabbox inspect untuk
melaporkan jaringan publik tanpa status Tailscale sebelum mengunggah skrip apa pun.
Urutan lokal rutin
pnpm test:changeduntuk pembuktian Vitest dalam cakupan perubahan.pnpm test <path-or-filter>untuk satu berkas, direktori, atau target eksplisit.pnpm testhanya ketika Anda sengaja memerlukan suite Vitest lokal lengkap.
Dalam worktree Codex atau checkout tertaut/sparse, agen menghindari penggunaan langsung
pnpm test* / pnpm check* / pnpm crabbox:run secara lokal:
- Fallback lokal yang diminta pengguna secara eksplisit untuk berkas kecil:
node scripts/run-vitest.mjs <path-or-filter>. - Gate perubahan atau pembuktian luas:
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:changedagar pnpm berjalan di dalam Testbox. exitCodeakhir dan JSON waktu dari pembungkus merupakan hasil perintah. Proses Blacksmith GitHub Actions yang didelegasikan mungkin menampilkancancelledsetelah perintah SSH berhasil karena Testbox dihentikan dari luar tindakan keepalive; periksa ringkasan pembungkus dan keluaran perintah sebelum menganggapnya sebagai kegagalan.OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: mempertahankan serialisasi pemeriksaan berat di dalam worktree saat ini, bukan di direktori umum Git, untuk perintah sepertipnpm check:changeddanpnpm test ...yang ditargetkan. Gunakan hanya pada host lokal berkapasitas tinggi ketika Anda sengaja menjalankan pemeriksaan independen di seluruh worktree tertaut.
Perintah inti
Proses pembungkus pengujian diakhiri dengan ringkasan singkat [test] passed|failed|skipped ... in ...; baris durasi Vitest sendiri tetap menjadi detail per shard.
| Perintah | Fungsinya |
|---|---|
pnpm test |
Target berkas/direktori eksplisit dirutekan melalui jalur Vitest yang tercakup. Proses tanpa target merupakan pembuktian suite lengkap: grup shard tetap diperluas menjadi konfigurasi daun untuk eksekusi paralel lokal, dengan fanout shard yang diharapkan dicetak sebelum dimulai. Grup ekstensi selalu diperluas menjadi konfigurasi shard per ekstensi, bukan satu proses proyek root raksasa. |
pnpm test:changed |
Proses pengujian perubahan cerdas yang ringan: target presisi dari pengeditan pengujian langsung, berkas saudara *.test.ts, pemetaan sumber eksplisit, dan grafik impor lokal. Perubahan luas/konfigurasi/paket dilewati kecuali dipetakan ke pengujian presisi. |
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed |
Proses pengujian perubahan luas yang eksplisit; gunakan ketika pengeditan harness/konfigurasi/paket pengujian harus kembali ke perilaku pengujian perubahan Vitest yang lebih luas. |
pnpm test:force |
Membebaskan porta Gateway OpenClaw yang dikonfigurasi (default 18789), lalu menjalankan suite lengkap dengan porta Gateway terisolasi agar pengujian server tidak bertabrakan dengan instans yang sedang berjalan. |
pnpm test:coverage |
Menghasilkan laporan cakupan V8 informasional untuk jalur unit default (vitest.unit.config.ts); tidak ada ambang cakupan yang diberlakukan. |
pnpm test:coverage:changed |
Cakupan unit hanya untuk berkas yang berubah sejak origin/main. |
pnpm changed:lanes |
Menampilkan jalur arsitektur yang dipicu oleh diff terhadap origin/main. |
pnpm check:changed |
Mendelegasikan ke Crabbox/Testbox secara default di luar CI, lalu menjalankan gate pemeriksaan perubahan cerdas di dalam turunan jarak jauh: pemformatan beserta pemeriksaan tipe, lint, dan perintah penjaga untuk jalur terdampak. Tidak menjalankan Vitest; gunakan pnpm test:changed atau pnpm test <target> untuk pembuktian pengujian. |
Status pengujian bersama dan pembantu proses
src/test-utils/openclaw-test-state.ts: gunakan dari Vitest ketika pengujian memerlukanHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, fixture konfigurasi, ruang kerja, direktori agen, atau penyimpanan profil autentikasi yang terisolasi.pnpm test:env-mutations:report: laporan nonpemblokiran tentang pengujian/harness yang secara langsung memodifikasiHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIR, atau kunci lingkungan terkait. Gunakan untuk menemukan kandidat migrasi ke pembantu status pengujian bersama.test/helpers/openclaw-test-instance.ts: pengujian E2E tingkat proses yang memerlukan Gateway berjalan, lingkungan CLI, pengambilan log, dan pembersihan dalam satu tempat.- Jalur E2E Docker/Bash yang memuat
scripts/lib/docker-e2e-image.shdapat meneruskandocker_e2e_test_state_shell_b64 <label> <scenario>ke dalam kontainer dan mendekodenya denganscripts/lib/openclaw-e2e-instance.sh; skrip multi-home dapat meneruskandocker_e2e_test_state_function_b64dan memanggilopenclaw_test_state_create <label> <scenario>dalam setiap alur.node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonmenulis berkas lingkungan host yang dapat dimuat (tanda--sebelumcreatemencegah runtime Node yang lebih baru memperlakukan--env-filesebagai flag Node). Jalur yang meluncurkan Gateway dapat memuatscripts/lib/openclaw-e2e-instance.shuntuk resolusi titik masuk, startup OpenAI tiruan, peluncuran latar depan/latar belakang, pemeriksaan kesiapan, ekspor lingkungan status, dump log, dan pembersihan proses.
Jalur Control UI, TUI, dan ekstensi
- E2E Control UI dengan mock:
pnpm test:ui:e2emenjalankan jalur Vitest + Playwright yang memulai Vite Control UI dan mengendalikan halaman Chromium nyata terhadap WebSocket Gateway dengan mock. Pengujian berada diui/src/**/*.e2e.test.ts; mock/kontrol bersama berada diui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2emenyertakan jalur ini. Eksekusi agen secara default menggunakan Testbox/Crabbox, termasuk pembuktian tertarget; gunakannode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tshanya sebagai fallback lokal yang dinyatakan secara eksplisit. - Pengujian PTY TUI:
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsmenjalankan jalur PTY cepat dengan backend palsu.OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1ataupnpm tui:pty:test:watch --mode localmenjalankan smoke testtui --localyang lebih lambat, yang hanya menggunakan mock untuk endpoint model eksternal. Lakukan asersi pada teks stabil yang terlihat atau pemanggilan fixture, bukan snapshot ANSI mentah. pnpm test:extensionsdanpnpm test extensionsmenjalankan semua shard ekstensi/Plugin. Plugin saluran yang berat, Plugin peramban, dan OpenAI dijalankan sebagai shard khusus; grup Plugin lainnya tetap dikelompokkan.pnpm test extensions/<id>menjalankan satu jalur Plugin bawaan.- Berkas sumber yang memiliki pengujian pendamping dipetakan ke pengujian tersebut sebelum beralih ke glob direktori yang lebih luas. Perubahan helper di bawah
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpers, dansrc/plugins/contractsmenggunakan graf impor lokal untuk menjalankan pengujian yang mengimpornya, alih-alih menjalankan setiap shard secara luas ketika jalur dependensinya presisi. - Target direktori kontrak didistribusikan ke jalur kontraknya:
pnpm test src/channels/plugins/contractsmenjalankan empat konfigurasi kontrak saluran danpnpm test src/plugins/contractsmenjalankan konfigurasi kontrak Plugin, karena proyek generikchannels/pluginsmengecualikancontracts/**. auto-replydibagi menjadi tiga konfigurasi khusus (core,top-level,reply) agar harness balasan tidak mendominasi pengujian status/token/helper tingkat atas yang lebih ringan.- Berkas pengujian
plugin-sdkdancommandstertentu diarahkan melalui jalur ringan khusus yang hanya mempertahankantest/setup.ts, sementara kasus yang berat pada waktu proses tetap berada di jalur yang sudah ada. - Konfigurasi dasar Vitest secara default menggunakan
pool: "threads"danisolate: false, dengan runner non-terisolasi bersama yang diaktifkan di seluruh konfigurasi repositori. pnpm test:channelsmenjalankanvitest.channels.config.ts.
Gateway dan E2E
- Integrasi Gateway bersifat opsional:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testataupnpm test:gateway. pnpm test:e2e: agregat E2E repositori =pnpm test:e2e:gateway && pnpm test:ui:e2e.pnpm test:e2e:gateway: smoke test menyeluruh Gateway (pemasangan pasangan WS/HTTP/Node multi-instans). Secara default menggunakanthreads+isolate: falsedengan worker adaptif divitest.e2e.config.ts; sesuaikan denganOPENCLAW_E2E_WORKERS=<n>, dan aktifkan log terperinci denganOPENCLAW_E2E_VERBOSE=1.pnpm test:live: pengujian langsung penyedia (Claude/Minimax/DeepSeek/z.ai/dll., dibatasi oleh*.live.test.ts). Memerlukan kunci API danLIVE=1(atauOPENCLAW_LIVE_TEST=1) agar tidak dilewati; aktifkan keluaran terperinci denganOPENCLAW_LIVE_TEST_QUIET=0.
Rangkaian lengkap Docker (pnpm test:docker:all)
Membangun image pengujian langsung bersama, mengemas OpenClaw satu kali sebagai tarball npm, membangun/menggunakan kembali image runner Node/Git dasar serta image fungsional yang memasang tarball tersebut ke /app, lalu menjalankan jalur smoke test Docker melalui penjadwal berbobot. scripts/package-openclaw-for-docker.mjs adalah satu-satunya pengemas paket lokal/CI dan memvalidasi tarball beserta dist/postinstall-inventory.json sebelum digunakan oleh Docker.
- Image dasar (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): jalur penginstal/pembaruan/dependensi Plugin; memasang tarball yang telah dibuat sebelumnya alih-alih sumber repositori yang disalin. - Image fungsional (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): jalur fungsionalitas aplikasi hasil build yang normal. - Definisi jalur:
scripts/lib/docker-e2e-scenarios.mjs. Perencana:scripts/lib/docker-e2e-plan.mjs. Pelaksana:scripts/test-docker-all.mjs. node scripts/test-docker-all.mjs --plan-jsonmenghasilkan rencana CI milik penjadwal (jalur, jenis image, kebutuhan paket/image langsung, skenario status, pemeriksaan kredensial) tanpa membangun atau menjalankan Docker.
Pengaturan penjadwalan (variabel lingkungan, nilai default dalam tanda kurung):
| Variabel lingkungan | Default | Tujuan |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM |
10 | Slot proses. |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM |
10 | Kumpulan tahap akhir yang sensitif terhadap penyedia. |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT |
9 | Batas jalur berat penyedia langsung. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Batas jalur sumber daya npm. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Batas jalur sumber daya layanan. |
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT |
4 | Batas jalur berat per penyedia. |
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT |
1 | Batas per penyedia yang lebih ketat. |
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT |
- | Penimpaan untuk host yang lebih besar. |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS |
2000 | Jeda antara dimulainya jalur untuk menghindari lonjakan pembuatan pada daemon Docker lokal. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7,200,000 (120 mnt) | Batas waktu fallback per jalur; jalur langsung/tahap akhir tertentu menggunakan batas yang lebih ketat. |
OPENCLAW_DOCKER_ALL_LIVE_RETRIES |
1 | Percobaan ulang untuk kegagalan sementara penyedia langsung. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
nonaktif | Mencetak manifes jalur tanpa menjalankan Docker. |
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS |
30000 | Interval pencetakan status jalur aktif. |
OPENCLAW_DOCKER_ALL_TIMINGS |
aktif | Menggunakan kembali .artifacts/docker-tests/lane-timings.json untuk pengurutan dari yang terlama; atur ke 0 untuk menonaktifkannya. |
OPENCLAW_DOCKER_ALL_LIVE_MODE |
- | skip hanya untuk jalur deterministik/lokal, only hanya untuk jalur penyedia langsung. Alias: pnpm test:docker:local:all, pnpm test:docker:live:all. Mode khusus langsung menggabungkan jalur langsung utama dan tahap akhir menjadi satu kumpulan yang diurutkan dari yang terlama agar kelompok penyedia mengemas pekerjaan Claude/Codex/Gemini bersama-sama. |
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS |
180 | Batas waktu penyiapan Docker backend CLI. |
Pola variabel lingkungan untuk batas sumber daya adalah OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (nama sumber daya menggunakan huruf kapital, karakter nonalfanumerik digabungkan menjadi _).
Perilaku lainnya: runner melakukan pemeriksaan awal Docker secara default, membersihkan kontainer E2E OpenClaw yang kedaluwarsa, berbagi cache alat CLI penyedia di antara lane yang kompatibel, dan berhenti menjadwalkan lane terkelompok baru setelah kegagalan pertama kecuali OPENCLAW_DOCKER_ALL_FAIL_FAST=0 ditetapkan. Jika satu lane melampaui batas bobot/sumber daya efektif pada host dengan paralelisme rendah, lane tersebut tetap dapat dimulai dari pool kosong dan berjalan sendiri hingga melepaskan kapasitas. Log per lane, summary.json, failures.json, dan waktu setiap fase ditulis di bawah .artifacts/docker-tests/<run-id>/; gunakan pnpm test:docker:timings <summary.json> untuk memeriksa lane yang lambat dan pnpm test:docker:rerun <run-id|summary.json|failures.json> untuk mencetak perintah pengujian ulang tertarget yang ringan.
Lane Docker penting
| Perintah | Memverifikasi |
|---|---|
pnpm test:docker:browser-cdp-snapshot |
Kontainer E2E sumber berbasis Chromium dengan CDP mentah + Gateway terisolasi; snapshot peran CDP browser doctor --deep mencakup URL tautan, elemen yang dapat diklik dan dipromosikan kursor, referensi iframe, serta metadata frame. |
pnpm test:docker:skill-install |
Menginstal tarball yang telah dikemas dalam runner Docker polos dengan skills.install.allowUploadedArchives: false, mencari slug skill terkini melalui pencarian langsung ClawHub, menginstalnya melalui openclaw skills install, serta memverifikasi SKILL.md, .clawhub/origin.json, .clawhub/lock.json, dan skills info --json. |
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp |
Probe langsung backend CLI yang terfokus; Gemini memiliki alias :resume dan :mcp yang sesuai. |
pnpm test:docker:openwebui |
OpenClaw + Open WebUI dalam Docker: masuk, memeriksa /api/models, menjalankan percakapan nyata yang diproksi melalui /api/chat/completions. Memerlukan kunci model langsung yang dapat digunakan dan menarik image eksternal; tidak diharapkan stabil di CI seperti rangkaian pengujian unit/E2E. |
pnpm test:docker:mcp-channels |
Kontainer Gateway yang telah diisi data awal serta kontainer klien yang menjalankan openclaw mcp serve: penemuan percakapan yang dirutekan, pembacaan transkrip, metadata lampiran, perilaku antrean peristiwa langsung, perutean pengiriman keluar, serta notifikasi kanal + izin bergaya Claude melalui jembatan stdio nyata (asersi membaca frame MCP stdio mentah secara langsung). |
pnpm test:docker:upgrade-survivor |
Menginstal tarball yang telah dikemas di atas fixture pengguna lama yang kotor, menjalankan pembaruan paket serta doctor noninteraktif tanpa kunci penyedia/kanal langsung, memulai Gateway loopback, lalu memeriksa agar agen, konfigurasi kanal, daftar izin Plugin, berkas ruang kerja/sesi, status dependensi Plugin lawas yang kedaluwarsa, proses mulai, dan status RPC tetap bertahan. |
pnpm test:docker:published-upgrade-survivor |
Menginstal openclaw@latest secara default, mengisi berkas pengguna yang sudah ada secara realistis, mengonfigurasi melalui resep bawaan openclaw config set, memperbarui ke tarball yang telah dikemas, menjalankan doctor noninteraktif, menulis .artifacts/upgrade-survivor/summary.json, serta memeriksa /healthz, /readyz, dan status RPC. Ganti dengan OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, perluas matriks dengan OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS, atau tambahkan fixture skenario dengan OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues (mencakup configured-plugin-installs dan stale-source-plugin-shadow). Package Acceptance mengeksposnya sebagai published_upgrade_survivor_baseline(s) / _scenarios dan menguraikan token meta seperti last-stable-4 atau all-since-2026.4.23. |
pnpm test:docker:update-migration |
Harness ketahanan peningkatan versi terpublikasi dalam skenario plugin-deps-cleanup, yang secara default dimulai dari openclaw@2026.4.23. Alur kerja Update Migration memperluasnya dengan baselines=all-since-2026.4.23 untuk membuktikan pembersihan dependensi Plugin yang dikonfigurasi di luar CI Rilis Penuh. |
pnpm test:docker:plugins |
Uji asap penginstalan/pembaruan untuk jalur lokal, file:, paket registri npm dengan dependensi yang diangkat, referensi git yang bergerak, fixture ClawHub, pembaruan marketplace, serta pengaktifan/pemeriksaan bundel Claude. |
Gerbang PR lokal
Untuk pemeriksaan pendaratan/gerbang PR lokal, jalankan:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Jika pnpm test gagal secara sporadis pada host yang sibuk, jalankan ulang sekali sebelum menganggapnya sebagai regresi, lalu isolasi dengan pnpm test <path/to/test>. Untuk host dengan keterbatasan memori:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Peralatan kinerja pengujian
pnpm test:perf:imports: mengaktifkan pelaporan durasi impor + perincian impor Vitest, sembari tetap menggunakan perutean jalur tercakup untuk target file/direktori eksplisit.pnpm test:perf:imports:changedmembatasi pembuatan profil yang sama pada file yang berubah sejakorigin/main.pnpm test:perf:changed:bench -- --ref <git-ref>mengukur kinerja jalur mode perubahan yang dirutekan terhadap proses bawaan proyek root untuk diff git terkomit yang sama;pnpm test:perf:changed:bench -- --worktreemengukur kinerja kumpulan perubahan worktree saat ini tanpa harus melakukan commit terlebih dahulu.pnpm test:perf:profile:mainmenulis profil CPU untuk thread utama Vitest (.artifacts/vitest-main-profile);pnpm test:perf:profile:runnermenulis profil CPU + heap untuk runner unit (.artifacts/vitest-runner-profile).pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: menjalankan setiap konfigurasi turunan Vitest untuk rangkaian lengkap secara serial dan menulis data durasi yang dikelompokkan beserta artefak JSON/log per konfigurasi. Laporan rangkaian lengkap mengisolasi file secara default agar grafik modul yang dipertahankan dan jeda GC dari file sebelumnya tidak dibebankan pada assertion berikutnya; teruskan-- --no-isolatehanya saat sengaja membuat profil akumulasi worker bersama. Agen Kinerja Pengujian menggunakan ini sebagai baseline sebelum mencoba memperbaiki pengujian yang lambat.pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonmembandingkan laporan yang dikelompokkan setelah perubahan yang berfokus pada kinerja.- Proses shard lengkap, ekstensi, dan pola penyertaan memperbarui data waktu lokal di
.artifacts/vitest-shard-timings.json; proses seluruh konfigurasi berikutnya menggunakan waktu tersebut untuk menyeimbangkan shard lambat dan cepat. Shard CI pola penyertaan menambahkan nama shard ke kunci waktu, sehingga waktu shard terfilter tetap terlihat tanpa menggantikan data waktu seluruh konfigurasi. AturOPENCLAW_TEST_PROJECTS_TIMINGS=0untuk mengabaikan artefak waktu lokal.
Tolok ukur
Latensi model (scripts/bench-model.ts)
pnpm tsx scripts/bench-model.ts --runs 10Variabel lingkungan opsional: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY. Prompt default: "Balas dengan satu kata: ok. Tanpa tanda baca atau teks tambahan."
Waktu mulai 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.ts --runs 12pnpm tsx scripts/bench-cli-startup.ts --preset real --case status --case gatewayStatus --runs 3pnpm tsx scripts/bench-cli-startup.ts --entry openclaw.mjs --entry-secondary dist/entry.js --preset allPreset:
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: gabungan kedua preset
Keluaran mencakup sampleCount, rata-rata, p50, p95, min/maks, distribusi kode keluar/sinyal, dan RSS maksimum per perintah. --cpu-prof-dir / --heap-prof-dir menulis profil V8 untuk setiap proses.
Keluaran tersimpan: pnpm test:startup:bench:smoke menulis .artifacts/cli-startup-bench-smoke.json; pnpm test:startup:bench:save menulis .artifacts/cli-startup-bench-all.json (runs=5 warmup=1). Fixture yang disimpan dalam repositori: test/fixtures/cli-startup-bench.json, diperbarui oleh pnpm test:startup:bench:update, dibandingkan oleh pnpm test:startup:bench:check.
Waktu mulai Gateway (scripts/bench-gateway-startup.ts)
Secara default menggunakan entri CLI hasil build di dist/entry.js; jalankan pnpm build terlebih dahulu. Teruskan --entry scripts/run-node.mjs untuk mengukur runner sumber sebagai gantinya, dan pisahkan hasil tersebut dari baseline entri hasil build.
pnpm test:startup:gateway -- --runs 5 --warmup 1pnpm test:startup:gateway -- --case skipChannels --case fiftyPlugins --runs 5node --import tsx scripts/bench-gateway-startup.ts --case default --runs 5 --output .artifacts/gateway-startup.jsonID kasus: default, skipChannels (waktu mulai saluran dilewati), oneInternalHook, allInternalHooks, fiftyPlugins (50 Plugin manifes), fiftyStartupLazyPlugins (50 Plugin manifes dengan pemuatan lambat saat mulai).
Keluaran mencakup keluaran proses pertama, /healthz, /readyz, waktu log mulai mendengarkan HTTP, waktu log kesiapan Gateway, waktu CPU, rasio inti CPU, RSS maksimum, heap, metrik jejak waktu mulai, penundaan event loop, dan metrik terperinci tabel pencarian Plugin. Skrip mengatur OPENCLAW_GATEWAY_STARTUP_TRACE=1 di lingkungan Gateway turunan.
/healthz menunjukkan status hidup (server HTTP dapat merespons). /readyz menunjukkan kesiapan untuk digunakan (sidecar Plugin waktu mulai, saluran, dan pekerjaan pascapemasangan yang sangat penting bagi kesiapan telah selesai). Hook waktu mulai dikirim secara asinkron dan bukan bagian dari jaminan kesiapan. Waktu log kesiapan adalah stempel waktu internal Gateway, berguna untuk atribusi pada sisi proses tetapi bukan pengganti pemeriksaan eksternal /readyz.
Gunakan keluaran JSON atau --output saat membandingkan perubahan. Gunakan --cpu-prof-dir hanya setelah keluaran jejak menunjukkan pekerjaan impor, kompilasi, atau yang dibatasi CPU yang tidak dapat dijelaskan hanya oleh waktu setiap fase.
Mulai ulang Gateway (scripts/bench-gateway-restart.ts)
Khusus macOS dan Linux (menggunakan SIGUSR1 untuk memulai ulang di dalam proses; langsung gagal di Windows). Menggunakan default entri hasil build dan penggantian --entry scripts/run-node.mjs yang sama seperti waktu mulai Gateway di atas.
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1ID kasus: skipChannels, skipChannelsAcpxProbe (pemeriksaan waktu mulai ACPX aktif), skipChannelsNoAcpxProbe (pemeriksaan nonaktif), default, fiftyPlugins.
Keluaran mencakup /healthz berikutnya, /readyz berikutnya, waktu henti, waktu kesiapan mulai ulang, CPU, RSS, metrik jejak waktu mulai untuk proses pengganti, serta metrik jejak mulai ulang untuk penanganan sinyal, pengosongan pekerjaan aktif, fase penutupan, proses mulai berikutnya, waktu kesiapan, dan snapshot memori. Skrip mengatur OPENCLAW_GATEWAY_STARTUP_TRACE=1 dan OPENCLAW_GATEWAY_RESTART_TRACE=1.
Gunakan tolok ukur ini ketika perubahan menyentuh pensinyalan mulai ulang, handler penutupan, waktu mulai setelah mulai ulang, penghentian sidecar, serah terima layanan, atau kesiapan setelah mulai ulang. Mulailah dengan skipChannels untuk mengisolasi mekanisme Gateway dari waktu mulai saluran; gunakan kasus default atau yang sarat Plugin hanya setelah kasus sempit menjelaskan jalur mulai ulang. Metrik jejak merupakan petunjuk atribusi, bukan putusan — nilai perubahan mulai ulang berdasarkan beberapa sampel, rentang pemilik yang sesuai, perilaku /healthz//readyz, dan kontrak mulai ulang yang terlihat oleh pengguna.
E2E orientasi (Docker)
Opsional; hanya diperlukan untuk uji asap orientasi dalam kontainer. Alur mulai dingin lengkap dalam kontainer Linux yang bersih:
scripts/e2e/onboard-docker.shMenjalankan wizard interaktif melalui pseudo-tty, memverifikasi file konfigurasi/workspace/sesi, kemudian memulai Gateway dan menjalankan openclaw health.
Uji asap impor QR (Docker)
Memastikan helper runtime QR yang dipelihara dapat dimuat pada runtime Docker Node yang didukung (Node 24 secara default, kompatibel dengan Node 22):
pnpm test:docker:qr