y83 code / журнал

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

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

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

журнал

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

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

0.8.3

15 сентября 2026

Added

  • Remote agents: host key pinning (TOFU) — отпечаток SSH-сервера хранится на телефоне, при смене ключа соединение блокируется и показывается диалог «Trust new key»
  • Remote agents: SSH-ключ ed25519 ставится автоматически и проверяется отдельным входом; пароль остаётся только fallback'ом (кнопка «Clear stored password»)
  • Remote agents: per-server токены роутера и MCP (ротация из меню карточки, revoke, отказ от legacy-токена) — утечка одного сервера больше не открывает все
  • Remote agents: меню карточки — Restart Codex, Show Codex logs, Rotate router token
  • Remote agents: на карточке видно host key и статус «SSH key installed»; на экране редактирования — отпечаток и очистка сохранённого пароля
  • scripts/remote-e2e.sh: проверки pinning, ключей, per-server токенов и 404 на закрытые пути

Changed

  • Remote agents: одно SSH-соединение на сервер (lease/refcount) вместо трёх, reverse-листенер держит постоянный lease — idle-cleanup его не закрывает
  • Remote agents: health-монитор больше не гоняет ssh-команды каждые 20 с — дешёвый TCP-диал через SSH, end-to-end проба раз в 5 минут
  • Remote agents: конфиг на сервере и authorized_keys пишутся атомарно (tmp+mv), порт 9000 освобождается только у sshd, иначе port_busy в статусе

Fixed

  • Remote agents: Model metadata for <model> not found — каталог моделей на сервере теперь кладётся на верхний уровень config.toml (раньше попадал в [memories] и игнорировался), генерируется из провайдеров бэкенда и пушится по хэшу
  • Remote agents: пустой список моделей — при сбое бэкенда список больше не затирается, а отправка не уходит на заглушку gpt-6-astra
  • Remote agents: треды не создавались при обрыве туннеля (codex уходил в Reconnecting... waiting for network)
  • Remote agents: setup больше не переустанавливает Codex CLI при каждом запуске (codex --version проверяется по выводу); логи демона читаются из journald

0.8.2

2 сентября 2026

Added

  • WebAI-чат с историей диалога и индикатором «отвечает…»
  • Экран инструментов: свайп влево из чата открывает WebAI и Notes
  • Дебаг-мост браузера: ИИ-агент управляет браузером приложения
  • MCP-инструмент y83_bridge_command для вызова команд моста
  • Плавный стрим мыслей: reasoning-чанки склеиваются в один блок
  • План ИИ-агента отдельной карточкой с чекбоксами и статусами

Changed

  • WebAI-чат переоформлен под Codex: шапка, баблы, тумблеры «Мысли» и «Поиск»
  • DeepSeek не создаёт сессию на каждое сообщение — ответы за 2–4 с вместо ~11 с
  • PoW-заголовок DeepSeek решается заранее пока читается предыдущий ответ
  • Главная: карточки агентов с описаниями, hero-карточка Backend
  • Рефакторинг CodexViewModel на отдельные файлы

Fixed

  • Пустой ответ DeepSeek — сессия сбрасывается, запрос повторяется
  • Ошибка 4100 «Server returned unexpected data» в WebAI-чате
  • Ответы на вопросы больше не «проваливаются в очередь»
  • Зависание приложения на browser-командах
  • Версии окружения: берутся запуском бинарей, а не из versions.txt

0.8.1

30 августа 2026

Added

  • MCP tool call approval: Allow / Always allow / Reject с подтверждением
  • Таб «Policies» в Инструментах: просмотр и удаление правил
  • «Always allow» для MCP-вызовов и exec/applyPatch

Changed

  • Инструменты: единый стиль, bottom sheet, подтверждения
  • API-форма работает без сохранения (Discover / Test)
  • «Выключить» реально гасит app-server
  • Кнопка статуса модели через轻量ный эндпоинт

Fixed

  • Дубль статуса токена в Tools
  • Форма API не «ломает» список после ошибки
  • Working-плашка не перекрывается полем ввода

0.8.0

30 августа 2026

Added

  • Экран «Инструменты» с табами API / WebAI / Tools
  • API-провайдеры: глобальный каталог для всех агентов

Changed

  • WebAI переписан на едином слое ws-backend: одна SQLite
  • MCP-инструменты стандартизированы через один endpoint
  • Zen-прокси встроен в ws-backend
  • setup.sh: approval_policy = "never" по умолчанию

0.8.2-260902

