CLI commands

Диагностика

openclaw doctor

Проверки работоспособности и быстрые исправления для Gateway, каналов, плагинов, Skills, маршрутизации моделей, локального состояния и миграций конфигурации. Используйте эту команду, когда что-либо работает не так, как ожидалось, и требуется одной командой выяснить причину.

См. также:

Режимы

Doctor поддерживает пять режимов:

Режим Команда Поведение
Проверка openclaw doctor Проверки и пошаговые запросы, ориентированные на пользователя.
Исправление openclaw doctor --fix Применяет поддерживаемые исправления, используя запросы, если безопасное неинтерактивное исправление невозможно.
Линтинг openclaw doctor --lint Структурированные результаты только для чтения для CI, предварительных проверок и контрольных точек ревью.
Обслуживание общей SQLite openclaw doctor --state-sqlite compact Явно создаёт контрольную точку, уплотняет и проверяет каноническую общую БД состояния.
Миграция SQLite сеансов openclaw doctor --session-sqlite <mode> Проверяет, импортирует, валидирует, уплотняет, восстанавливает или возвращает состояние сеансов.

Используйте --lint, когда автоматизации требуется стабильный результат. Используйте --fix, когда оператору нужно, чтобы doctor изменил конфигурацию или состояние.

Примеры

bash
openclaw doctoropenclaw doctor --lintopenclaw doctor --lint --jsonopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --deepopenclaw doctor --fixopenclaw doctor --fix --non-interactiveopenclaw doctor --generate-gateway-tokenopenclaw doctor --post-upgradeopenclaw doctor --post-upgrade --jsonopenclaw doctor --state-sqlite compactopenclaw doctor --state-sqlite compact --jsonopenclaw doctor --session-sqlite inspect --session-sqlite-all-agentsopenclaw doctor --session-sqlite dry-run --session-sqlite-agent main --jsonopenclaw doctor --session-sqlite import --session-sqlite-all-agentsopenclaw doctor --session-sqlite validate --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite compact --session-sqlite-all-agentsopenclaw doctor --session-sqlite recover --github-issueopenclaw doctor --session-sqlite restore --session-sqlite-all-agents

Для проверки разрешений конкретного канала используйте средства диагностики каналов вместо doctor:

bash
openclaw channels capabilities --channel discord --target channel:<channel-id>openclaw channels status --probe

channels capabilities сообщает фактические разрешения бота для указанного целевого канала. channels status --probe проверяет все настроенные каналы и цели автоматического подключения к голосовым каналам.

Параметры

Параметр Действие
--no-workspace-suggestions Отключает предложения по памяти и поиску рабочего пространства.
--yes Принимает значения по умолчанию без запросов.
--repair / --fix Применяет рекомендуемые исправления, не связанные со службами, без запросов (--fix — псевдоним). Установка и перезапись службы Gateway по-прежнему требуют интерактивного подтверждения или явных команд gateway.
--force Применяет агрессивные исправления, включая перезапись пользовательской конфигурации службы.
--non-interactive Выполняет команду без запросов; разрешены только безопасные миграции и исправления, не связанные со службами.
--generate-gateway-token Создаёт и настраивает токен Gateway.
--allow-exec Разрешает doctor выполнять настроенные SecretRefs exec при проверке секретов.
--deep Сканирует системные службы на наличие дополнительных установок Gateway; сообщает о недавних передачах управления при перезапуске супервизора Gateway.
--lint Выполняет модернизированные проверки работоспособности в режиме только для чтения и выводит диагностические результаты.
--post-upgrade Выполняет проверки совместимости плагинов после обновления; результаты выводятся в stdout; код выхода 1, если присутствует хотя бы один результат уровня ошибки.
--state-sqlite <mode> Выполняет явное обслуживание общей SQLite состояния. Единственный режим — compact.
--session-sqlite <mode> Выполняет выбранный режим миграции SQLite сеансов: inspect, dry-run, import, validate, compact, recover или restore.
--session-sqlite-store <path> С --session-sqlite: выбирает один путь к устаревшему хранилищу sessions.json.
--session-sqlite-agent <id> С --session-sqlite: выбирает одного настроенного агента.
--session-sqlite-all-agents С --session-sqlite: выбирает настроенные и обнаруженные хранилища агентов.
--github-issue С --session-sqlite recover: подготавливает обезличенный отчёт о проблеме для openclaw/openclaw; doctor создаёт его с помощью gh после --yes или интерактивного подтверждения.
--json С --lint: результаты в JSON. С --post-upgrade: { probesRun, findings }. С --state-sqlite или --session-sqlite: отчёт об обслуживании в формате JSON.
--severity-min <level> С --lint: исключает результаты ниже info, warning или error.
--all С --lint: выполняет все зарегистрированные проверки, включая проверки по подписке, исключённые из набора по умолчанию.
--skip <id> С --lint: пропускает проверку с указанным идентификатором. Можно указывать многократно.
--only <id> С --lint: выполняет только проверки с указанными идентификаторами. Можно указывать многократно.

