Перейти к содержимому

Провайдеры машин

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

Каждый символ ведёт на закреплённый коммит, на котором его прочитали.

Используется в плагинах

Modal sandbox

Бриф — это Markdown для кодинг-агента: что это за возможность, где она регистрируется, каждый символ SDK с постоянной ссылкой на закреплённый коммит, правила, на которых спотыкаются, и что считать готовым.