@f2a/network 0.1.2 → 0.1.3

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 (136) hide show
  1. package/package.json +8 -1
  2. package/.github/workflows/ci.yml +0 -113
  3. package/.github/workflows/publish.yml +0 -60
  4. package/MONOREPO.md +0 -58
  5. package/SKILL.md +0 -137
  6. package/dist/adapters/openclaw.d.ts +0 -103
  7. package/dist/adapters/openclaw.d.ts.map +0 -1
  8. package/dist/adapters/openclaw.js +0 -297
  9. package/dist/adapters/openclaw.js.map +0 -1
  10. package/dist/core/connection-manager.d.ts +0 -80
  11. package/dist/core/connection-manager.d.ts.map +0 -1
  12. package/dist/core/connection-manager.js +0 -235
  13. package/dist/core/connection-manager.js.map +0 -1
  14. package/dist/core/connection-manager.test.d.ts +0 -2
  15. package/dist/core/connection-manager.test.d.ts.map +0 -1
  16. package/dist/core/connection-manager.test.js +0 -52
  17. package/dist/core/connection-manager.test.js.map +0 -1
  18. package/dist/core/identity.d.ts +0 -47
  19. package/dist/core/identity.d.ts.map +0 -1
  20. package/dist/core/identity.js +0 -130
  21. package/dist/core/identity.js.map +0 -1
  22. package/dist/core/identity.test.d.ts +0 -2
  23. package/dist/core/identity.test.d.ts.map +0 -1
  24. package/dist/core/identity.test.js +0 -43
  25. package/dist/core/identity.test.js.map +0 -1
  26. package/dist/core/serverless.d.ts +0 -155
  27. package/dist/core/serverless.d.ts.map +0 -1
  28. package/dist/core/serverless.js +0 -615
  29. package/dist/core/serverless.js.map +0 -1
  30. package/dist/daemon/webhook.test.d.ts +0 -2
  31. package/dist/daemon/webhook.test.d.ts.map +0 -1
  32. package/dist/daemon/webhook.test.js +0 -24
  33. package/dist/daemon/webhook.test.js.map +0 -1
  34. package/dist/protocol/messages.d.ts +0 -739
  35. package/dist/protocol/messages.d.ts.map +0 -1
  36. package/dist/protocol/messages.js +0 -188
  37. package/dist/protocol/messages.js.map +0 -1
  38. package/dist/protocol/messages.test.d.ts +0 -2
  39. package/dist/protocol/messages.test.d.ts.map +0 -1
  40. package/dist/protocol/messages.test.js +0 -55
  41. package/dist/protocol/messages.test.js.map +0 -1
  42. package/docs/F2A-PROTOCOL.md +0 -61
  43. package/docs/MOBILE_BOOTSTRAP_DESIGN.md +0 -126
  44. package/docs/a2a-lessons.md +0 -316
  45. package/docs/middleware-guide.md +0 -448
  46. package/docs/readme-update-checklist.md +0 -90
  47. package/docs/reputation-guide.md +0 -396
  48. package/docs/rfcs/001-reputation-system.md +0 -712
  49. package/docs/security-design.md +0 -247
  50. package/install.sh +0 -231
  51. package/packages/openclaw-adapter/README.md +0 -510
  52. package/packages/openclaw-adapter/openclaw.plugin.json +0 -106
  53. package/packages/openclaw-adapter/package.json +0 -40
  54. package/packages/openclaw-adapter/src/announcement-queue.test.ts +0 -449
  55. package/packages/openclaw-adapter/src/announcement-queue.ts +0 -403
  56. package/packages/openclaw-adapter/src/capability-detector.test.ts +0 -99
  57. package/packages/openclaw-adapter/src/capability-detector.ts +0 -183
  58. package/packages/openclaw-adapter/src/claim-handlers.test.ts +0 -974
  59. package/packages/openclaw-adapter/src/claim-handlers.ts +0 -482
  60. package/packages/openclaw-adapter/src/connector.business.test.ts +0 -583
  61. package/packages/openclaw-adapter/src/connector.ts +0 -795
  62. package/packages/openclaw-adapter/src/index.test.ts +0 -82
  63. package/packages/openclaw-adapter/src/index.ts +0 -18
  64. package/packages/openclaw-adapter/src/integration.e2e.test.ts +0 -829
  65. package/packages/openclaw-adapter/src/logger.ts +0 -51
  66. package/packages/openclaw-adapter/src/network-client.test.ts +0 -266
  67. package/packages/openclaw-adapter/src/network-client.ts +0 -251
  68. package/packages/openclaw-adapter/src/network-recovery.test.ts +0 -465
  69. package/packages/openclaw-adapter/src/node-manager.test.ts +0 -136
  70. package/packages/openclaw-adapter/src/node-manager.ts +0 -429
  71. package/packages/openclaw-adapter/src/plugin.test.ts +0 -439
  72. package/packages/openclaw-adapter/src/plugin.ts +0 -104
  73. package/packages/openclaw-adapter/src/reputation.test.ts +0 -221
  74. package/packages/openclaw-adapter/src/reputation.ts +0 -368
  75. package/packages/openclaw-adapter/src/task-guard.test.ts +0 -502
  76. package/packages/openclaw-adapter/src/task-guard.ts +0 -860
  77. package/packages/openclaw-adapter/src/task-queue.concurrency.test.ts +0 -462
  78. package/packages/openclaw-adapter/src/task-queue.edge-cases.test.ts +0 -284
  79. package/packages/openclaw-adapter/src/task-queue.persistence.test.ts +0 -408
  80. package/packages/openclaw-adapter/src/task-queue.ts +0 -668
  81. package/packages/openclaw-adapter/src/tool-handlers.test.ts +0 -906
  82. package/packages/openclaw-adapter/src/tool-handlers.ts +0 -574
  83. package/packages/openclaw-adapter/src/types.ts +0 -361
  84. package/packages/openclaw-adapter/src/webhook-pusher.test.ts +0 -188
  85. package/packages/openclaw-adapter/src/webhook-pusher.ts +0 -220
  86. package/packages/openclaw-adapter/src/webhook-server.test.ts +0 -580
  87. package/packages/openclaw-adapter/src/webhook-server.ts +0 -202
  88. package/packages/openclaw-adapter/tsconfig.json +0 -20
  89. package/src/cli/commands.test.ts +0 -157
  90. package/src/cli/commands.ts +0 -129
  91. package/src/cli/index.test.ts +0 -77
  92. package/src/cli/index.ts +0 -234
  93. package/src/core/autonomous-economy.test.ts +0 -291
  94. package/src/core/autonomous-economy.ts +0 -428
  95. package/src/core/e2ee-crypto.test.ts +0 -125
  96. package/src/core/e2ee-crypto.ts +0 -246
  97. package/src/core/f2a.test.ts +0 -269
  98. package/src/core/f2a.ts +0 -618
  99. package/src/core/p2p-network.test.ts +0 -199
  100. package/src/core/p2p-network.ts +0 -1432
  101. package/src/core/reputation-security.test.ts +0 -403
  102. package/src/core/reputation-security.ts +0 -562
  103. package/src/core/reputation.test.ts +0 -260
  104. package/src/core/reputation.ts +0 -576
  105. package/src/core/review-committee.test.ts +0 -380
  106. package/src/core/review-committee.ts +0 -401
  107. package/src/core/token-manager.test.ts +0 -133
  108. package/src/core/token-manager.ts +0 -140
  109. package/src/daemon/control-server.test.ts +0 -216
  110. package/src/daemon/control-server.ts +0 -292
  111. package/src/daemon/index.test.ts +0 -85
  112. package/src/daemon/index.ts +0 -89
  113. package/src/daemon/main.ts +0 -44
  114. package/src/daemon/start.ts +0 -29
  115. package/src/daemon/webhook.test.ts +0 -68
  116. package/src/daemon/webhook.ts +0 -105
  117. package/src/index.test.ts +0 -436
  118. package/src/index.ts +0 -72
  119. package/src/types/index.test.ts +0 -87
  120. package/src/types/index.ts +0 -341
  121. package/src/types/result.ts +0 -68
  122. package/src/utils/benchmark.ts +0 -237
  123. package/src/utils/logger.ts +0 -331
  124. package/src/utils/middleware.ts +0 -229
  125. package/src/utils/rate-limiter.ts +0 -207
  126. package/src/utils/signature.ts +0 -136
  127. package/src/utils/validation.ts +0 -186
  128. package/tests/docker/Dockerfile.node +0 -23
  129. package/tests/docker/Dockerfile.runner +0 -18
  130. package/tests/docker/docker-compose.test.yml +0 -73
  131. package/tests/integration/message-passing.test.ts +0 -109
  132. package/tests/integration/multi-node.test.ts +0 -92
  133. package/tests/integration/p2p-connection.test.ts +0 -83
  134. package/tests/integration/test-config.ts +0 -32
  135. package/tsconfig.json +0 -21
  136. package/vitest.config.ts +0 -26
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,iBAAiB,gSAiB5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAMH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;EAMlC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;EAKjC,CAAC;AAMH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;EAKnC,CAAC;AAMH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAO5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAG3B,CAAC;AAMH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAMH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAK5B,CAAC;AAMH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;EAG5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;EAG1B,CAAC;AAMH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;EAG5B,CAAC;AAMH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiB3B,CAAC;AAMH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC/E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC7E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC/E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACjF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACnE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAM1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMtH;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -1,188 +0,0 @@
1
- "use strict";
2
- /**
3
- * 协议消息定义和验证
4
- * 使用 Zod 进行运行时类型验证
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.F2AMessageSchema = exports.KeyExchangeSchema = exports.WebRTCIceSchema = exports.WebRTCAnswerSchema = exports.WebRTCOfferSchema = exports.GroupInviteSchema = exports.GroupMessageSchema = exports.SkillResultSchema = exports.SkillInvokeSchema = exports.SkillResponseSchema = exports.SkillQuerySchema = exports.MessageAckSchema = exports.TextMessageSchema = exports.ConfirmationResultSchema = exports.ConnectionPendingSchema = exports.IdentityResponseSchema = exports.IdentityChallengeSchema = exports.BaseMessageSchema = exports.MessageTypeSchema = void 0;
8
- exports.validateMessage = validateMessage;
9
- exports.createMessageId = createMessageId;
10
- exports.createTimestamp = createTimestamp;
11
- const zod_1 = require("zod");
12
- // ============================================================================
13
- // 基础消息架构
14
- // ============================================================================
15
- exports.MessageTypeSchema = zod_1.z.enum([
16
- 'identity_challenge',
17
- 'identity_response',
18
- 'connection_pending',
19
- 'confirmation_result',
20
- 'message',
21
- 'message_ack',
22
- 'skill_query',
23
- 'skill_response',
24
- 'skill_invoke',
25
- 'skill_result',
26
- 'group_message',
27
- 'group_invite',
28
- 'key_exchange',
29
- 'webrtc_offer',
30
- 'webrtc_answer',
31
- 'webrtc_ice'
32
- ]);
33
- exports.BaseMessageSchema = zod_1.z.object({
34
- type: exports.MessageTypeSchema,
35
- id: zod_1.z.string().uuid().optional(),
36
- timestamp: zod_1.z.number().int().positive()
37
- });
38
- // ============================================================================
39
- // 身份验证消息
40
- // ============================================================================
41
- exports.IdentityChallengeSchema = exports.BaseMessageSchema.extend({
42
- type: zod_1.z.literal('identity_challenge'),
43
- agentId: zod_1.z.string(),
44
- publicKey: zod_1.z.string(),
45
- challenge: zod_1.z.string(),
46
- timestamp: zod_1.z.number().int()
47
- });
48
- exports.IdentityResponseSchema = exports.BaseMessageSchema.extend({
49
- type: zod_1.z.literal('identity_response'),
50
- agentId: zod_1.z.string(),
51
- publicKey: zod_1.z.string(),
52
- signature: zod_1.z.string()
53
- });
54
- // ============================================================================
55
- // 连接确认消息
56
- // ============================================================================
57
- exports.ConnectionPendingSchema = exports.BaseMessageSchema.extend({
58
- type: zod_1.z.literal('connection_pending'),
59
- confirmationId: zod_1.z.string().uuid(),
60
- message: zod_1.z.string(),
61
- timeout: zod_1.z.number().int().positive()
62
- });
63
- exports.ConfirmationResultSchema = exports.BaseMessageSchema.extend({
64
- type: zod_1.z.literal('confirmation_result'),
65
- confirmationId: zod_1.z.string().uuid(),
66
- accepted: zod_1.z.boolean(),
67
- reason: zod_1.z.string().optional()
68
- });
69
- // ============================================================================
70
- // 文本消息
71
- // ============================================================================
72
- exports.TextMessageSchema = exports.BaseMessageSchema.extend({
73
- type: zod_1.z.literal('message'),
74
- id: zod_1.z.string().uuid(),
75
- from: zod_1.z.string(),
76
- to: zod_1.z.string(),
77
- content: zod_1.z.string(),
78
- timestamp: zod_1.z.number().int()
79
- });
80
- exports.MessageAckSchema = exports.BaseMessageSchema.extend({
81
- type: zod_1.z.literal('message_ack'),
82
- messageId: zod_1.z.string().uuid()
83
- });
84
- // ============================================================================
85
- // Skill 消息
86
- // ============================================================================
87
- exports.SkillQuerySchema = exports.BaseMessageSchema.extend({
88
- type: zod_1.z.literal('skill_query'),
89
- requestId: zod_1.z.string().uuid()
90
- });
91
- exports.SkillResponseSchema = exports.BaseMessageSchema.extend({
92
- type: zod_1.z.literal('skill_response'),
93
- requestId: zod_1.z.string().uuid(),
94
- skills: zod_1.z.array(zod_1.z.object({
95
- name: zod_1.z.string(),
96
- description: zod_1.z.string(),
97
- parameters: zod_1.z.record(zod_1.z.any())
98
- }))
99
- });
100
- exports.SkillInvokeSchema = exports.BaseMessageSchema.extend({
101
- type: zod_1.z.literal('skill_invoke'),
102
- requestId: zod_1.z.string().uuid(),
103
- skill: zod_1.z.string(),
104
- parameters: zod_1.z.record(zod_1.z.any())
105
- });
106
- exports.SkillResultSchema = exports.BaseMessageSchema.extend({
107
- type: zod_1.z.literal('skill_result'),
108
- requestId: zod_1.z.string().uuid(),
109
- status: zod_1.z.enum(['success', 'error']),
110
- result: zod_1.z.any().optional(),
111
- error: zod_1.z.string().optional()
112
- });
113
- // ============================================================================
114
- // 群聊消息
115
- // ============================================================================
116
- exports.GroupMessageSchema = exports.BaseMessageSchema.extend({
117
- type: zod_1.z.literal('group_message'),
118
- groupId: zod_1.z.string(),
119
- groupName: zod_1.z.string(),
120
- from: zod_1.z.string(),
121
- content: zod_1.z.string()
122
- });
123
- exports.GroupInviteSchema = exports.BaseMessageSchema.extend({
124
- type: zod_1.z.literal('group_invite'),
125
- groupId: zod_1.z.string(),
126
- groupName: zod_1.z.string(),
127
- inviter: zod_1.z.string()
128
- });
129
- // ============================================================================
130
- // WebRTC 消息
131
- // ============================================================================
132
- exports.WebRTCOfferSchema = exports.BaseMessageSchema.extend({
133
- type: zod_1.z.literal('webrtc_offer'),
134
- offer: zod_1.z.any()
135
- });
136
- exports.WebRTCAnswerSchema = exports.BaseMessageSchema.extend({
137
- type: zod_1.z.literal('webrtc_answer'),
138
- answer: zod_1.z.any()
139
- });
140
- exports.WebRTCIceSchema = exports.BaseMessageSchema.extend({
141
- type: zod_1.z.literal('webrtc_ice'),
142
- candidate: zod_1.z.any()
143
- });
144
- // ============================================================================
145
- // 加密消息
146
- // ============================================================================
147
- exports.KeyExchangeSchema = exports.BaseMessageSchema.extend({
148
- type: zod_1.z.literal('key_exchange'),
149
- publicKey: zod_1.z.string()
150
- });
151
- // ============================================================================
152
- // 联合类型
153
- // ============================================================================
154
- exports.F2AMessageSchema = zod_1.z.discriminatedUnion('type', [
155
- exports.IdentityChallengeSchema,
156
- exports.IdentityResponseSchema,
157
- exports.ConnectionPendingSchema,
158
- exports.ConfirmationResultSchema,
159
- exports.TextMessageSchema,
160
- exports.MessageAckSchema,
161
- exports.SkillQuerySchema,
162
- exports.SkillResponseSchema,
163
- exports.SkillInvokeSchema,
164
- exports.SkillResultSchema,
165
- exports.GroupMessageSchema,
166
- exports.GroupInviteSchema,
167
- exports.WebRTCOfferSchema,
168
- exports.WebRTCAnswerSchema,
169
- exports.WebRTCIceSchema,
170
- exports.KeyExchangeSchema
171
- ]);
172
- // ============================================================================
173
- // 验证函数
174
- // ============================================================================
175
- function validateMessage(data) {
176
- const result = exports.F2AMessageSchema.safeParse(data);
177
- if (result.success) {
178
- return { success: true, data: result.data };
179
- }
180
- return { success: false, error: result.error.message };
181
- }
182
- function createMessageId() {
183
- return crypto.randomUUID();
184
- }
185
- function createTimestamp() {
186
- return Date.now();
187
- }
188
- //# sourceMappingURL=messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=messages.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.test.d.ts","sourceRoot":"","sources":["../../src/protocol/messages.test.ts"],"names":[],"mappings":""}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const messages_1 = require("./messages");
5
- (0, vitest_1.describe)('Message Validation', () => {
6
- (0, vitest_1.it)('should validate identity challenge', () => {
7
- const message = {
8
- type: 'identity_challenge',
9
- agentId: 'test-agent',
10
- publicKey: 'test-key',
11
- challenge: 'test-challenge',
12
- timestamp: Date.now()
13
- };
14
- const result = messages_1.IdentityChallengeSchema.safeParse(message);
15
- (0, vitest_1.expect)(result.success).toBe(true);
16
- });
17
- (0, vitest_1.it)('should validate identity response', () => {
18
- const message = {
19
- type: 'identity_response',
20
- agentId: 'test-agent',
21
- publicKey: 'test-key',
22
- signature: 'test-signature',
23
- timestamp: Date.now()
24
- };
25
- const result = messages_1.IdentityResponseSchema.safeParse(message);
26
- (0, vitest_1.expect)(result.success).toBe(true);
27
- });
28
- (0, vitest_1.it)('should validate text message', () => {
29
- const message = {
30
- type: 'message',
31
- id: '550e8400-e29b-41d4-a716-446655440000',
32
- from: 'agent-a',
33
- to: 'agent-b',
34
- content: 'Hello',
35
- timestamp: Date.now()
36
- };
37
- const result = messages_1.TextMessageSchema.safeParse(message);
38
- (0, vitest_1.expect)(result.success).toBe(true);
39
- });
40
- (0, vitest_1.it)('should reject invalid message', () => {
41
- const result = (0, messages_1.validateMessage)({ type: 'invalid_type' });
42
- (0, vitest_1.expect)(result.success).toBe(false);
43
- });
44
- (0, vitest_1.it)('should accept valid message', () => {
45
- const result = (0, messages_1.validateMessage)({
46
- type: 'identity_challenge',
47
- agentId: 'test',
48
- publicKey: 'key',
49
- challenge: 'challenge',
50
- timestamp: Date.now()
51
- });
52
- (0, vitest_1.expect)(result.success).toBe(true);
53
- });
54
- });
55
- //# sourceMappingURL=messages.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.test.js","sourceRoot":"","sources":["../../src/protocol/messages.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,yCAKoB;AAEpB,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,gBAAgB;YAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,MAAM,GAAG,kCAAuB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,gBAAgB;YAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,MAAM,GAAG,iCAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,sCAAsC;YAC1C,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,MAAM,GAAG,4BAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpD,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC;YAC7B,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,61 +0,0 @@
1
- # F2A Protocol Specification
2
-
3
- F2A (Federated Agent Architecture) Protocol 是 Agent 之间的通用通信协议。
4
-
5
- ## 版本
6
-
7
- 当前版本: **1.0.0**
8
-
9
- ## 消息格式
10
-
11
- ```typescript
12
- interface F2AMessage {
13
- version: "1.0";
14
- type: MessageType;
15
- from: string;
16
- to?: string;
17
- timestamp: number;
18
- payload: unknown;
19
- signature?: string;
20
- }
21
- ```
22
-
23
- ## 消息类型
24
-
25
- - `discover` - 发现 Agents
26
- - `announce` - 广播任务(认领模式)
27
- - `claim` - 认领任务
28
- - `delegate` - 明确委托
29
- - `accept` / `reject` - 接受/拒绝委托
30
- - `response` - 任务响应
31
- - `review` - 评审提交
32
- - `heartbeat` - 心跳
33
-
34
- ## 委托模式
35
-
36
- ### 1. 直接委托
37
-
38
- ```
39
- Agent A --delegate--> Agent B --response--> Agent A
40
- ```
41
-
42
- ### 2. 广播并行
43
-
44
- ```
45
- Agent A --delegate--> All Agents --response--> Agent A
46
- ```
47
-
48
- ### 3. 广播认领
49
-
50
- ```
51
- Agent A --announce--> All Agents
52
- Agent B --claim--> Agent A
53
- Agent A --delegate--> Agent B --response--> Agent A
54
- ```
55
-
56
- ## 安全机制
57
-
58
- - 白名单/黑名单
59
- - 信誉系统
60
- - 评审团(高价值任务)
61
- - 消息签名验证
@@ -1,126 +0,0 @@
1
- # 手机作为移动引导节点设计提案
2
-
3
- ## 背景
4
-
5
- 当前 F2A 的 P2P 网络局限于单一局域网,无法实现跨网络(如家里和公司)的 Agent 发现和通信。
6
-
7
- ## 设计目标
8
-
9
- 让手机作为**移动引导节点(Mobile Bootstrap Node)**,连接不同网络的 Agent:
10
-
11
- ```
12
- 场景1: 家里
13
- ┌─────────────────────────┐
14
- │ 家里的 WiFi 网络 │
15
- │ ┌─────┐ ┌─────┐ ┌─────┐│
16
- │ │Agent│ │Agent│ │Agent││
17
- │ │ 1 │ │ 2 │ │ 3 ││
18
- │ └──┬──┘ └──┬──┘ └──┬──┘│
19
- │ └────────┼───────┘ │
20
- │ ▼ │
21
- │ ┌─────────┐ │
22
- │ │ 手机 │◄──────┐
23
- │ │引导节点 │ │
24
- │ └─────────┘ │
25
- └─────────────────────────┘
26
-
27
- 场景2: 公司
28
- ┌─────────────────────────┐
29
- │ 公司的 WiFi 网络 │
30
- │ ┌─────┐ ┌─────┐ │
31
- │ │Agent│ │Agent│ │
32
- │ │ 4 │ │ 5 │ │
33
- │ └──┬──┘ └──┬──┘ │
34
- │ └────────┼───────┐ │
35
- │ ▼ │ │
36
- │ ┌─────────┐ │ │
37
- │ │ 手机 │◄─┘ │
38
- │ │引导节点 │ │
39
- │ └────┬────┘ │
40
- └──────────────┼──────────┘
41
-
42
-
43
- 家里的3个Agent 和 公司的2个Agent
44
- 通过手机节点串联
45
- ```
46
-
47
- ## 核心机制
48
-
49
- ### 1. 手机作为 DHT 节点
50
-
51
- - 手机运行 F2A 节点,启用 DHT 服务器模式
52
- - 在家时:发现并记录家里的 Agent 到 DHT
53
- - 在公司时:发现并记录公司的 Agent 到 DHT
54
- - DHT 路由表自动同步,实现跨网络发现
55
-
56
- ### 2. NAT 穿透
57
-
58
- - 启用 libp2p 的 autoNAT 和 upnpNAT 服务
59
- - 自动检测 NAT 类型,尝试端口映射
60
- - 为跨网络直连提供技术支持
61
-
62
- ### 3. 发现流程
63
-
64
- ```
65
- Agent 4 (公司) 想联系 Agent 1 (家里)
66
-
67
- 1. Agent 4 通过 DHT 查询 Agent 1
68
- 2. 手机作为 DHT 节点,返回 Agent 1 的地址信息
69
- 3. Agent 4 尝试 NAT 穿透直连 Agent 1
70
- 4. 成功:直接 P2P 通信
71
- 5. 失败:需要公共中继节点(未来扩展)
72
- ```
73
-
74
- ## 技术方案
75
-
76
- ### 依赖添加
77
-
78
- ```json
79
- {
80
- "@libp2p/autonat": "^1.0.0",
81
- "@libp2p/upnp-nat": "^1.0.0"
82
- }
83
- ```
84
-
85
- ### P2P 网络配置
86
-
87
- ```typescript
88
- services.autonat = autoNAT();
89
- services.upnp = upnpNAT();
90
- ```
91
-
92
- ### 部署方式
93
-
94
- - **Termux** (Android):使用脚本启动
95
- - **iSH** (iOS):Alpine Linux 环境
96
- - **原生 App**:未来可选
97
-
98
- ## 待解决问题
99
-
100
- | 问题 | 状态 | 方案 |
101
- |------|------|------|
102
- | NAT 穿透成功率 | 🔴 未验证 | 依赖 autoNAT/upnpNAT,需测试 |
103
- | 手机后台运行 | 🟡 部分可行 | Termux + 关闭电池优化 |
104
- | 跨网络直连 | 🔴 未验证 | 需要至少一方有可穿透的 NAT |
105
- | 公共中继备份 | 🔴 未实现 | 打洞失败时的备选方案 |
106
-
107
- ## 实现状态
108
-
109
- 🚧 **设计阶段** - 等待本地测试验证
110
-
111
- ## 下一步
112
-
113
- 1. 本地局域网测试验证基础功能
114
- 2. Termux 真机测试
115
- 3. NAT 穿透成功率测试
116
- 4. 根据测试结果决定是否继续推进
117
-
118
- ## 相关资源
119
-
120
- - [Termux 安装指南](./docs/TERMUX.md)(待创建)
121
- - [libp2p NAT 穿透文档](https://docs.libp2p.io/concepts/nat/)
122
-
123
- ---
124
-
125
- *Created: 2026-03-05*
126
- *Status: Design Proposal*