0.39.0
Added
- Supervisor/Worker watchdog (
internal/supervisor/): кросс-платформенная двухпроцессная схема запуска (macOS/Linux/Windows). Supervisor реагирует на exit code worker’а: 0— graceful (полная остановка, supervisor тоже выходит)10— restart (перезапуск worker’а)11— update-restart (рестарт после обновления бинарника, готово к фиче автообновления)- любой другой — краш, рестарт с экспоненциальным backoff (1s → 60s)
- Флаг
--no-supervisorдля запуска в single-process режиме (нужен для systemd/launchd/dev) - Раздел Settings → Система в WebUI (видим только глобальному админу): аптайм с live-обновлением, версия, PID worker/supervisor, режим работы (Supervisor/Без supervisor/Системный сервис)
- Кнопки «Перезапустить» и «Потушить полностью» в разделе «Система» — с confirm-диалогами и предупреждениями для приложений под управлением systemd/launchd
- API:
GET /api/v1/system/info(любой авторизованный),POST /api/v1/system/restartиPOST /api/v1/system/shutdown(RequireGlobalAdmin) - Эвристика
managed_externally(детект systemd/launchd через envINVOCATION_ID/JOURNAL_STREAM/XPC_SERVICE_NAMEи системные пути установки) - Аудит-лог для административных действий (user_id, username, action, reason, IP)
- Заглушка «Приложение остановлено» с инструкцией по запуску под текущую платформу (macOS/Linux/Windows)
- ADR
2026-05-10-механизм-рестарта-приложения.md, ADR2026-05-10-автообновление-приложения.md, спецификацияauto-update-spec.md
Changed
Makefile:make devтеперь стартует с--no-supervisor(supervisor не нужен вgo run-режиме)deploy.sh: launchd-plist используетKeepAlive=trueи--no-supervisor(поднятием процесса управляет launchd, не наш supervisor); systemd-юнит —Restart=alwaysи--no-supervisorдля аналогичного поведенияcmd/taigaclaw/main.go: при обычном запуске (без envTAIGACLAW_WORKER=1и без--no-supervisor) main делегирует управлениеsupervisor.Run(), который форкает worker’а с тем же бинарником