agent-inbox 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/AGENTS.md +18 -0
  2. package/CLAUDE.md +92 -1
  3. package/README.md +73 -6
  4. package/bench/inbox-growth.bench.ts +224 -0
  5. package/dist/federation/connection-manager.d.ts +8 -0
  6. package/dist/federation/connection-manager.d.ts.map +1 -1
  7. package/dist/federation/connection-manager.js +12 -0
  8. package/dist/federation/connection-manager.js.map +1 -1
  9. package/dist/federation/delivery-queue.d.ts +11 -3
  10. package/dist/federation/delivery-queue.d.ts.map +1 -1
  11. package/dist/federation/delivery-queue.js +38 -8
  12. package/dist/federation/delivery-queue.js.map +1 -1
  13. package/dist/federation/queue-store.d.ts +42 -0
  14. package/dist/federation/queue-store.d.ts.map +1 -0
  15. package/dist/federation/queue-store.js +87 -0
  16. package/dist/federation/queue-store.js.map +1 -0
  17. package/dist/index.d.mts +2 -0
  18. package/dist/index.d.ts +29 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +124 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +1 -0
  23. package/dist/index.mjs.map +1 -0
  24. package/dist/jsonrpc/mail-push-types.d.ts +9 -0
  25. package/dist/jsonrpc/mail-push-types.d.ts.map +1 -1
  26. package/dist/jsonrpc/mail-push-types.js +1 -0
  27. package/dist/jsonrpc/mail-push-types.js.map +1 -1
  28. package/dist/jsonrpc/mail-server.d.ts +8 -1
  29. package/dist/jsonrpc/mail-server.d.ts.map +1 -1
  30. package/dist/jsonrpc/mail-server.js +42 -1
  31. package/dist/jsonrpc/mail-server.js.map +1 -1
  32. package/dist/mail/address-book.d.ts +43 -0
  33. package/dist/mail/address-book.d.ts.map +1 -0
  34. package/dist/mail/address-book.js +95 -0
  35. package/dist/mail/address-book.js.map +1 -0
  36. package/dist/mail/attachment-store.d.ts +31 -0
  37. package/dist/mail/attachment-store.d.ts.map +1 -0
  38. package/dist/mail/attachment-store.js +74 -0
  39. package/dist/mail/attachment-store.js.map +1 -0
  40. package/dist/mail/email-mapper.d.ts +41 -0
  41. package/dist/mail/email-mapper.d.ts.map +1 -0
  42. package/dist/mail/email-mapper.js +216 -0
  43. package/dist/mail/email-mapper.js.map +1 -0
  44. package/dist/mail/fs-attachment-store.d.ts +38 -0
  45. package/dist/mail/fs-attachment-store.d.ts.map +1 -0
  46. package/dist/mail/fs-attachment-store.js +165 -0
  47. package/dist/mail/fs-attachment-store.js.map +1 -0
  48. package/dist/mail/mail-gateway.d.ts +114 -0
  49. package/dist/mail/mail-gateway.d.ts.map +1 -0
  50. package/dist/mail/mail-gateway.js +402 -0
  51. package/dist/mail/mail-gateway.js.map +1 -0
  52. package/dist/mail/provider-transport.d.ts +138 -0
  53. package/dist/mail/provider-transport.d.ts.map +1 -0
  54. package/dist/mail/provider-transport.js +434 -0
  55. package/dist/mail/provider-transport.js.map +1 -0
  56. package/dist/mail/rate-limiter.d.ts +20 -0
  57. package/dist/mail/rate-limiter.d.ts.map +1 -0
  58. package/dist/mail/rate-limiter.js +56 -0
  59. package/dist/mail/rate-limiter.js.map +1 -0
  60. package/dist/mail/smtp-transport.d.ts +141 -0
  61. package/dist/mail/smtp-transport.d.ts.map +1 -0
  62. package/dist/mail/smtp-transport.js +415 -0
  63. package/dist/mail/smtp-transport.js.map +1 -0
  64. package/dist/mail/types.d.ts +177 -0
  65. package/dist/mail/types.d.ts.map +1 -0
  66. package/dist/mail/types.js +11 -0
  67. package/dist/mail/types.js.map +1 -0
  68. package/dist/push/notifier.d.ts +21 -0
  69. package/dist/push/notifier.d.ts.map +1 -1
  70. package/dist/push/notifier.js +84 -2
  71. package/dist/push/notifier.js.map +1 -1
  72. package/dist/router/destination.d.ts +69 -0
  73. package/dist/router/destination.d.ts.map +1 -0
  74. package/dist/router/destination.js +106 -0
  75. package/dist/router/destination.js.map +1 -0
  76. package/dist/router/message-router.d.ts +15 -0
  77. package/dist/router/message-router.d.ts.map +1 -1
  78. package/dist/router/message-router.js +25 -3
  79. package/dist/router/message-router.js.map +1 -1
  80. package/dist/storage/interface.d.ts +21 -0
  81. package/dist/storage/interface.d.ts.map +1 -1
  82. package/dist/storage/memory.d.ts +12 -0
  83. package/dist/storage/memory.d.ts.map +1 -1
  84. package/dist/storage/memory.js +50 -0
  85. package/dist/storage/memory.js.map +1 -1
  86. package/dist/storage/sqlite.d.ts +14 -0
  87. package/dist/storage/sqlite.d.ts.map +1 -1
  88. package/dist/storage/sqlite.js +79 -1
  89. package/dist/storage/sqlite.js.map +1 -1
  90. package/dist/traceability/traceability.d.ts.map +1 -1
  91. package/dist/traceability/traceability.js +7 -17
  92. package/dist/traceability/traceability.js.map +1 -1
  93. package/dist/types.d.ts +80 -0
  94. package/dist/types.d.ts.map +1 -1
  95. package/docs/DESIGN.md +15 -0
  96. package/docs/MAIL-INTEROP-PLAN.md +660 -0
  97. package/package.json +29 -3
  98. package/renovate.json5 +6 -0
  99. package/rules/agent-inbox.md +1 -0
  100. package/src/federation/connection-manager.ts +12 -0
  101. package/src/federation/delivery-queue.ts +38 -8
  102. package/src/federation/queue-store.ts +124 -0
  103. package/src/index.ts +186 -1
  104. package/src/jsonrpc/mail-push-types.ts +10 -0
  105. package/src/jsonrpc/mail-server.ts +48 -1
  106. package/src/mail/address-book.ts +111 -0
  107. package/src/mail/attachment-store.ts +90 -0
  108. package/src/mail/email-mapper.ts +288 -0
  109. package/src/mail/fs-attachment-store.ts +163 -0
  110. package/src/mail/mail-gateway.ts +505 -0
  111. package/src/mail/provider-transport.ts +577 -0
  112. package/src/mail/rate-limiter.ts +51 -0
  113. package/src/mail/smtp-transport.ts +589 -0
  114. package/src/mail/types.ts +221 -0
  115. package/src/push/notifier.ts +98 -2
  116. package/src/router/destination.ts +140 -0
  117. package/src/router/message-router.ts +41 -4
  118. package/src/storage/interface.ts +22 -0
  119. package/src/storage/memory.ts +59 -0
  120. package/src/storage/sqlite.ts +114 -1
  121. package/src/traceability/traceability.ts +7 -16
  122. package/src/types.ts +74 -0
  123. package/test/federation/delivery-queue-sqlite.test.ts +158 -0
  124. package/test/load.test.ts +288 -0
  125. package/test/mail/address-book.test.ts +111 -0
  126. package/test/mail/attachment-store-contract.test.ts +92 -0
  127. package/test/mail/attachment-store.test.ts +69 -0
  128. package/test/mail/destination.test.ts +115 -0
  129. package/test/mail/dsn-parse.test.ts +239 -0
  130. package/test/mail/email-mapper.test.ts +341 -0
  131. package/test/mail/external-id.test.ts +43 -0
  132. package/test/mail/fs-attachment-store.test.ts +134 -0
  133. package/test/mail/full-flow-e2e.test.ts +200 -0
  134. package/test/mail/mail-gateway.test.ts +419 -0
  135. package/test/mail/mail-transport-contract.test.ts +134 -0
  136. package/test/mail/mock-mail.ts +161 -0
  137. package/test/mail/mock-postmark.ts +66 -0
  138. package/test/mail/provider-transport.test.ts +381 -0
  139. package/test/mail/rate-limiter.test.ts +48 -0
  140. package/test/mail/router-mail-integration.test.ts +138 -0
  141. package/test/mail/smtp-e2e.test.ts +98 -0
  142. package/test/mail/smtp-transport.test.ts +138 -0
  143. package/test/mail-presence.test.ts +149 -0
  144. package/test/mail-push.test.ts +44 -0
  145. package/test/mail-server.test.ts +25 -0
  146. package/test/push-notifier.test.ts +81 -0
  147. package/test/sqlite-storage.test.ts +106 -0
  148. package/test/storage.test.ts +92 -0
  149. package/vitest.bench.config.ts +8 -0
