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,306 @@
1
+ ---
2
+ description: 设计稿驱动开发规范 — 强制使用 MCP 获取设计稿节点,禁止跳过设计稿直接生成代码
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Vela 快应用设计稿驱动开发规范
7
+
8
+ > ⚠️ 本文件为强制执行规则,AI 必须无条件遵守。
9
+
10
+ ## 核心原则
11
+
12
+ **当用户提供设计稿地址(Figma 链接或设计图片)时,必须通过 MCP 工具获取设计稿节点信息,基于真实设计数据生成代码。禁止跳过设计稿、仅凭 PRD 文档直接生成代码。**
13
+
14
+ ## 强制流程
15
+
16
+ ### 1. 检测设计稿输入
17
+
18
+ 用户消息中包含以下内容时,视为提供了设计稿:
19
+
20
+ | 类型 | 触发条件 |
21
+ |------|----------|
22
+ | Figma 链接 | 包含 `figma.com` 的 URL |
23
+ | 设计图片 | 附件或引用的 `.png`、`.jpg`、`.svg` 文件 |
24
+
25
+ ### 2. 必须执行的 MCP 调用
26
+
27
+ #### Figma 设计稿
28
+
29
+ **⚠️ 前置条件:MCP 环境检查**
30
+
31
+ 在调用 MCP 获取设计稿之前,**必须先检查环境配置**:
32
+
33
+ ```bash
34
+ # 检查 uvx
35
+ which uvx || echo "❌ uvx 未安装"
36
+
37
+ # 检查 VS Code MCP 配置
38
+ grep -q '"figma"' "$HOME/Library/Application Support/AIoT IDE/User/settings.json" && echo "✅ Figma MCP 已配置" || echo "❌ 未配置"
39
+ ```
40
+
41
+ 如果环境检查未通过,**必须先引导用户完成配置**,禁止跳过配置直接生成代码。
42
+
43
+ **配置模板**(添加到 `settings.json`):
44
+ ```json
45
+ "chat.mcp.servers": {
46
+ "figma": {
47
+ "command": "uvx",
48
+ "args": ["mcp-figma"],
49
+ "env": {
50
+ "FIGMA_ACCESS_TOKEN": "YOUR_FIGMA_TOKEN_HERE",
51
+ "FASTMCP_LOG_LEVEL": "ERROR"
52
+ },
53
+ "disabled": false,
54
+ "autoApprove": ["get_file", "get_file_nodes", "export_image"]
55
+ }
56
+ }
57
+ ```
58
+
59
+ **获取流程**:
60
+ ```
61
+ 步骤 1:检查 MCP 环境(uvx + VS Code 配置 + Token)
62
+ 步骤 2:解析 Figma URL,提取 board/file ID 和 node-id
63
+ 步骤 3:调用 get_file 获取文件信息
64
+ 步骤 4:调用 get_file_nodes 提取具体节点的结构、样式、文本
65
+ 步骤 5:调用 export_image 导出图片资源
66
+ 步骤 6:基于节点数据生成组件结构和样式代码
67
+ ```
68
+
69
+ #### 设计图片
70
+
71
+ ```
72
+ 步骤 1:识别设计图片中的页面结构、组件布局
73
+ 步骤 2:提取颜色、字体、间距、圆角等视觉参数
74
+ 步骤 3:基于图片内容生成对应的组件结构和样式代码
75
+ ```
76
+
77
+ ### 3. 禁止行为
78
+
79
+ | 编号 | 禁止行为 | 原因 |
80
+ |------|----------|------|
81
+ | D1 | 用户提供了设计稿地址但未调用 MCP 获取 | 忽略用户输入 |
82
+ | D2 | 仅凭 PRD 文字描述生成 UI 代码 | 设计还原度无法保证 |
83
+ | D3 | 使用占位符图片替代设计稿中的真实图片 | 与设计不一致 |
84
+ | D4 | 忽略设计稿中的颜色、间距、字号等细节 | 样式偏差 |
85
+ | D5 | MCP 调用失败后直接跳过,不告知用户 | 静默失败 |
86
+
87
+ ### 4. 正确流程示例
88
+
89
+ **用户输入**:
90
+ > 创建一个手表应用商店,设计稿地址:https://www.figma.com/board/xxx
91
+
92
+ **正确执行** ✅:
93
+ ```
94
+ 1. 识别到 Figma 链接
95
+ 2. 调用 MCP 获取设计稿节点信息
96
+ 3. 解析节点结构:页面列表、组件层级、样式属性
97
+ 4. 导出设计稿中的图片资源到项目目录
98
+ 5. 基于真实设计数据生成 .ux 文件的 template 和 style
99
+ 6. 在代码中引用导出的真实图片路径
100
+ ```
101
+
102
+ **错误执行** ❌:
103
+ ```
104
+ 1. 识别到 Figma 链接
105
+ 2. 跳过 MCP 调用
106
+ 3. 仅根据 PRD 文档中的功能描述生成代码
107
+ 4. 使用 placeholder 图片
108
+ ```
109
+
110
+ ### 5. 设计稿数据提取清单
111
+
112
+ 通过 MCP 获取设计稿后,**必须**提取以下信息:
113
+
114
+ | 信息类型 | 用途 |
115
+ |----------|------|
116
+ | 页面结构 | 确定页面数量和导航关系 |
117
+ | 组件层级 | 确定组件拆分和嵌套关系 |
118
+ | 颜色值 | 填充 CSS 颜色属性 |
119
+ | 字号/字重 | 填充字体样式 |
120
+ | 间距/边距 | 填充布局间距 |
121
+ | 圆角/阴影 | 填充装饰样式 |
122
+ | 图片资源 | 导出到 `src/common/images/` 并引用 |
123
+ | 文本内容 | 作为页面初始数据 |
124
+ | 背景图/插画 | 导出到 `src/common/images/` 并引用 |
125
+ | 图标资源 | 导出到 `src/common/images/icons/` 并引用 |
126
+
127
+ > 📌 **不需要导出**:应用截图、预览图等动态内容图片,可使用 Mock 占位。
128
+
129
+ ### 6. 静态资源导出规范
130
+
131
+ 设计稿中的**所有静态资源**必须导出到项目中,确保生成效果与 UI 稿一致。
132
+
133
+ #### 6.1 资源分类与目录结构
134
+
135
+ ```
136
+ src/common/images/
137
+ ├── banners/ # 轮播图、Banner 图
138
+ ├── icons/ # 功能图标、Tab 图标
139
+ ├── backgrounds/ # 背景图、插画
140
+ ├── avatars/ # 用户头像
141
+ └── misc/ # 其他图片资源
142
+ ```
143
+
144
+ #### 6.2 导出规则
145
+
146
+ | 资源类型 | 导出格式 | scale | 命名规范 | 示例 |
147
+ |----------|----------|-------|----------|------|
148
+ | 功能图标 | PNG | 2x | `{功能}-icon.png` | `search-icon.png` |
149
+ | Tab 图标 | PNG | 2x | `tab-{名称}.png` | `tab-home.png` |
150
+ | Banner 图 | PNG | 2x | `banner-{序号}.png` | `banner-01.png` |
151
+ | 应用图标 | PNG | 2x | `app-{名称}.png` | `app-health.png` |
152
+ | 背景插画 | PNG | 2x | `bg-{场景}.png` | `bg-empty.png` |
153
+ | 用户头像 | PNG | 2x | `avatar-{类型}.png` | `avatar-default.png` |
154
+
155
+ #### 6.3 资源导出流程
156
+
157
+ ```
158
+ 步骤 1:遍历设计稿节点树,识别所有图片资源节点
159
+ 步骤 2:按资源类型分类,确定导出目录
160
+ 步骤 3:调用 MCP 导出图片(scale=2,PNG 格式)
161
+ 步骤 4:按命名规范重命名文件
162
+ 步骤 5:保存到对应的子目录
163
+ 步骤 6:在代码中引用真实路径
164
+ ```
165
+
166
+ #### 6.4 代码引用规范
167
+
168
+ ```css
169
+ /* 正确 ✅ — 引用导出的真实图片 */
170
+ .banner-image {
171
+ src: "/common/images/banners/banner-01.png";
172
+ }
173
+
174
+ .app-icon {
175
+ src: "/common/images/icons/search-icon.png";
176
+ }
177
+
178
+ .empty-state-image {
179
+ src: "/common/images/backgrounds/bg-empty.png";
180
+ }
181
+
182
+ /* 错误 ❌ — 使用占位符或外部 URL */
183
+ .banner-image {
184
+ src: "https://via.placeholder.com/440x180";
185
+ }
186
+
187
+ .app-icon {
188
+ src: "data:image/png;base64,...";
189
+ }
190
+ ```
191
+
192
+ ### 7. Mock 数据生成规范
193
+
194
+ 当设计稿中的图片无法直接导出(如动态内容、用户生成内容)时,**必须**生成本地 Mock 图片资源。
195
+
196
+ #### 7.1 需要 Mock 的场景
197
+
198
+ | 场景 | Mock 方式 | 说明 |
199
+ |------|-----------|------|
200
+ | 应用图标 | 生成纯色 + 文字的 PNG | 保留设计稿中的颜色和首字母 |
201
+ | 用户头像 | 生成默认头像 PNG | 使用设计稿中的默认头像样式 |
202
+ | 轮播图 | 生成带文案的 Banner PNG | 还原设计稿中的排版和配色 |
203
+ | 应用截图 | 生成模拟截图 PNG | 按设计稿中的布局生成 |
204
+ | 空状态插画 | 生成空状态提示图 | 使用设计稿中的插画风格 |
205
+
206
+ #### 7.2 Mock 图片生成规则
207
+
208
+ ```
209
+ 1. 从设计稿节点提取:尺寸、背景色、文字内容、文字颜色、字体大小
210
+ 2. 生成对应尺寸的 PNG 图片(scale=2)
211
+ 3. 保存到对应的资源目录
212
+ 4. 命名格式:mock-{用途}-{标识}.png
213
+ ```
214
+
215
+ #### 7.3 Mock 数据示例
216
+
217
+ ```javascript
218
+ // 应用列表 Mock 数据 — 使用本地导出的图片路径
219
+ const mockApps = [
220
+ {
221
+ id: '101',
222
+ name: '运动健康Pro',
223
+ icon: '/common/images/mock-app-health.png', // 本地 Mock 图片
224
+ developer: '小米健康',
225
+ rating: 4.8,
226
+ downloadCount: 12580
227
+ },
228
+ {
229
+ id: '102',
230
+ name: '音乐播放器',
231
+ icon: '/common/images/mock-app-music.png', // 本地 Mock 图片
232
+ developer: '小米音乐',
233
+ rating: 4.6,
234
+ downloadCount: 8920
235
+ }
236
+ ]
237
+
238
+ // 轮播图 Mock 数据 — 使用本地导出的图片路径
239
+ const mockBanners = [
240
+ {
241
+ id: 1,
242
+ imageUrl: '/common/images/banners/banner-01.png', // 本地导出
243
+ appId: '101',
244
+ title: '精选应用推荐'
245
+ },
246
+ {
247
+ id: 2,
248
+ imageUrl: '/common/images/banners/banner-02.png', // 本地导出
249
+ appId: '102',
250
+ title: '热门游戏'
251
+ }
252
+ ]
253
+ ```
254
+
255
+ ### 8. 视觉还原度保障
256
+
257
+ 为确保生成效果与 UI 稿一致,**必须**遵守以下规则:
258
+
259
+ #### 8.1 样式还原
260
+
261
+ | 属性 | 要求 |
262
+ |------|------|
263
+ | 颜色 | 必须使用设计稿中的精确色值(含透明度) |
264
+ | 字号 | 必须与设计稿一致,禁止自行调整 |
265
+ | 间距 | 必须与设计稿中的 padding/margin 一致 |
266
+ | 圆角 | 必须与设计稿中的 border-radius 一致 |
267
+ | 阴影 | 必须与设计稿中的 box-shadow 一致 |
268
+
269
+ #### 8.2 布局还原
270
+
271
+ | 要求 | 说明 |
272
+ |------|------|
273
+ | 组件尺寸 | 与设计稿一致(宽高、最小尺寸) |
274
+ | 组件间距 | 与设计稿中的间距一致 |
275
+ | 对齐方式 | 与设计稿中的对齐方式一致 |
276
+ | 列表数量 | 与设计稿中展示的数量一致 |
277
+ | 安全区域 | 圆屏安全边距必须应用
278
+
279
+ ### 9. MCP 调用失败处理
280
+
281
+ | 失败场景 | 处理方式 |
282
+ |----------|----------|
283
+ | 网络超时 | 提示用户检查网络后重试 |
284
+ | Token 无效 | 提示用户检查 Figma Token 配置 |
285
+ | 节点不存在 | 提示用户确认 node-id 是否正确 |
286
+ | 权限不足 | 提示用户授权 Figma 访问权限 |
287
+ | 其他错误 | 输出完整错误信息,暂停流程等待用户指示 |
288
+
289
+ **禁止在 MCP 调用失败后静默继续生成代码。**
290
+
291
+ ## 代码自检清单(设计稿部分)
292
+
293
+ 代码生成完成后,**必须**逐项检查:
294
+
295
+ - [ ] 用户提供设计稿地址时,已调用 MCP 获取设计稿节点
296
+ - [ ] 组件结构与设计稿层级一致
297
+ - [ ] 颜色值与设计稿一致(非占位色值)
298
+ - [ ] 字号、间距与设计稿一致
299
+ - [ ] 所有图片资源已从设计稿导出到 `src/common/images/` 目录
300
+ - [ ] 图片资源按类型分类存放(banners/icons/backgrounds/screenshots)
301
+ - [ ] 图片资源命名符合规范(`{类型}-{名称}.png`)
302
+ - [ ] 代码中引用的是真实图片路径,无 placeholder
303
+ - [ ] Mock 数据使用本地图片路径,非外部 URL
304
+ - [ ] 页面布局与设计稿视觉一致
305
+ - [ ] 组件尺寸与设计稿一致
306
+ - [ ] 间距、圆角、阴影与设计稿一致
@@ -0,0 +1,198 @@
1
+ ---
2
+ description: MCP 工具使用规范 — 明确 Figma MCP 和 velajs-mcp 的使用场景
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Vela 快应用 MCP 工具使用规范
7
+
8
+ > ⚠️ 本文件为强制执行规则,AI 必须无条件遵守。
9
+
10
+ ## 核心原则
11
+
12
+ **Vela 快应用开发涉及两个 MCP 工具,必须严格按照使用阶段区分:**
13
+
14
+ | MCP 工具 | 用途 | 使用阶段 |
15
+ |----------|------|----------|
16
+ | `uvx mcp-figma` | 获取设计稿信息、导出图片资源 | 设计稿驱动开发阶段(S1/S2/S3) |
17
+ | `velajs-mcp` | 调试运行项目、热重载、查看日志 | 项目生成后的调试阶段 |
18
+
19
+ ---
20
+
21
+ ## 一、Figma MCP(`uvx mcp-figma`)
22
+
23
+ ### 1.1 使用场景
24
+
25
+ 当用户提供 Figma 设计稿链接时,**必须**使用此工具获取设计稿信息。
26
+
27
+ ### 1.2 工具配置
28
+
29
+ Figma MCP 服务器配置位于:
30
+
31
+ | IDE | 配置文件位置 |
32
+ |-----|-------------|
33
+ | **VS Code** | `~/Library/Application Support/Code/User/mcp.json` |
34
+ | **AIoT IDE** | `~/Library/Application Support/AIoT IDE/User/settings.json` |
35
+
36
+ **VS Code mcp.json 配置示例**:
37
+
38
+ ```json
39
+ {
40
+ "servers": {
41
+ "figma": {
42
+ "type": "stdio",
43
+ "command": "uvx",
44
+ "args": ["mcp-figma"],
45
+ "env": {
46
+ "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
47
+ "FASTMCP_LOG_LEVEL": "ERROR",
48
+ "UV_TOOL_DIR": "~/.uv/tools",
49
+ "UV_CACHE_DIR": "~/.uv/cache"
50
+ },
51
+ "disabled": false,
52
+ "autoApprove": ["get_file", "get_file_nodes", "export_image"]
53
+ }
54
+ }
55
+ }
56
+ ```
57
+
58
+ **AIoT IDE settings.json 配置示例**:
59
+
60
+ ```json
61
+ {
62
+ "chat.mcp.servers": {
63
+ "figma": {
64
+ "type": "stdio",
65
+ "command": "uvx",
66
+ "args": ["mcp-figma"],
67
+ "env": {
68
+ "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
69
+ "FASTMCP_LOG_LEVEL": "ERROR",
70
+ "UV_TOOL_DIR": "~/.uv/tools",
71
+ "UV_CACHE_DIR": "~/.uv/cache"
72
+ },
73
+ "disabled": false,
74
+ "autoApprove": ["get_file", "get_file_nodes", "export_image"]
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ > ⚠️ **必须包含 `"type": "stdio"` 字段**,否则 IDE 无法识别该 MCP 服务器。
81
+
82
+ ### 1.3 可用工具
83
+
84
+ | 工具名称 | 用途 | 调用方式 |
85
+ |----------|------|----------|
86
+ | `get_file` | 获取文件基本信息 | VS Code 内置 MCP |
87
+ | `get_file_nodes` | 获取节点结构和样式 | VS Code 内置 MCP |
88
+ | `export_image` | 导出设计稿图片 | VS Code 内置 MCP |
89
+
90
+ ### 1.4 调用示例
91
+
92
+ ```
93
+ // ✅ 正确:通过 VS Code 内置 MCP 工具调用
94
+ get_file(file_key="xxx")
95
+ get_file_nodes(file_key="xxx", node_ids=["xxx"])
96
+ export_image(file_key="xxx", node_ids=["xxx"], format="png", scale=2)
97
+ ```
98
+
99
+ ### 1.5 Figma URL 解析
100
+
101
+ 从 Figma 链接中提取关键信息:
102
+
103
+ ```
104
+ https://www.figma.com/board/rt8xDAJi7vgWCHtMcBbckb/Untitled?node-id=2-1621&t=zSH8vxrdBaRumNh0-1
105
+ │ │ │ │
106
+ │ │ │ └─ node-id
107
+ │ │ └─ board name
108
+ │ └─ file_key
109
+ └─ protocol
110
+ ```
111
+
112
+ **提取方法**:
113
+ - `file_key`:URL 路径中的 `/board/{file_key}/`
114
+ - `node_id`:URL 参数中的 `node-id={node_id}`
115
+
116
+ ---
117
+
118
+ ## 二、Vela JS MCP(`velajs-mcp`)
119
+
120
+ ### 2.1 使用场景
121
+
122
+ 项目代码生成完成后,**仅在调试阶段**使用此工具。
123
+
124
+ ### 2.2 可用命令
125
+
126
+ | 命令 | 用途 |
127
+ |------|------|
128
+ | `npx velajs-mcp dev` | 启动开发服务器,热重载调试 |
129
+ | `npx velajs-mcp build` | 构建项目 |
130
+ | `npx velajs-mcp release` | 打包发布 |
131
+
132
+ ### 2.3 调用示例
133
+
134
+ ```bash
135
+ # 在项目目录下执行
136
+ cd {projectPath}
137
+ npx velajs-mcp dev
138
+ ```
139
+
140
+ ---
141
+
142
+ ## 三、禁止行为
143
+
144
+ | 编号 | 禁止行为 | 原因 |
145
+ |------|----------|------|
146
+ | F1 | 设计稿阶段使用 `velajs-mcp figma ...` | velajs-mcp 不支持获取设计稿 |
147
+ | F2 | 调试阶段使用 `uvx mcp-figma` | 工具用途不匹配 |
148
+ | F3 | 跳过 Figma MCP 调用,直接生成代码 | 设计还原度无法保证 |
149
+ | F4 | MCP 调用失败后静默继续 | 静默失败 |
150
+
151
+ ---
152
+
153
+ ## 四、正确流程示例
154
+
155
+ ### 场景:用户提供了 Figma 设计稿
156
+
157
+ **阶段一:设计稿获取(使用 Figma MCP)**
158
+ ```
159
+ 1. 识别到 Figma 链接
160
+ 2. 解析 URL,提取 file_key 和 node_id
161
+ 3. 调用 get_file / get_file_nodes / export_image
162
+ 4. 解析节点结构、样式、文本内容
163
+ 5. 导出图片资源到项目目录
164
+ 6. 基于真实设计数据生成代码
165
+ ```
166
+
167
+ **阶段二:项目调试(使用 velajs-mcp)**
168
+ ```
169
+ 1. 项目代码生成完成
170
+ 2. cd {projectPath}
171
+ 3. npx velajs-mcp dev
172
+ 4. 启动开发服务器进行调试
173
+ ```
174
+
175
+ ### 错误示例 ❌
176
+ ```
177
+ // 错误:在设计稿阶段使用 velajs-mcp
178
+ npx velajs-mcp figma get-board-info <url>
179
+
180
+ // 错误:在调试阶段使用 Figma MCP
181
+ get_file(file_key="xxx") // 调试阶段不需要
182
+ ```
183
+
184
+ ---
185
+
186
+ ## 五、代码自检清单
187
+
188
+ ### 设计稿阶段
189
+ - [ ] 使用的是 VS Code 内置 Figma MCP 工具(`uvx mcp-figma`)
190
+ - [ ] 未使用 `velajs-mcp` 获取设计稿信息
191
+ - [ ] MCP 调用成功获取了设计稿信息
192
+ - [ ] 设计稿中的图片资源已导出到项目目录
193
+ - [ ] 代码中引用的是真实图片路径
194
+
195
+ ### 调试阶段
196
+ - [ ] 项目代码已生成完成
197
+ - [ ] 使用 `npx velajs-mcp dev` 启动调试
198
+ - [ ] 调试过程中未使用 Figma MCP
@@ -0,0 +1,119 @@
1
+ ---
2
+ description: 文件格式规范 — .ux 文件结构、manifest.json、package.json、项目目录结构
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Vela 快应用文件格式规范
7
+
8
+ > ⚠️ 本文件为强制执行规则,AI 必须无条件遵守。
9
+
10
+ ## .ux 文件格式
11
+
12
+ 每个页面是一个 `.ux` 文件,**template 只能有一个根节点**,包含三部分:
13
+
14
+ ```html
15
+ <template>
16
+ <div class="container">
17
+ <!-- 页面内容 -->
18
+ </div>
19
+ </template>
20
+
21
+ <style>
22
+ .container { flex-direction: column; }
23
+ </style>
24
+
25
+ <script>
26
+ export default {
27
+ private: {},
28
+ onInit() {},
29
+ onDestroy() {
30
+ // 清理资源
31
+ }
32
+ }
33
+ </script>
34
+ ```
35
+
36
+ ### 外部样式引入
37
+
38
+ ```html
39
+ <style src="./style.css"></style>
40
+ ```
41
+
42
+ ❌ **禁止** `@import` 语句
43
+
44
+ ## manifest.json 必需字段
45
+
46
+ ```json
47
+ {
48
+ "package": "com.example.appname",
49
+ "name": "应用名称",
50
+ "icon": "/common/logo.png",
51
+ "versionCode": 1,
52
+ "minPlatformVersion": 1200,
53
+ "deviceTypeList": ["watch"],
54
+ "config": {
55
+ "logLevel": "log",
56
+ "designWidth": 480
57
+ },
58
+ "features": [
59
+ { "name": "@system.router" }
60
+ ],
61
+ "router": {
62
+ "entry": "pages/index",
63
+ "pages": {
64
+ "pages/index": {
65
+ "component": "index"
66
+ }
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ **注意**:`designWidth` 在 `config` 内部,不是根级字段。
73
+
74
+ ## package.json 标准格式
75
+
76
+ ```json
77
+ {
78
+ "name": "项目名",
79
+ "version": "1.0.0",
80
+ "scripts": {
81
+ "start": "aiot start --watch",
82
+ "build": "aiot build",
83
+ "release": "aiot release"
84
+ },
85
+ "devDependencies": {
86
+ "aiot-toolkit": "^2.0.5"
87
+ }
88
+ }
89
+ ```
90
+
91
+ **禁止**使用 `hap-toolkit`,必须使用 `aiot-toolkit`。
92
+
93
+ ## 项目目录结构
94
+
95
+ ```
96
+ {project}/
97
+ ├── package.json
98
+ ├── README.md
99
+ ├── .gitignore
100
+ └── src/
101
+ ├── manifest.json
102
+ ├── app.ux
103
+ ├── config-watch.json (内容为 {})
104
+ ├── pages/{PageName}/
105
+ │ └── index.ux
106
+ ├── i18n/
107
+ │ ├── defaults.json
108
+ │ └── zh-CN.json
109
+ └── common/
110
+ └── logo.png
111
+ ```
112
+
113
+ ## .gitignore 标准内容
114
+
115
+ ```
116
+ node_modules/
117
+ build/
118
+ dist/
119
+ ```
@@ -0,0 +1,67 @@
1
+ ---
2
+ description: 布局规范 — Flexbox 布局、圆屏安全区域、滚动容器、自适应策略
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Vela 快应用布局规范
7
+
8
+ > ⚠️ 本文件为强制执行规则,AI 必须无条件遵守。
9
+
10
+ ## Flexbox 布局
11
+
12
+ - `div` 默认 `flex-direction: column`
13
+ - 所有布局使用 Flexbox,不支持 Grid
14
+ - 使用 `justify-content` 和 `align-items` 对齐
15
+
16
+ ## 圆形屏幕安全区域
17
+
18
+ 目标屏幕:**466×466 圆屏**
19
+
20
+ | 方向 | 安全边距 | 计算方式 |
21
+ |------|----------|----------|
22
+ | 上下 | 屏幕高度 10% | 48px |
23
+ | 左右 | 屏幕宽度 7-8% | 34-38px |
24
+
25
+ ### 安全区域容器
26
+
27
+ ```css
28
+ .safe-area {
29
+ padding-top: 48px;
30
+ padding-bottom: 48px;
31
+ padding-left: 36px;
32
+ padding-right: 36px;
33
+ }
34
+ ```
35
+
36
+ ## 内容超出一屏
37
+
38
+ 内容超出一屏时,**必须**用 `<scroll scroll-y="true">` 包裹:
39
+
40
+ ```html
41
+ <template>
42
+ <scroll scroll-y="true" class="scroll-container">
43
+ <div class="content">
44
+ <!-- 长内容 -->
45
+ </div>
46
+ </scroll>
47
+ </template>
48
+ ```
49
+
50
+ ## 字体规范
51
+
52
+ | 类型 | 字号 | 字重 |
53
+ |------|------|------|
54
+ | 大标题 | 32-36px | bold |
55
+ | 标题 | 24-28px | bold |
56
+ | 正文 | 24px | normal |
57
+ | 辅助文字 | 20px | normal |
58
+
59
+ ## 颜色建议
60
+
61
+ | 用途 | 推荐色值 |
62
+ |------|----------|
63
+ | 背景 | #000000(深色主题) |
64
+ | 主文字 | #FFFFFF |
65
+ | 辅助文字 | #999999 |
66
+ | 主题色 | 根据品牌自定义 |
67
+ | 强调色 | 根据品牌自定义 |