Подписанный пакет получает ограниченный набор hardware, MAVLink, telemetry, mission и network‑capabilities, запускается отдельным процессом и общается с host через проверяемый IPC. Ошибка расширения не должна останавливать flight‑critical сервисы.
Модель расширений и CLI описаны как целевой контракт; registry, signing root и публичный SDK KairOS ещё не выпущены.
Репозиторий KairOS ↗На этой странице +
Пять защитных границ
Package
Расширение упаковано в .kairosplug с manifest, version, entry point, requested capabilities и подписью.
Trust
Ed25519 signature проверяется до распаковки; revocation list применяется на boot. Unsigned разрешён только в developer mode.
Operator grant
Права показываются человеку до установки; sensitive permissions требуют отдельного повторного подтверждения.
Process boundary
Каждый plugin работает в собственном subprocess/cgroup с CPU, memory и PID limits.
Capability IPC
msgpack RPC через Unix socket проверяет capability token при каждом вызове host API.
Права сгруппированы по реальному ресурсу
| Группа | Примеры capability |
|---|---|
| Hardware | UART, I²C, SPI, GPIO, USB serial/UVC, CSI |
| MAVLink | Read, write и registration собственного component |
| Telemetry | Subscribe, extend и publish event |
| Sensors / payload | Регистрация датчика или payload interface |
| Mission | Read, write и record mission data |
| Network | HTTPS egress только к manifest allowlist |
Permission не означает прямой доступ ко всей системе. Например, разрешение UART должно выдавать конкретный device или brokered handle, а network egress — только заранее объявленные домены. Оператор может отозвать grant из Mission Control.
Manifest и минимальный plugin context
name: cell-balance-monitor
version: 0.1.0
agent:
entry: cell_balance:run
capabilities:
- telemetry.read
- event.publishfrom kairos_sdk import PluginContext
async def run(ctx: PluginContext):
async for battery in ctx.telemetry.subscribe("telemetry.battery"):
cells = battery.get("cells", [])
if cells and max(cells) - min(cells) > 0.15:
await ctx.events.publish(
"alert.cell_imbalance",
{"spread_v": max(cells) - min(cells)},
)Установка, разрешения, логи и тесты
kairos plugin install ./thermal-cam.kairosplug
kairos plugin enable thermal-cam
kairos plugin list
kairos plugin disable <name>
kairos plugin remove <name>
kairos plugin info <name>
kairos plugin perms <name>
kairos plugin logs <name>
kairos plugin test <path>install проверяет package и подпись, затем показывает запрошенные права. enable запускает процесс только после grant. info и perms нужны для аудита, logs — для диагностики, test — для локального author workflow. Удаление должно останавливать процесс и очищать его scoped state без касания других расширений.
Три базовых плагина и расширения устройств
geofence
Проверяет положение относительно разрешённых зон и публикует наблюдаемое событие.
telemetry-logger
Записывает выбранные telemetry streams с ограничением объёма и явным lifecycle.
mavlink-inspector
Показывает frames для диагностики без изменения flight state по умолчанию.
Thermal camera
FLIR Lepton USB UVC, radiometric Y16, Celsius, palette/isotherm и MAVLink camera surface.
MAVLink Gimbal v2
External controller bridge, attitude command/status и component 154.
Разделяем первый релиз и последующие этапы
| Первый целевой релиз | Следующий этап |
|---|---|
| Local signed install | Hosted searchable registry |
| Capability enforcement на каждом IPC | Публичный standalone kairos_sdk package |
| Built-ins и CLI | Scaffolder и templates |
| Permission review и revoke | Install из Git URL |
| Test runner | Shared driver layer и полные author docs |