package/AGENTS.md ADDED
@@ -0,0 +1,18 @@
1
+ # Agent Instructions
2
+
3
+ <!-- SWARMKIT-WIKI:START -->
4
+ ## SwarmKit Ecosystem Knowledge Base
5
+
6
+ This repository participates in the SwarmKit ecosystem. Before changing architecture, package boundaries, cross-repo integrations, protocols, task/dispatch behavior, memory/learning flows, workspace/git behavior, or agent orchestration semantics, query the shared knowledge base:
7
+
8
+ ```sh
9
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs context --cwd "$PWD"
10
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs repo agent-inbox
11
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs interactions agent-inbox
12
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs search "<concept>"
13
+ ```
14
+
15
+ Canonical ecosystem memory lives at `/Users/alexngai/GitHub/swarmkit-wiki`.
16
+
17
+ When this repo changes knowledge that should persist across agents, update the relevant wiki article, semantic model, raw snapshot, graph artifact, or cross-repo interaction data in `swarmkit-wiki`. Do not treat this repo's local `.understand-anything/` cache as canonical; graph artifacts are centralized in `swarmkit-wiki/.understand-anything/graphs/`.
18
+ <!-- SWARMKIT-WIKI:END -->
package/CLAUDE.md CHANGED
@@ -13,7 +13,7 @@ npm test # Run all tests (vitest)
13
13
  npm run test:watch # Watch mode