2 сентября 2026архив

  • WebAI-чат ускорен: DeepSeek больше не создаёт сессию на каждое сообщение — сессия и цепочка parent_message_id переиспользуются между репликами диалога (как у ассистента Мэри), повторные ответы идут без ожидания CreateSession.
  • PoW-заголовок DeepSeek решается заранее, пока читается предыдущий ответ (prefetch): повторные реплики в диалоге отвечают за 2–4 с вместо ~11 с.
  • Исправлен «пустой ответ провайдера» (HTTP 200 с пустым SSE-потоком) на повторных запросах DeepSeek: пустой стрим теперь классифицируется как тихий лимит — сессия сбрасывается, запрос повторяется с новой, аккаунт получает короткий бэкофф вместо вечного повтора.
  • Исправлена ошибка 4100 «Server returned unexpected data» в WebAI-чате: сервер больше не отдаёт sources: null, парсер событий терпим к null.
  • Экран WebAI-чата переоформлен под Codex: шапка с кнопкой назад, баблы ассистента/пользователя, инпут-карточка с тумблерами «Мысли» и «Поиск».
  • В чате WebAI при отправке появляется индикатор «отвечает…» — прогресс виден сразу, пока DeepSeek думает (раньше пустой бабл молчал).
  • Новый экран инструментов: свайп влево из чата с ИИ-агентом открывает WebAI (полноценный чат с историей) и Notes («скоро»); назад возвращает в чат.

0.8.2-260831

31 августа 2026архив

  • Исправлены ответы на вопросы (request_user_input): выбранный вариант больше не «проваливается в очередь» — если ход уже завершён или карточка без живого requestId, ответ доставляется сразу текстом (turn/steer вместо pendingQueue), диалог не зависает после выбора.
  • Главная переоформлена: карточки агентов с tagline/фичами и англ. описаниями, версия в шапке, hero-карточка Backend (статус, состояние настройки, переподключение).
  • Правдивые версии окружения: новый эндпоинт бэкенда GET /api/v1/env/status — версии компонентов берутся запуском бинарей (--version) + sha256, а не из ~/.y83/versions.txt (который мог врать). Экран Updates показывает фактическое состояние: установлено/отсутствует/ошибка проверки.
  • setup.sh больше не доверяет versions.txt: перед обновлением сверяет sha256 установленного бинаря с манифестом (need_sha), поэтому «версии совпадают, а бинарь старый» больше не блокирует обновление. versions.txt персистится только после полной проверки (verify_env).
  • ws-backend получил флаг --version (раньше игнорировался и пытался стартовать сервер) — версия бэкенда теперь читается запуском, как у codex/opencode.
  • Исправлена раздача на agent.y83.ru: setup.sh/manifest.txt были 600 и nginx отдавал 403 — файлы обновления снова скачиваются устройствами.
  • Совместимость со старыми бэкендами: если env/status недоступен (404 на старой сборке), экран Updates не рисует прочерки, а показывает версии из env/versions — на любом устройстве видно «установлено/доступно», а Update All обновляет бэкенд и переводит экран на реальные версии.
  • Исправление setup.sh (продакшн): проверка версии opencode снимает LD_PRELOAD (glibc-бинарь иначе не стартует и --version пустой); need_update/need_sha больше не падают с «$2: unbound variable» для компонентов без sha (manager/skills) при set -u.
  • Рефакторинг CodexViewModel (1787 строк → файлы-россыпи): CodexEventHandlers, CodexThreads, CodexSendQueue, CodexRequests, CodexWatchdog. Восстановлены потерянные фичи: автоназвание треда ИИ и явные имена при переименовании.

0.8.2-260830

