mcp-probe-kit 1.4.0 → 1.7.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.
- package/README.md +794 -100
- package/build/index.js +379 -1
- package/build/tools/add_feature.d.ts +33 -0
- package/build/tools/add_feature.js +464 -0
- package/build/tools/analyze_project.js +58 -58
- package/build/tools/css_order.js +55 -55
- package/build/tools/design2code.d.ts +29 -0
- package/build/tools/design2code.js +400 -0
- package/build/tools/estimate.d.ts +22 -0
- package/build/tools/estimate.js +225 -0
- package/build/tools/fix_bug.d.ts +24 -0
- package/build/tools/fix_bug.js +298 -0
- package/build/tools/gen_mock.d.ts +22 -0
- package/build/tools/gen_mock.js +250 -0
- package/build/tools/index.d.ts +15 -0
- package/build/tools/index.js +16 -0
- package/build/tools/init_project.js +121 -76
- package/build/tools/init_project_context.d.ts +26 -0
- package/build/tools/init_project_context.js +331 -0
- package/build/tools/security_scan.d.ts +22 -0
- package/build/tools/security_scan.js +282 -0
- package/build/tools/start_api.d.ts +19 -0
- package/build/tools/start_api.js +178 -0
- package/build/tools/start_bugfix.d.ts +19 -0
- package/build/tools/start_bugfix.js +127 -0
- package/build/tools/start_doc.d.ts +19 -0
- package/build/tools/start_doc.js +190 -0
- package/build/tools/start_feature.d.ts +19 -0
- package/build/tools/start_feature.js +122 -0
- package/build/tools/start_onboard.d.ts +19 -0
- package/build/tools/start_onboard.js +146 -0
- package/build/tools/start_refactor.d.ts +19 -0
- package/build/tools/start_refactor.js +175 -0
- package/build/tools/start_release.d.ts +19 -0
- package/build/tools/start_release.js +152 -0
- package/build/tools/start_review.d.ts +19 -0
- package/build/tools/start_review.js +162 -0
- package/docs/BEST_PRACTICES.md +726 -0
- package/docs/HOW_TO_TRIGGER.html +188 -0
- package/docs/HOW_TO_TRIGGER.md +971 -0
- package/docs/specs/add-feature/design.md +608 -0
- package/docs/specs/add-feature/requirements.md +175 -0
- package/docs/specs/add-feature/tasks.md +111 -0
- package/docs/specs/design2code/README.md +0 -0
- package/docs/specs/design2code/requirements.md +0 -0
- package/docs/specs/estimate/design.md +209 -0
- package/docs/specs/estimate/requirements.md +140 -0
- package/docs/specs/estimate/tasks.md +66 -0
- package/docs/specs/fix-bug/design.md +259 -0
- package/docs/specs/fix-bug/requirements.md +132 -0
- package/docs/specs/fix-bug/tasks.md +66 -0
- package/docs/specs/gen-mock/design.md +241 -0
- package/docs/specs/gen-mock/requirements.md +137 -0
- package/docs/specs/gen-mock/tasks.md +66 -0
- package/docs/specs/init-project-context/design.md +515 -0
- package/docs/specs/init-project-context/requirements.md +144 -0
- package/docs/specs/init-project-context/tasks.md +93 -0
- package/docs/specs/security-scan/design.md +152 -0
- package/docs/specs/security-scan/requirements.md +150 -0
- package/docs/specs/security-scan/tasks.md +67 -0
- package/docs/specs/start-bugfix/design.md +42 -0
- package/docs/specs/start-bugfix/requirements.md +70 -0
- package/docs/specs/start-bugfix/tasks.md +21 -0
- package/docs/specs/start-feature/design.md +41 -0
- package/docs/specs/start-feature/requirements.md +90 -0
- package/docs/specs/start-feature/tasks.md +21 -0
- package/docs/specs/start-review/requirements.md +0 -0
- package/package.json +3 -2
|
@@ -0,0 +1,282 @@
|
|
|
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
|
+
- [ ] 注入类漏洞已检查
|
|
237
|
+
- [ ] 认证授权问题已检查
|
|
238
|
+
- [ ] 加密安全问题已检查
|
|
239
|
+
- [ ] 敏感数据泄露已检查
|
|
240
|
+
- [ ] 其他安全问题已检查
|
|
241
|
+
- [ ] 漏洞报告已生成
|
|
242
|
+
- [ ] 修复建议已提供
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
*指南版本: 1.0.0*
|
|
247
|
+
*工具: MCP Probe Kit - security_scan*
|
|
248
|
+
`;
|
|
249
|
+
/**
|
|
250
|
+
* security_scan 工具实现
|
|
251
|
+
*/
|
|
252
|
+
export async function securityScan(args) {
|
|
253
|
+
try {
|
|
254
|
+
const code = args?.code;
|
|
255
|
+
if (!code) {
|
|
256
|
+
throw new Error("缺少必填参数: code(需要扫描的代码)");
|
|
257
|
+
}
|
|
258
|
+
const language = args?.language || "auto";
|
|
259
|
+
const scanType = args?.scan_type || "all";
|
|
260
|
+
const scanTypeDesc = {
|
|
261
|
+
all: "全面扫描(注入、认证、加密、敏感数据)",
|
|
262
|
+
injection: "注入类漏洞(SQL注入、XSS、命令注入)",
|
|
263
|
+
auth: "认证授权问题",
|
|
264
|
+
crypto: "加密安全问题",
|
|
265
|
+
sensitive_data: "敏感数据泄露",
|
|
266
|
+
};
|
|
267
|
+
const guide = PROMPT_TEMPLATE
|
|
268
|
+
.replace(/{code}/g, code)
|
|
269
|
+
.replace(/{language}/g, language)
|
|
270
|
+
.replace(/{scan_type}/g, scanTypeDesc[scanType] || scanType);
|
|
271
|
+
return {
|
|
272
|
+
content: [{ type: "text", text: guide }],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
277
|
+
return {
|
|
278
|
+
content: [{ type: "text", text: `❌ 安全扫描失败: ${errorMsg}` }],
|
|
279
|
+
isError: true,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start_api 智能编排工具
|
|
3
|
+
*
|
|
4
|
+
* 场景:API 开发
|
|
5
|
+
* 编排:[检查上下文] → genapi → gen_mock → gentest
|
|
6
|
+
*/
|
|
7
|
+
export declare function startApi(args: any): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: string;
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError: boolean;
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start_api 智能编排工具
|
|
3
|
+
*
|
|
4
|
+
* 场景:API 开发
|
|
5
|
+
* 编排:[检查上下文] → genapi → gen_mock → gentest
|
|
6
|
+
*/
|
|
7
|
+
const PROMPT_TEMPLATE = `# 🔌 API 开发编排指南
|
|
8
|
+
|
|
9
|
+
## 🎯 目标
|
|
10
|
+
|
|
11
|
+
为以下 API 代码生成完整的开发资料:
|
|
12
|
+
|
|
13
|
+
\`\`\`{language}
|
|
14
|
+
{code}
|
|
15
|
+
\`\`\`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 📋 步骤 0: 项目上下文(自动处理)
|
|
20
|
+
|
|
21
|
+
**操作**:
|
|
22
|
+
1. 检查 \`docs/project-context.md\` 是否存在
|
|
23
|
+
2. **如果不存在**:
|
|
24
|
+
- 调用 \`init_project_context\` 工具
|
|
25
|
+
- 等待生成完成
|
|
26
|
+
3. **读取** \`docs/project-context.md\` 内容
|
|
27
|
+
4. 了解项目的 API 规范、测试框架
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 📝 步骤 1: 生成 API 文档
|
|
32
|
+
|
|
33
|
+
**调用工具**: \`genapi\`
|
|
34
|
+
|
|
35
|
+
**参数**:
|
|
36
|
+
\`\`\`json
|
|
37
|
+
{
|
|
38
|
+
"code": "[API 代码]",
|
|
39
|
+
"format": "{format}"
|
|
40
|
+
}
|
|
41
|
+
\`\`\`
|
|
42
|
+
|
|
43
|
+
**生成内容**:
|
|
44
|
+
- API 端点列表
|
|
45
|
+
- 请求/响应格式
|
|
46
|
+
- 参数说明
|
|
47
|
+
- 示例
|
|
48
|
+
|
|
49
|
+
**产出**: API 文档(Markdown/OpenAPI/JSDoc)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 🎭 步骤 2: 生成 Mock 数据
|
|
54
|
+
|
|
55
|
+
**调用工具**: \`gen_mock\`
|
|
56
|
+
|
|
57
|
+
**参数**:
|
|
58
|
+
\`\`\`json
|
|
59
|
+
{
|
|
60
|
+
"schema": "[从 API 代码中提取的数据结构]",
|
|
61
|
+
"count": 5,
|
|
62
|
+
"format": "json",
|
|
63
|
+
"locale": "zh-CN"
|
|
64
|
+
}
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
**生成内容**:
|
|
68
|
+
- 请求示例数据
|
|
69
|
+
- 响应示例数据
|
|
70
|
+
- 各种场景的测试数据
|
|
71
|
+
|
|
72
|
+
**产出**: Mock 数据文件
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🧪 步骤 3: 生成 API 测试
|
|
77
|
+
|
|
78
|
+
**调用工具**: \`gentest\`
|
|
79
|
+
|
|
80
|
+
**参数**:
|
|
81
|
+
\`\`\`json
|
|
82
|
+
{
|
|
83
|
+
"code": "[API 代码]",
|
|
84
|
+
"framework": "[根据项目上下文选择]"
|
|
85
|
+
}
|
|
86
|
+
\`\`\`
|
|
87
|
+
|
|
88
|
+
**生成内容**:
|
|
89
|
+
- 单元测试
|
|
90
|
+
- 集成测试
|
|
91
|
+
- 边界情况测试
|
|
92
|
+
- 错误处理测试
|
|
93
|
+
|
|
94
|
+
**产出**: 测试代码
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## ✅ 完成检查
|
|
99
|
+
|
|
100
|
+
- [ ] 项目上下文已读取
|
|
101
|
+
- [ ] API 文档已生成
|
|
102
|
+
- [ ] Mock 数据已生成
|
|
103
|
+
- [ ] 测试代码已生成
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 📊 输出汇总
|
|
108
|
+
|
|
109
|
+
完成后,向用户提供:
|
|
110
|
+
|
|
111
|
+
### 1. API 文档
|
|
112
|
+
|
|
113
|
+
\`\`\`markdown
|
|
114
|
+
## API 端点
|
|
115
|
+
|
|
116
|
+
### [METHOD] /path
|
|
117
|
+
|
|
118
|
+
**描述**: ...
|
|
119
|
+
|
|
120
|
+
**请求参数**:
|
|
121
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
122
|
+
|------|------|------|------|
|
|
123
|
+
|
|
124
|
+
**响应**:
|
|
125
|
+
\`\`\`json
|
|
126
|
+
{
|
|
127
|
+
"code": 0,
|
|
128
|
+
"data": {}
|
|
129
|
+
}
|
|
130
|
+
\`\`\`
|
|
131
|
+
\`\`\`
|
|
132
|
+
|
|
133
|
+
### 2. Mock 数据
|
|
134
|
+
|
|
135
|
+
\`\`\`json
|
|
136
|
+
[Mock 数据示例]
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
### 3. 测试代码
|
|
140
|
+
|
|
141
|
+
\`\`\`typescript
|
|
142
|
+
[测试代码]
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
### 4. 使用建议
|
|
146
|
+
|
|
147
|
+
- Mock 数据可用于前端开发联调
|
|
148
|
+
- 测试代码可直接运行验证 API
|
|
149
|
+
- API 文档可分享给前端/调用方
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
*编排工具: MCP Probe Kit - start_api*
|
|
154
|
+
`;
|
|
155
|
+
export async function startApi(args) {
|
|
156
|
+
try {
|
|
157
|
+
const code = args?.code;
|
|
158
|
+
if (!code) {
|
|
159
|
+
throw new Error("缺少必填参数: code(API 代码)");
|
|
160
|
+
}
|
|
161
|
+
const language = args?.language || "typescript";
|
|
162
|
+
const format = args?.format || "markdown";
|
|
163
|
+
const guide = PROMPT_TEMPLATE
|
|
164
|
+
.replace(/{code}/g, code)
|
|
165
|
+
.replace(/{language}/g, language)
|
|
166
|
+
.replace(/{format}/g, format);
|
|
167
|
+
return {
|
|
168
|
+
content: [{ type: "text", text: guide }],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
173
|
+
return {
|
|
174
|
+
content: [{ type: "text", text: `❌ 编排执行失败: ${errorMsg}` }],
|
|
175
|
+
isError: true,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start_bugfix 智能编排工具
|
|
3
|
+
*
|
|
4
|
+
* 场景:修复 Bug
|
|
5
|
+
* 编排:[检查上下文] → fix_bug → gentest
|
|
6
|
+
*/
|
|
7
|
+
export declare function startBugfix(args: any): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: string;
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError: boolean;
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start_bugfix 智能编排工具
|
|
3
|
+
*
|
|
4
|
+
* 场景:修复 Bug
|
|
5
|
+
* 编排:[检查上下文] → fix_bug → gentest
|
|
6
|
+
*/
|
|
7
|
+
const PROMPT_TEMPLATE = `# 🐛 Bug 修复编排指南
|
|
8
|
+
|
|
9
|
+
## 🎯 目标
|
|
10
|
+
|
|
11
|
+
修复以下 Bug:
|
|
12
|
+
|
|
13
|
+
**错误信息**:
|
|
14
|
+
\`\`\`
|
|
15
|
+
{error_message}
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
{stack_trace_section}
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 📋 步骤 0: 项目上下文(自动处理)
|
|
23
|
+
|
|
24
|
+
**操作**:
|
|
25
|
+
1. 检查 \`docs/project-context.md\` 是否存在
|
|
26
|
+
2. **如果不存在**:
|
|
27
|
+
- 调用 \`init_project_context\` 工具
|
|
28
|
+
- 等待生成完成
|
|
29
|
+
3. **读取** \`docs/project-context.md\` 内容
|
|
30
|
+
4. 了解项目的技术栈、架构、测试框架
|
|
31
|
+
5. 后续步骤参考此上下文
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 🔍 步骤 1: Bug 分析与修复
|
|
36
|
+
|
|
37
|
+
**调用工具**: \`fix_bug\`
|
|
38
|
+
|
|
39
|
+
**参数**:
|
|
40
|
+
\`\`\`json
|
|
41
|
+
{
|
|
42
|
+
"error_message": "{error_message}",
|
|
43
|
+
"stack_trace": "{stack_trace}"
|
|
44
|
+
}
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
**执行要点**:
|
|
48
|
+
1. 按指南完成问题定位
|
|
49
|
+
2. 使用 5 Whys 分析根本原因
|
|
50
|
+
3. 设计修复方案
|
|
51
|
+
4. 实施代码修复
|
|
52
|
+
|
|
53
|
+
**产出**: 修复后的代码
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 🧪 步骤 2: 生成回归测试
|
|
58
|
+
|
|
59
|
+
**调用工具**: \`gentest\`
|
|
60
|
+
|
|
61
|
+
**参数**:
|
|
62
|
+
\`\`\`json
|
|
63
|
+
{
|
|
64
|
+
"code": "[修复后的代码]",
|
|
65
|
+
"framework": "[根据项目上下文选择: jest/vitest/mocha]"
|
|
66
|
+
}
|
|
67
|
+
\`\`\`
|
|
68
|
+
|
|
69
|
+
**执行要点**:
|
|
70
|
+
1. 为修复的代码生成测试
|
|
71
|
+
2. 包含 Bug 场景的测试用例
|
|
72
|
+
3. 包含边界情况测试
|
|
73
|
+
|
|
74
|
+
**产出**: 测试代码
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## ✅ 完成检查
|
|
79
|
+
|
|
80
|
+
- [ ] 项目上下文已读取
|
|
81
|
+
- [ ] Bug 已定位
|
|
82
|
+
- [ ] 根本原因已分析
|
|
83
|
+
- [ ] 代码已修复
|
|
84
|
+
- [ ] 测试已添加
|
|
85
|
+
- [ ] 测试已通过
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 📝 输出汇总
|
|
90
|
+
|
|
91
|
+
完成后,向用户汇总:
|
|
92
|
+
|
|
93
|
+
1. **Bug 原因**: [根本原因]
|
|
94
|
+
2. **修复方案**: [修复说明]
|
|
95
|
+
3. **修改文件**: [文件列表]
|
|
96
|
+
4. **测试覆盖**: [测试情况]
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
*编排工具: MCP Probe Kit - start_bugfix*
|
|
101
|
+
`;
|
|
102
|
+
export async function startBugfix(args) {
|
|
103
|
+
try {
|
|
104
|
+
const errorMessage = args?.error_message;
|
|
105
|
+
if (!errorMessage) {
|
|
106
|
+
throw new Error("缺少必填参数: error_message(错误信息)");
|
|
107
|
+
}
|
|
108
|
+
const stackTrace = args?.stack_trace || "";
|
|
109
|
+
const stackTraceSection = stackTrace
|
|
110
|
+
? `**堆栈跟踪**:\n\`\`\`\n${stackTrace}\n\`\`\``
|
|
111
|
+
: "";
|
|
112
|
+
const guide = PROMPT_TEMPLATE
|
|
113
|
+
.replace(/{error_message}/g, errorMessage)
|
|
114
|
+
.replace(/{stack_trace}/g, stackTrace)
|
|
115
|
+
.replace(/{stack_trace_section}/g, stackTraceSection);
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: "text", text: guide }],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
122
|
+
return {
|
|
123
|
+
content: [{ type: "text", text: `❌ 编排执行失败: ${errorMsg}` }],
|
|
124
|
+
isError: true,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start_doc 智能编排工具
|
|
3
|
+
*
|
|
4
|
+
* 场景:文档生成
|
|
5
|
+
* 编排:[检查上下文] → gendoc → genreadme → genapi
|
|
6
|
+
*/
|
|
7
|
+
export declare function startDoc(args: any): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: string;
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError: boolean;
|
|
19
|
+
}>;
|