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

Провайдеры окружения

bb 0.43.3SDK 0.4.104пин e865697 (desktop-v0.43.3)

экспериментальный Бэкенд плагина Показать на макете зон

Предлагает места для выполнения треда, которые подготавливает плагин; их выбирают так же, как любое окружение. С её помощью плагин может:

Выделение окружений для выполнения тредов

Что даёт эта поверхность

  • Объявлять провайдер с обязательными отображаемым именем, описанием и иконкой; его выбирают в New Thread или через bb thread spawn --environment-provider
  • Использовать хостовый глиф, ассет по пути относительно плагина, объявленную иконку или слот React-иконки провайдера, нацеленный через обязательные providerKind и providerId
  • Объявлять в одном месте, какие сведения о проекте он использует, — requires.projectCheckout, requires.gitCheckout, requires.gitRemote, requires.projectless; от них структурно зависит, где селектор его предлагает
  • Отвечать о доступности для проекта и машины значением available, setup-required или unavailable; ядро в фоне опрашивает подключённые машины, чтобы селекторы скрывали неподдерживаемые, кэширует ответ и заново проверяет его для выбранной машины при создании треда
  • Объявлять, что ему нужно из запроса, как zod-схему inputs: bb разбирает по ней запрос до появления треда, публикует её как JSON Schema для CLI и передаёт в create разобранное значение как inputs
  • Один раз проверять итоговый выбор до создания треда; предварительная проверка, зависящая от хоста, требует связи, а create проверяет условия, которые могут измениться позже
  • Читать эти сведения как типизированные значения в контексте create: host всегда не null, а projectCheckout и gitRemote не null ровно тогда, когда они затребованы
  • Читать projectCheckout.experimental_ownsPath, чтобы отличать клоны ядра от подключённых путей, которые ведёт пользователь; для собственных путей ядро запускает хуки окружения
  • Отрисовывать собственный элемент ввода для этих inputs рядом с выбранным провайдером через app.slots.experimental_environmentProviderInputs, сообщая либо готовые inputs, либо причину блокировки
  • Использовать experimental_BranchPicker для стандартного выбора ветки либо сочетать experimental_useBranches с experimental_useCheckoutState, когда нужен выбор ветки с учётом состояния checkout
  • Выполнять один идемпотентный долгий вызов create, который возвращает созданный каталог или ошибку; неудачный create окончателен, а явный повтор начинает новую попытку в том же окружении; политика провайдера открывает только отсрочку вывода из эксплуатации и стратегию ключа пути
  • Позволять bb запускать хук настройки репозитория после создания управляемого пути и хук очистки перед удалением; для подключённых путей оба хука пропускаются; неизвестный статус хука после перезапуска демона блокирует автоочистку
  • Использовать pathKey от ядра как стабильный идентификатор ресурса; ядро записывает его как ключ экземпляра окружения
  • Резервировать общий checkout до изменений через create.experimental_claimPath; ядро удерживает блокировку хоста и пути до подключения или очистки
  • Именовать ветку так, как назвал бы её bb, по suggestedBranchName, который ядро передаёт в каждый create, и передавать прогресс через report.step и report.log
  • Учитывать сигналы отмены у create и remove: ядро прерывает create, прежде чем попросить remove очистить всё под тем же ключом пути
  • Работать на существующей зарегистрированной машине, которую передаёт выбор, и возвращать созданный путь
  • Элементы ввода окружения получают target: { kind: 'existing-host', hostId } или { kind: 'new-host' }; композиции переиспользуют исходный элемент ввода до подготовки машины, а create на бэкенде получает настоящий хост
  • Регистрировать композицию с явными отображаемым именем, описанием, иконкой, machineProviderId и environmentProviderId вместо колбэков жизненного цикла: ядро создаёт машину и использует конкретный провайдер окружения, сохраняя его владение checkout
  • Возвращать из созданного запуска непрозрачный JSON-дескриптор ресурса; ядро хранит до 16 KiB приватно и передаёт его только в колбэки восстановления и удаления плагина, записанного владельцем

API

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

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

Project checkout, Personal workspace, Worktree

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