y83 code / журнал

Журнал релизов 0.8: часть 6 из 9

Полная ветка 0.8 из журнала проекта. Записи идут от свежих к старым, текст взят из CHANGELOG.md без правок — это тот же журнал, что читают разработчик и агент.

записей в ветке
251
приложение
185
бэкенд
59
архив сборок
7
период
19 августа 2026 — 24 октября 2026
страниц
6 из 9

журнал

Релизы ветки 0.8

Здесь записи 151–180 из 251: релизы приложения и бэкенда плюс записи архива сборок — каждая запись со своим набором правок.

backend 0.8.121

23 сентября 2026бэкенд

Added

  • Документы в WebAI-чате. DeepSeek принимает PDF, DOC/DOCX, TXT/MD, CSV и XLS/XLSX наравне с изображениями; классификация проверяет MIME и расширение, документы ждут текстовый парсинг без vision-fork, изображения продолжают fork в vision. Qwen остаётся image-only, Kimi/Z.ai — без файлов.
  • Миниатюры истории. GET /api/v1/webai/chats/{id}/messages/{messageId}/ files/{index}/bytes отдаёт только изображение: путь берётся из истории, повторно проверяется внутри uploads, вне диапазона/для документа — 400/404.
  • Папки, шаблоны и автотайтл. CRUD chat-groups и templates, POST .../auto-title; в SQLite добавлены pinned, group_id, title_source плюс таблицы папок и шаблонов через additive-миграции.

Fixed

  • Переименование чата больше не очищает model. PUT /webai/chats/{id} стал настоящим частичным обновлением model/title/pinned/groupId; пустой PATCH возвращает 400.
  • Пустой prompt для документа больше не просит «описать изображение», а выбранный режим vision включается только при наличии картинки.

0.8.90

23 сентября 2026

Added

  • Полный набор вложений WebAI Chat: меню + с Gallery / Files / Clipboard без камеры, сохранение оригинального MIME и расширения документов, превью изображений в истории и Markdown-ссылка для не-картинок.
  • Папки и закрепление диалогов: секции Pinned → папки → Ungrouped, меню карточки Pin / Move to folder / Rename / Delete и CRUD папок.
  • Шаблоны промптов: 4 встроенных шаблона, сохранение текущего ввода, редактирование/удаление пользовательских шаблонов и вставка без потери уже набранного текста.
  • Озвучка ответа: Play/Stop на assistant-сообщении, один активный голос, очистка Markdown/кода и остановка при смене чата.
  • Thinking и Sources получили компактные одинаковые заголовки высотой 36dp; раскрытые источники — плоские строки по 48dp с общим лимитом 240dp.
  • English WebAI UI: системные заголовки, кнопки, ошибки, подсказки, пустые состояния, accessibility-тексты и Markdown-export переведены на английский; пользовательский контент и сохранённые названия не изменяются.
  • Единые градиентные шапки у WebAI-экранов, Sessions, account sheet и всех модальных окон раздела; инсеты учитывают status/navigation bar и IME.
  • Thinking/Search без заливки: активное состояние показывает только бирюзовый текст и иконку, неактивное — нейтральный текст.

Changed

  • System Info: консольный дашборд. Единая градиентная шапка y83@system, hero-карточка устройства, сетка CPU/RAM/Storage/Battery, тематические секции, pause/resume live-метрик и отдельное loading-состояние; отчёт для копирования дополнен ABI, hardware, health/technology, gateway и DNS.
  • Updates: консольный центр обновлений. Единая градиентная шапка y83@updates, hero-состояния установки/проверки, таблица версий, превью release notes с переходом в Changelog, секции Environment/Backend, сворачиваемый developer-блок и копируемые логи операций.
  • Setup: консольный onboarding и repair. Единая градиентная шапка y83@setup, hero-состояния готовности/подключения, шаги Termux/backend, обязательные и необязательные доступы, tri-state Termux storage, reconnect, diagnostic report и пункты GitHub/F-Droid; старые Updates/About внутри Setup удалены, экран добавлен в Instruments Hub.
  • Logs: консольный просмотр диагностики. Единая градиентная шапка y83@logs, live-лента с паузой, источники App/VPN, фильтры уровней и категорий, поиск по raw-строке, сводка счётчиков, новые записи сверху, раскрытие/copy raw-строки, копирование отфильтрованного отчёта и экспорт выбранного лога.
  • Theme: консольная студия оформления. Единая градиентная шапка y83@theme, английские подписи с двуязычными примерами, кириллический UI-шрифт Golos Text вместо повторяющихся sans-serif-меток, пресеты размера, живое двуязычное превью чата и подтверждаемый сброс в System.
  • Home Settings: консольная настройка главной. Единая градиентная шапка y83@home со счётчиками и статусом default/custom, нумерованные секции, Show all / Hide all, доступные стрелки порядка, общий каталог агентов, переключатель Remote agents и подтверждаемый сброс компоновки.

Fixed

  • Поиск по диалогам открывал карточку не из отфильтрованного списка; Session-шторка учитывает status/navigation bar и закрывается перед Rename/Delete; двойные IME/navigation-отступы у чата и Accounts убраны.
  • Модель-пикер прокручивается на низких экранах, токены Accounts и вложений больше не используют ad-hoc alpha, ключи ленты сообщений стали стабильными.
  • План больше не дублирует шаги. update_plan без explanation приходит эхом шагов («1. … 2. …»), и в раскрытой полоске плана этот текст рисовался вместе с чеклистом: теперь эхо шагов в теле плана не показываем — ни в панели полоски, ни в окне «View plan», ни в копировании, ни в Plans, ни в отчёте хэндоффа; заголовок эхо-плана — первый шаг, а не безымянное «Plan».
  • Один план — одна карточка на ход. item/started типа plan и turn/plan/updated писали план под двумя id и давали две карточки одного хода (с чеклистом и без); теперь у плана один ключ журнала plan-<turnId>, копии сливаются на месте, а легаси-дубли схлопывает дедуп ленты.

backend 0.8.116

22 сентября 2026бэкенд

Added

  • **Dev-цикл из Codex-чата — девять MCP-инструментов y83_dev_*** (профиль /mcp/codex, только на dev-машине). Вместо curl с поллингом и чтения логов простынёй: y83_dev_gate (ворота: вердикт, стадии с временами, хвост лога), y83_dev_build (APK debug/release или бинарь бэкенда), y83_dev_swap (замена бинаря с smoke-тестом и откатом), y83_dev_status (health, версии, сборки, вердикт swap и деплоя), y83_dev_repo (outline/usages/imports/ api_diff/grep), y83_dev_git (status/diff/log/show и коммит после свежих ворот), y83_dev_check (синтаксис, компиляция Kotlin, gofmt+vet), y83_dev_log (логи ворот, бэкенда, swap, setup, деплоя и приложения) и y83_dev_deploy (релиз на прод с пропуском шагов). /mcp/remote dev-инструменты не отдаёт.

