106 Commits

Author SHA1 Message Date
90b679870f add v0.4 design spec: GTD tasks, unified triage, deferrals, labels
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 08:15:55 +01:00
f3da0784b9 wire end-to-end: smtp provider for ActionQueue, actionQueue for SyncCoordinator, body fetch for reply/forward
- MailViewModel.setup() now creates SMTPClient provider when SMTP config is present,
  passes it to ActionQueue so send actions work
- ActionQueue is passed to SyncCoordinator so pending actions flush before sync
- Add ensureBodyLoaded() to fetch message body via IMAP before opening compose
- ThreadDetailView uses callback instead of binding for compose requests,
  allowing ContentView to fetch body before presenting sheet
- Add SMTPClient dependency to both app targets in project.yml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 06:00:42 +01:00
0bfcf2d610 add triage UI: archive, delete, flag, read/unread, move actions with auto-advance, compose triggers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:55:19 +01:00
5c0c5a5bda add compose flow: ComposeViewModel with draft auto-save, ComposeView with form UI
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:50:42 +01:00
7d847693d7 extend AutoDiscovery for SMTP, add SMTP fields to account setup UI
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:32:17 +01:00
cf2b463fd3 add ActionQueue: two-phase enqueue, FIFO flush, retry with max 5 attempts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:29:56 +01:00
c38c31bf4d add dot-stuffing for SMTP DATA command (RFC 5321 §4.5.2)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:25:55 +01:00
54ce92e280 add SMTPClient module: connection layer, message formatter, public API, tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:25:03 +01:00
427f197bb3 add IMAP write operations, special folder role detection
Extend IMAPClientProtocol with storeFlags, moveMessage, copyMessage,
expunge, appendMessage, capabilities methods. Implement all six in
IMAPClient actor using NIOIMAPCore typed commands. Add multi-part
command support to IMAPConnection/IMAPCommandRunner for APPEND.
MockIMAPClient tracks all write calls for testing. SyncCoordinator
detects mailbox roles from LIST attributes with name-based fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:13:39 +01:00
d659ed67de add v0.3 schema: smtp fields, mailbox roles, drafts, pending actions, mailstore queries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 05:01:17 +01:00
8c3f51adb4 fix v0.3 spec: address 11 review issues (concurrency, codable, bcc, folder roles, etc.) 2026-03-13 22:17:49 +01:00
5e1c26aa05 add v0.3 design spec: compose, triage, smtp, action queue 2026-03-13 22:12:47 +01:00
d5661459e4 bump calver to 2026.03.13, v0.2 complete: native swift email client with imap sync, grdb, swiftui
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:39:29 +01:00
a75738a79d add background body prefetch for recent messages (last 30 days)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:34:38 +01:00
deb4c1d15c add offline banner, sync status indicators
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:34:12 +01:00
00b5632f3f add imap auto-discovery: mozilla ispdb, dns srv fallback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:33:37 +01:00
1b8f3b6665 add keychain credential storage, persist account config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:25:49 +01:00
74179cb534 add html email rendering with wkwebview, script/tracker blocking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:23:15 +01:00
e3159d61e8 add three-column swiftui layout: sidebar, thread list, detail, account setup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:23:04 +01:00
6f0ba20d86 add mail, account setup viewmodels with grdb observation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:23:00 +01:00
1b915fc9ab scaffold multi-platform xcode project with xcodegen
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:17:11 +01:00
21227b3c78 add real IMAPClient actor with NIO connection, command pipeline, envelope parsing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:12:39 +01:00
ec820b2785 add nio connection layer: tls bootstrap, response handler, command runner
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:05:44 +01:00
300b583695 add sync coordinator: imap → mailstore pipeline with delta sync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:32:38 +01:00
ce5c985272 add imap client protocol, types, mock for testing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:27:20 +01:00
4670612e75 add FTS5 search, thread summaries, reactive observation streams
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:25:18 +01:00
ca3817c683 add thread reconstruction: simplified JWZ with merge support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:21:15 +01:00
abee491cec add mailstore CRUD: accounts, mailboxes, messages, threads, flags, body
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:18:59 +01:00
0927d9827d add mailstore schema: accounts, mailboxes, messages, threads, FTS5
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:16:23 +01:00
f37b287f5e add models module: shared types for accounts, messages, threads, sync
fix Package.swift: remove NIOIMAPCore product reference (only NIOIMAP is exported by swift-nio-imap)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:11:24 +01:00
9c3d02ae45 scaffold MagnumOpusCore swift package with four modules
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:05:02 +01:00
a5361e36bd add .worktrees/ to gitignore for isolated development workspaces 2026-03-13 17:15:05 +01:00
7aa3106be3 refine v0.2 spec after review: fix blockers, clarify ambiguities
address IMAP client complexity, remove bidirectional flag sync,
add attachment table, error handling, HTML rendering, FTS5 sync notes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:59:07 +01:00
1f0f5a188c add v0.2 native swift email client design spec
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:54:02 +01:00
1d68d7006a merge taskjuggler vscode extension into ideas
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:03:20 +01:00
e9978403c9 add .gitignore, remove tracked .DS_Store, sync-conflict files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:43:35 +01:00
5867799de4 support configurable binary paths for mbsync, notmuch env
Orchestrator reads MBSYNC_BIN and NOTMUCH_CONFIG from env vars so the
backend works on Uberspace where mbsync is built from source at a
custom path and notmuch needs an explicit config location.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:41:37 +01:00
35f558b323 add dev setup, sync trigger scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:22:46 +01:00
f4560913c9 connect macos client to sse for live updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:21:57 +01:00
5a878012b7 add three-column layout with sidebar, thread list, detail view
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:21:49 +01:00
e53a207583 add sse client for real-time backend events
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:21:42 +01:00
1b24cb721a add swift api client with model types, json decoding
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:17:01 +01:00
7bb74654c5 add macos swiftui app project, xcodegen config, initial views
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:12:52 +01:00
26406a219e add sync trigger endpoint, wire mbsync → notmuch → cache
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:57:32 +01:00
6466eb468d add sync-to-cache pipeline, publish events on new threads
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:56:23 +01:00
8d52e40f07 add sse event bus, real-time event endpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:48:32 +01:00
a6b09df0a4 add rest api routes for threads, messages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:33:13 +01:00
8b1cb7e07f add sqlite cache schema, thread/message storage
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:31:04 +01:00
64e35177f3 add notmuch query service with JSON parsing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:28:21 +01:00
e3bd05ca21 add sync orchestrator wrapping mbsync, notmuch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:26:11 +01:00