From c5760db43db8f04b3e65ad92261c4c546e4e6d10 Mon Sep 17 00:00:00 2001 From: Documenter Date: Tue, 13 Oct 2026 10:46:21 +1100 Subject: [PATCH] docs: Phase 8 documentation - Gitea, Obsidian, Outline, Vikunja, map (AUD-74) - README: architecture Mermaid, Phase 8 status, Phase 7 endpoints, Documentation index - docs/outline/: AI-context collection (index, system, config, code map, runbook) - docs/email-agent-architecture.mmd + rendered PNG + Archify map (showcase pass) - docs/vikunja-tasks.json (Vikunja project 17, tasks 179-185) - docs/phase8-documentation.md evidence --- README.md | 108 +- docs/archify/email-agent.architecture.json | 58 + docs/diagrams/email-agent-architecture.png | Bin 0 -> 145595 bytes docs/email-agent-architecture.mmd | 41 + docs/email-agent-map.html | 13716 +++++++++++++++++++ docs/outline/00-index.md | 44 + docs/outline/01-system-overview.md | 98 + docs/outline/02-config-and-env.md | 86 + docs/outline/03-code-map.md | 158 + docs/outline/04-agent-runbook.md | 143 + docs/phase8-documentation.md | 134 + docs/vikunja-tasks.json | 15 + 12 files changed, 14575 insertions(+), 26 deletions(-) create mode 100644 docs/archify/email-agent.architecture.json create mode 100644 docs/diagrams/email-agent-architecture.png create mode 100644 docs/email-agent-architecture.mmd create mode 100644 docs/email-agent-map.html create mode 100644 docs/outline/00-index.md create mode 100644 docs/outline/01-system-overview.md create mode 100644 docs/outline/02-config-and-env.md create mode 100644 docs/outline/03-code-map.md create mode 100644 docs/outline/04-agent-runbook.md create mode 100644 docs/phase8-documentation.md create mode 100644 docs/vikunja-tasks.json diff --git a/README.md b/README.md index 20c8584..6e839d8 100644 --- a/README.md +++ b/README.md @@ -7,34 +7,59 @@ replies, and answers the Hub. The build spec is [`AGENTS.md`](AGENTS.md). `ORIGINAL_NOTES.md` is archived pre-planning material and is not authoritative. +## Architecture + +```mermaid +flowchart LR + SAM["Sam
phone or desktop browser"] --> CADDY["Caddy on .35
mail.lab.audasmedia.com.au"] + CADDY --> UI["HTMX dashboard
login, inbox, rules, reports"] + UI --> DB[("SQLite
email_agent_data")] + UI --> GMAIL["Gmail
IMAP :993 / SMTP :587 (IPv4)"] + UI --> JEV["JEV / TypeSafe
classify"] + UI --> OMNI["OmniRoute :20129
draft reply"] + UI --> APPRISE["Apprise :8210
summary email"] + HUB["Central AI Hub :8788"] --> API["Hub API
/capabilities /ask /notify"] + API --> DB + N8N["n8n schedule"] --> JOBS["CLI jobs
-fetch -classify -summary-send"] + JOBS --> DB +``` + +Sources: [`docs/email-agent-architecture.mmd`](docs/email-agent-architecture.mmd) +and [`docs/email-agent-map.html`](docs/email-agent-map.html). Interactive map: +. + ## Status -**Phase 7 — Summary and Hub; retention.** The Go skeleton, session login, -and HTMX dashboard (Phase 1), real mail over **IMAP with an app password, -forced to IPv4** (Phase 2), **JEV classification** (Phase 3), **bulk triage -actions** (Phase 4), **reply drafts** (Phase 5), and now **unsubscribe -detection and the rules editor** (Phase 6). Open a message to read it, draft a -reply with the LLM through **OmniRoute** from a template, edit it, and send it -over Gmail SMTP (IPv4 + STARTTLS). A reply is sent **as the address the mail -arrived at** (`X-Pm-Original-To`, FR-15) and returns to the original sender; the -reply sets `In-Reply-To`/`References` so Gmail keeps the thread, and the -original is filed under its `Replied-to/
` label. Sending is a -deliberate UI action with a confirmation — there is no auto-send (§10). The -**rules editor** (`/rules`) saves and versions the plain-text rules that JEV and -the reply model read. **Unsubscribe detection** (`/unsubscribe`) finds RFC -2369/8058 links and body links, keeps a domain ignore list, and records what Sam -marks — it **never follows a link**. Every action, including drafts, sends, -rules edits, and unsubscribe marks, is appended to `actions_log` (FR-13). -**Phase 7** adds the daily **summary** (`-summary`, `-summary-send`; delivered -by email through Apprise) and the read-only **Hub API** (`/capabilities`, -`/ask`, `/notify`). **Retention** (AGENTS.md §7) is enforced by the bounded -`-retain` job: it clears message bodies older than one month, keeps metadata, -and caps the append-only `actions_log`; see -[`docs/retention.md`](docs/retention.md). See -[`docs/phase7-summary-hub.md`](docs/phase7-summary-hub.md) for Phase 7, -[`docs/phase6-unsubscribe.md`](docs/phase6-unsubscribe.md) for the phase evidence, -[`docs/phase5-replies.md`](docs/phase5-replies.md) for Phase 5, and -[`docs/phase4-triage.md`](docs/phase4-triage.md) for Phase 4. +**Complete and deployed.** All eight AGENTS.md §11 phases are done. The Go +skeleton, session login, and HTMX dashboard (Phase 1), real mail over **IMAP with +an app password, forced to IPv4** (Phase 2), **JEV classification** (Phase 3), +**bulk triage actions** (Phase 4), **reply drafts** (Phase 5), **unsubscribe +detection and the rules editor** (Phase 6), and the **daily summary by email plus +the read-only Hub API** (Phase 7) run on `.13` behind Caddy. Phase 8 documents +the project across Gitea, Obsidian, Outline, Vikunja, and the architecture map. + +Open a message to read it, draft a reply with the LLM through **OmniRoute** from +a template, edit it, and send it over Gmail SMTP (IPv4 + STARTTLS). A reply is +sent **as the address the mail arrived at** (`X-Pm-Original-To`, FR-15) and +returns to the original sender; the reply sets `In-Reply-To`/`References` so +Gmail keeps the thread, and the original is filed under its +`Replied-to/
` label. Sending is a deliberate UI action with a +confirmation — there is no auto-send (§10). The **rules editor** (`/rules`) +saves and versions the plain-text rules that JEV and the reply model read. +**Unsubscribe detection** (`/unsubscribe`) finds RFC 2369/8058 links and body +links, keeps a domain ignore list, and records what Sam marks — it **never +follows a link**. Every action, including drafts, sends, rules edits, and +unsubscribe marks, is appended to `actions_log` (FR-13). **Phase 7** adds the +daily **summary** (`-summary`, `-summary-send`; delivered by email through +Apprise) and the read-only **Hub API** (`/capabilities`, `/ask`, `/notify`). +**Retention** (AGENTS.md §7) is enforced by the bounded `-retain` job: it clears +message bodies older than one month, keeps metadata, and caps the append-only +`actions_log`; see [`docs/retention.md`](docs/retention.md). Phase evidence: +[`docs/phase7-summary-hub.md`](docs/phase7-summary-hub.md), +[`docs/phase6-unsubscribe.md`](docs/phase6-unsubscribe.md), +[`docs/phase5-replies.md`](docs/phase5-replies.md), +[`docs/phase4-triage.md`](docs/phase4-triage.md), and +[`docs/phase8-documentation.md`](docs/phase8-documentation.md). ## Layout @@ -52,6 +77,10 @@ internal/unsubscribe/ RFC 2369/8058 + body unsubscribe-link detection (no netw internal/version/ build metadata (set via -ldflags) web/static/ embedded design tokens, Inter fonts, htmx, app.css web/templates/ embedded server-rendered HTML +docs/ phase evidence, retention, AI context, map, diagrams +docs/outline/ AI-context documents (system, config, code, runbook) +docs/archify/ Archify JSON spec for the architecture map +docs/diagrams/ rendered Mermaid PNG Dockerfile multi-stage, CGO-free build docker-compose.yml this project's own container and image ``` @@ -280,6 +309,12 @@ Caddy on `.35` proxies `mail.lab.audasmedia.com.au` to this port. | `POST` | `/unsubscribe/ignore` | session + CSRF | Adds a domain to the ignore list | | `POST` | `/unsubscribe/unignore` | session + CSRF | Removes a domain record | | `POST` | `/unsubscribe/mark` | session + CSRF + confirm | Records a domain for unsubscribe; never contacts the link | +| `GET` | `/reports` | session | Reports screen: build, send, and delete a daily summary (FR-10) | +| `POST` | `/reports/generate` | session + CSRF | Builds and stores today's summary; sends nothing | +| `POST` | `/reports/send` | session + CSRF + confirm | Delivers today's summary by email via Apprise | +| `POST` | `/reports/delete` | session + CSRF | Deletes a stored summary | +| `GET` | `/capabilities` | Hub bearer | Hub capability list (FR-12) | +| `POST` | `/ask` | Hub bearer | Read-only short answer (FR-12); never writes | | `GET` | `/static/…` | public | Embedded `tokens.css`, `app.css`, Inter fonts, `htmx.min.js` | Unauthenticated requests to `/` and `/partials/…` redirect to `/login?next=…`. @@ -300,3 +335,24 @@ folders; migration v5 adds `messages.message_id_header` (reply threading) and `drafts.sent_at`; migration v6 adds `messages.list_unsubscribe` and `messages.list_unsubscribe_post` and extends `unsubscribe` with `url` and `updated_at`. + +## Documentation + +Phase 8 recorded the project in five places. + +| Surface | Location | +|---|---| +| Gitea | This README, `docs/phaseN-*.md`, `docs/outline/`, `docs/email-agent-architecture.mmd`, `docs/email-agent-map.html` | +| Obsidian | Note `Email Agent — Family Inbox Triage` in `010 inbox` on `.27` (the sorter files it) | +| Outline | Collection `Email Agent` (`00-index`, system overview, config, code map, runbook) | +| Vikunja | Project `Email Agent` (human milestones) | +| Map | `central_ai_llm_master/docs/hub-architecture-map.html` and this repo's map, published to | + +Rebuild the map: + +```sh +mmdc -i docs/email-agent-architecture.mmd -o docs/diagrams/email-agent-architecture.png --scale 2 -b white +~/.agents/skills/project-docs/scripts/publish-maps.sh /home/sam/paseo/projects/email_agent +``` + +See [`docs/phase8-documentation.md`](docs/phase8-documentation.md) for the evidence. diff --git a/docs/archify/email-agent.architecture.json b/docs/archify/email-agent.architecture.json new file mode 100644 index 0000000..7bea33c --- /dev/null +++ b/docs/archify/email-agent.architecture.json @@ -0,0 +1,58 @@ +{ + "schema_version": 1, + "diagram_type": "architecture", + "meta": { + "title": "Email Agent — One-Page Family Inbox Triage", + "output": "docs/email-agent-map.html", + "quality_profile": "showcase", + "viewBox": [1780, 1000], + "views": [ + { + "id": "triage-loop", + "label": "Triage loop", + "focus": ["sam", "caddy", "ui", "gmail", "db"], + "note": "Sam opens one page. The app reads Gmail and stores every message." + }, + { + "id": "classify-reply", + "label": "Classify and reply", + "focus": ["ui", "jev", "omni", "gmail"], + "note": "JEV labels each message. OmniRoute drafts the reply. SMTP sends it." + }, + { + "id": "hub-summary", + "label": "Hub and summary", + "focus": ["hub", "api", "db", "jobs", "apprise", "n8n"], + "note": "The Hub asks read-only questions. CLI jobs send the daily summary." + } + ] + }, + "components": [ + { "id": "sam", "type": "frontend", "label": "Sam", "sublabel": "phone or desktop browser", "pos": [60, 460], "size": [150, 64] }, + { "id": "caddy", "type": "security", "label": "Caddy on .35", "sublabel": "mail.lab.audasmedia.com.au", "pos": [330, 460], "size": [170, 64] }, + { "id": "ui", "type": "frontend", "label": "HTMX dashboard", "sublabel": "login, inbox, rules, reports", "pos": [640, 440], "size": [200, 80], "tag": "port 8790" }, + { "id": "db", "type": "database", "label": "SQLite", "sublabel": "email_agent_data volume", "pos": [1300, 460], "size": [180, 80] }, + { "id": "api", "type": "backend", "label": "Hub API", "sublabel": "/capabilities /ask /notify", "pos": [1300, 120], "size": [180, 64], "tag": "read-only /ask" }, + { "id": "hub", "type": "backend", "label": "Central AI Hub", "sublabel": "hear-route-answer :8788", "pos": [980, 120], "size": [180, 64] }, + { "id": "jobs", "type": "backend", "label": "CLI jobs", "sublabel": "-fetch -classify -summary-send", "pos": [1300, 800], "size": [180, 64] }, + { "id": "n8n", "type": "external", "label": "n8n schedule", "sublabel": "scan and summary runs", "pos": [1580, 800], "size": [170, 64] }, + { "id": "apprise", "type": "backend", "label": "Apprise", "sublabel": "summary email :8210", "pos": [1000, 800], "size": [170, 64] }, + { "id": "gmail", "type": "cloud", "label": "Gmail", "sublabel": "IMAP :993 / SMTP :587, IPv4", "pos": [240, 800], "size": [180, 64] }, + { "id": "jev", "type": "cloud", "label": "JEV", "sublabel": "TypeSafe System One", "pos": [500, 800], "size": [170, 64] }, + { "id": "omni", "type": "cloud", "label": "OmniRoute", "sublabel": "reply drafts :20129", "pos": [760, 800], "size": [170, 64] } + ], + "connections": [ + { "id": "browser", "from": "sam", "to": "caddy", "label": "HTTPS" }, + { "id": "proxy", "from": "caddy", "to": "ui", "label": "reverse proxy" }, + { "id": "store", "from": "ui", "to": "db", "label": "store mail, triage, rules" }, + { "id": "mail", "from": "ui", "to": "gmail", "label": "read + send", "fromSide": "bottom", "toSide": "top", "route": "orthogonal-v" }, + { "id": "classify", "from": "ui", "to": "jev", "label": "classify", "fromSide": "bottom", "toSide": "top", "route": "orthogonal-v" }, + { "id": "draft", "from": "ui", "to": "omni", "label": "draft reply", "fromSide": "bottom", "toSide": "top", "route": "orthogonal-v" }, + { "id": "summary", "from": "ui", "to": "apprise", "label": "send summary", "fromSide": "bottom", "toSide": "top", "route": "orthogonal-v" }, + { "id": "ask", "from": "hub", "to": "api", "label": "Bearer token" }, + { "id": "read", "from": "api", "to": "db", "label": "read only", "labelAt": [1390, 340] }, + { "id": "schedule", "from": "n8n", "to": "jobs", "label": "schedule" }, + { "id": "run", "from": "jobs", "to": "db", "label": "fetch + classify" }, + { "id": "jobs-summary", "from": "jobs", "to": "apprise", "label": "daily email", "labelAt": [1240, 878] } + ] +} diff --git a/docs/diagrams/email-agent-architecture.png b/docs/diagrams/email-agent-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..057dab537216169e54aec7858b2006396e5d0aa9 GIT binary patch literal 145595 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

