No description
Экран маршрутизации брал профили из currentSnapshot.profiles, тогда как /api/snapshot отдаёт dataclasses.asdict(HubSnapshot), где поле называется all_profiles. Ключа profiles в ответе нет — проверено перечислением полей датакласса. Это было единственное такое место в файле: остальные девять обращений уже читали all_profiles. Следствия, которые чинятся разом: - правая колонка «доступные аккаунты» была всегда пуста; - «0 аккаунтов» оставалось литералом из разметки, счётчик не переписывался; - строки цепочек получали пустой профиль, provider становился 'unknown', и все аккаунты рисовались одной иконкой-заглушкой. Для строк цепочек берётся полный список профилей, для колонки «доступные» — только подключённые (правило A26). Убрана полоса квоты с зашитым width:80%: она была одинаковой у всех аккаунтов и ни на чём не основана. Вместо неё индикатор измеренного состояния; неизвестное состояние остаётся серым, а не выдаёт себя за здоровое. Подписи связей на холсте центрируются (text-anchor отсутствовал, поэтому подпись уходила вправо от середины связи и обрезалась о край холста) и получают обводку, чтобы читаться поверх линии. Инспектор агента показывал модели из preferred_models — это настроенный список предпочтений профиля, а не то, что даёт провайдер; model_states строится перебором того же preferred_models, поэтому запасная ветка давала тот же набор. Источником стал discovered_models провайдера. Настроенная у агента модель теперь всегда присутствует в списке: раньше, если её там не было, ни один option не получал selected, показывался первый вариант, и сохранение конфигурации молча подменяло модель агента. 486 passed, ruff clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| agents | ||
| artifacts | ||
| assets | ||
| config | ||
| docs | ||
| installer | ||
| launcher | ||
| legacy | ||
| scripts | ||
| src/antigravity_provider | ||
| tests | ||
| .gitattributes | ||
| .gitignore | ||
| a15_web_api_and_linux_port_report.md | ||
| CHANGELOG.md | ||
| COCKPIT_TOOLS_ARCHITECTURE_COMPARISON.md | ||
| CODEX_CONTRACT_V11_REPORT.md | ||
| CODEX_MOCKUP_REDESIGN_REPORT.md | ||
| CODEX_UI_REDESIGN_REPORT.md | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Hermes Hub
Multi-Agent & Multi-Provider Control Hub for Hermes Agent
Hermes Hub — централизованная панель управления и отказоустойчивый маршрутизатор запросов (Multi-Provider Router) для Hermes Agent. Объединяет учетные записи различных провайдеров (Google Antigravity, OpenAI Codex, OpenCode Go, DeepSeek) в единую согласованную команду с автоматическим переключением при исчерпании квот (failover) и поддержкой сессионной привязки (Session Affinity).
🌟 Ключевые возможности
- 🖥️ Нативное приложение Windows (CustomTkinter & Brandbook):
- Фирменная дизайн-система Obsidian Forest (
#0F1510,#1A2A1F,#2F4A36,#F7F1E3,#CDAA64). - Мгновенное переключение вкладок (P95 < 200 ms, в среднем ~30 ms).
- Полноценная интеграция с панелью задач Windows через
AppUserModelID(HermesHub.Desktop) и multi-resolution.ico.
- Фирменная дизайн-система Obsidian Forest (
- 👥 Команда агентов (Team View):
- 6 логических ролей («Главный оркестратор», «Кодер», «Ревьюер», «Исследователь», «Тестировщик», «Агент общего назначения»).
- Реальные логотипы провайдеров с динамическим кэшированием.
- Четкое разделение флагов MAIN Hermes Account и Primary Orchestrator.
- 🔀 Многоуровневый Failover & Маршрутизация:
- Визуальные пайплайны маршрутизации со статусами узлов в реальном времени.
- Автоматический failover цепочки
Codex -> Antigravity -> OpenCode Goпри квотных ограничениях (HTTP 429 / Quota Exceeded).
- 🛡️ Строгий Status Resolver & Unified Health:
- Неподключенные слоты отображаются как
NOT_CONFIGURED(«Аккаунт не добавлен») и никогда не показывают ложныхQUOTA_EXHAUSTEDилиHEALTHY. - Автоматическая очистка устаревших квотных записей при удалении credentials.
- Неподключенные слоты отображаются как
- 💼 Cockpit Tools Accounts View:
- Верхний тулбар: Поиск, фильтры (Подключенные, Требуется вход, Квота), сортировка.
- Компактный блок свободных слотов без визуального шума.
- 4-шаговый мастер добавления аккаунтов (Wizard).
- ⚙️ Архитектурные модули (Roadmap P0, P1, P2):
LifecycleSupervisor: Реестр процессов с контролем владения по UUID и PID, исключающий использованиеkillall/taskkill.PolicyEnforcer:WebPolicy(ограничение исходящих доменов, блокировка метаданных) иToolPolicy(валидация команд).UnifiedSkillRegistry: Межпровайдерный реестр навыков.CapabilityMatrix: Ранжирование моделей по контексту, рассуждениям и инструментам.ScheduledTaskSafetyCoordinator: Защита периодических задач (overlap_policy: skip).
- 📦 Windows Installer (
HermesHubSetup.exe):- Обязательная pre-flight проверка наличия установленного Hermes Agent.
- Автоматическое создание ярлыков на Рабочем столе и в Главном меню с
AppUserModelID.
🚀 Быстрый старт
Запуск из исходного кода
# Установка зависимостей
uv sync
# Запуск приложения Hermes Hub
uv run python -m antigravity_provider.router.hermes_hub_app
Запуск тестов и верификации
# Полный набор автоматических тестов (35 тестов)
uv run pytest -v tests/
# Комплексная проверка роутера (10 проверок)
python scripts/verify_multi_provider_router.py
🏗️ Структура проекта
| Каталог | Назначение |
|---|---|
src/antigravity_provider/router/ |
Ядро Multi-Provider Router и Native GUI |
src/antigravity_provider/router/ui/ |
Дизайн-система, компоненты и экраны (Views) |
src/antigravity_provider/router/supervisor/ |
Lifecycle Supervisor и политики безопасности (WebPolicy/ToolPolicy) |
src/antigravity_provider/router/skills/ |
Унифицированный реестр навыков |
src/antigravity_provider/router/capability/ |
Матрица возможностей моделей и DeepSeek адаптер |
src/antigravity_provider/router/scheduler/ |
Координатор безопасности запланированных задач |
assets/ |
Фирменные логотипы, иконки провайдеров и .ico |
installer/ |
Инсталлятор HermesHubSetup.py с проверкой Hermes Agent |
tests/ |
Автоматизированные тесты pytest |
docs/ |
Архитектура, гайдлайны бренда, безопасность и производительность |
📄 Лицензия
MIT License. Hermes Hub is an open-source component of the Hermes Agent ecosystem.