> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Тестування: живі набори тестів

Для швидкого старту, QA-ранерів, модульних/інтеграційних наборів і Docker-потоків див.
[Тестування](/uk/help/testing). Ця сторінка описує **live** (із доступом до мережі) тестові
набори: матрицю моделей, CLI-бекенди, ACP і live-тести медіапровайдерів, а також
обробку облікових даних.

## Live: локальні smoke-команди

Експортуйте потрібний ключ провайдера в середовище процесу перед ad hoc live
перевірками.

Безпечний медіа-smoke:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm openclaw infer tts convert --local --json \
  --text "OpenClaw live smoke." \
  --output /tmp/openclaw-live-smoke.mp3
```

Безпечний smoke готовності голосового виклику:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm openclaw voicecall setup --json
pnpm openclaw voicecall smoke --to "+15555550123"
```

`voicecall smoke` є dry run, якщо також не вказано `--yes`. Використовуйте `--yes` лише
тоді, коли ви навмисно хочете здійснити реальний сповіщувальний дзвінок. Для Twilio, Telnyx і
Plivo успішна перевірка готовності потребує публічного Webhook URL; local loopback/приватні
резервні варіанти відхиляються за задумом.

## Live: перевірка можливостей Android-вузла

* Тест: `src/gateway/android-node.capabilities.live.test.ts`
* Скрипт: `pnpm android:test:integration`
* Мета: викликати **кожну команду, яку наразі оголошує** підключений Android-вузол, і перевірити поведінку контракту команди.
* Обсяг:
  * Попередньо підготовлене/ручне налаштування (набір не встановлює/запускає/сполучає застосунок).
  * Покомандна перевірка gateway `node.invoke` для вибраного Android-вузла.
* Обов’язкове попереднє налаштування:
  * Android-застосунок уже підключений і сполучений із gateway.
  * Застосунок утримується на передньому плані.
  * Дозволи/згода на захоплення надані для можливостей, які ви очікуєте успішно пройти.
* Необов’язкові перевизначення цілі:
  * `OPENCLAW_ANDROID_NODE_ID` або `OPENCLAW_ANDROID_NODE_NAME`.
  * `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`.
* Повні деталі налаштування Android: [Android-застосунок](/uk/platforms/android)

## Live: model smoke (ключі профілю)

Live-тести розділені на два шари, щоб ми могли ізолювати збої:

* "Direct model" показує, чи провайдер/модель узагалі може відповісти з наданим ключем.
* "Gateway smoke" показує, чи повний конвеєр gateway+agent працює для цієї моделі (сеанси, історія, інструменти, політика sandbox тощо).

### Шар 1: пряме завершення моделі (без gateway)

* Тест: `src/agents/models.profiles.live.test.ts`
* Мета:
  * Перелічити виявлені моделі
  * Використати `getApiKeyForModel`, щоб вибрати моделі, для яких у вас є облікові дані
  * Запустити невелике завершення для кожної моделі (і цільові регресії, де потрібно)
* Як увімкнути:
  * `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо запускаєте Vitest напряму)
* Задайте `OPENCLAW_LIVE_MODELS=modern`, `small` або `all` (псевдонім для modern), щоб фактично запустити цей набір; інакше він пропускається, щоб `pnpm test:live` залишався зосередженим на gateway smoke
* Як вибрати моделі:
  * `OPENCLAW_LIVE_MODELS=modern`, щоб запустити сучасний allowlist (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 5.1, MiniMax M3, Grok 4.3)
  * `OPENCLAW_LIVE_MODELS=small`, щоб запустити обмежений allowlist малих моделей (Qwen 8B/9B local-compatible routes, Ollama Gemma, OpenRouter Qwen/GLM і Z.AI GLM)
  * `OPENCLAW_LIVE_MODELS=all` є псевдонімом сучасного allowlist
  * або `OPENCLAW_LIVE_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,..."` (allowlist через кому)
  * Локальні запуски малих моделей Ollama за замовчуванням використовують `http://127.0.0.1:11434`; задавайте `OPENCLAW_LIVE_OLLAMA_BASE_URL` лише для LAN, кастомних або Ollama Cloud endpoints.
  * Перевірки modern/all і small за замовчуванням використовують свої curated caps; задайте `OPENCLAW_LIVE_MAX_MODELS=0` для вичерпної перевірки вибраних профілів або додатне число для меншого обмеження.
  * Вичерпні перевірки використовують `OPENCLAW_LIVE_TEST_TIMEOUT_MS` як таймаут усього direct-model тесту. За замовчуванням: 60 хвилин.
  * Direct-model probes за замовчуванням запускаються з паралелізмом 20; задайте `OPENCLAW_LIVE_MODEL_CONCURRENCY`, щоб перевизначити.
