mcp-probe-kit 1.4.0 → 1.6.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 +731 -98
- package/build/index.js +350 -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/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 +14 -0
- package/build/tools/index.js +15 -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 +722 -0
- package/docs/HOW_TO_TRIGGER.html +186 -0
- package/docs/HOW_TO_TRIGGER.md +941 -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/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,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gen_mock 工具
|
|
3
|
+
*
|
|
4
|
+
* 功能:根据数据结构生成 Mock 数据
|
|
5
|
+
* 模式:指令生成器模式 - 返回生成指南,由 AI 执行实际生成
|
|
6
|
+
*/
|
|
7
|
+
const PROMPT_TEMPLATE = `# Mock 数据生成指南
|
|
8
|
+
|
|
9
|
+
## 🎯 生成目标
|
|
10
|
+
|
|
11
|
+
**数据结构**:
|
|
12
|
+
\`\`\`
|
|
13
|
+
{schema}
|
|
14
|
+
\`\`\`
|
|
15
|
+
|
|
16
|
+
**生成配置**:
|
|
17
|
+
- 数量: {count} 条
|
|
18
|
+
- 格式: {format}
|
|
19
|
+
- 语言: {locale}
|
|
20
|
+
{seed_section}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 📋 生成步骤
|
|
25
|
+
|
|
26
|
+
### 步骤 1: 解析数据结构
|
|
27
|
+
|
|
28
|
+
分析输入的数据结构,识别:
|
|
29
|
+
1. 字段名称和类型
|
|
30
|
+
2. 必填/可选字段(?标记)
|
|
31
|
+
3. 嵌套结构
|
|
32
|
+
4. 数组类型
|
|
33
|
+
|
|
34
|
+
### 步骤 2: 字段语义识别
|
|
35
|
+
|
|
36
|
+
根据字段名自动匹配语义,生成符合语义的数据:
|
|
37
|
+
|
|
38
|
+
| 字段名模式 | 生成规则 | 中文示例 | 英文示例 |
|
|
39
|
+
|------------|----------|----------|----------|
|
|
40
|
+
| id, _id | UUID/自增ID | uuid-xxx | uuid-xxx |
|
|
41
|
+
| name, 姓名 | 人名 | 张三、李四 | John Doe |
|
|
42
|
+
| email, 邮箱 | 邮箱格式 | zhangsan@example.com | john@example.com |
|
|
43
|
+
| phone, mobile, 手机 | 手机号 | 138xxxx1234 | +1-xxx-xxx-xxxx |
|
|
44
|
+
| avatar, 头像 | 图片URL | https://api.dicebear.com/... | |
|
|
45
|
+
| address, 地址 | 地址 | 北京市朝阳区xxx | 123 Main St |
|
|
46
|
+
| city, 城市 | 城市名 | 北京、上海 | New York |
|
|
47
|
+
| country, 国家 | 国家名 | 中国 | United States |
|
|
48
|
+
| date, 日期 | 日期 | 2024-01-15 | 2024-01-15 |
|
|
49
|
+
| createdAt, created_at | 过去时间 | 2024-01-01T10:00:00Z | |
|
|
50
|
+
| updatedAt, updated_at | 最近时间 | 2024-01-15T15:30:00Z | |
|
|
51
|
+
| title, 标题 | 短句 | 这是一个标题 | A Sample Title |
|
|
52
|
+
| description, desc, 描述 | 段落 | 这是描述内容... | Lorem ipsum... |
|
|
53
|
+
| content, 内容 | 长文本 | 文章内容... | Article content... |
|
|
54
|
+
| price, 价格 | 金额 | 99.00 | 99.00 |
|
|
55
|
+
| amount, 数量 | 整数 | 10 | 10 |
|
|
56
|
+
| status, 状态 | 枚举 | active/inactive | active/inactive |
|
|
57
|
+
| type, 类型 | 枚举 | 根据上下文 | |
|
|
58
|
+
| url, 链接 | URL | https://example.com | |
|
|
59
|
+
| image, 图片 | 图片URL | https://picsum.photos/... | |
|
|
60
|
+
| age, 年龄 | 18-60 | 25 | 25 |
|
|
61
|
+
| gender, 性别 | 性别 | 男/女 | male/female |
|
|
62
|
+
| username, 用户名 | 用户名 | user_123 | user_123 |
|
|
63
|
+
| password, 密码 | 密码占位 | ******** | ******** |
|
|
64
|
+
| token | Token | tok_xxx | tok_xxx |
|
|
65
|
+
| code, 编码 | 编码 | CODE001 | CODE001 |
|
|
66
|
+
| sort, order, 排序 | 序号 | 1, 2, 3 | 1, 2, 3 |
|
|
67
|
+
| enabled, active | 布尔 | true/false | true/false |
|
|
68
|
+
| tags, 标签 | 标签数组 | ["标签1", "标签2"] | ["tag1", "tag2"] |
|
|
69
|
+
|
|
70
|
+
### 步骤 3: 类型映射
|
|
71
|
+
|
|
72
|
+
基础类型的默认生成规则:
|
|
73
|
+
|
|
74
|
+
| 类型 | 生成规则 |
|
|
75
|
+
|------|----------|
|
|
76
|
+
| string | 根据字段名语义,或随机字符串 |
|
|
77
|
+
| number | 1-100 的随机整数 |
|
|
78
|
+
| boolean | true/false 随机 |
|
|
79
|
+
| Date | 最近30天内的随机时间 |
|
|
80
|
+
| string[] | 3-5个随机字符串 |
|
|
81
|
+
| number[] | 3-5个随机数字 |
|
|
82
|
+
| enum | 从枚举值中随机选择 |
|
|
83
|
+
| union | 从联合类型中随机选择 |
|
|
84
|
+
|
|
85
|
+
### 步骤 4: 生成数据
|
|
86
|
+
|
|
87
|
+
根据识别结果生成 {count} 条数据。
|
|
88
|
+
|
|
89
|
+
**注意事项**:
|
|
90
|
+
- 确保数据多样性,避免重复
|
|
91
|
+
- 数值类型保持合理范围
|
|
92
|
+
- 日期类型保持合理顺序(createdAt < updatedAt)
|
|
93
|
+
- 关联字段保持一致性
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 📊 输出格式
|
|
98
|
+
|
|
99
|
+
### JSON 格式
|
|
100
|
+
\`\`\`json
|
|
101
|
+
[
|
|
102
|
+
{
|
|
103
|
+
"field1": "value1",
|
|
104
|
+
"field2": 123
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
\`\`\`
|
|
108
|
+
|
|
109
|
+
### TypeScript 格式
|
|
110
|
+
\`\`\`typescript
|
|
111
|
+
const mockData: YourType[] = [
|
|
112
|
+
{
|
|
113
|
+
field1: "value1",
|
|
114
|
+
field2: 123
|
|
115
|
+
}
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
export default mockData;
|
|
119
|
+
\`\`\`
|
|
120
|
+
|
|
121
|
+
### JavaScript 格式
|
|
122
|
+
\`\`\`javascript
|
|
123
|
+
const mockData = [
|
|
124
|
+
{
|
|
125
|
+
field1: "value1",
|
|
126
|
+
field2: 123
|
|
127
|
+
}
|
|
128
|
+
];
|
|
129
|
+
|
|
130
|
+
module.exports = mockData;
|
|
131
|
+
\`\`\`
|
|
132
|
+
|
|
133
|
+
### CSV 格式(仅扁平数据)
|
|
134
|
+
\`\`\`csv
|
|
135
|
+
field1,field2
|
|
136
|
+
value1,123
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 🔧 高级功能
|
|
142
|
+
|
|
143
|
+
### 自定义规则
|
|
144
|
+
|
|
145
|
+
在 schema 注释中指定规则:
|
|
146
|
+
|
|
147
|
+
\`\`\`typescript
|
|
148
|
+
interface User {
|
|
149
|
+
id: string; // UUID
|
|
150
|
+
age: number; // range: 18-60
|
|
151
|
+
status: string; // enum: active, inactive, pending
|
|
152
|
+
score: number; // range: 0-100, decimal: 2
|
|
153
|
+
tags: string[]; // count: 3-5
|
|
154
|
+
level: number; // enum: 1, 2, 3
|
|
155
|
+
}
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
### 关联数据
|
|
159
|
+
|
|
160
|
+
生成有关联关系的数据:
|
|
161
|
+
|
|
162
|
+
\`\`\`json
|
|
163
|
+
// 先生成 users
|
|
164
|
+
[
|
|
165
|
+
{ "id": "user-1", "name": "张三" },
|
|
166
|
+
{ "id": "user-2", "name": "李四" }
|
|
167
|
+
]
|
|
168
|
+
|
|
169
|
+
// 再生成 orders,引用 user_id
|
|
170
|
+
[
|
|
171
|
+
{ "id": "order-1", "user_id": "user-1", "amount": 100 },
|
|
172
|
+
{ "id": "order-2", "user_id": "user-2", "amount": 200 }
|
|
173
|
+
]
|
|
174
|
+
\`\`\`
|
|
175
|
+
|
|
176
|
+
### 固定值
|
|
177
|
+
|
|
178
|
+
某些字段使用固定值:
|
|
179
|
+
|
|
180
|
+
\`\`\`typescript
|
|
181
|
+
interface Config {
|
|
182
|
+
version: string; // fixed: "1.0.0"
|
|
183
|
+
env: string; // fixed: "development"
|
|
184
|
+
}
|
|
185
|
+
\`\`\`
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## ✅ 生成检查清单
|
|
190
|
+
|
|
191
|
+
- [ ] 数据结构已正确解析
|
|
192
|
+
- [ ] 字段语义已识别
|
|
193
|
+
- [ ] 数据类型正确
|
|
194
|
+
- [ ] 数量符合要求: {count} 条
|
|
195
|
+
- [ ] 格式正确: {format}
|
|
196
|
+
- [ ] 语言符合设置: {locale}
|
|
197
|
+
- [ ] 数据具有多样性
|
|
198
|
+
- [ ] 关联数据一致(如有)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
*指南版本: 1.0.0*
|
|
203
|
+
*工具: MCP Probe Kit - gen_mock*
|
|
204
|
+
`;
|
|
205
|
+
/**
|
|
206
|
+
* gen_mock 工具实现
|
|
207
|
+
*/
|
|
208
|
+
export async function genMock(args) {
|
|
209
|
+
try {
|
|
210
|
+
const schema = args?.schema;
|
|
211
|
+
if (!schema) {
|
|
212
|
+
throw new Error("缺少必填参数: schema(数据结构定义)");
|
|
213
|
+
}
|
|
214
|
+
const count = args?.count || 1;
|
|
215
|
+
const format = args?.format || "json";
|
|
216
|
+
const locale = args?.locale || "zh-CN";
|
|
217
|
+
const seed = args?.seed;
|
|
218
|
+
if (count < 1 || count > 1000) {
|
|
219
|
+
throw new Error("count 参数必须在 1-1000 之间");
|
|
220
|
+
}
|
|
221
|
+
const formatMap = {
|
|
222
|
+
json: "JSON",
|
|
223
|
+
typescript: "TypeScript",
|
|
224
|
+
javascript: "JavaScript",
|
|
225
|
+
csv: "CSV",
|
|
226
|
+
};
|
|
227
|
+
const localeMap = {
|
|
228
|
+
"zh-CN": "中文(简体)",
|
|
229
|
+
"en-US": "英文(美国)",
|
|
230
|
+
"ja-JP": "日文",
|
|
231
|
+
};
|
|
232
|
+
const seedSection = seed ? `- 随机种子: ${seed}(可重复生成)` : "";
|
|
233
|
+
const guide = PROMPT_TEMPLATE
|
|
234
|
+
.replace(/{schema}/g, schema)
|
|
235
|
+
.replace(/{count}/g, String(count))
|
|
236
|
+
.replace(/{format}/g, formatMap[format] || format)
|
|
237
|
+
.replace(/{locale}/g, localeMap[locale] || locale)
|
|
238
|
+
.replace(/{seed_section}/g, seedSection);
|
|
239
|
+
return {
|
|
240
|
+
content: [{ type: "text", text: guide }],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
245
|
+
return {
|
|
246
|
+
content: [{ type: "text", text: `❌ Mock 数据生成失败: ${errorMsg}` }],
|
|
247
|
+
isError: true,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
package/build/tools/index.d.ts
CHANGED
|
@@ -22,3 +22,17 @@ export { cssOrder } from "./css_order.js";
|
|
|
22
22
|
export { genreadme } from "./genreadme.js";
|
|
23
23
|
export { split } from "./split.js";
|
|
24
24
|
export { analyzeProject } from "./analyze_project.js";
|
|
25
|
+
export { initProjectContext } from "./init_project_context.js";
|
|
26
|
+
export { addFeature } from "./add_feature.js";
|
|
27
|
+
export { securityScan } from "./security_scan.js";
|
|
28
|
+
export { fixBug } from "./fix_bug.js";
|
|
29
|
+
export { estimate } from "./estimate.js";
|
|
30
|
+
export { genMock } from "./gen_mock.js";
|
|
31
|
+
export { startFeature } from "./start_feature.js";
|
|
32
|
+
export { startBugfix } from "./start_bugfix.js";
|
|
33
|
+
export { startReview } from "./start_review.js";
|
|
34
|
+
export { startRelease } from "./start_release.js";
|
|
35
|
+
export { startRefactor } from "./start_refactor.js";
|
|
36
|
+
export { startOnboard } from "./start_onboard.js";
|
|
37
|
+
export { startApi } from "./start_api.js";
|
|
38
|
+
export { startDoc } from "./start_doc.js";
|
package/build/tools/index.js
CHANGED
|
@@ -22,3 +22,18 @@ export { cssOrder } from "./css_order.js";
|
|
|
22
22
|
export { genreadme } from "./genreadme.js";
|
|
23
23
|
export { split } from "./split.js";
|
|
24
24
|
export { analyzeProject } from "./analyze_project.js";
|
|
25
|
+
export { initProjectContext } from "./init_project_context.js";
|
|
26
|
+
export { addFeature } from "./add_feature.js";
|
|
27
|
+
export { securityScan } from "./security_scan.js";
|
|
28
|
+
export { fixBug } from "./fix_bug.js";
|
|
29
|
+
export { estimate } from "./estimate.js";
|
|
30
|
+
export { genMock } from "./gen_mock.js";
|
|
31
|
+
// 智能编排工具
|
|
32
|
+
export { startFeature } from "./start_feature.js";
|
|
33
|
+
export { startBugfix } from "./start_bugfix.js";
|
|
34
|
+
export { startReview } from "./start_review.js";
|
|
35
|
+
export { startRelease } from "./start_release.js";
|
|
36
|
+
export { startRefactor } from "./start_refactor.js";
|
|
37
|
+
export { startOnboard } from "./start_onboard.js";
|
|
38
|
+
export { startApi } from "./start_api.js";
|
|
39
|
+
export { startDoc } from "./start_doc.js";
|
|
@@ -3,6 +3,7 @@ export async function initProject(args) {
|
|
|
3
3
|
try {
|
|
4
4
|
const input = args?.input || "";
|
|
5
5
|
const projectName = args?.project_name || "新项目";
|
|
6
|
+
const featureSlug = projectName.toLowerCase().replace(/\s+/g, '-');
|
|
6
7
|
const message = `你需要按照 Spec-Driven Development(规范驱动开发)的方式初始化项目,参考 https://github.com/github/spec-kit 的工作流程。
|
|
7
8
|
|
|
8
9
|
📋 **项目需求**:
|
|
@@ -15,106 +16,150 @@ ${input}
|
|
|
15
16
|
|
|
16
17
|
\`\`\`
|
|
17
18
|
.
|
|
18
|
-
├──
|
|
19
|
-
│
|
|
20
|
-
├──
|
|
21
|
-
│ └──
|
|
22
|
-
│
|
|
23
|
-
│
|
|
24
|
-
│
|
|
25
|
-
│
|
|
19
|
+
├── docs/
|
|
20
|
+
│ ├── project-context.md # 项目上下文(技术栈、架构、规范)
|
|
21
|
+
│ ├── constitution.md # 项目宪法(核心原则和约束)
|
|
22
|
+
│ └── specs/
|
|
23
|
+
│ └── ${featureSlug}/
|
|
24
|
+
│ ├── requirements.md # 需求文档(EARS 格式)
|
|
25
|
+
│ ├── design.md # 设计文档
|
|
26
|
+
│ ├── tasks.md # 任务分解
|
|
27
|
+
│ └── research.md # 技术调研
|
|
26
28
|
├── scripts/
|
|
27
29
|
│ ├── check-prerequisites.sh
|
|
28
30
|
│ └── setup.sh
|
|
29
|
-
└──
|
|
30
|
-
├── spec-template.md
|
|
31
|
-
├── plan-template.md
|
|
32
|
-
└── tasks-template.md
|
|
31
|
+
└── src/ # 源代码目录
|
|
33
32
|
\`\`\`
|
|
34
33
|
|
|
35
|
-
**第二步:生成
|
|
36
|
-
在 \`
|
|
34
|
+
**第二步:生成 project-context.md**
|
|
35
|
+
在 \`docs/project-context.md\` 中记录项目的核心信息:
|
|
36
|
+
- 项目概览(名称、版本、类型、描述)
|
|
37
|
+
- 技术栈(语言、框架、构建工具、测试框架)
|
|
38
|
+
- 项目结构(目录说明、入口文件)
|
|
39
|
+
- 架构模式(设计模式、模块划分)
|
|
40
|
+
- 编码规范(代码风格、命名规范)
|
|
41
|
+
- 依赖管理(主要依赖列表)
|
|
42
|
+
- 开发流程(常用命令)
|
|
43
|
+
|
|
44
|
+
**第三步:生成 constitution.md**
|
|
45
|
+
在 \`docs/constitution.md\` 中定义项目的核心原则:
|
|
37
46
|
- 代码风格规范
|
|
38
47
|
- 架构原则
|
|
39
48
|
- 安全准则
|
|
40
49
|
- 测试要求
|
|
41
50
|
- 文档标准
|
|
42
51
|
|
|
43
|
-
|
|
44
|
-
在 \`specs
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
**第五步:生成
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
**第四步:生成 requirements.md(需求文档)**
|
|
53
|
+
在 \`docs/specs/${featureSlug}/requirements.md\` 中详细描述:
|
|
54
|
+
- 功能概述
|
|
55
|
+
- 术语定义
|
|
56
|
+
- 需求列表(使用 EARS 格式)
|
|
57
|
+
- 用户故事(As a... I want... So that...)
|
|
58
|
+
- 验收标准(WHEN/WHILE/IF...THEN...SHALL)
|
|
59
|
+
- 非功能需求(性能、安全、兼容性)
|
|
60
|
+
- 依赖关系
|
|
61
|
+
|
|
62
|
+
**EARS 格式说明**:
|
|
63
|
+
| 模式 | 格式 | 适用场景 |
|
|
64
|
+
|------|------|----------|
|
|
65
|
+
| Ubiquitous | THE [system] SHALL [response] | 始终适用的需求 |
|
|
66
|
+
| Event-driven | WHEN [trigger], THE [system] SHALL [response] | 事件触发的需求 |
|
|
67
|
+
| State-driven | WHILE [condition], THE [system] SHALL [response] | 状态相关的需求 |
|
|
68
|
+
| Unwanted | IF [condition], THEN THE [system] SHALL [response] | 异常处理需求 |
|
|
69
|
+
|
|
70
|
+
**第五步:生成 design.md(设计文档)**
|
|
71
|
+
在 \`docs/specs/${featureSlug}/design.md\` 中描述:
|
|
72
|
+
- 技术方案(技术选型及理由)
|
|
73
|
+
- 架构设计(系统架构图)
|
|
74
|
+
- 数据模型(数据结构定义)
|
|
75
|
+
- API 设计(接口定义)
|
|
76
|
+
- 文件结构(新增/修改的文件)
|
|
77
|
+
- 设计决策(重要决策及理由)
|
|
78
|
+
- 风险评估
|
|
79
|
+
|
|
80
|
+
**第六步:生成 research.md(技术调研)**
|
|
81
|
+
在 \`docs/specs/${featureSlug}/research.md\` 中记录:
|
|
82
|
+
- 技术栈调研结果
|
|
83
|
+
- 版本兼容性确认
|
|
84
|
+
- 潜在风险识别
|
|
85
|
+
- 最佳实践记录
|
|
86
|
+
- 参考文档链接
|
|
87
|
+
|
|
88
|
+
**第七步:生成 tasks.md(任务分解)**
|
|
89
|
+
在 \`docs/specs/${featureSlug}/tasks.md\` 中分解任务:
|
|
90
|
+
|
|
70
91
|
\`\`\`markdown
|
|
71
|
-
#
|
|
72
|
-
|
|
73
|
-
##
|
|
74
|
-
|
|
75
|
-
- [ ] Task 1.2: 配置开发环境 (文件: ./devcontainer.json)
|
|
76
|
-
- [ ] Task 1.3: [P] 初始化数据库 (文件: ./database/schema.sql)
|
|
77
|
-
|
|
78
|
-
## 阶段 2:核心功能实现
|
|
79
|
-
- [ ] Task 2.1: 实现数据模型 (文件: ./src/models/)
|
|
80
|
-
- [ ] Task 2.2: [P] 实现用户认证 (文件: ./src/auth/)
|
|
81
|
-
- [ ] Task 2.3: [P] 实现业务逻辑 (文件: ./src/services/)
|
|
82
|
-
依赖: Task 2.1
|
|
83
|
-
|
|
84
|
-
## 阶段 3:API 开发
|
|
85
|
-
- [ ] Task 3.1: 创建 REST API (文件: ./src/api/)
|
|
86
|
-
依赖: Task 2.2, Task 2.3
|
|
87
|
-
- [ ] Task 3.2: [P] 编写 API 测试 (文件: ./tests/api/)
|
|
88
|
-
|
|
89
|
-
## 阶段 4:前端开发
|
|
90
|
-
- [ ] Task 4.1: 搭建前端框架 (文件: ./frontend/)
|
|
91
|
-
- [ ] Task 4.2: [P] 实现 UI 组件 (文件: ./frontend/components/)
|
|
92
|
-
- [ ] Task 4.3: [P] 集成 API (文件: ./frontend/services/)
|
|
93
|
-
依赖: Task 3.1
|
|
94
|
-
|
|
95
|
-
## 阶段 5:测试与部署
|
|
96
|
-
- [ ] Task 5.1: 集成测试 (文件: ./tests/integration/)
|
|
97
|
-
- [ ] Task 5.2: 性能测试 (文件: ./tests/performance/)
|
|
98
|
-
- [ ] Task 5.3: 部署配置 (文件: ./deploy/)
|
|
92
|
+
# 任务清单:${projectName}
|
|
93
|
+
|
|
94
|
+
## 概述
|
|
95
|
+
实现 ${projectName} 的任务分解。
|
|
99
96
|
|
|
100
97
|
---
|
|
98
|
+
|
|
99
|
+
## 任务列表
|
|
100
|
+
|
|
101
|
+
### 阶段 1: 项目初始化
|
|
102
|
+
- [ ] 1.1 搭建项目骨架
|
|
103
|
+
- 创建目录结构
|
|
104
|
+
- 初始化 package.json
|
|
105
|
+
- _需求: 1.1_
|
|
106
|
+
|
|
107
|
+
- [ ] 1.2 配置开发环境
|
|
108
|
+
- 配置 TypeScript/ESLint/Prettier
|
|
109
|
+
- _需求: 1.1_
|
|
110
|
+
|
|
111
|
+
### 阶段 2: 核心功能实现
|
|
112
|
+
- [ ] 2.1 实现数据模型
|
|
113
|
+
- 定义数据结构
|
|
114
|
+
- _需求: 2.1_
|
|
115
|
+
|
|
116
|
+
- [ ] 2.2 实现业务逻辑
|
|
117
|
+
- 核心功能开发
|
|
118
|
+
- 依赖: 任务 2.1
|
|
119
|
+
- _需求: 2.2_
|
|
120
|
+
|
|
121
|
+
### 阶段 3: 集成测试
|
|
122
|
+
- [ ] 3.1 编写测试用例
|
|
123
|
+
- 单元测试
|
|
124
|
+
- 集成测试
|
|
125
|
+
- _需求: 3.1_
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 检查点
|
|
130
|
+
- [ ] 阶段 1 完成后:项目可运行
|
|
131
|
+
- [ ] 阶段 2 完成后:核心功能可用
|
|
132
|
+
- [ ] 阶段 3 完成后:测试通过
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 文件变更清单
|
|
137
|
+
| 文件 | 操作 | 说明 |
|
|
138
|
+
|------|------|------|
|
|
139
|
+
| src/index.ts | 新建 | 入口文件 |
|
|
140
|
+
| package.json | 新建 | 项目配置 |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
101
144
|
**标记说明**:
|
|
102
145
|
- [P]: 可以并行执行的任务
|
|
103
146
|
- 依赖: 必须在指定任务完成后才能开始
|
|
147
|
+
- _需求: x.x_: 关联的需求编号
|
|
104
148
|
\`\`\`
|
|
105
149
|
|
|
106
|
-
|
|
150
|
+
**第八步:生成辅助脚本**
|
|
107
151
|
创建项目管理脚本:
|
|
108
152
|
- \`scripts/check-prerequisites.sh\`: 检查环境依赖
|
|
109
153
|
- \`scripts/setup.sh\`: 自动化项目初始化
|
|
110
|
-
- \`scripts/create-new-feature.sh\`: 创建新功能分支
|
|
111
154
|
|
|
112
155
|
📝 **注意事项**:
|
|
113
|
-
1.
|
|
114
|
-
2.
|
|
115
|
-
3.
|
|
116
|
-
4.
|
|
117
|
-
5.
|
|
156
|
+
1. 所有文档统一放在 \`docs/\` 目录下
|
|
157
|
+
2. 功能规格放在 \`docs/specs/{feature-name}/\` 目录
|
|
158
|
+
3. 所有文件使用 Markdown 格式,保持清晰的结构
|
|
159
|
+
4. 遵循项目 constitution 中定义的原则
|
|
160
|
+
5. 任务分解要足够细致,每个任务应该在 2-4 小时内完成
|
|
161
|
+
6. 标记清楚任务之间的依赖关系
|
|
162
|
+
7. 识别可以并行执行的任务以优化开发效率
|
|
118
163
|
|
|
119
164
|
🚀 **开始执行**:
|
|
120
165
|
现在请按照上述步骤创建项目结构和所有必需的文档。`;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* init_project_context 工具
|
|
3
|
+
*
|
|
4
|
+
* 功能:生成项目上下文文档,帮助 AI 理解项目的技术栈、架构和规范
|
|
5
|
+
* 模式:指令生成器模式 - 返回详细的分析指南,由 AI 执行实际操作
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* init_project_context 工具实现
|
|
9
|
+
*
|
|
10
|
+
* @param args - 工具参数
|
|
11
|
+
* @param args.docs_dir - 文档目录,默认 "docs"
|
|
12
|
+
* @returns MCP 响应,包含项目分析指南
|
|
13
|
+
*/
|
|
14
|
+
export declare function initProjectContext(args: any): Promise<{
|
|
15
|
+
content: {
|
|
16
|
+
type: string;
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
isError?: undefined;
|
|
20
|
+
} | {
|
|
21
|
+
content: {
|
|
22
|
+
type: string;
|
|
23
|
+
text: string;
|
|
24
|
+
}[];
|
|
25
|
+
isError: boolean;
|
|
26
|
+
}>;
|