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.
- package/README.md +248 -57
- package/dist/adapters/next-only/skills.recommend.json +1 -0
- package/dist/adapters/node-api/skills.recommend.json +1 -0
- package/dist/cli.js +163 -5
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +255 -44
- package/dist/generator.js.map +1 -1
- package/dist/questions.d.ts +11 -1
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +103 -16
- package/dist/questions.js.map +1 -1
- package/dist/templates/claude-md/CLAUDE.zh-CN.md +51 -46
- package/dist/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
- package/dist/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
- package/dist/templates/commands/gstack/cso.md.ejs +213 -0
- package/dist/templates/commands/gstack/office-hours.md.ejs +109 -0
- package/dist/templates/commands/gstack/review.md.ejs +192 -0
- package/dist/templates/commands/gstack/ship.md.ejs +256 -0
- package/dist/templates/commands/opsx/apply.md.ejs +106 -0
- package/dist/templates/commands/opsx/archive.md.ejs +88 -0
- package/dist/templates/commands/opsx/explore.md.ejs +84 -0
- package/dist/templates/commands/opsx/propose.md.ejs +185 -0
- package/dist/templates/commands/superpowers/brainstorm.md.ejs +240 -0
- package/dist/templates/commands/superpowers/tdd.md.ejs +230 -0
- package/dist/templates/commands/superpowers/verify.md.ejs +211 -0
- package/dist/templates/commands/workflow/plan.md.ejs +219 -0
- package/dist/templates/hooks/check-deps.mjs +66 -65
- package/dist/templates/memory/.gitkeep +0 -0
- package/dist/templates/memory/MEMORY.md.ejs +88 -0
- package/dist/templates/memory/dev-notes.md.ejs +61 -0
- package/dist/templates/memory/troubleshooting.md.ejs +30 -0
- package/dist/templates/rules/agents.md +49 -49
- package/dist/templates/rules/coding-style.md +156 -117
- package/dist/templates/rules/development-workflow.md +103 -50
- package/dist/templates/rules/git-workflow.md +103 -47
- package/dist/templates/rules/hooks.md +159 -0
- package/dist/templates/rules/hooks.md.ejs +159 -0
- package/dist/templates/rules/memory.md +106 -0
- package/dist/templates/rules/memory.md.ejs +106 -0
- package/dist/templates/rules/patterns.md +117 -48
- package/dist/templates/rules/performance.md +108 -0
- package/dist/templates/rules/performance.md.ejs +108 -0
- package/dist/templates/rules/security.md +52 -37
- package/dist/templates/rules/testing.md +83 -30
- package/dist/templates/settings/settings.template.json +18 -2
- package/dist/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
- package/dist/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
- package/dist/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
- package/dist/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
- package/dist/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
- package/dist/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
- package/dist/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
- package/dist/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
- package/dist/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
- package/dist/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
- package/dist/templates/skills/skill-manifest.json +59 -0
- package/dist/templates/skills/skills-lock.template.json +12 -0
- package/dist/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
- package/dist/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
- package/dist/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
- package/dist/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
- package/dist/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
- package/dist/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
- package/dist/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
- package/dist/utils.d.ts +40 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +110 -0
- package/dist/utils.js.map +1 -0
- package/package.json +2 -2
- package/templates/claude-md/CLAUDE.zh-CN.md +51 -46
- package/templates/claude-md/next-only/CLAUDE.zh-CN.md +46 -0
- package/templates/claude-md/node-api/CLAUDE.zh-CN.md +47 -0
- package/templates/commands/gstack/cso.md.ejs +213 -0
- package/templates/commands/gstack/office-hours.md.ejs +109 -0
- package/templates/commands/gstack/review.md.ejs +192 -0
- package/templates/commands/gstack/ship.md.ejs +256 -0
- package/templates/commands/opsx/apply.md.ejs +106 -0
- package/templates/commands/opsx/archive.md.ejs +88 -0
- package/templates/commands/opsx/explore.md.ejs +84 -0
- package/templates/commands/opsx/propose.md.ejs +185 -0
- package/templates/commands/superpowers/brainstorm.md.ejs +240 -0
- package/templates/commands/superpowers/tdd.md.ejs +230 -0
- package/templates/commands/superpowers/verify.md.ejs +211 -0
- package/templates/commands/workflow/plan.md.ejs +219 -0
- package/templates/hooks/check-deps.mjs +66 -65
- package/templates/memory/.gitkeep +0 -0
- package/templates/memory/MEMORY.md.ejs +88 -0
- package/templates/memory/dev-notes.md.ejs +61 -0
- package/templates/memory/troubleshooting.md.ejs +30 -0
- package/templates/rules/agents.md +49 -49
- package/templates/rules/coding-style.md +156 -117
- package/templates/rules/development-workflow.md +103 -50
- package/templates/rules/git-workflow.md +103 -47
- package/templates/rules/hooks.md +159 -0
- package/templates/rules/memory.md +106 -0
- package/templates/rules/patterns.md +117 -48
- package/templates/rules/performance.md +108 -0
- package/templates/rules/security.md +52 -37
- package/templates/rules/testing.md +83 -30
- package/templates/settings/settings.template.json +18 -2
- package/templates/skills/advanced/caveman/SKILL.md.ejs +144 -0
- package/templates/skills/advanced/diagnose/SKILL.md.ejs +159 -0
- package/templates/skills/advanced/grill-with-docs/SKILL.md.ejs +154 -0
- package/templates/skills/advanced/improve-codebase-architecture/SKILL.md.ejs +172 -0
- package/templates/skills/backend/backend-patterns/SKILL.md.ejs +263 -0
- package/templates/skills/database/database-migrations/SKILL.md.ejs +202 -0
- package/templates/skills/database/postgres-patterns/SKILL.md.ejs +235 -0
- package/templates/skills/devops/deployment-patterns/SKILL.md.ejs +228 -0
- package/templates/skills/devops/docker-patterns/SKILL.md.ejs +215 -0
- package/templates/skills/frontend/frontend-patterns/SKILL.md.ejs +195 -0
- package/templates/skills/skill-manifest.json +59 -0
- package/templates/skills/skills-lock.template.json +12 -0
- package/templates/skills/testing/e2e-testing/SKILL.md.ejs +224 -0
- package/templates/skills/workflow/coding-standards/SKILL.md.ejs +143 -0
- package/templates/skills/workflow/search-first/SKILL.md.ejs +103 -0
- package/templates/skills/workflow/security-review/SKILL.md.ejs +146 -0
- package/templates/skills/workflow/strategic-compact/SKILL.md.ejs +108 -0
- package/templates/skills/workflow/tdd-workflow/SKILL.md.ejs +104 -0
- package/templates/skills/workflow/verification-loop/SKILL.md.ejs +144 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Search-First — 研究优先于编码
|
|
2
|
+
|
|
3
|
+
> 使用此 skill 时:在实现任何新功能之前、在引入新依赖之前、在解决不熟悉的错误之前。
|
|
4
|
+
|
|
5
|
+
## 工作流
|
|
6
|
+
|
|
7
|
+
开始编码之前,先执行研究:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
11
|
+
│ ① 需求分析 明确要解决的问题、输入输出、约束条件 │
|
|
12
|
+
│ ② 并行搜索 同时搜索多个渠道(GitHub / 包管理器 / 文档 / 项目内) │
|
|
13
|
+
│ ③ 方案评估 对比候选方案的匹配度、维护状态、学习成本 │
|
|
14
|
+
│ ④ 决策 选择策略:复用/扩展/组合/自建 │
|
|
15
|
+
│ ⑤ 实现 开始编码 │
|
|
16
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## ① 需求分析 — 明确搜索目标
|
|
20
|
+
|
|
21
|
+
在搜索前,先明确:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
- 要解决什么具体问题?
|
|
25
|
+
- 输入是什么、输出是什么?
|
|
26
|
+
- 有什么约束(性能、安全、兼容性)?
|
|
27
|
+
- 是全新需求还是替代现有方案?
|
|
28
|
+
- 是否有内部已有类似实现?
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## ② 并行搜索 — 多源获取信息
|
|
32
|
+
|
|
33
|
+
同时搜索以下渠道:
|
|
34
|
+
|
|
35
|
+
### 搜索渠道清单
|
|
36
|
+
|
|
37
|
+
| 渠道 | 场景 | 搜索什么 |
|
|
38
|
+
|------|------|---------|
|
|
39
|
+
| GitHub 代码搜索 | 寻找参考实现 | 类似功能的仓库、代码片段、Issue 讨论 |
|
|
40
|
+
| 包管理器(npm/PyPI/crates.io 等) | 寻找可复用库 | 功能匹配的包、下载量、最近更新 |
|
|
41
|
+
| 官方文档 | 确认 API 用法 | 版本迁移、配置项、最佳实践 |
|
|
42
|
+
| 项目内代码 | 复用已有模式 | 相邻模块的实现方式、工具函数库 |
|
|
43
|
+
| AI 知识库 | 模式/最佳实践 | 常用设计模式、已知解决方案 |
|
|
44
|
+
|
|
45
|
+
### 搜索方法
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
// GitHub 搜索示例
|
|
49
|
+
搜索: "language:{lang} {keyword} implementation"
|
|
50
|
+
搜索: "topic:{topic} language:{lang}"
|
|
51
|
+
|
|
52
|
+
// 包管理器搜索
|
|
53
|
+
搜索: "{keyword}" → 检查:最近更新、周下载量、依赖树大小
|
|
54
|
+
|
|
55
|
+
// 项目内搜索
|
|
56
|
+
搜索: 相邻功能模块的目录结构和使用模式
|
|
57
|
+
搜索: 项目中已使用的类似库/工具
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## ③ 方案评估 — 对比候选方案
|
|
61
|
+
|
|
62
|
+
对每个候选方案,评估以下维度:
|
|
63
|
+
|
|
64
|
+
| 维度 | 评估问题 |
|
|
65
|
+
|------|---------|
|
|
66
|
+
| 功能匹配 | 覆盖需求的百分之多少? |
|
|
67
|
+
| 维护状态 | 最近更新?Issue 响应?主仓库活跃? |
|
|
68
|
+
| 成熟度 | 版本号(<1.0 谨慎)、Star 数、被依赖数 |
|
|
69
|
+
| 学习成本 | 文档质量、示例数量、概念复杂度 |
|
|
70
|
+
| 集成成本 | 需要多少胶水代码?和现有技术栈兼容? |
|
|
71
|
+
| 安全 | 已知漏洞?权限模型? |
|
|
72
|
+
| 性能 | 基准测试?内存/CPU 影响? |
|
|
73
|
+
| 社区 | 问题是否有解答?Stack Overflow 讨论? |
|
|
74
|
+
|
|
75
|
+
## ④ 决策矩阵 — 选择策略
|
|
76
|
+
|
|
77
|
+
| 情况 | 策略 | 行动 |
|
|
78
|
+
|------|------|------|
|
|
79
|
+
| 有成熟的库覆盖 90%+ 需求 | **采用(Adopt)** | 引入依赖,按文档使用 |
|
|
80
|
+
| 有接近的库但需少量定制 | **扩展(Extend)** | 引入后包装/配置/插件 |
|
|
81
|
+
| 多个库各覆盖一部分 | **组合(Compose)** | 引入多个库,编写胶水层 |
|
|
82
|
+
| 没有合适的库 | **自建(Build)** | 参考调研结果自行实现 |
|
|
83
|
+
|
|
84
|
+
### 不引入依赖的情况
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
- 功能少于 50 行代码可实现
|
|
88
|
+
- 库有已知安全漏洞且不及时修复
|
|
89
|
+
- 库的依赖树过大(间接引入 >50 个包)
|
|
90
|
+
- 库与项目技术栈不兼容
|
|
91
|
+
- 只有一个函数需要但库是整个框架
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## ⑤ 反模式
|
|
95
|
+
|
|
96
|
+
| 反模式 | 问题 | 正确做法 |
|
|
97
|
+
|--------|------|---------|
|
|
98
|
+
| 已知有库但非要自建 | 浪费时间,维护成本高 | 先用库,不够再替换 |
|
|
99
|
+
| 先写代码再搜索 | 可能走错方向 | 先搜索再编码 |
|
|
100
|
+
| 只看第一个结果 | 错过更好的方案 | 至少对比 3 个候选 |
|
|
101
|
+
| 引入大库只用小功能 | 膨胀依赖树 | 自己写或用微库 |
|
|
102
|
+
| 不验证就采用 | 发现不匹配时已投入大量时间 | 先写 PoC 验证 |
|
|
103
|
+
| 搜索完不看 License | 法律风险 | 确认 License 兼容性 |
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Security Review — 提交前安全检查
|
|
2
|
+
|
|
3
|
+
> 使用此 skill 时:在准备提交代码前,或者修改了涉及认证/授权/用户数据/支付/外部 API 调用的代码时。
|
|
4
|
+
|
|
5
|
+
## 安全检查清单
|
|
6
|
+
|
|
7
|
+
以下所有检查项必须在每次提交前执行:
|
|
8
|
+
|
|
9
|
+
### 1. 密钥管理
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
[ ] 无硬编码密钥(API Key、密码、Token、JWT Secret)
|
|
13
|
+
[ ] 无硬编码数据库连接字符串
|
|
14
|
+
[ ] 无硬编码第三方服务凭据
|
|
15
|
+
[ ] 配置文件中无真实凭据(只有占位符或环境变量引用)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. 输入验证
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
[ ] 所有用户输入使用 schema 校验(长度/格式/类型/范围)
|
|
22
|
+
[ ] 文件上传有类型/大小限制
|
|
23
|
+
[ ] 批量操作有数量上限
|
|
24
|
+
[ ] URL 参数/路径参数已校验
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 3. SQL / NoSQL 注入防护
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
[ ] 使用参数化查询或 ORM 内置防护
|
|
31
|
+
[ ] 无字符串拼接 SQL 语句
|
|
32
|
+
[ ] NoSQL 查询使用参数化(非原始字符串注入)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 4. XSS 防护
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
[ ] 用户生成内容输出时已转义
|
|
39
|
+
[ ] 富文本内容经 HTML Sanitizer 过滤
|
|
40
|
+
[ ] CSP(Content Security Policy)已配置
|
|
41
|
+
[ ] 无 `innerHTML` / `dangerouslySetInnerHTML` 等危险 API
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 5. CSRF 防护
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
[ ] 有状态修改操作(POST/PUT/DELETE)有 CSRF 保护
|
|
48
|
+
[ ] SameSite Cookie 已设置
|
|
49
|
+
[ ] API 使用 Token 认证时无需额外 CSRF(但需确认)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 6. 认证与授权
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
[ ] 认证失败的响应不泄露用户是否存在
|
|
56
|
+
[ ] 令牌有有效期和刷新机制
|
|
57
|
+
[ ] 每次操作验证资源所有权(防止 IDOR)
|
|
58
|
+
[ ] 未认证用户无法访问受保护资源
|
|
59
|
+
[ ] 权限不足的用户得到 403 而非 401
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 7. 速率限制
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
[ ] 认证端点有登录尝试限制
|
|
66
|
+
[ ] 公开 API 端点有速率限制
|
|
67
|
+
[ ] 文件上传端点有额外限制
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 8. 错误消息与日志
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
[ ] 错误消息不泄露内部细节(堆栈、路径、SQL、配置)
|
|
74
|
+
[ ] 日志中不记录密码、Token、信用卡等敏感数据
|
|
75
|
+
[ ] 生产环境关闭调试模式/详细错误
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 常见漏洞修复模板
|
|
79
|
+
|
|
80
|
+
### 修复硬编码密钥
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
// ❌ 错误
|
|
84
|
+
apiKey = "sk-xxxxxxxxxxxxxxxx"
|
|
85
|
+
|
|
86
|
+
// ✅ 正确
|
|
87
|
+
apiKey = env("API_KEY")
|
|
88
|
+
if apiKey is empty → throw "API_KEY not configured"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 修复 SQL 注入
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
// ❌ 错误
|
|
95
|
+
query = "SELECT * FROM users WHERE id = '" + userId + "'"
|
|
96
|
+
|
|
97
|
+
// ✅ 正确
|
|
98
|
+
query = "SELECT * FROM users WHERE id = $1"
|
|
99
|
+
execute(query, [userId])
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 修复 IDOR(越权)
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
// ❌ 错误 — 只检查资源存在,不检查所有权
|
|
106
|
+
resource = db.find(resourceId)
|
|
107
|
+
return resource
|
|
108
|
+
|
|
109
|
+
// ✅ 正确 — 验证当前用户拥有该资源
|
|
110
|
+
resource = db.find(resourceId)
|
|
111
|
+
if resource.ownerId != currentUserId → throw 403
|
|
112
|
+
return resource
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 安全错误响应
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
// ❌ 错误 — 泄露内部信息
|
|
119
|
+
response 500: { "error": "Cannot read property 'x' of null at /src/services/user.js:42" }
|
|
120
|
+
|
|
121
|
+
// ✅ 正确 — 泛化错误
|
|
122
|
+
response 500: { "error": "Internal server error" }
|
|
123
|
+
// 日志中保留完整信息供调试
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 安全扫描命令
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# 依赖漏洞扫描
|
|
130
|
+
audit # 检查依赖中的已知漏洞
|
|
131
|
+
|
|
132
|
+
# 密钥扫描(防止敏感信息提交)
|
|
133
|
+
# 使用 pre-commit hook 或 CI 中的密钥扫描工具
|
|
134
|
+
|
|
135
|
+
# 静态安全分析
|
|
136
|
+
lint --security # 运行安全规则集
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## 严重程度分级
|
|
140
|
+
|
|
141
|
+
| 级别 | 定义 | 行动要求 |
|
|
142
|
+
|------|------|---------|
|
|
143
|
+
| CRITICAL | 可直接导致数据泄露/服务入侵 | 必须修复,阻断提交 |
|
|
144
|
+
| HIGH | 在特定条件下可被利用 | 必须修复 |
|
|
145
|
+
| MEDIUM | 增加攻击面 | 建议修复 |
|
|
146
|
+
| LOW | 最佳实践偏离 | 记录待办 |
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Strategic Context Compaction — 上下文策略压缩
|
|
2
|
+
|
|
3
|
+
> 使用此 skill 时:当上下文窗口使用超过 70%、或经历 30+ 轮对话、或在任务阶段切换时。
|
|
4
|
+
|
|
5
|
+
## 什么是上下文压缩
|
|
6
|
+
|
|
7
|
+
上下文压缩(Context Compaction)是指对话达到一定长度后,用户主动清理对话历史以释放上下文窗口的操作。作为 AI,你需要配合用户完成有意义的压缩,而不是简单地删除历史。
|
|
8
|
+
|
|
9
|
+
## 什么时候该压缩
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌──────────────────────────────────────────────────────────┐
|
|
13
|
+
│ 触发条件 │
|
|
14
|
+
│ ✅ 任务阶段切换 (设计→实现、实现→测试、测试→审查) │
|
|
15
|
+
│ ✅ 长时间编码 (连续 30+ 轮对话未压缩) │
|
|
16
|
+
│ ✅ 上下文告警 (看到"上下文接近限制"提示) │
|
|
17
|
+
│ ✅ 方向变更 (需求变更、技术方案更换) │
|
|
18
|
+
│ ❌ 正在解决一个复杂 Bug — 先解决再压缩 │
|
|
19
|
+
└──────────────────────────────────────────────────────────┘
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 压缩中保留什么 vs 丢弃什么
|
|
23
|
+
|
|
24
|
+
### 保留(Survives)
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
✅ 项目核心结构
|
|
28
|
+
- 目录结构、模块组织方式
|
|
29
|
+
- 关键文件的用途和位置
|
|
30
|
+
|
|
31
|
+
✅ 已做出的技术决策
|
|
32
|
+
- 架构选择及理由
|
|
33
|
+
- 约定和规范
|
|
34
|
+
|
|
35
|
+
✅ 当前任务状态
|
|
36
|
+
- 哪些完成了、哪些进行中、哪些待办
|
|
37
|
+
- 当前遇到的阻塞问题(如果未解决)
|
|
38
|
+
|
|
39
|
+
✅ 用户偏好和模式
|
|
40
|
+
- 用户喜欢的代码风格
|
|
41
|
+
- 用户对某些问题的处理方式
|
|
42
|
+
|
|
43
|
+
✅ 关键上下文
|
|
44
|
+
- 当次对话的主要目标
|
|
45
|
+
- 项目 CLAUDE.md 中的规则
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 丢弃(Lost — 需重新加载)
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
❌ 详细的实现步骤
|
|
52
|
+
- 具体写了哪些文件、哪些函数
|
|
53
|
+
- 修改的详细顺序
|
|
54
|
+
|
|
55
|
+
❌ 调试过程
|
|
56
|
+
- 试过的错误方案
|
|
57
|
+
- 详细错误信息(除非当前仍相关)
|
|
58
|
+
|
|
59
|
+
❌ 对话中的辅助内容
|
|
60
|
+
- 搜索结果的详细内容
|
|
61
|
+
- 文档片段
|
|
62
|
+
|
|
63
|
+
❌ 确认性对话
|
|
64
|
+
- "好的"、"明白了"、"继续"
|
|
65
|
+
- 无信息量的来回确认
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 压缩后怎么做
|
|
69
|
+
|
|
70
|
+
用户压缩后:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
1. 重新加载关键上下文
|
|
74
|
+
- 读取项目 CLAUDE.md
|
|
75
|
+
- 读取当前 todolist.md / PROGRESS.md
|
|
76
|
+
- 读取最近修改的关键文件
|
|
77
|
+
|
|
78
|
+
2. 确认阶段
|
|
79
|
+
- "我们之前在实现 X 功能,当前进展到 Y 阶段"
|
|
80
|
+
- "下一个任务是 Z,继续吗?"
|
|
81
|
+
|
|
82
|
+
3. 继续执行
|
|
83
|
+
- 从压缩前的断点继续
|
|
84
|
+
- 不要要求用户重复已经说过的话
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## AI 端优化
|
|
88
|
+
|
|
89
|
+
作为 AI,你可以主动帮助用户节省上下文空间:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
【精简回答】
|
|
93
|
+
- 避免重复确认(用户说"继续"后直接执行)
|
|
94
|
+
- 避免复述全部代码(只展示关键部分或 diff)
|
|
95
|
+
- 避免罗列所有选项(先推荐,再问是否看其他)
|
|
96
|
+
|
|
97
|
+
【用引用代替复制】
|
|
98
|
+
- 使用 "参考 X 文件的 Y 函数" 代替粘贴整个函数
|
|
99
|
+
- 使用文件路径引用已存在的代码
|
|
100
|
+
|
|
101
|
+
【结构化输出】
|
|
102
|
+
- 用表格/列表代替段落
|
|
103
|
+
- 结果优先:先给结论,再给(可折叠的)细节
|
|
104
|
+
|
|
105
|
+
【及时建议压缩】
|
|
106
|
+
- 检测到轮数增加时主动提示:"已进行 X 轮对话,建议压缩上下文"
|
|
107
|
+
- 任务阶段切换时主动提示
|
|
108
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# TDD Workflow — Red-Green-Refactor
|
|
2
|
+
|
|
3
|
+
> 使用此 skill 时:写入任何实现代码之前,必须先调用此 skill。
|
|
4
|
+
|
|
5
|
+
## TDD 铁律
|
|
6
|
+
|
|
7
|
+
**RED → GREEN → REFACTOR — 严格按顺序,不可跳过任一阶段。**
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────┐
|
|
11
|
+
│ ① RED 写一个失败的测试 │
|
|
12
|
+
│ ② GREEN 写最简实现让测试通过 │
|
|
13
|
+
│ ③ REFACTOR 重构代码,保持测试通过 │
|
|
14
|
+
│ ④ LOOP 回到 ① 直到功能完成 │
|
|
15
|
+
└─────────────────────────────────────────────────────┘
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 阶段详解
|
|
19
|
+
|
|
20
|
+
#### ① RED — 编写测试(先写!)
|
|
21
|
+
|
|
22
|
+
- 根据功能验收标准写测试用例
|
|
23
|
+
- 测试断言失败是正常的 — 功能还没实现
|
|
24
|
+
- 测试粒度:一个测试验证一个行为
|
|
25
|
+
- 命名格式:`{方法/组件名} — {场景} — {期望结果}`
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
// 示例命名
|
|
29
|
+
createUser — with valid data — returns user object with ID
|
|
30
|
+
createUser — with duplicate email — throws ValidationError
|
|
31
|
+
UserAvatar — when image fails to load — shows fallback initials
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
#### ② GREEN — 最简实现
|
|
35
|
+
|
|
36
|
+
- 只写刚好够让测试通过的代码
|
|
37
|
+
- 不要优化、不要抽象、不要加"将来可能需要"的功能
|
|
38
|
+
- 可以硬编码返回值 — 后续测试会迫使你泛化
|
|
39
|
+
- 本阶段的目标是**通过测试**,不是"写好代码"
|
|
40
|
+
|
|
41
|
+
#### ③ REFACTOR — 清理代码
|
|
42
|
+
|
|
43
|
+
- 测试通过后才能重构
|
|
44
|
+
- 提取重复代码、优化命名、简化逻辑
|
|
45
|
+
- 重构时不改行为(不改测试、不改 API)
|
|
46
|
+
- 每步修改后跑测试确认没破坏任何东西
|
|
47
|
+
|
|
48
|
+
## 测试类型决策矩阵
|
|
49
|
+
|
|
50
|
+
| 要验证什么 | 测试类型 | 速度 | 写几个 | 是否需要 mock |
|
|
51
|
+
|-----------|---------|------|--------|-------------|
|
|
52
|
+
| 工具函数/纯逻辑 | Unit | 毫秒级 | 边界值全覆盖 | 否 |
|
|
53
|
+
| 组件渲染逻辑 | Unit | 毫秒级 | 1-2 个 happy path | 否 |
|
|
54
|
+
| 组件交互行为 | Integration | 毫秒级 | 关键路径 | 否 |
|
|
55
|
+
| API 端点行为 | Integration | 秒级 | Happy + 错误路径 | 是(外部服务) |
|
|
56
|
+
| 数据库操作 | Integration | 秒级 | CRUD + 约束 | 是(mock DB 或内存 DB) |
|
|
57
|
+
| 跨服务流程 | E2E | 秒-分级 | 核心用户旅程 | 否(真实实例) |
|
|
58
|
+
|
|
59
|
+
## 覆盖率要求
|
|
60
|
+
|
|
61
|
+
- **单元测试**:纯逻辑层 ≥95%,组件层 ≥80%
|
|
62
|
+
- **集成测试**:API 端点 100% 覆盖所有状态码路径
|
|
63
|
+
- **E2E 测试**:核心用户旅程 100%
|
|
64
|
+
|
|
65
|
+
> 不是数字游戏。覆盖率的目的是确保修改代码时测试能拦住回归。
|
|
66
|
+
|
|
67
|
+
## 反模式(Anti-Patterns)
|
|
68
|
+
|
|
69
|
+
| 反模式 | 说明 | 正确做法 |
|
|
70
|
+
|--------|------|---------|
|
|
71
|
+
| 先写实现再补测试 | 测试只是验证而非驱动 | 先写测试,让测试驱动设计 |
|
|
72
|
+
| 测试依赖实现细节 | 重构时测试大面积红 | 测试行为而非实现 |
|
|
73
|
+
| 一个测试测多个东西 | 失败时不知道问题在哪 | 一个断言一个测试 |
|
|
74
|
+
| mock 过多 | 测试与实现耦合 | 只在边界层用 mock |
|
|
75
|
+
| 忽略 RED 阶段 | 直接写实现再测 | RED 阶段验证测试本身没问题 |
|
|
76
|
+
| 覆盖率 100% 强迫症 | 耗费精力在 trivial 代码上 | 按决策矩阵分配精力 |
|
|
77
|
+
|
|
78
|
+
## CI 集成
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
每次 push / PR 时自动运行:
|
|
82
|
+
|
|
83
|
+
[lint] → [type-check] → [unit-test] → [build] → [integration-test]
|
|
84
|
+
|
|
85
|
+
门禁规则:
|
|
86
|
+
- 单元测试失败 → 阻断合并
|
|
87
|
+
- 集成测试失败 → 阻断合并
|
|
88
|
+
- 覆盖率低于阈值 → 警告(可配置是否阻断)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 框架无关的测试结构模板
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
src/
|
|
95
|
+
├── __tests__/
|
|
96
|
+
│ ├── unit/
|
|
97
|
+
│ │ └── {module}.test.* # 纯逻辑测试
|
|
98
|
+
│ ├── integration/
|
|
99
|
+
│ │ └── {module}.integration.* # 带 IO 的测试
|
|
100
|
+
│ └── helpers/
|
|
101
|
+
│ └── test-utils.* # 测试工具函数
|
|
102
|
+
└── e2e/
|
|
103
|
+
└── {feature}.spec.* # E2E 测试
|
|
104
|
+
```
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Verification Loop — 6 阶段验证闭环
|
|
2
|
+
|
|
3
|
+
> 使用此 skill 时:在声称"完成"之前,必须执行此验证闭环。
|
|
4
|
+
|
|
5
|
+
## 验证闭环
|
|
6
|
+
|
|
7
|
+
每次修改后,按顺序执行 6 个阶段:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌──────────────────────────────────────────────────────────┐
|
|
11
|
+
│ ① BUILD 编译通过,无错误 │
|
|
12
|
+
│ ② TYPE-CHECK 类型检查通过,无 `any` 遗漏 │
|
|
13
|
+
│ ③ LINT 静态分析通过,无违反规则 │
|
|
14
|
+
│ ④ TEST 所有测试通过,覆盖率达标 │
|
|
15
|
+
│ ⑤ SECURITY 安全检查通过,无敏感信息泄露 │
|
|
16
|
+
│ ⑥ DIFF-REVIEW 变更审查,确认改动范围与需求一致 │
|
|
17
|
+
└──────────────────────────────────────────────────────────┘
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 阶段详解
|
|
21
|
+
|
|
22
|
+
### ① BUILD — 编译验证
|
|
23
|
+
|
|
24
|
+
检查项目能否成功编译/转译。编译错误阻断后续所有步骤。
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# 通用
|
|
28
|
+
build # 项目构建命令
|
|
29
|
+
build --no-cache # 强制无缓存构建
|
|
30
|
+
|
|
31
|
+
# 验证标准
|
|
32
|
+
- 零编译错误
|
|
33
|
+
- 零编译警告(或已确认可忽略)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### ② TYPE-CHECK — 类型检查
|
|
37
|
+
|
|
38
|
+
静态类型检查确保类型安全。
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# 通用
|
|
42
|
+
type-check # 类型检查命令
|
|
43
|
+
type-check --strict # 严格模式
|
|
44
|
+
|
|
45
|
+
# 验证标准
|
|
46
|
+
- 零类型错误
|
|
47
|
+
- 无显式 `any` 类型(除非有显式豁免注释)
|
|
48
|
+
- 无未使用的变量/导入
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### ③ LINT — 静态分析
|
|
52
|
+
|
|
53
|
+
代码风格和潜在错误检查。
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 通用
|
|
57
|
+
lint # 静态分析命令
|
|
58
|
+
lint --fix # 自动修复可修复问题
|
|
59
|
+
|
|
60
|
+
# 验证标准
|
|
61
|
+
- 零错误(error)
|
|
62
|
+
- 零警告(warning)或已确认的豁免
|
|
63
|
+
- 无 `console.log`(生产代码中)
|
|
64
|
+
- 无 TODO/FIXME 残留(除非有对应 issue 跟踪)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### ④ TEST — 测试验证
|
|
68
|
+
|
|
69
|
+
确保行为正确性。
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# 通用
|
|
73
|
+
test # 运行所有测试
|
|
74
|
+
test --coverage # 带覆盖率报告
|
|
75
|
+
test --changed # 仅运行受影响的测试(快速反馈)
|
|
76
|
+
|
|
77
|
+
# 验证标准
|
|
78
|
+
- 所有测试通过
|
|
79
|
+
- 新增代码覆盖率 ≥80%
|
|
80
|
+
- 总覆盖率不下降
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### ⑤ SECURITY — 安全检查
|
|
84
|
+
|
|
85
|
+
防止敏感信息泄露。
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# 检查清单(手动/自动化)
|
|
89
|
+
- 扫描硬编码密钥:git diff 中不应出现 token / password / secret
|
|
90
|
+
- 检查新增依赖:确认无已知漏洞(`audit`)
|
|
91
|
+
- 检查文件权限:配置文件不应包含真实凭据
|
|
92
|
+
- 检查日志语句:不输出请求体、响应体、堆栈信息
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### ⑥ DIFF-REVIEW — 变更审查
|
|
96
|
+
|
|
97
|
+
最后审视改动的完整性。
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# 审查命令
|
|
101
|
+
diff --stat # 概览变更文件
|
|
102
|
+
diff HEAD # 审查具体变更
|
|
103
|
+
|
|
104
|
+
# 审查清单
|
|
105
|
+
- [ ] 变更范围与需求一致(没有多余修改)
|
|
106
|
+
- [ ] 无死代码/注释掉的代码
|
|
107
|
+
- [ ] 无调试代码残留
|
|
108
|
+
- [ ] 错误提示对用户友好
|
|
109
|
+
- [ ] 边界情况已处理(空值、超长值、特殊字符)
|
|
110
|
+
- [ ] 文档已同步(如有需要)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 持续模式
|
|
114
|
+
|
|
115
|
+
在开发过程中,可以在后台持续运行验证循环:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 持续验证(文件变化时自动重跑)
|
|
119
|
+
test --watch # 测试持续模式
|
|
120
|
+
lint --watch # lint 持续模式
|
|
121
|
+
build --watch # 构建持续模式
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 各阶段速度参考
|
|
125
|
+
|
|
126
|
+
| 阶段 | 通常耗时 | 建议频率 |
|
|
127
|
+
|------|---------|---------|
|
|
128
|
+
| BUILD | 1-30s | 每次保存 |
|
|
129
|
+
| TYPE-CHECK | 1-10s | 每次保存 |
|
|
130
|
+
| LINT | 0.5-5s | 每次保存 |
|
|
131
|
+
| TEST | 2-60s | 每次提交前 |
|
|
132
|
+
| SECURITY | 1-5s | 每次提交前 |
|
|
133
|
+
| DIFF-REVIEW | 10-30s | 每次提交前 |
|
|
134
|
+
|
|
135
|
+
## 故障场景处理
|
|
136
|
+
|
|
137
|
+
| 场景 | 动作 |
|
|
138
|
+
|------|------|
|
|
139
|
+
| BUILD 失败 | 修复语法/配置错误 → 重跑 ① |
|
|
140
|
+
| TYPE-CHECK 失败 | 修正类型 → 重跑 ② |
|
|
141
|
+
| LINT 报错 | 修复风格问题 → 重跑 ③ |
|
|
142
|
+
| TEST 失败 | 分析失败原因 → 修实现或修测试 → 重跑 ④ |
|
|
143
|
+
| 安全检查发现密钥 | 立即更换密钥 + 从 git 历史移除 → 重跑 ⑤ |
|
|
144
|
+
| DIFF 发现多余改动 | 还原无关变更 → 重跑 ⑥ |
|