Раздел: System
Идентификатор:setup· Экран:ui/setup/(4 файла, ~1300 строк)
Снимок: 2026-10-11
1. Зачем и что это
Это не установщик, а диагностика с починкой: экран показывает, что не так, и даёт кнопки, которые это исправляют. Сам починкой занимается setup.sh с agent.y83.ru, запускаемый в Termux.
2. Как попасть
Хаб инструментов → секция System → карточка «Установка» (hub_setup_title).
| Откуда ещё | Путь |
|---|---|
| Мост | app_navigate с screen: "setup" |
Маршрут: Screen.kt → MainRouter (SetupScreen).
3. Экран: элементы и действия
| Секция | Карточки | Что делает |
|---|---|---|
| Статус сверху | Итог проверки | setupDisplayStatus |
// bootstrap | Termux | Установлен ли, версия; кнопки: Download Termux, Run setup in Termux, Reconnect, Open Termux |
| Backend | Живой ли, версия, задержка; ошибка | |
// file access & reliability | Termux storage | Выдан ли доступ к хранилищу Termux |
| Grant Termux storage | Запрос разрешения | |
| Battery optimization | Исключено ли приложение из оптимизации | |
| Battery saver | Включён ли режим экономии | |
| Manufacturer background policy | Политика фоновой работы производителя | |
| Manufacturer battery settings | Ссылка в настройки производителя | |
| Notifications | Разрешение на уведомления | |
| Overlay | Разрешение на оверлей | |
| Network | Есть ли сеть | |
| Copy report | Копировать отчёт в буфер | |
| Refresh | Перепроверить |
Кнопки «Download Termux» ведут на страницу Termux, «GitHub» и «F-Droid» — на источники установки.
4. Возможности подробно
Что проверяется
refresh() собирает факты (каждая проверка обёрнута в runCatching, падение не ломает экран):
| Проверка | Источник |
|---|---|
| Есть ли сеть | PermissionChecks.isNetworkAvailable |
| Установлен ли Termux | PermissionChecks.isTermuxInstalled |
| Исключение из оптимизации батареи | isBatteryOptimizationIgnored |
| Доступ приложения к хранилищу | hasStorageAccess |
| Разрешение на уведомления | hasNotificationPermission |
| Оверлей | canDrawOverlays |
| Экономия батареи | isBatterySaverEnabled |
| Живость backend | healthRepo.health() с замером латентности |
Отдельная строка — доступ Termux к хранилищу (termuxStorageGranted): он проверяется через Termux-агент и может быть null (неизвестно), если Termux ещё не подключён.
Итоговый статус
setupDisplayStatus вычисляется по фактам в строгом порядке:
| Статус | Условие | Подпись |
|---|---|---|
CHECKING | Идёт проверка | checking… |
NO_NETWORK | Нет сети | no network |
NEEDS_SETUP | Termux не установлен | needs setup |
BACKEND_OFFLINE | Backend не отвечает | backend offline |
ATTENTION | Нет доступа к хранилищу (приложение или Termux) либо ошибка | attention |
READY | Всё в порядке | ready |
Порядок важен: без сети остальные проверки бессмысленны, поэтому они не проверяются вовсе, а без Termux нельзя починить backend.
Связь с Termux
App.termuxAgentManager() даёт канал в Termux: ensureConnected подключается к нему (кнопка «Reconnect», состояние connecting), а checkTermux() — запрашивает данные. Через этот канал запускается починка (setup.sh с agent.y83.ru), кнопка «Run setup in Termux».
Если Termux не установлен, экран предлагает скачать его, а не запускает установку.
Отчёт
«Copy report» копирует собранное состояние в буфер — удобно приложить к обращению или отдать агенту, который не может сам проверить окружение.
5. Данные: БД, файлы, настройки
| Что | Где лежит | Как меняется | Кто читает |
|---|---|---|---|
| Факты окружения | Только в состоянии экрана | refresh() | Экран |
| Логи установщика | ~/.y83/setup.log | Установщик | Диагностика |
| Конфиг supervisor | ~/.y83-ws/supervisord.conf | Установщик | supervisord |
| Реестр серверов | ~/.y83-ws/servers.json | Приложение/установщик | svreg |
Постоянного хранилища для результатов проверки нет — они всегда свежие.
6. Backend: REST/роуты
Сам экран дергает healthRepo.health() (health-эндпоинт). Остальные эндпоинты окружения (/api/v1/env/*) — для инструмента «Обновления», а не для setup:
| Метод и путь | Назначение |
|---|---|
GET /api/v1/env/versions | версии компонентов |
GET /api/v1/env/status | статус окружения |
GET /api/v1/env/log | хвост лога установщика |
POST /api/v1/env/update | обновление |
POST /api/v1/env/build | сборка |
POST /api/v1/env/deploy | публикация |
Роуты: backend/internal/api/v1/routes.go:67–77.
7. Мост и MCP
| Что | Как | Примечание | |
|---|---|---|---|
| Открыть экран | app_navigate с screen: "setup" | BridgeScreenCatalog | |
| Живость backend | MCP status | Скилл y83-backend | |
| Полный отчёт | `curl -fsSL https://agent.y83.ru/agent/doctor.sh | bash` | Скилл y83-repair |
8. Настройки, конфиг, квоты и лимиты
| Параметр | Значение | Где задаётся |
|---|---|---|
| Единая схема сервисов | supervisord → только ws-backend; svreg → opencode и codex | skills/y83-repair |
| Отчёт | doctor.sh (ничего не меняет) | Тот же скилл |
| Починка | setup.sh (обновляет) | Там же |
9. Ловушки и ограничения
- Экран не чинит сам — он только показывает проблемы и запускает установщик в Termux. Починка вручную (копирование бинарей, kill процессов) запрещена.
- На dev-машине установщик не трогает backend без
Y83_FORCE_BACKEND=1и пропускает шаг codex: иначе откатилась бы версия, принятая из GitHub. - «Backend offline» может быть при живом backend, если упала сеть или Termux не запущен: сначала смотрите статусы выше по списку.
- Оптимизация батареи и политика производителя — самая частая причина «фоновые сервисы умирают». Проверяйте эти карточки.
- Отчёт копируется, а не отправляется — вы решаете, куда его передать.
termuxStorageGranted = nullозначает «неизвестно», а не «нет»: Termux ещё не подключён.- Все строки захардкожены по-английски — экран не локализован.
10. Источники правды
app/src/main/java/com/y83/ws/ui/setup/SetupScreen.kt— экран, сбор фактов.app/src/main/java/com/y83/ws/ui/setup/SetupSections.kt— карточки и кнопки.app/src/main/java/com/y83/ws/ui/setup/SetupCards.kt,SetupFormat.kt— карточки, статусы.app/src/main/java/com/y83/ws/util/PermissionChecks.kt— проверки разрешений.backend/internal/api/v1/routes.go:67–77— эндпоинты окружения.skills/y83-repair/SKILL.md— единая схема сервисов, doctor.sh, setup.sh, легаси.docs/tech/device-repair.md— починка окружения.