Концепция реестров
Extension point в artiroute — это слот в Map-реестре с идентификатором (registryId, key).
Регистрация
В setup() расширения:
ts
import { defineExtension, getExtensionRegistry } from '@artiroute/extension-sdk/extension';
export default defineExtension(() => {
getExtensionRegistry('app.sidebar').register(
'my-key', // key — уникален в пределах registryId
{ label: '…' }, // payload — тип зависит от реестра
50 // order (опционально)
);
});Альтернатива через context:
ts
ctx.registerRegistryEntry({
registryId: 'app.sidebar',
key: 'my-key',
value: { label: '…' },
order: 50,
});Декларация в manifest
Каждый используемый key обязан быть в contributes.ext.extendsRegistries:
js
extendsRegistries: [{ registryId: 'app.sidebar', keys: ['my-key'] }];Это нужно для:
- валидации конфликтов ключей между расширениями
- implied dependencies при расширении чужих реестров
- документирования surface area расширения
Два типа реестров
| Тип | Registry ID | Как потребляется |
|---|---|---|
| Итерируемые | app.sidebar, app.widgets, … | Хост перебирает .entries() и рендерит список |
| UI-слоты | app.uiSlots | Хост монтирует <ExtensionSlotHost region="…" /> |
Чтение из хоста
Хост и мосты используют:
ts
getExtensionRegistry('app.widgets').entries();
resolveRegistrySlot('app.widgets', 'my-key');
subscribeRegistriesRevision(() => {
/* re-render */
});SDK types
Типы payload экспортируются из @artiroute/extension-sdk/extension:
ExtensionRouteItem,ExtensionWidgetItemExtensionDashboardWidgetItem,ExtensionTabItemExtensionSettingsTabItem,ExtensionUiSlotItem- и др.
Каталоги
- Итерируемые реестры — sidebar, routes, widgets, artifact types, AI
- UI-слоты — 32 region-а layout/экранов
- Platform Core — space abilities, entity fields, entity hooks (подробные гайды)
- Entity fields (кратко)
- Entity hooks (кратко)
- Space abilities (кратко)
- Skill resolvers — динамические
/<key>skills
Пример: registry-test
Расширение @artiroute/registry-test регистрирует placeholder во всех точках — удобно для smoke-test после изменений в хосте.
См. registry-test.