* Як вибрати провайдерів:
  * `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (allowlist через кому)
* Звідки беруться ключі:
  * За замовчуванням: сховище профілів і резервні варіанти env
  * Задайте `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб вимагати лише **сховище профілів**
* Навіщо це існує:
  * Відокремлює "provider API is broken / key is invalid" від "gateway agent pipeline is broken"
  * Містить невеликі ізольовані регресії (приклад: OpenAI Responses/Codex Responses reasoning replay + tool-call flows)

### Шар 2: Gateway + dev agent smoke (що насправді робить "@openclaw")

* Тест: `src/gateway/gateway-models.profiles.live.test.ts`
* Мета:
  * Запустити gateway у процесі
  * Створити/виправити сеанс `agent:dev:*` (перевизначення моделі для кожного запуску)
  * Перебрати моделі з ключами й перевірити:
    * "змістовну" відповідь (без інструментів)
    * працює реальний виклик інструмента (read probe)
    * необов’язкові додаткові probe інструментів (exec+read probe)
    * регресійні шляхи OpenAI (tool-call-only → follow-up) продовжують працювати
* Деталі probe (щоб можна було швидко пояснити збої):
  * `read` probe: тест записує nonce-файл у workspace і просить agent виконати `read` його та відлунити nonce назад.
  * `exec+read` probe: тест просить agent виконати `exec`-запис nonce у тимчасовий файл, а потім `read` його назад.
  * image probe: тест додає згенерований PNG (cat + randomized code) і очікує, що модель поверне `cat <CODE>`.
  * Посилання на реалізацію: `src/gateway/gateway-models.profiles.live.test.ts` і `test/helpers/live-image-probe.ts`.
* Як увімкнути:
  * `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо запускаєте Vitest напряму)
* Як вибрати моделі:
  * За замовчуванням: сучасний allowlist (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M3, Grok 4.3)
  * `OPENCLAW_LIVE_GATEWAY_MODELS=small`, щоб запустити той самий обмежений allowlist малих моделей через повний конвеєр gateway+agent
  * `OPENCLAW_LIVE_GATEWAY_MODELS=all` є псевдонімом сучасного allowlist
  * Або задайте `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (або список через кому), щоб звузити вибір
  * Перевірки gateway modern/all і small за замовчуванням використовують свої curated caps; задайте `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` для вичерпної вибраної перевірки або додатне число для меншого обмеження.
* Як вибрати провайдерів (уникнути "OpenRouter everything"):
  * `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (allowlist через кому)
* Tool + image probes завжди ввімкнені в цьому live-тесті:
  * `read` probe + `exec+read` probe (навантаження на інструменти)
  * image probe запускається, коли модель оголошує підтримку введення зображень
  * Потік (на високому рівні):
    * Тест генерує крихітний PNG із "CAT" + випадковим кодом (`test/helpers/live-image-probe.ts`)
    * Надсилає його через `agent` `attachments: [{ mimeType: "image/png", content: "<base64>" }]`
    * Gateway розбирає вкладення в `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`)
    * Вбудований agent пересилає мультимодальне повідомлення користувача до моделі
    * Твердження: відповідь містить `cat` + код (допуск OCR: дозволені незначні помилки)

<Tip>
  Щоб побачити, що можна тестувати на вашому комп’ютері (і точні id `provider/model`), запустіть:

  ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
  openclaw models list
  openclaw models list --json
  ```
</Tip>

## Live: smoke CLI-бекенду (Claude, Gemini або інші локальні CLI)