Changed

  • scripts/gate.sh умеет --json. К человеческому выводу и кодам возврата добавлена одна строка GATE_JSON {...} (стадии, времена, упавшие шаги) — её разбирают ворота из MCP-инструмента.

backend 0.8.119

23 сентября 2026бэкенд

Added

  • Вложения-картинки в WebAI-чате. POST /api/v1/webai/chats/{id}/stream принимает files: [{path, name, mime, size}] (до 4 файлов по 20 МБ, путь — только внутри ~/y83-ws/uploads). DeepSeek идёт нативным file API (upload → fork → ready), Qwen — image upload (JPEG перекодируется в PNG, потому что загрузчик подписывает OSS как image/png); Kimi/Z.ai файлы не принимают — 400 с понятным текстом. Байты вложений пишутся в webai_messages.files (JSON), поэтому чипы восстанавливаются в истории.

Fixed

  • Картинки DeepSeek снова распознаются: /file/fork отвечает biz_code=2 «model kind satisfied» (файл уже загружен под vision-модель) — это больше не ошибка, используется исходный file id. До правки падал и vision (/api/v1/webai/vision), и картинки в Codex-чате.

Changed

  • provider из запроса чата используется как есть (раньше всегда выводился из id модели), а пустой message с файлами больше не отказ: подставляется промпт «Опиши, что на изображении», заголовок диалога берётся из имени первого файла.
  • Схема БД: у webai_messages появилась колонка files — первая идемпотентная additive-миграция (ensureColumn: PRAGMA table_info → ALTER TABLE), существующие сообщения не затрагиваются.

0.8.89

23 сентября 2026

Added

  • WebAI Chat — отдельный пункт хаба инструментов (AI & Agents, сразу под WebAI Accounts) и тайл «AI Chat» на главной. Открывает чат с продолжением последнего диалога, список сессий — в шторке шапки.
  • Заливка изображений в WebAI-чате: «+» в инпут-карточке, чип с превью, размером и лоадером, отправка без текста (только картинка). В истории — чип с именем и размером, тап открывает файл в просмотрщике; при модели Kimi/Z.ai кнопка неактивна с подсказкой.
  • Поиск по диалогам в списке чатов, «Поделиться» диалогом в Markdown и переименование тапом по заголовку в шапке чата.
  • Градиентные шапки (как на главной, в хабе и Codex-чате) у WebAI Accounts, WebAI Chat и списка диалогов.

Changed

  • Список диалогов снова достижим: «Все диалоги» в шторке сессий, там же поиск; легаси-табы «Чат / Заметки» (InstrumentsTabs.kt) удалены.

0.8.88

22 сентября 2026

Fixed

  • Codex-чат — сообщения больше не пропадают из ленты. Уход от хвоста замораживал видимое окно: новые карточки (ответы агента, вопросы модели) писались только в полный список, появлялись лишь после перезахода или тапа по пилюле, и доскроллить до них было нельзя. Заморозка убрана — live-карточки всегда попадают в ленту, позицию при чтении истории держат анкер по ключу и SCROLL_ANCHOR, а уход от низа влияет только на автоследование и счётчик нового. Уход считается с мёртвой зоной 24dp: случайный микро-жест больше не выключает автоследование. В codex_state вместо feedFrozen — tailAway и unreadSinceId.
  • Codex-чат — подгрузка старых у головы ленты. Кроме порога «видно последние 6 элементов» страница старых запрашивается, когда докрутили до края загруженного (!canScrollForward): окно растёт вместе с live-хвостом, и прежний порог от него «убегал».

Changed

  • Codex-чат — «Done» и diff в консольном языке. Раскрытие итога хода — панель // turn со строками «лейбл → значение» (мысли, команды, чтения, правки, ошибка) вместо одного многострочного текста. Карточка хода с правками: секция // diff, строки файлов с +N −M и парсенный preview первого файла с гуттером «старый|новый» вместо сырого diff --git, плюс кнопка Open full diff и честная пометка, если diff усечён кэшем.
  • Codex-чат — полный diff хода на отдельном экране. Экран y83@diff:~$: список изменённых файлов (путь, +N −M) и diff файла тем же вьюером, что в гит-экране (номера строк старой/новой стороны, полосы хунков, копирование). Модальная шторка с сырым текстом (DiffSheet) удалена.

0.8.87

22 сентября 2026

Changed

  • Codex-чат — план без дубля времени. У завершённого плана в ленте вторая строка теперь несёт только счётчик шагов («3/3 steps», «7/8 steps · 1 unmarked»): длительность хода осталась там, где и была, — в строке итога «✓ Done · 12s · 3 cmds». Мёртвый расчёт turnDurationsByTurn удалён.
  • Codex-чат — меню композера вместо «+». Иконка Widgets открывает меню на компоненте ActionMenu (скругление 16dp, hairline-бордер, моно-подписи): вложения, Skills…, Compact context (с подтверждением, недоступен в активном ходу) и переключатели треда Keep screen on и Steer while running — те же пункты, что в меню треда (⋮), только под рукой. Точка на иконке показывает скрытое нестандартное состояние (экран держим включённым / режим queue).
  • Codex-чат — нижний ряд композера компактнее. Тумблер steer|queue убран из ряда в меню, кнопка меню выровнена по размеру с Send/Stop (40dp).

Added

  • Строки меню умеют подсказку второй строкой (ActionMenuItem.hint) и отключённое состояние (enabled) — тумблеры и недоступные пункты выглядят как в меню треда.

0.8.86

22 сентября 2026

