create-vibe-workflow 0.1.0 → 0.2.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 (120) hide show
  1. package/README.md +248 -57
  2. package/dist/adapters/next-only/skills.recommend.json +1 -0
  3. package/dist/adapters/node-api/skills.recommend.json +1 -0
  4. package/dist/cli.js +163 -5
  5. package/dist/cli.js.map +1 -1
  6. package/dist/generator.d.ts.map +1 -1
  7. package/dist/generator.js +255 -44
  8. package/dist/generator.js.map +1 -1
  9. package/dist/questions.d.ts +11 -1
  10. package/dist/questions.d.ts.map +1 -1
  11. package/dist/questions.js +103 -16
  12. package/dist/questions.js.map +1 -1
  13. package/dist/templates/claude-md/CLAUDE.zh-CN.md +51 -46
  14. package/dist/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
  15. package/dist/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
  16. package/dist/templates/commands/gstack/cso.md.ejs +213 -0
  17. package/dist/templates/commands/gstack/office-hours.md.ejs +109 -0
  18. package/dist/templates/commands/gstack/review.md.ejs +192 -0
  19. package/dist/templates/commands/gstack/ship.md.ejs +256 -0
  20. package/dist/templates/commands/opsx/apply.md.ejs +106 -0
  21. package/dist/templates/commands/opsx/archive.md.ejs +88 -0
  22. package/dist/templates/commands/opsx/explore.md.ejs +84 -0
  23. package/dist/templates/commands/opsx/propose.md.ejs +185 -0
  24. package/dist/templates/commands/superpowers/brainstorm.md.ejs +240 -0
  25. package/dist/templates/commands/superpowers/tdd.md.ejs +230 -0
  26. package/dist/templates/commands/superpowers/verify.md.ejs +211 -0
  27. package/dist/templates/commands/workflow/plan.md.ejs +219 -0
  28. package/dist/templates/hooks/check-deps.mjs +66 -65
  29. package/dist/templates/memory/.gitkeep +0 -0
  30. package/dist/templates/memory/MEMORY.md.ejs +88 -0
  31. package/dist/templates/memory/dev-notes.md.ejs +61 -0
  32. package/dist/templates/memory/troubleshooting.md.ejs +30 -0
  33. package/dist/templates/rules/agents.md +49 -49
  34. package/dist/templates/rules/coding-style.md +156 -117
  35. package/dist/templates/rules/development-workflow.md +103 -50
  36. package/dist/templates/rules/git-workflow.md +103 -47
  37. package/dist/templates/rules/hooks.md +159 -0
  38. package/dist/templates/rules/hooks.md.ejs +159 -0
  39. package/dist/templates/rules/memory.md +106 -0
  40. package/dist/templates/rules/memory.md.ejs +106 -0
  41. package/dist/templates/rules/patterns.md +117 -48
  42. package/dist/templates/rules/performance.md +108 -0
  43. package/dist/templates/rules/performance.md.ejs +108 -0
  44. package/dist/templates/rules/security.md +52 -37
  45. package/dist/templates/rules/testing.md +83 -30
  46. package/dist/templates/settings/settings.template.json +18 -2
  47. package/dist/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
  48. package/dist/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
  49. package/dist/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
  50. package/dist/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
  51. package/dist/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
  52. package/dist/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
  53. package/dist/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
  54. package/dist/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
  55. package/dist/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
  56. package/dist/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
  57. package/dist/templates/skills/skill-manifest.json +59 -0
  58. package/dist/templates/skills/skills-lock.template.json +12 -0
  59. package/dist/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
  60. package/dist/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
  61. package/dist/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
  62. package/dist/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
  63. package/dist/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
  64. package/dist/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
  65. package/dist/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
  66. package/dist/utils.d.ts +40 -0
  67. package/dist/utils.d.ts.map +1 -0
  68. package/dist/utils.js +110 -0
  69. package/dist/utils.js.map +1 -0
  70. package/package.json +2 -2
  71. package/templates/claude-md/CLAUDE.zh-CN.md +51 -46
  72. package/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
  73. package/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
  74. package/templates/commands/gstack/cso.md.ejs +213 -0
  75. package/templates/commands/gstack/office-hours.md.ejs +109 -0
  76. package/templates/commands/gstack/review.md.ejs +192 -0
  77. package/templates/commands/gstack/ship.md.ejs +256 -0
  78. package/templates/commands/opsx/apply.md.ejs +106 -0
  79. package/templates/commands/opsx/archive.md.ejs +88 -0
  80. package/templates/commands/opsx/explore.md.ejs +84 -0
  81. package/templates/commands/opsx/propose.md.ejs +185 -0
  82. package/templates/commands/superpowers/brainstorm.md.ejs +240 -0
  83. package/templates/commands/superpowers/tdd.md.ejs +230 -0
  84. package/templates/commands/superpowers/verify.md.ejs +211 -0
  85. package/templates/commands/workflow/plan.md.ejs +219 -0
  86. package/templates/hooks/check-deps.mjs +66 -65
  87. package/templates/memory/.gitkeep +0 -0
  88. package/templates/memory/MEMORY.md.ejs +88 -0
  89. package/templates/memory/dev-notes.md.ejs +61 -0
  90. package/templates/memory/troubleshooting.md.ejs +30 -0
  91. package/templates/rules/agents.md +49 -49
  92. package/templates/rules/coding-style.md +156 -117
  93. package/templates/rules/development-workflow.md +103 -50
  94. package/templates/rules/git-workflow.md +103 -47
  95. package/templates/rules/hooks.md +159 -0
  96. package/templates/rules/memory.md +106 -0
  97. package/templates/rules/patterns.md +117 -48
  98. package/templates/rules/performance.md +108 -0
  99. package/templates/rules/security.md +52 -37
  100. package/templates/rules/testing.md +83 -30
  101. package/templates/settings/settings.template.json +18 -2
  102. package/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
  103. package/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
  104. package/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
  105. package/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
  106. package/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
  107. package/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
  108. package/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
  109. package/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
  110. package/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
  111. package/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
  112. package/templates/skills/skill-manifest.json +59 -0
  113. package/templates/skills/skills-lock.template.json +12 -0
  114. package/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
  115. package/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
  116. package/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
  117. package/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
  118. package/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
  119. package/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
  120. package/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
