17 KiB
Alpine UI Integration Plan
1. Назначение документа
Этот документ фиксирует, как переносимый Alpine UI из apps/ui должен подключаться к реальному backend.
Его задача:
- разложить UI по страницам;
- показать, что уже поддержано текущим backend;
- зафиксировать отсутствующие endpoint-ы и контрактные разрывы;
- определить порядок интеграции без хаотичных правок.
2. Текущее состояние
Сейчас apps/ui уже заменен на Alpine.js UI, перенесенный из test-ui.
Важно:
apps/uiтеперь является основной UI-кодовой базой;test-uiостается fallback-источником и не должен использоваться как рабочая папка интеграции;- новый UI пока опирается на
localStorage, mock JSON и локальные сценарии; - backend уже поддерживает
workspace,operations,agents,platform access,logs,usage, но не все UI-flow закрыты полностью.
3. Принципы интеграции
- сначала подключаем страницы, уже совпадающие с текущим backend-контрактом;
- затем добавляем недостающие endpoint-ы под уже существующие UI-flow;
- только после этого убираем mock JSON и
localStorage-костыли; - если UI противоречит текущему backend, приоритет у целевой продуктовой модели, но конфликт должен быть разобран явно.
4. Page-by-page integration matrix
4.1. Operations catalog
UI-файлы:
apps/ui/index.htmlapps/ui/js/catalog.js
Что UI хочет:
- список операций;
- фильтры по protocol/category/agent/status;
- карточки верхних метрик;
- переход в wizard create/edit;
- удаление/архивирование;
- отображение агентных привязок.
Что уже можно подключить:
GET /api/admin/workspaces/{workspace_id}/operationsGET /api/admin/workspaces/{workspace_id}/agentsGET /api/admin/workspaces/{workspace_id}/usagePATCH /api/admin/workspaces/{workspace_id}/operations/{operation_id}DELETE /api/admin/workspaces/{workspace_id}/operations/{operation_id}POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/archive
Что еще не хватает:
- frontend data adapter, который заменит mock merge на реальные
items/page/page_size/total; - wiring server-side filters
protocol/category/agent/status/search; - переключение карточек верхних метрик с seeded summary на реальный usage payload.
Что убрать из UI после интеграции:
crank_ops_overridesвlocalStorage- merge поверх
data/operations.json - локальный tombstone/delete flow
Простой итог:
- эту страницу можно интегрировать первой;
- backend уже отдает server-side category, usage summary и agent refs;
- дальше нужно убрать
localStorage-состояние и посадить UI на реальные list/detail/mutation вызовы.
4.2. Wizard
UI-файлы:
apps/ui/html/wizard/index.htmlapps/ui/html/wizard/step*.htmlapps/ui/js/wizard.js
Что UI хочет:
- create operation;
- edit operation;
- draft/save flow;
- test run;
- publish;
- загрузку samples;
- генерацию draft mapping;
- gRPC descriptor upload;
- import/export.
Что уже можно подключить:
POST /api/admin/workspaces/{workspace_id}/operationsGET /api/admin/workspaces/{workspace_id}/operations/{operation_id}PATCH /api/admin/workspaces/{workspace_id}/operations/{operation_id}POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/versionsGET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/versions/{version}POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/archivePOST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/test-runsPOST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/samples/input-jsonPOST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/samples/output-jsonPOST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/drafts/generatePOST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/descriptors/protoPOST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/descriptors/descriptor-setGET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/grpc/servicesGET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/exportPOST /api/admin/workspaces/{workspace_id}/operations/import
Что еще не хватает:
- frontend adapter поверх
OperationDetailиOperationVersionDocument, чтобы wizard перестал хранить edit-state в браузере; - финальное выравнивание step payload c canonical DTO, чтобы create/edit/export/import использовали одну модель на фронте.
Что убрать из UI после интеграции:
sessionStorage-передачуwizard_edit- draft-overrides через
localStorage - локальное создание operation без backend
Простой итог:
- wizard почти готов для реального backend;
- это основной экран второй очереди после catalog;
- backend уже закрывает create/edit/archive/test/import/export, дальше нужен только аккуратный frontend adapter.
4.3. Agents
UI-файлы:
apps/ui/html/agents.htmlapps/ui/js/agents.js
Что UI хочет:
- список агентов;
- create/edit agent;
- выбор операций для агента;
- publish agent;
- MCP endpoint на агента;
- calls today / operation count / key count.
Что уже можно подключить:
GET /api/admin/workspaces/{workspace_id}/agentsPOST /api/admin/workspaces/{workspace_id}/agentsGET /api/admin/workspaces/{workspace_id}/agents/{agent_id}POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/bindingsPOST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/publishGET /api/admin/workspaces/{workspace_id}/usage
Что еще не хватает:
PATCH /api/admin/workspaces/{workspace_id}/agents/{agent_id}DELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/versionsDELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}/bindings/{operation_id}- более богатый
GET /agentsresponse:calls_todaykey_countoperation_countmcp_endpoint
Отдельный конфликт:
- UI считает, что агент можно редактировать прямо как рабочую сущность;
- backend пока ближе к publish-модели с version snapshot;
- нужно решить, edit агента мутирует draft напрямую или всегда создает новую version.
Простой итог:
- база для agents уже есть;
- но UI требует более полного lifecycle, чем backend поддерживает сейчас.
4.4. API Keys
UI-файлы:
apps/ui/html/api-keys.htmlapps/ui/js/api-keys.js
Что UI хочет:
- список platform API keys;
- create;
- one-time reveal;
- revoke;
- delete;
- scopes.
Что уже можно подключить:
GET /api/admin/workspaces/{workspace_id}/platform-api-keysPOST /api/admin/workspaces/{workspace_id}/platform-api-keysPOST /api/admin/workspaces/{workspace_id}/platform-api-keys/{key_id}/revokeDELETE /api/admin/workspaces/{workspace_id}/platform-api-keys/{key_id}
Что еще не хватает:
- финальная договоренность по scope model;
- согласование response shape с UI:
secretprefixstatuslast_used_at
Отдельный конфликт:
- UI сейчас обещает scope
deployи формулировки про rollback/deployments; - backend этого продуктово не поддерживает;
- scope-тексты надо выровнять до интеграции.
Простой итог:
- эта страница почти закрывается текущим backend;
- здесь нужен не новый слой, а выравнивание payload и текстов.
4.5. Logs
UI-файлы:
apps/ui/html/logs.htmlapps/ui/js/logs.js
Что UI хочет:
- список invocation logs;
- фильтры;
- detail row expansion;
- live refresh;
- status/error/duration.
Что уже можно подключить:
GET /api/admin/workspaces/{workspace_id}/logsGET /api/admin/workspaces/{workspace_id}/logs/{log_id}
Что еще не хватает:
- frontend adapter с трансформацией backend response в текущую log-row форму;
- polling strategy вместо локального seeded массива;
- явная поддержка
debug/info/warn/errorв UI без локального seed; - если нужен live mode, то либо polling, либо отдельный future streaming endpoint
Простой итог:
- backend foundation для logs уже есть;
- страница интегрируется быстро, если заменить seeded
LOGSна API polling.
4.6. Usage
UI-файлы:
apps/ui/html/usage.htmlapps/ui/js/usage.js
Что UI хочет:
- верхние summary cards;
- timeline;
- breakdown по operations;
- p50/p95/p99;
- breakdown по agents;
- CSV export.
Что уже можно подключить:
GET /api/admin/workspaces/{workspace_id}/usageGET /api/admin/workspaces/{workspace_id}/usage/operations/{operation_id}GET /api/admin/workspaces/{workspace_id}/usage/agents/{agent_id}
Что еще не хватает:
- frontend mapping из backend
summary/timeline/operations/agentsв текущие widgets; CSV exportendpoint или серверная договоренность, если экспорт не хотим делать на клиенте;- согласование полей latency percentiles в одном формате
Простой итог:
- usage page можно подключать сразу после logs;
- главная работа здесь на frontend adapter, а не на новом backend-ядре.
4.7. Workspace setup
UI-файлы:
apps/ui/html/workspace-setup.htmlapps/ui/js/workspace-setup.jsapps/ui/js/workspace.js
Что UI хочет:
- create workspace;
- edit workspace;
- список участников;
- приглашения;
- смену текущего workspace.
Что уже можно подключить:
GET /api/admin/workspacesPOST /api/admin/workspacesGET /api/admin/workspaces/{workspace_id}PATCH /api/admin/workspaces/{workspace_id}GET /api/admin/workspaces/{workspace_id}/membersGET /api/admin/workspaces/{workspace_id}/invitationsPOST /api/admin/workspaces/{workspace_id}/invitationsDELETE /api/admin/workspaces/{workspace_id}/invitations/{invitation_id}
Что еще не хватает:
switch current workspaceкак backend-aware UI state, а неlocalStorage;- нормальная серверная модель current user + memberships;
- endpoint на удаление участника или изменение роли, если UI хочет это поддерживать
Отдельный конфликт:
- UI создает workspace локально и сразу считает его текущим;
- backend уже умеет создавать workspace, но у нас нет полноценной user-session модели;
- значит выбор текущего workspace пока придется держать на клиенте, но список и metadata брать с сервера.
Простой итог:
- create/edit workspace уже можно подключать;
- members/invites тоже частично готовы;
- но полноценный switch и role management еще не закрыты.
4.8. Settings
UI-файлы:
apps/ui/html/settings.htmlapps/ui/js/settings.js
Что UI хочет:
- профиль пользователя;
- security/preferences;
- workspace settings;
- language switcher.
Что уже можно подключить:
- частично
GET /api/admin/workspaces/{workspace_id} PATCH /api/admin/workspaces/{workspace_id}
Что еще не хватает:
- current user endpoint;
- user profile update endpoint;
- preferences endpoint;
- security/auth settings model
Отдельный конфликт:
- UI считает, что у нас уже есть app-level user profile;
- backend пока не имеет session/user profile API;
- страницу стоит разбить:
- workspace settings подключать раньше;
- profile/security оставить временно mock или read-only.
Простой итог:
- эту страницу нельзя подключать целиком сразу;
- сначала надо отделить workspace settings от пользовательского профиля.
4.9. Login
UI-файлы:
apps/ui/html/login.htmlapps/ui/js/login.js
Что UI хочет:
- app-level sign in;
- mock SSO button;
- user session.
Что уже есть реально:
- внешний
Basic Authнаnginx
Что отсутствует:
- session auth backend;
- login endpoint;
- logout endpoint;
- current user endpoint
Отдельный конфликт:
- это не баг реализации, а отсутствие целого auth слоя;
- login page пока не должна позиционироваться как production-ready flow.
Простой итог:
- пока не интегрировать как реальный backend flow;
- оставить как временный mock screen до отдельного решения по auth.
5. Отдельные UI-vs-backend конфликты
5.1. Login vs Basic Auth
UI предполагает встроенный login, backend сейчас защищен внешним Basic Auth.
Решение:
- не делать вид, что login уже рабочий;
- отложить интеграцию login до отдельного auth этапа.
5.2. Agent draft/edit lifecycle
UI редактирует агента напрямую, backend идет к version/publish модели.
Решение:
- зафиксировать draft agent как редактируемую сущность;
- publish должен фиксировать snapshot;
- UI не должен скрывать разницу между draft и published.
5.3. API key scopes
UI вводит scope deploy, backend пока не отражает полноценную deploy-подсистему.
Решение:
- либо урезать scope-тексты;
- либо позже расширять platform access под реальный deploy scope.
5.4. Workspace switching
UI хранит current workspace в localStorage.
Решение:
- на ближайшем этапе оставить client-side current workspace;
- данные workspace брать с backend;
- позже заменить на session-aware current workspace model.
6. Порядок интеграции
Wave 1
Operations catalogWizard
Wave 2
AgentsAPI Keys
Wave 3
LogsUsage
Wave 4
Workspace setup- частичный
Settings
Wave 5
Login- полноценный session/auth layer
7. Ближайший практический шаг
Следующий рабочий этап:
- реализовать frontend adapters для
Operations catalogиWizard; - добить backend
PATCH/DELETE/archiveпо operations; - убрать
localStorageoverrides и mockoperations.jsonдля первых двух экранов.