$6y*=+1QCu3q)Jo9nobPfF^Q_wJbS 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

hSyqypSo+tk#|+gpC3Q0cpWa9CMb9X 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 literal 0 HcmV?d00001 diff --git a/docs/email-agent-architecture.mmd b/docs/email-agent-architecture.mmd new file mode 100644 index 0000000..3d36dfa --- /dev/null +++ b/docs/email-agent-architecture.mmd @@ -0,0 +1,41 @@ +flowchart LR + SAM["Sam
phone or desktop browser"] + CADDY["Caddy on .35
mail.lab.audasmedia.com.au"] + + subgraph APP["Email Agent container on .13 (port 8790)"] + UI["HTMX dashboard
login, inbox, rules, reports"] + API["Hub API
/capabilities /ask /notify"] + JOBS["CLI jobs
-fetch -classify -summary-send"] + DB[("SQLite
email_agent_data volume")] + end + + subgraph HOUSE["House services"] + HUB["Central AI Hub :8788"] + APPRISE["Apprise :8210
summary email"] + end + + N8N["n8n schedule"] + + subgraph CLOUD["External providers"] + GMAIL["Gmail IMAP :993 / SMTP :587
IPv4 only, app password"] + JEV["JEV / TypeSafe System One
classification"] + OMNI["OmniRoute :20129
reply drafts"] + end + + SAM --> CADDY --> UI + UI --> DB + UI --> GMAIL + UI --> JEV + UI --> OMNI + UI --> APPRISE + HUB --> API + API --> DB + N8N --> JOBS + JOBS --> DB + JOBS --> GMAIL + JOBS --> APPRISE + API -. notify .-> HUB + + click CADDY "https://maps.lab.audasmedia.com.au/email_agent/docs/" "View Archify Map" + click UI "https://maps.lab.audasmedia.com.au/email_agent/docs/" "View Archify Map" + click DB "https://maps.lab.audasmedia.com.au/email_agent/docs/" "View Archify Map" diff --git a/docs/email-agent-map.html b/docs/email-agent-map.html new file mode 100644 index 0000000..0a1f600 --- /dev/null +++ b/docs/email-agent-map.html @@ -0,0 +1,13716 @@ + + + + + + + Email Agent — One-Page Family Inbox Triage Diagram + + + + + + + + + +