* Тест: `src/gateway/gateway-cli-backend.live.test.ts`
* Мета: перевірити конвеєр Gateway + agent за допомогою локального CLI-бекенду, не змінюючи вашу конфігурацію за замовчуванням.
* Smoke-значення за замовчуванням, специфічні для бекенду, живуть у визначенні `cli-backend.ts` відповідного plugin-власника.
* Увімкнення:
  * `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо запускаєте Vitest напряму)
  * `OPENCLAW_LIVE_CLI_BACKEND=1`
* Значення за замовчуванням:
  * Провайдер/модель за замовчуванням: `claude-cli/claude-sonnet-4-6`
  * Поведінка command/args/image походить із metadata plugin відповідного CLI-бекенду.
* Перевизначення (необов’язково):
  * `OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-sonnet-4-6"`
  * `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/claude"`
  * `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["-p","--output-format","json"]'`
  * `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, щоб надіслати реальне вкладення-зображення (шляхи ін’єктуються в prompt). Docker-рецепти за замовчуванням вимикають це, якщо не запитано явно.
  * `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, щоб передавати шляхи до файлів зображень як CLI args замість ін’єкції в prompt.
  * `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (або `"list"`), щоб керувати тим, як image args передаються, коли задано `IMAGE_ARG`.
  * `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1`, щоб надіслати другий хід і перевірити resume flow.
  * `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1`, щоб увімкнути перевірку безперервності того самого сеансу Claude Sonnet -> Opus, коли вибрана модель підтримує ціль перемикання. Docker-рецепти за замовчуванням вимикають це для сукупної надійності.
  * `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1`, щоб увімкнути MCP/tool loopback probe. Docker-рецепти за замовчуванням вимикають це, якщо не запитано явно.

Приклад:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
  OPENCLAW_LIVE_CLI_BACKEND=1 \
  OPENCLAW_LIVE_CLI_BACKEND_MODEL="claude-cli/claude-sonnet-4-6" \
  pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
```

Дешевий smoke конфігурації Gemini MCP:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
OPENCLAW_LIVE_TEST=1 \
  pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.ts
```

Це не просить Gemini генерувати відповідь. Він записує ті самі системні
налаштування, які OpenClaw дає Gemini, а потім запускає `gemini --debug mcp list`, щоб довести, що
збережений сервер `transport: "streamable-http"` нормалізується до HTTP MCP
форми Gemini і може підключитися до локального streamable-HTTP MCP server.

Docker-рецепт:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm test:docker:live-cli-backend
```

Docker-рецепти для окремих провайдерів:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm test:docker:live-cli-backend:claude
pnpm test:docker:live-cli-backend:claude-subscription
pnpm test:docker:live-cli-backend:gemini
```

Примітки:

* Docker-ранер розташований у `scripts/test-live-cli-backend-docker.sh`.
* Він запускає live CLI-backend smoke усередині Docker-образу репозиторію як непривілейований користувач `node`.
* Він визначає smoke metadata CLI з відповідного extension-власника, а потім встановлює відповідний Linux CLI package (`@anthropic-ai/claude-code` або `@google/gemini-cli`) у кешований записуваний префікс `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (за замовчуванням: `~/.cache/openclaw/docker-cli-tools`).
* `pnpm test:docker:live-cli-backend:claude-subscription` потребує portable Claude Code subscription OAuth через `~/.claude/.credentials.json` з `claudeAiOauth.subscriptionType` або `CLAUDE_CODE_OAUTH_TOKEN` з `claude setup-token`. Спочатку він доводить direct `claude -p` у Docker, а потім виконує два ходи Gateway CLI-backend без збереження env vars Anthropic API-key. Цей subscription lane за замовчуванням вимикає Claude MCP/tool і image probes, бо він споживає ліміти використання підписки з авторизацією, а Anthropic може змінювати поведінку білінгу й rate-limit Claude Agent SDK / `claude -p` без релізу OpenClaw.
* Live CLI-backend smoke тепер виконує той самий наскрізний потік для Claude і Gemini: текстовий хід, хід класифікації зображення, а потім виклик MCP-інструмента `cron`, перевірений через gateway CLI.
* Smoke Claude за замовчуванням також виправляє сеанс із Sonnet на Opus і перевіряє, що відновлений сеанс досі пам’ятає попередню нотатку.

## Live: досяжність APNs HTTP/2 proxy

* Тест: `src/infra/push-apns-http2.live.test.ts`
* Мета: тунелюватися через локальний HTTP CONNECT proxy до sandbox APNs endpoint Apple, надіслати APNs HTTP/2 validation request і перевірити, що реальна відповідь Apple `403 InvalidProviderToken` повертається через proxy path.
* Увімкнення:
  * `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts`
* Необов’язковий таймаут:
  * `OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000`

