@f2a/openclaw-adapter 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/announcement-queue.d.ts +72 -1
  2. package/dist/announcement-queue.d.ts.map +1 -1
  3. package/dist/announcement-queue.js +145 -20
  4. package/dist/announcement-queue.js.map +1 -1
  5. package/dist/claim-handlers.d.ts +75 -0
  6. package/dist/claim-handlers.d.ts.map +1 -0
  7. package/dist/claim-handlers.js +368 -0
  8. package/dist/claim-handlers.js.map +1 -0
  9. package/dist/connector.d.ts +46 -18
  10. package/dist/connector.d.ts.map +1 -1
  11. package/dist/connector.js +319 -592
  12. package/dist/connector.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/logger.d.ts +28 -0
  18. package/dist/logger.d.ts.map +1 -0
  19. package/dist/logger.js +44 -0
  20. package/dist/logger.js.map +1 -0
  21. package/dist/network-client.d.ts +17 -1
  22. package/dist/network-client.d.ts.map +1 -1
  23. package/dist/network-client.js +119 -23
  24. package/dist/network-client.js.map +1 -1
  25. package/dist/node-manager.d.ts +20 -0
  26. package/dist/node-manager.d.ts.map +1 -1
  27. package/dist/node-manager.js +194 -18
  28. package/dist/node-manager.js.map +1 -1
  29. package/dist/plugin.d.ts +1 -1
  30. package/dist/plugin.d.ts.map +1 -1
  31. package/dist/plugin.js +4 -5
  32. package/dist/plugin.js.map +1 -1
  33. package/dist/reputation.d.ts +85 -1
  34. package/dist/reputation.d.ts.map +1 -1
  35. package/dist/reputation.js +222 -9
  36. package/dist/reputation.js.map +1 -1
  37. package/dist/task-guard.d.ts +82 -0
  38. package/dist/task-guard.d.ts.map +1 -1
  39. package/dist/task-guard.js +449 -16
  40. package/dist/task-guard.js.map +1 -1
  41. package/dist/task-queue.d.ts +55 -7
  42. package/dist/task-queue.d.ts.map +1 -1
  43. package/dist/task-queue.js +477 -12
  44. package/dist/task-queue.js.map +1 -1
  45. package/dist/tool-handlers.d.ts +158 -0
  46. package/dist/tool-handlers.d.ts.map +1 -0
  47. package/dist/tool-handlers.js +724 -0
  48. package/dist/tool-handlers.js.map +1 -0
  49. package/dist/types.d.ts +112 -15
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js +23 -0
  52. package/dist/types.js.map +1 -1
  53. package/dist/webhook-pusher.d.ts +71 -0
  54. package/dist/webhook-pusher.d.ts.map +1 -0
  55. package/dist/webhook-pusher.js +174 -0
  56. package/dist/webhook-pusher.js.map +1 -0
  57. package/dist/webhook-server.d.ts +8 -1
  58. package/dist/webhook-server.d.ts.map +1 -1
  59. package/dist/webhook-server.js +65 -7
  60. package/dist/webhook-server.js.map +1 -1
  61. package/package.json +21 -8
@@ -4,13 +4,23 @@
4
4
  * 管理 Peer 的信誉分数
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ReputationSystem = void 0;
7
+ exports.ReputationManagerAdapter = exports.ReputationSystem = void 0;
8
8
  const fs_1 = require("fs");
9
9
  const path_1 = require("path");