+ +
+ +
+
+
+

Email Agent — One-Page Family Inbox Triage

+
+
+ + + + + + +
+ + Email Agent — One-Page Family Inbox Triage + A architecture diagram generated by Archify. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sam · phone or desktop browser · Architecture component + + + + Sam + phone or desktop browser + + + + Caddy on .35 · mail.lab.audasmedia.com.au · Architecture component + + + + Caddy on .35 + mail.lab.audasmedia.com.au + + + + HTMX dashboard · login, inbox, rules, reports · Architecture component · port 8790 + + + + HTMX dashboard + login, inbox, rules, reports + port 8790 + + + + SQLite · email_agent_data volume · Architecture component + + + + SQLite + email_agent_data volume + + + + Hub API · /capabilities /ask /notify · Architecture component · read-only /ask + + + + Hub API + /capabilities /ask /notify + read-only /ask + + + + Central AI Hub · hear-route-answer :8788 · Architecture component + + + + Central AI Hub + hear-route-answer :8788 + + + + CLI jobs · -fetch -classify -summary-send · Architecture component + + + + CLI jobs + -fetch -classify -summary-send + + + + n8n schedule · scan and summary runs · Architecture component + + + + n8n schedule + scan and summary runs + + + + Apprise · summary email :8210 · Architecture component + + + + Apprise + summary email :8210 + + + + Gmail · IMAP :993 / SMTP :587, IPv4 · Architecture component + + + + Gmail + IMAP :993 / SMTP :587, IPv4 + + + + JEV · TypeSafe System One · Architecture component + + + + JEV + TypeSafe System One + + + + OmniRoute · reply drafts :20129 · Architecture component + + + + OmniRoute + reply drafts :20129 + + + + + + HTTPS + + + + reverse proxy + + + + store mail, triage, rules + + + + read + send + + + + classify + + + + draft reply + + + + send summary + + + + Bearer token + + + + read only + + + + schedule + + + + fetch + classify + + + + daily email + + + + + Legend + + + Frontend + + + + Backend + + + + Database + + + + Cloud + + + + Security + + + + External + + + +