Changed

  • Веб-ИИ — надёжность DeepSeek. PoW-челлендж чата DeepSeek одноразовый: клиент держал решённую подпись в кэше до 5 минут и переиспользовал её, поэтому сервер отвечал INVALID_POW_RESPONSE и запросы падали с «пустой ответ» (вплоть до 5 минут подряд). Теперь подпись берётся на один запрос (BeginRequest/EndRequest), следующий решается фоном, а code != 0 разбирается как ошибка API.
  • Веб-ИИ — диагностика. GET /api/v1/webai/accounts отдаёт счётчики обращений (okCount/errorCount/powRejected/emptyAnswers/authErrors), lastError и lastLatencyMs; новый GET /api/v1/webai/stats — агрегаты по провайдерам и состояние очереди.
  • Веб-ИИ — меньше блокировок. Запросы к одному аккаунту сериализуются, «пустой ответ» даёт бэкофф 5 с вместо 20 с (ответ приходит быстрее).
  • Чистка. Удалён мёртвый модуль y83-proxy (proxy/) и его следы в скриптах; GitHub-токен из ~/y83-proxy/config.json мигрирует в ~/.y83-ws/tools.json; в приложении убраны устаревшие id моделей (deepseek-reasoner/deepseek-v4-pro) и мёртвая ручка быстрого ask.
  • API providers — фильтр по типу и чистка. GET /api/v1/providers?type= больше не игнорирует тип (раньше отдавал все типы подряд; неизвестный тип — 400 unknown provider type), то же для GET /api/v1/providers/quota. Удалена legacy-поверхность /api/v1/agents/{agentId}/providers* вместе с пятью мёртвыми вызовами в приложении, no-op Store.EnsureAgent и Store.List (принимал agentId, а возвращал все записи), var _ = os.Getenv. Снесён осиротевший слой FreeBuff/Freebucks: квота freebuff-admin с логином в удалённый прокси и QuotaConfig, DTO tier/balance/daily/prices/models/ session, metered-подтверждение теста и цены fb/h в карточке, пикере и форме. ?probe=1 переименован в ?force=1 (он и означал «обойти кэш»). Вместе с кодом убраны артефакты: router.go.bak-invalid-json, остатки proxy/, backend/ws-backend.old, dist/agent/codex.bak-*.
  • Codex-чат — карточка плана в две строки. У завершённого плана шапка компактная: название с бейджем и вторая строка «8/8 steps · 21m 32s» (шаги, неотмеченные шаги и время хода). Высокая кнопка «View plan» убрана — план открывается тапом по карточке, справа — шеврон.

Fixed

  • Codex-чат — «Done» снова показывает время хода. Локальная сводка хода рождалась с нулевой длительностью (после рестарта приложения turnStartedAt неизвестен — установка APK посреди хода) и вытесняла серверную копию: в «Done» оставались только счётчики. Теперь нулевая копия не затирает посчитанную (mergeTurnSummary), серверный durationMs = 0 не считается авторитетным (длительность берётся из completedAt − startedAt), а старт хода после рестарта — из первого элемента хода.
  • Codex-чат — новый тред создаётся, а не «Not connected to codex app-server». Ожидание WS-соединения было перевёрнуто: при уже поднятой связи запрос thread/start не отправлялся вообще, а в плашке появлялся текст про отсутствие связи с app-server — хотя демон был жив и слушал порт. Теперь запрос уходит, как только связь есть (ожидание — до 5 с), а неудача создания треда пишется в лог приложения.
  • Codex-чат — связь восстанавливается сама. Если демон отвечает на /readyz, а WS-сокет мёртв (типично сразу после установки обновления), приложение пересоздаёт соединение и повторяет создание треда, не дожидаясь watchdog.
  • Codex-чат — честный текст ошибки. Вместо «Not connected to codex app-server» — «нет соединения у приложения», чтобы не путать с упавшим демоном (порт при этом слушается).

0.8.85

22 сентября 2026

Fixed

  • Codex-чат — вместо «Server did not respond» видна настоящая причина. Любой сбой thread/start (таймаут или ответ сервера ошибкой вроде Model metadata for … not found) показывался одной фразой «The remote codex daemon may be down», а реальный текст оставался только в логе. Запрос теперь идёт через RpcOutcome: в плашке — текст ошибки сервера, «не ответил за 30 с — Сервисы → Codex → Restart» или «нет соединения».
  • Codex-чат — локальный app-server поднимается сам. Если демон на этом телефоне не отвечает на /readyz, приложение просит svreg запустить сервис codex, ждёт до 20 с и повторяет создание треда; если поднять не удалось — подсказка «Codex app-server is not running on this phone». Remote-агенты (SSH-туннель) не затрагиваются.
  • Проекты Codex — треды больше не «переезжают» в один проект. Сервер отдаёт cwd не всегда (снимок из state-DB, старые треды), и такие треды сваливались в папку по умолчанию. Теперь известный cwd не перезатирается пустым значением (берётся из прошлого списка, из кэша prefs codex_thread_cwd_* или из environments[0].cwd), а треды без папки показываются отдельной группой No project, а не в «Home».

0.8.84

22 сентября 2026

Fixed

  • Codex-чат — mimo-v2.6-flash снова работает (opencode-go и zen). Новая модель принимает reasoning_effort только none/low/medium/high, а приложение по умолчанию шлёт max: go отвечал 400 Invalid request parameters, zen — 500 Internal server error. Бэкенд (modelcaps) приводит effort к допустимому для модели (max → high), не отправляет пустой параметр и отдаёт mimo честные уровни в каталоге Codex; пикер в приложении для таких моделей прячет max и клампит сохранённое значение.
  • Shell-чат — убран сам источник «прыжков»: два владельца размера PTY. Раньше чат считал колонки под ширину бабла (47×50 при шрифте 12sp), а терминал брал вьюпорт termlib (75×53 при 9sp): каждый вход, переключение режима и клавиатура ресайзили панель tmux, и контент «перестраивался». Теперь геометрию задаёт только вьюпорт терминала, чат рисует те же колонки тем же шрифтом и во всю ширину — ls размечается одинаково в ленте и в терминале. По логу: было 28 переключений/77 ресайзов/98 репеинтов за 20 секунд, стало 0 ресайзов при входе и переключении режимов.
  • Shell-чат — стартовый размер PTY берётся из prefs (shell_term_cols/rows): tmux при attach сразу получает нужную сетку, вход в терминал не начинается с ресайза панели.
  • Shell-чат — убрана серверная подгонка панели: window-size manual + resize-window по пробе (из-за неё панель переставала следовать за клиентом и размер «залипал») и refresh-client на каждый ресайз. tmux сам подгоняет окно под единственного клиента и перерисовывает панель, только когда размер реально изменился.
  • Shell-чат — режим переключает только пользователь: TUI-детект больше не уводит экран в терминал автоматически (карточка «Открыть терминал» осталась).
  • Shell-чат — клавиатура без скачка: вьюпорт едет за анимацией IME сразу, а сетку termlib держит resizeSuspended до конца анимации — в PTY уходит один финальный размер (только строки, колонки не меняются).
  • Codex-роутер — убран 400 reasoning_content must be passed back. История Codex приходит как [reasoning][assistant]: reasoning-only сообщение выбрасывалось санитайзером, и следующее assistant-сообщение оставалось без reasoning_content — opencode-go/DeepSeek отвечал 400 и ход падал («задачи прерываются»). Теперь reasoning переносится в соседнее assistant-сообщение того же хода, а системные напоминания времени цепочку не разрывают: в живом запросе 0 assistant-сообщений без reasoning_content (было 26).

