Фазы реализации
Чеклист по документам в этом разделе. Тестовые расширения можно ломать по контракту без миграции requiresRegistries.
Фаза A — Контракт манифеста (SDK)
- [x]
extensionApi: "1", парсинг major и мягкая проверка при загрузке — 08-extension-api-versioning.md - [x] Тестовые vite:
extensionApi: '1'вместо^1.0.0 - [x]
extendsRegistries, удалёнrequiresRegistries - [x]
flattenExtendsRegistriesв SDK - [x]
applyValidatedRyntContributesToManifestпри discovery и в пресете@rynt/extension-build - [x] Документация маркетплейса и справочник реестров в launcher-docs
Фаза B — Резолв (SDK + клиент)
- [x] Резолвер: index, semver deps, implied deps, интеграция при старте лаунчера
- [x]
hasRegistryEntry/resolveRegistrySlot/getRegistryEntryRow - [x] Показ ошибок графа в UI настроек —
extensionLoadErrors+ Callout в ExtensionsManageDialog
Детали: 03-launcher-resolution.md.
Фаза C — Типы маркетплейса (SDK)
- [x] Subpath
@rynt/sdk/extension-marketplace— 04-sdk-shared-types.md - [x] Zod-схемы рядом с типами
- [x]
createExtensionMarketplaceClient
Фаза D — Сервис
- [x] Backend каталога + Postgres + migrations
- [x] UNIQUE (
registry_id,registry_key) — 05-marketplace-service.md - [x] UNIQUE (
registry_id) на declarations - [x] REST handlers + auth на POST (MVP Bearer)
Фаза E — UI лаунчера
- [x]
ExtensionMarketplaceDialog+useExtensionMarketplaceDialog— 06-launcher-ui.md - [x]
installExtensionFromMarketplaceUrl - [x]
ExtensionRegistrySlotButtonв SDK +provideиз App - [x] Пилот: чаты / тип сообщения —
ExtensionRegistrySlotButtonвMessage.vue - [x] Кнопка «Каталог» из ExtensionsManageDialog
- [x] Автообновление расширений по
manifest.version(08-extension-api-versioning.md) — проверка при старте лаунчера, настройкаextensionsAutoUpdate, UI pending updates в «Управление расширениями»
Порядок
text
A → B → C → D → EC можно параллелить с B после фиксации типов в A.
Вне scope v1
- Publish UI в лаунчере (только API сервиса + Bearer)
- Redis-кэш каталога
- Автоматическая проверка manifest ↔ runtime register (только dev warning)
- Поддержка wildcard-ключей в
extendsRegistries