## Live: ACP bind smoke (`/acp spawn ... --bind here`)

* Тест: `src/gateway/gateway-acp-bind.live.test.ts`
* Мета: перевірити реальний потік прив’язування ACP-розмови з live ACP-агентом:
  * надіслати `/acp spawn <agent> --bind here`
  * прив’язати синтетичну розмову message-channel на місці
  * надіслати звичайне подальше повідомлення в тій самій розмові
  * перевірити, що подальше повідомлення потрапляє до transcript прив’язаної ACP-сесії
* Увімкнення:
  * `pnpm test:live src/gateway/gateway-acp-bind.live.test.ts`
  * `OPENCLAW_LIVE_ACP_BIND=1`
* Типові значення:
  * ACP-агенти в Docker: `claude,codex,gemini`
  * ACP-агент для прямого `pnpm test:live ...`: `claude`
  * Синтетичний канал: контекст розмови в стилі Slack DM
  * ACP-бекенд: `acpx`
* Перевизначення:
  * `OPENCLAW_LIVE_ACP_BIND_AGENT=claude`
  * `OPENCLAW_LIVE_ACP_BIND_AGENT=codex`
  * `OPENCLAW_LIVE_ACP_BIND_AGENT=droid`
  * `OPENCLAW_LIVE_ACP_BIND_AGENT=gemini`
  * `OPENCLAW_LIVE_ACP_BIND_AGENT=opencode`
  * `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini`
  * `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@<version>'`
  * `OPENCLAW_LIVE_ACP_BIND_CODEX_MODEL=gpt-5.5`
  * `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL=opencode/kimi-k2.6`
  * `OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1`
  * `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`
  * `OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5`
* Нотатки:
  * Ця lane використовує поверхню Gateway `chat.send` з admin-only синтетичними полями originating-route, щоб тести могли додавати контекст message-channel, не вдаючи зовнішню доставку.
  * Коли `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` не задано, тест використовує вбудований реєстр агентів вбудованого Plugin `acpx` для вибраного ACP harness-агента.
  * Створення bound-session cron MCP типово виконується best-effort, оскільки зовнішні ACP harnesses можуть скасувати MCP-виклики після проходження bind/image proof; задайте `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`, щоб зробити цей post-bind cron-зонд строгим.

Приклад:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
OPENCLAW_LIVE_ACP_BIND=1 \
  OPENCLAW_LIVE_ACP_BIND_AGENT=claude \
  pnpm test:live src/gateway/gateway-acp-bind.live.test.ts
```

Рецепт Docker:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm test:docker:live-acp-bind
```