Added

  • API providers — пункт Usage… и строка лимитов для OpenCode Go. Бэкенд читает официальный GET /zen/go/v1/usage ключом провайдера (источник определяется по slug/baseUrl, настраивать нечего) и отдаёт окна rolling 5h / week / month: проценты, остаток, время сброса и историю снапшотов (~/.y83-ws/provider-usage-history.json: точка раз в 10 минут, кольцо 144). На карточке — три мини-бара по окнам и ближайший сброс (тап открывает лист), в шторке провайдера — пункт Usage… с листом: бар и процент по каждому окну, остаток, таймер и точное время сброса, Refresh (обновление по запросу). Доллары не показываем — API их и не отдаёт.

Changed

  • API providers — модели по порядку. Списки моделей больше не идут в том порядке, в каком их отдал провайдер: семейства по алфавиту, внутри — новые версии сверху (карточка, чипы в форме, диалог Re-discover). Превью на карточке берёт по одной модели из семейства, тап открывает новый лист Models — полный список с контекстом и флагами (ctx 128k, reason, no tools) и тестом по тапу.
  • Shell-чат — один шрифт на чат и терминал (shell_font_sp, миграция из раздельных 12sp/9sp) и карточка вывода во всю ширину: текст ленты совпадает по ширине с сеткой терминала. Настройка «Ширина вывода» (auto/80/120/200) убрана — колонки задаёт терминал.
  • Shell-чат — запоминается последний режим (чат/терминал) при выходе с экрана.
  • Мост — команда app_screenshot: кадр окна приложения в Download/y83ws/screenshots/ (визуальные артефакты вручную не поймать).

0.8.83

21 сентября 2026

Fixed

  • Shell-чат — терминал не «дёргается» на ресайзах — ядро termlib 0.2.1 → 0.3.0 (resizeSuspended) плюс settle-пауза 250 мс: вьюпорт может меняться серией (клавиатура, панель доп. клавиш, смена режима), но в PTY уходит только финальный размер. tmux перерисовывает панель один раз, а не на каждый кадр анимации — уходят «прыжки» фона и мусор от промежуточных сеток.
  • Shell-чат — артефакты после выхода из TUI — полный репеинт клиента (refresh-client) на входе и выходе TUI, повторный репеинт после восстановления primary screen, возврат в чат — с паузой 1.5 с.
  • Shell-чат — window-size manual больше не включается навсегда — основной путь: клиентский window-change, tmux сам подгоняет панель под клиента; серверный resize-window — только если проба дважды подряд увидела расхождение панели и клиента.
  • Shell-чат — состояние терминала сбрасывается при выходе из shell — RIS, clearScreen, сброс alt-screen-сканера и парсера; сетка эмулятора выравнивается под PTY новой сессии, после коннекта — полный репеинт.
  • Shell-чат — в TUI размер PTY не трогается — переключение чат↔терминал при активной TUI-программе больше не ресайзит панель (в ленте TUI и так карточка).

0.8.82

21 сентября 2026

Fixed

  • Git — вкладки больше не разъезжаются — commits · 30 растягивался почти на всю ширину, а changes переносился по одной букве в строку: подчёркивание активной вкладки тянулось на всю строку и распирало соседа. Теперь ширина вкладки считается по лейблу со счётчиком, высота тапа — 44dp.
  • Git — subject коммита не режется по | — поля лога разделяются unit separator, а не вертикальной чертой.

