Plugin platform

Pluggable feature modules added in 0.2 — пользователь включает только то, что нужно.

Архитектура#

Каждый плагин — пакет, поставляющий четыре слоя: collector (Go-код в daemon или скилл), storage (миграция + table'ы), server logic (REST/WS под /plugins/<slug>/...) и UI (страница под /plugins/<slug> + per-page widget'ы). Регистрация — in-tree + per-workspace feature flag через таблицу workspace_plugins. Out-of-process MCP-стиль плагины — план на 0.3.

Общие endpoints#

  • GET /plugins — список зарегистрированных плагинов с per-user состоянием enable/config
  • POST /plugins/{slug}/enable — включить (можно передать config override'ом)
  • POST /plugins/{slug}/disable — выключить (config сохраняется для re-enable)
  • GET /recommendations — централизованная лента рекомендаций от всех плагинов (severity / TTL / ack)
  • POST /recommendations/{id}/ack — закрыть рекомендацию (idempotent)

Доступные плагины#

Recommendation engine#

Любой плагин эмиттит observation (структурированный факт) и recommendation (severity / title / body / action_hint / TTL). Дашборд агрегирует на /recommendations — отсортировано urgent → warning → info, по одному tap'у "принято к сведению".

Как написать свой плагин#

Реализуй plugins.Plugin interface (Slug, Title, Description, Routes, DefaultConfig) в новом пакете под apps/api/internal/plugins/<name>/, зарегистрируй в server.go, добавь миграцию для своей таблицы(ы). Для UI — пакет apps/web/app/(app)/plugins/<slug>/.

Существующие 4 плагина — живые примеры разной сложности: devexpulse самый простой (одна таблица, ~150 строк), quality самый продвинутый (substring-attribution в SQL + manual dispute).