diff --git a/docs/uk/gateway/doctor.md b/docs/uk/gateway/doctor.md
index 40a123d4d..78ac5c3a8 100644
--- a/docs/uk/gateway/doctor.md
+++ b/docs/uk/gateway/doctor.md
@@ -1,20 +1,20 @@
---
read_when:
- - Додавання або змінення міграцій doctor
- - Запровадження несумісних змін конфігурації
+ - Додавання або зміна міграцій doctor
+ - Впровадження несумісних змін конфігурації
sidebarTitle: Doctor
-summary: 'Команда doctor: перевірки стану, міграції конфігурації та кроки виправлення'
+summary: 'Команда doctor: перевірки справності, міграції конфігурації та кроки відновлення'
title: Діагностика
x-i18n:
- generated_at: "2026-05-02T10:40:37Z"
+ generated_at: "2026-05-02T11:07:16Z"
model: gpt-5.5
provider: openai
- source_hash: 69eb52986fcf2f040fadf7a281ddb6afcc4993f8655dff108a0d1ea8bf8d46ca
+ source_hash: d306099cda1d7f6079ab94ce8bd4a716b8ccf9ab3637e14743c8a1c83db35ca6
source_path: gateway/doctor.md
workflow: 16
---
-`openclaw doctor` — це інструмент відновлення та міграції для OpenClaw. Він виправляє застарілі конфігурації/стан, перевіряє працездатність і надає дієві кроки для відновлення.
+`openclaw doctor` — це інструмент ремонту та міграції для OpenClaw. Він виправляє застарілі конфігурації/стан, перевіряє працездатність і надає практичні кроки для ремонту.
## Швидкий старт
@@ -22,7 +22,7 @@ x-i18n:
openclaw doctor
```
-### Headless-режим і режими автоматизації
+### Режими без інтерфейсу та автоматизації
@@ -30,7 +30,7 @@ openclaw doctor
openclaw doctor --yes
```
- Прийняти стандартні варіанти без запитів (зокрема кроки відновлення перезапуску/служби/пісочниці, коли застосовно).
+ Приймає стандартні значення без запитів (зокрема кроки ремонту перезапуску/сервісу/пісочниці, коли застосовно).
@@ -38,7 +38,7 @@ openclaw doctor
openclaw doctor --repair
```
- Застосувати рекомендовані відновлення без запитів (відновлення + перезапуски, де це безпечно).
+ Застосовує рекомендовані ремонти без запитів (ремонти + перезапуски там, де це безпечно).
@@ -46,7 +46,7 @@ openclaw doctor
openclaw doctor --repair --force
```
- Також застосувати агресивні відновлення (перезаписує користувацькі конфігурації супервізора).
+ Також застосовує агресивні ремонти (перезаписує користувацькі конфігурації supervisor).
@@ -54,7 +54,7 @@ openclaw doctor
openclaw doctor --non-interactive
```
- Запустити без запитів і застосувати лише безпечні міграції (нормалізація конфігурації + переміщення стану на диску). Пропускає дії перезапуску/служби/пісочниці, які потребують підтвердження людини. Міграції застарілого стану запускаються автоматично після виявлення.
+ Запускається без запитів і застосовує лише безпечні міграції (нормалізація конфігурації + переміщення стану на диску). Пропускає дії перезапуску/сервісу/пісочниці, які потребують підтвердження людини. Міграції застарілого стану запускаються автоматично, коли їх виявлено.
@@ -62,119 +62,119 @@ openclaw doctor
openclaw doctor --deep
```
- Сканувати системні служби на наявність додаткових інсталяцій gateway (launchd/systemd/schtasks).
+ Сканує системні сервіси на наявність додаткових встановлень gateway (launchd/systemd/schtasks).
-Якщо ви хочете переглянути зміни перед записом, спочатку відкрийте файл конфігурації:
+Якщо ви хочете переглянути зміни перед записом, спершу відкрийте файл конфігурації:
```bash
cat ~/.openclaw/openclaw.json
```
-## Що він робить (підсумок)
+## Що він робить (коротко)
-
- - Необов’язкове попереднє оновлення для git-інсталяцій (лише інтерактивно).
- - Перевірка актуальності протоколу UI (перезбирає Control UI, коли схема протоколу новіша).
- - Перевірка працездатності + запит на перезапуск.
- - Підсумок стану Skills (придатні/відсутні/заблоковані) і стан Plugin.
+
+ - Необов’язкове попереднє оновлення для встановлень із git (лише інтерактивно).
+ - Перевірка актуальності протоколу UI (перезбирає UI керування, коли схема протоколу новіша).
+ - Перевірка стану + запит на перезапуск.
+ - Зведення стану Skills (придатні/відсутні/заблоковані) і стан plugin.
- Нормалізація конфігурації для застарілих значень.
- Міграція конфігурації Talk із застарілих плоских полів `talk.*` у `talk.provider` + `talk.providers.`.
- Перевірки міграції браузера для застарілих конфігурацій розширення Chrome і готовності Chrome MCP.
- - Попередження щодо перевизначень провайдера OpenCode (`models.providers.opencode` / `models.providers.opencode-go`).
- - Попередження про затінення Codex OAuth (`models.providers.openai-codex`).
+ - Попередження про перевизначення провайдера OpenCode (`models.providers.opencode` / `models.providers.opencode-go`).
+ - Попередження про затінення OAuth Codex (`models.providers.openai-codex`).
- Перевірка передумов OAuth TLS для профілів OpenAI Codex OAuth.
- - Попередження про списки дозволених Plugin/інструментів, коли `plugins.allow` є обмежувальним, але політика інструментів усе ще запитує wildcard або інструменти, що належать Plugin.
- - Міграція застарілого стану на диску (сесії/каталог агента/автентифікація WhatsApp).
- - Міграція застарілих ключів контракту маніфесту Plugin (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
- - Міграція застарілого сховища Cron (`jobId`, `schedule.cron`, поля доставки/навантаження верхнього рівня, payload `provider`, прості fallback-завдання Webhook `notify: true`).
- - Міграція застарілої runtime-policy агента до `agents.defaults.agentRuntime` і `agents.list[].agentRuntime`.
- - Очищення застарілої конфігурації Plugin, коли Plugins увімкнені; коли `plugins.enabled=false`, застарілі посилання на Plugin вважаються інертною containment-конфігурацією та зберігаються.
+ - Попередження allowlist plugin/інструментів, коли `plugins.allow` обмежувальний, але політика інструментів усе ще запитує wildcard або інструменти, що належать plugin.
+ - Міграція застарілого стану на диску (сесії/каталог agent/автентифікація WhatsApp).
+ - Міграція застарілих ключів контракту маніфесту plugin (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
+ - Міграція застарілого сховища cron (`jobId`, `schedule.cron`, поля доставки/payload верхнього рівня, payload `provider`, прості fallback-завдання webhook `notify: true`).
+ - Міграція застарілої політики виконання agent до `agents.defaults.agentRuntime` і `agents.list[].agentRuntime`.
+ - Очищення застарілої конфігурації plugin, коли plugins увімкнено; коли `plugins.enabled=false`, застарілі посилання на plugin трактуються як інертна конфігурація обмеження та зберігаються.
- - Перевірка файлів блокування сесій і очищення застарілих блокувань.
- - Відновлення транскриптів сесій для дубльованих гілок переписування prompt, створених ураженими збірками 2026.4.24.
- - Виявлення tombstone для відновлення після перезапуску завислого субагента, з підтримкою `--fix` для очищення застарілих прапорців перерваного відновлення, щоб запуск не продовжував вважати дочірній процес перерваним через перезапуск.
- - Перевірки цілісності стану та дозволів (сесії, транскрипти, каталог стану).
+ - Перевірка lock-файлів сесій і очищення застарілих lock.
+ - Ремонт transcript сесій для дубльованих гілок переписування prompt, створених ураженими збірками 2026.4.24.
+ - Виявлення tombstone для відновлення після перезапуску завислого subagent, із підтримкою `--fix` для очищення застарілих прапорців перерваного відновлення, щоб startup не продовжував трактувати дочірній процес як перерваний перезапуском.
+ - Перевірки цілісності стану та дозволів (сесії, transcripts, каталог стану).
- Перевірки дозволів файлу конфігурації (chmod 600) під час локального запуску.
- - Працездатність автентифікації моделі: перевіряє закінчення строку дії OAuth, може оновлювати токени, що скоро спливуть, і повідомляє про стани cooldown/disabled auth-profile.
+ - Стан автентифікації моделей: перевіряє завершення строку дії OAuth, може оновлювати токени, що скоро спливають, і повідомляє про cooldown/вимкнені стани auth-profile.
- Виявлення додаткового каталогу workspace (`~/openclaw`).
-
- - Відновлення образу пісочниці, коли sandboxing увімкнено.
- - Міграція застарілої служби та виявлення додаткового gateway.
+
+ - Ремонт образу пісочниці, коли sandboxing увімкнено.
+ - Міграція застарілого сервісу та виявлення додаткового gateway.
- Міграція застарілого стану каналу Matrix (у режимі `--fix` / `--repair`).
- - Перевірки runtime Gateway (служба встановлена, але не запущена; кешована мітка launchd).
- - Попередження про стан каналу (зондуються з запущеного gateway).
- - Аудит конфігурації супервізора (launchd/systemd/schtasks) з необов’язковим відновленням.
- - Очищення середовища вбудованого проксі для служб gateway, які захопили значення shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` під час інсталяції або оновлення.
- - Перевірки найкращих практик runtime Gateway (Node проти Bun, шляхи менеджера версій).
- - Діагностика конфліктів порту Gateway (стандартний `18789`).
+ - Перевірки runtime Gateway (сервіс встановлено, але він не запущений; кешована мітка launchd).
+ - Попередження про стан каналів (перевіряються з запущеного gateway).
+ - Аудит конфігурації supervisor (launchd/systemd/schtasks) з необов’язковим ремонтом.
+ - Очищення середовища вбудованого proxy для сервісів gateway, які захопили значення shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` під час встановлення або оновлення.
+ - Перевірки найкращих практик runtime Gateway (Node проти Bun, шляхи менеджерів версій).
+ - Діагностика конфлікту порту gateway (типово `18789`).
- Попередження безпеки для відкритих політик DM.
- - Перевірки автентифікації Gateway для режиму локального токена (пропонує згенерувати токен, коли джерела токена немає; не перезаписує конфігурації token SecretRef).
- - Виявлення проблем pairing пристрою (очікувані первинні запити pairing, очікувані оновлення ролі/обсягу, дрейф застарілого локального кешу device-token і дрейф автентифікації paired-record).
+ - Перевірки автентифікації Gateway для режиму локального токена (пропонує генерацію токена, коли джерела токена немає; не перезаписує конфігурації SecretRef токена).
+ - Виявлення проблем device pairing (очікувані запити першого pairing, очікувані оновлення role/scope, застарілий drift кешу локального device-token і drift автентифікації paired-record).
- Перевірка systemd linger у Linux.
- - Перевірка розміру bootstrap-файлу workspace (попередження про обрізання/наближення до ліміту для контекстних файлів).
- - Перевірка стану shell completion і автоматична інсталяція/оновлення.
- - Перевірка готовності провайдера embeddings для пошуку пам’яті (локальна модель, remote API key або binary QMD).
- - Перевірки source-інсталяції (невідповідність pnpm workspace, відсутні assets UI, відсутній binary tsx).
+ - Перевірка розміру bootstrap-файлу workspace (попередження про обрізання/наближення до ліміту для файлів context).
+ - Перевірка стану shell completion і автоматичне встановлення/оновлення.
+ - Перевірка готовності провайдера embedding для memory search (локальна модель, remote API key або QMD binary).
+ - Перевірки встановлення з source (невідповідність workspace pnpm, відсутні UI assets, відсутній tsx binary).
- Записує оновлену конфігурацію + метадані wizard.
-## Backfill і reset для Dreams UI
+## Зворотне заповнення та скидання Dreams UI
-Сцена Dreams у Control UI містить дії **Backfill**, **Reset** і **Clear Grounded** для workflow grounded dreaming. Ці дії використовують RPC-методи в стилі gateway doctor, але вони **не** є частиною CLI-відновлення/міграції `openclaw doctor`.
+Сцена Dreams в UI керування містить дії **Backfill**, **Reset** і **Clear Grounded** для workflow grounded dreaming. Ці дії використовують RPC-методи gateway у стилі doctor, але вони **не** є частиною ремонту/міграції CLI `openclaw doctor`.
Що вони роблять:
-- **Backfill** сканує історичні файли `memory/YYYY-MM-DD.md` в активному workspace, запускає grounded REM diary pass і записує оборотні backfill-записи в `DREAMS.md`.
-- **Reset** видаляє з `DREAMS.md` лише ці позначені backfill diary entries.
-- **Clear Grounded** видаляє лише staged grounded-only short-term entries, які походять з історичного replay і ще не накопичили live recall або daily support.
+- **Backfill** сканує історичні файли `memory/YYYY-MM-DD.md` в активному workspace, запускає grounded REM diary pass і записує оборотні backfill entries у `DREAMS.md`.
+- **Reset** видаляє з `DREAMS.md` лише ті позначені backfill diary entries.
+- **Clear Grounded** видаляє лише staged grounded-only short-term entries, які прийшли з історичного replay і ще не накопичили live recall або daily support.
-Чого вони **не** роблять самі по собі:
+Чого вони самі по собі **не** роблять:
- вони не редагують `MEMORY.md`
- вони не запускають повні міграції doctor
-- вони не додають автоматично grounded candidates до live short-term promotion store, якщо ви явно не запустите staged CLI path спочатку
+- вони автоматично не додають grounded candidates у live short-term promotion store, якщо ви явно спершу не запустите staged CLI path
-Якщо ви хочете, щоб grounded historical replay впливав на звичайну deep promotion lane, натомість використовуйте CLI flow:
+Якщо ви хочете, щоб grounded historical replay впливав на звичайну deep promotion lane, використовуйте натомість CLI flow:
```bash
openclaw memory rem-backfill --path ./memory --stage-short-term
```
-Це додає grounded durable candidates до short-term dreaming store, залишаючи `DREAMS.md` поверхнею для перегляду.
+Це додає grounded durable candidates у short-term dreaming store, зберігаючи `DREAMS.md` як review surface.
## Детальна поведінка та обґрунтування
-
+
Якщо це git checkout і doctor запускається інтерактивно, він пропонує оновитися (fetch/rebase/build) перед запуском doctor.
- Якщо конфігурація містить застарілі форми значень (наприклад, `messages.ackReaction` без channel-specific override), doctor нормалізує їх до поточної схеми.
+ Якщо конфігурація містить застарілі форми значень (наприклад, `messages.ackReaction` без перевизначення для конкретного каналу), doctor нормалізує їх до поточної схеми.
- Це включає застарілі плоскі поля Talk. Поточна публічна конфігурація Talk — це `talk.provider` + `talk.providers.`. Doctor переписує старі форми `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` у мапу провайдера.
+ Це включає застарілі плоскі поля Talk. Поточна публічна конфігурація Talk — це `talk.provider` + `talk.providers.`. Doctor переписує старі форми `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` у provider map.
Doctor також попереджає, коли `plugins.allow` не порожній, а політика інструментів використовує
- wildcard або записи інструментів, що належать Plugin. `tools.allow: ["*"]` відповідає лише інструментам
- з Plugins, які фактично завантажуються; це не обходить ексклюзивний список дозволених Plugin.
+ wildcard або записи інструментів, що належать plugin. `tools.allow: ["*"]` відповідає лише інструментам
+ із plugins, які фактично завантажуються; це не обходить ексклюзивний allowlist plugin.
@@ -186,7 +186,7 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- Покаже застосовану міграцію.
- Перепише `~/.openclaw/openclaw.json` з оновленою схемою.
- Gateway також автоматично запускає міграції doctor під час запуску, коли виявляє застарілий формат конфігурації, тому застарілі конфігурації відновлюються без ручного втручання. Міграції сховища завдань Cron обробляються командою `openclaw doctor --fix`.
+ Gateway також автоматично запускає міграції doctor під час startup, коли виявляє застарілий формат конфігурації, тому застарілі конфігурації ремонтуються без ручного втручання. Міграції cron job store обробляються командою `openclaw doctor --fix`.
Поточні міграції:
@@ -195,7 +195,7 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- `routing.groupChat.historyLimit` → `messages.groupChat.historyLimit`
- `routing.groupChat.mentionPatterns` → `messages.groupChat.mentionPatterns`
- `routing.queue` → `messages.queue`
- - `routing.bindings` → `bindings` верхнього рівня
+ - `routing.bindings` → верхньорівневі `bindings`
- `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default`
- застарілі `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` → `talk.provider` + `talk.providers.`
- `routing.agentToAgent` → `tools.agentToAgent`
@@ -211,70 +211,70 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- `plugins.entries.voice-call.config.streaming.sttProvider` → `plugins.entries.voice-call.config.streaming.provider`
- `plugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold` → `plugins.entries.voice-call.config.streaming.providers.openai.*`
- `bindings[].match.accountID` → `bindings[].match.accountId`
- - Для каналів з іменованими `accounts`, але зі збереженими значеннями каналу верхнього рівня для одного облікового запису, перемістіть ці значення, прив’язані до облікового запису, у підвищений обліковий запис, вибраний для цього каналу (`accounts.default` для більшості каналів; Matrix може зберегти наявну відповідну іменовану/типову ціль)
+ - Для каналів із іменованими `accounts`, але із залишковими верхньорівневими значеннями каналу для одного облікового запису, перемістіть ці значення з областю дії облікового запису в підвищений обліковий запис, вибраний для цього каналу (`accounts.default` для більшості каналів; Matrix може зберегти наявну відповідну іменовану/стандартну ціль)
- `identity` → `agents.list[].identity`
- `agent.*` → `agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents)
- `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks` → `agents.defaults.models` + `agents.defaults.model.primary/fallbacks` + `agents.defaults.imageModel.primary/fallbacks`
- - видаліть `agents.defaults.llm`; використовуйте `models.providers..timeoutSeconds` для тайм-аутів повільних провайдерів/моделей
+ - видаліть `agents.defaults.llm`; використовуйте `models.providers..timeoutSeconds` для таймаутів повільних провайдерів/моделей
- `browser.ssrfPolicy.allowPrivateNetwork` → `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
- `browser.profiles.*.driver: "extension"` → `"existing-session"`
- - видаліть `browser.relayBindHost` (застаріле налаштування ретрансляції розширення)
- - застаріле `models.providers.*.api: "openai"` → `"openai-completions"` (запуск Gateway також пропускає провайдерів, у яких `api` встановлено на майбутнє або невідоме значення enum, замість аварійного завершення за закритою політикою)
+ - видаліть `browser.relayBindHost` (застаріле налаштування ретранслятора extension)
+ - застаріле `models.providers.*.api: "openai"` → `"openai-completions"` (під час запуску Gateway також пропускає провайдерів, у яких `api` встановлено на майбутнє або невідоме значення enum, замість аварійно завершуватися)
- Попередження doctor також містять настанови щодо типового облікового запису для багатооблікових каналів:
+ Попередження doctor також містять рекомендації щодо стандартного облікового запису для каналів із кількома обліковими записами:
- Якщо налаштовано два або більше записів `channels..accounts` без `channels..defaultAccount` або `accounts.default`, doctor попереджає, що резервна маршрутизація може вибрати неочікуваний обліковий запис.
- - Якщо `channels..defaultAccount` встановлено на невідомий ID облікового запису, doctor попереджає і перелічує налаштовані ID облікових записів.
+ - Якщо `channels..defaultAccount` встановлено на невідомий ID облікового запису, doctor попереджає та перелічує налаштовані ID облікових записів.
- Якщо ви вручну додали `models.providers.opencode`, `opencode-zen` або `opencode-go`, це перевизначає вбудований каталог OpenCode з `@mariozechner/pi-ai`. Це може примусово спрямувати моделі на неправильний API або обнулити вартість. Doctor попереджає, щоб ви могли видалити перевизначення й відновити маршрутизацію API та вартість для кожної моделі.
+ Якщо ви вручну додали `models.providers.opencode`, `opencode-zen` або `opencode-go`, це перевизначає вбудований каталог OpenCode з `@mariozechner/pi-ai`. Це може примусово спрямувати моделі на неправильний API або обнулити вартість. Doctor попереджає, щоб ви могли видалити перевизначення та відновити маршрутизацію API і вартість для кожної моделі.
- Якщо ваша конфігурація браузера все ще вказує на видалений шлях розширення Chrome, doctor нормалізує її до поточної моделі під’єднання Chrome MCP на локальному хості:
+ Якщо ваша конфігурація браузера досі вказує на видалений шлях extension Chrome, doctor нормалізує її до поточної моделі підключення Chrome MCP на локальному хості:
- `browser.profiles.*.driver: "extension"` стає `"existing-session"`
- `browser.relayBindHost` видаляється
Doctor також перевіряє шлях Chrome MCP на локальному хості, коли ви використовуєте `defaultProfile: "user"` або налаштований профіль `existing-session`:
- - перевіряє, чи встановлено Google Chrome на тому самому хості для типових профілів автопідключення
- - перевіряє виявлену версію Chrome і попереджає, коли вона нижча за Chrome 144
- - нагадує ввімкнути віддалене налагодження на сторінці інспектування браузера (наприклад, `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging` або `edge://inspect/#remote-debugging`)
+ - перевіряє, чи Google Chrome встановлено на тому самому хості для стандартних профілів автопідключення
+ - перевіряє виявлену версію Chrome і попереджає, якщо вона нижча за Chrome 144
+ - нагадує ввімкнути віддалене налагодження на сторінці інспекції браузера (наприклад `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging` або `edge://inspect/#remote-debugging`)
- Doctor не може ввімкнути це налаштування на стороні Chrome за вас. Chrome MCP на локальному хості все ще потребує:
+ Doctor не може ввімкнути налаштування на боці Chrome за вас. Chrome MCP на локальному хості все ще потребує:
- - браузера на основі Chromium 144+ на хості gateway/node
- - локально запущеного браузера
- - увімкненого віддаленого налагодження в цьому браузері
- - підтвердження першого запиту згоди на під’єднання в браузері
+ - браузер на основі Chromium 144+ на хості gateway/node
+ - браузер, що працює локально
+ - віддалене налагодження, увімкнене в цьому браузері
+ - схвалення першого запиту згоди на підключення в браузері
- Готовність тут стосується лише локальних передумов під’єднання. Existing-session зберігає поточні обмеження маршрутів Chrome MCP; розширені маршрути, як-от `responsebody`, експорт PDF, перехоплення завантажень і пакетні дії, все ще потребують керованого браузера або сирого профілю CDP.
+ Готовність тут стосується лише передумов локального підключення. Existing-session зберігає поточні обмеження маршрутів Chrome MCP; розширені маршрути на кшталт `responsebody`, експорту PDF, перехоплення завантажень і пакетних дій усе ще потребують керованого браузера або сирого профілю CDP.
Ця перевірка **не** застосовується до Docker, sandbox, remote-browser або інших headless-потоків. Вони й надалі використовують сирий CDP.
- Коли налаштовано OAuth-профіль OpenAI Codex, doctor перевіряє endpoint авторизації OpenAI, щоб переконатися, що локальний TLS-стек Node/OpenSSL може перевірити ланцюжок сертифікатів. Якщо перевірка завершується помилкою сертифіката (наприклад, `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`, прострочений сертифікат або самопідписаний сертифікат), doctor виводить настанови з виправлення для конкретної платформи. На macOS із Homebrew Node виправлення зазвичай таке: `brew postinstall ca-certificates`. З `--deep` перевірка виконується навіть тоді, коли gateway працює справно.
+ Коли налаштовано профіль OpenAI Codex OAuth, doctor опитує кінцеву точку авторизації OpenAI, щоб перевірити, що локальний стек Node/OpenSSL TLS може перевірити ланцюжок сертифікатів. Якщо перевірка завершується помилкою сертифіката (наприклад `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`, прострочений сертифікат або самопідписаний сертифікат), doctor виводить рекомендації з виправлення для конкретної платформи. На macOS із Homebrew Node виправлення зазвичай таке: `brew postinstall ca-certificates`. Із `--deep` перевірка виконується навіть тоді, коли gateway справний.
- Якщо раніше ви додали застарілі налаштування транспорту OpenAI у `models.providers.openai-codex`, вони можуть затінити вбудований шлях провайдера Codex OAuth, який новіші випуски використовують автоматично. Doctor попереджає, коли бачить ці старі налаштування транспорту разом із Codex OAuth, щоб ви могли видалити або переписати застаріле перевизначення транспорту й повернути вбудовану поведінку маршрутизації/резервування. Користувацькі проксі та перевизначення лише заголовків усе ще підтримуються й не викликають це попередження.
+ Якщо раніше ви додали застарілі налаштування транспорту OpenAI у `models.providers.openai-codex`, вони можуть затінити вбудований шлях провайдера Codex OAuth, який новіші випуски використовують автоматично. Doctor попереджає, коли бачить ці старі транспортні налаштування поруч із Codex OAuth, щоб ви могли видалити або переписати застаріле перевизначення транспорту й повернути вбудовану поведінку маршрутизації/резервування. Користувацькі проксі та перевизначення лише заголовків усе ще підтримуються й не запускають це попередження.
- Коли ввімкнено вбудований Plugin Codex, doctor також перевіряє, чи первинні посилання на моделі `openai-codex/*` все ще розв’язуються через типовий runner PI. Така комбінація коректна, коли ви хочете використовувати автентифікацію Codex OAuth/підписки через PI, але її легко сплутати з нативним app-server harness Codex. Doctor попереджає і вказує на явну форму app-server: `openai/*` плюс `agentRuntime.id: "codex"` або `OPENCLAW_AGENT_RUNTIME=codex`.
+ Коли ввімкнено вбудований Plugin Codex, doctor також перевіряє, чи первинні посилання на моделі `openai-codex/*` досі розв’язуються через стандартний runner PI. Ця комбінація коректна, коли вам потрібна автентифікація Codex OAuth/підписки через PI, але її легко сплутати з нативним harness сервера застосунку Codex. Doctor попереджає та вказує на явну форму app-server: `openai/*` плюс `agentRuntime.id: "codex"` або `OPENCLAW_AGENT_RUNTIME=codex`.
- Doctor не виправляє це автоматично, оскільки обидва маршрути коректні:
+ Doctor не виправляє це автоматично, бо обидва маршрути чинні:
- - `openai-codex/*` + PI означає «використовувати автентифікацію Codex OAuth/підписки через звичайний runner OpenClaw».
- - `openai/*` + `agentRuntime.id: "codex"` означає «запустити вбудований turn через нативний app-server Codex».
- - `/codex ...` означає «керувати або прив’язати нативну розмову Codex із чату».
- - `/acp ...` або `runtime: "acp"` означає «використовувати зовнішній адаптер ACP/acpx».
+ - `openai-codex/*` + PI означає "використовувати автентифікацію Codex OAuth/підписки через звичайний runner OpenClaw."
+ - `openai/*` + `agentRuntime.id: "codex"` означає "запустити вбудований turn через нативний app-server Codex."
+ - `/codex ...` означає "керувати нативною розмовою Codex або прив’язати її з чату."
+ - `/acp ...` або `runtime: "acp"` означає "використовувати зовнішній адаптер ACP/acpx."
Якщо з’являється попередження, виберіть потрібний маршрут і відредагуйте конфігурацію вручну. Залиште попередження без змін, коли PI Codex OAuth є навмисним.
-
- Doctor може мігрувати старіші структури на диску в поточну структуру:
+
+ Doctor може мігрувати старіші розкладки на диску в поточну структуру:
- Сховище сесій + транскрипти:
- з `~/.openclaw/sessions/` до `~/.openclaw/agents//sessions/`
@@ -282,218 +282,218 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- з `~/.openclaw/agent/` до `~/.openclaw/agents//agent/`
- Стан автентифікації WhatsApp (Baileys):
- із застарілих `~/.openclaw/credentials/*.json` (крім `oauth.json`)
- - до `~/.openclaw/credentials/whatsapp//...` (типовий ID облікового запису: `default`)
+ - до `~/.openclaw/credentials/whatsapp//...` (стандартний ID облікового запису: `default`)
- Ці міграції виконуються за принципом найкращого зусилля та є ідемпотентними; doctor виводитиме попередження, коли залишатиме будь-які застарілі папки як резервні копії. Gateway/CLI також автоматично мігрує застарілі сесії + каталог агента під час запуску, щоб історія/автентифікація/моделі потрапляли до шляху для кожного агента без ручного запуску doctor. Автентифікація WhatsApp навмисно мігрується лише через `openclaw doctor`. Нормалізація провайдера talk/карти провайдерів тепер порівнює за структурною рівністю, тому відмінності лише в порядку ключів більше не спричиняють повторних no-op змін `doctor --fix`.
+ Ці міграції виконуються за принципом best-effort та є ідемпотентними; doctor виведе попередження, коли залишить будь-які застарілі папки як резервні копії. Gateway/CLI також автоматично мігрує застарілі сесії + каталог агента під час запуску, щоб історія/автентифікація/моделі потрапили в шлях для кожного агента без ручного запуску doctor. Автентифікація WhatsApp навмисно мігрується лише через `openclaw doctor`. Нормалізація провайдера talk/мапи провайдерів тепер порівнює за структурною рівністю, тож відмінності лише в порядку ключів більше не спричиняють повторні no-op зміни `doctor --fix`.
-
- Doctor сканує всі встановлені маніфести Plugin на наявність застарілих ключів capabilities верхнього рівня (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Коли їх знайдено, він пропонує перемістити їх в об’єкт `contracts` і переписати файл маніфесту на місці. Ця міграція ідемпотентна; якщо ключ `contracts` уже має ті самі значення, застарілий ключ видаляється без дублювання даних.
+
+ Doctor сканує всі встановлені маніфести Plugin на наявність застарілих верхньорівневих ключів capability (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Коли знаходить їх, він пропонує перемістити їх в об’єкт `contracts` і переписати файл маніфесту на місці. Ця міграція ідемпотентна; якщо ключ `contracts` уже має ті самі значення, застарілий ключ видаляється без дублювання даних.
- Doctor також перевіряє сховище завдань Cron (`~/.openclaw/cron/jobs.json` типово або `cron.store`, якщо перевизначено) на наявність старих форм завдань, які планувальник усе ще приймає для сумісності.
+ Doctor також перевіряє сховище завдань cron (`~/.openclaw/cron/jobs.json` за замовчуванням або `cron.store`, коли перевизначено) на старі форми завдань, які планувальник досі приймає для сумісності.
- Поточні очищення Cron включають:
+ Поточні очищення cron містять:
- `jobId` → `id`
- `schedule.cron` → `schedule.expr`
- - поля payload верхнього рівня (`message`, `model`, `thinking`, ...) → `payload`
- - поля delivery верхнього рівня (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
- - псевдоніми доставки payload `provider` → явний `delivery.channel`
- - прості застарілі резервні webhook-завдання `notify: true` → явний `delivery.mode="webhook"` із `delivery.to=cron.webhook`
+ - верхньорівневі поля payload (`message`, `model`, `thinking`, ...) → `payload`
+ - верхньорівневі поля delivery (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
+ - псевдоніми delivery `provider` у payload → явний `delivery.channel`
+ - прості застарілі fallback-завдання webhook `notify: true` → явний `delivery.mode="webhook"` з `delivery.to=cron.webhook`
- Doctor автоматично мігрує завдання `notify: true` лише тоді, коли може зробити це без зміни поведінки. Якщо завдання поєднує застарілий резервний notify з наявним не-webhook режимом доставки, doctor попереджає і залишає це завдання для ручного перегляду.
+ Doctor автоматично мігрує завдання `notify: true` лише тоді, коли може зробити це без зміни поведінки. Якщо завдання поєднує застарілий fallback notify з наявним режимом delivery, що не є webhook, doctor попереджає та залишає це завдання для ручної перевірки.
- На Linux doctor також попереджає, коли crontab користувача все ще викликає застарілий `~/.openclaw/bin/ensure-whatsapp.sh`. Цей скрипт на локальному хості не підтримується поточним OpenClaw і може записувати хибні повідомлення `Gateway inactive` до `~/.openclaw/logs/whatsapp-health.log`, коли cron не може дістатися до користувацької шини systemd. Видаліть застарілий запис crontab за допомогою `crontab -e`; використовуйте `openclaw channels status --probe`, `openclaw doctor` і `openclaw gateway status` для поточних перевірок стану.
+ На Linux doctor також попереджає, коли crontab користувача досі викликає застарілий `~/.openclaw/bin/ensure-whatsapp.sh`. Цей скрипт на локальному хості не підтримується поточним OpenClaw і може записувати хибні повідомлення `Gateway inactive` до `~/.openclaw/logs/whatsapp-health.log`, коли cron не може досягти користувацької шини systemd. Видаліть застарілий запис crontab за допомогою `crontab -e`; використовуйте `openclaw channels status --probe`, `openclaw doctor` і `openclaw gateway status` для поточних перевірок справності.
- Діагностика сканує кожен каталог сеансів агента на застарілі файли блокування запису — файли, що залишилися після аварійного завершення сеансу. Для кожного знайденого файла блокування вона повідомляє: шлях, PID, чи PID досі активний, вік блокування та чи вважається воно застарілим (мертвий PID або старше ніж 30 хвилин). У режимі `--fix` / `--repair` вона автоматично видаляє застарілі файли блокування; інакше друкує примітку та вказує повторно запустити з `--fix`.
+ Doctor сканує кожен каталог сеансів агента на наявність застарілих файлів блокування запису — файлів, що залишилися після аварійного завершення сеансу. Для кожного знайденого файла блокування він повідомляє: шлях, PID, чи PID досі активний, вік блокування та чи вважається воно застарілим (мертвий PID або старше за 30 хвилин). У режимі `--fix` / `--repair` він автоматично видаляє застарілі файли блокування; інакше друкує примітку й просить повторно запустити з `--fix`.
-
- Діагностика сканує JSONL-файли сеансів агента на дубльовану форму гілки, створену помилкою переписування транскрипту підказки 2026.4.24: покинутий хід користувача з внутрішнім runtime-контекстом OpenClaw плюс активний сусідній хід із тим самим видимим запитом користувача. У режимі `--fix` / `--repair` діагностика створює резервну копію кожного ураженого файла поруч з оригіналом і переписує транскрипт на активну гілку, щоб історія gateway і читачі памʼяті більше не бачили дубльованих ходів.
+
+ Doctor сканує JSONL-файли сеансів агента на дубльовану форму гілки, створену помилкою переписування стенограми промпта від 2026.4.24: покинутий хід користувача з внутрішнім runtime-контекстом OpenClaw плюс активний сусідній хід із тим самим видимим промптом користувача. У режимі `--fix` / `--repair` doctor створює резервну копію кожного ураженого файла поруч з оригіналом і переписує стенограму до активної гілки, щоб історія gateway і читачі памʼяті більше не бачили дубльованих ходів.
Каталог стану — це операційний мозковий стовбур. Якщо він зникне, ви втратите сеанси, облікові дані, журнали та конфігурацію (якщо не маєте резервних копій деінде).
- Діагностика перевіряє:
+ Doctor перевіряє:
- **Відсутній каталог стану**: попереджає про катастрофічну втрату стану, пропонує повторно створити каталог і нагадує, що не може відновити відсутні дані.
- - **Права доступу до каталогу стану**: перевіряє можливість запису; пропонує виправити права доступу (і видає підказку `chown`, коли виявлено невідповідність власника/групи).
- - **Синхронізований із хмарою каталог стану на macOS**: попереджає, коли стан розташовано в iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) або `~/Library/CloudStorage/...`, оскільки шляхи з синхронізацією можуть спричиняти повільніший I/O і перегони блокування/синхронізації.
- - **Каталог стану на SD або eMMC у Linux**: попереджає, коли стан розташовано на джерелі монтування `mmcblk*`, оскільки випадковий I/O на SD або eMMC може бути повільнішим і швидше зношувати носій під час записів сеансів та облікових даних.
+ - **Права доступу до каталогу стану**: перевіряє можливість запису; пропонує відновити права доступу (і виводить підказку `chown`, коли виявлено невідповідність власника/групи).
+ - **Синхронізований із хмарою каталог стану на macOS**: попереджає, коли стан розташовано під iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) або `~/Library/CloudStorage/...`, оскільки шляхи із синхронізацією можуть спричиняти повільніший I/O та перегони блокування/синхронізації.
+ - **Каталог стану Linux на SD або eMMC**: попереджає, коли стан розташовано на джерелі монтування `mmcblk*`, оскільки випадковий I/O на SD або eMMC може бути повільнішим і швидше зношувати носій під час записів сеансів та облікових даних.
- **Відсутні каталоги сеансів**: `sessions/` і каталог сховища сеансів потрібні для збереження історії та уникнення аварій `ENOENT`.
- - **Невідповідність транскрипту**: попереджає, коли нещодавні записи сеансів не мають файлів транскриптів.
- - **Головний сеанс "1-line JSONL"**: позначає випадки, коли головний транскрипт має лише один рядок (історія не накопичується).
- - **Кілька каталогів стану**: попереджає, коли кілька папок `~/.openclaw` існують у різних домашніх каталогах або коли `OPENCLAW_STATE_DIR` вказує в інше місце (історія може розділятися між інсталяціями).
- - **Нагадування про віддалений режим**: якщо `gateway.mode=remote`, діагностика нагадує запустити її на віддаленому хості (стан зберігається там).
- - **Права доступу до конфігураційного файла**: попереджає, якщо `~/.openclaw/openclaw.json` доступний для читання групі/всім, і пропонує обмежити права до `600`.
+ - **Невідповідність стенограми**: попереджає, коли нещодавні записи сеансів мають відсутні файли стенограм.
+ - **Основний сеанс "1-line JSONL"**: позначає випадок, коли основна стенограма має лише один рядок (історія не накопичується).
+ - **Кілька каталогів стану**: попереджає, коли кілька папок `~/.openclaw` існують у домашніх каталогах або коли `OPENCLAW_STATE_DIR` вказує в інше місце (історія може розділитися між інсталяціями).
+ - **Нагадування про віддалений режим**: якщо `gateway.mode=remote`, doctor нагадує запустити його на віддаленому хості (стан зберігається там).
+ - **Права доступу до файла конфігурації**: попереджає, якщо `~/.openclaw/openclaw.json` доступний для читання групі/усім, і пропонує обмежити права до `600`.
-
- Діагностика перевіряє OAuth-профілі в сховищі автентифікації, попереджає, коли токени скоро закінчаться або вже закінчилися, і може оновити їх, коли це безпечно. Якщо OAuth/токен-профіль Anthropic застарів, вона пропонує ключ Anthropic API або шлях setup-token Anthropic. Запити на оновлення зʼявляються лише під час інтерактивного запуску (TTY); `--non-interactive` пропускає спроби оновлення.
+
+ Doctor перевіряє OAuth-профілі в сховищі автентифікації, попереджає, коли строк дії токенів закінчується або вже закінчився, і може оновити їх, коли це безпечно. Якщо OAuth/token-профіль Anthropic застарів, він пропонує API-ключ Anthropic або шлях setup-token Anthropic. Запити на оновлення зʼявляються лише під час інтерактивного запуску (TTY); `--non-interactive` пропускає спроби оновлення.
- Коли оновлення OAuth остаточно не вдається (наприклад, `refresh_token_reused`, `invalid_grant` або провайдер просить увійти знову), діагностика повідомляє, що потрібна повторна автентифікація, і друкує точну команду `openclaw models auth login --provider ...`, яку треба виконати.
+ Коли оновлення OAuth остаточно не вдається (наприклад `refresh_token_reused`, `invalid_grant` або провайдер просить увійти знову), doctor повідомляє, що потрібна повторна автентифікація, і друкує точну команду `openclaw models auth login --provider ...`, яку треба виконати.
- Діагностика також повідомляє про профілі автентифікації, які тимчасово непридатні через:
+ Doctor також повідомляє про auth-профілі, які тимчасово непридатні через:
- - короткі періоди очікування (ліміти швидкості/тайм-аути/помилки автентифікації)
- - довші вимкнення (помилки оплати/кредитів)
+ - короткі паузи відновлення (обмеження швидкості/таймаути/помилки автентифікації)
+ - довші вимкнення (помилки білінгу/кредитів)
- Якщо `hooks.gmail.model` задано, діагностика перевіряє посилання на модель за каталогом і allowlist та попереджає, коли його не вдається розвʼязати або воно заборонене.
+ Якщо `hooks.gmail.model` задано, doctor перевіряє посилання на модель за каталогом і списком дозволених та попереджає, коли воно не розвʼязується або заборонене.
-
- Коли sandboxing увімкнено, діагностика перевіряє Docker-образи й пропонує зібрати або перемкнутися на застарілі назви, якщо поточний образ відсутній.
+
+ Коли пісочницю ввімкнено, doctor перевіряє образи Docker і пропонує зібрати або перемкнутися на застарілі назви, якщо поточний образ відсутній.
-
- Діагностика видаляє застарілий створений OpenClaw проміжний стан залежностей Plugin у режимі `openclaw doctor --fix` / `openclaw doctor --repair`. Це охоплює застарілі згенеровані корені залежностей, старі каталоги install-stage і пакетне сміття від попереднього коду відновлення залежностей bundled-plugin.
+
+ Doctor видаляє застарілий створений OpenClaw проміжний стан залежностей Plugin у режимі `openclaw doctor --fix` / `openclaw doctor --repair`. Це охоплює застарілі згенеровані корені залежностей, старі каталоги етапу інсталяції та локальні для пакета залишки від попереднього коду відновлення залежностей bundled-plugin.
- Діагностика також може перевстановити налаштовані завантажувані plugins, коли конфігурація посилається на них, але локальний реєстр Plugin не може їх знайти. Запуск Gateway і перезавантаження конфігурації не запускають менеджери пакетів; встановлення Plugin лишається явною роботою doctor/install/update.
+ Doctor також може перевстановити налаштовані завантажувані plugins, коли конфігурація посилається на них, але локальний реєстр plugins не може їх знайти. Запуск Gateway і перезавантаження конфігурації не запускають менеджери пакетів; інсталяції plugins залишаються явною роботою doctor/install/update.
-
- Діагностика виявляє застарілі сервіси gateway (launchd/systemd/schtasks) і пропонує видалити їх та встановити сервіс OpenClaw з використанням поточного порту gateway. Вона також може сканувати додаткові gateway-подібні сервіси й друкувати підказки з очищення. Сервіси Gateway OpenClaw з іменами профілів вважаються повноцінними й не позначаються як "додаткові".
+
+ Doctor виявляє застарілі служби gateway (launchd/systemd/schtasks) і пропонує видалити їх та встановити службу OpenClaw з використанням поточного порту gateway. Він також може сканувати додаткові gateway-подібні служби й друкувати підказки з очищення. Служби gateway OpenClaw з іменами профілів вважаються повноцінними й не позначаються як "зайві".
- У Linux, якщо сервіс gateway рівня користувача відсутній, але існує сервіс Gateway OpenClaw рівня системи, діагностика не встановлює автоматично другий сервіс рівня користувача. Перевірте через `openclaw gateway status --deep` або `openclaw doctor --deep`, потім видаліть дублікат або задайте `OPENCLAW_SERVICE_REPAIR_POLICY=external`, коли життєвим циклом gateway керує системний супервізор.
+ У Linux, якщо служба gateway рівня користувача відсутня, але існує служба gateway OpenClaw системного рівня, doctor не встановлює другу службу рівня користувача автоматично. Перевірте за допомогою `openclaw gateway status --deep` або `openclaw doctor --deep`, потім видаліть дублікат або задайте `OPENCLAW_SERVICE_REPAIR_POLICY=external`, коли життєвим циклом gateway керує системний супервізор.
-
- Коли обліковий запис каналу Matrix має очікувану або доступну до дії міграцію застарілого стану, діагностика (у режимі `--fix` / `--repair`) створює знімок перед міграцією, а потім виконує найкращі можливі кроки міграції: міграцію застарілого стану Matrix і підготовку застарілого зашифрованого стану. Обидва кроки не є фатальними; помилки журналюються, а запуск продовжується. У режимі лише для читання (`openclaw doctor` без `--fix`) ця перевірка повністю пропускається.
+
+ Коли обліковий запис каналу Matrix має очікувану або придатну до виконання міграцію застарілого стану, doctor (у режимі `--fix` / `--repair`) створює знімок перед міграцією, а потім запускає кроки міграції з найкращим можливим результатом: міграцію застарілого стану Matrix і підготовку застарілого зашифрованого стану. Обидва кроки не є фатальними; помилки записуються в журнал, а запуск продовжується. У режимі лише для читання (`openclaw doctor` без `--fix`) цю перевірку повністю пропущено.
-
- Діагностика тепер перевіряє стан спарювання пристроїв як частину звичайного проходу перевірки здоровʼя.
+
+ Doctor тепер перевіряє стан сполучення пристроїв як частину звичайного проходу перевірки здоровʼя.
- Що вона повідомляє:
+ Що він повідомляє:
- - очікувані запити першого спарювання
- - очікувані підвищення ролі для вже спарених пристроїв
- - очікувані підвищення scope для вже спарених пристроїв
- - виправлення невідповідності відкритого ключа, коли id пристрою досі збігається, але ідентичність пристрою більше не збігається із затвердженим записом
- - спарені записи без активного токена для затвердженої ролі
- - спарені токени, чиї scopes вийшли за межі затвердженого базового рівня спарювання
- - локальні кешовані записи токенів пристрою для поточної машини, що передують ротації токена на боці gateway або містять застарілі метадані scope
+ - очікувані запити на перше сполучення
+ - очікувані підвищення ролі для вже сполучених пристроїв
+ - очікувані підвищення scope для вже сполучених пристроїв
+ - відновлення невідповідності публічного ключа, коли id пристрою досі збігається, але ідентичність пристрою більше не збігається із затвердженим записом
+ - сполучені записи без активного токена для затвердженої ролі
+ - сполучені токени, scope яких відхиляються від затвердженого базового рівня сполучення
+ - локальні кешовані записи device-token для поточної машини, які передують ротації токена на боці gateway або містять застарілі метадані scope
- Діагностика не схвалює автоматично запити спарювання і не ротує автоматично токени пристроїв. Натомість вона друкує точні наступні кроки:
+ Doctor не схвалює запити на сполучення автоматично й не обертає токени пристроїв автоматично. Натомість він друкує точні наступні кроки:
- - перегляньте очікувані запити через `openclaw devices list`
- - схваліть точний запит через `openclaw devices approve `
- - згенеруйте свіжий токен через `openclaw devices rotate --device --role `
- - видаліть і повторно схваліть застарілий запис через `openclaw devices remove `
+ - переглянути очікувані запити за допомогою `openclaw devices list`
+ - схвалити точний запит за допомогою `openclaw devices approve `
+ - обернути свіжий токен за допомогою `openclaw devices rotate --device --role `
+ - видалити й повторно схвалити застарілий запис за допомогою `openclaw devices remove `
- Це закриває поширену прогалину "already paired but still getting pairing required": діагностика тепер відрізняє перше спарювання від очікуваних підвищень ролі/scope і від застарілого дрейфу токена/ідентичності пристрою.
+ Це закриває поширений пробіл "already paired but still getting pairing required": doctor тепер відрізняє перше сполучення від очікуваних підвищень ролі/scope і від дрейфу застарілого токена/ідентичності пристрою.
- Діагностика видає попередження, коли провайдер відкритий для DM без allowlist або коли політику налаштовано небезпечним способом.
+ Doctor виводить попередження, коли провайдер відкритий для DM без списку дозволених або коли політику налаштовано небезпечно.
- Якщо запущено як сервіс користувача systemd, діагностика забезпечує ввімкнення linger, щоб gateway залишався активним після виходу з системи.
+ Якщо працює як користувацька служба systemd, doctor гарантує, що linger увімкнено, щоб gateway залишався активним після виходу із системи.
-
- Діагностика друкує підсумок стану робочої області для типового агента:
+
+ Doctor друкує зведення стану робочої області для стандартного агента:
- **Стан Skills**: підраховує eligible, missing-requirements і allowlist-blocked skills.
- **Застарілі каталоги робочої області**: попереджає, коли `~/openclaw` або інші застарілі каталоги робочої області існують поруч із поточною робочою областю.
- - **Стан Plugin**: підраховує увімкнені/вимкнені/помилкові plugins; перелічує ID Plugin для будь-яких помилок; повідомляє можливості bundle Plugin.
- - **Попередження сумісності Plugin**: позначає plugins, які мають проблеми сумісності з поточним runtime.
- - **Діагностика Plugin**: показує будь-які попередження або помилки часу завантаження, видані реєстром Plugin.
+ - **Стан Plugin**: підраховує ввімкнені/вимкнені/помилкові plugins; перелічує ID plugins для будь-яких помилок; повідомляє можливості bundle plugin.
+ - **Попередження сумісності Plugin**: позначає plugins, що мають проблеми сумісності з поточним runtime.
+ - **Діагностика Plugin**: показує будь-які попередження або помилки під час завантаження, виведені реєстром plugins.
-
- Діагностика перевіряє, чи bootstrap-файли робочої області (наприклад `AGENTS.md`, `CLAUDE.md` або інші вставлені контекстні файли) близькі до налаштованого бюджету символів або перевищують його. Вона повідомляє для кожного файла сирі та вставлені кількості символів, відсоток обрізання, причину обрізання (`max/file` або `max/total`) і загальну кількість вставлених символів як частку загального бюджету. Коли файли обрізані або близькі до ліміту, діагностика друкує поради з налаштування `agents.defaults.bootstrapMaxChars` і `agents.defaults.bootstrapTotalMaxChars`.
+
+ Doctor перевіряє, чи файли bootstrap робочої області (наприклад `AGENTS.md`, `CLAUDE.md` або інші впроваджені файли контексту) наближаються до налаштованого бюджету символів або перевищують його. Він повідомляє сирі й впроваджені кількості символів для кожного файла, відсоток обрізання, причину обрізання (`max/file` або `max/total`) і загальну кількість впроваджених символів як частку загального бюджету. Коли файли обрізано або вони близько до ліміту, doctor друкує поради з налаштування `agents.defaults.bootstrapMaxChars` і `agents.defaults.bootstrapTotalMaxChars`.
- Коли `openclaw doctor --fix` видаляє відсутній Plugin каналу, він також видаляє конфігурацію з областю каналу, що повисла й посилалася на цей Plugin: записи `channels.`, цілі heartbeat, які називали канал, і перевизначення `agents.*.models["/*"]`. Це запобігає циклам завантаження Gateway, коли runtime каналу зник, але конфігурація досі просить gateway привʼязатися до нього.
+ Коли `openclaw doctor --fix` видаляє відсутній Plugin каналу, він також видаляє завислу конфігурацію в межах каналу, яка посилалася на цей Plugin: записи `channels.`, цілі Heartbeat, що називали канал, і перевизначення `agents.*.models["/*"]`. Це запобігає циклам завантаження Gateway, коли runtime каналу зник, але конфігурація все ще просить gateway привʼязатися до нього.
- Діагностика перевіряє, чи встановлено автодоповнення клавішею Tab для поточної оболонки (zsh, bash, fish або PowerShell):
+ Doctor перевіряє, чи встановлено автодоповнення табуляцією для поточної оболонки (zsh, bash, fish або PowerShell):
- - Якщо профіль оболонки використовує повільний динамічний шаблон автодоповнення (`source <(openclaw completion ...)`), діагностика оновлює його до швидшого варіанта з кешованим файлом.
- - Якщо автодоповнення налаштовано в профілі, але файл кешу відсутній, діагностика автоматично відновлює кеш.
- - Якщо автодоповнення взагалі не налаштовано, діагностика пропонує встановити його (лише інтерактивний режим; пропускається з `--non-interactive`).
+ - Якщо профіль оболонки використовує повільний динамічний шаблон автодоповнення (`source <(openclaw completion ...)`), doctor оновлює його до швидшого варіанта кешованого файла.
+ - Якщо автодоповнення налаштовано в профілі, але файл кешу відсутній, doctor автоматично регенерує кеш.
+ - Якщо автодоповнення взагалі не налаштовано, doctor пропонує встановити його (лише інтерактивний режим; пропускається з `--non-interactive`).
- Запустіть `openclaw completion --write-state`, щоб вручну відновити кеш.
+ Запустіть `openclaw completion --write-state`, щоб регенерувати кеш вручну.
- Діагностика перевіряє готовність автентифікації локального токена gateway.
+ Doctor перевіряє готовність автентифікації локального токена gateway.
- - Якщо режим токена потребує токена й не існує джерела токена, діагностика пропонує згенерувати його.
- - Якщо `gateway.auth.token` керується SecretRef, але недоступний, діагностика попереджає й не перезаписує його відкритим текстом.
- - `openclaw doctor --generate-gateway-token` примусово генерує лише тоді, коли не налаштовано жодного токена SecretRef.
+ - Якщо режим токена потребує токена, а джерела токена немає, doctor пропонує згенерувати його.
+ - Якщо `gateway.auth.token` керується SecretRef, але недоступний, doctor попереджає й не перезаписує його відкритим текстом.
+ - `openclaw doctor --generate-gateway-token` примусово генерує лише тоді, коли не налаштовано жодного SecretRef токена.
- Деяким потокам відновлення потрібно перевіряти налаштовані облікові дані без послаблення fail-fast поведінки runtime.
+ Деяким потокам відновлення потрібно перевіряти налаштовані облікові дані, не послаблюючи fail-fast поведінку runtime.
- - `openclaw doctor --fix` тепер використовує ту саму модель підсумку SecretRef лише для читання, що й команди сімейства status, для цільових виправлень конфігурації.
- - Приклад: виправлення Telegram `allowFrom` / `groupAllowFrom` `@username` намагається використати налаштовані облікові дані бота, коли вони доступні.
- - Якщо токен бота Telegram налаштовано через SecretRef, але він недоступний у поточному шляху команди, діагностика повідомляє, що облікові дані налаштовані, але недоступні, і пропускає автоматичне розвʼязання замість аварійного завершення або помилкового повідомлення про відсутній токен.
+ - `openclaw doctor --fix` тепер використовує ту саму модель зведення SecretRef лише для читання, що й команди сімейства status, для цільових відновлень конфігурації.
+ - Приклад: відновлення Telegram `allowFrom` / `groupAllowFrom` `@username` намагається використати налаштовані облікові дані бота, коли вони доступні.
+ - Якщо токен бота Telegram налаштовано через SecretRef, але він недоступний у поточному шляху команди, doctor повідомляє, що облікові дані налаштовані, але недоступні, і пропускає автоматичне розвʼязання замість аварійного завершення або хибного повідомлення, що токен відсутній.
- Діагностика запускає перевірку здоровʼя й пропонує перезапустити gateway, коли він виглядає несправним.
+ Doctor запускає перевірку здоровʼя й пропонує перезапустити gateway, коли він здається нездоровим.
-
- Діагностика перевіряє, чи налаштований провайдер embedding для пошуку в памʼяті готовий для типового агента. Поведінка залежить від налаштованого backend і провайдера:
+
+ Doctor перевіряє, чи налаштований провайдер embedding для пошуку памʼяті готовий для стандартного агента. Поведінка залежить від налаштованого backend і провайдера:
- - **Бекенд QMD**: перевіряє, чи доступний і чи запускається бінарний файл `qmd`. Якщо ні, виводить інструкції з виправлення, зокрема npm-пакет і варіант ручного шляху до бінарного файлу.
- - **Явний локальний провайдер**: перевіряє наявність локального файлу моделі або розпізнаної URL-адреси віддаленої/завантажуваної моделі. Якщо відсутній, пропонує перейти на віддаленого провайдера.
- - **Явний віддалений провайдер** (`openai`, `voyage` тощо): перевіряє, чи ключ API присутній у середовищі або сховищі автентифікації. Якщо відсутній, виводить дієві підказки для виправлення.
+ - **Бекенд QMD**: перевіряє, чи доступний і чи може запускатися бінарний файл `qmd`. Якщо ні, виводить рекомендації з виправлення, зокрема npm-пакет і варіант ручного шляху до бінарного файлу.
+ - **Явний локальний провайдер**: перевіряє наявність локального файлу моделі або розпізнаної URL-адреси віддаленої/доступної для завантаження моделі. Якщо відсутня, пропонує перейти на віддаленого провайдера.
+ - **Явний віддалений провайдер** (`openai`, `voyage` тощо): перевіряє, чи є API-ключ у середовищі або сховищі автентифікації. Якщо його немає, виводить практичні підказки для виправлення.
- **Автоматичний провайдер**: спочатку перевіряє доступність локальної моделі, а потім пробує кожного віддаленого провайдера в порядку автоматичного вибору.
- Коли доступний кешований результат перевірки Gateway (Gateway був справний на момент перевірки), doctor зіставляє його результат із конфігурацією, видимою для CLI, і зазначає будь-яку невідповідність. Doctor не запускає новий embedding ping у стандартному шляху; використовуйте команду глибокого статусу пам’яті, коли потрібна жива перевірка провайдера.
+ Коли доступний кешований результат перевірки Gateway (Gateway був справний на момент перевірки), doctor зіставляє його результат із конфігурацією, видимою для CLI, і зазначає будь-які розбіжності. Doctor не запускає новий embedding ping на стандартному шляху; використовуйте команду глибокого статусу пам’яті, коли потрібна жива перевірка провайдера.
- Використовуйте `openclaw memory status --deep`, щоб перевірити готовність embedding під час виконання.
+ Використовуйте `openclaw memory status --deep`, щоб перевірити готовність embeddings під час виконання.
-
+
Якщо Gateway справний, doctor запускає перевірку стану каналів і повідомляє попередження із запропонованими виправленнями.
-
- Doctor перевіряє встановлену конфігурацію supervisor (launchd/systemd/schtasks) на відсутні або застарілі типові значення (наприклад, залежності systemd від network-online і затримку перезапуску). Коли він знаходить невідповідність, рекомендує оновлення й може переписати файл служби/завдання до поточних типових значень.
+
+ Doctor перевіряє встановлену конфігурацію супервізора (launchd/systemd/schtasks) на відсутні або застарілі стандартні налаштування (наприклад, залежності systemd від network-online і затримку перезапуску). Коли він знаходить невідповідність, рекомендує оновлення й може переписати файл служби/завдання до поточних стандартних налаштувань.
Примітки:
- - `openclaw doctor` запитує підтвердження перед переписуванням конфігурації supervisor.
- - `openclaw doctor --yes` приймає типові запити на відновлення.
+ - `openclaw doctor` запитує підтвердження перед переписуванням конфігурації супервізора.
+ - `openclaw doctor --yes` приймає стандартні запити на відновлення.
- `openclaw doctor --repair` застосовує рекомендовані виправлення без запитів.
- - `openclaw doctor --repair --force` перезаписує власні конфігурації supervisor.
- - `OPENCLAW_SERVICE_REPAIR_POLICY=external` зберігає doctor у режимі лише читання для життєвого циклу служби Gateway. Він усе ще повідомляє про стан служби та виконує відновлення, не пов’язані зі службою, але пропускає встановлення/запуск/перезапуск/bootstrap служби, переписування конфігурації supervisor і очищення застарілих служб, оскільки цим життєвим циклом керує зовнішній supervisor.
- - У Linux doctor не переписує метадані команди/entrypoint, доки відповідний systemd-модуль Gateway активний. Він також ігнорує неактивні додаткові gateway-подібні модулі, що не є застарілими, під час сканування дубльованих служб, щоб супутні файли служб не створювали зайвого шуму очищення.
- - Якщо токенна автентифікація потребує токена, а `gateway.auth.token` керується SecretRef, встановлення/відновлення служби doctor перевіряє SecretRef, але не зберігає розв’язані відкриті значення токена в метаданих середовища служби supervisor.
- - Doctor виявляє керовані значення середовища служби на основі `.env`/SecretRef, які старіші встановлення LaunchAgent, systemd або Windows Scheduled Task вбудували inline, і переписує метадані служби так, щоб ці значення завантажувалися з джерела виконання, а не з визначення supervisor.
- - Doctor виявляє, коли команда служби все ще фіксує старий `--port` після зміни `gateway.port`, і переписує метадані служби на поточний порт.
- - Якщо токенна автентифікація потребує токена, а налаштований SecretRef токена не розв’язується, doctor блокує шлях встановлення/відновлення з дієвими інструкціями.
+ - `openclaw doctor --repair --force` перезаписує власні конфігурації супервізора.
+ - `OPENCLAW_SERVICE_REPAIR_POLICY=external` залишає doctor у режимі лише читання для життєвого циклу служби Gateway. Він усе ще повідомляє стан служби й виконує відновлення, не пов’язані зі службою, але пропускає встановлення/запуск/перезапуск/bootstrap служби, переписування конфігурації супервізора та очищення застарілих служб, оскільки цим життєвим циклом керує зовнішній супервізор.
+ - У Linux doctor не переписує метадані команди/точки входу, поки відповідний systemd-unit Gateway активний. Він також ігнорує неактивні додаткові не-застарілі units, схожі на Gateway, під час сканування дубльованих служб, щоб допоміжні файли служб не створювали зайвого шуму під час очищення.
+ - Якщо token auth потребує токена, а `gateway.auth.token` керується SecretRef, встановлення/відновлення служби doctor перевіряє SecretRef, але не зберігає розв’язані значення токена у відкритому тексті в метаданих середовища служби супервізора.
+ - Doctor виявляє керовані значення середовища служби на основі `.env`/SecretRef, які старіші встановлення LaunchAgent, systemd або Windows Scheduled Task вбудували inline, і переписує метадані служби так, щоб ці значення завантажувалися з runtime-джерела, а не з визначення супервізора.
+ - Doctor виявляє, коли команда служби все ще фіксує старий `--port` після змін `gateway.port`, і переписує метадані служби на поточний порт.
+ - Якщо token auth потребує токена, а налаштований token SecretRef не розв’язується, doctor блокує шлях встановлення/відновлення з практичними рекомендаціями.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password`, а `gateway.auth.mode` не задано, doctor блокує встановлення/відновлення, доки режим не буде задано явно.
- - Для користувацьких systemd-модулів Linux перевірки розбіжностей токена doctor тепер включають джерела `Environment=` і `EnvironmentFile=` під час порівняння метаданих автентифікації служби.
- - Відновлення служб doctor відмовляються переписувати, зупиняти або перезапускати службу Gateway зі старішого бінарного файлу OpenClaw, коли конфігурацію востаннє було записано новішою версією. Див. [усунення несправностей Gateway](/uk/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
+ - Для Linux user-systemd units перевірки розбіжностей токенів doctor тепер охоплюють джерела і `Environment=`, і `EnvironmentFile=` під час порівняння метаданих автентифікації служби.
+ - Відновлення служби doctor відмовляється переписувати, зупиняти або перезапускати службу Gateway зі старішого бінарного файлу OpenClaw, коли конфігурацію востаннє було записано новішою версією. Див. [усунення несправностей Gateway](/uk/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- Ви завжди можете примусово виконати повне переписування через `openclaw gateway install --force`.
-
- Doctor перевіряє середовище виконання служби (PID, останній статус виходу) і попереджає, коли службу встановлено, але вона фактично не запущена. Він також перевіряє конфлікти портів на порту Gateway (типово `18789`) і повідомляє ймовірні причини (Gateway уже запущено, SSH-тунель).
+
+ Doctor перевіряє runtime служби (PID, останній код виходу) і попереджає, коли службу встановлено, але вона фактично не працює. Він також перевіряє конфлікти портів на порту Gateway (стандартно `18789`) і повідомляє ймовірні причини (Gateway уже працює, SSH-тунель).
-
- Doctor попереджає, коли служба Gateway працює на Bun або за шляхом Node, керованим версіями (`nvm`, `fnm`, `volta`, `asdf` тощо). Канали WhatsApp + Telegram потребують Node, а шляхи менеджера версій можуть зламатися після оновлень, оскільки служба не завантажує ініціалізацію вашої оболонки. Doctor пропонує мігрувати на системне встановлення Node, коли воно доступне (Homebrew/apt/choco).
+
+ Doctor попереджає, коли служба Gateway працює на Bun або шляху Node, керованому версіями (`nvm`, `fnm`, `volta`, `asdf` тощо). Канали WhatsApp + Telegram потребують Node, а шляхи менеджерів версій можуть ламатися після оновлень, бо служба не завантажує ініціалізацію вашої shell. Doctor пропонує мігрувати на системне встановлення Node, коли воно доступне (Homebrew/apt/choco).
- Нововстановлені або відновлені служби зберігають явні корені середовища (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) і стабільні користувацькі каталоги bin, але припущені резервні каталоги менеджера версій записуються до PATH служби лише тоді, коли ці каталоги існують на диску. Аудит приймає наявні стабільні користувацькі каталоги bin і явні корені середовища; він не попереджає, що потрібні відсутні, неналаштовані записи `$HOME/.npm-global/bin`, `$HOME/bin` або `$HOME/.nix-profile/bin`.
+ Нововстановлені або відновлені macOS LaunchAgents використовують канонічний системний PATH (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) замість копіювання інтерактивного shell PATH, тому Volta, asdf, fnm, pnpm та інші каталоги менеджерів версій не змінюють, який Node визначають дочірні процеси. Служби Linux усе ще зберігають явні корені середовища (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) і стабільні каталоги user-bin, але вгадані fallback-каталоги менеджерів версій записуються до PATH служби лише тоді, коли ці каталоги існують на диску.
-
- Doctor зберігає будь-які зміни конфігурації та проставляє метадані майстра, щоб зафіксувати запуск doctor.
+
+ Doctor зберігає будь-які зміни конфігурації й ставить позначку в метаданих майстра, щоб зафіксувати запуск doctor.
-
- Doctor пропонує систему пам’яті робочого простору, коли її немає, і виводить пораду щодо резервного копіювання, якщо робочий простір ще не перебуває під git.
+
+ Doctor пропонує систему пам’яті робочого простору, коли її немає, і виводить пораду щодо backup, якщо робочий простір ще не перебуває під керуванням git.
- Див. [/concepts/agent-workspace](/uk/concepts/agent-workspace), щоб отримати повний посібник зі структури робочого простору та резервного копіювання git (рекомендовано приватний GitHub або GitLab).
+ Див. [/concepts/agent-workspace](/uk/concepts/agent-workspace), щоб отримати повний посібник зі структури робочого простору та backup у git (рекомендовано приватний GitHub або GitLab).
## Пов’язане
-- [Інструкція з експлуатації Gateway](/uk/gateway)
+- [Runbook Gateway](/uk/gateway)
- [Усунення несправностей Gateway](/uk/gateway/troubleshooting)