a2a-xmtp 1.3.0 → 1.4.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.
Files changed (54) hide show
  1. package/README.md +19 -11
  2. package/openclaw.plugin.json +9 -1
  3. package/package.json +4 -5
  4. package/src/coordination/group-scheduler.ts +192 -0
  5. package/src/coordination/message-orchestrator.ts +338 -0
  6. package/src/coordination/policy-engine.ts +120 -0
  7. package/src/index.ts +216 -0
  8. package/src/tools/xmtp-agents.ts +38 -0
  9. package/src/tools/xmtp-group.ts +153 -0
  10. package/src/tools/xmtp-inbox.ts +47 -0
  11. package/src/tools/xmtp-send.ts +77 -0
  12. package/src/transport/identity-registry.ts +133 -0
  13. package/src/transport/xmtp-bridge.ts +314 -0
  14. package/src/types.ts +181 -0
  15. package/dist/coordination/message-orchestrator.d.ts +0 -55
  16. package/dist/coordination/message-orchestrator.d.ts.map +0 -1
  17. package/dist/coordination/message-orchestrator.js +0 -142
  18. package/dist/coordination/message-orchestrator.js.map +0 -1
  19. package/dist/coordination/policy-engine.d.ts +0 -34
  20. package/dist/coordination/policy-engine.d.ts.map +0 -1
  21. package/dist/coordination/policy-engine.js +0 -92
  22. package/dist/coordination/policy-engine.js.map +0 -1
  23. package/dist/index.d.ts +0 -9
  24. package/dist/index.d.ts.map +0 -1
  25. package/dist/index.js +0 -163
  26. package/dist/index.js.map +0 -1
  27. package/dist/tools/xmtp-agents.d.ts +0 -19
  28. package/dist/tools/xmtp-agents.d.ts.map +0 -1
  29. package/dist/tools/xmtp-agents.js +0 -27
  30. package/dist/tools/xmtp-agents.js.map +0 -1
  31. package/dist/tools/xmtp-group.d.ts +0 -95
  32. package/dist/tools/xmtp-group.d.ts.map +0 -1
  33. package/dist/tools/xmtp-group.js +0 -134
  34. package/dist/tools/xmtp-group.js.map +0 -1
  35. package/dist/tools/xmtp-inbox.d.ts +0 -22
  36. package/dist/tools/xmtp-inbox.d.ts.map +0 -1
  37. package/dist/tools/xmtp-inbox.js +0 -36
  38. package/dist/tools/xmtp-inbox.js.map +0 -1
  39. package/dist/tools/xmtp-send.d.ts +0 -28
  40. package/dist/tools/xmtp-send.d.ts.map +0 -1
  41. package/dist/tools/xmtp-send.js +0 -63
  42. package/dist/tools/xmtp-send.js.map +0 -1
  43. package/dist/transport/identity-registry.d.ts +0 -30
  44. package/dist/transport/identity-registry.d.ts.map +0 -1
  45. package/dist/transport/identity-registry.js +0 -117
  46. package/dist/transport/identity-registry.js.map +0 -1
  47. package/dist/transport/xmtp-bridge.d.ts +0 -55
  48. package/dist/transport/xmtp-bridge.d.ts.map +0 -1
  49. package/dist/transport/xmtp-bridge.js +0 -265
  50. package/dist/transport/xmtp-bridge.js.map +0 -1
  51. package/dist/types.d.ts +0 -100
  52. package/dist/types.d.ts.map +0 -1
  53. package/dist/types.js +0 -51
  54. package/dist/types.js.map +0 -1
