mcp-probe-kit 3.1.0 → 3.3.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.
Files changed (119) hide show
  1. package/README.md +15 -5
  2. package/build/index.js +5 -2
  3. package/build/lib/__tests__/memory-orchestration.unit.test.js +88 -0
  4. package/build/lib/__tests__/memory-payload.unit.test.js +35 -0
  5. package/build/lib/__tests__/quality-constraints.unit.test.d.ts +1 -0
  6. package/build/lib/__tests__/quality-constraints.unit.test.js +54 -0
  7. package/build/lib/__tests__/spec-validator.unit.test.d.ts +1 -0
  8. package/build/lib/__tests__/spec-validator.unit.test.js +147 -0
  9. package/build/lib/agents-md-template.js +32 -32
  10. package/build/lib/cursor-history-client.d.ts +54 -0
  11. package/build/lib/cursor-history-client.js +240 -0
  12. package/build/lib/memory-orchestration.js +29 -8
  13. package/build/lib/quality-constraints.d.ts +54 -0
  14. package/build/lib/quality-constraints.js +155 -0
  15. package/build/lib/skill-bridge.js +12 -12
  16. package/build/lib/spec-validator.d.ts +36 -0
  17. package/build/lib/spec-validator.js +116 -0
  18. package/build/lib/template-loader.js +223 -61
  19. package/build/lib/tool-annotations.d.ts +30 -0
  20. package/build/lib/tool-annotations.js +55 -0
  21. package/build/lib/toolset-manager.js +2 -0
  22. package/build/resources/ui-ux-data/guidelines/vercel-web-interface.json +1632 -1632
  23. package/build/resources/ui-ux-data/metadata.json +30 -30
  24. package/build/resources/ui-ux-data/shadcn/blocks.json +2541 -2541
  25. package/build/resources/ui-ux-data/shadcn/components.json +997 -997
  26. package/build/resources/ui-ux-data/themes/presets.json +483 -483
  27. package/build/schemas/index.d.ts +22 -0
  28. package/build/schemas/project-tools.d.ts +22 -0
  29. package/build/schemas/project-tools.js +23 -0
  30. package/build/tools/__tests__/cursor-history.unit.test.d.ts +1 -0
  31. package/build/tools/__tests__/cursor-history.unit.test.js +38 -0
  32. package/build/tools/check_spec.d.ts +7 -0
  33. package/build/tools/check_spec.js +81 -0
  34. package/build/tools/code_insight.js +41 -41
  35. package/build/tools/code_review.js +11 -4
  36. package/build/tools/cursor_read_conversation.d.ts +7 -0
  37. package/build/tools/cursor_read_conversation.js +36 -0
  38. package/build/tools/fix_bug.js +161 -161
  39. package/build/tools/gencommit.js +60 -60
  40. package/build/tools/index.d.ts +1 -0
  41. package/build/tools/index.js +1 -0
  42. package/build/tools/init_project_context.js +432 -432
  43. package/build/tools/start_bugfix.js +21 -10
  44. package/build/tools/start_feature.js +46 -11
  45. package/build/tools/start_product.js +1 -1
  46. package/build/tools/start_ui.js +44 -13
  47. package/build/tools/ui-ux-tools.d.ts +3 -0
  48. package/build/tools/ui-ux-tools.js +302 -290
  49. package/build/utils/__tests__/vercel-guidelines-sync.unit.test.js +12 -12
  50. package/build/utils/design-reasoning-engine.d.ts +2 -0
  51. package/build/utils/design-reasoning-engine.js +3 -0
  52. package/build/utils/themes-sync.js +8 -8
  53. package/package.json +4 -3
  54. package/build/resources/index.d.ts +0 -4
  55. package/build/resources/index.js +0 -4
  56. package/build/resources/tool-params-guide.d.ts +0 -571
  57. package/build/resources/tool-params-guide.js +0 -488
  58. package/build/tools/analyze_project.d.ts +0 -1
  59. package/build/tools/analyze_project.js +0 -527
  60. package/build/tools/check_deps.d.ts +0 -13
  61. package/build/tools/check_deps.js +0 -204
  62. package/build/tools/convert.d.ts +0 -13
  63. package/build/tools/convert.js +0 -599
  64. package/build/tools/css_order.d.ts +0 -13
  65. package/build/tools/css_order.js +0 -81
  66. package/build/tools/debug.d.ts +0 -13
  67. package/build/tools/debug.js +0 -131
  68. package/build/tools/design2code.d.ts +0 -20
  69. package/build/tools/design2code.js +0 -426
  70. package/build/tools/detect_shell.d.ts +0 -6
  71. package/build/tools/detect_shell.js +0 -151
  72. package/build/tools/explain.d.ts +0 -13
  73. package/build/tools/explain.js +0 -390
  74. package/build/tools/fix.d.ts +0 -13
  75. package/build/tools/fix.js +0 -303
  76. package/build/tools/gen_mock.d.ts +0 -22
  77. package/build/tools/gen_mock.js +0 -269
  78. package/build/tools/gen_skill.d.ts +0 -13
  79. package/build/tools/gen_skill.js +0 -560
  80. package/build/tools/genapi.d.ts +0 -13
  81. package/build/tools/genapi.js +0 -174
  82. package/build/tools/genchangelog.d.ts +0 -13
  83. package/build/tools/genchangelog.js +0 -250
  84. package/build/tools/gendoc.d.ts +0 -13
  85. package/build/tools/gendoc.js +0 -232
  86. package/build/tools/genpr.d.ts +0 -13
  87. package/build/tools/genpr.js +0 -194
  88. package/build/tools/genreadme.d.ts +0 -13
  89. package/build/tools/genreadme.js +0 -626
  90. package/build/tools/gensql.d.ts +0 -13
  91. package/build/tools/gensql.js +0 -320
  92. package/build/tools/genui.d.ts +0 -13
  93. package/build/tools/genui.js +0 -803
  94. package/build/tools/init_component_catalog.d.ts +0 -22
  95. package/build/tools/init_component_catalog.js +0 -809
  96. package/build/tools/init_setting.d.ts +0 -13
  97. package/build/tools/init_setting.js +0 -47
  98. package/build/tools/perf.d.ts +0 -13
  99. package/build/tools/perf.js +0 -409
  100. package/build/tools/render_ui.d.ts +0 -22
  101. package/build/tools/render_ui.js +0 -384
  102. package/build/tools/resolve_conflict.d.ts +0 -13
  103. package/build/tools/resolve_conflict.js +0 -349
  104. package/build/tools/security_scan.d.ts +0 -22
  105. package/build/tools/security_scan.js +0 -323
  106. package/build/tools/split.d.ts +0 -13
  107. package/build/tools/split.js +0 -599
  108. package/build/tools/start_api.d.ts +0 -13
  109. package/build/tools/start_api.js +0 -193
  110. package/build/tools/start_doc.d.ts +0 -13
  111. package/build/tools/start_doc.js +0 -207
  112. package/build/tools/start_refactor.d.ts +0 -13
  113. package/build/tools/start_refactor.js +0 -188
  114. package/build/tools/start_release.d.ts +0 -13
  115. package/build/tools/start_release.js +0 -167
  116. package/build/tools/start_review.d.ts +0 -13
  117. package/build/tools/start_review.js +0 -175
  118. /package/build/{utils/design-docs-generator.d.ts → lib/__tests__/memory-orchestration.unit.test.d.ts} +0 -0
  119. /package/build/{utils/design-docs-generator.js → lib/__tests__/memory-payload.unit.test.d.ts} +0 -0
