@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,260 +0,0 @@
1
- /**
2
- * 信誉系统测试
3
- */
4
-
5
- import { describe, it, expect, beforeEach } from 'vitest';
6
- import { ReputationManager, REPUTATION_TIERS, ReputationLevel } from './reputation.js';
7
-
8
- describe('ReputationManager', () => {
9
- let manager: ReputationManager;
10
-
11
- beforeEach(() => {
12
- manager = new ReputationManager();
13
- });
14
-
15
- describe('初始信誉', () => {
16
- it('should assign initial score of 70', () => {
17
- const entry = manager.getReputation('peer-1');
18
- expect(entry.score).toBe(70);
19
- expect(entry.level).toBe('contributor');
20
- });
21
-
22
- it('should create same entry for same peer', () => {
23
- const entry1 = manager.getReputation('peer-1');
24
- const entry2 = manager.getReputation('peer-1');
25
- expect(entry1).toBe(entry2);
26
- });
27
-
28
- it('should create different entries for different peers', () => {
29
- const entry1 = manager.getReputation('peer-1');
30
- const entry2 = manager.getReputation('peer-2');
31
- expect(entry1).not.toBe(entry2);
32
- expect(entry1.peerId).toBe('peer-1');
33
- expect(entry2.peerId).toBe('peer-2');
34
- });
35
- });
36
-
37
- describe('信誉等级', () => {
38
- it('should return correct tier for score', () => {
39
- const tier0 = manager.getTier(10);
40
- expect(tier0.level).toBe('restricted');
41
-
42
- const tier1 = manager.getTier(30);
43
- expect(tier1.level).toBe('novice');
44
-
45
- const tier2 = manager.getTier(50);
46
- expect(tier2.level).toBe('participant');
47
-
48
- const tier3 = manager.getTier(70);
49
- expect(tier3.level).toBe('contributor');
50
-
51
- const tier4 = manager.getTier(90);
52
- expect(tier4.level).toBe('core');
53
- });
54
-
55
- it('should have correct permissions for each tier', () => {
56
- // restricted
57
- expect(manager.getTier(10).permissions.canPublish).toBe(false);
58
- expect(manager.getTier(10).permissions.canExecute).toBe(true);
59
- expect(manager.getTier(10).permissions.canReview).toBe(false);
60
-
61
- // novice
62
- expect(manager.getTier(30).permissions.canPublish).toBe(true);
63
- expect(manager.getTier(30).permissions.canReview).toBe(false);
64
-
65
- // participant+
66
- expect(manager.getTier(50).permissions.canReview).toBe(true);
67
-
68
- // contributor
69
- expect(manager.getTier(70).permissions.publishDiscount).toBe(0.9);
70
-
71
- // core
72
- expect(manager.getTier(90).permissions.publishDiscount).toBe(0.7);
73
- expect(manager.getTier(90).permissions.publishPriority).toBe(5);
74
- });
75
- });
76
-
77
- describe('权限检查', () => {
78
- it('should check publish permission correctly', () => {
79
- // 70 分应该可以发布
80
- expect(manager.hasPermission('peer-1', 'publish')).toBe(true);
81
-
82
- // 降低到受限者
83
- manager.recordFailure('peer-1', 'task-1', 'test');
84
- manager.recordFailure('peer-1', 'task-2', 'test');
85
- manager.recordFailure('peer-1', 'task-3', 'test');
86
- manager.recordFailure('peer-1', 'task-4', 'test');
87
-
88
- // 多次失败后可能降到受限者
89
- const entry = manager.getReputation('peer-1');
90
- if (entry.score < 20) {
91
- expect(manager.hasPermission('peer-1', 'publish')).toBe(false);
92
- }
93
- });
94
-
95
- it('should always allow execute permission', () => {
96
- expect(manager.hasPermission('peer-1', 'execute')).toBe(true);
97
- });
98
-
99
- it('should check review permission correctly', () => {
100
- // 70 分是参与者,可以评审
101
- expect(manager.hasPermission('peer-1', 'review')).toBe(true);
102
- });
103
- });
104
-
105
- describe('EWMA 分数更新', () => {
106
- it('should update score with EWMA on success', () => {
107
- manager.recordSuccess('peer-1', 'task-1');
108
- const entry = manager.getReputation('peer-1');
109
-
110
- // EWMA: newScore = 0.3 * 80 + 0.7 * 70 = 24 + 49 = 73
111
- expect(entry.score).toBeCloseTo(73, 1);
112
- });
113
-
114
- it('should update score with EWMA on failure', () => {
115
- manager.recordFailure('peer-1', 'task-1', 'test');
116
- const entry = manager.getReputation('peer-1');
117
-
118
- // EWMA: newScore = 0.3 * 50 + 0.7 * 70 = 15 + 49 = 64
119
- expect(entry.score).toBeCloseTo(64, 1);
120
- });
121
-
122
- it('should cap score at 100', () => {
123
- // 多次成功应该封顶在 100
124
- for (let i = 0; i < 20; i++) {
125
- manager.recordSuccess('peer-1', `task-${i}`);
126
- }
127
- const entry = manager.getReputation('peer-1');
128
- expect(entry.score).toBeLessThanOrEqual(100);
129
- });
130
-
131
- it('should not go below 0', () => {
132
- // 多次失败应该保底在 0
133
- for (let i = 0; i < 20; i++) {
134
- manager.recordFailure('peer-1', `task-${i}`, 'test');
135
- }
136
- const entry = manager.getReputation('peer-1');
137
- expect(entry.score).toBeGreaterThanOrEqual(0);
138
- });
139
- });
140
-
141
- describe('事件历史', () => {
142
- it('should record success events', () => {
143
- manager.recordSuccess('peer-1', 'task-1');
144
- const entry = manager.getReputation('peer-1');
145
-
146
- expect(entry.history.length).toBe(2); // initial + success
147
- expect(entry.history[1].type).toBe('task_success');
148
- expect(entry.history[1].taskId).toBe('task-1');
149
- });
150
-
151
- it('should record failure events with reason', () => {
152
- manager.recordFailure('peer-1', 'task-1', 'timeout');
153
- const entry = manager.getReputation('peer-1');
154
-
155
- expect(entry.history.length).toBe(2);
156
- expect(entry.history[1].type).toBe('task_failure');
157
- expect(entry.history[1].reason).toBe('timeout');
158
- });
159
-
160
- it('should record rejection events', () => {
161
- manager.recordRejection('peer-1', 'task-1', 'busy');
162
- const entry = manager.getReputation('peer-1');
163
-
164
- expect(entry.history.some(e => e.type === 'task_rejected')).toBe(true);
165
- });
166
-
167
- it('should record review rewards', () => {
168
- manager.recordReviewReward('peer-1', 3);
169
- const entry = manager.getReputation('peer-1');
170
-
171
- expect(entry.history.some(e => e.type === 'review_given')).toBe(true);
172
- });
173
-
174
- it('should record review penalties', () => {
175
- manager.recordReviewPenalty('peer-1', -5, 'outlier');
176
- const entry = manager.getReputation('peer-1');
177
-
178
- expect(entry.history.some(e => e.type === 'review_penalty')).toBe(true);
179
- });
180
- });
181
-
182
- describe('排序和查询', () => {
183
- it('should return reputations sorted by score', () => {
184
- manager.recordSuccess('peer-1', 'task-1');
185
- manager.recordFailure('peer-2', 'task-2', 'test');
186
- manager.recordSuccess('peer-3', 'task-3');
187
- manager.recordSuccess('peer-3', 'task-4');
188
-
189
- const all = manager.getAllReputations();
190
- expect(all[0].score).toBeGreaterThanOrEqual(all[1].score);
191
- expect(all[1].score).toBeGreaterThanOrEqual(all[2].score);
192
- });
193
-
194
- it('should filter high reputation nodes', () => {
195
- // peer-1 保持高信誉
196
- manager.recordSuccess('peer-1', 'task-1');
197
-
198
- // peer-2 降低信誉
199
- for (let i = 0; i < 5; i++) {
200
- manager.recordFailure('peer-2', `task-${i}`, 'test');
201
- }
202
-
203
- const highReputation = manager.getHighReputationNodes(50);
204
- expect(highReputation.some(e => e.peerId === 'peer-1')).toBe(true);
205
- });
206
- });
207
-
208
- describe('发布折扣和优先级', () => {
209
- it('should return correct publish discount', () => {
210
- // 70 分是 contributor,折扣 0.9
211
- expect(manager.getPublishDiscount('peer-1')).toBe(0.9);
212
-
213
- // 提升到 core
214
- for (let i = 0; i < 10; i++) {
215
- manager.recordSuccess('peer-1', `task-${i}`);
216
- }
217
- const entry = manager.getReputation('peer-1');
218
- if (entry.level === 'core') {
219
- expect(manager.getPublishDiscount('peer-1')).toBe(0.7);
220
- }
221
- });
222
-
223
- it('should return correct publish priority', () => {
224
- // 70 分是 contributor,优先级 3
225
- expect(manager.getPublishPriority('peer-1')).toBe(3);
226
- });
227
- });
228
-
229
- describe('自定义配置', () => {
230
- it('should use custom initial score', () => {
231
- const customManager = new ReputationManager({ initialScore: 50 });
232
- const entry = customManager.getReputation('peer-1');
233
- expect(entry.score).toBe(50);
234
- });
235
-
236
- it('should use custom alpha for EWMA', () => {
237
- const customManager = new ReputationManager({ alpha: 0.5 });
238
- customManager.recordSuccess('peer-1', 'task-1');
239
- const entry = customManager.getReputation('peer-1');
240
-
241
- // EWMA: newScore = 0.5 * 80 + 0.5 * 70 = 40 + 35 = 75
242
- expect(entry.score).toBeCloseTo(75, 1);
243
- });
244
- });
245
- });
246
-
247
- describe('REPUTATION_TIERS', () => {
248
- it('should have 5 tiers', () => {
249
- expect(REPUTATION_TIERS.length).toBe(5);
250
- });
251
-
252
- it('should cover all score ranges', () => {
253
- const levels = REPUTATION_TIERS.map(t => t.level);
254
- expect(levels).toContain('restricted');
255
- expect(levels).toContain('novice');
256
- expect(levels).toContain('participant');
257
- expect(levels).toContain('contributor');
258
- expect(levels).toContain('core');
259
- });
260
- });