Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Повний набір для тестування (набори тестів, live, Docker): Тестування
- Перевірка оновлень і пакетів Plugin: Тестування оновлень і Plugin
-
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. Вона запускає typecheck, 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, захоплення журналів і очищення в одному місці. -
Помічники 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>у кожному потоці. Нижчорівневі викликачі можуть використовувати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для вихідного env-файла хоста.--передcreateне дає новішим середовищам виконання Node трактувати--env-fileяк прапорець Node. Лінії Docker/Bash, які запускають Gateway, можуть підключатиscripts/lib/openclaw-e2e-instance.shусередині контейнера для визначення entrypoint, запуску mock OpenAI, запуску Gateway на передньому/задньому плані, перевірок готовності, експорту середовища стану, дампів журналів і очищення процесів. -
Повні, розширювальні та include-pattern запуски шардів оновлюють локальні дані часу в
.artifacts/vitest-shard-timings.json; наступні запуски всієї конфігурації використовують ці виміри, щоб балансувати повільні та швидкі шарди. Include-pattern CI-шарди додають назву шарда до ключа часу, що зберігає видимість вимірів відфільтрованих шардів без заміни даних часу всієї конфігурації. ВстановітьOPENCLAW_TEST_PROJECTS_TIMINGS=0, щоб ігнорувати локальний артефакт часу. -
Вибрані тестові файли
plugin-sdkіcommandsтепер маршрутизуються через окремі легкі лінії, які залишають лишеtest/setup.ts, залишаючи runtime-важкі випадки на їхніх наявних лініях. -
Вихідні файли із сусідніми тестами зіставляються з цим сусіднім тестом перед поверненням до ширших glob-виразів каталогів. Зміни помічників у
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpersіsrc/plugins/contractsвикористовують локальний граф імпортів для запуску тестів, що імпортують їх, замість широкого запуску кожного шарда, коли шлях залежності точний. -
auto-replyтепер також розділяється на три окремі конфігурації (core,top-level,reply), щоб каркас відповіді не домінував над легшими top-level тестами статусу/токенів/помічників. -
Базова конфігурація Vitest тепер типово використовує
pool: "threads"іisolate: false, зі спільним неізольованим runner, увімкненим у конфігураціях репозиторію. -
pnpm test:channelsзапускаєvitest.channels.config.ts. -
pnpm test:extensionsіpnpm test extensionsзапускають усі шарди розширень/плагінів. Важкі плагіни каналів, браузерний плагін і OpenAI запускаються як окремі шарди; інші групи плагінів залишаються пакетованими. Використовуйтеpnpm test extensions/<id>для однієї лінії вбудованого плагіна. -
pnpm test:perf:imports: вмикає звітування Vitest про тривалість імпортів і розбивку імпортів, водночас використовуючи маршрутизацію обмежених ліній для явних цілей файлів/каталогів. -
pnpm test:perf:imports:changed: те саме профілювання імпортів, але лише для файлів, змінених післяorigin/main. -
pnpm test:perf:changed:bench -- --ref <git-ref>вимірює routed changed-mode шлях порівняно з нативним запуском кореневого проєкту для тієї самої закоміченої різниці git. -
pnpm test:perf:changed:bench -- --worktreeвимірює поточний набір змін робочого дерева без попереднього коміту. -
pnpm test:perf:profile:main: записує CPU-профіль для головного потоку Vitest (.artifacts/vitest-main-profile). -
pnpm test:perf:profile:runner: записує CPU- і heap-профілі для модульного runner (.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: Запускає наскрізні smoke-тести gateway (зв’язування кількох екземплярів WS/HTTP/node). Типово використовуєthreads+isolate: falseз адаптивними воркерами уvitest.e2e.config.ts; налаштовуйте черезOPENCLAW_E2E_WORKERS=<n>і встановітьOPENCLAW_E2E_VERBOSE=1для докладних журналів. -
pnpm test:live: Запускає live-тести провайдерів (minimax/zai). Потребує API-ключів іLIVE=1(або специфічного для провайдера*_LIVE_TEST=1), щоб не пропускатися. -
pnpm test:docker:all: Збирає спільний live-test образ, один раз пакує OpenClaw як npm tarball, збирає/повторно використовує чистий runner-образ Node/Git, а також функціональний образ, що встановлює цей tarball у/app, а потім запускає Docker smoke-лінії зOPENCLAW_SKIP_DOCKER_BUILD=1через зважений планувальник. Чистий образ (OPENCLAW_DOCKER_E2E_BARE_IMAGE) використовується для ліній installer/update/plugin-dependency; ці лінії монтують попередньо зібраний 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-план, яким володіє планувальник, для вибраних ліній, типів образів, потреб package/live-image, сценаріїв стану та перевірок облікових даних без збирання або запуску Docker.OPENCLAW_DOCKER_ALL_PARALLELISM=<n>керує слотами процесів і типово дорівнює 10;OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM=<n>керує чутливим до провайдерів tail-пулом і типово дорівнює 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для більших хостів. Якщо одна лінія перевищує ефективний ліміт ваги або ресурсу на хості з низькою паралельністю, вона все одно може стартувати з порожнього пулу й працюватиме одна, доки не звільнить місткість. Старти ліній типово рознесені на 2 секунди, щоб уникнути локальних сплесків створення в Docker daemon; перевизначте черезOPENCLAW_DOCKER_ALL_START_STAGGER_MS=<ms>. Runner типово виконує попередню перевірку Docker, очищає застарілі E2E-контейнери OpenClaw, виводить статус активних ліній кожні 30 секунд, ділиться кешами інструментів CLI провайдерів між сумісними лініями, один раз типово повторює транзитні збої live-провайдерів (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лише для ліній live-провайдерів; псевдоніми пакетів:pnpm test:docker:local:allіpnpm test:docker:live:all. Режим live-only об’єднує основні й tail live-лінії в один пул від найдовших, щоб provider buckets могли разом пакувати роботу Claude, Codex і Gemini. Runner припиняє планувати нові pooled-лінії після першого збою, якщо не встановленоOPENCLAW_DOCKER_ALL_FAIL_FAST=0, і кожна лінія має резервний таймаут 120 хвилин, який можна перевизначити черезOPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS; вибрані live/tail лінії використовують жорсткіші ліміти для кожної лінії. Команди налаштування Docker для CLI backend мають власний таймаут через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, запускає raw CDP плюс ізольований Gateway, запускаєbrowser doctor --deepі перевіряє, що знімки ролей CDP містять URL-адреси посилань, підвищені курсором клікабельні елементи, посилання iframe і метадані frame. -
pnpm test:docker:skill-install: Встановлює упакований tarball OpenClaw у чистий Docker runner, вимикаєskills.install.allowUploadedArchives, визначає поточний skill slug із live-пошуку ClawHub, встановлює його черезopenclaw skills installі перевіряєSKILL.md,.clawhub/origin.json,.clawhub/lock.jsonіskills info --json. -
Live Docker-проби CLI backend можна запускати як сфокусовані лінії, наприклад
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: Запускає Dockerized OpenClaw + Open WebUI, входить через Open WebUI, перевіряє/api/models, а потім запускає справжній проксійований чат через/api/chat/completions. Потребує придатного live model key (наприклад, OpenAI у~/.profile), завантажує зовнішній образ Open WebUI і не очікується як CI-стабільний на рівні звичайних unit/e2e наборів. -
pnpm test:docker:mcp-channels: Запускає заповнений початковими даними контейнер Gateway і другий клієнтський контейнер, який породжуєopenclaw mcp serve, а потім перевіряє виявлення маршрутизованих розмов, читання транскриптів, метадані вкладень, поведінку черги живих подій, маршрутизацію вихідного надсилання та сповіщення каналів і дозволів у стилі Claude через справжній міст stdio. Перевірка сповіщень Claude читає сирі stdio MCP-фрейми напряму, тож smoke-тест відображає те, що міст фактично видає. -
pnpm test:docker:upgrade-survivor: Установлює запакований tarball OpenClaw поверх забрудненої фікстури старого користувача, запускає оновлення пакета плюс неінтерактивний doctor без живих ключів провайдера або каналу, потім запускає loopback Gateway і перевіряє, що агенти, конфігурація каналів, allowlist Plugin, файли робочого простору/сеансу, застарілий стан залежностей legacy Plugin, запуск і статус RPC зберігаються. -
pnpm test:docker:published-upgrade-survivor: За замовчуванням установлюєopenclaw@latest, засіває реалістичні файли наявного користувача без живих ключів провайдера або каналу, налаштовує цю базову версію вбудованим рецептом командиopenclaw config set, оновлює цю опубліковану інсталяцію до запакованого tarball OpenClaw, запускає неінтерактивний doctor, записує.artifacts/upgrade-survivor/summary.json, потім запускає loopback Gateway і перевіряє, що налаштовані наміри, файли робочого простору/сеансу, застаріла конфігурація Plugin і стан legacy-залежностей, запуск,/healthz,/readyzта статус RPC зберігаються або коректно відновлюються. Перевизначте одну базову версію за допомогоюOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, розгорніть точну локальну матрицю за допомогоюOPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS, наприкладopenclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15, або додайте фікстури сценаріїв черезOPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues; набір reported-issues міститьconfigured-plugin-installs, щоб перевірити, що налаштовані зовнішні Plugin OpenClaw автоматично встановлюються під час оновлення, і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: Запускає harness published-upgrade survivor у сценаріїplugin-deps-cleanupз інтенсивним очищенням, за замовчуванням починаючи зopenclaw@2026.4.23. Окремий workflowUpdate Migrationрозгортає цю лінію зbaselines=all-since-2026.4.23, щоб кожен стабільний опублікований пакет від.23і далі оновлювався до кандидата та підтверджував очищення залежностей налаштованих Plugin поза Full Release CI. -
pnpm test:docker:plugins: Запускає smoke-тест установлення/оновлення для локального шляху,file:, пакетів npm-реєстру з hoisted-залежностями, рухомих git-посилань, фікстур ClawHub, оновлень marketplace і ввімкнення/інспекції Claude-бандла.
Локальна PR gate
Для локальних перевірок злиття/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 - Типовий prompt: “Відповідай одним словом: ok. Без пунктуації чи додаткового тексту.”
- 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, min/max, розподіл exit-code/signal і зведення max RSS для кожної команди. Необов’язкові --cpu-prof-dir / --heap-prof-dir записують профілі V8 для кожного запуску, щоб вимірювання часу й захоплення профілю використовували той самий harness.
Угоди щодо збереженого виводу:
pnpm test:startup:bench:smokeзаписує цільовий smoke-артефакт у.artifacts/cli-startup-bench-smoke.jsonpnpm test:startup:bench:saveзаписує артефакт повного набору в.artifacts/cli-startup-bench-all.jsonзruns=5іwarmup=1pnpm test:startup:bench:updateоновлює зафіксовану в репозиторії базову fixture уtest/fixtures/cli-startup-bench.jsonзruns=5іwarmup=1
test/fixtures/cli-startup-bench.json- Оновіть за допомогою
pnpm test:startup:bench:update - Порівняйте поточні результати з fixture за допомогою
pnpm test:startup:bench:check
Onboarding E2E (Docker)
Docker необов’язковий; це потрібно лише для контейнеризованих onboarding smoke-тестів. Повний cold-start потік у чистому контейнері Linux:openclaw health.