@dev-workflow/skill 0.1.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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/bin/cli.mjs +9 -0
  4. package/package.json +39 -0
  5. package/skills/artifact/README.md +23 -0
  6. package/skills/execution/devFlow/SKILL.md +341 -0
  7. package/skills/execution/devFlow/agents/openai.yaml +7 -0
  8. package/skills/execution/devFlow/domains/backend/references/api-tech.md +173 -0
  9. package/skills/execution/devFlow/domains/backend/scripts/check_api_tech_doc.mjs +170 -0
  10. package/skills/execution/devFlow/domains/backend/scripts/check_api_tech_doc.test.mjs +89 -0
  11. package/skills/execution/devFlow/domains/backend/templates/api-tech.md +164 -0
  12. package/skills/execution/devFlow/domains/frontend/references/contract-check.md +270 -0
  13. package/skills/execution/devFlow/domains/frontend/references/foundation-freeze.md +92 -0
  14. package/skills/execution/devFlow/domains/frontend/references/lightweight-flow.md +55 -0
  15. package/skills/execution/devFlow/domains/frontend/references/page-build.md +268 -0
  16. package/skills/execution/devFlow/domains/frontend/references/page-tech.md +414 -0
  17. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/field-common.md +69 -0
  18. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/fields-complex.md +105 -0
  19. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/fields-id-code.md +44 -0
  20. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/fields-number-date.md +106 -0
  21. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/fields-relation.md +144 -0
  22. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/fields-selectors.md +102 -0
  23. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/fields-text.md +130 -0
  24. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/index.md +42 -0
  25. package/skills/execution/devFlow/domains/frontend/references/product-design-specs/interaction.md +61 -0
  26. package/skills/execution/devFlow/domains/frontend/scripts/check_page_tech_doc.mjs +82 -0
  27. package/skills/execution/devFlow/domains/frontend/scripts/contract_check_static.mjs +145 -0
  28. package/skills/execution/devFlow/domains/frontend/scripts/generate_foundation_summary.mjs +224 -0
  29. package/skills/execution/devFlow/domains/frontend/templates/contract-report.md +66 -0
  30. package/skills/execution/devFlow/domains/frontend/templates/mini-plan-l0.md +7 -0
  31. package/skills/execution/devFlow/domains/frontend/templates/mini-plan-l1.md +9 -0
  32. package/skills/execution/devFlow/domains/frontend/templates/page-build/component.tsx.tpl +8 -0
  33. package/skills/execution/devFlow/domains/frontend/templates/page-build/constants.ts.tpl +5 -0
  34. package/skills/execution/devFlow/domains/frontend/templates/page-build/index.ts.tpl +1 -0
  35. package/skills/execution/devFlow/domains/frontend/templates/page-build/route.tsx.tpl +11 -0
  36. package/skills/execution/devFlow/domains/frontend/templates/page-build/service.ts.tpl +17 -0
  37. package/skills/execution/devFlow/domains/frontend/templates/page-build/types.ts.tpl +11 -0
  38. package/skills/execution/devFlow/domains/frontend/templates/page-tech.md +103 -0
  39. package/skills/execution/devFlow/domains/requirement/references/prd-review.md +129 -0
  40. package/skills/execution/devFlow/domains/requirement/templates/prd-review.md +57 -0
  41. package/skills/execution/figmaSync/SKILL.md +349 -0
  42. package/skills/execution/figmaSync/chapters/apply.md +177 -0
  43. package/skills/execution/figmaSync/chapters/plan.md +359 -0
  44. package/skills/execution/figmaSync/chapters/prepare.md +47 -0
  45. package/skills/execution/figmaSync/examples/native-css.md +129 -0
  46. package/skills/execution/figmaSync/examples/plan-doc-sample.md +39 -0
  47. package/skills/execution/figmaSync/scripts/_shared/session-log.mjs +82 -0
  48. package/skills/execution/figmaSync/scripts/_shared/token-resolver.mjs +132 -0
  49. package/skills/execution/figmaSync/scripts/_shared/token-source.mjs +145 -0
  50. package/skills/execution/figmaSync/scripts/figma-sync-report.mjs +448 -0
  51. package/skills/execution/figmaSync/scripts/icon-inventory.mjs +165 -0
  52. package/skills/execution/figmaSync/scripts/lookup-var.mjs +184 -0
  53. package/skills/execution/figmaSync/scripts/match-token.mjs +210 -0
  54. package/skills/execution/figmaSync/scripts/prepare-check.mjs +290 -0
  55. package/skills/execution/figmaSync/scripts/verify-plan.mjs +458 -0
  56. package/skills/execution/figmaSync/snapshots/README.md +13 -0
  57. package/skills/execution/figmaSync/snapshots/last-sync.md +1538 -0
  58. package/skills/execution/figmaSync/templates/PLAN.md.tpl +227 -0
  59. package/skills/review/consistency-checker/SKILL.md +112 -0
  60. package/skills/review/consistency-checker/rules/README.md +16 -0
  61. package/src/cli/agents.mjs +16 -0
  62. package/src/cli/copy.mjs +95 -0
  63. package/src/cli/install.mjs +131 -0
  64. package/src/cli/prompts.mjs +66 -0
  65. package/tools/lark/README.md +78 -0
  66. package/tools/lark/references/lark-doc.md +156 -0
  67. package/tools/lark/references/lark-read.md +235 -0
  68. package/tools/lark/references/prepare.md +147 -0
  69. package/tools/lark/scripts/lark_api.mjs +404 -0
  70. package/tools/lark/scripts/lark_api.test.mjs +63 -0
  71. package/tools/lark/scripts/lark_check_permissions.mjs +52 -0
  72. package/tools/lark/scripts/lark_publish_doc.mjs +299 -0
  73. package/tools/lark/scripts/lark_read_docx.mjs +328 -0
  74. package/tools/lark/scripts/markdown_to_lark_blocks.mjs +397 -0
