hermes
65c167acc2
Session close 2026-09-15: gitverse source of truth, gitea mirror, token locations in AGENT.md
2026-09-15 17:47:29 +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
2a597f7325
chore: Radicale/Vikunja подняты в docker (2026-09-13), STATUS обновлён
2026-09-13 15:48:28 +00:00
hermes
9603f3b1c5
docs: пути Radicale/Vikunja обновлены на /opt/hermes/email-assistant/
2026-09-12 16:18:02 +00:00
hermes
4252b596f3
docs: блок «Ресурсы проекта» — расположение и доступ к Caddy/Radicale/Vikunja/WG/SSH
2026-09-12 10:16:29 +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
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