From da962c78666f1e960b00d03b9ea07f37e8cea12e Mon Sep 17 00:00:00 2001 From: Hermes Team Date: Mon, 24 Aug 2026 01:06:24 +0700 Subject: [PATCH] =?UTF-8?q?Merge=20antigravity/agy-native-login=20(A22)=20?= =?UTF-8?q?=E2=80=94=20=D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D0=BE,=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проверено исполнением, все три требуемых доказательства получены. 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 --- src/antigravity_provider/router/web/static/app.js | 3 ++- tests/test_web_client_contract.py | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/antigravity_provider/router/web/static/app.js b/src/antigravity_provider/router/web/static/app.js index b7f9553..1f799ad 100644 --- a/src/antigravity_provider/router/web/static/app.js +++ b/src/antigravity_provider/router/web/static/app.js @@ -1008,7 +1008,8 @@ function showWizardStep2(providerId) { Провайдер Antigravity требует интерактивного входа через консоль agy. Авторизация напрямую через веб-интерфейс невозможна.
Что делать:
- 1. Зайти по SSH на сервер и выполнить вход через нативный лаунчер: python launcher/main.py
+ 1. Зайти по SSH на сервер и выполнить вход в консоли, подставив каталог профиля:
+ python -c "from antigravity_provider.agy_subprocess import launch_native_agy_login as L; L('ag-w1').wait()"
2. ИЛИ авторизоваться на локальном ПК и перенести директорию ~/.hermes/agy_profiles на сервер.
diff --git a/tests/test_web_client_contract.py b/tests/test_web_client_contract.py index f03aebb..ae222d9 100644 --- a/tests/test_web_client_contract.py +++ b/tests/test_web_client_contract.py @@ -92,7 +92,11 @@ def test_headless_server_auth_matrix(): assert "Device Code OAuth" in app_js assert "https://x.ai/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