ee7bec11e3
The extraction seam landed on the previous branch but nothing fed it. This adds the daemon that does: every interval it opens one mailbox read-only (EXAMINE + BODY.PEEK, so reading leaves no \Seen behind), fetches the UIDs it has not handed over yet, and posts each message to core over ingest_mail. Core runs the model and writes task candidates; this daemon writes nothing and cannot create a reminder. It is a separate daemon because of the credential. mavpoll set the precedent with the zenmoney token (#125): the module talking to the third party holds the secret, reads it from a file so it never lands in argv, in docker-compose.yml or in shell history, and core never sees it. There is deliberately no -password flag, and a test asserts that. Off unless configured at both ends: without -password-file the daemon refuses to start, and if core has no email block the first ingest returns ErrUnknownMethod, which disables the reader instead of hammering a socket that will keep refusing. A seen-UID state file (0600, atomic write) keeps a restart from re-extracting the whole lookback window; correctness does not depend on it, since capture dedupes on normalised text. Logs are counts and UIDs — no subject, sender or body. Verified with an in-process IMAP server and a fake core: bulk mail is filtered before core is asked, seen UIDs are not re-fetched, a failed ingest is retried next poll, ErrUnknownMethod stops at the first message, and state survives a restart. The live half is untested by design — no IMAP credential exists on this box; setup is written up as QA steps. Vikunja #246
54 lines
1.1 KiB
Plaintext
54 lines
1.1 KiB
Plaintext
# Built binaries (root only)
|
|
/mavend
|
|
/mavenclient
|
|
/mavsttd
|
|
/mavttsd
|
|
/mavweb
|
|
/mavpoll
|
|
/mavcaldav
|
|
/mavwaked
|
|
/mavmaild
|
|
|
|
# Certs (private keys, don't commit)
|
|
certs/
|
|
|
|
# Dependencies (fetch/build, not vendored).
|
|
# Both forms on purpose: 'deps/' misses a symlink named deps, and agents working
|
|
# in a git worktree symlink these in from the main checkout.
|
|
deps/
|
|
deps
|
|
|
|
# ML models (large, downloaded separately) — specific dirs, not blanket,
|
|
# because models/seeds/*.txt are small, tracked files the classifier needs.
|
|
/models/embedder/
|
|
/models/stt/
|
|
/models/tts/
|
|
/models/llm/
|
|
# Symlink forms, same reason as deps above.
|
|
/models/embedder
|
|
/models/llm
|
|
|
|
# Runtime data
|
|
*.db
|
|
|
|
# Deploy secret (the at-rest db key) — never commit
|
|
deploy/db_key.env
|
|
# Deploy secret (telegram bot token + chat id) — never commit
|
|
deploy/telegram.env
|
|
# zenmoney API token, read by mavpoll (never in argv, never committed)
|
|
deploy/zenmoney.token
|
|
# IMAP password, read by mavmaild (never in argv, never committed)
|
|
deploy/imap.password
|
|
|
|
# Temp files
|
|
/tmp/
|
|
|
|
# opencode config (per-project, not for sharing)
|
|
opencode.json
|
|
|
|
# Test coverage output
|
|
coverage.out
|
|
|
|
# Agent worktrees and local agent state
|
|
.claude/
|