@@ -0,0 +1,228 @@
1
+ # Deployment Patterns — 部署模式
2
+
3
+ > 使用此 skill 时:设计部署流水线、选择部署策略、配置健康检查、管理回滚。
4
+
5
+ ## CI/CD 流水线
6
+
7
+ ### 标准流水线结构
8
+
9
+ ```text
10
+ ┌─ Code Push ─→ CI(构建+测试) ─→ CD(部署) ─→ 验证 ─→ 完成
11
+
12
+ 【CI 阶段(提交触发)】
13
+ 1. Lint + 类型检查
14
+ 2. 单元测试 + 集成测试
15
+ 3. 构建(编译、打包)
16
+ 4. 构建镜像(Docker build)
17
+ 5. 镜像扫描(安全漏洞)
18
+ 6. 推送镜像到仓库
19
+
20
+ 【CD 阶段(手动/自动触发)】
21
+ 1. 从镜像仓库拉取指定版本
22
+ 2. 部署到目标环境
23
+ 3. 运行健康检查
24
+ 4. 运行 Smoke Test
25
+ 5. 切换流量(如有负载均衡)
26
+ 6. 通知团队
27
+ ```
28
+
29
+ ### 环境管理
30
+
31
+ ```text
32
+ 开发(Development):
33
+ - 开发者自行部署
34
+ - 自动从 feature 分支部署
35
+ - 不稳定,用于快速迭代
36
+
37
+ 测试(Staging / QA):
38
+ - 合并到 main 后自动部署
39
+ - 运行全量测试套件
40
+ - 模拟生产环境配置
41
+
42
+ 生产(Production):
43
+ - 从 Staging 提升(promotion)
44
+ - 需要审批流程
45
+ - 蓝绿/灰度发布
46
+
47
+ 环境差异性管理:
48
+ build once, deploy many
49
+ 同一构建产物部署到所有环境
50
+ 通过环境变量区分配置
51
+ ```
52
+
53
+ ## 部署策略
54
+
55
+ ### 策略对比
56
+
57
+ | 策略 | 零停机 | 回滚速度 | 成本 | 适用场景 |
58
+ |------|--------|---------|------|---------|
59
+ | Rolling | 是 | 慢 | 低 | 标准 Web 服务 |
60
+ | Blue-Green | 是 | 极快 | 高(双倍资源) | 关键服务 |
61
+ | Canary | 是 | 中 | 中 | 高风险变更 |
62
+ | Recreate | 否 | N/A | 低 | 内部工具/定时任务 |
63
+
64
+ ### Rolling Update(滚动更新)
65
+
66
+ ```text
67
+ 过程:
68
+ 1. 启动新版本实例(逐台替换)
69
+ 2. 旧实例下线前完成请求处理
70
+ 3. 新实例通过健康检查后开始接收流量
71
+
72
+ 配置要点:
73
+ maxSurge: 1 # 最多超出目标实例数 1 个
74
+ maxUnavailable: 0 # 始终保持 100% 可用
75
+ minReadySeconds: 30 # 新实例就绪后等待 30 秒再继续
76
+
77
+ 适用场景:
78
+ - 无状态服务
79
+ - 多实例(≥3)
80
+ - 可以接受慢回滚
81
+ ```
82
+
83
+ ### Blue-Green Deployment(蓝绿部署)
84
+
85
+ ```text
86
+ 过程:
87
+ 1. Blue(当前生产环境)
88
+ 2. Green(新版本环境,独立部署)
89
+ 3. Green 验证通过后,切换负载均衡指向 Green
90
+ 4. Blue 保留以备回滚
91
+
92
+ 回滚:
93
+ - 负载均衡切回 Blue(秒级回滚)
94
+ - Blue 实例保持运行直到确认稳定
95
+
96
+ 资源要求:
97
+ - 双倍基础设施
98
+ - 数据库需前后兼容(两个版本同时读写)
99
+
100
+ 适用场景:
101
+ - 关键业务服务
102
+ - 需要即时回滚
103
+ - 可以承担双倍资源成本
104
+ ```
105
+
106
+ ### Canary Release(金丝雀发布)
107
+
108
+ ```text
109
+ 过程:
110
+ 1. 部署新版本到少量实例(如 5% 流量)
111
+ 2. 监控错误率、延迟、业务指标
112
+ 3. 稳定后逐步增加流量(10% → 25% → 50% → 100%)
113
+ 4. 异常时自动回滚
114
+
115
+ 流量路由方式:
116
+ - 负载均衡权重
117
+ - 基于用户群体(内部用户先使用)
118
+ - 基于地域
119
+
120
+ 适用场景:
121
+ - 高风险大版本更新
122
+ - 需要真实流量验证
123
+ - 有完善的监控体系
124
+ ```
125
+
126
+ ## 健康检查端点
127
+
128
+ ### 三级检查体系
129
+
130
+ ```text
131
+ 【就绪检查(Readiness)】
132
+ 端点:GET /health/ready
133
+ 目的:服务是否准备好接收流量
134
+ 检查:依赖服务可用(DB、缓存、队列连接正常)
135
+ 失败:从负载均衡移除,不停止容器
136
+
137
+ 【存活检查(Liveness)】
138
+ 端点:GET /health/live
139
+ 目的:服务是否正常运行
140
+ 检查:进程响应、无死锁
141
+ 失败:重启容器
142
+
143
+ 【启动检查(Startup)】
144
+ 端点:GET /health/startup
145
+ 目的:服务是否完成初始化
146
+ 检查:预热完成、数据加载完成
147
+ 失败:延长等待,不杀死进程
148
+
149
+ 实现建议:
150
+ /health 端点应:
151
+ - 返回 200 表示健康
152
+ - 返回 5xx 表示不健康
153
+ - 不包含敏感信息
154
+ - 快速响应(< 100ms)
155
+ - 不进行复杂计算
156
+ ```
157
+
158
+ ## 回滚策略
159
+
160
+ ```text
161
+ 【触发回滚的条件】
162
+ - 健康检查连续失败
163
+ - 错误率超过阈值(如 5xx > 1%)
164
+ - 延迟超过基准线 2 倍
165
+ - 业务指标异常(如转化率下降)
166
+ - 手动触发(线上事故)
167
+
168
+ 【回滚方式】
169
+ 快速回滚(秒级):
170
+ - 负载均衡切回旧版本(蓝绿部署)
171
+ - DNS 切换
172
+
173
+ 标准回滚(分级):
174
+ - 恢复到上一个稳定版本
175
+ - 数据库迁移需回滚
176
+
177
+ 重建回滚(分钟级):
178
+ - 从头部署旧版本
179
+ - 适用:非容器化部署
180
+
181
+ 【回滚后操作】
182
+ 1. 确认服务恢复
183
+ 2. 通知团队
184
+ 3. 分析事故原因
185
+ 4. 更新测试防止重现
186
+ ```
187
+
188
+ ## 环境变量与配置管理
189
+
190
+ ```text
191
+ 【配置分层】
192
+ 代码级 → 不随环境变化(默认值、常量)
193
+ 构建级 → 构建时注入(构建时间、Git commit)
194
+ 部署级(环境变量) → 环境差异(DB URL、API Key)
195
+ 运行时级 → 运行时获取(配置中心、Secrets Manager)
196
+
197
+ 【敏感配置】
198
+ 不使用环境变量(日志可能泄露)
199
+ 使用密钥管理服务(Vault、AWS Secrets Manager、GCP Secret Manager)
200
+ 或加密后提交,部署时解密
201
+
202
+ 【配置验证】
203
+ 启动时验证所有必需配置存在
204
+ 缺失时快速失败(fail fast)
205
+ 打印缺失的配置名(但不打印值)
206
+ ```
207
+
208
+ ## 监控与告警
209
+
210
+ ```text
211
+ 【必须监控的指标】
212
+ 可用性 — 健康检查成功率
213
+ 性能 — 请求延迟(P50/P95/P99)
214
+ 容量 — CPU/内存/磁盘/网络
215
+ 错误 — 错误率(4xx/5xx)
216
+ 业务 — 关键业务指标(注册数、订单数)
217
+
218
+ 【告警规则】
219
+ P0(紧急):服务不可用、数据丢失 → 即时通知
220
+ P1(高):延迟飙升、错误率突增 → 5 分钟内通知
221
+ P2(中):容量接近上限 → 24 小时内处理
222
+ P3(低):非关键警告 → 下一迭代处理
223
+
224
+ 【告警原则】
225
+ - 告警可行动(收到告警能采取具体操作)
226
+ - 避免告警疲劳(太少 ≠ 太多)
227
+ - 告警包含上下文(什么服务、什么指标、多久了)
228
+ ```
@@ -0,0 +1,215 @@
1
+ # Docker Patterns — Docker 容器化模式
2
+
3
+ > 使用此 skill 时:编写 Dockerfile、配置 Compose、优化镜像、排查容器问题。
4
+
5
+ ## 开发环境配置
6
+
7
+ ### Docker Compose 结构
8
+
9
+ ```text
10
+ compose.yaml
11
+ ├── services:
12
+ │ ├── app # 应用服务
13
+ │ ├── db # 数据库
14
+ │ ├── cache # 缓存(Redis / Memcached)
15
+ │ ├── queue # 消息队列
16
+ │ └── proxy # 反向代理(开发用)
17
+ ├── volumes: # 持久化数据
18
+ └── networks: # 网络隔离
19
+ ```
20
+
21
+ ### 开发环境要点
22
+
23
+ ```text
24
+ 【热重载】
25
+ - 挂载源码目录到容器内(volumes)
26
+ - 应用进程支持文件变化自动重启
27
+
28
+ 【环境变量】
29
+ - 用 .env 文件管理(不提交到 git)
30
+ - compose.yaml 引用 ${VARIABLE:-default}
31
+
32
+ 【端口映射】
33
+ - 只暴露需要的端口
34
+ - 避免端口冲突(映射到随机主机端口)
35
+
36
+ 示例卷挂载:
37
+ volumes:
38
+ - ./src:/app/src # 源码热重载
39
+ - /app/node_modules # 匿名卷(覆盖,防止覆盖容器内依赖)
40
+ ```
41
+
42
+ ## 多阶段构建
43
+
44
+ ### 通用模式
45
+
46
+ ```text
47
+ 【第一阶段:构建(Builder)】
48
+ FROM base AS builder
49
+ WORKDIR /app
50
+ COPY package.json ./
51
+ RUN install dependencies
52
+ COPY . .
53
+ RUN build
54
+
55
+ 【第二阶段:运行(Runtime)】
56
+ FROM runtime-base
57
+ WORKDIR /app
58
+ COPY --from=builder /app/dist ./dist
59
+ COPY --from=builder /app/node_modules ./node_modules
60
+ EXPOSE 3000
61
+ CMD ["run"]
62
+ ```
63
+
64
+ ### 优化技巧
65
+
66
+ ```text
67
+ 缓存利用:
68
+ 1. 先复制依赖配置文件(package.json / requirements.txt)
69
+ 2. 安装依赖(这一层会缓存,源码不变时不重跑)
70
+ 3. 再复制源码
71
+ 4. 最后构建
72
+
73
+ # 好 — 利用缓存
74
+ COPY package.json .
75
+ RUN npm install
76
+ COPY src/ .
77
+ RUN npm run build
78
+
79
+ # 坏 — 每次重装依赖
80
+ COPY . .
81
+ RUN npm install && npm run build
82
+
83
+ 减少层数:
84
+ - 合并 RUN 命令(&& 连接)
85
+ - 清理缓存文件(apt-get clean、npm cache clean --force)
86
+ - 多阶段构建只复制产物
87
+
88
+ 基础镜像选择:
89
+ alpine → 最小体积(但 musl libc 可能不兼容)
90
+ slim → Debian 精简版(推荐)
91
+ distroless → 最小攻击面(但调试困难)
92
+ 结论:首选 slim,需要最小体积用 distroless
93
+ ```
94
+
95
+ ## 安全最佳实践
96
+
97
+ ```text
98
+ 【不使用 root 用户运行】
99
+ RUN groupadd -r appuser && useradd -r -g appuser appuser
100
+ USER appuser
101
+
102
+ 【最小基础镜像】
103
+ - 越小的镜像 = 越小的攻击面
104
+ - 避免包含编译器、调试工具、包管理器
105
+
106
+ 【镜像漏洞扫描】
107
+ 定期扫描:trivy / docker scan / snyk
108
+ CI 中集成:漏洞阻断(CRITICAL/HIGH)
109
+
110
+ 【其他安全措施】
111
+ - 不将敏感信息写入镜像(构建参数 vs 环境变量)
112
+ - 使用 secrets 挂载(BuildKit: --secret)
113
+ - READ_ONLY 根文件系统(read_only: true)
114
+ - 限制容器能力(cap_drop: ALL)
115
+ - 不暴露 Docker socket(除非绝对必要)
116
+ ```
117
+
118
+ ## 日志管理
119
+
120
+ ```text
121
+ 【原则】
122
+ 应用 → stdout/stderr → Docker 收集 → 日志驱动 → 集中管理
123
+
124
+ 12-Factor App:
125
+ 应用将日志写入 stdout/stderr
126
+ Docker 负责收集和路由
127
+
128
+ 生产环境日志驱动(compose.yaml):
129
+ logging:
130
+ driver: "json-file"
131
+ options:
132
+ max-size: "10m"
133
+ max-file: "3"
134
+
135
+ 集中日志方案:
136
+ - 文件日志驱动 + Filebeat → Elasticsearch
137
+ - syslog 驱动 → 集中日志服务器
138
+ - awslogs / gcp 驱动 → 云平台日志服务
139
+ ```
140
+
141
+ ## 常见服务模板
142
+
143
+ ### PostgreSQL
144
+
145
+ ```text
146
+ db:
147
+ image: postgres:16-alpine
148
+ environment:
149
+ POSTGRES_DB: ${DB_NAME}
150
+ POSTGRES_USER: ${DB_USER}
151
+ POSTGRES_PASSWORD: ${DB_PASSWORD}
152
+ volumes:
153
+ - pgdata:/var/lib/postgresql/data
154
+ - ./init-db:/docker-entrypoint-initdb.d # 初始化脚本
155
+ healthcheck:
156
+ test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
157
+ interval: 5s
158
+ timeout: 5s
159
+ retries: 5
160
+ ```
161
+
162
+ ### Redis
163
+
164
+ ```text
165
+ cache:
166
+ image: redis:7-alpine
167
+ command: redis-server --requirepass ${REDIS_PASSWORD}
168
+ volumes:
169
+ - redis-data:/data
170
+ healthcheck:
171
+ test: ["CMD", "redis-cli", "ping"]
172
+ interval: 5s
173
+ timeout: 3s
174
+ retries: 5
175
+ ```
176
+
177
+ ### Nginx(反向代理)
178
+
179
+ ```text
180
+ proxy:
181
+ image: nginx:alpine
182
+ volumes:
183
+ - ./nginx.conf:/etc/nginx/nginx.conf:ro
184
+ - ./public:/var/www/public:ro
185
+ ports:
186
+ - "80:80"
187
+ - "443:443"
188
+ depends_on:
189
+ - app
190
+ ```
191
+
192
+ ## Docker 排查命令
193
+
194
+ ```text
195
+ 查看日志:
196
+ docker logs {container} # 标准日志
197
+ docker logs -f {container} # 实时追踪
198
+ docker logs --tail 100 {container} # 只看最后 100 行
199
+
200
+ 检查进程:
201
+ docker exec {container} ps aux # 运行了什么进程
202
+ docker top {container} # Docker 封装的 top
203
+
204
+ 进入容器调试:
205
+ docker exec -it {container} sh # 进入容器(alpine)
206
+ docker exec -it {container} bash # 进入容器(debian)
207
+
208
+ 资源监控:
209
+ docker stats {container} # CPU/内存/网络
210
+ docker inspect {container} | jq '.[0].State' # 容器状态
211
+
212
+ 构建调试:
213
+ docker build --no-cache . # 无缓存构建
214
+ docker build --progress=plain . # 详细构建输出
215
+ ```
@@ -0,0 +1,195 @@
1
+ # Frontend Patterns — 前端开发模式
2
+
3
+ > 使用此 skill 时:实现 UI 组件、管理状态、优化前端性能时。
4
+
5
+ ## 组件组合模式
6
+
7
+ ### 原则
8
+
9
+ ```text
10
+ 【组合优于继承】
11
+ - 小组件组合成复杂 UI
12
+ - 每个组件只有一个职责
13
+ - 组件不应知道父组件的内部细节
14
+
15
+ 【容器 vs 展示】
16
+ - 容器组件:管理状态和数据获取
17
+ - 展示组件:纯渲染,通过属性接收数据和回调
18
+ ```
19
+
20
+ ### 组件结构模板
21
+
22
+ ```text
23
+ Component/
24
+ ├── Component.{ext} # 主组件
25
+ ├── Component.types.{ext} # 类型定义
26
+ ├── Component.styles.{ext} # 样式
27
+ ├── Component.test.{ext} # 测试
28
+ ├── parts/ # 子组件
29
+ │ ├── PartA.{ext}
30
+ │ └── PartB.{ext}
31
+ └── index.{ext} # 重导出
32
+ ```
33
+
34
+ ## 状态管理决策矩阵
35
+
36
+ | 场景 | 方案 | 说明 |
37
+ |------|------|------|
38
+ | 局部 UI 状态(表单输入、折叠展开) | 组件内局部状态 | 最简单的方案,不需要外部管理 |
39
+ | 子组件需要访问父组件状态 | 属性传递(Props Drilling) | 1-2 层时适用 |
40
+ | 多个不相关组件需要共享状态 | 提升状态(Lifting State Up) | 移到最近的共同祖先 |
41
+ | 深层嵌套组件需要共享状态 | 上下文(Context) | 避免多层属性传递 |
42
+ | 上下文+复杂更新逻辑 | 上下文 + Reducer | 类似 Redux 但内置 |
43
+ | 跨页面/全局状态 | 专用状态管理库 | 如 Zustand、Pinia、Redux Toolkit |
44
+ | 服务端数据缓存 | 数据获取库 | 如 React Query、SWR、Apollo |
45
+
46
+ ### 受控 vs 非受控
47
+
48
+ ```text
49
+ 受控组件:
50
+ 值由父组件通过属性控制 + 通过回调通知变更
51
+ 适用场景:需要实时验证、条件禁用、联动逻辑
52
+
53
+ 非受控组件:
54
+ 值由组件自身管理,父组件通过 ref 获取
55
+ 适用场景:简单表单、非关键输入、第三方集成
56
+
57
+ 规则:优先受控,只在确实不需要控制时才非受控。
58
+ ```
59
+
60
+ ### 上下文 + Reducer 模式
61
+
62
+ ```text
63
+ 适用场景:多个子组件共享状态,且有复杂更新逻辑
64
+
65
+ 结构:
66
+ [Provider 组件]
67
+ - 创建上下文
68
+ - 包装 Reducer(状态 + 分发函数)
69
+ - 提供状态和方法给子组件
70
+
71
+ [子组件]
72
+ - 通过上下文读取状态
73
+ - 通过分发函数发送动作
74
+
75
+ 限制:
76
+ - 上下文值变化时所有消费者重新渲染
77
+ - 不适合高频更新场景
78
+ - 拆分上下文避免不必要的重渲染
79
+ ```
80
+
81
+ ## 自定义 Hooks / Composables 模式
82
+
83
+ ### Hook 设计规则
84
+
85
+ ```text
86
+ 1. 以 use- 前缀命名(约定)
87
+ 2. 一个 hook 只做一件事
88
+ 3. 返回对象而非数组(调用方不需要记住顺序)
89
+ 4. 副作用集中管理
90
+ 5. 暴露 loading/error/data 三元状态
91
+ ```
92
+
93
+ ### 常见 Hook 类型
94
+
95
+ ```text
96
+ 数据获取 Hook:
97
+ use{Resource}() → { data, isLoading, error, refetch }
98
+
99
+ 状态管理 Hook:
100
+ use{Feature}State() → { state, actions, reset }
101
+
102
+ 事件处理 Hook:
103
+ use{Event}(handler) → 自动绑定和清理
104
+
105
+ 交叉观察 Hook:
106
+ use{Observer}(ref, options) → { entry, isIntersecting }
107
+
108
+ 媒体查询 Hook:
109
+ useMediaQuery(query) → boolean
110
+
111
+ 定时器 Hook:
112
+ useInterval(callback, delay) → { start, stop, isRunning }
113
+ ```
114
+
115
+ ## 性能优化模式
116
+
117
+ ### 优化策略决策
118
+
119
+ | 场景 | 策略 | 实现方式 |
120
+ |------|------|---------|
121
+ | 计算开销大的纯函数 | 记忆化 | 缓存计算结果,输入不变时复用 |
122
+ | 列表渲渲染 | 虚拟化 | 只渲染可见区域的元素 |
123
+ | 大组件渲染 | 懒加载 | 按需加载组件代码 |
124
+ | 图片加载 | 懒加载 | Intersection Observer + placeholder |
125
+ | 不必要的重渲染 | 属性比较 | 减少不必要的重新渲染 |
126
+ | 首次加载过慢 | 代码分割 | 按路由/按功能分包 |
127
+
128
+ ### 通用性能检查清单
129
+
130
+ ```
131
+ [ ] 列表项有唯一且稳定的 key
132
+ [ ] 大数据列表使用虚拟化
133
+ [ ] 大文件/组件按需懒加载
134
+ [ ] 图片使用适当大小和懒加载
135
+ [ ] 计算密集型操作用记忆化
136
+ [ ] 不必要属性传递已合并或消除
137
+ [ ] 事件监听在组件卸载时清理
138
+ [ ] 动画使用 GPU 加速属性(transform/opacity)
139
+ ```
140
+
141
+ ## 表单处理模式
142
+
143
+ ```text
144
+ 【表单模式三选一】
145
+
146
+ 简单表单(3-5 个字段):
147
+ 组件内状态管理
148
+ → 手动验证 → 提交
149
+
150
+ 中等表单(5-15 字段,有联动):
151
+ 表单库
152
+ → Schema 验证 → 自动错误展示 → 提交
153
+
154
+ 复杂表单(15+ 字段,多步骤,动态字段):
155
+ 表单库 + 状态管理
156
+ → Schema 验证 → 分步保存 → 最终提交
157
+ ```
158
+
159
+ ## 错误边界模式
160
+
161
+ ```text
162
+ 策略:每层 UI 区域包裹错误边界
163
+
164
+ 布局层:
165
+ → 全局错误页面(整个应用崩溃时显示)
166
+
167
+ 功能模块层:
168
+ → 模块降级(该模块不可用但不影响其他模块)
169
+
170
+ 单个组件层:
171
+ → 组件回退(显示占位或重试按钮)
172
+
173
+ 错误边界应提供:
174
+ 1. 用户友好提示
175
+ 2. 重试按钮
176
+ 3. 错误日志上报(开发者可追溯)
177
+ ```
178
+
179
+ ## 无障碍(Accessibility)
180
+
181
+ ```text
182
+ 最低标准(必须做到):
183
+ [ ] 所有交互元素可通过键盘操作
184
+ [ ] 图片有 alt 文本
185
+ [ ] 表单输入有 label
186
+ [ ] 颜色对比度 ≥ 4.5:1
187
+ [ ] 动态内容更新有 aria-live 区域
188
+
189
+ 进阶标准(推荐做到):
190
+ [ ] 页面有合理的 heading 层级
191
+ [ ] 焦点顺序符合视觉顺序
192
+ [ ] 自定义组件有正确的 ARIA role
193
+ [ ] 错误提示通过 aria-describedby 关联
194
+ [ ] 支持减少动效(prefers-reduced-motion)
195
+ ```
@@ -0,0 +1,59 @@
1
+ {
2
+ "version": 1,
3
+ "domains": {
4
+ "workflow": {
5
+ "always": true,
6
+ "label": "工作流核心",
7
+ "desc": "开发流程强制执行",
8
+ "skills": [
9
+ "tdd-workflow",
10
+ "verification-loop",
11
+ "security-review",
12
+ "coding-standards",
13
+ "search-first",
14
+ "strategic-compact"
15
+ ]
16
+ },
17
+ "frontend": {
18
+ "projectTypes": ["web", "fullstack"],
19
+ "label": "前端开发",
20
+ "desc": "组件/状态/性能模式",
21
+ "skills": ["frontend-patterns"]
22
+ },
23
+ "backend": {
24
+ "projectTypes": ["api", "fullstack"],
25
+ "label": "后端开发",
26
+ "desc": "API/仓储/服务层模式",
27
+ "skills": ["backend-patterns"]
28
+ },
29
+ "database": {
30
+ "needsDb": true,
31
+ "label": "数据库",
32
+ "desc": "索引/迁移/查询优化",
33
+ "skills": ["postgres-patterns", "database-migrations"]
34
+ },
35
+ "testing": {
36
+ "projectTypes": ["web", "api", "fullstack"],
37
+ "label": "测试",
38
+ "desc": "E2E 自动化测试",
39
+ "skills": ["e2e-testing"]
40
+ },
41
+ "devops": {
42
+ "manual": true,
43
+ "label": "DevOps",
44
+ "desc": "Docker/CI/CD/部署",
45
+ "skills": ["docker-patterns", "deployment-patterns"]
46
+ },
47
+ "advanced": {
48
+ "userLevel": "developer",
49
+ "label": "进阶技能",
50
+ "desc": "诊断/架构审计/精简沟通",
51
+ "skills": [
52
+ "caveman",
53
+ "diagnose",
54
+ "improve-codebase-architecture",
55
+ "grill-with-docs"
56
+ ]
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 1,
3
+ "skills": {},
4
+ "_comment": "在此记录手动安装的外部技能。格式参考 _example",
5
+ "_example": {
6
+ "agent-browser": {
7
+ "source": "vercel-labs/agent-browser",
8
+ "sourceType": "github",
9
+ "computedHash": ""
10
+ }
11
+ }
12
+ }