@rdmind/rdmind 0.0.14-alpha.0 → 0.0.14-alpha.10
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/dist/package.json +4 -3
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ui/commands/techDesignCommand.js +150 -63
- package/dist/src/ui/commands/techDesignCommand.js.map +1 -1
- package/dist/src/ui/commands/techDesignCommand.test.js +33 -0
- package/dist/src/ui/commands/techDesignCommand.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/templates/tech-design-template.md +37 -0
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rdmind/rdmind",
|
|
3
|
-
"version": "0.0.14-alpha.
|
|
3
|
+
"version": "0.0.14-alpha.10",
|
|
4
4
|
"description": "RDMind",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,18 +20,19 @@
|
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
22
22
|
"template",
|
|
23
|
+
"templates",
|
|
23
24
|
".knowledge"
|
|
24
25
|
],
|
|
25
26
|
"publishConfig": {
|
|
26
27
|
"access": "public"
|
|
27
28
|
},
|
|
28
29
|
"config": {
|
|
29
|
-
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.0.14-alpha.
|
|
30
|
+
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.0.14-alpha.10"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
33
|
"@google/genai": "1.9.0",
|
|
33
34
|
"@iarna/toml": "^2.2.5",
|
|
34
|
-
"@rdmind/rdmind-core": "^0.0.14-alpha.
|
|
35
|
+
"@rdmind/rdmind-core": "^0.0.14-alpha.10",
|
|
35
36
|
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
36
37
|
"@types/update-notifier": "^6.0.8",
|
|
37
38
|
"command-exists": "^1.2.9",
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
export declare const GIT_COMMIT_INFO = "
|
|
7
|
-
export declare const CLI_VERSION = "0.0.14-alpha.
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "650b03cf";
|
|
7
|
+
export declare const CLI_VERSION = "0.0.14-alpha.10";
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
|
|
7
7
|
// Do not edit this file manually.
|
|
8
|
-
export const GIT_COMMIT_INFO = '
|
|
9
|
-
export const CLI_VERSION = '0.0.14-alpha.
|
|
8
|
+
export const GIT_COMMIT_INFO = '650b03cf';
|
|
9
|
+
export const CLI_VERSION = '0.0.14-alpha.10';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC"}
|
|
@@ -26,18 +26,14 @@ function isGitRepository(cwd) {
|
|
|
26
26
|
* 读取技术方案模板
|
|
27
27
|
*/
|
|
28
28
|
function readTemplate() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
for (const templatePath of possiblePaths) {
|
|
36
|
-
if (fs.existsSync(templatePath)) {
|
|
37
|
-
return fs.readFileSync(templatePath, 'utf-8');
|
|
38
|
-
}
|
|
29
|
+
// npm 安装后:
|
|
30
|
+
// 代码在 node_modules/@rdmind/rdmind/dist/src/ui/commands/
|
|
31
|
+
// 模板在 node_modules/@rdmind/rdmind/templates/
|
|
32
|
+
const templatePath = path.join(__dirname, '..', '..', '..', '..', 'templates', 'tech-design-template.md');
|
|
33
|
+
if (fs.existsSync(templatePath)) {
|
|
34
|
+
return fs.readFileSync(templatePath, 'utf-8');
|
|
39
35
|
}
|
|
40
|
-
throw new Error(
|
|
36
|
+
throw new Error(`技术方案模板文件未找到\n\n期望路径:${templatePath}\n当前 __dirname: ${__dirname}`);
|
|
41
37
|
}
|
|
42
38
|
/**
|
|
43
39
|
* 生成技术方案子命令
|
|
@@ -73,6 +69,15 @@ const solutionCommand = {
|
|
|
73
69
|
}, Date.now());
|
|
74
70
|
return;
|
|
75
71
|
}
|
|
72
|
+
// 验证 Redoc URL 格式
|
|
73
|
+
const redocUrlPattern = /^https:\/\/docs\.xiaohongshu\.com\/doc\/[a-f0-9]+$/;
|
|
74
|
+
if (!redocUrlPattern.test(prdUrl)) {
|
|
75
|
+
context.ui.addItem({
|
|
76
|
+
type: MessageType.ERROR,
|
|
77
|
+
text: `❌ 提供的 URL 不是有效的 Redoc 文档地址\n\nURL: ${prdUrl}\n\n✅ 正确的格式:\nhttps://docs.xiaohongshu.com/doc/{doc_id}\n\n说明:\n• doc_id 必须是 32 位十六进制字符串\n• 只支持小红书 Redoc 文档\n\n示例:\nhttps://docs.xiaohongshu.com/doc/abc123def456789012345678901234ab`,
|
|
78
|
+
}, Date.now());
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
76
81
|
// 读取模板
|
|
77
82
|
let template;
|
|
78
83
|
try {
|
|
@@ -87,10 +92,10 @@ const solutionCommand = {
|
|
|
87
92
|
}
|
|
88
93
|
context.ui.addItem({
|
|
89
94
|
type: MessageType.INFO,
|
|
90
|
-
text:
|
|
95
|
+
text: `工作目录: ${cwd}\nPRD URL: ${prdUrl}\n\n正在生成技术方案...\n\nRDMind将会:\n1. 使用 redoc_fetch 工具获取 PRD 文档内容\n2. 分析 PRD 需求和当前代码仓库\n3. 按照模板格式生成完整的技术方案文档\n4. 将文档保存到工作目录\n\n请耐心等待,这可能需要几分钟时间...`,
|
|
91
96
|
}, Date.now());
|
|
92
97
|
// 构造给 AI 的提示词
|
|
93
|
-
const prompt =
|
|
98
|
+
const prompt = `你是一个Java软件开发专家,完成以下任务:
|
|
94
99
|
|
|
95
100
|
**任务目标:生成技术方案文档**
|
|
96
101
|
|
|
@@ -114,18 +119,17 @@ ${template}
|
|
|
114
119
|
1. 仔细阅读 PRD 内容,深入理解需求
|
|
115
120
|
2. 评审信息部分保留空白表格即可
|
|
116
121
|
3. 背景部分:填写 PRD 链接和项目背景
|
|
117
|
-
4. 需求分析部分:对应 PRD
|
|
118
|
-
5.
|
|
119
|
-
-
|
|
122
|
+
4. 需求分析部分:对应 PRD 的功能点,详细分析每个页面/模块的逻辑,重点关注服务端逻辑
|
|
123
|
+
5. 详细设计部分须包含:
|
|
124
|
+
- 技术实现方案(后端)
|
|
120
125
|
- 数据库表设计(如有数据变更)
|
|
121
126
|
- 接口设计(API 路径、参数、返回值)
|
|
122
127
|
- 关键技术点说明
|
|
123
128
|
- 架构图/流程图(用 Mermaid 语法)
|
|
124
|
-
6.
|
|
125
|
-
7. 上线步骤要具体、可执行
|
|
129
|
+
6. 模板中的工作量与排期、上线计划不用填写,保持原状即可
|
|
126
130
|
|
|
127
131
|
**第四步:保存文档**
|
|
128
|
-
|
|
132
|
+
不需要展示文档生成过程,生成文档后,使用 write 工具将内容保存到:
|
|
129
133
|
\`${cwd}/tech-solution-${new Date().toISOString().split('T')[0]}.md\`
|
|
130
134
|
|
|
131
135
|
**重要提示:**
|
|
@@ -176,30 +180,48 @@ const planCommand = {
|
|
|
176
180
|
}, Date.now());
|
|
177
181
|
return;
|
|
178
182
|
}
|
|
183
|
+
// 验证 Redoc URL 格式
|
|
184
|
+
const redocUrlPattern = /^https:\/\/docs\.xiaohongshu\.com\/doc\/[a-f0-9]+$/;
|
|
185
|
+
if (!redocUrlPattern.test(techDocUrl)) {
|
|
186
|
+
context.ui.addItem({
|
|
187
|
+
type: MessageType.ERROR,
|
|
188
|
+
text: `❌ 提供的 URL 不是有效的 Redoc 文档地址\n\nURL: ${techDocUrl}\n\n✅ 正确的格式:\nhttps://docs.xiaohongshu.com/doc/{doc_id}\n\n说明:\n• doc_id 必须是 32 位十六进制字符串\n• 只支持小红书 Redoc 文档\n\n示例:\nhttps://docs.xiaohongshu.com/doc/abc123def456789012345678901234ab`,
|
|
189
|
+
}, Date.now());
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
179
192
|
context.ui.addItem({
|
|
180
193
|
type: MessageType.INFO,
|
|
181
|
-
text:
|
|
194
|
+
text: `工作目录: ${cwd}\n技术文档 URL: ${techDocUrl}\n\n正在生成执行计划...\n\nRDMind 将会:\n1. 使用 redoc_fetch 工具获取技术文档内容\n2. 分析代码仓库结构和技术栈\n3. 生成详细的任务分解和执行计划\n4. 提供 AI Coding 使用指导\n5. 将文档保存到工作目录\n\n请耐心等待,这可能需要几分钟时间...`,
|
|
182
195
|
}, Date.now());
|
|
183
196
|
// 构造给 AI 的提示词
|
|
184
|
-
const prompt =
|
|
197
|
+
const prompt = `你是一个Java软件开发专家,请帮我完成以下任务:
|
|
185
198
|
|
|
186
199
|
**任务目标:生成执行计划文档**
|
|
187
200
|
|
|
188
201
|
**第一步:获取技术文档**
|
|
189
202
|
请使用 redoc_fetch 工具获取技术文档内容:
|
|
190
203
|
- URL: ${techDocUrl}
|
|
191
|
-
-
|
|
204
|
+
- 提示词:请详细提取技术文档的所有内容,包括技术方案、架构设计、接口设计、数据库设计、数据结构、实现细节等。特别关注:
|
|
205
|
+
* 数据库表结构(表名、字段、类型、索引、约束)
|
|
206
|
+
* 数据格式(JSON 结构、字段说明)
|
|
207
|
+
* 接口定义(路径、参数、返回值)
|
|
208
|
+
* 业务逻辑细节
|
|
209
|
+
* 技术实现要点
|
|
192
210
|
|
|
193
211
|
**第二步:分析代码仓库**
|
|
194
212
|
当前工作目录:${cwd}
|
|
195
213
|
请分析:
|
|
196
|
-
1.
|
|
197
|
-
2.
|
|
198
|
-
3.
|
|
199
|
-
4.
|
|
214
|
+
1. 代码仓库的目录结构和文件组织
|
|
215
|
+
2. 使用的技术栈、框架和库
|
|
216
|
+
3. 现有的代码规范和编码风格
|
|
217
|
+
4. 关键模块、组件和它们的职责
|
|
218
|
+
5. 数据库操作方式(ORM、SQL 等)
|
|
219
|
+
6. API 调用方式和数据处理流程
|
|
200
220
|
|
|
201
221
|
**第三步:生成执行计划**
|
|
202
|
-
|
|
222
|
+
生成一份详细的执行计划文档,**特别注意**:必须将技术文档中的具体实现细节转化为可执行的开发任务。
|
|
223
|
+
|
|
224
|
+
包括以下章节:
|
|
203
225
|
|
|
204
226
|
## 一、项目概述
|
|
205
227
|
- 根据技术文档总结项目背景和目标
|
|
@@ -211,64 +233,129 @@ const planCommand = {
|
|
|
211
233
|
- 说明模块间的依赖关系
|
|
212
234
|
|
|
213
235
|
## 三、开发任务分解
|
|
214
|
-
将功能分解为具体的、可执行的任务,包括:
|
|
215
|
-
- **前置任务**:环境准备、依赖安装等
|
|
216
|
-
- **核心任务**:主要功能开发,每个任务要具体、可衡量
|
|
217
|
-
- **后续任务**:测试、优化、文档等
|
|
218
|
-
- **任务依赖关系**:说明任务之间的依赖
|
|
219
236
|
|
|
220
|
-
|
|
237
|
+
**重要**:以下内容只是参考,必须根据技术文档中的具体实现细节来分解任务!
|
|
238
|
+
|
|
239
|
+
### 3.1 数据层任务
|
|
240
|
+
|
|
241
|
+
**如果涉及数据库**,根据技术文档中的数据库设计列出具体任务:
|
|
242
|
+
- [ ] 创建数据库表(列出每个表名)
|
|
243
|
+
- 示例:创建 \`activity_target_review\` 表
|
|
244
|
+
- 字段:id, activity_id, data_type, metrics_data, dtm, update_time
|
|
245
|
+
- 索引:PRIMARY KEY (id), UNIQUE KEY uk_activity_type_dtm, KEY idx_activity_id, KEY idx_dtm
|
|
246
|
+
- [ ] 定义数据模型和实体类
|
|
247
|
+
- [ ] 实现数据访问层(DAO/Repository)
|
|
248
|
+
|
|
249
|
+
**如果需要但文档未提供**:⚠️ 信息不足:需求涉及数据持久化,但缺少数据库表结构设计
|
|
250
|
+
|
|
251
|
+
**如果不涉及数据库**:可跳过此部分或说明"本需求无需数据库操作"
|
|
252
|
+
|
|
253
|
+
### 3.2 业务逻辑任务
|
|
254
|
+
根据技术文档的业务逻辑,列出具体任务:
|
|
255
|
+
- [ ] 实现核心业务方法(列出方法名和功能)
|
|
256
|
+
- [ ] 数据校验和转换
|
|
257
|
+
- [ ] 业务规则实现
|
|
258
|
+
|
|
259
|
+
**如果业务逻辑描述不清晰或缺失关键细节**:⚠️ 信息不足:业务逻辑细节不明确,需要补充 XXX
|
|
260
|
+
|
|
261
|
+
### 3.3 接口开发任务
|
|
262
|
+
**如果需要接口**,根据技术文档的接口设计列出具体任务:
|
|
263
|
+
- [ ] 实现 API 接口(列出每个接口的完整路径、方法)
|
|
264
|
+
- [ ] 请求参数校验
|
|
265
|
+
- [ ] 响应数据封装
|
|
266
|
+
|
|
267
|
+
**如果需要但文档未提供**:⚠️ 信息不足:需求需要提供接口,但缺少接口定义(路径、参数、响应格式)
|
|
268
|
+
|
|
269
|
+
**如果不需要接口**:可跳过此部分或说明"本需求无需对外接口"
|
|
270
|
+
|
|
271
|
+
### 3.4 数据处理任务
|
|
272
|
+
根据技术文档列出具体任务
|
|
273
|
+
|
|
274
|
+
### 3.5 测试任务
|
|
275
|
+
- [ ] 单元测试(针对关键业务逻辑)
|
|
276
|
+
- [ ] 接口测试(使用实际数据格式)
|
|
277
|
+
|
|
278
|
+
## 四、技术实现要点
|
|
279
|
+
|
|
280
|
+
以下内容只是参考,需要根据技术文档中的具体实现细节来填写。
|
|
281
|
+
|
|
282
|
+
### 4.1 数据库
|
|
283
|
+
基于技术文档的数据库设计:
|
|
284
|
+
- 表结构创建语句(完整的 CREATE TABLE)
|
|
285
|
+
- 索引使用建议
|
|
286
|
+
- 查询优化建议
|
|
287
|
+
- 数据类型说明(如 bigint(20), varchar(8), json 等)
|
|
288
|
+
|
|
289
|
+
### 4.2 数据结构定义
|
|
290
|
+
基于技术文档的数据格式:
|
|
291
|
+
- JSON 字段结构(列出完整的字段列表和类型)
|
|
292
|
+
- 枚举值定义(如 data_type: 1-系统数据, 2-自定义数据)
|
|
293
|
+
- 数据校验规则
|
|
294
|
+
|
|
295
|
+
### 4.3 接口实现要点
|
|
296
|
+
- 请求/响应格式
|
|
297
|
+
- 错误处理
|
|
298
|
+
- 数据转换逻辑
|
|
299
|
+
|
|
300
|
+
## 五、编码规范
|
|
221
301
|
基于当前代码仓库,明确:
|
|
222
302
|
- 代码风格规范
|
|
223
303
|
- 命名约定(变量、函数、类、文件等)
|
|
224
304
|
- 注释规范
|
|
225
305
|
- 测试要求
|
|
226
|
-
- Git commit 规范
|
|
227
|
-
|
|
228
|
-
## 五、AI Coding 指导
|
|
229
|
-
提供使用 AI Coding 工具(如 RDMind)的具体指导:
|
|
230
|
-
- 如何提供上下文
|
|
231
|
-
- 如何描述需求
|
|
232
|
-
- 分阶段开发建议
|
|
233
|
-
- 代码审查要点
|
|
234
|
-
- 常见问题和注意事项
|
|
235
306
|
|
|
236
307
|
## 六、质量保证
|
|
237
|
-
-
|
|
238
|
-
-
|
|
239
|
-
- 代码审查流程
|
|
240
|
-
|
|
241
|
-
## 七、部署和发布
|
|
242
|
-
- 部署环境说明
|
|
243
|
-
- 发布流程
|
|
244
|
-
- 回滚预案
|
|
245
|
-
|
|
246
|
-
## 八、项目排期
|
|
247
|
-
用表格形式列出各阶段任务、预估工作量和时间安排
|
|
308
|
+
- 单元测试策略(针对核心业务逻辑)
|
|
309
|
+
- 接口测试(使用实际数据格式)
|
|
248
310
|
|
|
249
|
-
##
|
|
311
|
+
## 七、风险评估
|
|
250
312
|
识别潜在风险和应对措施
|
|
251
313
|
|
|
252
|
-
##
|
|
314
|
+
## 八、附录
|
|
253
315
|
- 相关文档链接
|
|
316
|
+
- 技术文档 URL: ${techDocUrl}
|
|
254
317
|
- 使用说明
|
|
255
318
|
|
|
256
319
|
**第四步:保存文档**
|
|
257
|
-
|
|
320
|
+
不需要创建todo展示生成过程,生成文档后,使用 write 工具将内容保存到:
|
|
258
321
|
\`${cwd}/execution-plan-${new Date().toISOString().split('T')[0]}.md\`
|
|
259
322
|
|
|
260
323
|
**重要要求:**
|
|
261
|
-
1.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
324
|
+
1. **必须体现技术文档的具体细节**:
|
|
325
|
+
- 如果文档中有数据库表结构,必须在"数据层任务"中列出每个表的创建任务
|
|
326
|
+
- 如果文档中有 JSON 数据格式,必须在"数据处理任务"中说明字段结构
|
|
327
|
+
- 如果文档中有接口定义,必须在"接口开发任务"中列出每个接口
|
|
328
|
+
- 如果文档中有业务规则,必须在"业务逻辑任务"中说明
|
|
329
|
+
|
|
330
|
+
2. **任务要具体可执行**:
|
|
331
|
+
- 不要写"实现数据库操作",要写"创建 activity_target_review 表"
|
|
332
|
+
- 每个任务都要能直接指导 AI 编码工具
|
|
333
|
+
|
|
334
|
+
3. **技术实现要点要详细**:
|
|
335
|
+
|
|
336
|
+
4. **⚠️ 信息不足时要明确指出**:
|
|
337
|
+
- **先判断需求是否需要该部分**(如:是否需要数据库、是否需要接口等)
|
|
338
|
+
- **只有当需要但文档未提供时**,才标注 "⚠️ 信息不足"
|
|
339
|
+
- 说明缺少哪些信息,需要补充什么
|
|
340
|
+
- 不要凭空猜测或编造信息
|
|
341
|
+
|
|
342
|
+
5. **编码规范基于实际代码**:
|
|
343
|
+
- 分析现有代码的风格
|
|
344
|
+
- 保持一致性
|
|
345
|
+
|
|
346
|
+
6. **文档格式**:
|
|
347
|
+
- 使用 Markdown 格式
|
|
348
|
+
- 使用代码块展示 SQL、JSON 等
|
|
349
|
+
- 使用任务清单(- [ ])
|
|
350
|
+
- 对信息不足的部分使用 ⚠️ 标记
|
|
267
351
|
|
|
268
352
|
**执行提示:**
|
|
269
353
|
- 请直接开始执行任务,调用工具完成
|
|
270
354
|
- 不要只给我方案说明,要实际调用工具执行
|
|
271
|
-
- 先用 redoc_fetch
|
|
355
|
+
- 先用 redoc_fetch 获取文档,仔细阅读所有技术细节
|
|
356
|
+
- 分析代码仓库结构
|
|
357
|
+
- 生成包含所有技术细节的执行计划文档
|
|
358
|
+
- 使用 write 工具保存文档
|
|
272
359
|
|
|
273
360
|
现在请开始执行任务。`;
|
|
274
361
|
// 将提示词发送给 AI
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"techDesignCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/techDesignCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,WAAW,GAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY;IACnB,
|
|
1
|
+
{"version":3,"file":"techDesignCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/techDesignCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,5 +49,38 @@ describe('techDesignCommand', () => {
|
|
|
49
49
|
text: expect.stringContaining('未知的子命令'),
|
|
50
50
|
}), expect.any(Number));
|
|
51
51
|
});
|
|
52
|
+
describe('solution subcommand', () => {
|
|
53
|
+
it('should validate Redoc URL format', async () => {
|
|
54
|
+
const solutionCommand = techDesignCommand.subCommands?.find((cmd) => cmd.name === 'solution');
|
|
55
|
+
// 测试无效的 URL
|
|
56
|
+
await solutionCommand?.action?.(mockContext, 'https://www.google.com/search?q=test');
|
|
57
|
+
expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
|
|
58
|
+
type: MessageType.ERROR,
|
|
59
|
+
text: expect.stringContaining('不是有效的 Redoc 文档地址'),
|
|
60
|
+
}), expect.any(Number));
|
|
61
|
+
});
|
|
62
|
+
it('should accept valid Redoc URL', async () => {
|
|
63
|
+
const solutionCommand = techDesignCommand.subCommands?.find((cmd) => cmd.name === 'solution');
|
|
64
|
+
// Mock config to avoid actual execution
|
|
65
|
+
mockContext.services.config = null;
|
|
66
|
+
await solutionCommand?.action?.(mockContext, 'https://docs.xiaohongshu.com/doc/abc123def456');
|
|
67
|
+
// Should show error about config not loaded (not URL validation error)
|
|
68
|
+
expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
|
|
69
|
+
type: MessageType.ERROR,
|
|
70
|
+
text: expect.stringContaining('配置未加载'),
|
|
71
|
+
}), expect.any(Number));
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('plan subcommand', () => {
|
|
75
|
+
it('should validate Redoc URL format', async () => {
|
|
76
|
+
const planCommand = techDesignCommand.subCommands?.find((cmd) => cmd.name === 'plan');
|
|
77
|
+
// 测试无效的 URL
|
|
78
|
+
await planCommand?.action?.(mockContext, 'https://www.google.com/search?q=test');
|
|
79
|
+
expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
|
|
80
|
+
type: MessageType.ERROR,
|
|
81
|
+
text: expect.stringContaining('不是有效的 Redoc 文档地址'),
|
|
82
|
+
}), expect.any(Number));
|
|
83
|
+
});
|
|
84
|
+
});
|
|
52
85
|
});
|
|
53
86
|
//# sourceMappingURL=techDesignCommand.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"techDesignCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/techDesignCommand.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"techDesignCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/techDesignCommand.test.ts"],"names":[],"mappings":"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"}
|