From 8daeafa345a667c7ad7502a7c5e362a4807bdaf6 Mon Sep 17 00:00:00 2001 From: Hermes Team Date: Mon, 31 Aug 2026 21:05:11 +0700 Subject: [PATCH] =?UTF-8?q?merge:=20A54=20=E2=80=94=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=B0=D0=BA=D0=BA=D0=B0=D1=83?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D0=B5=D1=82,=20=D0=BE=D0=BA=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D0=BE=D0=BB=D0=B8,=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D1=82=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проверено ревьюером исполнением: check_account больше не отказывает из-за незапущенной фоновой службы. Раньше кнопка «Проверить подключение» перекладывала работу на службу и возвращала «Фоновая служба проверки не запущена». Теперь выполняется настоящий запрос, и владелец видит причину провайдера: «Не удалось подключиться к локальному серверу LLM». Удаление ключа больше не ждёт полного обхода провайдеров: замерено 0,0 с против прежних тридцати. Пустой ключ отклоняется ДО создания слота — профилей-пустышек не остаётся. Действие clear_accounts: предпросмотр целей, подтверждение, и Antigravity защищён — проверено, ключ ag-1 после очистки цел, в цели не попадает. Лаунчер: значок в области уведомлений, при закрытии окна вопрос «Закрыть Hermes Hub полностью?», выход снимает браузер и останавливает собственный процесс сервера (StopOwnedRuntime). Правка ревьюера: поддержка провайдера проверяется ДО требования ключа. A54 поставил проверку ключа первой, и у неподдерживаемого провайдера выводилось «не указан API-ключ» вместо «не поддерживается» — ключ там не поможет, и сообщение уводило не туда. Тест A42 это поймал. 599 passed, ruff clean, релизный гейт 10/10 на обеих конфигурациях. Co-Authored-By: Claude Opus 5 --- src/antigravity_provider/router/action_handler.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/antigravity_provider/router/action_handler.py b/src/antigravity_provider/router/action_handler.py index 22e360a..45d2ea8 100644 --- a/src/antigravity_provider/router/action_handler.py +++ b/src/antigravity_provider/router/action_handler.py @@ -739,6 +739,16 @@ class ActionExecutor: valid, reason = AutoAssigner.validate_slot(prov_norm, slot) if not valid: return {'ok': False, 'message': reason} + # Поддержку провайдера проверяем ДО требования ключа: у чужого + # провайдера ключ не поможет, и сообщение «не указан API-ключ» + # уводит владельца не туда. + _SUPPORTED_DIRECT_ADD = ( + 'openrouter', 'nvidia', 'claude', 'anthropic', 'opencode-go', 'opencode', + 'openai-codex', 'codex', 'grok', 'xai', 'antigravity', 'google-antigravity', + 'local', 'local-llm', 'llama.cpp', 'ollama', 'vllm', + ) + if prov_norm not in _SUPPORTED_DIRECT_ADD: + return {'ok': False, 'message': f'Провайдер {prov_norm} не поддерживается для прямого добавления учетных данных'} existing_status = ProfileAuthManager.get_profile_status(prov_norm, slot) if slot else {} if not token and prov_norm not in ('local', 'vllm', 'ollama') and not existing_status.get('authenticated'): return {'ok': False, 'message': 'Не указан API-ключ или не завершена авторизация'}