14
14
  ```
15
15
 
16
- All tests use vitest. Run the full suite before committing — there are 356 tests across 27 files. Tests run fast (<6s total).
16
+ All tests use vitest. Run the full suite before committing — there are 612 tests across 49 files. Most run fast; the SQLite load tests take ~10s.
17
17
 
18
18
  ## Project layout
19
19
 
@@ -43,10 +43,22 @@ src/
43
43
  mesh-connector.ts Factory for creating MeshTransport connections (MapAgentConnectionClass)
44
44
  delivery-bridge.ts DeliveryHandler bridge — intercepts MAP delivery → inbox storage
45
45
  type-mapper.ts MAP Message ↔ Inbox Message bidirectional translation
46
+ mail/ Email interop (inbound + outbound) — see docs/MAIL-INTEROP-PLAN.md
47
+ types.ts MailTransport interface + envelope types (OutboundMail, InboundMail, etc.)
48
+ mail-gateway.ts Ingress/egress, dedup, abuse controls, durable retry, bounce handling
49
+ smtp-transport.ts Self-hosted SMTP backend (smtp-server/nodemailer/mailparser/mailauth) + DSN parsing
50
+ provider-transport.ts Managed Postmark backend (REST API + webhooks)
51
+ email-mapper.ts RFC 5322 email ↔ Inbox Message bidirectional translation
52
+ address-book.ts agent_id ↔ email-address mapping, owned domains, plus-addressing
53
+ attachment-store.ts SqliteAttachmentStore — content-addressed attachment bytes (default)
54
+ fs-attachment-store.ts FsAttachmentStore — filesystem attachment bytes (opt-in, large/high-volume)
55
+ rate-limiter.ts Sliding-window limiter for inbound abuse control
56
+ router/destination.ts classifyDestination — local / federation / mail recipient classification
46
57
 
47
58
  test/
48
59
  federation/ Federation tests (connection-manager, routing, queue, address, trust, integration, sdk-integration)
49
60
  mesh/ Mesh transport tests (mesh-transport, mesh-connector, federation-mesh, delivery-bridge, type-mapper, meshpeer-integration, e2e)
61
+ mail/ Mail tests (destination, address-book, email-mapper, attachment-store, contract suite, gateway, smtp/provider transports, dsn-parse, rate-limiter, smtp-e2e)
50
62
  registry/ Warm registry tests
51
63
  *.test.ts Core tests (storage, router, traceability, IPC, mail-server, push)
52
64
 
@@ -111,6 +123,53 @@ Key mesh components:
111
123
  - `DeliveryBridge` (`src/mesh/delivery-bridge.ts`) — intercepts MAP delivery for inbox storage
112
124
  - `TypeMapper` (`src/mesh/type-mapper.ts`) — bidirectional MAP ↔ Inbox message translation
113
125
 
126
+ ### Mail interop (email) is optional
127
+
128
+ Agent Inbox can send and receive external email through a pluggable
129
+ `MailTransport` interface (`src/mail/types.ts`). Enabled via `InboxConfig.mail`.
130
+ Full design: `docs/MAIL-INTEROP-PLAN.md`.
131
+
132
+ **Two backends, one interface** (mirrors the WebSocket/mesh transport split):
133
+ - **Self-hosted SMTP** (`smtp-transport.ts`, default) — `smtp-server` inbound +
134
+ `nodemailer` outbound + `mailparser`/`mailauth`. Lightweight; TLS terminated
135
+ upstream. All four libs are optional peer deps (dynamic import).
136
+ - **Managed Postmark** (`provider-transport.ts`) — REST API outbound + webhook
137
+ inbound. The `postmark` SDK is an optional peer dep; the client is injectable.
138
+
139
+ **Recipient classification** (`src/router/destination.ts`): `classifyDestination`
140
+ splits recipients into `local` / `federation` / `mail` using explicit lists —
141
+ email addresses (`bob@example.com`) and federation addresses (`bob@system-2`)
142
+ are syntactically identical, so this disambiguation is required. Federation
143
+ peers may declare domains (win over mail); unknown `@x` is an error, never a
144
+ guess. `MessageRouter.setMail()` adds the mail egress branch;
145
+ `ConnectionManager.setMailRecipientFilter()` stops federation from grabbing mail
146
+ addresses.
147
+
148
+ **Mail flow:**
149
+ 1. Inbound: transport receives → `MailGateway` applies policy (size, allow-list,
150
+ DMARC, attachment cap) + rate limiting + dedup (on RFC Message-ID) → maps via
151
+ `email-mapper` → commits via `router.routeMessage` (single ingestion path).
152
+ The transport ACKs only after the handler resolves (commit-before-ACK); a
153
+ throw NACKs.
154
+ 2. Outbound: router routes `mail`-class recipients to `MailGateway.send()` →
155
+ `email-mapper` renders → `transport.send()`. `delivered`/`transient`/
156
+ `permanent` disposition drives done / durable-retry-queue / bounce.
157
+ 3. Bounces: outbound `permanent` results and inbound DSNs (RFC 3464, parsed by
158
+ SMTP `parseDsnFromParsed` or Postmark bounce webhooks) converge on one
159
+ config-gated handler — emits `mail.bounced` and synthesizes an inbox notice.
160
+
161
+ **Durability:** outbound retries use the `DeliveryQueue` with the SQLite
162
+ `QueueStore` (survives restart); inbound dedup uses `storage.recordExternalId`/
163
+ `hasSeenExternalId`. Attachments live behind `AttachmentStore`, content-addressed
164
+ by sha256 — `SqliteAttachmentStore` (default, atomic with the message) or
165
+ `FsAttachmentStore` (opt-in via `config.mail.attachments.backend = "fs"`, keeps
166
+ bytes on disk; write-then-rename so a crash leaves only GC-able orphans). Both
167
+ pass the shared `test/mail/attachment-store-contract.test.ts`.
168
+
169
+ **Contract suite:** `test/mail/mail-transport-contract.test.ts` runs the same
170
+ suite against every backend via a `MailTransportHarness` (mock + Postmark fake
171
+ client). Any new backend must pass it unchanged.
172
+
114
173
  ### Event-driven internals
115
174
 
116
175
  Components communicate via `EventEmitter`. Key events:
@@ -120,6 +179,7 @@ Components communicate via `EventEmitter`. Key events:
120
179
  - `federation.message.received` — incoming federation message
121
180
  - `federation.broadcast` — broadcast strategy fired
122
181
  - `routing.updated` — routing table changed
182
+ - `mail.received` / `mail.sent` / `mail.queued` / `mail.bounced` / `mail.rejected` / `mail.rate_limited` — mail gateway lifecycle
123
183
 
124
184
  ## Conventions
125
185
 
@@ -130,6 +190,7 @@ Components communicate via `EventEmitter`. Key events:
130
190
  - Content normalization: string payloads auto-wrapped to `{ type: "text", text: "..." }`
131
191
  - Federation tests use `MockMapServer` (in-process broker) in `test/federation/sdk-integration.test.ts`
132
192
  - Mesh tests use `MockMeshContext` (linked pair) in `test/mesh/mock-mesh.ts`
193
+ - Mail tests use `MockMailTransport` (`test/mail/mock-mail.ts`) and a fake Postmark client (`test/mail/mock-postmark.ts`); both expose a `MailTransportHarness` for the shared contract suite
133
194
  - Mesh channel name convention: protocol channels use `"proto:"` prefix (e.g., `"proto:agent-inbox"`)
134
195
 
135
196
  ## Common tasks
@@ -149,3 +210,33 @@ Components communicate via `EventEmitter`. Key events:
149
210
  1. Add to interface in `src/storage/interface.ts`
150
211
  2. Implement in both `memory.ts` and `sqlite.ts`
151
212
  3. Test in `test/storage.test.ts` and `test/sqlite-storage.test.ts`
213
+
214
+ ### Adding a new mail backend
215
+ 1. Implement the `MailTransport` interface (`src/mail/types.ts`) in
216
+ `src/mail/<name>-transport.ts`. Load any SDK as an optional peer dep via
217
+ dynamic import; keep send/parse logic in exported pure functions.
218
+ 2. Map the backend's failures to `delivered`/`transient`/`permanent`
219
+ dispositions — never throw from `send()` for delivery failures. ACK inbound
220
+ only after the awaited handler resolves.
221
+ 3. Provide a `MailTransportHarness` (inject inbound + program next send) and add
222
+ `runMailTransportContract("<Name>", makeHarness)` to
223
+ `test/mail/mail-transport-contract.test.ts`. It must pass unchanged.
224
+ 4. Wire it in `src/index.ts` under the `config.mail.backend` switch and declare
225
+ the SDK in `package.json` peerDependencies (optional).
226
+
227
+ <!-- SWARMKIT-WIKI:START -->
228
+ ## SwarmKit Ecosystem Knowledge Base
229
+
230
+ This repository participates in the SwarmKit ecosystem. Before changing architecture, package boundaries, cross-repo integrations, protocols, task/dispatch behavior, memory/learning flows, workspace/git behavior, or agent orchestration semantics, query the shared knowledge base:
231
+
232
+ ```sh
233
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs context --cwd "$PWD"
234
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs repo agent-inbox
235
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs interactions agent-inbox
236
+ node /Users/alexngai/GitHub/swarmkit-wiki/scripts/query-knowledge.mjs search "<concept>"
237
+ ```
238
+
239
+ Canonical ecosystem memory lives at `/Users/alexngai/GitHub/swarmkit-wiki`.
240
+
241
+ When this repo changes knowledge that should persist across agents, update the relevant wiki article, semantic model, raw snapshot, graph artifact, or cross-repo interaction data in `swarmkit-wiki`. Do not treat this repo's local `.understand-anything/` cache as canonical; graph artifacts are centralized in `swarmkit-wiki/.understand-anything/graphs/`.
242
+ <!-- SWARMKIT-WIKI:END -->
package/README.md CHANGED
@@ -10,6 +10,7 @@ Built to work with [claude-code-swarm](https://github.com/alexngai/claude-code-s
10
10
  - **Threading** — Messages can be grouped by `thread_tag` and linked via `in_reply_to` for conversation threading.
11
11
  - **Traceability** — Auto-creates conversations, turns, and threads from messaging events following MAP's mail conventions.
12
12
  - **Federation** — Route messages across independent systems. Supports WebSocket (MAP SDK) and encrypted P2P mesh (agentic-mesh) transports, configurable per-peer. Routing strategies: table, broadcast, hierarchical.
13
+ - **Email interop** — Send and receive real email through a pluggable `MailTransport`. Self-hosted SMTP (default) or managed Postmark, behind one interface. Inbound is mapped into agent inboxes; outbound, durable retry, dedup, bounces, and abuse controls are built in.
13
14
  - **Multiple interfaces** — IPC (UNIX socket), MCP tools (stdio), MAP JSON-RPC, and event-based push via `inbox.message` events.
14
15
 
15
16
  ## Architecture
@@ -23,12 +24,20 @@ Agent Runtime (Claude Code, OpenAI, etc.)
23
24
 
24
25
  ├── Local delivery (same system)
25
26
  ├── Federation via MAP SDK (WebSocket)
26
- └── Federation via agentic-mesh (encrypted P2P)
27
+ ├── Federation via agentic-mesh (encrypted P2P)
28
+ │ │
29
+ │ MeshPeer (MAP server, FederationGateway,
30
+ │ agent discovery, hop/loop detection)
31
+ └── Email via MailTransport (self-hosted SMTP / Postmark)
27
32
 
28
- MeshPeer (MAP server, FederationGateway,
29
- agent discovery, hop/loop detection)
33
+ MailGateway (ingress policy + dedup, durable retry,
34
+ bounces, attachments)
30
35
  ```
