102 lines
10 KiB
Markdown
102 lines
10 KiB
Markdown
# Отчет: Hermes Hub — UX/UI Refinement v2 + Unified Health + Account Workflow
|
||
|
||
## Дата: 2026-08-20
|
||
## Исполнитель: Antigravity Orchestrator & Coder
|
||
|
||
---
|
||
|
||
## 1. Что было изменено
|
||
|
||
1. **Разработан и внедрён презентационный слой и Unified Health**:
|
||
- Создан сервис `UnifiedHealthService` (`src/antigravity_provider/router/unified_health.py`), являющийся **единым источником истины** для всех экранов (`TeamView`, `AccountsView`, `ProvidersView`, `RoutingView`, `HealthView`, `StatusBar`).
|
||
- Исключены любые противоречивые статусы: отсутствие credentials теперь однозначно дает нормализованный статус `AUTH_REQUIRED` («Требуется вход» / «Авторизация истекла»), и **никогда не показывает `HEALTHY`**.
|
||
- Введена модель `ProfileViewModel` с полным набором презентационных полей: `display_name`, `account_identity`, `provider_display_name`, `model_states` (по семействам моделей), `assigned_roles`, `is_main_account`, `is_main_orchestrator`, `health_state`, `health_label_ru`, `cooldown_remaining_sec`, `last_checked_at`.
|
||
|
||
2. **Вычисление агрегированного состояния системы (System Readiness)**:
|
||
- Внедрен агрегатор `SystemReadiness`:
|
||
- `HEALTHY`: Все обязательные роли имеют рабочий Primary и необходимый резерв.
|
||
- `LIMITED`: Основные роли доступны, часть резервов ожидает входа/квоты.
|
||
- `DEGRADED`: Одна или несколько ролей работают через резервный fallback.
|
||
- `CRITICAL`: Есть обязательная роль без единого рабочего маршрута.
|
||
- В Dashboard (TeamView) верхние KPI-карточки показывают реальное состояние (`6/6 готовы`, `X/16 подключено`, `3/3 доступны`, `Ограниченная готовность`).
|
||
|
||
3. **Строгое концептуальное разделение**:
|
||
- **ACCOUNT**: Физическая учетная запись (`vict***@gmail.com`, Google / OpenAI / OpenCode).
|
||
- **AGENT**: Логическая роль Hermes (Главный оркестратор, Кодер 1, Кодер 2, Ревьюер, Исследователь, Быстрый агент, Резерв).
|
||
- **ROUTE**: Цепочка исполнения (`Primary` ➔ `Fallback 1` ➔ `Fallback 2`).
|
||
- **MAIN Account** (дефолтный профиль для Hermes CLI/Desktop) ≠ **Main Orchestrator** (ведущая роль роутера).
|
||
|
||
4. **Мастер подключения аккаунта (Add Account Wizard)**:
|
||
- Создан 4-шаговый интерактивный модальный визард (`AddAccountWizard`):
|
||
- **Шаг 1**: Выбор платформы (Google Antigravity, OpenAI Codex, OpenCode Go).
|
||
- **Шаг 2**: Авторизация (OAuth для Antigravity с кнопками открытия браузера и копирования ссылки; ввод API Key для Codex / OpenCode).
|
||
- **Шаг 3**: Валидация + Детектирование дубликатов (`AutoAssigner.check_duplicate_identity`) + список обнаруженных моделей.
|
||
- **Шаг 4**: Интеллектуальное автоназначение (`AutoAssigner.recommend_assignment`) с пояснением причины (например: «У роли orchestrator отсутствует активный резервный аккаунт»).
|
||
|
||
5. **Компактная адаптивная сетка Accounts View**:
|
||
- Разделение по вкладкам провайдеров (Google Antigravity, OpenAI Codex, OpenCode Go).
|
||
- Сетка 2–3 карточки в ряд.
|
||
- Подключенные аккаунты: маскированный email, бейдж провайдера, статус по семействам моделей (Gemini ● Работает, Claude ● Квота), роль, бейдж `★ MAIN`, кнопки `[Тест]`, `[Назначить]`, `[...]`.
|
||
- Неподключенные слоты: карточки «Свободный слот / Аккаунт не подключён» с кнопкой `[+ Подключить аккаунт]`.
|
||
- Холодные резервы: карточки «Холодный резерв / Не используется автоматически».
|
||
|
||
6. **Провайдеры и Модели (Providers View)**:
|
||
- Реальные счетчики: Подключено, В строю, Требуют входа, Холодный резерв.
|
||
- Список обнаруженных моделей и кнопка «Обновить модели».
|
||
|
||
7. **Визуализация цепочек маршрутизации (Routing View)**:
|
||
- Визуальный пайплайн с точками статусов каждого узла: `[Primary ●] ➔ [Fallback 1 ○] ➔ [Fallback 2 ●]`.
|
||
- Указание активного текущего маршрута.
|
||
|
||
8. **Диагностический Health Tracker (Health View)**:
|
||
- Диагностический дашборд с группировкой по провайдерам и табличным отображением: Слот/Аккаунт, Авторизация, Семейства моделей, Статус здоровья, Время последней проверки.
|
||
|
||
9. **Интерактивные Настройки (Settings View)**:
|
||
- Переключатели Session Affinity, Auto Failover, Auto-return после восстановления квоты, мониторинг.
|
||
- Меню выбора числа попыток failover.
|
||
- Сворачиваемая секция «Дополнительно»: пути к файлам конфигурации, кнопки «Открыть папку данных» и «Открыть журнал логов».
|
||
|
||
10. **Журнал событий (Logs View)**:
|
||
- Структурированный `EventLogService` с фильтрацией по категориям (Все, Аккаунты, Квоты, Маршрутизация, Система).
|
||
|
||
11. **Безопасность кнопки «Тест»**:
|
||
- Тестирует **только** сохраненные credentials через прямое выполнение минимального промпта. Никогда не запускает OAuth и не открывает браузер.
|
||
|
||
12. **Штатное завершение и отсутствие зомби-процессов**:
|
||
- Корректная остановка фоновых воркеров при `WM_DELETE_WINDOW`.
|
||
- Пройдено 10 циклов стресс-теста запуска/закрытия без единого зомби-процесса.
|
||
|
||
---
|
||
|
||
## 2. Измененные и созданные файлы
|
||
|
||
- `src/antigravity_provider/router/unified_health.py` — презентационный слой `ProfileViewModel`, `SystemReadiness`, `EventLogService`.
|
||
- `src/antigravity_provider/router/auto_assigner.py` — интеллектуальные рекомендации ролей `recommend_assignment`, проверка дубликатов `check_duplicate_identity`.
|
||
- `src/antigravity_provider/router/ui/components.py` — полная система статусов `HubStatusBadge`, `HubMetricCard`, `HubModal`.
|
||
- `src/antigravity_provider/router/ui/add_account_wizard.py` — 4-шаговый мастер подключения аккаунта.
|
||
- `src/antigravity_provider/router/ui/views/team_view.py` — главный Dashboard с реальными метриками готовности и карточками агентов.
|
||
- `src/antigravity_provider/router/ui/views/accounts_view.py` — компактная сетка аккаунтов со слотами «Свободный слот» и «Холодный резерв».
|
||
- `src/antigravity_provider/router/ui/views/providers_view.py` — реальная сводка по провайдерам и списки моделей.
|
||
- `src/antigravity_provider/router/ui/views/routing_view.py` — визуальные цепочки отказоустойчивости.
|
||
- `src/antigravity_provider/router/ui/views/health_view.py` — диагностический табличный дашборд.
|
||
- `src/antigravity_provider/router/ui/views/settings_view.py` — интерактивные параметры управления и доступ к системным путям.
|
||
- `src/antigravity_provider/router/ui/views/logs_view.py` — таймлайн событий и аудит.
|
||
- `src/antigravity_provider/router/ui/views/about_view.py` — нормализованное описание и версия.
|
||
- `src/antigravity_provider/router/hermes_hub_app.py` — неблокирующий UI, поддержка кэша экранов и безопасный shutdown.
|
||
- `tests/test_unified_health.py` — набор тестов презентационного слоя и готовности системы.
|
||
- `tests/test_ui_refinement.py` — тесты безопасности кнопки «Тест» и назначения ролей.
|
||
|
||
---
|
||
|
||
## 3. Результаты тестов и верификации
|
||
|
||
1. **Pytest (25/25 PASSED)**:
|
||
- `tests/test_unified_health.py` (8 тестов) — PASSED
|
||
- `tests/test_ui_refinement.py` (4 теста) — PASSED
|
||
- `tests/test_multi_provider_router.py` (13 тестов) — PASSED
|
||
2. **Router Verification Suite (`scripts/verify_multi_provider_router.py`)**:
|
||
- **10/10 CHECKS PASSED** (16 profiles, 6 roles, health tracker, affinity, leases, failover).
|
||
3. **Рендеринг всех 9 экранов (`test_all_views.py`)**:
|
||
- **9/9 ЭКРАНОВ УСПЕШНО ОТРИСОВАНЫ**.
|
||
4. **Стресс-тест запуска и чистого завершения (`stress_test_10_cycles.py`)**:
|
||
- **10/10 циклов пройдены без ошибок (0 зомби-процессов)**.
|