30 августа 2026архив

  • Мост браузера для ИИ-агента: команда browser_open {"url"} сама открывает экран браузера и грузит страницу; browser_get_state отдаёт адрес, прогресс, ожидание пользователя, поиск; browser_wait_idle ждёт завершения загрузки.
  • Чтение страницы: browser_content (HTML, с trim/maxLen), browser_content_text (текст страницы с кол-вом символов и флагом hasMore), browser_find (поиск по странице), browser_bookmarks, browser_history, список вкладок browser_tabs.
  • Управление: browser_click/browser_type/browser_back/browser_forward (по прежней схеме), browser_screenshot с режимами base64 и file (сохранение скриншота в файлы приложения), browser_wait_for_user и browser_resolve_wait для пауз на подтверждение.
  • MCP-инструмент y83_bridge_command {name, params?, waitMs?} на http://127.0.0.1:4100/mcp/codex — агент вызывает команды моста как обычный MCP-тул, бэкенд ждёт ack по id; скриншоты base64 в выводе усекаются.
  • scripts/bridge.sh browser ... — быстрые команды для ручной проверки (open/state/content/text/shot/find/bookmarks/history/tabs/idle и generic).
  • Исправлено зависание приложения на browser-командах: все browser_* взаимодействия с WebView переведены с блокирующих latch.await/ Thread.sleep на корутины (suspendCancellableCoroutine + delay) — ни одна команда моста больше не держит main-поток, UI не виснет даже при browser_wait_idle/browser_wait_for_page_load с большими таймаутами.
  • Плавный стрим мыслей: reasoning-чанки одного хода склеиваются в один блок в viewModel (ITEM_MERGE в timeline), автоскролл срабатывает только на вставку нового элемента, а не на каждый чанк — экран не дёргается, ленту можно листать вверх во время стрима. Завершение блока фиксирует только finalizeTurn, таймер мышления тикает в самом блоке, выделение текста (SelectionContainer) доступно только после завершения.
  • План ИИ-агента (список шагов) рисуется отдельной карточкой: чекбоксы [x]/[ ] и inline-статусы (выполняется)/(ожидает)/(готов) превращаются в стилизованные строки с иконками-статусами, плавной сменой цвета и зачёркиванием готовых шагов, поверх рендерится обычный markdown.
  • Fullscreen-режим ввода: фон области прогресса над формой теперь тёмный (background, без скруглений сверху) — не сливается с шапкой и выглядит цельно в обоих режимах.

0.8.1-260830

30 августа 2026архив

  • Главная → Codex: «Выключить» теперь реально гасит app-server — бэкенд помечает down runit-сервис codexappserver и убивает процесс на 8789 (раньше при уже выключенном сторе кнопка ничего не делала, а процесс держал runit и сервер оставался живым).
  • Чат: убран старый анимированный прогресс-маркер внизу сообщений агента — статус хода и так показывается в полосе над формой ввода и в ленте.
  • Инструменты приведены к единому стилю Codex-чата: карточки на surfaceContainerLow с радиусом 16.dp, поля форм через общий компонент, одинаковые отступы (16/12dp), подтверждение удаления через один диалог во всех вкладках (API / WebAI / Tools / Policies).
  • API: форма добавления/редактирования — bottom sheet поверх списка, ошибки и статусы больше не «ломают» список (раньше после ошибки/сохранения вместо списка оставалась форма/ошибка и приходилось перезаходить во вкладку). «Discover models» и «Test model» работают без сохранения провайдера (stateless /api/v1/providers/probe и /probe-test), сохранение — только кнопкой Save.
  • WebAI: «Добавить» — плавающая кнопка как в API; форма — bottom sheet поверх списка; удаление с подтверждением; единый статус-ряд вместо дублей.
  • Tools: убран дубль статуса токена («Token saved» + «Current token») — теперь один статус-ряд с маской; тест GitHub проверяет сохранённый токен (новый POST /api/v1/tools/test на бэкенде), удаление токена — с подтверждением.
  • MCP tool call approval (mcpServer/elicitation/request с _meta.codex_approval_kind = "mcp_tool_call") — отдельная карточка «MCP tool call»: сервер, описание инструмента и текст запроса, кнопки Allow / Always allow / Reject с подтверждением. Пустая форма с Send больше не появляется. Allow/Always шлют {"action":"accept"} (persist-правила применяет сам Codex), Reject — {"action":"decline"}. Ответ-статус: «Always allowed» / «Approved» / «MCP request declined».
  • Новый таб «Policies» в Инструментах: просмотр и удаление правил (approval_policy, sandbox_mode, trusted-проекты, permissions, exec policy, MCP-серверы) через GET/DELETE /api/v1/settings/policies бэкенда. Системные ключи удалить нельзя.
  • setup.sh: в конфиг Codex по умолчанию прописываются approval_policy = "never" и sandbox_mode = "danger-full-access" — на новых устройствах запросы разрешений больше не спрашиваются.

0.8.0-260830

