# История изменений (/ru/docs/mail/changelog)

Заметные изменения в `@wirecat/mail-cli`. По одному разделу на версию, новые сверху.

## 0.1.1 — 01.11.2026 [#011--01112026]

### Исправлено [#исправлено]

- **Документация ведёт от `sync` к первому найденному письму и честно говорит, как хранится пароль.** Установка, работа с
  инструментом и главная страница документации заканчиваются командой `memo search mail`: `mail` наполняет общее хранилище, а memo
  ищет в нём. Пароль хранится в связке ключей, при её сбое переходит в закрытый файл и может приходить из `MAIL_PASSWORD`; из stdin он
  никогда не читается. `rate_limited` называет обе причины: сервер ограничивает аккаунт, и `sync` исчерпал собственный бюджет запросов.
  Документация также сообщает, что `memo mail delete` перемещает почту Gmail в корзину.

## 0.1.0 — 31.10.2026 [#010--31102026]

### Добавлено [#добавлено]

- **`mail` читает почтовый ящик по IMAP в общее хранилище WireCat и никогда не меняет сам ящик.** `memo` и другие
  инструменты WireCat затем ищут и читают эту почту на вашем компьютере. `mail` не отправляет почту.
- **`session start` входит в профиль по паролю приложения.** Новому профилю нужен `--address`, а в терминале адрес
  спросят сами. Сервер находится по встроенной таблице (Яндекс, Gmail, iCloud, Mail.ru, Fastmail), по записи MX, по
  ISPDB Thunderbird и по файлу autoconfig домена; `--provider` или `--host` вместе с `--port` и `--security` задают его
  вручную и пропускают эти поиски. Команда показывает шаги подготовки ящика, спрашивает пароль приложения без эха (или
  читает `MAIL_PASSWORD`), проверяет его на сервере и только потом сохраняет профиль, а пароль кладёт в связке ключей
  ОС. Без терминала она ничего не спрашивает и называет недостающий параметр или переменную. Пароль приложения, который
  Himalaya уже хранит в связке ключей, используется, если у `mail` своего нет. Шаги для каждого провайдера описаны на
  странице [Подготовка почтового ящика](https://github.com/WireCatLabs/mail-cli/blob/main/docs/providers.md). Outlook и
  Microsoft 365 принимают только OAuth, поэтому `session start` пока отказывается с ними работать.
- **`session status`, `session end` и `session list` управляют входом.** `session status --check` входит на сервер и
  доказывает, что пароль ещё работает; `session end` забывает пароль и оставляет синхронизированную почту; `session list`
  не требует профиля и показывает профили на этом компьютере.
- **`account check` и `folders list`** входят на сервер и показывают, что он поддерживает, а также папки с их ролью и
  числом писем.
- **`sync` читает новую почту в общее хранилище и пропускает то, что там уже есть.** Если `--folder` или профиль не
  называют другие папки, читаются INBOX и Sent, сначала новые, начиная с `--since-time` (по умолчанию последние
  30 дней). Одна дата начинается с местной полуночи, а в ответе указаны часовой пояс и окно в UTC. `--limit` ограничивает
  число новых писем за один запуск, `--rescan` заново перечисляет всё окно. Сохраняются текст и заголовки, вложения не
  сохраняются.
- **Большой ящик синхронизируется за несколько запусков.** `sync` тратит бюджет запросов, рассчитанный по сроку (15 минут
  в терминале, 45 секунд через MCP; `--timeout` и `--max-pages` меняют его), сохраняет после каждой части и отвечает
  `state: partial` с командой для продолжения. `mail <profile> status` показывает, как далеко продвинулась синхронизация,
  в том числе пока она идёт. Если часть писем осталась непрочитанной или удаления не проверялись, ответ сообщает об этом
  в `meta.issues`.
- **`sync` переживает ненадёжный сервер.** Оборванное соединение открывается заново после короткой паузы, и запуск
  продолжается; письмо, на которое сервер сейчас не может ответить, запрашивается ещё раз в конце запуска и остаётся
  на следующий. На сервере без идентификаторов писем, например на Яндексе, каждое новое письмо скачивается один раз, а
  уже сохранённая почта не читается заново.
- **ИИ-агенты работают с `mail` через MCP и навык.** `mail <profile> mcp serve` предлагает агенту команды профиля по
  stdio или по HTTP за вашим собственным туннелем с `--http`; что можно запускать, решают разрешения профиля, а
  `--permission` лишь ужесточает их. `mail skill install` устанавливает инструкции инструмента для Claude Code, Codex,
  Gemini CLI и OpenClaw, а для Hermes — с `--for hermes`.
- **Если связка ключей не работает, пароль приложения попадает в закрытый файл, и об этом не спрашивают.**
  `session start` кладёт пароль в `credentials.json` (режим 600) в папке настроек, один раз сообщает об этом в stderr и
  отвечает `credential_storage`. `--credential-storage file` выбирает файл сразу, но это не рекомендуется.
  `session status` может ответить `password_from: "file"`.
- **Запуск с перенесёнными папками никогда не удаляет пароль приложения владельца из связки ключей ОС.** Такой запуск
  читает пароль владельца, но не заменяет и не удаляет его, а новый пароль кладёт во временную запись. `session end` для
  пароля владельца ничего не удаляет и отвечает `kept: "owners-sign-in"`.
- **`wcat mail` запускает инструмент, а `wcat --help` его перечисляет.** Пакет устанавливает `wcat-mail` рядом с `mail`,
  а `wcat-mail --wcat-describe` печатает для `wcat` имя, версию и описание инструмента.
- **`doctor --online` сообщает, опубликована ли более новая версия.** К почтовому серверу он не обращается.
- **Команды, общие для всех инструментов WireCat:** `doctor`, `commands`, `config`, `skill`, `runs` и `upgrade`.