10
+ const types_js_1 = require("./types.js");
11
+ const logger_js_1 = require("./logger.js");
10
12
  class ReputationSystem {
11
13
  config;
12
14
  entries = new Map();
13
15
  dataPath;
16
+ // 防抖写入相关
17
+ savePending = false;
18
+ saveTimer;
19
+ lastSaveTime = Date.now(); // 初始化为当前时间,避免首次调用立即触发
20
+ debounceConfig = {
21
+ delayMs: 100, // 100ms 防抖延迟
22
+ maxWaitMs: 1000 // 最多等待 1 秒
23
+ };
14
24
  constructor(config, dataDir) {
15
25
  this.config = config;
16
26
  this.dataPath = (0, path_1.join)(dataDir, 'reputation.json');
@@ -118,10 +128,81 @@ class ReputationSystem {
118
128
  * 检查是否允许服务
119
129
  */
120
130
  isAllowed(peerId) {
121
- if (!this.config.enabled)
131
+ if (!types_js_1.INTERNAL_REPUTATION_CONFIG.enabled)
122
132
  return true;
123
133
  const entry = this.getReputation(peerId);
124
- return entry.score >= this.config.minScoreForService;
134
+ return entry.score >= types_js_1.INTERNAL_REPUTATION_CONFIG.minScoreForService;
135
+ }
136
+ /**
137
+ * 检查节点是否具有指定权限
138
+ * 基于信誉分数判断权限等级
139
+ *
140
+ * 权限等级:
141
+ * - restricted (0-20): 仅可执行
142
+ * - novice (20-40): 可发布、可执行
143
+ * - participant (40-60): 可发布、可执行、可评审
144
+ * - contributor (60-80): 可发布、可执行、可评审,发布优先级更高
145
+ * - core (80-100): 可发布、可执行、可评审,最高发布优先级
146
+ *
147
+ * @param peerId - 节点的唯一标识符
148
+ * @param permission - 要检查的权限类型:'publish'(发布)、'execute'(执行)、'review'(评审)
149
+ * @returns 如果节点具有该权限则返回 true,否则返回 false
150
+ */
151
+ hasPermission(peerId, permission) {
152
+ const entry = this.getReputation(peerId);
153
+ const score = entry.score;
154
+ // 根据分数确定权限
155
+ switch (permission) {
156
+ case 'publish':
157
+ // 20分以上可发布
158
+ return score >= 20;
159
+ case 'execute':
160
+ // 所有节点都可以执行
161
+ return true;
162
+ case 'review':
163
+ // 40分以上可评审
164
+ return score >= 40;
165
+ default:
166
+ return false;
167
+ }
168
+ }
169
+ /**
170
+ * 记录评审奖励
171
+ * 当节点完成评审任务时调用,会提高信誉分数
172
+ * @param peerId - 节点的唯一标识符
173
+ * @param delta - 分数变化量,默认为 3
174
+ */
175
+ recordReviewReward(peerId, delta = types_js_1.INTERNAL_REPUTATION_CONFIG.reviewReward) {
176
+ const entry = this.getReputation(peerId);
177
+ entry.score = Math.min(100, entry.score + delta);
178
+ entry.lastInteraction = Date.now();
179
+ entry.history.push({
180
+ type: 'review_reward',
181
+ delta,
182
+ timestamp: Date.now()
183
+ });
184
+ this.trimHistory(entry);
185
+ this.save();
186
+ }
187
+ /**
188
+ * 记录评审惩罚
189
+ * 当节点提供低质量评审或违规时调用,会降低信誉分数
190
+ * @param peerId - 节点的唯一标识符
191
+ * @param delta - 分数变化量,默认为 -5
192
+ * @param reason - 可选的惩罚原因描述
193
+ */
194
+ recordReviewPenalty(peerId, delta = -types_js_1.INTERNAL_REPUTATION_CONFIG.reviewPenalty, reason) {
195
+ const entry = this.getReputation(peerId);
196
+ entry.score = Math.max(0, entry.score + delta);
197
+ entry.lastInteraction = Date.now();
198
+ entry.history.push({
199
+ type: 'review_penalty',
200
+ delta,
201
+ timestamp: Date.now(),
202
+ reason
203
+ });
204
+ this.trimHistory(entry);
205
+ this.save();
125
206
  }
126
207
  /**
127
208
  * 获取所有信誉记录
@@ -154,7 +235,7 @@ class ReputationSystem {
154
235
  createDefaultEntry(peerId) {
155
236
  return {
156
237
  peerId,
157
- score: this.config.initialScore,
238
+ score: types_js_1.INTERNAL_REPUTATION_CONFIG.initialScore,
158
239
  successfulTasks: 0,
159
240
  failedTasks: 0,
160
241
  totalTasks: 0,
@@ -191,25 +272,157 @@ class ReputationSystem {
191
272
  for (const entry of data) {
192
273
  this.entries.set(entry.peerId, entry);
193
274
  }
194
- console.log(`[F2A Reputation] 加载了 ${this.entries.size} 条记录`);
275
+ logger_js_1.pluginLogger.info('加载了 %d 条信誉记录', this.entries.size);
195
276
  }
196
277
  catch (e) {
197
- console.error('[F2A Reputation] 加载失败:', e);
278
+ logger_js_1.pluginLogger.error('加载信誉数据失败: error=%s', e);
198
279
  }
199
280
  }
200
281
  }
201
282
  /**
202
- * 保存数据
283
+ * 保存数据(防抖 + 异步写入)
284
+ *
285
+ * P0 修复:使用防抖机制避免高并发下的阻塞问题
286
+ * - 短时间内多次调用只触发一次实际写入
287
+ * - 使用异步写入避免阻塞主线程
288
+ * - 原子写入保证数据完整性
203
289
  */
204
290
  save() {
291
+ // 标记有待保存的数据
292
+ this.savePending = true;
293
+ // 如果已有定时器,先清除
294
+ if (this.saveTimer) {
295
+ clearTimeout(this.saveTimer);
296
+ }
297
+ const now = Date.now();
298
+ const timeSinceLastSave = now - this.lastSaveTime;
299
+ // 如果距离上次保存超过 maxWaitMs,立即保存
300
+ if (timeSinceLastSave >= this.debounceConfig.maxWaitMs) {
301
+ this.doSave();
302
+ return;
303
+ }
304
+ // 否则设置防抖定时器
305
+ this.saveTimer = setTimeout(() => {
306
+ if (this.savePending) {
307
+ this.doSave();
308
+ }
309
+ }, this.debounceConfig.delayMs);
310
+ }
311
+ /**
312
+ * 执行实际的保存操作(异步)
313
+ */
314
+ doSave() {
315
+ this.savePending = false;
316
+ this.saveTimer = undefined;
317
+ this.lastSaveTime = Date.now();
318
+ const tempPath = `${this.dataPath}.tmp`;
319
+ // 使用 setImmediate 将文件操作移到下一个事件循环
320
+ // 避免阻塞当前操作
321
+ setImmediate(() => {
322
+ try {
323
+ const data = Array.from(this.entries.values());
324
+ const jsonContent = JSON.stringify(data, null, 2);
325
+ // 1. 写入临时文件
326
+ (0, fs_1.writeFileSync)(tempPath, jsonContent, { encoding: 'utf-8' });
327
+ // 2. 原子重命名(在 POSIX 系统上是原子操作)
328
+ (0, fs_1.renameSync)(tempPath, this.dataPath);
329
+ }
330
+ catch (e) {
331
+ logger_js_1.pluginLogger.error('保存信誉数据失败: error=%s', e);
332
+ // 清理临时文件(如果存在)
333
+ try {
334
+ if ((0, fs_1.existsSync)(tempPath)) {
335
+ (0, fs_1.unlinkSync)(tempPath);
336
+ }
337
+ }
338
+ catch {
339
+ // 忽略清理错误
340
+ }
341
+ }
342
+ });
343
+ }
344
+ /**
345
+ * 强制同步保存(用于关闭时)
346
+ */
347
+ flush() {
348
+ // 清除防抖定时器
349
+ if (this.saveTimer) {
350
+ clearTimeout(this.saveTimer);
351
+ this.saveTimer = undefined;
352
+ }
353
+ // 如果有待保存的数据,立即同步保存
354
+ if (this.savePending) {
355
+ this.savePending = false;
356
+ this.doSaveSync();
357
+ }
358
+ }
359
+ /**
360
+ * 同步保存操作(用于关闭时确保数据持久化)
361
+ */
362
+ doSaveSync() {
363
+ const tempPath = `${this.dataPath}.tmp`;
205
364
  try {
206
365
  const data = Array.from(this.entries.values());
207
- (0, fs_1.writeFileSync)(this.dataPath, JSON.stringify(data, null, 2));
366
+ const jsonContent = JSON.stringify(data, null, 2);
367
+ (0, fs_1.writeFileSync)(tempPath, jsonContent, { encoding: 'utf-8' });
368
+ (0, fs_1.renameSync)(tempPath, this.dataPath);
208
369
  }
209
370
  catch (e) {
210
- console.error('[F2A Reputation] 保存失败:', e);
371
+ logger_js_1.pluginLogger.error('同步保存信誉数据失败: error=%s', e);
372
+ try {
373
+ if ((0, fs_1.existsSync)(tempPath)) {
374
+ (0, fs_1.unlinkSync)(tempPath);
375
+ }
376
+ }
377
+ catch {
378
+ // 忽略清理错误
379
+ }
211
380
  }
212
381
  }
213
382
  }
214
383
  exports.ReputationSystem = ReputationSystem;
384
+ /**
385
+ * ReputationManager 适配器
386
+ *
387
+ * 将 ReputationSystem 包装为 ReviewCommittee 所需的 IReputationManager 接口。
388
+ * 用于解决 ReviewCommittee (src/core/) 依赖 IReputationManager 接口,
389
+ * 而 adapter 使用的是 ReputationSystem 的问题。
390
+ */
391
+ class ReputationManagerAdapter {
392
+ reputationSystem;
393
+ constructor(reputationSystem) {
394
+ this.reputationSystem = reputationSystem;
395
+ }
396
+ /**
397
+ * 检查节点是否具有指定权限
398
+ */
399
+ hasPermission(peerId, permission) {
400
+ return this.reputationSystem.hasPermission(peerId, permission);
401
+ }
402
+ /**
403
+ * 获取高信誉节点
404
+ */
405
+ getHighReputationNodes(minScore) {
406
+ return this.reputationSystem.getHighReputationNodes(minScore);
407
+ }
408
+ /**
409
+ * 获取所有信誉记录
410
+ */
411
+ getAllReputations() {
412
+ return this.reputationSystem.getAllReputations();
413
+ }
414
+ /**
415
+ * 记录评审惩罚
416
+ */
417
+ recordReviewPenalty(peerId, delta, reason) {
418
+ this.reputationSystem.recordReviewPenalty(peerId, delta, reason);
419
+ }
420
+ /**
421
+ * 记录评审奖励
422
+ */
423
+ recordReviewReward(peerId, delta) {
424
+ this.reputationSystem.recordReviewReward(peerId, delta);
425
+ }
426
+ }
427
+ exports.ReputationManagerAdapter = ReputationManagerAdapter;
215
428
  //# sourceMappingURL=reputation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reputation.js","sourceRoot":"","sources":["../src/reputation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reputation.js","sourceRoot":"","sources":["../src/reputation.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,45 @@ export interface TaskGuardRule {
11
11
  severity: 'info' | 'warn' | 'block';
12
12
  check: (task: TaskRequest | TaskAnnouncement, context: TaskGuardContext) => TaskGuardResult;
13
13
  }
14
+ /**
15
+ * 任务安全检查上下文
16
+ *
17
+ * 提供任务检查所需的上下文信息,包括请求者信誉、黑白名单状态、
18
+ * 近期请求频率等,用于安全规则判断任务是否应该被接受或拒绝。
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const context: TaskGuardContext = {
23
+ * requesterReputation: {
24
+ * peerId: 'f2a-peer-xxx',
25
+ * score: 85,
26
+ * successfulTasks: 42,
27
+ * failedTasks: 2,
28
+ * // ...其他字段
29
+ * },
30
+ * isWhitelisted: true,
31
+ * isBlacklisted: false,
32
+ * recentTaskCount: 3,
33
+ * config: DEFAULT_TASK_GUARD_CONFIG
34
+ * };
35
+ *
36
+ * // 使用上下文进行任务检查
37
+ * const report = taskGuard.check(task, context);
38
+ * if (!report.passed) {
39
+ * console.warn('任务被安全规则拒绝:', report.blocks);
40
+ * }
41
+ * ```
42
+ */
14
43
  export interface TaskGuardContext {
44
+ /** 请求者的信誉信息(可选,新 peer 可能没有) */
15
45
  requesterReputation?: ReputationEntry;
46
+ /** 请求者是否在白名单中 */
16
47
  isWhitelisted: boolean;
48
+ /** 请求者是否在黑名单中 */
17
49
  isBlacklisted: boolean;
50
+ /** 近期(1分钟内)的任务请求数量 */
18
51
  recentTaskCount: number;
52
+ /** 任务守卫配置 */
19
53
  config: TaskGuardConfig;
20
54
  }
21
55
  export interface TaskGuardConfig {
@@ -25,6 +59,10 @@ export interface TaskGuardConfig {
25
59
  blockedKeywords: string[];
26
60
  dangerousPatterns: RegExp[];
27
61
  minReputationForDangerous: number;
62
+ /** 持久化目录路径,用于存储 rate limiting 状态。不设置则不持久化 */
63
+ persistDir?: string;
64
+ /** 持久化保存间隔(毫秒),默认 30000 (30秒) */
65
+ persistIntervalMs?: number;
28
66
  }
29
67
  export interface TaskGuardResult {
30
68
  passed: boolean;
@@ -47,7 +85,43 @@ export declare class TaskGuard {
47
85
  private config;
48
86
  private rules;
49
87
  private recentTasks;
88
+ /** 清理阈值:当条目数超过此值时触发清理 */
89
+ private cleanupThreshold;
90
+ /** 上次清理时间戳 */
91
+ private lastCleanupTime;
92
+ /** 定时清理间隔(毫秒) */
93
+ private cleanupIntervalMs;
94
+ /** 持久化文件路径 */
95
+ private persistFilePath;
96
+ /** 持久化定时器 */
97
+ private persistTimer;
98
+ /** 是否有未保存的更改 */
99
+ private hasUnsavedChanges;
50
100
  constructor(config?: Partial<TaskGuardConfig>);
101
+ /**
102
+ * 初始化持久化
103
+ */
104
+ private initPersistence;
105
+ /**
106
+ * 加载已保存的状态
107
+ */
108
+ private loadPersistedState;
109
+ /**
110
+ * 保存状态到文件
111
+ */
112
+ private saveState;
113
+ /**
114
+ * 仅在有未保存更改时保存
115
+ */
116
+ private saveStateIfNeeded;
117
+ /**
118
+ * 手动保存当前状态
119
+ */
120
+ forceSave(): void;
121
+ /**
122
+ * 关闭持久化(停止定时器并保存最后状态)
123
+ */
124
+ shutdown(): void;
51
125
  /**
52
126
  * 检查任务
53
127
  */
@@ -72,6 +146,14 @@ export declare class TaskGuard {
72
146
  private isDangerousTask;
73
147
  private getRecentTaskCount;
74
148
  private recordTask;
149
+ /**
150
+ * 条件触发清理:当条目数超过阈值或距上次清理超过间隔时执行
151
+ */
152
+ private maybeCleanup;
153
+ /**
154
+ * 清理过期的 recentTasks 条目,防止内存泄漏
155
+ */
156
+ private cleanupRecentTasks;
75
157
  }
76
158
  export declare const taskGuard: TaskGuard;
77
159
  //# sourceMappingURL=task-guard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-guard.d.ts","sourceRoot":"","sources":["../src/task-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,KAAK,eAAe,CAAC;CAC7F;AAED,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,CAAC,EAAE,eAAe,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B,EAAE,OAAO,CAAC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,yBAAyB,EAAE,eAoBvC,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,WAAW,CAAoC;gBAE3C,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAKjD;;OAEG;IACH,KAAK,CACH,IAAI,EAAE,WAAW,GAAG,gBAAgB,EACpC,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,eAAe;IAkDlB;;OAEG;IACH,UAAU,CACR,IAAI,EAAE,WAAW,GAAG,gBAAgB,EACpC,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAClC,OAAO;IAKV;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIlC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOtD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAMpD,OAAO,CAAC,kBAAkB;IA+M1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,UAAU;CAKnB;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
1
+ {"version":3,"file":"task-guard.d.ts","sourceRoot":"","sources":["../src/task-guard.ts"],"names":[],"mappings":"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"}