Рецепти Docker для одного агента:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm test:docker:live-acp-bind:claude
pnpm test:docker:live-acp-bind:codex
pnpm test:docker:live-acp-bind:droid
pnpm test:docker:live-acp-bind:gemini
pnpm test:docker:live-acp-bind:opencode
```

Нотатки Docker:

* Docker runner розташований у `scripts/test-live-acp-bind-docker.sh`.
* Типово він послідовно запускає ACP bind smoke проти сукупних live CLI-агентів: `claude`, `codex`, потім `gemini`.
* Використовуйте `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=droid`, `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` або `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode`, щоб звузити матрицю.
* Він готує відповідні матеріали автентифікації CLI в контейнері, потім встановлює потрібний live CLI (`@anthropic-ai/claude-code`, `@openai/codex`, Factory Droid через `https://app.factory.ai/cli`, `@google/gemini-cli` або `opencode-ai`), якщо його немає. Сам ACP-бекенд є вбудованим пакетом `acpx/runtime` з офіційного Plugin `acpx`.
* Варіант Droid Docker готує `~/.factory` для налаштувань, передає `FACTORY_API_KEY` і потребує цього API-ключа, оскільки локальну автентифікацію Factory OAuth/keyring неможливо переносимо передати в контейнер. Він використовує вбудований registry entry ACPX `droid exec --output-format acp`.
* Варіант OpenCode Docker є строгою regression lane для одного агента. Він записує тимчасову типову модель `OPENCODE_CONFIG_CONTENT` з `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (типово `opencode/kimi-k2.6`), а `pnpm test:docker:live-acp-bind:opencode` вимагає transcript прив’язаного асистента замість прийняття загального post-bind skip.
* Прямі виклики CLI `acpx` є лише ручним/обхідним шляхом для порівняння поведінки поза Gateway. Docker ACP bind smoke перевіряє вбудований runtime-бекенд `acpx` OpenClaw.

## Live: Codex app-server harness smoke

* Мета: перевірити Codex harness, яким володіє Plugin, через звичайний gateway
  метод `agent`:
  * завантажити bundled Plugin `codex`
  * вибрати `openai/gpt-5.5`, що типово маршрутизує agent turns OpenAI через Codex
  * надіслати перший gateway agent turn до `openai/gpt-5.5` з вибраним Codex harness
  * надіслати другий turn до тієї самої сесії OpenClaw і перевірити, що app-server
    thread може відновитися
  * запустити `/codex status` і `/codex models` через той самий шлях gateway command
  * необов’язково запустити два escalated shell-зонди, перевірені Guardian: одну безпечну
    команду, яку має бути схвалено, і одне вивантаження фальшивого секрету, яке має бути
    відхилено, щоб агент перепитав
* Тест: `src/gateway/gateway-codex-harness.live.test.ts`
* Увімкнення: `OPENCLAW_LIVE_CODEX_HARNESS=1`
* Типова модель: `openai/gpt-5.5`
* Необов’язковий image-зонд: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
* Необов’язковий MCP/tool-зонд: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
* Необов’язковий Guardian-зонд: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
* Smoke примусово задає provider/model `agentRuntime.id: "codex"`, щоб зламаний Codex
  harness не міг пройти, тихо повернувшись до OpenClaw.
* Автентифікація: автентифікація Codex app-server з локального входу в підписку Codex. Docker
  smokes також можуть надавати `OPENAI_API_KEY` для non-Codex-зондів, коли застосовно,
  плюс необов’язково скопійовані `~/.codex/auth.json` і `~/.codex/config.toml`.

Локальний рецепт:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
OPENCLAW_LIVE_CODEX_HARNESS=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1 \
  OPENCLAW_LIVE_CODEX_HARNESS_MODEL=openai/gpt-5.5 \
  pnpm test:live -- src/gateway/gateway-codex-harness.live.test.ts
```

Рецепт Docker:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm test:docker:live-codex-harness
```

Нотатки Docker:

* Docker runner розташований у `scripts/test-live-codex-harness-docker.sh`.
* Він передає `OPENAI_API_KEY`, копіює файли автентифікації Codex CLI, коли вони присутні, встановлює
  `@openai/codex` у змонтований npm
  prefix із правом запису, готує дерево джерел, а потім запускає лише live-тест Codex-harness.
* Docker типово вмикає image-, MCP/tool- і Guardian-зонди. Задайте
  `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` або
  `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` або
  `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`, коли потрібен вужчий debug
  запуск.
* Docker використовує ту саму явну конфігурацію runtime Codex, тому legacy aliases або fallback OpenClaw
  не можуть приховати регресію Codex harness.

### Рекомендовані live-рецепти

Вузькі, явні allowlists є найшвидшими та найменш flaky:

* Одна модель, напряму (без gateway):
  * `OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts`

* Прямий профіль small-model:
  * `OPENCLAW_LIVE_MODELS=small pnpm test:live src/agents/models.profiles.live.test.ts`

* Gateway-профіль small-model:
  * `OPENCLAW_LIVE_GATEWAY_MODELS=small pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`

* Ollama Cloud API smoke:
  * `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA=1 OPENCLAW_LIVE_OLLAMA_BASE_URL=https://ollama.com OPENCLAW_LIVE_OLLAMA_MODEL=glm-5.1:cloud OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=0 pnpm test:live -- extensions/ollama/ollama.live.test.ts`

* Одна модель, gateway smoke:
  * `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`

* Tool calling у кількох providers:
  * `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M3" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`

* Z.AI Coding Plan GLM-5.2 direct smoke:
  * `ZAI_CODING_LIVE_TEST=1 pnpm test:live src/agents/zai.live.test.ts`

* Фокус Google (Gemini API key + Antigravity):
  * Gemini (API key): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
  * Antigravity (OAuth): `OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`

* Google adaptive thinking smoke:
  * Gemini 3 dynamic default: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000`
  * Gemini 2.5 dynamic budget: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000`

Нотатки:

