agent-inbox 0.0.1 → 0.1.1
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/CLAUDE.md +113 -0
- package/README.md +195 -1
- package/dist/federation/address.d.ts +24 -0
- package/dist/federation/address.d.ts.map +1 -0
- package/dist/federation/address.js +54 -0
- package/dist/federation/address.js.map +1 -0
- package/dist/federation/connection-manager.d.ts +118 -0
- package/dist/federation/connection-manager.d.ts.map +1 -0
- package/dist/federation/connection-manager.js +369 -0
- package/dist/federation/connection-manager.js.map +1 -0
- package/dist/federation/delivery-queue.d.ts +66 -0
- package/dist/federation/delivery-queue.d.ts.map +1 -0
- package/dist/federation/delivery-queue.js +199 -0
- package/dist/federation/delivery-queue.js.map +1 -0
- package/dist/federation/index.d.ts +7 -0
- package/dist/federation/index.d.ts.map +1 -0
- package/dist/federation/index.js +6 -0
- package/dist/federation/index.js.map +1 -0
- package/dist/federation/routing-engine.d.ts +74 -0
- package/dist/federation/routing-engine.d.ts.map +1 -0
- package/dist/federation/routing-engine.js +158 -0
- package/dist/federation/routing-engine.js.map +1 -0
- package/dist/federation/trust.d.ts +39 -0
- package/dist/federation/trust.d.ts.map +1 -0
- package/dist/federation/trust.js +64 -0
- package/dist/federation/trust.js.map +1 -0
- package/dist/index.d.ts +60 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +217 -18
- package/dist/index.js.map +1 -1
- package/dist/ipc/ipc-server.d.ts +20 -0
- package/dist/ipc/ipc-server.d.ts.map +1 -0
- package/dist/ipc/ipc-server.js +152 -0
- package/dist/ipc/ipc-server.js.map +1 -0
- package/dist/jsonrpc/mail-server.d.ts +45 -0
- package/dist/jsonrpc/mail-server.d.ts.map +1 -0
- package/dist/jsonrpc/mail-server.js +284 -0
- package/dist/jsonrpc/mail-server.js.map +1 -0
- package/dist/map/map-client.d.ts +91 -0
- package/dist/map/map-client.d.ts.map +1 -0
- package/dist/map/map-client.js +202 -0
- package/dist/map/map-client.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +23 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -0
- package/dist/mcp/mcp-server.js +226 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/push/notifier.d.ts +49 -0
- package/dist/push/notifier.d.ts.map +1 -0
- package/dist/push/notifier.js +150 -0
- package/dist/push/notifier.js.map +1 -0
- package/dist/registry/warm-registry.d.ts +63 -0
- package/dist/registry/warm-registry.d.ts.map +1 -0
- package/dist/registry/warm-registry.js +173 -0
- package/dist/registry/warm-registry.js.map +1 -0
- package/dist/router/message-router.d.ts +44 -0
- package/dist/router/message-router.d.ts.map +1 -0
- package/dist/router/message-router.js +137 -0
- package/dist/router/message-router.js.map +1 -0
- package/dist/storage/interface.d.ts +31 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +2 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/memory.d.ts +28 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +118 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/storage/sqlite.d.ts +35 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +445 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/traceability/traceability.d.ts +29 -0
- package/dist/traceability/traceability.d.ts.map +1 -0
- package/dist/traceability/traceability.js +150 -0
- package/dist/traceability/traceability.js.map +1 -0
- package/dist/types.d.ts +253 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/docs/DESIGN.md +1156 -0
- package/docs/PLAN.md +545 -0
- package/hooks/inbox-hook.mjs +119 -0
- package/hooks/register-hook.mjs +69 -0
- package/package.json +33 -25
- package/rules/agent-inbox.md +78 -0
- package/src/federation/address.ts +61 -0
- package/src/federation/connection-manager.ts +458 -0
- package/src/federation/delivery-queue.ts +222 -0
- package/src/federation/index.ts +6 -0
- package/src/federation/routing-engine.ts +188 -0
- package/src/federation/trust.ts +71 -0
- package/src/index.ts +299 -0
- package/src/ipc/ipc-server.ts +180 -0
- package/src/jsonrpc/mail-server.ts +356 -0
- package/src/map/map-client.ts +260 -0
- package/src/mcp/mcp-server.ts +272 -0
- package/src/push/notifier.ts +192 -0
- package/src/registry/warm-registry.ts +210 -0
- package/src/router/message-router.ts +175 -0
- package/src/storage/interface.ts +48 -0
- package/src/storage/memory.ts +145 -0
- package/src/storage/sqlite.ts +645 -0
- package/src/traceability/traceability.ts +183 -0
- package/src/types.ts +287 -0
- package/test/federation/address.test.ts +101 -0
- package/test/federation/connection-manager.test.ts +546 -0
- package/test/federation/delivery-queue.test.ts +159 -0
- package/test/federation/integration.test.ts +823 -0
- package/test/federation/routing-engine.test.ts +117 -0
- package/test/federation/sdk-integration.test.ts +748 -0
- package/test/federation/trust.test.ts +89 -0
- package/test/ipc-jsonrpc.test.ts +113 -0
- package/test/ipc-server.test.ts +138 -0
- package/test/mail-server.test.ts +208 -0
- package/test/map-client.test.ts +408 -0
- package/test/message-router.test.ts +184 -0
- package/test/push-notifier.test.ts +139 -0
- package/test/registry/warm-registry.test.ts +171 -0
- package/test/sqlite-storage.test.ts +243 -0
- package/test/storage.test.ts +196 -0
- package/test/traceability.test.ts +123 -0
- package/tsconfig.json +20 -0
- package/tsup.config.ts +10 -0
- package/vitest.config.ts +8 -0
- package/dist/index.d.mts +0 -2
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import * as http from "node:http";
|
|
2
|
+
import { ulid } from "ulid";
|
|
3
|
+
export class MailJsonRpcServer {
|
|
4
|
+
storage;
|
|
5
|
+
router;
|
|
6
|
+
events;
|
|
7
|
+
methods = new Map();
|
|
8
|
+
httpServer = null;
|
|
9
|
+
subscribers = new Set();
|
|
10
|
+
constructor(storage, router, events) {
|
|
11
|
+
this.storage = storage;
|
|
12
|
+
this.router = router;
|
|
13
|
+
this.events = events;
|
|
14
|
+
this.registerMethods();
|
|
15
|
+
this.setupEventForwarding();
|
|
16
|
+
}
|
|
17
|
+
registerMethods() {
|
|
18
|
+
// mail/create — create a conversation
|
|
19
|
+
this.methods.set("mail/create", (params) => {
|
|
20
|
+
const now = new Date().toISOString();
|
|
21
|
+
const conv = {
|
|
22
|
+
id: params.id ?? `conv-${ulid()}`,
|
|
23
|
+
scope: params.scope ?? "default",
|
|
24
|
+
subject: params.subject,
|
|
25
|
+
status: "active",
|
|
26
|
+
participants: [],
|
|
27
|
+
metadata: params.metadata ?? {},
|
|
28
|
+
created_at: now,
|
|
29
|
+
updated_at: now,
|
|
30
|
+
};
|
|
31
|
+
this.storage.putConversation(conv);
|
|
32
|
+
return conv;
|
|
33
|
+
});
|
|
34
|
+
// mail/get — get conversation details
|
|
35
|
+
this.methods.set("mail/get", (params) => {
|
|
36
|
+
const conv = this.storage.getConversation(params.id);
|
|
37
|
+
if (!conv)
|
|
38
|
+
throw rpcError(-32001, "Conversation not found");
|
|
39
|
+
const turns = this.storage.getTurns(conv.id);
|
|
40
|
+
const threads = this.storage.getThreadsByConversation(conv.id);
|
|
41
|
+
return { conversation: conv, turns, threads };
|
|
42
|
+
});
|
|
43
|
+
// mail/list — list conversations
|
|
44
|
+
this.methods.set("mail/list", (params) => {
|
|
45
|
+
const conversations = this.storage.listConversations(params.scope);
|
|
46
|
+
return { conversations };
|
|
47
|
+
});
|
|
48
|
+
// mail/close — close a conversation
|
|
49
|
+
this.methods.set("mail/close", (params) => {
|
|
50
|
+
const conv = this.storage.getConversation(params.id);
|
|
51
|
+
if (!conv)
|
|
52
|
+
throw rpcError(-32001, "Conversation not found");
|
|
53
|
+
conv.status = "completed";
|
|
54
|
+
conv.updated_at = new Date().toISOString();
|
|
55
|
+
this.storage.putConversation(conv);
|
|
56
|
+
return { ok: true };
|
|
57
|
+
});
|
|
58
|
+
// mail/join — add self as participant
|
|
59
|
+
this.methods.set("mail/join", (params) => {
|
|
60
|
+
const conv = this.storage.getConversation(params.conversationId);
|
|
61
|
+
if (!conv)
|
|
62
|
+
throw rpcError(-32001, "Conversation not found");
|
|
63
|
+
const agentId = params.agentId;
|
|
64
|
+
if (!conv.participants.some((p) => p.agent_id === agentId)) {
|
|
65
|
+
conv.participants.push({
|
|
66
|
+
agent_id: agentId,
|
|
67
|
+
joined_at: new Date().toISOString(),
|
|
68
|
+
});
|
|
69
|
+
conv.updated_at = new Date().toISOString();
|
|
70
|
+
this.storage.putConversation(conv);
|
|
71
|
+
}
|
|
72
|
+
return { ok: true };
|
|
73
|
+
});
|
|
74
|
+
// mail/leave — remove self from conversation
|
|
75
|
+
this.methods.set("mail/leave", (params) => {
|
|
76
|
+
const conv = this.storage.getConversation(params.conversationId);
|
|
77
|
+
if (!conv)
|
|
78
|
+
throw rpcError(-32001, "Conversation not found");
|
|
79
|
+
const agentId = params.agentId;
|
|
80
|
+
conv.participants = conv.participants.filter((p) => p.agent_id !== agentId);
|
|
81
|
+
conv.updated_at = new Date().toISOString();
|
|
82
|
+
this.storage.putConversation(conv);
|
|
83
|
+
return { ok: true };
|
|
84
|
+
});
|
|
85
|
+
// mail/invite — add agent to conversation
|
|
86
|
+
this.methods.set("mail/invite", (params) => {
|
|
87
|
+
const conv = this.storage.getConversation(params.conversationId);
|
|
88
|
+
if (!conv)
|
|
89
|
+
throw rpcError(-32001, "Conversation not found");
|
|
90
|
+
const agentId = params.agentId;
|
|
91
|
+
if (!conv.participants.some((p) => p.agent_id === agentId)) {
|
|
92
|
+
conv.participants.push({
|
|
93
|
+
agent_id: agentId,
|
|
94
|
+
role: params.role,
|
|
95
|
+
joined_at: new Date().toISOString(),
|
|
96
|
+
});
|
|
97
|
+
conv.updated_at = new Date().toISOString();
|
|
98
|
+
this.storage.putConversation(conv);
|
|
99
|
+
}
|
|
100
|
+
return { ok: true };
|
|
101
|
+
});
|
|
102
|
+
// mail/turn — add a turn to a conversation
|
|
103
|
+
this.methods.set("mail/turn", async (params) => {
|
|
104
|
+
const conv = this.storage.getConversation(params.conversationId);
|
|
105
|
+
if (!conv)
|
|
106
|
+
throw rpcError(-32001, "Conversation not found");
|
|
107
|
+
const turn = {
|
|
108
|
+
id: `turn-${ulid()}`,
|
|
109
|
+
conversation_id: conv.id,
|
|
110
|
+
participant_id: params.participantId,
|
|
111
|
+
source_message_id: params.sourceMessageId,
|
|
112
|
+
content_type: params.contentType ?? "text",
|
|
113
|
+
content: params.content,
|
|
114
|
+
thread_id: params.threadId,
|
|
115
|
+
in_reply_to: params.inReplyTo,
|
|
116
|
+
created_at: new Date().toISOString(),
|
|
117
|
+
};
|
|
118
|
+
this.storage.addTurn(turn);
|
|
119
|
+
conv.updated_at = turn.created_at;
|
|
120
|
+
this.storage.putConversation(conv);
|
|
121
|
+
return turn;
|
|
122
|
+
});
|
|
123
|
+
// mail/turns/list — list turns in a conversation
|
|
124
|
+
this.methods.set("mail/turns/list", (params) => {
|
|
125
|
+
const turns = this.storage.getTurns(params.conversationId);
|
|
126
|
+
return { turns };
|
|
127
|
+
});
|
|
128
|
+
// mail/thread/create — create a thread
|
|
129
|
+
this.methods.set("mail/thread/create", (params) => {
|
|
130
|
+
const thread = {
|
|
131
|
+
id: `thread-${ulid()}`,
|
|
132
|
+
conversation_id: params.conversationId,
|
|
133
|
+
root_turn_id: params.rootTurnId,
|
|
134
|
+
parent_thread_id: params.parentThreadId,
|
|
135
|
+
subject: params.subject,
|
|
136
|
+
created_at: new Date().toISOString(),
|
|
137
|
+
};
|
|
138
|
+
this.storage.putThread(thread);
|
|
139
|
+
return thread;
|
|
140
|
+
});
|
|
141
|
+
// mail/thread/list — list threads in a conversation
|
|
142
|
+
this.methods.set("mail/thread/list", (params) => {
|
|
143
|
+
const threads = this.storage.getThreadsByConversation(params.conversationId);
|
|
144
|
+
return { threads };
|
|
145
|
+
});
|
|
146
|
+
// mail/replay — replay conversation history (all turns, ordered)
|
|
147
|
+
this.methods.set("mail/replay", (params) => {
|
|
148
|
+
const conv = this.storage.getConversation(params.id);
|
|
149
|
+
if (!conv)
|
|
150
|
+
throw rpcError(-32001, "Conversation not found");
|
|
151
|
+
const turns = this.storage.getTurns(conv.id);
|
|
152
|
+
return {
|
|
153
|
+
conversation: conv,
|
|
154
|
+
turns,
|
|
155
|
+
threads: this.storage.getThreadsByConversation(conv.id),
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/** Process a JSON-RPC request (used by both IPC and HTTP transports) */
|
|
160
|
+
async handleRequest(request) {
|
|
161
|
+
if (request.jsonrpc !== "2.0") {
|
|
162
|
+
return {
|
|
163
|
+
jsonrpc: "2.0",
|
|
164
|
+
id: request.id ?? null,
|
|
165
|
+
error: { code: -32600, message: "Invalid JSON-RPC version" },
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const handler = this.methods.get(request.method);
|
|
169
|
+
if (!handler) {
|
|
170
|
+
return {
|
|
171
|
+
jsonrpc: "2.0",
|
|
172
|
+
id: request.id ?? null,
|
|
173
|
+
error: { code: -32601, message: `Method not found: ${request.method}` },
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
const result = await handler(request.params ?? {});
|
|
178
|
+
return { jsonrpc: "2.0", id: request.id ?? null, result };
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
if (isRpcError(err)) {
|
|
182
|
+
return {
|
|
183
|
+
jsonrpc: "2.0",
|
|
184
|
+
id: request.id ?? null,
|
|
185
|
+
error: { code: err.code, message: err.message },
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
jsonrpc: "2.0",
|
|
190
|
+
id: request.id ?? null,
|
|
191
|
+
error: { code: -32603, message: String(err) },
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** Start HTTP server for dashboard/external access */
|
|
196
|
+
async startHttp(port) {
|
|
197
|
+
return new Promise((resolve) => {
|
|
198
|
+
this.httpServer = http.createServer((req, res) => {
|
|
199
|
+
// SSE endpoint for map/subscribe
|
|
200
|
+
if (req.url === "/subscribe" && req.method === "GET") {
|
|
201
|
+
this.handleSseSubscribe(res);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// JSON-RPC endpoint
|
|
205
|
+
if (req.method !== "POST") {
|
|
206
|
+
res.writeHead(405, { "Content-Type": "application/json" });
|
|
207
|
+
res.end(JSON.stringify({
|
|
208
|
+
jsonrpc: "2.0",
|
|
209
|
+
id: null,
|
|
210
|
+
error: { code: -32600, message: "Method not allowed" },
|
|
211
|
+
}));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
let body = "";
|
|
215
|
+
req.on("data", (chunk) => {
|
|
216
|
+
body += chunk;
|
|
217
|
+
});
|
|
218
|
+
req.on("end", async () => {
|
|
219
|
+
try {
|
|
220
|
+
const request = JSON.parse(body);
|
|
221
|
+
const response = await this.handleRequest(request);
|
|
222
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
223
|
+
res.end(JSON.stringify(response));
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
227
|
+
res.end(JSON.stringify({
|
|
228
|
+
jsonrpc: "2.0",
|
|
229
|
+
id: null,
|
|
230
|
+
error: { code: -32700, message: "Parse error" },
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
this.httpServer.listen(port, () => resolve());
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
async stopHttp() {
|
|
239
|
+
// Close all SSE connections
|
|
240
|
+
for (const res of this.subscribers) {
|
|
241
|
+
res.end();
|
|
242
|
+
}
|
|
243
|
+
this.subscribers.clear();
|
|
244
|
+
return new Promise((resolve) => {
|
|
245
|
+
if (!this.httpServer)
|
|
246
|
+
return resolve();
|
|
247
|
+
this.httpServer.close(() => resolve());
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/** SSE endpoint: stream events to subscribers */
|
|
251
|
+
handleSseSubscribe(res) {
|
|
252
|
+
res.writeHead(200, {
|
|
253
|
+
"Content-Type": "text/event-stream",
|
|
254
|
+
"Cache-Control": "no-cache",
|
|
255
|
+
Connection: "keep-alive",
|
|
256
|
+
});
|
|
257
|
+
res.write(":\n\n"); // SSE comment to establish connection
|
|
258
|
+
this.subscribers.add(res);
|
|
259
|
+
res.on("close", () => {
|
|
260
|
+
this.subscribers.delete(res);
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
/** Forward internal events to SSE subscribers */
|
|
264
|
+
setupEventForwarding() {
|
|
265
|
+
this.events.on("message.created", (msg) => {
|
|
266
|
+
this.broadcast("message.created", msg);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
broadcast(eventType, data) {
|
|
270
|
+
const payload = `event: ${eventType}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
271
|
+
for (const res of this.subscribers) {
|
|
272
|
+
res.write(payload);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function rpcError(code, message) {
|
|
277
|
+
const err = new Error(message);
|
|
278
|
+
err.code = code;
|
|
279
|
+
return err;
|
|
280
|
+
}
|
|
281
|
+
function isRpcError(err) {
|
|
282
|
+
return err instanceof Error && typeof err.code === "number";
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=mail-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-server.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import type { Storage } from "../storage/interface.js";
|
|
3
|
+
import type { MessageRouter } from "../router/message-router.js";
|
|
4
|
+
import type { InboxConfig } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Wrapper around @multi-agent-protocol/sdk for Agent Inbox's MAP connection.
|
|
7
|
+
*
|
|
8
|
+
* The MAP SDK is an optional peer dependency. This client gracefully degrades
|
|
9
|
+
* to a no-op when the SDK is not installed.
|
|
10
|
+
*/
|
|
11
|
+
export declare class MapClient {
|
|
12
|
+
private storage;
|
|
13
|
+
private router;
|
|
14
|
+
private events;
|
|
15
|
+
private inboxJsonlPath?;
|
|
16
|
+
private conn;
|
|
17
|
+
private agentConnectionClass;
|
|
18
|
+
private externalConn;
|
|
19
|
+
constructor(storage: Storage, router: MessageRouter, events: EventEmitter, inboxJsonlPath?: string | undefined);
|
|
20
|
+
connect(config: NonNullable<InboxConfig["map"]>): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Use an externally-created MAP connection instead of creating one.
|
|
23
|
+
* The caller owns the connection lifecycle — disconnect() will detach
|
|
24
|
+
* but not close it. Incoming messages are still routed into storage.
|
|
25
|
+
*/
|
|
26
|
+
useConnection(conn: MapConnection): void;
|
|
27
|
+
disconnect(): Promise<void>;
|
|
28
|
+
sendViaMap(target: {
|
|
29
|
+
agentId?: string;
|
|
30
|
+
scope?: string;
|
|
31
|
+
}, payload: unknown): Promise<boolean>;
|
|
32
|
+
get connected(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Get the underlying MAP connection, if connected.
|
|
35
|
+
* Returns the full AgentConnection instance from the SDK, exposing
|
|
36
|
+
* lifecycle methods (spawn, updateState, callExtension) beyond
|
|
37
|
+
* what Agent Inbox uses internally for messaging.
|
|
38
|
+
*/
|
|
39
|
+
getConnection(): MapConnection | null;
|
|
40
|
+
/**
|
|
41
|
+
* Get the system name from the MAP connection, if available.
|
|
42
|
+
* This is used for Tier 2 system ID resolution (MAP systemInfo).
|
|
43
|
+
*/
|
|
44
|
+
getSystemName(): string | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Get the AgentConnection class from the MAP SDK, if available.
|
|
47
|
+
* Used to inject the SDK into ConnectionManager for federation peer connections.
|
|
48
|
+
*/
|
|
49
|
+
getAgentConnectionClass(): MapAgentConnectionClass | null;
|
|
50
|
+
/**
|
|
51
|
+
* Startup replay: query MAP server for messages received while offline.
|
|
52
|
+
* Compares MAP server's message history against local storage and ingests
|
|
53
|
+
* any missing messages. Falls back to trusting local storage if the query fails.
|
|
54
|
+
*/
|
|
55
|
+
replayMissed(): Promise<number>;
|
|
56
|
+
private findExistingMessage;
|
|
57
|
+
private handleIncoming;
|
|
58
|
+
private appendToInboxJsonl;
|
|
59
|
+
}
|
|
60
|
+
export interface IncomingMapMessage {
|
|
61
|
+
from: string;
|
|
62
|
+
payload: unknown;
|
|
63
|
+
timestamp?: string;
|
|
64
|
+
meta?: {
|
|
65
|
+
priority?: string;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface MapConnection {
|
|
70
|
+
send(to: {
|
|
71
|
+
agentId?: string;
|
|
72
|
+
scope?: string;
|
|
73
|
+
}, payload: unknown, meta?: Record<string, unknown>): Promise<void>;
|
|
74
|
+
onMessage(handler: (msg: IncomingMapMessage) => void): void;
|
|
75
|
+
disconnect(): Promise<void>;
|
|
76
|
+
spawn?(opts: {
|
|
77
|
+
agentId: string;
|
|
78
|
+
name?: string;
|
|
79
|
+
role?: string;
|
|
80
|
+
scopes?: string[];
|
|
81
|
+
metadata?: Record<string, unknown>;
|
|
82
|
+
}): Promise<unknown>;
|
|
83
|
+
updateState?(state: string): Promise<void>;
|
|
84
|
+
updateMetadata?(metadata: Record<string, unknown>): Promise<void>;
|
|
85
|
+
callExtension?(name: string, params: Record<string, unknown>): Promise<unknown>;
|
|
86
|
+
systemName?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface MapAgentConnectionClass {
|
|
89
|
+
connect(server: string, opts: unknown): Promise<MapConnection>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=map-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-client.d.ts","sourceRoot":"","sources":["../../src/map/map-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { normalizeContent } from "../router/message-router.js";
|
|
4
|
+
import { ulid } from "ulid";
|
|
5
|
+
/**
|
|
6
|
+
* Wrapper around @multi-agent-protocol/sdk for Agent Inbox's MAP connection.
|
|
7
|
+
*
|
|
8
|
+
* The MAP SDK is an optional peer dependency. This client gracefully degrades
|
|
9
|
+
* to a no-op when the SDK is not installed.
|
|
10
|
+
*/
|
|
11
|
+
export class MapClient {
|
|
12
|
+
storage;
|
|
13
|
+
router;
|
|
14
|
+
events;
|
|
15
|
+
inboxJsonlPath;
|
|
16
|
+
conn = null;
|
|
17
|
+
agentConnectionClass = null;
|
|
18
|
+
externalConn = false;
|
|
19
|
+
constructor(storage, router, events, inboxJsonlPath) {
|
|
20
|
+
this.storage = storage;
|
|
21
|
+
this.router = router;
|
|
22
|
+
this.events = events;
|
|
23
|
+
this.inboxJsonlPath = inboxJsonlPath;
|
|
24
|
+
}
|
|
25
|
+
async connect(config) {
|
|
26
|
+
if (!config.enabled || !config.server)
|
|
27
|
+
return false;
|
|
28
|
+
let AgentConnection;
|
|
29
|
+
try {
|
|
30
|
+
// Dynamic import — optional peer dependency
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
32
|
+
const sdk = await Function('return import("@multi-agent-protocol/sdk")')();
|
|
33
|
+
AgentConnection = sdk.AgentConnection;
|
|
34
|
+
this.agentConnectionClass = AgentConnection;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// MAP SDK not installed — standalone mode
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
this.conn = await AgentConnection.connect(config.server, {
|
|
42
|
+
name: "agent-inbox",
|
|
43
|
+
role: "inbox",
|
|
44
|
+
scopes: [config.scope ?? "default"],
|
|
45
|
+
capabilities: { trajectory: { canReport: false } },
|
|
46
|
+
metadata: {
|
|
47
|
+
systemId: config.systemId ?? "agent-inbox",
|
|
48
|
+
type: "agent-inbox",
|
|
49
|
+
},
|
|
50
|
+
reconnection: {
|
|
51
|
+
enabled: true,
|
|
52
|
+
maxRetries: 5,
|
|
53
|
+
baseDelayMs: 1000,
|
|
54
|
+
maxDelayMs: 30000,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
this.conn.onMessage((msg) => {
|
|
58
|
+
this.handleIncoming(msg);
|
|
59
|
+
});
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Use an externally-created MAP connection instead of creating one.
|
|
68
|
+
* The caller owns the connection lifecycle — disconnect() will detach
|
|
69
|
+
* but not close it. Incoming messages are still routed into storage.
|
|
70
|
+
*/
|
|
71
|
+
useConnection(conn) {
|
|
72
|
+
this.conn = conn;
|
|
73
|
+
this.externalConn = true;
|
|
74
|
+
conn.onMessage((msg) => {
|
|
75
|
+
this.handleIncoming(msg);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async disconnect() {
|
|
79
|
+
if (this.conn) {
|
|
80
|
+
if (!this.externalConn) {
|
|
81
|
+
await this.conn.disconnect();
|
|
82
|
+
}
|
|
83
|
+
this.conn = null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async sendViaMap(target, payload) {
|
|
87
|
+
if (!this.conn)
|
|
88
|
+
return false;
|
|
89
|
+
try {
|
|
90
|
+
await this.conn.send(target, payload);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
get connected() {
|
|
98
|
+
return this.conn !== null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the underlying MAP connection, if connected.
|
|
102
|
+
* Returns the full AgentConnection instance from the SDK, exposing
|
|
103
|
+
* lifecycle methods (spawn, updateState, callExtension) beyond
|
|
104
|
+
* what Agent Inbox uses internally for messaging.
|
|
105
|
+
*/
|
|
106
|
+
getConnection() {
|
|
107
|
+
return this.conn;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get the system name from the MAP connection, if available.
|
|
111
|
+
* This is used for Tier 2 system ID resolution (MAP systemInfo).
|
|
112
|
+
*/
|
|
113
|
+
getSystemName() {
|
|
114
|
+
if (!this.conn)
|
|
115
|
+
return undefined;
|
|
116
|
+
return this.conn.systemName;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get the AgentConnection class from the MAP SDK, if available.
|
|
120
|
+
* Used to inject the SDK into ConnectionManager for federation peer connections.
|
|
121
|
+
*/
|
|
122
|
+
getAgentConnectionClass() {
|
|
123
|
+
return this.agentConnectionClass;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Startup replay: query MAP server for messages received while offline.
|
|
127
|
+
* Compares MAP server's message history against local storage and ingests
|
|
128
|
+
* any missing messages. Falls back to trusting local storage if the query fails.
|
|
129
|
+
*/
|
|
130
|
+
async replayMissed() {
|
|
131
|
+
if (!this.conn)
|
|
132
|
+
return 0;
|
|
133
|
+
try {
|
|
134
|
+
// Query MAP server for recent messages via extension
|
|
135
|
+
const result = await this.conn.callExtension?.("mail/recent", { limit: 200 });
|
|
136
|
+
if (!result || !Array.isArray(result.messages))
|
|
137
|
+
return 0;
|
|
138
|
+
let ingested = 0;
|
|
139
|
+
for (const msg of result.messages) {
|
|
140
|
+
// Check if we already have this message (by timestamp + sender dedup)
|
|
141
|
+
const existing = this.findExistingMessage(msg);
|
|
142
|
+
if (!existing) {
|
|
143
|
+
this.handleIncoming(msg);
|
|
144
|
+
ingested++;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return ingested;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// MAP server doesn't support mail/recent or query failed
|
|
151
|
+
// Fall back to trusting local storage
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
findExistingMessage(msg) {
|
|
156
|
+
// Simple dedup: check if a message with the same sender and timestamp exists
|
|
157
|
+
if (!msg.timestamp)
|
|
158
|
+
return false;
|
|
159
|
+
const candidates = this.storage.searchMessages(msg.from);
|
|
160
|
+
return candidates.some((m) => m.sender_id === msg.from && m.created_at === msg.timestamp);
|
|
161
|
+
}
|
|
162
|
+
handleIncoming(msg) {
|
|
163
|
+
const now = new Date().toISOString();
|
|
164
|
+
const content = normalizeContent(msg.payload);
|
|
165
|
+
// Store as a message
|
|
166
|
+
const message = {
|
|
167
|
+
id: ulid(),
|
|
168
|
+
scope: "default",
|
|
169
|
+
sender_id: msg.from,
|
|
170
|
+
recipients: [],
|
|
171
|
+
content,
|
|
172
|
+
importance: msg.meta?.priority === "high" ? "high" : "normal",
|
|
173
|
+
metadata: msg.meta ?? {},
|
|
174
|
+
created_at: msg.timestamp ?? now,
|
|
175
|
+
};
|
|
176
|
+
this.storage.putMessage(message);
|
|
177
|
+
this.events.emit("message.created", message);
|
|
178
|
+
// Append to inbox.jsonl if configured
|
|
179
|
+
if (this.inboxJsonlPath) {
|
|
180
|
+
this.appendToInboxJsonl(msg);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
appendToInboxJsonl(msg) {
|
|
184
|
+
if (!this.inboxJsonlPath)
|
|
185
|
+
return;
|
|
186
|
+
try {
|
|
187
|
+
const dir = path.dirname(this.inboxJsonlPath);
|
|
188
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
189
|
+
const line = JSON.stringify({
|
|
190
|
+
from: msg.from,
|
|
191
|
+
timestamp: msg.timestamp ?? new Date().toISOString(),
|
|
192
|
+
payload: msg.payload,
|
|
193
|
+
meta: msg.meta,
|
|
194
|
+
});
|
|
195
|
+
fs.appendFileSync(this.inboxJsonlPath, line + "\n");
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Best-effort write
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=map-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-client.js","sourceRoot":"","sources":["../../src/map/map-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { Storage } from "../storage/interface.js";
|
|
3
|
+
import type { MessageRouter } from "../router/message-router.js";
|
|
4
|
+
import type { WarmRegistry } from "../registry/warm-registry.js";
|
|
5
|
+
export declare class InboxMcpServer {
|
|
6
|
+
private router;
|
|
7
|
+
private storage;
|
|
8
|
+
private defaultScope;
|
|
9
|
+
private mcp;
|
|
10
|
+
private registry;
|
|
11
|
+
constructor(router: MessageRouter, storage: Storage, defaultScope?: string);
|
|
12
|
+
/**
|
|
13
|
+
* Attach a warm registry for federation-aware agent registration.
|
|
14
|
+
*/
|
|
15
|
+
setRegistry(registry: WarmRegistry): void;
|
|
16
|
+
private registerTools;
|
|
17
|
+
/** Auto-register an agent if not already known (lazy registration on first inbox check) */
|
|
18
|
+
private ensureAgent;
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
/** Expose for testing — returns the underlying McpServer */
|
|
21
|
+
get server(): McpServer;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,qBAAa,cAAc;IAKvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IANtB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,QAAQ,CAA6B;gBAGnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,YAAY,GAAE,MAAkB;IAU1C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIzC,OAAO,CAAC,aAAa;IA8MrB,2FAA2F;IAC3F,OAAO,CAAC,WAAW;IAuBb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,4DAA4D;IAC5D,IAAI,MAAM,IAAI,SAAS,CAEtB;CACF"}
|