+ + + + + + + + +
+ + +
+ +
+ +
+ + + + diff --git a/docs/outline/00-index.md b/docs/outline/00-index.md new file mode 100644 index 0000000..ff85027 --- /dev/null +++ b/docs/outline/00-index.md @@ -0,0 +1,44 @@ +# Email Agent — AI Document Index + +> **Target**: AI agents. +> **Writing style**: ASD-STE100 Simplified Technical English. + +## Document catalog + +Read this index. Inject the exact document you need. Do not search all files. + +| Document | Path | Scope | +| :--- | :--- | :--- | +| **System Overview** | `docs/outline/01-system-overview.md` | Purpose, architecture, services, phase status. | +| **Configuration and Environment** | `docs/outline/02-config-and-env.md` | Environment variables, config paths, ports, secrets. | +| **Code Map** | `docs/outline/03-code-map.md` | Folder structure, entry points, dependencies, schema. | +| **Agent Runbook** | `docs/outline/04-agent-runbook.md` | Commands to test, deploy, restart, and roll back. | + +The build spec is `AGENTS.md`. The phase evidence files are `docs/phaseN-*.md`. +The interactive map is `docs/email-agent-map.html`. + +## System summary + +The Email Agent triages the family inbox. All mail lands in one Gmail account. +Sam opens one page, clears the inbox in minutes, and sees nothing important +missed. The service reads Gmail over IMAP, classifies each message with JEV, +recommends an action, applies bulk actions, drafts replies, and answers the Hub. + +## Core configuration + +- **Secrets file**: `~/.config/environment.d/10-secrets.conf` (mode 600). +- **Project directory**: `/home/sam/paseo/projects/email_agent/`. +- **Live host**: `.13`, one container, own image. +- **Live port**: `8790`. Public URL: `https://mail.lab.audasmedia.com.au`. +- **Database**: SQLite at `/data/email_agent.db` on the `email_agent_data` volume. + +## Agent restart steps + +1. Read the catalog above. Inject only the documents you need. +2. Check git status: `git status`. +3. Check recent commits: `git log -n 5 --oneline`. +4. Run the Go tests in a container: + + ```sh + timeout 600 docker run --rm -v "$PWD":/src -w /src golang:1.25-alpine go test ./... + ``` diff --git a/docs/outline/01-system-overview.md b/docs/outline/01-system-overview.md new file mode 100644 index 0000000..4aff495 --- /dev/null +++ b/docs/outline/01-system-overview.md @@ -0,0 +1,98 @@ +# Email Agent — System Overview + +## Purpose + +The Email Agent triages the family inbox. All mail lands in one Gmail account +(`samuelrolfe@gmail.com`). PurelyMail forwards every domain address there. + +Sam opens one page. He clears the inbox in a few minutes. He knows that nothing +important was missed. + +The build spec is `AGENTS.md`. The outcome statement is in `AGENTS.md` section 1. + +## Architecture + +``` +Sam (phone or desktop browser) + -> Caddy on .35 (mail.lab.audasmedia.com.au) + -> Email Agent container on .13 :8790 + |- HTMX dashboard (Go, server-rendered HTML) + |- SQLite (/data/email_agent.db, own volume) + |- IMAP read -> imap.gmail.com:993 (IPv4 only) + |- SMTP send -> smtp.gmail.com:587 (IPv4 only, STARTTLS) + |- JEV -> https://api.typesafe.ai (classification) + |- OmniRoute -> http://192.168.20.13:20129/v1 (reply drafts) + |- Apprise -> http://192.168.20.35:8210 (daily summary email) + \- Hub API -> read-only /ask, /capabilities, /notify +Hub on .13 :8788 asks this service with a shared bearer token. +n8n runs the CLI jobs (-fetch, -classify, -summary-send) on a schedule. +``` + +## Services and connections + +| Service | Host | Address | Role | +| :--- | :--- | :--- | :--- | +| `email-agent` | `.13` | `:8790` | Web app, API, and CLI jobs. | +| Caddy | `.35` | `:443` | TLS reverse proxy for `mail.lab.audasmedia.com.au`. | +| Gmail IMAP | cloud | `imap.gmail.com:993` | Read mail. Force IPv4. | +| Gmail SMTP | cloud | `smtp.gmail.com:587` | Send replies. Force IPv4. | +| JEV | cloud | `api.typesafe.ai` | Classify each message. | +| OmniRoute | `.13` | `:20129` | Draft reply replies. Not JEV. | +| Apprise | `.35` | `:8210` | Deliver the daily summary by email. | +| Central AI Hub | `.13` | `:8788` | Ask questions. Read-only. | +| n8n | `.13` | — | Trigger the CLI jobs. | + +## Functional requirements in use + +| ID | Requirement | Where | +| :--- | :--- | :--- | +| FR-1 | Fetch mail with the Gmail path on a schedule. | `-fetch`, `/actions/fetch` | +| FR-2 | Record the source address from `X-Pm-Original-To`. | `internal/mailfetch` | +| FR-3 | Classify with JEV: category, importance, action, confidence. | `internal/classify` | +| FR-4 | Apply user rules over the classification. | `internal/classify/rules.go` | +| FR-5 | Show a triage list grouped by category. | `internal/server/inbox.go` | +| FR-6 | Bulk delete, move, and mark. | `internal/server/actions.go` | +| FR-7 | Detect unsubscribe links. Keep an ignore list. | `internal/unsubscribe` | +| FR-8 | Draft a reply with the LLM. Edit, then send. | `internal/reply`, `internal/mailops` | +| FR-9 | Move mail to Gmail labels. Deletes are recoverable. | `internal/mailops` | +| FR-10 | Build a daily summary and send it by email. | `internal/summary`, `internal/apprise` | +| FR-11 | Edit rules as plain text. Save and version. | `/rules`, `internal/server/rules.go` | +| FR-12 | Expose `GET /capabilities`, `POST /ask`, `POST /notify`. | `internal/hub` | +| FR-13 | Log every action. | `internal/store` `actions_log` | +| FR-14 | Edit the category list in the UI. | `/categories` | +| FR-15 | Send as the address the mail arrived at. | `internal/reply`, FR-2 value | + +## Build phase status + +Phases 1 to 7 are complete and deployed. Phase 8 documents the project. + +| Phase | Scope | State | +| :--- | :--- | :--- | +| 1 | Go skeleton, SQLite, session login, Docker, Caddy. | Done. | +| 2 | Gmail IMAP read, FR-2 source address. | Done. | +| 3 | JEV classification, rules table, editable categories. | Done. | +| 4 | Triage actions: delete, move, mark, bulk select. | Done. | +| 5 | Reply drafts, edit, send. | Done. | +| 6 | Unsubscribe detection and the rules editor. | Done. | +| 7 | Daily summary by email and the read-only Hub API. | Done. | +| 8 | Documentation across Gitea, Obsidian, Outline, Vikunja, and the map. | Done. | + +## Key rules + +- Force IPv4 for every Gmail connection. IPv6 to Gmail failed from `.13`. +- The source address header is `X-Pm-Original-To`. Never use `Delivered-To`. +- `/ask` is read-only. It never changes state. +- Spam is recommended, never auto-deleted. +- Deletes are recoverable. The app uses a Delete label. +- Sending a reply needs Sam's action in the UI. No auto-send. +- Every action is logged. +- Message bodies are kept for one month. The `-retain` job clears older bodies + and caps `actions_log`. Metadata stays. + +## Related documents + +- `AGENTS.md` — the build spec and the phase plan. +- `README.md` — the technical repository README. +- `docs/phase7-summary-hub.md` — the Phase 7 evidence. +- `docs/outline/` — these AI-context documents. +- `docs/email-agent-map.html` — the interactive architecture map. diff --git a/docs/outline/02-config-and-env.md b/docs/outline/02-config-and-env.md new file mode 100644 index 0000000..2e85efe --- /dev/null +++ b/docs/outline/02-config-and-env.md @@ -0,0 +1,86 @@ +# Email Agent — Configuration and Environment + +## Secrets + +All secrets live in `~/.config/environment.d/10-secrets.conf` on `.13` (mode +600). The file is never committed. `docker-compose.yml` passes the names through +from the host environment. + +| Key | Purpose | +| :--- | :--- | +| `GMAIL_USER` | Gmail account that receives the forwarded mail. | +| `GMAIL_APP_PASSWORD` | Gmail app password for IMAP and SMTP. No OAuth. | +| `EMAIL_AGENT_SESSION_SECRET` | Session cookie signing key. | +| `EMAIL_AGENT_PASSWORD` | Login password for Sam. | +| `JEV_API_KEY` | JEV (TypeSafe System One) API key. | +| `OMNIROUTE_API_KEY` | OmniRoute API key for reply drafts. | +| `HUB_TOKEN` | Shared bearer token for the Hub API. | +| `APPRISE_URLS` | Apprise destination for the summary email. | +| `EMAIL_AGENT_SUMMARY_TO` | Summary recipient. | + +`environment.d` reaches the systemd user manager. It does not reach a fresh SSH +shell. Read the values explicitly, or pass them to `docker compose`. + +## Runtime variables + +| Variable | Default | Meaning | +| :--- | :--- | :--- | +| `EMAIL_AGENT_ENV` | `development` | `development`, `production`, or `test`. | +| `EMAIL_AGENT_ADDR` | `:8790` | Listen address. | +| `EMAIL_AGENT_PORT` | `8790` | Listen port when `ADDR` is unset. | +| `EMAIL_AGENT_DB_PATH` | `data/email_agent.db` | SQLite file. Container uses `/data/email_agent.db`. | +| `EMAIL_AGENT_LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error`. | +| `EMAIL_AGENT_PUBLIC_BASE_URL` | — | Public URL for links. | + +## Gmail variables + +| Variable | Default | Meaning | +| :--- | :--- | :--- | +| `EMAIL_AGENT_IMAP_HOST` | `imap.gmail.com` | IMAP host. | +| `EMAIL_AGENT_IMAP_PORT` | `993` | IMAP port. Implicit TLS. | +| `EMAIL_AGENT_IMAP_LOOKBACK_DAYS` | `14` | First-scan window. | +| `EMAIL_AGENT_IMAP_MAX_MESSAGES` | `100` | Per-scan message cap. | +| `EMAIL_AGENT_SMTP_HOST` | `smtp.gmail.com` | SMTP submission host. | +| `EMAIL_AGENT_SMTP_PORT` | `587` | SMTP port. STARTTLS. | + +The dialer uses `tcp4`. Gmail is reached over IPv4 only. + +## Model and integration variables + +| Variable | Default | Meaning | +| :--- | :--- | :--- | +| `JEV_BASE_URL` | `https://api.typesafe.ai` | JEV base URL. | +| `JEV_MODEL` | `jev-latest` | System One model alias. | +| `EMAIL_AGENT_CLASSIFY_CONCURRENCY` | `4` | In-flight JEV requests. | +| `EMAIL_AGENT_CLASSIFY_MAX_MESSAGES` | `200` | Messages per classify run. | +| `OMNIROUTE_BASE_URL` | `http://192.168.20.13:20129/v1` | OmniRoute gateway. | +| `OMNIROUTE_MODEL` | `auto/best-chat` | Reply-draft model. | +| `HUB_BASE_URL` | `http://192.168.20.13:8788` | Hub base URL. | +| `HUB_NOTIFY_TIMEOUT` | `5s` | Notify call timeout. | +| `APPRISE_URL` | `http://192.168.20.35:8210` | Apprise API base. | +| `APPRISE_KEY` | — | Stored Apprise configuration key. | +| `EMAIL_AGENT_SUMMARY_TO` | `samuelrolfe@gmail.com` | Summary recipient. | +| `EMAIL_AGENT_RETENTION_DAYS` | `30` | Message-body window for `-retain` (AGENTS.md section 7). | +| `EMAIL_AGENT_ACTIONS_LOG_MAX_ROWS` | `50000` | Cap for the append-only `actions_log`. | + +## Config paths + +| Path | Role | +| :--- | :--- | +| `/home/sam/paseo/projects/email_agent/` | Project source and docs. | +| `/home/sam/paseo/projects/email_agent/docker-compose.yml` | Own container and image. | +| `/home/sam/paseo/projects/email_agent/.env.example` | Full list of variable names. | +| `/data/email_agent.db` | SQLite file in the container. | +| `email_agent_data` | Docker named volume for the database. | + +## Ports + +| Port | Host | Service | +| :--- | :--- | :--- | +| `8790` | `.13` | Email Agent HTTP. | +| `443` | `.35` | Caddy TLS for `mail.lab.audasmedia.com.au`. | +| `993` | cloud | Gmail IMAP to Gmail. | +| `587` | cloud | Gmail SMTP to Gmail. | +| `8788` | `.13` | Central AI Hub. This service both serves and calls it. | +| `8210` | `.35` | Apprise API. | +| `20129` | `.13` | OmniRoute gateway. | diff --git a/docs/outline/03-code-map.md b/docs/outline/03-code-map.md new file mode 100644 index 0000000..108739f --- /dev/null +++ b/docs/outline/03-code-map.md @@ -0,0 +1,158 @@ +# Email Agent — Code Map + +## Folder structure + +``` +email_agent/ +├── AGENTS.md Build spec (phases 1-8, requirements, rules). +├── README.md Technical repository README. +├── cmd/email-agent/ +│ └── main.go Entry point. HTTP server and every CLI flag. +├── internal/ +│ ├── apprise/ Apprise API client for the daily summary email. +│ ├── classify/ JEV client, rule engine, classification orchestration. +│ ├── config/ Environment-driven configuration. +│ ├── hub/ Hub contract: capabilities, /ask answerer, notify. +│ ├── mailfetch/ Stdlib-only IMAP client, MIME parse, FR-2 source address. +│ ├── mailops/ Gmail label moves, flag changes, and SMTP sending. +│ ├── reply/ OmniRoute LLM drafts and reply templates. +│ ├── server/ HTTP routes, auth middleware, HTMX handlers. +│ ├── session/ Server-side session store and signed cookie values. +│ ├── store/ SQLite open, schema, migrations, all queries. +│ ├── summary/ Deterministic daily-summary builder. +│ ├── unsubscribe/ RFC 2369/8058 and body unsubscribe-link detection. +│ └── version/ Build metadata (-ldflags). +├── web/ +│ ├── embed.go Embeds the static and template files. +│ ├── static/ tokens.css, app.css, Inter fonts, htmx.min.js. +│ └── templates/ login, dashboard, inbox, message, categories, rules, +│ unsubscribe, reports. +├── docs/ Phase evidence, AI context, map, diagrams. +├── Dockerfile Multi-stage, CGO-free build. +├── docker-compose.yml Own container, image, port, and volume. +└── Makefile Build, test, and run targets. +``` + +## Entry points + +| Entry point | Language | Role | +| :--- | :--- | :--- | +| `cmd/email-agent/main.go` | Go | Service and CLI. | +| `internal/server/server.go` | Go | HTTP router and middleware. | +| `internal/store/schema.sql` | SQL | The AGENTS.md section 7 tables. | + +## CLI flags + +| Flag | Effect | +| :--- | :--- | +| `-version` | Print version, commit, and build time. | +| `-healthcheck` | Probe the local `/health` endpoint and exit. | +| `-fetch` | Run one Gmail IMAP scan and exit (FR-1). | +| `-classify` | Classify pending messages with JEV and exit. | +| `-classify-all` | Re-classify every stored message. | +| `-check-smtp` | Verify SMTP IPv4, STARTTLS, and login. Sends no mail. | +| `-check-thread ` | Confirm a stored thread has a sent reply. Read-only. | +| `-summary` | Build today's summary, store it, and print it. Sends nothing. | +| `-summary-send` | Build the summary and deliver it by email via Apprise. | +| `-notify` | Send one notification to the Hub (`POST /notify`). | +| `-retain` | Clear old message bodies and cap `actions_log` (AGENTS.md section 7). | + +## HTTP routes + +| Method | Path | Auth | Purpose | +| :--- | :--- | :--- | :--- | +| `GET` | `/health` | public | Liveness and database check. | +| `GET` | `/readyz` | public | Readiness. | +| `GET` | `/login` | public | Sign-in form. | +| `POST` | `/login` | public | CSRF-checked sign-in. | +| `POST` | `/logout` | session | End the session. | +| `GET` | `/` | session | Dashboard. | +| `GET` | `/partials/inbox` | session | HTMX inbox fragment. | +| `POST` | `/actions/fetch` | session + CSRF | One IMAP scan. | +| `POST` | `/actions/classify` | session + CSRF | Classify pending messages. | +| `POST` | `/actions/reclassify` | session + CSRF | Re-classify every message. | +| `POST` | `/actions/bulk` | session + CSRF | Bulk delete, move, mark, restore. | +| `GET` | `/partials/message` | session | Message detail fragment. | +| `POST` | `/actions/draft` | session + CSRF | Generate and store a reply draft. | +| `POST` | `/actions/draft/save` | session + CSRF | Save draft edits. | +| `POST` | `/actions/send` | session + CSRF + confirm | Send a reply over SMTP. | +| `GET` | `/categories` | session | Category editor (FR-14). | +| `POST` | `/categories/add` | session + CSRF | Add a category. | +| `POST` | `/categories/rename` | session + CSRF | Rename and cascade. | +| `POST` | `/categories/remove` | session + CSRF | Remove and reassign. | +| `GET` | `/rules` | session | Rules editor (FR-11). | +| `POST` | `/rules/save` | session + CSRF | Save a new rules version. | +| `POST` | `/rules/restore` | session + CSRF | Restore an older version. | +| `POST` | `/rules/reclassify` | session + CSRF | Re-classify with current rules. | +| `GET` | `/unsubscribe` | session | Unsubscribe links and ignore list (FR-7). | +| `POST` | `/unsubscribe/ignore` | session + CSRF | Add a domain to the ignore list. | +| `POST` | `/unsubscribe/unignore` | session + CSRF | Remove a domain record. | +| `POST` | `/unsubscribe/mark` | session + CSRF + confirm | Record a domain. No link is followed. | +| `GET` | `/reports` | session | Daily summary and delete-report. | +| `GET` | `/capabilities` | Hub bearer | Hub capability list (FR-12). | +| `POST` | `/ask` | Hub bearer | Read-only short answer. | +| `GET` | `/static/...` | public | Embedded CSS, fonts, htmx. | + +## Data model + +SQLite. The schema is in `internal/store/schema.sql`. Migrations run at start +and are recorded in `schema_migrations`. + +| Table | Holds | +| :--- | :--- | +| `messages` | Gmail id, thread id, headers, from, to, subject, body, source address. | +| `classifications` | Category, importance, action, confidence, model. | +| `categories` | The editable category list (FR-14). | +| `rules` | Plain-text rules, versioned (FR-11). | +| `actions_log` | Append-only action log (FR-13). Capped by `-retain`. | +| `unsubscribe` | Detected domains, status, and ignore list (FR-7). | +| `drafts` | Reply draft body, template, and sent state (FR-8). | +| `summaries` | Daily summary text and delivery target (FR-10). | + +Migrations: v2 adds IMAP UID fields. v3 seeds the first categories and rules. +v4 adds `folder` and `mailbox`. v5 adds `message_id_header` and `drafts.sent_at`. +v6 adds `list_unsubscribe` fields and `unsubscribe.url`. + +## Key modules + +| Module | Role | +| :--- | :--- | +| `internal/mailfetch/imap.go` | Minimal IMAP client. Forces `tcp4`. | +| `internal/mailfetch/message.go` | MIME parse and the FR-2 source address. | +| `internal/mailfetch/imap_write.go` | IMAP MOVE, COPY, and flag changes. | +| `internal/classify/jev.go` | JEV `/v1/systemone` client. Three Choice questions. | +| `internal/classify/rules.go` | Rule parse and first-match-wins engine (FR-4). | +| `internal/mailops/mailops.go` | App folder to Gmail label mapping. | +| `internal/mailops/smtp.go` | SMTP send with IPv4 and STARTTLS. | +| `internal/reply/draft.go` | Reply prompt and OmniRoute call. | +| `internal/reply/templates.go` | Built-in reply templates. | +| `internal/store/retention.go` | Body clearing and `actions_log` cap. | +| `internal/hub/ask.go` | Deterministic, read-only answerer. | + +## Tests + +All Go tests run in a container: + +```sh +timeout 600 docker run --rm -v "$PWD":/src -w /src golang:1.25-alpine go test ./... +``` + +| Package | Coverage | +| :--- | :--- | +| `internal/classify` | JEV client, rule engine, orchestration. | +| `internal/hub` | Answer intents, auth, read-only proof, notify. | +| `internal/mailfetch` | IMAP parse, MIME, FR-2, write ops. | +| `internal/mailops` | Label mapping, SMTP. | +| `internal/reply` | Draft prompts and templates. | +| `internal/server` | Auth, routes, CSRF, handlers. | +| `internal/store` | Schema, retention, triage, categories, summaries. | +| `internal/summary` | Counts, ordering, text. | +| `internal/unsubscribe` | Link detection. | +| `internal/apprise`, `internal/config`, `internal/session` | Client and config. | + +## Dependencies + +Go 1.25. The only database driver is `modernc.org/sqlite` (pure Go, no CGO). +The mail path uses the Go standard library plus a minimal IMAP client. The UI +uses vendored HTMX and the Family Home Lab `tokens.css`. No JavaScript build +step. diff --git a/docs/outline/04-agent-runbook.md b/docs/outline/04-agent-runbook.md new file mode 100644 index 0000000..cafcdef --- /dev/null +++ b/docs/outline/04-agent-runbook.md @@ -0,0 +1,143 @@ +# Email Agent — Agent Runbook + +## Before you start + +1. Read `00-index.md`. Inject only the documents you need. +2. Read `AGENTS.md` section 11 (build order) and section 10 (rules). +3. Check git status and the last commits. + +```sh +cd /home/sam/paseo/projects/email_agent +git status +git log -n 5 --oneline +``` + +## Run the tests + +Run the Go tests in a container. The image has the toolchain. + +```sh +timeout 600 docker run --rm -v "$PWD":/src -w /src golang:1.25-alpine go test ./... +timeout 600 docker run --rm -v "$PWD":/src -w /src golang:1.25-alpine go vet ./... +``` + +Expected: `go test ./...` is green and `go vet ./...` is silent. + +## Run locally + +```sh +go run ./cmd/email-agent +curl -s localhost:8790/health +``` + +The health reply is JSON: `{"status":"ok","database":"ok", ...}`. + +## Build and deploy on .13 + +Load the host secrets, then build and start the container. + +```sh +set -a; . ~/.config/environment.d/10-secrets.conf; set +a +cd /home/sam/paseo/projects/email_agent +EMAIL_AGENT_VERSION=phase8 EMAIL_AGENT_COMMIT=$(git rev-parse --short HEAD) docker compose build +docker compose up -d +``` + +Check the result: + +```sh +docker ps --filter name=email-agent +curl -s https://mail.lab.audasmedia.com.au/health +``` + +## Check the live service + +```sh +curl -s http://127.0.0.1:8790/health +curl -s http://127.0.0.1:8790/readyz +timeout 10 docker exec email-agent email-agent -version +timeout 10 docker exec email-agent email-agent -check-smtp +``` + +`-check-smtp` verifies IPv4, STARTTLS, and login. It sends no mail. + +## Trigger the jobs + +The jobs also run from the dashboard buttons. The CLI runs them without the UI. + +```sh +timeout 60 docker exec email-agent email-agent -fetch +timeout 120 docker exec email-agent email-agent -classify +timeout 60 docker exec email-agent email-agent -summary +``` + +`-summary-send` sends a real email. Get Sam's approval first. `-retain` clears +old bodies and caps the log. + +## The Hub API + +`HUB_TOKEN` protects `/capabilities` and `/ask`. `email_agent` is registered +with the running Hub. + +```sh +set -a; . ~/.config/environment.d/10-secrets.conf; set +a +curl -s -H "Authorization: Bearer $HUB_TOKEN" http://127.0.0.1:8790/capabilities +curl -s -H "Authorization: Bearer $HUB_TOKEN" -H 'Content-Type: application/json' \ + -d '{"question":"anything important in my inbox?","asker":"sam"}' \ + http://127.0.0.1:8790/ask +``` + +`/ask` is read-only. It never writes to the database. + +## Restart + +```sh +docker compose restart email-agent +docker logs --tail 50 email-agent +``` + +## Roll back + +1. `git revert && docker compose up -d --build`. +2. The database is on the `email_agent_data` volume. It is not changed by a code + revert. A schema migration is forward-only; restore a database copy to go + back a schema version. +3. To disable the Hub API, remove `HUB_TOKEN` from the host secrets and restart. + +## Rebuild the documentation + +```sh +cd /home/sam/paseo/projects/email_agent +mmdc -i docs/email-agent-architecture.mmd -o docs/diagrams/email-agent-architecture.png --scale 2 -b white +cd /home/sam/.agents/skills/archify +node bin/archify.mjs validate architecture /home/sam/paseo/projects/email_agent/docs/archify/email-agent.architecture.json --quality showcase --json +node bin/archify.mjs deliver architecture /home/sam/paseo/projects/email_agent/docs/archify/email-agent.architecture.json /home/sam/paseo/projects/email_agent/docs/email-agent-map.html --quality showcase --json +``` + +## Publish the map + +```sh +~/.agents/skills/project-docs/scripts/publish-maps.sh /home/sam/paseo/projects/email_agent +``` + +Result: `https://maps.lab.audasmedia.com.au/email_agent/docs/`. + +## Documentation surfaces + +| Surface | Location | +| :--- | :--- | +| Gitea | `ssh://git@gitea.lab.audasmedia.com.au:2222/sam/email_agent.git` | +| Obsidian | Vault `010 inbox` on `.27` (the sorter files it later). | +| Outline | Collection `Email Agent` on `outline.lab.audasmedia.com.au`. | +| Vikunja | Project `Email Agent` on `vikunja.lab.audasmedia.com.au`. | +| Map | `central_ai_llm_master/docs/hub-architecture-map.html` and this repo's map. | + +## Safety rules + +- Force IPv4 for every Gmail connection. IPv6 fails from `.13`. +- Never commit a secret. +- Never send a real email as a test. Ask Sam first. +- Never follow a real unsubscribe link. Only mark and record. +- Spam is recommended, never auto-deleted. +- Bound every `docker run` with `timeout` and `--entrypoint sh`. A bare + `docker run` starts the server and hangs. diff --git a/docs/phase8-documentation.md b/docs/phase8-documentation.md new file mode 100644 index 0000000..3cd46f9 --- /dev/null +++ b/docs/phase8-documentation.md @@ -0,0 +1,134 @@ +# Phase 8 — Documentation + +Status: **complete.** Ran the `project-docs` skill (Simplified Technical +English) and updated all five documentation surfaces. Parent +[AUD-68](/AUD/issues/AUD-68). Phase 8 of AGENTS.md §11. Task +[AUD-74](/AUD/issues/AUD-74). + +**DoD:** project-docs run; Gitea, Obsidian, Outline, Vikunja, and the map are +updated. — **met.** Evidence for each surface is below. + +## 1. Surfaces updated + +| Surface | Destination | What changed | +| :--- | :--- | :--- | +| Gitea | `sam/email_agent` (repo) | README refreshed (architecture diagram, Phase 8 status, Phase 7 endpoints, retention vars, documentation index). Added `docs/outline/` (5 AI-context docs), `docs/vikunja-tasks.json`, `docs/email-agent-architecture.mmd`, `docs/diagrams/email-agent-architecture.png`, `docs/archify/email-agent.architecture.json`, `docs/email-agent-map.html`. | +| Obsidian | Vault `010 inbox` on `.27` | New note `Email Agent — Family Inbox Triage.md` (human overview, portfolio highlights, Mermaid, links). The `obsidian-sorter` watcher proposes the final folder. | +| Outline | `outline.lab.audasmedia.com.au` | New collection `Email Agent` (`f096RBNsbV`) with five documents: AI index, system overview, configuration, code map, runbook. | +| Vikunja | `vikunja.lab.audasmedia.com.au` | New project `Email Agent` (id 17) with seven completed human milestones (task ids 179–185). | +| Map | `central_ai_llm_master/docs/` | `hub-architecture.mmd` and the Archify IR now show the Email Agent as a live peer. `hub-architecture-map.html` re-delivered, `diagrams/hub-architecture.png` re-rendered, and `routing.md` marks `email_agent` an active service. | + +## 2. Gitea + +Repo: `ssh://git@gitea.lab.audasmedia.com.au:2222/sam/email_agent.git`. + +- `README.md` — status is now "complete and deployed" for all eight phases. Adds + the Mermaid architecture diagram, the Phase 7 Hub API and Reports endpoints, + the retention variables, and a Documentation section. +- `docs/outline/00-index.md` — the AI document index. +- `docs/outline/01-system-overview.md` — purpose, architecture, FR map, phase + status. +- `docs/outline/02-config-and-env.md` — environment variables, paths, ports. +- `docs/outline/03-code-map.md` — folders, flags, routes, schema, tests. +- `docs/outline/04-agent-runbook.md` — test, deploy, restart, rollback. +- `docs/vikunja-tasks.json` — the Vikunja project id and task ids. +- `docs/email-agent-architecture.mmd` and `docs/diagrams/email-agent-architecture.png`. +- `docs/archify/email-agent.architecture.json` and `docs/email-agent-map.html`. + +The Archify map passed the **showcase** profile: 9 of 9 checks, 0 errors, +0 warnings. The Mermaid diagram rendered with `mmdc` (no errors). + +## 3. Obsidian + +Written over SSH to `.27`: + +``` +/home/sam/obsidian/010 inbox/Email Agent — Family Inbox Triage.md +``` + +The note uses the generic inbox template (`type: note`) with `project` and +topic tags. It holds a plain-language explanation, the portfolio highlights, +a Mermaid diagram, and links to Gitea, the map, Outline, and Vikunja. No folder +and no note type were chosen; the `obsidian-sorter` watcher proposes both and +Sam approves. + +## 4. Outline + +Collection `Email Agent`, id `ccb6b59b-2bf6-4946-8dca-5b6da95f768a`, url id +`f096RBNsbV`. + +| Document | Id | +| :--- | :--- | +| Email Agent — AI Document Index | `d1025188-6640-4f3d-8e46-41439faed342` | +| Email Agent — System Overview | `cdcdf640-425b-42ad-843c-96d58ead81a2` | +| Email Agent — Configuration and Environment | `1a239b9c-63a4-4a5e-9c12-56626c4d2d07` | +| Email Agent — Code Map | `924617ea-47fd-4ab4-9eef-e2dfc7c3f854` | +| Email Agent — Agent Runbook | `e745a791-1c07-4ad4-bc30-6a4f6119dceb` | + +The documents are the same files as `docs/outline/` in the repo. The index +itemizes every document so an AI agent can inject the exact file. + +## 5. Vikunja + +Project `Email Agent`, id 17. + +| Task id | Title | Done | +| :--- | :--- | :--- | +| 179 | Build and deploy phases 1–7 | yes | +| 180 | Deploy on `.13` behind Caddy | yes | +| 181 | Gitea README, Mermaid, Archify, publish maps | yes | +| 182 | Outline collection `Email Agent` | yes | +| 183 | Obsidian note in `010 inbox` | yes | +| 184 | 1-month retention and `actions_log` cap (AUD-75) | yes | +| 185 | Confirm the Gmail send-as identity (FR-15) | yes | + +The repo copy is `docs/vikunja-tasks.json`. + +## 6. The map + +`central_ai_llm_master/docs/` is the Hub's map. The Email Agent now appears as +a live peer: + +- `docs/hub-architecture.mmd` — added `EMAIL["Email Agent
inbox triage"]` + and `HUB -- "ask only (query)" --> EMAIL`. +- `docs/archify/hub.architecture.json` — added the `email` component and the + `to-email` relationship; the profile is `standard` (the existing Hub map was + already a standard-quality map — it fails the stricter showcase profile). +- `docs/hub-architecture-map.html` — re-delivered: 9 of 9 checks, 0 errors, + 30 warnings. +- `docs/diagrams/hub-architecture.png` — re-rendered from the updated Mermaid. +- `routing.md` — the `email, inbox, mail, message, unread` row is now + `active service`, and `email_agent` is removed from the placeholder table. + +The Email Agent's own map is published to +`https://maps.lab.audasmedia.com.au/email_agent/docs/`, and the Hub map to +`https://maps.lab.audasmedia.com.au/central_ai_llm_master/docs/`. + +## 7. Commands used + +```sh +# Mermaid +mmdc -i docs/email-agent-architecture.mmd -o docs/diagrams/email-agent-architecture.png --scale 2 -b white + +# Archify (validate then deliver) +node ~/.agents/skills/archify/bin/archify.mjs validate architecture docs/archify/email-agent.architecture.json --quality showcase --json +node ~/.agents/skills/archify/bin/archify.mjs deliver architecture docs/archify/email-agent.architecture.json docs/email-agent-map.html --quality showcase --json + +# Publish to the LAN maps site +~/.agents/skills/project-docs/scripts/publish-maps.sh /home/sam/paseo/projects/email_agent +~/.agents/skills/project-docs/scripts/publish-maps.sh /home/sam/paseo/projects/central_ai_llm_master +``` + +## 8. Not done / notes + +- The Obsidian note is in the inbox. The sorter, not this phase, chooses the + final folder. Sam approves the proposal in Obsidian. +- Vikunja bucket (stage) placement uses the API default views. The tasks carry + their done flags; a human can drag them if a stage is wanted. +- 1-month retention is covered by AUD-75 (commit `e5cce1c`), not by this phase. +- The project-docs role says a note is finished only when its path is named in + the task. This file and the summary comment name each path. + +## 9. Commit + +Docs commit for this phase: ``. diff --git a/docs/vikunja-tasks.json b/docs/vikunja-tasks.json new file mode 100644 index 0000000..218b736 --- /dev/null +++ b/docs/vikunja-tasks.json @@ -0,0 +1,15 @@ +{ + "project": "Email Agent", + "vikunja_project_id": 17, + "url": "https://vikunja.lab.audasmedia.com.au", + "description": "Human task overview for the Email Agent. High-level milestones; the engineering detail lives in the Gitea repo and the Outline collection.", + "tasks": [ + { "id": 179, "title": "Build and deploy Email Agent phases 1-7 (Go, HTMX, SQLite, IMAP, JEV, triage, replies, unsubscribe, summary, Hub)", "done": true }, + { "id": 180, "title": "Deploy on .13 behind Caddy at mail.lab.audasmedia.com.au", "done": true }, + { "id": 181, "title": "Gitea sam/email_agent: README, Mermaid diagram, Archify map, publish maps", "done": true }, + { "id": 182, "title": "Outline collection Email Agent with AI context docs", "done": true }, + { "id": 183, "title": "Obsidian note for Email Agent in 010 inbox", "done": true }, + { "id": 184, "title": "1-month message-body retention and actions_log cap (AUD-75)", "done": true }, + { "id": 185, "title": "Confirm the Gmail send-as identity at Phase 5 (FR-15)", "done": true } + ] +}