agent-inbox 0.1.9 → 0.2.0
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/package.json +4 -1
- package/src/cli.ts +94 -0
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/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-inbox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
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
|
+
}
|