chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-04 01:02:51 +00:00
parent 00c356a0bc
commit 460d532823
4 changed files with 901 additions and 651 deletions

View File

@ -1,19 +1,19 @@
---
read_when:
- Ви хочете підключити OpenClaw до IRC-каналів або приватних повідомлень
- Ви налаштовуєте IRC allowlist-и, політику груп або шлюзування за згадками
- Ви хочете підключити OpenClaw до каналів IRC або приватних повідомлень
- Ви налаштовуєте списки дозволених для IRC, політику груп або контроль згадок
summary: Налаштування IRC Plugin, керування доступом і усунення несправностей
title: IRC
x-i18n:
generated_at: "2026-04-23T20:44:04Z"
model: gpt-5.4
generated_at: "2026-05-04T00:58:56Z"
model: gpt-5.5
provider: openai
source_hash: 76f316c0f026d0387a97dc5dcb6d8967f6e4841d94b95b36e42f6f6284882a69
source_hash: 43c3098fe49a5e7405443df73e1bf752a579460dc0b2070c3d07f43b512bb555
source_path: channels/irc.md
workflow: 15
workflow: 16
---
Використовуйте IRC, коли хочете підключити OpenClaw до класичних каналів (`#room`) і приватних повідомлень.
Використовуйте IRC, коли вам потрібен OpenClaw у класичних каналах (`#room`) і прямих повідомленнях.
IRC постачається як вбудований Plugin, але налаштовується в основній конфігурації в `channels.irc`.
## Швидкий старт
@ -36,50 +36,51 @@ IRC постачається як вбудований Plugin, але налаш
}
```
Для координації ботів бажано використовувати приватний IRC-сервер. Якщо ви свідомо використовуєте публічну IRC-мережу, поширені варіанти включають Libera.Chat, OFTC і Snoonet. Уникайте передбачуваних публічних каналів для бекканального трафіку бота або swarm.
Для координації ботів віддавайте перевагу приватному IRC-серверу. Якщо ви навмисно використовуєте публічну IRC-мережу, поширені варіанти включають Libera.Chat, OFTC і Snoonet. Уникайте передбачуваних публічних каналів для трафіку бота або зворотного каналу рою.
3. Запустіть/перезапустіть Gateway:
3. Запустіть або перезапустіть Gateway:
```bash
openclaw gateway run
```
## Типові налаштування безпеки
## Стандартні налаштування безпеки
- `channels.irc.dmPolicy` типово має значення `"pairing"`.
- `channels.irc.groupPolicy` типово має значення `"allowlist"`.
- Якщо `groupPolicy="allowlist"`, задайте `channels.irc.groups`, щоб визначити дозволені канали.
- Використовуйте TLS (`channels.irc.tls=true`), якщо тільки ви свідомо не погоджуєтеся на незашифрований транспорт.
- IRC використовує сирі TCP/TLS-сокети поза маршрутизацією через керований оператором OpenClaw прямий проксі. У розгортаннях, які вимагають, щоб увесь вихідний трафік проходив через цей прямий проксі, задайте `channels.irc.enabled=false`, якщо прямий вихідний IRC-трафік не схвалено явно.
- `channels.irc.dmPolicy` за замовчуванням має значення `"pairing"`.
- `channels.irc.groupPolicy` за замовчуванням має значення `"allowlist"`.
- З `groupPolicy="allowlist"` задайте `channels.irc.groups`, щоб визначити дозволені канали.
- Використовуйте TLS (`channels.irc.tls=true`), якщо ви навмисно не приймаєте передавання відкритим текстом.
## Керування доступом
Для IRC-каналів є два окремі «бар’єри»:
Для IRC-каналів є два окремі «шлюзи»:
1. **Доступ до каналу** (`groupPolicy` + `groups`): чи приймає бот повідомлення з каналу взагалі.
2. **Доступ відправника** (`groupAllowFrom` / `groups["#channel"].allowFrom` для конкретного каналу): хто має право запускати бота в цьому каналі.
2. **Доступ відправника** (`groupAllowFrom` / `groups["#channel"].allowFrom` для окремого каналу): хто має право запускати бота всередині цього каналу.
Ключі конфігурації:
- Allowlist DM (доступ відправників у DM): `channels.irc.allowFrom`
- Allowlist відправників у групах (доступ відправників у каналах): `channels.irc.groupAllowFrom`
- Елементи керування для окремого каналу (канал + відправник + правила згадок): `channels.irc.groups["#channel"]`
- `channels.irc.groupPolicy="open"` дозволяє не налаштовані канали (**типово вони все одно проходять шлюзування за згадками**)
- Список дозволених для DM (доступ відправника DM): `channels.irc.allowFrom`
- Список дозволених відправників групи (доступ відправника каналу): `channels.irc.groupAllowFrom`
- Елементи керування для окремого каналу (правила каналу, відправника й згадок): `channels.irc.groups["#channel"]`
- `channels.irc.groupPolicy="open"` дозволяє неналаштовані канали (**однак за замовчуванням усе ще вимагає згадки**)
Записи allowlist слід задавати через стабільні ідентичності відправників (`nick!user@host`).
Зіставлення лише за nick є змінним і вмикається тільки коли `channels.irc.dangerouslyAllowNameMatching: true`.
Записи списку дозволених мають використовувати стабільні ідентичності відправників (`nick!user@host`).
Зіставлення лише за псевдонімом є змінним і вмикається тільки коли `channels.irc.dangerouslyAllowNameMatching: true`.
### Поширена пастка: `allowFrom` призначений для DM, а не для каналів
### Поширена пастка: `allowFrom` призначено для DM, а не каналів
Якщо ви бачите такі логи:
Якщо ви бачите журнали на кшталт:
- `irc: drop group sender alice!ident@host (policy=allowlist)`
…це означає, що відправник не був дозволений для повідомлень **групи/каналу**. Виправити це можна так:
…це означає, що відправника не було дозволено для **групових/канальних** повідомлень. Виправте це одним зі способів:
- задати `channels.irc.groupAllowFrom` (глобально для всіх каналів), або
- задати allowlist-и відправників для конкретного каналу: `channels.irc.groups["#channel"].allowFrom`
- задайте `channels.irc.groupAllowFrom` (глобально для всіх каналів), або
- задайте списки дозволених відправників для окремих каналів: `channels.irc.groups["#channel"].allowFrom`
Приклад (дозволити будь-кому в `#tuirc-dev` звертатися до бота):
Приклад (дозволити будь-кому в `#tuirc-dev` спілкуватися з ботом):
```json5
{
@ -96,11 +97,11 @@ openclaw gateway run
## Запуск відповіді (згадки)
Навіть якщо канал дозволено (через `groupPolicy` + `groups`) і відправник дозволений, у групових контекстах OpenClaw типово використовує **шлюзування за згадками**.
Навіть якщо канал дозволено (через `groupPolicy` + `groups`) і відправника дозволено, OpenClaw за замовчуванням застосовує **вимогу згадки** в групових контекстах.
Це означає, що ви можете бачити логи на кшталт `drop channel … (missing-mention)`, якщо повідомлення не містить шаблон згадки, який збігається з ботом.
Це означає, що ви можете бачити журнали на кшталт `drop channel … (missing-mention)`, якщо повідомлення не містить шаблону згадки, що відповідає боту.
Щоб бот відповідав в IRC-каналі **без потреби в згадці**, вимкніть шлюзування за згадками для цього каналу:
Щоб бот відповідав в IRC-каналі **без потреби в згадці**, вимкніть вимогу згадки для цього каналу:
```json5
{
@ -118,7 +119,7 @@ openclaw gateway run
}
```
Або, щоб дозволити **всі** IRC-канали (без allowlist для окремих каналів) і при цьому відповідати без згадок:
Або, щоб дозволити **всі** IRC-канали (без списку дозволених для окремих каналів) і все одно відповідати без згадок:
```json5
{
@ -157,9 +158,9 @@ openclaw gateway run
}
```
### Різні інструменти для різних відправників (власник отримує більше можливостей)
### Різні інструменти для кожного відправника (власник отримує більше повноважень)
Використовуйте `toolsBySender`, щоб застосувати суворішу політику до `"*"` і м’якшу — до вашого nick:
Використовуйте `toolsBySender`, щоб застосувати суворішу політику до `"*"` і м’якшу до вашого псевдоніма:
```json5
{
@ -185,12 +186,12 @@ openclaw gateway run
Примітки:
- Ключі `toolsBySender` слід задавати з `id:` для значень ідентичності IRC-відправника:
- Ключі `toolsBySender` мають використовувати `id:` для значень ідентичності IRC-відправника:
`id:eigen` або `id:eigen!~eigen@174.127.248.171` для надійнішого зіставлення.
- Застарілі ключі без префікса все ще приймаються й зіставляються лише як `id:`.
- Перемагає перша політика відправника, що збіглася; `"*"` є запасним wildcard-варіантом.
- Перемагає перша відповідна політика відправника; `"*"` є резервним шаблоном-джокером.
Докладніше про доступ до груп і шлюзування за згадками (та про їхню взаємодію) див.: [/channels/groups](/uk/channels/groups).
Докладніше про доступ до груп і вимогу згадки (та як вони взаємодіють) дивіться: [/channels/groups](/uk/channels/groups).
## NickServ
@ -225,11 +226,11 @@ openclaw gateway run
}
```
Після реєстрації nick вимкніть `register`, щоб уникнути повторних спроб REGISTER.
Вимкніть `register` після реєстрації псевдоніма, щоб уникнути повторних спроб REGISTER.
## Змінні середовища
Типовий акаунт підтримує:
Обліковий запис за замовчуванням підтримує:
- `IRC_HOST`
- `IRC_PORT`
@ -238,22 +239,22 @@ openclaw gateway run
- `IRC_USERNAME`
- `IRC_REALNAME`
- `IRC_PASSWORD`
- `IRC_CHANNELS` (через кому)
- `IRC_CHANNELS` (розділені комами)
- `IRC_NICKSERV_PASSWORD`
- `IRC_NICKSERV_REGISTER_EMAIL`
`IRC_HOST` не можна задавати з workspace `.env`; див. [Файли workspace `.env`](/uk/gateway/security).
`IRC_HOST` не можна задавати з робочого `.env`; дивіться [Файли `.env` робочої області](/uk/gateway/security).
## Усунення несправностей
- Якщо бот підключається, але ніколи не відповідає в каналах, перевірте `channels.irc.groups` **і** чи не відкидає повідомлення шлюзування за згадками (`missing-mention`). Якщо ви хочете, щоб він відповідав без пінгів, задайте `requireMention:false` для каналу.
- Якщо вхід не вдається, перевірте доступність nick і пароль сервера.
- Якщо TLS не працює в кастомній мережі, перевірте host/port і налаштування сертифікатів.
- Якщо бот підключається, але ніколи не відповідає в каналах, перевірте `channels.irc.groups` **і** чи вимога згадки не відкидає повідомлення (`missing-mention`). Якщо ви хочете, щоб він відповідав без згадок, задайте `requireMention:false` для каналу.
- Якщо вхід не вдається, перевірте доступність псевдоніма й пароль сервера.
- Якщо TLS не працює в користувацькій мережі, перевірте хост/порт і налаштування сертифіката.
## Пов’язане
- [Огляд каналів](/uk/channels) — усі підтримувані канали
- [Pairing](/uk/channels/pairing) — автентифікація DM і потік pairing
- [Групи](/uk/channels/groups) — поведінка групового чату та шлюзування за згадками
- [Маршрутизація каналів](/uk/channels/channel-routing) — маршрутизація сесій для повідомлень
- [Безпека](/uk/gateway/security) — модель доступу та зміцнення безпеки
- [Pairing](/uk/channels/pairing) — автентифікація DM і процес pairing
- [Групи](/uk/channels/groups) — поведінка групового чату й вимога згадки
- [Маршрутизація каналів](/uk/channels/channel-routing) — маршрутизація сеансів для повідомлень
- [Безпека](/uk/gateway/security) — модель доступу й посилення захисту

View File

@ -1,77 +1,77 @@
---
read_when:
- Створення або запуск візуального QA у реальному часі для помилок OpenClaw
- Додавання перевірки «до» та «після» для запиту на злиття
- Додавання сценаріїв Discord, Slack, WhatsApp або інших живих транспортів
- Створення або запуск візуального контролю якості в реальному часі для помилок OpenClaw
- Додавання перевірки до і після для запиту на злиття
- Додавання сценаріїв Discord, Slack, WhatsApp або інших реальних транспортів
- Налагодження запусків QA, яким потрібні знімки екрана, автоматизація браузера або доступ VNC
summary: Mantis — це система візуальної наскрізної перевірки для відтворення помилок OpenClaw на реальних транспортах, фіксації доказів до й після та прикріплення артефактів до запитів на злиття.
summary: Mantis — це система візуальної наскрізної перевірки для відтворення помилок OpenClaw на реальних транспортах, фіксації доказів до й після та прикріплення артефактів до PR.
title: Богомол
x-i18n:
generated_at: "2026-05-04T00:35:16Z"
generated_at: "2026-05-04T00:59:13Z"
model: gpt-5.5
provider: openai
source_hash: 7d1fe1e6cb57406fab351892b43c7057a0d08e26455d76a50157f958474e363e
source_hash: 42161d802c8601e58af1abef69277b5b3eac37750480326e1f56b2898a6af3fb
source_path: concepts/mantis.md
workflow: 16
---
Mantis — це система наскрізної перевірки OpenClaw для помилок, яким потрібні справжнє
середовище виконання, справжній транспорт і видимий доказ. Вона запускає сценарій на відомому
поганому ref, збирає докази, запускає той самий сценарій на кандидатному ref і
публікує порівняння як артефакти, які мейнтейнер може переглянути з PR або
Mantis — це система наскрізної перевірки OpenClaw для помилок, яким потрібні реальний
runtime, реальний транспорт і видимий доказ. Вона запускає сценарій проти відомого
поганого ref, збирає докази, запускає той самий сценарій проти candidate ref і
публікує порівняння як артефакти, які maintainer може перевірити з PR або
з локальної команди.
Mantis починає з Discord, тому що Discord дає нам цінну першу смугу:
справжню автентифікацію бота, справжні канали guild, реакції, треди, нативні команди та
інтерфейс браузера, де люди можуть візуально підтвердити, що показав транспорт.
Mantis починає з Discord, тому що Discord дає нам першу lane з високою цінністю:
реальна автентифікація бота, реальні канали guild, реакції, threads, нативні команди та
браузерний UI, де люди можуть візуально підтвердити те, що показав транспорт.
## Цілі
- Відтворити помилку з GitHub issue або PR з тією самою формою транспорту, яку бачать
користувачі.
- Зібрати артефакт **до** на baseline ref перед застосуванням виправлення.
- Зібрати артефакт **після** на кандидатному ref після застосування виправлення.
- Використовувати детермінований оракул, коли це можливо, наприклад читання реакції через Discord REST
або перевірку транскрипту каналу.
- Знімати скриншоти, коли помилка має видиму поверхню UI.
- Запускатися локально з CLI, керованого агентом, і віддалено з GitHub.
- Зберігати достатньо стану машини для VNC-порятунку, коли вхід, автоматизація браузера або
автентифікація провайдера застрягають.
- Захопити артефакт **before** на baseline ref до застосування виправлення.
- Захопити артефакт **after** на candidate ref після застосування виправлення.
- Використовувати детермінований oracle, коли це можливо, наприклад читання реакції
через Discord REST або перевірку transcript каналу.
- Захоплювати скриншоти, коли помилка має видиму UI-поверхню.
- Запускати локально з CLI, керованого агентом, і віддалено з GitHub.
- Зберігати достатньо стану машини для VNC-рятування, коли login, браузерна автоматизація або
автентифікація provider зависають.
- Публікувати стислий статус в операторський канал Discord, коли запуск заблокований,
потребує ручної допомоги через VNC або завершується.
потребує ручної VNC-допомоги або завершується.
## Нецілі
- Mantis не є заміною юніт-тестів. Запуск Mantis зазвичай має стати
меншим регресійним тестом після того, як виправлення стане зрозумілим.
- Mantis не є звичайним швидким CI-гейтом. Він повільніший, використовує живі облікові дані та
призначений для помилок, де живе середовище має значення.
- Mantis не має вимагати людини для звичайної роботи. Ручний VNC — це шлях порятунку,
а не основний шлях.
- Mantis не зберігає необроблені секрети в артефактах, логах, скриншотах, Markdown
звітах або коментарях PR.
- Mantis не є заміною unit tests. Запуск Mantis зазвичай має перетворитися
на менший regression test після того, як виправлення зрозуміле.
- Mantis не є звичайним швидким CI gate. Він повільніший, використовує live credentials і
призначений для помилок, де live environment має значення.
- Mantis не має вимагати участі людини для нормальної роботи. Ручний VNC — це шлях
рятування, а не happy path.
- Mantis не зберігає сирі secrets в артефактах, логах, скриншотах, Markdown
звітах або PR-коментарях.
## Власність
## Відповідальність
Mantis належить до QA-стека OpenClaw.
Mantis належить до QA-стеку OpenClaw.
- OpenClaw володіє середовищем виконання сценаріїв, транспортними адаптерами, схемою доказів і
локальним CLI під `pnpm openclaw qa mantis`.
- QA Lab володіє частинами живого транспортного harness, допоміжними засобами захоплення браузера та
записувачами артефактів.
- Crabbox володіє прогрітими Linux-машинами, коли потрібна віддалена VM.
- GitHub Actions володіє віддаленою точкою входу workflow і збереженням артефактів.
- ClawSweeper володіє маршрутизацією коментарів GitHub: розбором команд мейнтейнерів,
запуском workflow і публікацією фінального коментаря PR.
- Агенти OpenClaw керують Mantis через Codex, коли сценарію потрібні агентне налаштування,
налагодження або звітування про застряглий стан.
- OpenClaw відповідає за runtime сценаріїв, transport adapters, схему доказів і
локальний CLI під `pnpm openclaw qa mantis`.
- QA Lab відповідає за компоненти live transport harness, helper-и для browser capture і
artifact writers.
- Crabbox відповідає за прогріті Linux-машини, коли потрібна віддалена VM.
- GitHub Actions відповідає за entrypoint віддаленого workflow і зберігання артефактів.
- ClawSweeper відповідає за маршрутизацію GitHub-коментарів: parsing maintainer commands,
dispatching the workflow і публікацію фінального PR-коментаря.
- Агенти OpenClaw керують Mantis через Codex, коли сценарію потрібні agentic setup,
debugging або stuck-state reporting.
Ця межа утримує знання про транспорт в OpenClaw, планування машин у
Crabbox, а клей мейнтейнерського workflow — у ClawSweeper.
Ця межа зберігає знання про транспорт в OpenClaw, планування машин у
Crabbox, а maintainer workflow glue у ClawSweeper.
## Форма команди
## Форма команд
Перша локальна команда перевіряє бота Discord, guild, канал, надсилання повідомлення,
Перша локальна команда перевіряє Discord-бота, guild, канал, надсилання повідомлення,
надсилання реакції та шлях артефактів:
```bash
@ -79,7 +79,7 @@ pnpm openclaw qa mantis discord-smoke \
--output-dir .artifacts/qa-e2e/mantis/discord-smoke
```
Локальний runner до і після приймає таку форму:
Локальний runner before і after приймає таку форму:
```bash
pnpm openclaw qa mantis run \
@ -90,55 +90,58 @@ pnpm openclaw qa mantis run \
--output-dir .artifacts/qa-e2e/mantis/local-discord-status-reactions
```
Runner створює від’єднані worktree baseline і candidate під вихідним
каталогом, встановлює залежності, збирає кожен ref, запускає сценарій з
Runner створює від'єднані baseline і candidate worktrees під output
directory, встановлює залежності, збирає кожен ref, запускає сценарій з
`--allow-failures`, потім записує `baseline/`, `candidate/`, `comparison.json`
і `mantis-report.md`. Для першого сценарію Discord успішна перевірка
означає, що статус baseline — `fail`, а статус candidate — `pass`.
означає, що baseline status`fail`, а candidate status`pass`.
Перший примітив VM/браузера — desktop smoke:
Перший примітив VM/browser — це desktop smoke:
```bash
pnpm openclaw qa mantis desktop-browser-smoke \
--output-dir .artifacts/qa-e2e/mantis/desktop-browser
```
Він орендує або повторно використовує desktop-машину Crabbox, запускає видимий браузер усередині
VNC-сесії, захоплює desktop, витягує артефакти назад у локальний вихідний
каталог і записує команду повторного підключення у звіт. Команда за замовчуванням
використовує провайдера Hetzner, тому що це перший провайдер із робочим покриттям desktop/VNC
у смузі Mantis. Перевизначте його через `--provider`, `--crabbox-bin` або
`OPENCLAW_MANTIS_CRABBOX_PROVIDER`, коли запускаєте проти іншого флоту Crabbox.
Він орендує або повторно використовує desktop-машину Crabbox, запускає видимий браузер всередині
VNC-сесії, захоплює desktop, витягує артефакти назад у локальний output
directory і записує команду перепідключення у звіт. Команда за замовчуванням
використовує Hetzner provider, тому що це перший provider з робочим desktop/VNC
coverage у Mantis lane. Перевизначте це через `--provider`, `--crabbox-bin` або
`OPENCLAW_MANTIS_CRABBOX_PROVIDER`, коли запускаєте проти іншого Crabbox fleet.
Корисні прапорці desktop smoke:
- `--lease-id <cbx_...>` або `OPENCLAW_MANTIS_CRABBOX_LEASE_ID` повторно використовує прогрітий desktop.
- `--browser-url <url>` змінює сторінку, відкриту у видимому браузері.
- `--keep-lease` або `OPENCLAW_MANTIS_KEEP_VM=1` залишає новостворену успішну оренду відкритою для VNC-інспекції. Невдалі запуски за замовчуванням залишають оренду, якщо її було створено, щоб оператор міг перепідключитися.
- `--class`, `--idle-timeout` і `--ttl` налаштовують розмір машини та час життя оренди.
- `--html-file <path>` рендерить локальний для repo HTML-артефакт у видимому браузері. Mantis використовує це, щоб захопити згенерований Discord status-reaction timeline через реальний Crabbox desktop.
- `--keep-lease` або `OPENCLAW_MANTIS_KEEP_VM=1` зберігає новостворений успішний lease відкритим для VNC-перевірки. Невдалі запуски за замовчуванням зберігають lease, якщо його було створено, щоб оператор міг перепідключитися.
- `--class`, `--idle-timeout` і `--ttl` налаштовують розмір машини та lifetime lease.
GitHub smoke workflow — це `Mantis Discord Smoke`. GitHub workflow до і після
для першого реального сценарію — `Mantis Discord Status Reactions`. Він
GitHub smoke workflow — це `Mantis Discord Smoke`. GitHub workflow before і after
для першого реального сценарію — це `Mantis Discord Status Reactions`. Він
приймає:
- `baseline_ref`: ref, який, як очікується, відтворює поведінку лише queued.
- `candidate_ref`: ref, який, як очікується, показує `queued -> thinking -> done`.
- `baseline_ref`: ref, який має відтворювати queued-only behavior.
- `candidate_ref`: ref, який має показати `queued -> thinking -> done`.
Він checkout-ить ref workflow harness, збирає окремі worktree baseline і candidate,
запускає `discord-status-reactions-tool-only` проти кожного worktree і
Він checkout-ить workflow harness ref, збирає окремі baseline і candidate
worktrees, запускає `discord-status-reactions-tool-only` проти кожного worktree і
завантажує `baseline/`, `candidate/`, `comparison.json` і `mantis-report.md` як
артефакти Actions.
Actions artifacts. Він також рендерить timeline HTML кожної lane у desktop-браузері
Crabbox і публікує ці VNC-скриншоти поруч із детермінованими
timeline PNG у PR-коментарі.
Ви також можете запустити status-reactions run напряму з коментаря PR:
Також можна запустити status-reactions run напряму з PR-коментаря:
```text
@Mantis discord status reactions
```
Тригер коментаря навмисно вузький. Він запускається лише на коментарях pull request
від користувачів із доступом write, maintain або admin, і розпізнає лише
запити status-reaction Discord. За замовчуванням він використовує відомий поганий baseline ref
і поточний SHA head PR як candidate. Мейнтейнери можуть перевизначити будь-який
Comment trigger навмисно вузький. Він запускається лише на pull request
comments від користувачів із write, maintain або admin access і розпізнає лише
Discord status-reaction requests. За замовчуванням він використовує відомий поганий baseline ref
і поточний PR head SHA як candidate. Maintainers можуть перевизначити будь-який
ref:
```text
@ -152,48 +155,48 @@ ref:
@clawsweeper verify e2e discord
```
Перша команда явна й зосереджена на сценарії. Друга згодом може зіставляти PR
або issue з рекомендованими сценаріями Mantis на основі міток, змінених файлів і
знахідок рев’ю ClawSweeper.
Перша команда явна та зосереджена на сценарії. Друга згодом може зіставляти PR
або issue з рекомендованими сценаріями Mantis на основі labels, changed files і
ClawSweeper review findings.
## Життєвий цикл запуску
1. Отримати облікові дані.
1. Отримати credentials.
2. Виділити або повторно використати VM.
3. Підготувати desktop/профіль браузера, коли сценарію потрібні докази UI.
4. Підготувати чистий checkout для baseline ref.
3. Підготувати desktop/browser profile, коли сценарію потрібні UI-докази.
4. Підготувати clean checkout для baseline ref.
5. Встановити залежності та зібрати лише те, що потрібно сценарію.
6. Запустити дочірній OpenClaw Gateway з ізольованим каталогом стану.
7. Налаштувати живий транспорт, провайдера, модель і профіль браузера.
8. Запустити сценарій і зібрати докази baseline.
9. Зупинити gateway і зберегти логи.
6. Запустити дочірній OpenClaw Gateway з ізольованим state directory.
7. Налаштувати live transport, provider, model і browser profile.
8. Запустити сценарій і захопити baseline evidence.
9. Зупинити gateway і зберегти logs.
10. Підготувати candidate ref у тій самій VM.
11. Запустити той самий сценарій і зібрати докази candidate.
12. Порівняти результати оракула та візуальні докази.
13. Записати Markdown, JSON, логи, скриншоти та необов’язкові trace-артефакти.
14. Завантажити артефакти GitHub Actions.
15. Опублікувати стислий статусний допис у PR або Discord.
11. Запустити той самий сценарій і захопити candidate evidence.
12. Порівняти oracle results і visual evidence.
13. Записати Markdown, JSON, logs, screenshots і optional trace artifacts.
14. Завантажити GitHub Actions artifacts.
15. Опублікувати стислий PR або Discord status message.
Сценарій має бути здатний завершуватися невдачею двома різними способами:
Сценарій має мати змогу завершитися невдало двома різними способами:
- **Помилку відтворено**: baseline завершився невдачею очікуваним способом.
- **Збій harness**: налаштування середовища, облікові дані, Discord API, браузер або
провайдер зазнали збою до того, як оракул помилки став meaningful.
- **Помилку відтворено**: baseline завершився невдало очікуваним способом.
- **Збій harness**: environment setup, credentials, Discord API, browser або
provider завершилися невдало до того, як bug oracle став meaningful.
Фінальний звіт має розділяти ці випадки, щоб мейнтейнери не плутали нестабільне
середовище з поведінкою продукту.
Фінальний звіт має розділяти ці випадки, щоб maintainers не плутали flaky
environment із product behavior.
## Discord MVP
Перший сценарій має націлюватися на status reactions Discord у guild-каналах, де
режим доставки вихідної відповіді`message_tool_only`.
Перший сценарій має націлюватися на Discord status reactions у guild channels, де
source reply delivery mode`message_tool_only`.
Чому це хороший початковий сценарій Mantis:
Чому це хороший seed для Mantis:
- Він видимий у Discord як реакції на повідомлення, що запускає сценарій.
- Він має сильний REST-оракул через стан реакцій повідомлення Discord.
- Він перевіряє справжній OpenClaw Gateway, автентифікацію бота Discord, диспетчеризацію повідомлень,
режим доставки вихідної відповіді, стан status reaction і життєвий цикл модельного turn.
- Це видно в Discord як reactions на triggering message.
- Він має сильний REST oracle через Discord message reaction state.
- Він перевіряє реальний OpenClaw Gateway, автентифікацію Discord-бота, message dispatch,
source reply delivery mode, status reaction state і model turn lifecycle.
- Він достатньо вузький, щоб перша реалізація залишалася чесною.
Очікувана форма сценарію:
@ -227,12 +230,12 @@ evidence:
screenshotMessageRow: true
```
Докази baseline мають показувати queued acknowledgement reaction, але без
lifecycle transition у режимі tool-only. Докази candidate мають показувати, що lifecycle
Baseline evidence має показувати queued acknowledgement reaction, але без
lifecycle transition у tool-only mode. Candidate evidence має показувати, що lifecycle
status reactions працюють, коли `messages.statusReactions.enabled` явно
дорівнює true.
true.
Виконуваний перший зріз — це opt-in живий QA-сценарій Discord:
Перший executable slice — це opt-in Discord live QA scenario:
```bash
pnpm openclaw qa discord \
@ -244,34 +247,34 @@ pnpm openclaw qa discord \
--output-dir .artifacts/qa-e2e/mantis/discord-status-reactions-candidate
```
Він налаштовує SUT із завжди ввімкненою обробкою guild, `visibleReplies:
"message_tool"`, `ackReaction: "👀"` і явними status reactions. Оракул
опитує справжнє повідомлення Discord, що запустило сценарій, і очікує спостережувану послідовність
`👀 -> 🤔 -> 👍`. Артефакти містять `discord-qa-reaction-timelines.json`,
Він налаштовує SUT з always-on guild handling, `visibleReplies:
"message_tool"`, `ackReaction: "👀"` і explicit status reactions. Oracle
опитує реальне Discord triggering message і очікує observed sequence
`👀 -> 🤔 -> 👍`. Артефакти включають `discord-qa-reaction-timelines.json`,
`discord-status-reactions-tool-only-timeline.html` і
`discord-status-reactions-tool-only-timeline.png`.
## Наявні компоненти QA
Mantis має будуватися на наявному приватному QA-стеку, а не починати з
Mantis має спиратися на наявний private QA stack замість того, щоб починати з
нуля:
- `pnpm openclaw qa discord` уже запускає живу смугу Discord з ботами driver і
SUT.
- Живий transport runner уже записує звіти та артефакти observed-message
під `.artifacts/qa-e2e/`.
- Оренди облікових даних Convex уже надають ексклюзивний доступ до спільних живих
транспортних облікових даних.
- Сервіс керування браузером уже підтримує скриншоти, snapshots,
headless керовані профілі та віддалені CDP-профілі.
- QA Lab уже має UI налагоджувача й шину для тестування у формі транспорту.
- `pnpm openclaw qa discord` уже запускає live Discord lane з driver і
SUT bots.
- Live transport runner уже записує reports і observed-message
artifacts під `.artifacts/qa-e2e/`.
- Convex credential leases уже надають exclusive access до shared live
transport credentials.
- Browser control service уже підтримує screenshots, snapshots,
headless managed profiles і remote CDP profiles.
- QA Lab уже має debugger UI і bus для transport-shaped testing.
Перша реалізація Mantis може бути тонким runner до/після над цими
компонентами плюс один шар візуальних доказів.
Перша реалізація Mantis може бути тонким before/after runner поверх цих
компонентів плюс один шар visual evidence.
## Модель доказів
Кожен запуск записує стабільний каталог артефактів:
Кожен запуск записує стабільний artifact directory:
```text
.artifacts/qa-e2e/mantis/<run-id>/
@ -291,76 +294,76 @@ Mantis має будуватися на наявному приватному QA
run.log
```
`mantis-summary.json` має бути машинозчитуваним джерелом істини. Markdown
звіт призначений для коментарів PR і людського рев’ю.
`mantis-summary.json` має бути machine-readable source of truth. Markdown
report призначений для PR comments і human review.
Підсумок має містити:
Summary має включати:
- протестовані refs і SHA
- refs і SHAs, які тестувалися
- transport і scenario id
- провайдера машини та machine id або lease id
- джерело облікових даних без значень секретів
- результат baseline
- результат candidate
- чи помилку відтворено на baseline
- чи candidate виправив її
- шляхи артефактів
- санітизовані проблеми налаштування або очищення
- machine provider і machine id або lease id
- credential source без secret values
- baseline result
- candidate result
- чи помилка відтворилася на baseline
- чи candidate її виправив
- artifact paths
- sanitized setup або cleanup issues
Скриншоти — це докази, а не секрети. Вони все одно потребують дисципліни редагування:
можуть з’являтися назви приватних каналів, імена користувачів або вміст повідомлень. Для публічних PR
надавайте перевагу посиланням на артефакти GitHub Actions замість inline-зображень, доки історія
редагування не стане сильнішою.
Screenshots — це докази, а не secrets. Вони все одно потребують redaction discipline:
private channel names, user names або message content можуть з'явитися. Для public PRs
віддавайте перевагу GitHub Actions artifact links над inline images, доки redaction story
не стане сильнішою.
## Браузер і VNC
Смуга браузера має два режими:
Browser lane має два режими:
- **Headless automation**: стандартно для CI. Chrome запускається з увімкненим CDP, а
Playwright або керування браузером OpenClaw захоплює скриншоти.
- **VNC rescue**: увімкнено на тій самій VM, коли вхід, MFA, антиавтоматизація Discord
або візуальне налагодження потребують людини.
- **Headless automation**: за замовчуванням для CI. Chrome запускається з увімкненим CDP, а
Playwright або OpenClaw browser control захоплює screenshots.
- **VNC rescue**: увімкнено на тій самій VM, коли login, MFA, Discord anti-automation
або visual debugging потребують людини.
Профіль браузера спостерігача Discord має бути достатньо persistent, щоб не доводилося
входити під час кожного запуску, але ізольованим від особистого стану браузера. Профіль
Профіль браузера спостерігача Discord має бути достатньо постійним, щоб уникати
входу під час кожного запуску, але ізольованим від особистого стану браузера. Профіль
належить пулу машин Mantis, а не ноутбуку розробника.
Коли Mantis застрягає, він публікує статусне повідомлення Discord з:
Коли Mantis застрягає, він публікує статусне повідомлення Discord із:
- run id
- scenario id
- провайдером машини
- id запуску
- id сценарію
- постачальником машини
- каталогом артефактів
- інструкціями підключення VNC або noVNC, якщо доступні
- інструкціями з підключення через VNC або noVNC, якщо доступно
- коротким текстом блокера
Перше приватне розгортання може публікувати ці повідомлення в наявний канал
операторів і пізніше перейти до окремого каналу Mantis.
операторів, а пізніше перейти до окремого каналу Mantis.
## Машини
Mantis має надавати перевагу AWS через Crabbox для першої віддаленої реалізації.
Crabbox дає нам розігріті машини, відстеження оренди, гідратацію, журнали, результати та
очищення. Якщо потужності AWS надто повільні або недоступні, додайте провайдера Hetzner
Crabbox надає нам попередньо прогріті машини, відстеження оренди, гідратацію, журнали, результати та
очищення. Якщо місткість AWS надто повільна або недоступна, додайте постачальника Hetzner
за тим самим інтерфейсом машин.
Мінімальні вимоги до VM:
- Linux із встановленим Chrome або Chromium, здатним працювати з робочим столом
- Linux з інсталяцією Chrome або Chromium, здатною працювати з робочим столом
- доступ CDP для автоматизації браузера
- VNC або noVNC для відновлення
- VNC або noVNC для аварійного доступу
- Node 22 і pnpm
- клон OpenClaw і кеш залежностей
- checkout OpenClaw і кеш залежностей
- кеш браузера Playwright Chromium, коли використовується Playwright
- достатньо CPU та пам’яті для одного OpenClaw Gateway, одного браузера й одного запуску моделі
- вихідний доступ до Discord, GitHub, провайдерів моделей і брокера облікових даних
- вихідний доступ до Discord, GitHub, постачальників моделей і брокера облікових даних
VM не має зберігати довготривалі сирі секрети поза очікуваними сховищами облікових даних або
VM не має зберігати довготривалі необроблені секрети поза очікуваними сховищами облікових даних або
профілів браузера.
## Секрети
Секрети зберігаються в секретах організації або репозиторію GitHub для віддалених запусків і в
Секрети зберігаються в секретах організації або репозиторію GitHub для віддалених запусків, а також у
локальному файлі секретів під контролем оператора для локальних запусків.
Рекомендовані назви секретів:
@ -371,43 +374,43 @@ VM не має зберігати довготривалі сирі секрет
- `OPENCLAW_QA_DISCORD_GUILD_ID`
- `OPENCLAW_QA_DISCORD_CHANNEL_ID`
- `OPENCLAW_QA_DISCORD_NOTIFY_CHANNEL_ID`
- `OPENCLAW_QA_REDACT_PUBLIC_METADATA=1` для завантаження публічних артефактів GitHub
- `OPENCLAW_QA_REDACT_PUBLIC_METADATA=1` для публічних завантажень артефактів GitHub
- `OPENCLAW_QA_CONVEX_SITE_URL`
- `OPENCLAW_QA_CONVEX_SECRET_CI`
У довгостроковій перспективі пул облікових даних Convex має залишатися звичайним джерелом живих
У довгостроковій перспективі пул облікових даних Convex має залишатися звичайним джерелом для живих
облікових даних транспорту. Секрети GitHub початково завантажують брокер і резервні лінії.
Запускач Mantis ніколи не повинен друкувати:
Runner Mantis ніколи не має друкувати:
- токени ботів Discord
- API-ключі провайдерів
- API-ключі постачальників
- cookies браузера
- вміст профілів автентифікації
- вміст профілю автентифікації
- паролі VNC
- сирі корисні навантаження облікових даних
- необроблені payloads облікових даних
Публічні завантаження артефактів також мають редагувати цільові метадані Discord, як-от ідентифікатори ботів,
серверів, каналів і повідомлень. Робочий процес smoke GitHub вмикає
Публічні завантаження артефактів також мають редагувати цільові метадані Discord, як-от id бота,
guild, каналу й повідомлення. Smoke workflow GitHub вмикає
`OPENCLAW_QA_REDACT_PUBLIC_METADATA=1` саме з цієї причини.
Якщо токен випадково вставлено в issue, PR, чат або журнал, оберніть його
Якщо токен випадково вставлено в issue, PR, чат або журнал, поверніть його
після збереження нового секрету.
## Артефакти GitHub і коментарі PR
Робочі процеси Mantis мають завантажувати повний пакет доказів як короткоживучий артефакт Actions.
Коли робочий процес запускається для звіту про помилку або PR із виправленням, він також має
опублікувати відредаговані PNG-знімки екрана в гілку `qa-artifacts` і оновити або створити
коментар до цієї помилки чи PR із виправленням із вбудованими знімками до/після. Не публікуйте
основний доказ лише в загальному PR автоматизації QA. Сирі журнали, спостережені
Workflow Mantis мають завантажувати повний пакет доказів як короткоживучий артефакт Actions.
Коли workflow запускається для звіту про bug або PR з виправленням, він також має
публікувати відредаговані PNG-знімки екрана в гілку `qa-artifacts` і upsert-коментар
до цього bug або PR з виправленням із вбудованими знімками до/після. Не публікуйте
основний доказ лише в загальному PR автоматизації QA. Необроблені журнали, спостережені
повідомлення та інші об’ємні докази залишаються в артефакті Actions.
Виробничі робочі процеси мають публікувати ці коментарі через GitHub App Mantis, а не
Production workflows мають публікувати ці коментарі через Mantis GitHub App, а не
через `github-actions[bot]`. Зберігайте app id і приватний ключ як секрети GitHub Actions
`MANTIS_GITHUB_APP_ID` і `MANTIS_GITHUB_APP_PRIVATE_KEY`. Робочий процес використовує прихований маркер
як ключ upsert, оновлює цей коментар, коли токен може його редагувати, і створює новий
коментар від імені Mantis, коли старіший маркер від бота не можна відредагувати.
`MANTIS_GITHUB_APP_ID` і `MANTIS_GITHUB_APP_PRIVATE_KEY`. Workflow використовує прихований маркер як ключ upsert,
оновлює цей коментар, коли токен може його редагувати, і створює новий коментар від імені Mantis,
коли старіший маркер, що належить боту, не можна редагувати.
Коментар PR має бути коротким і візуальним:
@ -429,70 +432,72 @@ candidate showed the expected queued -> thinking -> done sequence.
| <inline screenshot> | <inline screenshot> |
```
Коли запуск завершується невдало через збій harness, коментар має повідомляти саме це,
а не натякати, що кандидат не пройшов.
Коли запуск завершується невдало через збій harness, у коментарі має бути сказано саме це,
а не створюватися враження, що candidate не пройшов.
## Примітки щодо приватного розгортання
## Нотатки щодо приватного розгортання
Приватне розгортання вже може мати застосунок Discord Mantis. Використовуйте цей
застосунок повторно замість створення іншого app, якщо він має потрібні дозволи бота
і його можна безпечно обернути.
Приватне розгортання вже може мати застосунок Discord Mantis. Повторно використовуйте цей
застосунок замість створення іншого app, якщо він має правильні дозволи бота
і його можна безпечно ротувати.
Задайте початковий канал сповіщень оператора через секрети або конфігурацію розгортання.
Спочатку він може вказувати на наявний канал мейнтейнерів або операцій, а потім перейти
до окремого каналу Mantis, щойно такий з’явиться.
Задайте початковий канал сповіщень операторів через секрети або конфігурацію розгортання.
Спершу він може вказувати на наявний канал maintainer або operations,
а потім перейти до окремого каналу Mantis, коли він з’явиться.
Не додавайте в цей документ ідентифікатори серверів, ідентифікатори каналів, токени ботів, cookies браузера або паролі VNC.
Зберігайте їх у секретах GitHub, брокері облікових даних або локальному сховищі секретів оператора.
Не додавайте guild ids, channel ids, токени ботів, cookies браузера або паролі VNC
до цього документа. Зберігайте їх у секретах GitHub, брокері облікових даних або
локальному сховищі секретів оператора.
## Додавання сценарію
Сценарій Mantis має оголошувати:
- id і title
- id і назву
- транспорт
- необхідні облікові дані
- політику базового ref
- політику кандидатного ref
- патч конфігурації OpenClaw
- політику baseline ref
- політику candidate ref
- patch конфігурації OpenClaw
- кроки налаштування
- стимул
- очікуваний oracle базової версії
- очікуваний oracle кандидата
- очікуваний oracle baseline
- очікуваний oracle candidate
- цілі візуального захоплення
- бюджет тайм-ауту
- бюджет часу очікування
- кроки очищення
Сценарії мають надавати перевагу невеликим типізованим oracle:
Сценарії мають надавати перевагу невеликим типізованим oracles:
- стан реакцій Discord для помилок реакцій
- посилання на повідомлення Discord для помилок потоків
- thread ts Slack і стан API реакцій для помилок Slack
- ідентифікатори повідомлень і заголовки email для помилок email
- стан реакцій Discord для bugs реакцій
- посилання на повідомлення Discord для bugs тредингу
- thread ts Slack і стан API реакцій для bugs Slack
- ids повідомлень електронної пошти та заголовки для bugs електронної пошти
- знімки екрана браузера, коли UI є єдиним надійним спостережуваним сигналом
Перевірки зором мають бути додатковими. Якщо API платформи може довести помилку, використовуйте
API як oracle проходження/збою, а знімки екрана залишайте для впевненості людини.
Перевірки зору мають бути додатковими. Якщо API платформи може довести bug, використовуйте
API як oracle pass/fail і залишайте знімки екрана для впевненості людини.
## Розширення провайдерів
## Розширення постачальників
Після Discord той самий запускач може додати:
Після Discord той самий runner може додати:
- Slack: реакції, потоки, згадки app, модальні вікна, завантаження файлів.
- Email: автентифікація Gmail і потоки повідомлень із використанням `gog`, коли connectors недостатньо.
- Slack: реакції, треди, згадки app, модальні вікна, завантаження файлів.
- Email: автентифікація Gmail і трединг повідомлень із використанням `gog`, коли connectors недостатньо.
- WhatsApp: QR-вхід, повторна ідентифікація, доставка повідомлень, медіа, реакції.
- Telegram: gate для згадок у групах, команди, реакції там, де доступні.
- Matrix: зашифровані кімнати, зв’язки потоків або відповідей, відновлення після перезапуску.
- Telegram: gating групових згадок, команди, реакції, де доступно.
- Matrix: зашифровані кімнати, зв’язки тредів або відповідей, resume після рестарту.
Кожен транспорт має мати один дешевий smoke-сценарій і один або кілька сценаріїв класів помилок.
Кожен транспорт має мати один дешевий smoke-сценарій і один або більше сценаріїв класу bug.
Дорогі візуальні сценарії мають залишатися opt-in.
## Відкриті питання
- Який бот Discord має бути driver, а який SUT, коли наявний бот Mantis використовується повторно?
- Чи має вхід браузера observer використовувати людський обліковий запис Discord, тестовий обліковий запис
або лише доступні боту REST-докази для першої фази?
- Як довго GitHub має зберігати артефакти Mantis для PR?
- Коли ClawSweeper має автоматично рекомендувати Mantis замість очікування команди
мейнтейнера?
- Чи потрібно редагувати або обрізати знімки екрана перед завантаженням для публічних PR?
- Який бот Discord має бути driver, а який SUT, коли
наявний бот Mantis використовується повторно?
- Чи має вхід браузера спостерігача використовувати людський обліковий запис Discord, тестовий обліковий запис
або лише bot-readable REST-докази для першої фази?
- Як довго GitHub має зберігати артефакти Mantis для PRs?
- Коли ClawSweeper має автоматично рекомендувати Mantis замість очікування
команди maintainer?
- Чи слід редагувати або обрізати знімки екрана перед завантаженням для публічних PRs?

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
---
read_when:
- Вам потрібен багаторівневий захист від атак SSRF і повторного прив’язування DNS
- Вам потрібен багаторівневий захист від атак SSRF і переприв’язування DNS.
- Налаштування зовнішнього прямого проксі для трафіку середовища виконання OpenClaw
summary: Як маршрутизувати HTTP- і WebSocket-трафік середовища виконання OpenClaw через керований оператором фільтрувальний проксі
summary: Як маршрутизувати HTTP- та WebSocket-трафік середовища виконання OpenClaw через фільтрувальний проксі, керований оператором
title: Мережевий проксі
x-i18n:
generated_at: "2026-05-01T05:23:47Z"
generated_at: "2026-05-04T00:58:55Z"
model: gpt-5.5
provider: openai
source_hash: 9207d349e4410e38631ae7665be19b536e4a4128a4e80dd095e802804dfd66a3
source_hash: cd5594324e8c6b7da51d903e98fda0feacb8970e0b15d980f7a249d6641461c9
source_path: security/network-proxy.md
workflow: 16
---
@ -17,53 +17,53 @@ x-i18n:
OpenClaw може спрямовувати runtime HTTP- і WebSocket-трафік через керований оператором прямий проксі. Це необов’язковий додатковий рівень захисту для розгортань, яким потрібні централізований контроль вихідного трафіку, сильніший захист від SSRF і краща можливість аудиту мережі.
OpenClaw не постачає, не завантажує, не запускає, не налаштовує й не сертифікує проксі. Ви запускаєте проксі-технологію, яка відповідає вашому середовищу, а OpenClaw спрямовує через неї звичайні process-local 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 і подібні клієнти одним шляхом.
- Можливість аудиту: журналюйте дозволені та заборонені призначення на межі вихідного трафіку.
- Операційний контроль: застосовуйте правила призначення, сегментацію мережі, ліміти швидкості або allowlist вихідних призначень без перебудови OpenClaw.
Маршрутизація через проксі — це запобіжник рівня процесу для звичайного вихідного HTTP- і WebSocket-трафіку. Вона дає операторам fail-closed шлях для спрямування підтримуваних JavaScript HTTP-клієнтів через власний фільтрувальний проксі, але не є мережевою пісочницею рівня ОС і не змушує OpenClaw сертифікувати політику призначень проксі.
Маршрутизація через проксі є захисною межею на рівні процесу для звичайного вихідного HTTP- і WebSocket-трафіку. Вона дає операторам fail-closed шлях для маршрутизації підтримуваних JavaScript HTTP-клієнтів через їхній власний фільтрувальний проксі, але не є мережевою пісочницею на рівні ОС і не змушує OpenClaw сертифікувати політику призначень проксі.
## Як OpenClaw спрямовує трафік
## Як OpenClaw маршрутизує трафік
Коли `proxy.enabled=true` і налаштовано URL проксі, захищені runtime-процеси, як-от `openclaw gateway run`, `openclaw node run` і `openclaw agent --local`, спрямовують звичайний вихідний HTTP- і WebSocket-трафік через налаштований проксі:
```text
Процес OpenClaw
fetch -> керований оператором фільтрувальний проксі -> публічний інтернет
node:http and https -> керований оператором фільтрувальний проксі -> публічний інтернет
WebSocket clients -> керований оператором фільтрувальний проксі -> публічний інтернет
OpenClaw process
fetch -> operator-managed filtering proxy -> public internet
node:http and https -> operator-managed filtering proxy -> public internet
WebSocket clients -> operator-managed filtering proxy -> public internet
```
Публічний контракт — це поведінка маршрутизації, а не внутрішні Node-хуки, використані для її реалізації. WebSocket-клієнти control-plane OpenClaw Gateway використовують вузький прямий шлях для local loopback Gateway RPC-трафіку, коли URL Gateway використовує `localhost` або буквальну loopback IP-адресу, як-от `127.0.0.1` чи `[::1]`. Цей control-plane шлях має мати змогу досягати 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 використовує два хуки маршрутизації на рівні процесу для цієї функції:
- Маршрутизація диспетчера Undici покриває `fetch`, клієнти на основі undici та транспорти, які надають власний диспетчер undici.
- Маршрутизація `global-agent` покриває виклики Node core `node:http` і `node:https`, включно з багатьма бібліотеками, побудованими поверх `http.request`, `https.request`, `http.get` і `https.get`. Керований режим проксі примусово застосовує цей глобальний агент, щоб явні Node HTTP-агенти випадково не обходили операторський проксі.
- Маршрутизація dispatcher Undici покриває `fetch`, клієнти на базі undici та транспорти, що надають власний dispatcher undici.
- Маршрутизація `global-agent` покриває виклики ядра Node `node:http` і `node:https`, зокрема багато бібліотек, побудованих поверх `http.request`, `https.request`, `http.get` і `https.get`. Керований режим проксі примусово використовує цей глобальний агент, щоб явні Node HTTP-агенти випадково не обходили операторський проксі.
Деякі plugins мають власні транспорти, яким потрібне явне проксі-підключення навіть за наявності маршрутизації рівня процесу. Наприклад, транспорт Bot API для Telegram використовує власний HTTP/1-диспетчер undici, тому враховує env проксі процесу, а також керований fallback `OPENCLAW_PROXY_URL` у цьому owner-specific транспортному шляху.
Деякі плагіни володіють власними транспортами, яким потрібне явне підключення проксі навіть за наявності маршрутизації на рівні процесу. Наприклад, транспорт Bot API Telegram використовує власний HTTP/1 undici dispatcher і тому враховує env проксі процесу плюс керований fallback `OPENCLAW_PROXY_URL` у цьому owner-specific транспортному шляху.
Сам URL проксі має використовувати `http://`. HTTPS-призначення все одно підтримуються через проксі за допомогою HTTP `CONNECT`; це лише означає, що OpenClaw очікує простий HTTP forward-proxy listener, як-от `http://127.0.0.1:3128`.
Сам URL проксі має використовувати `http://`. HTTPS-призначення все одно підтримуються через проксі за допомогою HTTP `CONNECT`; це лише означає, що OpenClaw очікує звичайний HTTP forward-proxy listener, наприклад `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 environment і скидає кешований стан маршрутизації процесу.
## Пов’язані терміни проксі
- `proxy.enabled` / `proxy.proxyUrl`: маршрутизація вихідного forward-proxy для runtime вихідного трафіку OpenClaw. Ця сторінка документує цю функцію.
- `gateway.auth.mode: "trusted-proxy"`: inbound identity-aware reverse-proxy authentication для доступу до Gateway. Див. [Автентифікація довіреного проксі](/uk/gateway/trusted-proxy-auth).
- `openclaw proxy`: локальний debug proxy і capture inspector для розробки й підтримки. Див. [openclaw proxy](/uk/cli/proxy).
- Налаштування проксі, специфічні для каналу або провайдера: owner-specific перевизначення для конкретного транспорту. Віддавайте перевагу керованому мережевому проксі, коли метою є централізований контроль вихідного трафіку в усьому runtime.
- `proxy.enabled` / `proxy.proxyUrl`: маршрутизація вихідного forward-proxy для runtime-вихідного трафіку OpenClaw. Ця сторінка документує цю функцію.
- `gateway.auth.mode: "trusted-proxy"`: вхідна автентифікація через identity-aware reverse-proxy для доступу до Gateway. Див. [Автентифікація trusted proxy](/uk/gateway/trusted-proxy-auth).
- `openclaw proxy`: локальний debug proxy та capture inspector для розробки й підтримки. Див. [openclaw proxy](/uk/cli/proxy).
- Налаштування проксі, специфічні для каналу або провайдера: owner-specific перевизначення для конкретного транспорту. Надавайте перевагу керованому мережевому проксі, коли мета централізований контроль вихідного трафіку в усьому 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 проксі, захищені команди завершують запуск з помилкою замість відкату до прямого мережевого доступу.
Для керованих сервісів 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` у durable environment сервісу, наприклад `$OPENCLAW_STATE_DIR/.env` або `~/.openclaw/.env`, а потім перевстановіть сервіс, щоб launchd, systemd або Scheduled Tasks запускали Gateway із цим значенням.
Fallback через середовище найкраще підходить для запусків у передньому плані. Якщо ви використовуєте його з інстальованим сервісом, помістіть `OPENCLAW_PROXY_URL` у довговічне середовище сервісу, наприклад `$OPENCLAW_STATE_DIR/.env` або `~/.openclaw/.env`, а потім перевстановіть сервіс, щоб launchd, systemd або Scheduled Tasks запускали gateway з цим значенням.
Для команд `openclaw --container ...` OpenClaw передає `OPENCLAW_PROXY_URL` у child CLI, націлений на контейнер, коли його задано. URL має бути доступним зсередини контейнера; `127.0.0.1` вказує на сам контейнер, а не на хост. OpenClaw відхиляє loopback URL проксі для команд, націлених на контейнер, якщо ви явно не перевизначите цю перевірку безпеки.
Для команд `openclaw --container ...` OpenClaw передає `OPENCLAW_PROXY_URL` до дочірнього CLI, націленого на контейнер, коли його задано. URL має бути доступним зсередини контейнера; `127.0.0.1` означає сам контейнер, а не хост. OpenClaw відхиляє loopback URL проксі для команд, націлених на контейнер, якщо ви явно не перевизначите цю перевірку безпеки.
## Вимоги до проксі
@ -103,50 +103,50 @@ Fallback через середовище найкраще підходить д
Налаштуйте проксі так, щоб він:
- Прив’язувався лише до loopback або приватного довіреного інтерфейсу.
- Обмежував доступ так, щоб ним могли користуватися лише процес OpenClaw, хост, контейнер або сервісний обліковий запис.
- Самостійно розв’язував призначення й блокував IP-адреси призначення після DNS-розв’язання.
- Застосовував політику під час підключення як для простих HTTP-запитів, так і для HTTPS-тунелів `CONNECT`.
- Відхиляв destination-based обходи для loopback, приватних, link-local, metadata, multicast, reserved або documentation діапазонів.
- Уникав allowlist-ів імен хостів, якщо ви повністю не довіряєте шляху DNS-розв’язання.
- Журналював призначення, рішення, статус і причину без журналювання тіл запитів, заголовків авторизації, cookies або інших секретів.
- Обмежував доступ так, щоб ним могли користуватися лише процес OpenClaw, хост, контейнер або обліковий запис сервісу.
- Самостійно резолвив призначення та блокував IP-адреси призначення після DNS-резолюції.
- Застосовував політику під час підключення як для звичайних HTTP-запитів, так і для HTTPS-тунелів `CONNECT`.
- Відхиляв обходи на основі призначення для loopback, приватних, link-local, metadata, multicast, reserved або documentation діапазонів.
- Уникав allowlist імен хостів, якщо ви повністю не довіряєте шляху DNS-резолюції.
- Журналював призначення, рішення, статус і причину без журналювання тіл запитів, заголовків авторизації, cookie або інших секретів.
- Тримав політику проксі під контролем версій і переглядав зміни як security-sensitive конфігурацію.
## Рекомендовані заблоковані призначення
Використовуйте цей denylist як початкову точку для будь-якого forward proxy, firewall або політики вихідного трафіку.
Логіка класифікатора на рівні застосунку OpenClaw розташована в `src/infra/net/ssrf.ts` і `src/shared/net/ip.ts`. Відповідні parity hooks — це `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`. Відповідні parity hooks — це `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` | Невизначені адреси та адреси цієї мережі |
| `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.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` | Діапазони для benchmarking |
| `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 |
| `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 |
| `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 prefixes із вбудованим IPv4 |
| `2002::/16`, `2001::/32` | 6to4 і Teredo із вбудованим IPv4 |
| `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 hosts чи reserved ranges, додайте їх також.
Якщо ваш хмарний провайдер або мережева платформа документує додаткові metadata hosts чи reserved ranges, додайте також їх.
## Валідація
Перевіряйте проксі з того самого хоста, контейнера або сервісного облікового запису, на якому працює OpenClaw:
Валідуйте проксі з того самого хоста, контейнера або облікового запису сервісу, який запускає OpenClaw:
```bash
openclaw proxy validate --proxy-url http://127.0.0.1:3128
```
За замовчуванням, коли не надано власних призначень, команда перевіряє, що `https://example.com/` успішно відкривається, і запускає тимчасовий loopback canary, до якого проксі не повинен дістатися. Перевірка default denied проходить, коли проксі повертає не-2xx denial response або блокує canary з transport failure; вона провалюється, якщо успішна відповідь доходить до canary. Якщо проксі не ввімкнено й не налаштовано, валідація повідомляє про проблему конфігурації; використовуйте `--proxy-url` для одноразового preflight перед зміною конфігурації. Використовуйте `--allowed-url` і `--denied-url`, щоб перевірити deployment-specific очікування. Власні заборонені призначення є fail-closed: будь-яка HTTP-відповідь означає, що призначення було доступне через проксі, а будь-яка transport error повідомляється як inconclusive, бо OpenClaw не може довести, що проксі заблокував reachable origin. У разі помилки валідації команда завершується з кодом 1.
За замовчуванням, коли власні призначення не надано, команда перевіряє, що `https://example.com/` успішний, і запускає тимчасовий loopback canary, до якого проксі не має дістатися. Типова заборонена перевірка проходить, коли проксі повертає non-2xx denial response або блокує canary через транспортний збій; вона провалюється, якщо успішна відповідь досягає canary. Якщо проксі не ввімкнено й не налаштовано, валідація повідомляє про проблему конфігурації; використовуйте `--proxy-url` для одноразового preflight перед зміною конфігурації. Використовуйте `--allowed-url` і `--denied-url`, щоб перевірити очікування, специфічні для розгортання. Власні заборонені призначення є fail-closed: будь-яка HTTP-відповідь означає, що призначення було доступне через проксі, а будь-яка транспортна помилка повідомляється як непереконлива, оскільки OpenClaw не може довести, що проксі заблокував доступне джерело. У разі помилки валідації команда завершується з кодом 1.
Використовуйте `--json` для автоматизації. JSON-вивід містить загальний результат, ефективне джерело конфігурації проксі, будь-які помилки конфігурації та кожну перевірку призначення. Облікові дані URL проксі редагуються в текстовому та JSON-виводі:
@ -170,7 +170,7 @@ openclaw proxy validate --proxy-url http://127.0.0.1:3128
}
```
Ви також можете перевірити вручну за допомогою `curl`:
Також можна перевірити вручну за допомогою `curl`:
```bash
curl -x http://127.0.0.1:3128 https://example.com/
@ -178,9 +178,9 @@ 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 може відрізнити відмову проксі від доступного джерела. Користувацькі перевірки `--denied-url` не мають цього canary, тому вважайте як HTTP-відповіді, так і неоднозначні транспортні збої помилками валідації, якщо ваш проксі не надає специфічний для розгортання сигнал відмови, який можна перевірити окремо.
Публічний запит має бути успішним. Запити до loopback і метаданих мають блокуватися проксі. Для `openclaw proxy validate` вбудована canary-перевірка loopback може відрізнити відмову проксі від доступного джерела. Користувацькі перевірки `--denied-url` не мають такої canary-перевірки, тому вважайте як HTTP-відповіді, так і неоднозначні транспортні збої помилками перевірки, якщо ваш проксі не надає специфічний для розгортання сигнал відмови, який можна перевірити окремо.
Потім увімкніть маршрутизацію через проксі OpenClaw:
Потім увімкніть маршрутизацію OpenClaw через проксі:
```bash
openclaw config set proxy.enabled true
@ -198,9 +198,10 @@ proxy:
## Обмеження
- Проксі покращує покриття для процес-локальних HTTP- і WebSocket-клієнтів JavaScript, але це не мережевий sandbox рівня ОС.
- Необроблені сокети `net`, `tls` і `http2`, нативні addons і дочірні процеси можуть обходити маршрутизацію через проксі на рівні Node, якщо вони не успадковують і не дотримуються змінних середовища проксі.
- Локальні WebUI користувача та локальні сервери моделей за потреби слід додати до списку дозволених у політиці проксі оператора; OpenClaw не надає для них загального обходу локальної мережі.
- Обхід проксі для площини керування Gateway навмисно обмежено `localhost` і буквальними URL-адресами loopback IP. Використовуйте `ws://127.0.0.1:18789`, `ws://[::1]:18789` або `ws://localhost:18789` для локальних прямих підключень до площини керування Gateway; інші імена хостів маршрутизуються як звичайний трафік на основі імен хостів.
- Проксі покращує покриття для процесно-локальних JavaScript HTTP- і WebSocket-клієнтів, але не є мережевою пісочницею рівня ОС.
- Необроблені сокети `net`, `tls` і `http2`, нативні аддони та дочірні процеси можуть обходити маршрутизацію проксі рівня Node, якщо вони не успадковують і не дотримуються змінних середовища проксі.
- IRC — це необроблений TCP/TLS-канал поза маршрутизацією через прямий проксі, керований оператором. У розгортаннях, де весь вихідний трафік має проходити через цей прямий проксі, задайте `channels.irc.enabled=false`, якщо прямий вихідний IRC-трафік не схвалено явно.
- Локальні WebUI користувачів і локальні сервери моделей за потреби слід додати до списку дозволених у політиці проксі оператора; OpenClaw не надає для них загального обходу локальної мережі.
- Обхід проксі для контрольної площини Gateway навмисно обмежено `localhost` і URL-адресами з буквальними loopback IP. Використовуйте `ws://127.0.0.1:18789`, `ws://[::1]:18789` або `ws://localhost:18789` для локальних прямих підключень до контрольної площини Gateway; інші імена хостів маршрутизуються як звичайний трафік на основі імен хостів.
- OpenClaw не перевіряє, не тестує й не сертифікує вашу політику проксі.
- Розглядайте зміни політики проксі як безпеково чутливі операційні зміни.