Extension Platform Core
Поверх v3-ядра и классических реестров (app.sidebar, ai.artifactDrivers, …) платформа даёт четыре опоры для кросс-расширенческой логики без прямых зависимостей между пакетами:
| Столп | Задача | Registry IDs |
|---|---|---|
| Space types | Тип Space + UI создания и runtime per type | backend.spaceTypes, app.spaceCreatePanels, app.spaceTypeViews |
| Space abilities | Роли и абилки внутри space (CASL), персистентные политики | backend.spaceAbilities, backend.spaceRoles |
| Entity fields | Кастомные поля сущностей (EAV, значения — строки) | backend.entityFields |
| Entity hooks | Express-like middleware на CRUD entry points | backend.entityHooks |
ADR и краткая заметка для миграции: architecture-v3/migration-notes/extension-platform.md.
Сценарий: продуктовые расширения
| Расширение | Space type | Create panel |
|---|---|---|
| (ядро) | standard | — |
| AI-flow | ai-flow.automatic | пресет + bootstrap |
| Required deliverables | — | panel на standard |
| Artifact review | — | — |
Сценарий из коробки (hooks demo)
Расширение workflow-engine (гипотетическое):
- Регистрирует ability
workflow-engine.enforceDeliverablesи рольworkflow-engine.reviewer. - Регистрирует поле
workflow-engine.strictModeнаspace(defaultValue: 'false'). - В хуке
artifact:beforeCreateчитаетhookCtx.fields['workflow-engine.strictMode']иhookCtx.ability.can('workflow-engine.enforceDeliverables')— без импорта другого расширения.
mermaid
flowchart TB
subgraph ext [Extension setup]
R1[registerSpaceAbility / registerSpaceRole]
R2[registerEntityField]
R3[registerEntityHook]
end
subgraph host [Host runtime]
REG[(Extension registries)]
EAV[(EntityFieldValue)]
POL[(SpaceAbilityPolicy)]
HOOKS[EntityHookRunner]
CASL[buildSpaceAbility]
end
subgraph entry [Request path]
GQL[GraphQL / services]
GQL --> CASL
GQL --> HOOKS
HOOKS --> CASL
HOOKS --> EAV
CASL --> POL
EAV --> REG
POL --> REG
end
R1 --> REG
R2 --> REG
R3 --> REGГде что живёт в коде
| Область | Путь |
|---|---|
| Space CASL | apps/backend/src/modules/spaces/abilities/ |
| EAV | apps/backend/src/modules/entity-fields/ |
| Hooks runner | apps/backend/src/modules/entity-hooks/ |
| Extension host APIs | apps/backend/src/modules/extensions/context.ts, extension-host.ts |
| SDK types | packages/extension-sdk/src/host/ |
| Frontend guards | apps/frontend/src/shared/composables/useSpaceAbility.ts |
| GraphQL | apps/backend/src/modules/spaces/graphql/schema.ts, artifacts/graphql/schema.ts |
Слои abilities
| Слой | Scope | Не путать с |
|---|---|---|
| Global CASL | admin / user, InstanceSettings, профиль | apps/backend/src/modules/casl/ability.ts |
| Space CASL | операции внутри конкретного space | глобальными ролями Keystone User |
Space abilities не заменяют глобальный CASL — дополняют его на уровне membership в space.
Демо
Расширение registry-test регистрирует demo field, role, ability и hook artifact:beforeCreate (abort по имени __registry_test_abort__).
Документация по фичам
Space types
Space abilities
- Обзор и модель
- Core-роли и каталог абилок
- Регистрация ролей и абилок расширения
- Политики и назначение ролей
- Frontend: guards и UI
Entity fields
- Обзор и принцип «всё строка»
- Хранение EAV и registry
- Backend API и хуки
- Frontend: чтение и UI-паттерны
- GraphQL: фильтрация дерева
- AI: текущее состояние и паттерны
Entity hooks
Вне scope платформы (v1)
- Workflow-engine, review-gates, structured-deliverables как продуктовые фичи
- Прямой host API entity fields / space abilities в ai-agent-service (отдельная фаза)
- Авто-формы по registry полей (
app.entityFieldEditors) — UI рисует расширение - Org-wide шаблоны политик across spaces