diff --git a/docs/uk/concepts/system-prompt.md b/docs/uk/concepts/system-prompt.md index 637f23342..f9d35fef5 100644 --- a/docs/uk/concepts/system-prompt.md +++ b/docs/uk/concepts/system-prompt.md @@ -1,81 +1,123 @@ --- read_when: - - Редагування тексту системного промпту, списку інструментів або розділів про час/Heartbeat - - Зміна початкового налаштування робочого простору або поведінки впровадження Skills -summary: Що містить системний промпт OpenClaw і як його зібрано + - Редагування тексту системного промпта, списку інструментів або розділів часу/Heartbeat + - Зміна поведінки ініціалізації робочого простору або впровадження Skills +summary: Що містить системний промпт OpenClaw і як його збирають title: Системний промпт x-i18n: - generated_at: "2026-04-27T22:37:53Z" - model: gpt-5.4 + generated_at: "2026-04-28T23:57:29Z" + model: gpt-5.5 provider: openai - source_hash: 28339bd25e79c152448d66e4e0c679ff384913e12890f6f67c9c97ddacd4ddbe + source_hash: 8c6258ad35d679eaa2bb4d2446e9edfc6bb129888681a0e5d5527c54c5476971 source_path: concepts/system-prompt.md - workflow: 15 + workflow: 16 --- -OpenClaw створює власний системний промпт для кожного запуску агента. Промпт **належить OpenClaw** і не використовує типовий промпт pi-coding-agent. +OpenClaw створює власний системний prompt для кожного запуску агента. Prompt **належить OpenClaw** і не використовує стандартний prompt pi-coding-agent. -Промпт збирається OpenClaw і впроваджується в кожен запуск агента. +Prompt збирається OpenClaw і вставляється в кожен запуск агента. -Плагіни провайдерів можуть додавати кеш-орієнтовані вказівки для промпту, не замінюючи весь промпт, що належить OpenClaw. Середовище виконання провайдера може: +Provider plugins можуть додавати cache-aware вказівки для prompt, не замінюючи +повний prompt, що належить OpenClaw. Provider runtime може: -- замінювати невеликий набір іменованих базових розділів (`interaction_style`, `tool_call_style`, `execution_bias`) -- впроваджувати **стабільний префікс** над межею кешу промпту -- впроваджувати **динамічний суфікс** під межею кешу промпту +- замінювати невеликий набір іменованих основних секцій (`interaction_style`, + `tool_call_style`, `execution_bias`) +- вставляти **стабільний префікс** над межею кешу prompt +- вставляти **динамічний суфікс** під межею кешу prompt -Використовуйте внески, що належать провайдеру, для налаштування під конкретне сімейство моделей. Зберігайте застарілу мутацію промпту `before_prompt_build` для сумісності або справді глобальних змін промпту, а не для звичайної поведінки провайдера. +Використовуйте provider-owned внески для налаштування, специфічного для родин моделей. Залишайте застарілу +мутацію prompt `before_prompt_build` для сумісності або справді глобальних змін prompt, +а не для звичайної поведінки провайдера. -Накладка для сімейства OpenAI GPT-5 зберігає базове правило виконання компактним і додає специфічні для моделі вказівки щодо фіксації персони, стислого виводу, дисципліни використання інструментів, паралельного пошуку, повноти результату, перевірки, відсутнього контексту та гігієни інструментів термінала. +Оверлей родини OpenAI GPT-5 зберігає основне правило виконання невеликим і додає +модельно-специфічні вказівки щодо persona latching, стислого виводу, дисципліни інструментів, +паралельного пошуку, покриття deliverable, перевірки, відсутнього контексту та +гігієни terminal-tool. ## Структура -Промпт навмисно компактний і використовує фіксовані розділи: +Prompt навмисно компактний і використовує фіксовані секції: -- **Tooling**: нагадування про структуровані інструменти як джерело істини плюс вказівки щодо використання інструментів під час виконання. -- **Execution Bias**: компактні вказівки для доведення справ до кінця: виконувати дієві запити в межах поточного ходу, продовжувати до завершення або блокування, відновлюватися після слабких результатів інструментів, перевіряти змінний стан наживо та верифікувати перед фіналізацією. -- **Safety**: коротке нагадування про запобіжники, щоб уникати поведінки, спрямованої на здобуття влади, або обходу нагляду. -- **Skills** (коли доступні): пояснює моделі, як завантажувати інструкції Skills за потреби. -- **OpenClaw Self-Update**: як безпечно перевіряти конфігурацію через `config.schema.lookup`, вносити зміни в конфігурацію через `config.patch`, замінювати повну конфігурацію через `config.apply` і запускати `update.run` лише за явним запитом користувача. Інструмент `gateway`, доступний лише власнику, також відмовляється переписувати `tools.exec.ask` / `tools.exec.security`, включно із застарілими псевдонімами `tools.bash.*`, які нормалізуються до цих захищених шляхів exec. -- **Workspace**: робочий каталог (`agents.defaults.workspace`). -- **Documentation**: локальний шлях до документації OpenClaw (репозиторій або npm-пакет) і коли її читати. -- **Workspace Files (injected)**: вказує, що нижче включено файли початкового налаштування. -- **Sandbox** (коли увімкнено): вказує на ізольоване середовище виконання, шляхи пісочниці та чи доступний exec з підвищеними правами. -- **Current Date & Time**: локальний час користувача, часовий пояс і формат часу. -- **Reply Tags**: необов’язковий синтаксис тегів відповіді для підтримуваних провайдерів. -- **Heartbeats**: промпт Heartbeat і поведінка підтвердження, коли Heartbeat увімкнено для типового агента. -- **Runtime**: хост, ОС, Node, модель, корінь репозиторію (якщо виявлено), рівень міркування (один рядок). -- **Reasoning**: поточний рівень видимості + підказка щодо перемикача /reasoning. +- **Інструменти**: нагадування про structured-tool як source-of-truth плюс runtime-вказівки щодо використання інструментів. +- **Ухил виконання**: компактні вказівки щодо доведення до кінця: діяти в межах поточного ходу для + actionable requests, продовжувати до завершення або блокування, відновлюватися після слабких результатів інструментів, + перевіряти змінний стан наживо та перевіряти перед фіналізацією. +- **Безпека**: коротке нагадування про guardrail, щоб уникати power-seeking behavior або обходу нагляду. +- **Skills** (коли доступні): повідомляє моделі, як завантажувати інструкції Skills на вимогу. +- **Самооновлення OpenClaw**: як безпечно переглядати config за допомогою + `config.schema.lookup`, виправляти config через `config.patch`, замінювати повний + config через `config.apply` і запускати `update.run` лише за явним запитом користувача. + Owner-only інструмент `gateway` також відмовляється переписувати + `tools.exec.ask` / `tools.exec.security`, зокрема застарілі псевдоніми `tools.bash.*`, + які нормалізуються до цих захищених exec-шляхів. +- **Робоча область**: робочий каталог (`agents.defaults.workspace`). +- **Документація**: локальний шлях до документації OpenClaw (репозиторій або npm-пакет) і коли її читати. +- **Файли робочої області (вставлені)**: вказує, що bootstrap-файли включено нижче. +- **Sandbox** (коли ввімкнено): вказує sandboxed runtime, sandbox-шляхи та чи доступний elevated exec. +- **Поточна дата й час**: локальний час користувача, часовий пояс і формат часу. +- **Теги відповіді**: необов’язковий синтаксис тегів відповіді для підтримуваних провайдерів. +- **Heartbeats**: Heartbeat prompt і поведінка ack, коли Heartbeats увімкнено для агента за замовчуванням. +- **Runtime**: host, OS, node, model, корінь репозиторію (коли виявлено), рівень thinking (один рядок). +- **Reasoning**: поточний рівень видимості + підказка перемикача /reasoning. -Розділ Tooling також містить вказівки під час виконання для довготривалої роботи: +OpenClaw тримає великий стабільний вміст, зокрема **Контекст проєкту**, над +внутрішньою межею кешу prompt. Мінливі секції каналу/сесії, як-от +вбудовані вказівки Control UI, **Messaging**, **Voice**, **Контекст групового чату**, +**Reactions**, **Heartbeats** і **Runtime**, додаються під цією межею, +щоб локальні бекенди з prefix caches могли повторно використовувати стабільний префікс робочої області +між ходами каналу. Описи інструментів так само мають уникати вбудовування поточних +назв каналів, коли прийнята схема вже містить цю runtime-деталь. -- використовуйте Cron для подальших дій у майбутньому (`check back later`, нагадування, періодична робота) замість циклів сну `exec`, трюків із затримкою `yieldMs` або повторного опитування `process` -- використовуйте `exec` / `process` лише для команд, які запускаються зараз і продовжують працювати у фоновому режимі -- коли ввімкнено автоматичне пробудження після завершення, запустіть команду один раз і покладайтеся на push-орієнтований шлях пробудження, коли вона виводить результат або завершується з помилкою -- використовуйте `process` для журналів, стану, введення або втручання, коли потрібно перевірити команду, що виконується -- якщо завдання більше, надавайте перевагу `sessions_spawn`; завершення субагента працює через push і автоматично оголошується назад запитувачу -- не опитуйте `subagents list` / `sessions_list` у циклі лише для очікування завершення +Секція Інструменти також містить runtime-вказівки для тривалої роботи: -Коли увімкнено експериментальний інструмент `update_plan`, Tooling також повідомляє моделі використовувати його лише для нетривіальної багатокрокової роботи, підтримувати рівно один крок `in_progress` і не повторювати весь план після кожного оновлення. +- використовуйте cron для майбутнього follow-up (`check back later`, нагадування, повторювана робота) + замість циклів `exec` sleep, трюків із затримкою `yieldMs` або повторного опитування `process` +- використовуйте `exec` / `process` лише для команд, які стартують зараз і продовжують виконуватися + у фоні +- коли ввімкнено автоматичне пробудження після завершення, запускайте команду один раз і покладайтеся на + push-based wake path, коли вона видає вивід або завершується помилкою +- використовуйте `process` для логів, статусу, вводу або втручання, коли потрібно + оглянути запущену команду +- якщо завдання більше, віддавайте перевагу `sessions_spawn`; завершення sub-agent є + push-based і автоматично повідомляє requester +- не опитуйте `subagents list` / `sessions_list` у циклі лише для очікування + завершення -Запобіжники безпеки в системному промпті мають рекомендаційний характер. Вони спрямовують поведінку моделі, але не забезпечують примусове виконання політики. Для жорсткого забезпечення використовуйте політику інструментів, погодження exec, пісочницю та allowlist каналів; оператори можуть навмисно вимикати це. +Коли експериментальний інструмент `update_plan` увімкнено, Інструменти також повідомляють +моделі використовувати його лише для нетривіальної багатокрокової роботи, тримати рівно один +крок `in_progress` і не повторювати весь план після кожного оновлення. -У каналах із нативними картками/кнопками погодження промпт середовища виконання тепер вказує агенту спершу покладатися на цей нативний інтерфейс погодження. Він має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що погодження в чаті недоступні або ручне погодження — єдиний шлях. +Safety guardrails у системному prompt мають рекомендаційний характер. Вони спрямовують поведінку моделі, але не забезпечують примусове дотримання політики. Для жорсткого enforcement використовуйте policy інструментів, exec approvals, sandboxing і channel allowlists; оператори можуть вимикати їх за дизайном. -## Режими промпту +На каналах із native approval cards/buttons runtime prompt тепер повідомляє +агенту спершу покладатися на цей native approval UI. Він має включати ручну +команду `/approve` лише тоді, коли результат інструмента каже, що chat approvals недоступні або +ручне approval є єдиним шляхом. -OpenClaw може рендерити менші системні промпти для субагентів. Середовище виконання встановлює `promptMode` для кожного запуску (це не користувацький параметр конфігурації): +## Режими prompt -- `full` (типово): включає всі розділи вище. -- `minimal`: використовується для субагентів; опускає **Skills**, **Memory Recall**, **OpenClaw Self-Update**, **Model Aliases**, **User Identity**, **Reply Tags**, **Messaging**, **Silent Replies** і **Heartbeats**. Tooling, **Safety**, Workspace, Sandbox, Current Date & Time (коли відомо), Runtime та впроваджений контекст залишаються доступними. +OpenClaw може рендерити менші системні prompts для sub-agents. Runtime задає +`promptMode` для кожного запуску (це не user-facing config): + +- `full` (за замовчуванням): містить усі секції вище. +- `minimal`: використовується для sub-agents; пропускає **Skills**, **Memory Recall**, **Самооновлення OpenClaw**, + **Model Aliases**, **User Identity**, **Теги відповіді**, + **Messaging**, **Silent Replies** і **Heartbeats**. Інструменти, **Безпека**, + робоча область, Sandbox, Поточна дата й час (коли відомо), Runtime і вставлений + контекст залишаються доступними. - `none`: повертає лише базовий рядок ідентичності. -Коли `promptMode=minimal`, додатково впроваджені промпти позначаються як **Subagent Context** замість **Group Chat Context**. +Коли `promptMode=minimal`, додаткові вставлені prompts позначаються як **Контекст subagent** +замість **Контекст групового чату**. -Для запусків автоматичної відповіді в каналі OpenClaw може опускати загальний розділ **Silent Replies**, коли контекст прямого/групового чату вже містить визначену для конкретної розмови поведінку `NO_REPLY`. Це дозволяє уникнути дублювання механіки токенів і в глобальному системному промпті, і в контексті каналу. +Для запусків channel auto-reply OpenClaw може пропускати загальну секцію **Silent Replies**, +коли контекст direct/group chat уже містить розв’язану +conversation-specific поведінку `NO_REPLY`. Це дає змогу уникнути повторення token mechanics +і в глобальному системному prompt, і в контексті каналу. -## Впровадження початкового налаштування робочого простору +## Bootstrap-вставлення робочої області -Файли початкового налаштування обрізаються і додаються в **Project Context**, щоб модель бачила контекст ідентичності та профілю без потреби в явному читанні: +Bootstrap-файли обрізаються й додаються під **Контекст проєкту**, щоб модель бачила ідентичність і профільний контекст без явних читань: - `AGENTS.md` - `SOUL.md` @@ -83,45 +125,71 @@ OpenClaw може рендерити менші системні промпти - `IDENTITY.md` - `USER.md` - `HEARTBEAT.md` -- `BOOTSTRAP.md` (лише в абсолютно нових робочих просторах) -- `MEMORY.md`, якщо присутній +- `BOOTSTRAP.md` (лише для абсолютно нових робочих областей) +- `MEMORY.md`, коли присутній -Усі ці файли **впроваджуються у вікно контексту** на кожному ході, якщо не застосовується окремий фільтр для файлу. `HEARTBEAT.md` пропускається у звичайних запусках, коли Heartbeat вимкнено для типового агента або `agents.defaults.heartbeat.includeSystemPromptSection` має значення false. Тримайте впроваджені файли стислими — особливо `MEMORY.md`, який із часом може розростатися й призводити до неочікувано високого використання контексту та частішої Compaction. +Усі ці файли **вставляються у вікно контексту** на кожному ході, якщо +не застосовується file-specific gate. `HEARTBEAT.md` пропускається у звичайних запусках, коли +Heartbeats вимкнено для агента за замовчуванням або +`agents.defaults.heartbeat.includeSystemPromptSection` має значення false. Тримайте вставлені +файли стислими — особливо `MEMORY.md`, який може зростати з часом і призводити до +неочікувано високого використання контексту та частішої Compaction. -Щоденні файли `memory/*.md` **не** є частиною звичайного початкового Project Context. У звичайних ходах доступ до них здійснюється за потреби через інструменти `memory_search` і `memory_get`, тому вони не займають місце у вікні контексту, якщо модель явно їх не читає. Виняток — порожні ходи `/new` і `/reset`: у цьому разі середовище виконання може додати нещодавню щоденну пам’ять як одноразовий блок стартового контексту для цього першого ходу. +Щоденні файли `memory/*.md` **не** є частиною звичайного bootstrap Контексту проєкту. У звичайних ходах до них звертаються на вимогу через інструменти `memory_search` і `memory_get`, тому вони не враховуються у вікні контексту, якщо модель явно їх не читає. Голі ходи `/new` і `/reset` є винятком: runtime може додати недавню щоденну пам’ять як одноразовий блок startup-context для цього першого ходу. -Великі файли обрізаються з маркером. Максимальний розмір для одного файлу контролюється параметром `agents.defaults.bootstrapMaxChars` (типово: 12000). Загальний обсяг впровадженого початкового вмісту для всіх файлів обмежується параметром `agents.defaults.bootstrapTotalMaxChars` (типово: 60000). Відсутні файли впроваджуються як короткий маркер відсутнього файлу. Коли відбувається обрізання, OpenClaw може впровадити блок попередження в Project Context; це керується через `agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; типово: `once`). +Великі файли обрізаються з маркером. Максимальний розмір на файл керується +`agents.defaults.bootstrapMaxChars` (за замовчуванням: 12000). Загальний вставлений bootstrap +вміст у всіх файлах обмежено `agents.defaults.bootstrapTotalMaxChars` +(за замовчуванням: 60000). Відсутні файли вставляють короткий маркер missing-file. Коли відбувається обрізання, +OpenClaw може вставити warning block у Контекст проєкту; керуйте цим через +`agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; +за замовчуванням: `once`). -Сеанси субагентів впроваджують лише `AGENTS.md` і `TOOLS.md` (інші файли початкового налаштування відфільтровуються, щоб контекст субагента залишався компактним). +Сесії sub-agent вставляють лише `AGENTS.md` і `TOOLS.md` (інші bootstrap-файли +відфільтровуються, щоб зберегти контекст sub-agent невеликим). -Внутрішні хуки можуть перехоплювати цей крок через `agent:bootstrap`, щоб змінювати або замінювати впроваджені файли початкового налаштування (наприклад, замінювати `SOUL.md` альтернативною персоною). +Внутрішні hooks можуть перехопити цей крок через `agent:bootstrap`, щоб змінити або замінити +вставлені bootstrap-файли (наприклад, замінити `SOUL.md` на альтернативну persona). -Якщо ви хочете, щоб агент звучав менш узагальнено, почніть із [SOUL.md Personality Guide](/uk/concepts/soul). +Якщо ви хочете, щоб агент звучав менш generic, почніть із +[Посібника з особистості SOUL.md](/uk/concepts/soul). -Щоб перевірити, який внесок робить кожен впроваджений файл (сирий чи впроваджений розмір, обрізання, а також накладні витрати схеми інструментів), використовуйте `/context list` або `/context detail`. Див. [Context](/uk/concepts/context). +Щоб перевірити, скільки додає кожен вставлений файл (raw vs injected, truncation, плюс tool schema overhead), використовуйте `/context list` або `/context detail`. Див. [Контекст](/uk/concepts/context). ## Обробка часу -Системний промпт містить окремий розділ **Current Date & Time**, коли часовий пояс користувача відомий. Щоб зберігати кеш промпту стабільним, тепер він містить лише **часовий пояс** (без динамічного годинника або формату часу). +Системний prompt містить окрему секцію **Поточна дата й час**, коли +часовий пояс користувача відомий. Щоб зберегти cache-stable prompt, тепер вона містить лише +**часовий пояс** (без динамічного годинника або формату часу). -Використовуйте `session_status`, коли агенту потрібен поточний час; картка статусу містить рядок із часовою міткою. Той самий інструмент також може за потреби встановлювати перевизначення моделі для сеансу (`model=default` очищає його). +Використовуйте `session_status`, коли агенту потрібен поточний час; status card +містить рядок timestamp. Той самий інструмент може необов’язково встановлювати per-session model +override (`model=default` очищає його). -Налаштовується через: +Налаштовуйте через: - `agents.defaults.userTimezone` - `agents.defaults.timeFormat` (`auto` | `12` | `24`) -Повну інформацію про поведінку див. у [Date & Time](/uk/date-time). +Повні подробиці поведінки див. у [Дата й час](/uk/date-time). ## Skills -Коли існують відповідні Skills, OpenClaw впроваджує компактний **список доступних Skills** (`formatSkillsForPrompt`), який включає **шлях до файлу** для кожного Skill. Промпт інструктує модель використовувати `read`, щоб завантажити SKILL.md у вказаному місці (робочий простір, кероване або вбудоване розташування). Якщо жоден Skill не підходить, розділ Skills опускається. +Коли існують eligible Skills, OpenClaw вставляє компактний **список доступних Skills** +(`formatSkillsForPrompt`), який містить **шлях до файлу** для кожної Skill. Prompt +інструктує модель використовувати `read`, щоб завантажити SKILL.md у вказаному +розташуванні (workspace, managed або bundled). Якщо eligible Skills немає, секція +Skills пропускається. -Відповідність включає фільтри метаданих Skill, перевірки середовища виконання/конфігурації та ефективний allowlist Skills агента, коли налаштовано `agents.defaults.skills` або `agents.list[].skills`. +Eligibility включає skill metadata gates, runtime environment/config checks +і effective agent skill allowlist, коли налаштовано `agents.defaults.skills` або +`agents.list[].skills`. -Skills, вбудовані в плагін, підходять лише тоді, коли плагін-власник увімкнений. Це дозволяє плагінам інструментів надавати глибші операційні інструкції, не вбудовуючи всі ці вказівки безпосередньо в опис кожного інструмента. +Plugin-bundled Skills eligible лише тоді, коли їхній owning plugin увімкнено. +Це дає tool plugins змогу надавати глибші operating guides без вбудовування всіх +цих вказівок безпосередньо в кожен опис інструмента. ``` @@ -133,33 +201,42 @@ Skills, вбудовані в плагін, підходять лише тоді ``` -Це зберігає базовий промпт компактним і водночас дає змогу цільово використовувати Skills. +Це зберігає base prompt малим, водночас даючи змогу targeted skill usage. Бюджет списку Skills належить підсистемі Skills: -- Глобальне типове значення: `skills.limits.maxSkillsPromptChars` -- Перевизначення для окремого агента: `agents.list[].skillsLimits.maxSkillsPromptChars` +- Глобальне значення за замовчуванням: `skills.limits.maxSkillsPromptChars` +- Перевизначення на агента: `agents.list[].skillsLimits.maxSkillsPromptChars` -Загальні обмежені витяги середовища виконання використовують іншу поверхню: +Generic bounded runtime excerpts використовують іншу surface: - `agents.defaults.contextLimits.*` - `agents.list[].contextLimits.*` -Такий поділ зберігає розмір Skills окремим від розміру читання/впровадження під час виконання, наприклад для `memory_get`, результатів живих інструментів і оновлення AGENTS.md після Compaction. +Такий поділ тримає sizing Skills окремо від runtime read/injection sizing, як-от +`memory_get`, live tool results і оновлення AGENTS.md після Compaction. -## Documentation +## Документація -Системний промпт містить розділ **Documentation**. Коли локальна документація доступна, він указує на локальний каталог документації OpenClaw (`docs/` у Git checkout або документація вбудованого npm-пакета). Якщо локальна документація недоступна, використовується резервний варіант: +Системний prompt містить секцію **Документація**. Коли локальна документація доступна, вона +вказує на локальний каталог документації OpenClaw (`docs/` у Git checkout або bundled npm +package docs). Якщо локальна документація недоступна, використовується fallback на [https://docs.openclaw.ai](https://docs.openclaw.ai). -Той самий розділ також містить розташування вихідного коду OpenClaw. Git checkout надають локальний корінь вихідного коду, щоб агент міг безпосередньо перевіряти код. Установки з пакета містять URL вихідного коду GitHub і вказують агенту переглядати код там, коли документація неповна або застаріла. Промпт також згадує публічне дзеркало документації, спільноту Discord і ClawHub ([https://clawhub.ai](https://clawhub.ai)) для пошуку Skills. Він інструктує модель спершу звертатися до документації щодо поведінки OpenClaw, команд, конфігурації чи архітектури, а також самостійно запускати `openclaw status`, коли це можливо (звертаючись до користувача лише тоді, коли доступу бракує). -Зокрема для конфігурації він спрямовує агентів до дії інструмента `gateway` -`config.schema.lookup` для точної документації та обмежень на рівні полів, а потім до +Та сама секція також містить розташування source OpenClaw. Git checkouts показують локальний +source root, щоб агент міг безпосередньо переглядати код. Package installs містять GitHub +source URL і повідомляють агенту переглядати source там, коли документація неповна або +застаріла. Prompt також згадує public docs mirror, community Discord і ClawHub +([https://clawhub.ai](https://clawhub.ai)) для пошуку Skills. Він повідомляє моделі +спершу звертатися до документації щодо поведінки OpenClaw, команд, конфігурації або архітектури, а також +самостійно запускати `openclaw status`, коли можливо (питаючи користувача лише тоді, коли не має доступу). +Спеціально для configuration він спрямовує агентів до дії інструмента `gateway` +`config.schema.lookup` для точних field-level docs і constraints, а потім до `docs/gateway/configuration.md` і `docs/gateway/configuration-reference.md` -для ширших рекомендацій. +для ширших вказівок. ## Пов’язане -- [Середовище виконання агента](/uk/concepts/agent) -- [Робочий простір агента](/uk/concepts/agent-workspace) +- [Runtime агента](/uk/concepts/agent) +- [Робоча область агента](/uk/concepts/agent-workspace) - [Рушій контексту](/uk/concepts/context-engine) diff --git a/docs/uk/gateway/bonjour.md b/docs/uk/gateway/bonjour.md index 1aa5cb97e..ae62a978c 100644 --- a/docs/uk/gateway/bonjour.md +++ b/docs/uk/gateway/bonjour.md @@ -1,53 +1,53 @@ --- read_when: - - Налагодження проблем виявлення Bonjour на macOS/iOS - - Зміна типів сервісів mDNS, TXT-записів або UX виявлення -summary: Виявлення та налагодження Bonjour/mDNS (маяки Gateway, клієнти та поширені режими збоїв) + - Налагодження проблем із виявленням Bonjour у macOS/iOS + - Зміна типів служб mDNS, записів TXT або UX виявлення +summary: Виявлення + налагодження Bonjour/mDNS (маячки Gateway, клієнти та типові сценарії збоїв) title: Виявлення Bonjour x-i18n: - generated_at: "2026-04-27T10:59:00Z" - model: gpt-5.4 + generated_at: "2026-04-28T23:57:28Z" + model: gpt-5.5 provider: openai - source_hash: 8d00812e18ffa34cd829af88acf5c52966669cf42d4f01f7ad566587b8605ded + source_hash: 0720451843aae0509949324e51f3a23dc69e366e68de851c595ce76c8ab0eec9 source_path: gateway/bonjour.md - workflow: 15 + workflow: 16 --- # Виявлення Bonjour / mDNS -OpenClaw використовує Bonjour (mDNS / DNS‑SD), щоб виявити активний Gateway (кінцеву точку WebSocket). -Multicast-пошук у `local.` — це **зручний механізм лише для LAN**. Вбудований -плагін `bonjour` відповідає за оголошення в LAN і ввімкнений за замовчуванням. Для міжмережевого виявлення -той самий маяк також може публікуватися через налаштований wide-area домен DNS-SD. -Виявлення все одно працює за принципом best-effort і **не** замінює підключення через SSH або Tailnet. +OpenClaw використовує Bonjour (mDNS / DNS‑SD) для виявлення активного Gateway (кінцевої точки WebSocket). +Перегляд multicast `local.` — це **зручність лише для LAN**. Вбудований Plugin `bonjour` +відповідає за оголошення в LAN і ввімкнений за замовчуванням. Для виявлення між різними мережами +той самий маяк також можна опублікувати через налаштований домен широкозонної DNS-SD. +Виявлення все одно працює за принципом best-effort і **не** замінює SSH або підключення на основі Tailnet. -## Wide-area Bonjour (Unicast DNS-SD) через Tailscale +## Широкозонний Bonjour (Unicast DNS-SD) через Tailscale -Якщо Node і Gateway перебувають у різних мережах, multicast mDNS не перетне -цю межу. Ви можете зберегти той самий UX виявлення, переключившись на **unicast DNS‑SD** +Якщо вузол і gateway перебувають у різних мережах, multicast mDNS не перетне +межу. Можна зберегти той самий UX виявлення, перемкнувшись на **unicast DNS‑SD** ("Wide‑Area Bonjour") через Tailscale. -Кроки на високому рівні: +Загальні кроки: -1. Запустіть DNS-сервер на хості Gateway (доступний через Tailnet). -2. Опублікуйте записи DNS‑SD для `_openclaw-gw._tcp` у виділеній зоні +1. Запустіть DNS-сервер на хості gateway (доступний через Tailnet). +2. Опублікуйте DNS‑SD-записи для `_openclaw-gw._tcp` у виділеній зоні (приклад: `openclaw.internal.`). -3. Налаштуйте в Tailscale **split DNS**, щоб вибраний домен резолвився через цей - DNS-сервер для клієнтів (зокрема для iOS). +3. Налаштуйте **split DNS** у Tailscale, щоб вибраний домен для клієнтів + (зокрема iOS) розв’язувався через цей DNS-сервер. OpenClaw підтримує будь-який домен виявлення; `openclaw.internal.` — лише приклад. -Node на iOS/Android переглядають і `local.`, і ваш налаштований wide-area домен. +Вузли iOS/Android переглядають і `local.`, і ваш налаштований широкозонний домен. ### Конфігурація Gateway (рекомендовано) ```json5 { - gateway: { bind: "tailnet" }, // лише tailnet (рекомендовано) - discovery: { wideArea: { enabled: true } }, // вмикає публікацію wide-area DNS-SD + gateway: { bind: "tailnet" }, // tailnet-only (recommended) + discovery: { wideArea: { enabled: true } }, // enables wide-area DNS-SD publishing } ``` -### Одноразове налаштування DNS-сервера (хост Gateway) +### Одноразове налаштування DNS-сервера (хост gateway) ```bash openclaw dns setup --apply @@ -55,8 +55,8 @@ openclaw dns setup --apply Це встановлює CoreDNS і налаштовує його так, щоб він: -- слухав порт 53 лише на Tailscale-інтерфейсах Gateway -- обслуговував вибраний вами домен (приклад: `openclaw.internal.`) з `~/.openclaw/dns/.db` +- слухав порт 53 лише на інтерфейсах Tailscale gateway +- обслуговував вибраний домен (приклад: `openclaw.internal.`) з `~/.openclaw/dns/.db` Перевірте з машини, підключеної до tailnet: @@ -69,55 +69,55 @@ dig @ -p 53 _openclaw-gw._tcp.openclaw.internal PTR +short У консолі адміністратора Tailscale: -- Додайте nameserver, що вказує на tailnet IP Gateway (UDP/TCP 53). +- Додайте nameserver, що вказує на tailnet IP gateway (UDP/TCP 53). - Додайте split DNS, щоб ваш домен виявлення використовував цей nameserver. -Щойно клієнти приймуть DNS tailnet, Node на iOS і виявлення через CLI зможуть переглядати +Щойно клієнти приймуть tailnet DNS, вузли iOS і CLI-виявлення зможуть переглядати `_openclaw-gw._tcp` у вашому домені виявлення без multicast. ### Безпека слухача Gateway (рекомендовано) -Порт Gateway WS (типово `18789`) типово прив’язується до loopback. Для доступу з LAN/tailnet -вкажіть bind явно й залиште автентифікацію ввімкненою. +Порт WS Gateway (за замовчуванням `18789`) типово прив’язується до loopback. Для доступу +через LAN/tailnet явно задайте прив’язку й залиште автентифікацію ввімкненою. -Для конфігурацій лише з tailnet: +Для налаштувань лише через tailnet: - Установіть `gateway.bind: "tailnet"` у `~/.openclaw/openclaw.json`. -- Перезапустіть Gateway (або перезапустіть застосунок macOS у рядку меню). +- Перезапустіть Gateway (або перезапустіть застосунок у menubar macOS). ## Що оголошується -Лише Gateway оголошує `_openclaw-gw._tcp`. Оголошення multicast у LAN -забезпечується вбудованим плагіном `bonjour`; публікація wide-area DNS-SD -залишається у власності Gateway. +Лише Gateway оголошує `_openclaw-gw._tcp`. LAN multicast-оголошення +надає вбудований Plugin `bonjour`; публікація широкозонної DNS-SD залишається +у власності Gateway. ## Типи сервісів -- `_openclaw-gw._tcp` — транспортний маяк gateway (використовується Node на macOS/iOS/Android). +- `_openclaw-gw._tcp` — маяк транспорту gateway (використовується вузлами macOS/iOS/Android). -## Ключі TXT (не секретні підказки) +## TXT-ключі (несекретні підказки) -Gateway оголошує невеликі не секретні підказки, щоб спростити UI-потоки: +Gateway оголошує невеликі несекретні підказки, щоб зробити UI-потоки зручними: - `role=gateway` -- `displayName=<дружня назва>` +- `displayName=` - `lanHost=.local` - `gatewayPort=` (Gateway WS + HTTP) -- `gatewayTls=1` (лише коли ввімкнено TLS) -- `gatewayTlsSha256=` (лише коли ввімкнено TLS і доступний відбиток) -- `canvasPort=` (лише коли ввімкнено хост canvas; наразі це той самий `gatewayPort`) +- `gatewayTls=1` (лише коли TLS увімкнено) +- `gatewayTlsSha256=` (лише коли TLS увімкнено й fingerprint доступний) +- `canvasPort=` (лише коли canvas host увімкнено; наразі такий самий, як `gatewayPort`) - `transport=gateway` -- `tailnetDns=` (лише в повному режимі mDNS, необов’язкова підказка, коли доступний Tailnet) -- `sshPort=` (лише в повному режимі mDNS; wide-area DNS-SD може його не включати) -- `cliPath=` (лише в повному режимі mDNS; wide-area DNS-SD все одно записує його як підказку для віддаленого встановлення) +- `tailnetDns=` (лише повний режим mDNS, необов’язкова підказка, коли Tailnet доступний) +- `sshPort=` (лише повний режим mDNS; широкозонна DNS-SD може його пропускати) +- `cliPath=` (лише повний режим mDNS; широкозонна DNS-SD все одно записує його як підказку для віддаленого встановлення) -Примітки щодо безпеки: +Нотатки щодо безпеки: -- TXT-записи Bonjour/mDNS **неавтентифіковані**. Клієнти не повинні вважати TXT авторитетним джерелом маршрутизації. -- Клієнти повинні маршрутизуватися, використовуючи резолвлену кінцеву точку сервісу (SRV + A/AAAA). Розглядайте `lanHost`, `tailnetDns`, `gatewayPort` і `gatewayTlsSha256` лише як підказки. -- Автоматичне націлювання SSH так само має використовувати резолвлений хост сервісу, а не лише підказки з TXT. +- TXT-записи Bonjour/mDNS **не автентифіковані**. Клієнти не повинні вважати TXT авторитетним джерелом маршрутизації. +- Клієнти мають маршрутизувати, використовуючи розв’язану кінцеву точку сервісу (SRV + A/AAAA). Вважайте `lanHost`, `tailnetDns`, `gatewayPort` і `gatewayTlsSha256` лише підказками. +- SSH auto-targeting так само має використовувати розв’язаний хост сервісу, а не підказки лише з TXT. - TLS pinning ніколи не повинен дозволяти оголошеному `gatewayTlsSha256` перевизначати раніше збережений pin. -- Node на iOS/Android мають розглядати прямі підключення на основі виявлення як **лише TLS** і вимагати явного підтвердження користувача перед довірою до відбитка при першому підключенні. +- Вузли iOS/Android мають вважати прямі підключення на основі виявлення **лише TLS** і вимагати явного підтвердження користувача перед довірою до fingerprint уперше. ## Налагодження на macOS @@ -129,62 +129,63 @@ Gateway оголошує невеликі не секретні підказки dns-sd -B _openclaw-gw._tcp local. ``` -- Резолв одного екземпляра (замініть ``): +- Розв’язання одного екземпляра (замініть ``): ```bash dns-sd -L "" _openclaw-gw._tcp local. ``` -Якщо перегляд працює, але резолв — ні, зазвичай це означає проблему політики LAN або -резолвера mDNS. +Якщо перегляд працює, але розв’язання не вдається, зазвичай причина в політиці LAN або +проблемі резолвера mDNS. -## Налагодження в журналах Gateway +## Налагодження в логах Gateway -Gateway записує журнал у циклічний лог-файл (виводиться під час запуску як +Gateway пише ротаційний файл журналу (друкується під час запуску як `gateway log file: ...`). Шукайте рядки `bonjour:`, особливо: - `bonjour: advertise failed ...` +- `bonjour: suppressing ciao cancellation ...` - `bonjour: ... name conflict resolved` / `hostname conflict resolved` - `bonjour: watchdog detected non-announced service ...` - `bonjour: disabling advertiser after ... failed restarts ...` -Bonjour використовує системне ім’я хоста для оголошеного `.local` хоста, якщо воно є -коректною DNS-міткою. Якщо системне ім’я хоста містить пробіли, підкреслення або інший -некоректний для DNS-мітки символ, OpenClaw використовує `openclaw.local` як резервний варіант. Установіть -`OPENCLAW_MDNS_HOSTNAME=` перед запуском Gateway, якщо вам потрібна -явна мітка хоста. +Bonjour використовує системне ім’я хоста для оголошеного хоста `.local`, коли воно є +дійсною DNS-міткою. Якщо системне ім’я хоста містить пробіли, підкреслення або інший +недійсний символ DNS-мітки, OpenClaw повертається до `openclaw.local`. Установіть +`OPENCLAW_MDNS_HOSTNAME=` перед запуском Gateway, коли потрібна явна +мітка хоста. -## Налагодження на iOS Node +## Налагодження на вузлі iOS -iOS Node використовує `NWBrowser` для виявлення `_openclaw-gw._tcp`. +Вузол iOS використовує `NWBrowser` для виявлення `_openclaw-gw._tcp`. -Щоб зібрати журнали: +Щоб зібрати логи: -- Налаштування → Gateway → Додатково → **Discovery Debug Logs** -- Налаштування → Gateway → Додатково → **Discovery Logs** → відтворіть проблему → **Copy** +- Settings → Gateway → Advanced → **Discovery Debug Logs** +- Settings → Gateway → Advanced → **Discovery Logs** → відтворіть → **Copy** -Журнал містить переходи станів браузера та зміни в наборі результатів. +Журнал містить переходи станів browser і зміни набору результатів. ## Коли вимикати Bonjour -Вимикайте Bonjour лише тоді, коли оголошення multicast у LAN недоступне або шкідливе. +Вимикайте Bonjour лише тоді, коли LAN multicast-оголошення недоступне або шкідливе. Типовий випадок — Gateway, що працює за Docker bridge networking, WSL або -мережевою політикою, яка відкидає multicast mDNS. У таких середовищах Gateway -усе ще доступний через свою опубліковану URL-адресу, SSH, Tailnet або wide-area DNS-SD, -але автоматичне виявлення в LAN працює ненадійно. +мережевою політикою, яка відкидає mDNS multicast. У таких середовищах Gateway +усе ще доступний через опублікований URL, SSH, Tailnet або широкозонну DNS-SD, +але автоматичне LAN-виявлення ненадійне. -Якщо проблема пов’язана з середовищем розгортання, надавайте перевагу наявному override змінної середовища: +Віддавайте перевагу наявному перевизначенню середовища, коли проблема пов’язана з deployment: ```bash OPENCLAW_DISABLE_BONJOUR=1 ``` -Це вимикає оголошення multicast у LAN без зміни конфігурації плагіна. -Це безпечно для образів Docker, service files, launch scripts і одноразового -налагодження, оскільки параметр зникає разом із середовищем. +Це вимикає LAN multicast-оголошення без зміни конфігурації Plugin. +Це безпечно для Docker-образів, service files, launch scripts і одноразового +налагодження, бо налаштування зникає разом із середовищем. -Використовуйте конфігурацію плагіна лише тоді, коли ви навмисно хочете вимкнути -вбудований плагін виявлення LAN для цієї конфігурації OpenClaw: +Використовуйте конфігурацію Plugin лише тоді, коли навмисно хочете вимкнути +вбудований LAN discovery Plugin для цієї конфігурації OpenClaw: ```bash openclaw plugins disable bonjour @@ -192,26 +193,27 @@ openclaw plugins disable bonjour ## Особливості Docker -Вбудований плагін Bonjour автоматично вимикає оголошення multicast у LAN у виявлених +Вбудований Bonjour Plugin автоматично вимикає LAN multicast-оголошення у виявлених контейнерах, коли `OPENCLAW_DISABLE_BONJOUR` не задано. Docker bridge networks -зазвичай не пересилають multicast mDNS (`224.0.0.251:5353`) між контейнером -і LAN, тому оголошення з контейнера рідко робить виявлення працездатним. +зазвичай не пересилають mDNS multicast (`224.0.0.251:5353`) між контейнером +і LAN, тому оголошення з контейнера рідко забезпечує роботу виявлення. Важливі особливості: -- Вимкнення Bonjour не зупиняє Gateway. Воно лише зупиняє оголошення multicast у LAN. -- Вимкнення Bonjour не змінює `gateway.bind`; Docker усе ще типово використовує +- Вимкнення Bonjour не зупиняє Gateway. Воно лише зупиняє LAN multicast + оголошення. +- Вимкнення Bonjour не змінює `gateway.bind`; Docker усе ще за замовчуванням використовує `OPENCLAW_GATEWAY_BIND=lan`, щоб опублікований порт хоста міг працювати. -- Вимкнення Bonjour не вимикає wide-area DNS-SD. Використовуйте wide-area виявлення - або Tailnet, коли Gateway і Node не перебувають в одній LAN. +- Вимкнення Bonjour не вимикає широкозонну DNS-SD. Використовуйте широкозонне виявлення + або Tailnet, коли Gateway і вузол не в одній LAN. - Повторне використання того самого `OPENCLAW_CONFIG_DIR` поза Docker не зберігає - політику автовимкнення контейнера. + політику автоматичного вимкнення контейнера. - Установлюйте `OPENCLAW_DISABLE_BONJOUR=0` лише для host networking, macvlan або іншої - мережі, де точно проходить multicast mDNS; установлюйте `1` для примусового вимкнення. + мережі, де відомо, що mDNS multicast проходить; установлюйте `1`, щоб примусово вимкнути. -## Усунення несправностей вимкненого Bonjour +## Усунення проблем із вимкненим Bonjour -Якщо Node більше не виявляє Gateway автоматично після налаштування Docker: +Якщо вузол більше не виявляє Gateway автоматично після налаштування Docker: 1. Підтвердьте, у якому режимі працює Gateway: auto, forced-on чи forced-off: @@ -225,60 +227,60 @@ openclaw plugins disable bonjour curl -fsS http://127.0.0.1:18789/healthz ``` -3. Використовуйте пряме призначення, коли Bonjour вимкнено: +3. Використовуйте прямий target, коли Bonjour вимкнено: - Control UI або локальні інструменти: `http://127.0.0.1:18789` - - Клієнти LAN: `http://:18789` - - Міжмережеві клієнти: Tailnet MagicDNS, Tailnet IP, тунель SSH або - wide-area DNS-SD + - LAN-клієнти: `http://:18789` + - Клієнти між мережами: Tailnet MagicDNS, Tailnet IP, SSH tunnel або + широкозонна DNS-SD 4. Якщо ви навмисно ввімкнули Bonjour у Docker через - `OPENCLAW_DISABLE_BONJOUR=0`, перевірте multicast із хоста: + `OPENCLAW_DISABLE_BONJOUR=0`, протестуйте multicast з хоста: ```bash dns-sd -B _openclaw-gw._tcp local. ``` - Якщо перегляд порожній або журнали Gateway показують повторні скасування - watchdog у ciao, поверніть `OPENCLAW_DISABLE_BONJOUR=1` і використовуйте прямий - маршрут або маршрут через Tailnet. + Якщо перегляд порожній або логи Gateway показують повторні ciao watchdog + cancellations, відновіть `OPENCLAW_DISABLE_BONJOUR=1` і використовуйте прямий + або Tailnet-маршрут. -## Поширені режими збоїв +## Поширені режими відмов - **Bonjour не працює між мережами**: використовуйте Tailnet або SSH. - **Multicast заблоковано**: деякі Wi‑Fi-мережі вимикають mDNS. -- **Оголошувач завис у probing/announcing**: хости із заблокованим multicast, - container bridges, WSL або зміни інтерфейсів можуть залишити оголошувач ciao у +- **Advertiser застряг у probing/announcing**: хости із заблокованим multicast, + container bridges, WSL або зміни інтерфейсів можуть залишити ciao advertiser у неоголошеному стані. OpenClaw повторює спробу кілька разів, а потім вимикає Bonjour - для поточного процесу Gateway замість нескінченного перезапуску оголошувача. + для поточного процесу Gateway замість нескінченного перезапуску advertiser. - **Docker bridge networking**: Bonjour автоматично вимикається у виявлених контейнерах. Установлюйте `OPENCLAW_DISABLE_BONJOUR=0` лише для host, macvlan або іншої - mDNS-сумісної мережі. -- **Сон / зміни інтерфейсів**: macOS може тимчасово втрачати результати mDNS; повторіть спробу. -- **Перегляд працює, але резолв — ні**: використовуйте прості імена машин (уникайте емодзі або - розділових знаків), а потім перезапустіть Gateway. Назва екземпляра сервісу утворюється з - імені хоста, тому надто складні назви можуть заплутувати деякі резолвери. + мережі з підтримкою mDNS. +- **Sleep / зміни інтерфейсів**: macOS може тимчасово втрачати результати mDNS; повторіть спробу. +- **Перегляд працює, але розв’язання не вдається**: тримайте імена машин простими (уникайте emoji або + пунктуації), потім перезапустіть Gateway. Ім’я екземпляра сервісу походить від + імені хоста, тому надто складні імена можуть заплутувати деякі резолвери. -## Екрановані назви екземплярів (`\032`) +## Екрановані імена екземплярів (`\032`) -Bonjour/DNS‑SD часто екранує байти в назвах екземплярів сервісу як десяткові послідовності `\DDD` -(наприклад, пробіли стають `\032`). +Bonjour/DNS‑SD часто екранує байти в іменах екземплярів сервісів як десяткові +послідовності `\DDD` (наприклад, пробіли стають `\032`). - Це нормально на рівні протоколу. -- UI мають декодувати їх для відображення (iOS використовує `BonjourEscapes.decode`). +- UI має декодувати для відображення (iOS використовує `BonjourEscapes.decode`). ## Вимкнення / конфігурація -- `openclaw plugins disable bonjour` вимикає оголошення multicast у LAN шляхом вимкнення вбудованого плагіна. -- `openclaw plugins enable bonjour` відновлює типовий плагін виявлення LAN. -- `OPENCLAW_DISABLE_BONJOUR=1` вимикає оголошення multicast у LAN без зміни конфігурації плагіна; приймаються truthy-значення `1`, `true`, `yes` і `on` (застаріле: `OPENCLAW_DISABLE_BONJOUR`). -- `OPENCLAW_DISABLE_BONJOUR=0` примусово вмикає оголошення multicast у LAN, зокрема у виявлених контейнерах; приймаються falsy-значення `0`, `false`, `no` і `off`. -- Коли `OPENCLAW_DISABLE_BONJOUR` не задано, Bonjour оголошується на звичайних хостах і автоматично вимикається у виявлених контейнерах. -- `gateway.bind` у `~/.openclaw/openclaw.json` керує режимом bind для Gateway. -- `OPENCLAW_SSH_PORT` перевизначає SSH-порт, коли оголошується `sshPort` (застаріле: `OPENCLAW_SSH_PORT`). -- `OPENCLAW_TAILNET_DNS` публікує підказку MagicDNS у TXT, коли ввімкнено повний режим mDNS (застаріле: `OPENCLAW_TAILNET_DNS`). -- `OPENCLAW_CLI_PATH` перевизначає оголошений шлях CLI (застаріле: `OPENCLAW_CLI_PATH`). +- `openclaw plugins disable bonjour` вимикає LAN multicast-оголошення, вимикаючи вбудований Plugin. +- `openclaw plugins enable bonjour` відновлює типовий LAN discovery Plugin. +- `OPENCLAW_DISABLE_BONJOUR=1` вимикає LAN multicast-оголошення без зміни конфігурації Plugin; прийняті truthy-значення: `1`, `true`, `yes` і `on` (legacy: `OPENCLAW_DISABLE_BONJOUR`). +- `OPENCLAW_DISABLE_BONJOUR=0` примусово вмикає LAN multicast-оголошення, зокрема всередині виявлених контейнерів; прийняті falsy-значення: `0`, `false`, `no` і `off`. +- Коли `OPENCLAW_DISABLE_BONJOUR` не задано, Bonjour оголошує на звичайних хостах і автоматично вимикається всередині виявлених контейнерів. +- `gateway.bind` у `~/.openclaw/openclaw.json` керує режимом прив’язки Gateway. +- `OPENCLAW_SSH_PORT` перевизначає SSH-порт, коли `sshPort` оголошується (legacy: `OPENCLAW_SSH_PORT`). +- `OPENCLAW_TAILNET_DNS` публікує підказку MagicDNS у TXT, коли ввімкнено повний режим mDNS (legacy: `OPENCLAW_TAILNET_DNS`). +- `OPENCLAW_CLI_PATH` перевизначає оголошений шлях CLI (legacy: `OPENCLAW_CLI_PATH`). ## Пов’язана документація - Політика виявлення та вибір транспорту: [Виявлення](/uk/gateway/discovery) -- Pairing і підтвердження Node: [Pairing Gateway](/uk/gateway/pairing) +- Сполучення вузла + схвалення: [Сполучення Gateway](/uk/gateway/pairing) diff --git a/docs/uk/reference/test.md b/docs/uk/reference/test.md index a99a3db7a..de58ab0fe 100644 --- a/docs/uk/reference/test.md +++ b/docs/uk/reference/test.md @@ -4,53 +4,53 @@ read_when: summary: Як запускати тести локально (vitest) і коли використовувати режими force/coverage title: Тести x-i18n: - generated_at: "2026-04-28T17:51:30Z" + generated_at: "2026-04-28T23:57:17Z" model: gpt-5.5 provider: openai - source_hash: d7a6f0978c874d50c60706f0336616859f6abdc49855ed768f14088c3a139e23 + source_hash: a2159520dd308440fce5d82ba251e1f3a37bd37a152b7c5542e92f5cbf924a34 source_path: reference/test.md workflow: 16 --- - Повний набір для тестування (набори, live, Docker): [Тестування](/uk/help/testing) -- `pnpm test:force`: Завершує будь-який завислий процес Gateway, що утримує стандартний контрольний порт, а потім запускає повний набір Vitest з ізольованим портом Gateway, щоб серверні тести не конфліктували із запущеним екземпляром. Використовуйте це, коли попередній запуск Gateway залишив порт 18789 зайнятим. -- `pnpm test:coverage`: Запускає unit-набір із покриттям V8 (через `vitest.unit.config.ts`). Це gate покриття unit для завантажених файлів, а не покриття всіх файлів усього репозиторію. Пороги: 70% для рядків/функцій/інструкцій і 55% для гілок. Оскільки `coverage.all` має значення false, gate вимірює файли, завантажені unit-набором покриття, замість того щоб вважати кожен вихідний файл із розділеної lane непокритим. -- `pnpm test:coverage:changed`: Запускає unit-покриття лише для файлів, змінених після `origin/main`. -- `pnpm test:changed`: дешевий розумний запуск тестів для змін. Він запускає точні цілі з прямих змін тестів, сусідні файли `*.test.ts`, явні зіставлення джерел і локальний граф імпортів. Широкі зміни конфігурації/пакетів пропускаються, якщо вони не зіставляються з точними тестами. -- `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed`: явний широкий запуск тестів для змін. Використовуйте його, коли зміна test harness/конфігурації/пакета має повертатися до ширшої поведінки Vitest для changed-test. -- `pnpm changed:lanes`: показує архітектурні lanes, спричинені diff відносно `origin/main`. -- `pnpm check:changed`: запускає розумний check gate для змін у diff відносно `origin/main`. Він запускає typecheck, lint і guard-команди для зачеплених архітектурних lanes, але не запускає тести Vitest. Використовуйте `pnpm test:changed` або явний `pnpm test ` для тестового підтвердження. -- `pnpm test`: спрямовує явні цілі файлів/директорій через scoped Vitest lanes. Запуски без цілі використовують фіксовані shard-групи й розгортаються до leaf-конфігурацій для локального паралельного виконання; група plugin завжди розгортається до shard-конфігурацій кожного plugin замість одного великого процесу root-проєкту. -- Запуски test wrapper завершуються коротким підсумком `[test] passed|failed|skipped ... in ...`. Власний рядок тривалості Vitest лишається деталізацією для кожного shard. -- Спільний стан тестів OpenClaw: використовуйте `src/test-utils/openclaw-test-state.ts` з Vitest, коли тесту потрібні ізольовані `HOME`, `OPENCLAW_STATE_DIR`, `OPENCLAW_CONFIG_PATH`, config fixture, workspace, директорія agent або auth-profile store. Docker/Bash E2E lanes, що source `scripts/lib/docker-e2e-image.sh`, можуть передати `docker_e2e_test_state_shell_b64