--severity-min, --all, --only и --skip принимаются только вместе с --lint; --json принимается с --lint, --post-upgrade, --state-sqlite и --session-sqlite.

Режим линтинга

openclaw doctor --lint работает только для чтения: без запросов, исправлений и перезаписи конфигурации или состояния.

bash
openclaw doctor --lintopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --jsonopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min info

Вывод для пользователя компактен:

text
doctor --lint: выполнено проверок: 6, обнаружено результатов: 1  [warning] core/doctor/gateway-config gateway.mode - параметр gateway.mode не задан; запуск gateway будет заблокирован.    исправление: выполните `openclaw configure` и задайте режим Gateway (local/remote) либо выполните `openclaw config set gateway.mode local`.

Вывод JSON служит интерфейсом для сценариев:

json
{  "ok": false,  "checksRun": 5,  "checksSkipped": 0,  "findings": [    {      "checkId": "core/doctor/gateway-config",      "severity": "warning",      "message": "Параметр gateway.mode не задан; запуск gateway будет заблокирован.",      "path": "gateway.mode",      "fixHint": "Выполните `openclaw configure` и задайте режим Gateway (local/remote) либо выполните `openclaw config set gateway.mode local`."    }  ]}

Коды выхода:

Код Значение
0 Нет результатов на выбранном пороге серьёзности или выше него.
1 Хотя бы один результат соответствует выбранному порогу.
2 Сбой команды или среды выполнения до получения результатов линтинга.

--severity-min определяет как выводимые результаты, так и порог выхода: openclaw doctor --lint --severity-min error может ничего не вывести и завершиться с кодом 0, даже если существуют результаты info/warning с более низкой серьёзностью.

--all определяет, какие проверки выбираются до фильтрации по серьёзности. По умолчанию режим линтинга исключает глубокие, исторические проверки и проверки, которые с большей вероятностью обнаружат исправимые остатки устаревших данных; используйте --all для полного набора. --only <id> — наиболее точный селектор, позволяющий выполнить любую зарегистрированную проверку по идентификатору.

core/doctor/local-audio-acceleration сообщает автоматически выбранную локальную команду STT, отдельные свидетельства о доступном, запрошенном и наблюдаемом бэкенде, а также порядок резервных вариантов без загрузки речевой модели. Она создаёт информационный результат, поэтому для его отображения укажите --severity-min info.

Структурированные проверки работоспособности

Современные проверки doctor используют небольшой разделённый контракт:

ts
detect(ctx, scope?) -> HealthFinding[]repair?(ctx, findings) -> HealthRepairResult

detect() обеспечивает работу doctor --lint. repair() является необязательной и выполняется только при doctor --fix / doctor --repair. Проверки, ещё не переведённые на эту форму, продолжают использовать устаревший механизм расширения doctor.

Контексты исправления могут содержать запросы dryRun/diff; результаты исправления могут возвращать структурированные diffs (изменения конфигурации или файлов) и effects (побочные эффекты для служб, процессов, пакетов, состояния или других компонентов), чтобы преобразованные проверки могли развиваться в направлении doctor --fix --dry-run, не перенося планирование изменений в detect().

