@bovinphang/frontend-craft 2.5.0 → 2.6.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 (77) hide show
  1. package/.claude-plugin/marketplace.json +7 -3
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +39 -0
  4. package/CHANGELOG.zh-CN.md +40 -0
  5. package/CONTRIBUTING.md +15 -10
  6. package/CONTRIBUTING.zh-CN.md +15 -10
  7. package/README.md +61 -39
  8. package/README.openclaw.md +8 -8
  9. package/README.openclaw.zh-CN.md +8 -8
  10. package/README.zh-CN.md +61 -39
  11. package/commands/fec-doc-sync.md +7 -6
  12. package/dist/bin/frontend-craft.js +30 -27
  13. package/docs/example-prompts.md +4 -3
  14. package/docs/ja-JP/README.md +61 -39
  15. package/docs/ko-KR/README.md +61 -39
  16. package/docs/runtimes/antigravity.md +1 -1
  17. package/docs/runtimes/augment.md +1 -1
  18. package/docs/runtimes/claude.md +16 -10
  19. package/docs/runtimes/claude.zh-CN.md +16 -10
  20. package/docs/runtimes/cline.md +1 -1
  21. package/docs/runtimes/codebuddy.md +1 -1
  22. package/docs/runtimes/codex.md +1 -1
  23. package/docs/runtimes/copilot.md +1 -1
  24. package/docs/runtimes/cursor.md +1 -1
  25. package/docs/runtimes/gemini.md +1 -1
  26. package/docs/runtimes/kilo.md +1 -1
  27. package/docs/runtimes/openclaw.md +1 -1
  28. package/docs/runtimes/opencode.md +1 -1
  29. package/docs/runtimes/qoder.md +1 -1
  30. package/docs/runtimes/trae.md +1 -1
  31. package/docs/runtimes/windsurf.md +1 -1
  32. package/docs/zh-CN/example-prompts.md +4 -3
  33. package/docs/zh-TW/README.md +61 -39
  34. package/openclaw.plugin.json +1 -1
  35. package/package.json +1 -1
  36. package/skills/eval_queries.json +25 -0
  37. package/skills/fec-accessibility-check/SKILL.md +1 -1
  38. package/skills/fec-alchemy/SKILL.md +74 -0
  39. package/skills/fec-alchemy/assets/absorption-plan-template.md +47 -0
  40. package/skills/fec-alchemy/assets/intake-template.md +55 -0
  41. package/skills/fec-alchemy/assets/review-checklist.md +31 -0
  42. package/skills/fec-alchemy/references/methodology.md +94 -0
  43. package/skills/fec-alchemy/references/originality-and-licensing.md +57 -0
  44. package/skills/fec-browser-storage/SKILL.md +1 -1
  45. package/skills/fec-canvas-threejs/SKILL.md +1 -1
  46. package/skills/fec-code-review/SKILL.md +10 -2
  47. package/skills/fec-data-fetching/SKILL.md +15 -15
  48. package/skills/fec-data-fetching/references/query-patterns.md +27 -1
  49. package/skills/fec-debug-framework/SKILL.md +14 -19
  50. package/skills/fec-debug-framework/references/report-template.md +58 -0
  51. package/skills/fec-doc-sync/SKILL.md +19 -17
  52. package/skills/fec-e2e-testing/SKILL.md +3 -3
  53. package/skills/fec-form-handling/SKILL.md +11 -11
  54. package/skills/fec-form-handling/references/advanced-form-patterns.md +34 -5
  55. package/skills/fec-implement-from-design/SKILL.md +2 -2
  56. package/skills/fec-legacy-to-modern-migration/SKILL.md +33 -23
  57. package/skills/fec-legacy-web-standard/SKILL.md +1 -1
  58. package/skills/fec-list-virtualization/SKILL.md +3 -3
  59. package/skills/fec-list-virtualization/references/virtualization-patterns.md +32 -4
  60. package/skills/fec-performance-optimization/SKILL.md +5 -1
  61. package/skills/fec-performance-optimization/references/report-template.md +53 -0
  62. package/skills/fec-pwa-implementation/SKILL.md +3 -4
  63. package/skills/fec-react-project-standard/SKILL.md +1 -1
  64. package/skills/fec-refactor-clean/SKILL.md +4 -1
  65. package/skills/fec-refactor-clean/references/report-template.md +42 -0
  66. package/skills/fec-security-review/SKILL.md +3 -3
  67. package/skills/fec-state-management/SKILL.md +1 -1
  68. package/skills/fec-storybook-component-doc/SKILL.md +2 -2
  69. package/skills/fec-typescript-type-safety/SKILL.md +1 -1
  70. package/skills/fec-validation-fix/SKILL.md +5 -2
  71. package/skills/fec-validation-fix/references/report-template.md +43 -0
  72. package/skills/fec-vue3-project-standard/SKILL.md +1 -1
  73. package/skills/fec-web-workers/SKILL.md +3 -4
  74. package/skills/metadata.json +82 -45
  75. package/skills/relations.json +20 -0
  76. package/docs/superpowers/plans/2026-05-29-fec-debug.md +0 -491
  77. package/docs/superpowers/specs/2026-05-29-fec-debug-design.md +0 -340
@@ -1,6 +1,35 @@
1
1
  # 高级表单模式
2
2
 
