Files
crank/docs/backend-gap-plan.md
T
2026-05-03 10:38:12 +00:00

349 lines
7.9 KiB
Markdown

# 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 HTTP` transport.
## 4. Что меняется принципиально
### 4.1. Global model -> workspace-scoped model
Нужно добавить `workspace_id` в:
- `operations`
- `auth_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
Нужно ввести:
- `InvocationLog`
- `UsageRollup`
## 5. Page-by-page backend plan
## 5.1. Operations page
### Уже есть
- `GET /operations`
- `POST /operations`
- `GET /operations/{id}`
- `POST /operations/{id}/versions`
- `POST /operations/{id}/publish`
- `POST /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
### Уже есть
- ничего
### Не хватает
- `Agent`
- `AgentVersion`
- `AgentOperationBinding`
- `published_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
### Уже есть
- ничего
### Не хватает
- `Workspace`
- `User`
- `Membership`
- `Invitation`
- 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. Новые доменные сущности
Нужно добавить:
- `Workspace`
- `User`
- `Membership`
- `Invitation`
- `Agent`
- `AgentVersion`
- `AgentOperationBinding`
- `PlatformApiKey`
- `InvocationLog`
- `UsageRollup`
## 7. Новые таблицы
Нужно добавить:
- `workspaces`
- `users`
- `memberships`
- `invitation_tokens`
- `agents`
- `agent_versions`
- `agent_operation_bindings`
- `published_agents`
- `platform_api_keys`
- `invocation_logs`
- `usage_rollups`
Нужно изменить:
- `operations`
- `auth_profiles`
- `published_operations`
## 8. Новые admin-api группы
Нужно добавить группы:
- `workspaces`
- `memberships`
- `invitations`
- `agents`
- `platform-api-keys`
- `logs`
- `usage`
Нужно расширить:
- `operations`
- `auth-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
- `Agent`
- `AgentVersion`
- 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. Что делаем следующим шагом
Следующий практический шаг:
1. зафиксировать DTO и response shapes для `Operations` и `Wizard`;
2. затем спроектировать `Workspace` и `Agent` storage/API;
3. после этого начинать backend implementation wave 1.