Как собрать

OpenClaw 2026.10.5: перевод modelAccountConnectService на awaited-вызовы

Как перевести семь методов modelAccountConnectService, подготовку транскрипта и размещение на новые асинхронные вызовы до удаления в следующем Plugin SDK major.

· 4 мин чтения

Коротко

  • Семь синхронных методов modelAccountConnectService получили ожидаемых двойников (listLinksAsync, linkAsync, unlinkAsync, listAsync, selectAsync, statusAsync, cancelAsync).
  • Старые помощники транскрипта prepareMessageAfterIdempotencyCheck и beforeFreshMessageCommit остаются для устойчивых целей с прежним порядком транзакций; инкогнито и цели, привязанные к исполнителю, отклоняют старую форму с ошибкой, указывающей замену.
  • Эти миграции не трогают схемы RPC, сохранённые данные и поведение обновлений.

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

Семь синхронных методов modelAccountConnectService получили асинхронные двойники, а для подготовки транскрипта добавили отдельные пути.

Шаг 1. Замените семь методов modelAccountConnectService

Каждый асинхронный метод сохраняет аргументы синхронного двойника и возвращает ту же обёртку результата. Передайте текущего владельца и актуальный assertCurrent (колбэк проверки полномочий): сервис перепроверит полномочия во время асинхронной работы и перед тем, как отдать сводку или ссылки. Результаты не содержат учётных данных. Если исход записи неизвестен, не повторяйте вызов и не откатывайтесь к синхронному методу.

| Synchronous method | Awaited replacement |
| ------------------ | ------------------- |
| `listLinks`        | `listLinksAsync`    |
| `link`             | `linkAsync`         |
| `unlink`           | `unlinkAsync`       |
| `list`             | `listAsync`         |
| `select`           | `selectAsync`       |
| `status`           | `statusAsync`       |
| `cancel`           | `cancelAsync`       |

Шаг 2. Переведите подготовку транскрипта

Старые экспорты prepareMessageAfterIdempotencyCheck и beforeFreshMessageCommit остаются в записях transcript-lock-sync-message-preparation и transcript-strict-sync-message-preparation для устойчивых целей с прежним порядком транзакций. На инкогнито и actor-bound целях старая форма отклоняется с заменяющей ошибкой. Новые помощники — preparation.prepareMessage, preparation.source и withSessionTranscriptWrite.

preparation.prepareMessage
preparation.source
withSessionTranscriptWrite

Шаг 3. Переведите размещение и подготовку node-grant

На контексте Gateway размещение получило асинхронные варианты. Подготовьте данные перед зависимой работой и не освобождайте ресурсы запроса до результата.

workerSessionPlacementService.getManyAsync
placementStandingGrants.resolveBindingAsync
workerPlacementDispatchService.getAdmittedDeviceSessionCountsAsync

consume остаётся финальной синхронной границей авторизации транспорта: подготовленные ранее данные не заменяют текущие полномочия размещения, сопряжения и согласования родителя. Синхронные двойники из SDK 2026.9.8 сохранены как устаревшая совместимость до следующего Plugin SDK major.

Шаг 4. Сверьте упоминания и запись в Inbox

  1. context.mentionInbox.list(client) и context.mentionInbox.dismiss(client, ids) замените на асинхронные двойники listAsync и dismissAsync с обратным вызовом publish.
  2. recordCommittedInput(input) замените на await recordCommittedInputAsync(input).
  3. invalidate(sessionKey) замените на await invalidateAsync(sessionKey).

Внутри publish отправьте ответ Gateway без дополнительных await. Запись дожидается, пока модуль совместной работы обновит участие сессии, и только потом сохраняет элементы Inbox. Обе записи сохраняют владельцев и завершаются до остановки воркера Gateway. Старые синхронные методы остаются совместимыми адаптерами до следующего Plugin SDK major и явного согласования ломающего релиза.

Шаг 5. Переведите полномочия инструментов и поверхность инструментов

  • params.hostCapabilities.createToolSurfaceAsync(options, bindingOptions?) создаёт поверхность инструментов с актуальной политикой выполнения.
  • createOpenClawCodingToolsAsync(options?) из openclaw/plugin-sdk/agent-harness — для вызывающих вне harness.

Не используйте более ранний хэш как разрешение после await: каждое действие требует свежей подготовки и текущих полномочий владельца. При ошибке миграции или потере полномочий создание отклоняется, через синхронную фабрику повторять нельзя.

Шаг 6. V2-инжекция: подготовка и граница

Бэкенды версии V2 могут добавить queueMessageAsync. Он сохраняет существующие аргументы, но аргумент проверки заменяется на объект с тремя функциями.

Подготовка сама по себе не разрешает ввод после закрытия читателя. При делегировании встроенному механизму управления передайте функции подготовки без изменений, чтобы хост связал финальное чтение и постановку в очередь в одном допуске. Нативные транспорты могут использовать withPreparedCurrent. Приёмник без этой границы сохраняет синхронную проверку compatAssertCurrent прямо перед эффектом, вне разрешений обработчика.

Шаг 7. Финальная чистка импортов

  • прямых вызовов listLinks, link, unlink, list, select, status, cancel на modelAccountConnectService
  • prepareMessageAfterIdempotencyCheck и beforeFreshMessageCommit на инкогнито и actor-bound целях
  • синхронных list и dismiss у mentionInbox, кроме случаев, когда нужен совместимый адаптер
  • внутренних фабрик createToolSurface и createOpenClawCodingTools без Async

Как проверить

  1. Прогоните тесты против экземпляра 2026.10.5.
  2. Следите за предупреждениями с кодом DEP_SESSION_PERSISTENCE: на старых вызовах должно появляться не больше одного предупреждения на плагин и метод за процесс; после миграции — ноль.
  3. Если работаете из чекаута OpenClaw, pnpm plugins:boundary-report --owner <id> покажет записи совместимости, сроки и гейты по нужному владельцу.

Если что-то пошло не так

  • Плагин не загружается из-за пропавших имён в приватных фасадах среды выполнения. Экспорт восстановлен и помечен как устаревший в записи plugin-sdk-private-runtime-shipped-exports, разрешено удалить после 2027-01-15. Перейдите на публичный подпуть или держите локальную копию в плагине.