@@ -1,349 +0,0 @@
1
- import { parseArgs, getString } from "../utils/parseArgs.js";
2
- // resolve_conflict 工具实现
3
- export async function resolveConflict(args) {
4
- try {
5
- // 智能参数解析,支持自然语言输入
6
- const parsedArgs = parseArgs(args, {
7
- defaultValues: {
8
- conflicts: "",
9
- },
10
- primaryField: "conflicts", // 纯文本输入默认映射到 conflicts 字段
11
- fieldAliases: {
12
- conflicts: ["conflict", "diff", "merge", "冲突", "合并冲突"],
13
- },
14
- });
15
- const conflicts = getString(parsedArgs.conflicts);
16
- const message = `请分析并解决以下 Git 冲突:
17
-
18
- ⚔️ **冲突内容**:
19
- ${conflicts || "请提供 git diff 或冲突文件内容"}
20
-
21
- ---
22
-
23
- ## Git 冲突解决流程
24
-
25
- ### 第一步:识别冲突
26
-
27
- 执行以下命令查看冲突:
28
- \`\`\`bash
29
- # 查看冲突文件列表
30
- git status
31
-
32
- # 查看具体冲突
33
- git diff
34
-
35
- # 或查看单个文件冲突
36
- git diff --ours --theirs filename
37
- \`\`\`
38
-
39
- ### 第二步:理解冲突标记
40
-
41
- **冲突格式:**
42
- \`\`\`
43
- <<<<<<< HEAD (当前分支)
44
- 你的修改
45
- =======
46
- 他人的修改
47
- >>>>>>> branch-name (合并的分支)
48
- \`\`\`
49
-
50
- **示例冲突:**
51
- \`\`\`javascript
52
- function calculateTotal(items) {
53
- <<<<<<< HEAD
54
- // 你的修改:添加了折扣
55
- const subtotal = items.reduce((sum, item) => sum + item.price, 0);
56
- return subtotal * 0.9; // 10% 折扣
57
- =======
58
- // 他人的修改:添加了税费
59
- const subtotal = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
60
- return subtotal * 1.1; // 10% 税费
61
- >>>>>>> feature/add-tax
62
- }
63
- \`\`\`
64
-
65
- ---
66
-
67
- ## 冲突分析
68
-
69
- ### 🔍 冲突类型识别
70
-
71
- **1️⃣ 简单冲突(二选一)**
72
- - 两个分支修改了同一行
73
- - 通常选择其中一个版本
74
-
75
- **2️⃣ 复杂冲突(需要合并)**
76
- - 两个分支都添加了有用的功能
77
- - 需要整合双方的修改
78
-
79
- **3️⃣ 语义冲突**
80
- - 语法上没冲突,但逻辑上不兼容
81
- - 需要重新设计
82
-
83
- **4️⃣ 结构冲突**
84
- - 文件被移动或删除
85
- - 需要决定文件的最终状态
86
-
87
- ---
88
-
89
- ## 解决策略
90
-
91
- ### 策略 1:保留当前分支(ours)
92
- \`\`\`bash
93
- git checkout --ours filename
94
- git add filename
95
- \`\`\`
96
-
97
- ### 策略 2:保留对方分支(theirs)
98
- \`\`\`bash
99
- git checkout --theirs filename
100
- git add filename
101
- \`\`\`
102
-
103
- ### 策略 3:手动合并(推荐)
104
-
105
- **步骤:**
106
- 1. 分析双方的修改意图
107
- 2. 整合有价值的修改
108
- 3. 删除冲突标记
109
- 4. 测试合并后的代码
110
-
111
- **合并示例:**
112
- \`\`\`javascript
113
- // 原始冲突
114
- function calculateTotal(items) {
115
- <<<<<<< HEAD
116
- const subtotal = items.reduce((sum, item) => sum + item.price, 0);
117
- return subtotal * 0.9; // 10% 折扣
118
- =======
119
- const subtotal = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
120
- return subtotal * 1.1; // 10% 税费
121
- >>>>>>> feature/add-tax
122
- }
123
-
124
- // ✅ 合并后(整合双方修改)
125
- function calculateTotal(items, { discount = 0, taxRate = 0.1 } = {}) {
126
- // 整合了数量计算(theirs)和参数化设计(改进)
127
- const subtotal = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
128
- const afterDiscount = subtotal * (1 - discount);
129
- return afterDiscount * (1 + taxRate);
130
- }
131
- \`\`\`
132
-
133
- ---
134
-
135
- ## 常见冲突场景
136
-
137
- ### 场景 1:Import 语句冲突
138
- \`\`\`typescript
139
- <<<<<<< HEAD
140
- import { Button, Input } from './components';
141
- import { api } from './services';
142
- =======
143
- import { Button, Select } from './components';
144
- import { fetchData } from './utils';
145
- >>>>>>> feature/add-select
146
-
147
- // ✅ 合并后
148
- import { Button, Input, Select } from './components';
149
- import { api } from './services';
150
- import { fetchData } from './utils';
151
- \`\`\`
152
-
153
- ### 场景 2:配置文件冲突
154
- \`\`\`json
155
- <<<<<<< HEAD
156
- {
157
- "name": "my-app",
158
- "version": "1.2.0",
159
- "scripts": {
160
- "dev": "vite",
161
- "build": "vite build"
162
- }
163
- }
164
- =======
165
- {
166
- "name": "my-app",
167
- "version": "1.1.0",
168
- "scripts": {
169
- "dev": "vite",
170
- "build": "vite build",
171
- "test": "jest"
172
- }
173
- }
174
- >>>>>>> feature/add-tests
175
-
176
- // ✅ 合并后(保留最新版本号和所有脚本)
177
- {
178
- "name": "my-app",
179
- "version": "1.2.0",
180
- "scripts": {
181
- "dev": "vite",
182
- "build": "vite build",
183
- "test": "jest"
184
- }
185
- }
186
- \`\`\`
187
-
188
- ### 场景 3:函数重构冲突
189
- \`\`\`typescript
190
- <<<<<<< HEAD
191
- // 你将同步改为异步
192
- async function getUserData(id) {
193
- const response = await fetch(\`/api/users/\${id}\`);
194
- return response.json();
195
- }
196
- =======
197
- // 他人添加了缓存
198
- function getUserData(id) {
199
- if (cache.has(id)) {
200
- return cache.get(id);
201
- }
202
- const data = fetchUser(id);
203
- cache.set(id, data);
204
- return data;
205
- }
206
- >>>>>>> feature/add-cache
207
-
208
- // ✅ 合并后(异步 + 缓存)
209
- async function getUserData(id) {
210
- if (cache.has(id)) {
211
- return cache.get(id);
212
- }
213
- const response = await fetch(\`/api/users/\${id}\`);
214
- const data = await response.json();
215
- cache.set(id, data);
216
- return data;
217
- }
218
- \`\`\`
219
-
220
- ---
221
-
222
- ## 解决步骤
223
-
224
- ### Step 1: 备份
225
- \`\`\`bash
226
- # 创建备份分支
227
- git branch backup-before-merge
228
- \`\`\`
229
-
230
- ### Step 2: 分析冲突
231
- \`\`\`bash
232
- # 查看冲突统计
233
- git diff --stat
234
-
235
- # 使用可视化工具
236
- git mergetool
237
- \`\`\`
238
-
239
- ### Step 3: 解决冲突
240
- 1. 打开冲突文件
241
- 2. 分析双方修改
242
- 3. 手动合并代码
243
- 4. 删除冲突标记(<<<, ===, >>>)
244
-
245
- ### Step 4: 测试
246
- \`\`\`bash
247
- # 运行测试
248
- npm test
249
-
250
- # 运行 linter
251
- npm run lint
252
-
253
- # 构建检查
254
- npm run build
255
- \`\`\`
256
-
257
- ### Step 5: 提交
258
- \`\`\`bash
259
- # 标记冲突已解决
260
- git add .
261
-
262
- # 完成合并
263
- git commit
264
-
265
- # Git 会自动生成合并消息,或自定义:
266
- git commit -m "chore: 解决 feature/xxx 合并冲突
267
-
268
- - 整合了折扣和税费计算
269
- - 保留了所有新增功能
270
- - 所有测试通过"
271
- \`\`\`
272
-
273
- ---
274
-
275
- ## 预防冲突
276
-
277
- ### 1️⃣ 频繁同步
278
- \`\`\`bash
279
- # 每天同步主分支
280
- git fetch origin
281
- git rebase origin/main
282
- \`\`\`
283
-
284
- ### 2️⃣ 小步提交
285
- - 提交粒度要小
286
- - 功能尽量独立
287
- - 避免大范围重构
288
-
289
- ### 3️⃣ 代码审查
290
- - PR 及时 Review
291
- - 避免长期未合并的分支
292
-
293
- ### 4️⃣ 使用工具
294
- - VSCode Git Lens
295
- - GitKraken
296
- - Sourcetree
297
-
298
- ---
299
-
300
- ## 复杂冲突处理
301
-
302
- ### 使用 Git Rerere(重用已记录的解决方案)
303
- \`\`\`bash
304
- # 启用 rerere
305
- git config --global rerere.enabled true
306
-
307
- # Git 会记住你的冲突解决方式
308
- # 下次遇到相同冲突时自动应用
309
- \`\`\`
310
-
311
- ### 使用三路合并工具
312
- \`\`\`bash
313
- # 配置 VSCode 作为合并工具
314
- git config --global merge.tool vscode
315
- git config --global mergetool.vscode.cmd 'code --wait $MERGED'
316
-
317
- # 使用
318
- git mergetool
319
- \`\`\`
320
-
321
- ---
322
-
323
- 现在请分析冲突内容,提供:
324
- 1. 冲突原因分析
325
- 2. 双方修改意图
326
- 3. 推荐的合并方案
327
- 4. 完整的解决后代码`;
328
- return {
329
- content: [
330
- {
331
- type: "text",
332
- text: message,
333
- },
334
- ],
335
- };
336
- }
337
- catch (error) {
338
- const errorMessage = error instanceof Error ? error.message : String(error);
339
- return {
340
- content: [
341
- {
342
- type: "text",
343
- text: `❌ 冲突解决失败: ${errorMessage}`,
344
- },
345
- ],
346
- isError: true,
347
- };
348
- }
349
- }
@@ -1,22 +0,0 @@
1
- /**
2
- * security_scan 工具
3
- *
4
- * 功能:代码安全扫描,检测常见漏洞和不安全编码实践
5
- * 模式:指令生成器模式 - 返回安全检查指南,由 AI 执行实际分析
6
- */
7
- /**
8
- * security_scan 工具实现
9
- */
10
- export declare function securityScan(args: any): Promise<{
11
- content: {
12
- type: string;
13
- text: string;
14
- }[];
15
- isError?: undefined;
16
- } | {
17
- content: {
18
- type: string;
19
- text: string;
20
- }[];
21
- isError: boolean;
22
- }>;
@@ -1,323 +0,0 @@
1
- /**
2
- * security_scan 工具
3
- *
4
- * 功能:代码安全扫描,检测常见漏洞和不安全编码实践
5
- * 模式:指令生成器模式 - 返回安全检查指南,由 AI 执行实际分析
6
- */
7
- const PROMPT_TEMPLATE = `# 安全扫描指南
8
-
9
- ## 🎯 扫描目标
10
-
11
- **扫描类型**: {scan_type}
12
- **编程语言**: {language}
13
-
14
- **待扫描代码**:
15
- \`\`\`{language}
16
- {code}
17
- \`\`\`
18
-
19
- ---
20
-
21
- ## 📋 安全检查清单
22
-
23
- ### 1. 注入类漏洞 (Injection)
24
-
25
- #### 1.1 SQL 注入 (CWE-89)
26
- - [ ] 检查是否使用字符串拼接构建 SQL
27
- - [ ] 检查是否使用参数化查询/预编译语句
28
- - [ ] 检查 ORM 是否正确使用
29
-
30
- **危险模式**:
31
- \`\`\`
32
- // ❌ 危险
33
- query = "SELECT * FROM users WHERE id = " + userId
34
- db.query(\`SELECT * FROM users WHERE name = '\${name}'\`)
35
-
36
- // ✅ 安全
37
- query = "SELECT * FROM users WHERE id = ?"
38
- db.query("SELECT * FROM users WHERE name = $1", [name])
39
- \`\`\`
40
-
41
- #### 1.2 XSS 跨站脚本 (CWE-79)
42
- - [ ] 检查用户输入是否直接输出到 HTML
43
- - [ ] 检查是否使用 innerHTML/dangerouslySetInnerHTML
44
- - [ ] 检查是否正确转义特殊字符
45
-
46
- **危险模式**:
47
- \`\`\`
48
- // ❌ 危险
49
- element.innerHTML = userInput
50
- <div dangerouslySetInnerHTML={{__html: userContent}} />
51
-
52
- // ✅ 安全
53
- element.textContent = userInput
54
- 使用 DOMPurify 等库清理 HTML
55
- \`\`\`
56
-
57
- #### 1.3 命令注入 (CWE-78)
58
- - [ ] 检查 exec/spawn/system 是否拼接用户输入
59
- - [ ] 检查是否使用白名单验证
60
-
61
- **危险模式**:
62
- \`\`\`
63
- // ❌ 危险
64
- exec("ls " + userPath)
65
- child_process.exec(\`git clone \${repoUrl}\`)
66
-
67
- // ✅ 安全
68
- execFile("ls", [userPath])
69
- 使用白名单验证输入
70
- \`\`\`
71
-
72
- #### 1.4 路径遍历 (CWE-22)
73
- - [ ] 检查文件路径是否包含用户输入
74
- - [ ] 检查是否验证路径在允许范围内
75
-
76
- ---
77
-
78
- ### 2. 认证授权问题 (Authentication & Authorization)
79
-
80
- #### 2.1 硬编码凭证 (CWE-798)
81
- - [ ] 搜索: password, secret, key, token, api_key
82
- - [ ] 检查配置文件中的明文密码
83
- - [ ] 检查注释中的凭证信息
84
-
85
- **危险模式**:
86
- \`\`\`
87
- // ❌ 危险
88
- const password = "admin123"
89
- const apiKey = "sk-xxxxxxxxxxxx"
90
- // TODO: 临时密码 test123
91
-
92
- // ✅ 安全
93
- const password = process.env.DB_PASSWORD
94
- const apiKey = config.get("apiKey")
95
- \`\`\`
96
-
97
- #### 2.2 弱认证 (CWE-287)
98
- - [ ] 检查密码强度验证
99
- - [ ] 检查是否有暴力破解防护
100
- - [ ] 检查 Session 管理
101
-
102
- #### 2.3 权限检查缺失 (CWE-862)
103
- - [ ] 检查敏感操作是否验证权限
104
- - [ ] 检查是否存在越权访问风险
105
-
106
- ---
107
-
108
- ### 3. 加密安全问题 (Cryptography)
109
-
110
- #### 3.1 弱哈希算法 (CWE-328)
111
- - [ ] 检查是否使用 MD5/SHA1 存储密码
112
- - [ ] 检查是否使用适当的密码哈希(bcrypt, argon2)
113
-
114
- **危险模式**:
115
- \`\`\`
116
- // ❌ 危险
117
- crypto.createHash('md5').update(password)
118
- crypto.createHash('sha1').update(password)
119
-
120
- // ✅ 安全
121
- bcrypt.hash(password, saltRounds)
122
- argon2.hash(password)
123
- \`\`\`
124
-
125
- #### 3.2 不安全随机数 (CWE-330)
126
- - [ ] 检查安全相关场景是否使用 Math.random()
127
- - [ ] 检查是否使用加密安全的随机数生成器
128
-
129
- **危险模式**:
130
- \`\`\`
131
- // ❌ 危险(用于安全场景)
132
- const token = Math.random().toString(36)
133
-
134
- // ✅ 安全
135
- const token = crypto.randomBytes(32).toString('hex')
136
- \`\`\`
137
-
138
- #### 3.3 弱加密算法 (CWE-327)
139
- - [ ] 检查是否使用 DES/3DES/RC4
140
- - [ ] 检查 AES 是否使用安全模式(GCM)
141
-
142
- ---
143
-
144
- ### 4. 敏感数据泄露 (Sensitive Data Exposure)
145
-
146
- #### 4.1 日志泄露 (CWE-532)
147
- - [ ] 检查日志是否包含密码、token、个人信息
148
- - [ ] 检查错误日志是否泄露敏感信息
149
-
150
- **危险模式**:
151
- \`\`\`
152
- // ❌ 危险
153
- console.log("User login:", { username, password })
154
- logger.info("API call with token:", apiToken)
155
-
156
- // ✅ 安全
157
- console.log("User login:", { username, password: "***" })
158
- logger.info("API call with token:", maskToken(apiToken))
159
- \`\`\`
160
-
161
- #### 4.2 错误信息泄露 (CWE-209)
162
- - [ ] 检查是否向用户返回详细错误信息
163
- - [ ] 检查是否暴露堆栈跟踪
164
-
165
- #### 4.3 注释中的敏感信息
166
- - [ ] 检查注释中是否包含密码、密钥
167
- - [ ] 检查 TODO/FIXME 中的敏感信息
168
-
169
- ---
170
-
171
- ### 5. 其他安全问题
172
-
173
- #### 5.1 不安全的依赖
174
- - [ ] 检查是否使用已知漏洞的依赖版本
175
-
176
- #### 5.2 CORS 配置
177
- - [ ] 检查是否使用 Access-Control-Allow-Origin: *
178
-
179
- #### 5.3 不安全的反序列化 (CWE-502)
180
- - [ ] 检查是否反序列化不可信数据
181
-
182
- ---
183
-
184
- ## 📊 报告模板
185
-
186
- ### 漏洞摘要
187
-
188
- | 严重程度 | 数量 | 说明 |
189
- |----------|------|------|
190
- | 🔴 Critical | 0 | 需立即修复 |
191
- | 🟠 High | 0 | 尽快修复 |
192
- | 🟡 Medium | 0 | 计划修复 |
193
- | 🔵 Low | 0 | 建议修复 |
194
- | ⚪ Info | 0 | 仅供参考 |
195
-
196
- ### 漏洞详情
197
-
198
- #### [漏洞编号] 漏洞名称
199
-
200
- | 属性 | 值 |
201
- |------|-----|
202
- | 严重程度 | 🔴 Critical / 🟠 High / 🟡 Medium / 🔵 Low |
203
- | CWE | CWE-XXX |
204
- | 位置 | 第 X 行 |
205
- | 置信度 | 高 / 中 / 低 |
206
-
207
- **问题代码**:
208
- \`\`\`
209
- [问题代码片段]
210
- \`\`\`
211
-
212
- **问题描述**: [描述安全风险]
213
-
214
- **修复建议**:
215
- \`\`\`
216
- [修复后的代码]
217
- \`\`\`
218
-
219
- ---
220
-
221
- ### 安全最佳实践建议
222
-
223
- 1. **输入验证**: 对所有用户输入进行验证和清理
224
- 2. **输出编码**: 根据上下文正确编码输出
225
- 3. **参数化查询**: 使用参数化查询防止注入
226
- 4. **最小权限**: 遵循最小权限原则
227
- 5. **安全配置**: 使用安全的默认配置
228
- 6. **依赖管理**: 定期更新依赖,修复已知漏洞
229
- 7. **日志安全**: 不记录敏感信息
230
- 8. **错误处理**: 不向用户暴露内部错误详情
231
-
232
- ---
233
-
234
- ## 📤 输出格式要求
235
-
236
- 请严格按以下 JSON 格式输出扫描结果:
237
-
238
- \`\`\`json
239
- {
240
- "scan_summary": {
241
- "total_issues": 5,
242
- "critical": 1,
243
- "high": 2,
244
- "medium": 1,
245
- "low": 1
246
- },
247
- "findings": [
248
- {
249
- "severity": "critical|high|medium|low|info",
250
- "type": "漏洞类型(如 SQL Injection)",
251
- "cwe": "CWE-89",
252
- "location": { "file": "文件路径", "line": 42 },
253
- "vulnerable_code": "问题代码片段",
254
- "exploit_scenario": "攻击场景描述",
255
- "fix": "修复建议",
256
- "fix_example": "修复代码示例"
257
- }
258
- ],
259
- "recommendations": ["安全最佳实践建议1", "建议2"]
260
- }
261
- \`\`\`
262
-
263
- ## ⚠️ 边界约束
264
-
265
- - ❌ 仅分析代码,不执行任何操作
266
- - ❌ 不做法律/归因结论
267
- - ❌ 不保证发现所有漏洞(静态分析有局限性)
268
- - ✅ 输出结构化风险清单和修复建议
269
-
270
- ---
271
-
272
- *指南版本: 1.0.0*
273
- *工具: MCP Probe Kit - security_scan*
274
- `;
275
- import { parseArgs, getString } from "../utils/parseArgs.js";
276
- /**
277
- * security_scan 工具实现
278
- */
279
- export async function securityScan(args) {
280
- try {
281
- // 智能参数解析,支持自然语言输入
282
- const parsedArgs = parseArgs(args, {
283
- defaultValues: {
284
- code: "",
285
- language: "auto",
286
- scan_type: "all",
287
- },
288
- primaryField: "code", // 纯文本输入默认映射到 code 字段
289
- fieldAliases: {
290
- code: ["source", "src", "代码", "content"],
291
- language: ["lang", "语言", "编程语言"],
292
- scan_type: ["type", "category", "类型", "扫描类型"],
293
- },
294
- });
295
- const code = getString(parsedArgs.code);
296
- const language = getString(parsedArgs.language) || "auto";
297
- const scanType = getString(parsedArgs.scan_type) || "all";
298
- if (!code) {
299
- throw new Error("缺少必填参数: code(需要扫描的代码)");
300
- }
301
- const scanTypeDesc = {
302
- all: "全面扫描(注入、认证、加密、敏感数据)",
303
- injection: "注入类漏洞(SQL注入、XSS、命令注入)",
304
- auth: "认证授权问题",
305
- crypto: "加密安全问题",
306
- sensitive_data: "敏感数据泄露",
307
- };
308
- const guide = PROMPT_TEMPLATE
309
- .replace(/{code}/g, code)
310
- .replace(/{language}/g, language)
311
- .replace(/{scan_type}/g, scanTypeDesc[scanType] || scanType);
312
- return {
313
- content: [{ type: "text", text: guide }],
314
- };
315
- }
316
- catch (error) {
317
- const errorMsg = error instanceof Error ? error.message : String(error);
318
- return {
319
- content: [{ type: "text", text: `❌ 安全扫描失败: ${errorMsg}` }],
320
- isError: true,
321
- };
322
- }
323
- }
@@ -1,13 +0,0 @@
1
- export declare function split(args: any): Promise<{
2
- content: {
3
- type: string;
4
- text: string;
5
- }[];
6
- isError?: undefined;
7
- } | {
8
- content: {
9
- type: string;
10
- text: string;
11
- }[];
12
- isError: boolean;
13
- }>;