3
- ## Controller
3
+ ## 先判断是否需要表单库
4
+
5
+ - 1-3 个字段、无复杂校验、无动态字段、无组件库适配压力的表单,可用框架原生状态、浏览器约束校验和轻量提交状态。
6
+ - 需要动态字段、跨字段校验、多步流程、文件上传、异步校验、服务端错误回填或明显输入卡顿时,再引入专门表单方案。
7
+ - 表单库只管理字段状态和校验流程,不替代 API 错误映射、权限判断、可访问性标注或服务端最终校验。
8
+
9
+ ## 选型参考
10
+
11
+ 先沿用项目已有表单库、schema 库和组件库适配方式;新增依赖时再按场景选择。
12
+
13
+ | 场景 | 候选方案 | 注意点 |
14
+ | --- | --- | --- |
15
+ | React 复杂表单 | React Hook Form + Zod | 非受控优先,第三方受控组件用 `Controller`。 |
16
+ | Vue 复杂表单 | vee-validate / FormKit + Zod、Yup 或 Valibot | 不要为 Vue 项目引入 React-only 表单 API;优先沿用项目既有 Vue 表单库。 |
17
+ | 简单表单 | 框架原生状态 + 基础校验 | 避免为了 1-3 个字段引入重型表单体系。 |
18
+ | 多步表单 | 分步 schema + 最终提交 schema | 明确跨步数据保存、返回上一步和最终校验策略。 |
19
+ | 文件上传 | 表单库字段状态 + `FormData` | 校验文件数量、大小、类型;不要把 `File` JSON 序列化。 |
20
+ | 异步校验 | 提交边界校验或 debounce 字段校验 | 避免每次键入请求;处理竞态和旧响应覆盖。 |
21
+
22
+ ## 通用实现原则
23
+
24
+ - 运行时 schema 或校验函数负责外部输入边界;TypeScript 类型不能替代运行时校验。
25
+ - 默认值、reset 数据和服务端回填数据要形状一致,避免字段在受控/非受控之间切换。
26
+ - 字段错误要能映射到具体字段;全局错误用于提交失败、权限或服务不可用等非字段问题。
27
+ - 组件库适配层要透传 value、onChange、onBlur、name/ref 或等价字段注册能力。
28
+ - 提交时保护 loading、重复提交、取消/过期请求、服务端错误回填和成功后 reset。
29
+ - 文件上传使用 `FormData` 或直传流程,前端校验只做体验保护,服务端仍需最终校验。
30
+ - 性能优化优先使用字段级订阅、局部组件拆分和延迟校验,不要全表单 watch 后驱动整页重渲染。
31
+
32
+ ## React Hook Form Controller
4
33
 
5
34
  ```tsx
6
35
  <Controller
@@ -18,7 +47,7 @@
18
47
 
19
48
  用于不暴露原生 `ref` 的 Select、DatePicker、RichEditor 等组件。
20
49
 
21
- ## 动态字段
50
+ ## React Hook Form 动态字段
22
51
 
23
52
  ```tsx
