Release and CI
Тести
- Повний набір засобів тестування (набори тестів, перевірки наживо, Docker): Тестування
- Перевірка оновлень і пакетів плагінів: Тестування оновлень і плагінів
Типова поведінка агента
Сеанси агента запускають тести й обчислювально інтенсивні перевірки віддалено через Crabbox. Для довіреного коду супровідників типовим є Blacksmith Testbox. Налаштований робочий процес Testbox завантажує облікові дані, тому недовірений код учасників або форків натомість має використовувати CI форку без секретів або санітизований прямий AWS Crabbox.
Якщо завдання з довіреним кодом, імовірно, потребуватиме тестів або ретельного
підтвердження, негайно виконайте попередній прогрів у фоновому командному сеансі,
продовжуйте працювати, поки він готується, повторно використовуйте повернений
ідентифікатор tbx_..., синхронізуйте поточну робочу копію під час кожного запуску
та зупиніть його перед передаванням роботи:
node scripts/crabbox-wrapper.mjs warmup --provider blacksmith-testbox --keep --timing-jsonПісля першого успішного повторного використання обгортка записує базу оренди,
залежності та відбиток робочого процесу Testbox у .crabbox/testbox-leases/.
Після змін лише у вихідному коді прогріте середовище продовжує використовуватися.
Зміна бази злиття, файла блокування, вхідних даних менеджера пакетів, обгортки або
робочого процесу Testbox спричиняє безпечну відмову й вимагає нової оренди. Кожен
запуск усе одно синхронізує поточну робочу копію.
OPENCLAW_TESTBOX_ALLOW_STALE=1 призначено лише для навмисної діагностики, а не
для підтвердження випуску.
Наведені нижче команди локального тестування призначені для робочих процесів людей або явного резервного варіанта для агента, запитаного користувачем. Про недоступність віддаленого постачальника потрібно повідомити; вона не дає дозволу непомітно запускати широкий набір локальних перевірок.
Для недовіреного коду виконайте попередній прогрів із --provider aws. Кожен
запуск має встановлювати CRABBOX_ENV_ALLOW=CI, передавати
--provider aws --no-hydrate і використовувати новий тимчасовий віддалений
HOME перед установленням залежностей або запуском тестів. Використовуйте
щойно прогріту оренду, призначену саме для цього недовіреного джерела; ніколи
не використовуйте повторно довірену або раніше завантажену обліковими даними
оренду. Запускайте встановлений довірений виконуваний файл Crabbox із чистої
довіреної робочої копії main і отримуйте лише віддалений PR за допомогою
--fresh-pr; ніколи не виконуйте локально обгортку чи конфігурацію з
недовіреної робочої копії. Скасуйте встановлення
CRABBOX_AWS_INSTANCE_PROFILE і виконайте безпечну відмову, якщо визначене
значення aws.instanceProfile не порожнє. Перед будь-яким установленням або
тестуванням за допомогою довірених інструментів з абсолютними шляхами вимагайте
токен IMDSv2, доведіть, що кінцева точка облікових даних IAM повертає 404, і
перевірте, що віддалене значення git rev-parse HEAD дорівнює повному
перевіреному SHA головної версії PR. Прив’яжіть оренду до цього SHA та
зупиніть і прогрійте її повторно, коли головна версія зміниться. Завантажте
довірений scripts/crabbox-untrusted-bootstrap.sh із чистої гілки main
разом із --fresh-pr; він установлює закріплені версії Node/pnpm, перевіряє
SHA та закріплену версію менеджера пакетів, ізолює HOME, установлює
залежності, а потім виконує запитаний тест. Якщо брокер не може довести
відсутність ролі або віддаленого PR, використовуйте CI форку без секретів.
Не використовуйте hydrate-github, --no-sync або робочий процес Testbox із
завантаженими обліковими даними.
Скасуйте всі перевизначення CRABBOX_TAILSCALE*, примусово встановіть
--network public --tailscale=false, очистьте прапорці вузла виходу та LAN
і перед завантаженням будь-якого сценарію вимагайте, щоб crabbox inspect
повідомляв про загальнодоступну мережу без стану Tailscale.
Звичайний порядок локального запуску
pnpm test:changedдля підтвердження зміненого обсягу за допомогою Vitest.pnpm test <path-or-filter>для одного файла, каталогу або явно заданої цілі.pnpm testлише тоді, коли вам навмисно потрібен повний локальний набір тестів Vitest.
У робочому дереві Codex або пов’язаній чи розрідженій робочій копії агенти
уникають безпосереднього локального запуску
pnpm test* / pnpm check* / pnpm crabbox:run:
- Явно запитаний користувачем локальний резервний варіант для невеликого файла:
node scripts/run-vitest.mjs <path-or-filter>. - Перевірки змін або широке підтвердження:
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:changed, щоб pnpm запускався всередині Testbox. - Підсумкові
exitCodeта JSON із часовими показниками обгортки є результатом команди. Делегований запуск Blacksmith GitHub Actions може показуватиcancelledпісля успішної команди SSH, оскільки Testbox зупиняється ззовні дії підтримання активності; перш ніж вважати це помилкою, перевірте підсумок обгортки та вивід команди. OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>: зберігає послідовне виконання ресурсомістких перевірок у поточному робочому дереві, а не в спільному каталозі Git, для таких команд, якpnpm check:changedі цільовіpnpm test .... Використовуйте лише на локальних хостах із високою потужністю, коли навмисно запускаєте незалежні перевірки в пов’язаних робочих деревах.
Основні команди
Запуски обгортки тестів завершуються коротким підсумком [test] passed|failed|skipped ... in ...; власний рядок тривалості Vitest залишається деталізацією для окремого сегмента.
| Команда | Що вона робить |
|---|---|
pnpm test |
Явні цілі у вигляді файлів або каталогів спрямовуються через обмежені за областю смуги Vitest. Запуски без цілі слугують підтвердженням повного набору: фіксовані групи сегментів розгортаються до кінцевих конфігурацій для локального паралельного виконання, а очікувана кількість сегментів виводиться перед початком. Група розширень завжди розгортається в окремі конфігурації сегментів для кожного розширення замість одного гігантського процесу кореневого проєкту. |
pnpm test:changed |
Швидкий інтелектуальний запуск тестів для змін: точні цілі з безпосередніх змін тестів, сусідніх файлів *.test.ts, явних зіставлень вихідного коду та локального графа імпортів. Широкі зміни конфігурації або пакетів пропускаються, якщо їх неможливо зіставити з точними тестами. |
OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed |
Явний широкий запуск тестів для змін; використовуйте, коли зміна тестового каркаса, конфігурації або пакета має повертатися до ширшої поведінки Vitest для тестування змін. |
pnpm test:force |
Звільняє налаштований порт Gateway OpenClaw (типово 18789), а потім запускає повний набір з ізольованим портом Gateway, щоб серверні тести не конфліктували із запущеним екземпляром. |
pnpm test:coverage |
Створює інформаційний звіт про покриття V8 для типової смуги модульних тестів (vitest.unit.config.ts); порогові значення покриття не застосовуються. |
pnpm test:coverage:changed |
Покриття модульних тестів лише для файлів, змінених відносно origin/main. |
pnpm changed:lanes |
Показує архітектурні смуги, активовані різницею відносно origin/main. |
pnpm check:changed |
Поза CI типово делегує виконання Crabbox/Testbox, а потім запускає інтелектуальний шлюз перевірки змін у віддаленому дочірньому середовищі: форматування, перевірку типів, лінтинг і захисні команди для відповідних смуг. Не запускає Vitest; для підтвердження тестами використовуйте pnpm test:changed або pnpm test <target>. |
Спільний стан тестів і допоміжні засоби процесів
src/test-utils/openclaw-test-state.ts: використовуйте у Vitest, коли тесту потрібні ізольованіHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH, тестова конфігурація, робочий простір, каталог агента або сховище профілів автентифікації.pnpm test:env-mutations:report: неблокувальний звіт про тести та каркаси, які безпосередньо змінюютьHOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIRабо пов’язані ключі середовища. Використовуйте його для пошуку кандидатів на міграцію до спільного допоміжного засобу стану тестів.test/helpers/openclaw-test-instance.ts: для процесних наскрізних тестів, яким потрібні запущений Gateway, середовище CLI, збирання журналів і очищення в одному місці.- Смуги наскрізного тестування Docker/Bash, що підключають
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>у кожному потоці.node scripts/lib/openclaw-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --jsonзаписує файл змінних середовища хоста, який можна підключити як джерело (--передcreateне дає новішим середовищам виконання Node трактувати--env-fileяк прапорець Node). Смуги, що запускають Gateway, можуть підключатиscripts/lib/openclaw-e2e-instance.shдля визначення точки входу, запуску імітатора OpenAI, запуску на передньому чи задньому плані, перевірок готовності, експорту змінних середовища стану, виведення журналів і очищення процесів.
Смуги Control UI, TUI та розширень
- Імітовані E2E-тести Control UI:
pnpm test:ui:e2eзапускає контур Vitest + Playwright, який запускає Vite Control UI та керує реальною сторінкою Chromium, підключеною до імітованого WebSocket Gateway. Тести містяться вui/src/**/*.e2e.test.ts; спільні імітації та засоби керування — уui/src/test-helpers/control-ui-e2e.ts.pnpm test:e2eвключає цей контур. Запуски агентом типово виконуються в Testbox/Crabbox, зокрема для цільової перевірки; використовуйтеnode scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.tsлише як явно вибраний локальний резервний варіант. - PTY-тести TUI:
node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tsзапускає швидкий PTY-контур із фіктивним бекендом.OPENCLAW_TUI_PTY_INCLUDE_LOCAL=1абоpnpm tui:pty:test:watch --mode localзапускає повільнішу димову перевіркуtui --local, яка імітує лише зовнішню кінцеву точку моделі. Перевіряйте стабільний видимий текст або виклики фікстур, а не необроблені знімки ANSI. pnpm test:extensionsіpnpm test extensionsзапускають усі шарди розширень/плагінів. Ресурсомісткі плагіни каналів, плагін браузера та OpenAI запускаються як окремі шарди; інші групи плагінів залишаються пакетними.pnpm test extensions/<id>запускає контур одного вбудованого плагіна.- Файли вихідного коду із сусідніми тестами зіставляються спочатку з цими тестами, а вже потім — із ширшими шаблонами каталогів. Зміни допоміжного коду в
src/channels/plugins/contracts/test-helpers,src/plugin-sdk/test-helpersіsrc/plugins/contractsвикористовують локальний граф імпортів, щоб запускати тести, які імпортують цей код, замість широкого запуску всіх шардів, коли шлях залежності визначено точно. - Цілі каталогів контрактів розгалужуються на відповідні контури контрактів:
pnpm test src/channels/plugins/contractsзапускає чотири конфігурації контрактів каналів, аpnpm test src/plugins/contracts— конфігурацію контрактів плагінів, оскільки загальні проєктиchannels/pluginsвиключаютьcontracts/**. auto-replyрозділено на три окремі конфігурації (core,top-level,reply), щоб тестова обв'язка відповідей не переважала над легшими високорівневими тестами стану, токенів і допоміжного коду.- Вибрані тестові файли
plugin-sdkіcommandsспрямовуються через окремі легкі контури, які залишають лишеtest/setup.ts, тоді як ресурсомісткі сценарії середовища виконання залишаються у своїх наявних контурах. - Базова конфігурація Vitest типово використовує
pool: "threads"таisolate: false, а спільний неізольований засіб запуску ввімкнено в усіх конфігураціях репозиторію. pnpm test:channelsзапускаєvitest.channels.config.ts.
Gateway та E2E
- Інтеграція Gateway вмикається за явною згодою:
OPENCLAW_TEST_INCLUDE_GATEWAY=1 pnpm testабоpnpm test:gateway. pnpm test:e2e: сукупний набір E2E репозиторію =pnpm test:e2e:gateway && pnpm test:ui:e2e.pnpm test:e2e:gateway: наскрізні димові тести Gateway (кілька екземплярів, сполучення WS/HTTP/вузлів). Типово використовуєthreads+isolate: falseз адаптивною кількістю виконавців уvitest.e2e.config.ts; налаштування кількості — черезOPENCLAW_E2E_WORKERS=<n>, докладних журналів — черезOPENCLAW_E2E_VERBOSE=1.pnpm test:live: тести провайдерів у реальному середовищі (Claude/Minimax/DeepSeek/z.ai тощо, обмежені файлами*.live.test.ts). Для скасування пропуску потрібні ключі API таLIVE=1(абоOPENCLAW_LIVE_TEST=1); докладний вивід вмикається черезOPENCLAW_LIVE_TEST_QUIET=0.
Повний набір Docker (pnpm test:docker:all)
Збирає спільний образ для тестування в реальному середовищі, один раз пакує OpenClaw як tar-архів npm, збирає або повторно використовує базовий образ виконавця Node/Git і функціональний образ, який установлює цей tar-архів у /app, а потім запускає контури димових Docker-тестів через зважений планувальник. scripts/package-openclaw-for-docker.mjs — єдиний локальний і CI-пакувальник; він перевіряє tar-архів і dist/postinstall-inventory.json, перш ніж Docker їх використає.
- Базовий образ (
OPENCLAW_DOCKER_E2E_BARE_IMAGE): контури інсталятора, оновлення та залежностей плагінів; монтує попередньо зібраний tar-архів замість скопійованого вихідного коду репозиторію. - Функціональний образ (
OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE): контури звичайної функціональності зібраного застосунку. - Визначення контурів:
scripts/lib/docker-e2e-scenarios.mjs. Планувальник:scripts/lib/docker-e2e-plan.mjs. Виконавець:scripts/test-docker-all.mjs. node scripts/test-docker-all.mjs --plan-jsonвиводить план CI, яким керує планувальник (контури, типи образів, потреби в пакеті/образі для реального середовища, сценарії стану, перевірки облікових даних), не збираючи й не запускаючи Docker.
Параметри планування (змінні середовища, типові значення в дужках):
| Змінна середовища | Типове значення | Призначення |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM |
10 | Слоти процесів. |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM |
10 | Хвостовий пул, чутливий до провайдера. |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT |
9 | Обмеження кількості ресурсомістких контурів провайдерів у реальному середовищі. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Обмеження кількості контурів, які використовують ресурси npm. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Обмеження кількості контурів, які використовують ресурси сервісів. |
OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT / _CODEX_LIMIT / _GEMINI_LIMIT / _DROID_LIMIT / _OPENCODE_LIMIT |
4 | Обмеження кількості ресурсомістких контурів для кожного провайдера. |
OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT / _TELEGRAM_LIMIT |
1 | Суворіші обмеження для кожного провайдера. |
OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT / OPENCLAW_DOCKER_ALL_DOCKER_LIMIT |
- | Перевизначення для потужніших хостів. |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS |
2000 | Затримка між запусками контурів, що запобігає сплескам створення ресурсів локальним демоном Docker. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7,200,000 (120 хв) | Резервний тайм-аут для кожного контуру; для вибраних контурів реального середовища та хвостових контурів застосовуються суворіші обмеження. |
OPENCLAW_DOCKER_ALL_LIVE_RETRIES |
1 | Повторні спроби в разі тимчасових збоїв провайдера в реальному середовищі. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
вимкнено | Виводить маніфест контурів без запуску Docker. |
OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS |
30000 | Інтервал виведення стану активних контурів. |
OPENCLAW_DOCKER_ALL_TIMINGS |
увімкнено | Повторно використовує .artifacts/docker-tests/lane-timings.json для впорядкування від найдовшого до найкоротшого; установіть 0, щоб вимкнути. |
OPENCLAW_DOCKER_ALL_LIVE_MODE |
- | skip — лише для детермінованих/локальних контурів, only — лише для контурів провайдерів у реальному середовищі. Псевдоніми: pnpm test:docker:local:all, pnpm test:docker:live:all. Режим лише реального середовища об'єднує основні та хвостові контури в один пул, упорядкований від найдовшого до найкоротшого, щоб групи провайдерів разом розподіляли завдання Claude/Codex/Gemini. |
OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS |
180 | Тайм-аут налаштування Docker для бекенду CLI. |
Шаблон змінної середовища для обмежень ресурсів: OPENCLAW_DOCKER_ALL_<RESOURCE>_LIMIT (назва ресурсу у верхньому регістрі, послідовності неалфавітно-цифрових символів замінено на _).
Інша поведінка: засіб запуску за замовчуванням виконує попередню перевірку Docker, очищає застарілі E2E-контейнери OpenClaw, спільно використовує кеші інструментів CLI провайдерів між сумісними смугами та припиняє планувати нові об’єднані в пул смуги після першої помилки, якщо не встановлено OPENCLAW_DOCKER_ALL_FAIL_FAST=0. Якщо одна смуга перевищує фактичне обмеження ваги або ресурсів на хості з низьким рівнем паралелізму, вона все одно може запуститися з порожнього пулу й виконуватися самостійно, доки не звільнить ресурси. Журнали окремих смуг, 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>, щоб вивести команди для недорогого цільового повторного запуску.
Важливі смуги Docker
| Команда | Що перевіряє |
|---|---|
pnpm test:docker:browser-cdp-snapshot |
E2E-контейнер джерела на базі Chromium із необробленим CDP та ізольованим Gateway; знімки ролей CDP від browser doctor --deep містять URL-адреси посилань, інтерактивні елементи, підвищені до доступних для натискання за допомогою курсора, посилання на iframe та метадані фреймів. |
pnpm test:docker:skill-install |
Установлює запакований tar-архів у чистому засобі запуску Docker з skills.install.allowUploadedArchives: false, визначає поточний ідентифікатор навички за допомогою пошуку в активному ClawHub, установлює через openclaw skills install і перевіряє SKILL.md, .clawhub/origin.json, .clawhub/lock.json та skills info --json. |
pnpm test:docker:live-cli-backend:claude, :claude:resume, :claude:mcp |
Цільові інтерактивні перевірки серверної частини CLI; Gemini має відповідні псевдоніми :resume та :mcp. |
pnpm test:docker:openwebui |
Контейнеризовані OpenClaw + Open WebUI: вхід у систему, перевірка /api/models, виконання справжнього проксійованого чату через /api/chat/completions. Потребує придатного ключа активної моделі та завантажує зовнішній образ; не очікується така сама стабільність у CI, як у наборах модульних/E2E-тестів. |
pnpm test:docker:mcp-channels |
Попередньо заповнений контейнер Gateway разом із клієнтським контейнером, що запускає openclaw mcp serve: виявлення маршрутизованих розмов, читання транскриптів, метадані вкладень, поведінка черги подій у реальному часі, маршрутизація вихідного надсилання та сповіщення про канали й дозволи у стилі Claude через справжній міст stdio (перевірка безпосередньо читає необроблені MCP-фрейми stdio). |
pnpm test:docker:upgrade-survivor |
Установлює запакований tar-архів поверх забрудненої фікстури старого користувача, запускає оновлення пакета та неінтерактивний doctor без активних ключів провайдерів/каналів, запускає Gateway через local loopback і перевіряє, що агенти, конфігурація каналів, списки дозволених Plugin, файли робочого простору й сеансів, застарілий стан залежностей старих Plugin, запуск і стан RPC зберігаються. |
pnpm test:docker:published-upgrade-survivor |
За замовчуванням установлює openclaw@latest, створює реалістичні файли наявного користувача, налаштовує їх за допомогою вбудованого рецепта openclaw config set, оновлює до запакованого tar-архіву, запускає неінтерактивний doctor, записує .artifacts/upgrade-survivor/summary.json, перевіряє /healthz, /readyz і стан RPC. Базову специфікацію можна перевизначити через OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC, розширити матрицю через OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS або додати фікстури сценаріїв через OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues (включає configured-plugin-installs і stale-source-plugin-shadow). Package Acceptance надає їх як published_upgrade_survivor_baseline(s) / _scenarios і розпізнає метатокени на кшталт last-stable-4 або all-since-2026.4.23. |
pnpm test:docker:update-migration |
Стенд перевірки збереження працездатності після опублікованого оновлення у сценарії plugin-deps-cleanup, що за замовчуванням починається з openclaw@2026.4.23. Робочий процес Update Migration розширює його параметром baselines=all-since-2026.4.23, щоб підтвердити очищення залежностей налаштованих Plugin поза межами повного CI випуску. |
pnpm test:docker:plugins |
Димова перевірка встановлення/оновлення для локального шляху, file:, пакетів реєстру npm із піднятими залежностями, рухомих посилань git, фікстур ClawHub, оновлень маркетплейсу та ввімкнення/перевірки пакета Claude. |
Локальний шлюз PR
Для локальних перевірок перед інтеграцією PR або перевірок шлюзу виконайте:
pnpm check:changedpnpm checkpnpm check:test-typespnpm buildpnpm testpnpm check:docs
Якщо pnpm test нестабільно завершується на завантаженому хості, повторіть запуск один раз, перш ніж вважати це регресією, а потім ізолюйте проблему за допомогою pnpm test <path/to/test>. Для хостів з обмеженим обсягом пам’яті:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testOPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-vitest-cache pnpm test:changed
Інструменти аналізу продуктивності тестів
pnpm test:perf:imports: вмикає звіти Vitest про тривалість імпорту та її деталізацію, водночас зберігаючи маршрутизацію за областями для явно вказаних цільових файлів/каталогів.pnpm test:perf:imports:changedобмежує таке саме профілювання файлами, зміненими післяorigin/main.pnpm test:perf:changed:bench -- --ref <git-ref>порівнює продуктивність маршрутизованого шляху в режимі змін із нативним запуском кореневого проєкту для тієї самої зафіксованої різниці git;pnpm test:perf:changed:bench -- --worktreeвимірює продуктивність поточного набору змін у робочому дереві без попередньої фіксації.pnpm test:perf:profile:mainзаписує профіль CPU для головного потоку Vitest (.artifacts/vitest-main-profile);pnpm test:perf:profile:runnerзаписує профілі CPU та купи для засобу запуску модульних тестів (.artifacts/vitest-runner-profile).pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json: послідовно запускає кожну кінцеву конфігурацію Vitest повного набору тестів і записує згруповані дані про тривалість, а також JSON-артефакти й журнали для кожної конфігурації. Звіти повного набору тестів типово ізолюють файли, щоб збережені графи модулів і паузи збирання сміття від попередніх файлів не зараховувалися до наступних перевірок; передавайте-- --no-isolateлише для навмисного профілювання накопичення у спільному робочому процесі. Агент продуктивності тестів використовує це як базовий показник перед спробами виправити повільні тести.pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonпорівнює згруповані звіти після зміни, спрямованої на підвищення продуктивності.- Запуски сегментів повного набору, розширень і шаблонів включення оновлюють локальні дані про тривалість у
.artifacts/vitest-shard-timings.json; подальші запуски цілої конфігурації використовують ці дані для балансування повільних і швидких сегментів. Сегменти CI з шаблонами включення додають назву сегмента до ключа тривалості, завдяки чому дані про тривалість відфільтрованих сегментів залишаються видимими, не замінюючи даних про тривалість цілої конфігурації. УстановітьOPENCLAW_TEST_PROJECTS_TIMINGS=0, щоб ігнорувати локальний артефакт із даними про тривалість.
Тести продуктивності
Затримка моделі (scripts/bench-model.ts)
pnpm tsx scripts/bench-model.ts --runs 10Необов’язкові змінні середовища: MINIMAX_API_KEY, MINIMAX_BASE_URL, MINIMAX_MODEL, ANTHROPIC_API_KEY. Типовий запит: «Відповідай одним словом: ok. Без розділових знаків або додаткового тексту».
Запуск 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 allНабори параметрів:
startup:--version,--help,health,health --json,status --json,statusreal:health,status,status --json,sessions,sessions --json,tasks --json,tasks list --json,tasks audit --json,agents list --json,gateway status,gateway status --json,gateway health --json,config get gateway.portall: обидва набори параметрів разом
Результат містить sampleCount, середнє значення, p50, p95, мінімум/максимум, розподіл кодів виходу/сигналів і максимальний RSS для кожної команди. --cpu-prof-dir / --heap-prof-dir записують профілі V8 для кожного запуску.
Збережений результат: pnpm test:startup:bench:smoke записує .artifacts/cli-startup-bench-smoke.json; pnpm test:startup:bench:save записує .artifacts/cli-startup-bench-all.json (runs=5 warmup=1). Зафіксований у репозиторії тестовий зразок: test/fixtures/cli-startup-bench.json, який оновлюється командою pnpm test:startup:bench:update і порівнюється командою pnpm test:startup:bench:check.
Запуск Gateway (scripts/bench-gateway-startup.ts)
Типово використовується зібрана точка входу CLI у dist/entry.js; спочатку виконайте pnpm build. Передайте --entry scripts/run-node.mjs, щоб натомість вимірювати засіб запуску з вихідного коду, і зберігайте ці результати окремо від базових показників зібраної точки входу.
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.jsonІдентифікатори сценаріїв: default, skipChannels (запуск каналів пропущено), oneInternalHook, allInternalHooks, fiftyPlugins (50 плагінів із маніфестами), fiftyStartupLazyPlugins (50 плагінів із маніфестами та відкладеним завантаженням під час запуску).
Результат містить перший вивід процесу, /healthz, /readyz, час журналу початку прослуховування HTTP, час журналу готовності Gateway, час CPU, коефіцієнт використання ядра CPU, максимальний RSS, купу, метрики трасування запуску, затримку циклу подій і детальні метрики таблиці пошуку плагінів. Скрипт установлює OPENCLAW_GATEWAY_STARTUP_TRACE=1 у середовищі дочірнього процесу Gateway.
/healthz перевіряє життєздатність (HTTP-сервер може відповідати). /readyz перевіряє готовність до використання (допоміжні процеси плагінів запуску, канали та критична для готовності робота після приєднання завершилися). Обробники запуску виконуються асинхронно й не входять до гарантії готовності. Час журналу готовності — це внутрішня позначка часу Gateway, корисна для визначення внеску процесу, але вона не замінює зовнішню перевірку /readyz.
Під час порівняння змін використовуйте вивід JSON або --output. Використовуйте --cpu-prof-dir лише після того, як результати трасування вкажуть на імпорт, компіляцію або роботу, обмежену ресурсами CPU, яку неможливо пояснити лише тривалістю фаз.
Перезапуск Gateway (scripts/bench-gateway-restart.ts)
Лише macOS і Linux (використовує SIGUSR1 для перезапусків усередині процесу; у Windows одразу завершується помилкою). Типово використовується та сама зібрана точка входу й перевизначення --entry scripts/run-node.mjs, що й для запуску Gateway вище.
pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1Ідентифікатори сценаріїв: skipChannels, skipChannelsAcpxProbe (перевірку запуску ACPX увімкнено), skipChannelsNoAcpxProbe (перевірку вимкнено), default, fiftyPlugins.
Результат містить наступні /healthz і /readyz, тривалість простою, час готовності після перезапуску, CPU, RSS, метрики трасування запуску для процесу-замінника та метрики трасування перезапуску для обробки сигналу, завершення активної роботи, фаз закриття, наступного запуску, часу готовності й знімків пам’яті. Скрипт установлює OPENCLAW_GATEWAY_STARTUP_TRACE=1 і OPENCLAW_GATEWAY_RESTART_TRACE=1.
Використовуйте цей тест продуктивності, коли зміна стосується сигналізації перезапуску, обробників закриття, запуску після перезапуску, завершення роботи допоміжних процесів, передавання керування службою або готовності після перезапуску. Починайте з skipChannels, щоб ізолювати механіку Gateway від запуску каналів; використовуйте default або сценарії з великою кількістю плагінів лише після того, як вузький сценарій пояснить шлях перезапуску. Метрики трасування — це підказки для визначення причин, а не остаточні висновки: оцінюйте зміну перезапуску за кількома зразками, відповідним діапазоном власника, поведінкою /healthz//readyz і видимим для користувача контрактом перезапуску.
Наскрізне тестування початкового налаштування (Docker)
Необов’язково; потрібно лише для контейнеризованих швидких перевірок початкового налаштування. Повний процес холодного запуску в чистому контейнері Linux:
scripts/e2e/onboard-docker.shКерує інтерактивним майстром через псевдотермінал, перевіряє файли конфігурації, робочого простору та сеансу, а потім запускає Gateway і виконує openclaw health.
Швидка перевірка імпорту QR (Docker)
Перевіряє, що підтримуваний допоміжний засіб середовища виконання QR завантажується в підтримуваних середовищах виконання Docker Node (типово Node 24, сумісний із Node 22):
pnpm test:docker:qr