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
@@ -35,6 +35,15 @@ export interface MailTurnReceivedParams {
35
35
  content: MessageContent;
36
36
  thread_id?: string;
37
37
  created_at: string;
38
+ /**
39
+ * Optional importance hint for dispatch-thread turns. When present,
40
+ * receivers should use this to drive wake/interrupt decisions rather
41
+ * than falling back to a static default.
42
+ *
43
+ * Values follow the agent-inbox Importance type:
44
+ * `"low"` | `"normal"` | `"high"` | `"urgent"`
45
+ */
46
+ importance?: string;
38
47
  }
39
48
  /**
40
49
  * Build a `MailTurnReceivedParams` payload from a stored {@link Turn}.
@@ -1 +1 @@
1
- {"version":3,"file":"mail-push-types.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-push-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,sBAAsB,CAU9E"}
1
+ {"version":3,"file":"mail-push-types.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-push-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,sBAAsB,CAW9E"}
@@ -31,6 +31,7 @@ export function buildMailTurnReceivedParams(turn) {
31
31
  content: turn.content,
32
32
  ...(turn.thread_id ? { thread_id: turn.thread_id } : {}),
33
33
  created_at: turn.created_at,
34
+ ...(turn.importance ? { importance: turn.importance } : {}),
34
35
  };
35
36
  }
36
37
  //# sourceMappingURL=mail-push-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mail-push-types.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-push-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC;AAqB9D;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAU;IACpD,OAAO;QACL,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mail-push-types.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-push-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC;AA8B9D;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAU;IACpD,OAAO;QACL,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC"}
@@ -28,7 +28,14 @@ export declare class MailJsonRpcServer {
28
28
  private methods;
29
29
  private httpServer;
30
30
  private subscribers;
31
- constructor(storage: Storage, router: MessageRouter, events: EventEmitter);
31
+ /**
32
+ * Optional presence registry for resolving agent online/offline status.
33
+ * When provided, `mail/presence` enriches participants with live status.
34
+ */
35
+ private registry?;
36
+ constructor(storage: Storage, router: MessageRouter, events: EventEmitter, registry?: {
37
+ getStatus(agentId: string): string;
38
+ });
32
39
  private registerMethods;
33
40
  /** Process a JSON-RPC request (used by both IPC and HTTP transports) */
34
41
  handleRequest(request: JsonRpcRequest): Promise<JsonRpcResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"mail-server.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE;;;GAGG;AAEH,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAMD,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAAkC;gBAG3C,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY;IAM9B,OAAO,CAAC,eAAe;IAiLvB,wEAAwE;IAClE,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAqCtE,sDAAsD;IAChD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,iDAAiD;IACjD,OAAO,CAAC,kBAAkB;IAc1B,iDAAiD;IACjD,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,SAAS;CAMlB"}
1
+ {"version":3,"file":"mail-server.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE;;;GAGG;AAEH,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAMD,qBAAa,iBAAiB;IAc1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAfhB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAAkC;IAErD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,CAEf;gBAGQ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EAC5B,QAAQ,CAAC,EAAE;QAAE,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAOnD,OAAO,CAAC,eAAe;IAmNvB,wEAAwE;IAClE,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAqCtE,sDAAsD;IAChD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,iDAAiD;IACjD,OAAO,CAAC,kBAAkB;IAc1B,iDAAiD;IACjD,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,SAAS;CAMlB"}
@@ -7,10 +7,16 @@ export class MailJsonRpcServer {
7
7
  methods = new Map();
8
8
  httpServer = null;
9
9
  subscribers = new Set();
10
- constructor(storage, router, events) {
10
+ /**
11
+ * Optional presence registry for resolving agent online/offline status.
12
+ * When provided, `mail/presence` enriches participants with live status.
13
+ */
14
+ registry;
15
+ constructor(storage, router, events, registry) {
11
16
  this.storage = storage;
12
17
  this.router = router;
13
18
  this.events = events;
19
+ this.registry = registry;
14
20
  this.registerMethods();
15
21
  this.setupEventForwarding();
16
22
  }
@@ -60,6 +66,20 @@ export class MailJsonRpcServer {
60
66
  });
61
67
  return { ok: true };
62
68
  });
