y83 code / инструмент

Планировщик

Cron-планировщик на стороне backend: задачи двух типов — shell-команды и промпты ИИ — выполняются по расписанию, пишут логи, логи показываются в приложении вживую. Задачи живут в backend (ws-backend), приложение — только UI и логи.

раздел реестра
Инструменты
код
2 533 строк в 8 файлах
документ
06-scheduler.md

Снимок: 2026-10-11. Секция хаба Tools, тайл «Крон» / «Cron», подпись «Команды оболочки и промпты ИИ по расписанию с живым выводом». Доступен всегда.

Экраны и навигация

  • Screen.Scheduler → SchedulerScreen (624 строки) — список задач.
  • Screen.SchedulerEdit(taskId?, templateId?) → SchedulerTaskScreen (639) — создание/правка задачи + превью расписания.
  • Screen.SchedulerLogs(taskId, taskName) → SchedulerLogsScreen (506) — история прогонов с живым выводом.

Возможности (подробно)

Типы задач

ТипЧто делаетПоле
shellКоманда в оболочке Termuxcommand
aiПромпт ИИ (агент пишет текст/дайджест)command = текст промпта

Шаблон ai_digest — пример: ежедневный короткий статус-дайджест в 20:00, таймаут 600 с (app_scheduler_digest_task).

Расписание

  • Cron-выражение (cronExpr) + часовой пояс (tz).
  • SchedulerTaskScreen.CronPreview — предпросмотр следующих запусков; бэкенд считает их preview(cron, tz, n=3).
  • humanSchedule, nextInText, relativeTimeText — человекочитаемые подписи и «через сколько».
  • Пресеты cronFromPreset/presetIdOf — быстрый выбор частоты.

Поля задачи

SchedulerFormat.kt (185 строк): tagsOf/textToTags/tagsToText (теги), parseEnvLines/envToLines (переменные окружения), timeoutText (таймаут), humanDuration, runStatusLabel/isFailureStatus (статус прогона), runDurationText.

Управление задачами

SchedulerViewModel (310 строк):

  • CRUD: loadTask/saveTask/deleteTask/duplicateTask.
  • Запуск: runTask (запустить сейчас), killTask (прервать).
  • Вкл/выкл: toggleTask (enable/disable).
  • Пауза всего планировщика: pause (/api/v1/scheduler/pause).
  • Превью: preview.
  • Фильтры: setQuery, taskMatchesQuery.

Логи прогонов

  • SchedulerLogsScreen: список прогонов (LogCard), живой вывод текущего (LiveRunCard), блок вывода (OutputBlock), фильтр по статусу (setLogsFilter), режим live (setLogsLive).
  • loadLogs/clearLogs/deleteLog — очистка истории по задаче или по логу.
  • logsToText — выгрузка текстом.

Шаблоны (SchedulerTemplates.kt, 80 строк)

Библиотека готовых задач (TemplateSheet, templateIcon):

idчто делаетcron
disk_checkсвободное место на телефоне0 9 *
tmp_cleanupудаление временных файлов старше 7 дней30 3 *
backup_hometar ~/y83-ws в ~/backups0 4 0, таймаут 1800
ping_checkодин ICMP-проб каждые 15 минут*/15 , таймаут 30
termux_updatepkg update && pkg upgrade0 5 1, таймаут 1800
ai_digestИИ-дайджест статуса0 20 *, тип ai, таймаут 600

Статус планировщика

/api/v1/scheduler/status → включён/на паузе, состояние демона; показывается в шапке.

Где в коде

ФайлСтрокРоль
ui/scheduler/SchedulerScreen.kt624Список задач, карточки, строки поиска
ui/scheduler/SchedulerTaskScreen.kt639Форма задачи + превью расписания
ui/scheduler/SchedulerLogsScreen.kt506Логи прогонов, живой вывод
ui/scheduler/SchedulerViewModel.kt310Состояние, CRUD, запуск, логи
ui/scheduler/SchedulerFormat.kt185Форматирование, cron, теги, env
ui/scheduler/SchedulerModels.kt114Модели данных
ui/scheduler/SchedulerTemplates.kt80Библиотека шаблонов
ui/scheduler/SchedulerSheets.kt75BottomSheet шаблонов

Данные и API

Репозиторий: data/repo/SchedulerRepository.kt (полный CRUD + логи + превью).

ЭндпоинтНазначение
GET /api/v1/scheduler/statusСтатус планировщика
GET /api/v1/scheduler/tasksСписок задач
POST /api/v1/scheduler/tasksСоздать
GET /api/v1/scheduler/tasks/{id}Одна задача
POST /api/v1/scheduler/tasks/{id}Обновить
POST /api/v1/scheduler/tasks/{id}/runЗапустить сейчас
POST /api/v1/scheduler/tasks/{id}/killПрервать
POST /api/v1/scheduler/tasks/{id}/enableВключить
POST /api/v1/scheduler/tasks/{id}/disableВыключить
POST /api/v1/scheduler/tasks/{id}/logsЛоги прогона
GET /api/v1/scheduler/tasks/{id}/logsЛоги задачи
DELETE /api/v1/scheduler/tasks/{id}Удалить
POST /api/v1/scheduler/pauseПауза/снятие паузы
POST /api/v1/scheduler/previewПревью расписания
GET /api/v1/scheduler/logsОбщий журнал
DELETE /api/v1/scheduler/logs/{id}Удалить запись журнала

Агент

Прямых MCP-тул нет

Планировщик не выведен в MCP-инвентарь ни в одном профиле.

Как агент работает

  • REST /api/v1/scheduler/* через bridge_command/curl (dev) или через агента на сервере.
  • Задачи типа ai — это промпты, которые выполняет агент по расписанию: планировщик сам ИИ не зовёт, он запускает задачу, а агент (Codex/opencode) подхватывает промпт.

Подводные камни

  • Задачи живут в backend. Без работающего ws-backend планировщик молчит; приложение только UI.
  • Таймаут по умолчанию 300 с. Для тяжёлых задач (бэкап, обновление) шаблоны поднимают до 1800 с.
  • Теги — JSON-массив в поле (textToTags/tagsToText — конвертация).
  • Env задачи задаётся построчно (parseEnvLines) — пустые строки игнорируются.
  • Превью считает бэкенд с учётом tz; часовой пояс по умолчанию — системный.
  • Пауза — глобальная, а не на задачу.

Как обновлять

  • Каталог: data/InstrumentCatalog.kt (id scheduler).
  • Маршрут: ui/navigation/Screen.kt (Screen.Scheduler, SchedulerEdit, SchedulerLogs).
  • Код: ui/scheduler/*.
  • Репозиторий: data/repo/SchedulerRepository.kt.
  • API: data/api/BackendApiScheduler.kt, роуты — backend/internal/api/v1/routes.go.
  • Скилл: отдельного нет; общие правила — docs/tech/*, AGENTS.md.

Источник: docs/project/hub/06-scheduler.md · Инструменты · 2 533 строк в 8 файлах. Страница собирается из документации проекта при сборке сайта.