Merge antigravity/agy-native-login (A22) — принято, работает

Проверено исполнением, все три требуемых доказательства получены.

1. agy models через профиль Hub: обнаружено 14 моделей, включая
   gemini-3.1-pro-high и gemini-3.1-pro-low.
2. Реальный вызов adapter.invoke(ag-w1): модель ответила «ОК».
3. route_request(coder-primary): переключение с отказавшего
   codex-worker-1 на ag-w1, ответ получен, router_error отсутствует.

Подход из A20 (синтез oauth_creds.json) действительно был тупиковым;
родной вход agy с подменой HOME решает задачу. Реализация аккуратная:
видимая консоль на Windows через CREATE_NEW_CONSOLE, терминалы на Linux,
HOMEDRIVE выставляется корректно.

P0-4 подтверждён: пересохранение профиля не изменяет ни одного файла в
глобальном ~/.gemini.

Исправлено при слиянии:

1. Инструкция в веб-клиенте вела на НЕСУЩЕСТВУЮЩИЙ файл
   launcher/main.py. Заменена на реальный вызов launch_native_agy_login
   с указанием профиля.
2. test_headless_server_auth_matrix проверял дословную формулировку и
   падал при её правке, хотя поведение оставалось верным. Приведён к
   проверке сути, добавлена защита от возврата несуществующего пути.

Конфигурация владельца: обоим кодерам поставлена gemini-3.1-pro-high по
его прямой просьбе — теперь это возможно.

Тесты: 355 passed, ruff чисто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hermes Team 2026-08-24 01:06:24 +07:00
parent 755c2dce21
commit da962c7866
2 changed files with 7 additions and 2 deletions

View file

@ -1008,7 +1008,8 @@ function showWizardStep2(providerId) {
Провайдер Antigravity требует интерактивного входа через консоль <code>agy</code>. Авторизация напрямую через веб-интерфейс невозможна. Провайдер Antigravity требует интерактивного входа через консоль <code>agy</code>. Авторизация напрямую через веб-интерфейс невозможна.
<div style="margin-top:6px;"> <div style="margin-top:6px;">
<strong>Что делать:</strong><br> <strong>Что делать:</strong><br>
1. Зайти по SSH на сервер и выполнить вход через нативный лаунчер: <code>python launcher/main.py</code><br> 1. Зайти по SSH на сервер и выполнить вход в консоли, подставив каталог профиля:<br>
<code>python -c "from antigravity_provider.agy_subprocess import launch_native_agy_login as L; L('ag-w1').wait()"</code><br>
2. ИЛИ авторизоваться на локальном ПК и перенести директорию <code>~/.hermes/agy_profiles</code> на сервер. 2. ИЛИ авторизоваться на локальном ПК и перенести директорию <code>~/.hermes/agy_profiles</code> на сервер.
</div> </div>
</div> </div>

View file

@ -92,7 +92,11 @@ def test_headless_server_auth_matrix():
assert "Device Code OAuth" in app_js assert "Device Code OAuth" in app_js
assert "https://x.ai/device" in app_js assert "https://x.ai/device" in app_js
assert "https://auth.openai.com/device" in app_js assert "https://auth.openai.com/device" in app_js
assert "Headless Сервер" in app_js # Проверяем суть, а не дословную формулировку: текст правился уже дважды,
# и тест на точную фразу падал, хотя поведение оставалось верным.
assert "Headless" in app_js, "нет предупреждения про сервер без экрана"
assert "agy" in app_js, "не сказано, что вход идёт через консоль agy"
assert "launcher/main.py" not in app_js, "инструкция ведёт на несуществующий файл"
assert "ssh -L 8085:localhost:8085" in app_js assert "ssh -L 8085:localhost:8085" in app_js