chore(i18n): refresh uk translations
This commit is contained in:
parent
8a911eafe4
commit
84ffb0b374
@ -1,36 +1,36 @@
|
||||
---
|
||||
read_when:
|
||||
- Потрібно перевірити маршрутизацію проксі, керовану оператором, перед розгортанням
|
||||
- Потрібно перевірити маршрутизацію через керований оператором проксі перед розгортанням
|
||||
- Потрібно локально захопити транспортний трафік OpenClaw для налагодження
|
||||
- Ви хочете переглядати сеанси налагоджувального проксі, блоби або вбудовані пресети запитів.
|
||||
summary: Довідник CLI для `openclaw proxy`, включно з перевіркою проксі, керованого оператором, і локальним інспектором захоплень проксі для налагодження
|
||||
- Ви хочете переглянути сеанси налагоджувального проксі, блоби або вбудовані пресети запитів
|
||||
summary: Довідник CLI для `openclaw proxy`, включно з перевіркою проксі, керованого оператором, та інспектором захоплень локального проксі для налагодження
|
||||
title: Проксі
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T03:58:53Z"
|
||||
generated_at: "2026-05-04T11:08:56Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 9589bedafb97c31bcb6536a04307cd0c6550e1f307693bd4401785d79f34a1eb
|
||||
source_hash: 092c4e946dcab5e78e37d6fc77bb067b7a649368f8571fa127e462a85fa14ce5
|
||||
source_path: cli/proxy.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw proxy`
|
||||
|
||||
Перевіряйте маршрутизацію проксі, керовану оператором, або запускайте локальний явний проксі для налагодження
|
||||
й аналізуйте захоплений трафік.
|
||||
Перевіряйте керовану оператором маршрутизацію через проксі або запускайте локальний явний налагоджувальний проксі
|
||||
та аналізуйте захоплений трафік.
|
||||
|
||||
Використовуйте `validate`, щоб попередньо перевірити керований оператором прямий проксі перед увімкненням
|
||||
маршрутизації проксі OpenClaw. Інші команди є інструментами налагодження для
|
||||
дослідження на транспортному рівні: вони можуть запускати локальний проксі, виконувати дочірню команду
|
||||
маршрутизації проксі в OpenClaw. Інші команди є інструментами налагодження для
|
||||
дослідження транспортного рівня: вони можуть запускати локальний проксі, виконувати дочірню команду
|
||||
з увімкненим захопленням, перелічувати сеанси захоплення, запитувати поширені шаблони трафіку, читати
|
||||
захоплені blobs і очищати локальні дані захоплення.
|
||||
захоплені бінарні об’єкти та очищати локальні дані захоплення.
|
||||
|
||||
## Команди
|
||||
|
||||
```bash
|
||||
openclaw proxy start [--host <host>] [--port <port>]
|
||||
openclaw proxy run [--host <host>] [--port <port>] -- <cmd...>
|
||||
openclaw proxy validate [--json] [--proxy-url <url>] [--allowed-url <url>] [--denied-url <url>] [--timeout-ms <ms>]
|
||||
openclaw proxy validate [--json] [--proxy-url <url>] [--allowed-url <url>] [--denied-url <url>] [--apns-reachable] [--apns-authority <url>] [--timeout-ms <ms>]
|
||||
openclaw proxy coverage
|
||||
openclaw proxy sessions [--limit <count>]
|
||||
openclaw proxy query --preset <name> [--session <id>]
|
||||
@ -40,25 +40,29 @@ openclaw proxy purge
|
||||
|
||||
## Перевірка
|
||||
|
||||
`openclaw proxy validate` перевіряє ефективну URL-адресу проксі, керованого оператором, з
|
||||
`--proxy-url`, конфігурації або `OPENCLAW_PROXY_URL`. Він повідомляє про проблему конфігурації, коли
|
||||
`openclaw proxy validate` перевіряє фактичну URL-адресу керованого оператором проксі з
|
||||
`--proxy-url`, конфігурації або `OPENCLAW_PROXY_URL`. Вона повідомляє про проблему конфігурації, коли
|
||||
проксі не ввімкнено й не налаштовано; використовуйте `--proxy-url` для одноразової попередньої перевірки
|
||||
перед зміною конфігурації. За замовчуванням він перевіряє, що публічне призначення успішно досягається
|
||||
через проксі й що проксі не може досягти тимчасового loopback-індикатора.
|
||||
Користувацькі заборонені призначення працюють за принципом fail-closed: HTTP-відповіді та неоднозначні
|
||||
транспортні збої однаково вважаються невдачею, якщо ви не можете окремо перевірити специфічний для розгортання
|
||||
сигнал відмови.
|
||||
перед зміною конфігурації. За замовчуванням вона перевіряє, що публічне призначення успішно доступне
|
||||
через проксі, а проксі не може досягти тимчасового loopback-індикатора.
|
||||
Користувацькі заборонені призначення відмовляють у безпечний бік: HTTP-відповіді та неоднозначні
|
||||
транспортні збої однаково спричиняють невдачу, якщо тільки ви не можете окремо перевірити специфічний для розгортання
|
||||
сигнал відмови. Додайте `--apns-reachable`, щоб також відкрити тунель APNs HTTP/2 CONNECT
|
||||
через проксі та підтвердити, що пісочний APNs відповідає; перевірка використовує
|
||||
навмисно недійсний токен провайдера, тому відповідь APNs `403 InvalidProviderToken`
|
||||
є успішним сигналом досяжності.
|
||||
|
||||
Параметри:
|
||||
|
||||
- `--json`: вивести машинозчитуваний JSON.
|
||||
- `--proxy-url <url>`: перевірити цю URL-адресу проксі замість конфігурації або env.
|
||||
- `--allowed-url <url>`: додати призначення, яке має успішно досягатися через проксі. Повторіть, щоб перевірити кілька призначень.
|
||||
- `--json`: вивести машиночитний JSON.
|
||||
- `--proxy-url <url>`: перевірити цю URL-адресу проксі замість конфігурації або змінної середовища.
|
||||
- `--allowed-url <url>`: додати призначення, яке має успішно проходити через проксі. Повторіть, щоб перевірити кілька призначень.
|
||||
- `--denied-url <url>`: додати призначення, яке має блокуватися проксі. Повторіть, щоб перевірити кілька призначень.
|
||||
- `--apns-reachable`: також перевірити, що пісочний APNs HTTP/2 досяжний через проксі.
|
||||
- `--apns-authority <url>`: служба APNs для перевірки з `--apns-reachable` (`https://api.sandbox.push.apple.com` за замовчуванням; production — `https://api.push.apple.com`).
|
||||
- `--timeout-ms <ms>`: тайм-аут для кожного запиту в мілісекундах.
|
||||
|
||||
Див. [Мережевий проксі](/uk/security/network-proxy) щодо рекомендацій із розгортання та семантики
|
||||
відмови.
|
||||
Див. [Мережевий проксі](/uk/security/network-proxy), щоб отримати настанови щодо розгортання та семантики відмови.
|
||||
|
||||
## Попередні набори запитів
|
||||
|
||||
@ -73,14 +77,14 @@ openclaw proxy purge
|
||||
|
||||
## Примітки
|
||||
|
||||
- `start` за замовчуванням використовує `127.0.0.1`, якщо `--host` не задано.
|
||||
- `run` запускає локальний проксі для налагодження, а потім виконує команду після `--`.
|
||||
- Пряме переспрямування debug proxy до upstream відкриває upstream-сокети для діагностики. Коли активний режим керованого проксі OpenClaw, пряме переспрямування для proxy requests і тунелів CONNECT за замовчуванням вимкнено; задавайте `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` лише для затвердженої локальної діагностики.
|
||||
- `validate` завершується з кодом 1, коли конфігурація проксі або перевірки призначення не проходять.
|
||||
- Захоплення є локальними даними налагодження; використовуйте `openclaw proxy purge` після завершення.
|
||||
- `start` за замовчуванням використовує `127.0.0.1`, якщо не задано `--host`.
|
||||
- `run` запускає локальний налагоджувальний проксі, а потім виконує команду після `--`.
|
||||
- Пряме переспрямування до upstream у налагоджувальному проксі відкриває upstream-сокети для діагностики. Коли активний режим керованого проксі OpenClaw, пряме переспрямування для проксі-запитів і тунелів CONNECT вимкнено за замовчуванням; задавайте `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` лише для схваленої локальної діагностики.
|
||||
- `validate` завершується з кодом 1, коли перевірки конфігурації проксі або призначень зазнають невдачі.
|
||||
- Захоплення є локальними налагоджувальними даними; використовуйте `openclaw proxy purge`, коли завершите.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Довідник CLI](/uk/cli)
|
||||
- [Мережевий проксі](/uk/security/network-proxy)
|
||||
- [Автентифікація довіреного проксі](/uk/gateway/trusted-proxy-auth)
|
||||
- [Довірена автентифікація проксі](/uk/gateway/trusted-proxy-auth)
|
||||
|
||||
@ -1,35 +1,35 @@
|
||||
---
|
||||
read_when:
|
||||
- Запуск матриці live-моделей / бекенда CLI / ACP / smoke-тестів медіапровайдера
|
||||
- Налагодження визначення облікових даних для живих тестів
|
||||
- Додавання нового тесту в реальному середовищі для конкретного провайдера
|
||||
- Запуск матриці реальних моделей / бекенду CLI / ACP / smoke-тестів медіапровайдера
|
||||
- Налагодження визначення облікових даних для тестів у реальному середовищі
|
||||
- Додавання нового живого тесту для конкретного провайдера
|
||||
sidebarTitle: Live tests
|
||||
summary: 'Живі (що звертаються до мережі) тести: матриця моделей, бекенди CLI, ACP, постачальники медіа, облікові дані'
|
||||
title: 'Тестування: набори тестів у реальному середовищі'
|
||||
summary: 'Тести в реальному середовищі (із мережевими зверненнями): матриця моделей, бекенди CLI, ACP, медіапровайдери, облікові дані'
|
||||
title: 'Тестування: тестові набори в реальному середовищі'
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T04:51:01Z"
|
||||
generated_at: "2026-05-04T11:09:03Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 4057d8875fa3404108e89e4381c1dd14e96abbc2af13c4934fc6c0dbf878fc00
|
||||
source_hash: 03b8ca6348137a55c8d5f67c9c166a130a75a744f6a433cb00496756b29d7016
|
||||
source_path: help/testing-live.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Для швидкого старту, QA-запускачів, модульних/інтеграційних наборів і Docker-процесів див.
|
||||
[Тестування](/uk/help/testing). Ця сторінка описує **живі** (ті, що звертаються до мережі) тестові
|
||||
Для швидкого старту, QA-запускачів, модульних/інтеграційних наборів і Docker-потоків див.
|
||||
[Тестування](/uk/help/testing). Ця сторінка описує **живі** (з доступом до мережі) тестові
|
||||
набори: матрицю моделей, CLI-бекенди, ACP і живі тести медіапровайдерів, а також
|
||||
роботу з обліковими даними.
|
||||
обробку облікових даних.
|
||||
|
||||
## Живі тести: smoke-команди локального профілю
|
||||
## Живі тести: команди димової перевірки локального профілю
|
||||
|
||||
Перед ситуативними живими перевірками підключіть `~/.profile`, щоб ключі провайдерів і локальні шляхи інструментів
|
||||
відповідали вашій оболонці:
|
||||
Підключіть `~/.profile` перед спеціальними живими перевірками, щоб ключі провайдерів і шляхи
|
||||
локальних інструментів відповідали вашій оболонці:
|
||||
|
||||
```bash
|
||||
source ~/.profile
|
||||
```
|
||||
|
||||
Безпечна smoke-перевірка медіа:
|
||||
Безпечна димова перевірка медіа:
|
||||
|
||||
```bash
|
||||
pnpm openclaw infer tts convert --local --json \
|
||||
@ -37,7 +37,7 @@ pnpm openclaw infer tts convert --local --json \
|
||||
--output /tmp/openclaw-live-smoke.mp3
|
||||
```
|
||||
|
||||
Безпечна smoke-перевірка готовності голосового виклику:
|
||||
Безпечна димова перевірка готовності голосового виклику:
|
||||
|
||||
```bash
|
||||
pnpm openclaw voicecall setup --json
|
||||
@ -45,94 +45,94 @@ pnpm openclaw voicecall smoke --to "+15555550123"
|
||||
```
|
||||
|
||||
`voicecall smoke` є пробним запуском, якщо також не вказано `--yes`. Використовуйте `--yes` лише
|
||||
тоді, коли навмисно хочете здійснити реальний сповіщувальний виклик. Для Twilio, Telnyx і
|
||||
Plivo успішна перевірка готовності вимагає публічної Webhook-URL; локальні
|
||||
резервні варіанти loopback/private відхиляються за задумом.
|
||||
тоді, коли ви свідомо хочете здійснити справжній сповіщувальний виклик. Для Twilio, Telnyx і
|
||||
Plivo успішна перевірка готовності потребує публічної Webhook-URL-адреси; локальні варіанти
|
||||
loopback/приватні резервні варіанти відхиляються за задумом.
|
||||
|
||||
## Живі тести: перевірка можливостей Android-вузла
|
||||
|
||||
- Тест: `src/gateway/android-node.capabilities.live.test.ts`
|
||||
- Скрипт: `pnpm android:test:integration`
|
||||
- Мета: викликати **кожну команду, яку наразі оголошує** підключений Android-вузол, і перевірити поведінку контракту команди.
|
||||
- Мета: викликати **кожну команду, яку зараз оголошує** підключений Android-вузол, і перевірити поведінку контракту команди.
|
||||
- Обсяг:
|
||||
- Попередньо підготовлене/ручне налаштування (набір не встановлює/запускає/сполучає застосунок).
|
||||
- Перевірка gateway `node.invoke` окремо для кожної команди для вибраного Android-вузла.
|
||||
- Попередньо налаштоване/ручне налаштування (набір не встановлює/не запускає/не спарює застосунок).
|
||||
- Перевірка `node.invoke` у Gateway для кожної команди вибраного Android-вузла.
|
||||
- Обов’язкове попереднє налаштування:
|
||||
- Android-застосунок уже підключений і сполучений із gateway.
|
||||
- Android-застосунок уже підключений і спарений із Gateway.
|
||||
- Застосунок утримується на передньому плані.
|
||||
- Дозволи/згоду на захоплення надано для можливостей, які ви очікуєте успішно пройти.
|
||||
- Дозволи/згода на захоплення надані для можливостей, які мають пройти.
|
||||
- Необов’язкові перевизначення цілі:
|
||||
- `OPENCLAW_ANDROID_NODE_ID` або `OPENCLAW_ANDROID_NODE_NAME`.
|
||||
- `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`.
|
||||
- Повні деталі налаштування Android: [Android App](/uk/platforms/android)
|
||||
- Повні відомості про налаштування Android: [Застосунок Android](/uk/platforms/android)
|
||||
|
||||
## Живі тести: smoke-перевірка моделей (ключі профілю)
|
||||
## Живі тести: димова перевірка моделей (ключі профілю)
|
||||
|
||||
Живі тести розділено на два шари, щоб можна було ізолювати збої:
|
||||
|
||||
- «Пряма модель» показує, чи провайдер/модель узагалі може відповісти з указаним ключем.
|
||||
- «Gateway smoke» показує, чи повний конвеєр gateway+agent працює для цієї моделі (сесії, історія, інструменти, політика sandbox тощо).
|
||||
- «Пряма модель» показує, що провайдер/модель узагалі може відповідати з наданим ключем.
|
||||
- «Димова перевірка Gateway» показує, що повний конвеєр Gateway+агент працює для цієї моделі (сеанси, історія, інструменти, політика пісочниці тощо).
|
||||
|
||||
### Шар 1: Пряме завершення моделі (без gateway)
|
||||
### Шар 1: пряме завершення моделі (без Gateway)
|
||||
|
||||
- Тест: `src/agents/models.profiles.live.test.ts`
|
||||
- Мета:
|
||||
- Перерахувати виявлені моделі
|
||||
- Перелічити виявлені моделі
|
||||
- Використати `getApiKeyForModel`, щоб вибрати моделі, для яких у вас є облікові дані
|
||||
- Запустити невелике завершення для кожної моделі (і цільові регресійні перевірки, де потрібно)
|
||||
- Запустити невелике завершення для кожної моделі (і цільові регресії, де потрібно)
|
||||
- Як увімкнути:
|
||||
- `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо викликаєте Vitest напряму)
|
||||
- Установіть `OPENCLAW_LIVE_MODELS=modern` (або `all`, псевдонім для modern), щоб фактично запустити цей набір; інакше він пропускається, щоб `pnpm test:live` лишався зосередженим на smoke-перевірці gateway
|
||||
- Установіть `OPENCLAW_LIVE_MODELS=modern` (або `all`, псевдонім для modern), щоб фактично запустити цей набір; інакше він пропускається, щоб `pnpm test:live` лишався зосередженим на димовій перевірці Gateway
|
||||
- Як вибрати моделі:
|
||||
- `OPENCLAW_LIVE_MODELS=modern`, щоб запустити сучасний список дозволених моделей (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
|
||||
- `OPENCLAW_LIVE_MODELS=all` є псевдонімом сучасного списку дозволених моделей
|
||||
- або `OPENCLAW_LIVE_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,..."` (список дозволених через кому)
|
||||
- Сучасні/повні перевірки за замовчуванням мають curated high-signal ліміт; установіть `OPENCLAW_LIVE_MAX_MODELS=0` для вичерпної сучасної перевірки або додатне число для меншого ліміту.
|
||||
- Вичерпні перевірки використовують `OPENCLAW_LIVE_TEST_TIMEOUT_MS` як таймаут усього тесту прямої моделі. За замовчуванням: 60 хвилин.
|
||||
- Проби прямої моделі за замовчуванням запускаються з паралелізмом 20; установіть `OPENCLAW_LIVE_MODEL_CONCURRENCY`, щоб перевизначити.
|
||||
- Сучасні/повні перевірки за замовчуванням мають підібрану високосигнальну верхню межу; установіть `OPENCLAW_LIVE_MAX_MODELS=0` для вичерпної сучасної перевірки або додатне число для меншої межі.
|
||||
- Вичерпні перевірки використовують `OPENCLAW_LIVE_TEST_TIMEOUT_MS` як тайм-аут усього тесту прямої моделі. За замовчуванням: 60 хвилин.
|
||||
- Проби прямої моделі за замовчуванням виконуються з паралелізмом 20; установіть `OPENCLAW_LIVE_MODEL_CONCURRENCY`, щоб перевизначити.
|
||||
- Як вибрати провайдерів:
|
||||
- `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (список дозволених через кому)
|
||||
- Звідки беруться ключі:
|
||||
- За замовчуванням: сховище профілю та резервні значення env
|
||||
- Установіть `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати лише **сховище профілю**
|
||||
- Навіщо це існує:
|
||||
- Відокремлює «API провайдера зламаний / ключ недійсний» від «конвеєр gateway agent зламаний»
|
||||
- Містить невеликі ізольовані регресійні перевірки (приклад: OpenAI Responses/Codex Responses reasoning replay + потоки викликів інструментів)
|
||||
- За замовчуванням: сховище профілів і резервні значення env
|
||||
- Установіть `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати лише **сховище профілів**
|
||||
- Навіщо це потрібно:
|
||||
- Відокремлює «API провайдера зламаний / ключ недійсний» від «конвеєр агента Gateway зламаний»
|
||||
- Містить невеликі ізольовані регресії (приклад: OpenAI Responses/Codex Responses, повтор відтворення reasoning + потоки викликів інструментів)
|
||||
|
||||
### Шар 2: Gateway + dev agent smoke (те, що фактично робить "@openclaw")
|
||||
### Шар 2: Gateway + димова перевірка dev-агента (що фактично робить "@openclaw")
|
||||
|
||||
- Тест: `src/gateway/gateway-models.profiles.live.test.ts`
|
||||
- Мета:
|
||||
- Підняти gateway в процесі
|
||||
- Створити/виправити сесію `agent:dev:*` (перевизначення моделі для кожного запуску)
|
||||
- Перебрати моделі з ключами та перевірити:
|
||||
- Запустити внутрішньопроцесний Gateway
|
||||
- Створити/пропатчити сеанс `agent:dev:*` (перевизначення моделі для кожного запуску)
|
||||
- Перебрати моделі з ключами й перевірити:
|
||||
- «змістовну» відповідь (без інструментів)
|
||||
- реальний виклик інструмента працює (проба читання)
|
||||
- справжній виклик інструмента працює (проба читання)
|
||||
- необов’язкові додаткові проби інструментів (проба exec+read)
|
||||
- регресійні шляхи OpenAI (лише виклик інструмента → подальша відповідь) продовжують працювати
|
||||
- Деталі проб (щоб ви могли швидко пояснити збої):
|
||||
- Проба `read`: тест записує nonce-файл у workspace і просить агента виконати `read` для нього та повернути nonce.
|
||||
- Проба `exec+read`: тест просить агента виконати `exec`-запис nonce у тимчасовий файл, а потім виконати `read` назад.
|
||||
- Проба зображення: тест прикріплює згенерований PNG (кіт + рандомізований код) і очікує, що модель поверне `cat <CODE>`.
|
||||
- регресійні шляхи OpenAI (лише виклик інструмента → подальше повідомлення) продовжують працювати
|
||||
- Деталі проб (щоб можна було швидко пояснювати збої):
|
||||
- Проба `read`: тест записує nonce-файл у робочій області й просить агента `read` його та повернути nonce.
|
||||
- Проба `exec+read`: тест просить агента через `exec` записати nonce у тимчасовий файл, а потім через `read` прочитати його назад.
|
||||
- Проба зображення: тест долучає згенерований PNG (кіт + випадковий код) і очікує, що модель поверне `cat <CODE>`.
|
||||
- Посилання на реалізацію: `src/gateway/gateway-models.profiles.live.test.ts` і `src/gateway/live-image-probe.ts`.
|
||||
- Як увімкнути:
|
||||
- `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо викликаєте Vitest напряму)
|
||||
- Як вибрати моделі:
|
||||
- За замовчуванням: сучасний список дозволених моделей (Opus/Sonnet 4.6+, GPT-5.2 + Codex, Gemini 3, DeepSeek V4, GLM 4.7, MiniMax M2.7, Grok 4.3)
|
||||
- `OPENCLAW_LIVE_GATEWAY_MODELS=all` є псевдонімом сучасного списку дозволених моделей
|
||||
- Або встановіть `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (або список через кому), щоб звузити
|
||||
- Сучасні/повні gateway-перевірки за замовчуванням мають curated high-signal ліміт; установіть `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` для вичерпної сучасної перевірки або додатне число для меншого ліміту.
|
||||
- Як вибрати провайдерів (уникати «усього OpenRouter»):
|
||||
- Або встановіть `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (або список через кому), щоб звузити вибір
|
||||
- Сучасні/повні перевірки Gateway за замовчуванням мають підібрану високосигнальну верхню межу; установіть `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` для вичерпної сучасної перевірки або додатне число для меншої межі.
|
||||
- Як вибрати провайдерів (уникаючи «усього OpenRouter»):
|
||||
- `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (список дозволених через кому)
|
||||
- Проби інструментів і зображень завжди ввімкнені в цьому живому тесті:
|
||||
- Проба `read` + проба `exec+read` (навантаження на інструменти)
|
||||
- Проба зображення запускається, коли модель оголошує підтримку введення зображень
|
||||
- проба `read` + проба `exec+read` (навантаження інструментів)
|
||||
- проба зображення запускається, коли модель оголошує підтримку введення зображень
|
||||
- Потік (на високому рівні):
|
||||
- Тест генерує крихітний PNG із “CAT” + випадковий код (`src/gateway/live-image-probe.ts`)
|
||||
- Тест генерує маленький PNG із “CAT” + випадковим кодом (`src/gateway/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 пересилає multimodal повідомлення користувача до моделі
|
||||
- Твердження: відповідь містить `cat` + код (допуск OCR: незначні помилки дозволено)
|
||||
- Вбудований агент пересилає мультимодальне повідомлення користувача до моделі
|
||||
- Перевірка: відповідь містить `cat` + код (допуск OCR: дозволені незначні помилки)
|
||||
|
||||
<Tip>
|
||||
Щоб побачити, що можна протестувати на вашій машині (і точні ідентифікатори `provider/model`), виконайте:
|
||||
@ -144,27 +144,27 @@ openclaw models list --json
|
||||
|
||||
</Tip>
|
||||
|
||||
## Живі тести: smoke-перевірка CLI-бекенда (Claude, Codex, Gemini або інші локальні CLI)
|
||||
## Живі тести: димова перевірка CLI-бекенду (Claude, Codex, Gemini або інші локальні CLI)
|
||||
|
||||
- Тест: `src/gateway/gateway-cli-backend.live.test.ts`
|
||||
- Мета: перевірити конвеєр Gateway + agent за допомогою локального CLI-бекенда, не торкаючись вашої конфігурації за замовчуванням.
|
||||
- Значення smoke-перевірки за замовчуванням для конкретного бекенда містяться у визначенні `cli-backend.ts` Plugin-власника.
|
||||
- Мета: перевірити конвеєр Gateway + агент із використанням локального CLI-бекенду, не торкаючись вашої конфігурації за замовчуванням.
|
||||
- Типові значення димової перевірки для конкретного бекенду містяться у визначенні `cli-backend.ts` відповідного Plugin.
|
||||
- Увімкнення:
|
||||
- `pnpm test:live` (або `OPENCLAW_LIVE_TEST=1`, якщо викликаєте Vitest напряму)
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND=1`
|
||||
- Значення за замовчуванням:
|
||||
- Провайдер/модель за замовчуванням: `claude-cli/claude-sonnet-4-6`
|
||||
- Поведінка команди/аргументів/зображення береться з метаданих CLI-бекенда Plugin-власника.
|
||||
- Типові значення:
|
||||
- Типовий провайдер/модель: `claude-cli/claude-sonnet-4-6`
|
||||
- Поведінка команди/аргументів/зображень надходить із метаданих Plugin відповідного CLI-бекенду.
|
||||
- Перевизначення (необов’язково):
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5"`
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"`
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'`
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, щоб надіслати реальне вкладення зображення (шляхи вставляються в prompt). Docker-рецепти за замовчуванням вимикають це, якщо явно не запитано.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, щоб передавати шляхи файлів зображень як CLI-аргументи замість вставлення в prompt.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1`, щоб надіслати справжнє вкладення-зображення (шляхи вставляються в prompt). Docker-рецепти за замовчуванням вимикають це, якщо явно не запитано.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"`, щоб передавати шляхи до файлів зображень як CLI-аргументи замість вставлення в prompt.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (або `"list"`), щоб керувати тим, як передаються аргументи зображень, коли встановлено `IMAGE_ARG`.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1`, щоб надіслати другий хід і перевірити потік відновлення.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1`, щоб увімкнути перевірку безперервності тієї самої сесії Claude Sonnet -> Opus, коли вибрана модель підтримує ціль перемикання. Docker-рецепти за замовчуванням вимикають це для сукупної надійності.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1`, щоб увімкнути MCP/tool loopback-пробу. Docker-рецепти за замовчуванням вимикають це, якщо явно не запитано.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1`, щоб увімкнути пробу безперервності того самого сеансу Claude Sonnet -> Opus, коли вибрана модель підтримує ціль перемикання. Docker-рецепти за замовчуванням вимикають це для сукупної надійності.
|
||||
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1`, щоб увімкнути пробу MCP/інструментального loopback. Docker-рецепти за замовчуванням вимикають це, якщо явно не запитано.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -174,17 +174,17 @@ OPENCLAW_LIVE_CLI_BACKEND=1 \
|
||||
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
|
||||
```
|
||||
|
||||
Дешева smoke-перевірка конфігурації Gemini MCP:
|
||||
Дешева димова перевірка конфігурації Gemini MCP:
|
||||
|
||||
```bash
|
||||
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-сервера.
|
||||
Це не просить Gemini генерувати відповідь. Воно записує ті самі системні
|
||||
налаштування, які OpenClaw надає Gemini, а потім запускає `gemini --debug mcp list`, щоб довести, що
|
||||
збережений сервер `transport: "streamable-http"` нормалізується до HTTP MCP-форми Gemini
|
||||
і може підключитися до локального streamable-HTTP MCP-сервера.
|
||||
|
||||
Docker-рецепт:
|
||||
|
||||
@ -201,31 +201,40 @@ pnpm test:docker:live-cli-backend:codex
|
||||
pnpm test:docker:live-cli-backend:gemini
|
||||
```
|
||||
|
||||
Нотатки:
|
||||
Примітки:
|
||||
|
||||
- Docker-запускач міститься в `scripts/test-live-cli-backend-docker.sh`.
|
||||
- Він запускає живу smoke-перевірку CLI-бекенда всередині Docker-образу репозиторію як non-root користувач `node`.
|
||||
- Він визначає метадані CLI-smoke з розширення-власника, а потім встановлює відповідний Linux CLI-пакет (`@anthropic-ai/claude-code`, `@openai/codex` або `@google/gemini-cli`) у кешований префікс із правом запису за `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (за замовчуванням: `~/.cache/openclaw/docker-cli-tools`).
|
||||
- `pnpm test:docker:live-cli-backend:claude-subscription` вимагає переносний OAuth підписки Claude Code через `~/.claude/.credentials.json` із `claudeAiOauth.subscriptionType` або `CLAUDE_CODE_OAUTH_TOKEN` від `claude setup-token`. Спершу він доводить прямий `claude -p` у Docker, а потім запускає два ходи Gateway CLI-бекенда без збереження змінних env ключа Anthropic API. Ця лінія підписки за замовчуванням вимикає Claude MCP/tool і проби зображень, тому що Claude наразі маршрутизує використання стороннього застосунку через оплату додаткового використання замість звичайних лімітів плану підписки.
|
||||
- Жива smoke-перевірка CLI-бекенда тепер виконує однаковий end-to-end потік для Claude, Codex і Gemini: текстовий хід, хід класифікації зображення, потім виклик інструмента MCP `cron`, перевірений через gateway CLI.
|
||||
- Smoke-перевірка Claude за замовчуванням також виправляє сесію з Sonnet на Opus і перевіряє, що відновлена сесія все ще пам’ятає попередню нотатку.
|
||||
- Docker-запускач розташований у `scripts/test-live-cli-backend-docker.sh`.
|
||||
- Він запускає живу димову перевірку CLI-бекенду всередині Docker-образу репозиторію як некореневий користувач `node`.
|
||||
- Він визначає метадані димової перевірки CLI з відповідного Plugin, а потім встановлює відповідний Linux-пакет CLI (`@anthropic-ai/claude-code`, `@openai/codex` або `@google/gemini-cli`) у кешований записуваний префікс за `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (за замовчуванням: `~/.cache/openclaw/docker-cli-tools`).
|
||||
- `pnpm test:docker:live-cli-backend:claude-subscription` потребує переносного OAuth підписки Claude Code через `~/.claude/.credentials.json` із `claudeAiOauth.subscriptionType` або `CLAUDE_CODE_OAUTH_TOKEN` з `claude setup-token`. Спочатку він доводить прямий `claude -p` у Docker, а потім запускає два ходи CLI-бекенду Gateway без збереження env-змінних API-ключа Anthropic. Ця лінія підписки за замовчуванням вимикає MCP/інструментальні проби Claude і проби зображень, оскільки Claude зараз маршрутизує використання сторонніх застосунків через оплату додаткового використання замість звичайних лімітів плану підписки.
|
||||
- Жива димова перевірка CLI-бекенду тепер виконує той самий наскрізний потік для Claude, Codex і Gemini: текстовий хід, хід класифікації зображення, потім виклик інструмента MCP `cron`, перевірений через CLI Gateway.
|
||||
- Типова димова перевірка Claude також патчить сеанс із Sonnet на Opus і перевіряє, що відновлений сеанс усе ще пам’ятає попередню нотатку.
|
||||
|
||||
## Живі тести: smoke-перевірка ACP bind (`/acp spawn ... --bind here`)
|
||||
## Живі тести: досяжність HTTP/2-проксі APNs
|
||||
|
||||
- Test: `src/gateway/gateway-acp-bind.live.test.ts`
|
||||
- Мета: перевірити реальний потік прив’язування розмови ACP з живим агентом ACP:
|
||||
- Тест: `src/infra/push-apns-http2.live.test.ts`
|
||||
- Мета: тунелювати через локальний HTTP CONNECT-проксі до sandbox-кінцевої точки APNs Apple, надіслати HTTP/2-запит валідації APNs і перевірити, що справжня відповідь Apple `403 InvalidProviderToken` повертається через шлях проксі.
|
||||
- Увімкнення:
|
||||
- `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`
|
||||
|
||||
## Живі тести: димова перевірка прив’язки ACP (`/acp spawn ... --bind here`)
|
||||
|
||||
- Тест: `src/gateway/gateway-acp-bind.live.test.ts`
|
||||
- Мета: перевірити реальний потік прив’язування ACP-розмови з live ACP-агентом:
|
||||
- надіслати `/acp spawn <agent> --bind here`
|
||||
- прив’язати синтетичну розмову каналу повідомлень на місці
|
||||
- надіслати звичайне подальше повідомлення в тій самій розмові
|
||||
- перевірити, що подальше повідомлення потрапляє до транскрипту прив’язаної сесії ACP
|
||||
- перевірити, що подальше повідомлення потрапляє до транскрипту прив’язаної 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`
|
||||
- ACP-агенти в Docker: `claude,codex,gemini`
|
||||
- ACP-агент для прямого `pnpm test:live ...`: `claude`
|
||||
- Синтетичний канал: контекст розмови у стилі Slack DM
|
||||
- Бекенд ACP: `acpx`
|
||||
- ACP-бекенд: `acpx`
|
||||
- Перевизначення:
|
||||
- `OPENCLAW_LIVE_ACP_BIND_AGENT=claude`
|
||||
- `OPENCLAW_LIVE_ACP_BIND_AGENT=codex`
|
||||
@ -240,9 +249,9 @@ pnpm test:docker:live-cli-backend:gemini
|
||||
- `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`
|
||||
- `OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5`
|
||||
- Примітки:
|
||||
- Ця смуга використовує поверхню Gateway `chat.send` із синтетичними полями маршруту походження лише для адміністраторів, щоб тести могли додавати контекст каналу повідомлень без імітації зовнішньої доставки.
|
||||
- Коли `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` не задано, тест використовує вбудований реєстр агентів Plugin `acpx` для вибраного агента тестового стенда ACP.
|
||||
- Створення MCP bound-session Cron типово виконується за найкращим зусиллям, бо зовнішні тестові стенди ACP можуть скасовувати виклики MCP після проходження перевірки прив’язування/зображення; задайте `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`, щоб зробити цю перевірку Cron після прив’язування суворою.
|
||||
- Ця лінія використовує поверхню Gateway `chat.send` з доступними лише адміністратору синтетичними полями вихідного маршруту, щоб тести могли приєднувати контекст каналу повідомлень без імітації зовнішньої доставки.
|
||||
- Коли `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` не задано, тест використовує вбудований реєстр агентів Plugin `acpx` для вибраного агента ACP-стенда.
|
||||
- Створення MCP для Cron прив’язаної сесії за замовчуванням виконується best-effort, бо зовнішні ACP-стенди можуть скасовувати MCP-виклики після проходження доказу прив’язування/зображення; задайте `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`, щоб зробити цю післяприв’язувальну Cron-перевірку суворою.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -270,37 +279,37 @@ pnpm test:docker:live-acp-bind:opencode
|
||||
|
||||
Примітки Docker:
|
||||
|
||||
- Запускач Docker розташований у `scripts/test-live-acp-bind-docker.sh`.
|
||||
- Типово він послідовно запускає димову перевірку прив’язування ACP проти агрегованих живих агентів CLI: `claude`, `codex`, потім `gemini`.
|
||||
- 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`, щоб звузити матрицю.
|
||||
- Він підвантажує `~/.profile`, розміщує відповідні матеріали автентифікації CLI у контейнері, потім встановлює запитаний живий CLI (`@anthropic-ai/claude-code`, `@openai/codex`, Factory Droid через `https://app.factory.ai/cli`, `@google/gemini-cli` або `opencode-ai`), якщо його бракує. Сам бекенд ACP є вбудованим пакетом `acpx/runtime` з офіційного Plugin `acpx`.
|
||||
- Варіант Docker для Droid розміщує `~/.factory` для налаштувань, передає `FACTORY_API_KEY` і вимагає цей API-ключ, бо локальна автентифікація Factory через OAuth/keyring не переноситься в контейнер. Він використовує вбудований запис реєстру ACPX `droid exec --output-format acp`.
|
||||
- Варіант Docker для OpenCode є суворою регресійною смугою для одного агента. Він записує тимчасову типову модель `OPENCODE_CONFIG_CONTENT` з `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (типово `opencode/kimi-k2.6`) після підвантаження `~/.profile`, а `pnpm test:docker:live-acp-bind:opencode` вимагає транскрипт прив’язаного помічника замість прийняття загального пропуску після прив’язування.
|
||||
- Прямі виклики CLI `acpx` є лише ручним/обхідним шляхом для порівняння поведінки поза Gateway. Димова перевірка прив’язування ACP у Docker перевіряє вбудований бекенд виконання `acpx` OpenClaw.
|
||||
- Він підвантажує `~/.profile`, розміщує відповідні матеріали автентифікації 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 не переноситься в контейнер. Він використовує вбудований запис реєстру ACPX `droid exec --output-format acp`.
|
||||
- Варіант OpenCode для Docker — це сувора регресійна лінія з одним агентом. Він записує тимчасову типову модель `OPENCODE_CONFIG_CONTENT` з `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (за замовчуванням `opencode/kimi-k2.6`) після підвантаження `~/.profile`, а `pnpm test:docker:live-acp-bind:opencode` вимагає транскрипт прив’язаного асистента замість прийняття загального післяприв’язувального пропуску.
|
||||
- Прямі виклики CLI `acpx` є лише ручним/обхідним шляхом для порівняння поведінки поза Gateway. Docker ACP bind smoke перевіряє вбудований у OpenClaw runtime-бекенд `acpx`.
|
||||
|
||||
## Live: димова перевірка тестового стенда Codex app-server
|
||||
## Live: Codex app-server harness smoke
|
||||
|
||||
- Мета: перевірити тестовий стенд Codex, яким володіє Plugin, через звичайний метод Gateway
|
||||
- Мета: перевірити належний Plugin стенд Codex через звичайний метод gateway
|
||||
`agent`:
|
||||
- завантажити вбудований Plugin `codex`
|
||||
- завантажити bundled Plugin `codex`
|
||||
- вибрати `OPENCLAW_AGENT_RUNTIME=codex`
|
||||
- надіслати перший хід агента Gateway до `openai/gpt-5.5` із примусово вибраним тестовим стендом Codex
|
||||
- надіслати другий хід до тієї самої сесії OpenClaw і перевірити, що потік app-server
|
||||
- надіслати перший gateway agent turn до `openai/gpt-5.5` із примусово ввімкненим стендом Codex
|
||||
- надіслати другий turn до тієї самої сесії OpenClaw і перевірити, що потік app-server
|
||||
може відновитися
|
||||
- виконати `/codex status` і `/codex models` через той самий шлях команди Gateway
|
||||
- необов’язково виконати дві ескальовані проби оболонки, переглянуті Guardian: одну нешкідливу
|
||||
- запустити `/codex status` і `/codex models` через той самий шлях команди gateway
|
||||
- необов’язково запустити дві перевірені Guardian проби escalated shell: одну безпечну
|
||||
команду, яку має бути схвалено, і одне фальшиве завантаження секрету, яке має бути
|
||||
відхилено, щоб агент поставив уточнювальне запитання
|
||||
- Test: `src/gateway/gateway-codex-harness.live.test.ts`
|
||||
відхилено, щоб агент перепитав
|
||||
- Тест: `src/gateway/gateway-codex-harness.live.test.ts`
|
||||
- Увімкнення: `OPENCLAW_LIVE_CODEX_HARNESS=1`
|
||||
- Типова модель: `openai/gpt-5.5`
|
||||
- Необов’язкова проба зображення: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
|
||||
- Необов’язкова проба MCP/інструмента: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
|
||||
- Необов’язкова проба Guardian: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
|
||||
- Димова перевірка використовує `agentRuntime.id: "codex"`, щоб несправний тестовий стенд Codex не міг
|
||||
- Необов’язкова перевірка зображення: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
|
||||
- Необов’язкова перевірка MCP/інструменту: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
|
||||
- Необов’язкова перевірка Guardian: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
|
||||
- Smoke використовує `agentRuntime.id: "codex"`, тож зламаний стенд Codex не може
|
||||
пройти, непомітно відкотившись до PI.
|
||||
- Автентифікація: автентифікація Codex app-server з локального входу в підписку Codex. Димові перевірки Docker
|
||||
також можуть надавати `OPENAI_API_KEY` для не-Codex проб, коли це застосовно,
|
||||
- Автентифікація: автентифікація app-server Codex з локального входу підписки Codex. Docker
|
||||
smokes також можуть надавати `OPENAI_API_KEY` для не-Codex перевірок, коли це застосовно,
|
||||
а також необов’язково скопійовані `~/.codex/auth.json` і `~/.codex/config.toml`.
|
||||
|
||||
Локальний рецепт:
|
||||
@ -324,56 +333,55 @@ pnpm test:docker:live-codex-harness
|
||||
|
||||
Примітки Docker:
|
||||
|
||||
- Запускач Docker розташований у `scripts/test-live-codex-harness-docker.sh`.
|
||||
- Він підвантажує змонтований `~/.profile`, передає `OPENAI_API_KEY`, копіює файли автентифікації CLI Codex,
|
||||
коли вони присутні, встановлює `@openai/codex` у змонтований префікс npm із правом запису,
|
||||
розміщує дерево вихідного коду, а потім запускає лише live-тест тестового стенда Codex.
|
||||
- Docker типово вмикає проби зображення, MCP/інструмента та Guardian. Задайте
|
||||
- Docker-runner розташований у `scripts/test-live-codex-harness-docker.sh`.
|
||||
- Він підвантажує змонтований `~/.profile`, передає `OPENAI_API_KEY`, копіює файли автентифікації Codex CLI,
|
||||
коли вони присутні, встановлює `@openai/codex` у змонтований npm-префікс із правом запису,
|
||||
розміщує дерево джерельного коду, а потім запускає лише live-тест стенда Codex.
|
||||
- Docker за замовчуванням умикає перевірки зображення, MCP/інструменту та Guardian. Задайте
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` або
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` або
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`, коли вам потрібен вужчий запуск
|
||||
для налагодження.
|
||||
- Docker використовує ту саму явну конфігурацію середовища виконання Codex, тому застарілі псевдоніми або
|
||||
відкат до PI не можуть приховати регресію тестового стенда Codex.
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` чи
|
||||
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0`, коли потрібен вужчий debug-запуск.
|
||||
- Docker використовує ту саму явну конфігурацію runtime Codex, тож застарілі псевдоніми або fallback до PI
|
||||
не можуть приховати регресію стенда Codex.
|
||||
|
||||
### Рекомендовані live-рецепти
|
||||
|
||||
Вузькі явні списки дозволених елементів є найшвидшими й найменш нестабільними:
|
||||
Вузькі, явні allowlists є найшвидшими та найменш нестабільними:
|
||||
|
||||
- Одна модель, напряму (без Gateway):
|
||||
- Одна модель, напряму (без gateway):
|
||||
- `OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts`
|
||||
|
||||
- Одна модель, димова перевірка Gateway:
|
||||
- Одна модель, gateway smoke:
|
||||
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
- Виклики інструментів у кількох провайдерів:
|
||||
- Виклик інструментів у кількох провайдерів:
|
||||
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
- Фокус на Google (ключ Gemini API + Antigravity):
|
||||
- Фокус на Google (API-ключ Gemini + Antigravity):
|
||||
- Gemini (API-ключ): `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:
|
||||
- Якщо локальні ключі зберігаються в профілі оболонки: `source ~/.profile`
|
||||
- Динамічне типове значення Gemini 3: `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`
|
||||
- Google adaptive thinking smoke:
|
||||
- Якщо локальні ключі зберігаються в профілі shell: `source ~/.profile`
|
||||
- Динамічне типове Gemini 3: `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: `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-ключ).
|
||||
- `google-antigravity/...` використовує міст Antigravity OAuth (кінцева точка агента у стилі Cloud Code Assist).
|
||||
- `google-antigravity/...` використовує міст Antigravity OAuth (endpoint агента у стилі Cloud Code Assist).
|
||||
- `google-gemini-cli/...` використовує локальний Gemini CLI на вашій машині (окрема автентифікація + особливості інструментів).
|
||||
- Gemini API проти Gemini CLI:
|
||||
- API: OpenClaw викликає розміщений у Google Gemini API через HTTP (API-ключ / автентифікація профілю); це те, що більшість користувачів має на увазі під “Gemini”.
|
||||
- CLI: OpenClaw запускає локальний двійковий файл `gemini` через оболонку; він має власну автентифікацію й може поводитися інакше (підтримка потокового передавання/інструментів/розбіжність версій).
|
||||
- API: OpenClaw викликає розміщений у Google Gemini API через HTTP (API-ключ / автентифікація профілю); саме це більшість користувачів має на увазі під “Gemini”.
|
||||
- CLI: OpenClaw запускає локальний бінарний файл `gemini` через shell; він має власну автентифікацію та може поводитися інакше (підтримка streaming/інструментів/розбіжність версій).
|
||||
|
||||
## Live: матриця моделей (що ми покриваємо)
|
||||
|
||||
Немає фіксованого “списку моделей CI” (live є опціональним), але це **рекомендовані** моделі для регулярного покриття на машині розробника з ключами.
|
||||
Немає фіксованого “списку моделей CI” (live є opt-in), але це **рекомендовані** моделі для регулярного покриття на dev-машині з ключами.
|
||||
|
||||
### Сучасний набір димових перевірок (виклики інструментів + зображення)
|
||||
### Сучасний smoke-набір (виклик інструментів + зображення)
|
||||
|
||||
Це запуск “поширених моделей”, який, як ми очікуємо, має залишатися працездатним:
|
||||
Це запуск “поширених моделей”, який, як ми очікуємо, має й надалі працювати:
|
||||
|
||||
- OpenAI (не Codex): `openai/gpt-5.5`
|
||||
- OpenAI Codex OAuth: `openai-codex/gpt-5.5`
|
||||
@ -384,12 +392,12 @@ pnpm test:docker:live-codex-harness
|
||||
- Z.AI (GLM): `zai/glm-5.1`
|
||||
- MiniMax: `minimax/MiniMax-M2.7`
|
||||
|
||||
Запустіть димову перевірку Gateway з інструментами + зображенням:
|
||||
Запустіть gateway smoke з інструментами + зображенням:
|
||||
`OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/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-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
|
||||
|
||||
### Базовий рівень: виклики інструментів (Read + необов’язковий Exec)
|
||||
### Базовий рівень: виклик інструментів (Read + необов’язковий Exec)
|
||||
|
||||
Виберіть принаймні одну модель для кожної родини провайдерів:
|
||||
Виберіть принаймні одну модель на кожну родину провайдера:
|
||||
|
||||
- OpenAI: `openai/gpt-5.5`
|
||||
- Anthropic: `anthropic/claude-opus-4-6` (або `anthropic/claude-sonnet-4-6`)
|
||||
@ -398,28 +406,28 @@ pnpm test:docker:live-codex-harness
|
||||
- Z.AI (GLM): `zai/glm-5.1`
|
||||
- MiniMax: `minimax/MiniMax-M2.7`
|
||||
|
||||
Необов’язкове додаткове покриття (варто мати):
|
||||
Необов’язкове додаткове покриття (бажано мати):
|
||||
|
||||
- xAI: `xai/grok-4.3` (або остання доступна)
|
||||
- Mistral: `mistral/`… (виберіть одну модель із підтримкою “tools”, яку у вас увімкнено)
|
||||
- Cerebras: `cerebras/`… (якщо у вас є доступ)
|
||||
- LM Studio: `lmstudio/`… (локально; виклики інструментів залежать від режиму API)
|
||||
- Cerebras: `cerebras/`… (якщо маєте доступ)
|
||||
- LM Studio: `lmstudio/`… (локально; виклик інструментів залежить від режиму API)
|
||||
|
||||
### Vision: надсилання зображення (вкладення → мультимодальне повідомлення)
|
||||
|
||||
Додайте принаймні одну модель із підтримкою зображень до `OPENCLAW_LIVE_GATEWAY_MODELS` (варіанти Claude/Gemini/OpenAI з підтримкою vision тощо), щоб виконати пробу зображення.
|
||||
Додайте принаймні одну модель із підтримкою зображень до `OPENCLAW_LIVE_GATEWAY_MODELS` (варіанти Claude/Gemini/OpenAI з підтримкою vision тощо), щоб виконати перевірку зображення.
|
||||
|
||||
### Агрегатори / альтернативні шлюзи
|
||||
### Агрегатори / альтернативні gateway
|
||||
|
||||
Якщо у вас увімкнені ключі, ми також підтримуємо тестування через:
|
||||
|
||||
- OpenRouter: `openrouter/...` (сотні моделей; використовуйте `openclaw models scan`, щоб знайти кандидатів із підтримкою інструментів+зображень)
|
||||
- OpenCode: `opencode/...` для Zen і `opencode-go/...` для Go (автентифікація через `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`)
|
||||
|
||||
Інші провайдери, які можна додати до live-матриці (якщо у вас є облікові дані/конфігурація):
|
||||
Більше провайдерів, яких можна включити до live-матриці (якщо маєте креденшіали/конфігурацію):
|
||||
|
||||
- Вбудовані: `openai`, `openai-codex`, `anthropic`, `google`, `google-vertex`, `google-antigravity`, `google-gemini-cli`, `zai`, `openrouter`, `opencode`, `opencode-go`, `xai`, `groq`, `cerebras`, `mistral`, `github-copilot`
|
||||
- Через `models.providers` (кастомні кінцеві точки): `minimax` (cloud/API), а також будь-який OpenAI/Anthropic-сумісний проксі (LM Studio, vLLM, LiteLLM тощо)
|
||||
- Через `models.providers` (користувацькі endpoints): `minimax` (cloud/API), а також будь-який сумісний з OpenAI/Anthropic proxy (LM Studio, vLLM, LiteLLM тощо)
|
||||
|
||||
<Tip>
|
||||
Не хардкодьте "all models" у документації. Авторитетний список — це те, що `discoverModels(...)` повертає на вашій машині, плюс доступні ключі.
|
||||
@ -427,24 +435,24 @@ pnpm test:docker:live-codex-harness
|
||||
|
||||
## Облікові дані (ніколи не комітьте)
|
||||
|
||||
Live-тести знаходять облікові дані так само, як це робить CLI. Практичні наслідки:
|
||||
Live-тести виявляють облікові дані так само, як це робить CLI. Практичні наслідки:
|
||||
|
||||
- Якщо CLI працює, live-тести мають знайти ті самі ключі.
|
||||
- Якщо live-тест повідомляє “no creds”, налагоджуйте це так само, як налагоджували б `openclaw models list` / вибір моделі.
|
||||
- Якщо CLI працює, live-тести мають знаходити ті самі ключі.
|
||||
- Якщо live-тест повідомляє «немає облікових даних», налагоджуйте це так само, як налагоджували б `openclaw models list` / вибір моделі.
|
||||
|
||||
- Профілі автентифікації для кожного агента: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (це те, що “profile keys” означає в live-тестах)
|
||||
- Профілі автентифікації для окремих агентів: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (саме це означає «profile keys» у live-тестах)
|
||||
- Конфігурація: `~/.openclaw/openclaw.json` (або `OPENCLAW_CONFIG_PATH`)
|
||||
- Каталог застарілого стану: `~/.openclaw/credentials/` (копіюється до staged live home, коли наявний, але не є основним сховищем profile-key)
|
||||
- Локальні live-запуски типово копіюють активну конфігурацію, файли `auth-profiles.json` для кожного агента, застарілий `credentials/` і підтримувані зовнішні каталоги автентифікації CLI до тимчасового тестового home; staged live homes пропускають `workspace/` і `sandboxes/`, а перевизначення шляхів `agents.*.workspace` / `agentDir` вилучаються, щоб probes не торкалися вашого справжнього робочого простору хоста.
|
||||
- Застарілий каталог стану: `~/.openclaw/credentials/` (копіюється до підготовленого live-домашнього каталогу, якщо наявний, але не є основним сховищем profile-key)
|
||||
- Локальні live-запуски за замовчуванням копіюють активну конфігурацію, файли `auth-profiles.json` для окремих агентів, застарілий `credentials/` і підтримувані зовнішні каталоги автентифікації CLI до тимчасового тестового домашнього каталогу; підготовлені live-домашні каталоги пропускають `workspace/` і `sandboxes/`, а перевизначення шляхів `agents.*.workspace` / `agentDir` вилучаються, щоб перевірки не торкалися вашого справжнього робочого простору на хості.
|
||||
|
||||
Якщо хочете покладатися на env-ключі (наприклад, експортовані у вашому `~/.profile`), запускайте локальні тести після `source ~/.profile` або використовуйте Docker runners нижче (вони можуть монтувати `~/.profile` у контейнер).
|
||||
Якщо ви хочете покладатися на ключі env (наприклад, експортовані у вашому `~/.profile`), запускайте локальні тести після `source ~/.profile` або використовуйте Docker-запускачі нижче (вони можуть монтувати `~/.profile` у контейнер).
|
||||
|
||||
## Deepgram live (транскрибування аудіо)
|
||||
## 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
|
||||
## Live-план кодування BytePlus
|
||||
|
||||
- Тест: `extensions/byteplus/live.test.ts`
|
||||
- Увімкнення: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts`
|
||||
@ -454,24 +462,24 @@ 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>` не налаштовано
|
||||
- Корисно після змін у надсиланні workflows comfy, polling, завантаженнях або реєстрації Plugin
|
||||
- Корисно після змін у надсиланні workflow comfy, опитуванні, завантаженнях або реєстрації Plugin
|
||||
|
||||
## Image generation live
|
||||
|
||||
- Тест: `test/image-generation.runtime.live.test.ts`
|
||||
- Команда: `pnpm test:live test/image-generation.runtime.live.test.ts`
|
||||
- Harness: `pnpm test:live:media image`
|
||||
- Обсяг:
|
||||
- Область:
|
||||
- Перелічує кожен зареєстрований Plugin провайдера генерації зображень
|
||||
- Завантажує відсутні env vars провайдера з вашої login shell (`~/.profile`) перед probing
|
||||
- Типово використовує live/env API keys перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні shell credentials
|
||||
- Пропускає провайдерів без придатної auth/profile/model
|
||||
- Завантажує відсутні env-змінні провайдера з вашої login shell (`~/.profile`) перед перевіркою
|
||||
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, тож застарілі тестові ключі в `auth-profiles.json` не приховують справжні облікові дані shell
|
||||
- Пропускає провайдери без придатної автентифікації/профілю/моделі
|
||||
- Запускає кожного налаштованого провайдера через спільний runtime генерації зображень:
|
||||
- `<provider>:generate`
|
||||
- `<provider>:edit`, коли провайдер заявляє підтримку edit
|
||||
- `<provider>:edit`, коли провайдер оголошує підтримку редагування
|
||||
- Поточні охоплені вбудовані провайдери:
|
||||
- `deepinfra`
|
||||
- `fal`
|
||||
@ -487,9 +495,9 @@ Live-тести знаходять облікові дані так само, я
|
||||
- `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`, щоб примусово використовувати auth зі сховища профілів і ігнорувати env-only overrides
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію через сховище профілів і ігнорувати перевизначення лише через env
|
||||
|
||||
Для shipped CLI path додайте smoke `infer` після успішного проходження live-тесту провайдера/runtime:
|
||||
Для постачуваного шляху CLI додайте smoke `infer` після успішного проходження live-тесту провайдера/runtime:
|
||||
|
||||
```bash
|
||||
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
|
||||
@ -501,75 +509,75 @@ openclaw infer image generate \
|
||||
--json
|
||||
```
|
||||
|
||||
Це охоплює parsing аргументів CLI, розв’язання config/default-agent, активацію вбудованого Plugin, спільний runtime генерації зображень і live-запит до провайдера. Очікується, що залежності Plugin наявні до завантаження runtime.
|
||||
Це охоплює розбір аргументів 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`
|
||||
- Harness: `pnpm test:live:media music`
|
||||
- Обсяг:
|
||||
- Перевіряє спільний шлях вбудованого провайдера генерації музики
|
||||
- Область:
|
||||
- Перевіряє спільний вбудований шлях провайдера генерації музики
|
||||
- Наразі охоплює Google і MiniMax
|
||||
- Завантажує env vars провайдера з вашої login shell (`~/.profile`) перед probing
|
||||
- Типово використовує live/env API keys перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні shell credentials
|
||||
- Пропускає провайдерів без придатної auth/profile/model
|
||||
- Запускає обидва заявлені runtime-режими, коли доступні:
|
||||
- `generate` з input лише prompt
|
||||
- `edit`, коли провайдер заявляє `capabilities.edit.enabled`
|
||||
- Поточне покриття shared-lane:
|
||||
- Завантажує env-змінні провайдера з вашої login shell (`~/.profile`) перед перевіркою
|
||||
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, тож застарілі тестові ключі в `auth-profiles.json` не приховують справжні облікові дані shell
|
||||
- Пропускає провайдери без придатної автентифікації/профілю/моделі
|
||||
- Запускає обидва оголошені режими runtime, коли вони доступні:
|
||||
- `generate` з введенням лише prompt
|
||||
- `edit`, коли провайдер оголошує `capabilities.edit.enabled`
|
||||
- Поточне охоплення shared-lane:
|
||||
- `google`: `generate`, `edit`
|
||||
- `minimax`: `generate`
|
||||
- `comfy`: окремий Comfy live-файл, не цей спільний sweep
|
||||
- `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`, щоб примусово використовувати auth зі сховища профілів і ігнорувати env-only overrides
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію через сховище профілів і ігнорувати перевизначення лише через env
|
||||
|
||||
## Video generation live
|
||||
|
||||
- Тест: `extensions/video-generation-providers.live.test.ts`
|
||||
- Увімкнення: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts`
|
||||
- Harness: `pnpm test:live:media video`
|
||||
- Обсяг:
|
||||
- Перевіряє спільний шлях вбудованого провайдера генерації відео
|
||||
- Типово використовує release-safe smoke path: не-FAL провайдери, один text-to-video запит на провайдера, one-second lobster prompt і ліміт операції на провайдера з `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (типово `180000`)
|
||||
- Типово пропускає FAL, бо затримка provider-side queue може домінувати над часом release; передайте `--video-providers fal` або `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, щоб запустити його явно
|
||||
- Завантажує env vars провайдера з вашої login shell (`~/.profile`) перед probing
|
||||
- Типово використовує live/env API keys перед збереженими профілями автентифікації, щоб застарілі тестові ключі в `auth-profiles.json` не маскували справжні shell credentials
|
||||
- Пропускає провайдерів без придатної auth/profile/model
|
||||
- Типово запускає лише `generate`
|
||||
- Установіть `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1`, щоб також запускати заявлені transform-режими, коли доступні:
|
||||
- `imageToVideo`, коли провайдер заявляє `capabilities.imageToVideo.enabled`, а вибрані provider/model приймають buffer-backed local image input у спільному sweep
|
||||
- `videoToVideo`, коли провайдер заявляє `capabilities.videoToVideo.enabled`, а вибрані provider/model приймають buffer-backed local video input у спільному sweep
|
||||
- Поточні заявлені, але пропущені провайдери `imageToVideo` у спільному sweep:
|
||||
- `vydra`, бо вбудований `veo3` є text-only, а вбудований `kling` потребує remote image URL
|
||||
- Provider-specific Vydra coverage:
|
||||
- Область:
|
||||
- Перевіряє спільний вбудований шлях провайдера генерації відео
|
||||
- За замовчуванням використовує release-safe smoke-шлях: провайдери не FAL, один запит text-to-video на провайдера, односекундний prompt із lobster і ліміт операції на провайдера з `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` за замовчуванням)
|
||||
- За замовчуванням пропускає FAL, бо затримка черги на боці провайдера може домінувати над часом релізу; передайте `--video-providers fal` або `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"`, щоб запустити його явно
|
||||
- Завантажує env-змінні провайдера з вашої login shell (`~/.profile`) перед перевіркою
|
||||
- За замовчуванням використовує live/env API-ключі перед збереженими профілями автентифікації, тож застарілі тестові ключі в `auth-profiles.json` не приховують справжні облікові дані shell
|
||||
- Пропускає провайдери без придатної автентифікації/профілю/моделі
|
||||
- За замовчуванням запускає лише `generate`
|
||||
- Установіть `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1`, щоб також запускати оголошені режими перетворення, коли вони доступні:
|
||||
- `imageToVideo`, коли провайдер оголошує `capabilities.imageToVideo.enabled`, а вибраний провайдер/модель приймає локальне зображення на основі буфера у спільному sweep
|
||||
- `videoToVideo`, коли провайдер оголошує `capabilities.videoToVideo.enabled`, а вибраний провайдер/модель приймає локальне відео на основі буфера у спільному sweep
|
||||
- Поточні оголошені, але пропущені провайдери `imageToVideo` у спільному sweep:
|
||||
- `vydra`, бо вбудований `veo3` є лише text-only, а вбудований `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 плюс lane `kling`, який типово використовує fixture з remote image URL
|
||||
- Поточне live-покриття `videoToVideo`:
|
||||
- `runway` лише коли вибрана модель є `runway/gen4_aleph`
|
||||
- Поточні заявлені, але пропущені провайдери `videoToVideo` у спільному sweep:
|
||||
- `alibaba`, `qwen`, `xai`, бо ці шляхи наразі потребують remote `http(s)` / MP4 reference URLs
|
||||
- `google`, бо поточна shared Gemini/Veo lane використовує local buffer-backed input, і цей шлях не приймається у спільному sweep
|
||||
- `openai`, бо поточна shared lane не має гарантій org-specific доступу до video inpaint/remix
|
||||
- цей файл запускає `veo3` text-to-video плюс lane `kling`, який за замовчуванням використовує fixture віддаленої URL-адреси зображення
|
||||
- Поточне live-охоплення `videoToVideo`:
|
||||
- `runway` лише коли вибрана модель — `runway/gen4_aleph`
|
||||
- Поточні оголошені, але пропущені провайдери `videoToVideo` у спільному sweep:
|
||||
- `alibaba`, `qwen`, `xai`, бо ці шляхи наразі потребують віддалених `http(s)` / MP4 reference URL
|
||||
- `google`, бо поточний спільний lane Gemini/Veo використовує локальне введення на основі буфера, а цей шлях не приймається у спільному sweep
|
||||
- `openai`, бо поточний спільний lane не має гарантій доступу до video inpaint/remix, специфічних для org
|
||||
- Необов’язкове звуження:
|
||||
- `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=""`, щоб включити кожного провайдера в default sweep, включно з FAL
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000`, щоб зменшити ліміт кожної операції провайдера для агресивного smoke run
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""`, щоб включити кожного провайдера в стандартний sweep, включно з FAL
|
||||
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000`, щоб зменшити ліміт кожної операції провайдера для агресивного smoke-запуску
|
||||
- Необов’язкова поведінка автентифікації:
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати auth зі сховища профілів і ігнорувати env-only overrides
|
||||
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1`, щоб примусово використовувати автентифікацію через сховище профілів і ігнорувати перевизначення лише через env
|
||||
|
||||
## Media live harness
|
||||
|
||||
- Команда: `pnpm test:live:media`
|
||||
- Призначення:
|
||||
- Запускає спільні image, music і video live suites через одну repo-native entrypoint
|
||||
- Автоматично завантажує відсутні env vars провайдера з `~/.profile`
|
||||
- Типово автоматично звужує кожен suite до провайдерів, які наразі мають придатну auth
|
||||
- Повторно використовує `scripts/test-live.mjs`, тож поведінка Heartbeat і quiet-mode лишається узгодженою
|
||||
- Запускає спільні live-набори для зображень, музики й відео через одну repo-native точку входу
|
||||
- Автоматично завантажує відсутні env-змінні провайдера з `~/.profile`
|
||||
- За замовчуванням автоматично звужує кожен набір до провайдерів, які наразі мають придатну автентифікацію
|
||||
- Повторно використовує `scripts/test-live.mjs`, тож поведінка Heartbeat і quiet-mode залишається узгодженою
|
||||
- Приклади:
|
||||
- `pnpm test:live:media`
|
||||
- `pnpm test:live:media image video --providers openai,google,minimax`
|
||||
@ -578,4 +586,4 @@ openclaw infer image generate \
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Тестування](/uk/help/testing) — unit, integration, QA і Docker suites
|
||||
- [Тестування](/uk/help/testing) — модульні, інтеграційні, QA- та Docker-набори
|
||||
|
||||
@ -1,40 +1,40 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібен багаторівневий захист від атак SSRF і переприв’язування DNS
|
||||
- Вам потрібен багаторівневий захист від SSRF-атак і атак із переприв’язуванням DNS
|
||||
- Налаштування зовнішнього прямого проксі для трафіку середовища виконання OpenClaw
|
||||
summary: Як спрямовувати HTTP- та WebSocket-трафік середовища виконання OpenClaw через фільтрувальний проксі, керований оператором
|
||||
summary: Як маршрутизувати HTTP- та WebSocket-трафік середовища виконання OpenClaw через керований оператором фільтрувальний проксі
|
||||
title: Мережевий проксі
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T03:58:47Z"
|
||||
generated_at: "2026-05-04T11:08:46Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: fc7140c5ced0e7454a6f85d1ea8f3256bbd28cc0cb42eeafe8e5e6439b90e3f0
|
||||
source_hash: eedbf3bac14800c34c7ca2e3b6879dac360a88d51b5b7449ddf41a4dd471648b
|
||||
source_path: security/network-proxy.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# Мережевий проксі
|
||||
|
||||
OpenClaw може маршрутизувати runtime HTTP- і WebSocket-трафік через forward-проксі, керований оператором. Це додатковий необовʼязковий рівень захисту для розгортань, яким потрібні централізований контроль вихідного трафіку, сильніший захист від SSRF і краща аудитованість мережі.
|
||||
OpenClaw може спрямовувати runtime HTTP- і WebSocket-трафік через керований оператором прямий проксі. Це необов'язковий додатковий рівень захисту для розгортань, яким потрібні централізований контроль вихідного трафіку, сильніший захист від SSRF і краща аудитованість мережі.
|
||||
|
||||
OpenClaw не постачає, не завантажує, не запускає, не налаштовує і не сертифікує проксі. Ви запускаєте проксі-технологію, яка підходить вашому середовищу, а OpenClaw маршрутизує через неї звичайні локальні для процесу HTTP- і WebSocket-клієнти.
|
||||
OpenClaw не постачає, не завантажує, не запускає, не налаштовує й не сертифікує проксі. Ви запускаєте проксі-технологію, яка підходить для вашого середовища, а OpenClaw спрямовує через неї звичайні локальні для процесу HTTP- і WebSocket-клієнти.
|
||||
|
||||
## Навіщо використовувати проксі?
|
||||
|
||||
Проксі дає операторам одну точку мережевого контролю для вихідного HTTP- і WebSocket-трафіку. Це може бути корисно навіть поза посиленням захисту від SSRF:
|
||||
|
||||
- Централізована політика: підтримуйте одну політику вихідного трафіку замість того, щоб покладатися на правильне налаштування мережевих правил у кожному місці HTTP-виклику застосунку.
|
||||
- Перевірки під час підключення: оцінюйте призначення після DNS-розвʼязання і безпосередньо перед тим, як проксі відкриє upstream-зʼєднання.
|
||||
- Захист від DNS rebinding: зменшуйте проміжок між DNS-перевіркою на рівні застосунку і фактичним вихідним зʼєднанням.
|
||||
- Ширше покриття JavaScript: маршрутизуйте звичайні клієнти `fetch`, `node:http`, `node:https`, WebSocket, axios, got, node-fetch та подібні через той самий шлях.
|
||||
- Аудитованість: журналюйте дозволені й заборонені призначення на межі вихідного трафіку.
|
||||
- Операційний контроль: застосовуйте правила призначення, мережеву сегментацію, обмеження швидкості або allowlist-и вихідного трафіку без перебудови OpenClaw.
|
||||
- Централізована політика: підтримуйте одну політику вихідного трафіку замість того, щоб покладатися на правильність мережевих правил у кожній точці HTTP-виклику застосунку.
|
||||
- Перевірки під час підключення: оцінюйте призначення після DNS-резолюції та безпосередньо перед тим, як проксі відкриє висхідне з'єднання.
|
||||
- Захист від DNS rebinding: зменште проміжок між DNS-перевіркою на рівні застосунку та фактичним вихідним з'єднанням.
|
||||
- Ширше покриття JavaScript: спрямовуйте звичайні `fetch`, `node:http`, `node:https`, WebSocket, axios, got, node-fetch і подібні клієнти одним шляхом.
|
||||
- Аудитованість: записуйте дозволені й заборонені призначення на межі вихідного трафіку.
|
||||
- Операційний контроль: застосовуйте правила призначень, сегментацію мережі, обмеження швидкості або списки дозволених вихідних адрес без повторного збирання OpenClaw.
|
||||
|
||||
Проксі-маршрутизація є процесним захисним обмеженням для звичайного вихідного HTTP- і WebSocket-трафіку. Вона дає операторам fail-closed шлях для маршрутизації підтримуваних JavaScript HTTP-клієнтів через власний фільтрувальний проксі, але це не мережевий sandbox рівня ОС і не змушує OpenClaw сертифікувати політику призначень проксі.
|
||||
Маршрутизація через проксі — це процесний захисний бар'єр для звичайного вихідного HTTP- і WebSocket-трафіку. Вона дає операторам шлях із закриттям у разі помилки для маршрутизації підтримуваних JavaScript HTTP-клієнтів через їхній власний фільтрувальний проксі, але це не мережевий sandbox на рівні ОС і не означає, що OpenClaw сертифікує політику призначень проксі.
|
||||
|
||||
## Як OpenClaw маршрутизує трафік
|
||||
## Як OpenClaw спрямовує трафік
|
||||
|
||||
Коли `proxy.enabled=true` і налаштовано URL проксі, захищені runtime-процеси, як-от `openclaw gateway run`, `openclaw node run` і `openclaw agent --local`, маршрутизують звичайний вихідний HTTP- і WebSocket-трафік через налаштований проксі:
|
||||
Коли `proxy.enabled=true` і налаштовано URL проксі, захищені runtime-процеси, як-от `openclaw gateway run`, `openclaw node run` і `openclaw agent --local`, спрямовують звичайний вихідний HTTP- і WebSocket-трафік через налаштований проксі:
|
||||
|
||||
```text
|
||||
OpenClaw process
|
||||
@ -43,27 +43,27 @@ OpenClaw process
|
||||
WebSocket clients -> operator-managed filtering proxy -> public internet
|
||||
```
|
||||
|
||||
Публічний контракт — це поведінка маршрутизації, а не внутрішні хуки Node, які використовуються для її реалізації. WebSocket-клієнти керівної площини OpenClaw Gateway використовують вузький прямий шлях для local loopback Gateway RPC-трафіку, коли URL Gateway використовує `localhost` або буквальну loopback IP-адресу, як-от `127.0.0.1` чи `[::1]`. Цей шлях керівної площини має мати змогу досягати loopback Gateway навіть тоді, коли проксі оператора блокує loopback-призначення. Звичайні runtime HTTP- і WebSocket-запити все одно використовують налаштований проксі.
|
||||
Публічний контракт — це поведінка маршрутизації, а не внутрішні хуки Node, які використовуються для її реалізації. Клієнти WebSocket контрольної площини OpenClaw Gateway використовують вузький прямий шлях для local loopback Gateway RPC-трафіку, коли URL Gateway використовує `localhost` або буквальну loopback IP-адресу, як-от `127.0.0.1` чи `[::1]`. Цей шлях контрольної площини має бути здатний досягати loopback Gateway, навіть коли операторський проксі блокує loopback-призначення. Звичайні runtime HTTP- і WebSocket-запити й надалі використовують налаштований проксі.
|
||||
|
||||
Внутрішньо OpenClaw використовує два процесні хуки маршрутизації для цієї функції:
|
||||
Внутрішньо OpenClaw використовує для цієї функції два процесні хуки маршрутизації:
|
||||
|
||||
- Маршрутизація через dispatcher Undici покриває `fetch`, клієнти на базі undici і транспорти, що надають власний undici dispatcher.
|
||||
- Маршрутизація `global-agent` покриває виклики ядра Node `node:http` і `node:https`, зокрема багато бібліотек, побудованих поверх `http.request`, `https.request`, `http.get` і `https.get`. Керований режим проксі примусово використовує цей глобальний агент, щоб явні HTTP-агенти Node випадково не обходили проксі оператора.
|
||||
- Маршрутизація диспетчера Undici покриває `fetch`, клієнти на основі undici та транспорти, які надають власний диспетчер undici.
|
||||
- Маршрутизація `global-agent` покриває викликачів ядра Node `node:http` і `node:https`, включно з багатьма бібліотеками, побудованими поверх `http.request`, `https.request`, `http.get` і `https.get`. Керований режим проксі примусово використовує цей глобальний агент, щоб явні HTTP-агенти Node випадково не обходили операторський проксі.
|
||||
|
||||
Деякі plugins володіють власними транспортами, яким потрібне явне підключення проксі навіть за наявності процесної маршрутизації. Наприклад, транспорт Bot API Telegram використовує власний HTTP/1 undici dispatcher і тому враховує змінні середовища процесного проксі плюс керований fallback `OPENCLAW_PROXY_URL` у цьому специфічному для власника транспортному шляху.
|
||||
Деякі plugins володіють власними транспортами, яким потрібне явне підключення проксі навіть за наявності процесної маршрутизації. Наприклад, транспорт Telegram Bot API використовує власний HTTP/1-диспетчер undici і тому враховує змінні середовища процесного проксі плюс керований fallback `OPENCLAW_PROXY_URL` у цьому специфічному для власника транспортному шляху.
|
||||
|
||||
Сам URL проксі має використовувати `http://`. HTTPS-призначення все одно підтримуються через проксі за допомогою HTTP `CONNECT`; це лише означає, що OpenClaw очікує звичайний слухач HTTP forward-проксі, наприклад `http://127.0.0.1:3128`.
|
||||
Сам URL проксі має використовувати `http://`. HTTPS-призначення все одно підтримуються через проксі за допомогою HTTP `CONNECT`; це лише означає, що OpenClaw очікує звичайний HTTP-слухач прямого проксі, наприклад `http://127.0.0.1:3128`.
|
||||
|
||||
Поки проксі активний, OpenClaw очищає `no_proxy`, `NO_PROXY` і `GLOBAL_AGENT_NO_PROXY`. Ці списки обходу залежать від призначення, тому якщо залишити там `localhost` або `127.0.0.1`, високоризикові SSRF-цілі зможуть оминути фільтрувальний проксі.
|
||||
Поки проксі активний, OpenClaw очищає `no_proxy`, `NO_PROXY` і `GLOBAL_AGENT_NO_PROXY`. Ці списки обходу базуються на призначеннях, тому залишення там `localhost` або `127.0.0.1` дозволило б високоризиковим SSRF-цілям оминати фільтрувальний проксі.
|
||||
|
||||
Під час завершення роботи OpenClaw відновлює попереднє проксі-середовище і скидає кешований стан процесної маршрутизації.
|
||||
Під час завершення роботи OpenClaw відновлює попереднє проксі-середовище й скидає кешований стан процесної маршрутизації.
|
||||
|
||||
## Повʼязані терміни проксі
|
||||
## Пов'язані терміни проксі
|
||||
|
||||
- `proxy.enabled` / `proxy.proxyUrl`: маршрутизація вихідного forward-проксі для runtime-вихідного трафіку OpenClaw. Ця сторінка документує цю функцію.
|
||||
- `gateway.auth.mode: "trusted-proxy"`: вхідна identity-aware автентифікація reverse-проксі для доступу до Gateway. Див. [Автентифікація довіреного проксі](/uk/gateway/trusted-proxy-auth).
|
||||
- `proxy.enabled` / `proxy.proxyUrl`: маршрутизація вихідного трафіку OpenClaw runtime через прямий проксі. Ця сторінка документує цю функцію.
|
||||
- `gateway.auth.mode: "trusted-proxy"`: вхідна автентифікація через identity-aware зворотний проксі для доступу до Gateway. Див. [Автентифікація через довірений проксі](/uk/gateway/trusted-proxy-auth).
|
||||
- `openclaw proxy`: локальний debug-проксі та інспектор захоплення для розробки й підтримки. Див. [openclaw proxy](/uk/cli/proxy).
|
||||
- Налаштування проксі, специфічні для каналу або провайдера: специфічні для власника перевизначення для окремого транспорту. Надавайте перевагу керованому мережевому проксі, коли мета — централізований контроль вихідного трафіку в усьому runtime.
|
||||
- Налаштування проксі, специфічні для каналу або провайдера: перевизначення, специфічні для власника, для певного транспорту. Надавайте перевагу керованому мережевому проксі, коли мета — централізований контроль вихідного трафіку в межах runtime.
|
||||
|
||||
## Конфігурація
|
||||
|
||||
@ -81,9 +81,9 @@ OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run
|
||||
|
||||
`proxy.proxyUrl` має пріоритет над `OPENCLAW_PROXY_URL`.
|
||||
|
||||
Якщо `enabled=true`, але не налаштовано валідний URL проксі, захищені команди завершують запуск з помилкою замість fallback до прямого мережевого доступу.
|
||||
Якщо `enabled=true`, але не налаштовано чинний URL проксі, захищені команди завершують запуск із помилкою замість fallback до прямого мережевого доступу.
|
||||
|
||||
Для керованих сервісів gateway, запущених за допомогою `openclaw gateway start`, краще зберігати URL у конфігурації:
|
||||
Для керованих сервісів Gateway, запущених за допомогою `openclaw gateway start`, надавайте перевагу збереженню URL у конфігурації:
|
||||
|
||||
```bash
|
||||
openclaw config set proxy.enabled true
|
||||
@ -92,9 +92,9 @@ openclaw gateway install --force
|
||||
openclaw gateway start
|
||||
```
|
||||
|
||||
Fallback через середовище найкраще підходить для запусків у передньому плані. Якщо ви використовуєте його з інстальованим сервісом, помістіть `OPENCLAW_PROXY_URL` у довготривале середовище сервісу, наприклад `$OPENCLAW_STATE_DIR/.env` або `~/.openclaw/.env`, а потім перевстановіть сервіс, щоб launchd, systemd або Scheduled Tasks запускали gateway з цим значенням.
|
||||
Fallback через середовище найкраще підходить для запусків у передньому плані. Якщо ви використовуєте його зі встановленим сервісом, помістіть `OPENCLAW_PROXY_URL` у сталe середовище сервісу, наприклад `$OPENCLAW_STATE_DIR/.env` або `~/.openclaw/.env`, а потім перевстановіть сервіс, щоб launchd, systemd або Scheduled Tasks запускали gateway з цим значенням.
|
||||
|
||||
Для команд `openclaw --container ...` OpenClaw передає `OPENCLAW_PROXY_URL` у дочірній CLI, орієнтований на контейнер, коли його задано. URL має бути доступним зсередини контейнера; `127.0.0.1` посилається на сам контейнер, а не на хост. OpenClaw відхиляє loopback URL-и проксі для команд, орієнтованих на контейнер, якщо ви явно не перевизначите цю перевірку безпеки.
|
||||
Для команд `openclaw --container ...` OpenClaw передає `OPENCLAW_PROXY_URL` у дочірній CLI, націлений на контейнер, коли його встановлено. URL має бути досяжним ізсередини контейнера; `127.0.0.1` вказує на сам контейнер, а не на хост. OpenClaw відхиляє loopback URL проксі для команд, націлених на контейнер, якщо ви явно не перевизначите цю перевірку безпеки.
|
||||
|
||||
## Вимоги до проксі
|
||||
|
||||
@ -102,53 +102,53 @@ Fallback через середовище найкраще підходить д
|
||||
|
||||
Налаштуйте проксі так, щоб він:
|
||||
|
||||
- Привʼязувався лише до loopback або приватного довіреного інтерфейсу.
|
||||
- Обмежував доступ так, щоб ним могли користуватися лише процес OpenClaw, хост, контейнер або service account.
|
||||
- Самостійно розвʼязував призначення і блокував IP-адреси призначення після DNS-розвʼязання.
|
||||
- Прив'язувався лише до loopback або приватного довіреного інтерфейсу.
|
||||
- Обмежував доступ так, щоб ним міг користуватися лише процес OpenClaw, хост, контейнер або сервісний обліковий запис.
|
||||
- Самостійно резолвив призначення та блокував IP-адреси призначень після DNS-резолюції.
|
||||
- Застосовував політику під час підключення як для звичайних HTTP-запитів, так і для HTTPS-тунелів `CONNECT`.
|
||||
- Відхиляв обходи на основі призначення для loopback, приватних, link-local, metadata, multicast, reserved або documentation діапазонів.
|
||||
- Уникав allowlist-ів імен хостів, якщо ви не повністю довіряєте шляху DNS-розвʼязання.
|
||||
- Журналював призначення, рішення, статус і причину без журналювання тіл запитів, authorization-заголовків, cookies або інших секретів.
|
||||
- Тримав політику проксі під version control і переглядав зміни як безпеково чутливу конфігурацію.
|
||||
- Уникав списків дозволених імен хостів, якщо ви повністю не довіряєте шляху DNS-резолюції.
|
||||
- Записував призначення, рішення, статус і причину без логування тіл запитів, заголовків авторизації, cookies або інших секретів.
|
||||
- Тримав політику проксі під контролем версій і переглядав зміни як конфігурацію, чутливу до безпеки.
|
||||
|
||||
## Рекомендовані заблоковані призначення
|
||||
|
||||
Використовуйте цей denylist як відправну точку для будь-якого forward-проксі, firewall або політики вихідного трафіку.
|
||||
Використовуйте цей список заборон як відправну точку для будь-якого прямого проксі, firewall або політики вихідного трафіку.
|
||||
|
||||
Логіка класифікатора OpenClaw на рівні застосунку міститься в `src/infra/net/ssrf.ts` і `src/shared/net/ip.ts`. Відповідні parity-хуки — це `BLOCKED_HOSTNAMES`, `BLOCKED_IPV4_SPECIAL_USE_RANGES`, `BLOCKED_IPV6_SPECIAL_USE_RANGES`, `RFC2544_BENCHMARK_PREFIX` і вбудована обробка sentinel-ів IPv4 для NAT64, 6to4, Teredo, ISATAP та IPv4-mapped форм. Ці файли корисні як довідка під час підтримки зовнішньої політики проксі, але OpenClaw не експортує і не застосовує ці правила автоматично у вашому проксі.
|
||||
Логіка класифікатора OpenClaw на рівні застосунку міститься в `src/infra/net/ssrf.ts` і `src/shared/net/ip.ts`. Відповідні хуки паритету — це `BLOCKED_HOSTNAMES`, `BLOCKED_IPV4_SPECIAL_USE_RANGES`, `BLOCKED_IPV6_SPECIAL_USE_RANGES`, `RFC2544_BENCHMARK_PREFIX` і вбудована обробка IPv4 sentinel для NAT64, 6to4, Teredo, ISATAP та IPv4-mapped форм. Ці файли є корисними довідковими матеріалами під час підтримки зовнішньої політики проксі, але OpenClaw не експортує й не застосовує ці правила у вашому проксі автоматично.
|
||||
|
||||
| Діапазон або хост | Чому блокувати |
|
||||
| ------------------------------------------------------------------------------------ | --------------------------------------------------- |
|
||||
| `127.0.0.0/8`, `localhost`, `localhost.localdomain` | IPv4 loopback |
|
||||
| `::1/128` | IPv6 loopback |
|
||||
| `0.0.0.0/8`, `::/128` | Невизначені адреси та адреси цієї мережі |
|
||||
| `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` | Приватні мережі RFC1918 |
|
||||
| `169.254.0.0/16`, `fe80::/10` | Link-local адреси і поширені шляхи cloud metadata |
|
||||
| `169.254.169.254`, `metadata.google.internal` | Сервіси cloud metadata |
|
||||
| `100.64.0.0/10` | Спільний адресний простір carrier-grade NAT |
|
||||
| `198.18.0.0/15`, `2001:2::/48` | Діапазони для benchmark-тестування |
|
||||
| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | Діапазони special-use і documentation |
|
||||
| `224.0.0.0/4`, `ff00::/8` | Multicast |
|
||||
| `240.0.0.0/4` | Reserved IPv4 |
|
||||
| `fc00::/7`, `fec0::/10` | Локальні/приватні діапазони IPv6 |
|
||||
| `100::/64`, `2001:20::/28` | Діапазони IPv6 discard і ORCHIDv2 |
|
||||
| `64:ff9b::/96`, `64:ff9b:1::/48` | Префікси NAT64 із вбудованим IPv4 |
|
||||
| `2002::/16`, `2001::/32` | 6to4 і Teredo із вбудованим IPv4 |
|
||||
| `::/96`, `::ffff:0:0/96` | IPv4-compatible та IPv4-mapped IPv6 |
|
||||
| Діапазон або хост | Навіщо блокувати |
|
||||
| ------------------------------------------------------------------------------------ | ------------------------------------------------- |
|
||||
| `127.0.0.0/8`, `localhost`, `localhost.localdomain` | IPv4 loopback |
|
||||
| `::1/128` | IPv6 loopback |
|
||||
| `0.0.0.0/8`, `::/128` | Невизначені адреси та адреси цієї мережі |
|
||||
| `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` | Приватні мережі RFC1918 |
|
||||
| `169.254.0.0/16`, `fe80::/10` | Link-local адреси та поширені шляхи cloud metadata |
|
||||
| `169.254.169.254`, `metadata.google.internal` | Сервіси cloud metadata |
|
||||
| `100.64.0.0/10` | Спільний адресний простір carrier-grade NAT |
|
||||
| `198.18.0.0/15`, `2001:2::/48` | Діапазони для benchmark |
|
||||
| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | Діапазони special-use і documentation |
|
||||
| `224.0.0.0/4`, `ff00::/8` | Multicast |
|
||||
| `240.0.0.0/4` | Зарезервований IPv4 |
|
||||
| `fc00::/7`, `fec0::/10` | Локальні/приватні діапазони IPv6 |
|
||||
| `100::/64`, `2001:20::/28` | IPv6 discard і ORCHIDv2 діапазони |
|
||||
| `64:ff9b::/96`, `64:ff9b:1::/48` | Префікси NAT64 з вбудованим IPv4 |
|
||||
| `2002::/16`, `2001::/32` | 6to4 і Teredo з вбудованим IPv4 |
|
||||
| `::/96`, `::ffff:0:0/96` | IPv4-compatible та IPv4-mapped IPv6 |
|
||||
|
||||
Якщо ваш cloud provider або мережева платформа документує додаткові metadata-хости чи reserved діапазони, також додайте їх.
|
||||
Якщо ваш cloud-провайдер або мережева платформа документує додаткові metadata-хости чи зарезервовані діапазони, додайте їх також.
|
||||
|
||||
## Валідація
|
||||
|
||||
Валідуйте проксі з того самого хоста, контейнера або service account, який запускає OpenClaw:
|
||||
Перевіряйте проксі з того самого хоста, контейнера або сервісного облікового запису, який запускає OpenClaw:
|
||||
|
||||
```bash
|
||||
openclaw proxy validate --proxy-url http://127.0.0.1:3128
|
||||
```
|
||||
|
||||
За замовчуванням, коли власні призначення не надано, команда перевіряє, що `https://example.com/` успішний, і запускає тимчасовий loopback canary, якого проксі не має досягти. Стандартна перевірка заборони проходить, коли проксі повертає не-2xx відповідь відмови або блокує canary транспортною помилкою; вона зазнає невдачі, якщо успішна відповідь досягає canary. Якщо проксі не ввімкнено і не налаштовано, валідація повідомляє про проблему конфігурації; використовуйте `--proxy-url` для одноразового preflight перед зміною конфігурації. Використовуйте `--allowed-url` і `--denied-url`, щоб тестувати очікування, специфічні для розгортання. Власні заборонені призначення є fail-closed: будь-яка HTTP-відповідь означає, що призначення було доступне через проксі, а будь-яка транспортна помилка повідомляється як непереконлива, бо OpenClaw не може довести, що проксі заблокував доступне походження. У разі невдалої валідації команда завершується з кодом 1.
|
||||
За замовчуванням, коли не надано власні призначення, команда перевіряє, що `https://example.com/` успішно відкривається, і запускає тимчасовий loopback canary, якого проксі не має досягти. Стандартна перевірка заборони проходить, коли проксі повертає non-2xx відповідь відмови або блокує canary через транспортну помилку; вона не проходить, якщо успішна відповідь досягає canary. Якщо проксі не ввімкнено й не налаштовано, валідація повідомляє про проблему конфігурації; використовуйте `--proxy-url` для одноразового preflight перед зміною конфігурації. Використовуйте `--allowed-url` і `--denied-url`, щоб перевірити очікування, специфічні для розгортання. Додайте `--apns-reachable`, щоб також перевірити, що пряма доставка APNs HTTP/2 може відкрити тунель CONNECT через проксі й отримати відповідь sandbox APNs; probe використовує навмисно недійсний токен провайдера, тому очікується `403 InvalidProviderToken`, і це зараховується як досяжність. Власні заборонені призначення є fail-closed: будь-яка HTTP-відповідь означає, що призначення було досяжне через проксі, а будь-яка транспортна помилка повідомляється як непереконлива, оскільки OpenClaw не може довести, що проксі заблокував досяжне джерело. У разі помилки валідації команда завершується з кодом 1.
|
||||
|
||||
Використовуйте `--json` для автоматизації. JSON-вивід містить загальний результат, джерело ефективної конфігурації проксі, будь-які помилки конфігурації і кожну перевірку призначення. Облікові дані URL проксі редагуються в текстовому і JSON-виводі:
|
||||
Використовуйте `--json` для автоматизації. JSON-вивід містить загальний результат, ефективне джерело конфігурації проксі, будь-які помилки конфігурації та кожну перевірку призначення. Облікові дані URL проксі редагуються в текстовому та JSON-виводі:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -165,12 +165,18 @@ openclaw proxy validate --proxy-url http://127.0.0.1:3128
|
||||
"url": "https://example.com/",
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
{
|
||||
"kind": "apns",
|
||||
"url": "https://api.sandbox.push.apple.com",
|
||||
"ok": true,
|
||||
"status": 403
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Ви також можете перевірити вручну за допомогою `curl`:
|
||||
Також можна перевірити вручну за допомогою `curl`:
|
||||
|
||||
```bash
|
||||
curl -x http://127.0.0.1:3128 https://example.com/
|
||||
@ -178,7 +184,7 @@ curl -x http://127.0.0.1:3128 http://127.0.0.1/
|
||||
curl -x http://127.0.0.1:3128 http://169.254.169.254/
|
||||
```
|
||||
|
||||
Публічний запит має пройти успішно. Запити до loopback і метаданих має заблокувати проксі. Для `openclaw proxy validate` вбудований loopback canary може відрізнити відмову проксі від доступного origin. Користувацькі перевірки `--denied-url` не мають цього canary, тому вважайте як HTTP-відповіді, так і неоднозначні транспортні збої помилками перевірки, якщо ваш проксі не надає специфічний для розгортання сигнал відмови, який можна перевірити окремо.
|
||||
Публічний запит має виконатися успішно. Запити до loopback і метаданих мають бути заблоковані проксі. Для `openclaw proxy validate` вбудований loopback-канарковий тест може відрізнити відмову проксі від доступного джерела. Користувацькі перевірки `--denied-url` не мають такого канаркового тесту, тому вважайте як HTTP-відповіді, так і неоднозначні транспортні збої помилками перевірки, якщо ваш проксі не надає специфічний для розгортання сигнал відмови, який можна перевірити окремо.
|
||||
|
||||
Потім увімкніть проксі-маршрутизацію OpenClaw:
|
||||
|
||||
@ -198,11 +204,11 @@ proxy:
|
||||
|
||||
## Обмеження
|
||||
|
||||
- Проксі покращує покриття для process-local JavaScript HTTP- і WebSocket-клієнтів, але не є мережевою пісочницею рівня ОС.
|
||||
- Raw-сокети `net`, `tls` і `http2`, нативні доповнення та дочірні процеси можуть обходити проксі-маршрутизацію рівня Node, якщо вони не успадковують і не дотримуються змінних середовища проксі.
|
||||
- IRC є raw TCP/TLS-каналом поза маршрутизацією через forward proxy, керований оператором. У розгортаннях, які вимагають, щоб увесь вихідний трафік проходив через цей forward proxy, задайте `channels.irc.enabled=false`, якщо прямий вихідний IRC-трафік явно не схвалено.
|
||||
- Локальний debug-проксі є діагностичним інструментом, і його пряме пересилання upstream для проксі-запитів і тунелів CONNECT за замовчуванням вимкнене, доки активний режим керованого проксі; вмикайте пряме пересилання лише для схваленої локальної діагностики.
|
||||
- Локальні WebUI користувача та локальні сервери моделей за потреби слід додати до списку дозволених у політиці проксі оператора; OpenClaw не надає для них загального обходу локальної мережі.
|
||||
- Обхід проксі для control plane Gateway навмисно обмежено `localhost` і URL з буквальними loopback IP. Використовуйте `ws://127.0.0.1:18789`, `ws://[::1]:18789` або `ws://localhost:18789` для локальних прямих підключень до control plane Gateway; інші імена хостів маршрутизуються як звичайний трафік на основі імені хоста.
|
||||
- OpenClaw не перевіряє, не тестує і не сертифікує вашу політику проксі.
|
||||
- Розглядайте зміни політики проксі як безпеково чутливі операційні зміни.
|
||||
- Проксі покращує покриття для локальних у межах процесу клієнтів JavaScript HTTP і WebSocket, але це не мережевий sandbox рівня ОС.
|
||||
- Необроблені сокети `net`, `tls` і `http2`, нативні аддони та дочірні процеси можуть обходити проксі-маршрутизацію на рівні Node, якщо вони не успадковують і не дотримуються змінних середовища проксі.
|
||||
- IRC — це необроблений TCP/TLS-канал поза маршрутизацією через керований оператором прямий проксі. У розгортаннях, які вимагають, щоб увесь вихідний трафік проходив через цей прямий проксі, задайте `channels.irc.enabled=false`, якщо прямий вихідний IRC-трафік не схвалено явно.
|
||||
- Локальний налагоджувальний проксі є діагностичним інструментом, а його пряме переспрямування до upstream для проксі-запитів і тунелів CONNECT типово вимкнене, доки активний керований режим проксі; вмикайте пряме переспрямування лише для схваленої локальної діагностики.
|
||||
- Локальні WebUI користувача та локальні сервери моделей слід додавати до списку дозволених у політиці проксі оператора, коли це потрібно; OpenClaw не надає для них загального обходу локальної мережі.
|
||||
- Обхід проксі для площини керування Gateway навмисно обмежений `localhost` і URL з буквальними loopback-IP. Використовуйте `ws://127.0.0.1:18789`, `ws://[::1]:18789` або `ws://localhost:18789` для локальних прямих з’єднань із площиною керування Gateway; інші імена хостів маршрутизуються як звичайний трафік на основі імен хостів.
|
||||
- OpenClaw не перевіряє, не тестує й не сертифікує вашу політику проксі.
|
||||
- Розглядайте зміни політики проксі як чутливі до безпеки операційні зміни.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user