hermes-hub/agents/inbox/A54-accounts-fix.md

15 KiB
Raw Permalink Blame History

Задание A54: проверка аккаунтов не работает, окна консоли, закрытие программы

Дата поступления

2026-08-31

База

origin/main (f0d06e4).

git fetch origin --prune
git checkout -b antigravity/a54-accounts-fix origin/main

В main напрямую не пушить.

Порядок исполнения

Два прохода: Flash реализует, Pro проводит аудит. Пункт P0-8 написан для аудитора.

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


Задача

Владелец, дословно: «я так понял ни один аккаунт не подключается. Все проверки проходят с ошибкой, модели перестали нормально подтягиваться. Даже на локальных моделях». И отдельно: «в чём сложность-то?» — про OpenRouter и NVIDIA, которые не подключаются третье задание подряд.


Что проверено ревьюером — заново не выяснять

Кнопка «Проверить подключение» ничего не проверяет

Воспроизведено вызовом:

check_account profile_id=local-1
  → ok=False
  → «Фоновая служба проверки не запущена. Перезапустите веб-сервер.»

Действие перекладывает работу на фоновую службу вместо того, чтобы выполнить проверку. Если служба не поднялась, владелец получает отказ на каждом аккаунте. В интерфейсе это выглядит как «Тест завершился с ошибкой» и «Отказ выполнения действия» — второе вообще запасной текст на случай пустого сообщения, то есть причина до владельца не доходит.

Служба включается в web/server.py:496 внутри фонового потока. Любой сбой этого потока оставляет все проверки нерабочими, и узнать об этом нельзя.

Удаление аккаунта занимает полминуты

Причина найдена: _rescan_after_auth() вызывает

HubStateStore.get().refresh(force_scan=True)
AccountProbeService.get().schedule_all()

то есть принудительный полный пересбор всех провайдеров с сетевыми запросами. Таймауты в сборщике квот — 15, 20 и 30 секунд, у Antigravity через CLI — 60. Удаление одного ключа ждёт опроса всех.

Окна консоли

В f0d06e4 скрытие окна добавлено к двум живым запускам agy и к остальным фоновым вызовам. Проверено, что hidden_process_kwargs() на Windows возвращает CREATE_NO_WINDOW и SW_HIDE.

Окна у владельца остались. Наиболее вероятная причина: старый процесс сервера пережил обновление. Закрытие окна браузера сервер не останавливает, и после установки продолжает работать прежний код. Проверить это первым делом.

launch_native_agy_login с CREATE_NEW_CONSOLE — мёртвый код, его никто не вызывает. Либо удалить, либо подключить к входу.

OpenRouter и NVIDIA

Сохранение работает — проверено вызовом add_account, профиль создаётся с верным идентификатором, чужой слот отклоняется. Значит дело не в сохранении, а в том, что после ввода ключа ничего не проверяется и модели не запрашиваются, и владелец остаётся с пустым списком.


P0-1. Проверка выполняется, а не делегируется

  1. «Проверить подключение» делает настоящий запрос к провайдеру здесь и сейчас и возвращает результат. Фоновая служба — для периодической проверки, а не для ручной.
  2. Отказ невозможен из-за незапущенной службы. Если фоновая служба нужна, но не работает, ручная проверка всё равно обязана отработать.
  3. Причина доходит до владельца. Запасной текст «Отказ выполнения действия» означает пустое сообщение — таких путей быть не должно.
  4. Состояние службы видно в «Состоянии системы»: работает или нет, когда был последний обход.

P0-2. Удаление и очистка

  1. Удаление ключа не запускает полный пересбор. Обновлять только затронутый профиль; полный обход — в фон, не блокируя ответ.
  2. Кнопка «Очистить все аккаунты» с подтверждением и перечислением того, что будет удалено.
  3. Учётные данные Antigravity — под защитой A37. Массовое удаление не должно затрагивать ~/.hermes/agy_profiles/ без явного отдельного подтверждения: повторный вход в два десятка аккаунтов делается вручную и стоит владельцу часов.

P0-3. Закрытие программы на Windows

Владелец: «при нажатии на крестик спрашивать, закрыть программу или свернуть в фон. При закрытии полностью всё закрывает».

  1. Диалог при закрытии: закрыть полностью или свернуть в фон.
  2. Закрытие останавливает всё: веб-сервер, фоновые опросы, дочерние процессы. После этого окон появляться не должно.
  3. Свёрнутое состояние видно — значок в области уведомлений с пунктами «Открыть» и «Выход».
  4. Обновление не должно оставлять старый процесс: перед установкой прежний сервер останавливается. Это вероятная причина того, что окна не исчезли после установки исправления.

