# Изменения CapyAgent

## v1.1.1 - Telegram принимает файлы больше 20 МБ сразу после установки

Дата выпуска: при выкладке. Выпуск только ядра.

- записи звонков, диктофона и другие файлы больше 20 МБ доходят до агента
  без ручной настройки: сборка выпуска несёт ключи приложения Telegram для
  своего сервера Bot API, человеку их вводить не нужно. Свои ключи
  (`CAPYAGENT_TELEGRAM_LOCAL_API_ID`, `CAPYAGENT_TELEGRAM_LOCAL_API_HASH_KEY`)
  по-прежнему важнее встроенных;
- установка одной строкой от root: свой сервер Bot API включается после
  установки службы (каталог данных службы заводит она), а не кончается
  «каталога данных службы ещё нет»;
- расширение браузера ставится из Chrome Web Store.

### Ограничения v1.1.1

- свой сервер ходит к серверам Telegram напрямую: если с машины они не
  открываются (у части провайдеров в России), бот остаётся в облаке с
  файлами до 20 МБ, и мастер говорит об этом словами;
- нужен Docker (или программа `telegram-bot-api` в PATH): от root мастер
  ставит Docker сам;
- уже установленные v1.1.0 переходят на свой сервер командой
  `capyagent telegram local-api enable` или повторным `capyagent setup`.

## v1.1.0 - Telegram принимает файлы больше 20 МБ, установка одной строкой и вход в подписку ChatGPT

Дата выпуска: при выкладке (в собранном выпуске она стоит полем `released`
в `manifest.json`). Выпуск только ядра: настольное приложение в нём не
обновлялось и выйдет отдельно.

Бот отвечает сразу после установки:

- настроен бот Telegram (или другой канал, которому нужен постоянно
  работающий агент) - мастер настройки последним шагом запускает агента
  службой, Enter - «да»: от root на systemd - системная служба
  (`capyagent`, `/etc/capyagent.env`, `/var/lib/capyagent`), без root -
  пользовательская с `loginctl enable-linger` (нет прав - строка с командой
  для администратора, и подъём после перезагрузки не обещается), без
  systemd - одна строка с точной командой запуска.
  То же по файлу ответов: раздел `"service"`, по умолчанию «да» при
  настроенном канале; `--без-запуска` (`--no-start`) - не запускать;
- служба читает ровно то, что записал мастер: при службе мастер пишет её
  файл окружения, прежние настройки, которых служба не видела, переносит
  один раз; повторный `capyagent setup` меняет то, что читает служба, и
  перезапускает её; проверенное живьём значение модели и заново введённый
  токен бота встают на место прежних, а не рядом;
- служба с моделью, которая не поднимется, не запускается: подписка ChatGPT
  без входа - сначала вход кодом устройства, у системной службы прямо в её
  каталог данных (`/var/lib/capyagent/codex/auth.json`); без терминала -
  отказ словами; падающий по кругу юнит мастер не оставляет;
- «Готово» - только после проверки делом: юнит активен и не
  перезапускался за время проверки, ядро отвечает, бот проходит `getMe`
  через адрес Bot API службы, канал Telegram есть в самой службе и на
  связи; иначе причина из журнала и команда `journalctl`. Дверь ядра уже
  занята другим агентом (запущенным руками) - службу мастер не запускает
  и говорит, как его найти;
- мастер возвращает службе каталог данных и файл настроек (файлы root,
  оставленные ручным запуском; ссылки наружу и жёсткие ссылки на чужие
  файлы не трогает), а старшую копию бинарника службы обновляет
  до своей версии; ядро от root на данных системной службы больше не
  поднимается и говорит, как запустить службу;
- бот отвечает владельцу: мастер в терминале записывал ответ на вопрос
  «Ваш числовой id в Telegram» голым числом в `CAPYAGENT_OWNER_CHAT` и не
  заносил его в `TELEGRAM_ALLOWED_USER_IDS`, и бот отвечал самому владельцу
  «Доступ к боту не настроен» под «Готово ... он ответит» (так же писал
  мастер v1.0.13). Теперь владелец ложится адресом `telegram:ID` и
  добавляется в список разрешённых (список дополняется, а не заменяется),
  непонятный ответ переспрашивается; повторный `capyagent setup` (и
  `--quick`) чинит записанное прежним мастером. Без списка «он ответит»
  не обещается, а `doctor` больше не пишет «боту сможет писать кто
  угодно»: без списка бот не отвечает никому;
