@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 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