P0-4. Подключение по ключу проверяется сразу

Для openrouter, nvidia, nvidia-nim и прочих провайдеров с ключом:

  1. После ввода ключа — немедленная проверка: запрос к провайдеру, и его ответ показывается владельцу.
  2. Ключ неверен — сказать сразу, не создавая профиль-пустышку.
  3. Ключ верен — тут же запросить модели и дать выбрать предпочитаемую в том же окне.
  4. Не «сохранено», а «подключено и проверено» — сообщение должно отражать, что именно произошло.

P0-5. Модели у локальных и Ollama

  1. «Запросить список моделей» у локального профиля возвращает ошибку — разобраться и починить. Локальный путь не требует ключа, отказ там означает дефект, а не отсутствие доступа.
  2. Ollama: список не грузится. Локальные модели через /api/tags по адресу профиля; облачный каталог уже работает — не сломать.
  3. Отличать «сервер не отвечает» от «моделей нет»: у владельца на Windows Ollama не запущена, и WinError 10061 — это честный ответ, его надо показывать именно так, а не как ошибку обновления.

P0-6. Antigravity: было 14 моделей, стало 3

На прошлой сборке у аккаунтов Antigravity значилось «Получено 14 моделей» с перечнем. Сейчас в карточке три, статус «Не проверялся», а проверка завершается ошибкой.

  1. Найти, где список сузился. Проверить, не подменяется ли обнаруженный список предпочтениями профиля — эта ошибка уже была в инспекторе агента и чинилась в правках ревьюера.
  2. Число и время получения показывать рядом со списком, как было.

P0-7. Проверка исполнением

Тестов недостаточно: все перечисленные дефекты прошли через зелёный прогон.

  1. Открыть хаб и нажать «Проверить подключение» на локальном профиле, на Ollama и на Antigravity. Результат приложить скриншотами.
  2. Подключить OpenRouter с заведомо неверным ключом и убедиться, что ошибка видна сразу; затем убедиться, что при верном ключе подтягиваются модели.
  3. Удалить аккаунт и замерить время — должно быть быстро, без ожидания опроса всех провайдеров.
  4. Закрыть программу крестиком, выбрать «закрыть», и убедиться, что процессов не осталось и окна не появляются.
  5. Проверить, что после обновления старый процесс не остаётся.

P0-8. Аудит вторым проходом

  1. Проверить, что ручная проверка работает при остановленной фоновой службе.
  2. Искать оставшиеся пути с пустым сообщением об ошибке — их не должно быть.
  3. Замерить удаление аккаунта независимо.
  4. Проверить, что массовая очистка не трогает ~/.hermes/agy_profiles/.
  5. Проверить, что окна консоли не появляются при работающей автопроверке.
  6. Побочные изменения объяснить.
  7. Пропущенный пункт назвать пропущенным.

Ограничения

  • Учётные данные и ~/.hermes/agy_profiles/ не трогать; массовое удаление — только с отдельным подтверждением.
  • Автоматическую проверку не отключать ради тишины: чинить, а не убирать.
  • Вёрстку A48 не ломать.
  • Версию 0.1.1 не поднимать.
  • Правило честности без исключений: причина отказа доходит до владельца текстом.

Критерии приёмки

  1. Ветка в origin, git status чист.
  2. Ручная проверка выполняет запрос и возвращает результат даже при незапущенной фоновой службе; проверено.
  3. Путей с пустым сообщением об ошибке не осталось.
  4. Удаление аккаунта не ждёт полного обхода провайдеров; время замерено до и после.
  5. Есть кнопка очистки всех аккаунтов с подтверждением; учётные данные Antigravity не затрагиваются без отдельного согласия.
  6. Крестик спрашивает «закрыть или свернуть»; закрытие останавливает сервер и фоновые опросы; проверено отсутствием процессов.
  7. Обновление не оставляет старый процесс.
  8. Ввод ключа сразу проверяется, модели подтягиваются в том же окне.
  9. Список моделей у локального профиля и Ollama работает; «сервер не отвечает» отличается от «моделей нет».
  10. У Antigravity список моделей вернулся к полному; показано число и время получения.
  11. Скриншоты проверок приложены.
  12. ruff check . чисто; релизный гейт 10/10; тестов не меньше 574.
  13. Отчёт: START_HEAD, FINAL_HEAD, origin/main, git status, X passed / Y skipped / Z failed.

Главное

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

Общее у большинства этих дефектов одно: действие не делает работу само, а перекладывает её на фоновую службу или на полный обход всех провайдеров. Отсюда и отказы, и задержки. Чинить надо это, а не симптомы.

Порядок сдачи

Передать точный FINAL_COMMIT_SHA.