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