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
package/dist/index.js
CHANGED
|
@@ -1,19 +1,218 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import { InMemoryStorage } from "./storage/memory.js";
|
|
5
|
+
import { SqliteStorage } from "./storage/sqlite.js";
|
|
6
|
+
import { MessageRouter } from "./router/message-router.js";
|
|
7
|
+
import { TraceabilityLayer } from "./traceability/traceability.js";
|
|
8
|
+
import { IpcServer } from "./ipc/ipc-server.js";
|
|
9
|
+
import { MapClient } from "./map/map-client.js";
|
|
10
|
+
import { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
11
|
+
import { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
12
|
+
import { PushNotifier } from "./push/notifier.js";
|
|
13
|
+
import { ConnectionManager } from "./federation/connection-manager.js";
|
|
14
|
+
import { WarmRegistry } from "./registry/warm-registry.js";
|
|
15
|
+
export { InMemoryStorage } from "./storage/memory.js";
|
|
16
|
+
export { SqliteStorage } from "./storage/sqlite.js";
|
|
17
|
+
export { MessageRouter, normalizeContent } from "./router/message-router.js";
|
|
18
|
+
export { TraceabilityLayer } from "./traceability/traceability.js";
|
|
19
|
+
export { IpcServer } from "./ipc/ipc-server.js";
|
|
20
|
+
export { MapClient } from "./map/map-client.js";
|
|
21
|
+
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
22
|
+
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
23
|
+
export { PushNotifier, formatInboxMarkdown } from "./push/notifier.js";
|
|
24
|
+
export { ConnectionManager } from "./federation/connection-manager.js";
|
|
25
|
+
export { WarmRegistry } from "./registry/warm-registry.js";
|
|
26
|
+
export { RoutingEngine } from "./federation/routing-engine.js";
|
|
27
|
+
export { DeliveryQueue } from "./federation/delivery-queue.js";
|
|
28
|
+
export { TrustManager } from "./federation/trust.js";
|
|
29
|
+
export { parseAddress, formatAddress, isRemoteAddress, isBroadcastAddress, } from "./federation/address.js";
|
|
30
|
+
function defaultSocketPath() {
|
|
31
|
+
const home = os.homedir();
|
|
32
|
+
return path.join(home, ".claude", "agent-inbox", "inbox.sock");
|
|
33
|
+
}
|
|
34
|
+
function defaultInboxJsonlPath() {
|
|
35
|
+
const home = os.homedir();
|
|
36
|
+
return path.join(home, ".claude", "agent-inbox", "inbox.jsonl");
|
|
37
|
+
}
|
|
38
|
+
function defaultInboxDir() {
|
|
39
|
+
const home = os.homedir();
|
|
40
|
+
return path.join(home, ".claude", "agent-inbox", "inboxes");
|
|
41
|
+
}
|
|
42
|
+
function defaultSqlitePath() {
|
|
43
|
+
const home = os.homedir();
|
|
44
|
+
return path.join(home, ".claude", "agent-inbox", "inbox.db");
|
|
45
|
+
}
|
|
46
|
+
function loadConfig() {
|
|
47
|
+
return {
|
|
48
|
+
socketPath: process.env.INBOX_SOCKET_PATH ?? defaultSocketPath(),
|
|
49
|
+
scope: process.env.INBOX_SCOPE ?? "default",
|
|
50
|
+
map: {
|
|
51
|
+
enabled: process.env.INBOX_MAP_ENABLED === "true",
|
|
52
|
+
server: process.env.INBOX_MAP_SERVER,
|
|
53
|
+
scope: process.env.INBOX_MAP_SCOPE ?? process.env.INBOX_SCOPE ?? "default",
|
|
54
|
+
systemId: process.env.INBOX_MAP_SYSTEM_ID ?? "agent-inbox",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export async function createAgentInbox(opts = {}) {
|
|
59
|
+
const config = { ...loadConfig(), ...opts.config };
|
|
60
|
+
// 1. Storage — SQLite if path provided, otherwise in-memory
|
|
61
|
+
const storage = opts.sqlitePath
|
|
62
|
+
? new SqliteStorage({ path: opts.sqlitePath })
|
|
63
|
+
: new InMemoryStorage();
|
|
64
|
+
// 2. Event bus (internal)
|
|
65
|
+
const events = new EventEmitter();
|
|
66
|
+
// 3. Message router
|
|
67
|
+
const router = new MessageRouter(storage, events, config.scope);
|
|
68
|
+
// 4. Traceability layer (subscribes to message.created events)
|
|
69
|
+
const traceability = new TraceabilityLayer(storage, events);
|
|
70
|
+
// 5. Push notifier (per-agent inbox files + webhooks)
|
|
71
|
+
const notifier = new PushNotifier({ inboxDir: defaultInboxDir(), webhooks: opts.webhooks }, storage, events);
|
|
72
|
+
// 6. MAP client (connects first to obtain SDK class for federation)
|
|
73
|
+
const mapClient = new MapClient(storage, router, events, defaultInboxJsonlPath());
|
|
74
|
+
if (opts.connection) {
|
|
75
|
+
// External connection — borrow it, don't manage its lifecycle
|
|
76
|
+
mapClient.useConnection(opts.connection);
|
|
77
|
+
}
|
|
78
|
+
else if (config.map?.enabled) {
|
|
79
|
+
const connected = await mapClient.connect(config.map);
|
|
80
|
+
if (connected) {
|
|
81
|
+
// Replay missed messages from MAP server
|
|
82
|
+
const replayed = await mapClient.replayMissed();
|
|
83
|
+
if (replayed > 0) {
|
|
84
|
+
console.error(`Replayed ${replayed} missed messages from MAP server`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// 7. Federation (optional) — inject SDK class from MapClient if available
|
|
89
|
+
let federation = null;
|
|
90
|
+
let registry = null;
|
|
91
|
+
if (opts.enableFederation || config.federation?.peers?.length) {
|
|
92
|
+
registry = new WarmRegistry(storage, events, config.federation?.registry);
|
|
93
|
+
const sdkClass = mapClient.getAgentConnectionClass() ?? undefined;
|
|
94
|
+
federation = new ConnectionManager(events, config.federation, {
|
|
95
|
+
sdkClass,
|
|
96
|
+
onIncomingMessage: ({ from, peerId, payload, meta }) => {
|
|
97
|
+
// Delegate incoming federation messages to the router.
|
|
98
|
+
// The targetAgent in meta tells us which local agent this is for.
|
|
99
|
+
const targetAgent = meta?.targetAgent ?? from;
|
|
100
|
+
router.routeMessage({
|
|
101
|
+
from: `${from}@${peerId}`,
|
|
102
|
+
to: targetAgent,
|
|
103
|
+
payload,
|
|
104
|
+
scope: meta?.scope,
|
|
105
|
+
subject: meta?.subject,
|
|
106
|
+
importance: meta?.importance,
|
|
107
|
+
threadTag: meta?.threadTag,
|
|
108
|
+
inReplyTo: meta?.inReplyTo,
|
|
109
|
+
metadata: meta,
|
|
110
|
+
}).catch((err) => {
|
|
111
|
+
console.error(`Failed to route incoming federation message from ${from}@${peerId}: ${err instanceof Error ? err.message : err}`);
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
router.setFederation(federation);
|
|
116
|
+
// Tier 2 system ID resolution: update from MAP systemInfo if available
|
|
117
|
+
const mapSystemName = mapClient.getSystemName();
|
|
118
|
+
if (mapSystemName) {
|
|
119
|
+
federation.updateSystemIdFromMap(mapSystemName);
|
|
120
|
+
}
|
|
121
|
+
// Connect to configured federation peers
|
|
122
|
+
if (config.federation?.peers) {
|
|
123
|
+
for (const peer of config.federation.peers) {
|
|
124
|
+
try {
|
|
125
|
+
await federation.federate(peer);
|
|
126
|
+
console.error(`Federated with peer: ${peer.systemId} (${peer.url})`);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
console.error(`Failed to federate with ${peer.systemId}: ${err instanceof Error ? err.message : err}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Start delivery queue tick timer
|
|
134
|
+
federation.queue.startTicking();
|
|
135
|
+
}
|
|
136
|
+
// 8. JSON-RPC server (mail/* methods)
|
|
137
|
+
const jsonRpc = new MailJsonRpcServer(storage, router, events);
|
|
138
|
+
if (opts.httpPort && opts.httpPort > 0) {
|
|
139
|
+
await jsonRpc.startHttp(opts.httpPort);
|
|
140
|
+
console.error(`JSON-RPC HTTP server listening on port ${opts.httpPort}`);
|
|
141
|
+
}
|
|
142
|
+
// 9. IPC server (UNIX socket — handles both NDJSON commands and JSON-RPC inline)
|
|
143
|
+
const socketPath = config.socketPath ?? defaultSocketPath();
|
|
144
|
+
const ipcServer = new IpcServer(socketPath, router, storage, jsonRpc);
|
|
145
|
+
await ipcServer.start();
|
|
146
|
+
const stop = async () => {
|
|
147
|
+
await ipcServer.stop();
|
|
148
|
+
await jsonRpc.stopHttp();
|
|
149
|
+
await mapClient.disconnect();
|
|
150
|
+
if (federation)
|
|
151
|
+
await federation.destroy();
|
|
152
|
+
if (registry)
|
|
153
|
+
registry.destroy();
|
|
154
|
+
if ("close" in storage && typeof storage.close === "function") {
|
|
155
|
+
storage.close();
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
return {
|
|
159
|
+
storage,
|
|
160
|
+
router,
|
|
161
|
+
traceability,
|
|
162
|
+
ipcServer,
|
|
163
|
+
mapClient,
|
|
164
|
+
jsonRpc,
|
|
165
|
+
notifier,
|
|
166
|
+
federation,
|
|
167
|
+
registry,
|
|
168
|
+
events,
|
|
169
|
+
stop,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
// CLI entry point
|
|
173
|
+
const isMainModule = process.argv[1] &&
|
|
174
|
+
(process.argv[1].endsWith("/index.js") ||
|
|
175
|
+
process.argv[1].endsWith("/index.ts"));
|
|
176
|
+
if (isMainModule) {
|
|
177
|
+
const mode = process.argv[2] ?? "ipc";
|
|
178
|
+
if (mode === "mcp") {
|
|
179
|
+
// MCP-only mode (stdio transport for Claude Code integration)
|
|
180
|
+
const config = loadConfig();
|
|
181
|
+
const sqlitePath = process.env.INBOX_SQLITE_PATH;
|
|
182
|
+
const storage = sqlitePath
|
|
183
|
+
? new SqliteStorage({ path: sqlitePath })
|
|
184
|
+
: new InMemoryStorage();
|
|
185
|
+
const events = new EventEmitter();
|
|
186
|
+
const router = new MessageRouter(storage, events, config.scope);
|
|
187
|
+
const _traceability = new TraceabilityLayer(storage, events);
|
|
188
|
+
const mcpServer = new InboxMcpServer(router, storage, config.scope);
|
|
189
|
+
mcpServer.start().catch((err) => {
|
|
190
|
+
console.error("MCP server failed:", err);
|
|
191
|
+
process.exit(1);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// IPC server mode (default)
|
|
196
|
+
const httpPort = process.env.INBOX_HTTP_PORT
|
|
197
|
+
? parseInt(process.env.INBOX_HTTP_PORT, 10)
|
|
198
|
+
: 0;
|
|
199
|
+
const sqlitePath = process.env.INBOX_SQLITE_PATH;
|
|
200
|
+
createAgentInbox({ httpPort, sqlitePath })
|
|
201
|
+
.then((inbox) => {
|
|
202
|
+
console.error(`Agent Inbox IPC server listening on ${process.env.INBOX_SOCKET_PATH ?? defaultSocketPath()}`);
|
|
203
|
+
process.on("SIGINT", async () => {
|
|
204
|
+
await inbox.stop();
|
|
205
|
+
process.exit(0);
|
|
206
|
+
});
|
|
207
|
+
process.on("SIGTERM", async () => {
|
|
208
|
+
await inbox.stop();
|
|
209
|
+
process.exit(0);
|
|
210
|
+
});
|
|
211
|
+
})
|
|
212
|
+
.catch((err) => {
|
|
213
|
+
console.error("Failed to start Agent Inbox:", err);
|
|
214
|
+
process.exit(1);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
19
218
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IpcCommand, IpcResponse } from "../types.js";
|
|
2
|
+
import type { Storage } from "../storage/interface.js";
|
|
3
|
+
import type { MessageRouter } from "../router/message-router.js";
|
|
4
|
+
import type { MailJsonRpcServer } from "../jsonrpc/mail-server.js";
|
|
5
|
+
export declare class IpcServer {
|
|
6
|
+
private socketPath;
|
|
7
|
+
private router;
|
|
8
|
+
private storage;
|
|
9
|
+
private jsonRpc?;
|
|
10
|
+
private server;
|
|
11
|
+
constructor(socketPath: string, router: MessageRouter, storage: Storage, jsonRpc?: MailJsonRpcServer | undefined);
|
|
12
|
+
start(): Promise<void>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
private handleConnection;
|
|
15
|
+
private processLine;
|
|
16
|
+
handleCommand(command: IpcCommand): Promise<IpcResponse>;
|
|
17
|
+
private handleSend;
|
|
18
|
+
private handleNotify;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ipc-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-server.d.ts","sourceRoot":"","sources":["../../src/ipc/ipc-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,qBAAa,SAAS;IAIlB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO,CAAC;IANlB,OAAO,CAAC,MAAM,CAA2B;gBAG/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB,YAAA;IAG/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,OAAO,CAAC,gBAAgB;YA6BV,WAAW;IAqBnB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;YAoBhD,UAAU;IAoBxB,OAAO,CAAC,YAAY;CAkCrB"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import * as net from "node:net";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
export class IpcServer {
|
|
5
|
+
socketPath;
|
|
6
|
+
router;
|
|
7
|
+
storage;
|
|
8
|
+
jsonRpc;
|
|
9
|
+
server = null;
|
|
10
|
+
constructor(socketPath, router, storage, jsonRpc) {
|
|
11
|
+
this.socketPath = socketPath;
|
|
12
|
+
this.router = router;
|
|
13
|
+
this.storage = storage;
|
|
14
|
+
this.jsonRpc = jsonRpc;
|
|
15
|
+
}
|
|
16
|
+
async start() {
|
|
17
|
+
// Clean up stale socket file
|
|
18
|
+
try {
|
|
19
|
+
fs.unlinkSync(this.socketPath);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Doesn't exist, fine
|
|
23
|
+
}
|
|
24
|
+
// Ensure directory exists
|
|
25
|
+
const dir = path.dirname(this.socketPath);
|
|
26
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
this.server = net.createServer((conn) => this.handleConnection(conn));
|
|
29
|
+
this.server.on("error", reject);
|
|
30
|
+
this.server.listen(this.socketPath, () => resolve());
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async stop() {
|
|
34
|
+
return new Promise((resolve) => {
|
|
35
|
+
if (!this.server)
|
|
36
|
+
return resolve();
|
|
37
|
+
this.server.close(() => {
|
|
38
|
+
try {
|
|
39
|
+
fs.unlinkSync(this.socketPath);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Already gone
|
|
43
|
+
}
|
|
44
|
+
resolve();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
handleConnection(conn) {
|
|
49
|
+
let buffer = "";
|
|
50
|
+
conn.on("data", (data) => {
|
|
51
|
+
buffer += data.toString();
|
|
52
|
+
// Process complete lines (NDJSON)
|
|
53
|
+
let newlineIdx;
|
|
54
|
+
while ((newlineIdx = buffer.indexOf("\n")) !== -1) {
|
|
55
|
+
const line = buffer.slice(0, newlineIdx).trim();
|
|
56
|
+
buffer = buffer.slice(newlineIdx + 1);
|
|
57
|
+
if (!line)
|
|
58
|
+
continue;
|
|
59
|
+
this.processLine(line)
|
|
60
|
+
.then((response) => {
|
|
61
|
+
conn.write(JSON.stringify(response) + "\n");
|
|
62
|
+
})
|
|
63
|
+
.catch((err) => {
|
|
64
|
+
conn.write(JSON.stringify({ ok: false, error: String(err) }) + "\n");
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
conn.on("error", () => {
|
|
69
|
+
// Client disconnected, ignore
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async processLine(line) {
|
|
73
|
+
let parsed;
|
|
74
|
+
try {
|
|
75
|
+
parsed = JSON.parse(line);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return { ok: false, error: "Invalid JSON" };
|
|
79
|
+
}
|
|
80
|
+
// Detect JSON-RPC requests (have "jsonrpc" field) vs IPC commands (have "action" field)
|
|
81
|
+
if (parsed.jsonrpc === "2.0" && typeof parsed.method === "string") {
|
|
82
|
+
if (this.jsonRpc) {
|
|
83
|
+
return this.jsonRpc.handleRequest(parsed);
|
|
84
|
+
}
|
|
85
|
+
return { jsonrpc: "2.0", id: parsed.id ?? null, error: { code: -32603, message: "JSON-RPC not configured" } };
|
|
86
|
+
}
|
|
87
|
+
return this.handleCommand(parsed);
|
|
88
|
+
}
|
|
89
|
+
async handleCommand(command) {
|
|
90
|
+
switch (command.action) {
|
|
91
|
+
case "ping":
|
|
92
|
+
return { ok: true, pid: process.pid };
|
|
93
|
+
case "send":
|
|
94
|
+
return this.handleSend(command);
|
|
95
|
+
case "notify":
|
|
96
|
+
return this.handleNotify(command);
|
|
97
|
+
case "emit":
|
|
98
|
+
// For Phase 1, emit is acknowledged but not forwarded to MAP
|
|
99
|
+
return { ok: true };
|
|
100
|
+
default:
|
|
101
|
+
return { ok: false, error: `Unknown action: ${command.action}` };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async handleSend(command) {
|
|
105
|
+
try {
|
|
106
|
+
const message = await this.router.routeMessage({
|
|
107
|
+
from: command.from,
|
|
108
|
+
to: command.to,
|
|
109
|
+
payload: command.payload,
|
|
110
|
+
scope: command.scope,
|
|
111
|
+
threadTag: command.threadTag,
|
|
112
|
+
inReplyTo: command.inReplyTo,
|
|
113
|
+
importance: command.importance,
|
|
114
|
+
metadata: command.meta,
|
|
115
|
+
});
|
|
116
|
+
return { ok: true, messageId: message.id };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return { ok: false, error: String(err) };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
handleNotify(command) {
|
|
123
|
+
const event = command.event;
|
|
124
|
+
if (event.type === "agent.spawn" && event.agent) {
|
|
125
|
+
const now = new Date().toISOString();
|
|
126
|
+
const agent = {
|
|
127
|
+
agent_id: event.agent.agentId,
|
|
128
|
+
display_name: event.agent.name,
|
|
129
|
+
scope: event.agent.scopes?.[0] ?? "default",
|
|
130
|
+
status: "active",
|
|
131
|
+
metadata: event.agent.metadata ?? {},
|
|
132
|
+
registered_at: now,
|
|
133
|
+
last_active_at: now,
|
|
134
|
+
};
|
|
135
|
+
this.storage.putAgent(agent);
|
|
136
|
+
return { ok: true };
|
|
137
|
+
}
|
|
138
|
+
if (event.type === "agent.done") {
|
|
139
|
+
const agentId = event.agentId ?? event.agent?.agentId;
|
|
140
|
+
if (agentId) {
|
|
141
|
+
const agent = this.storage.getAgent(agentId);
|
|
142
|
+
if (agent) {
|
|
143
|
+
agent.status = "offline";
|
|
144
|
+
this.storage.putAgent(agent);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { ok: true };
|
|
148
|
+
}
|
|
149
|
+
return { ok: true };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=ipc-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-server.js","sourceRoot":"","sources":["../../src/ipc/ipc-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import type { Storage } from "../storage/interface.js";
|
|
3
|
+
import type { MessageRouter } from "../router/message-router.js";
|
|
4
|
+
/**
|
|
5
|
+
* MAP mail/* JSON-RPC 2.0 endpoint.
|
|
6
|
+
* Serves over both UNIX socket (IPC inline) and HTTP (dashboard access).
|
|
7
|
+
*/
|
|
8
|
+
interface JsonRpcRequest {
|
|
9
|
+
jsonrpc: "2.0";
|
|
10
|
+
id?: string | number | null;
|
|
11
|
+
method: string;
|
|
12
|
+
params?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
interface JsonRpcResponse {
|
|
15
|
+
jsonrpc: "2.0";
|
|
16
|
+
id: string | number | null;
|
|
17
|
+
result?: unknown;
|
|
18
|
+
error?: {
|
|
19
|
+
code: number;
|
|
20
|
+
message: string;
|
|
21
|
+
data?: unknown;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare class MailJsonRpcServer {
|
|
25
|
+
private storage;
|
|
26
|
+
private router;
|
|
27
|
+
private events;
|
|
28
|
+
private methods;
|
|
29
|
+
private httpServer;
|
|
30
|
+
private subscribers;
|
|
31
|
+
constructor(storage: Storage, router: MessageRouter, events: EventEmitter);
|
|
32
|
+
private registerMethods;
|
|
33
|
+
/** Process a JSON-RPC request (used by both IPC and HTTP transports) */
|
|
34
|
+
handleRequest(request: JsonRpcRequest): Promise<JsonRpcResponse>;
|
|
35
|
+
/** Start HTTP server for dashboard/external access */
|
|
36
|
+
startHttp(port: number): Promise<void>;
|
|
37
|
+
stopHttp(): Promise<void>;
|
|
38
|
+
/** SSE endpoint: stream events to subscribers */
|
|
39
|
+
private handleSseSubscribe;
|
|
40
|
+
/** Forward internal events to SSE subscribers */
|
|
41
|
+
private setupEventForwarding;
|
|
42
|
+
private broadcast;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=mail-server.d.ts.map
|
|
@@ -0,0 +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;IAmKvB,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;IAM5B,OAAO,CAAC,SAAS;CAMlB"}
|