{
  "schema": "teamon.desktop.changelog.v1",
  "releases": [
    {
      "version": "0.1.88",
      "date": "2026-08-24",
      "title": "Обновление переживает нестабильный VPN и прокси",
      "highlights": [
        "Встроенный updater больше не собирает десятки диапазонов в один хрупкий multipart-запрос.",
        "Изменившиеся части приложения скачиваются последовательными небольшими диапазонами и штатно повторяются после сетевого обрыва.",
        "Публичный релиз по-прежнему проверяется полным скачиванием, докачкой, подписью, нотарификацией и Gatekeeper.",
        "Привязка агента, история, сессии и Browser Gateway при обновлении сохраняются."
      ]
    },
    {
      "version": "0.1.87",
      "date": "2026-08-24",
      "title": "Агент сразу подтверждает задачу и показывает живой прогресс",
      "highlights": [
        "Micro-ack появляется сразу после постановки принятой задачи в серверную очередь, до подготовки вложений и запуска модели.",
        "Во время долгой работы один живой пузырь показывает текущий этап, подтверждённый счётчик готово/всего и первый незавершённый элемент.",
        "Имя агента и таймер остаются активными до финального ответа; прогресс обновляется без засорения чата и без дублей.",
        "Черновые обновления подтверждаются транспортом и удаляются из очереди после показа, не затрагивая команды браузера и компьютера.",
        "Apple Silicon и Intel подписаны Developer ID, нотарифицированы и проверены Gatekeeper."
      ]
    },
    {
      "version": "0.1.86",
      "date": "2026-08-21",
      "title": "Честная доставка после обрыва и готовое обновление без ручной загрузки",
      "highlights": [
        "Сохранённый офлайн-запрос показывает «ждёт связь» и не притворяется принятой сервером задачей.",
        "После реальной доставки тот же запрос продолжает работу с прежним идентификатором без дубля.",
        "Проверенное обновление скачивается в фоне, а установка выполняется только по явному нажатию пользователя.",
        "Статус различает отсутствие сети, недоступность сервера и проверку доступа; техническая причина остаётся в диагностике.",
        "Apple Silicon и Intel выпускаются одной версией, подписаны Developer ID, нотарифицированы и проверены Gatekeeper."
      ]
    },
    {
      "version": "0.1.85",
      "date": "2026-08-19",
      "title": "Сообщение не теряется при временном обрыве связи",
      "highlights": [
        "Desktop сохраняет текст и изображение на Mac до подтверждения сервером и автоматически продолжает доставку после восстановления связи.",
        "Повтор использует тот же идентификатор, поэтому сервер не выполняет принятую задачу дважды.",
        "Существующая привязка безопасно переезжает с подтверждённого старого адреса на канонический HTTPS без нового кода, сброса истории или сессии.",
        "Интерфейс различает сетевой таймаут, сохранённую доставку и постоянную ошибку вместо одинакового сообщения «не удалось завершить запрос».",
        "Контракт подтверждён полным набором из 184 Desktop-тестов."
      ]
    },
    {
      "version": "0.1.84",
      "date": "2026-08-18",
      "title": "Долгая задача остаётся активной, пока агент реально работает",
      "highlights": [
        "Desktop больше не объявляет задачу потерянной, если Core временно отдаёт пустой статус, но от агента продолжают приходить рабочие сигналы.",
        "Каждый новый статус, шаг, браузерная или компьютерная команда обновляет время последней активности и сбрасывает счётчик пустых проверок.",
        "Распространённые имена клавиш вроде kp_enter нормализуются, а Enter, стрелки и сочетания Cmd теперь идут через один нативный macOS-модуль ввода.",
        "Запрос по-прежнему не повторяется автоматически, поэтому исправление не создаёт дубликаты действий.",
        "Живой acceptance подтвердил обновление внутри приложения, сохранение привязки, русский ввод в TextEdit и чтение/действие через Browser Gateway 1.2.11."
      ]
    },
    {
      "version": "0.1.83",
      "date": "2026-08-17",
      "title": "Клэр сообщает о ходе долгой голосовой задачи",
      "highlights": [
        "После передачи запроса постоянному агенту Клэр коротко сообщает о работе, использовании возможности и проверке результата.",
        "Служебные названия инструментов, аргументы, рассуждения и секреты не произносятся и не сохраняются в разговоре.",
        "Перебивание останавливает только текущую голосовую подсказку: выполняемая задача продолжает работу и возвращает финальный ответ.",
        "Чтение и уточнения сохраняют живую разговорную сессию; она закрывается только после доказанного действия на экране или с медиа."
      ]
    },
    {
      "version": "0.1.82",
      "date": "2026-08-17",
      "title": "Приложение скачивается и докачивается через ближайший узел",
      "highlights": [
        "Mac и Windows установщики доставляются через Cloudflare, а соединение с origin защищено и проверяется в режиме Full (strict).",
        "Прерванное скачивание и встроенное обновление продолжаются с нужного байта вместо повторной загрузки целого файла.",
        "Релиз не публикуется, пока внешний gate не скачает публичный DMG в два этапа, не сверит его и не проверит установленное приложение.",
        "Диагностический журнал различает полную и прерванную загрузку, не сохраняя IP, cookies, User-Agent или Referer пользователя."
      ]
    },
    {
      "version": "0.1.80",
      "date": "2026-08-16",
      "title": "Обновление показывается только для реально доступного файла",
      "highlights": [
        "Desktop проверяет существование, размер и архитектуру артефакта до показа кнопки обновления.",
        "Отсутствующий или повреждённый файл отображается как честная ошибка обновления без битой ссылки.",
        "Публикация сначала загружает и сверяет неизменяемые файлы, а manifests переключает последними атомарно.",
        "Mac release-пайплайн использует copy-on-write staging и проверяет ZIP без полноразмерных временных дублей."
      ]
    },
    {
      "version": "0.1.79",
      "date": "2026-08-15",
      "title": "Перебивание до первого аудио не наследует старый cursor",
      "highlights": [
        "Новый Realtime response начинает жизнь без item от предыдущего ответа.",
        "До первого аудиофрагмента используется нативный response.cancel — обрезать ещё нечего.",
        "После начала звука сохраняется прежняя точная обрезка по реальному audible cursor.",
        "Edge- и Room Audio-тесты воспроизводят найденную live-гонку и подтверждают связь следующей реплики."
      ]
    },
    {
      "version": "0.1.78",
      "date": "2026-08-15",
      "title": "Ответ создаётся только после commit-квитанции",
      "highlights": [
        "Edge следует нативной последовательности Realtime: commit, provider receipt, response.create.",
        "Следующий ответ физически не может обогнать границу своей голосовой реплики.",
        "Временное удержание раннего события удалено — состояние и число движущихся частей уменьшены.",
        "Тест доказывает отсутствие response.create до квитанции и точный старт сразу после неё."
      ]
    },
    {
      "version": "0.1.77",
      "date": "2026-08-15",
      "title": "Ответ Realtime не пересекает границу реплики",
      "highlights": [
        "Edge удерживает ранний response.created до штатной commit-квитанции этой реплики.",
        "Быстрое перебивание сохраняет точную связь ответа с произнесённым turn.",
        "Новых очередей, протоколов, runtime, wake-путей и голосовых моделей не добавлено.",
        "Регрессионный тест намеренно меняет порядок provider events и доказывает commit-first контракт."
      ]
    },
    {
      "version": "0.1.76",
      "date": "2026-08-15",
      "title": "Новый ответ ждёт завершения локальной реплики",
      "highlights": [
        "После commit-квитанции worker сначала завершает локальный AEC capture handoff.",
        "Уже начавшийся следующий ответ остаётся в очереди своего turn и не выглядит устаревшим.",
        "Wake, VAD, задержки и единая Realtime-сессия не меняются.",
        "Регрессионный тест воспроизводит ранний старт ответа до завершения capture thread."
      ]
    },
    {
      "version": "0.1.75",
      "date": "2026-08-15",
      "title": "Быстрые перебивания больше не меняют порядок реплик",
      "highlights": [
        "Worker ждёт и commit новой реплики, и точную квитанцию о прерывании предыдущего ответа.",
        "Запоздавшая interruption-квитанция больше не воспринимается как чужой turn.",
        "Wake, VAD, задержки и единая Realtime-сессия остаются без изменений.",
        "Регрессионный тест воспроизводит обратный порядок двух квитанций."
      ]
    },
    {
      "version": "0.1.74",
      "date": "2026-08-15",
      "title": "Разговор не обрывается на границе завершённого ответа",
      "highlights": [
        "Desktop отменяет только тот Realtime-ответ, который действительно ещё активен у провайдера.",
        "Уже завершённый, но ещё звучащий локально ответ корректно обрезается без повторного response.cancel.",
        "Следующая реплика остаётся в той же разговорной сессии и не падает с cancel_not_active.",
        "Тесты отдельно доказывают активное прерывание и безопасную гонку после provider completion."
      ]
    },
    {
      "version": "0.1.73",
      "date": "2026-08-15",
      "title": "Клэр можно перебить без разрыва разговора",
      "highlights": [
        "Нативный duplex получает точный audible cursor прерванного ответа до начала следующей реплики.",
        "Поздние фреймы и cancelled response старого ответа больше не смешиваются с новым turn.",
        "Следующая фраза остаётся в той же Realtime-сессии и не требует повторного wake word.",
        "Очередь неслышимых audio items обрезается в нуле по уже существующему v2-контракту."
      ]
    },
    {
      "version": "0.1.72",
      "date": "2026-08-15",
      "title": "Физический Room Voice завершает ответ без разрыва",
      "highlights": [
        "Desktop передаёт нативному duplex-worker точное начало ответа до первого аудиофрейма.",
        "Завершение аудио сохраняет те же response, item, flow и turn correlation, что и поток ответа.",
        "Штатное закрытие worker больше не выглядит как unsupported protocol failure.",
        "Исправление дополняет provider-egress 0.1.71 и не создаёт второй голосовой тракт или MCP."
      ]
    },
    {
      "version": "0.1.71",
      "date": "2026-08-15",
      "title": "Room Voice снова отвечает после wake",
      "highlights": [
        "Realtime WebSocket использует существующий bounded provider-egress Mac mini вместо заблокированного прямого маршрута.",
        "Прокси относится только к Room Voice и не меняет Browser, Computer или другие возможности Node.",
        "Штатные speech_started и speech_stopped Room Audio теперь проходят через edge до committed PCM-ответа.",
        "Ошибка после wake теперь сохраняет безопасную диагностическую причину вместо безликого response_failed.",
        "Ключ остаётся в One, Desktop получает только короткоживущий Realtime secret; второго агента и MCP не появилось."
      ]
    },
    {
      "version": "0.1.68",
      "date": "2026-08-14",
      "title": "Evidence больше не выглядит как знание",
      "highlights": [
        "Telegram и Calendar сохраняют свой источник, эпистемический статус и слой Evidence по всему Device-контуру.",
        "One больше не помечает индексированный feed как каноническое Knowledge.",
        "Индекс и Git receipt остаются видимыми для аудита, но не повышают сырой источник до памяти.",
        "Воспроизведение медиа теперь ограничено по времени и подтверждается только по слышимому playing-состоянию."
      ]
    },
    {
      "version": "0.1.67",
      "date": "2026-08-13",
      "title": "В Activity видно, что именно записано в Knowledge",
      "highlights": [
        "Каждое подходящее событие раскрывает извлечённые смыслы и точные относительные пути Knowledge.",
        "Видно, является запись предложением или каноническим знанием, а также её Git commit и статус индексации.",
        "Diff ограничен и очищен от секретов, raw evidence и локальных путей.",
        "Функция использует существующий Context-контур без нового MCP, базы или write-path."
      ]
    },
    {
      "version": "0.1.66",
      "date": "2026-08-12",
      "title": "Активность агента проходит через единый Context-контур",
      "highlights": [
        "Node переносит безопасную owner-private проекцию Activity в уже существующем Context receipt.",
        "В журнал попадают только фиксированные итоги и счётчики без текстов сообщений, raw evidence и локальных путей.",
        "One отображает эту проекцию рядом с завершёнными задачами, не создавая второго журнала.",
        "Нового публичного MCP, Device pairing или execution path не добавлено."
      ]
    },
    {
      "version": "0.1.65",
      "date": "2026-08-12",
      "title": "Node сам возвращается после временной недоступности One",
      "highlights": [
        "Сохранённая Device-пара запускает обычное переподключение, даже если One недоступен в момент старта Desktop.",
        "После возвращения капсулы больше не нужен ручной перезапуск TeamON Desktop.",
        "Явный отказ авторизации остаётся fail-closed и не превращается в скрытый re-pair.",
        "Нового daemon, transport, credential copy или второго Device-контура не добавлено."
      ]
    },
    {
      "version": "0.1.64",
      "date": "2026-08-12",
      "title": "Node честно различает сеть, разрешения macOS и runtime",
      "highlights": [
        "Network-профиль работает после обычного перезапуска установленного TeamON Desktop без shell-обходов.",
        "Запрещённая запись экрана теперь отображается как permission_required, а не как отключённый Node.",
        "Разрешение по-прежнему выдаёт только владелец через системные настройки macOS.",
        "Нового Computer-контура, публичного MCP или расширенной власти над устройством не появилось."
      ]
    },
    {
      "version": "0.1.63",
      "date": "2026-08-11",
      "title": "Актуальные серверы Contabo видны через единый Fleet-контур",
      "highlights": [
        "Клэр получает текущий список серверов, их статусы, регионы и конфигурации через существующий TeamON Node.",
        "Credentials, идентификаторы аккаунта и внутренние provider ID остаются только на Mac mini.",
        "Список объединяется с разрешёнными SSH-проверками и остаётся полностью read-only.",
        "Нового MCP, универсального API proxy или произвольного удалённого shell не добавлено."
      ]
    },
    {
      "version": "0.1.62",
      "date": "2026-08-11",
      "title": "DNS Cloudflare управляется через защищённый домашний Node",
      "highlights": [
        "Клэр видит ограниченный список DNS-записей, но токен и внутренние идентификаторы Cloudflare остаются на Mac mini.",
        "Перед изменением Клэр показывает точные значения до и после и ждёт явного подтверждения Ларри.",
        "Mac mini повторно проверяет запись, выполняет одну операцию и независимо читает результат после изменения.",
        "Нового публичного MCP, удалённой консоли или универсального Cloudflare proxy не появилось."
      ]
    },
    {
      "version": "0.1.61",
      "date": "2026-08-11",
      "title": "Аудио и выбранные смыслы проходят через один защищённый Node",
      "highlights": [
        "Клэр расшифровывает уже сохранённое аудио по безопасной ссылке, не передавая файл или локальный путь через MCP.",
        "Выбранный смысл из Gmail или Mattermost можно явно сохранить в Raw/Flow без автоматического загрязнения Knowledge.",
        "Приватный текст не попадает в аргументы процессов и удаляется из временной Device-команды после content-free receipt.",
        "Нового агента, MCP, хранилища памяти или второго transport path не появилось."
      ]
    },
    {
      "version": "0.1.60",
      "date": "2026-08-09",
      "title": "Понятно, когда агент работает и что действительно произошло",
      "highlights": [
        "Во время задачи приложение показывает имя агента, слово «думает» и честный таймер выполнения.",
        "Готовый агент отмечен зелёным; оранжевый цвет означает только подключение или восстановление связи.",
        "Короткое переподключение Browser Gateway больше не обрывает задачу: команда ждёт его в безопасной очереди.",
        "Колокольчик показывает только компактные фоновые события без сырой разметки; обычный поздний ответ остаётся в чате."
      ]
    },
    {
      "version": "0.1.59",
      "date": "2026-08-09",
      "title": "Управление Mac работает без ручной установки",
      "highlights": [
        "Модуль управления мышью и клавиатурой уже находится внутри подписанного приложения — Homebrew не нужен.",
        "Русский и другой Unicode-текст вводится через физическую комбинацию и не зависит от текущей раскладки.",
        "Буфер обмена восстанавливается после действия; более новая копия владельца никогда не перезаписывается.",
        "Сборка проверяет модуль, обе архитектуры Mac, подпись и наличие runtime внутри готового приложения.",
        "Платформа обновлена до Electron 43.3.0; аудит зависимостей релиза не находит уязвимостей."
      ]
    },
    {
      "version": "0.1.58",
      "date": "2026-08-08",
      "title": "Голосовые не теряются, связь с Core защищена",
      "highlights": [
        "Голосовое сначала сохраняется на этом Mac и только затем отправляется агенту.",
        "После обрыва сети или перезапуска приложение само доставляет ту же запись без второй задачи.",
        "Существующая привязка переезжает на проверенный HTTPS-адрес без нового кода и без обнуления чата.",
        "Команды компьютера, встроенное обновление и Browser Gateway остаются в прежнем едином приложении."
      ]
    },
    {
      "version": "0.1.57",
      "date": "2026-08-08",
      "title": "Видео по точному подтверждению владельца",
      "highlights": [
        "Клэр может подготовить точный запрос для xAI Video и показывает его до любого платного запуска.",
        "После подтверждения создаётся только одна асинхронная задача; повторный запрос не списывает деньги второй раз.",
        "Готовое видео сохраняется как приватный артефакт владельца, а временная ссылка провайдера наружу не передаётся.",
        "Ключ xAI и внутренний идентификатор задачи остаются только на Mac mini; нового MCP или общего shell не добавлено."
      ]
    },
    {
      "version": "0.1.56",
      "date": "2026-08-08",
      "title": "Актуальный контекст Клэр между Web и Telegram",
      "highlights": [
        "Завершённый разговор владельца сразу попадает в защищённый Hot Context на Mac mini.",
        "Следующий разговор в Web или Telegram получает свежий смысл ещё до ночной дистилляции Owl.",
        "Точные тексты не появляются в аргументах процессов, ответах инструментов или диагностике.",
        "Нового публичного MCP или второго хранилища памяти не добавлено: One остаётся единственной агентской точкой входа."
      ]
    },
    {
      "version": "0.1.55",
      "date": "2026-08-08",
      "title": "Правильное обновление Browser Gateway",
      "highlights": [
        "Приложение открывает именно тот канал расширения, который указан в свежем релизе.",
        "Пилотная версия больше не отправляет пользователя на устаревшую карточку Chrome Web Store.",
        "Browser Gateway 1.2.7 сохраняет результат действия до доставки и не повторяет его после перезапуска Chrome.",
        "Привязка, чаты и локальные настройки сохраняются при обновлении приложения и расширения."
      ]
    },
    {
      "version": "0.1.54",
      "date": "2026-08-07",
      "title": "Единый статус домашних подключений",
      "highlights": [
        "Клэр проверяет Telegram, календарь, почту, GitHub, Cloudflare и серверы одним точным запросом.",
        "Статус отличает готовое подключение от настроенного, недоступного и ещё не подключённого.",
        "Секреты и локальные пути остаются на Mac mini и никогда не попадают в ответ агента.",
        "Проверка проходит через существующую защищённую привязку TeamON One без второго агента или MCP."
      ]
    },
    {
      "version": "0.1.53",
      "date": "2026-08-07",
      "title": "Один клик установки без ложной ошибки",
      "highlights": [
        "После нажатия «Установить и перезапустить» сразу виден этап подготовки установки.",
        "Кнопка временно блокируется, поэтому нативная команда не запускается повторно.",
        "Приложение автоматически перезапускается после подготовки подписанного обновления.",
        "Привязка, чат и Browser Gateway сохраняются без повторной настройки."
      ]
    },
    {
      "version": "0.1.52",
      "date": "2026-08-07",
      "title": "Чистое обновление внутри приложения",
      "highlights": [
        "После успешной установки приложение освобождает лишнюю копию уже использованного пакета.",
        "Незавершённое обновление не удаляется и остаётся готовым к установке.",
        "База для следующего быстрого обновления сохраняется.",
        "Официальная карточка TeamON Browser теперь ведёт на тот же Gateway, который работает и через Desktop, и напрямую с TeamON One."
      ]
    },
    {
      "version": "0.1.44",
      "date": "2026-07-29",
      "title": "Обновление и связь восстанавливаются сами",
      "highlights": [
        "Оборванная загрузка обновления автоматически повторяется внутри приложения.",
        "Зависшее подключение к Core пересоздаётся по heartbeat без новой привязки.",
        "Во время долгой работы Core присылает живой статус, поэтому приложение не путает выполнение задачи с переподключением.",
        "После возврата в окно или восстановления сети связь проверяется сразу.",
        "Mac всегда получает Mac-установщик, а полный invite корректно вставляется целиком."
      ]
    },
    {
      "version": "0.1.43",
      "date": "2026-07-28",
      "title": "Непрерывная связь без ручного переподключения",
      "highlights": [
        "Ответы приходят сразу по защищённому потоку.",
        "После сна, разблокировки или возвращения сети связь оживает сама.",
        "Перезапуск не возвращает уже показанные ответы.",
        "Со старым Core автоматически включается резервный режим."
      ]
    },
    {
      "version": "0.1.42",
      "date": "2026-07-27",
      "title": "Мгновенное восстановление связи",
      "highlights": [
        "Связь подтверждается сразу, без ожидания 25-секундного long-poll.",
        "Временная ошибка доступа проверяется каждые три секунды.",
        "Привязка и текущая задача сохраняются."
      ]
    },
    {
      "version": "0.1.41",
      "date": "2026-07-27",
      "title": "Связь и доступ к модели больше не путаются",
      "highlights": [
        "Короткие сбои проверки состояния не обрывают живое подключение и не мешают длинной задаче завершиться.",
        "Приложение не повторяет неопределённый запрос автоматически и сохраняет один идентификатор при ручном повторе.",
        "Истёкший вход Codex или Claude показывается отдельной карточкой с кнопкой восстановления доступа.",
        "Повторная ошибка доступа заменяет прежнюю карточку вместо засорения чата одинаковыми сообщениями."
      ]
    },
    {
      "version": "0.1.40",
      "date": "2026-07-26",
      "title": "Надёжные длинные задачи и обновление внутри приложения",
      "highlights": [
        "Повтор после сбоя больше не запускает ту же задачу второй раз.",
        "Длинная задача не исчезает из интерфейса из-за одного раннего ответа статуса.",
        "Обновление скачивается внутри TeamON Desktop и устанавливается кнопкой «Установить и перезапустить».",
        "Приложение проверяет новую версию при запуске, каждые 15 минут и после возвращения в окно."
      ]
    },
    {
      "version": "0.1.39",
      "date": "2026-07-21",
      "title": "Устойчивое соединение и Browser Gateway",
      "highlights": [
        "Короткие перебои сети больше не выглядят как полный разрыв подключения.",
        "Результаты действий на компьютере повторно доставляются без повторного выполнения самого действия.",
        "Browser Gateway точнее сообщает, готов ли он выполнять команды."
      ]
    },
    {
      "version": "0.1.38",
      "date": "2026-07-19",
      "title": "Исправлен встроенный updater на macOS",
      "highlights": [
        "Подписанные Mac-сборки получили обязательную конфигурацию встроенного обновления.",
        "Updater корректно выбирает Apple Silicon или Intel пакет."
      ]
    },
    {
      "version": "0.1.37",
      "date": "2026-07-17",
      "title": "Восстановление подключения без новой привязки",
      "highlights": [
        "Временная ошибка авторизации больше не стирает сохранённое подключение.",
        "Приложение повторно читает временно недоступный ключ macOS Keychain."
      ]
    }
  ]
}