@@ -0,0 +1,270 @@
1
+ # contract-check 子命令
2
+
3
+ `contract-check` 用于在 `page-tech` 和 `page-build`
4
+ 之间做可落地性检查。它的目标不是生成代码,而是判断页面方案是否已经具备创建 admin-fe 页面基建的条件。
5
+
6
+ 执行 admin-fe 检查时,必须读取或内化项目根目录
7
+ `ADMIN_FE_WORKFLOW.md`,并把其中规则作为检查标准。
8
+
9
+ ## 定位
10
+
11
+ - 输入:`page-tech.md`、飞书文档读取结果、API 文档、Apifox
12
+ MCP 结果、用户补充约束和当前项目结构。
13
+ - 输出:`contract-report.md`。
14
+ - 结论:通过、不通过或阻塞。
15
+ - 后续动作:通过后允许进入 `page-build`;不通过或阻塞时回到 `page-tech` 修正。
16
+
17
+ ## v1 形态
18
+
19
+ 第一版采用人工 checklist 模式。
20
+
21
+ 规则:
22
+
23
+ - Agent 逐条核对并输出 Markdown 报告。
24
+ - 每条结论必须引用真实证据。
25
+ - 证据可以是文件路径、代码片段、文档章节、飞书读取内容、API 文档段落或 Apifox
26
+ MCP 返回结果。
27
+ - 不承诺自动化脚本能力。
28
+ - 不生成页面基建文件。
29
+ - 不修改业务源码。
30
+
31
+ 机械规则可以用 `scripts/contract_check_static.mjs`
32
+ 辅助检查。该脚本只检查 route 目录命名、组件文件命名、service/types/constants 存在性和
33
+ `src/routeTree.gen.ts` 是否被修改,不判断接口语义、状态语义或组件职责。
34
+
35
+ ## 输入要求
36
+
37
+ ### 必需输入
38
+
39
+ - 页面方案或页面上下文:本地 `page-tech.md`、飞书文档读取结果或等价页面方案。
40
+ - 当前项目结构:至少读取目标路由上级目录、相似 route、相关 service 目录和公共组件目录。
41
+ - admin-fe 项目规则:读取 `ADMIN_FE_WORKFLOW.md`。
42
+
43
+ ### 条件输入
44
+
45
+ - 页面依赖接口时,必须提供 API 文档或 Apifox MCP 读取结果。
46
+ - 页面复用已有模块时,必须读取相关 route、component、service、types 或 constants。
47
+ - 页面涉及 Wujie、shell、全局状态时,必须读取对应 `src/shared/wujie-bridge.ts`
48
+ 或 `src/stores/shell-store.ts`。
49
+
50
+ ### 缺失处理
51
+
52
+ - 必需输入缺失时,结论为阻塞。
53
+ - 条件输入缺失且影响基建文件创建时,结论为阻塞。
54
+ - 不影响基建创建的缺口可以列为非阻塞待确认项。
55
+
56
+ ## 检查项
57
+
58
+ ### 1. 路由路径
59
+
60
+ 检查目标:
61
+
62
+ - 路由路径是否明确。
63
+ - 是否位于 `src/routes`。
64
+ - 路由目录是否使用 lowercase kebab-case。
65
+ - 是否需要创建或修改 `src/routeTree.gen.ts`。
66
+
67
+ 通过标准:
68
+
69
+ - route 路径可直接映射到 `src/routes/<feature>/<page>/route.tsx`。
70
+ - 不需要手动编辑 `src/routeTree.gen.ts`。
71
+
72
+ 失败或阻塞:
73
+
74
+ - 路由路径缺失。
75
+ - 路由路径与现有页面冲突。
76
+ - 方案要求手动修改 `src/routeTree.gen.ts`。
77
+
78
+ ### 2. 目录和文件命名
79
+
80
+ 检查目标:
81
+
82
+ - route 目录是否符合 lowercase kebab-case。
83
+ - React 组件文件是否符合 PascalCase。
84
+ - 非组件文件是否符合 kebab-case。
85
+ - service 是否按业务域放在 `src/services`。
86
+ - UI 复用顺序是否符合 Apex UI -> `src/common` -> 业务局部组件 -> 新建局部组件。
87
+
88
+ 通过标准:
89
+
90
+ - 文件计划可以按 admin-fe 规则直接创建。
91
+ - 不需要跨无关模块改目录结构。
92
+
93
+ 失败或阻塞:
94
+
95
+ - 文件命名含拼音、单字母或无意义缩写。
96
+ - 页面局部组件被错误规划到公共目录。
97
+ - service 模块位置与现有业务域冲突。
98
+
99
+ ### 3. API 契约
100
+
101
+ 检查目标:
102
+
103
+ - 每个接口是否具备接口名。
104
+ - 每个接口是否具备请求路径。
105
+ - 每个接口是否具备请求 method。
106
+ - 每个接口是否具备入参。
107
+ - 每个接口是否具备响应。
108
+ - 每个接口是否映射到调用组件。
109
+ - 每个接口是否映射到触发交互。
110
+ - 每个接口是否说明成功后的刷新范围和异常反馈。
111
+ - API 是否统一走 `src/services/request.ts`,页面内是否避免重复封装请求基础逻辑。
112
+
113
+ 通过标准:
114
+
115
+ - 能生成 service 函数签名。
116
+ - 能在页面或组件中保留准确调用关系。
117
+ - 缺失内容只限于非阻塞字段,且可用 `TODO(api)` 标记。
118
+
119
+ 失败或阻塞:
120
+
121
+ - 列表、详情、保存、删除等核心接口缺少路径、入参或响应。
122
+ - 接口来源无法验证。
123
+ - Apifox 项目缺少可用 MCP 读取结果且用户要求基于 Apifox 落地。
124
+
125
+ ### 4. 页面状态
126
+
127
+ 检查目标:
128
+
129
+ - 每个页面状态是否具备来源。
130
+ - 每个页面状态是否具备变化条件。
131
+ - 每个页面状态是否具备消费组件。
132
+ - loading、空数据、失败、无权限、提交中等状态是否与页面能力匹配。
133
+ - 页面临时状态是否避免使用 Zustand。
134
+ - shell 状态是否使用 `src/stores/shell-store.ts`。
135
+
136
+ 通过标准:
137
+
138
+ - 页面状态可以用组件 state、Context 或 useReducer 表达。
139
+ - 不需要新增全局 Zustand store,除非方案和证据明确要求。
140
+
141
+ 失败或阻塞:
142
+
143
+ - 状态来源不明。
144
+ - 状态变化条件不明。
145
+ - 方案要求创建全局状态但没有跨页面或持久化证据。
146
+
147
+ ### 5. 组件映射
148
+
149
+ 检查目标:
150
+
151
+ - 每个组件是否能映射到页面功能。
152
+ - 每个组件是否有明确输入、输出或事件。
153
+ - 组件拆分是否符合 route 局部优先原则。
154
+ - 组件是否错误承担 service、全局状态或 Wujie 职责。
155
+ - 涉及 Wujie 时是否复用 `src/shared/wujie-bridge.ts`。
156
+
157
+ 通过标准:
158
+
159
+ - 组件可以映射到 `page-build` 的 route、components、types 和 constants。
160
+ - 页面局部组件靠近对应 route。
161
+
162
+ 失败或阻塞:
163
+
164
+ - 组件只是设计稿图层复刻,无法映射页面功能。
165
+ - 组件职责过大或过散,导致基建目录不可落地。
166
+ - 缺少核心功能对应组件。
167
+
168
+ ### 6. 待确认项
169
+
170
+ 检查目标:
171
+
172
+ - 待确认项是否影响 route、service、types、components 或 constants。
173
+ - 待确认项是否影响 API 契约。
174
+ - 待确认项是否影响页面状态模型。
175
+
176
+ 通过标准:
177
+
178
+ - 无阻塞待确认项。
179
+ - 非阻塞待确认项已经说明后续处理方式。
180
+
181
+ 失败或阻塞:
182
+
183
+ - 待确认项会改变目录结构、核心接口或组件边界。
184
+ - 待确认项数量过多,无法形成稳定 page-build 文件计划。
185
+
186
+ ## 证据规则
187
+
188
+ 每条检查必须写证据。
189
+
190
+ 证据格式:
191
+
192
+ ```text
193
+ 证据:<来源> <路径或章节> <关键片段或摘要>
194
+ ```
195
+
196
+ 示例:
197
+
198
+ ```text
199
+ 证据:仓库文件 src/routes/sales/client/route.tsx 使用 createFileRoute('/sales/client')
200
+ 证据:page-tech.md 3.1 功能与接口映射列出 client-list 的入参和响应
201
+ 证据:Apifox MCP client-list 接口返回 path=/admin/sales/client-list, method=POST
202
+ ```
203
+
204
+ 规则:
205
+
206
+ - 不得用“按经验判断”“通常如此”作为证据。
207
+ - 不得引用未读取的文件。
208
+ - 不得根据接口名称推断字段。
209
+ - 如果证据冲突,结论必须是不通过或阻塞。
210
+
211
+ ## 报告输出
212
+
213
+ 使用 `domains/frontend/templates/contract-report.md` 作为报告骨架。
214
+
215
+ 报告必须包含:
216
+
217
+ - 总结论:通过、不通过或阻塞。
218
+ - 输入材料。
219
+ - 检查范围。
220
+ - 逐项 checklist。
221
+ - 阻塞项。
222
+ - 非阻塞待确认项。
223
+ - 是否允许进入 `page-build`。
224
+
225
+ 如果运行了静态脚本,报告必须包含脚本输出摘要,并明确哪些结论仍由人工 checklist 判断。
226
+
227
+ ## 结论规则
228
+
229
+ ### 通过
230
+
231
+ 满足以下条件才能通过:
232
+
233
+ - route、目录命名、API 契约、页面状态、组件映射全部通过。
234
+ - 不存在阻塞待确认项。
235
+ - 每条结论都有真实证据。
236
+
237
+ 通过后输出:
238
+
239
+ ```text
240
+ 结论:通过,允许进入 page-build。
241
+ ```
242
+
243
+ ### 不通过
244
+
245
+ 存在明确错误但可以通过修改 `page-tech` 修复。
246
+
247
+ 不通过后输出:
248
+
249
+ ```text
250
+ 结论:不通过,需回到 page-tech 修正后重新 contract-check。
251
+ ```
252
+
253
+ ### 阻塞
254
+
255
+ 缺少必需输入或无法验证关键事实。
256
+
257
+ 阻塞后输出:
258
+
259
+ ```text
260
+ 结论:阻塞,需补充上下文后重新 contract-check。
261
+ ```
262
+
263
+ ## 禁止项
264
+
265
+ - 不把自动化脚本结果当作完整 contract-check 结论。
266
+ - 不创建页面基建文件。
267
+ - 不修改业务源码。
268
+ - 不跳过证据要求。
269
+ - 不把 `TODO(api)` 当作核心接口缺失时的通过理由。
270
+ - 不允许在检查不通过时进入 `page-build`。
@@ -0,0 +1,92 @@
1
+ # foundation-freeze 子命令
2
+
3
+ `foundation-freeze` 用于在 `page-build` 之后、`figmaSync plan`
4
+ 之前生成页面基建事实快照。它帮助 Human 和 Agent 明确当前代码事实,以及视觉阶段允许和禁止修改的范围。
5
+
6
+ ## 定位
7
+
8
+ - 输入:目标页面目录、相关 service 文件、可选 `contract-report.md`。
9
+ - 输出:`foundation-summary.md`。
10
+ - 性质:机器生成快照,不是事实本身。
11
+ - 最终事实:真实代码文件。
12
+
13
+ ## 生成规则
14
+
15
+ 默认使用脚本:
16
+
17
+ ```bash
18
+ node .agent/skills/devFlow/domains/frontend/scripts/generate_foundation_summary.mjs --route-dir src/routes/<feature>/<page>
19
+ ```
20
+
21
+ 可选指定 service:
22
+
23
+ ```bash
24
+ node .agent/skills/devFlow/domains/frontend/scripts/generate_foundation_summary.mjs \
25
+ --route-dir src/routes/<feature>/<page> \
26
+ --service src/services/<feature>/<page>.ts
27
+ ```
28
+
29
+ 规则:
30
+
31
+ - `foundation-summary.md` 禁止人工编辑。
32
+ - 每次 `figmaSync plan` 前必须重新生成或重新扫描。
33
+ - 如果快照和上一次不一致,必须提示 Human 确认影响。
34
+ - 快照只能汇总真实代码,不得补造组件、接口、状态或类型。
35
+ - 快照不替代源码;与源码冲突时以源码为准。
36
+
37
+ ## 输出位置
38
+
39
+ 默认写入:
40
+
41
+ ```text
42
+ src/routes/<feature>/<page>/foundation-summary.md
43
+ ```
44
+
45
+ 文件顶部必须包含:
46
+
47
+ ```html
48
+ <!-- AUTO-GENERATED. Do not edit. Regenerate from source files. -->
49
+ ```
50
+
51
+ ## 内容要求
52
+
53
+ 必须包含:
54
+
55
+ - route 文件。
56
+ - components 文件。
57
+ - service 文件。
58
+ - types 文件。
59
+ - constants 文件。
60
+ - 组件 props。
61
+ - service 函数签名。
62
+ - types 导出。
63
+ - constants 导出。
64
+ - figmaSync 允许修改范围。
65
+ - figmaSync 禁止修改范围。
66
+
67
+ ## figmaSync 允许修改范围
68
+
69
+ - 目标页面或目标组件的布局。
70
+ - CSS 文件和 className 绑定。
71
+ - Apex UI 组件选型和 props。
72
+ - 局部展示结构。
73
+ - `PLAN.md` 和 `figma-plan.css`。
74
+
75
+ ## figmaSync 禁止修改范围
76
+
77
+ - 路由路径。
78
+ - service 契约。
79
+ - API 请求基础封装。
80
+ - 类型语义。
81
+ - 页面核心状态模型。
82
+ - 业务组件边界。
83
+ - 权限逻辑。
84
+ - Wujie bridge。
85
+ - `src/routeTree.gen.ts`。
86
+
87
+ ## 失败处理
88
+
89
+ - 目标 route 目录不存在:阻塞,先执行 `page-build` 或确认轻量 plan。
90
+ - 无法识别 service:允许生成快照,但必须写入待确认。
91
+ - 无法解析组件 props:允许生成文件清单,但必须标记解析盲区。
92
+ - 发现上次快照变化:列出变化,让 Human 确认后再进入 `figmaSync plan`。
@@ -0,0 +1,55 @@
1
+ # L0/L1 轻量流程
2
+
3
+ 轻量流程用于小范围、低风险需求,避免日常修复被强制拖入完整文档链路。
4
+
5
+ ## L0 快速协作
6
+
7
+ 适用:
8
+
9
+ - 文案修正。
10
+ - spacing、颜色变量替换。
11
+ - 单字段展示。
12
+ - 明显类型错误。
13
+ - 单文件小修。
14
+
15
+ 规则:
16
+
17
+ - 不生成 `page-tech.md`。
18
+ - 不生成 `contract-report.md`。
19
+ - 不生成 `foundation-summary.md`。
20
+ - 不进入 figmaSync。
21
+ - 读代码、复述最小计划、等待确认、修改、验证、总结。
22
+
23
+ ## L1 轻量流程
24
+
25
+ 适用:
26
+
27
+ - 现有页面单组件改动。
28
+ - 单接口接入。
29
+ - 小弹窗。
30
+ - 小筛选项。
31
+ - 小范围 loading、空态、错误态。
32
+
33
+ 规则:
34
+
35
+ - 通常不生成 `page-tech.md`。
36
+ - 不生成 `contract-report.md`。
37
+ - 不生成 `foundation-summary.md`。
38
+ - Mini Plan 可以保留在对话中,不强制落 Markdown。
39
+ - 如果过程中发现影响路由、多个接口、核心状态或公共组件,必须升档到 L2/L3。
40
+
41
+ ## Mini Plan 内容
42
+
43
+ Mini Plan 必须包含:
44
+
45
+ - 要改什么。
46
+ - 涉及哪些文件。
47
+ - 不改什么。
48
+ - 验证方式。
49
+
50
+ 可使用模板:
51
+
52
+ ```text
53
+ domains/frontend/templates/mini-plan-l0.md
54
+ domains/frontend/templates/mini-plan-l1.md
55
+ ```
@@ -0,0 +1,268 @@
1
+ # page-build 子命令
2
+
3
+ `page-build`
4
+ 用于把已审核的页面方案或可验证上下文转换成 admin-fe 页面基建文件。它只负责创建可 review、可继续开发的占位骨架,不负责完成业务逻辑、最终视觉实现或复杂交互。
5
+
6
+ ## 定位
7
+
8
+ - 输入:已审核的
9
+ `page-tech.md`、飞书文档链接、API 文档、Apifox 项目上下文、用户补充约束和当前仓库结构。
10
+ - 输出:文件创建计划;Human 确认后,创建 route、页面局部 components、service、types、constants 和必要 index 导出。
11
+ - 不输出:完整业务逻辑、最终样式、真实 mock 数据、未确认接口字段、全局状态重构。
12
+
13
+ ## 前置门槛
14
+
15
+ 进入 `page-build` 前必须校验 `contract-report.md`:
16
+
17
+ - 如果存在 `contract-report.md`,先读取报告结论;报告不通过或存在阻塞项时,不进入 page-build,回到 `page-tech` 或 `contract-check` 处理后再来。
18
+ - 如果没有 `contract-report.md`,提示先执行 `contract-check`,或让 Human 明确确认跳过检查再继续。
19
+ - "继续"、"看起来可以"等含糊表达不算跳过确认,必须 Human 明确表达"跳过 contract-check"才能继续。
20
+
21
+ ## 输入来源
22
+
23
+ ### 本地 Markdown
24
+
25
+ 适用于用户提供已审核 `page-tech.md` 或其他页面方案文档。
26
+
27
+ 读取规则:
28
+
29
+ 1. 读取文档全文或与目标页面相关章节。
30
+ 2. 抽取页面名称、路由路径、页面范围、组件拆分、状态设计、接口清单、目录结构和待确认项。
31
+ 3. 如果文档没有明确“已审核”或用户没有确认,先询问是否允许进入 page-build。
32
+
33
+ ### 飞书文档链接
34
+
35
+ 适用于用户把 PRD、页面方案、接口说明或评审文档放在飞书中。
36
+
37
+ 读取规则:
38
+
39
+ 1. 先按 `lark-read` 子命令读取飞书文档。
40
+ 2. 将读取结果整理为 page-build 上下文。
41
+ 3. 不得根据链接标题、URL 或用户转述猜测内容。
42
+ 4. 如果读取失败,停止依赖该文档生成文件计划。
43
+
44
+ ### API 文档
45
+
46
+ 适用于用户直接提供接口文档、OpenAPI 片段、Markdown 表格或后端约定。
47
+
48
+ 抽取规则:
49
+
50
+ - 接口名。
51
+ - 请求路径。
52
+ - 请求 method。
53
+ - 入参类型。
54
+ - 响应类型。
55
+ - 触发组件或交互。
56
+ - 成功后的刷新范围。
57
+ - 错误处理要求。
58
+
59
+ 缺失任一关键信息时,不补造字段,在 service 模板中保留 `TODO(api)`。
60
+
61
+ ### Apifox 项目上下文
62
+
63
+ 适用于用户指定 Apifox 项目、目录、接口或接口分组。
64
+
65
+ 处理规则:
66
+
67
+ 1. 先发现当前运行环境是否提供 Apifox MCP 工具。
68
+ 2. 有可用工具时,通过 MCP 读取项目接口、目录、接口详情、请求参数和响应结构。
69
+ 3. 只使用 MCP 返回的真实接口事实,不根据接口名称推断字段。
70
+ 4. 如果没有 Apifox
71
+ MCP 工具、缺少项目权限、缺少项目 ID 或接口范围不明确,必须把问题列为阻塞待确认项。
72
+ 5. 不在 Skill 中承诺固定脚本或固定工具名;以当前可用 MCP 能力为准。
73
+
74
+ ## 工作流程
75
+
76
+ 1. 识别输入来源,读取必要上下文。
77
+ 2. 扫描当前仓库相关路径,确认现有 route、service、common、shared、stores 和相似页面写法。
78
+ 3. 抽取页面基建契约:
79
+ - route 路径。
80
+ - 页面目录。
81
+ - 页面局部组件。
82
+ - service 模块和函数签名。
83
+ - types 类型。
84
+ - constants 常量。
85
+ - 页面级状态来源和变化条件。
86
+ 4. 输出文件创建计划,逐个文件说明路径、用途、具体内容和 TODO。
87
+ 5. 等待 Human 明确确认后再创建或修改文件。
88
+ 6. 按最小完整范围落地模板,不扩大到无关页面或全局配置。
89
+ 7. 完成后说明已创建文件、未实现内容和下一步建议。
90
+
91
+ ## 创建前确认机制
92
+
93
+ 创建或修改任何文件前,必须向 Human 复述:
94
+
95
+ - 输入来源和已确认事实。
96
+ - 将创建或修改的完整文件清单。
97
+ - 每个文件的具体职责和主要内容。
98
+ - API 契约来源;如果来自 Apifox,说明 MCP 读取结果。
99
+ - 待确认项是否阻塞 page-build。
100
+ - 明确说明不会修改 `src/routeTree.gen.ts`。
101
+
102
+ 只有 Human 明确确认后才能执行文件改动。不能把“继续”“看起来可以”等含糊表达当成确认。
103
+
104
+ ## 文件布局规则
105
+
106
+ 推荐路径:
107
+
108
+ ```text
109
+ src/routes/<feature>/<page>/route.tsx
110
+ src/routes/<feature>/<page>/<component>/<Component>.tsx
111
+ src/routes/<feature>/<page>/<page>-types.ts
112
+ src/routes/<feature>/<page>/<page>-constants.ts
113
+ src/routes/<feature>/<page>/index.ts
114
+ src/services/<feature>/<page>.ts
115
+ ```
116
+
117
+ 当目标业务域已有同类页面时,优先对齐同业务域的真实目录结构,而不是机械使用
118
+ `components/` 扁平目录。例如 `admin-fe` 销售模块已有
119
+ `src/routes/sales/client/`,新建销售页面应优先采用同类分层:
120
+
121
+ ```text
122
+ src/routes/sales/<page>/dashboard/<PageDashboard>.tsx
123
+ src/routes/sales/<page>/toolbar/<PageFilters>.tsx
124
+ src/routes/sales/<page>/toolbar/<PageScopeToolbar>.tsx
125
+ src/routes/sales/<page>/table/<PageTable>.tsx
126
+ src/routes/sales/<page>/detail-drawer/<PageDetailDrawer>.tsx
127
+ src/routes/sales/<page>/modal/<PageModal>.tsx
128
+ ```
129
+
130
+ 只有目标业务域没有可参考页面,或页面确实只有一两个局部组件时,才使用默认
131
+ `components/` 占位结构。
132
+
133
+ 规则:
134
+
135
+ - 路由文件放在 `src/routes`。
136
+ - 路由目录使用 lowercase kebab-case。
137
+ - React 组件文件使用 PascalCase。
138
+ - 非组件文件使用 kebab-case。
139
+ - service 按业务域放在 `src/services` 下,优先复用已有业务域目录。
140
+ - 不手动编辑 `src/routeTree.gen.ts`。
141
+ - 页面仅使用的组件优先靠近 route;真正复用时再抽到公共目录。
142
+ - UI 复用顺序:Apex UI -> `src/components` -> 业务局部组件 -> 新建局部组件。
143
+
144
+ ## Apex UI 组件契约规则
145
+
146
+ `admin-fe` 使用 `@frontend/apex-ui--react`。page-build 中只要新增或改动 Apex
147
+ UI 组件用法,必须先读取组件库随包提供的 LLM 文档和类型契约,不得根据 Ant
148
+ Design、Radix UI 或原生 HTML 经验推断 props。
149
+
150
+ 必须读取:
151
+
152
+ ```text
153
+ node_modules/@frontend/apex-ui--react/dist/llms.txt
154
+ node_modules/@frontend/apex-ui--react/dist/llm/<component>.txt
155
+ ```
156
+
157
+ 必要时继续读取:
158
+
159
+ ```text
160
+ node_modules/@frontend/apex-ui--react/dist/index.d.ts
161
+ ```
162
+
163
+ 规则:
164
+
165
+ - 先从 `llms.txt` 确认组件是否存在,再读取实际使用组件对应的
166
+ `llm/<component>.txt`。
167
+ - 必须核对组件 props、事件名、受控字段、数据结构、默认行为和限制。
168
+ - 如果已有相似页面使用该组件,先对照相似页面,再以 Apex UI LLM 文档和
169
+ `index.d.ts` 类型声明为准。
170
+ - 不得把 antd 的 `items`、`columns`、`onChange`、`value`、`visible`
171
+ 等约定直接套到 Apex UI。
172
+ - 如果文档、类型声明和实际运行行为冲突,必须记录为待确认项或技术风险;不得继续扩大该组件用法。
173
+ - 文件创建计划中必须列出本次使用的 Apex UI 组件和已读取的文档来源。
174
+ - 如果组件库存在已知缺陷,例如运行时 warning 或类型与行为不一致,优先在页面局部规避,并在总结中说明原因。
175
+
176
+ ## 模板使用
177
+
178
+ 使用以下模板作为占位参考:
179
+
180
+ ```text
181
+ domains/frontend/templates/page-build/route.tsx.tpl
182
+ domains/frontend/templates/page-build/component.tsx.tpl
183
+ domains/frontend/templates/page-build/service.ts.tpl
184
+ domains/frontend/templates/page-build/types.ts.tpl
185
+ domains/frontend/templates/page-build/constants.ts.tpl
186
+ domains/frontend/templates/page-build/index.ts.tpl
187
+ ```
188
+
189
+ 模板变量建议:
190
+
191
+ - `{{routePath}}`:TanStack Router 路由路径,例如 `/sales/client`。
192
+ - `{{pageComponentName}}`:页面组件名,例如 `SalesClientPage`。
193
+ - `{{featureName}}`:业务域名,例如 `sales`。
194
+ - `{{pageName}}`:页面名,例如 `client`。
195
+ - `{{serviceModulePath}}`:service 导入路径,例如 `@/services/sales/client`。
196
+ - `{{queryKeyPrefix}}`:query key 前缀,例如 `['sales', 'client']`。
197
+
198
+ ## API 落地规则
199
+
200
+ - API 调用统一使用 `src/services/request.ts`。
201
+ - service 函数签名必须从文档、飞书或 Apifox MCP 结果推导。
202
+ - API 返回类型优先由 service function 导出,页面层通过 import type 使用。
203
+ - 未确认接口不得写死路径、参数或响应字段。
204
+ - 缺少接口路径时写 `TODO(api): confirm endpoint path`。
205
+ - 缺少入参时写 `TODO(api): confirm request params`。
206
+ - 缺少响应时写 `TODO(api): confirm response shape`。
207
+ - 页面组件只调用 service,不直接调用 axios 或重新封装 request。
208
+
209
+ ## 状态规则
210
+
211
+ - 页面级、临时、多实例或随生命周期销毁的状态使用组件 state、Context 或 useReducer。
212
+ - Zustand 只用于全局、持久、跨页面或复杂状态。
213
+ - shell 相关状态统一使用 `src/stores/shell-store.ts`。
214
+ - Wujie 逻辑必须复用
215
+ `src/shared/wujie-bridge.ts`,页面内不得重写路由同步、props 同步、登录过期或主题同步。
216
+ - page-build 不创建新的全局 store,除非已审核方案明确要求且 Human 再次确认。
217
+
218
+ ## 禁止项
219
+
220
+ - 不写完整业务逻辑。
221
+ - 不写最终视觉样式。
222
+ - 不创建未确认接口字段。
223
+ - 不创建无来源 mock 数据。
224
+ - 不修改 `src/routeTree.gen.ts`。
225
+ - 不重写 `src/services/request.ts`。
226
+ - 不新增不必要的全局状态。
227
+ - 不在页面内重写 Wujie bridge。
228
+ - 不因为设计稿图层结构重拆业务组件。
229
+ - 不跨越目标页面修改无关模块。
230
+
231
+ ## 输出格式
232
+
233
+ 文件改动前,输出:
234
+
235
+ ```md
236
+ ## page-build 文件创建计划
237
+
238
+ ### 输入事实
239
+
240
+ ### API 来源
241
+
242
+ ### 文件清单
243
+
244
+ | 文件 | 操作 | 内容 | TODO | 是否阻塞 |
245
+ | ---- | ---- | ---- | ---- | -------- |
246
+
247
+ ### 不会修改
248
+
249
+ - src/routeTree.gen.ts
250
+
251
+ ### 待确认项
252
+ ```
253
+
254
+ 文件改动后,输出:
255
+
256
+ - 已创建或修改文件。
257
+ - 每个文件保留的 `TODO(api)` 和 `TODO(figmaSync)`。
258
+ - 未验证内容。
259
+ - 建议下一步执行的检查。
260
+
261
+ ## 验收标准
262
+
263
+ - 能基于本地方案或飞书文档生成可 review 的文件创建计划。
264
+ - 模板符合 admin-fe 命名、路由、请求、状态规则。
265
+ - service 占位只使用 `src/services/request.ts`。
266
+ - route 占位使用 TanStack Router。
267
+ - 文件创建前存在 Human 确认机制。
268
+ - Apifox 项目上下文只通过可用 MCP 工具读取,不编造能力。