@f2a/openclaw-f2a 0.2.20
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.
- package/README.md +510 -0
- package/dist/agent-manager.d.ts +78 -0
- package/dist/agent-manager.d.ts.map +1 -0
- package/dist/agent-manager.js +206 -0
- package/dist/agent-manager.js.map +1 -0
- package/dist/announcement-queue.d.ts +152 -0
- package/dist/announcement-queue.d.ts.map +1 -0
- package/dist/announcement-queue.js +307 -0
- package/dist/announcement-queue.js.map +1 -0
- package/dist/capability-detector.d.ts +21 -0
- package/dist/capability-detector.d.ts.map +1 -0
- package/dist/capability-detector.js +178 -0
- package/dist/capability-detector.js.map +1 -0
- package/dist/claim-handlers.d.ts +75 -0
- package/dist/claim-handlers.d.ts.map +1 -0
- package/dist/claim-handlers.js +368 -0
- package/dist/claim-handlers.js.map +1 -0
- package/dist/connector.d.ts +174 -0
- package/dist/connector.d.ts.map +1 -0
- package/dist/connector.js +1284 -0
- package/dist/connector.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +28 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +44 -0
- package/dist/logger.js.map +1 -0
- package/dist/network-client.d.ts +73 -0
- package/dist/network-client.d.ts.map +1 -0
- package/dist/network-client.js +202 -0
- package/dist/network-client.js.map +1 -0
- package/dist/node-manager.d.ts +79 -0
- package/dist/node-manager.d.ts.map +1 -0
- package/dist/node-manager.js +374 -0
- package/dist/node-manager.js.map +1 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +148 -0
- package/dist/plugin.js.map +1 -0
- package/dist/reputation.d.ts +156 -0
- package/dist/reputation.d.ts.map +1 -0
- package/dist/reputation.js +432 -0
- package/dist/reputation.js.map +1 -0
- package/dist/task-guard.d.ts +159 -0
- package/dist/task-guard.d.ts.map +1 -0
- package/dist/task-guard.js +763 -0
- package/dist/task-guard.js.map +1 -0
- package/dist/task-queue.d.ts +130 -0
- package/dist/task-queue.d.ts.map +1 -0
- package/dist/task-queue.js +592 -0
- package/dist/task-queue.js.map +1 -0
- package/dist/tool-handlers.d.ts +158 -0
- package/dist/tool-handlers.d.ts.map +1 -0
- package/dist/tool-handlers.js +727 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/types.d.ts +417 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook-pusher.d.ts +71 -0
- package/dist/webhook-pusher.d.ts.map +1 -0
- package/dist/webhook-pusher.js +175 -0
- package/dist/webhook-pusher.js.map +1 -0
- package/dist/webhook-server.d.ts +70 -0
- package/dist/webhook-server.d.ts.map +1 -0
- package/dist/webhook-server.js +191 -0
- package/dist/webhook-server.js.map +1 -0
- package/openclaw.plugin.json +107 -0
- package/package.json +53 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F2A Task Guard
|
|
3
|
+
* 轻量级任务安全检查和评审
|
|
4
|
+
*/
|
|
5
|
+
import type { TaskRequest, TaskAnnouncement, ReputationEntry } from './types.js';
|
|
6
|
+
export interface TaskGuardRule {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
severity: 'info' | 'warn' | 'block';
|
|
12
|
+
check: (task: TaskRequest | TaskAnnouncement, context: TaskGuardContext) => TaskGuardResult;
|
|
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
|
+
*/
|
|
43
|
+
export interface TaskGuardContext {
|
|
44
|
+
/** 请求者的信誉信息(可选,新 peer 可能没有) */
|
|
45
|
+
requesterReputation?: ReputationEntry;
|
|
46
|
+
/** 请求者是否在白名单中 */
|
|
47
|
+
isWhitelisted: boolean;
|
|
48
|
+
/** 请求者是否在黑名单中 */
|
|
49
|
+
isBlacklisted: boolean;
|
|
50
|
+
/** 近期(1分钟内)的任务请求数量 */
|
|
51
|
+
recentTaskCount: number;
|
|
52
|
+
/** 任务守卫配置 */
|
|
53
|
+
config: TaskGuardConfig;
|
|
54
|
+
}
|
|
55
|
+
export interface TaskGuardConfig {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
requireConfirmationForDangerous: boolean;
|
|
58
|
+
maxTasksPerMinute: number;
|
|
59
|
+
blockedKeywords: string[];
|
|
60
|
+
dangerousPatterns: RegExp[];
|
|
61
|
+
minReputationForDangerous: number;
|
|
62
|
+
/** 持久化目录路径,用于存储 rate limiting 状态。不设置则不持久化 */
|
|
63
|
+
persistDir?: string;
|
|
64
|
+
/** 持久化保存间隔(毫秒),默认 30000 (30秒) */
|
|
65
|
+
persistIntervalMs?: number;
|
|
66
|
+
}
|
|
67
|
+
export interface TaskGuardResult {
|
|
68
|
+
passed: boolean;
|
|
69
|
+
severity: 'info' | 'warn' | 'block';
|
|
70
|
+
ruleId: string;
|
|
71
|
+
message: string;
|
|
72
|
+
details?: Record<string, unknown>;
|
|
73
|
+
}
|
|
74
|
+
export interface TaskGuardReport {
|
|
75
|
+
taskId: string;
|
|
76
|
+
passed: boolean;
|
|
77
|
+
results: TaskGuardResult[];
|
|
78
|
+
warnings: TaskGuardResult[];
|
|
79
|
+
blocks: TaskGuardResult[];
|
|
80
|
+
requiresConfirmation: boolean;
|
|
81
|
+
timestamp: number;
|
|
82
|
+
}
|
|
83
|
+
export declare const DEFAULT_TASK_GUARD_CONFIG: TaskGuardConfig;
|
|
84
|
+
export declare class TaskGuard {
|
|
85
|
+
private config;
|
|
86
|
+
private rules;
|
|
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;
|
|
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;
|
|
125
|
+
/**
|
|
126
|
+
* 检查任务
|
|
127
|
+
*/
|
|
128
|
+
check(task: TaskRequest | TaskAnnouncement, context?: Partial<TaskGuardContext>): TaskGuardReport;
|
|
129
|
+
/**
|
|
130
|
+
* 快速检查(只返回是否通过)
|
|
131
|
+
*/
|
|
132
|
+
quickCheck(task: TaskRequest | TaskAnnouncement, context?: Partial<TaskGuardContext>): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* 添加自定义规则
|
|
135
|
+
*/
|
|
136
|
+
addRule(rule: TaskGuardRule): void;
|
|
137
|
+
/**
|
|
138
|
+
* 启用/禁用规则
|
|
139
|
+
*/
|
|
140
|
+
setRuleEnabled(ruleId: string, enabled: boolean): void;
|
|
141
|
+
/**
|
|
142
|
+
* 更新配置
|
|
143
|
+
*/
|
|
144
|
+
updateConfig(config: Partial<TaskGuardConfig>): void;
|
|
145
|
+
private createDefaultRules;
|
|
146
|
+
private isDangerousTask;
|
|
147
|
+
private getRecentTaskCount;
|
|
148
|
+
private recordTask;
|
|
149
|
+
/**
|
|
150
|
+
* 条件触发清理:当条目数超过阈值或距上次清理超过间隔时执行
|
|
151
|
+
*/
|
|
152
|
+
private maybeCleanup;
|
|
153
|
+
/**
|
|
154
|
+
* 清理过期的 recentTasks 条目,防止内存泄漏
|
|
155
|
+
*/
|
|
156
|
+
private cleanupRecentTasks;
|
|
157
|
+
}
|
|
158
|
+
export declare const taskGuard: TaskGuard;
|
|
159
|
+
//# sourceMappingURL=task-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-guard.d.ts","sourceRoot":"","sources":["../src/task-guard.ts"],"names":[],"mappings":"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"}
|