69
+ // mail/reopen — reopen a completed conversation
70
+ this.methods.set("mail/reopen", (params) => {
71
+ const conv = this.storage.getConversation(params.id);
72
+ if (!conv)
73
+ throw rpcError(-32001, "Conversation not found");
74
+ conv.status = "active";
75
+ conv.updated_at = new Date().toISOString();
76
+ this.storage.putConversation(conv);
77
+ this.events.emit("mail.reopened", {
78
+ conversation_id: conv.id,
79
+ status: conv.status,
80
+ });
81
+ return { conversationId: conv.id, status: "active" };
82
+ });
63
83
  // mail/join — add self as participant
64
84
  this.methods.set("mail/join", (params) => {
65
85
  const conv = this.storage.getConversation(params.conversationId);
@@ -117,6 +137,7 @@ export class MailJsonRpcServer {
117
137
  const conv = this.storage.getConversation(params.conversationId);
118
138
  if (!conv)
119
139
  throw rpcError(-32001, "Conversation not found");
140
+ const importance = params.importance;
120
141
  const turn = {
121
142
  id: `turn-${ulid()}`,
122
143
  conversation_id: conv.id,
@@ -127,6 +148,7 @@ export class MailJsonRpcServer {
127
148
  thread_id: params.threadId,
128
149
  in_reply_to: params.inReplyTo,
129
150
  created_at: new Date().toISOString(),
151
+ ...(importance ? { importance } : {}),
130
152
  };
131
153
  this.storage.addTurn(turn);
132
154
  conv.updated_at = turn.created_at;
@@ -169,6 +191,22 @@ export class MailJsonRpcServer {
169
191
  threads: this.storage.getThreadsByConversation(conv.id),
170
192
  };
171
193
  });
194
+ // mail/presence — list participants with live presence status
195
+ this.methods.set("mail/presence", (params) => {
196
+ const conversationId = params.conversationId;
197
+ if (!conversationId)
198
+ throw rpcError(-32602, "conversationId required");
199
+ const conv = this.storage.getConversation(conversationId);
200
+ if (!conv)
201
+ throw rpcError(-32001, "Conversation not found");
202
+ const participants = (conv.participants ?? []).map((p) => ({
203
+ agent_id: p.agent_id,
204
+ role: p.role,
205
+ joined_at: p.joined_at,
206
+ presence: this.registry?.getStatus(p.agent_id) ?? "unknown",
207
+ }));
208
+ return { conversationId, participants };
209
+ });
172
210
  }
173
211
  /** Process a JSON-RPC request (used by both IPC and HTTP transports) */
174
212
  async handleRequest(request) {
@@ -291,6 +329,9 @@ export class MailJsonRpcServer {
291
329
  this.events.on("mail.closed", (data) => {
292
330
  this.broadcast("mail.closed", data);
293
331
  });
332
+ this.events.on("mail.reopened", (data) => {
333
+ this.broadcast("mail.reopened", data);
334
+ });
294
335
  }
295
336
  broadcast(eventType, data) {
296
337
  const payload = `event: ${eventType}\ndata: ${JSON.stringify(data)}\n\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"mail-server.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mail-server.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Mail identity / address book.
3
+ *
4
+ * Maps between agent ids and external email addresses, and declares which
5
+ * domains we own (for inbound RCPT acceptance). Plus-addressing aware:
6
+ * `agent+scope@domain` resolves to agent `agent` in inbox scope `scope`.
7
+ *
8
+ * See docs/MAIL-INTEROP-PLAN.md §6.
9
+ */
10
+ import type { MailIdentityConfig } from "../types.js";
11
+ import type { MailAddress } from "./types.js";
12
+ export interface ResolvedInbound {
13
+ agentId: string;
14
+ /** Inbox scope from plus-addressing, if present. */
15
+ scope?: string;
16
+ }
17
+ export declare class AddressBook {
18
+ private localDomains;
19
+ /** lower-cased address → agentId */
20
+ private byAddress;
21
+ /** agentId → canonical address */
22
+ private byAgent;
23
+ private catchAllAgentId?;
24
+ /** Address mappings that collided (same address → multiple agents). */
25
+ readonly conflicts: string[];
26
+ constructor(config: MailIdentityConfig);
27
+ /** Primary local domain — used to mint Message-IDs and default from-addresses. */
28
+ primaryDomain(): string;
29
+ /** True if `domain` (or a parent of it) is one we receive mail for. */
30
+ ownsDomain(domain: string): boolean;
31
+ /**
32
+ * Resolve an inbound recipient email to a local agent (+ scope).
33
+ * Returns undefined if the domain is not ours, or the mailbox is unknown and
34
+ * no catch-all is configured.
35
+ */
36
+ resolveInbound(address: string): ResolvedInbound | undefined;
37
+ /**
38
+ * Resolve the from-address for an outbound sender agent. Falls back to
39
+ * `<agentId>@<primaryDomain>` when the agent has no explicit mapping.
40
+ */
41
+ resolveFrom(agentId: string): MailAddress;
42
+ }
43
+ //# sourceMappingURL=address-book.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-book.d.ts","sourceRoot":"","sources":["../../src/mail/address-book.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAW;IAC/B,oCAAoC;IACpC,OAAO,CAAC,SAAS,CAA6B;IAC9C,kCAAkC;IAClC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAM;gBAEtB,MAAM,EAAE,kBAAkB;IAkBtC,kFAAkF;IAClF,aAAa,IAAI,MAAM;IAIvB,uEAAuE;IACvE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAOnC;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAoB5D;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;CAK1C"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Mail identity / address book.
3
+ *
4
+ * Maps between agent ids and external email addresses, and declares which
5
+ * domains we own (for inbound RCPT acceptance). Plus-addressing aware:
6
+ * `agent+scope@domain` resolves to agent `agent` in inbox scope `scope`.
7
+ *
8
+ * See docs/MAIL-INTEROP-PLAN.md §6.
9
+ */
10
+ export class AddressBook {
11
+ localDomains;
12
+ /** lower-cased address → agentId */
13
+ byAddress = new Map();
14
+ /** agentId → canonical address */
15
+ byAgent = new Map();
16
+ catchAllAgentId;
17
+ /** Address mappings that collided (same address → multiple agents). */
18
+ conflicts = [];
19
+ constructor(config) {
20
+ this.localDomains = config.localDomains.map((d) => d.toLowerCase());
21
+ this.catchAllAgentId = config.catchAllAgentId;
22
+ for (const { agentId, address } of config.mappings) {
23
+ const lower = address.toLowerCase();
24
+ const existing = this.byAddress.get(lower);
25
+ if (existing !== undefined && existing !== agentId) {
26
+ // Two agents mapped to the same address — inbound routing would be
27
+ // ambiguous. Keep the first and record the collision for surfacing.
28
+ this.conflicts.push(`${address} → ${existing} & ${agentId}`);
29
+ continue;
30
+ }
31
+ this.byAddress.set(lower, agentId);
32
+ // First mapping for an agent is its canonical from-address.
33
+ if (!this.byAgent.has(agentId))
34
+ this.byAgent.set(agentId, address);
35
+ }
36
+ }
37
+ /** Primary local domain — used to mint Message-IDs and default from-addresses. */
38
+ primaryDomain() {
39
+ return this.localDomains[0] ?? "localhost";
40
+ }
41
+ /** True if `domain` (or a parent of it) is one we receive mail for. */
42
+ ownsDomain(domain) {
43
+ const d = domain.toLowerCase();
44
+ return this.localDomains.some((own) => d === own || d.endsWith(`.${own}`));
45
+ }
46
+ /**
47
+ * Resolve an inbound recipient email to a local agent (+ scope).
48
+ * Returns undefined if the domain is not ours, or the mailbox is unknown and
49
+ * no catch-all is configured.
50
+ */
51
+ resolveInbound(address) {
52
+ const parsed = splitAddress(address);
53
+ if (!parsed)
54
+ return undefined;
55
+ const { local, domain } = parsed;
56
+ if (!this.ownsDomain(domain))
57
+ return undefined;
58
+ // Plus-addressing: agent+scope → base agent, scope.
59
+ const plusIdx = local.indexOf("+");
60
+ const base = plusIdx === -1 ? local : local.slice(0, plusIdx);
61
+ const scope = plusIdx === -1 ? undefined : local.slice(plusIdx + 1) || undefined;
62
+ const canonical = `${base}@${domain}`.toLowerCase();
63
+ const agentId = this.byAddress.get(canonical);
64
+ if (agentId)
65
+ return { agentId, scope };
66
+ if (this.catchAllAgentId)
67
+ return { agentId: this.catchAllAgentId, scope };
68
+ return undefined;
69
+ }
70
+ /**
71
+ * Resolve the from-address for an outbound sender agent. Falls back to
72
+ * `<agentId>@<primaryDomain>` when the agent has no explicit mapping.
73
+ */
74
+ resolveFrom(agentId) {
75
+ const mapped = this.byAgent.get(agentId);
76
+ if (mapped)
77
+ return { address: mapped };
78
+ return { address: `${agentId}@${this.primaryDomain()}` };
79
+ }
80
+ }
81
+ /** Split an addr-spec into local-part and domain. Returns undefined if malformed. */
82
+ function splitAddress(address) {
83
+ const at = address.indexOf("@");
84
+ if (at <= 0 || at !== address.lastIndexOf("@") || at === address.length - 1) {
85
+ // Reject empty local/domain and unquoted multiple "@" (e.g. "a@b@c"), so
86
+ // this layer agrees with parseAddress (which splits on the first "@").
87
+ return undefined;
88
+ }
89
+ const domain = address.slice(at + 1);
90
+ // A domain must not contain "/" (a federation scope separator) — defensive.
91
+ if (domain.includes("/"))
92
+ return undefined;
93
+ return { local: address.slice(0, at), domain };
94
+ }
95
+ //# sourceMappingURL=address-book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-book.js","sourceRoot":"","sources":["../../src/mail/address-book.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Attachment byte stores.
3
+ *
4
+ * `MailAttachment.contentRef` is opaque; bytes live behind an AttachmentStore.
5
+ * Default impl is SQLite-backed (atomic with the message, single-file backup,
6
+ * works with the in-memory DB used in tests). A filesystem impl is opt-in for
7
+ * large/high-volume deployments (added later). Refs are content-addressed
8
+ * (sha256) so identical bytes dedup. See docs/MAIL-INTEROP-PLAN.md §4c.
9
+ */
10
+ import type Database from "better-sqlite3";
11
+ import type { AttachmentStore } from "./types.js";
12
+ export declare class SqliteAttachmentStore implements AttachmentStore {
13
+ private db;
14
+ private table;
15
+ private putStmt;
16
+ private getStmt;
17
+ private delStmt;
18
+ /**
19
+ * @param db A better-sqlite3 handle (lifecycle owned by the caller).
20
+ * @param prefix Table name prefix to match the Storage convention. Default "".
21
+ */
22
+ constructor(db: Database.Database, prefix?: string);
23
+ private migrate;
24
+ put(bytes: Buffer, meta: {
25
+ contentType: string;
26
+ filename?: string;
27
+ }): Promise<string>;
28
+ get(ref: string): Promise<Buffer>;
29
+ delete(ref: string): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=attachment-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store.d.ts","sourceRoot":"","sources":["../../src/mail/attachment-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,qBAAsB,YAAW,eAAe;IAWzD,OAAO,CAAC,EAAE;IAVZ,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAqB;IAEpC;;;OAGG;gBAEO,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAC7B,MAAM,GAAE,MAAW;IAerB,OAAO,CAAC,OAAO;IAaT,GAAG,CACP,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,MAAM,CAAC;IAcZ,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Attachment byte stores.
3
+ *
4
+ * `MailAttachment.contentRef` is opaque; bytes live behind an AttachmentStore.
5
+ * Default impl is SQLite-backed (atomic with the message, single-file backup,
6
+ * works with the in-memory DB used in tests). A filesystem impl is opt-in for
7
+ * large/high-volume deployments (added later). Refs are content-addressed
8
+ * (sha256) so identical bytes dedup. See docs/MAIL-INTEROP-PLAN.md §4c.
9
+ */
10
+ import { createHash } from "node:crypto";
11
+ export class SqliteAttachmentStore {
12
+ db;
13
+ table;
14
+ putStmt;
15
+ getStmt;
16
+ delStmt;
17
+ /**
18
+ * @param db A better-sqlite3 handle (lifecycle owned by the caller).
19
+ * @param prefix Table name prefix to match the Storage convention. Default "".
20
+ */
21
+ constructor(db, prefix = "") {
22
+ this.db = db;
23
+ this.table = `${prefix}mail_attachments`;
24
+ this.migrate();
25
+ this.putStmt = this.db.prepare(`INSERT INTO ${this.table} (ref, content_type, filename, bytes, size_bytes, created_at)
26
+ VALUES (@ref, @content_type, @filename, @bytes, @size_bytes, @created_at)
27
+ ON CONFLICT(ref) DO NOTHING`);
28
+ this.getStmt = this.db.prepare(`SELECT bytes FROM ${this.table} WHERE ref = ?`);
29
+ this.delStmt = this.db.prepare(`DELETE FROM ${this.table} WHERE ref = ?`);
30
+ }
31
+ migrate() {
32
+ this.db.exec(`
33
+ CREATE TABLE IF NOT EXISTS ${this.table} (
34
+ ref TEXT PRIMARY KEY,
35
+ content_type TEXT NOT NULL,
36
+ filename TEXT,
37
+ bytes BLOB NOT NULL,
38
+ size_bytes INTEGER NOT NULL,
39
+ created_at TEXT NOT NULL
40
+ );
41
+ `);
42
+ }
43
+ async put(bytes, meta) {
44
+ const ref = "sha256:" + createHash("sha256").update(bytes).digest("hex");
45
+ // ON CONFLICT DO NOTHING — content-addressed, so identical bytes are deduped.
46
+ this.putStmt.run({
47
+ ref,
48
+ content_type: meta.contentType,
49
+ filename: meta.filename ?? null,
50
+ bytes,
51
+ size_bytes: bytes.length,
52
+ created_at: new Date().toISOString(),
53
+ });
54
+ return ref;
55
+ }
56
+ async get(ref) {
57
+ assertValidRef(ref);
58
+ const row = this.getStmt.get(ref);
59
+ if (!row)
60
+ throw new Error(`Attachment not found: ${ref}`);
61
+ return row.bytes;
62
+ }
63
+ async delete(ref) {
64
+ assertValidRef(ref);
65
+ this.delStmt.run(ref);
66
+ }
67
+ }
68
+ /** Refs are always sha256-of-content; reject anything else (parity with FS store). */
69
+ function assertValidRef(ref) {
70
+ if (!/^sha256:[0-9a-f]{64}$/.test(ref)) {
71
+ throw new Error(`Invalid attachment ref: ${ref}`);
72
+ }
73
+ }
74
+ //# sourceMappingURL=attachment-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store.js","sourceRoot":"","sources":["../../src/mail/attachment-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,OAAO,qBAAqB;IAWtB;IAVF,KAAK,CAAS;IACd,OAAO,CAAqB;IAC5B,OAAO,CAAqB;IAC5B,OAAO,CAAqB;IAEpC;;;OAGG;IACH,YACU,EAAqB,EAC7B,SAAiB,EAAE;QADX,OAAE,GAAF,EAAE,CAAmB;QAG7B,IAAI,CAAC,KAAK,GAAG,GAAG,MAAM,kBAAkB,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,eAAe,IAAI,CAAC,KAAK;;mCAEI,CAC9B,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,qBAAqB,IAAI,CAAC,KAAK,gBAAgB,CAChD,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,KAAK,gBAAgB,CAAC,CAAC;IAC5E,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;mCACkB,IAAI,CAAC,KAAK;;;;;;;;KAQxC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CACP,KAAa,EACb,IAAgD;QAEhD,MAAM,GAAG,GAAG,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzE,8EAA8E;QAC9E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACf,GAAG;YACH,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,KAAK;YACL,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAkC,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;CACF;AAED,sFAAsF;AACtF,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Bidirectional mapping between RFC 5322 email and agent-inbox Messages.
3
+ *
4
+ * Parallels src/mesh/type-mapper.ts. Two pure functions:
5
+ * - inboundMailToMessage: external email → inbox Message
6
+ * - messageToOutboundMail: inbox Message → rendered OutboundMail
7
+ *
8
+ * Threading: RFC Message-ID / In-Reply-To / References map onto the inbox's
9
+ * thread_tag + in_reply_to. The RFC Message-ID is preserved in metadata so a
10
+ * later reply can reconstruct the In-Reply-To / References chain. See §5.
11
+ */
12
+ import type { Message } from "../types.js";
13
+ import type { AddressBook } from "./address-book.js";
14
+ import type { InboundMail, OutboundMail } from "./types.js";
15
+ export interface InboundMapContext {
16
+ addressBook: AddressBook;
17
+ /** Scope assigned when plus-addressing does not specify one. */
18
+ defaultScope?: string;
19
+ /**
20
+ * Resolve an RFC Message-ID we have already stored to its inbox Message id,
21
+ * so an inbound reply can set `in_reply_to` to the real parent.
22
+ */
23
+ lookupInboxIdByRfcMessageId?: (rfcMessageId: string) => string | undefined;
24
+ }
25
+ export interface OutboundMapContext {
26
+ addressBook: AddressBook;
27
+ /** Domain used to mint Message-IDs. Defaults to the address book primary domain. */
28
+ messageIdDomain?: string;
29
+ /** The RFC Message-ID we recorded when the parent inbox message was sent/received. */
30
+ lookupRfcMessageId?: (inboxId: string) => string | undefined;
31
+ /** The References chain recorded for the parent inbox message. */
32
+ lookupReferences?: (inboxId: string) => string[] | undefined;
33
+ }
34
+ /** Thrown when no inbound recipient resolves to a local agent. */
35
+ export declare class UnknownRecipientError extends Error {
36
+ readonly recipients: string[];
37
+ constructor(recipients: string[]);
38
+ }
39
+ export declare function inboundMailToMessage(mail: InboundMail, ctx: InboundMapContext): Message;
40
+ export declare function messageToOutboundMail(msg: Message, ctx: OutboundMapContext): OutboundMail;
41
+ //# sourceMappingURL=email-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-mapper.d.ts","sourceRoot":"","sources":["../../src/mail/email-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAwC,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAGb,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5E;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7D,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9D;AAED,kEAAkE;AAClE,qBAAa,qBAAsB,SAAQ,KAAK;aAClB,UAAU,EAAE,MAAM,EAAE;gBAApB,UAAU,EAAE,MAAM,EAAE;CAMjD;AAMD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAkET;AAMD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,kBAAkB,GACtB,YAAY,CAyCd"}