create-vela-workflow 1.0.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.
Files changed (45) hide show
  1. package/README.md +136 -0
  2. package/bin/cli.js +188 -0
  3. package/docs/ai-workflow-tutorial.md +462 -0
  4. package/docs/official-site-tutorial.md +391 -0
  5. package/package.json +34 -0
  6. package/templates/.github/HARNESS-ENGINEERING-GUIDE.md +407 -0
  7. package/templates/.github/agents/vela-knowledge.agent.md +45 -0
  8. package/templates/.github/agents/vela-s1-prd.agent.md +69 -0
  9. package/templates/.github/agents/vela-s2-tech.agent.md +66 -0
  10. package/templates/.github/agents/vela-s3-coding.agent.md +301 -0
  11. package/templates/.github/agents/vela-workflow.agent.md +110 -0
  12. package/templates/.github/copilot-instructions.md +64 -0
  13. package/templates/.github/prompts/vela-apis.prompt.md +98 -0
  14. package/templates/.github/prompts/vela-best-practices.prompt.md +93 -0
  15. package/templates/.github/prompts/vela-components.prompt.md +118 -0
  16. package/templates/.github/prompts/vela-dev-guide.prompt.md +622 -0
  17. package/templates/.github/rules/project-init.md +45 -0
  18. package/templates/.github/rules/vela-coding-convention.md +324 -0
  19. package/templates/.github/rules/vela-css.md +217 -0
  20. package/templates/.github/rules/vela-design-driven.md +306 -0
  21. package/templates/.github/rules/vela-figma-mcp.md +198 -0
  22. package/templates/.github/rules/vela-format.md +119 -0
  23. package/templates/.github/rules/vela-layout.md +67 -0
  24. package/templates/.github/rules/vela-platform.md +46 -0
  25. package/templates/.github/rules/vela-quality.md +109 -0
  26. package/templates/.kiro/hooks/figma-design-check.kiro.hook +14 -0
  27. package/templates/.kiro/hooks/post-coding-validation.kiro.hook +13 -0
  28. package/templates/.kiro/hooks/validate-ux-files.kiro.hook +16 -0
  29. package/templates/.kiro/settings/mcp.json +7 -0
  30. package/templates/.kiro/skills/vela-js-app/SKILL.md +1072 -0
  31. package/templates/.kiro/steering/workflow-conventions.md +110 -0
  32. package/templates/.workflow/resource-paths.json +62 -0
  33. package/templates/.workflow/scripts/.gitkeep +0 -0
  34. package/templates/.workflow/scripts/checkpoint_manager.js +284 -0
  35. package/templates/.workflow/scripts/context_loader.js +841 -0
  36. package/templates/.workflow/scripts/figma_export.js +346 -0
  37. package/templates/.workflow/scripts/session_manager.js +438 -0
  38. package/templates/.workflow/stages/.gitkeep +0 -0
  39. package/templates/.workflow/stages/commands.md +171 -0
  40. package/templates/.workflow/stages/s1_prd.md +286 -0
  41. package/templates/.workflow/stages/s2_tech_design.md +302 -0
  42. package/templates/.workflow/stages/s3_coding.md +699 -0
  43. package/templates/.workflow/stages/s4_simulator.md +259 -0
  44. package/templates/.workflow/workflow-config.json +46 -0
  45. package/templates/.workflow/workflow_starter.md +912 -0
