Рецепт · OpenClaw

Gateway-hosted turn в 2026.9.9: инстанс admitting Gateway вместо заимствованного

Что изменилось в adoption плагинов, какие поля должны совпасть у Gateway и turn, и как перезагрузить плагины без сюрпризов.

· 3 мин чтения

Коротко

  • С 2026.9.9 Gateway-hosted turn использует инстанс admitting Gateway для каждого совпадающего плагина, а не берёт регистрации у другого процесса.
  • Условия adoption — совпадение source, install, manifest, activation, entry policy и configuration; иначе загружается отдельный discovery-инстанс.
  • Перезагрузка — openclaw plugins reload: новые turn получают обновлённый инстанс, а перезагрузка ждёт turn, держащие прежний.
  • Заимствованные channel methods и права на чтение истекают вместе с заимствующим runtime или invocation scope.

Сверено с документацией OpenClaw 2026.9.9, 9 октября 2026.

В OpenClaw 2026.9.9 изменился контракт заимствования между Gateway и его turn. Вместо заимствования регистраций инструментов из чужого реестра turn берёт инстанс плагина у admitting Gateway, если совпадают все шесть полей. Если однозначного живого владельца нет, подготовка загружает свой экземпляр.

Что изменилось в контракте

Раньше Gateway-hosted agent turns заимствовали регистрации инструментов из текущего реестра admitting Gateway. Теперь для каждого неизменённого плагина они используют инстанс admitting Gateway с теми же source, install, manifest, activation, entry policy и configuration, в его workspace и окружении. Источник заимствования — только владелец admitting Gateway, никогда другой Gateway, оказавшийся активным в процессе.

Заимствующий turn запускает регистрации Gateway с registrationMode: "full" и делит с ним services и runtime store. Отдельный discovery-инстанс грузится только для плагинов, которых у Gateway нет или которые сконфигурированы иначе. Turn, загрузившие плагин отдельно, всё ещё заимствуют его регистрации инструментов у текущего реестра admitting Gateway, если совпадают source, configuration, непустой набор объявленных имён инструментов и необязательность.

Условия adoption

Плагин становится общим для Gateway и его turn при совпадении source, install, manifest, activation, entry policy и configuration. Всё это лежит в workspace и окружении Gateway. Для заимствования регистраций инструментов добавляются ещё два: непустой набор объявленных имён инструментов и необязательность. Если хотя бы одно поле разошлось, общий инстанс не выдаётся, и плагин грузится отдельно.

Как перезагрузить без сюрпризов

После openclaw plugins reload более поздние turn используют обновлённый инстанс Gateway. Перезагрузка ждёт turn, которые ещё держат прежний инстанс. Остановка заимствующего turn не останавливает инстанс Gateway.

openclaw plugins reload

Что переписать в плагине

  • Зафиксируйте набор объявленных имён инструментов в манифесте: пустой набор не проходит.
  • Сверьте условия adoption с инстансом Gateway: расхождение отправит плагин в отдельный discovery-инстанс.
  • Проверьте хук before_agent_run для node turn: он блокирует вход Gateway до сборки контекста в воркере.
  • Используйте createPluginRuntimeStore для хранения api.runtime и не держите ссылку на инстанс плагина в module-level state после openclaw plugins reload.
  • В onDispose сбрасывайте ссылки на остановленные ресурсы и таймеры: Node может удерживать вычисленный модуль после замены, и старая ссылка перестаёт быть актуальным runtime-дескриптором.

Где ломается и когда не применять

Источник заимствования — только владелец admitting Gateway, никогда другой Gateway, активный в том же процессе. Без однозначного живого владельца turn уйдёт в свой discovery-инстанс, и общего store не будет.

Если configuration плагина у Gateway и у turn расходится, общего инстанса не будет. Заимствованные channel methods больше не переживают turn: они истекают вместе с заимствующим runtime или invocation scope.