* `google/...` використовує Gemini API (API key).
* `google-antigravity/...` використовує Antigravity OAuth bridge (agent endpoint у стилі Cloud Code Assist).
* `google-gemini-cli/...` використовує локальний Gemini CLI на вашій машині (окрема автентифікація + особливості tooling).
* Gemini API проти Gemini CLI:
  * API: OpenClaw викликає розміщений Gemini API Google через HTTP (API key / profile auth); це те, що більшість користувачів мають на увазі під "Gemini".
  * CLI: OpenClaw запускає локальний binary `gemini`; він має власну автентифікацію і може поводитися інакше (streaming/tool support/version skew).

## Live: матриця моделей (що ми покриваємо)

Фіксованого "CI model list" немає (live є opt-in), але це **рекомендовані** моделі для регулярного покриття на машині розробника з ключами.

### Сучасний smoke-набір (tool calling + image)

Це запуск "common models", який, як ми очікуємо, має продовжувати працювати:

* OpenAI (non-Codex): `openai/gpt-5.5`
* OpenAI ChatGPT/Codex OAuth: `openai/gpt-5.5`
* Anthropic: `anthropic/claude-opus-4-6` (або `anthropic/claude-sonnet-4-6`)
* Google (Gemini API): `google/gemini-3.1-pro-preview` і `google/gemini-3-flash-preview` (уникайте старіших моделей Gemini 2.x)
* Google (Antigravity): `google-antigravity/claude-opus-4-6-thinking` і `google-antigravity/gemini-3-flash`
* DeepSeek: `deepseek/deepseek-v4-flash` і `deepseek/deepseek-v4-pro`
* Z.AI (GLM): `zai/glm-5.1` (general API) або `zai/glm-5.2` (Coding Plan)
* MiniMax: `minimax/MiniMax-M3`

Запустіть gateway smoke з tools + image:
`OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M3" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`

### Базовий рівень: tool calling (Read + необов’язковий Exec)

Виберіть принаймні одну модель на кожну provider family:

* OpenAI: `openai/gpt-5.5`
* Anthropic: `anthropic/claude-opus-4-6` (або `anthropic/claude-sonnet-4-6`)
* Google: `google/gemini-3-flash-preview` (або `google/gemini-3.1-pro-preview`)
* DeepSeek: `deepseek/deepseek-v4-flash`
* Z.AI (GLM): `zai/glm-5.1` (general API) або `zai/glm-5.2` (Coding Plan)
* MiniMax: `minimax/MiniMax-M3`

Необов’язкове додаткове покриття (варто мати):

* xAI: `xai/grok-4.3` (або остання доступна)
* Mistral: `mistral/`… (виберіть одну модель із підтримкою "tools", яку ви ввімкнули)
* Cerebras: `cerebras/`… (якщо маєте доступ)
* LM Studio: `lmstudio/`… (локально; tool calling залежить від API mode)

### Vision: надсилання зображення (attachment → multimodal message)

Додайте принаймні одну модель із підтримкою зображень до `OPENCLAW_LIVE_GATEWAY_MODELS` (варіанти Claude/Gemini/OpenAI із підтримкою vision тощо), щоб перевірити image-зонд.

### Aggregators / alternate gateways

Якщо у вас увімкнені ключі, ми також підтримуємо тестування через:

* OpenRouter: `openrouter/...` (сотні моделей; використовуйте `openclaw models scan`, щоб знайти кандидатів із підтримкою tool+image)
* OpenCode: `opencode/...` для Zen і `opencode-go/...` для Go (автентифікація через `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`)

Більше providers, які можна додати до live-матриці (якщо у вас є credentials/config):

* Вбудовані: `openai`, `anthropic`, `google`, `google-vertex`, `google-antigravity`, `google-gemini-cli`, `zai`, `openrouter`, `opencode`, `opencode-go`, `xai`, `groq`, `cerebras`, `mistral`, `github-copilot`
* Через `models.providers` (власні кінцеві точки): `minimax` (хмара/API), а також будь-який OpenAI/Anthropic-сумісний проксі (LM Studio, vLLM, LiteLLM тощо)

<Tip>
  Не задавайте "all models" жорстко в документації. Авторитетний список — це те, що `discoverModels(...)` повертає на вашій машині, плюс доступні ключі.
</Tip>

## Облікові дані (ніколи не комітьте)

Live-тести виявляють облікові дані так само, як це робить CLI. Практичні наслідки:

* Якщо CLI працює, live-тести мають знайти ті самі ключі.

