verstak-docs/docs/MILESTONE_PLATFORM_RUNTIME_...

101 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Milestone: Platform Runtime 1
Фиксирует текущее состояние plugin runtime в Milestone 1.
## Что уже работает
- **Plugin Discovery** — сканирование директорий, чтение plugin.json, валидация манифеста.
- **Core Capabilities** — 5 capabilities регистрируются в `main.go` ДО plugin discovery.
- **Plugin Lifecycle** — полный цикл: discovered → loaded / degraded / missing-required-capability / failed.
- **Dev Install Flow** — `./scripts/build.sh` + `./scripts/install-dev-plugins.sh`.
- **Smoke Platform** — `./scripts/smoke-platform.sh` проверяет discovery, capabilities, lifecycle без GUI.
- **Wails v2 + Svelte 4** — core запускается, Plugin Manager UI работает.
- **platform-test plugin** — собирается, устанавливается, проходит lifecycle, регистрирует contributions.
## Репозитории
| Репозиторий | За что отвечает |
|---|---|
| `verstak-desktop` | Core platform: plugin runtime, capability/contribution/permission registries, event bus, Wails shell, Plugin Manager UI |
| `verstak-official-plugins` | Монорепо официальных плагинов (platform-test и будущие) |
| `verstak-docs` | Документация платформы (этот репозиторий) |
| `verstak-sdk` | Manifest schema + TypeScript SDK |
| `verstak-sync-server` | Сервер синхронизации |
| `verstak-browser-extension` | Расширение Firefox |
## Core Capabilities (зарегистрированы)
Следующие capabilities регистрируются в `main.go` до plugin discovery, чтобы плагины могли разрешить `requires` при загрузке:
| Capability | Описание |
|---|---|
| `verstak/core/plugin-manager/v1` | Управление плагинами: discovery, enable/disable, reload |
| `verstak/core/capability-registry/v1` | Реестр возможностей: регистрация, запрос, проверка зависимостей |
| `verstak/core/contribution-registry/v1` | Реестр контрибуций: views, commands, sidebar items, actions и т.д. |
| `verstak/core/permissions/v1` | Реестр разрешений: проверка dangerous, запрос пользователю |
| `verstak/core/events/v1` | In-process event bus: publish/subscribe |
### Capabilities НЕ зарегистрированы (намеренно)
| Capability | Почему отсутствует |
|---|---|
| `verstak/core/vault/v1` | Реализация vault api (`internal/core/vault/api.go`) ещё не создана |
| `verstak/core/sync/v1` | Реализация sync boundary (`internal/core/sync/boundary.go`) ещё не создана |
Плагины, объявляющие эти capabilities в `optionalRequires`, переходят в статус `degraded`, но продолжают работать. Плагины с `requires` получат `missing-required-capability`.
## DEGRADED: что означает
Плагин получает статус `degraded`, когда:
1. Все `requires` capabilities разрешены (есть в registry).
2. Хотя бы одна из `optionalRequires` capabilities отсутствует.
В этом состоянии:
- Плагин загружается и регистрирует свои `provides` capabilities.
- Contributions (views, commands, sidebar items) попадают в registry.
- Plugin Manager UI показывает статус `degraded` с указанием отсутствующих optional capabilities.
- UI-функции, зависящие от отсутствующих capabilities, должны скрываться или gracefully degrade.
## Команды для полной проверки
```bash
# 1. Собрать официальные плагины (соберёт frontend, backend, упакует dist/)
cd ~/git/verstak2/verstak-official-plugins
./scripts/build.sh
# 2. Установить platform-test как dev plugin в verstak-desktop
cd ~/git/verstak2/verstak-desktop
./scripts/install-dev-plugins.sh
# 3. Запустить smoke-проверку (headless, без GUI)
./scripts/smoke-platform.sh
# 4. Запустить приложение (откроет Wails GUI)
go run -mod=mod .
```
## Проверка через Plugin Manager UI
1. Запустить приложение: `go run -mod=mod .`
2. Открыть Plugin Manager.
3. Убедиться, что `verstak.platform-test` отображается со статусом `degraded`.
4. Убедиться, что указаны отсутствующие optional capabilities (`verstak/core/vault/v1`, `verstak/core/sync/v1`).
5. Contributions (view, commands, sidebar item) должны быть видны.
## Файлы реализации
| Файл | Назначение |
|---|---|
| `verstak-desktop/main.go` | Инициализация core, регистрация capabilities, plugin lifecycle, Wails run |
| `verstak-desktop/internal/api/app.go` | Wails-bound API, ReloadPlugins, GetPlugins, GetCapabilities |
| `verstak-desktop/internal/core/plugin/plugin.go` | Manifest struct, ValidateManifest, DiscoverPlugins, Status constants |
| `verstak-desktop/internal/core/capability/registry.go` | CapabilityRegistry: Register, CheckRequired, List |
| `verstak-desktop/internal/core/contribution/registry.go` | ContributionRegistry: views, commands, sidebar items и т.д. |
| `verstak-desktop/internal/core/permissions/registry.go` | PermissionsRegistry: defaults, IsDangerous |
| `verstak-desktop/internal/core/events/bus.go` | EventBus: Subscribe, Publish |
| `verstak-desktop/cmd/smoke-platform/main.go` | Headless smoke test |
| `verstak-official-plugins/scripts/build.sh` | Build + package всех плагинов |
| `verstak-desktop/scripts/install-dev-plugins.sh` | Копирование dist/ в ./plugins/ |
| `verstak-desktop/scripts/smoke-platform.sh` | Полная smoke-проверка |