@f2a/network 0.1.2

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 (234) hide show
  1. package/.github/workflows/ci.yml +113 -0
  2. package/.github/workflows/publish.yml +60 -0
  3. package/LICENSE +21 -0
  4. package/MONOREPO.md +58 -0
  5. package/README.md +280 -0
  6. package/SKILL.md +137 -0
  7. package/dist/adapters/openclaw.d.ts +103 -0
  8. package/dist/adapters/openclaw.d.ts.map +1 -0
  9. package/dist/adapters/openclaw.js +297 -0
  10. package/dist/adapters/openclaw.js.map +1 -0
  11. package/dist/cli/commands.d.ts +17 -0
  12. package/dist/cli/commands.d.ts.map +1 -0
  13. package/dist/cli/commands.js +107 -0
  14. package/dist/cli/commands.js.map +1 -0
  15. package/dist/cli/index.d.ts +6 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +203 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/core/autonomous-economy.d.ts +136 -0
  20. package/dist/core/autonomous-economy.d.ts.map +1 -0
  21. package/dist/core/autonomous-economy.js +255 -0
  22. package/dist/core/autonomous-economy.js.map +1 -0
  23. package/dist/core/connection-manager.d.ts +80 -0
  24. package/dist/core/connection-manager.d.ts.map +1 -0
  25. package/dist/core/connection-manager.js +235 -0
  26. package/dist/core/connection-manager.js.map +1 -0
  27. package/dist/core/connection-manager.test.d.ts +2 -0
  28. package/dist/core/connection-manager.test.d.ts.map +1 -0
  29. package/dist/core/connection-manager.test.js +52 -0
  30. package/dist/core/connection-manager.test.js.map +1 -0
  31. package/dist/core/e2ee-crypto.d.ts +90 -0
  32. package/dist/core/e2ee-crypto.d.ts.map +1 -0
  33. package/dist/core/e2ee-crypto.js +190 -0
  34. package/dist/core/e2ee-crypto.js.map +1 -0
  35. package/dist/core/f2a.d.ts +126 -0
  36. package/dist/core/f2a.d.ts.map +1 -0
  37. package/dist/core/f2a.js +425 -0
  38. package/dist/core/f2a.js.map +1 -0
  39. package/dist/core/identity.d.ts +47 -0
  40. package/dist/core/identity.d.ts.map +1 -0
  41. package/dist/core/identity.js +130 -0
  42. package/dist/core/identity.js.map +1 -0
  43. package/dist/core/identity.test.d.ts +2 -0
  44. package/dist/core/identity.test.d.ts.map +1 -0
  45. package/dist/core/identity.test.js +43 -0
  46. package/dist/core/identity.test.js.map +1 -0
  47. package/dist/core/p2p-network.d.ts +242 -0
  48. package/dist/core/p2p-network.d.ts.map +1 -0
  49. package/dist/core/p2p-network.js +1182 -0
  50. package/dist/core/p2p-network.js.map +1 -0
  51. package/dist/core/reputation-security.d.ts +168 -0
  52. package/dist/core/reputation-security.d.ts.map +1 -0
  53. package/dist/core/reputation-security.js +369 -0
  54. package/dist/core/reputation-security.js.map +1 -0
  55. package/dist/core/reputation.d.ts +179 -0
  56. package/dist/core/reputation.d.ts.map +1 -0
  57. package/dist/core/reputation.js +472 -0
  58. package/dist/core/reputation.js.map +1 -0
  59. package/dist/core/review-committee.d.ts +130 -0
  60. package/dist/core/review-committee.d.ts.map +1 -0
  61. package/dist/core/review-committee.js +251 -0
  62. package/dist/core/review-committee.js.map +1 -0
  63. package/dist/core/serverless.d.ts +155 -0
  64. package/dist/core/serverless.d.ts.map +1 -0
  65. package/dist/core/serverless.js +615 -0
  66. package/dist/core/serverless.js.map +1 -0
  67. package/dist/core/token-manager.d.ts +42 -0
  68. package/dist/core/token-manager.d.ts.map +1 -0
  69. package/dist/core/token-manager.js +122 -0
  70. package/dist/core/token-manager.js.map +1 -0
  71. package/dist/daemon/control-server.d.ts +55 -0
  72. package/dist/daemon/control-server.d.ts.map +1 -0
  73. package/dist/daemon/control-server.js +262 -0
  74. package/dist/daemon/control-server.js.map +1 -0
  75. package/dist/daemon/index.d.ts +35 -0
  76. package/dist/daemon/index.d.ts.map +1 -0
  77. package/dist/daemon/index.js +69 -0
  78. package/dist/daemon/index.js.map +1 -0
  79. package/dist/daemon/main.d.ts +6 -0
  80. package/dist/daemon/main.d.ts.map +1 -0
  81. package/dist/daemon/main.js +38 -0
  82. package/dist/daemon/main.js.map +1 -0
  83. package/dist/daemon/start.d.ts +6 -0
  84. package/dist/daemon/start.d.ts.map +1 -0
  85. package/dist/daemon/start.js +25 -0
  86. package/dist/daemon/start.js.map +1 -0
  87. package/dist/daemon/webhook.d.ts +30 -0
  88. package/dist/daemon/webhook.d.ts.map +1 -0
  89. package/dist/daemon/webhook.js +86 -0
  90. package/dist/daemon/webhook.js.map +1 -0
  91. package/dist/daemon/webhook.test.d.ts +2 -0
  92. package/dist/daemon/webhook.test.d.ts.map +1 -0
  93. package/dist/daemon/webhook.test.js +24 -0
  94. package/dist/daemon/webhook.test.js.map +1 -0
  95. package/dist/index.d.ts +24 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +25 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/protocol/messages.d.ts +739 -0
  100. package/dist/protocol/messages.d.ts.map +1 -0
  101. package/dist/protocol/messages.js +188 -0
  102. package/dist/protocol/messages.js.map +1 -0
  103. package/dist/protocol/messages.test.d.ts +2 -0
  104. package/dist/protocol/messages.test.d.ts.map +1 -0
  105. package/dist/protocol/messages.test.js +55 -0
  106. package/dist/protocol/messages.test.js.map +1 -0
  107. package/dist/types/index.d.ts +247 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +10 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/result.d.ts +28 -0
  112. package/dist/types/result.d.ts.map +1 -0
  113. package/dist/types/result.js +16 -0
  114. package/dist/types/result.js.map +1 -0
  115. package/dist/utils/benchmark.d.ts +67 -0
  116. package/dist/utils/benchmark.d.ts.map +1 -0
  117. package/dist/utils/benchmark.js +179 -0
  118. package/dist/utils/benchmark.js.map +1 -0
  119. package/dist/utils/logger.d.ts +105 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +275 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/dist/utils/middleware.d.ts +85 -0
  124. package/dist/utils/middleware.d.ts.map +1 -0
  125. package/dist/utils/middleware.js +173 -0
  126. package/dist/utils/middleware.js.map +1 -0
  127. package/dist/utils/rate-limiter.d.ts +71 -0
  128. package/dist/utils/rate-limiter.d.ts.map +1 -0
  129. package/dist/utils/rate-limiter.js +160 -0
  130. package/dist/utils/rate-limiter.js.map +1 -0
  131. package/dist/utils/signature.d.ts +57 -0
  132. package/dist/utils/signature.d.ts.map +1 -0
  133. package/dist/utils/signature.js +102 -0
  134. package/dist/utils/signature.js.map +1 -0
  135. package/dist/utils/validation.d.ts +504 -0
  136. package/dist/utils/validation.d.ts.map +1 -0
  137. package/dist/utils/validation.js +159 -0
  138. package/dist/utils/validation.js.map +1 -0
  139. package/docs/F2A-PROTOCOL.md +61 -0
  140. package/docs/MOBILE_BOOTSTRAP_DESIGN.md +126 -0
  141. package/docs/a2a-lessons.md +316 -0
  142. package/docs/middleware-guide.md +448 -0
  143. package/docs/readme-update-checklist.md +90 -0
  144. package/docs/reputation-guide.md +396 -0
  145. package/docs/rfcs/001-reputation-system.md +712 -0
  146. package/docs/security-design.md +247 -0
  147. package/install.sh +231 -0
  148. package/package.json +64 -0
  149. package/packages/openclaw-adapter/README.md +510 -0
  150. package/packages/openclaw-adapter/openclaw.plugin.json +106 -0
  151. package/packages/openclaw-adapter/package.json +40 -0
  152. package/packages/openclaw-adapter/src/announcement-queue.test.ts +449 -0
  153. package/packages/openclaw-adapter/src/announcement-queue.ts +403 -0
  154. package/packages/openclaw-adapter/src/capability-detector.test.ts +99 -0
  155. package/packages/openclaw-adapter/src/capability-detector.ts +183 -0
  156. package/packages/openclaw-adapter/src/claim-handlers.test.ts +974 -0
  157. package/packages/openclaw-adapter/src/claim-handlers.ts +482 -0
  158. package/packages/openclaw-adapter/src/connector.business.test.ts +583 -0
  159. package/packages/openclaw-adapter/src/connector.ts +795 -0
  160. package/packages/openclaw-adapter/src/index.test.ts +82 -0
  161. package/packages/openclaw-adapter/src/index.ts +18 -0
  162. package/packages/openclaw-adapter/src/integration.e2e.test.ts +829 -0
  163. package/packages/openclaw-adapter/src/logger.ts +51 -0
  164. package/packages/openclaw-adapter/src/network-client.test.ts +266 -0
  165. package/packages/openclaw-adapter/src/network-client.ts +251 -0
  166. package/packages/openclaw-adapter/src/network-recovery.test.ts +465 -0
  167. package/packages/openclaw-adapter/src/node-manager.test.ts +136 -0
  168. package/packages/openclaw-adapter/src/node-manager.ts +429 -0
  169. package/packages/openclaw-adapter/src/plugin.test.ts +439 -0
  170. package/packages/openclaw-adapter/src/plugin.ts +104 -0
  171. package/packages/openclaw-adapter/src/reputation.test.ts +221 -0
  172. package/packages/openclaw-adapter/src/reputation.ts +368 -0
  173. package/packages/openclaw-adapter/src/task-guard.test.ts +502 -0
  174. package/packages/openclaw-adapter/src/task-guard.ts +860 -0
  175. package/packages/openclaw-adapter/src/task-queue.concurrency.test.ts +462 -0
  176. package/packages/openclaw-adapter/src/task-queue.edge-cases.test.ts +284 -0
  177. package/packages/openclaw-adapter/src/task-queue.persistence.test.ts +408 -0
  178. package/packages/openclaw-adapter/src/task-queue.ts +668 -0
  179. package/packages/openclaw-adapter/src/tool-handlers.test.ts +906 -0
  180. package/packages/openclaw-adapter/src/tool-handlers.ts +574 -0
  181. package/packages/openclaw-adapter/src/types.ts +361 -0
  182. package/packages/openclaw-adapter/src/webhook-pusher.test.ts +188 -0
  183. package/packages/openclaw-adapter/src/webhook-pusher.ts +220 -0
  184. package/packages/openclaw-adapter/src/webhook-server.test.ts +580 -0
  185. package/packages/openclaw-adapter/src/webhook-server.ts +202 -0
  186. package/packages/openclaw-adapter/tsconfig.json +20 -0
  187. package/src/cli/commands.test.ts +157 -0
  188. package/src/cli/commands.ts +129 -0
  189. package/src/cli/index.test.ts +77 -0
  190. package/src/cli/index.ts +234 -0
  191. package/src/core/autonomous-economy.test.ts +291 -0
  192. package/src/core/autonomous-economy.ts +428 -0
  193. package/src/core/e2ee-crypto.test.ts +125 -0
  194. package/src/core/e2ee-crypto.ts +246 -0
  195. package/src/core/f2a.test.ts +269 -0
  196. package/src/core/f2a.ts +618 -0
  197. package/src/core/p2p-network.test.ts +199 -0
  198. package/src/core/p2p-network.ts +1432 -0
  199. package/src/core/reputation-security.test.ts +403 -0
  200. package/src/core/reputation-security.ts +562 -0
  201. package/src/core/reputation.test.ts +260 -0
  202. package/src/core/reputation.ts +576 -0
  203. package/src/core/review-committee.test.ts +380 -0
  204. package/src/core/review-committee.ts +401 -0
  205. package/src/core/token-manager.test.ts +133 -0
  206. package/src/core/token-manager.ts +140 -0
  207. package/src/daemon/control-server.test.ts +216 -0
  208. package/src/daemon/control-server.ts +292 -0
  209. package/src/daemon/index.test.ts +85 -0
  210. package/src/daemon/index.ts +89 -0
  211. package/src/daemon/main.ts +44 -0
  212. package/src/daemon/start.ts +29 -0
  213. package/src/daemon/webhook.test.ts +68 -0
  214. package/src/daemon/webhook.ts +105 -0
  215. package/src/index.test.ts +436 -0
  216. package/src/index.ts +72 -0
  217. package/src/types/index.test.ts +87 -0
  218. package/src/types/index.ts +341 -0
  219. package/src/types/result.ts +68 -0
  220. package/src/utils/benchmark.ts +237 -0
  221. package/src/utils/logger.ts +331 -0
  222. package/src/utils/middleware.ts +229 -0
  223. package/src/utils/rate-limiter.ts +207 -0
  224. package/src/utils/signature.ts +136 -0
  225. package/src/utils/validation.ts +186 -0
  226. package/tests/docker/Dockerfile.node +23 -0
  227. package/tests/docker/Dockerfile.runner +18 -0
  228. package/tests/docker/docker-compose.test.yml +73 -0
  229. package/tests/integration/message-passing.test.ts +109 -0
  230. package/tests/integration/multi-node.test.ts +92 -0
  231. package/tests/integration/p2p-connection.test.ts +83 -0
  232. package/tests/integration/test-config.ts +32 -0
  233. package/tsconfig.json +21 -0
  234. package/vitest.config.ts +26 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,188 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.test.d.ts","sourceRoot":"","sources":["../../src/protocol/messages.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * F2A P2P 网络核心类型定义
