mirror of
https://gitverse.ru/kpa39l/email-assistant.git
synced 2026-09-29 21:25:10 +00:00
7550aff102
- 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, формат дат)
5.2 KiB
5.2 KiB
Design: Убрать Vikunja, задачи через Radicale (VTODO)
Context
- Radicale (CalDAV/CardDAV) развёрнут, календари Личный/Рабочий/Задачи на ФС. Публично: cal.nixg.ru (Caddy vps02 → 10.8.0.2:5232).
- Vikunja развёрнут (compose
/opt/hermes/email-assistant/vikunja/, контейнерыvikunja+vikunja-dbpostgres, :3456), но админ/API-токен НЕ созданы — это блокер для обработчикаtaskв classification-чейндже. - Календарь «Задачи» в Radicale уже существует (VTODO-совместимый).
- Android: jtx board синхронизирует VTODO по CalDAV через DAVx5.
Goals / Non-Goals
Goals:
- Убрать Vikunja как лишнюю сущность.
- Задачи создаются через Radicale VTODO (календарь «Задачи»).
- Обработчик
taskв classification-чейндже пишет VTODO, не зависит от Vikunja. - Обновить документацию/список задач.
Non-Goals:
- Не мигрируем данные из Vikunja (их там нет — сервис не администрирован).
- Не удаляем данные Radicale — только добавляем VTODO.
- Не трогаем Caddy, если tasks.nixg.ru ещё не настроен (только не настраивать).
Decisions
D1: Vikunja выводится из эксплуатации
Контейнеры vikunja и vikunja-db останавливаются и удаляются:
cd /opt/hermes/email-assistant/vikunja
docker compose down -v # или docker stop vikunja vikunja-db && docker rm ...
- Данные (volume
vikunja-db) можно удалить (сервис не использовался), либо сделать бэкап перед удалением (аккуратно — «не удалять данные пользователя»). Решение: сделать копию volume/postgres-дампа на всякий случай, затем удалить контейнеры; compose.yml/.env пометить deprecated или удалить после подтверждения пользователя.
D2: Обработчик task → Radicale VTODO
В чейндже email-classification-handlers обработчик task меняется с
«Vikunja API POST» на «Radicale CalDAV PUT VTODO»:
- URL:
https://cal.nixg.ru/estorozhenko/<urlencoded 'Задачи'>/<uid>.ics - Auth: Basic (estorozhenko:пароль Radicale)
- Body: VCALENDAR + VTODO (SUMMARY=тема, DESCRIPTION=ссылка на email.md, при наличии даты — DTSTART/DUE)
- Пометить
handled_task: trueпосле успешного PUT (201/204) - Идемпотентность: если
handled_task: true— пропустить
D3: tasks.nixg.ru
- Если reverse proxy уже настроен в Caddy — закомментировать/убрать.
- Если нет — не настраивать. Единственный домен: cal.nixg.ru.
D4: Android — jtx board
Для задач (VTODO) используется jtx board, синхронизация через DAVx5 (Radicale). В STATUS.md зафиксировать: «задачи = Radicale VTODO, jtx board».
D5: Чейндж email-classification-handlers — правка
В email-classification-handlers:
- specs/email-handlers/spec.md: «Создание задачи в Vikunja» → «Создание задачи в Radicale (VTODO)»
- design.md: убрать Vikunja-ветку, заменить на Radicale VTODO
- tasks.md: задача 3.3 (Vikunja API) → Radicale VTODO; задача 4.1 (админ Vikunja) → удалить Это правки в активном чейндже — внести сразу.
Risks / Trade-offs
- Vikunja данные — если в Vikunja что-то было создано, удаление volume потеряет это. Митигирует: бэкап volume/postgres-дамп перед удалением.
- VTODO-совместимость клиентов — Radicale хранит VTODO как файлы, jtx board их читает. Риск низкий (стандарт CalDAV).
- Ссылка на email.md в DESCRIPTION — на телефоне путь недоступен (локальный диск), но виден в reason/задаче. Это ок: задача показывает тему + обоснование.
- Уже развёрнутый Vikunja — вывод из эксплуатации надо делать аккуратно, с бэкапом и подтверждением (не удалять данные пользователя без спроса).
Verification
docker ps— контейнеры vikunja/vikunja-db отсутствуют.curl -X PROPFIND https://cal.nixg.ru/estorozhenko/Задачи/— календарь доступен.- Создать VTODO через обработчик →
curl GET .../Задачи/<uid>.ics— VTODO есть. openspec validate remove-vikunja-use-radicale-tasks— valid.