diff --git a/NYLAS_ANALYSIS.md b/NYLAS_ANALYSIS.md new file mode 100644 index 0000000..7cb1a4b --- /dev/null +++ b/NYLAS_ANALYSIS.md @@ -0,0 +1,103 @@ +# Анализ: Nylas CLI как альтернатива текущему стеку + +**Дата:** 2026-09-11 +**Статус:** ❌ Не подходит — отклонено. +**Инициатор:** Вопрос пользователя «может этот проект поможет упростить получение и отправку писем?» + +--- + +## TL;DR + +Nylas — это **облачный SaaS** (данные идут через серверы Nylas), а не +локальный CLI для работы с произвольным IMAP. Для нашего сценария +(локальный архив корпоративной почты + LLM-ассистент на bigbox) он +добавляет зависимость от провайдера, плату и утечку данных третьей +стороне — без выигрыша в функциональности. + +--- + +## Что такое Nylas на самом деле + +- Облачный платформенный сервис: `api.us.nylas.com` +- Три продукта за одним API-ключом: **Connect** (Email/Calendar/Contacts/Scheduler + API), **Notetaker** (транскрибация встреч), **Agent Accounts** (API-провижинг + почтовых ящиков) +- Есть **CLI** (`cli.nylas.com`) — но он работает **только через облако Nylas**: + нужен API-ключ, OAuth или BYO-грант, аккаунт в Dashboard. Это НЕ локальный + инструмент уровня `himalaya`, который ходит напрямую по IMAP +- Поддерживаемые провайдеры: Google, Microsoft, Exchange (EWS), iCloud, Yahoo, + generic **IMAP**, Zoom + +## Как подключается IMAP (наш случай mail.corpoffice.tech) + +1. Создать аккаунт Nylas, приложение, получить API-ключ (платно в проде) +2. Подключить аккаунт через **Hosted OAuth** (пользователь вводит пароль в + браузере/форме Nylas) или **Bring Your Own (BYO)**: + ```bash + curl -X POST 'https://api.us.nylas.com/v3/connect/custom' \ + -H 'Authorization: Bearer ' \ + -H 'Content-Type: application/json' \ + -d '{ + "provider": "imap", + "settings": { + "imap_username": "e.storozhenko", + "imap_password": "...", + "imap_host": "mail.corpoffice.tech", + "imap_port": 143, + "smtp_host": "...", + "smtp_port": 465 + } + }' + ``` +3. Дальше работать через `nylas email list` / REST API `api.us.nylas.com` + +## Проблемы Nylas для нашего проекта + +| # | Проблема | Детали | +|---|-----------|--------| +| 1 | **Приватность** | Все письма копируются на серверы Nylas (US/EU). Корпоративная почта vinogorod у третьей стороны — неприемлемо | +| 2 | **Стоимость** | Платная подписка + регистрация домена на Nylas. Локальный стек бесплатен | +| 3 | **Contacts API для generic IMAP** | Требует **активации по контракту** (платно). У нас контакты уже работают локально через LLM (81 контакт) | +| 4 | **Ротация IMAP-пароля** | У нас пароль IMAP **ротируется** (уже документировано в памяти). Грант Nylas при смене пароля **умирает** → реавторизация через OAuth | +| 5 | **SMTP** | Для отправки нужно явно настраивать SMTP в гранте (опция `smtp_required`), всё равно через облако | +| 6 | **UIDVALIDITY re-index** | Nylas пере-индексирует папку при смене UIDVALIDITY — на медленных корпоративных IMAP это «не поддерживается» (по их же докам) | +| 7 | **Нет выигрыша** | Поиск (SQLite FTS5), контакты (LLM), индексация (Qdrant в планах) — всё уже есть или планируется локально | + +## Сравнение с текущим стеком + +| Критерий | Himаlaya + наш пайплайн (сейчас) | Nylas CLI | +|---|---|---| +| Локальность | Прямой IMAP с bigbox, всё на диске | Облако Nylas (письма идут через них) | +| Стоимость | Бесплатно | Платная подписка + домен | +| Отправка | Нужен SMTP-конфиг (у нас только чтение) | SMTP в гранте, но через облако | +| Контакты | Локальный LLM-экстрактор (работает) | Платный контракт для generic IMAP | +| Пароль | Ротация → правка конфига (5 сек) | Ротация → грант умирает, реавторизация | +| Поиск | Локальный SQLite FTS5 | Облачный API | +| Приватность | Полная (данные на bigbox) | Письма копируются Nylas | + +## Когда Nylas имел бы смысл + +- Строим **мультипровайдерный SaaS** (подключение Gmail/Outlook/iCloud + пользователей через OAuth) +- Нужна транскрибация встреч (Notetaker) или API-провижинг ящиков + (Agent Accounts) без своей инфраструктуры +- Облачное хранение почты не проблема (не корпоративная/чувствительная) + +## Что может упростить отправку вместо Nylas + +1. **Himalaya `message send`** — SMTP уже почти настроен (в + `~/.config/himalaya/config.toml` есть аккаунт `hermes` с SMTP jino.ru; + для vinogorod добавить `[accounts.vinogorod.message.send]` с + `smtp.corpoffice.tech:465`) +2. **msmtp/ssmtp + `mail`** — классика для крон-скриптов +3. Python `smtplib` — если нужна программная отправка с вложениями + +## Вывод + +Nylas CLI **не подходит**: добавляет облачную зависимость, плату и утечку +корпоративной почты третьей стороне, при этом не даёт ничего, чего бы у +нас уже не было локально. Текущий стек (Himalaya → Python → SQLite → +Ollama → Yandex Disk) закрывает задачу полностью и бесплатно. + +**Решение:** продолжать с Himalaya; при необходимости отправки — настроить +SMTP в himalaya-конфиге или использовать msmtp. \ No newline at end of file diff --git a/README.md b/README.md index 1667838..423cb36 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,8 @@ **Статус:** Фаза 1.5 — Индексация, поиск, дайджесты + Адресная книга (в работе) -Подробнее: [STATUS.md](STATUS.md) \ No newline at end of file +Подробнее: [STATUS.md](STATUS.md) + +## Оценка альтернатив + +- [Анализ Nylas CLI](NYLAS_ANALYSIS.md) — почему Nylas **не подходит** для локального архива (2026-09-11) \ No newline at end of file