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,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* add_feature 工具
|
|
3
|
+
*
|
|
4
|
+
* 功能:为已有项目添加新功能的规格文档
|
|
5
|
+
* 模式:指令生成器模式 - 返回详细的生成指南,由 AI 执行实际操作
|
|
6
|
+
*
|
|
7
|
+
* 输出文件:
|
|
8
|
+
* - docs/specs/{feature_name}/requirements.md - 需求文档
|
|
9
|
+
* - docs/specs/{feature_name}/design.md - 设计文档
|
|
10
|
+
* - docs/specs/{feature_name}/tasks.md - 任务清单
|
|
11
|
+
*/
|
|
12
|
+
// 默认文档目录
|
|
13
|
+
const DEFAULT_DOCS_DIR = "docs";
|
|
14
|
+
// 提示词模板
|
|
15
|
+
const PROMPT_TEMPLATE = `# 添加新功能指南
|
|
16
|
+
|
|
17
|
+
## 🎯 任务目标
|
|
18
|
+
|
|
19
|
+
为项目添加新功能:**{feature_name}**
|
|
20
|
+
|
|
21
|
+
**功能描述**: {description}
|
|
22
|
+
|
|
23
|
+
**输出文件**:
|
|
24
|
+
- \`{docs_dir}/specs/{feature_name}/requirements.md\` - 需求文档
|
|
25
|
+
- \`{docs_dir}/specs/{feature_name}/design.md\` - 设计文档
|
|
26
|
+
- \`{docs_dir}/specs/{feature_name}/tasks.md\` - 任务清单
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 📋 前置检查
|
|
31
|
+
|
|
32
|
+
### 步骤 1: 检查项目上下文
|
|
33
|
+
|
|
34
|
+
**操作**:
|
|
35
|
+
1. 检查文件 \`{docs_dir}/project-context.md\` 是否存在
|
|
36
|
+
2. 如果存在:
|
|
37
|
+
- 读取文件内容
|
|
38
|
+
- 提取技术栈、架构模式、编码规范等信息
|
|
39
|
+
- 在后续文档生成中参考这些信息
|
|
40
|
+
3. 如果不存在:
|
|
41
|
+
- 显示提示:"建议先运行 init_project_context 工具生成项目上下文"
|
|
42
|
+
- 可以继续生成文档,但内容会更通用
|
|
43
|
+
|
|
44
|
+
### 步骤 2: 创建目录
|
|
45
|
+
|
|
46
|
+
**操作**:
|
|
47
|
+
1. 创建目录 \`{docs_dir}/specs/{feature_name}/\`
|
|
48
|
+
2. 如果目录已存在,询问用户是否覆盖
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 📝 生成 requirements.md
|
|
53
|
+
|
|
54
|
+
在 \`{docs_dir}/specs/{feature_name}/requirements.md\` 中生成以下内容:
|
|
55
|
+
|
|
56
|
+
\`\`\`markdown
|
|
57
|
+
# 需求文档:{feature_name}
|
|
58
|
+
|
|
59
|
+
## 功能概述
|
|
60
|
+
|
|
61
|
+
{description}
|
|
62
|
+
|
|
63
|
+
## 术语定义
|
|
64
|
+
|
|
65
|
+
- **[术语1]**: [定义]
|
|
66
|
+
- **[术语2]**: [定义]
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 需求列表
|
|
71
|
+
|
|
72
|
+
### 需求 1: [需求标题]
|
|
73
|
+
|
|
74
|
+
**用户故事:** 作为 [角色],我想要 [功能],以便 [目标]。
|
|
75
|
+
|
|
76
|
+
#### 验收标准
|
|
77
|
+
|
|
78
|
+
1. WHEN [触发条件] THEN 系统 SHALL [响应]
|
|
79
|
+
2. WHILE [状态条件] THE 系统 SHALL [响应]
|
|
80
|
+
3. IF [异常条件] THEN 系统 SHALL [处理方式]
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### 需求 2: [需求标题]
|
|
85
|
+
|
|
86
|
+
**用户故事:** 作为 [角色],我想要 [功能],以便 [目标]。
|
|
87
|
+
|
|
88
|
+
#### 验收标准
|
|
89
|
+
|
|
90
|
+
1. THE 系统 SHALL [响应]
|
|
91
|
+
2. WHEN [触发条件] THE 系统 SHALL [响应]
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## EARS 格式说明
|
|
96
|
+
|
|
97
|
+
本文档使用 EARS (Easy Approach to Requirements Syntax) 格式编写需求:
|
|
98
|
+
|
|
99
|
+
| 模式 | 格式 | 适用场景 |
|
|
100
|
+
|------|------|----------|
|
|
101
|
+
| Ubiquitous | THE [system] SHALL [response] | 始终适用的需求 |
|
|
102
|
+
| Event-driven | WHEN [trigger], THE [system] SHALL [response] | 事件触发的需求 |
|
|
103
|
+
| State-driven | WHILE [condition], THE [system] SHALL [response] | 状态相关的需求 |
|
|
104
|
+
| Unwanted | IF [condition], THEN THE [system] SHALL [response] | 异常处理需求 |
|
|
105
|
+
| Optional | WHERE [option], THE [system] SHALL [response] | 可选功能需求 |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 非功能需求
|
|
110
|
+
|
|
111
|
+
### 性能要求
|
|
112
|
+
- [性能相关需求]
|
|
113
|
+
|
|
114
|
+
### 安全要求
|
|
115
|
+
- [安全相关需求]
|
|
116
|
+
|
|
117
|
+
### 兼容性要求
|
|
118
|
+
- [兼容性相关需求]
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 依赖关系
|
|
123
|
+
|
|
124
|
+
- [列出与其他功能的依赖]
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
*文档版本: 1.0.0*
|
|
129
|
+
*创建时间: [当前时间]*
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
### requirements.md 编写指南
|
|
133
|
+
|
|
134
|
+
1. **功能概述**: 用 2-3 句话描述功能的目的和价值
|
|
135
|
+
2. **术语定义**: 定义文档中使用的专业术语
|
|
136
|
+
3. **需求列表**:
|
|
137
|
+
- 每个需求有独立的标题
|
|
138
|
+
- 包含用户故事(As a... I want... So that...)
|
|
139
|
+
- 验收标准使用 EARS 格式
|
|
140
|
+
4. **非功能需求**: 性能、安全、兼容性等
|
|
141
|
+
5. **依赖关系**: 与其他功能或模块的依赖
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 📐 生成 design.md
|
|
146
|
+
|
|
147
|
+
在 \`{docs_dir}/specs/{feature_name}/design.md\` 中生成以下内容:
|
|
148
|
+
|
|
149
|
+
\`\`\`markdown
|
|
150
|
+
# 设计文档:{feature_name}
|
|
151
|
+
|
|
152
|
+
## 概述
|
|
153
|
+
|
|
154
|
+
{description}
|
|
155
|
+
|
|
156
|
+
本设计文档描述 {feature_name} 功能的技术实现方案。
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 技术方案
|
|
161
|
+
|
|
162
|
+
### 技术选型
|
|
163
|
+
|
|
164
|
+
| 类别 | 选择 | 理由 |
|
|
165
|
+
|------|------|------|
|
|
166
|
+
| [类别] | [技术] | [选择理由] |
|
|
167
|
+
|
|
168
|
+
### 架构设计
|
|
169
|
+
|
|
170
|
+
[描述功能的架构设计,参考项目现有架构]
|
|
171
|
+
|
|
172
|
+
\\\`\\\`\\\`
|
|
173
|
+
[架构图或流程图,使用 ASCII 或 Mermaid]
|
|
174
|
+
\\\`\\\`\\\`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 数据模型
|
|
179
|
+
|
|
180
|
+
[如果功能涉及数据存储,描述数据模型]
|
|
181
|
+
|
|
182
|
+
### 数据结构
|
|
183
|
+
|
|
184
|
+
\\\`\\\`\\\`typescript
|
|
185
|
+
interface [ModelName] {
|
|
186
|
+
[field]: [type];
|
|
187
|
+
}
|
|
188
|
+
\\\`\\\`\\\`
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## API 设计
|
|
193
|
+
|
|
194
|
+
[如果功能涉及 API,描述 API 设计]
|
|
195
|
+
|
|
196
|
+
### 接口定义
|
|
197
|
+
|
|
198
|
+
| 方法 | 路径 | 描述 |
|
|
199
|
+
|------|------|------|
|
|
200
|
+
| [GET/POST/...] | [/path] | [描述] |
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 文件结构
|
|
205
|
+
|
|
206
|
+
[描述功能涉及的文件和目录]
|
|
207
|
+
|
|
208
|
+
\\\`\\\`\\\`
|
|
209
|
+
[项目目录]/
|
|
210
|
+
├── [新增文件1]
|
|
211
|
+
├── [新增文件2]
|
|
212
|
+
└── [修改文件]
|
|
213
|
+
\\\`\\\`\\\`
|
|
214
|
+
|
|
215
|
+
### 文件说明
|
|
216
|
+
|
|
217
|
+
| 文件 | 用途 |
|
|
218
|
+
|------|------|
|
|
219
|
+
| [文件路径] | [用途说明] |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 依赖关系
|
|
224
|
+
|
|
225
|
+
### 新增依赖
|
|
226
|
+
|
|
227
|
+
| 依赖 | 版本 | 用途 |
|
|
228
|
+
|------|------|------|
|
|
229
|
+
| [依赖名] | [版本] | [用途] |
|
|
230
|
+
|
|
231
|
+
### 内部依赖
|
|
232
|
+
|
|
233
|
+
- [列出依赖的内部模块]
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 设计决策
|
|
238
|
+
|
|
239
|
+
### 决策 1: [决策标题]
|
|
240
|
+
|
|
241
|
+
**问题**: [描述面临的问题]
|
|
242
|
+
|
|
243
|
+
**选项**:
|
|
244
|
+
1. [选项 A]: [描述]
|
|
245
|
+
2. [选项 B]: [描述]
|
|
246
|
+
|
|
247
|
+
**决策**: 选择 [选项]
|
|
248
|
+
|
|
249
|
+
**理由**: [解释选择的理由]
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 风险评估
|
|
254
|
+
|
|
255
|
+
| 风险 | 影响 | 缓解措施 |
|
|
256
|
+
|------|------|----------|
|
|
257
|
+
| [风险描述] | [高/中/低] | [缓解措施] |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
*设计版本: 1.0.0*
|
|
262
|
+
*创建时间: [当前时间]*
|
|
263
|
+
\`\`\`
|
|
264
|
+
|
|
265
|
+
### design.md 编写指南
|
|
266
|
+
|
|
267
|
+
1. **技术方案**: 基于项目上下文选择合适的技术
|
|
268
|
+
2. **架构设计**: 遵循项目现有的架构模式
|
|
269
|
+
3. **数据模型**: 如果涉及数据,定义清晰的数据结构
|
|
270
|
+
4. **API 设计**: 如果涉及 API,遵循项目的 API 规范
|
|
271
|
+
5. **文件结构**: 遵循项目的目录组织方式
|
|
272
|
+
6. **设计决策**: 记录重要的技术决策和理由
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 📋 生成 tasks.md
|
|
277
|
+
|
|
278
|
+
在 \`{docs_dir}/specs/{feature_name}/tasks.md\` 中生成以下内容:
|
|
279
|
+
|
|
280
|
+
\`\`\`markdown
|
|
281
|
+
# 任务清单:{feature_name}
|
|
282
|
+
|
|
283
|
+
## 概述
|
|
284
|
+
|
|
285
|
+
实现 {feature_name} 功能的任务分解。
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 任务列表
|
|
290
|
+
|
|
291
|
+
### 阶段 1: 准备工作
|
|
292
|
+
|
|
293
|
+
- [ ] 1.1 [任务标题]
|
|
294
|
+
- [具体操作说明]
|
|
295
|
+
- _需求: [对应的需求编号]_
|
|
296
|
+
|
|
297
|
+
- [ ] 1.2 [任务标题]
|
|
298
|
+
- [具体操作说明]
|
|
299
|
+
- _需求: [对应的需求编号]_
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
### 阶段 2: 核心实现
|
|
304
|
+
|
|
305
|
+
- [ ] 2.1 [任务标题]
|
|
306
|
+
- [具体操作说明]
|
|
307
|
+
- _需求: [对应的需求编号]_
|
|
308
|
+
|
|
309
|
+
- [ ] 2.2 [任务标题]
|
|
310
|
+
- [具体操作说明]
|
|
311
|
+
- 依赖: 任务 2.1
|
|
312
|
+
- _需求: [对应的需求编号]_
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
### 阶段 3: 集成测试
|
|
317
|
+
|
|
318
|
+
- [ ] 3.1 [任务标题]
|
|
319
|
+
- [具体操作说明]
|
|
320
|
+
- _需求: [对应的需求编号]_
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 检查点
|
|
325
|
+
|
|
326
|
+
- [ ] 阶段 1 完成后:[验证内容]
|
|
327
|
+
- [ ] 阶段 2 完成后:[验证内容]
|
|
328
|
+
- [ ] 阶段 3 完成后:[验证内容]
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## 文件变更清单
|
|
333
|
+
|
|
334
|
+
| 文件 | 操作 | 说明 |
|
|
335
|
+
|------|------|------|
|
|
336
|
+
| [文件路径] | 新建/修改 | [说明] |
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 依赖任务
|
|
341
|
+
|
|
342
|
+
- [列出依赖的其他任务或功能]
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
*任务版本: 1.0.0*
|
|
347
|
+
*创建时间: [当前时间]*
|
|
348
|
+
\`\`\`
|
|
349
|
+
|
|
350
|
+
### tasks.md 编写指南
|
|
351
|
+
|
|
352
|
+
1. **任务分阶段**: 按逻辑顺序组织任务
|
|
353
|
+
2. **任务粒度**: 每个任务应在 2-4 小时内完成
|
|
354
|
+
3. **依赖关系**: 明确标注任务之间的依赖
|
|
355
|
+
4. **需求追溯**: 每个任务关联对应的需求
|
|
356
|
+
5. **检查点**: 每个阶段结束后有验证点
|
|
357
|
+
6. **文件清单**: 列出所有涉及的文件变更
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## ✅ 检查清单
|
|
362
|
+
|
|
363
|
+
生成所有文档后,请验证以下内容:
|
|
364
|
+
|
|
365
|
+
### requirements.md 检查
|
|
366
|
+
|
|
367
|
+
- [ ] 功能概述清晰描述了功能目的
|
|
368
|
+
- [ ] 术语定义完整
|
|
369
|
+
- [ ] 每个需求都有用户故事
|
|
370
|
+
- [ ] 验收标准使用 EARS 格式
|
|
371
|
+
- [ ] 非功能需求已考虑
|
|
372
|
+
- [ ] 依赖关系已列出
|
|
373
|
+
|
|
374
|
+
### design.md 检查
|
|
375
|
+
|
|
376
|
+
- [ ] 技术选型有明确理由
|
|
377
|
+
- [ ] 架构设计符合项目现有架构
|
|
378
|
+
- [ ] 数据模型定义清晰(如适用)
|
|
379
|
+
- [ ] API 设计完整(如适用)
|
|
380
|
+
- [ ] 文件结构清晰
|
|
381
|
+
- [ ] 设计决策有记录
|
|
382
|
+
|
|
383
|
+
### tasks.md 检查
|
|
384
|
+
|
|
385
|
+
- [ ] 任务分阶段合理
|
|
386
|
+
- [ ] 每个任务有明确目标
|
|
387
|
+
- [ ] 依赖关系正确
|
|
388
|
+
- [ ] 任务关联了需求
|
|
389
|
+
- [ ] 检查点完整
|
|
390
|
+
- [ ] 文件变更清单完整
|
|
391
|
+
|
|
392
|
+
### 通用检查
|
|
393
|
+
|
|
394
|
+
- [ ] 三个文件都已创建
|
|
395
|
+
- [ ] 文件路径正确: \`{docs_dir}/specs/{feature_name}/\`
|
|
396
|
+
- [ ] 所有占位符已替换
|
|
397
|
+
- [ ] Markdown 格式正确
|
|
398
|
+
- [ ] 内容与项目上下文一致(如有)
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## 📌 注意事项
|
|
403
|
+
|
|
404
|
+
1. **参考项目上下文**: 如果存在 \`{docs_dir}/project-context.md\`,请参考其中的技术栈和架构信息
|
|
405
|
+
2. **保持一致性**: 文档风格应与项目现有文档保持一致
|
|
406
|
+
3. **需求可测试**: 每个验收标准都应该是可测试的
|
|
407
|
+
4. **任务可执行**: 每个任务都应该是具体可执行的
|
|
408
|
+
5. **时间格式**: 使用 YYYY-MM-DD HH:mm:ss 格式
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
*指南版本: 1.0.0*
|
|
413
|
+
*工具: MCP Probe Kit - add_feature*
|
|
414
|
+
`;
|
|
415
|
+
/**
|
|
416
|
+
* add_feature 工具实现
|
|
417
|
+
*
|
|
418
|
+
* @param args - 工具参数
|
|
419
|
+
* @param args.feature_name - 功能名称(必填,kebab-case 格式)
|
|
420
|
+
* @param args.description - 功能描述(必填)
|
|
421
|
+
* @param args.docs_dir - 文档目录,默认 "docs"
|
|
422
|
+
* @returns MCP 响应,包含功能规格生成指南
|
|
423
|
+
*/
|
|
424
|
+
export async function addFeature(args) {
|
|
425
|
+
try {
|
|
426
|
+
// 验证必填参数
|
|
427
|
+
const featureName = args?.feature_name;
|
|
428
|
+
const description = args?.description;
|
|
429
|
+
if (!featureName) {
|
|
430
|
+
throw new Error("缺少必填参数: feature_name(功能名称)");
|
|
431
|
+
}
|
|
432
|
+
if (!description) {
|
|
433
|
+
throw new Error("缺少必填参数: description(功能描述)");
|
|
434
|
+
}
|
|
435
|
+
// 解析可选参数
|
|
436
|
+
const docsDir = args?.docs_dir || DEFAULT_DOCS_DIR;
|
|
437
|
+
// 构建指南文本(替换占位符)
|
|
438
|
+
const guide = PROMPT_TEMPLATE
|
|
439
|
+
.replace(/{feature_name}/g, featureName)
|
|
440
|
+
.replace(/{description}/g, description)
|
|
441
|
+
.replace(/{docs_dir}/g, docsDir);
|
|
442
|
+
// 返回结果
|
|
443
|
+
return {
|
|
444
|
+
content: [
|
|
445
|
+
{
|
|
446
|
+
type: "text",
|
|
447
|
+
text: guide,
|
|
448
|
+
},
|
|
449
|
+
],
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
454
|
+
return {
|
|
455
|
+
content: [
|
|
456
|
+
{
|
|
457
|
+
type: "text",
|
|
458
|
+
text: `❌ 添加功能失败: ${errorMessage}`,
|
|
459
|
+
},
|
|
460
|
+
],
|
|
461
|
+
isError: true,
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
}
|
|
@@ -12,68 +12,68 @@ export async function analyzeProject(args) {
|
|
|
12
12
|
content: [
|
|
13
13
|
{
|
|
14
14
|
type: "text",
|
|
15
|
-
text: `# 📊 项目分析报告
|
|
16
|
-
|
|
17
|
-
## 🏗️ 项目概览
|
|
18
|
-
- **项目名称**: ${analysis.projectStructure.name}
|
|
19
|
-
- **项目类型**: ${analysis.projectStructure.type}
|
|
20
|
-
- **技术栈**: ${analysis.projectStructure.framework}
|
|
21
|
-
- **主要语言**: ${analysis.projectStructure.language}
|
|
22
|
-
- **包管理器**: ${analysis.projectStructure.packageManager}
|
|
23
|
-
|
|
24
|
-
## 📁 目录结构
|
|
25
|
-
\`\`\`
|
|
26
|
-
${analysis.directoryTree}
|
|
27
|
-
\`\`\`
|
|
28
|
-
|
|
29
|
-
## 🔑 关键文件
|
|
30
|
-
${analysis.keyFiles.map(file => `### ${file.path}
|
|
31
|
-
**用途**: ${file.purpose}
|
|
32
|
-
${includeContent ? `\`\`\`${getFileExtension(file.path)}
|
|
33
|
-
${file.content.substring(0, 500)}${file.content.length > 500 ? '\n...' : ''}
|
|
34
|
-
\`\`\`` : ''}`).join('\n\n')}
|
|
35
|
-
|
|
36
|
-
## 📦 依赖分析
|
|
37
|
-
- **生产依赖**: ${analysis.dependencies.production.length} 个
|
|
38
|
-
- **开发依赖**: ${analysis.dependencies.development.length} 个
|
|
39
|
-
- **总依赖数**: ${analysis.dependencies.total} 个
|
|
40
|
-
|
|
41
|
-
### 主要依赖
|
|
42
|
-
${analysis.dependencies.production.slice(0, 10).map(dep => `- ${dep}`).join('\n')}
|
|
43
|
-
|
|
44
|
-
## 📈 代码指标
|
|
45
|
-
- **总文件数**: ${analysis.codeMetrics.totalFiles}
|
|
46
|
-
- **总行数**: ${analysis.codeMetrics.totalLines}
|
|
47
|
-
${analysis.codeMetrics.skippedFiles > 0 ? `- **跳过文件**: ${analysis.codeMetrics.skippedFiles} 个(过大或无法读取)` : ''}
|
|
48
|
-
- **文件类型分布**:
|
|
15
|
+
text: `# 📊 项目分析报告
|
|
16
|
+
|
|
17
|
+
## 🏗️ 项目概览
|
|
18
|
+
- **项目名称**: ${analysis.projectStructure.name}
|
|
19
|
+
- **项目类型**: ${analysis.projectStructure.type}
|
|
20
|
+
- **技术栈**: ${analysis.projectStructure.framework}
|
|
21
|
+
- **主要语言**: ${analysis.projectStructure.language}
|
|
22
|
+
- **包管理器**: ${analysis.projectStructure.packageManager}
|
|
23
|
+
|
|
24
|
+
## 📁 目录结构
|
|
25
|
+
\`\`\`
|
|
26
|
+
${analysis.directoryTree}
|
|
27
|
+
\`\`\`
|
|
28
|
+
|
|
29
|
+
## 🔑 关键文件
|
|
30
|
+
${analysis.keyFiles.map(file => `### ${file.path}
|
|
31
|
+
**用途**: ${file.purpose}
|
|
32
|
+
${includeContent ? `\`\`\`${getFileExtension(file.path)}
|
|
33
|
+
${file.content.substring(0, 500)}${file.content.length > 500 ? '\n...' : ''}
|
|
34
|
+
\`\`\`` : ''}`).join('\n\n')}
|
|
35
|
+
|
|
36
|
+
## 📦 依赖分析
|
|
37
|
+
- **生产依赖**: ${analysis.dependencies.production.length} 个
|
|
38
|
+
- **开发依赖**: ${analysis.dependencies.development.length} 个
|
|
39
|
+
- **总依赖数**: ${analysis.dependencies.total} 个
|
|
40
|
+
|
|
41
|
+
### 主要依赖
|
|
42
|
+
${analysis.dependencies.production.slice(0, 10).map(dep => `- ${dep}`).join('\n')}
|
|
43
|
+
|
|
44
|
+
## 📈 代码指标
|
|
45
|
+
- **总文件数**: ${analysis.codeMetrics.totalFiles}
|
|
46
|
+
- **总行数**: ${analysis.codeMetrics.totalLines}
|
|
47
|
+
${analysis.codeMetrics.skippedFiles > 0 ? `- **跳过文件**: ${analysis.codeMetrics.skippedFiles} 个(过大或无法读取)` : ''}
|
|
48
|
+
- **文件类型分布**:
|
|
49
49
|
${Object.entries(analysis.codeMetrics.fileTypes)
|
|
50
50
|
.sort(([, a], [, b]) => b - a)
|
|
51
51
|
.slice(0, 10)
|
|
52
52
|
.map(([type, count]) => ` - ${type}: ${count} 个文件`)
|
|
53
|
-
.join('\n')}
|
|
54
|
-
${Object.keys(analysis.codeMetrics.fileTypes).length > 10 ? ' - ... (更多类型已省略)' : ''}
|
|
55
|
-
|
|
56
|
-
### 最大文件
|
|
57
|
-
${analysis.codeMetrics.largestFiles.slice(0, 5).map(file => `- ${file.path} (${file.lines} 行)`).join('\n')}
|
|
58
|
-
|
|
59
|
-
## 🏛️ 架构分析
|
|
60
|
-
- **设计模式**: ${analysis.architecture.patterns.join(', ')}
|
|
61
|
-
- **入口文件**: ${analysis.architecture.entryPoints.join(', ')}
|
|
62
|
-
- **核心模块**: ${analysis.architecture.mainModules.join(', ')}
|
|
63
|
-
|
|
64
|
-
## 📋 项目总结
|
|
65
|
-
**项目目的**: ${analysis.summary.purpose}
|
|
66
|
-
**复杂度**: ${analysis.summary.complexity}
|
|
67
|
-
**建议**:
|
|
68
|
-
${analysis.summary.recommendations.map(rec => `- ${rec}`).join('\n')}
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
*分析完成时间: ${new Date().toLocaleString('zh-CN')}*
|
|
72
|
-
*分析工具: MCP Probe Kit v${VERSION}*
|
|
73
|
-
|
|
74
|
-
**分析说明**:
|
|
75
|
-
- 大型项目会自动采样分析,限制最多扫描 5000 个文件
|
|
76
|
-
- 已自动忽略以下目录: \`node_modules\`, \`dist\`, \`build\`, \`.git\`, \`coverage\`, \`.next\`, \`.nuxt\`, \`vendor\` 等
|
|
53
|
+
.join('\n')}
|
|
54
|
+
${Object.keys(analysis.codeMetrics.fileTypes).length > 10 ? ' - ... (更多类型已省略)' : ''}
|
|
55
|
+
|
|
56
|
+
### 最大文件
|
|
57
|
+
${analysis.codeMetrics.largestFiles.slice(0, 5).map(file => `- ${file.path} (${file.lines} 行)`).join('\n')}
|
|
58
|
+
|
|
59
|
+
## 🏛️ 架构分析
|
|
60
|
+
- **设计模式**: ${analysis.architecture.patterns.join(', ')}
|
|
61
|
+
- **入口文件**: ${analysis.architecture.entryPoints.join(', ')}
|
|
62
|
+
- **核心模块**: ${analysis.architecture.mainModules.join(', ')}
|
|
63
|
+
|
|
64
|
+
## 📋 项目总结
|
|
65
|
+
**项目目的**: ${analysis.summary.purpose}
|
|
66
|
+
**复杂度**: ${analysis.summary.complexity}
|
|
67
|
+
**建议**:
|
|
68
|
+
${analysis.summary.recommendations.map(rec => `- ${rec}`).join('\n')}
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
*分析完成时间: ${new Date().toLocaleString('zh-CN')}*
|
|
72
|
+
*分析工具: MCP Probe Kit v${VERSION}*
|
|
73
|
+
|
|
74
|
+
**分析说明**:
|
|
75
|
+
- 大型项目会自动采样分析,限制最多扫描 5000 个文件
|
|
76
|
+
- 已自动忽略以下目录: \`node_modules\`, \`dist\`, \`build\`, \`.git\`, \`coverage\`, \`.next\`, \`.nuxt\`, \`vendor\` 等
|
|
77
77
|
- 单个文件大小限制: 1MB,超过则跳过`,
|
|
78
78
|
},
|
|
79
79
|
],
|
package/build/tools/css_order.js
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
1
|
// css_order 工具实现
|
|
2
2
|
export async function cssOrder(_args) {
|
|
3
3
|
try {
|
|
4
|
-
const message = `请根据以下规则**书写或重排 CSS**(不是解释规则)。目标是让 CSS 属性顺序更一致、可读、可维护。
|
|
5
|
-
|
|
6
|
-
如果我提供了 CSS 片段/文件,请直接给出**已按规则整理后的 CSS**;如果没提供,请先让我提供需要处理的 CSS。
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 排序逻辑(由外向内,由大到小)
|
|
11
|
-
|
|
12
|
-
将属性分为五类,按顺序排列:
|
|
13
|
-
|
|
14
|
-
### 1. 定位属性 (Positioning)
|
|
15
|
-
决定元素“在哪里”。
|
|
16
|
-
- \`position\` / \`z-index\` / \`top\` / \`right\` / \`bottom\` / \`left\` / \`float\` / \`clear\`
|
|
17
|
-
|
|
18
|
-
### 2. 盒子模型 (Box Model)
|
|
19
|
-
决定元素“占多大空间”。
|
|
20
|
-
- \`display\` / \`flex\` / \`grid\` 相关属性
|
|
21
|
-
- \`width\` / \`height\` / \`max-width\` / \`min-width\`
|
|
22
|
-
- \`margin\` / \`padding\` / \`border\`
|
|
23
|
-
- \`box-sizing\` / \`overflow\`
|
|
24
|
-
|
|
25
|
-
### 3. 文本排版 (Typography)
|
|
26
|
-
决定元素内“文字内容”的样式。
|
|
27
|
-
- \`font-family\` / \`font-size\` / \`font-weight\` / \`line-height\`
|
|
28
|
-
- \`text-align\` / \`text-transform\` / \`text-decoration\` / \`letter-spacing\` / \`white-space\` / \`color\`
|
|
29
|
-
|
|
30
|
-
### 4. 视觉表现 (Visual/Decoration)
|
|
31
|
-
决定元素“皮肤”的外观。
|
|
32
|
-
- \`background\` / \`box-shadow\` / \`opacity\` / \`visibility\` / \`cursor\` / \`outline\`
|
|
33
|
-
|
|
34
|
-
### 5. 其他与交互 (Misc/Transitions)
|
|
35
|
-
动效和交互相关。
|
|
36
|
-
- \`transition\` / \`animation\` / \`transform\` / \`will-change\`
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 处理要求
|
|
41
|
-
|
|
42
|
-
1. **只调整属性顺序,不改动语义**(除非存在明显重复/冲突属性)。
|
|
43
|
-
2. **保留注释与格式风格**(缩进、空行、选择器顺序不变)。
|
|
44
|
-
3. **同类属性保持原有相对顺序**,除非有明显更合理的排序。
|
|
45
|
-
4. 如果存在 **CSS 变量**(\`--*\`)或自定义属性,放在**当前类的最前**。
|
|
46
|
-
5. 如遇 CSS-in-JS、Tailwind 或非标准语法,**只处理可确定的纯 CSS 属性**。
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 快速对比表
|
|
51
|
-
|
|
52
|
-
| 顺序 | 类别 | 常用属性举例 | 核心目的 |
|
|
53
|
-
| --- | --- | --- | --- |
|
|
54
|
-
| **1** | **定位** | \`position\`, \`z-index\`, \`top\` | 确定位置 |
|
|
55
|
-
| **2** | **盒模型** | \`display\`, \`width\`, \`margin\`, \`padding\` | 确定形状和间距 |
|
|
56
|
-
| **3** | **排版** | \`font\`, \`line-height\`, \`color\`, \`text-align\` | 确定内容样式 |
|
|
57
|
-
| **4** | **视觉** | \`background\`, \`border-radius\`, \`box-shadow\` | 确定外观修饰 |
|
|
58
|
-
| **5** | **其他** | \`transition\`, \`transform\`, \`animation\` | 确定动态交互 |
|
|
4
|
+
const message = `请根据以下规则**书写或重排 CSS**(不是解释规则)。目标是让 CSS 属性顺序更一致、可读、可维护。
|
|
5
|
+
|
|
6
|
+
如果我提供了 CSS 片段/文件,请直接给出**已按规则整理后的 CSS**;如果没提供,请先让我提供需要处理的 CSS。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 排序逻辑(由外向内,由大到小)
|
|
11
|
+
|
|
12
|
+
将属性分为五类,按顺序排列:
|
|
13
|
+
|
|
14
|
+
### 1. 定位属性 (Positioning)
|
|
15
|
+
决定元素“在哪里”。
|
|
16
|
+
- \`position\` / \`z-index\` / \`top\` / \`right\` / \`bottom\` / \`left\` / \`float\` / \`clear\`
|
|
17
|
+
|
|
18
|
+
### 2. 盒子模型 (Box Model)
|
|
19
|
+
决定元素“占多大空间”。
|
|
20
|
+
- \`display\` / \`flex\` / \`grid\` 相关属性
|
|
21
|
+
- \`width\` / \`height\` / \`max-width\` / \`min-width\`
|
|
22
|
+
- \`margin\` / \`padding\` / \`border\`
|
|
23
|
+
- \`box-sizing\` / \`overflow\`
|
|
24
|
+
|
|
25
|
+
### 3. 文本排版 (Typography)
|
|
26
|
+
决定元素内“文字内容”的样式。
|
|
27
|
+
- \`font-family\` / \`font-size\` / \`font-weight\` / \`line-height\`
|
|
28
|
+
- \`text-align\` / \`text-transform\` / \`text-decoration\` / \`letter-spacing\` / \`white-space\` / \`color\`
|
|
29
|
+
|
|
30
|
+
### 4. 视觉表现 (Visual/Decoration)
|
|
31
|
+
决定元素“皮肤”的外观。
|
|
32
|
+
- \`background\` / \`box-shadow\` / \`opacity\` / \`visibility\` / \`cursor\` / \`outline\`
|
|
33
|
+
|
|
34
|
+
### 5. 其他与交互 (Misc/Transitions)
|
|
35
|
+
动效和交互相关。
|
|
36
|
+
- \`transition\` / \`animation\` / \`transform\` / \`will-change\`
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 处理要求
|
|
41
|
+
|
|
42
|
+
1. **只调整属性顺序,不改动语义**(除非存在明显重复/冲突属性)。
|
|
43
|
+
2. **保留注释与格式风格**(缩进、空行、选择器顺序不变)。
|
|
44
|
+
3. **同类属性保持原有相对顺序**,除非有明显更合理的排序。
|
|
45
|
+
4. 如果存在 **CSS 变量**(\`--*\`)或自定义属性,放在**当前类的最前**。
|
|
46
|
+
5. 如遇 CSS-in-JS、Tailwind 或非标准语法,**只处理可确定的纯 CSS 属性**。
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 快速对比表
|
|
51
|
+
|
|
52
|
+
| 顺序 | 类别 | 常用属性举例 | 核心目的 |
|
|
53
|
+
| --- | --- | --- | --- |
|
|
54
|
+
| **1** | **定位** | \`position\`, \`z-index\`, \`top\` | 确定位置 |
|
|
55
|
+
| **2** | **盒模型** | \`display\`, \`width\`, \`margin\`, \`padding\` | 确定形状和间距 |
|
|
56
|
+
| **3** | **排版** | \`font\`, \`line-height\`, \`color\`, \`text-align\` | 确定内容样式 |
|
|
57
|
+
| **4** | **视觉** | \`background\`, \`border-radius\`, \`box-shadow\` | 确定外观修饰 |
|
|
58
|
+
| **5** | **其他** | \`transition\`, \`transform\`, \`animation\` | 确定动态交互 |
|
|
59
59
|
`;
|
|
60
60
|
return {
|
|
61
61
|
content: [
|