repair() сообщает status: "repaired" | "skipped" | "failed" (если статус не указан, подразумевается repaired). Когда исправление возвращает skipped или failed, doctor сообщает причину и пропускает проверку для этого элемента. После успешного исправления doctor повторно запускает detect() только для исправленных результатов; если проблема сохраняется, doctor сообщает предупреждение об исправлении, а не считает изменение завершённым.

Результат проверки содержит:

Поле Назначение
checkId Стабильный идентификатор для фильтров пропуска/выбора и списков разрешений CI.
severity info, warning или error.
message Понятное человеку описание проблемы.
path Путь конфигурации, файла или логический путь, если доступен.
line / column Расположение в исходном коде, если доступно.
ocPath Точный адрес oc://, если проверка может его указать.
fixHint Рекомендуемое действие оператора или сводка исправления.

Модернизированные основные проверки doctor остаются привязанными к упорядоченному вкладу doctor, которому принадлежит их поведение doctor / doctor --fix для человека. Общий структурированный реестр состояния служит точкой расширения: встроенные проверки и проверки на основе плагинов выполняются после основных проверок doctor, когда владеющий ими пакет регистрирует их в активном пути команды. openclaw/plugin-sdk/health предоставляет тот же контракт авторам плагинов.

Выбор проверок

bash
openclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --skip core/doctor/skills-readinessopenclaw doctor --lint --all --skip core/doctor/session-locks

--only и --skip принимают полные идентификаторы проверок и могут указываться многократно. Если идентификатор --only не зарегистрирован, для него не выполняется ни одна проверка; используйте checksRun/checksSkipped в выводе, чтобы убедиться, что целевой контроль выбирает ожидаемые проверки.

Режим после обновления

openclaw doctor --post-upgrade запускает проверки совместимости плагинов для последовательного выполнения после сборки или обновления. Результаты выводятся в stdout; код выхода равен 1, если хотя бы один результат имеет level: "error". Добавьте --json, чтобы получить машиночитаемую оболочку ({ probesRun, findings }), подходящую для CI, навыка сообщества fork-upgrade и других инструментов быстрой проверки после обновления. Если индекс установленных плагинов отсутствует или имеет неверный формат, режим JSON всё равно выводит оболочку с результатом ошибки plugin.index_unavailable.

Запуск образа контейнера — исключение из обычного процесса «запустить doctor после обновления». Когда openclaw gateway run запускается с новой версией OpenClaw, он выполняет безопасные исправления состояния и плагинов, прежде чем сообщить о готовности. Если исправление нельзя безопасно завершить, процесс запуска завершается и предлагает один раз запустить тот же образ с openclaw doctor --fix для тех же подключённых состояния и конфигурации, прежде чем перезапустить контейнер в обычном режиме.

Compaction общей базы данных состояния SQLite

openclaw doctor --state-sqlite compact — это явная операция автономного обслуживания канонической общей базы данных состояния по адресу <state-dir>/state/openclaw.sqlite. Команда не принимает произвольный путь к базе данных, никогда не вызывается при обычной работе Gateway и не является частью openclaw doctor --fix. Команда получает ту же блокировку владения состоянием, что и при запуске Gateway, и удерживает её во время проверки, создания контрольной точки, VACUUM и финальных проверок целостности. Она отказывается выполняться, пока этой блокировкой владеет Gateway или другая команда обслуживания SQLite. Блокировка состояния остаётся активной, когда OPENCLAW_ALLOW_MULTI_GATEWAY=1 пропускает отдельный экземпляр Gateway для каждой конфигурации, поэтому оболочке оператора не нужно наследовать окружение службы Gateway, чтобы обнаружить её при обслуживании.

Сначала остановите Gateway и создайте проверенную резервную копию:

bash
openclaw gateway stopopenclaw backup create --verifyopenclaw doctor --state-sqlite compact --jsonopenclaw gateway start

