Раздел: AI & Agents
Идентификатор:runs· Экран:ui/runs/RunsScreen.kt
Снимок: 2026-10-27
1. Зачем и что это
Агрегат собирается на бэкенде (internal/runs), а не в приложении: источники и их секреты живут там, и экран, виджет и уведомление должны видеть одинаковые строки без гонки трёх опросов.
2. Как попасть
Хаб инструментов → секция AI & Agents → карточка «Пульт запусков» (hub_runs_title, подпись «Что идёт сейчас, что упало и что недавно закончилось — Codex, opencode, задачи и сервисы»).
| Откуда ещё | Путь |
|---|---|
| Мост | app_navigate с screen: "runs" |
| Уведомление | тап по сводке runs_summary |
3. Источники
| Источник | Что даёт |
|---|---|
| Codex локальный | активные треды, turnId, очередь |
| Codex удалённый | то же через готовый туннель; нет туннеля — tunnel unavailable |
| opencode | активные сессии, формы, permissions, inbox |
| Планировщик | запущенные и упавшие задачи |
| Сервисы (svreg) | автостарт-сервисы, которые не работают |
Соединение с app-server короткоживущее: один опрос — один WS-цикл initialize → запросы → close. Держать третье долгоживущее соединение после приложения и чата незачем.
4. Экран и уведомление
| Блок | Что показывает |
|---|---|
| «Сейчас» | running и waiting; ожидание — не сбой |
| «Требует внимания» | failed и degraded |
| «Недавно» | до 50 строк, пропавших из «Сейчас» |
| Stop | Codex — turn/interrupt, opencode — interrupt, планировщик — CancelTask |
degraded — отдельные строки для источников, которые не опрошены: «пусто» не должно читаться как «всё хорошо». Уведомление RunsWatchService опрашивает пульт раз в 15 секунд, показывает «N выполняется» / «N сбоев · M выполняется» и даёт Stop по каждой рабочей строке. По умолчанию уведомление выключено.
5. API и границы
| Метод | Путь | Что делает |
|---|---|---|
| POST | /api/v1/runs/query | снимок: items, recent, degraded, fetchedAt, cached |
| POST | /api/v1/runs/stop | остановка Codex/opencode/задачи |
| GET | /api/v1/runs?recent=&refresh= | то же для скриптов и моста |
Границы v1: сборки APK/бэкенда, image-jobs, медиа и Qwen в пульт не входят; «недавно» не переживает рестарт бэкенда — источник правды по истории остаётся в тредах и логах. Сервисы из пульта не останавливаются: ответ ok=false с подсказкой открыть «Сервисы».