* Якщо live-тест повідомляє "no creds", налагоджуйте так само, як налагоджували б `openclaw models list` / вибір моделі.

* Профілі автентифікації для кожного агента: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (саме це означає "profile keys" у live-тестах)

* Конфігурація: `~/.openclaw/openclaw.json` (або `OPENCLAW_CONFIG_PATH`)

* Застарілий каталог стану: `~/.openclaw/credentials/` (копіюється до підготовленого live-домашнього каталогу, якщо присутній, але не є основним сховищем ключів профілю)

* Локальні live-запуски за замовчуванням копіюють активну конфігурацію, файли `auth-profiles.json` для кожного агента, застарілий `credentials/` і підтримувані зовнішні каталоги автентифікації CLI до тимчасового тестового домашнього каталогу; підготовлені live-домашні каталоги пропускають `workspace/` і `sandboxes/`, а перевизначення шляхів `agents.*.workspace` / `agentDir` вилучаються, щоб проби не торкалися вашого справжнього робочого простору на хості.

Якщо ви хочете покладатися на ключі середовища, експортуйте їх перед локальними тестами або використовуйте
Docker-запускачі нижче з явним `OPENCLAW_PROFILE_FILE`.

## Deepgram live (транскрибування аудіо)

* Тест: `extensions/deepgram/audio.live.test.ts`
* Увімкнення: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts`

## BytePlus coding plan live

* Тест: `extensions/byteplus/live.test.ts`
* Увімкнення: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts`
* Необов’язкове перевизначення моделі: `BYTEPLUS_CODING_MODEL=ark-code-latest`

## ComfyUI workflow media live

* Тест: `extensions/comfy/comfy.live.test.ts`
* Увімкнення: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts`
* Обсяг:
  * Перевіряє вбудовані шляхи comfy для зображень, відео та `music_generate`
  * Пропускає кожну можливість, якщо `plugins.entries.comfy.config.<capability>` не налаштовано
  * Корисно після змін надсилання workflow comfy, опитування, завантажень або реєстрації plugin

## Image generation live

* Тест: `test/image-generation.runtime.live.test.ts`
* Команда: `pnpm test:live test/image-generation.runtime.live.test.ts`
* Оснастка: `pnpm test:live:media image`
* Обсяг:
  * Перелічує кожен зареєстрований plugin провайдера генерації зображень
  * Використовує вже експортовані змінні середовища провайдера перед пробами
  * За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні облікові дані оболонки
  * Пропускає провайдерів без придатної автентифікації/профілю/моделі
  * Запускає кожного налаштованого провайдера через спільний runtime генерації зображень:
    * `<provider>:generate`
    * `<provider>:edit`, коли провайдер заявляє підтримку редагування
* Поточні охоплені вбудовані провайдери:
  * `deepinfra`
  * `fal`
  * `google`
  * `minimax`
  * `openai`
  * `openrouter`
  * `vydra`
  * `xai`
* Необов’язкове звуження:
  * `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google,openrouter,xai"`
  * `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="deepinfra"`
  * `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-2,google/gemini-3.1-flash-image-preview,openrouter/google/gemini-3.1-flash-image-preview,xai/grok-imagine-image"`
  * `OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit,openrouter:generate,xai:default-generate,xai:default-edit"`
* Необов’язкова поведінка автентифікації:
  * `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів та ігнорувати перевизначення лише із середовища

Для поставленого шляху CLI додайте smoke `infer` після успішного проходження live-тесту
провайдера/runtime:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
openclaw infer image providers --json
openclaw infer image generate \
  --model google/gemini-3.1-flash-image-preview \
  --prompt "Minimal flat test image: one blue square on a white background, no text." \
  --output ./openclaw-infer-image-smoke.png \
  --json
```

Це охоплює розбір аргументів CLI, визначення конфігурації/типового агента, активацію вбудованого
plugin, спільний runtime генерації зображень і live-запит до провайдера.
Очікується, що залежності plugin наявні до завантаження runtime.

## Music generation live

