Провайдеры машин
bb 0.43.3SDK 0.4.104пин e865697 (desktop-v0.43.3)
Добавляет машины, которые подготавливает плагин и которые сочетаются с провайдерами окружения. С её помощью плагин может:
Создание машин для выполнения и владение ими
Что даёт эта поверхность
- Регистрировать bb.experimental_machines с отображаемым именем, однострочным описанием и обязательной иконкой: глифом, SVG по пути относительно плагина, объявленной иконкой или React-иконкой
- Показывать отображаемое имя и иконку провайдера как тип рядом с каждой созданной им машиной; у машин, зарегистрированных вручную, типа нет
- Объявлять автоматический вывод из эксплуатации для временных машин, созданных тредами; самостоятельные машины остаются до явного удаления. Ядро разбирает inputs по Standard Schema и проверяет доступность и валидацию до create
- Хранить секреты в настройках плагина, потому что сохранённые inputs машины может прочитать любой плагин; передавать только несекретную конфигурацию или ссылки
- Регистрировать композицию окружения с machineProviderId и environmentProviderId, чтобы создать машину и затем использовать конкретный провайдер окружения; одна регистрация машины не добавляет пункта в селектор; в CLI композиция выбирается через --environment-provider
- Создавать машины, не привязанные к проектам: проекты подключаются к машине позже через источники проекта
- Делать create идемпотентным по ключу запуска хоста, чтобы перезапуск после регистрации восстановил ту же машину
- Выполнять начальную настройку через обязательный MachineExecutor; Manual setup в ядре использует внутренние операции регистрации; никогда не помещать учётные данные в JSON ресурса или в вывод
- Устанавливать демон для ожидающей регистрации и перезапускать зарегистрированную идентичность после восстановления из снепшота
- Передавать прогресс на создающем хосте и учитывать сигналы отмены для create, suspend, resume и remove
- Не допускать учётных данных в report.step и report.log: ядро сохраняет прогресс и копирует его в транскрипты тредов; команды ручной регистрации ядро отдаёт временно, по ID хоста
- Дожидаться create.checkpoint(resource) сразу после выделения ресурсов, чтобы отмена могла удалить ресурс, не дожидаясь начальной настройки
- Реализовать reconcileCleanup, чтобы находить и удалять неопределённые выделения ресурсов по постоянному ключу, когда чекпоинта нет; remove получает известные ресурсы; никогда не создавать и не выполнять начальную настройку; возвращать failed, пока намерение выделения не разрешено, чтобы ядро повторило попытку со своим интервалом очистки
- Дожидаться suspend.checkpoint(resource) перед разрушающей очисткой
- Дожидаться resume.checkpoint(resource) перед начальной настройкой; ядро применяет fencing к владению провайдера, фазе и операции и после перезапуска восстанавливает ту же регистрацию
- Чекпоинты выделения ресурсов — записи для восстановления, а не сохранения файловой системы; подключение демона ещё не означает готовность агента
- Читать текущий сохранённый ресурс машины по ID хоста через bb.experimental_machines.getResource; чтение работает между плагинами и возвращает null для отсутствующих хостов или ресурсов
- Самому управлять таймингом простоя в плагине с помощью событий thread-sequence и terminal-input и фоновых расписаний
- Рендерить один компактный элемент ввода параметров машины при композитном создании треда через app.slots.experimental_machineProviderInputs, сообщая при монтировании готовое несекретное JSON-значение либо причину блокировки в одном предложении
- Запрашивать приостановку и возобновление через SDK хоста: вызовы возвращают обновлённый хост, когда отслеживаемая операция стартует; ядро координирует drain; запускающиеся треды, окружения в процессе подготовки и настройка checkout проекта отклоняют приостановку с machine_busy; политикой простоя владеют плагины
- Читать состояние обслуживания и сбои жизненного цикла из фазы жизненного цикла и сообщения каждого хоста
- Вызывать hosts.experimental_reconcile из обслуживания, которым владеет плагин, чтобы через провайдера применить состояние приостановки, записанное в ядре; активные и переходные состояния не меняются, вызов возвращается после принятия; о завершении узнавайте, опрашивая статус хоста, — ядро само не опрашивает. Приостановка и возобновление должны быть идемпотентными: сохраняйте остановленные ресурсы и переиспользуйте работающие вычислительные ресурсы. Новые паузы запрашивайте через experimental_suspend
- Дожидаться suspend.checkpoint(resource), чтобы сохранить непрозрачное состояние ресурса до остановки; планировать обслуживание у вендора в плагине через bb.background.schedule и bb.sdk.hosts.experimental_suspend
- При необходимости объявлять поддержку приостановки и возобновления совместно: плагин управляет временем простоя, а ядро координирует смену состояний
- Возвращать непрозрачный JSON-ресурс, который ядро сохраняет и передаёт обратно в операции жизненного цикла; никогда не включать в него учётные данные
- Возвращать из create обязательное понятное имя машины
- Считать неудачный create окончательным и повторять запросы при временных сбоях API вендора внутри вызова create
API
Каждый символ ведёт на закреплённый коммит, на котором его прочитали.
PluginMachinesinterfaceHostsArea.experimental_createmethodHostsArea.experimental_getEnrollmentCommandmethodHostsArea.experimental_listProvidersmethodHostsArea.experimental_suspendmethodHostsArea.experimental_reconcilemethodHostsArea.experimental_resumemethodHostsArea.experimental_retryCleanupmethodPluginMachines.getResourcemethodMachineExecutorRequestinterfaceMachineExecutorinterfaceMachineBootstrapRequestinterfaceMachineBootstrapApiinterfacePluginMachineProviderDeclarationtypePluginMachineValidateDecisiontypePluginMachineProviderInputsRegistrationinterfacePluginMachineProviderInputsPropsinterfacePluginMachineProviderInputsChangetypePluginMachineProviderDefinitioninterfacePluginMachineProviderInputsSchematypePluginMachineProviderAvailabilitytypePluginMachineProviderValidateContexttypePluginMachineProviderCreateContexttypePluginMachineProviderCreateResulttypePluginMachineProviderLifecycleContextinterfacePluginMachineProviderProgressinterfacePluginMachineProviderResourceResultinterfacePluginMachineProviderResourcetypePluginMachineProviderRemoveResulttype
Используется в плагинах
Modal sandbox
Бриф — это Markdown для кодинг-агента: что это за возможность, где она регистрируется, каждый символ SDK с постоянной ссылкой на закреплённый коммит, правила, на которых спотыкаются, и что считать готовым.