Release and CI
Tests
-
Volledige testkit (suites, live, Docker): Testen
-
Validatie van updates en pluginpakketten: Updates en plugins testen
-
Routinematige lokale testvolgorde:
pnpm test:changedvoor Vitest-bewijs binnen de gewijzigde scope.pnpm test <path-or-filter>voor één bestand, map of expliciet doel.pnpm testalleen wanneer je bewust de volledige lokale Vitest-suite nodig hebt.
-
pnpm test:force: Beëindigt elk achtergebleven Gateway-proces dat de standaard control-poort vasthoudt, en voert daarna de volledige Vitest-suite uit met een geïsoleerde Gateway-poort zodat servertests niet botsen met een draaiende instantie. Gebruik dit wanneer een eerdere Gateway-run poort 18789 bezet heeft achtergelaten. -
pnpm test:coverage: Voert de unit-suite uit met V8-coverage (viavitest.unit.config.ts). Dit is een coverage-gate voor de standaard-unit-lane, geen coverage voor alle bestanden in de hele repo. Drempels zijn 70% regels/functies/statements en 55% branches. Omdatcoverage.allfalse is en de standaard-lane coverage-includes beperkt tot niet-snelle unittests met naastliggende bronbestanden, meet de gate broncode die eigendom is van deze lane in plaats van elke transitieve import die toevallig wordt geladen. -
pnpm test:coverage:changed: Voert unit-coverage alleen uit voor bestanden die sindsorigin/mainzijn gewijzigd. -
pnpm test:changed: goedkope slimme gewijzigde testrun. Deze voert precieze doelen uit op basis van directe testbewerkingen, naastliggende*.test.ts-bestanden, expliciete bronmappings en de lokale importgrafiek. Brede/config/package-wijzigingen worden overgeslagen tenzij ze naar precieze tests mappen. -
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed: expliciete brede gewijzigde testrun. Gebruik dit wanneer een bewerking aan testharnas/config/package moet terugvallen op Vitests bredere gedrag voor gewijzigde tests. -
pnpm changed:lanes: toont de architecturale lanes die door de diff ten opzichte vanorigin/mainworden geactiveerd. -
pnpm check:changed: delegeert standaard buiten CI naar Crabbox/Testbox en voert daarna de slimme gewijzigde check-gate uit voor de diff ten opzichte vanorigin/mainbinnen het externe child-proces. Deze voert typecheck, lint en guard-commando's uit voor de getroffen architecturale lanes, maar voert geen Vitest-tests uit. Gebruikpnpm test:changedof explicietpnpm test <target>voor testbewijs. -
Codex-worktrees en gekoppelde/sparse checkouts: vermijd directe lokale
pnpm test*,pnpm check*enpnpm crabbox:run, tenzij je hebt geverifieerd dat pnpm geen dependencies zal reconciliëren. Gebruik voor klein bewijs met een expliciet bestandnode scripts/run-vitest.mjs <path-or-filter>; gebruik voor changed gates of breed bewijsnode 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, zodat pnpm binnen Testbox draait. -
Testbox-via-Crabbox-bewijs: gebruik de uiteindelijke
exitCodeen timing-JSON van de wrapper als commandoresultaat. De gedelegeerde Blacksmith GitHub Actions-run kancancelledtonen na een succesvolle SSH-opdracht omdat de Testbox van buiten de keepalive-action wordt gestopt; controleer de wrappersamenvatting en commandouitvoer voordat je dat als testfout behandelt. -
OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: houdt heavy-check-serialisatie binnen de huidige worktree in plaats van de Git common dir voor commando's zoalspnpm check:changeden gerichtepnpm test .... Gebruik dit alleen op lokale hosts met hoge capaciteit wanneer je bewust onafhankelijke checks over gekoppelde worktrees uitvoert. -
pnpm test: routeert expliciete bestands-/mapdoelen via gescopete Vitest-lanes. Runs zonder doel zijn bewijs voor de volledige suite: ze gebruiken vaste shardgroepen, breiden uit naar leaf-configs voor lokale parallelle uitvoering en printen de verwachte lokale shard-fanout voordat ze starten. De extensiegroep breidt altijd uit naar de shardconfigs per extensie in plaats van één gigantisch root-projectproces. -
Testwrapper-runs eindigen met een korte
[test] passed|failed|skipped ... in ...-samenvatting. Vitests eigen duurregel blijft het detail per shard. -
Gedeelde OpenClaw-teststatus: gebruik
src/test-utils/openclaw-test-state.tsvanuit Vitest wanneer een test een geïsoleerdeHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, configfixture, workspace, agentmap of auth-profielstore nodig heeft. -
pnpm test:env-mutations:report: niet-blokkerend rapport van tests en harnassen dieHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIRof gerelateerde OpenClaw-env-sleutels direct muteren. Gebruik dit om kandidaten te vinden voor migratie naar de gedeelde test-state-helper. -
Control UI gemockte E2E: gebruik
pnpm test:ui:e2evoor de Vitest + Playwright-lane die de Vite Control UI start en een echte Chromium-pagina aanstuurt tegen een gemockte Gateway-WebSocket. Tests staan inui/src/**/*.e2e.test.ts; gedeelde mocks en controls staan inui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2ebevat deze lane. Geef in Codex-worktrees de voorkeur aannode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tsvoor klein gericht bewijs nadat dependencies zijn geïnstalleerd, of Testbox/Crabbox voor breder GUI-bewijs. -
Proces-E2E-helpers: gebruik
test/helpers/openclaw-test-instance.tswanneer een Vitest-procesniveau-E2E-test een draaiende Gateway, CLI-env, logvastlegging en cleanup op één plek nodig heeft. -
TUI-PTY-tests: gebruik
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsvoor de snelle fake-backend-PTY-lane. GebruikOPENCLAW_TUI_PTY_INCLUDE_LOCAL=1ofpnpm tui:pty:test:watch --mode localvoor de trageretui --local-smoke, die alleen het externe modeleindpunt mockt. Assert stabiele zichtbare tekst of fixture-aanroepen, geen ruwe ANSI-snapshots. -
Docker/Bash-E2E-helpers: lanes die
scripts/lib/docker-e2e-image.shsourcen kunnendocker_e2e_test_state_shell_b64 <label> <scenario>doorgeven aan de container en dit decoderen metscripts/lib/openclaw-e2e-instance.sh; multi-home-scripts kunnendocker_e2e_test_state_function_b64doorgeven enopenclaw_test_state_create <label> <scenario>in elke flow aanroepen. Lager-niveau callers kunnenscripts/lib/openclaw-test-state.mjs shell --label <name> --scenario <name>gebruiken voor een shellsnippet in de container, ofnode scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonvoor een sourcebaar host-env-bestand. De--vóórcreatevoorkomt dat nieuwere Node-runtimes--env-fileals Node-vlag behandelen. Docker/Bash-lanes die een Gateway starten kunnenscripts/lib/openclaw-e2e-instance.shbinnen de container sourcen voor entrypoint-resolutie, gemockte OpenAI-startup, Gateway-start op de voorgrond/achtergrond, readiness-probes, state-env-export, logdumps en procesopruiming. -
Full-, extension- en include-pattern-shardruns werken lokale timingdata bij in
.artifacts/vitest-shard-timings.json; latere whole-config-runs gebruiken die timings om langzame en snelle shards te balanceren. Include-pattern-CI-shards voegen de shardnaam toe aan de timingsleutel, waardoor gefilterde shardtimings zichtbaar blijven zonder whole-config-timingdata te vervangen. StelOPENCLAW_TEST_PROJECTS_TIMINGS=0in om het lokale timingartefact te negeren. -
Geselecteerde
plugin-sdk- encommands-testbestanden worden nu via speciale lichte lanes gerouteerd die alleentest/setup.tsbehouden, terwijl runtime-zware gevallen op hun bestaande lanes blijven. -
Bronbestanden met naastliggende tests mappen eerst naar die naastliggende test voordat wordt teruggevallen op bredere mapglobs. Helperbewerkingen onder
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpersensrc/plugins/contractsgebruiken een lokale importgrafiek om importerende tests uit te voeren in plaats van elke shard breed te draaien wanneer het dependencypad precies is. -
auto-replysplitst nu ook in drie speciale configs (core,top-level,reply), zodat het reply-harnas de lichtere top-level status-/token-/helpertests niet domineert. -
De basis-Vitest-config gebruikt nu standaard
pool: "threads"enisolate: false, met de gedeelde niet-geïsoleerde runner ingeschakeld in alle repo-configs. -
pnpm test:channelsvoertvitest.channels.config.tsuit. -
pnpm test:extensionsenpnpm test extensionsvoeren alle extensie-/Plugin-shards uit. Zware kanaal-Plugins, de browser-Plugin en OpenAI draaien als speciale shards; andere Plugin-groepen blijven gebundeld. Gebruikpnpm test extensions/<id>voor één gebundelde Plugin-lane. -
pnpm test:perf:imports: schakelt Vitest-rapportage voor importduur + importverdeling in, terwijl nog steeds gescopete lane-routering wordt gebruikt voor expliciete bestands-/mapdoelen. -
pnpm test:perf:imports:changed: dezelfde importprofilering, maar alleen voor bestanden die sindsorigin/mainzijn gewijzigd. -
pnpm test:perf:changed:bench -- --ref <git-ref>benchmarkt het gerouteerde changed-mode-pad tegen de native root-project-run voor dezelfde gecommitte git-diff. -
pnpm test:perf:changed:bench -- --worktreebenchmarkt de wijzigingenset van de huidige worktree zonder eerst te committen. -
pnpm test:perf:profile:main: schrijft een CPU-profiel voor de Vitest-mainthread (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: schrijft CPU- + heapprofielen voor de unitrunner (.artifacts/vitest-runner-profile). -
pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: voert elke full-suite Vitest-leaf-config serieel uit en schrijft gegroepeerde duurdata plus JSON-/logartefacten per config. De Test Performance Agent gebruikt dit als baseline voordat hij langzame-tests-fixes probeert. -
pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json: vergelijkt gegroepeerde rapporten na een performancegerichte wijziging. -
pnpm test:docker:timings <summary.json>inspecteert trage Docker-lanes na een Docker-all-run; gebruikpnpm test:docker:rerun <run-id|summary.json|failures.json>om goedkope gerichte rerun-commando's uit dezelfde artefacten te printen. -
Gateway-integratie: opt-in via
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testofpnpm test:gateway. -
pnpm test:e2e: Voert de E2E-aggregatie van de repo uit: gateway-end-to-end-smoketests plus de gemockte browser-E2E-lane van Control UI. -
pnpm test:e2e:gateway: Voert gateway-end-to-end-smoketests uit (multi-instance WS/HTTP/node-koppeling). Gebruikt standaardthreads+isolate: falsemet adaptieve workers invitest.e2e.config.ts; stem af metOPENCLAW_E2E_WORKERS=<n>en stelOPENCLAW_E2E_VERBOSE=1in voor uitgebreide logs. -
pnpm test:live: Voert live providertests uit (minimax/zai). Vereist API-sleutels enLIVE=1(of providerspecifiek*_LIVE_TEST=1) om niet over te slaan. -
pnpm test:docker:all: Bouwt de gedeelde live-testimage, verpakt OpenClaw eenmalig als npm-tarball, bouwt/hergebruikt een kale Node/Git-runnerimage plus een functionele image die die tarball in/appinstalleert, en voert vervolgens Docker-smoke-lanes uit metOPENCLAW_SKIP_DOCKER_BUILD=1via een gewogen scheduler. De kale image (OPENCLAW_DOCKER_E2E_BARE_IMAGE) wordt gebruikt voor installer-/update-/plugin-afhankelijkheidslanes; die lanes mounten de vooraf gebouwde tarball in plaats van gekopieerde repo-bronnen te gebruiken. De functionele image (OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE) wordt gebruikt voor normale functionaliteitslanes van de gebouwde app.scripts/package-openclaw-for-docker.mjsis de enige lokale/CI-packagepacker en valideert de tarball plusdist/postinstall-inventory.jsonvoordat Docker die gebruikt. Docker-lanedefinities staan inscripts/lib/docker-e2e-scenarios.mjs; plannerlogica staat inscripts/lib/docker-e2e-plan.mjs;scripts/test-docker-all.mjsvoert het geselecteerde plan uit.node scripts/test-docker-all.mjs --plan-jsongeeft het door de scheduler beheerde CI-plan uit voor geselecteerde lanes, image-soorten, package-/live-imagebehoeften, statusscenario's en credentialcontroles zonder Docker te bouwen of uit te voeren.OPENCLAW_DOCKER_ALL_PARALLELISM=<n>beheert processlots en staat standaard op 10;OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM=<n>beheert de providergevoelige tail-pool en staat standaard op 10. Zware lanecaps staan standaard opOPENCLAW_DOCKER_ALL_LIVE_LIMIT=9,OPENCLAW_DOCKER_ALL_NPM_LIMIT=5enOPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7; providercaps staan standaard op een zware lane per provider viaOPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT=4,OPENCLAW_DOCKER_ALL_LIVE_CODEX_LIMIT=4enOPENCLAW_DOCKER_ALL_LIVE_GEMINI_LIMIT=4. GebruikOPENCLAW_DOCKER_ALL_WEIGHT_LIMITofOPENCLAW_DOCKER_ALL_DOCKER_LIMITvoor grotere hosts. Als een lane de effectieve gewichts- of resourcecap op een host met lage paralleliteit overschrijdt, kan die nog steeds vanuit een lege pool starten en alleen draaien totdat capaciteit wordt vrijgegeven. Lanestarts worden standaard met 2 seconden gespreid om create-stormen van de lokale Docker-daemon te vermijden; overschrijf dit metOPENCLAW_DOCKER_ALL_START_STAGGER_MS=<ms>. De runner voert standaard Docker-preflights uit, ruimt verouderde OpenClaw E2E-containers op, geeft elke 30 seconden actieve-lanestatus uit, deelt provider-CLI-toolcaches tussen compatibele lanes, probeert tijdelijke live-providerfouten standaard eenmaal opnieuw (OPENCLAW_DOCKER_ALL_LIVE_RETRIES=<n>) en slaat lanetimings op in.artifacts/docker-tests/lane-timings.jsonvoor volgorde met de langste eerst bij latere runs. GebruikOPENCLAW_DOCKER_ALL_DRY_RUN=1om het lanemanifest af te drukken zonder Docker uit te voeren,OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS=<ms>om statusuitvoer af te stemmen, ofOPENCLAW_DOCKER_ALL_TIMINGS=0om hergebruik van timings uit te schakelen. GebruikOPENCLAW_DOCKER_ALL_LIVE_MODE=skipalleen voor deterministische/lokale lanes ofOPENCLAW_DOCKER_ALL_LIVE_MODE=onlyalleen voor live-providerlanes; package-aliassen zijnpnpm test:docker:local:allenpnpm test:docker:live:all. De modus alleen-live voegt hoofd- en tail-live-lanes samen tot een enkele pool met de langste eerst, zodat providerbuckets Claude-, Codex- en Gemini-werk samen kunnen inpakken. De runner stopt met het plannen van nieuwe gepoolde lanes na de eerste fout, tenzijOPENCLAW_DOCKER_ALL_FAIL_FAST=0is ingesteld, en elke lane heeft een fallback-time-out van 120 minuten die overschrijfbaar is metOPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS; geselecteerde live-/tail-lanes gebruiken strakkere caps per lane. CLI-backend-Docker-installatieopdrachten hebben hun eigen time-out viaOPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS(standaard 180). Logs per lane,summary.json,failures.jsonen fasetimings worden geschreven onder.artifacts/docker-tests/<run-id>/; gebruikpnpm test:docker:timings <summary.json>om trage lanes te inspecteren enpnpm test:docker:rerun <run-id|summary.json|failures.json>om goedkope gerichte rerun-opdrachten af te drukken. -
pnpm test:docker:browser-cdp-snapshot: Bouwt een door Chromium ondersteunde source-E2E-container, start raw CDP plus een geïsoleerde Gateway, voertbrowser doctor --deepuit en verifieert dat CDP-rolsnapshots link-URL's, tot cursor gepromoveerde klikbare elementen, iframe-refs en framemetadata bevatten. -
pnpm test:docker:skill-install: Installeert de verpakte OpenClaw-tarball in een kale Docker-runner, schakeltskills.install.allowUploadedArchivesuit, resolved een huidige skill-slug uit live ClawHub-zoekopdracht, installeert die viaopenclaw skills installen verifieertSKILL.md,.clawhub/origin.json,.clawhub/lock.jsonenskills info --json. -
CLI-backend-live-Docker-probes kunnen als gerichte lanes worden uitgevoerd, bijvoorbeeld
pnpm test:docker:live-cli-backend:claude,pnpm test:docker:live-cli-backend:claude:resumeofpnpm test:docker:live-cli-backend:claude:mcp. Gemini heeft overeenkomende aliassen voor:resumeen:mcp. -
pnpm test:docker:openwebui: Start gedockeriseerde OpenClaw + Open WebUI, meldt zich aan via Open WebUI, controleert/api/modelsen voert daarna een echte geproxiede chat uit via/api/chat/completions. Vereist een bruikbare live-modelsleutel, haalt een externe Open WebUI-image op en wordt niet verwacht CI-stabiel te zijn zoals de normale unit-/E2E-suites. -
pnpm test:docker:mcp-channels: Start een vooraf gevulde Gateway-container en een tweede clientcontainer dieopenclaw mcp servestart, en verifieert daarna routed conversation discovery, transcriptlezingen, attachmentmetadata, live-eventqueuegedrag, outbound send-routing en Claude-stijl kanaal- en permissienotificaties over de echte stdio-bridge. De Claude-notificatieassertie leest de raw stdio MCP-frames rechtstreeks, zodat de smoke weerspiegelt wat de bridge daadwerkelijk uitzendt. -
pnpm test:docker:upgrade-survivor: Installeert de verpakte OpenClaw-tarball over een vervuilde oude-gebruiker-fixture, voert package-update plus niet-interactieve doctor uit zonder live-provider- of kanaalsleutels, start daarna een loopback-Gateway en controleert dat agents, kanaalconfiguratie, plugin-allowlists, workspace-/sessiebestanden, verouderde legacy plugin-afhankelijkheidsstatus, opstarten en RPC-status blijven werken. -
pnpm test:docker:published-upgrade-survivor: Installeert standaardopenclaw@latest, seedt realistische bestaande-gebruikerbestanden zonder live-provider- of kanaalsleutels, configureert die baseline met een ingebakkenopenclaw config set-opdrachtenrecept, werkt die gepubliceerde installatie bij naar de verpakte OpenClaw-tarball, voert niet-interactieve doctor uit, schrijft.artifacts/upgrade-survivor/summary.json, start daarna een loopback-Gateway en controleert dat geconfigureerde intents, workspace-/sessiebestanden, verouderde plugin-configuratie en legacy afhankelijkheidsstatus, opstarten,/healthz,/readyzen RPC-status blijven werken of netjes worden gerepareerd. Overschrijf een baseline metOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, breid een exacte lokale matrix uit metOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECSzoalsopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, of voeg scenariofixtures toe metOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues; de reported-issues-set bevatconfigured-plugin-installsom te verifiëren dat geconfigureerde externe OpenClaw-plugins tijdens upgrade automatisch worden geïnstalleerd enstale-source-plugin-shadowom te voorkomen dat source-only plugin-schaduwen het opstarten breken. Package Acceptance biedt deze aan alspublished_upgrade_survivor_baseline,published_upgrade_survivor_baselinesenpublished_upgrade_survivor_scenarios, en resolved meta-baselinetokens zoalslast-stable-4ofall-since-2026.4.23voordat exacte package-specificaties aan Docker-lanes worden doorgegeven. -
pnpm test:docker:update-migration: Voert de published-upgrade-survivor-harness uit in het opschoningsintensieveplugin-deps-cleanup-scenario, standaard beginnend bijopenclaw@2026.4.23. De afzonderlijkeUpdate Migration-workflow breidt deze lane uit metbaselines=all-since-2026.4.23, zodat elk stabiel gepubliceerd package vanaf.23wordt bijgewerkt naar de kandidaat en cleanup van geconfigureerde plugin-afhankelijkheden bewijst buiten Full Release CI. -
pnpm test:docker:plugins: Voert installatie-/updatesmoke uit voor lokaal pad,file:, npm-registrypackages met gehoiste afhankelijkheden, bewegende git-refs, ClawHub-fixtures, marketplace-updates en inschakelen/inspecteren van Claude-bundel.
Lokale PR-gate
Voer voor lokale PR-land/gate-controles het volgende uit:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Als pnpm test op een belaste host flaky is, voer het dan één keer opnieuw uit voordat je het als regressie behandelt, en isoleer daarna met pnpm test <path/to/test>. Gebruik voor hosts met beperkte geheugenruimte:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Benchmark voor modellatentie (lokale sleutels)
Script: scripts/bench-model.ts
Gebruik:
pnpm tsx scripts/bench-model.ts --runs 10- Optionele env:
MINIMAX_API_KEY,MINIMAX_BASE_URL,MINIMAX_MODEL,ANTHROPIC_API_KEY - Standaardprompt: "Antwoord met één enkel woord: ok. Geen interpunctie of extra tekst."
Laatste run (2025-12-31, 20 runs):
- minimax mediaan 1279 ms (min. 1114, max. 2431)
- opus mediaan 2454 ms (min. 1224, max. 3170)
CLI-opstartbenchmark
Script: scripts/bench-cli-startup.ts
Gebruik:
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
Presets:
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: beide presets
Uitvoer bevat sampleCount, gemiddelde, p50, p95, min/max, exit-code-/signaalverdeling en samenvattingen van maximale RSS voor elke opdracht. Optioneel schrijft --cpu-prof-dir / --heap-prof-dir V8-profielen per run, zodat timing en profielvastlegging dezelfde harness gebruiken.
Conventies voor opgeslagen uitvoer:
pnpm test:startup:bench:smokeschrijft het gerichte smoke-artefact naar.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:saveschrijft het artefact voor de volledige suite naar.artifacts/cli-startup-bench-all.jsonmetruns=5enwarmup=1pnpm test:startup:bench:updatevernieuwt de ingecheckte baseline-fixture optest/fixtures/cli-startup-bench.jsonmetruns=5enwarmup=1
Ingecheckte fixture:
test/fixtures/cli-startup-bench.json- Vernieuw met
pnpm test:startup:bench:update - Vergelijk huidige resultaten met de fixture via
pnpm test:startup:bench:check
Gateway-opstartbenchmark
Script: scripts/bench-gateway-startup.ts
De benchmark gebruikt standaard de gebouwde CLI-entry op dist/entry.js; voer
pnpm build uit voordat je de package-scriptopdrachten gebruikt. Om in plaats daarvan de source
runner te meten, geef je --entry scripts/run-node.mjs mee en houd je die resultaten
gescheiden van baselines voor de gebouwde entry.
Gebruik:
pnpm test:startup:gateway -- --runs 5 --warmup 1pnpm test:startup:gateway -- --case default --runs 10 --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.jsonnode --import tsx scripts/bench-gateway-startup.ts --case default --runs 3 --cpu-prof-dir .artifacts/gateway-startup-cpu
Case-id's:
default: normale Gateway-opstart.skipChannels: Gateway-opstart waarbij kanaalopstart is overgeslagen.oneInternalHook: één geconfigureerde interne hook.allInternalHooks: alle interne hooks.fiftyPlugins: 50 manifest-plugins.fiftyStartupLazyPlugins: 50 startup-lazy manifest-plugins.
Uitvoer bevat de eerste procesuitvoer, /healthz, /readyz, logtijd voor HTTP-listen,
logtijd voor Gateway ready, CPU-tijd, CPU-coreverhouding, maximale RSS, heap, startup trace-
metrics, event-loopvertraging en gedetailleerde metrics voor Plugin-lookup-tabellen. Het script
schakelt OPENCLAW_GATEWAY_STARTUP_TRACE=1 in de child-Gateway-omgeving in.
Lees /healthz als liveness: de HTTP-server kan antwoorden. Lees /readyz als
bruikbare readiness: sidecars van opstart-Plugins, kanalen en ready-critical
post-attach-werk zijn afgerond. Gateway-opstarthooks worden asynchroon verzonden
en maken geen deel uit van de readiness-garantie. Ready-logtijd is de interne
ready-logtijdstempel van de Gateway; die is nuttig voor attributie aan de proceskant,
maar is geen vervanging voor de externe /readyz-probe.
Gebruik JSON-uitvoer of --output bij het vergelijken van wijzigingen. Gebruik --cpu-prof-dir alleen
nadat de trace-uitvoer wijst op import-, compile- of CPU-gebonden werk dat niet
alleen uit fasetimings kan worden verklaard. Vergelijk resultaten van de source runner niet met
gebouwde dist/entry.js-resultaten als dezelfde baseline.
Gateway-herstartbenchmark
Script: scripts/bench-gateway-restart.ts
De herstartbenchmark wordt alleen ondersteund op macOS en Linux. Deze gebruikt SIGUSR1 voor in-process herstarts en faalt direct op Windows.
De benchmark gebruikt standaard de gebouwde CLI-entry op dist/entry.js; voer
pnpm build uit voordat je de package-scriptopdrachten gebruikt. Om in plaats daarvan de source
runner te meten, geef je --entry scripts/run-node.mjs mee en houd je die resultaten
gescheiden van baselines voor de gebouwde entry.
Gebruik:
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1pnpm test:restart:gateway -- --case skipChannelsAcpxProbe --case skipChannelsNoAcpxProbe --runs 1 --restarts 5node --import tsx scripts/bench-gateway-restart.ts --case fiftyPlugins --runs 1 --restarts 5 --output .artifacts/gateway-restart.jsonnode --import tsx scripts/bench-gateway-restart.ts --json
Case-id's:
skipChannels: herstart met overgeslagen kanalen.skipChannelsAcpxProbe: herstart met overgeslagen kanalen en ACPX-opstartprobe aan.skipChannelsNoAcpxProbe: herstart met overgeslagen kanalen en ACPX-opstartprobe uit.default: normale herstart.fiftyPlugins: herstart met 50 manifest-plugins.
Uitvoer bevat volgende /healthz, volgende /readyz, downtime, restart-ready-timing,
CPU, RSS, startup trace-metrics voor het vervangende proces en restart trace-
metrics voor signaalafhandeling, active-work-drain, sluitfasen, volgende start, ready-
timing en geheugensnapshots. Het script schakelt
OPENCLAW_GATEWAY_STARTUP_TRACE=1 en OPENCLAW_GATEWAY_RESTART_TRACE=1 in de
child-Gateway-omgeving in.
Gebruik deze benchmark wanneer een wijziging raakt aan herstartsignalering, close-handlers,
startup-after-restart, sidecar-shutdown, service handoff of readiness na
herstart. Begin met skipChannels wanneer je Gateway-mechanica isoleert van kanaalopstart.
Gebruik default of Plugin-zware cases pas nadat de smalle case het
herstartpad verklaart.
Trace-metrics zijn attributieaanwijzingen, geen oordelen. Een herstartwijziging moet worden
beoordeeld op basis van meerdere samples, de bijbehorende ownerspan, /healthz- en /readyz-
gedrag en het gebruikerszichtbare herstartcontract.
Onboarding-E2E (Docker)
Docker is optioneel; dit is alleen nodig voor gecontaineriseerde onboarding-smoketests.
Volledige cold-start-flow in een schone Linux-container:
scripts/e2e/onboard-docker.shDit script stuurt de interactieve wizard aan via een pseudo-tty, verifieert config-/workspace-/sessiebestanden, start daarna de Gateway en voert openclaw health uit.
QR-importsmoke (Docker)
Zorgt ervoor dat de onderhouden QR-runtimehelper wordt geladen onder de ondersteunde Docker-Node-runtimes (Node 24 standaard, Node 22 compatibel):
pnpm test:docker:qr