30 августа 2026архив

  • Экран «Инструменты»: пункт в верхнем меню главной открывает страницу с табами API / WebAI / Tools. WebAI-аккаунты и Tools переехали сюда из отдельных пунктов меню.
  • API-провайдеры стали глобальным каталогом для всех агентов: один список с фильтром All/Codex/Qwen, карточки с Switch/Test/Edit/Delete, форма c пресетами, маской API-ключа и «Test current». Вход из меню агента убран.
  • Бэкенд: новые глобальные роуты /api/v1/providers (+ discover/test), миграция старых per-agent записей в каталог по типу, slug уникален в рамках типа (codex и qwen могут иметь одинаковые slug).
  • Tools: статус-бейджи «токен сохранён / не введён» для GitHub и AgentSearch, валидация URL перед сохранением, карточка ошибки с Retry при недоступном бэкенде.
  • Request-карточки Codex: Allow / Always allow / Reject теперь сначала показывают диалог подтверждения с деталями выбранного действия — случайного ответа не бывает.
  • «Always allow» полноценный: для MCP-вызовов уходит approved_mcp_policy_amendment (единственное always в протоколе для MCP), для exec/applyPatch — execpolicy и network-амендменты из предложения сервера (схемы v1 и v2).
  • MCP elicitation (mcpServer/elicitation/request) — это форма с полями из requestedSchema (текст/число/boolean/выбор), а не кнопки Allow: Send шлёт {"action":"accept","content":{…}}, Decline — {"action":"decline"}. Always для элицитации в протоколе не существует — в карточке об этом честно написано.
  • Ответ на вопросы (requestUserInput) отделён от approval: надписи «question answered / request dismissed» больше не появляются на approval-карточках.
  • В лог добавлены входящие params запросов (codex: incoming request), чтобы видеть реальную форму MCP/approval-запросов при отладке.

0.8.0-260829

29 августа 2026архив

  • WebAI переписан с нуля на едином слое ws-backend: аккаунты, REST, MCP и приложение читают одну SQLite (~/.y83-ws/ws-backend.db). Отдельный процесс y83-proxy выведен из эксплуатации — нечего рассинхронизировать.
  • MCP-инструменты стандартизированы: y83_webai_status, y83_webai_ask, y83_webai_vision, y83_webai_export, y83_webai_import, y83_webget_search, y83_webget_fetch, y83_status — все через один endpoint http://127.0.0.1:4100/mcp/codex.
  • REST WebAI в едином camelCase-формате без привязки к агенту (auth вместо token/cookies в списке). Добавлены POST /webai/export и POST /webai/import — перенос аккаунтов с секретами между устройствами (импорт сохраняет id, статистика переносится).
  • Zen-прокси (8788) встроен в ws-backend: /v1/models, /v1/chat/completions, /v1/responses поверх веб-ИИ аккаунтов. setup.sh больше не ставит y83-proxy.
  • WebAI-экран: одна форма добавления/редактирования, удаление с подтверждением, сессия не показывается и не затирается при PUT.

0.8.0-codex-chat-redesign

19 августа 2026архив

  • Codex-чат переделан под дизайн opencode-чата: reverse-лента (новые сообщения внизу, липнет к низу, FAB «к последнему» с непрочитанными), баблы пользователя справа (primaryContainer, spring-анимация) и агента слева (surfaceContainer, markdown, кликабельные ссылки, Expand/Collapse, копирование + «Код · N» для код-блоков).
  • Поле ввода — как в opencode-чате: карточка (surfaceContainerHigh, скругление 20, тень), BasicTextField «Ask the agent…», нижний ряд: plain-роль «build» (ролей нет), чип модели, Send/Stop (40dp, Stop — error-цвет, Enter — отправка).
  • Карточки шагов и сводок: думал/команды/правки группируются в «шаг N» с агрегатами и таймером, после хода — бейдж «выполнено» с общим временем и счётчиками.
  • Живые таймеры на карточках думания/команд (wall-clock от старта элемента) — после перезахода в тред время идёт от реального старта, а не с нуля.
  • Новые карточки: правки файлов (бейджи +/−/~, диффы) и картинки (загрузка/просмотр на весь экран, копирование пути/открытие URL).
  • Вопросы модели: опции-радиокнопки + «Свой ответ…» (если isOther) вместо голого поля; заголовок вопроса выводится отдельной строкой.
  • Запросы одобрения/вопросы закреплены у поля ввода (как в y83-space), в ленте не дублируются.
  • В шапке чата — текущий этап хода («выполняет: $ …», «пишет ответ…», «думает…»); в меню — «Не гасить экран» (keepScreenOn на время чата).
  • «Вечные лоадеры» убраны: индикатор «Thinking…» показывается только при активном ходе без живых карточек; после stop/завершения хода dots и таймеры гаснут (фолбэк по статусу cancelled/idle, если сервер не прислал turn/completed).