3
+ * 基于 libp2p 的 Agent 协作网络
4
+ */
5
+ import { Multiaddr } from '@multiformats/multiaddr';
6
+ import { EventEmitter } from 'eventemitter3';
7
+ export type SecurityLevel = 'low' | 'medium' | 'high';
8
+ export type LogLevel = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR';
9
+ export interface AgentCapability {
10
+ /** 能力名称,如 "file-operation", "web-browsing", "code-generation" */
11
+ name: string;
12
+ /** 能力描述 */
13
+ description: string;
14
+ /** 支持的工具/操作 */
15
+ tools: string[];
16
+ /** 能力参数schema(可选) */
17
+ parameters?: Record<string, ParameterSchema>;
18
+ }
19
+ export interface ParameterSchema {
20
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array';
21
+ required?: boolean;
22
+ default?: unknown;
23
+ description?: string;
24
+ }
25
+ export interface AgentInfo {
26
+ /** libp2p PeerID */
27
+ peerId: string;
28
+ /** 可读名称 */
29
+ displayName?: string;
30
+ /** Agent 类型 */
31
+ agentType: 'openclaw' | 'claude-code' | 'codex' | 'custom';
32
+ /** 版本 */
33
+ version: string;
34
+ /** 支持的能力列表 */
35
+ capabilities: AgentCapability[];
36
+ /** 支持的协议版本 */
37
+ protocolVersion: string;
38
+ /** 最后活跃时间 */
39
+ lastSeen: number;
40
+ /** 网络地址 */
41
+ multiaddrs: string[];
42
+ /** 端到端加密公钥 (base64) */
43
+ encryptionPublicKey?: string;
44
+ }
45
+ export interface P2PNetworkConfig {
46
+ /** 监听端口 */
47
+ listenPort?: number;
48
+ /** 监听地址 */
49
+ listenAddresses?: string[];
50
+ /** 引导节点列表 */
51
+ bootstrapPeers?: string[];
52
+ /** 是否启用 MDNS 本地发现 */
53
+ enableMDNS?: boolean;
54
+ /** 是否启用 DHT (默认 true) */
55
+ enableDHT?: boolean;
56
+ /** DHT 服务器模式 (默认 false,即客户端模式) */
57
+ dhtServerMode?: boolean;
58
+ }
59
+ export interface F2AOptions {
60
+ /** 节点可读名称 */
61
+ displayName?: string;
62
+ /** Agent 类型 */
63
+ agentType?: string;
64
+ /** P2P 网络配置 */
65
+ network?: P2PNetworkConfig;
66
+ /** 安全级别 */
67
+ security?: SecurityConfig;
68
+ /** 日志级别 */
69
+ logLevel?: LogLevel;
70
+ /** 数据目录 */
71
+ dataDir?: string;
72
+ }
73
+ export interface SecurityConfig {
74
+ level: SecurityLevel;
75
+ /** 是否要求确认连接 */
76
+ requireConfirmation: boolean;
77
+ /** 是否验证签名 */
78
+ verifySignatures: boolean;
79
+ /** 白名单 */
80
+ whitelist?: Set<string>;
81
+ /** 黑名单 */
82
+ blacklist?: Set<string>;
83
+ /** 速率限制 */
84
+ rateLimit?: RateLimitConfig;
85
+ }
86
+ export interface RateLimitConfig {
87
+ maxRequests: number;
88
+ windowMs: number;
89
+ }
90
+ export type F2AMessageType = 'DISCOVER' | 'DISCOVER_RESP' | 'CAPABILITY_QUERY' | 'CAPABILITY_RESPONSE' | 'TASK_REQUEST' | 'TASK_RESPONSE' | 'TASK_DELEGATE' | 'DECRYPT_FAILED' | 'PING' | 'PONG';
91
+ export interface F2AMessage {
92
+ /** 消息ID */
93
+ id: string;
94
+ /** 消息类型 */
95
+ type: F2AMessageType;
96
+ /** 发送方 PeerID */
97
+ from: string;
98
+ /** 目标 PeerID(广播可为空) */
99
+ to?: string;
100
+ /** 时间戳 */
101
+ timestamp: number;
102
+ /** TTL */
103
+ ttl?: number;
104
+ /** 载荷 */
105
+ payload: unknown;
106
+ }
107
+ export interface DiscoverPayload {
108
+ agentInfo: AgentInfo;
109
+ }
110
+ export interface CapabilityQueryPayload {
111
+ /** 查询特定能力,空表示查询所有 */
112
+ capabilityName?: string;
113
+ /** 查询特定工具 */
114
+ toolName?: string;
115
+ }
116
+ export interface CapabilityResponsePayload {
117
+ agentInfo: AgentInfo;
118
+ }
119
+ export interface TaskRequestPayload {
120
+ /** 任务ID */
121
+ taskId: string;
122
+ /** 任务类型 */
123
+ taskType: string;
124
+ /** 任务描述 */
125
+ description: string;
126
+ /** 任务参数 */
127
+ parameters?: Record<string, unknown>;
128
+ /** 超时时间(秒) */
129
+ timeout?: number;
130
+ }
131
+ export interface TaskResponsePayload {
132
+ /** 任务ID */
133
+ taskId: string;
134
+ /** 状态 */
135
+ status: 'success' | 'error' | 'rejected' | 'delegated';
136
+ /** 结果数据 */
137
+ result?: unknown;
138
+ /** 错误信息 */
139
+ error?: string;
140
+ /** 如果转委托,指向新节点 */
141
+ delegatedTo?: string;
142
+ }
143
+ export interface PeerDiscoveredEvent {
144
+ peerId: string;
145
+ agentInfo: AgentInfo;
146
+ multiaddrs: Multiaddr[];
147
+ }
148
+ export interface PeerConnectedEvent {
149
+ peerId: string;
150
+ direction: 'inbound' | 'outbound';
151
+ }
152
+ export interface PeerDisconnectedEvent {
153
+ peerId: string;
154
+ }
155
+ export interface TaskRequestEvent {
156
+ taskId: string;
157
+ from: string;
158
+ taskType: string;
159
+ description: string;
160
+ parameters?: Record<string, unknown>;
161
+ timeout?: number;
162
+ }
163
+ export interface TaskResponseEvent {
164
+ taskId: string;
165
+ from: string;
166
+ status: 'success' | 'error' | 'rejected' | 'delegated';
167
+ result?: unknown;
168
+ error?: string;
169
+ }
170
+ export interface NetworkStartedEvent {
171
+ peerId: string;
172
+ listenAddresses: string[];
173
+ }
174
+ export interface F2AEvents {
175
+ 'peer:discovered': (event: PeerDiscoveredEvent) => void;
176
+ 'peer:connected': (event: PeerConnectedEvent) => void;
177
+ 'peer:disconnected': (event: PeerDisconnectedEvent) => void;
178
+ 'task:request': (event: TaskRequestEvent) => void;
179
+ 'task:response': (event: TaskResponseEvent) => void;
180
+ 'network:started': (event: NetworkStartedEvent) => void;
181
+ 'network:stopped': () => void;
182
+ 'error': (error: Error) => void;
183
+ }
184
+ export type F2AEventEmitter = EventEmitter<F2AEvents>;
185
+ export interface WebhookConfig {
186
+ url: string;
187
+ token: string;
188
+ timeout?: number;
189
+ retries?: number;
190
+ retryDelay?: number;
191
+ }
192
+ /** 任务委托重试选项 */
193
+ export interface TaskRetryOptions {
194
+ /** 最大重试次数(默认 3) */
195
+ maxRetries?: number;
196
+ /** 重试间隔毫秒(默认 1000) */
197
+ retryDelayMs?: number;
198
+ /** 发现超时毫秒(默认 5000) */
199
+ discoverTimeoutMs?: number;
200
+ }
201
+ export interface TaskDelegateOptions {
202
+ /** 目标能力 */
203
+ capability: string;
204
+ /** 任务描述 */
205
+ description: string;
206
+ /** 任务参数 */
207
+ parameters?: Record<string, unknown>;
208
+ /** 超时时间(秒) */
209
+ timeout?: number;
210
+ /** 是否允许多方并行执行 */
211
+ parallel?: boolean;
212
+ /** 最少响应数(parallel=true时) */
213
+ minResponses?: number;
214
+ /** 重试选项 */
215
+ retryOptions?: TaskRetryOptions;
216
+ }
217
+ export interface TaskDelegateResult {
218
+ taskId: string;
219
+ results: {
220
+ peerId: string;
221
+ status: 'success' | 'error' | 'timeout';
222
+ result?: unknown;
223
+ error?: string;
224
+ latency: number;
225
+ }[];
226
+ }
227
+ export interface PeerInfo {
228
+ peerId: string;
229
+ agentInfo?: AgentInfo;
230
+ multiaddrs: Multiaddr[];
231
+ connected: boolean;
232
+ latency?: number;
233
+ /** 信誉分 */
234
+ reputation: number;
235
+ /** 连接时间 */
236
+ connectedAt?: number;
237
+ /** 最后活跃 */
238
+ lastSeen: number;
239
+ }
240
+ export interface CapabilityHandler {
241
+ (params: Record<string, unknown>): Promise<unknown>;
242
+ }
243
+ export interface RegisteredCapability extends AgentCapability {
244
+ handler: CapabilityHandler;
245
+ }
246
+ export * from './result.js';
247
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * F2A P2P 网络核心类型定义
3
+ * 基于 libp2p 的 Agent 协作网络
4
+ */
5
+ // ============================================================================
6
+ // 统一 Result 类型
7
+ // 从 result.ts 重新导出,用于统一的错误处理模式
8
+ // ============================================================================
9
+ export * from './result.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4UH,+EAA+E;AAC/E,eAAe;AACf,+BAA+B;AAC/B,+EAA+E;AAE/E,cAAc,aAAa,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 统一的错误类型和错误码
3
+ */
4
+ export type ErrorCode = 'NETWORK_NOT_STARTED' | 'NETWORK_ALREADY_RUNNING' | 'PEER_NOT_FOUND' | 'CONNECTION_FAILED' | 'TIMEOUT' | 'DHT_NOT_AVAILABLE' | 'DHT_LOOKUP_FAILED' | 'ENCRYPTION_NOT_READY' | 'ENCRYPTION_FAILED' | 'TASK_NOT_FOUND' | 'TASK_REJECTED' | 'TASK_FAILED' | 'CAPABILITY_NOT_SUPPORTED' | 'INVALID_OPTIONS' | 'UNAUTHORIZED' | 'FORBIDDEN' | 'RATE_LIMITED' | 'INVALID_PARAMS' | 'INTERNAL_ERROR' | 'UNKNOWN';
5
+ export interface F2AError {
6
+ code: ErrorCode;
7
+ message: string;
8
+ details?: Record<string, unknown>;
9
+ cause?: Error;
10
+ }
11
+ export declare function createError(code: ErrorCode, message: string, details?: Record<string, unknown>, cause?: Error): F2AError;
12
+ /**
13
+ * 统一的 Result 类型
14
+ */
15
+ export type Result<T> = {
16
+ success: true;
17
+ data: T;
18
+ error?: never;
19
+ } | {
20
+ success: false;
21
+ error: F2AError;
22
+ data?: never;
23
+ };
24
+ export declare function success<T>(data: T): Result<T>;
25
+ export declare function failure<T>(error: F2AError): Result<T>;
26
+ export declare function failureFromError<T>(code: ErrorCode, message: string, cause?: Error): Result<T>;
27
+ export type AsyncResult<T> = Promise<Result<T>>;
28
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,SAAS,GAEjB,qBAAqB,GACrB,yBAAyB,GACzB,gBAAgB,GAChB,mBAAmB,GACnB,SAAS,GAET,mBAAmB,GACnB,mBAAmB,GAEnB,sBAAsB,GACtB,mBAAmB,GAEnB,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,0BAA0B,GAC1B,iBAAiB,GAEjB,cAAc,GACd,WAAW,GACX,cAAc,GAEd,gBAAgB,GAChB,gBAAgB,GAChB,SAAS,CAAC;AAEd,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,CAAC,EAAE,KAAK,GACZ,QAAQ,CAEV;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAChB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtD,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE7C;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAErD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAE9F;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 统一的错误类型和错误码
3
+ */
4
+ export function createError(code, message, details, cause) {
5
+ return { code, message, details, cause };
6
+ }
7
+ export function success(data) {
8
+ return { success: true, data };
9
+ }
10
+ export function failure(error) {
11
+ return { success: false, error };
12
+ }
13
+ export function failureFromError(code, message, cause) {
14
+ return { success: false, error: createError(code, message, undefined, cause) };
15
+ }
16
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH,MAAM,UAAU,WAAW,CACzB,IAAe,EACf,OAAe,EACf,OAAiC,EACjC,KAAa;IAEb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AASD,MAAM,UAAU,OAAO,CAAI,IAAO;IAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,KAAe;IACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAI,IAAe,EAAE,OAAe,EAAE,KAAa;IACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;AACjF,CAAC"}