# As Is -> To Be Примечание: - разделы этого документа, где машинный доступ описан через workspace-scoped `platform API keys`, следует считать устаревшими; - целевая модель проекта переведена на `AgentKey`, короткоживущие токены доступа и при необходимости `PlatformClientCredential`; - подробности переноса зафиксированы в `docs/agent-auth-model.md`. ## 1. Назначение документа Этот документ фиксирует переход от текущего состояния проекта к целевой продуктовой модели, отраженной в текущем Alpine UI. ## 2. As Is Сейчас проект умеет: - хранить и версионировать `Operation`; - выполнять `REST`, `GraphQL`, `unary gRPC`; - выполнять test run; - публиковать operations в MCP; - импортировать и экспортировать operation-конфигурации; - загружать samples и gRPC descriptors. Сейчас проект не умеет как first-class product features: - `Workspace` - `Agent` - platform API keys - members / invitations - logs API - usage API - agent-scoped MCP toolsets ## 3. To Be Целевая система должна работать так: - каждая команда работает в своем `Workspace`; - операции создаются и тестируются внутри workspace; - опубликованные операции привязываются к `Agent`; - один `Agent` отдает LLM ограниченный набор tools; - доступ к платформе контролируется через memberships и platform API keys; - все вызовы попадают в logs и usage. ## 4. Page-by-page gap analysis ### 4.1. Operations Что хочет UI: - список операций; - фильтры; - edit/delete; - publish/archive; - верхние метрики; - фильтр по agent. Что уже есть: - list/create/version/publish/test/export/import; - samples и draft generation. Чего не хватает: - delete operation; - archive operation; - usage summary для карточек; - связь operation с agent; - workspace scoping. ### 4.2. Wizard Что хочет UI: - create/edit operation; - сохранить draft; - тестировать и потом публиковать; - работать с `REST / GraphQL / gRPC`; - descriptors и schema-driven setup. Что уже есть: - почти весь operation lifecycle; - samples; - draft generation; - gRPC descriptor workflow. Чего не хватает: - нормальный update flow без local storage; - workspace-scoped endpoints; - единый backend contract под final wizard shape. ### 4.3. Agents Что хочет UI: - каталог агентов; - create/edit agent; - выбрать список operations; - получить MCP endpoint агента. Что уже есть: - ничего как отдельный product layer. Чего не хватает: - сущность `Agent`; - `AgentVersion`; - `AgentOperationBinding`; - publish agent; - agent-scoped MCP runtime. ### 4.4. API Keys Что хочет UI: - list/create/revoke/delete platform API keys; - scopes; - one-time reveal. Что уже есть: - только upstream `auth_profiles`. Чего не хватает: - отдельная сущность `PlatformApiKey`; - hashing/secrets; - scopes model; - endpoints и audit. ### 4.5. Logs Что хочет UI: - список логов; - detail view; - filters; - live mode. Что уже есть: - только application logging. Чего не хватает: - продуктовая сущность `InvocationLog`; - storage; - list/detail API; - polling/live refresh strategy. ### 4.6. Usage Что хочет UI: - usage dashboard; - p50/p95/p99; - error rate; - per-operation breakdown; - CSV export. Что уже есть: - продуктового usage слоя нет. Чего не хватает: - `UsageRollup`; - aggregation jobs; - reporting API; - export endpoint. ### 4.7. Workspace / Settings Что хочет UI: - create/edit workspace; - members and invitations; - settings. Что уже есть: - ничего как backend model. Чего не хватает: - `Workspace`; - `User`; - `Membership`; - `Invitation`; - workspace-scoped routing. ### 4.8. Login Что хочет UI: - platform sign-in flow. Что уже есть: - mock `login.html` и `login.js`; - `User`, `Membership`, `Invitation` и `PlatformApiKey` как часть access layer. Чего не хватает: - app-level auth/session backend; - password hash storage; - session cookie; - current user endpoint. ## 5. Архитектурные конфликты, которые нужно разобрать отдельно ### Конфликт 1. Global operations vs workspace model Решение: - ввести `workspace_id` во все продуктовые сущности. ### Конфликт 2. Published operations vs agents Решение: - MCP публикует tools не напрямую из operations, а из `published agent`. ### Конфликт 3. Upstream auth vs platform API keys Решение: - оставить `AuthProfile` только для upstream; - ввести отдельную сущность `PlatformApiKey`. ### Конфликт 4. Application logs vs product logs Решение: - ввести `InvocationLog` и `UsageRollup`. ### Конфликт 5. Basic Auth vs login page Решение: - убрать внешний `Basic Auth` как основной способ входа; - реализовать app-level auth/session backend; - отделить browser session auth от `PlatformApiKey`. Статус: - закрыто в `feat/auth-foundation`. ## 6. Приоритет реализации ### Wave 1 - Workspace foundation - Operations + Wizard integration - Agents - Agent-scoped MCP ### Wave 2 - Platform API keys - Logs - Usage ### Wave 3 - Members / invitations - Login / session layer ## 7. Короткий итог Целевой UI не требует выбросить текущее ядро. Он требует добавить сверху: - tenant layer; - curated agent layer; - observability layer; - platform access layer.