agent-inbox 0.1.9 → 0.2.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/dist/cli.d.ts +20 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +89 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/jsonrpc/mail-push-types.d.ts +45 -0
- package/dist/jsonrpc/mail-push-types.d.ts.map +1 -0
- package/dist/jsonrpc/mail-push-types.js +36 -0
- package/dist/jsonrpc/mail-push-types.js.map +1 -0
- package/dist/jsonrpc/mail-push.d.ts +76 -0
- package/dist/jsonrpc/mail-push.d.ts.map +1 -0
- package/dist/jsonrpc/mail-push.js +76 -0
- package/dist/jsonrpc/mail-push.js.map +1 -0
- package/package.json +4 -1
- package/src/cli.ts +94 -0
- package/src/index.ts +11 -0
- package/src/jsonrpc/mail-push-types.ts +58 -0
- package/src/jsonrpc/mail-push.ts +153 -0
- package/test/mail-push.test.ts +214 -0
- package/dist/index.d.mts +0 -2
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for agent-inbox.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* agent-inbox # IPC server mode (default)
|
|
7
|
+
* agent-inbox mcp # MCP stdio server (standalone or proxy if INBOX_SOCKET_PATH set)
|
|
8
|
+
* agent-inbox mcp-proxy # MCP proxy to existing IPC socket
|
|
9
|
+
*
|
|
10
|
+
* Environment variables:
|
|
11
|
+
* INBOX_SOCKET_PATH — IPC socket path (also triggers proxy mode for `mcp`)
|
|
12
|
+
* INBOX_SQLITE_PATH — SQLite DB path (default: in-memory)
|
|
13
|
+
* INBOX_SCOPE — Message scope (default: "default")
|
|
14
|
+
* INBOX_AGENT_ID — Agent ID for proxy mode (default: "anonymous")
|
|
15
|
+
* INBOX_HTTP_PORT — HTTP port for JSON-RPC (0 = disabled)
|
|
16
|
+
* INBOX_MAP_ENABLED — Enable MAP transport ("true")
|
|
17
|
+
* INBOX_MAP_SERVER — MAP server URL
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for agent-inbox.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* agent-inbox # IPC server mode (default)
|
|
7
|
+
* agent-inbox mcp # MCP stdio server (standalone or proxy if INBOX_SOCKET_PATH set)
|
|
8
|
+
* agent-inbox mcp-proxy # MCP proxy to existing IPC socket
|
|
9
|
+
*
|
|
10
|
+
* Environment variables:
|
|
11
|
+
* INBOX_SOCKET_PATH — IPC socket path (also triggers proxy mode for `mcp`)
|
|
12
|
+
* INBOX_SQLITE_PATH — SQLite DB path (default: in-memory)
|
|
13
|
+
* INBOX_SCOPE — Message scope (default: "default")
|
|
14
|
+
* INBOX_AGENT_ID — Agent ID for proxy mode (default: "anonymous")
|
|
15
|
+
* INBOX_HTTP_PORT — HTTP port for JSON-RPC (0 = disabled)
|
|
16
|
+
* INBOX_MAP_ENABLED — Enable MAP transport ("true")
|
|
17
|
+
* INBOX_MAP_SERVER — MAP server URL
|
|
18
|
+
*/
|
|
19
|
+
import { EventEmitter } from "node:events";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
import * as os from "node:os";
|
|
22
|
+
import { InMemoryStorage } from "./storage/memory.js";
|
|
23
|
+
import { SqliteStorage } from "./storage/sqlite.js";
|
|
24
|
+
import { MessageRouter } from "./router/message-router.js";
|
|
25
|
+
import { TraceabilityLayer } from "./traceability/traceability.js";
|
|
26
|
+
import { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
27
|
+
function defaultSocketPath() {
|
|
28
|
+
return path.join(os.homedir(), ".claude", "agent-inbox", "inbox.sock");
|
|
29
|
+
}
|
|
30
|
+
const mode = process.argv[2] ?? "mcp";
|
|
31
|
+
if (mode === "mcp-proxy" || (mode === "mcp" && process.env.INBOX_SOCKET_PATH)) {
|
|
32
|
+
// MCP proxy mode — forward tool calls to an existing inbox IPC socket
|
|
33
|
+
const { InboxMcpProxy } = await import("./mcp/mcp-proxy.js");
|
|
34
|
+
const socketPath = process.env.INBOX_SOCKET_PATH ?? defaultSocketPath();
|
|
35
|
+
const agentId = process.env.INBOX_AGENT_ID ?? "anonymous";
|
|
36
|
+
const scope = process.env.INBOX_SCOPE ?? "default";
|
|
37
|
+
console.error(`[agent-inbox] MCP proxy mode → ${socketPath} (agent: ${agentId})`);
|
|
38
|
+
const proxy = new InboxMcpProxy(socketPath, agentId, scope);
|
|
39
|
+
proxy.start().catch((err) => {
|
|
40
|
+
console.error("MCP proxy failed:", err);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (mode === "mcp") {
|
|
45
|
+
// MCP standalone mode — stdio transport, own storage
|
|
46
|
+
const scope = process.env.INBOX_SCOPE ?? "default";
|
|
47
|
+
const sqlitePath = process.env.INBOX_SQLITE_PATH;
|
|
48
|
+
const storage = sqlitePath
|
|
49
|
+
? new SqliteStorage({ path: sqlitePath })
|
|
50
|
+
: new InMemoryStorage();
|
|
51
|
+
const events = new EventEmitter();
|
|
52
|
+
const router = new MessageRouter(storage, events, scope);
|
|
53
|
+
const _traceability = new TraceabilityLayer(storage, events);
|
|
54
|
+
const mcpServer = new InboxMcpServer(router, storage, scope);
|
|
55
|
+
console.error("[agent-inbox] MCP standalone mode (stdio)");
|
|
56
|
+
mcpServer.start().catch((err) => {
|
|
57
|
+
console.error("MCP server failed:", err);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (mode === "ipc") {
|
|
62
|
+
const { createAgentInbox } = await import("./index.js");
|
|
63
|
+
const httpPort = process.env.INBOX_HTTP_PORT
|
|
64
|
+
? parseInt(process.env.INBOX_HTTP_PORT, 10)
|
|
65
|
+
: 0;
|
|
66
|
+
const sqlitePath = process.env.INBOX_SQLITE_PATH;
|
|
67
|
+
createAgentInbox({ httpPort, sqlitePath })
|
|
68
|
+
.then((inbox) => {
|
|
69
|
+
console.error(`[agent-inbox] IPC server listening on ${process.env.INBOX_SOCKET_PATH ?? defaultSocketPath()}`);
|
|
70
|
+
process.on("SIGINT", async () => {
|
|
71
|
+
await inbox.stop();
|
|
72
|
+
process.exit(0);
|
|
73
|
+
});
|
|
74
|
+
process.on("SIGTERM", async () => {
|
|
75
|
+
await inbox.stop();
|
|
76
|
+
process.exit(0);
|
|
77
|
+
});
|
|
78
|
+
})
|
|
79
|
+
.catch((err) => {
|
|
80
|
+
console.error("Failed to start Agent Inbox:", err);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.error(`Unknown mode: ${mode}`);
|
|
86
|
+
console.error("Usage: agent-inbox [mcp|mcp-proxy|ipc]");
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export { MapClient } from "./map/map-client.js";
|
|
|
20
20
|
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
21
21
|
export { InboxMcpProxy } from "./mcp/mcp-proxy.js";
|
|
22
22
|
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
23
|
+
export { MAIL_TURN_RECEIVED_METHOD, buildMailTurnReceivedParams, type MailTurnReceivedParams, } from "./jsonrpc/mail-push-types.js";
|
|
24
|
+
export { createMailPushBridge, type MailPushBridge, type MailPushBridgeConfig, type MailPushSubscriber, } from "./jsonrpc/mail-push.js";
|
|
23
25
|
export { PushNotifier, formatInboxMarkdown, parseCommand } from "./push/notifier.js";
|
|
24
26
|
export type { InboxMessageEvent, NotifierConfig, InboxFileEntry } from "./push/notifier.js";
|
|
25
27
|
export { ConnectionManager } from "./federation/connection-manager.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,8 @@ export { MapClient } from "./map/map-client.js";
|
|
|
23
23
|
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
24
24
|
export { InboxMcpProxy } from "./mcp/mcp-proxy.js";
|
|
25
25
|
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
26
|
+
export { MAIL_TURN_RECEIVED_METHOD, buildMailTurnReceivedParams, } from "./jsonrpc/mail-push-types.js";
|
|
27
|
+
export { createMailPushBridge, } from "./jsonrpc/mail-push.js";
|
|
26
28
|
export { PushNotifier, formatInboxMarkdown, parseCommand } from "./push/notifier.js";
|
|
27
29
|
export { ConnectionManager } from "./federation/connection-manager.js";
|
|
28
30
|
export { WarmRegistry } from "./registry/warm-registry.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-protocol constants and types for the `mail/turn.received` server-
|
|
3
|
+
* pushed notification.
|
|
4
|
+
*
|
|
5
|
+
* agent-inbox already owns the request/response side of the `mail/*`
|
|
6
|
+
* surface (`mail/create`, `mail/turn`, `mail/get`, etc.) via
|
|
7
|
+
* `MailJsonRpcServer`. The push side — when a turn lands in a
|
|
8
|
+
* conversation that has remote participants, push the turn to those
|
|
9
|
+
* remotes — was previously hand-rolled by consumers (notably OpenHive's
|
|
10
|
+
* `forwardTurnToSwarms`). This module standardizes the method name +
|
|
11
|
+
* payload shape so consumers all use the same wire shape.
|
|
12
|
+
*
|
|
13
|
+
* @module agent-inbox/jsonrpc/mail-push-types
|
|
14
|
+
*/
|
|
15
|
+
import type { Turn, ContentType, MessageContent } from "../types.js";
|
|
16
|
+
/**
|
|
17
|
+
* The canonical JSON-RPC method name for server-pushed turn delivery.
|
|
18
|
+
* Use this constant rather than stringly-typing `'mail/turn.received'`.
|
|
19
|
+
*/
|
|
20
|
+
export declare const MAIL_TURN_RECEIVED_METHOD = "mail/turn.received";
|
|
21
|
+
/**
|
|
22
|
+
* Wire-shape for the `mail/turn.received` notification's `params`.
|
|
23
|
+
* Consumers wiring custom fan-out should construct this exact shape so
|
|
24
|
+
* receivers can rely on field names + presence.
|
|
25
|
+
*
|
|
26
|
+
* Mirrors {@link Turn} field-for-field (with `turn_id` derived from
|
|
27
|
+
* `Turn.id` for clarity on the receiver side; the wire is a flat
|
|
28
|
+
* record, not a nested `{ turn: ... }` object).
|
|
29
|
+
*/
|
|
30
|
+
export interface MailTurnReceivedParams {
|
|
31
|
+
conversation_id: string;
|
|
32
|
+
turn_id: string;
|
|
33
|
+
participant_id: string;
|
|
34
|
+
content_type: ContentType;
|
|
35
|
+
content: MessageContent;
|
|
36
|
+
thread_id?: string;
|
|
37
|
+
created_at: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build a `MailTurnReceivedParams` payload from a stored {@link Turn}.
|
|
41
|
+
* Centralizes field-mapping so consumers can't drift from the canonical
|
|
42
|
+
* shape.
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildMailTurnReceivedParams(turn: Turn): MailTurnReceivedParams;
|
|
45
|
+
//# sourceMappingURL=mail-push-types.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-protocol constants and types for the `mail/turn.received` server-
|
|
3
|
+
* pushed notification.
|
|
4
|
+
*
|
|
5
|
+
* agent-inbox already owns the request/response side of the `mail/*`
|
|
6
|
+
* surface (`mail/create`, `mail/turn`, `mail/get`, etc.) via
|
|
7
|
+
* `MailJsonRpcServer`. The push side — when a turn lands in a
|
|
8
|
+
* conversation that has remote participants, push the turn to those
|
|
9
|
+
* remotes — was previously hand-rolled by consumers (notably OpenHive's
|
|
10
|
+
* `forwardTurnToSwarms`). This module standardizes the method name +
|
|
11
|
+
* payload shape so consumers all use the same wire shape.
|
|
12
|
+
*
|
|
13
|
+
* @module agent-inbox/jsonrpc/mail-push-types
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The canonical JSON-RPC method name for server-pushed turn delivery.
|
|
17
|
+
* Use this constant rather than stringly-typing `'mail/turn.received'`.
|
|
18
|
+
*/
|
|
19
|
+
export const MAIL_TURN_RECEIVED_METHOD = "mail/turn.received";
|
|
20
|
+
/**
|
|
21
|
+
* Build a `MailTurnReceivedParams` payload from a stored {@link Turn}.
|
|
22
|
+
* Centralizes field-mapping so consumers can't drift from the canonical
|
|
23
|
+
* shape.
|
|
24
|
+
*/
|
|
25
|
+
export function buildMailTurnReceivedParams(turn) {
|
|
26
|
+
return {
|
|
27
|
+
conversation_id: turn.conversation_id,
|
|
28
|
+
turn_id: turn.id,
|
|
29
|
+
participant_id: turn.participant_id,
|
|
30
|
+
content_type: turn.content_type,
|
|
31
|
+
content: turn.content,
|
|
32
|
+
...(turn.thread_id ? { thread_id: turn.thread_id } : {}),
|
|
33
|
+
created_at: turn.created_at,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=mail-push-types.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mail Push Bridge — fan out `mail.turn.added` events as
|
|
3
|
+
* `mail/turn.received` notifications to subscriber systems.
|
|
4
|
+
*
|
|
5
|
+
* agent-inbox emits `mail.turn.added` whenever a turn is added to any
|
|
6
|
+
* conversation. Hubs that federate conversations across MAP need to
|
|
7
|
+
* push those turns to remote subscribers (e.g., swarms with
|
|
8
|
+
* `mail.canJoin` capability). Previously this was reimplemented by
|
|
9
|
+
* each consumer; this factory standardizes the event subscription +
|
|
10
|
+
* fan-out + payload shape.
|
|
11
|
+
*
|
|
12
|
+
* Transport-agnostic: the consumer injects:
|
|
13
|
+
* - `getSubscribers(turn)` — resolve subscribers for a given turn
|
|
14
|
+
* (e.g., walk a connection registry, filter by capability, skip
|
|
15
|
+
* the sender's own swarm).
|
|
16
|
+
* - `sendNotification(target, params)` — wire-level send. Consumers
|
|
17
|
+
* own retry / queue-for-stale-target / always-queue policies; this
|
|
18
|
+
* factory just calls `sendNotification` once per subscriber per
|
|
19
|
+
* turn.
|
|
20
|
+
*
|
|
21
|
+
* @module agent-inbox/jsonrpc/mail-push
|
|
22
|
+
*/
|
|
23
|
+
import type { EventEmitter } from "node:events";
|
|
24
|
+
import type { Turn } from "../types.js";
|
|
25
|
+
import { type MailTurnReceivedParams } from "./mail-push-types.js";
|
|
26
|
+
export interface MailPushSubscriber {
|
|
27
|
+
/**
|
|
28
|
+
* Opaque identifier for the subscriber. Passed back to
|
|
29
|
+
* `sendNotification` so the consumer can route to the right
|
|
30
|
+
* transport handle. Consumers may attach additional fields to this
|
|
31
|
+
* object (the factory ignores them, so a `MapInboundConnection &
|
|
32
|
+
* MailPushSubscriber` is fine).
|
|
33
|
+
*/
|
|
34
|
+
id: string;
|
|
35
|
+
}
|
|
36
|
+
export interface MailPushBridgeConfig<TSubscriber extends MailPushSubscriber = MailPushSubscriber> {
|
|
37
|
+
/**
|
|
38
|
+
* The agent-inbox event emitter (typically `inbox.events` from
|
|
39
|
+
* `createAgentInbox`). The factory subscribes to `mail.turn.added`.
|
|
40
|
+
*/
|
|
41
|
+
mailEvents: EventEmitter;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve subscribers for a given turn. Implementations typically:
|
|
44
|
+
* - Walk the consumer's connection registry / federation peer list
|
|
45
|
+
* - Filter by capability (e.g., `mail.canJoin`)
|
|
46
|
+
* - Skip the sender's own system to avoid echo loops
|
|
47
|
+
*
|
|
48
|
+
* Returns an empty array to suppress fan-out for that turn (e.g.,
|
|
49
|
+
* the conversation has no remote participants).
|
|
50
|
+
*/
|
|
51
|
+
getSubscribers: (turn: Turn) => TSubscriber[];
|
|
52
|
+
/**
|
|
53
|
+
* Send the `mail/turn.received` notification to a subscriber. The
|
|
54
|
+
* factory invokes this once per `(turn, subscriber)` pair. Consumers
|
|
55
|
+
* own the wire-level details (which transport, dual-write to retry
|
|
56
|
+
* queue, etc.) — this hook is the single fan-out site.
|
|
57
|
+
*
|
|
58
|
+
* Synchronous or async. The factory does not await each invocation
|
|
59
|
+
* (fire-and-forget) so a slow subscriber doesn't block fan-out to
|
|
60
|
+
* peers.
|
|
61
|
+
*/
|
|
62
|
+
sendNotification: (subscriber: TSubscriber, method: string, params: MailTurnReceivedParams) => void | Promise<void>;
|
|
63
|
+
/** Optional logger. Defaults to console.log. */
|
|
64
|
+
log?: (msg: string) => void;
|
|
65
|
+
}
|
|
66
|
+
export interface MailPushBridge {
|
|
67
|
+
/** Detach the event listener. Idempotent. */
|
|
68
|
+
stop(): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Wire the mail-push bridge. Returns a handle whose `stop()` detaches
|
|
72
|
+
* the event listener. Subscription is registered immediately; no
|
|
73
|
+
* separate `start()` step.
|
|
74
|
+
*/
|
|
75
|
+
export declare function createMailPushBridge<TSubscriber extends MailPushSubscriber = MailPushSubscriber>(config: MailPushBridgeConfig<TSubscriber>): MailPushBridge;
|
|
76
|
+
//# sourceMappingURL=mail-push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-push.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB,CACnC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB;IAE3D;;;OAGG;IACH,UAAU,EAAE,YAAY,CAAC;IAEzB;;;;;;;;OAQG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;IAE9C;;;;;;;;;OASG;IACH,gBAAgB,EAAE,CAChB,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,KAC3B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,gDAAgD;IAChD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB,EAC3D,MAAM,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,cAAc,CA0D3D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mail Push Bridge — fan out `mail.turn.added` events as
|
|
3
|
+
* `mail/turn.received` notifications to subscriber systems.
|
|
4
|
+
*
|
|
5
|
+
* agent-inbox emits `mail.turn.added` whenever a turn is added to any
|
|
6
|
+
* conversation. Hubs that federate conversations across MAP need to
|
|
7
|
+
* push those turns to remote subscribers (e.g., swarms with
|
|
8
|
+
* `mail.canJoin` capability). Previously this was reimplemented by
|
|
9
|
+
* each consumer; this factory standardizes the event subscription +
|
|
10
|
+
* fan-out + payload shape.
|
|
11
|
+
*
|
|
12
|
+
* Transport-agnostic: the consumer injects:
|
|
13
|
+
* - `getSubscribers(turn)` — resolve subscribers for a given turn
|
|
14
|
+
* (e.g., walk a connection registry, filter by capability, skip
|
|
15
|
+
* the sender's own swarm).
|
|
16
|
+
* - `sendNotification(target, params)` — wire-level send. Consumers
|
|
17
|
+
* own retry / queue-for-stale-target / always-queue policies; this
|
|
18
|
+
* factory just calls `sendNotification` once per subscriber per
|
|
19
|
+
* turn.
|
|
20
|
+
*
|
|
21
|
+
* @module agent-inbox/jsonrpc/mail-push
|
|
22
|
+
*/
|
|
23
|
+
import { MAIL_TURN_RECEIVED_METHOD, buildMailTurnReceivedParams, } from "./mail-push-types.js";
|
|
24
|
+
/**
|
|
25
|
+
* Wire the mail-push bridge. Returns a handle whose `stop()` detaches
|
|
26
|
+
* the event listener. Subscription is registered immediately; no
|
|
27
|
+
* separate `start()` step.
|
|
28
|
+
*/
|
|
29
|
+
export function createMailPushBridge(config) {
|
|
30
|
+
const { mailEvents, getSubscribers, sendNotification, log = () => { } } = config;
|
|
31
|
+
const onTurnAdded = (turn) => {
|
|
32
|
+
if (!turn || typeof turn !== "object")
|
|
33
|
+
return;
|
|
34
|
+
const t = turn;
|
|
35
|
+
if (typeof t.conversation_id !== "string" || typeof t.id !== "string") {
|
|
36
|
+
// Malformed event — defensive guard; agent-inbox always emits
|
|
37
|
+
// proper Turn shapes today, but defenses catch consumer mistakes.
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
let subscribers;
|
|
41
|
+
try {
|
|
42
|
+
subscribers = getSubscribers(t);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
log(`[mail-push] getSubscribers threw for turn ${t.id}: ${err.message}`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (subscribers.length === 0)
|
|
49
|
+
return;
|
|
50
|
+
const params = buildMailTurnReceivedParams(t);
|
|
51
|
+
for (const subscriber of subscribers) {
|
|
52
|
+
try {
|
|
53
|
+
const ret = sendNotification(subscriber, MAIL_TURN_RECEIVED_METHOD, params);
|
|
54
|
+
if (ret && typeof ret.catch === "function") {
|
|
55
|
+
ret.catch((err) => {
|
|
56
|
+
log(`[mail-push] sendNotification rejected for subscriber=${subscriber.id} turn=${t.id}: ${err.message}`);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
log(`[mail-push] sendNotification threw for subscriber=${subscriber.id} turn=${t.id}: ${err.message}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
mailEvents.on("mail.turn.added", onTurnAdded);
|
|
66
|
+
let stopped = false;
|
|
67
|
+
return {
|
|
68
|
+
stop() {
|
|
69
|
+
if (stopped)
|
|
70
|
+
return;
|
|
71
|
+
stopped = true;
|
|
72
|
+
mailEvents.off("mail.turn.added", onTurnAdded);
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=mail-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-push.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAE5B,MAAM,sBAAsB,CAAC;AA0D9B;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAElC,MAAyC;IACzC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,MAAM,CAAC;IAEhF,MAAM,WAAW,GAAG,CAAC,IAAa,EAAQ,EAAE;QAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9C,MAAM,CAAC,GAAG,IAAY,CAAC;QACvB,IAAI,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACtE,8DAA8D;YAC9D,kEAAkE;YAClE,OAAO;QACT,CAAC;QAED,IAAI,WAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CACD,6CAA6C,CAAC,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAC/E,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,MAAM,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;QAE9C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,gBAAgB,CAC1B,UAAU,EACV,yBAAyB,EACzB,MAAM,CACP,CAAC;gBACF,IAAI,GAAG,IAAI,OAAQ,GAAwB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAChE,GAAwB,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;wBAC/C,GAAG,CACD,wDAAwD,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAChH,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CACD,qDAAqD,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CAC7G,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,UAAU,CAAC,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAE9C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACL,IAAI;YACF,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-inbox",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Agent Inbox — message routing, traceability, and MCP tools for multi-agent systems",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"agent-inbox": "dist/cli.js"
|
|
10
|
+
},
|
|
8
11
|
"scripts": {
|
|
9
12
|
"build": "tsc",
|
|
10
13
|
"dev": "tsc --watch",
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CLI entry point for agent-inbox.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* agent-inbox # IPC server mode (default)
|
|
8
|
+
* agent-inbox mcp # MCP stdio server (standalone or proxy if INBOX_SOCKET_PATH set)
|
|
9
|
+
* agent-inbox mcp-proxy # MCP proxy to existing IPC socket
|
|
10
|
+
*
|
|
11
|
+
* Environment variables:
|
|
12
|
+
* INBOX_SOCKET_PATH — IPC socket path (also triggers proxy mode for `mcp`)
|
|
13
|
+
* INBOX_SQLITE_PATH — SQLite DB path (default: in-memory)
|
|
14
|
+
* INBOX_SCOPE — Message scope (default: "default")
|
|
15
|
+
* INBOX_AGENT_ID — Agent ID for proxy mode (default: "anonymous")
|
|
16
|
+
* INBOX_HTTP_PORT — HTTP port for JSON-RPC (0 = disabled)
|
|
17
|
+
* INBOX_MAP_ENABLED — Enable MAP transport ("true")
|
|
18
|
+
* INBOX_MAP_SERVER — MAP server URL
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { EventEmitter } from "node:events";
|
|
22
|
+
import * as path from "node:path";
|
|
23
|
+
import * as os from "node:os";
|
|
24
|
+
import { InMemoryStorage } from "./storage/memory.js";
|
|
25
|
+
import { SqliteStorage } from "./storage/sqlite.js";
|
|
26
|
+
import { MessageRouter } from "./router/message-router.js";
|
|
27
|
+
import { TraceabilityLayer } from "./traceability/traceability.js";
|
|
28
|
+
import { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
29
|
+
import type { Storage } from "./storage/interface.js";
|
|
30
|
+
|
|
31
|
+
function defaultSocketPath(): string {
|
|
32
|
+
return path.join(os.homedir(), ".claude", "agent-inbox", "inbox.sock");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const mode = process.argv[2] ?? "mcp";
|
|
36
|
+
|
|
37
|
+
if (mode === "mcp-proxy" || (mode === "mcp" && process.env.INBOX_SOCKET_PATH)) {
|
|
38
|
+
// MCP proxy mode — forward tool calls to an existing inbox IPC socket
|
|
39
|
+
const { InboxMcpProxy } = await import("./mcp/mcp-proxy.js");
|
|
40
|
+
const socketPath = process.env.INBOX_SOCKET_PATH ?? defaultSocketPath();
|
|
41
|
+
const agentId = process.env.INBOX_AGENT_ID ?? "anonymous";
|
|
42
|
+
const scope = process.env.INBOX_SCOPE ?? "default";
|
|
43
|
+
console.error(`[agent-inbox] MCP proxy mode → ${socketPath} (agent: ${agentId})`);
|
|
44
|
+
const proxy = new InboxMcpProxy(socketPath, agentId, scope);
|
|
45
|
+
proxy.start().catch((err) => {
|
|
46
|
+
console.error("MCP proxy failed:", err);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
});
|
|
49
|
+
} else if (mode === "mcp") {
|
|
50
|
+
// MCP standalone mode — stdio transport, own storage
|
|
51
|
+
const scope = process.env.INBOX_SCOPE ?? "default";
|
|
52
|
+
const sqlitePath = process.env.INBOX_SQLITE_PATH;
|
|
53
|
+
const storage: Storage = sqlitePath
|
|
54
|
+
? new SqliteStorage({ path: sqlitePath })
|
|
55
|
+
: new InMemoryStorage();
|
|
56
|
+
const events = new EventEmitter();
|
|
57
|
+
const router = new MessageRouter(storage, events, scope);
|
|
58
|
+
const _traceability = new TraceabilityLayer(storage, events);
|
|
59
|
+
const mcpServer = new InboxMcpServer(router, storage, scope);
|
|
60
|
+
console.error("[agent-inbox] MCP standalone mode (stdio)");
|
|
61
|
+
mcpServer.start().catch((err) => {
|
|
62
|
+
console.error("MCP server failed:", err);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
});
|
|
65
|
+
} else if (mode === "ipc") {
|
|
66
|
+
const { createAgentInbox } = await import("./index.js");
|
|
67
|
+
const httpPort = process.env.INBOX_HTTP_PORT
|
|
68
|
+
? parseInt(process.env.INBOX_HTTP_PORT, 10)
|
|
69
|
+
: 0;
|
|
70
|
+
const sqlitePath = process.env.INBOX_SQLITE_PATH;
|
|
71
|
+
|
|
72
|
+
createAgentInbox({ httpPort, sqlitePath })
|
|
73
|
+
.then((inbox) => {
|
|
74
|
+
console.error(
|
|
75
|
+
`[agent-inbox] IPC server listening on ${process.env.INBOX_SOCKET_PATH ?? defaultSocketPath()}`
|
|
76
|
+
);
|
|
77
|
+
process.on("SIGINT", async () => {
|
|
78
|
+
await inbox.stop();
|
|
79
|
+
process.exit(0);
|
|
80
|
+
});
|
|
81
|
+
process.on("SIGTERM", async () => {
|
|
82
|
+
await inbox.stop();
|
|
83
|
+
process.exit(0);
|
|
84
|
+
});
|
|
85
|
+
})
|
|
86
|
+
.catch((err) => {
|
|
87
|
+
console.error("Failed to start Agent Inbox:", err);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
});
|
|
90
|
+
} else {
|
|
91
|
+
console.error(`Unknown mode: ${mode}`);
|
|
92
|
+
console.error("Usage: agent-inbox [mcp|mcp-proxy|ipc]");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -28,6 +28,17 @@ export { MapClient } from "./map/map-client.js";
|
|
|
28
28
|
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
29
29
|
export { InboxMcpProxy } from "./mcp/mcp-proxy.js";
|
|
30
30
|
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
31
|
+
export {
|
|
32
|
+
MAIL_TURN_RECEIVED_METHOD,
|
|
33
|
+
buildMailTurnReceivedParams,
|
|
34
|
+
type MailTurnReceivedParams,
|
|
35
|
+
} from "./jsonrpc/mail-push-types.js";
|
|
36
|
+
export {
|
|
37
|
+
createMailPushBridge,
|
|
38
|
+
type MailPushBridge,
|
|
39
|
+
type MailPushBridgeConfig,
|
|
40
|
+
type MailPushSubscriber,
|
|
41
|
+
} from "./jsonrpc/mail-push.js";
|
|
31
42
|
export { PushNotifier, formatInboxMarkdown, parseCommand } from "./push/notifier.js";
|
|
32
43
|
export type { InboxMessageEvent, NotifierConfig, InboxFileEntry } from "./push/notifier.js";
|
|
33
44
|
export { ConnectionManager } from "./federation/connection-manager.js";
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-protocol constants and types for the `mail/turn.received` server-
|
|
3
|
+
* pushed notification.
|
|
4
|
+
*
|
|
5
|
+
* agent-inbox already owns the request/response side of the `mail/*`
|
|
6
|
+
* surface (`mail/create`, `mail/turn`, `mail/get`, etc.) via
|
|
7
|
+
* `MailJsonRpcServer`. The push side — when a turn lands in a
|
|
8
|
+
* conversation that has remote participants, push the turn to those
|
|
9
|
+
* remotes — was previously hand-rolled by consumers (notably OpenHive's
|
|
10
|
+
* `forwardTurnToSwarms`). This module standardizes the method name +
|
|
11
|
+
* payload shape so consumers all use the same wire shape.
|
|
12
|
+
*
|
|
13
|
+
* @module agent-inbox/jsonrpc/mail-push-types
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { Turn, ContentType, MessageContent } from "../types.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The canonical JSON-RPC method name for server-pushed turn delivery.
|
|
20
|
+
* Use this constant rather than stringly-typing `'mail/turn.received'`.
|
|
21
|
+
*/
|
|
22
|
+
export const MAIL_TURN_RECEIVED_METHOD = "mail/turn.received";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Wire-shape for the `mail/turn.received` notification's `params`.
|
|
26
|
+
* Consumers wiring custom fan-out should construct this exact shape so
|
|
27
|
+
* receivers can rely on field names + presence.
|
|
28
|
+
*
|
|
29
|
+
* Mirrors {@link Turn} field-for-field (with `turn_id` derived from
|
|
30
|
+
* `Turn.id` for clarity on the receiver side; the wire is a flat
|
|
31
|
+
* record, not a nested `{ turn: ... }` object).
|
|
32
|
+
*/
|
|
33
|
+
export interface MailTurnReceivedParams {
|
|
34
|
+
conversation_id: string;
|
|
35
|
+
turn_id: string;
|
|
36
|
+
participant_id: string;
|
|
37
|
+
content_type: ContentType;
|
|
38
|
+
content: MessageContent;
|
|
39
|
+
thread_id?: string;
|
|
40
|
+
created_at: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Build a `MailTurnReceivedParams` payload from a stored {@link Turn}.
|
|
45
|
+
* Centralizes field-mapping so consumers can't drift from the canonical
|
|
46
|
+
* shape.
|
|
47
|
+
*/
|
|
48
|
+
export function buildMailTurnReceivedParams(turn: Turn): MailTurnReceivedParams {
|
|
49
|
+
return {
|
|
50
|
+
conversation_id: turn.conversation_id,
|
|
51
|
+
turn_id: turn.id,
|
|
52
|
+
participant_id: turn.participant_id,
|
|
53
|
+
content_type: turn.content_type,
|
|
54
|
+
content: turn.content,
|
|
55
|
+
...(turn.thread_id ? { thread_id: turn.thread_id } : {}),
|
|
56
|
+
created_at: turn.created_at,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mail Push Bridge — fan out `mail.turn.added` events as
|
|
3
|
+
* `mail/turn.received` notifications to subscriber systems.
|
|
4
|
+
*
|
|
5
|
+
* agent-inbox emits `mail.turn.added` whenever a turn is added to any
|
|
6
|
+
* conversation. Hubs that federate conversations across MAP need to
|
|
7
|
+
* push those turns to remote subscribers (e.g., swarms with
|
|
8
|
+
* `mail.canJoin` capability). Previously this was reimplemented by
|
|
9
|
+
* each consumer; this factory standardizes the event subscription +
|
|
10
|
+
* fan-out + payload shape.
|
|
11
|
+
*
|
|
12
|
+
* Transport-agnostic: the consumer injects:
|
|
13
|
+
* - `getSubscribers(turn)` — resolve subscribers for a given turn
|
|
14
|
+
* (e.g., walk a connection registry, filter by capability, skip
|
|
15
|
+
* the sender's own swarm).
|
|
16
|
+
* - `sendNotification(target, params)` — wire-level send. Consumers
|
|
17
|
+
* own retry / queue-for-stale-target / always-queue policies; this
|
|
18
|
+
* factory just calls `sendNotification` once per subscriber per
|
|
19
|
+
* turn.
|
|
20
|
+
*
|
|
21
|
+
* @module agent-inbox/jsonrpc/mail-push
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import type { EventEmitter } from "node:events";
|
|
25
|
+
import type { Turn } from "../types.js";
|
|
26
|
+
import {
|
|
27
|
+
MAIL_TURN_RECEIVED_METHOD,
|
|
28
|
+
buildMailTurnReceivedParams,
|
|
29
|
+
type MailTurnReceivedParams,
|
|
30
|
+
} from "./mail-push-types.js";
|
|
31
|
+
|
|
32
|
+
export interface MailPushSubscriber {
|
|
33
|
+
/**
|
|
34
|
+
* Opaque identifier for the subscriber. Passed back to
|
|
35
|
+
* `sendNotification` so the consumer can route to the right
|
|
36
|
+
* transport handle. Consumers may attach additional fields to this
|
|
37
|
+
* object (the factory ignores them, so a `MapInboundConnection &
|
|
38
|
+
* MailPushSubscriber` is fine).
|
|
39
|
+
*/
|
|
40
|
+
id: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface MailPushBridgeConfig<
|
|
44
|
+
TSubscriber extends MailPushSubscriber = MailPushSubscriber,
|
|
45
|
+
> {
|
|
46
|
+
/**
|
|
47
|
+
* The agent-inbox event emitter (typically `inbox.events` from
|
|
48
|
+
* `createAgentInbox`). The factory subscribes to `mail.turn.added`.
|
|
49
|
+
*/
|
|
50
|
+
mailEvents: EventEmitter;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Resolve subscribers for a given turn. Implementations typically:
|
|
54
|
+
* - Walk the consumer's connection registry / federation peer list
|
|
55
|
+
* - Filter by capability (e.g., `mail.canJoin`)
|
|
56
|
+
* - Skip the sender's own system to avoid echo loops
|
|
57
|
+
*
|
|
58
|
+
* Returns an empty array to suppress fan-out for that turn (e.g.,
|
|
59
|
+
* the conversation has no remote participants).
|
|
60
|
+
*/
|
|
61
|
+
getSubscribers: (turn: Turn) => TSubscriber[];
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Send the `mail/turn.received` notification to a subscriber. The
|
|
65
|
+
* factory invokes this once per `(turn, subscriber)` pair. Consumers
|
|
66
|
+
* own the wire-level details (which transport, dual-write to retry
|
|
67
|
+
* queue, etc.) — this hook is the single fan-out site.
|
|
68
|
+
*
|
|
69
|
+
* Synchronous or async. The factory does not await each invocation
|
|
70
|
+
* (fire-and-forget) so a slow subscriber doesn't block fan-out to
|
|
71
|
+
* peers.
|
|
72
|
+
*/
|
|
73
|
+
sendNotification: (
|
|
74
|
+
subscriber: TSubscriber,
|
|
75
|
+
method: string,
|
|
76
|
+
params: MailTurnReceivedParams,
|
|
77
|
+
) => void | Promise<void>;
|
|
78
|
+
|
|
79
|
+
/** Optional logger. Defaults to console.log. */
|
|
80
|
+
log?: (msg: string) => void;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface MailPushBridge {
|
|
84
|
+
/** Detach the event listener. Idempotent. */
|
|
85
|
+
stop(): void;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Wire the mail-push bridge. Returns a handle whose `stop()` detaches
|
|
90
|
+
* the event listener. Subscription is registered immediately; no
|
|
91
|
+
* separate `start()` step.
|
|
92
|
+
*/
|
|
93
|
+
export function createMailPushBridge<
|
|
94
|
+
TSubscriber extends MailPushSubscriber = MailPushSubscriber,
|
|
95
|
+
>(config: MailPushBridgeConfig<TSubscriber>): MailPushBridge {
|
|
96
|
+
const { mailEvents, getSubscribers, sendNotification, log = () => {} } = config;
|
|
97
|
+
|
|
98
|
+
const onTurnAdded = (turn: unknown): void => {
|
|
99
|
+
if (!turn || typeof turn !== "object") return;
|
|
100
|
+
const t = turn as Turn;
|
|
101
|
+
if (typeof t.conversation_id !== "string" || typeof t.id !== "string") {
|
|
102
|
+
// Malformed event — defensive guard; agent-inbox always emits
|
|
103
|
+
// proper Turn shapes today, but defenses catch consumer mistakes.
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let subscribers: TSubscriber[];
|
|
108
|
+
try {
|
|
109
|
+
subscribers = getSubscribers(t);
|
|
110
|
+
} catch (err) {
|
|
111
|
+
log(
|
|
112
|
+
`[mail-push] getSubscribers threw for turn ${t.id}: ${(err as Error).message}`,
|
|
113
|
+
);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (subscribers.length === 0) return;
|
|
118
|
+
|
|
119
|
+
const params = buildMailTurnReceivedParams(t);
|
|
120
|
+
|
|
121
|
+
for (const subscriber of subscribers) {
|
|
122
|
+
try {
|
|
123
|
+
const ret = sendNotification(
|
|
124
|
+
subscriber,
|
|
125
|
+
MAIL_TURN_RECEIVED_METHOD,
|
|
126
|
+
params,
|
|
127
|
+
);
|
|
128
|
+
if (ret && typeof (ret as Promise<unknown>).catch === "function") {
|
|
129
|
+
(ret as Promise<unknown>).catch((err: unknown) => {
|
|
130
|
+
log(
|
|
131
|
+
`[mail-push] sendNotification rejected for subscriber=${subscriber.id} turn=${t.id}: ${(err as Error).message}`,
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
} catch (err) {
|
|
136
|
+
log(
|
|
137
|
+
`[mail-push] sendNotification threw for subscriber=${subscriber.id} turn=${t.id}: ${(err as Error).message}`,
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
mailEvents.on("mail.turn.added", onTurnAdded);
|
|
144
|
+
|
|
145
|
+
let stopped = false;
|
|
146
|
+
return {
|
|
147
|
+
stop() {
|
|
148
|
+
if (stopped) return;
|
|
149
|
+
stopped = true;
|
|
150
|
+
mailEvents.off("mail.turn.added", onTurnAdded);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for `createMailPushBridge` — the factory that fans out
|
|
3
|
+
* `mail.turn.added` events as `mail/turn.received` notifications.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { describe, it, expect, vi } from "vitest";
|
|
7
|
+
import { EventEmitter } from "node:events";
|
|
8
|
+
import {
|
|
9
|
+
createMailPushBridge,
|
|
10
|
+
MAIL_TURN_RECEIVED_METHOD,
|
|
11
|
+
buildMailTurnReceivedParams,
|
|
12
|
+
type MailPushSubscriber,
|
|
13
|
+
} from "../src/index.js";
|
|
14
|
+
import type { Turn } from "../src/types.js";
|
|
15
|
+
|
|
16
|
+
function makeTurn(overrides: Partial<Turn> = {}): Turn {
|
|
17
|
+
return {
|
|
18
|
+
id: "turn-1",
|
|
19
|
+
conversation_id: "conv-1",
|
|
20
|
+
participant_id: "agent-A",
|
|
21
|
+
content_type: "text",
|
|
22
|
+
content: { type: "text", text: "hi" },
|
|
23
|
+
created_at: "2026-05-04T00:00:00.000Z",
|
|
24
|
+
...overrides,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
describe("createMailPushBridge", () => {
|
|
29
|
+
it("subscribes to mail.turn.added on construction", () => {
|
|
30
|
+
const events = new EventEmitter();
|
|
31
|
+
const onSpy = vi.spyOn(events, "on");
|
|
32
|
+
|
|
33
|
+
createMailPushBridge({
|
|
34
|
+
mailEvents: events,
|
|
35
|
+
getSubscribers: () => [],
|
|
36
|
+
sendNotification: () => {},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
expect(onSpy).toHaveBeenCalledWith("mail.turn.added", expect.any(Function));
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("fans out a turn to all returned subscribers using mail/turn.received", () => {
|
|
43
|
+
const events = new EventEmitter();
|
|
44
|
+
const subscribers: MailPushSubscriber[] = [{ id: "swarm-1" }, { id: "swarm-2" }];
|
|
45
|
+
const sendCalls: Array<{
|
|
46
|
+
sub: MailPushSubscriber;
|
|
47
|
+
method: string;
|
|
48
|
+
params: unknown;
|
|
49
|
+
}> = [];
|
|
50
|
+
|
|
51
|
+
createMailPushBridge({
|
|
52
|
+
mailEvents: events,
|
|
53
|
+
getSubscribers: () => subscribers,
|
|
54
|
+
sendNotification: (sub, method, params) => {
|
|
55
|
+
sendCalls.push({ sub, method, params });
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const turn = makeTurn({ id: "t-99", conversation_id: "c-99" });
|
|
60
|
+
events.emit("mail.turn.added", turn);
|
|
61
|
+
|
|
62
|
+
expect(sendCalls).toHaveLength(2);
|
|
63
|
+
expect(sendCalls[0]!.method).toBe(MAIL_TURN_RECEIVED_METHOD);
|
|
64
|
+
expect(sendCalls[0]!.method).toBe("mail/turn.received");
|
|
65
|
+
expect(sendCalls[0]!.sub.id).toBe("swarm-1");
|
|
66
|
+
expect(sendCalls[1]!.sub.id).toBe("swarm-2");
|
|
67
|
+
expect(sendCalls[0]!.params).toEqual(buildMailTurnReceivedParams(turn));
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("includes thread_id only when present on the turn", () => {
|
|
71
|
+
const events = new EventEmitter();
|
|
72
|
+
const calls: Array<{ params: Record<string, unknown> }> = [];
|
|
73
|
+
|
|
74
|
+
createMailPushBridge({
|
|
75
|
+
mailEvents: events,
|
|
76
|
+
getSubscribers: () => [{ id: "swarm-1" }],
|
|
77
|
+
sendNotification: (_sub, _method, params) => {
|
|
78
|
+
calls.push({ params: params as unknown as Record<string, unknown> });
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
events.emit("mail.turn.added", makeTurn({ thread_id: "thr-1" }));
|
|
83
|
+
events.emit("mail.turn.added", makeTurn({ id: "turn-2" }));
|
|
84
|
+
|
|
85
|
+
expect(calls).toHaveLength(2);
|
|
86
|
+
expect(calls[0]!.params.thread_id).toBe("thr-1");
|
|
87
|
+
expect(calls[1]!.params.thread_id).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("suppresses fan-out when getSubscribers returns empty", () => {
|
|
91
|
+
const events = new EventEmitter();
|
|
92
|
+
const sendNotification = vi.fn();
|
|
93
|
+
|
|
94
|
+
createMailPushBridge({
|
|
95
|
+
mailEvents: events,
|
|
96
|
+
getSubscribers: () => [],
|
|
97
|
+
sendNotification,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
events.emit("mail.turn.added", makeTurn());
|
|
101
|
+
expect(sendNotification).not.toHaveBeenCalled();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("ignores malformed turn payloads", () => {
|
|
105
|
+
const events = new EventEmitter();
|
|
106
|
+
const sendNotification = vi.fn();
|
|
107
|
+
|
|
108
|
+
createMailPushBridge({
|
|
109
|
+
mailEvents: events,
|
|
110
|
+
getSubscribers: () => [{ id: "swarm-1" }],
|
|
111
|
+
sendNotification,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
events.emit("mail.turn.added", null);
|
|
115
|
+
events.emit("mail.turn.added", "string");
|
|
116
|
+
events.emit("mail.turn.added", { id: 123 }); // wrong types
|
|
117
|
+
|
|
118
|
+
expect(sendNotification).not.toHaveBeenCalled();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("logs and continues when getSubscribers throws", () => {
|
|
122
|
+
const events = new EventEmitter();
|
|
123
|
+
const logs: string[] = [];
|
|
124
|
+
const sendNotification = vi.fn();
|
|
125
|
+
|
|
126
|
+
createMailPushBridge({
|
|
127
|
+
mailEvents: events,
|
|
128
|
+
getSubscribers: () => {
|
|
129
|
+
throw new Error("registry exploded");
|
|
130
|
+
},
|
|
131
|
+
sendNotification,
|
|
132
|
+
log: (msg) => logs.push(msg),
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
events.emit("mail.turn.added", makeTurn());
|
|
136
|
+
expect(sendNotification).not.toHaveBeenCalled();
|
|
137
|
+
expect(logs.some((l) => l.includes("getSubscribers threw"))).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("logs and continues when sendNotification throws synchronously for one subscriber", () => {
|
|
141
|
+
const events = new EventEmitter();
|
|
142
|
+
const logs: string[] = [];
|
|
143
|
+
const calls: string[] = [];
|
|
144
|
+
|
|
145
|
+
createMailPushBridge({
|
|
146
|
+
mailEvents: events,
|
|
147
|
+
getSubscribers: () => [
|
|
148
|
+
{ id: "ok-1" },
|
|
149
|
+
{ id: "broken" },
|
|
150
|
+
{ id: "ok-2" },
|
|
151
|
+
],
|
|
152
|
+
sendNotification: (sub) => {
|
|
153
|
+
if (sub.id === "broken") throw new Error("boom");
|
|
154
|
+
calls.push(sub.id);
|
|
155
|
+
},
|
|
156
|
+
log: (msg) => logs.push(msg),
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
events.emit("mail.turn.added", makeTurn());
|
|
160
|
+
|
|
161
|
+
// Other subscribers still received the notification.
|
|
162
|
+
expect(calls).toEqual(["ok-1", "ok-2"]);
|
|
163
|
+
expect(logs.some((l) => l.includes("sendNotification threw"))).toBe(true);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("logs (does not crash) when sendNotification rejects async", async () => {
|
|
167
|
+
const events = new EventEmitter();
|
|
168
|
+
const logs: string[] = [];
|
|
169
|
+
|
|
170
|
+
createMailPushBridge({
|
|
171
|
+
mailEvents: events,
|
|
172
|
+
getSubscribers: () => [{ id: "swarm-1" }],
|
|
173
|
+
sendNotification: async () => {
|
|
174
|
+
throw new Error("async failure");
|
|
175
|
+
},
|
|
176
|
+
log: (msg) => logs.push(msg),
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
events.emit("mail.turn.added", makeTurn());
|
|
180
|
+
|
|
181
|
+
// Wait for the async catch handler to fire.
|
|
182
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
183
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
184
|
+
|
|
185
|
+
expect(logs.some((l) => l.includes("sendNotification rejected"))).toBe(true);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("stop() detaches the listener (no further fan-out)", () => {
|
|
189
|
+
const events = new EventEmitter();
|
|
190
|
+
const sendNotification = vi.fn();
|
|
191
|
+
|
|
192
|
+
const bridge = createMailPushBridge({
|
|
193
|
+
mailEvents: events,
|
|
194
|
+
getSubscribers: () => [{ id: "swarm-1" }],
|
|
195
|
+
sendNotification,
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
bridge.stop();
|
|
199
|
+
events.emit("mail.turn.added", makeTurn());
|
|
200
|
+
expect(sendNotification).not.toHaveBeenCalled();
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it("stop() is idempotent", () => {
|
|
204
|
+
const events = new EventEmitter();
|
|
205
|
+
const bridge = createMailPushBridge({
|
|
206
|
+
mailEvents: events,
|
|
207
|
+
getSubscribers: () => [],
|
|
208
|
+
sendNotification: () => {},
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
bridge.stop();
|
|
212
|
+
expect(() => bridge.stop()).not.toThrow();
|
|
213
|
+
});
|
|
214
|
+
});
|
package/dist/index.d.mts
DELETED
package/dist/index.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|