@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,510 +0,0 @@
1
- # @f2a/openclaw-adapter
2
-
3
- OpenClaw 插件,用于集成 F2A P2P 网络。
4
-
5
- ## 功能
6
-
7
- - 🔍 **发现 Agents** - 发现局域网或公网中的其他 Agents
8
- - 📤 **委托任务** - 将任务委托给其他 Agent 执行
9
- - 📢 **广播任务** - 并行委托给多个 Agents
10
- - 🔐 **信誉系统** - 基于行为的 Peer 信誉评分
11
- - 🛡️ **安全控制** - 白名单、黑名单、手动确认
12
-
13
- ## 安装
14
-
15
- ```bash
16
- npm install @f2a/openclaw-adapter
17
- ```
18
-
19
- ## 配置
20
-
21
- 在 OpenClaw 配置文件中添加:
22
-
23
- ```json
24
- {
25
- "plugins": {
26
- "@f2a/openclaw-adapter": {
27
- "enabled": true,
28
- "config": {
29
- "agentName": "My OpenClaw Agent",
30
- "f2aPath": "~/projects/F2A",
31
- "autoStart": true,
32
- "webhookPort": 9002,
33
- "controlPort": 9001,
34
- "p2pPort": 9000,
35
- "enableMDNS": true,
36
- "webhookPush": {
37
- "url": "https://your-openclaw-instance.com/webhook/f2a",
38
- "token": "your-webhook-token",
39
- "timeout": 5000,
40
- "enabled": true
41
- },
42
- "processingTimeoutMs": 300000,
43
- "maxQueuedTasks": 100,
44
- "pollInterval": 60000,
45
- "dataDir": "./f2a-data",
46
- "reputation": {
47
- "enabled": true,
48
- "initialScore": 50,
49
- "minScoreForService": 20
50
- },
51
- "security": {
52
- "requireConfirmation": false,
53
- "whitelist": [],
54
- "blacklist": []
55
- }
56
- }
57
- }
58
- }
59
- }
60
- ```
61
-
62
- ### 配置项说明
63
-
64
- | 配置项 | 类型 | 默认值 | 说明 |
65
- |--------|------|--------|------|
66
- | `agentName` | string | "OpenClaw Agent" | Agent 显示名称 |
67
- | `f2aPath` | string | "./F2A" | F2A Node 路径 |
68
- | `autoStart` | boolean | true | 是否自动启动 F2A Node |
69
- | `webhookPort` | number | 9002 | Webhook 服务端口 |
70
- | `controlPort` | number | 9001 | F2A 控制端口 |
71
- | `p2pPort` | number | 9000 | P2P 网络端口 |
72
- | `enableMDNS` | boolean | true | 是否启用 mDNS 发现 |
73
- | `webhookPush` | object | - | Webhook 推送配置,用于主动推送任务通知到 OpenClaw |
74
- | `webhookPush.url` | string | - | OpenClaw webhook URL |
75
- | `webhookPush.token` | string | - | 认证 token |
76
- | `webhookPush.timeout` | number | 5000 | 推送超时(毫秒) |
77
- | `webhookPush.enabled` | boolean | true | 是否启用 |
78
- | `processingTimeoutMs` | number | 300000 | processing 任务超时时间(毫秒),超过此时间将被重置为 pending,防止僵尸任务 |
79
- | `maxQueuedTasks` | number | 100 | 任务队列最大容量 |
80
- | `pollInterval` | number | 60000 | 兜底轮询间隔(毫秒) |
81
- | `dataDir` | string | "./f2a-data" | 数据持久化目录 |
82
-
83
- ## 使用
84
-
85
- ### 发现 Agents
86
-
87
- ```
88
- 用户: 帮我找一下网络里能写代码的 Agents
89
-
90
- OpenClaw: [调用 f2a_discover capability=code-generation]
91
-
92
- 🔍 发现 2 个 Agents:
93
-
94
- 1. MacBook-Pro (信誉: 85)
95
- ID: f2a-a1b2-c3d4-e5f6...
96
- 能力: code-generation, file-operation
97
-
98
- 2. RaspberryPi-4 (信誉: 72)
99
- ID: f2a-e5f6-g7h8-i9j0...
100
- 能力: code-generation, data-analysis
101
- ```
102
-
103
- ### 委托任务
104
-
105
- ```
106
- 用户: 让 MacBook-Pro 帮我写一个斐波那契函数
107
-
108
- OpenClaw: [调用 f2a_delegate agent="MacBook-Pro" task="写斐波那契函数"]
109
-
110
- ✅ MacBook-Pro 已完成任务:
111
-
112
- def fibonacci(n):
113
- if n <= 1:
114
- return n
115
- return fibonacci(n-1) + fibonacci(n-2)
116
- ```
117
-
118
- ### 广播任务
119
-
120
- ```
121
- 用户: 让所有人帮我检查这段代码的 bug
122
-
123
- OpenClaw: [调用 f2a_broadcast capability=code-generation task="检查代码bug"]
124
-
125
- ✅ 收到 2/2 个成功响应:
126
-
127
- ✅ MacBook-Pro (245ms)
128
- 完成
129
-
130
- ✅ RaspberryPi-4 (312ms)
131
- 完成
132
- ```
133
-
134
- ## 工具列表
135
-
136
- ### 发现与委托工具
137
-
138
- #### f2a_discover - 发现 Agents
139
-
140
- 发现 F2A 网络中的 Agents,可按能力或信誉过滤。
141
-
142
- **参数:**
143
- - `capability` (可选): 按能力过滤,如 `code-generation`, `file-operation`
144
- - `min_reputation` (可选): 最低信誉分数 (0-100)
145
-
146
- ```
147
- 用户: 帮我找一下网络里能写代码的 Agents
148
-
149
- OpenClaw: [调用 f2a_discover capability=code-generation]
150
-
151
- 🔍 发现 2 个 Agents:
152
-
153
- 1. MacBook-Pro (信誉: 85)
154
- ID: f2a-a1b2-c3d4-e5f6...
155
- 能力: code-generation, file-operation
156
-
157
- 2. RaspberryPi-4 (信誉: 72)
158
- ID: f2a-e5f6-g7h8-i9j0...
159
- 能力: code-generation, data-analysis
160
- ```
161
-
162
- #### f2a_delegate - 委托任务
163
-
164
- 将任务委托给网络中的特定 Agent 执行。
165
-
166
- **参数:**
167
- - `agent` (必填): 目标 Agent ID、名称或索引(如 `#1`)
168
- - `task` (必填): 任务描述
169
- - `context` (可选): 任务上下文或附件
170
- - `timeout` (可选): 超时时间(毫秒)
171
-
172
- ```
173
- 用户: 让 MacBook-Pro 帮我写一个斐波那契函数
174
-
175
- OpenClaw: [调用 f2a_delegate agent="MacBook-Pro" task="写斐波那契函数"]
176
-
177
- ✅ MacBook-Pro 已完成任务:
178
-
179
- def fibonacci(n):
180
- if n <= 1:
181
- return n
182
- return fibonacci(n-1) + fibonacci(n-2)
183
- ```
184
-
185
- #### f2a_broadcast - 广播任务
186
-
187
- 广播任务给所有具备某能力的 Agents,实现并行执行。
188
-
189
- **参数:**
190
- - `capability` (必填): 所需能力
191
- - `task` (必填): 任务描述
192
- - `min_responses` (可选): 最少响应数
193
-
194
- ```
195
- 用户: 让所有人帮我检查这段代码的 bug
196
-
197
- OpenClaw: [调用 f2a_broadcast capability=code-generation task="检查代码bug"]
198
-
199
- ✅ 收到 2/2 个成功响应:
200
-
201
- ✅ MacBook-Pro (245ms)
202
- 完成
203
-
204
- ✅ RaspberryPi-4 (312ms)
205
- 完成
206
- ```
207
-
208
- #### f2a_status - 查看网络状态
209
-
210
- 查看 F2A 网络状态和已连接的 Peers。
211
-
212
- **参数:** 无
213
-
214
- ```
215
- 用户: 查看 F2A 网络状态
216
-
217
- OpenClaw: [调用 f2a_status]
218
-
219
- 📊 F2A 网络状态:
220
- - 节点 ID: f2a-a1b2-c3d4-e5f6...
221
- - 状态: 在线
222
- - 已连接 Peers: 3
223
- - 本地任务队列: 2 待处理, 1 执行中
224
- ```
225
-
226
- #### f2a_reputation - 管理信誉
227
-
228
- 查看或管理 Peer 的信誉分数。
229
-
230
- **参数:**
231
- - `action` (必填): 操作类型
232
- - `list`: 列出所有信誉记录
233
- - `view`: 查看指定 Peer 的信誉详情
234
- - `block`: 封锁指定 Peer
235
- - `unblock`: 解封指定 Peer
236
- - `peer_id` (可选): Peer ID(view/block/unblock 时需要)
237
-
238
- ```
239
- 用户: 查看所有信誉记录
240
-
241
- OpenClaw: [调用 f2a_reputation action=list]
242
-
243
- 📋 信誉记录:
244
-
245
- | Peer ID | 名称 | 信誉分 | 状态 |
246
- |---------|------|-------|------|
247
- | f2a-abc... | MacBook-Pro | 85 | 正常 |
248
- | f2a-def... | RaspberryPi-4 | 72 | 正常 |
249
- | f2a-xyz... | Unknown | 15 | 受限 |
250
-
251
- 用户: 封锁那个信誉太低的节点
252
-
253
- OpenClaw: [调用 f2a_reputation action=block peer_id="f2a-xyz..."]
254
-
255
- ✅ 已封锁节点 f2a-xyz...
256
- ```
257
-
258
- ### 任务队列工具
259
-
260
- #### f2a_poll_tasks - 查询任务队列
261
-
262
- 查询待处理的任务队列,获取需要执行的任务列表。
263
-
264
- ```
265
- 用户: 查看我的任务队列
266
-
267
- OpenClaw: [调用 f2a_poll_tasks]
268
-
269
- 📋 任务队列:
270
- - task-001: 代码审查 (待处理)
271
- - task-002: 文档生成 (待处理)
272
- ```
273
-
274
- #### f2a_submit_result - 提交任务结果
275
-
276
- 执行完任务后,提交执行结果。
277
-
278
- ```
279
- 用户: 提交任务结果,代码审查已完成
280
-
281
- OpenClaw: [调用 f2a_submit_result taskId="task-001" result="审查完成,发现3个问题"]
282
-
283
- ✅ 任务结果已提交:
284
- - 任务ID: task-001
285
- - 状态: 成功
286
- - 结果: 审查完成,发现3个问题
287
- ```
288
-
289
- #### f2a_task_stats - 查看队列统计
290
-
291
- 查看任务队列的统计信息,包括待处理、执行中、已完成等状态。
292
-
293
- ```
294
- 用户: 查看任务队列统计
295
-
296
- OpenClaw: [调用 f2a_task_stats]
297
-
298
- 📊 队列统计:
299
- - 待处理: 5
300
- - 执行中: 2
301
- - 已完成: 128
302
- - 失败: 3
303
- - 总计: 138
304
- ```
305
-
306
- ### 广播与认领工具
307
-
308
- #### f2a_announce - 广播任务
309
-
310
- 创建任务广播,让其他 Agent 可以认领执行。适用于需要并行处理或寻找合适执行者的场景。
311
-
312
- ```
313
- 用户: 广播一个数据分析任务
314
-
315
- OpenClaw: [调用 f2a_announce taskType="data-analysis" description="分析销售数据,生成月度报告"]
316
-
317
- 📢 任务已广播:
318
- - 广播ID: ann-abc123
319
- - 任务类型: data-analysis
320
- - 状态: 开放认领
321
- - 超时: 30分钟
322
- ```
323
-
324
- #### f2a_list_announcements - 查看开放广播
325
-
326
- 查看当前所有开放的、可以被认领的任务广播。
327
-
328
- ```
329
- 用户: 查看有哪些开放的任务
330
-
331
- OpenClaw: [调用 f2a_list_announcements]
332
-
333
- 📋 开放广播列表:
334
- 1. [ann-abc123] 数据分析任务
335
- - 类型: data-analysis
336
- - 发布者: MacBook-Pro
337
- - 剩余时间: 25分钟
338
-
339
- 2. [ann-def456] 翻译任务
340
- - 类型: translation
341
- - 发布者: iPhone-14
342
- - 剩余时间: 10分钟
343
- ```
344
-
345
- #### f2a_claim - 认领任务
346
-
347
- 认领一个开放的任务广播,表示愿意执行该任务。
348
-
349
- ```
350
- 用户: 认领数据分析任务
351
-
352
- OpenClaw: [调用 f2a_claim announcementId="ann-abc123"]
353
-
354
- ✅ 认领成功:
355
- - 广播ID: ann-abc123
356
- - 认领ID: claim-xyz789
357
- - 状态: 等待确认
358
- - 预计时间: 10分钟
359
- ```
360
-
361
- #### f2a_manage_claims - 管理认领
362
-
363
- 管理你发布的任务广播收到的认领请求,可以接受或拒绝认领。
364
-
365
- ```
366
- 用户: 查看我的广播收到的认领请求
367
-
368
- OpenClaw: [调用 f2a_manage_claims action="list"]
369
-
370
- 📋 认领请求列表:
371
- - claim-xyz789 (来自: MacBook-Pro)
372
- 广播: ann-abc123
373
- 状态: 待处理
374
- 预计时间: 10分钟
375
-
376
- 用户: 接受 MacBook-Pro 的认领
377
-
378
- OpenClaw: [调用 f2a_manage_claims action="accept" claimId="claim-xyz789"]
379
-
380
- ✅ 已接受认领:
381
- - 认领ID: claim-xyz789
382
- - 认领者: MacBook-Pro
383
- - 任务已正式委托
384
- ```
385
-
386
- #### f2a_my_claims - 查看我的认领
387
-
388
- 查看自己提交的所有认领请求及其状态。
389
-
390
- ```
391
- 用户: 查看我认领的任务
392
-
393
- OpenClaw: [调用 f2a_my_claims]
394
-
395
- 📋 我的认领:
396
- 1. [claim-xyz789] 数据分析任务
397
- - 状态: 已接受
398
- - 发布者: MacBook-Pro
399
- - 时间: 2024-01-15 10:30
400
-
401
- 2. [claim-mno456] 翻译任务
402
- - 状态: 待处理
403
- - 发布者: iPhone-14
404
- - 时间: 2024-01-15 11:00
405
- ```
406
-
407
- #### f2a_announcement_stats - 广播统计
408
-
409
- 查看任务广播的统计信息,包括开放、已认领、已委托、已过期等状态数量。
410
-
411
- ```
412
- 用户: 查看广播统计
413
-
414
- OpenClaw: [调用 f2a_announcement_stats]
415
-
416
- 📊 广播统计:
417
- - 开放中: 5
418
- - 已认领: 3
419
- - 已委托: 12
420
- - 已过期: 2
421
- - 总计: 22
422
- ```
423
-
424
- ## 架构
425
-
426
- ```
427
- ┌─────────────────────────────────────────────────────────┐
428
- │ OpenClaw Agent │
429
- │ │
430
- │ ┌─────────────────────────────────────────────────┐ │
431
- │ │ @f2a/openclaw-adapter 插件 │ │
432
- │ │ │ │
433
- │ │ • 检测 OpenClaw 能力 │ │
434
- │ │ • 提供 f2a_* Tools │ │
435
- │ │ • 通过 Webhook 接收任务 │ │
436
- │ │ • 调用 OpenClaw.execute() 执行远程任务 │ │
437
- │ └─────────────────────────────────────────────────┘ │
438
- │ │ │
439
- │ │ HTTP / WebSocket │
440
- │ ▼ │
441
- │ ┌─────────────────────────────────────────────────┐ │
442
- │ │ F2A Node (同机部署) │ │
443
- │ │ │ │
444
- │ │ • P2P 网络连接 (libp2p) │ │
445
- │ │ • mDNS 节点发现 │ │
446
- │ │ • 消息路由转发 │ │
447
- │ └─────────────────────────────────────────────────┘ │
448
- └─────────────────────────────────────────────────────────┘
449
-
450
- │ P2P 网络
451
-
452
- ┌─────────────────┐
453
- │ 其他 F2A 节点 │
454
- └─────────────────┘
455
- ```
456
-
457
- ### Webhook 推送机制
458
-
459
- 当配置了 `webhookPush` 时,F2A 会主动推送任务通知到 OpenClaw:
460
-
461
- 1. **新任务到达时**,立即通过 webhook 推送
462
- 2. **如果推送失败**,进入冷却期(指数退避,最大 5 分钟)
463
- 3. **冷却期间**,任务可通过轮询机制获取
464
- 4. **连续失败 3 次后**进入降级模式
465
-
466
- 推送流程:
467
- ```
468
- 任务到达 → 尝试 Webhook 推送
469
-
470
- 成功? → 标记已推送,等待处理
471
-
472
- 失败 → 进入冷却期,等待轮询兜底
473
- ```
474
-
475
- ### 僵尸任务处理
476
-
477
- 系统会定期检查 `processing` 状态的任务,防止因异常导致的任务丢失:
478
-
479
- **检测条件**(满足任一即触发):
480
- - 任务在 `processing` 状态停留超过 `processingTimeoutMs`(默认 5 分钟)
481
- - 或超过任务自身超时时间的 2 倍
482
-
483
- **处理方式**:
484
- - 自动将任务重置为 `pending` 状态
485
- - 记录警告日志,便于问题追踪
486
-
487
- ```
488
- 定期检查 → processing 任务超时?
489
-
490
- 是 → 重置为 pending,重新入队
491
-
492
- 否 → 继续等待
493
- ```
494
-
495
- ## 开发
496
-
497
- ```bash
498
- # 安装依赖
499
- npm install
500
-
501
- # 构建
502
- npm run build
503
-
504
- # 测试
505
- npm test
506
- ```
507
-
508
- ## License
509
-
510
- MIT
@@ -1,106 +0,0 @@
1
- {
2
- "id": "f2a-openclaw-adapter",
3
- "name": "F2A OpenClaw Adapter",
4
- "description": "OpenClaw adapter for F2A P2P Agent network",
5
- "version": "0.2.0",
6
- "configSchema": {
7
- "type": "object",
8
- "additionalProperties": false,
9
- "properties": {
10
- "f2aPath": {
11
- "type": "string",
12
- "description": "Path to F2A installation",
13
- "default": "~/projects/F2A"
14
- },
15
- "autoStart": {
16
- "type": "boolean",
17
- "description": "Automatically start F2A node",
18
- "default": true
19
- },
20
- "webhookPort": {
21
- "type": "number",
22
- "description": "Port for webhook server",
23
- "default": 9002
24
- },
25
- "controlPort": {
26
- "type": "number",
27
- "description": "Port for F2A control API",
28
- "default": 9001
29
- },
30
- "controlToken": {
31
- "type": "string",
32
- "description": "Auth token for F2A control API (auto-generated if not provided)",
33
- "sensitive": true
34
- },
35
- "p2pPort": {
36
- "type": "number",
37
- "description": "Port for P2P network",
38
- "default": 9000
39
- },
40
- "enableMDNS": {
41
- "type": "boolean",
42
- "description": "Enable mDNS discovery",
43
- "default": true
44
- },
45
- "bootstrapPeers": {
46
- "type": "array",
47
- "items": { "type": "string" },
48
- "description": "Bootstrap peer addresses",
49
- "default": []
50
- },
51
- "agentName": {
52
- "type": "string",
53
- "description": "Display name for this agent",
54
- "default": "OpenClaw Agent"
55
- },
56
- "capabilities": {
57
- "type": "array",
58
- "items": { "type": "string" },
59
- "description": "Custom capabilities to advertise",
60
- "default": []
61
- },
62
- "dataDir": {
63
- "type": "string",
64
- "description": "Directory for plugin data",
65
- "default": "./f2a-data"
66
- },
67
- "maxQueuedTasks": {
68
- "type": "number",
69
- "description": "Maximum number of tasks to queue",
70
- "default": 100
71
- },
72
- "reputation": {
73
- "type": "object",
74
- "properties": {
75
- "enabled": { "type": "boolean", "default": true },
76
- "initialScore": { "type": "number", "default": 50 },
77
- "minScoreForService": { "type": "number", "default": 20 },
78
- "decayRate": { "type": "number", "default": 0.01 }
79
- }
80
- },
81
- "security": {
82
- "type": "object",
83
- "properties": {
84
- "requireConfirmation": { "type": "boolean", "default": false },
85
- "whitelist": { "type": "array", "items": { "type": "string" }, "default": [] },
86
- "blacklist": { "type": "array", "items": { "type": "string" }, "default": [] },
87
- "maxTasksPerMinute": { "type": "number", "default": 10 }
88
- }
89
- }
90
- }
91
- },
92
- "uiHints": {
93
- "f2aPath": { "label": "F2A Path", "placeholder": "~/projects/F2A" },
94
- "autoStart": { "label": "Auto Start F2A Node" },
95
- "webhookPort": { "label": "Webhook Port" },
96
- "controlPort": { "label": "Control Port" },
97
- "controlToken": { "label": "Control Token", "sensitive": true },
98
- "p2pPort": { "label": "P2P Port" },
99
- "enableMDNS": { "label": "Enable mDNS Discovery" },
100
- "bootstrapPeers": { "label": "Bootstrap Peers", "placeholder": ["/ip4/..."] },
101
- "agentName": { "label": "Agent Display Name" },
102
- "capabilities": { "label": "Custom Capabilities" },
103
- "dataDir": { "label": "Data Directory" },
104
- "maxQueuedTasks": { "label": "Max Queued Tasks" }
105
- }
106
- }
@@ -1,40 +0,0 @@
1
- {
2
- "name": "@f2a/openclaw-adapter",
3
- "version": "0.1.0",
4
- "description": "OpenClaw adapter for F2A P2P Agent network",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "files": [
8
- "dist",
9
- "openclaw.plugin.json",
10
- "README.md"
11
- ],
12
- "openclaw": {
13
- "extensions": ["./dist/plugin.js"]
14
- },
15
- "scripts": {
16
- "build": "tsc",
17
- "dev": "tsc --watch",
18
- "test": "vitest",
19
- "lint": "eslint src/**/*.ts"
20
- },
21
- "keywords": ["openclaw", "f2a", "p2p", "agent", "plugin"],
22
- "author": "F2A Team",
23
- "license": "MIT",
24
- "dependencies": {
25
- "@f2a/network": "file:../..",
26
- "ws": "^8.16.0",
27
- "node-fetch": "^3.3.2",
28
- "zod": "^3.22.4",
29
- "better-sqlite3": "^11.0.0"
30
- },
31
- "devDependencies": {
32
- "@types/node": "^20.10.0",
33
- "@types/ws": "^8.5.10",
34
- "typescript": "^5.3.0",
35
- "vitest": "^1.0.0"
36
- },
37
- "peerDependencies": {
38
- "openclaw": ">=1.0.0"
39
- }
40
- }