Команда:

  1. Требует обычный файл по каноническому пути общего состояния. Отсутствующая база данных отмечается как skipped, а команда завершается успешно.
  2. Проверяет текущую поддерживаемую версию схемы и schema_meta.role = "global" перед созданием контрольной точки или изменением файла.
  3. Требует незанятый wal_checkpoint(TRUNCATE). Если контрольная точка занята, остановите все оставшиеся процессы OpenClaw и повторите попытку.
  4. Устанавливает auto_vacuum в INCREMENTAL, выполняет полный VACUUM и снова создаёт контрольную точку.
  5. Выполняет quick_check, integrity_check и foreign_key_check, затем повторно применяет права доступа только для владельца к базе данных и побочным файлам SQLite.

Вывод JSON сообщает размеры базы данных и WAL, количество страниц списка свободных страниц, размер страницы и значение auto_vacuum до и после Compaction, а также количество освобождённых байтов и результаты quick_check и integrity_check. foreign_key_check применяется по принципу запрета при ошибке и не имеет отдельного поля успешного выполнения. SQLite сообщает auto_vacuum как 0 для отсутствующего режима, 1 для полного и 2 для инкрементального.

Compaction завершается ошибкой без внесения изменений, если схема устарела, новее запущенной сборки OpenClaw или принадлежит базе данных агента. Для более старой схемы общего состояния сначала выполните openclaw doctor --fix. Для более новой схемы восстановите совместимую резервную копию или обновите OpenClaw.

Миграция сеансов SQLite

OpenClaw автоматически импортирует устаревшие строки сеансов и историю транскриптов в базу данных SQLite каждого агента при запуске Gateway и во время openclaw doctor --fix. openclaw doctor --session-sqlite <mode> — это целевой инструмент проверки и валидации этой миграции. Текущие строки сеансов среды выполнения хранятся в ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite. Устаревшие файлы sessions.json служат источниками миграции. Активные файлы транскриптов JSONL импортируются и перемещаются в архив за пределы активного каталога сеансов после успешного импорта; архивные файлы JSONL остаются вспомогательными артефактами, а не резервным механизмом среды выполнения.

Режимы:

Режим Поведение
inspect Считывает количество записей в устаревшем хранилище и SQLite, а также несвязанные файлы JSONL, не выполняя импорт.
dry-run Разбирает устаревшие записи и файлы транскриптов JSONL, подсчитывает строки, доступные для импорта, и сообщает о проблемах без записи строк SQLite.
import Импортирует устаревшие записи и события транскриптов в SQLite для выбранных целей.
validate Сравнивает выбранные устаревшие источники со строками SQLite и количеством событий транскриптов.
compact Создаёт контрольную точку и выполняет VACUUM выбранных баз данных SQLite агентов, чтобы освободить свободные страницы после массового удаления или очистки архива.
recover Восстанавливает последний неудачный запуск миграции, проверяет его цели и подготавливает очищенный отчёт для задачи GitHub.
restore Восстанавливает архивированные артефакты транскриптов из записанных манифестов миграции, не удаляя данные SQLite.

Селекторы:

  • По умолчанию: настроенное хранилище агента по умолчанию, если файл этого устаревшего хранилища существует.
  • --session-sqlite-agent <id>: один настроенный агент.
  • --session-sqlite-all-agents: настроенные хранилища агентов и обнаруженные хранилища агентов.
  • --session-sqlite-store <path>: один явно указанный путь устаревшего sessions.json.

Последовательность ручной проверки:

bash
openclaw doctor --session-sqlite inspect --session-sqlite-all-agentsopenclaw doctor --session-sqlite dry-run --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite import --session-sqlite-all-agentsopenclaw doctor --session-sqlite validate --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite compact --session-sqlite-all-agentsopenclaw doctor --session-sqlite recover --github-issue

