# Отчёт по заданию 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` во время текущей сессии агента. Изменения сохранены в файловой системе и готовы к ручному коммиту и пушу.
