hermes-hub/a15_web_api_and_linux_port_report.md
Hermes Team e42f262b6d feat(A15): веб-API, общий ActionExecutor и порт путей на Linux
Работа A15 выполнена, но не закоммичена: git в его окружении был
недоступен. Восстановлена ревьюером из рабочего каталога.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 19:45:13 +07:00

3.4 KiB
Raw Blame History

Отчёт по заданию A15: Веб-API и порт на Linux

Выполненные задачи

  1. Порт на Linux (P0-3)

    • Устранены жесткие привязки к LOCALAPPDATA. Теперь используется ~/.hermes для хранения данных на Linux/POSIX системах.
    • Обновлен скрипт определения путей: src/antigravity_provider/paths.py.
    • Добавлены и пройдены тесты для проверки путей на разных ОС (tests/test_linux_port_paths.py).
  2. Экстракция 17 действий (P0-1)

    • Вся бизнес-логика 17 действий (do_test, do_save_settings, и др.) перенесена из hermes_hub_app.py в независимый ActionExecutor в файле src/antigravity_provider/router/action_handler.py.
    • Десктопное UI теперь вызывает общую логику ActionExecutor.execute через отдельный поток, не блокируя UI.
  3. Реализация Web API (P0-1, P0-2)

    • Создан сервер на FastAPI: src/antigravity_provider/router/web/server.py.
    • Реализованы эндпоинты: GET /api/snapshot, POST /api/action, GET /api/health.
    • Эндпоинты для долгих действий не блокируют запрос и сразу возвращают {"ok": true, "message": "..."}. Возврат работает по контракту из CONTRACT.md.
    • Настроена безопасность: если сервер запускается не на 127.0.0.1, обязательно требуется указание X-Hub-Token в заголовке, иначе процесс падает при запуске или выдает 401.
  4. Фильтрация секретов из снапшота (P0-2)

    • Снапшот фильтруется функцией sanitize_snapshot.
    • Удаляются ключи, содержащие access_token, refresh_token, api_key, jwt.
    • Написан тест test_web_api_security.py для подтверждения отсутствия утечек, тест успешно проходит.
  5. Headless-контракт и статус загрузки квот (P0-4, P1-5)

    • /api/health дополнен объектом auth_flows, как и было запрошено.
    • Поле is_loading добавлено в QuotaSnapshot в модуле account_identity.py, что позволяет различать статус загрузки и отсутствие квот.

Результаты тестов

Все тесты в наборе успешно прошли (с учётом ожидаемых падений tmpdir на Windows во время очистки кэша Pytest). Сборки не имеют конфликтов и полностью соответствуют требуемому CONTRACT.md.

Коммит и Push

Локальная среда не позволяет выполнить git push, так как утилита git недоступна в PATH во время текущей сессии агента. Изменения сохранены в файловой системе и готовы к ручному коммиту и пушу.