31
36
 
37
+ Recipients are classified once into `local` / `federation` / `mail`, so an
38
+ external email address (`bob@example.com`) and a federation address
39
+ (`bob@system-2`) — which look identical — are routed unambiguously.
40
+
32
41
  Agent Inbox can run standalone (IPC + MCP only), with a MAP server (WebSocket federation), or with an embedded agentic-mesh `MeshPeer` (encrypted P2P federation with full MAP protocol support).
33
42
 
34
43
  ## Quick start
@@ -149,12 +158,57 @@ Federation connections are gated by an allow-list. Only systems in `allowedServe
149
158
 
150
159
  Messages to offline peers are queued with configurable TTL, overflow policy, and retry strategy. Queues flush automatically on reconnect.
151
160
 
161
+ ## Email interop
162
+
163
+ Agents can send and receive real email. Email moves through a pluggable
164
+ `MailTransport` interface with two interchangeable backends (the same
165
+ WebSocket/mesh split applied to mail):
166
+
167
+ - **Self-hosted SMTP** (default) — `smtp-server` inbound + `nodemailer` outbound,
168
+ with `mailparser`/`mailauth`. Lightweight; TLS terminated upstream.
169
+ - **Managed Postmark** — REST API outbound + webhook inbound.
170
+
171
+ All four SMTP libs and the `postmark` SDK are **optional peer dependencies**,
172
+ loaded only when mail is enabled.
173
+
174
+ ```typescript
175
+ await createAgentInbox({
176
+ sqlitePath: "/var/lib/agent-inbox/inbox.db", // durable queue + attachments
177
+ config: {
178
+ mail: {
179
+ enabled: true,
180
+ backend: "smtp", // or "provider"
181
+ identity: {
182
+ localDomains: ["agents.example.com"],
183
+ mappings: [{ agentId: "alice", address: "alice@agents.example.com" }],
184
+ },
185
+ routableDomains: ["example.com"], // domains we'll send to
186
+ smtp: { listenPort: 25, relay: { host: "smarthost", port: 587 } },
187
+ rateLimit: { perSenderDomain: 60, global: 600 },
188
+ },
189
+ },
190
+ });
191
+ ```
192
+
193
+ Once enabled, sending to an email address just works: `send_message({ to: "user@example.com", ... })` routes via the mail gateway.
194
+
195
+ **What's handled for you:**
196
+
197
+ - **Recipient classification** — `local` / `federation` / `mail`, explicit-list driven, so `bob@example.com` (mail) and `bob@system-2` (federation) never collide. Unknown domains are an error, never a guess.
198
+ - **Threading** — RFC `Message-ID`/`In-Reply-To`/`References` map onto inbox `thread_tag`/`in_reply_to` in both directions.
199
+ - **Durability** — outbound retries use the persistent delivery queue (survives restart); inbound is deduped on `Message-ID` and committed before the transport ACKs.
200
+ - **Bounces** — outbound permanent failures and inbound DSNs (RFC 3464 / Postmark webhooks) converge on one handler that emits `mail.bounced` and drops a notice into the sender's inbox.
201
+ - **Attachments** — content-addressed behind an `AttachmentStore`: SQLite BLOBs (default) or filesystem (`attachments.backend: "fs"`).
202
+ - **Abuse controls** — per-sender/global rate limiting, sender allow-lists, optional DMARC-fail rejection, attachment caps, and webhook Basic Auth.
203
+
204
+ Full design and rationale: [docs/MAIL-INTEROP-PLAN.md](docs/MAIL-INTEROP-PLAN.md).
205
+
152
206
  ## Storage
153
207
 
154
208
  Two storage backends:
155
209
 
156
210
  - **InMemoryStorage** — Default. Fast, no dependencies. Data lost on restart.
157
- - **SQLiteStorage** — Persistent storage with FTS5 full-text search. Requires `better-sqlite3`.
211
+ - **SQLiteStorage** — Persistent storage with FTS5 full-text search. Requires `better-sqlite3`. Also backs the durable mail retry queue, inbound dedup, and (by default) attachment bytes — so enabling mail with SQLite gives restart-safe delivery.
158
212
 
159
213
  ## Project structure
160
214
 
@@ -167,7 +221,8 @@ src/
167
221
  memory.ts In-memory implementation
168
222
  sqlite.ts SQLite implementation (persistent + FTS5)
169
223
  router/
170
- message-router.ts Message routing: resolve recipients, local vs remote
224
+ message-router.ts Message routing: resolve recipients, local vs remote vs mail
225
+ destination.ts classifyDestination — local / federation / mail
171
226
  federation/
172
227
  connection-manager.ts MAP connections + federation peer management
173
228
  routing-engine.ts Configurable routing (table/broadcast/hierarchical)
@@ -193,6 +248,16 @@ src/
193
248
  mesh-connector.ts Factory for MeshTransport connections
194
249
  delivery-bridge.ts DeliveryHandler bridge (MAP delivery → inbox storage)
195
250
  type-mapper.ts Bidirectional MAP ↔ Inbox message translation
251
+ mail/
252
+ types.ts MailTransport interface + envelope types
253
+ mail-gateway.ts Ingress/egress, dedup, abuse controls, retry, bounces
254
+ smtp-transport.ts Self-hosted SMTP backend + DSN parsing
255
+ provider-transport.ts Managed Postmark backend (REST + webhooks)
256
+ email-mapper.ts RFC 5322 email ↔ Inbox message translation
257
+ address-book.ts agent_id ↔ email, owned domains, plus-addressing
258
+ attachment-store.ts SqliteAttachmentStore (default)
259
+ fs-attachment-store.ts FsAttachmentStore (opt-in, filesystem)
260
+ rate-limiter.ts Sliding-window limiter for inbound abuse control
196
261
  ```
