Skip to content

Space types (типы пространств)

Расширяемая классификация Space: одно поле в core-сущности + registry метаданных и UI на форме создания. Позволяет расширениям настраивать создание и runtime Space без форка ядра и без жёсткой связи между пакетами.

Модель

СлойЧто это
Core fieldSpace.spaceTypeId: string — идентификатор типа
Defaultstandard — «Стандартный», регистрируется ядром
Registrybackend.spaceTypes — метаданные типов (label, extension owner)
Create UIapp.spaceCreatePanels — Vue-компонент доп. полей на форме создания per type
Runtime UIapp.spaceTypeViews — опциональные отличия экрана Space (секции, баннеры)

Тип Space не меняет ACL ядра (owner / editor / viewer). Расширения добавляют свои abilities и entity fields поверх.

mermaid
flowchart LR
  subgraph core [Ядро]
    ST[Space.spaceTypeId]
    FORM[CreateSpaceDialog]
  end
  subgraph reg [Registries]
    BT[backend.spaceTypes]
    CP[app.spaceCreatePanels]
    TV[app.spaceTypeViews]
  end
  subgraph ext [Расширения]
    AF[ai-flow → automatic]
    SM[space-methodology → guided]
  end
  BT --> FORM
  CP --> FORM
  ST --> TV
  AF --> BT
  AF --> CP
  SM --> BT
  SM --> CP

Core: тип standard

Ядро регистрирует встроенный тип:

spaceTypeIdLabelНазначение
standardСтандартныйОбычное хранилище артефактов; default при создании

Без включённых расширений форма создания — имя, описание, тип (один вариант). Дерево артефактов и agent_edit работают как в v3 core.

Registry backend.spaceTypes

Расширение объявляет тип:

typescript
ctx.registerSpaceType({
  id: 'ai-flow.automatic',
  label: 'Автоматический (AI-flow)',
  description: 'Space создаётся и заполняется оркестратором по пресету',
  extensionId: '@artiroute/ai-flow',
  // опционально: скрыть из UI если extension disabled
  selectableOnCreate: true,
});

Правила:

  • id — namespaced, уникален глобально (<extension>.<slug>).
  • Ядро валидирует spaceTypeId при create/update: значение должно быть в объединённом каталоге (standard + зарегистрированные типы).
  • Смена типа после создания — запрещена (immutable) или только admin policy (решение при реализации host).

Форма создания Space

Host CreateSpaceDialog:

  1. Поле «Тип пространства» — select из backend.spaceTypes.entries() (всегда есть standard).
  2. При смене типа — монтирует panel из app.spaceCreatePanels для выбранного spaceTypeId.
  3. Submit: core create Space + extension panels передают payload в create mutation / follow-up API.
typescript
// app.spaceCreatePanels
getExtensionRegistry('app.spaceCreatePanels').register('ai-flow.automatic', {
  spaceTypeId: 'ai-flow.automatic',
  component: AiFlowCreatePanel, // пресет, bootstrap files, prompts, API hint
  order: 10,
});

Расширение само рисует panel и валидирует свой payload. Ядро не знает про пресеты и deliverables.

Create mutation (ориентир)

graphql
mutation CreateSpace($input: CreateSpaceInput!) {
  createSpace(input: $input) {
    id
    spaceTypeId
  }
}

input CreateSpaceInput {
  name: String!
  description: String
  spaceTypeId: String = "standard"
  extensionPayload: JSON  # per-type blob от panels; host маршрутизирует по spaceTypeId
}

Backend после create вызывает extension hook или dedicated handler по spaceTypeId (например ai-flow стартует run, required-deliverables создаёт слоты из шаблона).

Runtime: app.spaceTypeViews

Опционально — отличия UI открытого Space:

typescript
getExtensionRegistry('app.spaceTypeViews').register('ai-flow.automatic', {
  spaceTypeId: 'ai-flow.automatic',
  // баннер run, скрыть ручной AI, activity log
  components: { banner: AiFlowRunBanner, ... },
});

Тип standard — без entry: дефолтный Space UI.

Backend routing по типу

Сервисы расширений и host helpers проверяют space.spaceTypeId:

typescript
if (space.spaceTypeId === 'ai-flow.automatic') {
  // orchestrator-only paths
}
if (space.spaceTypeId === 'space-methodology.guided') {
  // methodology tab, areas, methodologygen
}

Без entityHooks для блокировки core CRUD — только условный UI и extension APIs.

Кто что регистрирует (продуктовые расширения)

РасширениеspaceTypeIdCreate panelRuntime view
(ядро)standarddefault
Space methodologyspace-methodology.guidedшаблон методологиивкладка Методология, области
AI-flowai-flow.automaticпресет, bootstrap, APIбаннер run, activity
Artifact reviewничегогалочка на артефакте

См. также

AI workspace для командных материалов и знаний