24
53
  const { fields, append, remove } = useFieldArray({
@@ -36,7 +65,7 @@ const { fields, append, remove } = useFieldArray({
36
65
 
37
66
  `key` 必须使用 `field.id`,不要使用数组 index。
38
67
 
39
- ## 联动校验
68
+ ## Zod 联动校验
40
69
 
41
70
  ```ts
42
71
  const schema = z
@@ -50,7 +79,7 @@ const schema = z
50
79
  });
51
80
  ```
52
81
 
53
- ## 文件上传
82
+ ## Zod 文件上传校验
54
83
 
55
84
  ```ts
56
85
  const schema = z.object({
@@ -67,6 +96,6 @@ const schema = z.object({
67
96
  ## 性能
68
97
 
69
98
  - 用 `useWatch` 或字段级订阅替代全表单 watch。
70
- - 大表单拆成 memoized 子组件。
99
+ - 大表单拆成 memoized 子组件或框架等价的局部更新单元。
71
100
  - 高频输入不要每次键入触发网络校验。
72
101
  - 多步表单要明确每步 schema 和跨步最终 schema。
@@ -28,7 +28,7 @@ description: Use when implementing UI from Figma, Sketch, MasterGo, Pixso, Modao
28
28
  - 保持实现结果可维护、类型明确、可测试且具备可访问性
29
29
  - 避免引入重复的基础组件或并行设计系统
30
30
 
31
- ## 必需工作流
31
+ ## Procedure
32
32
 
33
33
  ### 1. 识别设计来源
34
34
 
@@ -102,7 +102,7 @@ description: Use when implementing UI from Figma, Sketch, MasterGo, Pixso, Modao
102
102
  - 如有测试,执行测试
103
103
  - 如果缺少测试,说明建议补充的最小测试范围
104
104
 
105
- ## Detailed References
105
+ ## 详细参考
106
106
 
107
107
  撰写实现计划报告时,加载 [references/design-plan-template.md](references/design-plan-template.md)。
108
108
 
@@ -1,15 +1,23 @@
1
1
  ---
2
2
  name: fec-legacy-to-modern-migration
3
- description: Use when planning or implementing an intentional migration from JavaScript, jQuery, HTML/CSS, server-rendered templates, or MPA legacy frontend code to React + TypeScript or Vue 3 + TypeScript while preserving behavior. Do not use for routine legacy bug fixes that stay in the old stack; Chinese triggers include 遗留项目, 技术栈升级, jQuery 迁移.
3
+ description: Use when planning or implementing an intentional migration from JavaScript, jQuery, HTML/CSS, server-rendered templates, MPA legacy frontend code, or older framework code toward a modern frontend stack while preserving behavior. Do not use for routine legacy bug fixes that stay in the old stack; Chinese triggers include 遗留项目, 技术栈升级, jQuery 迁移.
4
4
  ---
5
5
 
6
6
  # 传统前端到现代框架迁移
7
7
 
8
- 适用于将 JavaScript + jQuery + HTML/CSS 多页面应用(MPA)或服务端模板渲染项目,迁移至 React + TypeScript 或 Vue 3 + TypeScript 单页面应用(SPA)的场景。
8
+ 适用于将 JavaScript + jQuery + HTML/CSS 多页面应用(MPA)、服务端模板渲染项目或旧框架代码,渐进迁移到 React、Vue、Next.js、Nuxt、TypeScript,或保留 MPA 形态但现代化模块、构建、类型和测试的场景。
9
9
 
10
10
  ## Purpose
11
11
 
12
- 指导将 jQuery/MPA 传统前端项目渐进迁移至 React + TypeScript 或 Vue 3 + TypeScript,提供迁移策略、概念映射、分阶段步骤和实施约束,确保功能等价和风险可控。
12
+ 指导传统前端项目渐进迁移到目标现代栈,提供迁移策略、概念映射、分阶段步骤和实施约束,确保功能等价和风险可控。
13
+
14
+ ## Procedure
15
+
16
+ 1. 先识别目标栈、迁移边界和是否保留 MPA/服务端模板形态。
17
+ 2. 选择渐进式或一次性重写策略,并输出迁移分析报告。
18
+ 3. 做存量盘点、依赖关系分析和迁移优先级排序。
19
+ 4. 按准备、基础层、模块/页面迁移、收尾的顺序推进,每次迁移一个可验证单元。
20
+ 5. 每个迁移单元按检查清单验证功能等价、视觉一致、类型安全、可访问性、i18n、资源和样式边界。
13
21
 
14
22
  ## 迁移策略选择
15
23
 
@@ -28,8 +36,8 @@ description: Use when planning or implementing an intentional migration from Jav
28
36
  | ------------------------------------------ | -------------------------------------- |
29
37
  | `$(selector).html(content)` | 声明式 JSX + state 驱动渲染 |
30
38
  | `$(document).on('click', '.btn', handler)` | `onClick` + 事件委托由 React 处理 |
31
- | `$.ajax()` / `$.get()` | `fetch` / `axios` + React Query 或 SWR |
32
- | 全局变量 / 命名空间存储状态 | `useState` / `useContext` / Zustand |
39
+ | `$.ajax()` / `$.get()` | 项目请求层、`fetch` / `axios`,可按需接 TanStack Query 或 SWR |
40
+ | 全局变量 / 命名空间存储状态 | 局部 state、Context 或项目既有 store,可按需使用 Zustand/Redux |
33
41
  | `$(el).show()` / `$(el).hide()` | 条件渲染 `{visible && <Component />}` |
34
42
  | 手动 DOM 操作 `append` / `remove` | 数据驱动,通过 setState 触发重渲染 |
35
43
  | 模板字符串拼接 HTML | JSX 组件 + props |
@@ -41,7 +49,7 @@ description: Use when planning or implementing an intentional migration from Jav
41
49
  | ------------------------------------------ | -------------------------------------------------- |
42
50
  | `$(selector).html(content)` | 模板 + `ref` / `reactive` 驱动渲染 |
43
51
  | `$(document).on('click', '.btn', handler)` | `@click` + 事件修饰符 |
44
- | `$.ajax()` / `$.get()` | `fetch` / `axios` + VueUse `useFetch` 或 Vue Query |
52
+ | `$.ajax()` / `$.get()` | 项目请求层、`fetch` / `axios`,可按需接 VueUse、Nuxt `useFetch` 或 TanStack Query Vue adapter |
45
53
  | 全局变量 / 命名空间存储状态 | `ref` / `reactive` / Pinia |
46
54
  | `$(el).show()` / `$(el).hide()` | `v-show` / `v-if` |
47
55
  | 手动 DOM 操作 | 数据驱动,通过响应式更新视图 |
@@ -52,10 +60,10 @@ description: Use when planning or implementing an intentional migration from Jav
52
60
 
53
61
  | 遗留概念 | 现代对应 |
54
62
  | --------------------------------- | ------------------------------------------ |
55
- | 页面级 JS 入口(每页一个 script) | 路由 + 懒加载页面组件 |
63
+ | 页面级 JS 入口(每页一个 script) | 路由/页面入口 + 懒加载模块,或保留 MPA 入口并现代化打包 |
56
64
  | 公共 JS 模块(utils、ajax 封装) | `services/`、`utils/`、类型化 API 层 |
57
- | 内联样式 / 页面级 CSS | CSS Modules / Tailwind / styled-components |
58
- | 服务端模板变量 | 通过 API 获取 + 前端状态管理 |
65
+ | 内联样式 / 页面级 CSS | 目标项目样式体系,如 CSS Modules、Tailwind、全局样式分层或组件库样式 |
66
+ | 服务端模板变量 | 通过 API 获取、SSR/loader 注入,或保留服务端模板边界并类型化数据 |
59
67
  | 表单提交 + 整页刷新 | 表单库 + 客户端校验 + API 调用 |
60
68
 
61
69
  ## 迁移前分析
@@ -66,7 +74,8 @@ description: Use when planning or implementing an intentional migration from Jav
66
74
  - 页面数量、功能模块数量
67
75
  - 依赖的 jQuery 插件及替代方案(如 DataTables → TanStack Table)
68
76
  - 现有 API 调用方式、是否有统一封装
69
- - 是否有服务端模板(JSP/Thymeleaf/EJS 等)需改为纯前端渲染
77
+ - 是否有服务端模板(JSP/Thymeleaf/EJS 等)需要保留、局部替换或改为纯前端渲染
78
+ - 目标栈是 React/Vue/Next/Nuxt、现代 MPA,还是只做局部 TypeScript/构建/测试现代化
70
79
 
71
80
  2. **依赖关系**
72
81
  - 页面间共享的 JS/CSS 模块
@@ -82,7 +91,7 @@ description: Use when planning or implementing an intentional migration from Jav
82
91
 
83
92
  ### 阶段 0:准备
84
93
 
85
- - 搭建新项目脚手架(Vite + React/Vue + TypeScript)
94
+ - 搭建或识别目标项目骨架:React/Vue/Next/Nuxt、现代 MPA,或现有项目内的渐进式 TypeScript/构建入口
86
95
  - 配置 ESLint、Prettier、测试框架
87
96
  - 建立 `services/request.ts` 统一请求层,与现有 API 兼容
88
97
  - 将遗留项目中的 `utils`、`constants` 逐步迁移并补充类型
@@ -92,7 +101,7 @@ description: Use when planning or implementing an intentional migration from Jav
92
101
  - 迁移并类型化 API 调用(`$.ajax` → `axios`/`fetch`)
93
102
  - 迁移工具函数(日期、格式化、校验等)
94
103
  - 迁移常量、枚举、类型定义
95
- - 建立路由骨架,占位未迁移页面(重定向或 iframe 嵌入旧页面)
104
+ - 建立目标导航/页面入口骨架;未迁移页面可继续走旧路由、重定向、iframe 或微前端嵌入
96
105
 
97
106
  ### 阶段 2:按模块/页面迁移
98
107
 
@@ -103,7 +112,7 @@ description: Use when planning or implementing an intentional migration from Jav
103
112
 
104
113
  ### 阶段 3:收尾
105
114
 
106
- - 移除旧代码入口,全面切换至 SPA
115
+ - 按迁移策略移除或冻结旧代码入口;若保留 MPA,则收敛旧入口并完成现代化边界
107
116
  - 配置 404、错误边界、全局错误处理
108
117
  - 性能优化(懒加载、代码分割、缓存策略)
109
118
  - 文档更新、部署流程调整
@@ -115,8 +124,8 @@ description: Use when planning or implementing an intentional migration from Jav
115
124
  ### 图片与图标
116
125
 
117
126
  - 直接使用原项目的图片资源路径,不重新托管或替换
118
- - 可使用 SVG 图片(`<img src="*.svg" />` 或 CSS `background-image`),**禁止使用内联 SVG**(`<svg>...</svg>` 直接写在组件中)
119
- - **若原项目使用了 iconfont 或 IcoMoon 图标,重构时继续使用**,保持图标体系一致;不替换为其他图标方案(如独立 SVG、其他图标库)
127
+ - 可使用 SVG 图片(`<img src="*.svg" />` 或 CSS `background-image`);图标组件或可访问交互确需内联 SVG 时,应遵循目标项目图标规范并说明理由。
128
+ - 若原项目使用了 iconfont 或 IcoMoon 图标,重构时优先继续使用,保持图标体系一致;替换为其他图标方案前需评估视觉一致性、包体和维护成本。
120
129
  - 图标优先使用原项目已有的图标文件(iconfont / IcoMoon / 已有 SVG),必要时可引入 SVG 文件作为独立资源
121
130
 
122
131
  ### 国际化(i18n)
@@ -130,7 +139,7 @@ description: Use when planning or implementing an intentional migration from Jav
130
139
  - 布局样式对齐原项目视觉效果,但**只参考原项目效果,不照搬其 CSS**
131
140
  - 优先使用 **flex 弹性布局**,避免 `float`、复杂 `position`、冗余嵌套
132
141
  - 避免不合理写法:如 `!important` 滥用、过深选择器、重复定义
133
- - **组件中禁止使用内联样式**(`style={{ ... }}` / `style="..."`),样式统一放在 CSS Modules、Tailwind 类或样式文件中,便于维护
142
+ - 组件中优先避免内联样式(`style={{ ... }}` / `style="..."`);确需使用运行时动态值、第三方组件 API 或 CSS 变量桥接时,应保持局部、可解释,并优先放入目标项目样式体系。
134
143
 
135
144
  ### 目标
136
145
 
@@ -149,9 +158,9 @@ description: Use when planning or implementing an intentional migration from Jav
149
158
  - [ ] 可访问性:表单有 label、交互可键盘操作
150
159
  - [ ] 无 XSS 风险(用户输入已转义或使用安全 API)
151
160
  - [ ] 关键路径有测试覆盖
152
- - [ ] 符合目标框架的项目规范(参考目标 React / Vue 项目约定)
153
- - [ ] 图片使用原项目资源,无内联 SVG;若原项目用 iconfont/IcoMoon 则继续使用
154
- - [ ] 样式参考原项目效果但不照搬 CSS,优先 flex 布局,无内联样式
161
+ - [ ] 符合目标栈的项目规范(React / Vue / Next / Nuxt / MPA 现代化等)
162
+ - [ ] 图片使用原项目资源;图标体系优先沿用原项目或目标项目规范,例外已说明
163
+ - [ ] 样式参考原项目效果但不照搬 CSS,优先使用目标项目样式体系,内联样式例外已说明
155
164
  - [ ] 视觉与交互与原项目一致,代码更简洁易维护
156
165
  - [ ] 新代码路径文案已 i18n;遗留层未扩大硬编码;locales 检索与多语言同步已完成(参见 i18n 规则迁移补充清单)
157
166
 
@@ -162,11 +171,12 @@ description: Use when planning or implementing an intentional migration from Jav
162
171
  - 优先保证功能等价,再考虑优化和现代化
163
172
  - 迁移过程中保持旧系统可运行,避免大爆炸式上线
164
173
  - 遇到 jQuery 插件无现成替代时,可暂时用 iframe 或微前端方式嵌入,待后续替换
165
- - **图片与图标**:使用原项目图片资源,可用 SVG 文件,禁止内联 SVG;若原项目用 iconfont/IcoMoon 则继续使用
166
- - **样式**:参考原项目效果不照搬 CSS,优先 flex 布局,组件禁止内联样式
174
+ - **目标栈**:先识别 React/Vue/Next/Nuxt、现代 MPA 或局部现代化目标,不默认强制改成 SPA。
175
+ - **图片与图标**:使用原项目图片资源,图标体系优先沿用原项目或目标项目规范;内联 SVG 例外需有可访问性、组件化或维护理由。
176
+ - **样式**:参考原项目效果不照搬 CSS,优先使用目标项目样式体系;内联样式例外需局部、可解释。
167
177
  - **目标**:视觉与交互一致、代码更简洁易维护,业务功能不得缺失
168
178
 
169
- ## Detailed References
179
+ ## 详细参考
170
180
 
171
181
  撰写迁移分析或迁移计划报告时,加载 [references/migration-report-template.md](references/migration-report-template.md)。
172
182
 
@@ -176,5 +186,5 @@ description: Use when planning or implementing an intentional migration from Jav
176
186
  - 迁移后的业务功能与原项目完全等价,无功能缺失
177
187
  - 视觉与交互与原项目一致,用户无感知差异
178
188
  - 类型定义完整,无 `any` 滥用,API 调用统一且类型安全
179
- - 图片使用原项目资源,样式使用 flex 布局,无内联样式
189
+ - 图片使用原项目资源,样式进入目标项目样式体系,图标和内联样式例外有明确理由
180
190
  - 新代码文案已 i18n,关键路径有测试覆盖
@@ -18,7 +18,7 @@ description: Use when maintaining or safely modifying existing non-framework fro
18
18
  5. HTML/CSS 保持语义、label、alt、BEM/既有命名和低选择器深度。
19
19
  6. 安全重点检查 `.html()`、`innerHTML`、URL 参数渲染、CSRF token 和文件上传。
20
20
 
21
- ## Detailed References
21
+ ## 详细参考
22
22
 
23
23
  涉及 jQuery 命名空间、事件绑定、Ajax、XSS 转义、文件组织和维护清单示例时,加载 [references/legacy-patterns.md](references/legacy-patterns.md)。
24
24
 
@@ -12,14 +12,14 @@ description: Use when optimizing or reviewing large lists, virtual scrolling, wi
12
12
  ## Procedure
13
13
 
14
14
  1. 先确认列表规模和瓶颈:500+ 项、滚动掉帧、DOM 节点过多或内存飙升才引入虚拟化。
15
- 2. 固定高度列表用 `react-window`;动态高度、跨框架或高级场景用 TanStack Virtual;遗留项目可维护 `react-virtualized`。
15
+ 2. 先遵循项目现有框架、依赖和设计系统约束,再按场景选库:React 可考虑 `react-window` 或 TanStack Virtual;Vue/Solid/Svelte、动态测量、网格或跨框架场景优先考虑 TanStack Virtual;遗留 `react-virtualized` 只维护不新增。
16
16
  3. 明确 item size、overscan、容器高度、key、滚动容器和 resize 行为。
17
17
  4. 无限滚动时分离数据分页和 DOM 虚拟化;数据获取可联用数据获取 workflow。
18
18
  5. 验证 DOM 节点数、滚动 FPS、键盘/屏幕阅读器体验和 Ctrl+F/SEO 限制。
19
19
 
20
- ## Detailed References
20
+ ## 详细参考
21
21
 
22
- 涉及固定高度列表、可变/动态高度、无限滚动、网格虚拟化和性能注意事项时,加载 [references/virtualization-patterns.md](references/virtualization-patterns.md)。
22
+ 涉及是否需要虚拟化、库选型、固定高度、可变/动态高度、无限滚动、网格虚拟化和性能注意事项时,加载 [references/virtualization-patterns.md](references/virtualization-patterns.md)。
23
23
 
24
24
  ## Constraints
25
25
 
@@ -1,6 +1,34 @@
1
1
  # 虚拟列表模式
2
2
 
3
- ## 固定高度列表
3
+ ## 先判断是否需要虚拟化
4
+
5
+ - 只有列表规模、渲染成本或滚动性能已经形成瓶颈时才引入虚拟化;小列表、轻量静态列表和分页后可控的列表不需要。
6
+ - SEO 关键内容、依赖浏览器原生 Ctrl+F 的全文内容、需要一次性打印/导出的内容,不要只存在于虚拟项中。
7
+ - 虚拟化只减少 DOM 渲染成本,不替代数据分页、接口缓存、图片懒加载或复杂行组件的渲染优化。
8
+
9
+ ## 选型参考
10
+
11
+ 先沿用项目已有虚拟列表库和框架约定;新增依赖时再按场景选择。
12
+
13
+ | 场景 | 候选方案 | 注意点 |
14
+ | --- | --- | --- |
15
+ | React 固定高度列表 | `react-window` 或 TanStack Virtual | `react-window` 轻量稳定;TanStack Virtual 更适合统一复杂场景。 |
16
+ | React 可变高度列表 | `react-window` 的 `VariableSizeList` 或 TanStack Virtual | 高度可计算时两者都可用;内容真实高度会变化时需要测量和重置。 |
17
+ | 动态测量、聊天流、展开行 | TanStack Virtual | 配合 `measureElement` / ResizeObserver,处理布局抖动和滚动锚点。 |
18
+ | Vue / Solid / Svelte / 跨框架 | TanStack Virtual 或项目既有生态库 | 不要为非 React 项目引入 React-only 虚拟列表库。 |
19
+ | 二维网格、表格、列虚拟化 | TanStack Virtual row/column 双轴方案或现有表格库虚拟化能力 | 固定列、粘性表头和键盘导航需要单独验证。 |
20
+ | 遗留 `react-virtualized` 项目 | 维护现有实现 | 不建议新功能继续扩散;大改时评估迁移成本。 |
21
+
22
+ ## 通用实现原则
23
+
24
+ - 容器高度必须稳定,滚动容器必须明确,item key 必须来自稳定业务标识。
25
+ - 行根元素必须透传虚拟库提供的 `style`、定位属性和测量 ref。
26
+ - `overscan` 按设备和行渲染成本调节:过小会白屏,过大会接近全量渲染。
27
+ - 动态高度需要估算高度、真实测量、resize 更新和滚动锚点策略。
28
+ - 无限滚动要分离“数据分页”和“DOM 虚拟化”;不要在 render 阶段无条件触发请求。
29
+ - 验证键盘导航、屏幕阅读器语义、焦点保持、滚动恢复、空态/加载态和错误态。
30
+
31
+ ## React 固定高度示例
4
32
 
5
33
  ```tsx
6
34
  import { FixedSizeList as List } from "react-window";
@@ -16,7 +44,7 @@ export const UserList = ({ users }: { users: User[] }) => (
16
44
  );
17
45
  ```
18
46
 
19
- ## 可变高度
47
+ ## React 可变高度示例
20
48
 
21
49
  ```tsx
22
50
  import { VariableSizeList as List } from "react-window";
@@ -28,7 +56,7 @@ const getItemSize = (index: number) => (items[index].hasSummary ? 120 : 60);
28
56
  </List>;
29
57
  ```
30
58
 
31
- ## 动态高度
59
+ ## TanStack Virtual 动态高度示例
32
60
 
33
61
  ```tsx
34
62
  const virtualizer = useVirtualizer({
@@ -39,7 +67,7 @@ const virtualizer = useVirtualizer({
39
67
  });
40
68
  ```
41
69
 
42
- 动态内容需要测量元素并处理 ResizeObserver。
70
+ 动态内容需要测量元素并处理 ResizeObserver;Vue/Solid/Svelte 项目使用 TanStack Virtual 对应框架 adapter,核心选项保持一致。
43
71
 
44
72
  ## 无限滚动
45
73
 
@@ -67,6 +67,10 @@ description: Use when diagnosing or improving frontend performance, Core Web Vit
67
67
  - 不引入大型新依赖解决小问题;先利用项目已有工具和浏览器能力。
68
68
  - 不把后端、网络和浏览器侧问题混为一谈;前端能验证的部分要单独列证据。
69
69
 
70
+ ## 详细参考
71
+
72
+ 撰写性能分析报告时,加载 [references/report-template.md](references/report-template.md)。
73
+
70
74
  ## Expected Output
71
75
 
72
- 输出性能分析报告,包含基线、指标或观察证据、瓶颈位置、优先级、改法、验证命令和剩余风险。报告保存为 `reports/performance-review-YYYY-MM-DD-HHmmss.md`。
76
+ 输出有证据链的性能分析报告,说明基线、瓶颈、优化建议、验证方式和剩余风险。报告保存为 `reports/performance-review-YYYY-MM-DD-HHmmss.md`。
@@ -0,0 +1,53 @@
1
+ # 性能分析报告模板
2
+
3
+ ```markdown
4
+ # 前端性能分析报告
5
+
6
+ > 生成时间: YYYY-MM-DD HH:mm
7
+ > 目标页面/流程: ...
8
+ > 环境: 设备、浏览器、网络、分支或版本
9
+
10
+ ## 性能目标
11
+
12
+ - 关注指标: LCP / CLS / INP / TBT / bundle size / memory / FPS
13
+ - 项目预算或目标阈值
14
+ - 用户主路径和 P95 场景
15
+
16
+ ## 基线数据
17
+
18
+ | 指标 | 当前值 | 采集方式 | 备注 |
19
+ | --- | --- | --- | --- |
20
+ | LCP | ... | Lighthouse / RUM / trace | ... |
21
+
22
+ ## 瓶颈定位
23
+
24
+ - 加载层、渲染层、数据层、主线程或资源层问题
25
+ - 关联文件、路由、chunk、组件或请求
26
+ - 支持该判断的 trace、bundle、日志或截图证据
27
+
28
+ ## 优先级
29
+
30
+ | 优先级 | 问题 | 用户影响 | 风险 |
31
+ | --- | --- | --- | --- |
32
+ | P0 / P1 / P2 | ... | ... | ... |
33
+
34
+ ## 优化方案
35
+
36
+ - 具体改法
37
+ - 替代方案
38
+ - 可维护性、可访问性和产品行为影响
39
+
40
+ ## 验证对比
41
+
42
+ | 指标 | 优化前 | 优化后 | 采集方式 |
43
+ | --- | --- | --- | --- |
44
+ | ... | ... | ... | ... |
45
+
46
+ ## 剩余风险
47
+
48
+ - 未覆盖设备、网络或浏览器
49
+ - 需要后端、设计、产品或基础设施协作的部分
50
+ - 建议监控或后续任务
51
+ ```
52
+
53
+ 分析完成后,将报告保存到 `reports/performance-review-YYYY-MM-DD-HHmmss.md`,并告知用户报告路径。
@@ -17,10 +17,10 @@ description: Use when adding or reviewing Progressive Web App capabilities such
17
17
  4. 用 Workbox 或框架插件管理 precache/runtime cache;登录、支付、权限变更等敏感请求必须走网络。
18
18
  5. 提供 offline fallback 页面和安装提示 UI,并验证首次加载、离线访问、更新激活、卸载重装。
19
19
 
20
- ## Detailed References
20
+ ## 详细参考
21
21
 
22
- - Load [references/manifest-and-icons.md](references/manifest-and-icons.md) for manifest fields, HTML links, icon requirements, screenshots, and iOS notes.
23
- - Load [references/service-worker-workbox.md](references/service-worker-workbox.md) for Service Worker registration, Workbox strategies, Vite integration, offline fallback, and update flow.
22
+ - 需要 manifest 字段、HTML 引用、图标要求、截图和 iOS 注意事项时,加载 [references/manifest-and-icons.md](references/manifest-and-icons.md)。
23
+ - 需要 Service Worker 注册、Workbox 策略、Vite 集成、离线兜底和更新流程时,加载 [references/service-worker-workbox.md](references/service-worker-workbox.md)。
24
24
 
25
25
  ## Constraints
26
26
 
@@ -33,4 +33,3 @@ description: Use when adding or reviewing Progressive Web App capabilities such
33
33
  ## Expected Output
34
34
 
35
35
  产出可安装的 Web 应用、离线 fallback、可见更新提示和明确缓存策略。验证 Lighthouse PWA、DevTools Application 面板、离线模式、更新发布和移动端安装流程。
36
-
@@ -50,7 +50,7 @@ description: Use when designing or reviewing React + TypeScript project structur
50
50
  - 页面级 Error Boundary、模块级 fallback、API 错误映射和用户可恢复动作是否一致
51
51
  - Tailwind token/variant 或响应式布局需求是否应分流到对应专项 skill
52
52
 
53
- ## Detailed References
53
+ ## 详细参考
54
54
 
55
55
  需要具体 React 项目结构、组件模式、Hooks、路由、状态归属、API 层形状、错误处理、样式默认值、TypeScript 约定或审查清单时,加载 [references/react-project-details.md](references/react-project-details.md)。
56
56
 
@@ -41,8 +41,11 @@ description: Use when safely removing dead frontend code, unused exports, stale
41
41
  - 不用“看起来没人用”作为证据;必须有搜索、工具输出、类型错误消失或测试保护。
42
42
  - 不把依赖大版本升级伪装成清理;升级风险、release notes 和 lockfile 变更应分流到依赖升级工作流。
43
43
 
44
+ ## 详细参考
45
+
46
+ 撰写清理报告时,加载 [references/report-template.md](references/report-template.md)。
47
+
44
48
  ## Expected Output
45
49
 
46
50
  - 清理报告保存为 `reports/refactor-clean-YYYY-MM-DD-HHmmss.md`。
47
- - 报告包含候选项、风险分类、已清理项、跳过原因、运行命令和剩余风险。
48
51
  - 代码清理后相关验证命令通过,或明确说明阻塞原因。
@@ -0,0 +1,42 @@
1
+ # 重构清理报告模板
2
+
3
+ ```markdown
4
+ # 重构清理报告
5
+
6
+ > 生成时间: YYYY-MM-DD HH:mm
7
+ > 清理范围: 文件 / 模块 / 依赖 / 路由 / 样式
8
+
9
+ ## 基线验证
10
+
11
+ | 命令 | 清理前状态 | 清理后状态 | 备注 |
12
+ | --- | --- | --- | --- |
13
+ | `npm run lint` | 失败 / 通过 / 未运行 | 失败 / 通过 / 未运行 | ... |
14
+
15
+ ## 候选项与证据
16
+
17
+ | 候选项 | 证据 | 风险分类 |
18
+ | --- | --- | --- |
19
+ | `path/to/file.ts` | 工具输出 / rg 搜索 / 类型检查 | SAFE / CAUTION / DANGER / UPGRADE |
20
+
21
+ ## 已清理项
22
+
23
+ - 删除或修改的文件、导出、样式、依赖或配置
24
+ - 每项清理对应的证据
25
+
26
+ ## 跳过原因
27
+
28
+ - CAUTION / DANGER 项为什么没有自动处理
29
+ - 需要人工确认、运行时验证或专项流程的内容
30
+
31
+ ## 验证命令
32
+
33
+ - 执行的 lint、type-check、test、build 或手工验证
34
+ - 关键输出摘要
35
+
36
+ ## 剩余风险
37
+
38
+ - 动态引用、运行时模板、插件元数据或外部入口风险
39
+ - 建议后续清理或依赖升级项
40
+ ```
41
+
42
+ 清理完成后,将报告保存到 `reports/refactor-clean-YYYY-MM-DD-HHmmss.md`,并告知用户报告路径。
@@ -18,10 +18,10 @@ description: Use when reviewing frontend security risks such as XSS, CSRF, sensi
18
18
  5. 高危问题标记为阻塞合并;前端校验只能改善体验,不能作为唯一安全边界。
19
19
  6. 输出分级安全报告;报告格式见 [references/report-template.md](references/report-template.md)。
20
20
 
21
- ## Detailed References
21
+ ## 详细参考
22
22
 
23
- - Load [references/security-checklist.md](references/security-checklist.md) for XSS, CSP, sensitive data, CSRF, dependency, and input validation details.
24
- - Load [references/report-template.md](references/report-template.md) when writing the security review report.
23
+ - 需要 XSS、CSP、敏感数据、CSRF、依赖和输入校验细节时,加载 [references/security-checklist.md](references/security-checklist.md)。
24
+ - 撰写安全审查报告时,加载 [references/report-template.md](references/report-template.md)。
25
25
 
26
26
  ## Constraints
27
27
 
@@ -123,7 +123,7 @@ const migrationPlan: StateMigrationItem[] = [
123
123
  ];
124
124
  ```
125
125
 
126
- ## Detailed References
126
+ ## 详细参考
127
127
 
128
128
  需要 Store 形状示例、选择器模式、URL 状态同步、持久化适配器、SSR 边界或审查清单时,加载 [references/state-patterns.md](references/state-patterns.md)。
129
129
 
@@ -18,9 +18,9 @@ description: Use when setting up or reviewing Storybook component documentation,
18
18
  5. 需要自动化时接入 interaction tests、addon-a11y、Chromatic 或 Storybook Test Runner;这些能力服务于组件文档和设计系统展示,不承接跨页业务旅程。
19
19
  6. 设计系统组件应记录 token 来源、Tailwind/class 变体、暗色模式、响应式尺寸和不支持的组合,避免消费者靠猜测拼装。
20
20
 
21
- ## Detailed References
21
+ ## 详细参考
22
22
 
23
- - Load [references/story-patterns.md](references/story-patterns.md) for `main.ts`, `preview.ts`, stories, decorators, MDX, interaction tests, and visual regression examples.
23
+ - 需要 `main.ts`、`preview.ts`、stories、decorators、MDX、交互测试和视觉回归示例时,加载 [references/story-patterns.md](references/story-patterns.md)。
24
24
 
25
25
  ## Constraints
26
26
 
@@ -140,7 +140,7 @@ type UserStatus = UserViewModel["status"];
140
140
  type _UserStatusTest = Expect<Equal<UserStatus, "active" | "disabled">>;
141
141
  ```
142
142
 
143
- ## Detailed References
143
+ ## 详细参考
144
144
 
145
145
  涉及高级泛型约束、映射类型、模板字面量类型、类型测试、DTO 映射或类型审查清单时,加载 [references/type-safety-patterns.md](references/type-safety-patterns.md)。
146
146
 
@@ -31,7 +31,7 @@ description: Use when running existing project validation commands and fixing fa
31
31
  - 对 CI 专属失败记录 Node 版本、包管理器、环境变量、路径大小写和工作目录差异。
32
32
  - 修复测试时优先修产品代码或测试等待方式,不用删除断言掩盖真实回归。
33
33
 
34
- ## 强约束
34
+ ## Constraints
35
35
 
36
36
  - 不要盲目关闭规则来消除报错
37
37
  - 除非有明确理由,不要为了通过检查而降低类型安全
@@ -40,9 +40,12 @@ description: Use when running existing project validation commands and fixing fa
40
40
  - 不要删除失败测试来让验证通过
41
41
  - 不要只运行失败命令的片段就声称整体验证通过
42
42
 
43
+ ## 详细参考
44
+
45
+ 撰写验证修复报告时,加载 [references/report-template.md](references/report-template.md)。
46
+
43
47
  ## Expected Output
44
48
 
45
49
  - lint / type-check / test / build 等验证命令全部通过
46
50
  - 失败项已修复或给出明确原因和后续行动
47
51
  - 修复报告保存为 `reports/validation-fix-YYYY-MM-DD-HHmmss.md`
48
- - 报告包含命令状态表、问题根因、修复说明、变更文件和剩余风险
@@ -0,0 +1,43 @@
1
+ # 验证修复报告模板
2
+
3
+ ```markdown
4
+ # 验证修复报告
5
+
6
+ > 生成时间: YYYY-MM-DD HH:mm
7
+ > 验证范围: lint / type-check / test / build / CI
8
+
9
+ ## 命令状态表
10
+
11
+ | 命令 | 初始状态 | 修复后状态 | 备注 |
12
+ | --- | --- | --- | --- |
13
+ | `npm run type-check` | 失败 / 通过 / 未运行 | 失败 / 通过 / 未运行 | ... |
14
+
15
+ ## 失败摘要
16
+
17
+ - 最早出现且会级联的错误
18
+ - 受影响文件、错误类型和关键日志
19
+ - 是否属于 CI 专属、测试环境、依赖版本或 flaky 问题
20
+
21
+ ## 根因
22
+
23
+ - 确认的根本原因
24
+ - 支持该结论的输出、日志或复现证据
25
+
26
+ ## 修复内容
27
+
28
+ - 修改的文件和行为
29
+ - 为什么没有通过关闭规则、删除断言或降低类型安全来规避失败
30
+
31
+ ## 验证结果
32
+
33
+ - 重新执行的命令
34
+ - 命令输出摘要
35
+ - 是否仍有失败项
36
+
37
+ ## 剩余风险
38
+
39
+ - 未覆盖的验证命令
40
+ - 仍需用户决策或外部环境确认的问题
41
+ ```
42
+
43
+ 验证修复完成后,将报告保存到 `reports/validation-fix-YYYY-MM-DD-HHmmss.md`,并告知用户报告路径。
@@ -21,7 +21,7 @@ description: Use when designing or reviewing Vue 3 + TypeScript project structur
21
21
  6. Tailwind token/variant 或响应式布局需求应分流到对应专项 skill,避免把样式系统规则塞进 Vue 组件规范。
22
22
  5. 状态归属复杂时先做状态清单;DTO、公共 props 或泛型 composable 复杂时先收敛 TypeScript 类型契约。
23
23
 
24
- ## Detailed References
24
+ ## 详细参考
25
25
 
26
26
  需要具体 Vue 3 项目结构、组件模式、Composables、slots、Provide/Inject、路由、Pinia、API 层、错误处理、指令、样式、TypeScript、测试、性能或审查清单时,加载 [references/vue3-project-details.md](references/vue3-project-details.md)。
27
27
 
@@ -17,10 +17,10 @@ description: Use when moving expensive browser work off the main thread with Web
17
17
  4. 传大对象时优先 Transferable Objects;不要让结构化克隆吞掉 Worker 带来的收益。
18
18
  5. 在组件或页面卸载时 `terminate()`,并通过 Profiler、Performance 面板或 FPS 指标验证主线程改善。
19
19
 
20
- ## Detailed References
20
+ ## 详细参考
21
21
 
22
- - Load [references/basic-worker.md](references/basic-worker.md) for plain Worker files, bundler imports, React lifecycle wrapping, and cleanup.
23
- - Load [references/advanced-workers.md](references/advanced-workers.md) for Transferable Objects, Comlink, Worker pools, SharedWorker, CSP, and SharedArrayBuffer notes.
22
+ - 需要原生 Worker 文件、构建工具导入、React 生命周期封装和清理示例时,加载 [references/basic-worker.md](references/basic-worker.md)。
23
+ - 需要 Transferable Objects、Comlink、Worker pool、SharedWorker、CSP 和 SharedArrayBuffer 注意事项时,加载 [references/advanced-workers.md](references/advanced-workers.md)。
24
24
 
25
25
  ## Constraints
26
26
 
@@ -33,4 +33,3 @@ description: Use when moving expensive browser work off the main thread with Web
33
33
  ## Expected Output
34
34
 
35
35
  计算密集型操作在后台线程执行,主线程输入和滚动恢复流畅,错误与取消路径明确,Worker 在卸载时被终止且无内存泄漏。
36
-