Снимок: 2026-10-11. Секция хаба AI & Agents, тайл «WebAI» / «WebAI», подпись «Вход в поддерживаемые аккаунты веб-ИИ». Доступен всегда.
Экраны и навигация
Screen.WebAiAccounts→WebAiScreen(374 строки) — список аккаунтов.Screen.AddEditWebAiAccount(accountId?)→WebAiAccountFormScreen(362) — добавление/правка аккаунта.WebAILoginActivity(609 строк) — скрытая/видимая WebView-авторизация.WebgetSettingsSheet(213) — токены интеграций (GitHub и др.) — см. Интеграции.
Возможности (подробно)
Жизненный цикл аккаунта
- Статусы:
auth/broken, включён/выключен, квота дня (100/день), статистика обращений (okCount,errorCount,powRejected,emptyAnswers,authErrors,lastError,lastLatencyMs). checkAccount— проверка живости (/webai/accounts/check).toggleEnabled— вкл/выкл без удаления.reset-broken(/webai/accounts/{id}/reset-broken) — сброс счётчиков ошибок у сломанного аккаунта.- Retry и backoff при 429 — логика на backend (30 с), не в UI.
Вход (WebAILoginActivity)
- Отдельная Activity с WebView: OAuth-редиректы,
shouldInterceptRequestдля перехвата токенов,maybeAutoFillCredentials(автозаполнение логина),verify— проверка успеха входа. closeOAuthWindow,onCreateWindow/onCloseWindow— popup-окна.capture— сохранение итоговых куки/токенов в аккаунт.- Ошибки:
onReceivedError— понятное сообщение вместо белой страницы.
Несколько аккаунтов
WebAiAccountCards— карточки аккаунтов с переключением вкл/выкл.WebAiScreenHeader— шапка со сводкой (сколько аккаунтов, квота).- Несколько аккаунтов = распределение квоты: при 429 backend берёт другой.
Форма аккаунта
WebAiAccountFormScreen: имя, провайдер, логин, включён, заметка; сохранение в БД backend.
Экспорт и импорт
export(/api/v1/webai/export) — все аккаунты с токенами и куками в файл.import(/api/v1/webai/import) — перенос на другое устройство;session/import— импорт сессии.- Соответствующие MCP-тулы:
ai_export,ai_import.
Где в коде
| Файл | Строк | Роль |
|---|---|---|
ui/webai/WebAILoginActivity.kt | 609 | OAuth-вход через WebView |
ui/projects/WebAiScreen.kt | 374 | Список аккаунтов, проверка, вкл/выкл |
ui/projects/WebAiAccountFormScreen.kt | 362 | Форма аккаунта |
ui/projects/WebAiAccountCards.kt | — | Карточки аккаунтов |
ui/projects/WebgetSettingsSheet.kt | 213 | Токены интеграций |
data/api/WebAiDtos.kt | — | DTO аккаунтов |
data/api/BackendApiWebAi.kt | — | REST-обвязка |
Данные и API
Единая SQLite backend ~/.y83-ws/ws-backend.db — источник правды для аккаунтов (REST и MCP читают её).
| Эндпоинт | Назначение |
|---|---|
GET /api/v1/webai/accounts | Список |
POST /api/v1/webai/accounts | Создать |
GET /api/v1/webai/accounts/{id} | Один |
PUT /api/v1/webai/accounts/{id} | Обновить |
DELETE /api/v1/webai/accounts/{id} | Удалить |
POST /api/v1/webai/accounts/{id}/reset-broken | Сбросить сломанный |
POST /api/v1/webai/accounts/check | Проверка живости |
POST /api/v1/webai/login-start | Старт OAuth-сессии |
POST /api/v1/webai/session/import | Импорт сессии |
GET /api/v1/webai/export | Экспорт аккаунтов |
POST /api/v1/webai/import | Импорт аккаунтов |
GET /api/v1/webai/providers | Поддерживаемые провайдеры |
Агент
MCP-тулы
ai_status— главный источник правды для агента: по каждому провайдеру и аккаунту auth/broken/квота, счётчики (okCount,errorCount,powRejected,emptyAnswers,authErrors),lastError,lastLatencyMs, состояние очереди (busy,backoffSeconds). Это объясняет «почему молчит DeepSeek»: отказ PoW — разовый челлендж, а не сломанная сессия.ai_export/ai_import— перенос аккаунтов с токенами и куками.ai_ask(provider, model)— спросить через конкретный webai-провайдер.
Мост
backend_web_deepseek— мостовая команда явного веб-поиска DeepSeek (обход PoW-челленджа).vision_config/vision_agent— если webai-аккаунт выбран источником Vision.
Подводные камни
- Квота 100 запросов в день на аккаунт. Несколько аккаунтов = несколько квот; backend распределяет и отдаёт 429 при исчерпании.
- PoW-челлендж. Отказ
powRejected— не поломка; повтор черезbackend_web_deepseekили позже. - Экспорт содержит секреты (токены, куки). Файл — чувствительный; импорт заменяет набор полностью.
- Broken-аккаунт не чинится повтором — нужен
reset-brokenили новый вход. - Вход может зависнуть на OAuth, если сервис сменил редиректы — тогда аккаунт не создаётся (ошибка входа).
Как обновлять
- Каталог:
data/InstrumentCatalog.kt(idwebai). - Маршрут:
ui/navigation/Screen.kt(Screen.WebAiAccounts,Screen.AddEditWebAiAccount). - Код:
ui/projects/WebAi*,ui/webai/WebAILoginActivity.kt. - API:
data/api/BackendApiWebAi.kt,WebAiDtos.kt, роуты — routes.go. - БД:
~/.y83-ws/ws-backend.db(таблица webai-аккаунтов). - Скилл:
y83-webai.