197
262
 
198
263
  ## Testing
@@ -202,7 +267,7 @@ npm test # Run all tests
202
267
  npm run test:watch # Watch mode
203
268
  ```
204
269
 
205
- 357 tests across 27 test files covering:
270
+ 612 tests across 49 test files covering:
206
271
 
207
272
  - Storage (in-memory + SQLite)
208
273
  - Message routing and content normalization
@@ -217,6 +282,7 @@ npm run test:watch # Watch mode
217
282
  - Mesh transport (MeshTransport, MeshConnector, federation-mesh integration)
218
283
  - Mesh Phase 2 (DeliveryBridge, TypeMapper, MeshPeer integration)
219
284
  - E2E with real agentic-mesh MeshPeer instances (bidirectional messaging, reply chains, concurrent load)
285
+ - Email interop: destination classification, RFC mapping, address book, attachment stores (SQLite + filesystem), durable queue persistence, DSN/bounce parsing (incl. real-`mailparser` fixtures), rate limiting, a shared `MailTransport` contract run against both backends, and a full-flow e2e over real SMTP sockets between two nodes
220
286
 
221
287
  ## Development
222
288
 
@@ -231,6 +297,7 @@ Requires Node.js >= 18.
231
297
  ## Further reading
232
298
 
233
299
  - [docs/DESIGN.md](docs/DESIGN.md) — Detailed architecture and design decisions
300
+ - [docs/MAIL-INTEROP-PLAN.md](docs/MAIL-INTEROP-PLAN.md) — Email interop design: the `MailTransport` interface, recipient classification, durability, bounces, and the SMTP/Postmark backends
234
301
  - [docs/CLAUDE-CODE-SWARM-PROPOSAL.md](docs/CLAUDE-CODE-SWARM-PROPOSAL.md) — Proposal: replace claude-code-swarm's sidecar with embedded MeshPeer + agent-inbox
235
302
 
236
303
  ## License
@@ -0,0 +1,224 @@
1
+ import { describe, it } from "vitest";
2
+ import * as fs from "node:fs";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import { EventEmitter } from "node:events";
6
+ import { ulid } from "ulid";
7
+ import { SqliteStorage } from "../src/storage/sqlite.js";
8
+ import { MessageRouter } from "../src/router/message-router.js";
9
+ import { TraceabilityLayer } from "../src/traceability/traceability.js";
10
+ import { PushNotifier } from "../src/push/notifier.js";
11
+ import type { Message, Conversation, Turn } from "../src/types.js";
12
+ import type { Storage } from "../src/storage/interface.js";
13
+
14
+ /**
15
+ * Before/after benchmark.
16
+ *
17
+ * Drives the same N-message workload through two code paths:
18
+ * - LEGACY: simulates the pre-fix behavior (jsonl caps off + traceability
19
+ * re-upserts the message and rewrites the conversation+participants on
20
+ * every message).
21
+ * - FIXED: the current code path.
22
+ *
23
+ * Reports jsonl file size, SQLite DB size, and wall-clock time so the
24
+ * impact of the fixes is visible empirically.
25
+ */
26
+
27
+ const N = parseInt(process.env.BENCH_N ?? "2000", 10);
28
+ const RECIPIENTS = 10;
29
+
30
+ interface Result {
31
+ label: string;
32
+ durationMs: number;
33
+ jsonlBytes: number;
34
+ jsonlLines: number;
35
+ dbBytes: number;
36
+ }
37
+
38
+ /** Pre-fix traceability behavior, kept here purely for the benchmark. */
39
+ class LegacyTraceability {
40
+ private tagToConversation = new Map<string, string>();
41
+ private scopeCatchAll = new Map<string, string>();
42
+
43
+ constructor(private storage: Storage, events: EventEmitter) {
44
+ events.on("message.created", (msg: Message) => this.onMessage(msg));
45
+ }
46
+
47
+ private onMessage(message: Message): void {
48
+ const conversationId = this.resolveConversation(message);
49
+
50
+ // OLD: re-upsert the entire message (and recipients) just to set conv_id
51
+ if (!message.conversation_id) {
52
+ message.conversation_id = conversationId;
53
+ this.storage.putMessage(message);
54
+ }
55
+
56
+ this.ensureParticipant(conversationId, message.sender_id);
57
+ for (const r of message.recipients) {
58
+ this.ensureParticipant(conversationId, r.agent_id);
59
+ }
60
+
61
+ const turn: Turn = {
62
+ id: `turn-${ulid()}`,
63
+ conversation_id: conversationId,
64
+ participant_id: message.sender_id,
65
+ source_message_id: message.id,
66
+ content_type: message.content.type,
67
+ content: message.content,
68
+ created_at: message.created_at,
69
+ };
70
+ this.storage.addTurn(turn);
71
+
72
+ // OLD: rewrite conversation row + DELETE/INSERT all participants
73
+ const conv = this.storage.getConversation(conversationId);
74
+ if (conv) {
75
+ conv.updated_at = message.created_at;
76
+ this.storage.putConversation(conv);
77
+ }
78
+ }
79
+
80
+ private resolveConversation(message: Message): string {
81
+ if (message.thread_tag) {
82
+ const key = `${message.thread_tag}:${message.scope}`;
83
+ const existing = this.tagToConversation.get(key);
84
+ if (existing) return existing;
85
+ const id = this.create(message.scope, message.thread_tag);
86
+ this.tagToConversation.set(key, id);
87
+ return id;
88
+ }
89
+ const existing = this.scopeCatchAll.get(message.scope);
90
+ if (existing) return existing;
91
+ const id = this.create(message.scope, "General");
92
+ this.scopeCatchAll.set(message.scope, id);
93
+ return id;
94
+ }
95
+
96
+ private create(scope: string, subject?: string): string {
97
+ const now = new Date().toISOString();
98
+ const conv: Conversation = {
99
+ id: `conv-${ulid()}`,
100
+ scope,
101
+ subject,
102
+ status: "active",
103
+ participants: [],
104
+ metadata: {},
105
+ created_at: now,
106
+ updated_at: now,
107
+ };
108
+ this.storage.putConversation(conv);
109
+ return conv.id;
110
+ }
111
+
112
+ private ensureParticipant(conversationId: string, agentId: string): void {
113
+ const conv = this.storage.getConversation(conversationId);
114
+ if (!conv) return;
115
+ if (conv.participants.some((p) => p.agent_id === agentId)) return;
116
+ conv.participants.push({
117
+ agent_id: agentId,
118
+ joined_at: new Date().toISOString(),
119
+ });
120
+ this.storage.putConversation(conv);
121
+ }
122
+ }
123
+
124
+ async function runScenario(
125
+ label: string,
126
+ setup: (
127
+ inboxDir: string,
128
+ dbPath: string
129
+ ) => {
130
+ storage: SqliteStorage;
131
+ router: MessageRouter;
132
+ }
133
+ ): Promise<Result> {
134
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "inbox-bench-"));
135
+ const dbPath = path.join(tmp, "inbox.db");
136
+
137
+ const { storage, router } = setup(tmp, dbPath);
138
+ const recipients = Array.from({ length: RECIPIENTS }, (_, i) => `agent-${i}`);
139
+
140
+ const t0 = Date.now();
141
+ for (let i = 0; i < N; i++) {
142
+ await router.routeMessage({
143
+ from: "alice",
144
+ to: recipients,
145
+ payload: `msg-${i} ${"x".repeat(40)}`,
146
+ threadTag: "broadcast",
147
+ });
148
+ }
149
+ const durationMs = Date.now() - t0;
150
+
151
+ const inboxFile = path.join(tmp, "agent-0.inbox.jsonl");
152
+ const raw = fs.existsSync(inboxFile)
153
+ ? fs.readFileSync(inboxFile, "utf-8")
154
+ : "";
155
+ const jsonlLines = raw.split("\n").filter((l) => l.length > 0).length;
156
+ const jsonlBytes = fs.existsSync(inboxFile)
157
+ ? fs.statSync(inboxFile).size
158
+ : 0;
159
+
160
+ storage.close();
161
+ const dbBytes = fs.statSync(dbPath).size;
162
+
163
+ fs.rmSync(tmp, { recursive: true, force: true });
164
+
165
+ return { label, durationMs, jsonlBytes, jsonlLines, dbBytes };
166
+ }
167
+
168
+ function fmt(bytes: number): string {
169
+ if (bytes < 1024) return `${bytes} B`;
170
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KiB`;
171
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MiB`;
172
+ }
173
+
174
+ describe("inbox-growth before/after", () => {
175
+ it(
176
+ `compares legacy vs fixed code paths (N=${N})`,
177
+ async () => {
178
+ const legacy = await runScenario("LEGACY", (inboxDir, dbPath) => {
179
+ const storage = new SqliteStorage({ path: dbPath });
180
+ const events = new EventEmitter();
181
+ const router = new MessageRouter(storage, events, "default");
182
+ new LegacyTraceability(storage, events);
183
+ new PushNotifier(
184
+ {
185
+ inboxDir,
186
+ // pre-fix: no caps
187
+ maxEntriesPerInbox: 0,
188
+ maxBytesPerInbox: 0,
189
+ },
190
+ storage,
191
+ events
192
+ );
193
+ return { storage, router };
194
+ });
195
+
196
+ const fixed = await runScenario("FIXED", (inboxDir, dbPath) => {
197
+ const storage = new SqliteStorage({ path: dbPath });
198
+ const events = new EventEmitter();
199
+ const router = new MessageRouter(storage, events, "default");
200
+ new TraceabilityLayer(storage, events);
201
+ new PushNotifier({ inboxDir }, storage, events); // defaults
202
+ return { storage, router };
203
+ });
204
+
205
+ const pct = (a: number, b: number) =>
206
+ a === 0 ? "n/a" : `${((b / a) * 100).toFixed(1)}%`;
207
+
208
+ const lines = [
209
+ "",
210
+ `Inbox growth bench — N=${N} messages × ${RECIPIENTS} recipients (broadcast)`,
211
+ "─".repeat(78),
212
+ `${"metric".padEnd(28)} ${"legacy".padEnd(16)} ${"fixed".padEnd(16)} fixed/legacy`,
213
+ "─".repeat(78),
214
+ `${"jsonl file size".padEnd(28)} ${fmt(legacy.jsonlBytes).padEnd(16)} ${fmt(fixed.jsonlBytes).padEnd(16)} ${pct(legacy.jsonlBytes, fixed.jsonlBytes)}`,
215
+ `${"jsonl line count".padEnd(28)} ${String(legacy.jsonlLines).padEnd(16)} ${String(fixed.jsonlLines).padEnd(16)} ${pct(legacy.jsonlLines, fixed.jsonlLines)}`,
216
+ `${"sqlite db size (post-close)".padEnd(28)} ${fmt(legacy.dbBytes).padEnd(16)} ${fmt(fixed.dbBytes).padEnd(16)} ${pct(legacy.dbBytes, fixed.dbBytes)}`,
217
+ `${"wall-clock duration".padEnd(28)} ${(legacy.durationMs + " ms").padEnd(16)} ${(fixed.durationMs + " ms").padEnd(16)} ${pct(legacy.durationMs, fixed.durationMs)}`,
218
+ "─".repeat(78),
219
+ ];
220
+ console.log(lines.join("\n"));
221
+ },
222
+ 120_000
223
+ );
224
+ });
@@ -39,6 +39,8 @@ export declare class ConnectionManager {
39
39
  private meshConnector;
40
40
  private meshPeer;
41
41
  private onIncoming;
42
+ /** Optional predicate marking recipients owned by the mail gateway (skipped). */
43
+ private mailFilter;
42
44
  readonly routing: RoutingEngine;
43
45
  readonly queue: DeliveryQueue;
44
46
  readonly trust: TrustManager;
@@ -53,6 +55,12 @@ export declare class ConnectionManager {
53
55
  * Get the resolved system ID for this Agent Inbox instance.
54
56
  */
55
57
  getSystemId(): SystemId;
58
+ /**
59
+ * Register a predicate identifying recipients handled by the mail gateway.
60
+ * Those recipients are skipped by route() so a `bob@example.com` address is
61
+ * not mistaken for a federation peer.
62
+ */
63
+ setMailRecipientFilter(fn: (agentId: string) => boolean): void;
56
64
  /**
57
65
  * Establish federation with a peer. Uses MAP federation/connect protocol.
58
66
  * If an SDK class was injected, opens a real MAP connection to the peer.
@@ -1 +1 @@
1
- {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/federation/connection-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/federation/connection-manager.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ export class ConnectionManager {
25
25
  meshConnector;
26
26
  meshPeer;
27
27
  onIncoming;
28
+ /** Optional predicate marking recipients owned by the mail gateway (skipped). */
29
+ mailFilter = null;
28
30
  routing;
29
31
  queue;
30
32
  trust;
@@ -64,6 +66,14 @@ export class ConnectionManager {
64
66
  getSystemId() {
65
67
  return this.systemId;
66
68
  }
69
+ /**
70
+ * Register a predicate identifying recipients handled by the mail gateway.
71
+ * Those recipients are skipped by route() so a `bob@example.com` address is
72
+ * not mistaken for a federation peer.
73
+ */
74
+ setMailRecipientFilter(fn) {
75
+ this.mailFilter = fn;
76
+ }
67
77
  /**
68
78
  * Establish federation with a peer. Uses MAP federation/connect protocol.
69
79
  * If an SDK class was injected, opens a real MAP connection to the peer.
@@ -199,6 +209,8 @@ export class ConnectionManager {
199
209
  async route(message) {
200
210
  // Determine target for each recipient
201
211
  for (const recipient of message.recipients) {
212
+ if (this.mailFilter?.(recipient.agent_id))
213
+ continue; // handled by mail gateway
202
214
  const addr = parseAddress(recipient.agent_id);
203
215
  if (!isRemoteAddress(addr))
204
216
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/federation/connection-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/federation/connection-manager.ts"],"names":[],"mappings":"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"}