@pwddd/skills-scanner 1.0.0-beta.1
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 +255 -0
- package/index.ts +647 -0
- package/openclaw.plugin.json +122 -0
- package/package.json +64 -0
- package/skills/skills-scanner/SKILL.md +281 -0
- package/src/api-client.ts +245 -0
- package/src/before-install-hook.ts +241 -0
- package/src/cache.ts +138 -0
- package/src/commands.ts +289 -0
- package/src/config-validator.ts +110 -0
- package/src/config.ts +230 -0
- package/src/cron-manager.ts +210 -0
- package/src/debug.ts +40 -0
- package/src/error-handler.ts +103 -0
- package/src/high-risk-operation-guard.ts +62 -0
- package/src/metrics.ts +140 -0
- package/src/prompt-guidance.ts +80 -0
- package/src/prompt-injection-guard.ts +56 -0
- package/src/rate-limiter.ts +102 -0
- package/src/report.ts +128 -0
- package/src/scanner.ts +230 -0
- package/src/state.ts +136 -0
- package/src/structured-logger.ts +97 -0
- package/src/types.ts +76 -0
- package/src/watcher.ts +178 -0
package/README.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Skills Scanner Plugin
|
|
2
|
+
|
|
3
|
+
OpenClaw Skills 安全扫描插件,用于检测 Skills 中的潜在安全威胁。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- 🔍 **自动扫描**: 监听 Skills 目录,自动扫描新安装的 Skill
|
|
8
|
+
- 🛡️ **安装前拦截**: 使用 before_install hook 在安装前强制拦截不安全的 Skills
|
|
9
|
+
- 🌐 **ClawHub 扫描**: 直接扫描 ClawHub 上的 Skill,无需手动下载
|
|
10
|
+
- 📊 **定时周报**: 每周一自动生成安全扫描报告
|
|
11
|
+
- 🛡️ **多种策略**: 支持 strict/balanced/permissive 三种扫描策略
|
|
12
|
+
- 🤖 **LLM 分析**: 可选的 LLM 语义分析
|
|
13
|
+
- 🔒 **自动隔离**: 检测到不安全的 Skill 自动隔离或删除
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 从本地安装(开发)
|
|
19
|
+
openclaw plugins install ./skills-scanner
|
|
20
|
+
|
|
21
|
+
# 从 npm 安装(发布后)
|
|
22
|
+
openclaw plugins install @pwddd/skills-scanner
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 配置
|
|
26
|
+
|
|
27
|
+
在 `~/.openclaw/openclaw.json` 或工作区配置中添加:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"plugins": {
|
|
32
|
+
"entries": {
|
|
33
|
+
"skills-scanner": {
|
|
34
|
+
"enabled": true,
|
|
35
|
+
"config": {
|
|
36
|
+
"apiUrl": "https://110.vemic.com/skills-scanner",
|
|
37
|
+
"scanDirs": ["~/.openclaw/skills", "~/.openclaw/workspace/skills"],
|
|
38
|
+
"behavioral": false,
|
|
39
|
+
"useLLM": false,
|
|
40
|
+
"policy": "balanced",
|
|
41
|
+
"preInstallScan": "on",
|
|
42
|
+
"onUnsafe": "warn",
|
|
43
|
+
"enableBeforeInstallHook": true
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 配置说明
|
|
52
|
+
|
|
53
|
+
- `apiUrl`: 扫描 API 服务地址
|
|
54
|
+
- `scanDirs`: 要监控的 Skills 目录列表
|
|
55
|
+
- `behavioral`: 是否启用行为分析(深度扫描,较慢)
|
|
56
|
+
- `useLLM`: 是否使用 LLM 进行语义分析
|
|
57
|
+
- `policy`: 扫描策略
|
|
58
|
+
- `strict`: 严格模式,发现任何可疑行为都标记为不安全
|
|
59
|
+
- `balanced`: 平衡模式(推荐)
|
|
60
|
+
- `permissive`: 宽松模式,只标记明确的威胁
|
|
61
|
+
- `preInstallScan`: 是否启用文件监控(安装后扫描)
|
|
62
|
+
- `on`: 启用
|
|
63
|
+
- `off`: 禁用
|
|
64
|
+
- `onUnsafe`: 发现不安全 Skill 的处理方式
|
|
65
|
+
- `warn`: 仅警告,不处理(推荐)
|
|
66
|
+
- `quarantine`: 移入隔离目录
|
|
67
|
+
- `delete`: 直接删除
|
|
68
|
+
- `enableBeforeInstallHook`: 是否启用 before_install hook(安装前拦截)
|
|
69
|
+
- `true`: 启用(强烈推荐)
|
|
70
|
+
- `false`: 禁用
|
|
71
|
+
- `scanTimeoutMs`: 扫描超时时间(毫秒),默认 180000 (3分钟)
|
|
72
|
+
- `reportDir`: 自定义报告目录
|
|
73
|
+
- `quarantineDir`: 自定义隔离目录
|
|
74
|
+
|
|
75
|
+
### 高级功能
|
|
76
|
+
|
|
77
|
+
#### 配置热重载
|
|
78
|
+
|
|
79
|
+
插件支持配置热重载,修改配置后无需重启 Gateway:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# 修改配置文件
|
|
83
|
+
vim ~/.openclaw/config.json
|
|
84
|
+
|
|
85
|
+
# 重载配置
|
|
86
|
+
openclaw config reload
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
配置变更会自动:
|
|
90
|
+
- 更新 API URL
|
|
91
|
+
- 重启文件监控器(如果扫描目录变更)
|
|
92
|
+
- 应用新的扫描策略
|
|
93
|
+
|
|
94
|
+
#### 调试模式
|
|
95
|
+
|
|
96
|
+
启用调试模式可以查看详细的运行日志:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# 启用调试模式
|
|
100
|
+
export SKILLS_SCANNER_DEBUG=1
|
|
101
|
+
openclaw gateway start
|
|
102
|
+
|
|
103
|
+
# 或者一次性启用
|
|
104
|
+
SKILLS_SCANNER_DEBUG=1 openclaw gateway start
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
调试模式会输出:
|
|
108
|
+
- 完整的配置信息
|
|
109
|
+
- 详细的扫描过程
|
|
110
|
+
- API 请求和响应
|
|
111
|
+
- 文件监控事件
|
|
112
|
+
|
|
113
|
+
#### 健康检查端点
|
|
114
|
+
|
|
115
|
+
插件提供 HTTP 健康检查端点:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 通过 HTTP 访问
|
|
119
|
+
curl http://localhost:3000/health/skills-scanner
|
|
120
|
+
|
|
121
|
+
# 返回示例
|
|
122
|
+
{
|
|
123
|
+
"status": "healthy",
|
|
124
|
+
"plugin": {
|
|
125
|
+
"version": "1.0.0",
|
|
126
|
+
"id": "skills-scanner",
|
|
127
|
+
"name": "Skills Scanner"
|
|
128
|
+
},
|
|
129
|
+
"api": {
|
|
130
|
+
"url": "https://110.vemic.com/skills-scanner",
|
|
131
|
+
"status": "available"
|
|
132
|
+
},
|
|
133
|
+
"watcher": {
|
|
134
|
+
"enabled": true,
|
|
135
|
+
"running": true,
|
|
136
|
+
"directories": 2
|
|
137
|
+
},
|
|
138
|
+
"metrics": {
|
|
139
|
+
"totalScans": 42,
|
|
140
|
+
"successRate": "95.24%",
|
|
141
|
+
"averageDurationMs": 1234
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## 使用方法
|
|
147
|
+
|
|
148
|
+
### 聊天命令
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
/skills-scanner scan <路径> [选项] # 扫描 Skill
|
|
152
|
+
/skills-scanner scan clawhub <URL> [选项] # 扫描 ClawHub Skill
|
|
153
|
+
/skills-scanner health # 健康检查
|
|
154
|
+
/skills-scanner config [操作] # 配置管理
|
|
155
|
+
/skills-scanner cron [操作] # 定时任务管理
|
|
156
|
+
/skills-scanner help # 帮助信息
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### 扫描选项
|
|
160
|
+
|
|
161
|
+
- `--detailed`: 显示详细的安全发现
|
|
162
|
+
- `--behavioral`: 启用行为分析
|
|
163
|
+
- `--recursive`: 递归扫描子目录
|
|
164
|
+
- `--report`: 生成日报格式
|
|
165
|
+
|
|
166
|
+
#### 示例
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
/skills-scanner scan ~/.openclaw/skills/my-skill
|
|
170
|
+
/skills-scanner scan ~/.openclaw/skills --recursive
|
|
171
|
+
/skills-scanner scan ~/.openclaw/skills --report
|
|
172
|
+
/skills-scanner scan clawhub https://clawhub.ai/username/project
|
|
173
|
+
/skills-scanner scan clawhub https://clawhub.ai/Asleep123/caldav-calendar --detailed
|
|
174
|
+
/skills-scanner health
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### CLI 命令
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# 扫描单个 Skill
|
|
181
|
+
openclaw skills-scanner scan <path> [--detailed] [--behavioral]
|
|
182
|
+
|
|
183
|
+
# 扫描 ClawHub Skill
|
|
184
|
+
openclaw skills-scanner clawhub <url> [--detailed] [--behavioral]
|
|
185
|
+
|
|
186
|
+
# 批量扫描目录
|
|
187
|
+
openclaw skills-scanner batch <directory> [--recursive] [--detailed]
|
|
188
|
+
|
|
189
|
+
# 生成日报
|
|
190
|
+
openclaw skills-scanner report
|
|
191
|
+
|
|
192
|
+
# 检查 API 服务健康状态
|
|
193
|
+
openclaw skills-scanner health
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## 工作流程
|
|
197
|
+
|
|
198
|
+
1. **插件启动**: 自动初始化并连接 API 服务
|
|
199
|
+
2. **文件监控**: 监听配置的 Skills 目录
|
|
200
|
+
3. **自动扫描**: 检测到新 Skill 时自动触发扫描
|
|
201
|
+
4. **结果处理**: 根据配置隔离/删除/警告不安全的 Skill
|
|
202
|
+
5. **定时周报**: 每周一 12:05 自动生成安全报告
|
|
203
|
+
|
|
204
|
+
## 故障排除
|
|
205
|
+
|
|
206
|
+
### API 服务连接失败
|
|
207
|
+
|
|
208
|
+
1. 确保 API 服务地址配置正确
|
|
209
|
+
2. 运行健康检查:`/skills-scanner health`
|
|
210
|
+
3. 检查网络连接
|
|
211
|
+
|
|
212
|
+
### 定时任务未注册
|
|
213
|
+
|
|
214
|
+
定时任务会在插件启动时自动注册。如果需要手动注册:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# 手动注册定时任务
|
|
218
|
+
/skills-scanner cron setup
|
|
219
|
+
|
|
220
|
+
# 或使用 CLI
|
|
221
|
+
openclaw cron add \
|
|
222
|
+
--name "skills-weekly-report" \
|
|
223
|
+
--cron "5 12 * * 1" \
|
|
224
|
+
--tz "Asia/Shanghai" \
|
|
225
|
+
--session isolated \
|
|
226
|
+
--message "请执行 /skills-scanner scan --report 并把结果发送到此渠道" \
|
|
227
|
+
--announce
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## 开发
|
|
231
|
+
|
|
232
|
+
### 目录结构
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
extensions/skills-scanner/
|
|
236
|
+
├── package.json # npm 包配置
|
|
237
|
+
├── openclaw.plugin.json # 插件元数据
|
|
238
|
+
├── README.md # 文档
|
|
239
|
+
├── index.ts # 插件入口
|
|
240
|
+
├── src/ # 源代码
|
|
241
|
+
│ ├── api-client.ts # HTTP API 客户端
|
|
242
|
+
│ ├── config.ts # 配置管理
|
|
243
|
+
│ ├── scanner.ts # 扫描逻辑
|
|
244
|
+
│ ├── watcher.ts # 文件监控
|
|
245
|
+
│ ├── cron.ts # 定时任务
|
|
246
|
+
│ ├── commands.ts # 命令处理
|
|
247
|
+
│ └── types.ts # 类型定义
|
|
248
|
+
└── skills/
|
|
249
|
+
└── skills-scanner/
|
|
250
|
+
└── SKILL.md # Skill 文档
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## 许可证
|
|
254
|
+
|
|
255
|
+
MIT
|