hermes-hub/src/antigravity_provider
Hermes Team 7e83c38340 perf(antigravity): из десяти аккаунтов одновременно работал один
В adapters/antigravity_adapter.py жил модульный _AGY_INVOCATION_LOCK, общий
для ВСЕХ профилей Antigravity. Он брался при каждом вызове, у которого есть
учётные данные, то есть при каждом рабочем. Ветка без мьютекса срабатывала
только у профиля без учётки — у вызова, который и так упадёт.

Измерено на живом адаптере: три параллельных вызова по одной секунде
занимали 3.01 с. При десяти подключённых аккаунтах одновременно работал ровно
один, чем обесценивалась вся мультиаккаунтность — то, ради чего хаб и делался.

Мьютекс охранял пустоту. Он был введён в 50fde5f со словами «guarded global
gemini:antigravity credential swap ... to eliminate concurrent subprocess
race», когда подмена учётных данных была ГЛОБАЛЬНОЙ. С тех пор она стала
попрофильной: agy_subprocess пишет в profile_dir/.gemini/oauth_creds.json, а
HOME, USERPROFILE, HOMEPATH и HOMEDRIVE подменяются на каталог профиля.
Общего состояния между профилями не осталось — проверено поиском глобальных
путей и обращений к keyring, их нет.

После снятия: те же три вызова занимают 1.00 с, и каждый идёт со своим HOME
(ag-w1, ag-w2, ag-w3) — изоляция не пострадала.

Ограничение одновременности остаётся за LeaseManager: он считает лизы по
профилю и настраивается через max_concurrency, в том числе значением 1 для
локальных моделей с --parallel 1.

Добавлен тест, удерживающий это свойство: он падает, если вызовы разных
профилей снова начнут сериализоваться. Существующий тест изоляции учётных
данных проходит без изменений.

Найдено при разборе анализа, который Antigravity провёл на сервере владельца
(hermes-muliacount). 459 passed, ruff чисто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 20:04:52 +07:00
..
router perf(antigravity): из десяти аккаунтов одновременно работал один 2026-08-30 20:04:52 +07:00
updater fix(updater): проверка обновлений не доходила до интерфейса; непроверенный файл запускался 2026-08-25 18:31:52 +07:00
__init__.py feat(state): harden snapshots quotas and routing 2026-08-21 00:03:50 +07:00
agy_subprocess.py fix(router): обработчик ошибок падал сам, уровень усилия не подставлялся 2026-08-24 08:51:01 +07:00
antigravity_client.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
cloudcode.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
credentials.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
errors.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
hermes_plugin.py feat(A11): интеграция с Hermes, токены Codex, честное обнаружение моделей 2026-08-23 15:27:28 +07:00
hermes_provider.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
models.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
oauth.py fix(oauth): preserve complete credentials and sync oauth_creds.json for Antigravity profiles (A20) 2026-08-23 23:09:58 +07:00
openai_compat.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
paths.py feat: multi-provider accounts, tariffs, quota buckets, Claude & Grok integration 2026-08-20 21:02:13 +07:00
runtime.py fix(router): correct spare assignment and error presentation 2026-08-20 17:21:30 +07:00
sanitizer.py feat(release): recovery stabilization, built-in updater, release gate, and v0.1.1 release pipeline 2026-08-20 16:29:35 +07:00
transform.py feat: initialize standalone Hermes Hub 2026-08-20 00:17:11 +07:00
version.py fix: close P0 release blockers 2026-08-20 16:25:11 +07:00