Changed

  • Git — список коммитов в консольном языке — граф-рейл с узлом (HEAD/выбранный — залитый primary), хэш в hairline-чипе, относительное время справа (2h, 3d, 21 Sep), группировка по дням (// today · 5) и чипы веток/тегов на HEAD (HEAD → main, origin/main, v0.8.82).
  • Git — выбранный файл в changes — вместо залитой плашки 2dp primary-полоска слева и [x] в primary: ритм строк как у коммитов.
  • Git — long-press меню коммита — добавлено «Copy date» (полная дата).

0.8.81

21 сентября 2026

Changed

  • Servers — чип auto больше не дёргается — auto:on|off переехал из ряда кнопок в шапку карточки (справа, рядом со статусом, фиксированная ширина): раньше у запущенных серверов кнопок было на одну больше, и чип сжимался, а у остановленных выглядел иначе.
  • Servers / SSH — ряд действий не обрезается — кнопки карточки живут в weighted-контейнере с горизонтальной прокруткой, а ⋮-меню SSH-карточки закреплено (40dp) и остаётся видимым при 3–4 действиях и крупном шрифте.
  • Git — консольный экран — вместо TopAppBar и Material-вкладок: шапка y83@git:~$ с мета-строкой (проект · ветка · ↑2 ↓1 · 3 changed · +120 −45 · stash 1 · updated 12:34) и кареткой по состоянию, вкладки commits · N / changes · N / files · N с подчёркиванием, секции // added · 2 с цветной точкой, строки файлов с mono-галкой [x], pull-to-refresh, typed-плашки вместо Material-снекбаров, пустые состояния // no changes, // no commits, // not a git repository.
  • Git — шторки вместо меню и диалогов — ветки (поиск, * на текущей, ↑↓-трек из upstream, checkout тапом, delete…, new branch), стеш (apply/pop/drop по записи, stash all), «о репозитории» (path, sync, remotes, последний коммит, счётчики) и коммит (amend last с префиллом сообщения HEAD).
  • Git — diff-экран — шапка y83@diff с мета-строкой path · +12 −3 · new file и консольные пустые состояния (binary, combined, empty file).

Added

  • Git — безопасные операции: amend last (правка последнего коммита), undo last commit (git reset --soft HEAD~1 — коммит снимается, файлы возвращаются в индекс и отмечаются, сообщение подставляется), per-entry apply/pop/drop стеша.
  • Git — подтверждения с командой: удаление ветки, drop стеша и undo коммита показывают точную команду (git branch -D feature/x) в диалоге подтверждения.
  • Git — long-press по коммиту — копирование hash или сообщения.
  • Тесты GitFormatTest (мета-строка шапки, upstream-трек, поиск по веткам).

0.8.80

21 сентября 2026

Changed

  • Servers — консольный редизайн — вместо Material-шапки и залитых карточек: терминальная шапка y83@servers с градиентной вуалью, mono-метриками (~/проект · N servers · X running · updated 19:42:10) и кареткой по состоянию; список разбит на секции // running и // stopped, добавлены поиск (name/command/cwd/port), чипы-фильтры all/running/stopped и pull-to-refresh.
  • Servers — карточка сервера — статус-точка (running / starting / stopping / error / disabled / stopped), mono-имя с :port, строка команды и метрики (cwd · :port · PID · up · ↻ restarts · adopted), hairline-кнопки start/stop/restart/logs и чип auto:on|off; при переходных состояниях — свип.
  • Servers — логи и детали — шторка логов сервера (mono, refresh/copy/close) и шторка деталей: command, cwd, health, serviceName, stopMode, state, restarts, adopted, createdAt, секции // env и // detection, attach/detach проекта и удаление.
  • Servers — честные операции — свайп по карточке снимает сервер с проекта (обратимо, с подтверждением), а удаление определения из svreg — только из шторки деталей: раньше «Remove from this project» удалял сервер целиком.
  • Servers — ошибки и пустые состояния — сбой снимка с бэкенда виден плашкой ERROR (поле error раньше не показывалось вообще), пустой список — // no servers с подсказкой про svreg и кнопкой attach.
  • SSH-серверы (Remote AI Agents) — тот же язык — шапка y83@ssh с метриками, секции // connected и // offline, карточки со статус-точкой, метриками (user@host:port · host key · ssh key · setup) и действиями connect/test/setup; сервисные операции (restart codex, codex logs, rotate token) — в ⋮-меню.
  • SSH-серверы — результат операций — test/setup отвечают типизированными плашками (SUCCESS/WARNING/ERROR), вывод restart/logs/rotate — консольная шторка // output с копированием, диалоги host key и setup — mono-стиль.
  • Общее — hairline-кнопка действий вынесена в ConsoleActionButton, noticeSnackbarDuration — в общие компоненты плашек.

Added

  • Тесты формата: ServersFormatTest (статусы, метрики, секции, поиск, фильтры) и RemoteAgentsFormatTest (SSH-статусы, метрики, секции).

0.8.79

21 сентября 2026

Changed

  • Codex-чат: план-бар не дёргается при развороте — слот прогресс-линии 2dp и место под Copy живут в дереве постоянно (меняется только альфа), высота полоски одинакова во всех фазах; animateContentSize у обёртки снят — разворот плана больше не пружинит весь bottomBar.
  • Hairline между планом и working bar — тонкий разделитель получил отступы 16dp слева и справа, ровно по концам прогресс-линий.
  • Треды и проекты: полоска хода в границах трека — бегущий градиентный сегмент клипается по 2dp-полоске и не вылезает в паддинги карточки.
  • Токен-бар: цифры докручиваются — проценты и токены плавно анимируются к новым значениям (рост ~0.6 с, спад после компакта ~0.3 с), подпись и полоска считаются из одних анимированных значений, ширина подписи резервируется — бар не перестраивается; при смене треда цифры показываются сразу.

0.8.78

21 сентября 2026

Changed

  • Plans — библиотека планов вместо файловой свалки — планы чата больше не пишутся в <проект>/plans/*.md случайными именами: каждый план ложится в базу приложения (Room) отдельной записью со статусом, шагами N/M, тредом и датой и обновляется на месте (без дублей). Экран Plans открывается вкладками: Chat · N — сохранённые планы чата (поиск, фильтры All/Active/Done/Rejected, статус-чип, прогресс, Copy, Open thread, Delete), Files · N — агентские планы проекта plans/<key>.md (просмотр, Copy path, Delete).
  • Окно плана: чеклист и markdown — просмотр из библиотеки показывает // steps с метками ✓/▸/○ и строкой N of M done, ниже // plan с телом плана в общем markdown-вьюере; в шапке — статус и действия Copy/Open thread/ Delete (с подтверждением).
  • Консольный стиль списка — hairline-разделители строк, mono-метаданные, статус-чипы с бордером (фон не заливается), 2dp-прогресс с анимацией 220 мс, пустые состояния на токенах темы; сообщения экрана — типизированные плашки (INFO/WARNING/ERROR), а не текст на белом фоне.

Fixed

  • Легаси-дампы чата убираются сами — при первом открытии Plans для проекта удаляются файлы старой авто-записи (<word>-<word>-<yymmdd>-<hhmm>.md с шапкой > Date:), настоящие планы проекта (dev-tools.md, monorepo-migration.md, …) не трогаются: в y83-ws/plans так убрано 975 файлов из 992. Авто-запись новых дампов убрана совсем.
  • Меню треда: подсказка Plans — «Chat plans + project plan files» вместо «Plan files saved in the project».

0.8.77

21 сентября 2026

Changed

  • Codex: одно окно «Model» вместо двух пикеров — модель, reasoning effort и advanced-настройки (Personality, Fast mode, Reasoning summary) собраны в одно полноэкранное окно с секциями // model → // reasoning → // advanced; тап по имени модели в шапке открывает его на секции model, тап по чипу effort — на reasoning (с автоскроллом), пункты ⋮-меню — на своей секции. Старые CodexModelSheet и SimplePickerDialog удалены.
  • Строки в консольном языке — mono-имена, хайрлайн-разделители, выбранная строка — бордер primary 2dp + галочка (фон не меняется); у модели справа mono-мета paid session · 12m left · 5 fb/h (английский вместо «сессия оплачена / сброс / fb/ч»); фильтр по моделям появляется, когда их больше десяти.
  • Effort: строки с пояснением и метром — low/medium/high/max получили подписи (fastest · cheapest / balanced / deeper reasoning / longest thinking) и метр ▮▮▯▯, так что видно, сколько «думает» модель.
  • Чип effort в шапке — вместо залитой пилюли хайрлайн-чип max ▮▮▮▮: mono, цвет по уровню, contentDescription для TalkBack.

0.8.76

21 сентября 2026

Changed

  • Codex: раскрытый план — панель вверх до шапки — «Open full plan» убран: он показывал то же самое в другой шторке. Тело плана теперь растёт вверх от строки полоски до нижней кромки шапки, поверх ленты; строка плана и поле ввода остаются на месте, лента не переезжает. Copy переехал в строку плана, подсказка про неотмеченные шаги — мелкой строкой сверху панели, скролл свой (панель всегда открывается сверху).
  • Полоска плана компактнее — строка 44→36dp, анимированная полоска прогресса выровнена по 16dp с обеих сторон (та же вертикаль, что у WorkingBar под ней, раньше она шла от края до края), паддинги по краям 16/12.
  • Поле ввода в одну строку на ходу — при активном ходе пустое поле сжимается до одной строки, первая буква плавно разворачивает его до трёх; без хода и при завершении хода — плавно три строки (анимация 220 мс).

0.8.75

21 сентября 2026

Changed

  • Codex: меню треда переоформлено — вместо сплошного списка четыре карточки-секции со своими акцентами (модель — бирюза, ход — фиолетовый, инструменты — песочный, тред — нейтральный), иконка секции в цветной плашке и meta справа (текущая модель, заполнение контекста, счётчики).
  • Строки с пояснениями — под названием пункта серая подпись в одну строку («что делает»): разбирает неочевидное (Review changes, Fast mode, Handoff). Текущие значения справа — пилюлей, переключатель Keep screen on остался свитчем, Delete — единственная красная строка.
  • Чипы состояния сверху — model · effort · mode · context N% (подсветка с 80%) · goal · terminals · features; каждый чип ведёт в своё действие, поиск ищет и по пояснениям, под полем — счётчик найденного.

0.8.74

21 сентября 2026

Changed

  • Codex: полное меню треда — ⋮ открывает полноэкранный «Thread settings»: секции (модель и рассуждения, ход и контекст, review и инструменты, тред), сводка текущего состояния сверху и поиск по пунктам. Длинный дропдаун на двадцать строк, который не влезал на телефон, убран целиком.
  • Codex: экран экспериментальных фич — фильтры по стадиям (beta / in development / stable / deprecated), поиск, пояснения «что это / эффект / риск / ключ config.toml», бейджи «no UI» и «default», пометка «wording inferred» там, где апстрим молчит, подтверждение при включении опасных флагов и копирование состояния всех фич одной кнопкой.
  • Codex: мастер Review — полноэкранный мастер с пояснением каждого варианта: незакоммиченное, ветка против базовой, конкретный коммит (sha), свои инструкции; превью запроса и блокировка кнопки, пока поле пустое. Цель «коммит» добавлена, delivery: detached убран как deprecated у сервера; быстрый запуск — пункт «Review uncommitted».
  • Codex: фоновые терминалы — то же полноэкранное оформление (список, мета, остановка одного/всех с подтверждением).
  • Полноэкранные окна переехали на общий каркас ui/components/FullScreenWindow.kt (шапка, поиск, подвал, инсеты).

Fixed

  • Мёртвые импорты и код старого меню вычищены из CodexChatScreen.kt.

0.8.73

21 сентября 2026

Added

  • Codex: ответ на currentTime/read — напоминание о времени у модели снова работает (раньше сервер ждал ответ, который не приходил); неизвестные серверные запросы закрываются ошибкой -32601, а не «висят».
  • Codex: Unarchive — разархивация треда из меню карточки (было только «Archive»); мост: codex_thread_unarchive.
  • Codex: настройки агента — Personality (none/friendly/pragmatic), Fast mode (сервис-тиры модели из model/list) и Reasoning summary (thread/settings/update; для идущего хода — turn/settings/update).
  • Codex: Goal — цель треда с token budget (thread/goal/set|clear) из меню.
  • Codex: Experimental features — экран списка фич app-server (experimentalFeature/list) с переключателями: рантайм (enablement/set) + запись features.<name> в config.toml.
  • Codex: Background terminals — список фоновых процессов треда (thread/backgroundTerminals/list) с остановкой одного/всех.
  • Codex: Review changes — review/start (uncommitted / base branch / custom; inline или новым тредом) из меню чата.

Changed

  • Codex: «удалить последний ход» — через thread/revert (deprecated thread/rollback остался фолбэком), обрабатывается thread/reverted.
  • Codex: карточки одобрений — исправлены имена методов (applyPatchApproval, item/permissions/requestApproval).
  • Codex: MCP-формы — клиент заявляет mcpServerOpenaiFormElicitation.
  • Notice при modelProvider/authRecovery* («провайдер переподключается»).

0.8.72

21 сентября 2026

Changed

  • План — одна компактная полоска над WorkingBar: свёрнуто это одна строка (номер шага, текущий шаг, N/M, шеврон) вместо двух строк с кнопкой View plan; честный прогресс — тонкая полоса 2dp под строкой
  • Разворот по тапу: панель до половины экрана со скроллом — markdown-план, прогресс и полный чеклист, кнопки Copy и Open full plan (шторка с планом); Back сворачивает панель, не выходя из чата
  • Одобрение плана — в той же полоске: Plan ready + Reject/Start одной строкой, тап раскрывает план; отдельная полоска одобрения убрана
  • План больше не дублируется в ленте: пока полоска владеет планом (одобрение, старт, выполнение, остаток), карточка плана в ленте не рисуется; после завершения плана она возвращается в ленту историей

Fixed

  • Полоска не залипает на старом плане: все шаги закрыты → вспышка All N steps completed (2,5 с) и уход; шаги и план прошлого хода не висят в полоске, пока идёт plan-mode ход (было: 7/7 в фазе starting…)

0.8.71

21 сентября 2026

Fixed

  • Tunnels: сбой больше не «залипает»: ошибка хранится как история (lastErrorAt) с флагом актуальности errorActive — на живом туннеле она показывается серой строкой last failure N ago, красным — только реальная проблема (раньше ready + старая ошибка выглядели как поломка)
  • Плановый перезапуск reverse-канала не пишет context canceled в ошибку; reconnects N показывает, сколько раз канал переподнимался

Added

  • Tunnels: «Check now» — сквозная проверка каналов и демона с лечением (POST /api/v1/remote/tunnel/check) и свежим снапшотом вместо ожидания опроса
  • Tunnels: Restart daemon и Daemon logs в меню карточки — управление remote codex app-server без ухода в «Remote AI Agents»; тап по строке с портом копирует его с подтверждением
  • Счётчик живых туннелей на тайле «Tunnel» главной; список туннелей отдаёт тот же набор полей, что и одиночный статус (host, lastErrorAt, errorActive, lastCheckAt, reconnectCount, startedAt)
  • Reconnect работает и для канала без записи сервера: креды берутся из самого туннеля

0.8.70

21 сентября 2026

Changed

  • Полоска плана в Codex-чате — по стандарту экшен-полосок: иконка плана, заголовок, счётчик шагов 2/5, текущий шаг и кнопка View plan (полный план в шторке); тап по полоске раскрывает чеклист шагов
  • План виден всю дорогу: полоска появляется сразу после одобрения (starting…, даже если шагов ещё нет), ведёт шаги во время хода и остаётся с пометкой Turn finished · N steps unmarked, если ход закончился с неотмеченными шагами; уходит, когда все шаги закрыты или начался новый ход
  • Plan ready показывает название плана (subtitle Plan ready + заголовок из markdown), а не общее «Plan ready»

Fixed

  • После одобрения плана полный план снова доступен в любой фазе: кнопка View plan в полоске открывает шторку с планом, пока ход идёт

0.8.69

21 сентября 2026

Added

  • Файловый менеджер на удалённом сервере: у remote-агента кнопка «Server files» и выбор папки для проекта открывают обычный файловый менеджер — навигация, поиск, создание папок и файлов, переименование, копирование, удаление, свойства с размером папки, чтение и правка текста, скачивание на телефон и загрузка на сервер
  • **Новая семья роутов /api/v1/remote/fs/*** (SSH через локальный бэкенд, тот же формат ответов, что у /api/v1/fs/*): list, stat, statfs, du, search, mkdir, create, move, copy, delete, read, write, download, upload; списки читаются find -printf с NUL-разделителями (имена с пробелами и переводами строк не ломают разбор), переносы файлов идут потоком с idle-таймаутом
  • Быстрые локации и бейджи проектов: в окне нового проекта чипы ~, /var/www, /tmp, / (на сервере) или ~, sdcard, usr (локально); папки-проекты в файловом менеджере помечаются бейджем project

Changed

  • Окна раздела «Проекты» переехали в терминальные шторки: «Новый проект» — имя, папка с автоподстановкой, строка пути, проверка «папка существует»; «Изменить проект» — имя, путь с копированием, мета; удаление — диалог с красной кнопкой в общем стиле
  • Выбор существующего проекта: если выбранная папка уже проект, кнопка становится «Open project» — проект открывается как есть, имя и дата создания не переписываются; если папка есть, но проекта нет — «Add project» без повторного mkdir
  • Единый ConfirmDeleteDialog во всех разделах: скругление 28dp, surfaceContainerHigh, моно-заголовок, красная кнопка подтверждения

Fixed

  • Повторное добавление проекта больше не затирает кастомное имя и дату создания (локально) и не создаёт дубль записи по тому же пути (на сервере)
  • Удалён старый экран RemoteFilesScreen с устаревшим дизайном

0.8.68

21 сентября 2026

Changed

  • «Треды» и «Проекты»: статус-строка карточек повторяет working bar чата — слева маркер и подпись (working, awaiting you, stuck · silence 5m), справа таймер хода или updated …, под строкой — бегущая градиентная полоса
  • Полоса хода — только пока идёт ход: у ожидания ответа и зависания бесконечный «прогресс» убран (он врал о работе), вместо него иконка и причина
  • Меню карточек и шапок — единый терминальный дропдаун: скругление 16dp, hairline-бордер, mono-подписи, иконка у каждого пункта, destructive-действия (Delete) — красным под разделителем, у меню мини-заголовок с именем треда/проекта или секцией (// threads, // projects)
  • Карточка проекта: счётчик тредов переехал в строку пути (~/y83-ws · 12 threads), статус-строка показывает агрегат активности (2 working · 1 awaiting), справа — updated …
  • Карточка треда: статус и время читаются одной строкой (точки слева, время справа), превью последнего сообщения осталось под статусом

Fixed

  • Убран оверлей полосы прогресса в нижней кромке карточек — полоса теперь часть раскладки и не перекрывает содержимое

0.8.67

21 сентября 2026

Changed

  • Раздел «API Providers» переехал на общий язык приложения: терминальная шапка y83@providers с градиентом и mono-метой (3 providers · 2 enabled · codex 3 · 10.5 fb), список — секциями // codex / // qwen / // opencode со счётчиками, поиск по имени, URL, slug и моделям, pull-to-refresh
  • Карточка провайдера: LED состояния (зелёный — тест ок, янтарный — не тестировался, красный — тест упал, серый — выключен, пульсирует во время теста), бейджи типа и протокола, маска ключа (sk-abc…xyz / no key), превью моделей +N, строка последнего теста ok · 412 ms · 2 h ago, причина no key / last test failed, прогресс Freebucks с активной сессией и ценой часовой сессии, действия test / edit / ⋮
  • Шторка ⋮: тест с выбором модели (дешёвые сверху), re-discover моделей с поиском и чекбоксами, обновление лимитов, копирование base URL и списка моделей, enable/disable, удаление
  • Форма провайдера (3 шага) в новом стиле: терминальная шапка с прогрессом step 2/3 · key & models, чипы шагов через SelectChip, секции // preset, // connection, // wire, // api key, // models, // test, липкая нижняя панель back / next / test / save
  • Протокол провайдера теперь выбирается (chat / responses): раньше новый провайдер всегда сохранялся с chat, из-за чего Zen и подобные шлюзы требовалось заводить только из пресета
  • Ключ в форме: явный режим «replace» — по умолчанию показывается сохранённый ключ, пустое поле больше не отправляется вслепую
  • Модели в форме: поиск по списку, all / none, счётчик N / M selected, глобальные context window / tool calls / reasoning применяются ко всем выбранным моделям (фейковые пер-модельные оверрайды удалены)

Added

  • Результат последнего теста хранится на бэкенде: lastTest {at, ok, latencyMs, model, status, error} в DTO провайдера — бейдж на карточке переживает перезапуск приложения
  • Новые ручки: GET /api/v1/providers/{id} (провайдер по id) и PATCH /api/v1/providers/{id} с телом {"enabled":bool} — тоггл меняет только флаг и отвечает мгновенно (sync агента уходит в фон, раньше тоггл висел до перезапуска codex ~30 с)
  • Экран правки грузит провайдера по id (Screen.AddEditProvider(providerId)), поэтому не зависит от передачи DTO через навигацию

Removed

  • Мёртвая шторка ApiProvidersSheet (656 строк) и дублирующая карточка провайдера; пресеты переехали в ui/providers/ProviderPresets.kt
  • Лишний параметр embedded, дублирующий пустой стейт и мёртвая ветка бордера

Fixed

  • coerceInputValues в JSON-клиенте: "models": null или null в необязательном поле больше не роняет разбор всего ответа (тот же класс бага, что «unreadable response» в планировщике)

0.8.66

21 сентября 2026

Changed

  • Раздел «Scheduler» переехал на общий язык приложения: терминальная шапка y83@cron с градиентом и mono-метой (6 tasks · 4 enabled · 1 running · next in 12m), задачи — секциями // running / // upcoming / // disabled с поиском, действия — в шторках, нижняя панель с чипом паузы и кнопкой + new task (панель учитывает системный бар Android)
  • Карточка задачи: LED-индикатор (пульсирует у запущенной), человеческое расписание (daily 09:00, every 15 min) рядом с cron, мета next in 4m · last 2h ago · Europe/Moscow, превью команды, run / logs / edit / ⋮
  • Форма задачи: тип shell/ai чипами через SelectChip (убран запрещённый secondaryContainer), 8 пресетов расписания + своё cron-выражение с живой валидацией и превью следующих трёх запусков, часовые пояса чипами, расширенные настройки (timeout с пресетами, retries + backoff, catch-up, cwd с выбором папки через файловый менеджер, env KEY=VALUE, теги, уведомления)
  • Журнал запусков: фильтры all / ok / failed, секция // live с потоковым выводом и кнопкой Stop, полный stdout/stderr (show all), copy, share, удаление записи, очистка истории, подгрузка страниц кнопкой older
  • Навигация: экран правки грузит задачу по id, журнал — по id и имени из навигации (раньше при пустом списке задач экран оставался пустым)

Added

  • Библиотека шаблонов: blank + 6 готовых задач (disk check, tmp cleanup, backup home, ping check, termux update, AI digest) с командой и расписанием
  • Живое состояние планировщика: в /api/v1/scheduler/status добавлены paused, queue_depth и next_run_at; пауза (POST /scheduler/pause) стала идемпотентной и доступна из нижней панели
  • Stop запущенной задачи: POST /scheduler/tasks/{id}/kill реально отменяет выполнение (раньше в карту запусков кладёлся true вместо cancel-функции, поэтому отмена не работала), лог получает статус killed
  • Новые ручки: GET /scheduler/tasks/{id}, GET /scheduler/runs (история по всем задачам с has_more), GET /scheduler/preview (валидация cron/tz + следующие N запусков), DELETE /scheduler/logs?task_id= (очистка истории)
  • Уведомления о завершении: при notify=true бэкенд шлёт команду моста app_notify → Android-уведомление (✓ 3m 12s · первая строка вывода), тап открывает журнал задачи; тумблер «Scheduled runs» в настройках уведомлений
  • Тесты: 12 Kotlin-тестов на форматтеры раздела (расписания, относительное время, env/теги, толерантный разбор null-ответов) и Go-тесты на пустые массивы, kill, идемпотентную паузу, next_run_at, has_more и preview

Fixed

  • «Server sent an unreadable response» в Scheduler: бэкенд отдавал {"tasks":null} при пустом списке (Go nil-слайс → JSON null), клиент падал на разборе. Теперь все списочные ручки планировщика всегда возвращают массив, а клиент трактует null как пустой список
  • Тот же класс бага: POST /api/v1/sqlite/rows больше не отдаёт keys: null (пагинация в разделе Databases), в release-сборке закреплены ProGuard-правила kotlinx.serialization (ошибка «Serializer for class ... is not found» в Updates)

0.8.65

21 сентября 2026

Changed

  • Раздел «Files» переехал на общий язык приложения: терминальная шапка y83@files с градиентом и mono-метой (~/y83-ws · 24 items · free 12.3G), локации — чипами вместо иконок в аппбаре, секции // folders / // files, действия — в шторках
  • Локации-вкладки: первая — Termux home (~), дальше sdcard, dl, usr, сменные тома из /storage и свои пути через «+»; на удалённом хосте лишние вкладки просто не появляются
  • Нижняя панель: хлебные крошки с переходом по сегментам, ↑ наверх, переход по введённому пути, чипы + new, сортировка, показ скрытых и ⋮ с локациями; панель учитывает системный бар Android (как в браузере и процессах)
  • Список: mono-имя с подсветкой фильтра, мета 4.2K · 12 Sep, ↗ у симлинков, пустые состояния // empty folder / // nothing found, pull-to-refresh
  • Выделение и буфер обмена: долгий тап — шторка действий, Select включает мультивыбор, нижняя панель превращается в copy / move / delete / download / share

Added

  • Полный набор операций на бэкенде: переименование (fs/move), рекурсивное копирование (fs/copy), удаление (fs/delete), размер папки (fs/du), рекурсивный поиск (fs/search), свойства объекта (fs/stat) и место на диске (fs/statfs) — с защитой корней (/, /data, Termux files/home, files/usr, /storage/emulated/0 и их предков)
  • Потоковые передачи: загрузка файла на хост (fs/upload, .part + атомарный rename, потолок 2 ГБ) и выгрузка с прогрессом (fs/download через ServeContent с Range, потолок 4 ГБ) — лимит 5 МБ больше не мешает APK и бэкапам
  • Просмотр и правка: markdown, код и текст с поиском по файлу и переносом строк, правка любых текстовых файлов, картинки с зумом, «открыть снаружи», «поделиться» и выгрузка в Downloads
  • Поиск по папке (рекурсивный, результаты с относительными путями) и фильтр текущего каталога с подсветкой совпадений
  • Свойства объекта: тип, размер, дата, права (-rw-r--r--), цель симлинка, readable/writable и подсчёт размера папки по кнопке
  • Удаление в Downloads через MediaStore — без разрешений на API 29+, с SAF-фолбэком для старых версий и внешних томов
  • Тесты: 12 Go-тестов на новый fs-слой (защита корней, copy/move/du/search, атомарность upload, лимиты стрима) и 18 Kotlin-тестов на чистые функции раздела

Fixed

  • Удаление на хосте не работало вовсе, а «перемещение» молча копировало файл и оставляло исходник — теперь это честные move / delete с подтверждением
  • writeFileBytes писал пустой файл: поле content_base64 не совпадало с тем, что ждёт бэкенд (бинарные вложения через base64)
  • Мёртвый SAF-менеджер (ui/files/FilesScreen.kt, FilesViewModel.kt) удалён вместе со старым экраном серверных файлов и его шторками

0.8.64

21 сентября 2026

Changed

  • Раздел «Processes» переехал на общий язык приложения: терминальная шапка y83@proc с градиентом и mono-метой (32 procs · mem 6.7/11.0G · updated 11:15:30), режимы — чипами processes / services вместо таб-бара, действия — в шторках
  • Интервал обновления убран из шапки (из-за него не помещался заголовок) в нижнюю панель: индикатор live, чипы 1s / 3s / 10s / off, кнопка Refresh
  • Карточки процессов: живой CPU за интервал вместо среднего за жизнь процесса, маркер ▲ у горячих (≥ 25 %), mono-мета S · pid · % ram · uptime, полосы cpu/mem
  • Поиск с подсветкой по команде, pid, ppid и пользователю; секции // hot и // all · N, пустые состояния // no processes / // nothing found
  • Сервисы: desired/actual состояние, порт с признаком open/closed, счётчик рестартов, текст ошибки выхода; Start/Stop/Restart остались на карточке

Added

  • Живые метрики на бэкенде: GET /api/v1/processes отдаёт мгновенный CPU% (дельта тиков /proc/<pid>/stat между опросами), ppid, время старта, накопленное CPU-время и сводку устройства (ядра, память); loadavg на Android приложению недоступен
  • Строка // alerts: зомби-процессы, сервис desired running но не работает, рестарты ≥ 3, потеря бэкенда; тап ведёт к источнику, новая ситуация — снэкбара
  • Шторка // process: выбираемая полная команда, PID/PPID/пользователь/ состояние/время старта, CPU now/avg/time, VSZ/RSS, предупреждение «под svreg»; кнопки SIGTERM/SIGKILL с подтверждением, Copy PID и Copy command; долгий тап — быстрые действия без открытия деталей
  • Шторка фильтров: сортировка cpu / mem / rss / pid / name / started, фильтры all / managed / heavy; выбор запоминается в prefs
  • Логи сервиса: шторка // log · <service> с последними 200 строками (GET /api/v1/servers/{id}/logs), кнопки Reload и Copy
  • Pull-to-refresh и пауза опроса, когда экран не на переднем плане (батарея)

Fixed

  • Заголовок шапки больше не режется: название раздела живёт в промпте y83@proc, тайминги переехали в нижнюю панель
  • CPU% больше не врёт: раньше показывалось среднее за всю жизнь процесса (Gradle daemon «22 %» при реальной нагрузке 0.4 %), теперь — за интервал опроса