agent-inbox 0.2.3 → 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.
- package/AGENTS.md +18 -0
- package/CLAUDE.md +92 -1
- package/README.md +73 -6
- package/dist/federation/connection-manager.d.ts +8 -0
- package/dist/federation/connection-manager.d.ts.map +1 -1
- package/dist/federation/connection-manager.js +12 -0
- package/dist/federation/connection-manager.js.map +1 -1
- package/dist/federation/delivery-queue.d.ts +11 -3
- package/dist/federation/delivery-queue.d.ts.map +1 -1
- package/dist/federation/delivery-queue.js +38 -8
- package/dist/federation/delivery-queue.js.map +1 -1
- package/dist/federation/queue-store.d.ts +42 -0
- package/dist/federation/queue-store.d.ts.map +1 -0
- package/dist/federation/queue-store.js +87 -0
- package/dist/federation/queue-store.js.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mail/address-book.d.ts +43 -0
- package/dist/mail/address-book.d.ts.map +1 -0
- package/dist/mail/address-book.js +95 -0
- package/dist/mail/address-book.js.map +1 -0
- package/dist/mail/attachment-store.d.ts +31 -0
- package/dist/mail/attachment-store.d.ts.map +1 -0
- package/dist/mail/attachment-store.js +74 -0
- package/dist/mail/attachment-store.js.map +1 -0
- package/dist/mail/email-mapper.d.ts +41 -0
- package/dist/mail/email-mapper.d.ts.map +1 -0
- package/dist/mail/email-mapper.js +216 -0
- package/dist/mail/email-mapper.js.map +1 -0
- package/dist/mail/fs-attachment-store.d.ts +38 -0
- package/dist/mail/fs-attachment-store.d.ts.map +1 -0
- package/dist/mail/fs-attachment-store.js +165 -0
- package/dist/mail/fs-attachment-store.js.map +1 -0
- package/dist/mail/mail-gateway.d.ts +114 -0
- package/dist/mail/mail-gateway.d.ts.map +1 -0
- package/dist/mail/mail-gateway.js +402 -0
- package/dist/mail/mail-gateway.js.map +1 -0
- package/dist/mail/provider-transport.d.ts +138 -0
- package/dist/mail/provider-transport.d.ts.map +1 -0
- package/dist/mail/provider-transport.js +434 -0
- package/dist/mail/provider-transport.js.map +1 -0
- package/dist/mail/rate-limiter.d.ts +20 -0
- package/dist/mail/rate-limiter.d.ts.map +1 -0
- package/dist/mail/rate-limiter.js +56 -0
- package/dist/mail/rate-limiter.js.map +1 -0
- package/dist/mail/smtp-transport.d.ts +141 -0
- package/dist/mail/smtp-transport.d.ts.map +1 -0
- package/dist/mail/smtp-transport.js +415 -0
- package/dist/mail/smtp-transport.js.map +1 -0
- package/dist/mail/types.d.ts +177 -0
- package/dist/mail/types.d.ts.map +1 -0
- package/dist/mail/types.js +11 -0
- package/dist/mail/types.js.map +1 -0
- package/dist/router/destination.d.ts +69 -0
- package/dist/router/destination.d.ts.map +1 -0
- package/dist/router/destination.js +106 -0
- package/dist/router/destination.js.map +1 -0
- package/dist/router/message-router.d.ts +15 -0
- package/dist/router/message-router.d.ts.map +1 -1
- package/dist/router/message-router.js +25 -3
- package/dist/router/message-router.js.map +1 -1
- package/dist/storage/interface.d.ts +9 -0
- package/dist/storage/interface.d.ts.map +1 -1
- package/dist/storage/memory.d.ts +4 -0
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +12 -0
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/sqlite.d.ts +6 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +28 -0
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/types.d.ts +79 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/DESIGN.md +15 -0
- package/docs/MAIL-INTEROP-PLAN.md +660 -0
- package/package.json +28 -3
- package/renovate.json5 +6 -0
- package/rules/agent-inbox.md +1 -0
- package/src/federation/connection-manager.ts +12 -0
- package/src/federation/delivery-queue.ts +38 -8
- package/src/federation/queue-store.ts +124 -0
- package/src/index.ts +148 -0
- package/src/mail/address-book.ts +111 -0
- package/src/mail/attachment-store.ts +90 -0
- package/src/mail/email-mapper.ts +288 -0
- package/src/mail/fs-attachment-store.ts +163 -0
- package/src/mail/mail-gateway.ts +505 -0
- package/src/mail/provider-transport.ts +577 -0
- package/src/mail/rate-limiter.ts +51 -0
- package/src/mail/smtp-transport.ts +589 -0
- package/src/mail/types.ts +221 -0
- package/src/router/destination.ts +140 -0
- package/src/router/message-router.ts +41 -4
- package/src/storage/interface.ts +11 -0
- package/src/storage/memory.ts +15 -0
- package/src/storage/sqlite.ts +36 -0
- package/src/types.ts +73 -0
- package/test/federation/delivery-queue-sqlite.test.ts +158 -0
- package/test/load.test.ts +1 -1
- package/test/mail/address-book.test.ts +111 -0
- package/test/mail/attachment-store-contract.test.ts +92 -0
- package/test/mail/attachment-store.test.ts +69 -0
- package/test/mail/destination.test.ts +115 -0
- package/test/mail/dsn-parse.test.ts +239 -0
- package/test/mail/email-mapper.test.ts +341 -0
- package/test/mail/external-id.test.ts +43 -0
- package/test/mail/fs-attachment-store.test.ts +134 -0
- package/test/mail/full-flow-e2e.test.ts +200 -0
- package/test/mail/mail-gateway.test.ts +419 -0
- package/test/mail/mail-transport-contract.test.ts +134 -0
- package/test/mail/mock-mail.ts +161 -0
- package/test/mail/mock-postmark.ts +66 -0
- package/test/mail/provider-transport.test.ts +381 -0
- package/test/mail/rate-limiter.test.ts +48 -0
- package/test/mail/router-mail-integration.test.ts +138 -0
- package/test/mail/smtp-e2e.test.ts +98 -0
- package/test/mail/smtp-transport.test.ts +138 -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
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,OAAO,EACP,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAEV,uBAAuB,EAEvB,YAAY,EAEb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,KAAK,IAAI,CAAC;AAEX;;;;;;GAMG;AACH,qBAAa,iBAAiB;
|
|
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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"}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import type { Message, DeliveryQueueConfig, QueuedMessage } from "../types.js";
|
|
3
|
+
import type { QueueStore } from "./queue-store.js";
|
|
3
4
|
/**
|
|
4
5
|
* Delivery queue for messages to offline or unreachable federation peers.
|
|
5
6
|
*
|
|
6
|
-
* Supports configurable TTL, overflow policy, and retry strategy.
|
|
7
|
-
*
|
|
7
|
+
* Supports configurable TTL, overflow policy, and retry strategy. Keeps an
|
|
8
|
+
* in-memory index for fast reads; when a durable QueueStore is supplied, every
|
|
9
|
+
* mutation is write-through journaled and the index is hydrated from the store
|
|
10
|
+
* on construction so queued messages survive a restart.
|
|
8
11
|
*/
|
|
9
12
|
export declare class DeliveryQueue {
|
|
10
13
|
private events;
|
|
11
14
|
private queues;
|
|
12
15
|
private config;
|
|
13
16
|
private tickTimer?;
|
|
14
|
-
|
|
17
|
+
private store;
|
|
18
|
+
constructor(events: EventEmitter, config?: Partial<DeliveryQueueConfig>, opts?: {
|
|
19
|
+
store?: QueueStore;
|
|
20
|
+
});
|
|
21
|
+
/** Load persisted entries into the in-memory index (durable mode). */
|
|
22
|
+
private hydrate;
|
|
15
23
|
/**
|
|
16
24
|
* Enqueue a message for a peer. Returns the queued message ID, or null if rejected.
|
|
17
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-queue.d.ts","sourceRoot":"","sources":["../../src/federation/delivery-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery-queue.d.ts","sourceRoot":"","sources":["../../src/federation/delivery-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAanD;;;;;;;GAOG;AACH,qBAAa,aAAa;IAOtB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAiC;IACnD,OAAO,CAAC,KAAK,CAAoB;gBAGvB,MAAM,EAAE,YAAY,EAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EACrC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE;IAO/B,sEAAsE;IACtE,OAAO,CAAC,OAAO;IAWf;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAsCxD;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IAWtC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IAW7C;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IA0BzD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAavD;;OAEG;IACH,IAAI,IAAI,MAAM;IA8Bd;;OAEG;IACH,YAAY,CAAC,UAAU,GAAE,MAAe,GAAG,IAAI;IAK/C;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5B;;OAEG;IACH,SAAS,IAAI,MAAM;IAQnB;;OAEG;IACH,KAAK,IAAI,MAAM,EAAE;IAIjB;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -12,17 +12,34 @@ const DEFAULT_CONFIG = {
|
|
|
12
12
|
/**
|
|
13
13
|
* Delivery queue for messages to offline or unreachable federation peers.
|
|
14
14
|
*
|
|
15
|
-
* Supports configurable TTL, overflow policy, and retry strategy.
|
|
16
|
-
*
|
|
15
|
+
* Supports configurable TTL, overflow policy, and retry strategy. Keeps an
|
|
16
|
+
* in-memory index for fast reads; when a durable QueueStore is supplied, every
|
|
17
|
+
* mutation is write-through journaled and the index is hydrated from the store
|
|
18
|
+
* on construction so queued messages survive a restart.
|
|
17
19
|
*/
|
|
18
20
|
export class DeliveryQueue {
|
|
19
21
|
events;
|
|
20
22
|
queues = new Map();
|
|
21
23
|
config;
|
|
22
24
|
tickTimer;
|
|
23
|
-
|
|
25
|
+
store;
|
|
26
|
+
constructor(events, config, opts) {
|
|
24
27
|
this.events = events;
|
|
25
28
|
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
29
|
+
this.store = opts?.store ?? null;
|
|
30
|
+
if (this.store)
|
|
31
|
+
this.hydrate(this.store);
|
|
32
|
+
}
|
|
33
|
+
/** Load persisted entries into the in-memory index (durable mode). */
|
|
34
|
+
hydrate(store) {
|
|
35
|
+
for (const entry of store.loadAll()) {
|
|
36
|
+
let queue = this.queues.get(entry.peerId);
|
|
37
|
+
if (!queue) {
|
|
38
|
+
queue = [];
|
|
39
|
+
this.queues.set(entry.peerId, queue);
|
|
40
|
+
}
|
|
41
|
+
queue.push(entry);
|
|
42
|
+
}
|
|
26
43
|
}
|
|
27
44
|
/**
|
|
28
45
|
* Enqueue a message for a peer. Returns the queued message ID, or null if rejected.
|
|
@@ -36,9 +53,12 @@ export class DeliveryQueue {
|
|
|
36
53
|
// Check queue size limit
|
|
37
54
|
if (queue.length >= this.config.maxQueueSize) {
|
|
38
55
|
switch (this.config.overflow) {
|
|
39
|
-
case "drop-oldest":
|
|
40
|
-
queue.shift();
|
|
56
|
+
case "drop-oldest": {
|
|
57
|
+
const dropped = queue.shift();
|
|
58
|
+
if (dropped)
|
|
59
|
+
this.store?.remove(peerId, dropped.id);
|
|
41
60
|
break;
|
|
61
|
+
}
|
|
42
62
|
case "drop-newest":
|
|
43
63
|
return null; // Don't enqueue
|
|
44
64
|
case "reject-new":
|
|
@@ -55,6 +75,7 @@ export class DeliveryQueue {
|
|
|
55
75
|
nextRetry: now, // Ready to send immediately
|
|
56
76
|
};
|
|
57
77
|
queue.push(entry);
|
|
78
|
+
this.store?.upsert(entry);
|
|
58
79
|
this.events.emit("queue.enqueued", { peerId, messageId: entry.id });
|
|
59
80
|
return entry.id;
|
|
60
81
|
}
|
|
@@ -68,6 +89,7 @@ export class DeliveryQueue {
|
|
|
68
89
|
return [];
|
|
69
90
|
const messages = [...queue];
|
|
70
91
|
this.queues.delete(peerId);
|
|
92
|
+
this.store?.removePeer(peerId);
|
|
71
93
|
this.events.emit("queue.flushed", { peerId, count: messages.length });
|
|
72
94
|
return messages;
|
|
73
95
|
}
|
|
@@ -108,6 +130,7 @@ export class DeliveryQueue {
|
|
|
108
130
|
? this.config.retryBaseInterval * Math.pow(2, entry.attempts - 1)
|
|
109
131
|
: this.config.retryBaseInterval;
|
|
110
132
|
entry.nextRetry = new Date(Date.now() + delay).toISOString();
|
|
133
|
+
this.store?.upsert(entry);
|
|
111
134
|
return true;
|
|
112
135
|
}
|
|
113
136
|
/**
|
|
@@ -121,6 +144,7 @@ export class DeliveryQueue {
|
|
|
121
144
|
if (idx === -1)
|
|
122
145
|
return false;
|
|
123
146
|
queue.splice(idx, 1);
|
|
147
|
+
this.store?.remove(peerId, messageId);
|
|
124
148
|
if (queue.length === 0)
|
|
125
149
|
this.queues.delete(peerId);
|
|
126
150
|
return true;
|
|
@@ -133,10 +157,16 @@ export class DeliveryQueue {
|
|
|
133
157
|
let expired = 0;
|
|
134
158
|
for (const [peerId, queue] of this.queues.entries()) {
|
|
135
159
|
const before = queue.length;
|
|
136
|
-
const remaining =
|
|
160
|
+
const remaining = [];
|
|
161
|
+
for (const entry of queue) {
|
|
137
162
|
const age = now - new Date(entry.enqueuedAt).getTime();
|
|
138
|
-
|
|
139
|
-
|
|
163
|
+
if (age < this.config.maxTTL) {
|
|
164
|
+
remaining.push(entry);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
this.store?.remove(peerId, entry.id);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
140
170
|
expired += before - remaining.length;
|
|
141
171
|
if (remaining.length === 0) {
|
|
142
172
|
this.queues.delete(peerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-queue.js","sourceRoot":"","sources":["../../src/federation/delivery-queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery-queue.js","sourceRoot":"","sources":["../../src/federation/delivery-queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,MAAM,cAAc,GAAwB;IAC1C,WAAW,EAAE,QAAQ;IACrB,MAAM,EAAE,UAAU,EAAE,MAAM;IAC1B,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,aAAa;IAC5B,iBAAiB,EAAE,KAAK;IACxB,gBAAgB,EAAE,CAAC,EAAE,sBAAsB;IAC3C,gBAAgB,EAAE,IAAI;IACtB,QAAQ,EAAE,aAAa;CACxB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IAOd;IANF,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC5C,MAAM,CAAsB;IAC5B,SAAS,CAAkC;IAC3C,KAAK,CAAoB;IAEjC,YACU,MAAoB,EAC5B,MAAqC,EACrC,IAA6B;QAFrB,WAAM,GAAN,MAAM,CAAc;QAI5B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,sEAAsE;IAC9D,OAAO,CAAC,KAAiB;QAC/B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACpC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc,EAAE,OAAgB;QACtC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,yBAAyB;QACzB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7C,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC7B,KAAK,aAAa,CAAC,CAAC,CAAC;oBACnB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC9B,IAAI,OAAO;wBAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;oBACpD,MAAM;gBACR,CAAC;gBACD,KAAK,aAAa;oBAChB,OAAO,IAAI,CAAC,CAAC,gBAAgB;gBAC/B,KAAK,YAAY;oBACf,OAAO,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAkB;YAC3B,EAAE,EAAE,IAAI,EAAE;YACV,MAAM;YACN,OAAO;YACP,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,GAAG,EAAE,4BAA4B;SAC7C,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAc;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE5C,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,MAAc,EAAE,SAAiB;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE7C,qBAAqB;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACvF,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,aAAa;YACzC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YACjE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACpC,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAc,EAAE,SAAiB;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACvD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAE7B,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,MAAM,SAAS,GAAoB,EAAE,CAAC;YACtC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;gBACvD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC7B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAErC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,aAAqB,MAAM;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,MAAc;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF"}
|