hermes
0d86f843c3
AGENT.md: note gitea pull mirror created (estorozhenko/email-assistant)
2026-09-15 17:31:30 +00:00
hermes
3e7b1dd618
Add AGENT.md: GitVerse is source of truth (policy + commands)
2026-09-15 17:20:52 +00:00
hermes
39df85b51c
fix: архивация/вложения больше не помечают письма прочитанными (Seen)
...
Причина: himalaya message read и attachment download используют IMAP BODY[],
который по RFC 3501 выставляет \Seen на сервере (Microsoft Exchange).
Пользователь: письма в ящике после скачивания становятся прочитанными.
Фикс:
- чтение тела: himalaya message read --preview (не ставит Seen)
- вложения: fetch_attachments_imaplib() — сырой IMAP stdlib (socket+ssl),
UID FETCH (BODY.PEEK[]), папки в modified UTF-7, литералы до 1.5МБ,
MIME-encoded words, фолбэк himalaya + flag remove seen
Проверено живьём: UID 14200 (INBOX, docx 1.1МБ) флаги ()->() — Seen не выставлен.
Openspec: change no-mark-seen-on-archive заархивирован (2026-09-14-no-mark-seen-on-archive), 7/7 validate OK
2026-09-14 08:08:48 +00:00
hermes
8bff6f9aa4
Задача 8: классификация и обработчики — живой прогон, cron, archive change
2026-09-14 04:50:50 +00:00
hermes
7550aff102
feat: классификация писем Qwen3:8b + обработчики (urgent→TG, task→VTODO, meeting→VEVENT)
...
- mail_archive.py: фикс вложений himalaya --dir → --downloads-dir; attachments/ только при has_attachment; идемпотентно
- email_classifier.py: Qwen3:8b (Ollama) → теги info/urgent/task/meeting в frontmatter email.md
- email_handlers.py: urgent→Telegram (Bot API+SOCKS5), task→Radicale VTODO, meeting→Radicale VEVENT; handled_* идемпотентность; --dry-run
- .gitignore: игнор *.env.bak*
- openspec: чейндж email-classification-handlers (в работе)
- STATUS/TODO/WALKTHROUGH: прогресс сессии, подводные камни Radicale (http.client, Depth:1, формат дат)
2026-09-13 20:35:58 +00:00
hermes
8ea022f5c0
CardDAV: двусторонний синк контактов с Radicale (push+pull) + docs DAVx5/Caddy
...
- scripts/contacts_caldav_sync.py: push 81 контакт → vCard (Radicale :5232),
pull правок/создания/удаления с телефона → contacts.json (ETag сверка,
soft-delete, конфликты 412 → приоритет телефону, лог caldav-sync.log)
- fix(contacts_extractor): перестройка by_email-индексов после sort()
- STATUS.md: раздел DAVx5 + Caddy (Authorization/handle_path/X-Script-Name),
Задача 3 (синхронизация с телефоном) = следующая сессия
- tasks.md: отмечены 1.x-3.x/V (реализовано и протестировано), добавлен
раздел 5 (Caddy + DAVx5 + jtx board) для следующей сессии
2026-09-13 17:21:51 +00:00
hermes
17252ebfa9
openspec: contacts-caldav-server — двусторонний синк (правки с телефона → в базу)
2026-09-13 16:07:27 +00:00
hermes
de07fae246
openspec: change contacts-caldav-server (CardDAV sync для контактов из почты)
2026-09-13 15:59:49 +00:00
hermes
2a597f7325
chore: Radicale/Vikunja подняты в docker (2026-09-13), STATUS обновлён
2026-09-13 15:48:28 +00:00
hermes
02e2b87072
fix: Vikunja volumes — локальные папки ./db и ./files в корне сервиса (без named volumes)
2026-09-12 17:59:03 +00:00
hermes
868f85b686
docs: пути Radicale/Vikunja обновлены на /opt/hermes/email-assistant/, отмечены выполненные задачи (R1-R3, V1, O1)
2026-09-12 16:18:45 +00:00
hermes
9603f3b1c5
docs: пути Radicale/Vikunja обновлены на /opt/hermes/email-assistant/
2026-09-12 16:18:02 +00:00
hermes
89e9e3441d
feat: Radicale (CalDAV) и Vikunja (задачи) перенесены в каталог проекта
...
- radicale/: compose, config, .env (данные в radicale/data/ — gitignored)
- vikunja/: compose (postgres + vikunja :3456), .env (gitignored)
- .gitignore: radicale/data/ (пароли/коллекции не в репо)
- Блокер: docker на bigbox не может создавать контейнеры (systemd1 D-Bus timeout) — нужен внешний рестарт
2026-09-12 16:17:53 +00:00
hermes
4252b596f3
docs: блок «Ресурсы проекта» — расположение и доступ к Caddy/Radicale/Vikunja/WG/SSH
2026-09-12 10:16:29 +00:00
hermes
f44bc27ce1
OpenSpec: разнести openspec по проектам
2026-09-11 17:30:17 +00:00
hermes
757f3413e9
docs: итоги сессии 2026-09-11 — STATUS обновлён, TODO/WALKTHROUGH созданы
...
- STATUS: дата 2026-09-11, реальные метрики (4884 письма, 81 контакт),
cron id реальные (5f2305b2bbf8/ea0fd1ab4f93), блок портфеля веб-UI
- TODO.md: журнал задач (2026-07 → 2026-09-11)
- WALKTHROUGH.md: капитанский журнал (Фаза 1.7, Nylas, ФС vs Maildir,
Radicale развёрнут, блокер с коллекциями)
- PLAN_WEBUI.md: план портфеля (был untracked)
2026-09-11 14:31:06 +00:00
hermes
e31b5f2552
docs: анализ формата хранения ФС vs Maildir (задача 4)
...
- STORAGE_ANALYSIS.md: сравнение email.md / Maildir / MBOX / notmuch
по 7 критериям; рекомендация — остаться на email.md + добавить tags в
frontmatter + опциональный экспорт в Maildir
- README.md: ссылка на анализ в разделе «Оценка альтернатив»
- Данные не изменены (4884 email.md до и после)
2026-09-11 13:13:21 +00:00
hermes
d4bf3ed1ad
docs: анализ Nylas CLI — не подходит (отклонено)
...
Nylas — облачный SaaS, а не локальный CLI для произвольного IMAP.
Проблемы: утечка корпоративной почты третьей стороне, платность,
гибель IMAP-гранта при ротации пароля, платный Contacts API.
Вывод: продолжаем с Himalaya; для отправки — SMTP в himalaya/msmtp.
2026-09-11 12:54:11 +00:00
hermes
c7430d1b8a
feat: динамическое обнаружение подпапок INBOX (Фаза 1.7)
...
- get_inbox_subfolders(): парсит 'himalaya folder list', находит 136
подпапок INBOX (вместо хардкода 18), fallback на INBOX_SUBFOLDERS
- --all использует FOLDERS + get_inbox_subfolders()
- EXCLUDED_FOLDERS: Trash/Drafts/RSS/Junk/Spam/Archive не архивируются
- ENVELOPE_TIMEOUT=180: INBOX (14k писем) перечисляется >60с
- run_cmd() ловит FileNotFoundError (himalaya вне PATH)
- mail-archive.sh: HOME=/home/estorozhenko, цикл переписан на --all --drain
- STATUS.md: Фаза 1.7 ✅
2026-09-11 11:58:27 +00:00
hermes
7aa0d191db
Add README, .gitignore, gitea config, push mirror task
2026-07-19 16:20:22 +00:00
hermes
004977b1f8
Initial commit: Email Assistant project
2026-07-19 16:19:14 +00:00