diff --git a/docs/uk/gateway/doctor.md b/docs/uk/gateway/doctor.md
index 0b2fd6e97..45bccf1f3 100644
--- a/docs/uk/gateway/doctor.md
+++ b/docs/uk/gateway/doctor.md
@@ -1,20 +1,20 @@
---
read_when:
- Додавання або змінення міграцій doctor
- - Впровадження несумісних змін конфігурації
+ - Запровадження несумісних змін конфігурації
sidebarTitle: Doctor
-summary: 'Команда doctor: перевірки стану, міграції конфігурації та кроки відновлення'
+summary: 'Команда Doctor: перевірки справності, міграції конфігурації та кроки виправлення'
title: Діагностика
x-i18n:
- generated_at: "2026-05-04T22:54:33Z"
+ generated_at: "2026-05-05T00:55:58Z"
model: gpt-5.5
provider: openai
- source_hash: 86d862ccc56c0d979c2a957272b2e2f5c5fc7bb1ae8142748630ede0003891de
+ source_hash: f8386e5d733ab599c78b96ad04135c8168cacdc55e864676aac26cd095a72685
source_path: gateway/doctor.md
workflow: 16
---
-`openclaw doctor` — це інструмент ремонту та міграції для OpenClaw. Він виправляє застарілі конфігурацію/стан, перевіряє працездатність і надає практичні кроки для ремонту.
+`openclaw doctor` — це інструмент ремонту й міграції для OpenClaw. Він виправляє застарілі конфігурацію/стан, перевіряє справність і надає практичні кроки для ремонту.
## Швидкий старт
@@ -30,7 +30,7 @@ openclaw doctor
openclaw doctor --yes
```
- Прийняти типові значення без запитів (зокрема кроки ремонту перезапуску/служби/пісочниці, коли застосовно).
+ Приймати стандартні значення без запитів (зокрема кроки перезапуску/служби/ремонту sandbox, коли застосовно).
@@ -46,7 +46,7 @@ openclaw doctor
openclaw doctor --repair --force
```
- Також застосувати агресивні ремонти (перезаписує користувацькі конфігурації супервізора).
+ Застосувати також агресивні ремонти (перезаписує користувацькі конфігурації supervisor).
@@ -54,7 +54,7 @@ openclaw doctor
openclaw doctor --non-interactive
```
- Запустити без запитів і застосовувати лише безпечні міграції (нормалізація конфігурації + переміщення стану на диску). Пропускає дії перезапуску/служби/пісочниці, які потребують підтвердження людини. Міграції застарілого стану запускаються автоматично, коли їх виявлено.
+ Запустити без запитів і застосувати лише безпечні міграції (нормалізація конфігурації + переміщення стану на диску). Пропускає дії перезапуску/служби/sandbox, які потребують підтвердження людини. Міграції застарілого стану запускаються автоматично, коли їх виявлено.
@@ -62,12 +62,12 @@ openclaw doctor
openclaw doctor --deep
```
- Сканувати системні служби на наявність додаткових встановлень gateway (launchd/systemd/schtasks).
+ Просканувати системні служби на додаткові встановлення gateway (launchd/systemd/schtasks).
-Якщо ви хочете переглянути зміни перед записом, спершу відкрийте файл конфігурації:
+Якщо хочете переглянути зміни перед записом, спершу відкрийте файл конфігурації:
```bash
cat ~/.openclaw/openclaw.json
@@ -76,11 +76,11 @@ cat ~/.openclaw/openclaw.json
## Що він робить (підсумок)
-
- - Необов’язкове попереднє оновлення для встановлень із git (лише інтерактивно).
+
+ - Необов’язкове попереднє оновлення для git-встановлень (лише інтерактивно).
- Перевірка актуальності протоколу UI (перезбирає Control UI, коли схема протоколу новіша).
- - Перевірка стану + запит на перезапуск.
- - Підсумок стану Skills (придатні/відсутні/заблоковані) і стан Plugin.
+ - Перевірка справності + запит на перезапуск.
+ - Підсумок стану Skills (придатні/відсутні/заблоковані) і стан plugin.
@@ -90,47 +90,47 @@ cat ~/.openclaw/openclaw.json
- Попередження про перевизначення провайдера OpenCode (`models.providers.opencode` / `models.providers.opencode-go`).
- Попередження про затінення Codex OAuth (`models.providers.openai-codex`).
- Перевірка передумов OAuth TLS для профілів OpenAI Codex OAuth.
- - Попередження allowlist Plugin/інструментів, коли `plugins.allow` обмежувальний, але політика інструментів усе ще запитує wildcard або інструменти, що належать Plugin.
- - Міграція застарілого стану на диску (сеанси/каталог агента/автентифікація WhatsApp).
- - Міграція застарілих ключів контракту маніфесту Plugin (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
- - Міграція застарілого сховища cron (`jobId`, `schedule.cron`, поля доставки/навантаження верхнього рівня, payload `provider`, прості резервні webhook-завдання `notify: true`).
- - Міграція застарілої runtime-політики агента до `agents.defaults.agentRuntime` і `agents.list[].agentRuntime`.
- - Очищення застарілої конфігурації Plugin, коли plugins увімкнено; коли `plugins.enabled=false`, застарілі посилання на Plugin вважаються інертною конфігурацією стримування й зберігаються.
+ - Попередження allowlist plugin/інструментів, коли `plugins.allow` обмежувальний, але політика інструментів усе ще запитує wildcard або інструменти, що належать plugin.
+ - Міграція застарілого стану на диску (sessions/agent dir/автентифікація WhatsApp).
+ - Міграція застарілих ключів контракту маніфесту plugin (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
+ - Міграція застарілого сховища cron (`jobId`, `schedule.cron`, поля delivery/payload верхнього рівня, payload `provider`, прості fallback-завдання webhook `notify: true`).
+ - Міграція застарілої політики runtime агента до `agents.defaults.agentRuntime` і `agents.list[].agentRuntime`.
+ - Очищення застарілої конфігурації plugin, коли plugins увімкнено; коли `plugins.enabled=false`, застарілі посилання на plugin вважаються інертною конфігурацією стримування та зберігаються.
- - Перевірка файлів блокування сеансів і очищення застарілих блокувань.
- - Ремонт транскриптів сеансів для дубльованих гілок переписування підказок, створених ураженими збірками 2026.4.24.
- - Виявлення tombstone для відновлення після перезапуску завислих subagent, з підтримкою `--fix` для очищення застарілих aborted recovery flags, щоб запуск не продовжував вважати дочірній процес перерваним під час перезапуску.
- - Перевірки цілісності стану та дозволів (сеанси, транскрипти, каталог стану).
+ - Перевірка lock-файлів session і очищення застарілих lock-файлів.
+ - Ремонт transcript session для дубльованих гілок prompt-rewrite, створених ураженими збірками 2026.4.24.
+ - Виявлення tombstone для restart-recovery застряглого subagent, з підтримкою `--fix` для очищення застарілих прапорців перерваного відновлення, щоб startup не продовжував вважати дочірній процес restart-aborted.
+ - Перевірки цілісності стану та дозволів (sessions, transcripts, state dir).
- Перевірки дозволів файлу конфігурації (chmod 600) під час локального запуску.
- - Стан автентифікації моделі: перевіряє завершення OAuth, може оновлювати токени, термін яких спливає, і повідомляє про стани cooldown/disabled для auth-profile.
- - Виявлення додаткового каталогу робочого простору (`~/openclaw`).
+ - Справність автентифікації моделі: перевіряє завершення терміну OAuth, може оновлювати токени, термін яких минає, і повідомляє стани cooldown/disabled auth-profile.
+ - Виявлення додаткового каталогу workspace (`~/openclaw`).
-
- - Ремонт образу пісочниці, коли sandboxing увімкнено.
- - Міграція застарілих служб і виявлення додаткових gateway.
+
+ - Ремонт образу sandbox, коли sandboxing увімкнено.
+ - Міграція застарілої служби та виявлення додаткового gateway.
- Міграція застарілого стану каналу Matrix (у режимі `--fix` / `--repair`).
- - Runtime-перевірки Gateway (службу встановлено, але не запущено; кешована мітка launchd).
- - Попередження про стан каналу (пробуються із запущеного gateway).
- - Аудит конфігурації супервізора (launchd/systemd/schtasks) з необов’язковим ремонтом.
+ - Перевірки runtime Gateway (служба встановлена, але не запущена; кешована мітка launchd).
+ - Попередження стану каналу (перевіряються з запущеного gateway).
+ - Аудит конфігурації supervisor (launchd/systemd/schtasks) з необов’язковим ремонтом.
- Очищення середовища вбудованого proxy для служб gateway, які захопили значення shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` під час встановлення або оновлення.
- - Перевірки найкращих практик runtime Gateway (Node проти Bun, шляхи version-manager).
- - Діагностика конфлікту портів Gateway (типовий `18789`).
+ - Перевірки найкращих практик runtime Gateway (Node проти Bun, шляхи менеджера версій).
+ - Діагностика конфліктів порту Gateway (стандартно `18789`).
-
+
- Попередження безпеки для відкритих політик DM.
- Перевірки автентифікації Gateway для режиму локального токена (пропонує генерацію токена, коли джерела токена немає; не перезаписує конфігурації token SecretRef).
- - Виявлення проблем зі сполученням пристрою (очікувані первинні запити на сполучення, очікувані підвищення ролі/обсягу, drift застарілого локального кешу device-token і drift автентифікації paired-record).
+ - Виявлення проблем pairing пристрою (очікувані перші запити pair, очікувані оновлення ролі/scope, drift застарілого локального кешу device-token і drift автентифікації paired-record).
-
+
- Перевірка systemd linger у Linux.
- - Перевірка розміру bootstrap-файлу робочого простору (попередження про обрізання/наближення до ліміту для контекстних файлів).
- - Перевірка готовності Skills для типового агента; повідомляє про дозволені skills із відсутніми bins, env, config або вимогами ОС, а `--fix` може вимкнути недоступні skills у `skills.entries`.
- - Перевірка стану shell completion та автоматичне встановлення/оновлення.
+ - Перевірка розміру bootstrap-файлу workspace (попередження про обрізання/наближення до ліміту для файлів контексту).
+ - Перевірка готовності Skills для стандартного агента; повідомляє дозволені skills з відсутніми bins, env, config або вимогами ОС, а `--fix` може вимкнути недоступні skills у `skills.entries`.
+ - Перевірка стану shell completion і автоматичне встановлення/оновлення.
- Перевірка готовності провайдера embedding для пошуку пам’яті (локальна модель, remote API key або QMD binary).
- Перевірки source install (невідповідність pnpm workspace, відсутні UI assets, відсутній tsx binary).
- Записує оновлену конфігурацію + метадані wizard.
@@ -138,59 +138,59 @@ cat ~/.openclaw/openclaw.json
-## Зворотне заповнення та скидання Dreams UI
+## Backfill і reset UI Dreams
-Сцена Control UI Dreams містить дії **Backfill**, **Reset** і **Clear Grounded** для grounded dreaming workflow. Ці дії використовують RPC-методи у стилі gateway doctor, але вони **не** є частиною ремонту/міграції `openclaw doctor` CLI.
+Сцена Dreams у Control UI містить дії **Backfill**, **Reset** і **Clear Grounded** для grounded dreaming workflow. Ці дії використовують RPC-методи в стилі gateway doctor, але вони **не** є частиною ремонту/міграції CLI `openclaw doctor`.
Що вони роблять:
-- **Backfill** сканує історичні файли `memory/YYYY-MM-DD.md` в активному робочому просторі, запускає прохід grounded REM diary і записує оборотні записи backfill у `DREAMS.md`.
-- **Reset** видаляє лише ці позначені backfill diary entries із `DREAMS.md`.
-- **Clear Grounded** видаляє лише staged grounded-only short-term entries, які походять з історичного replay і ще не накопичили live recall або daily support.
+- **Backfill** сканує історичні файли `memory/YYYY-MM-DD.md` в активному workspace, запускає прохід grounded REM diary і записує оборотні backfill-записи в `DREAMS.md`.
+- **Reset** видаляє лише ці позначені backfill-записи diary з `DREAMS.md`.
+- **Clear Grounded** видаляє лише staged grounded-only short-term entries, що походять з історичного replay і ще не накопичили live recall або daily support.
-Що вони **не** роблять самі по собі:
+Чого вони **не** роблять самі по собі:
- вони не редагують `MEMORY.md`
-- вони не запускають повні doctor migrations
-- вони не додають grounded candidates автоматично до live short-term promotion store, якщо ви спершу явно не запустите staged CLI path
+- вони не запускають повні міграції doctor
+- вони не додають 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` поверхнею перегляду.
-## Докладна поведінка та обґрунтування
+## Детальна поведінка й обґрунтування
-
+
Якщо це git checkout і doctor працює інтерактивно, він пропонує оновити (fetch/rebase/build) перед запуском doctor.
- Якщо конфігурація містить застарілі форми значень (наприклад, `messages.ackReaction` без перевизначення для конкретного каналу), 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.
- Doctor також попереджає, коли `plugins.allow` непорожній і політика інструментів використовує
- wildcard або записи інструментів, що належать Plugin. `tools.allow: ["*"]` відповідає лише інструментам
- із plugins, які фактично завантажуються; це не обходить ексклюзивний
- allowlist Plugin. Doctor записує `plugins.bundledDiscovery: "compat"` для мігрованих
+ Doctor також попереджає, коли `plugins.allow` не порожній, а політика інструментів використовує
+ wildcard або записи інструментів, що належать plugin. `tools.allow: ["*"]` відповідає лише інструментам
+ із plugins, які фактично завантажуються; це не обходить ексклюзивний allowlist plugin.
+ Doctor записує `plugins.bundledDiscovery: "compat"` для мігрованих
застарілих конфігурацій allowlist, щоб зберегти наявну поведінку bundled provider, а
потім вказує на суворіший параметр `"allowlist"`.
- Коли конфігурація містить застарілі ключі, інші команди відмовляються запускатися й просять вас виконати `openclaw doctor`.
+ Коли конфігурація містить застарілі ключі, інші команди відмовляються запускатися й просять запустити `openclaw doctor`.
Doctor:
- Пояснить, які застарілі ключі знайдено.
- - Покаже застосовану міграцію.
- - Перезапише `~/.openclaw/openclaw.json` оновленою схемою.
+ - Покаже міграцію, яку він застосував.
+ - Перепише `~/.openclaw/openclaw.json` з оновленою схемою.
- Gateway також автоматично запускає doctor migrations під час запуску, коли виявляє застарілий формат конфігурації, тож застарілі конфігурації ремонтуються без ручного втручання. Міграції сховища Cron job обробляються командою `openclaw doctor --fix`.
+ Gateway також автоматично запускає міграції doctor під час startup, коли виявляє застарілий формат конфігурації, тому застарілі конфігурації ремонтуються без ручного втручання. Міграції сховища cron job обробляються через `openclaw doctor --fix`.
Поточні міграції:
@@ -217,7 +217,7 @@ 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`
@@ -225,16 +225,16 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- `browser.ssrfPolicy.allowPrivateNetwork` → `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
- `browser.profiles.*.driver: "extension"` → `"existing-session"`
- видалити `browser.relayBindHost` (застаріле налаштування ретранслятора розширення)
- - застаріле `models.providers.*.api: "openai"` → `"openai-completions"` (запуск Gateway також пропускає провайдерів, у яких `api` встановлено на майбутнє або невідоме значення enum, замість аварійно завершуватися у закритому режимі)
+ - застаріле `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 на локальному хості:
@@ -244,43 +244,49 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
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/вузла
- локально запущеного браузера
- увімкненого віддаленого налагодження в цьому браузері
- - схвалення першого запиту згоди на підключення в браузері
+ - підтвердження першого запиту згоди на підключення в браузері
- Готовність тут стосується лише передумов локального підключення. Existing-session зберігає поточні обмеження маршрутів Chrome MCP; розширені маршрути, як-от `responsebody`, експорт PDF, перехоплення завантажень і пакетні дії, все ще потребують керованого браузера або сирого профілю CDP.
+ Готовність тут стосується лише передумов локального підключення. Existing-session зберігає поточні обмеження маршрутів Chrome MCP; розширені маршрути, як-от `responsebody`, експорт PDF, перехоплення завантажень і пакетні дії, досі потребують керованого браузера або сирого профілю CDP.
- Ця перевірка **не** застосовується до Docker, sandbox, remote-browser або інших headless-потоків. Вони й надалі використовують сирий CDP.
+ Ця перевірка **не** застосовується до Docker, sandbox, remote-browser чи інших headless-потоків. Вони й надалі використовують сирий CDP.
- Коли налаштовано профіль OpenAI Codex OAuth, doctor опитує endpoint авторизації OpenAI, щоб перевірити, чи локальний стек Node/OpenSSL TLS може перевірити ланцюжок сертифікатів. Якщо перевірка завершується помилкою сертифіката (наприклад, `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 справний.
- Якщо раніше ви додали застарілі транспортні налаштування в `models.providers.openai-codex`, вони можуть затінити вбудований шлях провайдера Codex OAuth, який новіші релізи використовують автоматично. Doctor попереджає, коли бачить ці старі транспортні налаштування поруч із Codex OAuth, щоб ви могли видалити або переписати застаріле транспортне перевизначення та повернути вбудовану поведінку маршрутизації/резервування. Користувацькі проксі та перевизначення лише заголовків усе ще підтримуються й не спричиняють це попередження.
+ Якщо раніше ви додали застарілі транспортні налаштування в `models.providers.openai-codex`, вони можуть затінити вбудований шлях провайдера Codex OAuth, який новіші випуски використовують автоматично. Doctor попереджає, коли бачить ці старі транспортні налаштування разом із Codex OAuth, щоб ви могли видалити або переписати застаріле транспортне перевизначення й повернути вбудовану маршрутизацію/резервну поведінку. Користувацькі проксі та перевизначення лише заголовків і надалі підтримуються та не викликають це попередження.
- Коли ввімкнено вбудований Plugin Codex, doctor також перевіряє, чи refs основної моделі `openai-codex/*` досі розв’язуються через типовий runner PI. Ця комбінація коректна, коли ви хочете використовувати Codex OAuth/автентифікацію підписки через PI, але її легко сплутати з нативним середовищем app-server Codex. Doctor попереджає та вказує на явну форму app-server: `openai/*` плюс `agentRuntime.id: "codex"` або `OPENCLAW_AGENT_RUNTIME=codex`.
+ Коли ввімкнено вбудований Plugin Codex, doctor також перевіряє, чи посилання первинної моделі `openai-codex/*` досі розв’язуються через типовий PI runner. Ця комбінація чинна, коли ви хочете використовувати автентифікацію Codex OAuth/передплати через PI, але її легко сплутати з нативним harness сервера застосунку Codex. Doctor попереджає та вказує на явну форму сервера застосунку: `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"` означає "запустити вбудований хід через нативний сервер застосунку Codex."
+ - `/codex ...` означає "керувати нативною розмовою Codex або прив’язати її з чату."
+ - `/acp ...` або `runtime: "acp"` означає "використовувати зовнішній адаптер ACP/acpx."
- Якщо з’являється попередження, виберіть задуманий маршрут і відредагуйте конфігурацію вручну. Залиште попередження як є, коли PI Codex OAuth є навмисним.
+ Якщо з’являється попередження, виберіть потрібний маршрут і вручну змініть конфігурацію. Залиште попередження без змін, коли PI Codex OAuth є навмисним.
-
- Doctor може мігрувати старіші дискові структури в поточну структуру:
+
+ Doctor також сканує сховище активних сеансів на застарілий автоматично створений стан маршруту після того, як ви переміщуєте налаштовану типову/резервну модель або runtime з маршруту, що належить Plugin, як-от Codex.
+
+ `openclaw doctor --fix` може очистити автоматично створений застарілий стан, як-от закріплення моделей `modelOverrideSource: "auto"`, метадані runtime-моделі, закріплені ID harness, прив’язки сеансів CLI та автоматичні перевизначення auth-profile, коли маршрут-власник більше не налаштований. Явні користувацькі або застарілі вибори моделі сеансу повідомляються для ручного перегляду й залишаються без змін; перемкніть їх за допомогою `/model ...`, `/new` або скиньте сеанс, коли цей маршрут більше не потрібен.
+
+
+
+ Doctor може мігрувати старіші структури на диску до поточної структури:
- Сховище сеансів + транскрипти:
- з `~/.openclaw/sessions/` до `~/.openclaw/agents//sessions/`
@@ -290,211 +296,211 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- із застарілих `~/.openclaw/credentials/*.json` (крім `oauth.json`)
- до `~/.openclaw/credentials/whatsapp//...` (типовий ID облікового запису: `default`)
- Ці міграції виконуються за принципом best-effort та є ідемпотентними; 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 на застарілі верхньорівневі ключі можливостей (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Коли знаходить їх, він пропонує перемістити їх в об’єкт `contracts` і переписати файл маніфесту на місці. Ця міграція є ідемпотентною; якщо ключ `contracts` уже має ті самі значення, застарілий ключ видаляється без дублювання даних.
+ Doctor сканує всі встановлені маніфести Plugin на застарілі верхньорівневі ключі можливостей (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Коли їх знайдено, він пропонує перемістити їх до об’єкта `contracts` і переписати файл маніфесту на місці. Ця міграція ідемпотентна; якщо ключ `contracts` уже має ті самі значення, застарілий ключ видаляється без дублювання даних.
- Doctor також перевіряє сховище завдань Cron (`~/.openclaw/cron/jobs.json` типово або `cron.store`, коли перевизначено) на старі форми завдань, які scheduler досі приймає для сумісності.
+ Doctor також перевіряє сховище завдань cron (`~/.openclaw/cron/jobs.json` за замовчуванням або `cron.store`, коли перевизначено) на старі форми завдань, які планувальник досі приймає для сумісності.
- Поточні очищення Cron містять:
+ Поточні очищення cron включають:
- `jobId` → `id`
- `schedule.cron` → `schedule.expr`
- верхньорівневі поля payload (`message`, `model`, `thinking`, ...) → `payload`
- верхньорівневі поля доставки (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
- - псевдоніми доставки payload `provider` → явний `delivery.channel`
- - прості застарілі резервні Webhook-завдання `notify: true` → явний `delivery.mode="webhook"` з `delivery.to=cron.webhook`
+ - псевдоніми доставки `provider` у payload → явний `delivery.channel`
+ - прості застарілі резервні webhook-завдання `notify: true` → явний `delivery.mode="webhook"` з `delivery.to=cron.webhook`
- Doctor автоматично мігрує завдання `notify: true` лише тоді, коли може зробити це без зміни поведінки. Якщо завдання поєднує застарілий резервний notify із наявним режимом доставки не через Webhook, doctor попереджає та залишає це завдання для ручного перегляду.
+ Doctor автоматично мігрує завдання `notify: true` лише тоді, коли може зробити це без зміни поведінки. Якщо завдання поєднує застарілий резервний notify із наявним режимом доставки, що не є 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` для поточних перевірок стану.
- Doctor сканує кожен каталог сеансу агента на застарілі файли блокування запису — файли, що залишилися після аварійного завершення сеансу. Для кожного знайденого файлу блокування він повідомляє: шлях, PID, чи PID досі активний, вік блокування та чи вважається воно застарілим (мертвий PID або старше за 30 хвилин). У режимі `--fix` / `--repair` він автоматично видаляє застарілі файли блокування; інакше виводить примітку й радить перезапустити з `--fix`.
+ Doctor сканує кожен каталог сеансів агентів на наявність застарілих файлів блокування запису — файлів, що залишилися після аварійного завершення сеансу. Для кожного знайденого файлу блокування він повідомляє: шлях, PID, чи PID досі активний, вік блокування та чи вважається воно застарілим (мертвий PID або старше ніж 30 хвилин). У режимі `--fix` / `--repair` він автоматично видаляє застарілі файли блокування; інакше виводить примітку й радить повторно запустити з `--fix`.
-
- Doctor сканує JSONL-файли сеансів агента на дубльовану форму гілки, створену помилкою переписування транскрипту промпта 2026.4.24: покинутий хід користувача з внутрішнім runtime-контекстом OpenClaw та активний сусідній хід із тим самим видимим промптом користувача. У режимі `--fix` / `--repair` doctor створює резервну копію кожного ураженого файлу поруч з оригіналом і переписує транскрипт до активної гілки, щоб історія 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 та перегони блокувань/синхронізації.
- - **Каталог стану Linux на SD або eMMC**: попереджає, коли стан розташовано на джерелі монтування `mmcblk*`, оскільки випадковий I/O на SD або eMMC може бути повільнішим і швидше зношувати носій під час записів сеансів та облікових даних.
- - **Каталоги сеансів відсутні**: `sessions/` і каталог сховища сеансів потрібні для збереження історії та уникнення аварій `ENOENT`.
- - **Невідповідність транскрипту**: попереджає, коли в нещодавніх записах сеансів бракує файлів транскриптів.
- - **Головний сеанс "1-line JSONL"**: позначає випадок, коли головний транскрипт має лише один рядок (історія не накопичується).
- - **Кілька каталогів стану**: попереджає, коли в домашніх каталогах існує кілька папок `~/.openclaw` або коли `OPENCLAW_STATE_DIR` вказує в інше місце (історія може розділитися між інсталяціями).
- - **Нагадування про віддалений режим**: якщо `gateway.mode=remote`, doctor нагадує запустити його на віддаленому хості (стан зберігається там).
- - **Дозволи конфігураційного файлу**: попереджає, якщо `~/.openclaw/openclaw.json` доступний для читання групі/всім, і пропонує посилити дозволи до `600`.
+ - **Права доступу каталогу стану**: перевіряє можливість запису; пропонує виправити права доступу (і виводить підказку `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`, doctor нагадує запустити його на віддаленому хості (стан розміщений там).
+ - **Права доступу до файлу конфігурації**: попереджає, якщо `~/.openclaw/openclaw.json` доступний для читання групі/всім, і пропонує посилити права до `600`.
- Doctor перевіряє OAuth-профілі у сховищі автентифікації, попереджає, коли токени скоро закінчаться або вже закінчилися, і може безпечно їх оновити. Якщо профіль Anthropic OAuth/токена застарів, він пропонує ключ API Anthropic або шлях setup-token Anthropic. Запити на оновлення з’являються лише під час інтерактивного запуску (TTY); `--non-interactive` пропускає спроби оновлення.
+ Doctor перевіряє профілі OAuth у сховищі автентифікації, попереджає, коли токени незабаром закінчуються або вже закінчилися, і може оновити їх, коли це безпечно. Якщо профіль Anthropic OAuth/токена застарів, він пропонує API-ключ Anthropic або шлях setup-token Anthropic. Запити на оновлення з’являються лише під час інтерактивного запуску (TTY); `--non-interactive` пропускає спроби оновлення.
- Коли оновлення OAuth остаточно не вдається (наприклад, `refresh_token_reused`, `invalid_grant` або провайдер просить увійти знову), doctor повідомляє, що потрібна повторна автентифікація, і виводить точну команду `openclaw models auth login --provider ...`, яку слід запустити.
+ Коли оновлення OAuth остаточно не вдається (наприклад, `refresh_token_reused`, `invalid_grant` або провайдер повідомляє, що потрібно знову ввійти), doctor повідомляє, що потрібна повторна автентифікація, і друкує точну команду `openclaw models auth login --provider ...`, яку треба виконати.
Doctor також повідомляє про профілі автентифікації, які тимчасово непридатні через:
- - короткі cooldown-и (обмеження швидкості/тайм-аути/збої автентифікації)
- - довші вимкнення (збої білінгу/кредитів)
+ - короткі періоди очікування (ліміти швидкості/тайм-аути/збої автентифікації)
+ - довші вимкнення (збої оплати/кредиту)
-
- Якщо `hooks.gmail.model` задано, doctor перевіряє посилання на модель за каталогом і allowlist та попереджає, коли його неможливо розв’язати або воно заборонене.
+
+ Якщо встановлено `hooks.gmail.model`, doctor перевіряє посилання на модель за каталогом і списком дозволених та попереджає, коли воно не розв’яжеться або заборонене.
-
- Коли sandboxing увімкнено, doctor перевіряє Docker-образи та пропонує зібрати або перейти на застарілі назви, якщо поточний образ відсутній.
+
+ Коли sandboxing увімкнено, doctor перевіряє Docker-образи й пропонує зібрати або перемкнутися на застарілі назви, якщо поточний образ відсутній.
- Doctor видаляє застарілий staging-стан залежностей Plugin, згенерований OpenClaw, у режимі `openclaw doctor --fix` / `openclaw doctor --repair`. Це охоплює застарілі згенеровані корені залежностей, старі каталоги install-stage, локальні для package залишки від попереднього коду виправлення залежностей bundled-plugin, а також осиротілі або відновлені керовані npm-копії bundled `@openclaw/*` plugins, які можуть затіняти поточний bundled manifest.
+ Doctor видаляє застарілий створений OpenClaw проміжний стан залежностей plugin у режимі `openclaw doctor --fix` / `openclaw doctor --repair`. Це охоплює застарілі згенеровані корені залежностей, старі каталоги етапу встановлення, локальні для пакета залишки від попереднього коду відновлення залежностей bundled-plugin, а також осиротілі або відновлені керовані npm-копії bundled `@openclaw/*` plugins, які можуть затіняти поточний bundled-маніфест.
- Doctor також може повторно встановити налаштовані завантажувані plugins, коли конфігурація посилається на них, але локальний реєстр Plugin не може їх знайти. Для externalization bundled-plugin 2026.5.2 doctor автоматично встановлює завантажувані plugins, які вже використовує наявна конфігурація, а потім покладається на `meta.lastTouchedVersion`, щоб виконати цей релізний прохід лише один раз. Запуск Gateway і перезавантаження конфігурації не запускають менеджери пакетів; встановлення Plugin лишається явною роботою doctor/install/update.
+ Doctor також може перевстановити налаштовані завантажувані plugins, коли конфігурація посилається на них, але локальний реєстр plugin не може їх знайти. Для externalization bundled-plugin 2026.5.2 doctor автоматично встановлює завантажувані plugins, які вже використовує наявна конфігурація, а потім покладається на `meta.lastTouchedVersion`, щоб виконати цей релізний прохід лише один раз. Запуск Gateway і перезавантаження конфігурації не запускають менеджери пакетів; встановлення plugin лишаються явною роботою doctor/install/update.
-
- Doctor виявляє застарілі служби gateway (launchd/systemd/schtasks) і пропонує видалити їх та встановити службу OpenClaw з поточним портом gateway. Він також може сканувати додаткові gateway-подібні служби й виводити підказки з очищення. Служби OpenClaw gateway з іменами профілів вважаються повноцінними й не позначаються як "extra."
+
+ Doctor виявляє застарілі сервіси gateway (launchd/systemd/schtasks) і пропонує видалити їх та встановити сервіс OpenClaw з поточним портом gateway. Він також може сканувати додаткові подібні до gateway сервіси й друкувати підказки з очищення. Сервіси OpenClaw gateway з іменами профілів вважаються повноцінними й не позначаються як "зайві."
- У Linux, якщо user-level служба gateway відсутня, але існує system-level служба OpenClaw gateway, doctor не встановлює автоматично другу user-level службу. Перевірте через `openclaw gateway status --deep` або `openclaw doctor --deep`, потім видаліть дублікат або задайте `OPENCLAW_SERVICE_REPAIR_POLICY=external`, коли системний supervisor керує життєвим циклом gateway.
+ У Linux, якщо користувацький сервіс gateway відсутній, але існує системний сервіс OpenClaw gateway, doctor не встановлює автоматично другий користувацький сервіс. Перевірте за допомогою `openclaw gateway status --deep` або `openclaw doctor --deep`, а потім видаліть дублікат або встановіть `OPENCLAW_SERVICE_REPAIR_POLICY=external`, коли системний supervisor керує життєвим циклом gateway.
-
- Коли обліковий запис каналу Matrix має очікувану або придатну до дії міграцію застарілого стану, doctor (у режимі `--fix` / `--repair`) створює знімок перед міграцією, а потім виконує best-effort кроки міграції: міграцію застарілого стану Matrix і підготовку застарілого зашифрованого стану. Обидва кроки не є фатальними; помилки журналюються, а запуск продовжується. У режимі лише для читання (`openclaw doctor` без `--fix`) ця перевірка повністю пропускається.
+
+ Коли обліковий запис каналу Matrix має очікувану або придатну до дії міграцію застарілого стану, doctor (у режимі `--fix` / `--repair`) створює знімок перед міграцією, а потім виконує найкращі можливі кроки міграції: міграцію застарілого стану Matrix і підготовку застарілого зашифрованого стану. Обидва кроки не є фатальними; помилки журналюються, а запуск продовжується. У режимі лише читання (`openclaw doctor` без `--fix`) ця перевірка повністю пропускається.
-
- Doctor тепер перевіряє стан спарювання пристроїв як частину звичайного проходу перевірки здоров’я.
+
+ Doctor тепер перевіряє стан сполучення пристроїв у межах звичайного проходу перевірки стану.
Що він повідомляє:
- - очікувані запити на перше спарювання
- - очікувані підвищення ролі для вже спарених пристроїв
- - очікувані підвищення scope для вже спарених пристроїв
- - виправлення невідповідності public-key, коли id пристрою досі збігається, але ідентичність пристрою більше не збігається із затвердженим записом
- - спарені записи, яким бракує активного токена для затвердженої ролі
- - спарені токени, чиї scopes відхилилися від затвердженої базової лінії спарювання
- - локальні кешовані записи device-token для поточної машини, які передують ротації токена на стороні gateway або містять застарілі метадані scope
+ - очікувані запити на перше сполучення
+ - очікувані підвищення ролі для вже сполучених пристроїв
+ - очікувані підвищення scope для вже сполучених пристроїв
+ - відновлення невідповідності публічного ключа, коли id пристрою все ще збігається, але ідентичність пристрою більше не збігається із затвердженим записом
+ - сполучені записи без активного токена для затвердженої ролі
+ - сполучені токени, чиї scope відхиляються за межі затвердженого базового сполучення
+ - локальні кешовані записи device-token для поточної машини, що передують ротації токена на боці gateway або містять застарілі метадані scope
- Doctor не затверджує автоматично запити спарювання й не ротуються автоматично токени пристроїв. Натомість він виводить точні наступні кроки:
+ 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": doctor тепер відрізняє перше спарювання від очікуваних підвищень ролі/scope та від дрейфу застарілого токена/ідентичності пристрою.
+ Це закриває поширену прогалину "вже сполучено, але все ще вимагається сполучення": doctor тепер відрізняє перше сполучення від очікуваних підвищень ролі/scope і від застарілого дрейфу токена/ідентичності пристрою.
- Doctor виводить попередження, коли провайдер відкритий для DM без allowlist або коли політику налаштовано небезпечним способом.
+ Doctor виводить попередження, коли провайдер відкритий для DM без списку дозволених або коли політику налаштовано небезпечним способом.
- Якщо запущено як systemd user service, doctor гарантує, що lingering увімкнено, щоб gateway залишався активним після виходу з системи.
+ Якщо запущено як користувацький сервіс systemd, doctor гарантує, що lingering увімкнено, щоб gateway залишався активним після виходу з системи.
- Doctor виводить зведення стану робочого простору для агента за замовчуванням:
+ Doctor друкує підсумок стану робочого простору для типового агента:
- - **Стан Skills**: рахує eligible, missing-requirements і allowlist-blocked skills.
+ - **Стан Skills**: підраховує придатні skills, skills із відсутніми вимогами та заблоковані списком дозволених skills.
- **Застарілі каталоги робочого простору**: попереджає, коли `~/openclaw` або інші застарілі каталоги робочого простору існують поруч із поточним робочим простором.
- - **Стан Plugin**: рахує ввімкнені/вимкнені/помилкові plugins; перелічує Plugin IDs для будь-яких помилок; повідомляє можливості bundle plugin.
- - **Попередження сумісності Plugin**: позначає plugins, що мають проблеми сумісності з поточним runtime.
- - **Діагностика Plugin**: показує будь-які попередження або помилки часу завантаження, які видав реєстр Plugin.
+ - **Стан Plugin**: підраховує увімкнені/вимкнені/помилкові plugins; перелічує ID plugin для будь-яких помилок; повідомляє можливості bundle plugin.
+ - **Попередження сумісності Plugin**: позначає plugins, які мають проблеми сумісності з поточним runtime.
+ - **Діагностика Plugin**: показує будь-які попередження або помилки під час завантаження, виведені реєстром plugin.
-
- Doctor перевіряє, чи bootstrap-файли робочого простору (наприклад `AGENTS.md`, `CLAUDE.md` або інші інжектовані файли контексту) близькі до налаштованого бюджету символів або перевищують його. Він повідомляє для кожного файлу raw і injected кількість символів, відсоток truncation, причину truncation (`max/file` або `max/total`) і загальну кількість injected символів як частку загального бюджету. Коли файли truncate-яться або близькі до ліміту, doctor виводить поради з налаштування `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 каналу, він також видаляє dangling channel-scoped конфігурацію, що посилалася на цей Plugin: записи `channels.`, цілі Heartbeat, які називали канал, і перевизначення `agents.*.models["/*"]`. Це запобігає boot loop-ам Gateway, коли runtime каналу зник, але конфігурація все ще просить gateway прив’язатися до нього.
+
+ Коли `openclaw doctor --fix` видаляє відсутній channel plugin, він також видаляє висячі channel-scoped налаштування, що посилалися на цей plugin: записи `channels.`, цілі Heartbeat, які називали канал, і перевизначення `agents.*.models["/*"]`. Це запобігає циклам завантаження Gateway, коли runtime каналу зник, але конфігурація все ще просить gateway прив’язатися до нього.
- Doctor перевіряє, чи встановлено tab completion для поточного shell (zsh, bash, fish або PowerShell):
+ Doctor перевіряє, чи встановлено автодоповнення клавішею Tab для поточного shell (zsh, bash, fish або PowerShell):
- - Якщо профіль shell використовує повільний динамічний шаблон completion (`source <(openclaw completion ...)`), doctor оновлює його до швидшого варіанта з кешованим файлом.
- - Якщо completion налаштовано в профілі, але файл кешу відсутній, doctor автоматично регенерує кеш.
- - Якщо completion взагалі не налаштовано, doctor пропонує встановити його (лише інтерактивний режим; пропускається з `--non-interactive`).
+ - Якщо профіль shell використовує повільний динамічний шаблон доповнення (`source <(openclaw completion ...)`), doctor оновлює його до швидшого варіанта кешованого файлу.
+ - Якщо доповнення налаштоване у профілі, але файл кешу відсутній, doctor автоматично відновлює кеш.
+ - Якщо доповнення взагалі не налаштоване, doctor пропонує встановити його (лише інтерактивний режим; пропускається з `--non-interactive`).
- Запустіть `openclaw completion --write-state`, щоб регенерувати кеш вручну.
+ Запустіть `openclaw completion --write-state`, щоб вручну відновити кеш.
- Doctor перевіряє готовність автентифікації локального gateway токеном.
+ Doctor перевіряє готовність локальної автентифікації токена gateway.
- - Якщо режим токена потребує токена й джерела токена не існує, doctor пропонує згенерувати його.
- - Якщо `gateway.auth.token` керується SecretRef, але недоступний, doctor попереджає й не перезаписує його plaintext.
- - `openclaw doctor --generate-gateway-token` примусово генерує лише тоді, коли SecretRef токена не налаштовано.
+ - Якщо режим токена потребує токен, а джерела токена немає, doctor пропонує згенерувати його.
+ - Якщо `gateway.auth.token` керується SecretRef, але недоступний, doctor попереджає й не перезаписує його відкритим текстом.
+ - `openclaw doctor --generate-gateway-token` примусово генерує токен лише тоді, коли не налаштовано жоден SecretRef токена.
-
- Деяким потокам виправлення потрібно перевіряти налаштовані облікові дані, не послаблюючи runtime поведінку fail-fast.
+
+ Деякі процеси відновлення мають перевіряти налаштовані облікові дані, не послаблюючи runtime-поведінку fail-fast.
- - `openclaw doctor --fix` тепер використовує ту саму read-only модель зведення SecretRef, що й команди status-family, для цільових виправлень конфігурації.
+ - `openclaw doctor --fix` тепер використовує ту саму модель зведення SecretRef лише для читання, що й команди сімейства status, для цільових виправлень конфігурації.
- Приклад: виправлення Telegram `allowFrom` / `groupAllowFrom` `@username` намагається використати налаштовані облікові дані бота, коли вони доступні.
- - Якщо токен бота Telegram налаштовано через SecretRef, але він недоступний у поточному шляху команди, doctor повідомляє, що облікові дані налаштовані, але недоступні, і пропускає автоматичне розв’язання замість аварійного завершення або хибного повідомлення, що токен відсутній.
+ - Якщо токен бота Telegram налаштовано через SecretRef, але він недоступний у поточному шляху команди, засіб діагностики повідомляє, що облікові дані налаштовані, але недоступні, і пропускає автоматичне розв’язання замість аварійного завершення або помилкового повідомлення, що токен відсутній.
- Doctor виконує перевірку стану та пропонує перезапустити gateway, коли він виглядає несправним.
+ Засіб діагностики виконує перевірку стану й пропонує перезапустити Gateway, коли він виглядає несправним.
- Doctor перевіряє, чи налаштований постачальник embedding для пошуку в пам’яті готовий для агента за замовчуванням. Поведінка залежить від налаштованого бекенда та постачальника:
+ Засіб діагностики перевіряє, чи налаштований постачальник embedding для пошуку в пам’яті готовий для агента за замовчуванням. Поведінка залежить від налаштованого backend і постачальника:
- - **Бекенд QMD**: перевіряє, чи доступний і чи може запускатися бінарний файл `qmd`. Якщо ні, виводить інструкції з виправлення, зокрема npm-пакет і варіант ручного шляху до бінарного файла.
- - **Явний локальний постачальник**: перевіряє наявність локального файла моделі або розпізнаної віддаленої/завантажуваної URL-адреси моделі. Якщо немає, пропонує перемкнутися на віддаленого постачальника.
- - **Явний віддалений постачальник** (`openai`, `voyage` тощо): перевіряє, чи є API-ключ у середовищі або сховищі автентифікації. Якщо його немає, виводить дієві підказки для виправлення.
- - **Автоматичний постачальник**: спочатку перевіряє доступність локальної моделі, а потім пробує кожного віддаленого постачальника в порядку автоматичного вибору.
+ - **Backend QMD**: перевіряє, чи доступний і придатний до запуску бінарний файл `qmd`. Якщо ні, виводить поради з виправлення, включно з пакетом npm і варіантом ручного шляху до бінарного файла.
+ - **Явний локальний постачальник**: перевіряє наявність локального файла моделі або розпізнаної URL-адреси віддаленої/завантажуваної моделі. Якщо її немає, пропонує перейти на віддаленого постачальника.
+ - **Явний віддалений постачальник** (`openai`, `voyage` тощо): перевіряє, чи є API-ключ у середовищі або сховищі автентифікації. Виводить дієві підказки з виправлення, якщо його немає.
+ - **Автоматичний постачальник**: спочатку перевіряє наявність локальної моделі, а потім пробує кожного віддаленого постачальника в порядку автоматичного вибору.
- Коли доступний кешований результат проби gateway (gateway був справний на момент перевірки), doctor зіставляє його результат із конфігурацією, видимою для CLI, і зазначає будь-яку невідповідність. Doctor не запускає новий embedding ping у стандартному шляху; використовуйте команду глибокого стану пам’яті, коли потрібна жива перевірка постачальника.
+ Коли доступний кешований результат перевірки Gateway (Gateway був справним на момент перевірки), засіб діагностики зіставляє його результат із конфігурацією, видимою для CLI, і позначає будь-яку невідповідність. Засіб діагностики не запускає новий embedding ping у типовому шляху; використовуйте команду глибокого статусу пам’яті, коли потрібна жива перевірка постачальника.
Використовуйте `openclaw memory status --deep`, щоб перевірити готовність embedding під час виконання.
-
- Якщо gateway справний, doctor запускає пробу стану каналів і повідомляє попередження із запропонованими виправленнями.
+
+ Якщо Gateway справний, засіб діагностики запускає перевірку стану каналу й повідомляє попередження із запропонованими виправленнями.
-
- Doctor перевіряє встановлену конфігурацію супервізора (launchd/systemd/schtasks) на відсутні або застарілі значення за замовчуванням (наприклад, залежності systemd від network-online і затримку перезапуску). Коли виявляє невідповідність, рекомендує оновлення та може переписати файл служби/завдання до поточних значень за замовчуванням.
+
+ Засіб діагностики перевіряє встановлену конфігурацію супервізора (launchd/systemd/schtasks) на відсутні або застарілі стандартні значення (наприклад, залежності systemd від network-online і затримку перезапуску). Коли знаходить невідповідність, рекомендує оновлення й може переписати файл служби/завдання до поточних стандартних значень.
Примітки:
- `openclaw doctor` запитує підтвердження перед переписуванням конфігурації супервізора.
- - `openclaw doctor --yes` приймає стандартні запити на відновлення.
+ - `openclaw doctor --yes` приймає типові запити на виправлення.
- `openclaw doctor --repair` застосовує рекомендовані виправлення без запитів.
- `openclaw doctor --repair --force` перезаписує користувацькі конфігурації супервізора.
- - `OPENCLAW_SERVICE_REPAIR_POLICY=external` залишає doctor у режимі лише читання для життєвого циклу служби gateway. Він і надалі повідомляє про стан служби та виконує відновлення, не пов’язані зі службою, але пропускає встановлення/запуск/перезапуск/bootstrap служби, переписування конфігурації супервізора та очищення застарілих служб, оскільки цим життєвим циклом керує зовнішній супервізор.
- - У Linux doctor не переписує метадані команди/точки входу, поки відповідний systemd-модуль gateway активний. Він також ігнорує неактивні додаткові gateway-подібні модулі, які не є застарілими, під час сканування дубльованих служб, щоб супутні файли служб не створювали шуму очищення.
- - Якщо автентифікація за токеном потребує токена, а `gateway.auth.token` керується SecretRef, встановлення/відновлення служби doctor перевіряє SecretRef, але не зберігає розв’язані значення токенів у відкритому тексті в метаданих середовища служби супервізора.
- - Doctor виявляє керовані `.env`/SecretRef-backed значення середовища служби, які старіші інсталяції LaunchAgent, systemd або Windows Scheduled Task вбудовували inline, і переписує метадані служби так, щоб ці значення завантажувалися з джерела runtime, а не з визначення супервізора.
- - Doctor виявляє, коли команда служби досі фіксує старий `--port` після зміни `gateway.port`, і переписує метадані служби на поточний порт.
- - Якщо автентифікація за токеном потребує токена, а налаштований SecretRef токена не розв’язується, doctor блокує шлях встановлення/відновлення з дієвими інструкціями.
- - Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password`, а `gateway.auth.mode` не задано, doctor блокує встановлення/відновлення, доки режим не буде задано явно.
- - Для Linux user-systemd модулів перевірки doctor на розбіжність токенів тепер включають джерела `Environment=` і `EnvironmentFile=` під час порівняння метаданих автентифікації служби.
- - Відновлення служби doctor відмовляються переписувати, зупиняти або перезапускати службу gateway зі старішого бінарного файла OpenClaw, коли конфігурацію востаннє записала новіша версія. Див. [усунення несправностей Gateway](/uk/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
+ - `OPENCLAW_SERVICE_REPAIR_POLICY=external` залишає засіб діагностики в режимі лише читання для життєвого циклу служби Gateway. Він усе ще повідомляє стан служби й виконує виправлення, не пов’язані зі службою, але пропускає встановлення/запуск/перезапуск/bootstrap служби, переписування конфігурації супервізора й очищення застарілих служб, оскільки цим життєвим циклом керує зовнішній супервізор.
+ - На Linux засіб діагностики не переписує метадані команди/точки входу, поки відповідний systemd-модуль Gateway активний. Він також ігнорує неактивні незастарілі додаткові модулі, схожі на Gateway, під час сканування дублікатів служб, щоб допоміжні файли служб не створювали зайвого шуму очищення.
+ - Якщо автентифікація за токеном вимагає токен і `gateway.auth.token` керується SecretRef, встановлення/виправлення служби засобом діагностики перевіряє SecretRef, але не зберігає розв’язані значення токена у відкритому тексті в метаданих середовища служби супервізора.
+ - Засіб діагностики виявляє керовані значення середовища служби на основі `.env`/SecretRef, які старіші встановлення LaunchAgent, systemd або Windows Scheduled Task вбудовували inline, і переписує метадані служби так, щоб ці значення завантажувалися з джерела виконання, а не з визначення супервізора.
+ - Засіб діагностики виявляє, коли команда служби все ще закріплює старий `--port` після зміни `gateway.port`, і переписує метадані служби на поточний порт.
+ - Якщо автентифікація за токеном вимагає токен, а налаштований SecretRef токена не розв’язано, засіб діагностики блокує шлях встановлення/виправлення з дієвими порадами.
+ - Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password`, а `gateway.auth.mode` не задано, засіб діагностики блокує встановлення/виправлення, доки режим не буде задано явно.
+ - Для користувацьких systemd-модулів Linux засіб діагностики тепер перевіряє дрейф токена, враховуючи джерела як `Environment=`, так і `EnvironmentFile=` під час порівняння метаданих автентифікації служби.
+ - Виправлення служб засобом діагностики відмовляються переписувати, зупиняти або перезапускати службу Gateway зі старішого бінарного файла OpenClaw, коли конфігурацію востаннє записала новіша версія. Див. [усунення несправностей Gateway](/uk/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- Ви завжди можете примусово виконати повне переписування через `openclaw gateway install --force`.
-
- Doctor перевіряє runtime служби (PID, останній статус виходу) і попереджає, коли службу встановлено, але вона фактично не працює. Він також перевіряє конфлікти портів на порту gateway (за замовчуванням `18789`) і повідомляє ймовірні причини (gateway уже працює, SSH-тунель).
+
+ Засіб діагностики перевіряє середовище виконання служби (PID, останній статус виходу) і попереджає, коли службу встановлено, але вона фактично не працює. Він також перевіряє конфлікти портів на порту Gateway (типово `18789`) і повідомляє ймовірні причини (Gateway уже запущено, SSH-тунель).
-
- Doctor попереджає, коли служба gateway працює на Bun або шляху Node, керованому версіями (`nvm`, `fnm`, `volta`, `asdf` тощо). Канали WhatsApp + Telegram потребують Node, а шляхи менеджерів версій можуть ламатися після оновлень, оскільки служба не завантажує ініціалізацію вашої оболонки. Doctor пропонує мігрувати на системну інсталяцію Node, коли вона доступна (Homebrew/apt/choco).
+
+ Засіб діагностики попереджає, коли служба Gateway працює на Bun або шляху Node, керованому версіями (`nvm`, `fnm`, `volta`, `asdf` тощо). Канали WhatsApp + Telegram вимагають Node, а шляхи менеджера версій можуть ламатися після оновлень, бо служба не завантажує ініціалізацію вашої оболонки. Засіб діагностики пропонує перейти на системне встановлення Node, коли воно доступне (Homebrew/apt/choco).
- Нововстановлені або відновлені macOS LaunchAgents використовують канонічний системний PATH (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) замість копіювання PATH інтерактивної оболонки, тому каталоги Volta, asdf, fnm, pnpm та інших менеджерів версій не змінюють, який Node розв’язують дочірні процеси. Служби Linux усе ще зберігають явні корені середовища (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) і стабільні user-bin каталоги, але вгадані fallback-каталоги менеджерів версій записуються до PATH служби лише тоді, коли ці каталоги існують на диску.
+ Нововстановлені або виправлені macOS LaunchAgents використовують канонічний системний PATH (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) замість копіювання PATH інтерактивної оболонки, тому каталоги Volta, asdf, fnm, pnpm та інших менеджерів версій не змінюють, який Node розв’язують дочірні процеси. Служби Linux усе ще зберігають явні корені середовища (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) і стабільні user-bin каталоги, але припущені резервні каталоги менеджерів версій записуються до PATH служби лише тоді, коли ці каталоги існують на диску.
- Doctor зберігає будь-які зміни конфігурації та ставить штамп метаданих майстра, щоб записати запуск doctor.
+ Засіб діагностики зберігає всі зміни конфігурації й ставить позначку в метаданих майстра, щоб зафіксувати запуск засобу діагностики.
- Doctor пропонує систему пам’яті робочого простору, якщо її немає, і виводить пораду щодо резервного копіювання, якщо робочий простір ще не перебуває під git.
+ Засіб діагностики пропонує систему пам’яті робочого простору, коли її немає, і виводить пораду щодо резервної копії, якщо робочий простір ще не перебуває під керуванням git.
- Див. [/concepts/agent-workspace](/uk/concepts/agent-workspace) для повного посібника зі структури робочого простору та резервного копіювання git (рекомендовано приватний GitHub або GitLab).
+ Див. [/concepts/agent-workspace](/uk/concepts/agent-workspace) для повного посібника зі структури робочого простору й резервної копії git (рекомендовано приватний GitHub або GitLab).