7.9 KiB
7.9 KiB
Backend Gap Plan
Примечание:
- пункты этого плана, относящиеся к
PlatformApiKeyкак основной машинной модели доступа, рассматриваются как переходные; - актуальная целевая схема машинной аутентификации описана в
docs/agent-auth-model.md.
1. Назначение документа
Этот документ превращает целевой Alpine UI и docs/as-is-to-be.md в конкретный backend-план.
Его задача:
- зафиксировать, чего именно не хватает в backend;
- разделить доработки на новые сущности, новые API и изменения существующего ядра;
- определить порядок реализации без расползания scope.
2. Принципы
- текущее ядро
Operation + adapters + runtimeсохраняется; - новая функциональность наращивается слоями сверху;
- сначала вводятся tenant boundary и agent publishing;
- потом access layer и observability;
- UI развивается в
apps/uiпосле фиксации backend-контрактов.
3. Что сохраняем без переписывания
Operationкак базовый интеграционный контракт;- versioning операций;
- adapters
REST / GraphQL / unary gRPC; - schema engine;
- mapping engine;
- YAML import/export для operations;
- test-run flow;
Streamable HTTPtransport.
4. Что меняется принципиально
4.1. Global model -> workspace-scoped model
Нужно добавить workspace_id в:
operationsauth_profiles- published runtime views
- будущие logs и usage
4.2. Operation publishing -> agent publishing
Нужно перестроить MCP publishing:
- было: published operation = MCP tool
- будет: published operation = reusable building block
- MCP endpoint публикует published bindings внутри конкретного agent
4.3. Upstream auth -> platform access separation
Нужно разделить:
AuthProfileдля внешних API;PlatformApiKeyдля доступа к Crank.
4.4. Application logs -> product observability
Нужно ввести:
InvocationLogUsageRollup
5. Page-by-page backend plan
5.1. Operations page
Уже есть
GET /operationsPOST /operationsGET /operations/{id}POST /operations/{id}/versionsPOST /operations/{id}/publishPOST /operations/{id}/test-runs- import/export
Не хватает
PATCH /operations/{id}DELETE /operations/{id}POST /operations/{id}/archive- workspace scoping
- summary metrics для карточек
- фильтр/lookup по agent bindings
Backend changes
- добавить update/delete/archive use case;
- добавить
workspace_idв operation queries; - добавить lightweight stats response для operations list.
5.2. Wizard page
Уже есть
- create operation
- create version
- samples
- draft generation
- test run
- gRPC descriptor flow
Не хватает
- единый update contract для edit mode;
- стабильный draft-save contract;
- workspace-scoped endpoints;
- final DTO shape под новый Alpine wizard.
Backend changes
- нормализовать create/update/version payload;
- добавить
PATCH /operations/{id}; - оставить
POST /versionsкак explicit publishable snapshot flow.
5.3. Agents page
Уже есть
- ничего
Не хватает
AgentAgentVersionAgentOperationBindingpublished_agents- MCP metadata per agent
Backend changes
- CRUD agents;
- publish agent;
- bind/unbind operations;
- list agent operations;
- agent-scoped tool catalog in MCP.
5.4. API Keys page
Уже есть
- upstream
auth_profiles, но это другая сущность
Не хватает
PlatformApiKey- scopes model
- one-time reveal on create
- revoke/delete
Backend changes
- новая таблица и новый service;
- hash secret вместо хранения в открытом виде;
- endpoint create/list/revoke/delete;
- timestamp
last_used_at.
5.5. Logs page
Уже есть
- только application logs
Не хватает
- список invocation logs
- log detail
- фильтры
- live refresh strategy
Backend changes
- логирование каждого tool call;
- storage для invocation logs;
- list/detail API;
- query params: level, operation, agent, range, search.
5.6. Usage page
Уже есть
- ничего как продуктовый API
Не хватает
- aggregates
- per-agent breakdown
- per-operation breakdown
- CSV export
Backend changes
UsageRollup;- background aggregation или on-write update strategy;
- reporting endpoints;
- CSV export endpoint.
5.7. Workspace and Settings
Уже есть
- ничего
Не хватает
WorkspaceUserMembershipInvitation- settings model
Backend changes
- workspace CRUD;
- members list;
- invitations;
- current workspace settings read/update.
5.8. Login
Уже есть
- только внешний
Basic Authнаnginx
Не хватает
- app-level auth model
Решение на ближайший этап
- пока не строить full auth subsystem;
- сначала сделать workspace/access model и platform API keys;
- login page оставить как отдельный вопрос после backend foundation.
6. Новые доменные сущности
Нужно добавить:
WorkspaceUserMembershipInvitationAgentAgentVersionAgentOperationBindingPlatformApiKeyInvocationLogUsageRollup
7. Новые таблицы
Нужно добавить:
workspacesusersmembershipsinvitation_tokensagentsagent_versionsagent_operation_bindingspublished_agentsplatform_api_keysinvocation_logsusage_rollups
Нужно изменить:
operationsauth_profilespublished_operations
8. Новые admin-api группы
Нужно добавить группы:
workspacesmembershipsinvitationsagentsplatform-api-keyslogsusage
Нужно расширить:
operationsauth-profiles
9. MCP-server изменения
Нужно изменить:
- routing model:
/mcp/v1/{workspace_slug}/{agent_slug} - runtime catalog source:
published_agents, а не глобальные operations - tool resolution через binding
- labels для logs и usage:
workspace,agent,operation
10. Порядок реализации
Wave 1. Foundation
Workspace- workspace scope в operations/auth profiles
PATCH/DELETE/ARCHIVEдля operations- update contracts для wizard
Wave 2. Agent publishing
AgentAgentVersion- bindings
- published agents
- MCP server v2
Wave 3. Platform access
PlatformApiKey- memberships
- invitations
- workspace settings
Wave 4. Observability
- invocation logs
- usage rollups
- logs API
- usage API
Wave 5. UI integration
- заменить mock data реальными API
- развивать и полировать Alpine UI в
apps/ui - пройти e2e сценарии
11. Что делаем следующим шагом
Следующий практический шаг:
- зафиксировать DTO и response shapes для
OperationsиWizard; - затем спроектировать
WorkspaceиAgentstorage/API; - после этого начинать backend implementation wave 1.