@rdmind/rdmind 0.0.13 → 0.0.14-alpha.1
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 +3 -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/services/BuiltinCommandLoader.js +2 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/ui/commands/techDesignCommand.d.ts +10 -0
- package/dist/src/ui/commands/techDesignCommand.js +374 -0
- package/dist/src/ui/commands/techDesignCommand.js.map +1 -0
- package/dist/src/ui/commands/techDesignCommand.md +296 -0
- package/dist/src/ui/commands/techDesignCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/techDesignCommand.test.js +86 -0
- package/dist/src/ui/commands/techDesignCommand.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rdmind/rdmind",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14-alpha.1",
|
|
4
4
|
"description": "RDMind",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
28
|
"config": {
|
|
29
|
-
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.0.
|
|
29
|
+
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.0.14-alpha.1"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@google/genai": "1.9.0",
|
|
33
33
|
"@iarna/toml": "^2.2.5",
|
|
34
|
-
"@rdmind/rdmind-core": "^0.0.
|
|
34
|
+
"@rdmind/rdmind-core": "^0.0.14-alpha.1",
|
|
35
35
|
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
36
36
|
"@types/update-notifier": "^6.0.8",
|
|
37
37
|
"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.
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "cfac195a";
|
|
7
|
+
export declare const CLI_VERSION = "0.0.14-alpha.1";
|
|
@@ -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.
|
|
8
|
+
export const GIT_COMMIT_INFO = 'cfac195a';
|
|
9
|
+
export const CLI_VERSION = '0.0.14-alpha.1';
|
|
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,gBAAgB,CAAC"}
|
|
@@ -32,6 +32,7 @@ import { restoreCommand } from '../ui/commands/restoreCommand.js';
|
|
|
32
32
|
import { settingsCommand } from '../ui/commands/settingsCommand.js';
|
|
33
33
|
import { statsCommand } from '../ui/commands/statsCommand.js';
|
|
34
34
|
import { summaryCommand } from '../ui/commands/summaryCommand.js';
|
|
35
|
+
import { techDesignCommand } from '../ui/commands/techDesignCommand.js';
|
|
35
36
|
import { terminalSetupCommand } from '../ui/commands/terminalSetupCommand.js';
|
|
36
37
|
import { themeCommand } from '../ui/commands/themeCommand.js';
|
|
37
38
|
import { toolsCommand } from '../ui/commands/toolsCommand.js';
|
|
@@ -83,6 +84,7 @@ export class BuiltinCommandLoader {
|
|
|
83
84
|
restoreCommand(this.config),
|
|
84
85
|
statsCommand,
|
|
85
86
|
summaryCommand,
|
|
87
|
+
techDesignCommand,
|
|
86
88
|
themeCommand,
|
|
87
89
|
toolsCommand,
|
|
88
90
|
settingsCommand,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuiltinCommandLoader.js","sourceRoot":"","sources":["../../../src/services/BuiltinCommandLoader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BuiltinCommandLoader.js","sourceRoot":"","sources":["../../../src/services/BuiltinCommandLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { CommandKind, } from './types.js';
|
|
7
|
+
import { MessageType } from '../types.js';
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
/**
|
|
14
|
+
* 检查当前工作目录是否是 git 仓库
|
|
15
|
+
*/
|
|
16
|
+
function isGitRepository(cwd) {
|
|
17
|
+
try {
|
|
18
|
+
const gitDir = path.join(cwd, '.git');
|
|
19
|
+
return fs.existsSync(gitDir);
|
|
20
|
+
}
|
|
21
|
+
catch (_error) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 读取技术方案模板
|
|
27
|
+
*/
|
|
28
|
+
function readTemplate() {
|
|
29
|
+
// 尝试多个可能的模板位置
|
|
30
|
+
const possiblePaths = [
|
|
31
|
+
// 1. 开发环境:packages/cli/src/ui/commands/ -> packages/cli/templates/
|
|
32
|
+
path.join(__dirname, '..', '..', '..', 'templates', 'tech-design-template.md'),
|
|
33
|
+
// 2. npm 安装后:node_modules/@rdmind/rdmind/dist/src/ui/commands/ -> node_modules/@rdmind/rdmind/templates/
|
|
34
|
+
path.join(__dirname, '..', '..', '..', '..', 'templates', 'tech-design-template.md'),
|
|
35
|
+
// 3. 打包后:dist/src/ui/commands/ -> templates/
|
|
36
|
+
path.join(__dirname, '..', '..', '..', '..', '..', 'templates', 'tech-design-template.md'),
|
|
37
|
+
// 4. 相对于当前工作目录
|
|
38
|
+
path.join(process.cwd(), 'node_modules', '@rdmind', 'rdmind', 'templates', 'tech-design-template.md'),
|
|
39
|
+
];
|
|
40
|
+
for (const templatePath of possiblePaths) {
|
|
41
|
+
if (fs.existsSync(templatePath)) {
|
|
42
|
+
return fs.readFileSync(templatePath, 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 如果找不到,提供详细的错误信息
|
|
46
|
+
const searchedPaths = possiblePaths
|
|
47
|
+
.map((p, i) => `${i + 1}. ${p}`)
|
|
48
|
+
.join('\n');
|
|
49
|
+
throw new Error(`技术方案模板文件未找到\n\n已搜索以下路径:\n${searchedPaths}\n\n当前工作目录:${process.cwd()}\n__dirname: ${__dirname}`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 生成技术方案子命令
|
|
53
|
+
*/
|
|
54
|
+
const solutionCommand = {
|
|
55
|
+
name: 'solution',
|
|
56
|
+
description: '根据 PRD 文档生成技术方案',
|
|
57
|
+
kind: CommandKind.BUILT_IN,
|
|
58
|
+
action: async (context, args) => {
|
|
59
|
+
const { config } = context.services;
|
|
60
|
+
if (!config) {
|
|
61
|
+
context.ui.addItem({
|
|
62
|
+
type: MessageType.ERROR,
|
|
63
|
+
text: '❌ 配置未加载',
|
|
64
|
+
}, Date.now());
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const cwd = process.cwd();
|
|
68
|
+
// 检查是否在 git 仓库中
|
|
69
|
+
if (!isGitRepository(cwd)) {
|
|
70
|
+
context.ui.addItem({
|
|
71
|
+
type: MessageType.ERROR,
|
|
72
|
+
text: '❌ 当前目录不是 git 仓库,请在代码仓库目录下使用此命令。',
|
|
73
|
+
}, Date.now());
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// 解析参数
|
|
77
|
+
const prdUrl = args.trim();
|
|
78
|
+
if (!prdUrl) {
|
|
79
|
+
context.ui.addItem({
|
|
80
|
+
type: MessageType.ERROR,
|
|
81
|
+
text: '❌ 请提供 PRD 文档的 URL\n\n使用方法:\n/tech-design solution <prd-url>\n\n示例:\n/tech-design solution https://docs.xiaohongshu.com/doc/abc123',
|
|
82
|
+
}, Date.now());
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// 验证 Redoc URL 格式
|
|
86
|
+
const redocUrlPattern = /^https:\/\/docs\.xiaohongshu\.com\/doc\/[a-f0-9]+$/;
|
|
87
|
+
if (!redocUrlPattern.test(prdUrl)) {
|
|
88
|
+
context.ui.addItem({
|
|
89
|
+
type: MessageType.ERROR,
|
|
90
|
+
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`,
|
|
91
|
+
}, Date.now());
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// 读取模板
|
|
95
|
+
let template;
|
|
96
|
+
try {
|
|
97
|
+
template = readTemplate();
|
|
98
|
+
}
|
|
99
|
+
catch (_error) {
|
|
100
|
+
context.ui.addItem({
|
|
101
|
+
type: MessageType.ERROR,
|
|
102
|
+
text: `❌ 读取模板失败: ${_error}`,
|
|
103
|
+
}, Date.now());
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
context.ui.addItem({
|
|
107
|
+
type: MessageType.INFO,
|
|
108
|
+
text: `📂 工作目录: ${cwd}\n📋 PRD URL: ${prdUrl}\n\n🤖 正在调用 AI 生成技术方案...\n\n💡 AI 将会:\n1. 使用 redoc_fetch 工具获取 PRD 文档内容\n2. 分析 PRD 需求和当前代码仓库\n3. 按照模板格式生成完整的技术方案文档\n4. 将文档保存到工作目录\n\n请耐心等待,这可能需要几分钟时间...`,
|
|
109
|
+
}, Date.now());
|
|
110
|
+
// 构造给 AI 的提示词
|
|
111
|
+
const prompt = `你是一个技术方案专家,请帮我完成以下任务:
|
|
112
|
+
|
|
113
|
+
**任务目标:生成技术方案文档**
|
|
114
|
+
|
|
115
|
+
**第一步:获取 PRD 文档**
|
|
116
|
+
请使用 redoc_fetch 工具获取 PRD 文档内容:
|
|
117
|
+
- URL: ${prdUrl}
|
|
118
|
+
- 提示词:请详细提取 PRD 文档的所有内容,包括需求描述、功能点、交互设计、业务流程等所有信息
|
|
119
|
+
|
|
120
|
+
**第二步:分析代码仓库**
|
|
121
|
+
当前工作目录:${cwd}
|
|
122
|
+
请分析当前代码仓库的技术栈、架构、代码结构等信息。
|
|
123
|
+
|
|
124
|
+
**第三步:生成技术方案**
|
|
125
|
+
根据 PRD 内容和代码仓库情况,按照以下模板格式生成完整的技术方案文档:
|
|
126
|
+
|
|
127
|
+
\`\`\`markdown
|
|
128
|
+
${template}
|
|
129
|
+
\`\`\`
|
|
130
|
+
|
|
131
|
+
**生成要求:**
|
|
132
|
+
1. 仔细阅读 PRD 内容,深入理解需求
|
|
133
|
+
2. 评审信息部分保留空白表格即可
|
|
134
|
+
3. 背景部分:填写 PRD 链接和项目背景
|
|
135
|
+
4. 需求分析部分:对应 PRD 的功能点,详细分析每个页面/模块的逻辑
|
|
136
|
+
5. 详细设计部分必须包含:
|
|
137
|
+
- 技术实现方案(前端/后端)
|
|
138
|
+
- 数据库表设计(如有数据变更)
|
|
139
|
+
- 接口设计(API 路径、参数、返回值)
|
|
140
|
+
- 关键技术点说明
|
|
141
|
+
- 架构图/流程图(用 Mermaid 语法)
|
|
142
|
+
6. 工作量评估要合理,按模块拆分
|
|
143
|
+
7. 上线步骤要具体、可执行
|
|
144
|
+
|
|
145
|
+
**第四步:保存文档**
|
|
146
|
+
生成文档后,请使用 write 工具将内容保存到:
|
|
147
|
+
\`${cwd}/tech-solution-${new Date().toISOString().split('T')[0]}.md\`
|
|
148
|
+
|
|
149
|
+
**重要提示:**
|
|
150
|
+
- 请直接开始执行任务,调用工具完成
|
|
151
|
+
- 不要只给我方案说明,要实际调用工具执行
|
|
152
|
+
- 文档要完整、详细、可直接使用
|
|
153
|
+
- 使用 Markdown 格式,确保格式正确
|
|
154
|
+
|
|
155
|
+
现在请开始执行任务。`;
|
|
156
|
+
// 将提示词发送给 AI(通过返回类型让 UI 处理)
|
|
157
|
+
return {
|
|
158
|
+
type: 'submit_prompt',
|
|
159
|
+
content: prompt,
|
|
160
|
+
};
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* 生成执行计划子命令
|
|
165
|
+
*/
|
|
166
|
+
const planCommand = {
|
|
167
|
+
name: 'plan',
|
|
168
|
+
description: '根据技术文档生成执行计划',
|
|
169
|
+
kind: CommandKind.BUILT_IN,
|
|
170
|
+
action: async (context, args) => {
|
|
171
|
+
const { config } = context.services;
|
|
172
|
+
if (!config) {
|
|
173
|
+
context.ui.addItem({
|
|
174
|
+
type: MessageType.ERROR,
|
|
175
|
+
text: '❌ 配置未加载',
|
|
176
|
+
}, Date.now());
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const cwd = process.cwd();
|
|
180
|
+
// 检查是否在 git 仓库中
|
|
181
|
+
if (!isGitRepository(cwd)) {
|
|
182
|
+
context.ui.addItem({
|
|
183
|
+
type: MessageType.ERROR,
|
|
184
|
+
text: '❌ 当前目录不是 git 仓库,请在代码仓库目录下使用此命令。',
|
|
185
|
+
}, Date.now());
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// 解析参数
|
|
189
|
+
const techDocUrl = args.trim();
|
|
190
|
+
if (!techDocUrl) {
|
|
191
|
+
context.ui.addItem({
|
|
192
|
+
type: MessageType.ERROR,
|
|
193
|
+
text: '❌ 请提供技术文档的 URL\n\n使用方法:\n/tech-design plan <tech-doc-url>\n\n示例:\n/tech-design plan https://docs.xiaohongshu.com/doc/abc123',
|
|
194
|
+
}, Date.now());
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// 验证 Redoc URL 格式
|
|
198
|
+
const redocUrlPattern = /^https:\/\/docs\.xiaohongshu\.com\/doc\/[a-f0-9]+$/;
|
|
199
|
+
if (!redocUrlPattern.test(techDocUrl)) {
|
|
200
|
+
context.ui.addItem({
|
|
201
|
+
type: MessageType.ERROR,
|
|
202
|
+
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`,
|
|
203
|
+
}, Date.now());
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
context.ui.addItem({
|
|
207
|
+
type: MessageType.INFO,
|
|
208
|
+
text: `📂 工作目录: ${cwd}\n📋 技术文档 URL: ${techDocUrl}\n\n🤖 正在调用 AI 生成执行计划...\n\n💡 AI 将会:\n1. 使用 redoc_fetch 工具获取技术文档内容\n2. 分析代码仓库结构和技术栈\n3. 生成详细的任务分解和执行计划\n4. 提供 AI Coding 使用指导\n5. 将文档保存到工作目录\n\n请耐心等待,这可能需要几分钟时间...`,
|
|
209
|
+
}, Date.now());
|
|
210
|
+
// 构造给 AI 的提示词
|
|
211
|
+
const prompt = `你是一个软件开发项目管理专家,请帮我完成以下任务:
|
|
212
|
+
|
|
213
|
+
**任务目标:生成执行计划文档**
|
|
214
|
+
|
|
215
|
+
**第一步:获取技术文档**
|
|
216
|
+
请使用 redoc_fetch 工具获取技术文档内容:
|
|
217
|
+
- URL: ${techDocUrl}
|
|
218
|
+
- 提示词:请详细提取技术文档的所有内容,包括技术方案、架构设计、接口设计、数据库设计、实现细节等
|
|
219
|
+
|
|
220
|
+
**第二步:分析代码仓库**
|
|
221
|
+
当前工作目录:${cwd}
|
|
222
|
+
请分析:
|
|
223
|
+
1. 代码仓库的目录结构
|
|
224
|
+
2. 使用的技术栈和框架
|
|
225
|
+
3. 现有的代码规范和风格
|
|
226
|
+
4. 关键模块和依赖关系
|
|
227
|
+
|
|
228
|
+
**第三步:生成执行计划**
|
|
229
|
+
生成一份详细的执行计划文档,包括以下章节:
|
|
230
|
+
|
|
231
|
+
## 一、项目概述
|
|
232
|
+
- 根据技术文档总结项目背景和目标
|
|
233
|
+
- 列出使用的技术栈
|
|
234
|
+
|
|
235
|
+
## 二、代码结构分析
|
|
236
|
+
- 分析当前代码仓库的结构
|
|
237
|
+
- 识别需要修改或新增的关键模块
|
|
238
|
+
- 说明模块间的依赖关系
|
|
239
|
+
|
|
240
|
+
## 三、开发任务分解
|
|
241
|
+
将功能分解为具体的、可执行的任务,包括:
|
|
242
|
+
- **前置任务**:环境准备、依赖安装等
|
|
243
|
+
- **核心任务**:主要功能开发,每个任务要具体、可衡量
|
|
244
|
+
- **后续任务**:测试、优化、文档等
|
|
245
|
+
- **任务依赖关系**:说明任务之间的依赖
|
|
246
|
+
|
|
247
|
+
## 四、编码规范
|
|
248
|
+
基于当前代码仓库,明确:
|
|
249
|
+
- 代码风格规范
|
|
250
|
+
- 命名约定(变量、函数、类、文件等)
|
|
251
|
+
- 注释规范
|
|
252
|
+
- 测试要求
|
|
253
|
+
- Git commit 规范
|
|
254
|
+
|
|
255
|
+
## 五、AI Coding 指导
|
|
256
|
+
提供使用 AI Coding 工具(如 RDMind)的具体指导:
|
|
257
|
+
- 如何提供上下文
|
|
258
|
+
- 如何描述需求
|
|
259
|
+
- 分阶段开发建议
|
|
260
|
+
- 代码审查要点
|
|
261
|
+
- 常见问题和注意事项
|
|
262
|
+
|
|
263
|
+
## 六、质量保证
|
|
264
|
+
- 单元测试策略
|
|
265
|
+
- 集成测试策略
|
|
266
|
+
- 代码审查流程
|
|
267
|
+
|
|
268
|
+
## 七、部署和发布
|
|
269
|
+
- 部署环境说明
|
|
270
|
+
- 发布流程
|
|
271
|
+
- 回滚预案
|
|
272
|
+
|
|
273
|
+
## 八、项目排期
|
|
274
|
+
用表格形式列出各阶段任务、预估工作量和时间安排
|
|
275
|
+
|
|
276
|
+
## 九、风险评估
|
|
277
|
+
识别潜在风险和应对措施
|
|
278
|
+
|
|
279
|
+
## 十、附录
|
|
280
|
+
- 相关文档链接
|
|
281
|
+
- 使用说明
|
|
282
|
+
|
|
283
|
+
**第四步:保存文档**
|
|
284
|
+
生成文档后,请使用 write 工具将内容保存到:
|
|
285
|
+
\`${cwd}/execution-plan-${new Date().toISOString().split('T')[0]}.md\`
|
|
286
|
+
|
|
287
|
+
**重要要求:**
|
|
288
|
+
1. 任务分解要足够细致,每个任务都是可执行的小任务
|
|
289
|
+
2. 编码规范要明确、实用,基于实际代码分析
|
|
290
|
+
3. AI Coding 指导要具体、可操作
|
|
291
|
+
4. 包含完整的质量保证和风险控制措施
|
|
292
|
+
5. 文档要详细、完整、实用,可直接作为开发指导
|
|
293
|
+
6. 使用 Markdown 格式,确保格式正确
|
|
294
|
+
|
|
295
|
+
**执行提示:**
|
|
296
|
+
- 请直接开始执行任务,调用工具完成
|
|
297
|
+
- 不要只给我方案说明,要实际调用工具执行
|
|
298
|
+
- 先用 redoc_fetch 获取文档,再分析代码,最后生成并保存文档
|
|
299
|
+
|
|
300
|
+
现在请开始执行任务。`;
|
|
301
|
+
// 将提示词发送给 AI
|
|
302
|
+
return {
|
|
303
|
+
type: 'submit_prompt',
|
|
304
|
+
content: prompt,
|
|
305
|
+
};
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* 主 tech-design 命令
|
|
310
|
+
*/
|
|
311
|
+
export const techDesignCommand = {
|
|
312
|
+
name: 'tech-design',
|
|
313
|
+
altNames: ['td'],
|
|
314
|
+
description: '技术方案和执行计划生成工具',
|
|
315
|
+
kind: CommandKind.BUILT_IN,
|
|
316
|
+
subCommands: [solutionCommand, planCommand],
|
|
317
|
+
action: async (context, args) => {
|
|
318
|
+
const parts = args.trim().split(/\s+/);
|
|
319
|
+
if (parts.length === 0 || !parts[0]) {
|
|
320
|
+
context.ui.addItem({
|
|
321
|
+
type: MessageType.INFO,
|
|
322
|
+
text: `📋 技术方案和执行计划生成工具
|
|
323
|
+
|
|
324
|
+
**可用子命令:**
|
|
325
|
+
|
|
326
|
+
1. **/tech-design solution <prd-url>**
|
|
327
|
+
根据 PRD 文档生成技术方案
|
|
328
|
+
- 自动从 Redoc URL 获取 PRD 内容
|
|
329
|
+
- 分析代码仓库技术栈和架构
|
|
330
|
+
- 生成完整的技术方案文档
|
|
331
|
+
|
|
332
|
+
2. **/tech-design plan <tech-doc-url>**
|
|
333
|
+
根据技术文档生成执行计划
|
|
334
|
+
- 自动从 Redoc URL 获取技术文档内容
|
|
335
|
+
- 分析代码仓库结构
|
|
336
|
+
- 生成详细的任务分解和执行计划
|
|
337
|
+
- 提供 AI Coding 使用指导
|
|
338
|
+
|
|
339
|
+
**使用示例:**
|
|
340
|
+
\`\`\`
|
|
341
|
+
/tech-design solution https://docs.xiaohongshu.com/doc/abc123
|
|
342
|
+
/tech-design plan https://docs.xiaohongshu.com/doc/xyz789
|
|
343
|
+
\`\`\`
|
|
344
|
+
|
|
345
|
+
**注意事项:**
|
|
346
|
+
- 必须在 git 仓库目录下使用
|
|
347
|
+
- 支持 Redoc 文档 URL
|
|
348
|
+
- 生成的文档会保存到当前工作目录
|
|
349
|
+
- AI 会自动调用 redoc_fetch 工具获取文档内容
|
|
350
|
+
|
|
351
|
+
**快捷方式:**
|
|
352
|
+
可以使用 \`/td\` 作为 \`/tech-design\` 的简写`,
|
|
353
|
+
}, Date.now());
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const subcommand = parts[0].toLowerCase();
|
|
357
|
+
const remainingArgs = parts.slice(1).join(' ');
|
|
358
|
+
switch (subcommand) {
|
|
359
|
+
case 'solution':
|
|
360
|
+
case 's':
|
|
361
|
+
return await solutionCommand.action(context, remainingArgs);
|
|
362
|
+
case 'plan':
|
|
363
|
+
case 'p':
|
|
364
|
+
return await planCommand.action(context, remainingArgs);
|
|
365
|
+
default:
|
|
366
|
+
context.ui.addItem({
|
|
367
|
+
type: MessageType.ERROR,
|
|
368
|
+
text: `❌ 未知的子命令:${subcommand}\n\n可用的子命令:\n• solution (s) - 生成技术方案\n• plan (p) - 生成执行计划\n\n使用 /tech-design 查看帮助`,
|
|
369
|
+
}, Date.now());
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
};
|
|
374
|
+
//# sourceMappingURL=techDesignCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"techDesignCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/techDesignCommand.ts"],"names":[],"mappings":"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"}
|