Перед запуском import в установке с важной историей создайте резервную копию каталога состояния OpenClaw. validate завершается с ненулевым кодом, если выбранная устаревшая запись отсутствует в SQLite, идентификатор сеанса отличается или отличается количество событий транскрипта. При использовании --session-sqlite-store <path> убедитесь, что отчёт содержит ожидаемое количество целей; несуществующий явно указанный путь хранилища не выбирает ни одной цели.

При удалении из SQLite страницы сначала освобождаются внутри базы данных; это не обязательно сразу уменьшает размер файла базы данных. После удаления или архивирования больших транскриптов выполните openclaw doctor --session-sqlite compact --session-sqlite-all-agents, чтобы создать контрольные точки файлов WAL, выполнить VACUUM и сообщить размеры базы данных и WAL до и после операции. Для Compaction требуется обычный файл с текущей схемой агента, долговременными метаданными владельца выбранного агента и без открытого дескриптора в процессе doctor. Разрушительные режимы import, compact, recover и restore удерживают ту же блокировку владения состоянием, что и запуск Gateway, на протяжении всей операции; inspect, dry-run и validate остаются доступными только для чтения и не получают её. Сначала остановите Gateway. Разрушительные режимы завершаются ошибкой, а не конкурируют с активными операциями записи или другой командой обслуживания. Цель разрушительного режима --session-sqlite-store должна находиться внутри активного каталога состояния; задайте OPENCLAW_STATE_DIR равным каталогу состояния, которому принадлежит хранилище, прежде чем обслуживать другую установку. Существующие цели с жёсткими ссылками отклоняются, поскольку другой путь может совместно использовать тот же inode базы данных за пределами заблокированного каталога состояния. Те же проверки владения распространяются на побочные файлы WAL SQLite, общей памяти и журнала отката.

Каждый импорт записывает манифест в ~/.openclaw/session-sqlite-migration-runs/ перед перемещением артефактов транскриптов в архив. Если при запуске сообщается о неудачной миграции сеансов SQLite после перемещения артефактов, запустите восстановление:

bash
openclaw doctor --session-sqlite recover --github-issue

Восстановление выбирает последний манифест неудачной миграции, восстанавливает только архивированные артефакты из манифеста, проверяет затронутые цели, обновляет очищенные отчёты .failure.md и .failure.json и подготавливает текст задачи GitHub, исключающий содержимое транскриптов, необработанное окружение, секреты и неограниченную конфигурацию. Если манифест неудачной миграции отсутствует, но выбранная база данных SQLite агента повреждена, не является базой данных или имеет побочные файлы журнала без основной базы данных, восстановление копирует полный набор файлов во временный каталог для проверки. SQLite может откатить действительный активный журнал в этой одноразовой копии до выполнения quick_check, integrity_check и foreign_key_check, при этом исходные файлы для анализа остаются неизменными. При неудачной проверке целостности или наличии потерянных побочных файлов файлы DB, WAL, SHM и журнала отката сохраняются путём переименования всего обнаруженного набора с единым суффиксом .corrupt-<timestamp>. При перехваченной ошибке переименования уже перемещённые файлы возвращаются обратно до сообщения об ошибке, поэтому восстанавливаемый набор файлов не разделяется незаметно. Остановите Gateway перед восстановлением; копирование или переименование активно изменяющегося набора файлов SQLite небезопасно и ведёт себя по-разному в разных операционных системах. С --github-issue --yes doctor использует GitHub CLI для создания задачи в openclaw/openclaw; без подтверждения он записывает локальный отчёт поддержки и выводит URL задачи с предварительно заполненными данными.

restore остаётся низкоуровневой операцией отмены. Она использует записи sourcePath -> archivePath манифеста, перемещает архивированные артефакты обратно, только если исходный путь отсутствует, сообщает о конфликтах, когда существуют оба пути, и оставляет базу данных SQLite на месте.

Переход на более старую версию после миграции сеансов SQLite

Перед запуском более старой файловой версии OpenClaw восстановите архивированные устаревшие артефакты транскриптов:

bash
openclaw doctor --session-sqlite restore --session-sqlite-all-agents

