@pwddd/skills-scanner 1.0.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.
Potentially problematic release.
This version of @pwddd/skills-scanner might be problematic. Click here for more details.
- package/README.md +392 -0
- package/index.ts +373 -0
- package/openclaw.plugin.json +60 -0
- package/package.json +49 -0
- package/skills/skills-scanner/SKILL.md +180 -0
- package/skills/skills-scanner/scan.py +373 -0
- package/src/commands.ts +277 -0
- package/src/config.ts +170 -0
- package/src/cron.ts +143 -0
- package/src/deps.ts +73 -0
- package/src/prompt-guidance.ts +25 -0
- package/src/report.ts +100 -0
- package/src/scanner.ts +50 -0
- package/src/state.ts +70 -0
- package/src/types.ts +48 -0
- package/src/watcher.ts +125 -0
package/README.md
ADDED
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
# Skills Scanner Plugin
|
|
2
|
+
|
|
3
|
+
OpenClaw Skills 安全扫描插件,用于检测 Skills 中的潜在安全威胁。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- 🔍 **自动扫描**: 监听 Skills 目录,自动扫描新安装的 Skill
|
|
8
|
+
- 📊 **定时日报**: 每天自动生成安全扫描报告
|
|
9
|
+
- 🛡️ **多种策略**: 支持 strict/balanced/permissive 三种扫描策略
|
|
10
|
+
- 🤖 **LLM 分析**: 可选的 LLM 语义分析
|
|
11
|
+
- 🔒 **自动隔离**: 检测到不安全的 Skill 自动隔离或删除
|
|
12
|
+
|
|
13
|
+
## 安装
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# 从本地安装(开发)
|
|
17
|
+
openclaw plugins install ./extensions/skills-scanner
|
|
18
|
+
|
|
19
|
+
# 从 npm 安装(发布后)
|
|
20
|
+
openclaw plugins install @openclaw/skills-scanner
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 配置
|
|
24
|
+
|
|
25
|
+
在 `~/.openclaw/openclaw.json` 或工作区配置中添加:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"plugins": {
|
|
30
|
+
"entries": {
|
|
31
|
+
"skills-scanner": {
|
|
32
|
+
"enabled": true,
|
|
33
|
+
"config": {
|
|
34
|
+
"apiUrl": "http://localhost:8000",
|
|
35
|
+
"scanDirs": ["~/.openclaw/skills", "~/.openclaw/workspace/skills"],
|
|
36
|
+
"behavioral": false,
|
|
37
|
+
"useLLM": false,
|
|
38
|
+
"policy": "balanced",
|
|
39
|
+
"preInstallScan": "on",
|
|
40
|
+
"onUnsafe": "quarantine"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 配置说明
|
|
49
|
+
|
|
50
|
+
- `apiUrl`: 扫描 API 服务地址(需要先启动 skill-scanner-api 服务)
|
|
51
|
+
- `scanDirs`: 要监控的 Skills 目录列表
|
|
52
|
+
- `behavioral`: 是否启用行为分析(深度扫描,较慢)
|
|
53
|
+
- `useLLM`: 是否使用 LLM 进行语义分析
|
|
54
|
+
- `policy`: 扫描策略
|
|
55
|
+
- `strict`: 严格模式,发现任何可疑行为都标记为不安全
|
|
56
|
+
- `balanced`: 平衡模式(推荐)
|
|
57
|
+
- `permissive`: 宽松模式,只标记明确的威胁
|
|
58
|
+
- `preInstallScan`: 是否在安装时自动扫描
|
|
59
|
+
- `on`: 启用(推荐)
|
|
60
|
+
- `off`: 禁用
|
|
61
|
+
- `onUnsafe`: 发现不安全 Skill 的处理方式
|
|
62
|
+
- `quarantine`: 移入隔离目录(推荐)
|
|
63
|
+
- `delete`: 直接删除
|
|
64
|
+
- `warn`: 仅警告,不处理
|
|
65
|
+
|
|
66
|
+
## 使用方法
|
|
67
|
+
|
|
68
|
+
### 聊天命令
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
/skills-scanner scan <路径> [选项] # 扫描 Skill
|
|
72
|
+
/skills-scanner status # 查看状态
|
|
73
|
+
/skills-scanner config [操作] # 配置管理
|
|
74
|
+
/skills-scanner cron [操作] # 定时任务管理
|
|
75
|
+
/skills-scanner help # 帮助信息
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### 扫描选项
|
|
79
|
+
|
|
80
|
+
- `--detailed`: 显示详细的安全发现
|
|
81
|
+
- `--behavioral`: 启用行为分析
|
|
82
|
+
- `--recursive`: 递归扫描子目录
|
|
83
|
+
- `--report`: 生成日报格式
|
|
84
|
+
|
|
85
|
+
#### 示例
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
/skills-scanner scan ~/.openclaw/skills/my-skill
|
|
89
|
+
/skills-scanner scan ~/.openclaw/skills --recursive
|
|
90
|
+
/skills-scanner scan ~/.openclaw/skills --report
|
|
91
|
+
/skills-scanner status
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### CLI 命令
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 扫描单个 Skill
|
|
98
|
+
openclaw skills-scan scan <path> [--detailed] [--behavioral]
|
|
99
|
+
|
|
100
|
+
# 批量扫描目录
|
|
101
|
+
openclaw skills-scan batch <directory> [--recursive] [--detailed]
|
|
102
|
+
|
|
103
|
+
# 生成日报
|
|
104
|
+
openclaw skills-scan report
|
|
105
|
+
|
|
106
|
+
# 检查 API 服务健康状态
|
|
107
|
+
openclaw skills-scan health
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 前置要求
|
|
111
|
+
|
|
112
|
+
### 1. 安装 uv(Python 包管理器)
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# macOS/Linux
|
|
116
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
117
|
+
|
|
118
|
+
# 或使用 Homebrew
|
|
119
|
+
brew install uv
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 2. 启动扫描 API 服务
|
|
123
|
+
|
|
124
|
+
插件需要连接到 skill-scanner-api 服务进行实际的安全扫描。
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 启动服务(假设你已经有这个服务)
|
|
128
|
+
skill-scanner-api
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
默认服务地址为 `http://localhost:8000`,可以在配置中修改。
|
|
132
|
+
|
|
133
|
+
## 工作流程
|
|
134
|
+
|
|
135
|
+
1. **插件启动**: 自动安装 Python 依赖(requests)
|
|
136
|
+
2. **文件监控**: 监听配置的 Skills 目录
|
|
137
|
+
3. **自动扫描**: 检测到新 Skill 时自动触发扫描
|
|
138
|
+
4. **结果处理**: 根据配置隔离/删除/警告不安全的 Skill
|
|
139
|
+
5. **定时日报**: 每天 08:00 生成安全报告
|
|
140
|
+
|
|
141
|
+
## 故障排除
|
|
142
|
+
|
|
143
|
+
### Python 依赖安装失败
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# 手动安装依赖
|
|
147
|
+
cd extensions/skills-scanner/skills/skills-scanner
|
|
148
|
+
uv venv .venv --python 3.10
|
|
149
|
+
uv pip install --python .venv/bin/python requests>=2.31.0
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### API 服务连接失败
|
|
153
|
+
|
|
154
|
+
1. 确保 skill-scanner-api 服务正在运行
|
|
155
|
+
2. 检查配置中的 `apiUrl` 是否正确
|
|
156
|
+
3. 运行健康检查:`openclaw skills-scan health`
|
|
157
|
+
|
|
158
|
+
### 定时任务未注册
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# 手动注册定时任务
|
|
162
|
+
/skills-scanner cron register
|
|
163
|
+
|
|
164
|
+
# 或使用 CLI
|
|
165
|
+
openclaw cron add \
|
|
166
|
+
--name "skills-daily-report" \
|
|
167
|
+
--cron "0 8 * * *" \
|
|
168
|
+
--tz "Asia/Shanghai" \
|
|
169
|
+
--session isolated \
|
|
170
|
+
--message "请执行 /skills-scanner scan --report 并把结果发送到此渠道" \
|
|
171
|
+
--announce
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 开发
|
|
175
|
+
|
|
176
|
+
### 目录结构
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
extensions/skills-scanner/
|
|
180
|
+
├── package.json # npm 包配置
|
|
181
|
+
├── openclaw.plugin.json # 插件元数据
|
|
182
|
+
├── README.md # 文档
|
|
183
|
+
├── index.ts # 插件入口
|
|
184
|
+
├── src/ # 源代码
|
|
185
|
+
│ ├── config.ts # 配置管理
|
|
186
|
+
│ ├── scanner.ts # 扫描逻辑
|
|
187
|
+
│ ├── watcher.ts # 文件监控
|
|
188
|
+
│ ├── cron.ts # 定时任务
|
|
189
|
+
│ ├── commands.ts # 命令处理
|
|
190
|
+
│ └── types.ts # 类型定义
|
|
191
|
+
└── skills/
|
|
192
|
+
└── skills-scanner/
|
|
193
|
+
├── scan.py # Python 扫描脚本
|
|
194
|
+
└── .venv/ # Python 虚拟环境(自动创建)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## 许可证
|
|
198
|
+
|
|
199
|
+
MIT
|
|
200
|
+
- `scanDirs`: 要监控的目录列表
|
|
201
|
+
- `behavioral`: 启用行为分析(更准确但较慢)
|
|
202
|
+
- `useLLM`: 启用 LLM 语义分析
|
|
203
|
+
- `policy`: 扫描策略 (`strict` / `balanced` / `permissive`)
|
|
204
|
+
- `preInstallScan`: 安装前扫描 (`on` / `off`)
|
|
205
|
+
- `onUnsafe`: 不安全时的处理 (`quarantine` / `delete` / `warn`)
|
|
206
|
+
- `injectSecurityGuidance`: 向 AI 系统提示词注入安全规则(默认 `true`)
|
|
207
|
+
|
|
208
|
+
## 🆕 AI 安全提示功能
|
|
209
|
+
|
|
210
|
+
当 `injectSecurityGuidance` 启用时(默认启用),插件会自动向 AI 的系统提示词注入安全规则,要求 AI 在用户请求安装 Skills 时先进行扫描。
|
|
211
|
+
|
|
212
|
+
### 效果示例
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
用户: 帮我安装这个 Skill
|
|
216
|
+
|
|
217
|
+
AI: 好的,让我先进行安全扫描...
|
|
218
|
+
[运行 /skills-scanner scan ~/Downloads/awesome-skill]
|
|
219
|
+
|
|
220
|
+
✅ 扫描完成:awesome-skill 安全检查通过
|
|
221
|
+
未检测到安全威胁,可以安全安装。
|
|
222
|
+
|
|
223
|
+
现在为您安装...
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### 禁用方法
|
|
227
|
+
|
|
228
|
+
如果不需要这个功能,可以通过以下方式禁用:
|
|
229
|
+
|
|
230
|
+
**方法 1:通过配置禁用**
|
|
231
|
+
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"plugins": {
|
|
235
|
+
"entries": {
|
|
236
|
+
"skills-scanner": {
|
|
237
|
+
"config": {
|
|
238
|
+
"injectSecurityGuidance": false
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**方法 2:通过 hook 控制禁用**
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"plugins": {
|
|
251
|
+
"entries": {
|
|
252
|
+
"skills-scanner": {
|
|
253
|
+
"hooks": {
|
|
254
|
+
"allowPromptInjection": false
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## 使用方法
|
|
263
|
+
|
|
264
|
+
### 聊天命令
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# 扫描单个 Skill
|
|
268
|
+
/skills-scanner scan ~/my-skill
|
|
269
|
+
|
|
270
|
+
# 详细扫描
|
|
271
|
+
/skills-scanner scan ~/my-skill --detailed
|
|
272
|
+
|
|
273
|
+
# 深度扫描(行为分析)
|
|
274
|
+
/skills-scanner scan ~/my-skill --detailed --behavioral
|
|
275
|
+
|
|
276
|
+
# 批量扫描
|
|
277
|
+
/skills-scanner scan ~/.openclaw/skills --recursive
|
|
278
|
+
|
|
279
|
+
# 生成日报
|
|
280
|
+
/skills-scanner scan ~/.openclaw/skills --report
|
|
281
|
+
|
|
282
|
+
# 查看状态
|
|
283
|
+
/skills-scanner status
|
|
284
|
+
|
|
285
|
+
# 配置管理
|
|
286
|
+
/skills-scanner config show
|
|
287
|
+
/skills-scanner config reset
|
|
288
|
+
|
|
289
|
+
# 定时任务管理
|
|
290
|
+
/skills-scanner cron register
|
|
291
|
+
/skills-scanner cron status
|
|
292
|
+
/skills-scanner cron unregister
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### CLI 命令
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# 扫描单个 Skill
|
|
299
|
+
openclaw skills-scanner scan ~/my-skill
|
|
300
|
+
|
|
301
|
+
# 批量扫描
|
|
302
|
+
openclaw skills-scanner batch ~/.openclaw/skills --recursive
|
|
303
|
+
|
|
304
|
+
# 生成日报
|
|
305
|
+
openclaw skills-scanner report
|
|
306
|
+
|
|
307
|
+
# 健康检查
|
|
308
|
+
openclaw skills-scanner health
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## 扫描方式
|
|
312
|
+
|
|
313
|
+
插件支持 7 种扫描方式:
|
|
314
|
+
|
|
315
|
+
1. **手动单个扫描**(聊天命令):用户主动扫描单个 Skill
|
|
316
|
+
2. **手动批量扫描**(聊天命令):用户主动扫描多个 Skills
|
|
317
|
+
3. **CLI 命令扫描**:通过命令行工具扫描
|
|
318
|
+
4. **自动文件监控**:实时监控目录,自动扫描新 Skill
|
|
319
|
+
5. **定时任务扫描**:每天 08:00 自动生成日报
|
|
320
|
+
6. **RPC 方法扫描**:供其他插件或程序调用
|
|
321
|
+
7. **AI 主动扫描**:AI 在用户请求安装 Skills 时自动扫描(需启用 `injectSecurityGuidance`)
|
|
322
|
+
|
|
323
|
+
## 依赖要求
|
|
324
|
+
|
|
325
|
+
- Python 3.10+
|
|
326
|
+
- uv(Python 包管理器)
|
|
327
|
+
- skill-scanner-api 服务(需要单独运行)
|
|
328
|
+
|
|
329
|
+
### 安装依赖
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# macOS
|
|
333
|
+
brew install uv
|
|
334
|
+
|
|
335
|
+
# Linux
|
|
336
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
337
|
+
|
|
338
|
+
# 启动 API 服务
|
|
339
|
+
skill-scanner-api
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## 故障排查
|
|
343
|
+
|
|
344
|
+
### Python 依赖未就绪
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
# 手动安装依赖
|
|
348
|
+
cd extensions/skills-scanner/skills/skills-scanner
|
|
349
|
+
uv venv .venv --python 3.10
|
|
350
|
+
uv pip install --python .venv/bin/python requests
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### API 服务连接失败
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
# 检查 API 服务状态
|
|
357
|
+
openclaw skills-scanner health
|
|
358
|
+
|
|
359
|
+
# 确保 API 服务正在运行
|
|
360
|
+
skill-scanner-api
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## 开发
|
|
364
|
+
|
|
365
|
+
### 项目结构
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
extensions/skills-scanner/
|
|
369
|
+
├── index.ts # 插件入口
|
|
370
|
+
├── package.json
|
|
371
|
+
├── openclaw.plugin.json # 插件配置
|
|
372
|
+
├── README.md
|
|
373
|
+
├── src/
|
|
374
|
+
│ ├── commands.ts # 命令处理器
|
|
375
|
+
│ ├── config.ts # 配置管理
|
|
376
|
+
│ ├── cron.ts # 定时任务
|
|
377
|
+
│ ├── deps.ts # 依赖管理
|
|
378
|
+
│ ├── prompt-guidance.ts # 系统提示词注入 🆕
|
|
379
|
+
│ ├── report.ts # 报告生成
|
|
380
|
+
│ ├── scanner.ts # 扫描执行
|
|
381
|
+
│ ├── state.ts # 状态管理
|
|
382
|
+
│ ├── types.ts # 类型定义
|
|
383
|
+
│ └── watcher.ts # 文件监控
|
|
384
|
+
└── skills/
|
|
385
|
+
└── skills-scanner/
|
|
386
|
+
├── SKILL.md # Skill 文档
|
|
387
|
+
└── scan.py # Python 扫描脚本
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## 许可证
|
|
391
|
+
|
|
392
|
+
MIT
|