@@ -0,0 +1,286 @@
1
+ # S1: PRD 生成
2
+
3
+ **⚠️ 重要:仅对 S1 PRD 生成阶段执行。**
4
+
5
+ S1 阶段的目标是根据设计稿和需求描述,结合 Vela 快应用知识库,自动生成标准 PRD 文档。
6
+
7
+ ---
8
+
9
+ ## 阶段概要
10
+
11
+ | 属性 | 值 |
12
+ |------|-----|
13
+ | 阶段 ID | S1 |
14
+ | 阶段名称 | PRD 生成 |
15
+ | Agent | `agents/prd_agent.prompt.md` |
16
+ | 知识库 | `vela/dev-paradigm` |
17
+ | 前置条件 | 无 |
18
+ | 产出物 | `{session_dir}/01-prd.md` |
19
+
20
+ ---
21
+
22
+ ## 执行步骤
23
+
24
+ ### Step 1: 输入收集
25
+
26
+ 收集 PRD 生成所需的用户输入。
27
+
28
+ ```
29
+ 📝 S1 输入收集
30
+ ```
31
+
32
+ **1.1 需求描述收集**
33
+
34
+ 向用户询问需求描述内容:
35
+
36
+ ```
37
+ 📋 请提供需求描述(支持文字或 Markdown 格式):
38
+ 描述你想要开发的 Vela 快应用功能,包括:
39
+ • 需求背景与目标
40
+ • 核心功能点
41
+ • 目标用户与使用场景
42
+ ```
43
+
44
+ 接收用户输入后,将需求描述保存到 `session.json` 的 `inputs.requirement_description` 字段。
45
+
46
+ **1.2 屏幕适配规格收集**
47
+
48
+ 询问用户目标设备的屏幕规格:
49
+
50
+ ```
51
+ 📐 请提供目标屏幕适配规格:
52
+ • 屏幕像素尺寸(如 300×400)
53
+ • 屏幕形状: 圆屏(round) / 跑道屏(oval) / 方屏(square)
54
+ ```
55
+
56
+ 接收用户输入后,将屏幕规格保存到 `session.json` 的 `inputs.screen_spec` 字段:
57
+
58
+ ```javascript
59
+ session.inputs.screen_spec = { width: 300, height: 400, shape: 'square' }
60
+ ```
61
+
62
+ **1.3 Figma 设计稿(可选,支持多个链接)**
63
+
64
+ > ⚠️ 仅当 Step 1 初始化阶段检测到 Figma MCP 可用时(`figma_mcp_available = true`),才询问用户 Figma 链接。若 MCP 不可用,跳过此步骤。
65
+
66
+ 询问用户是否有 Figma 设计稿链接:
67
+
68
+ ```
69
+ 🎨 是否有 Figma 设计稿链接?(可选,支持多个链接,每行一个,直接回车跳过)
70
+ ```
71
+
72
+ 根据用户回复处理:
73
+
74
+ | 情况 | 处理方式 |
75
+ |------|---------|
76
+ | 用户提供了一个或多个 Figma 链接 | 对每个链接按序号(index=0,1,2...)依次处理:调用 `parseFigmaUrl(url)` 校验格式,使用 Figma MCP 工具(`mcp_figma_get_figma_data`)获取设计稿数据,调用 `saveFigmaData(sessionId, jsonData, images, index)` 保存到 `{session_dir}/figma-exports/`(按序号命名:`design.json`, `design_1.json`, ...)。接着调用 `extractImageNodes(figmaData, fileKey)` 提取图片/图标节点,若有可导出节点则使用 `mcp_figma_download_figma_images` 下载图片到 `{session_dir}/figma-exports/images/`。所有链接处理完成后,调用 `saveImageManifest()` 保存合并的图片清单。将所有有效链接写入 `session.json` 的 `inputs.figma_urls` 数组 |
77
+ | 某个链接无效或导出失败 | ⚠️ 警告用户该链接处理失败,继续处理剩余链接 |
78
+ | 用户跳过 | 记录 `inputs.figma_urls` 为 `[]`,后续 PRD 中标注"缺少设计稿参考" |
79
+
80
+ **1.4 更新 Session 状态**
81
+
82
+ > ⚠️ 必须在上下文加载和 Agent 执行之前将状态更新为 `in_progress`。
83
+
84
+ ```javascript
85
+ // 立即更新状态为 in_progress
86
+ updateStageStatus(sessionId, 'S1', 'in_progress')
87
+ // session.json.inputs 已包含 requirement_description、screen_spec 和 figma_urls
88
+ ```
89
+
90
+ ---
91
+
92
+ ### Step 2: 上下文加载
93
+
94
+ 加载 S1 阶段所需的知识库和上下文资源。
95
+
96
+ ```
97
+ 📚 正在加载 S1 上下文...
98
+ ```
99
+
100
+ **2.1 调用上下文加载器**
101
+
102
+ ```javascript
103
+ // 加载阶段上下文
104
+ const context = loadStageContext('S1', session)
105
+ ```
106
+
107
+ 加载内容说明:
108
+
109
+ | 资源类型 | 加载内容 | 来源 |
110
+ |---------|---------|------|
111
+ | SKILL.md | Vela 快应用完整开发指南(项目结构、manifest、组件、API、最佳实践) | `resource-paths.json` → `paths.skill_file` |
112
+ | 前置产出 | 无(S1 无前置阶段) | `workflow-config.json` → `S1.prerequisites: []` |
113
+ | Figma 数据 | 设计稿 JSON、图片清单和已下载图片(若有) | `{session_dir}/figma-exports/` |
114
+
115
+ > **知识加载策略**:上下文加载器优先加载 SKILL.md 全文作为基础知识。当 Agent 需要某个组件/API 的完整属性列表或边界 case 时,使用 `webFetch` 访问 SKILL.md 中标注的官网链接按需获取详细文档。
116
+
117
+ **2.2 注入上下文到 Agent 提示词**
118
+
119
+ ```javascript
120
+ // 读取 Agent 提示词模板
121
+ const agentPrompt = readFile('agents/prd_agent.prompt.md')
122
+
123
+ // 注入上下文,替换占位符
124
+ const injectedPrompt = injectContext(agentPrompt, context)
125
+ // 替换: {session.requirement_name} → 需求名称
126
+ // 替换: {knowledge_content} → 知识库内容
127
+ // 替换: {previous_outputs} → "无(S1 为首个阶段)"
128
+ // 替换: {figma_data} → Figma 设计稿数据或"未提供设计稿"
129
+ // 替换: {screen_spec} → 屏幕适配规格或"未指定屏幕适配规格"
130
+ ```
131
+
132
+ **错误处理**:
133
+
134
+ | 错误场景 | 处理方式 |
135
+ |---------|---------|
136
+ | 知识库文件缺失 | ⚠️ 记录警告,跳过缺失文件,使用可用文件继续执行 |
137
+ | Agent 提示词文件缺失 | ❌ 阻止执行,提示用户检查 `agents/prd_agent.prompt.md` 是否存在 |
138
+
139
+ ---
140
+
141
+ ### Step 3: Agent 执行
142
+
143
+ 使用注入上下文后的 PRD Agent 生成 PRD 文档。
144
+
145
+ ```
146
+ 🤖 正在执行 PRD Agent...
147
+ ```
148
+
149
+ **3.1 执行 PRD Agent**
150
+
151
+ 将注入上下文后的 `prd_agent.prompt.md` 交给 AI 执行,Agent 按照其内部 Workflow 生成 PRD 文档。
152
+
153
+ Agent 生成的 PRD 文档必须包含以下章节:
154
+
155
+ | 章节 | 说明 |
156
+ |------|------|
157
+ | 需求背景 | 项目背景、目标用户、业务目标 |
158
+ | 功能模块 | 按优先级排列的功能模块详细描述(含功能编号 F001、F002…) |
159
+ | 页面结构 | 页面列表、页面间导航关系 |
160
+ | 交互逻辑 | 用户操作 → 页面反馈 → 逻辑处理 |
161
+ | 异常处理 | 网络异常、超时、无权限、空数据等(表格形式) |
162
+ | 数据埋点 | Event ID、Event Name、Trigger Timing、Parameters(表格形式) |
163
+ | VelaOS 依赖说明 | 涉及的系统 API、组件和能力 |
164
+
165
+ **3.2 无设计稿标注**
166
+
167
+ 若用户未提供 Figma 设计稿(`inputs.figma_urls` 为空数组),Agent 必须在 PRD 文档中标注:
168
+
169
+ ```markdown
170
+ > ⚠️ 本 PRD 缺少设计稿参考,页面结构和交互逻辑基于需求描述推导,建议后续补充设计稿进行校验。
171
+ ```
172
+
173
+ **错误处理**:
174
+
175
+ | 错误场景 | 处理方式 |
176
+ |---------|---------|
177
+ | Agent 生成失败 | 🔄 自动重试一次;若仍失败,提示用户并提供选项:[r] 重试 / [e] 修改输入 / [q] 退出保存 |
178
+
179
+ ---
180
+
181
+ ### Step 4: 产出物保存
182
+
183
+ 将生成的 PRD 文档保存到 Session 目录。
184
+
185
+ ```
186
+ 💾 正在保存 PRD 文档...
187
+ ```
188
+
189
+ **4.1 保存文件**
190
+
191
+ ```javascript
192
+ // 保存 PRD 到 session 目录
193
+ saveFile(`${session_dir}/01-prd.md`, prdContent)
194
+ ```
195
+
196
+ **4.2 更新 Session 状态**
197
+
198
+ ```javascript
199
+ // 更新阶段状态为待审核
200
+ updateStageStatus(sessionId, 'S1', 'pending_review', '01-prd.md')
201
+ ```
202
+
203
+ 保存完成后输出:
204
+
205
+ ```
206
+ ✅ PRD 文档已生成
207
+ 📄 文件: {session_dir}/01-prd.md
208
+ ```
209
+
210
+ ---
211
+
212
+ ### Step 5: Checkpoint 交互
213
+
214
+ 暂停工作流,展示 PRD 摘要,等待用户审核。
215
+
216
+ ```
217
+ 📋 PRD 摘要:
218
+ • 需求名称: {requirement_name}
219
+ • 功能模块数: {module_count} 个
220
+ • 页面数: {page_count} 个
221
+ • 异常场景: {exception_count} 个
222
+ • 数据埋点: {event_count} 个
223
+ • 设计稿参考: {有/无}
224
+ ```
225
+
226
+ 提供操作选项:
227
+
228
+ ```
229
+ ❓ 请选择操作:
230
+ [y] 确认 — 保存 PRD,标记 S1 完成,进入 S2 技术方案
231
+ [e] 编辑 — 提供修改意见,迭代生成
232
+ [n] 放弃 — 丢弃当前 PRD,重新生成
233
+ ```
234
+
235
+ **命令处理**:
236
+
237
+ > 严格按照 `.workflow/stages/commands.md` 中定义的逻辑处理用户命令。
238
+
239
+ | 命令 | 处理逻辑 |
240
+ |------|---------|
241
+ | `y` | 调用 `updateStageStatus(sessionId, 'S1', 'completed', '01-prd.md')`,返回 `workflow_starter.md` 的 Step 5 进行阶段流转 |
242
+ | `e` | 接收用户修改意见,追加到 Agent 上下文,重新执行 Step 3(支持多轮迭代) |
243
+ | `n` | 丢弃当前产出,调用 `updateStageStatus(sessionId, 'S1', 'in_progress')`,返回 Step 1 重新执行 |
244
+
245
+ ---
246
+
247
+ ## 产出物规范
248
+
249
+ | 属性 | 值 |
250
+ |------|-----|
251
+ | 文件名 | `01-prd.md` |
252
+ | 格式 | Markdown |
253
+ | 保存路径 | `.ai-workspace/sessions/{session_id}/01-prd.md` |
254
+
255
+ ### 必含章节
256
+
257
+ 1. **需求背景** — 项目背景、目标用户、业务目标
258
+ 2. **功能模块** — 按优先级排列,含功能编号(F001、F002…)
259
+ 3. **页面结构** — 页面列表与导航关系
260
+ 4. **交互逻辑** — 用户操作 → 页面反馈 → 逻辑处理
261
+ 5. **异常处理** — 表格形式列出所有异常场景
262
+ 6. **数据埋点** — 表格形式列出所有埋点事件
263
+ 7. **VelaOS 依赖说明** — 涉及的系统 API 和组件
264
+
265
+ ---
266
+
267
+ ## 使用的脚本函数
268
+
269
+ | 函数 | 来源 | 用途 |
270
+ |------|------|------|
271
+ | `loadStageContext('S1', session)` | `context_loader.js` | 加载知识库、Figma 数据和图片清单 |
272
+ | `injectContext(agentPrompt, context)` | `context_loader.js` | 替换 Agent 提示词占位符 |
273
+ | `updateStageStatus(sessionId, stageId, status, outputPath)` | `session_manager.js` | 更新阶段状态 |
274
+ | `createSession(requirementName)` | `session_manager.js` | 创建 Session(由 workflow_starter.md 调用) |
275
+
276
+ ---
277
+
278
+ ## 文件引用
279
+
280
+ | 文件 | 用途 |
281
+ |------|------|
282
+ | `agents/prd_agent.prompt.md` | PRD Agent 提示词模板 |
283
+ | `.workflow/resource-paths.json` | 知识库路径映射 |
284
+ | `.workflow/stages/commands.md` | 快捷命令处理逻辑 |
285
+ | `.workflow/scripts/context_loader.js` | 上下文加载器 |
286
+ | `.workflow/scripts/session_manager.js` | Session 管理器 |
@@ -0,0 +1,302 @@
1
+ # S2: 技术方案
2
+
3
+ **⚠️ 重要:仅对 S2 技术方案阶段执行。**
4
+
5
+ S2 阶段的目标是根据已审核通过的 PRD 文档,结合 Vela 快应用知识库中的开发范式、API 接口文档和组件规范,自动生成技术方案文档。
6
+
7
+ ---
8
+
9
+ ## 阶段概要
10
+
11
+ | 属性 | 值 |
12
+ |------|-----|
13
+ | 阶段 ID | S2 |
14
+ | 阶段名称 | 技术方案 |
15
+ | Agent | `agents/tech_design_agent.prompt.md` |
16
+ | 知识库 | `vela/dev-paradigm`、`vela/api-reference`、`vela/components`、`vela/best-practices` |
17
+ | 前置条件 | S1 已完成(`session.json` 中 `stages.S1.status === 'completed'`) |
18
+ | 产出物 | `{session_dir}/02-tech-design.md` |
19
+
20
+ ---
21
+
22
+ ## 执行步骤
23
+
24
+ ### Step 1: 前置校验
25
+
26
+ 校验 S1 阶段是否已完成,并加载 S1 产出物。
27
+
28
+ ```
29
+ 🔍 正在校验 S1 前置条件...
30
+ ```
31
+
32
+ **1.1 检查 S1 完成状态**
33
+
34
+ 读取 `session.json`,检查 `stages.S1.status` 是否为 `completed`:
35
+
36
+ ```javascript
37
+ // 校验前置阶段
38
+ const session = resumeSession(sessionId)
39
+ const s1Status = session.stages.S1.status
40
+ ```
41
+
42
+ | 情况 | 处理方式 |
43
+ |------|---------|
44
+ | `stages.S1.status === 'completed'` | ✅ 校验通过,继续执行 Step 2 |
45
+ | `stages.S1.status !== 'completed'` | ❌ 阻止执行,提示用户先完成 S1 |
46
+
47
+ 若 S1 未完成,输出提示并终止:
48
+
49
+ ```
50
+ ❌ 无法进入 S2 技术方案阶段
51
+ S1 PRD 生成尚未完成(当前状态: {s1Status})
52
+ 请先完成 S1 阶段后再进入 S2。
53
+ ```
54
+
55
+ **1.2 加载 S1 产出物**
56
+
57
+ 确认 S1 产出文件 `01-prd.md` 存在于 Session 目录中:
58
+
59
+ ```javascript
60
+ // 加载 S1 产出物路径
61
+ const prdPath = `${session_dir}/01-prd.md`
62
+ ```
63
+
64
+ | 情况 | 处理方式 |
65
+ |------|---------|
66
+ | `01-prd.md` 文件存在 | ✅ 继续执行 |
67
+ | `01-prd.md` 文件缺失 | ❌ 阻止执行,提示用户 S1 产出物缺失,需重新执行 S1 |
68
+
69
+ **1.3 更新 Session 状态**
70
+
71
+ ```javascript
72
+ // 更新 S2 阶段状态为进行中
73
+ updateStageStatus(sessionId, 'S2', 'in_progress')
74
+ ```
75
+
76
+ **1.4 项目工程路径**
77
+
78
+ 项目工程路径默认为当前工作区根目录 `.`,不询问用户。S3 阶段执行时,脚手架会在该路径下创建以项目名命名的子目录。
79
+
80
+ ```
81
+ 📂 项目工程路径: .(当前工作区根目录)
82
+ ```
83
+
84
+ ```javascript
85
+ // 直接使用当前工作区根目录
86
+ session.inputs.project_path = '.'
87
+ fs.writeFileSync('.ai-workspace/user-config.json', JSON.stringify(userConfig, null, 2))
88
+ }
89
+ ```
90
+
91
+ | 情况 | `session.json` | `user-config.json` | 后续影响 |
92
+ |------|---------------|-------------------|---------|
93
+ | 用户提供有效路径 | `inputs.project_path = "apps/..."` | `project_path = "apps/..."` | Step 2 上下文加载时扫描项目结构 |
94
+ | 用户跳过 | `inputs.project_path = null` | 不修改 | Agent 视为全新项目 |
95
+ | 已保存路径确认使用 | `inputs.project_path = "apps/..."` | 不修改(已存在) | Step 2 上下文加载时扫描项目结构 |
96
+
97
+ ---
98
+
99
+ ### Step 2: 上下文加载
100
+
101
+ 加载 S2 阶段所需的知识库、前置产出、项目工程现状和 Agent 提示词。
102
+
103
+ ```
104
+ 📚 正在加载 S2 上下文...
105
+ ```
106
+
107
+ **2.1 调用上下文加载器**
108
+
109
+ ```javascript
110
+ // 加载阶段上下文(含项目工程扫描)
111
+ const context = loadStageContext('S2', session)
112
+ ```
113
+
114
+ 加载内容说明:
115
+
116
+ | 资源类型 | 加载内容 | 来源 |
117
+ |---------|---------|------|
118
+ | SKILL.md | Vela 快应用完整开发指南(项目结构、manifest、组件、API、最佳实践) | `resource-paths.json` → `paths.skill_file` |
119
+ | 前置产出 | `01-prd.md`(已审核通过的 PRD 文档) | `workflow-config.json` → `S2.prerequisites: ["S1"]` |
120
+ | 项目工程现状 | manifest.json、已有页面、组件、API 依赖等 | `session.json → inputs.project_path` → `scanProjectStructure()` |
121
+
122
+ > **知识加载策略**:上下文加载器优先加载 SKILL.md 全文作为基础知识。当 Agent 需要某个组件/API 的完整属性列表或边界 case 时,使用 `webFetch` 访问 SKILL.md 中标注的官网链接按需获取详细文档。
123
+
124
+ > **项目工程扫描策略**:若 `session.json` 中 `inputs.project_path` 不为 `null`,上下文加载器会自动调用 `scanProjectStructure(session)` 扫描项目目录,分析 manifest.json、已有页面列表、自定义组件、系统 API 依赖等,生成项目现状摘要注入到 Agent 上下文中。Agent 据此判断是全新项目还是增量开发,并在技术方案中明确标注新增/修改的页面和组件。
125
+
126
+ **2.2 注入上下文到 Agent 提示词**
127
+
128
+ ```javascript
129
+ // 读取 Agent 提示词模板
130
+ const agentPrompt = readFile('agents/tech_design_agent.prompt.md')
131
+
132
+ // 注入上下文,替换占位符
133
+ const injectedPrompt = injectContext(agentPrompt, context)
134
+ // 替换: {session.requirement_name} → 需求名称
135
+ // 替换: {knowledge_content} → 知识库内容(开发范式 + API 接口 + 组件规范)
136
+ // 替换: {previous_outputs} → S1 产出的 01-prd.md 内容
137
+ // 替换: {figma_data} → Figma 设计稿数据或"未提供设计稿"
138
+ // 替换: {project_analysis} → 项目工程现状分析或"未指定项目工程路径(全新项目)"
139
+ ```
140
+
141
+ **错误处理**:
142
+
143
+ | 错误场景 | 处理方式 |
144
+ |---------|---------|
145
+ | 知识库文件缺失 | ⚠️ 记录警告,跳过缺失文件,使用可用文件继续执行 |
146
+ | Agent 提示词文件缺失 | ❌ 阻止执行,提示用户检查 `agents/tech_design_agent.prompt.md` 是否存在 |
147
+ | S1 产出物(01-prd.md)读取失败 | ❌ 阻止执行,提示用户检查 S1 产出物完整性 |
148
+
149
+ ---
150
+
151
+ ### Step 3: Agent 执行
152
+
153
+ 使用注入上下文后的 TechDesign Agent 生成技术方案文档。
154
+
155
+ ```
156
+ 🤖 正在执行技术方案 Agent...
157
+ ```
158
+
159
+ **3.1 执行 TechDesign Agent**
160
+
161
+ 将注入上下文后的 `tech_design_agent.prompt.md` 交给 AI 执行,Agent 按照其内部 Workflow 生成技术方案文档。
162
+
163
+ Agent 生成的技术方案文档必须包含以下章节:
164
+
165
+ | 章节 | 说明 |
166
+ |------|------|
167
+ | 项目类型与变更概览 | 全新项目或已有项目增量开发,变更摘要 |
168
+ | 页面结构设计 | 页面列表(含变更类型 🆕/✏️/♻️)、路由配置、页面导航关系图(Mermaid) |
169
+ | 组件拆分 | 组件树结构、自定义组件定义(含变更类型)、内置组件使用清单 |
170
+ | 数据模型定义 | 页面数据模型、组件数据模型、共享数据结构 |
171
+ | API 调用方案 | 系统 API 调用清单(含已声明/需新增标注)、网络请求方案、错误处理策略 |
172
+ | 状态管理方案 | 页面内状态、跨页面状态、数据流向图(Mermaid) |
173
+ | 文件目录结构 | 完整的项目文件目录结构(含变更类型标注) |
174
+ | 变更影响分析 | 仅已有项目:manifest.json 变更、已有文件修改清单、新增文件清单 |
175
+
176
+ **3.2 API 引用准确性**
177
+
178
+ Agent 在引用 Vela 快应用 API 时,必须从知识库中查找对应 API 的签名、参数和使用示例,确保引用准确。
179
+
180
+ **3.3 面向编码 Agent 写作**
181
+
182
+ 技术方案是下游"编码 Agent"的直接输入,必须包含足够的实现细节(类定义、接口签名、数据结构),禁止使用"待定"、"后续补充"等占位描述。
183
+
184
+ **错误处理**:
185
+
186
+ | 错误场景 | 处理方式 |
187
+ |---------|---------|
188
+ | Agent 生成失败 | 🔄 自动重试一次;若仍失败,提示用户并提供选项:[r] 重试 / [e] 修改输入 / [q] 退出保存 |
189
+
190
+ ---
191
+
192
+ ### Step 4: 产出物保存
193
+
194
+ 将生成的技术方案文档保存到 Session 目录。
195
+
196
+ ```
197
+ 💾 正在保存技术方案文档...
198
+ ```
199
+
200
+ **4.1 保存文件**
201
+
202
+ ```javascript
203
+ // 保存技术方案到 session 目录
204
+ saveFile(`${session_dir}/02-tech-design.md`, techDesignContent)
205
+ ```
206
+
207
+ **4.2 更新 Session 状态**
208
+
209
+ ```javascript
210
+ // 更新阶段状态为待审核
211
+ updateStageStatus(sessionId, 'S2', 'pending_review', '02-tech-design.md')
212
+ ```
213
+
214
+ 保存完成后输出:
215
+
216
+ ```
217
+ ✅ 技术方案文档已生成
218
+ 📄 文件: {session_dir}/02-tech-design.md
219
+ ```
220
+
221
+ ---
222
+
223
+ ### Step 5: Checkpoint 交互
224
+
225
+ > ⚠️ **关键规则:必须阻塞等待用户输入**。技术方案文档生成并保存后,展示摘要和操作选项,然后**停止一切后续操作**,等待用户输入 `y`/`e`/`n` 命令。**严禁在用户未明确输入命令前自动进入 S3 功能研发阶段或执行任何后续步骤。**
226
+
227
+ 暂停工作流,展示技术方案摘要,等待用户审核。
228
+
229
+ ```
230
+ 📋 技术方案摘要:
231
+ • 需求名称: {requirement_name}
232
+ • 页面数: {page_count} 个
233
+ • 自定义组件数: {component_count} 个
234
+ • 系统 API 调用: {api_count} 个
235
+ • 数据模型数: {model_count} 个
236
+ • 文件目录层级: {dir_depth} 层
237
+ ```
238
+
239
+ 提供操作选项:
240
+
241
+ ```
242
+ ❓ 请选择操作:
243
+ [y] 确认 — 保存技术方案,标记 S2 完成,进入 S3 功能研发
244
+ [e] 编辑 — 提供修改意见,迭代生成
245
+ [n] 放弃 — 丢弃当前技术方案,重新生成
246
+
247
+ ⏳ 等待您的输入...
248
+ ```
249
+
250
+ **命令处理**:
251
+
252
+ > 严格按照 `.workflow/stages/commands.md` 中定义的逻辑处理用户命令。
253
+
254
+ | 命令 | 处理逻辑 |
255
+ |------|---------|
256
+ | `y` | 调用 `updateStageStatus(sessionId, 'S2', 'completed', '02-tech-design.md')`,返回 `workflow_starter.md` 的 Step 5 进行阶段流转 |
257
+ | `e` | 接收用户修改意见,追加到 Agent 上下文,重新执行 Step 3(支持多轮迭代) |
258
+ | `n` | 丢弃当前产出,调用 `updateStageStatus(sessionId, 'S2', 'in_progress')`,返回 Step 1 重新执行 |
259
+
260
+ ---
261
+
262
+ ## 产出物规范
263
+
264
+ | 属性 | 值 |
265
+ |------|-----|
266
+ | 文件名 | `02-tech-design.md` |
267
+ | 格式 | Markdown |
268
+ | 保存路径 | `.ai-workspace/sessions/{session_id}/02-tech-design.md` |
269
+
270
+ ### 必含章节
271
+
272
+ 1. **页面结构设计** — 页面列表(含变更类型标注)、路由配置、页面导航关系图
273
+ 2. **组件拆分** — 组件树结构、自定义组件定义(含变更类型标注)、内置组件使用清单
274
+ 3. **数据模型定义** — 页面数据模型、组件数据模型、共享数据结构
275
+ 4. **API 调用方案** — 系统 API 调用清单(含已声明/需新增标注)、网络请求方案、错误处理策略
276
+ 5. **状态管理方案** — 页面内状态、跨页面状态、数据流向图
277
+ 6. **文件目录结构** — 完整的项目文件目录结构(含变更类型标注)
278
+ 7. **变更影响分析**(仅已有项目)— manifest.json 变更清单、已有文件修改清单、新增文件清单
279
+
280
+ ---
281
+
282
+ ## 使用的脚本函数
283
+
284
+ | 函数 | 来源 | 用途 |
285
+ |------|------|------|
286
+ | `loadStageContext('S2', session)` | `context_loader.js` | 加载知识库、PRD 产出、Figma 数据和项目工程现状 |
287
+ | `injectContext(agentPrompt, context)` | `context_loader.js` | 替换 Agent 提示词占位符(含 `{project_analysis}`) |
288
+ | `scanProjectStructure(session)` | `context_loader.js` | 扫描项目工程目录,分析已有页面、组件、API 依赖(由 `loadStageContext` 内部调用) |
289
+ | `updateStageStatus(sessionId, stageId, status, outputPath)` | `session_manager.js` | 更新阶段状态 |
290
+ | `resumeSession(sessionId)` | `session_manager.js` | 恢复 Session(用于前置校验) |
291
+
292
+ ---
293
+
294
+ ## 文件引用
295
+
296
+ | 文件 | 用途 |
297
+ |------|------|
298
+ | `agents/tech_design_agent.prompt.md` | 技术方案 Agent 提示词模板 |
299
+ | `.workflow/resource-paths.json` | 知识库路径映射 |
300
+ | `.workflow/stages/commands.md` | 快捷命令处理逻辑 |
301
+ | `.workflow/scripts/context_loader.js` | 上下文加载器 |
302
+ | `.workflow/scripts/session_manager.js` | Session 管理器 |