Старые версии считывают записи sessions.json и пути sessionFile, указанные в этих записях. После миграции на SQLite успешный импорт перемещает активные расшифровки JSONL в session-sqlite-import-archive/, поэтому старая среда выполнения не сможет увидеть эту историю, пока восстановление не вернёт артефакты, зарегистрированные в манифесте, в исходные пути.

Восстановление не удаляет данные SQLite. Сеансы, созданные после перехода на SQLite, существуют только в SQLite и не будут видны старой среде выполнения. Если позднее снова выполнить обновление, запустите приведённую выше стандартную последовательность проверки миграции, чтобы OpenClaw мог сравнить восстановленные устаревшие артефакты со строками SQLite перед импортом.

Примечания

  • В режиме Nix (OPENCLAW_NIX_MODE=1) проверки doctor только для чтения продолжают работать, но doctor --fix, doctor --repair, doctor --yes и doctor --generate-gateway-token отключены, поскольку openclaw.json неизменяем. Вместо этого отредактируйте исходный код Nix для этой установки; для nix-openclaw используйте ориентированное на агента краткое руководство.
  • Интерактивные запросы (исправления связки ключей/OAuth и т. п.) выполняются, только когда stdin является TTY и --non-interactive не задана. При выполнении без терминала (cron, Telegram, отсутствие терминала) запросы пропускаются.
  • Неинтерактивные запуски doctor пропускают предварительную загрузку плагинов, чтобы проверки работоспособности без терминала оставались быстрыми. Интерактивные сеансы по-прежнему загружают поверхности плагинов, необходимые устаревшему процессу проверки работоспособности и исправления.
  • --lint строже, чем --non-interactive: всегда работает только для чтения, никогда не выводит запросы и никогда не применяет безопасные миграции. Используйте doctor --fix или doctor --repair, если требуется, чтобы doctor вносил изменения.
  • По умолчанию doctor не выполняет SecretRef exec при проверке секретов. Используйте --allow-exec--lint или без него), только если намеренно хотите, чтобы doctor запускал настроенные обработчики секретов.
  • При любой записи конфигурации (включая исправление --fix) резервная копия перемещается в ~/.openclaw/openclaw.json.bak (с нумерованным кольцом .bak.1...bak.4). --fix также удаляет неизвестные ключи конфигурации, выявленные при проверке схемы, перечисляя каждое удаление; во время обновления это действие пропускается, чтобы частично записанное состояние обновления не было удалено до завершения его миграции.
  • Задайте OPENCLAW_SERVICE_REPAIR_POLICY=external, если жизненным циклом Gateway управляет другой супервизор. Doctor по-прежнему сообщает о состоянии Gateway/службы и применяет исправления, не относящиеся к службе, но пропускает установку, запуск, перезапуск и начальную настройку службы, а также очистку устаревшей службы.
  • В Linux doctor игнорирует неактивные дополнительные модули systemd, похожие на Gateway, и во время исправления не перезаписывает метаданные команды/точки входа для работающей службы Gateway systemd. Сначала остановите службу или используйте openclaw gateway install --force, чтобы заменить активное средство запуска.
  • doctor --fix --non-interactive сообщает об отсутствующих или устаревших определениях службы Gateway, но не устанавливает и не перезаписывает их вне режима исправления обновления. Выполните openclaw gateway install для отсутствующей службы или openclaw gateway install --force, чтобы заменить средство запуска.
  • Проверки целостности состояния обнаруживают потерянные файлы расшифровок в каталоге сеансов. Для их архивирования как .deleted.<timestamp> требуется интерактивное подтверждение; --fix, --yes и запуски без терминала оставляют их на месте.
  • Doctor сканирует ~/.openclaw/cron/jobs.json (или cron.store) на наличие устаревших форм заданий cron и перезаписывает их перед импортом канонических строк в SQLite.
  • Doctor сообщает о заданиях cron с явным переопределением payload.model, включая количество пространств имён поставщиков и несоответствия с agents.defaults.model, благодаря чему задания по расписанию, которые не наследуют модель по умолчанию, видны при расследовании проблем с аутентификацией или оплатой.
  • Doctor сообщает о заданиях cron, всё ещё помеченных как выполняющиеся (state.runningAtMs), из-за чего openclaw cron list может показывать их как running. Эта проверка выполняется только для чтения: если ни один Gateway сейчас не выполняет помеченное задание, при следующем запуске службы cron прерванный запуск будет зарегистрирован, а метка — снята.
  • В Linux doctor предупреждает, если crontab пользователя всё ещё запускает неподдерживаемый устаревший ~/.openclaw/bin/ensure-whatsapp.sh, который может неверно сообщать Gateway inactive, когда в среде cron отсутствует пользовательская шина systemd.
  • Когда WhatsApp включён, doctor проверяет, не ухудшена ли работа цикла событий Gateway из-за всё ещё запущенных локальных клиентов openclaw-tui. doctor --fix останавливает только проверенные локальные клиенты TUI, чтобы ответы WhatsApp не ожидали в очереди за устаревшими циклами обновления TUI.
  • Doctor перезаписывает устаревшие ссылки на модели codex/* и openai-codex/* в канонические ссылки openai/* для основных и резервных моделей, списков разрешённых моделей, моделей генерации изображений/видео, переопределений heartbeat/подагентов/compaction, перехватчиков, переопределений моделей каналов, полезной нагрузки cron, а также устаревших закреплений маршрутов сеансов/расшифровок. --fix также безопасно объединяет устаревшие конфигурации models.providers.codex и models.providers.openai-codex, переносит устаревшие профили аутентификации openai-codex:* и записи auth.order.openai-codex в openai:*, переносит назначение Codex в записи agentRuntime.id: "codex", ограниченные поставщиком/моделью, удаляет устаревшие закрепления среды выполнения для всего агента/сеанса и сохраняет для исправленных ссылок агентов OpenAI маршрутизацию аутентификации Codex вместо прямой аутентификации OpenAI по ключу API.
  • Doctor сообщает о непустых списках auth.order.<provider>, все указанные профили которых уже отсутствуют, хотя совместимые сохранённые учётные данные существуют. doctor --fix удаляет только эти устаревшие переопределения, восстанавливая автоматический выбор учётных данных для каждого агента; явно пустые порядки, частично актуальные списки и порядки без совместимых сохранённых учётных данных не изменяются. Если активное хранилище аутентификации SQLite недоступно для чтения или имеет неверный формат, doctor объясняет, почему это исправление было пропущено. Если режим перезагрузки конфигурации работающего Gateway не применяет запись автоматически, перезапустите Gateway перед повторной проверкой состояния аутентификации.
  • Doctor очищает устаревшее промежуточное состояние зависимостей плагинов из старых версий OpenClaw и повторно привязывает пакет узла openclaw для управляемых плагинов npm, которые объявляют его одноранговой зависимостью. Он также восстанавливает отсутствующие загружаемые плагины, указанные в конфигурации (plugins.entries, настроенные каналы, настроенные параметры поставщика/поиска, настроенные среды выполнения агентов). Во время обновления пакетов doctor пропускает восстановление плагинов средствами менеджера пакетов до завершения замены пакета; после этого повторно запустите openclaw doctor --fix, если настроенный плагин всё ещё требует восстановления. Если загрузка завершается с ошибкой, doctor сообщает об ошибке установки и сохраняет запись настроенного плагина для следующей попытки восстановления.
  • Doctor исправляет устаревшую конфигурацию плагинов, удаляя идентификаторы отсутствующих плагинов из plugins.allow/plugins.deny/plugins.entries, а также соответствующую висячую конфигурацию каналов, цели Heartbeat и переопределения моделей каналов, если обнаружение плагинов работает исправно.
  • Doctor помещает недопустимую конфигурацию плагина в карантин, отключая затронутую запись plugins.entries.<id> и удаляя её недопустимую полезную нагрузку config. При запуске Gateway уже пропускает только этот неисправный плагин, поэтому остальные плагины и каналы продолжают работать.
  • Doctor удаляет выведенный из эксплуатации plugins.entries.codex.config.codexDynamicToolsProfile; сервер приложений Codex всегда сохраняет собственные инструменты рабочей области Codex в исходном виде.
  • Doctor автоматически переносит устаревшую плоскую конфигурацию Talk (talk.voiceId, talk.modelId и связанные параметры) в talk.provider + talk.providers.<provider>. Повторные запуски doctor --fix больше не сообщают о нормализации Talk и не применяют её, если единственное различие заключается в порядке ключей объекта.
  • Doctor включает проверку готовности поиска в памяти и может рекомендовать openclaw configure --section model, если отсутствуют учётные данные для векторных представлений.
  • Doctor предупреждает, если владелец команд не настроен. Владелец команд — это учётная запись оператора-человека, которой разрешено выполнять команды только для владельца и одобрять опасные действия. Сопряжение в личных сообщениях лишь позволяет пользователю общаться с ботом; если отправитель был одобрен до появления первоначальной настройки первого владельца, явно задайте commands.ownerAllowFrom.
  • Doctor выводит информационное примечание, если настроены агенты в режиме Codex и в домашнем каталоге Codex оператора существуют личные ресурсы Codex CLI. Локальные запуски сервера приложений Codex используют изолированные домашние каталоги для каждого агента; при необходимости сначала установите плагин Codex, затем используйте openclaw migrate plan codex для инвентаризации ресурсов, которые следует перенести намеренно.
  • Doctor предупреждает, если навыки, разрешённые для агента по умолчанию, недоступны в текущей среде выполнения (отсутствуют исполняемые файлы, переменные среды, конфигурация или требования к ОС). doctor --fix может отключить эти недоступные навыки с помощью skills.entries.<skill>.enabled=false; если требуется сохранить навык активным, вместо этого установите или настройте отсутствующий компонент.
  • Если режим песочницы включён, но Docker недоступен, doctor выводит информативное предупреждение со способом устранения (install Docker или openclaw config set agents.defaults.sandbox.mode off).
  • Если присутствуют устаревшие файлы реестра песочницы или каталоги сегментов (~/.openclaw/sandbox/containers.json, ~/.openclaw/sandbox/browsers.json, ~/.openclaw/sandbox/containers/ или ~/.openclaw/sandbox/browsers/), doctor сообщает о них; --fix переносит допустимые записи в SQLite и помещает недопустимые устаревшие файлы в карантин.
  • Если gateway.auth.token/gateway.auth.password управляются через SecretRef и недоступны в текущем пути выполнения команды, doctor выводит предупреждение только для чтения и не записывает резервные учётные данные открытым текстом. Для SecretRef на основе exec doctor пропускает выполнение, если отсутствует --allow-exec.
  • Если проверка SecretRef канала завершается с ошибкой на пути исправления, doctor продолжает работу и выводит предупреждение вместо досрочного завершения.
  • После миграции каталогов состояния doctor предупреждает, если включённые учётные записи Telegram или Discord по умолчанию зависят от резервного получения из среды, а TELEGRAM_BOT_TOKEN или DISCORD_BOT_TOKEN недоступна процессу doctor.
  • Для автоматического разрешения имени пользователя allowFrom в Telegram (doctor --fix) требуется разрешимый токен Telegram в текущем пути выполнения команды. Если проверка токена недоступна, doctor выводит предупреждение и пропускает автоматическое разрешение в этом проходе.

macOS: переопределения среды launchctl

Если ранее выполнялась команда launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (или ...PASSWORD), это значение переопределяет файл конфигурации и может вызывать постоянные ошибки «unauthorized».

bash
launchctl getenv OPENCLAW_GATEWAY_TOKENlaunchctl getenv OPENCLAW_GATEWAY_PASSWORD launchctl unsetenv OPENCLAW_GATEWAY_TOKENlaunchctl unsetenv OPENCLAW_GATEWAY_PASSWORD

Связанные материалы

Was this useful?
On this page

On this page