* Тест: `extensions/music-generation-providers.live.test.ts`
* Увімкнення: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts`
* Оснастка: `pnpm test:live:media music`
* Обсяг:
  * Перевіряє спільний вбудований шлях провайдера генерації музики
  * Наразі охоплює Google і MiniMax
  * Використовує вже експортовані змінні середовища провайдера перед пробами
  * За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні облікові дані оболонки
  * Пропускає провайдерів без придатної автентифікації/профілю/моделі
  * Запускає обидва заявлені режими runtime, коли вони доступні:
    * `generate` із введенням лише підказки
    * `edit`, коли провайдер заявляє `capabilities.edit.enabled`
  * Поточне охоплення спільної лінії:
    * `google`: `generate`, `edit`
    * `minimax`: `generate`
    * `comfy`: окремий live-файл Comfy, не цей спільний sweep
* Необов’язкове звуження:
  * `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"`
  * `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"`
* Необов’язкова поведінка автентифікації:
  * `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів та ігнорувати перевизначення лише із середовища

## Video generation live

* Тест: `extensions/video-generation-providers.live.test.ts`
* Увімкнення: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts`
* Оснастка: `pnpm test:live:media video`
* Обсяг:
  * Перевіряє спільний вбудований шлях провайдера генерації відео
  * За замовчуванням використовує release-safe smoke шлях: не-FAL провайдери, один запит text-to-video на провайдера, односекундна підказка з омаром і ліміт операції для кожного провайдера з `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` за замовчуванням)
  * За замовчуванням пропускає FAL, оскільки затримка черги на боці провайдера може домінувати в часі релізу; передайте `--video-providers fal` або `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, щоб запустити його явно
  * Використовує вже експортовані змінні середовища провайдера перед пробами
  * За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні облікові дані оболонки
  * Пропускає провайдерів без придатної автентифікації/профілю/моделі
  * За замовчуванням запускає лише `generate`
  * Установіть `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1`, щоб також запускати заявлені режими перетворення, коли вони доступні:
    * `imageToVideo`, коли провайдер заявляє `capabilities.imageToVideo.enabled` і вибраний провайдер/модель приймає локальне введення зображення на основі буфера у спільному sweep
    * `videoToVideo`, коли провайдер заявляє `capabilities.videoToVideo.enabled` і вибраний провайдер/модель приймає локальне введення відео на основі буфера у спільному sweep
  * Поточні заявлені, але пропущені провайдери `imageToVideo` у спільному sweep:
    * `vydra`, оскільки вбудований `veo3` є лише текстовим, а вбудований `kling` потребує віддаленої URL-адреси зображення
  * Охоплення Vydra для конкретного провайдера:
    * `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts`
    * цей файл запускає `veo3` text-to-video плюс лінію `kling`, яка за замовчуванням використовує fixture з віддаленою URL-адресою зображення
  * Поточне live-охоплення `videoToVideo`:
    * лише `runway`, коли вибрана модель — `runway/gen4_aleph`
  * Поточні заявлені, але пропущені провайдери `videoToVideo` у спільному sweep:
    * `alibaba`, `qwen`, `xai`, оскільки ці шляхи наразі потребують віддалених `http(s)` / MP4 reference URLs
    * `google`, оскільки поточна спільна лінія Gemini/Veo використовує локальне введення на основі буфера, а цей шлях не приймається у спільному sweep
    * `openai`, оскільки поточній спільній лінії бракує гарантій доступу до редагування відео, специфічних для організації
* Необов’язкове звуження:
  * `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,google,openai,runway"`
  * `OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"`
  * `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""`, щоб включити кожного провайдера в типовий sweep, зокрема FAL
  * `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000`, щоб зменшити ліміт операції кожного провайдера для агресивного smoke-запуску
* Необов’язкова поведінка автентифікації:
  * `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію зі сховища профілів та ігнорувати перевизначення лише із середовища

## Media live harness

* Команда: `pnpm test:live:media`
* Призначення:
  * Запускає спільні live-набори зображень, музики та відео через одну repo-native точку входу
  * Використовує вже експортовані змінні середовища провайдера
  * За замовчуванням автоматично звужує кожен набір до провайдерів, які наразі мають придатну автентифікацію
  * Повторно використовує `scripts/test-live.mjs`, тому поведінка Heartbeat і тихого режиму лишається узгодженою
* Приклади:
  * `pnpm test:live:media`
  * `pnpm test:live:media image video --providers openai,google,minimax`
  * `pnpm test:live:media video --video-providers openai,runway --all-providers`
  * `pnpm test:live:media music --quiet`

## Пов’язане

* [Тестування](/uk/help/testing) - модульні, інтеграційні, QA та Docker-набори