- `capyagent doctor`: «Telegram настроен, но агент не запущен» и «служба
  упала: <причина>» красной строкой с починкой; без каналов тревоги нет;
  служба стоит, а на двери ядра отвечает другой процесс (агент, запущенный
  руками, или агент Windows рядом с WSL) - красная строка с поиском, а не
  «агент запущен и отвечает»;
- путь обновления с v1.0.13, где служба на подписке ChatGPT лежала в
  `failed`: `CAPYAGENT_UPDATE=1 capyagent update`, затем
  `capyagent setup --quick` ([обновление](docs/obnovlenieIRezerv.md#с-v1013-служба-упала-бот-молчит)).

Установка, вход и обновление:

- установка одной строкой: мастер настройки без службы пишет настройки в
  файл, который читает программа (`capyagent config path`, обычно
  `~/.capyagent/settings.env`), а не в `/etc/capyagent.env`; обычный
  пользователь больше не получает permission denied, а модель видна сразу
  после живой проверки; совет про `systemctl` дают только там, где служба
  установлена;
- OpenRouter, DeepSeek, Groq, Mistral, Together, Gemini и другие пункты
  меню мастера на общем OpenAI-входе поднимаются ключом: адрес и модель
  предлагаются из каталога (Enter), а выбор такого пункта больше не
  кончается «неизвестный CAPYAGENT_PROVIDER» после введённого ключа; пункт
  «Gemini (нативный)» тоже узнаётся;
- подписка ChatGPT подключается прямо в мастере: вход кодом устройства
  (`capyagent login`), ключ API не нужен; ключи и токены вводятся без эха;
- `capyagent update` у клиентов v1.0.11-v1.0.13 снова работает: рядом с
  `bin/` в каталоге выпуска лежат плоские имена бинарников;
- обновление не понижает версию молча: ставится только более новая,
  понизить можно флагом `--разрешить-понижение` (`--allow-downgrade`);
  после установки одной строкой update заводит каталог данных сам;
- `capyagent doctor` на установке одной строкой не красный без ключа
  выпуска и без Python, если коннекторов нет.

Каналы, модели и инструменты:

- фото и альбомы Telegram идут через свой сервер Bot API, а не мимо него;
- голосовые MAX распознаются своей командой (`MAX_STT_COMMAND`,
  `MAX_STT_TIMEOUT`, по умолчанию 240 с);
- зрение видит картинки из подключённых навыков и без работы с файлами;
- ранняя обрезка старых выводов инструментов и порог сжатия в токенах
  (`CAPYAGENT_PRUNE_TOOL_OUTPUT_AT`, `CAPYAGENT_PRUNE_TOOL_OUTPUT_MIN_CHARS`,
  `CAPYAGENT_COMPRESS_AT_TOKENS`): мастер включает их только новой
  установке;
- `CAPYAGENT_IMPORT_HOST_CREDENTIALS` (auto, on, off): установка со своим
  каталогом данных не по умолчанию не берёт входы других программ из дома
  хозяина машины;
- запись встреч capy-meet-mcp 1.1.0: своя команда расшифровки
  (`CAPY_MEET_STT_COMMAND`).

Telegram и файлы больше 20 МБ:

- бот Telegram из коробки принимает в чате файлы больше 20 МБ (до 2 ГБ, одним
  файлом по умолчанию до 200 МБ): агент поднимает на этой же машине свой
  сервер Telegram Bot API (контейнер Docker или программа `telegram-bot-api`),
  переводит на него бота и читает присланное прямо с диска; раньше облако
  Telegram не отдавало боту файлы тяжелее 20 МБ, и часовая запись встречи до
  агента не доходила;
- включается само: мастер настройки сразу после токена бота (Enter - «да»,
  файл ответов - `"telegram_local_api": false`, чтобы не включать), панель и
  настольное приложение после сохранения токена; ход перевода виден на экране
  «Каналы», перезапуск агента, пока перевод идёт, не даётся; вручную -
  `capyagent telegram local-api enable | disable | status`, раздел в
  `capyagent doctor`;
- перевод бережёт от потери сообщений: бот уходит из облака только тогда,
  когда свой сервер уже отвечает и серверы Telegram с машины открываются
  напрямую, настройки пишутся только когда свой сервер узнал бота; пока
  служба переходит на новые настройки, отказ облака её не роняет;
- нет Docker - мастер предлагает поставить его пакетным менеджером системы;
  машине, пересылающей IPv6 (маршрутизатор, VPN), Docker сам не ставится:
  Docker 27 при запуске оборвал бы эту пересылку; на RHEL и родственных вместо
  podman-docker ищется Docker Engine; при SELinux каталог сервера монтируется
  с нужной меткой;
- сервер слушает только 127.0.0.1: на Linux контейнер живёт в сети машины, и
  порт не открыт другим контейнерам; программе сервера не отдаётся окружение
  службы с токеном бота и ключами моделей;
- переезд с беты: если бета уже держит этого бота на своём сервере Bot API
  этой машины, ядро берёт тот же сервер, второй не поднимает; `capyagent
  pereezd` называет такой сервер;
- откат (`disable`, снятие службы) возвращает бота в облако; если контейнер
  снять не удалось, откат кончается ошибкой с командой, а не словом «готово»;
- скачанные сервером файлы старше 3 дней служба удаляет сама
  (`CAPYAGENT_TELEGRAM_FILES_KEEP_DAYS`); каталог сервера (в нём сессия бота)
  не попадает в резервные копии и снимки перед обновлением.

### Ограничения v1.1.0

- настольное приложение остаётся 1.0.13: в этом выпуске обновлено только
  ядро;
- в сборке выпуска нет ключей приложения Telegram: свой сервер Bot API
  (файлы больше 20 МБ) включается после ключей с my.telegram.org
  (`CAPYAGENT_TELEGRAM_LOCAL_API_ID`, `CAPYAGENT_TELEGRAM_LOCAL_API_HASH_KEY`),
  мастер говорит об этом словами; до тех пор бот работает через облако
  Telegram с файлами до 20 МБ;
- установка одной строкой от root: шаг своего сервера Bot API идёт до
  установки службы и откладывается, включать после неё -
  `capyagent telegram local-api enable`;
- путь ядра проверен тестами на подставных серверах, живьём на настоящем боте
  ещё не проверялся;
- любая сторонняя программа, которая шлёт этим ботом прямо в
  api.telegram.org, возвращает бота в облако: такие скрипты нужно перевести на
  адрес своего сервера;
- из панели Docker не ставится: нужна команда в терминале;
- Windows и macOS: Docker Desktop ставится вручную.

## v1.0.13 - подключение подписки Codex держится

Дата выпуска: 10.09.2026. Исправительный выпуск по дефектам, найденным на
боевых установках.

- обновлённый ключ обновления Codex записывается обратно в `auth.json`:
  поставщик меняет его при каждом обновлении, и после перезапуска агент
  предъявлял отработанный ключ, подписка отзывалась с ошибкой 401; запись
  атомарная, права 0600, чужие поля файла целы, два процесса над одним файлом
  не мешают друг другу; если файл не пишется, агент работает в памяти и один
  раз предупреждает в журнале;
- `/connect` доступен владельцу и людям из белого списка канала, отказ называет
  адрес владельца; раньше при заданном владельце клиент, чья подписка и
  подключается, получал отказ;
- ответ хозяина машины на `/connect` опознаётся по времени файла, а не по
  изменению содержимого: повторное подключение поверх лежащего ключа работает;
  по таймауту различаются «хозяин не ответил» и «лежит прежний ответ от даты»;
  на установке без хозяина повторный `/connect` отвечает тем же честным
  «принять некому»;
- слежка за входом сверяет метку запроса и гасится при отмене; отмена и быстрый
  повторный `/connect` не затирают друг друга; запрос ложится на диск целиком;
- длинная генерация больше не обрывается на трёх минутах: общий потолок HTTP-запроса
  к модели снят у всех поставщиков, живость держат ожидание заголовков, ожидание
  следующего куска потока (десять минут, рассуждающая модель может молчать) и срок от
  вызывающего либо настройка `CAPYAGENT_MODEL_REQUEST_MIN` (умолчание 30 минут); обрыв по истёкшему сроку не
  повторяется трижды; раньше «Глубокий анализ» закупки падал через девять минут
  тремя одинаковыми обрывами;
- если поставщик замолчал, агент уходит к запасному вместо того, чтобы ждать
  впустую: раньше зависший поставщик держал ход около получаса и заканчивался
  отказом, теперь ответ приходит от запасного, а отказ основного виден в
  кабинете и в `doctor`; к молчащему стучимся один раз, а не трижды; истёкший
  срок запроса к запасному не уводит, у него времени столько же;
- ответ поставщика, который думает над ним дольше минуты, больше не
  обрывается: ожидание первого признака ответа у непотоковых поставщиков
  поднято до десяти минут, а сообщение об обрыве называет тот срок, который
  стоит у этого поставщика;
- нажатая человеком кнопка у карточки темы (например «Пропустить») исполняется
  агентом сразу, без обращения к модели и без повторного подтверждения; запреты
  и выключенные инструменты в силе; удаление темы по инициативе самой модели
  по-прежнему требует подтверждения.

### Ограничения v1.0.13

- эффект кнопок появляется с новыми карточками (модель помечает кнопку
  действием) и только в Telegram;
- отработанный ключ прежних установок не воскресает: нужен новый вход, дальше
  файл держится свежим;
- `codex` руками против каталога агента запускать нельзя: ключ ротируется, и
  сторонний запуск сожжёт сессию;
- остальное как в v1.0.12: относительные даты и тексты усердия на английском
  виде остаются русскими, терминал печатает цветной вывод команд буквами,
  установщики не подписаны и не notarized, коннекторам нужен уже установленный
  совместимый Python.

## v1.0.12 - панель причёсана: чат как главный экран

Дата выпуска: 09.09.2026.

- чат стал главным экраном: разговор открывается сразу, а разделы панели
  переехали в шапку и в выдвижной ящик;
- знакомство проходит прямо в чате, шаг за шагом, и его ответы помнит агент, а
  не браузер: начали на компьютере, продолжили с телефона;
- файлы прикладываются скрепкой в поле ввода: приложенный файл виден фишкой до
  отправки, остаётся в переписке после неё и называется тем именем, которым его
  назвали вы;
- список файлов относится к текущей беседе, а не ко всему агенту;
- беседы собраны в колонку слева, с группами по дням и поиском; в списке видно
  название и когда был последний ответ;
- карточки систем стали компактными: имя, состояние и действие в одной строке,
  отказ системы говорит человеческой фразой вместо технического следа;
- слово состояния у поставщика модели больше не обещает лишнего: «готова»
  стоит только там, где модель можно выбрать одним нажатием;
- английский вид панели стал английским по-настоящему: имена и описания
  встроенных систем, каталога MCP и наборов инструментов переведены;
  расширения остаются на языке их авторов;
- отказ Telegram при сохранении токена уложен в одну понятную фразу;
- терминал открывается отдельным полноэкранным видом с кнопкой возврата в чат.

### Ограничения v1.0.12

- относительные даты, ответы ассистента и тексты усердия на английском виде
  остаются русскими;
- терминал показывает цветной вывод команд (например `ls`) с управляющими
  последовательностями буквами; терминал по умолчанию выключен;
- коннекторам по-прежнему нужен уже установленный совместимый Python;
- установщики не подписаны сертификатом и не notarized: Gatekeeper и
  SmartScreen могут показать предупреждение.

## v1.0.11 - установка на macOS, честный фон и закрытые ходы

Дата выпуска: при выкладке (в собранном выпуске она стоит полем `released`
в `manifest.json`).

- macOS-сборка подписывается при сборке ad-hoc, без сертификата: скачанное
  приложение больше не объявляется повреждённым, система показывает обычное
  окно «незаверено», и запуск проходит через «Все равно открыть»;
- страница установки описывает первый запуск на macOS по шагам, мышью;
- задание по расписанию не оставляет висящий вопрос: опасное действие в
  фоновом прогоне получает отказ, а отказ записывается в журнал задания, в его
  последнюю ошибку и в журнал службы;
- окружение установленной службы читают только команды, которые её
  обслуживают; свой второй экземпляр поднимается рядом ключом
  `--без-окружения-службы`;
- один каталог данных занимает один процесс: второй получает отказ с внятной
  причиной, а не тихо делит с первым бота и данные;
- ожидающее подтверждения действие сохраняется на диск до публикации,
  загружается строго и не остаётся только в памяти после ошибки записи;
- список ожидающих подтверждений отличает здоровый пустой список от
  недоступного хранилища и во втором случае отвечает HTTP 503;
- ошибка загрузки профиля команды или её правил закрывает доступ, а правила
  проверяются повторно перед завершением хода;
- каталог профилей команды публикует только целую ревизию, защищается от
  устаревшего писателя и сохраняет последнюю корректную версию при ошибке;
- HTTP-вызов передаёт сторожу и коннектору отдельные неизменяемые снимки
  точных аргументов, отклоняет неоднозначный JSON и закрывается до эффекта;
- дочерний исполнитель получает свежий снимок прав и общий родительский счёт,
  но не получает родительские правила, разговор и хранилища памяти;
- привилегированный мост desktop принимается только от ожидаемого главного
  окна и доверенного локального документа; вторичные окна его не получают;
- явно выбранный файл учётных данных Codex остаётся единственным источником:
  при его отсутствии адаптер не переключается молча на другой аккаунт;
- открытый навык удерживается в контексте между ходами: тело подаётся заново
  в каждом ходу, с пределами в двенадцать ходов, полчаса и два навыка на
  разговор, а имя и остаток ходов видны в `/статус` и `/навыки`;
- модели и ключи собраны в разделе «Настройки»;
- кеш запроса к модели включён по умолчанию там, где он даёт выгоду.

### Ограничения v1.0.11

- коннекторам по-прежнему нужен уже установленный совместимый Python;
  свой Python в комплекте и настольный набор коннекторов ещё впереди;
- установщики не подписаны сертификатом и не notarized: Gatekeeper и
  SmartScreen могут показать предупреждение.

## v1.0.10 - desktop без лишних кругов

- настроенный пользователь при запуске приложения попадает сразу в чат, а
  первый запуск без модели остаётся в безопасном мастере;
- встроенный чат больше не дублирует боковую панель, не просит уже переданный
  токен и показывает понятное состояние загрузки;
- поправлены размеры интерактивных элементов, клавиатурный фокус,
  переполнение вкладок и режим уменьшенного движения;
- найденный домашний путь показывается через `~`, но при выборе сверяется с
  заново найденным источником;
- выбранный preview памяти корректно добавляется и в уже заполненный черновик,
  после чего пользователь проверяет и сохраняет текст сам;
- нативная release-матрица теперь запускает распакованное desktop-приложение
  и проверяет его ядро авторизованным запросом;
- инструкции установки переведены на реальные файлы GitHub Release, исправлены
  имена macOS-артефактов и порядок проверки серверного архива.

## v1.0.9 - подготовка публичного выпуска

- добавлен безопасный экран первого запуска: характеристики устройства,
  найденные локальные способы отвечать и известные источники памяти;
- найденный вход ChatGPT через Codex можно выбрать отдельной кнопкой;
  токены не показываются, а применение явно сообщает о необходимости
  перезапуска;
- превью правил и заметок можно добавить только в редактируемый черновик
  портрета. Исходные файлы не меняются и ничего не импортируется молча;
- desktop-приложение получило минимальный защищённый мост для перезапуска
  после выбора провайдера;
- релизные проверки отделяют публичные материалы от внутренних документов.

## v1.0.8

- улучшены локальная панель, диагностика, память, коннекторы и обновление;
- установочные архивы содержат контрольные суммы, манифест и SBOM;
- добавлены проверки комплектности desktop-артефактов.

## Ограничения выпуска

Поддерживаемые платформы и фактически приложенные установщики перечисляются
в манифесте конкретного выпуска. Непроверенный артефакт не считается готовым.
