openclaw update
Обновление OpenClaw и переключение между каналами stable/extended-stable/beta/dev.
Если установка выполнена через npm/pnpm/bun (глобальная установка без метаданных git),
обновление выполняется через процесс пакетного менеджера, описанный в разделе
Обновление.
Использование
openclaw --update преобразуется в openclaw update (это удобно для оболочек и
скриптов запуска).
Параметры
Флага
--verbose нет. Для предварительного просмотра запланированных действий используйте --dry-run,
для машиночитаемых результатов — --json, а для получения только
сведений о канале и доступности — openclaw update status --json. Подробность вывода Gateway в консоль (--verbose) и
уровень журналирования в файл (logging.level: "debug"/"trace") настраиваются независимо; см.
Журналирование Gateway.
В режиме Nix (
OPENCLAW_NIX_MODE=1) изменяющие состояние запуски openclaw update отключены. Вместо этого обновите источник Nix или входные данные flake для этой установки; для nix-openclaw используйте ориентированное на агента краткое руководство. openclaw update status и openclaw update --dry-run остаются доступными только для чтения.update status
Показать активный канал обновлений, тег/ветку/SHA git (только для рабочих копий
исходного кода) и доступность обновлений.
Для пакетных установок extended-stable команда состояния выполняет ту же проверку открытого селектора
и точного пакета, что и обновление на переднем плане. Она может сообщить
ahead of extended-stable, если установленная версия новее. Ошибки в формате JSON
включают registry.reason (selector_missing, selector_query_failed,
exact_package_mismatch или unsupported_git_channel).
update repair
Повторно выполнить завершение обновления, если основной пакет уже изменён, но последующие
операции восстановления не завершились корректно. Это поддерживаемый способ восстановления, когда
openclaw update установил новый основной пакет, но последующая синхронизация плагинов,
метаданные управляемых npm-плагинов, обновление реестра или восстановление через Doctor не
сошлись к согласованному состоянию.
update repair запускает openclaw doctor --fix, повторно загружает восстановленную конфигурацию и
записи об установке, синхронизирует отслеживаемые плагины для активного канала обновлений, обновляет
установки управляемых npm-плагинов, восстанавливает отсутствующие данные настроенных плагинов,
обновляет реестр плагинов и записывает метаданные согласованных записей об установке.
Он не устанавливает новый основной пакет и не перезапускает Gateway.
update wizard
Интерактивный процесс выбора канала обновлений и подтверждения необходимости последующего перезапуска
Gateway (по умолчанию перезапуск выполняется). При выборе dev без рабочей копии git
предлагается создать её.
Что происходит
Явное переключение каналов (--channel ...) также обеспечивает соответствие способа
установки:
dev-> обеспечивает наличие рабочей копии git (по умолчанию~/openclawили$OPENCLAW_HOME/openclaw, если заданOPENCLAW_HOME; можно переопределить с помощьюOPENCLAW_GIT_DIR), обновляет её и устанавливает глобальный CLI из этой рабочей копии.stable-> устанавливает из npm с использованиемlatest.extended-stable-> разрешает открытый селектор npmextended-stable, проверяет точный выбранный пакет и устанавливает именно эту версию. Резервный переход на другой селектор не выполняется; вариант недоступен для рабочих копий Git.beta-> отдаёт предпочтение dist-тегу npmbeta, переходя наlatest, если beta отсутствует или старее текущего стабильного выпуска.
Передача управления при перезапуске
Автоматическое обновление ядра Gateway (если включено в конфигурации) запускает путь обновления CLI вне активного обработчика запросов Gateway. Обновления через пакетный менеджер плоскости управленияupdate.run и контролируемые обновления рабочих копий git используют
тот же механизм передачи управления управляемой службе вместо замены дерева пакетов или
пересборки dist/ внутри активного процесса Gateway: Gateway запускает
отсоединённый вспомогательный процесс и завершает работу, после чего этот процесс запускает openclaw update --yes --json
вне дерева процессов Gateway. Если передача управления недоступна,
update.run возвращает структурированный ответ с безопасной командой оболочки для
ручного запуска.
Сохранённые настройки extended-stable получают при запуске доступные только для чтения подсказки и подсказки об обновлении раз в 24 часа, когда включён update.checkOnStart. Эти проверки никогда не применяют обновление, не запускают передачу управления, не перезапускают Gateway, не используют задержку/джиттер стабильного канала и не используют частоту опроса бета-канала. По-прежнему поддерживаются явные обновления в интерактивном режиме, обновления в интерактивном режиме без аргументов с сохранённым update.channel: "extended-stable", получение состояния по запросу и связанная с ними передача управления управляемому Gateway.
Когда локальная управляемая служба Gateway установлена и перезапуск включён, обновления через менеджер пакетов и обновления рабочей копии Git останавливают работающую службу перед заменой дерева пакета или изменением рабочей копии/результатов сборки. Затем средство обновления обновляет метаданные службы, перезапускает её и проверяет перезапущенный Gateway, прежде чем сообщить Gateway: restarted and verified..
Кроме того, при обновлении через менеджер пакетов проверяется, что перезапущенный Gateway сообщает ожидаемую версию пакета; при обновлении рабочей копии Git после повторной сборки проверяются работоспособность Gateway и готовность службы.
При обновлениях через менеджер пакетов обычно продолжает использоваться исполняемый файл Node, записанный в управляемой службе. Если этот Node не может запустить целевой выпуск, но текущий Node для CLI может это сделать и доказано, что служба принадлежит обновляемому пакету, обновление с включённым перезапуском использует текущий Node для завершения и перезаписывает метаданные службы, указывая эту среду выполнения. --no-restart не может исправить метаданные службы, поэтому при таком же несоответствии среды выполнения процесс останавливается до изменения пакета.
В macOS проверка после обновления также удостоверяется, что LaunchAgent загружен/работает для активного профиля и настроенный loopback-порт исправен. Если plist установлен, но launchd не управляет им, OpenClaw автоматически повторно инициализирует LaunchAgent и снова выполняет проверки работоспособности/версии/готовности канала (при новой инициализации задание RunAtLoad загружается напрямую, поэтому восстановление не выполняет сразу kickstart -k для только что запущенного Gateway). Если Gateway всё равно не становится работоспособным, команда завершается с ненулевым кодом и выводит путь к журналу перезапуска, а также инструкции по перезапуску, переустановке и откату пакета.
Если перезапуск выполнить невозможно, команда выводит Gateway: restart skipped (...) или Gateway: restart failed: ... с подсказкой о ручном выполнении openclaw gateway restart.
При --no-restart замена пакета или повторная сборка Git всё равно выполняется, но управляемая служба не останавливается и не перезапускается, поэтому работающий Gateway продолжает использовать старый код, пока вы не перезапустите его вручную.
Формат ответа плоскости управления
Когдаupdate.run выполняется через плоскость управления Gateway для установки через менеджер пакетов или контролируемой рабочей копии Git, обработчик сообщает об инициализации передачи управления отдельно от обновления CLI, которое продолжается после завершения работы Gateway:
ok: true,result.status: "skipped",result.reason: "managed-service-handoff-started"иhandoff.status: "started": Gateway создал передачу управления управляемой службе и запланировал собственный перезапуск, чтобы отделённый вспомогательный процесс мог выполнитьopenclaw update --yes --jsonвне процесса работающей службы.ok: false,result.reason: "managed-service-handoff-unavailable"иhandoff.status: "unavailable": OpenClaw не удалось найти границу контролирующей службы и устойчивый идентификатор службы для безопасной передачи управления (например, для передачи управления systemd требуется идентификатор юнитаOPENCLAW_SYSTEMD_UNIT, а не только присутствующие в окружении признаки процесса systemd). Ответ содержитhandoff.command— команду оболочки, которую нужно выполнить вне Gateway.ok: false,result.reason: "managed-service-handoff-failed": Gateway попытался создать передачу управления, но не смог запустить отделённый вспомогательный процесс.
sentinel записывается до завершения работы Gateway, а передача управления CLI обновляет тот же маркер перезапуска после завершения проверок работоспособности перезапущенной управляемой службы. Во время передачи управления маркер может содержать stats.reason: "restart-health-pending" без продолжения при успешном результате; перезапущенный Gateway опрашивает его и запускает продолжение только после того, как CLI проверит работоспособность службы и перезапишет маркер окончательным результатом ok.
openclaw status и openclaw status --all показывают строку Update restart, пока этот маркер ожидает обработки или указывает на ошибку, а update.status обновляет и возвращает последний маркер.
Процесс для рабочей копии Git
Выбор канала
stable: перейти на последний тег, не относящийся к бета-версии, затем выполнить сборку и doctor.beta: предпочитать последний тег-beta, а если бета-версия отсутствует или старее — использовать последний стабильный тег.dev: перейти наmain, затем получить изменения и выполнить rebase.extended-stable: не поддерживается для рабочих копий Git; рабочая копия не изменяется.
Этапы обновления
1
Проверить чистоту рабочего дерева
Требуется отсутствие незакоммиченных изменений.
2
Переключить канал
Переключает на выбранный канал (тег или ветвь).
3
Получить изменения из вышестоящего репозитория
Только для dev.
4
Предварительная сборка (только для dev)
Запускает сборку TypeScript во временном рабочем дереве. Если вершина не проходит сборку, перебирает до 10 предыдущих коммитов, чтобы найти самый новый коммит, который можно собрать. Задайте
OPENCLAW_UPDATE_PREFLIGHT_LINT=1, чтобы при этой предварительной проверке также запускался линтер; линтер работает в ограниченном последовательном режиме, поскольку пользовательские хосты обновления часто имеют меньше ресурсов, чем исполнители CI.5
Выполнить rebase
Выполняет rebase на выбранный коммит (только для dev).
6
Установить зависимости
Использует менеджер пакетов репозитория. Для рабочих копий pnpm средство обновления при необходимости загружает
pnpm (сначала через corepack, затем через временный резервный вариант npm install pnpm@11) вместо запуска npm run build внутри рабочего пространства pnpm. Если загрузка pnpm всё равно завершается ошибкой, средство обновления останавливается на раннем этапе с ошибкой, относящейся к менеджеру пакетов, вместо попытки выполнить npm run build в рабочей копии.7
Собрать интерфейс управления
Собирает Gateway и интерфейс управления.
8
Запустить doctor
openclaw doctor выполняется как заключительная проверка безопасного обновления.9
Синхронизировать плагины
Синхронизирует плагины с активным каналом. Dev использует встроенные плагины; stable и beta используют npm. Обновляет отслеживаемые установки плагинов.
Сведения о синхронизации плагинов
На бета-канале отслеживаемые установки плагинов npm и ClawHub, использующие линию default/latest, сначала пытаются получить выпуск плагина@beta. Если у плагина нет бета-выпуска, OpenClaw возвращается к записанной спецификации default/latest и выводит предупреждение. Для плагинов npm OpenClaw также использует резервный вариант, если бета-пакет существует, но не проходит проверку установки. Эти предупреждения о переходе на резервный вариант не приводят к ошибке основного обновления. Точные версии и явно заданные теги никогда не перезаписываются.
Ошибки синхронизации плагинов после обновления, которые относятся к управляемому плагину и которые процесс синхронизации может обойти (например, недоступный реестр npm для необязательного плагина), выводятся как предупреждения после успешного завершения основного обновления. В результате JSON сохраняется верхнеуровневое значение обновления
status: "ok", а также выводится postUpdate.plugins.status: "warning" с рекомендациями openclaw update repair и openclaw plugins inspect <id> --runtime --json. Непредвиденные исключения средства обновления или синхронизации по-прежнему приводят к ошибке результата обновления. Исправьте ошибку установки или обновления плагина, затем повторно выполните openclaw update repair. Если неудачное обновление делает управляемый плагин непригодным для использования, OpenClaw отключает его запись среды выполнения и сбрасывает активные слоты, не изменяя заданную оператором политику plugins.allow или plugins.deny.После этапа синхронизации отдельных плагинов openclaw update выполняет обязательный проход согласования после обновления ядра перед перезапуском Gateway: восстанавливает отсутствующие полезные нагрузки настроенных плагинов, проверяет на диске каждую активную отслеживаемую запись установки и статически проверяет, что её package.json можно разобрать (и что существует любой явно объявленный main). Ошибки этого прохода, а также недопустимый снимок конфигурации возвращают postUpdate.plugins.status: "error" и меняют верхнеуровневое значение обновления status на "error", поэтому openclaw update завершается с ненулевым кодом, а Gateway не перезапускается с непроверенным набором плагинов. Ошибка содержит структурированные строки postUpdate.plugins.warnings[].guidance, указывающие на openclaw update repair и openclaw plugins inspect <id> --runtime --json. Отключённые записи плагинов и записи, которые не являются официальными целями синхронизации, связанными с доверенным источником, здесь пропускаются (в соответствии с политикой skipDisabledPlugins, используемой при проверке отсутствующих полезных нагрузок), поэтому устаревшая запись отключённого плагина не может заблокировать в остальном корректное обновление.После запуска обновлённого Gateway загрузка плагинов выполняется только в режиме проверки: при запуске менеджеры пакетов не запускаются и деревья зависимостей не изменяются. Перезапуски update.run менеджера пакетов передаются управляемой службе через CLI, поэтому замена пакета происходит вне старого процесса Gateway, а проверки работоспособности службы определяют, можно ли сообщить о завершении обновления.latest OpenClaw не запрашивает @extended-stable плагина и не возвращается к latest npm; версия пакета определяется по установленному ядру. Явно закреплённые версии, явно заданные теги, отличные от latest, сторонние пакеты и источники, отличные от npm, сохраняют существующее намерение.
Для установок через менеджер пакетов openclaw update определяет целевую версию пакета до вызова менеджера пакетов. Глобальные установки npm используют поэтапную установку: OpenClaw устанавливает новый пакет во временный префикс npm, позволяет пакету-кандидату проверить версию Node на хосте во время preinstall и проверяет там упакованный реестр dist. Упакованный защитный механизм завершения остаётся за пределами этого реестра до успешного выполнения preinstall, поэтому менеджеры пакетов, пропускающие скрипты жизненного цикла, также останавливаются до активации. В npm 12 и новее средство обновления разрешает только жизненный цикл пакета-кандидата OpenClaw; скрипты транзитивных зависимостей остаются заблокированными. Затем OpenClaw заменяет чистым деревом пакета дерево в реальном глобальном префиксе. Если проверка завершается ошибкой, doctor после обновления, синхронизация плагинов и перезапуск не выполняются из подозрительного дерева. Даже если установленная версия уже соответствует целевой, команда обновляет глобальную установку пакета, затем выполняет синхронизацию плагинов, обновление автодополнения основных команд и перезапуск. Это поддерживает упакованные вспомогательные компоненты и принадлежащие каналу записи плагинов в соответствии с установленной сборкой OpenClaw, оставляя полную пересборку автодополнения команд плагинов для явных запусков openclaw completion --write-state.
См. также
openclaw doctor(предлагает сначала выполнить обновление в рабочих копиях Git)- Каналы разработки
- Обновление
- Справочник CLI