@@ -1,134 +0,0 @@
1
- // ============================================================
2
- // Tool: xmtp_group — 群聊管理(创建、列表、成员查看/添加/移除)
3
- // ============================================================
4
- export async function handleXmtpGroup(bridges, registry, params, agentId) {
5
- const bridge = bridges.get(agentId) ?? bridges.values().next().value;
6
- if (!bridge) {
7
- return { content: [{ type: "text", text: "No XMTP bridge available. Plugin not initialized." }], details: null };
8
- }
9
- const action = params.action;
10
- try {
11
- switch (action) {
12
- case "create": {
13
- if (!params.members?.length) {
14
- return { content: [{ type: "text", text: "Parameter 'members' is required for create action. Provide agent IDs or 0x addresses." }], details: null };
15
- }
16
- // 解析成员地址
17
- const addresses = [];
18
- for (const member of params.members) {
19
- if (member.startsWith("0x")) {
20
- addresses.push(member);
21
- }
22
- else {
23
- const addr = registry.getAddress(member);
24
- if (!addr) {
25
- return { content: [{ type: "text", text: `Agent "${member}" not found. Use xmtp_agents to discover available agents.` }], details: null };
26
- }
27
- addresses.push(addr);
28
- }
29
- }
30
- const result = await bridge.createGroup(addresses, params.name);
31
- return {
32
- content: [{ type: "text", text: `Group created${result.name ? ` "${result.name}"` : ""} with ${addresses.length} members.` }],
33
- details: {
34
- action: "create",
35
- conversationId: result.conversationId,
36
- name: result.name,
37
- memberCount: addresses.length,
38
- },
39
- };
40
- }
41
- case "list": {
42
- const groups = await bridge.listGroups();
43
- if (groups.length === 0) {
44
- return { content: [{ type: "text", text: "No group conversations found." }], details: null };
45
- }
46
- const lines = groups.map((g) => {
47
- const nameLabel = g.name ? ` "${g.name}"` : "";
48
- return `- ${g.conversationId}${nameLabel} (${g.memberAddresses.length} members, created ${g.createdAt})`;
49
- });
50
- return {
51
- content: [{ type: "text", text: `Groups:\n${lines.join("\n")}` }],
52
- details: { action: "list", count: groups.length, groups },
53
- };
54
- }
55
- case "members": {
56
- if (!params.conversationId) {
57
- return { content: [{ type: "text", text: "Parameter 'conversationId' is required for members action." }], details: null };
58
- }
59
- const members = await bridge.getGroupMembers(params.conversationId);
60
- // 尝试解析 agentId
61
- const resolved = members.map((addr) => {
62
- const aid = registry.getAgentId(addr);
63
- return aid ? `${aid} (${addr})` : addr;
64
- });
65
- return {
66
- content: [{ type: "text", text: `Members (${members.length}):\n${resolved.map((m) => `- ${m}`).join("\n")}` }],
67
- details: { action: "members", conversationId: params.conversationId, count: members.length, members },
68
- };
69
- }
70
- case "add_member": {
71
- if (!params.conversationId) {
72
- return { content: [{ type: "text", text: "Parameter 'conversationId' is required for add_member action." }], details: null };
73
- }
74
- if (!params.members?.length) {
75
- return { content: [{ type: "text", text: "Parameter 'members' is required for add_member action." }], details: null };
76
- }
77
- const addresses = [];
78
- for (const member of params.members) {
79
- if (member.startsWith("0x")) {
80
- addresses.push(member);
81
- }
82
- else {
83
- const addr = registry.getAddress(member);
84
- if (!addr) {
85
- return { content: [{ type: "text", text: `Agent "${member}" not found.` }], details: null };
86
- }
87
- addresses.push(addr);
88
- }
89
- }
90
- await bridge.addGroupMembers(params.conversationId, addresses);
91
- return {
92
- content: [{ type: "text", text: `Added ${addresses.length} member(s) to group.` }],
93
- details: { action: "add_member", conversationId: params.conversationId, added: addresses },
94
- };
95
- }
96
- case "remove_member": {
97
- if (!params.conversationId) {
98
- return { content: [{ type: "text", text: "Parameter 'conversationId' is required for remove_member action." }], details: null };
99
- }
100
- if (!params.members?.length) {
101
- return { content: [{ type: "text", text: "Parameter 'members' is required for remove_member action." }], details: null };
102
- }
103
- const addresses = [];
104
- for (const member of params.members) {
105
- if (member.startsWith("0x")) {
106
- addresses.push(member);
107
- }
108
- else {
109
- const addr = registry.getAddress(member);
110
- if (!addr) {
111
- return { content: [{ type: "text", text: `Agent "${member}" not found.` }], details: null };
112
- }
113
- addresses.push(addr);
114
- }
115
- }
116
- await bridge.removeGroupMembers(params.conversationId, addresses);
117
- return {
118
- content: [{ type: "text", text: `Removed ${addresses.length} member(s) from group.` }],
119
- details: { action: "remove_member", conversationId: params.conversationId, removed: addresses },
120
- };
121
- }
122
- default:
123
- return {
124
- content: [{ type: "text", text: `Unknown action "${action}". Supported: create, list, members, add_member, remove_member.` }],
125
- details: null,
126
- };
127
- }
128
- }
129
- catch (err) {
130
- const msg = err instanceof Error ? err.message : String(err);
131
- return { content: [{ type: "text", text: `Group operation failed: ${msg}` }], details: null };
132
- }
133
- }
134
- //# sourceMappingURL=xmtp-group.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmtp-group.js","sourceRoot":"","sources":["../../src/tools/xmtp-group.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { XmtpBridge } from "../transport/xmtp-bridge.js";
2
- import type { IdentityRegistry } from "../transport/identity-registry.js";
3
- export declare function handleXmtpInbox(bridges: Map<string, XmtpBridge>, registry: IdentityRegistry, params: {
4
- limit?: number;
5
- from?: string;
6
- }, agentId: string): Promise<{
7
- content: {
8
- type: "text";
9
- text: string;
10
- }[];
11
- details: null;
12
- } | {
13
- content: {
14
- type: "text";
15
- text: string;
16
- }[];
17
- details: {
18
- count: number;
19
- myAddress: string;
20
- };
21
- }>;
22
- //# sourceMappingURL=xmtp-inbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmtp-inbox.d.ts","sourceRoot":"","sources":["../../src/tools/xmtp-inbox.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,wBAAsB,eAAe,CACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACzC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;GAmChB"}
@@ -1,36 +0,0 @@
1
- // ============================================================
2
- // Tool: xmtp_inbox — 查看 XMTP 收件箱消息
3
- // ============================================================
4
- export async function handleXmtpInbox(bridges, registry, params, agentId) {
5
- const bridge = bridges.get(agentId) ?? bridges.values().next().value;
6
- if (!bridge) {
7
- return { content: [{ type: "text", text: "No XMTP bridge available." }], details: null };
8
- }
9
- // 解析 from
10
- let fromFilter = params.from;
11
- if (fromFilter && !fromFilter.startsWith("0x")) {
12
- const addr = registry.getAddress(fromFilter);
13
- if (addr)
14
- fromFilter = addr;
15
- }
16
- try {
17
- const messages = await bridge.getInbox({ limit: params.limit ?? 10, from: fromFilter });
18
- if (messages.length === 0) {
19
- return { content: [{ type: "text", text: "No messages in inbox." }], details: null };
20
- }
21
- const lines = messages.map((m, i) => {
22
- const sender = m.from.agentId ?? m.from.xmtpAddress;
23
- const groupTag = m.isGroup ? " [group]" : "";
24
- return `${i + 1}. [${m.timestamp}]${groupTag} from ${sender}: ${m.content}`;
25
- });
26
- return {
27
- content: [{ type: "text", text: lines.join("\n") }],
28
- details: { count: messages.length, myAddress: bridge.address },
29
- };
30
- }
31
- catch (err) {
32
- const msg = err instanceof Error ? err.message : String(err);
33
- return { content: [{ type: "text", text: `Failed to fetch inbox: ${msg}` }], details: null };
34
- }
35
- }
36
- //# sourceMappingURL=xmtp-inbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmtp-inbox.js","sourceRoot":"","sources":["../../src/tools/xmtp-inbox.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAK/D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAgC,EAChC,QAA0B,EAC1B,MAAyC,EACzC,OAAe;IAEf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpG,CAAC;IAED,UAAU;IACV,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,IAAI;YAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAExF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChG,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YACpD,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,QAAQ,SAAS,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE;SAC/D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxG,CAAC;AACH,CAAC"}
@@ -1,28 +0,0 @@
1
- import type { XmtpBridge } from "../transport/xmtp-bridge.js";
2
- import type { IdentityRegistry } from "../transport/identity-registry.js";
3
- import type { PolicyEngine } from "../coordination/policy-engine.js";
4
- export declare function handleXmtpSend(bridges: Map<string, XmtpBridge>, registry: IdentityRegistry, policyEngine: PolicyEngine, params: {
5
- to?: string;
6
- message: string;
7
- conversationId?: string;
8
- contentType?: "text" | "markdown";
9
- }, senderAgentId: string): Promise<{
10
- content: {
11
- type: "text";
12
- text: string;
13
- }[];
14
- details: null;
15
- } | {
16
- content: {
17
- type: "text";
18
- text: string;
19
- }[];
20
- details: {
21
- status: string;
22
- conversationId: string;
23
- messageId: string;
24
- to: string | undefined;
25
- toAddress: string | undefined;
26
- };
27
- }>;
28
- //# sourceMappingURL=xmtp-send.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmtp-send.d.ts","sourceRoot":"","sources":["../../src/tools/xmtp-send.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,wBAAsB,cAAc,CAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,QAAQ,EAAE,gBAAgB,EAC1B,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,EACpG,aAAa,EAAE,MAAM;;;;;;;;;;;;;;;;;;GA+DtB"}
@@ -1,63 +0,0 @@
1
- // ============================================================
2
- // Tool: xmtp_send — 发送 E2EE 消息到另一个 Agent
3
- // ============================================================
4
- export async function handleXmtpSend(bridges, registry, policyEngine, params, senderAgentId) {
5
- // 找到发送者 bridge(使用第一个可用的 bridge)
6
- const bridge = bridges.get(senderAgentId) ?? bridges.values().next().value;
7
- if (!bridge) {
8
- return { content: [{ type: "text", text: "No XMTP bridge available. Plugin not initialized." }], details: null };
9
- }
10
- // 当提供 conversationId 时,to 可省略(直接向已有会话发送)
11
- if (!params.to && !params.conversationId) {
12
- return { content: [{ type: "text", text: "Either 'to' or 'conversationId' must be provided." }], details: null };
13
- }
14
- // 解析目标地址(仅在提供 to 时需要)
15
- let targetAddress;
16
- if (params.to) {
17
- if (params.to.startsWith("0x")) {
18
- targetAddress = params.to;
19
- }
20
- else {
21
- const addr = registry.getAddress(params.to);
22
- if (!addr) {
23
- return {
24
- content: [{ type: "text", text: `Agent "${params.to}" not found. Use xmtp_agents to discover available agents.` }],
25
- details: null,
26
- };
27
- }
28
- targetAddress = addr;
29
- }
30
- if (targetAddress.toLowerCase() === bridge.address.toLowerCase()) {
31
- return { content: [{ type: "text", text: "Cannot send message to yourself." }], details: null };
32
- }
33
- }
34
- // Policy 检查
35
- const toLabel = params.to ?? params.conversationId;
36
- const convId = params.conversationId ?? `dm:${senderAgentId}:${params.to}`;
37
- const check = policyEngine.checkOutgoing({ from: senderAgentId, to: toLabel, conversationId: convId });
38
- if (!check.allowed) {
39
- return { content: [{ type: "text", text: `Blocked: ${check.reason}` }], details: null };
40
- }
41
- try {
42
- const result = await bridge.sendMessage(targetAddress ?? "", params.message, {
43
- contentType: params.contentType,
44
- conversationId: params.conversationId,
45
- });
46
- const recipientLabel = params.to ?? `conversation ${result.conversationId}`;
47
- return {
48
- content: [{ type: "text", text: `Message sent to ${recipientLabel}.` }],
49
- details: {
50
- status: "sent",
51
- conversationId: result.conversationId,
52
- messageId: result.messageId,
53
- to: params.to,
54
- toAddress: targetAddress,
55
- },
56
- };
57
- }
58
- catch (err) {
59
- const msg = err instanceof Error ? err.message : String(err);
60
- return { content: [{ type: "text", text: `Failed to send: ${msg}` }], details: null };
61
- }
62
- }
63
- //# sourceMappingURL=xmtp-send.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmtp-send.js","sourceRoot":"","sources":["../../src/tools/xmtp-send.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import type { XmtpWalletConfig, XmtpEnv } from "../types.js";
2
- export declare class IdentityRegistry {
3
- private env;
4
- private agentToConfig;
5
- private addressToAgent;
6
- private storePath;
7
- constructor(stateDir: string, env?: XmtpEnv);
8
- /**
9
- * 为 Agent 初始化 XMTP wallet。
10
- * 如果已有配置则加载,否则生成新的 wallet。
11
- */
12
- initAgent(agentId: string, existingKey?: string): Promise<XmtpWalletConfig>;
13
- /** 更新 inboxId */
14
- updateInboxId(agentId: string, inboxId: string): Promise<void>;
15
- getAddress(agentId: string): string | undefined;
16
- getConfig(agentId: string): XmtpWalletConfig | undefined;
17
- getAgentId(address: string): string | undefined;
18
- resolveAgentId(address: string): Promise<string | null>;
19
- listAgents(): Array<{
20
- agentId: string;
21
- address: string;
22
- env: XmtpEnv;
23
- }>;
24
- has(agentId: string): boolean;
25
- registerExternal(address: string, agentId: string): void;
26
- private cacheMapping;
27
- /** 从磁盘加载所有已有 identity */
28
- private loadFromDisk;
29
- }
30
- //# sourceMappingURL=identity-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-registry.d.ts","sourceRoot":"","sources":["../../src/transport/identity-registry.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7D,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,GAAG;IANb,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,SAAS,CAAS;gBAGxB,QAAQ,EAAE,MAAM,EACR,GAAG,GAAE,OAAe;IAO9B;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwCjF,iBAAiB;IACX,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIxD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI7D,UAAU,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IAQvE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxD,OAAO,CAAC,YAAY;IAKpB,yBAAyB;IACzB,OAAO,CAAC,YAAY;CAgBrB"}
@@ -1,117 +0,0 @@
1
- // ============================================================
2
- // Module 3: Identity Registry
3
- // agentId ↔ XMTP wallet address 双向映射,wallet key 生成/加载
4
- // 使用文件系统持久化(stateDir)
5
- // ============================================================
6
- import { createUser } from "@xmtp/agent-sdk";
7
- import { privateKeyToAccount } from "viem/accounts";
8
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
9
- import { join } from "node:path";
10
- export class IdentityRegistry {
11
- env;
12
- agentToConfig = new Map();
13
- addressToAgent = new Map();
14
- storePath;
15
- constructor(stateDir, env = "dev") {
16
- this.env = env;
17
- this.storePath = join(stateDir, "identities");
18
- mkdirSync(this.storePath, { recursive: true });
19
- this.loadFromDisk();
20
- }
21
- /**
22
- * 为 Agent 初始化 XMTP wallet。
23
- * 如果已有配置则加载,否则生成新的 wallet。
24
- */
25
- async initAgent(agentId, existingKey) {
26
- const cached = this.agentToConfig.get(agentId);
27
- if (cached)
28
- return cached;
29
- // 尝试从磁盘加载
30
- const filePath = join(this.storePath, `${agentId}.json`);
31
- if (existsSync(filePath)) {
32
- const config = JSON.parse(readFileSync(filePath, "utf-8"));
33
- this.cacheMapping(agentId, config);
34
- return config;
35
- }
36
- // 生成新 wallet 或使用提供的 key
37
- let privateKey;
38
- let address;
39
- if (existingKey) {
40
- privateKey = existingKey;
41
- const account = privateKeyToAccount(existingKey);
42
- address = account.address;
43
- }
44
- else {
45
- const user = createUser();
46
- privateKey = user.key; // createUser() returns { key, account, wallet }
47
- address = user.account.address;
48
- }
49
- const config = {
50
- privateKey,
51
- address,
52
- xmtpInboxId: "",
53
- env: this.env,
54
- };
55
- // 持久化到磁盘
56
- writeFileSync(filePath, JSON.stringify(config, null, 2));
57
- this.cacheMapping(agentId, config);
58
- return config;
59
- }
60
- /** 更新 inboxId */
61
- async updateInboxId(agentId, inboxId) {
62
- const config = this.agentToConfig.get(agentId);
63
- if (!config)
64
- return;
65
- config.xmtpInboxId = inboxId;
66
- const filePath = join(this.storePath, `${agentId}.json`);
67
- writeFileSync(filePath, JSON.stringify(config, null, 2));
68
- }
69
- getAddress(agentId) {
70
- return this.agentToConfig.get(agentId)?.address;
71
- }
72
- getConfig(agentId) {
73
- return this.agentToConfig.get(agentId);
74
- }
75
- getAgentId(address) {
76
- return this.addressToAgent.get(address.toLowerCase());
77
- }
78
- async resolveAgentId(address) {
79
- return this.addressToAgent.get(address.toLowerCase()) ?? null;
80
- }
81
- listAgents() {
82
- return Array.from(this.agentToConfig.entries()).map(([id, config]) => ({
83
- agentId: id,
84
- address: config.address,
85
- env: config.env,
86
- }));
87
- }
88
- has(agentId) {
89
- return this.agentToConfig.has(agentId);
90
- }
91
- registerExternal(address, agentId) {
92
- this.addressToAgent.set(address.toLowerCase(), agentId);
93
- }
94
- cacheMapping(agentId, config) {
95
- this.agentToConfig.set(agentId, config);
96
- this.addressToAgent.set(config.address.toLowerCase(), agentId);
97
- }
98
- /** 从磁盘加载所有已有 identity */
99
- loadFromDisk() {
100
- if (!existsSync(this.storePath))
101
- return;
102
- const { readdirSync } = require("node:fs");
103
- for (const file of readdirSync(this.storePath)) {
104
- if (!file.endsWith(".json"))
105
- continue;
106
- const agentId = file.replace(".json", "");
107
- try {
108
- const config = JSON.parse(readFileSync(join(this.storePath, file), "utf-8"));
109
- this.cacheMapping(agentId, config);
110
- }
111
- catch {
112
- // skip corrupt files
113
- }
114
- }
115
- }
116
- }
117
- //# sourceMappingURL=identity-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-registry.js","sourceRoot":"","sources":["../../src/transport/identity-registry.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import type { IdentityRegistry } from "./identity-registry.js";
2
- import { PolicyEngine } from "../coordination/policy-engine.js";
3
- import type { XmtpWalletConfig, InboxMessage, A2AInjectPayload, GroupInfo } from "../types.js";
4
- export declare class XmtpBridge {
5
- readonly agentId: string;
6
- private walletConfig;
7
- private policyEngine;
8
- private registry;
9
- private dbPath;
10
- private agent;
11
- private running;
12
- private syncTimer;
13
- /** 收件箱缓存 */
14
- private inboxBuffer;
15
- private readonly maxInboxBuffer;
16
- /** 消息回调(由 plugin 入口设置,用于触发 subagent 处理) */
17
- onMessage?: (agentId: string, payload: A2AInjectPayload) => void;
18
- constructor(agentId: string, walletConfig: XmtpWalletConfig, policyEngine: PolicyEngine, registry: IdentityRegistry, dbPath: string);
19
- start(): Promise<void>;
20
- stop(): Promise<void>;
21
- sendMessage(toAddress: string, content: string, opts?: {
22
- contentType?: "text" | "markdown";
23
- conversationId?: string;
24
- }): Promise<{
25
- conversationId: string;
26
- messageId: string;
27
- }>;
28
- getInbox(opts?: {
29
- limit?: number;
30
- from?: string;
31
- }): Promise<InboxMessage[]>;
32
- /**
33
- * 获取指定会话的最近消息(供 coordination 层查询)
34
- */
35
- getRecentMessages(conversationId: string, limit: number): InboxMessage[];
36
- createGroup(memberAddresses: string[], name?: string): Promise<{
37
- conversationId: string;
38
- name: string;
39
- }>;
40
- listGroups(): Promise<GroupInfo[]>;
41
- getGroupMembers(conversationId: string): Promise<string[]>;
42
- addGroupMembers(conversationId: string, addresses: string[]): Promise<void>;
43
- removeGroupMembers(conversationId: string, addresses: string[]): Promise<void>;
44
- /**
45
- * 检查群聊中在 afterTimestamp 之后是否有新消息(排除自身和指定 sender)
46
- * 用于防止多 agent 同时回复同一条消息
47
- */
48
- hasNewGroupReplies(conversationId: string, afterTimestamp: string, excludeAddresses: string[]): Promise<boolean>;
49
- canMessage(address: string): Promise<boolean>;
50
- private handleIncoming;
51
- get address(): string;
52
- get isConnected(): boolean;
53
- get env(): import("../types.js").XmtpEnv;
54
- }
55
- //# sourceMappingURL=xmtp-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmtp-bridge.d.ts","sourceRoot":"","sources":["../../src/transport/xmtp-bridge.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAkB,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM/G,qBAAa,UAAU;IAanB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAhBhB,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAA+C;IAEhE,YAAY;IACZ,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IAEtC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;gBAGtD,OAAO,EAAE,MAAM,EAChB,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM;IAGlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpE,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBnD,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAYjF;;OAEG;IACH,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAMlE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAUxG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAoBlC,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1D,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpF;;;OAGG;IACG,kBAAkB,CACtB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,OAAO,CAAC;IAmBb,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAQrC,cAAc;IA+D5B,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,GAAG,kCAEN;CACF"}