specops 0.2.2 → 0.2.4

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 (62) hide show
  1. package/.opencode/agent/demand-analyst.md +69 -18
  2. package/.opencode/agent/verifier.md +231 -0
  3. package/.opencode/skills/brainstorming/SKILL.md +105 -0
  4. package/.opencode/skills/demand-analysis/SKILL.md +261 -47
  5. package/.opencode/skills/dispatching-parallel-agents/SKILL.md +180 -0
  6. package/.opencode/skills/executing-plans/SKILL.md +90 -0
  7. package/.opencode/skills/finishing-a-development-branch/SKILL.md +222 -0
  8. package/.opencode/skills/receiving-code-review/SKILL.md +213 -0
  9. package/.opencode/skills/repo-clone-analyze/SKILL.md +371 -0
  10. package/.opencode/skills/requesting-code-review/SKILL.md +105 -0
  11. package/.opencode/skills/requesting-code-review/code-reviewer.md +146 -0
  12. package/.opencode/skills/subagent-driven-development/SKILL.md +242 -0
  13. package/.opencode/skills/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
  14. package/.opencode/skills/subagent-driven-development/implementer-prompt.md +78 -0
  15. package/.opencode/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  16. package/.opencode/skills/systematic-debugging/SKILL.md +296 -0
  17. package/.opencode/skills/systematic-debugging/condition-based-waiting.md +115 -0
  18. package/.opencode/skills/systematic-debugging/defense-in-depth.md +122 -0
  19. package/.opencode/skills/systematic-debugging/root-cause-tracing.md +169 -0
  20. package/.opencode/skills/test-driven-development/SKILL.md +399 -0
  21. package/.opencode/skills/test-driven-development/testing-anti-patterns.md +299 -0
  22. package/.opencode/skills/using-git-worktrees/SKILL.md +218 -0
  23. package/.opencode/skills/using-superpowers/SKILL.md +99 -0
  24. package/.opencode/skills/verification-before-completion/SKILL.md +150 -0
  25. package/.opencode/skills/writing-plans/SKILL.md +123 -0
  26. package/.opencode/skills/writing-skills/SKILL.md +654 -0
  27. package/dist/__e2e__/01-state-engine.e2e.test.js +1 -1
  28. package/dist/acceptance/lazyDetector.js +1 -1
  29. package/dist/acceptance/lazyDetector.test.js +1 -1
  30. package/dist/acceptance/reporter.js +1 -1
  31. package/dist/acceptance/reporter.test.js +1 -1
  32. package/dist/acceptance/runner.js +1 -1
  33. package/dist/acceptance/runner.test.js +1 -1
  34. package/dist/cli.js +1 -1
  35. package/dist/context/index.js +1 -1
  36. package/dist/context/promptTemplate.js +1 -1
  37. package/dist/context/promptTemplate.test.js +1 -1
  38. package/dist/context/techContextLoader.js +1 -1
  39. package/dist/context/techContextLoader.test.js +1 -1
  40. package/dist/engine.js +1 -1
  41. package/dist/evolution/distiller.js +1 -1
  42. package/dist/evolution/index.js +1 -1
  43. package/dist/evolution/memoryGraph.js +1 -1
  44. package/dist/evolution/selector.js +1 -1
  45. package/dist/evolution/signals.js +1 -1
  46. package/dist/evolution/solidify.js +1 -1
  47. package/dist/evolution/store.js +1 -1
  48. package/dist/evolution/types.js +1 -1
  49. package/dist/init.js +1 -1
  50. package/dist/machines/agentMachine.js +1 -1
  51. package/dist/machines/agentMachine.test.js +1 -1
  52. package/dist/machines/supervisorMachine.js +1 -1
  53. package/dist/machines/supervisorMachine.test.js +1 -1
  54. package/dist/persistence/schema.js +1 -1
  55. package/dist/persistence/stateFile.js +1 -1
  56. package/dist/persistence/stateFile.test.js +1 -1
  57. package/dist/plugin-engine.js +1 -1
  58. package/dist/plugin.js +1 -1
  59. package/dist/types/index.js +1 -1
  60. package/dist/utils/id.js +1 -1
  61. package/package.json +8 -2
  62. package/scripts/postinstall.mjs +37 -7
@@ -0,0 +1,371 @@
1
+ ---
2
+ name: repo-clone-analyze
3
+ description: "仓库 Clone 分析 Skill — 从竞品搜索和功能搜索结果中筛选需要深度分析的项目,Clone 源码后生成 overview.md、index.json 和全局 ref.json 功能索引。被 demand-analysis 编排层在 PHASE 5 调用。"
4
+ ---
5
+
6
+ # 仓库 Clone 分析 Skill
7
+
8
+ <role>
9
+ 你是仓库深度分析专家。你从竞品搜索和功能搜索的结果中筛选出值得 Clone 的项目,深度阅读源码,生成结构化文档和功能-代码索引。
10
+
11
+ **你的核心价值:将「这个项目怎么实现某个功能」映射到具体的代码文件和路径。**
12
+ </role>
13
+
14
+ ---
15
+
16
+ ## 输入
17
+
18
+ 你会从 demand-analysis 编排层收到以下输入:
19
+ - **竞品搜索报告**:PHASE 3 产出的竞品列表(含 GitHub URL)
20
+ - **功能搜索报告**:PHASE 4 产出的开源项目列表(含 GitHub URL)
21
+ - **项目根目录路径**:用于确定输出目录 `.specops/ref/`
22
+
23
+ ---
24
+
25
+ ## 第一步:筛选(决定 Clone 哪些项目)
26
+
27
+ ### Clone 标准
28
+
29
+ 项目的价值在于「它怎么实现某个功能」—— 需要看源码才能理解的项目才值得 Clone。
30
+
31
+ | 应该 Clone | 不应该 Clone |
32
+ |-----------|-------------|
33
+ | 竞品项目(功能相似,需要了解实现方式) | npm stars > 50k 的通用基础库 |
34
+ | 某个功能点的开源实现(需看源码理解架构) | 基础框架(看文档即可) |
35
+ | 架构参考项目(想借鉴其设计模式) | 纯工具库(API 简单,看文档即可) |
36
+
37
+ ### 排除列表(不 Clone)
38
+
39
+ 以下类型的项目**直接排除**,不进入 Clone 流程:
40
+
41
+ **基础框架:**
42
+ - react, vue, angular, svelte, solid
43
+ - next.js, nuxt, remix, astro, gatsby
44
+ - express, fastify, koa, hono, nest
45
+ - django, flask, fastapi, spring
46
+
47
+ **通用工具库:**
48
+ - lodash, ramda, underscore
49
+ - dayjs, moment, date-fns
50
+ - axios, got, ky, node-fetch
51
+ - zod, joi, yup, ajv
52
+ - uuid, nanoid
53
+
54
+ **CLI/解析库:**
55
+ - yargs, commander, inquirer, prompts, chalk, ora
56
+ - minimist, meow, cac
57
+
58
+ **状态管理/数据库:**
59
+ - redux, zustand, jotai, valtio, mobx
60
+ - prisma, drizzle, typeorm, sequelize, knex
61
+ - mongoose, redis (ioredis)
62
+
63
+ **测试/构建工具:**
64
+ - vitest, jest, mocha, playwright, cypress
65
+ - webpack, vite, esbuild, rollup, turbopack
66
+ - eslint, prettier, biome
67
+
68
+ **判断规则:** 如果一个项目的主要价值是「提供 API 供你调用」而非「展示某个功能的实现方式」,则不 Clone。
69
+
70
+ ### 筛选输出
71
+
72
+ 筛选完成后,列出 Clone 清单:
73
+
74
+ ```markdown
75
+ ## Clone 清单
76
+
77
+ | # | 项目 | GitHub URL | Clone 原因 | 关注的功能点 |
78
+ |---|------|-----------|-----------|-------------|
79
+ | 1 | project-a | github.com/xxx/project-a | 竞品,核心功能参考 | SC-001, SC-003 |
80
+ | 2 | project-b | github.com/yyy/project-b | 功能搜索命中,参考实现 | SC-005 |
81
+
82
+ ### 排除的项目
83
+ | 项目 | 排除原因 |
84
+ |------|---------|
85
+ | react | 基础框架,看文档即可 |
86
+ | zod | 通用工具库,API 简单 |
87
+ ```
88
+
89
+ ---
90
+
91
+ ## 第二步:Clone
92
+
93
+ 对筛选出的每个项目执行浅克隆:
94
+
95
+ ```bash
96
+ git clone --depth 1 <url> .specops/ref/<项目名>/
97
+ ```
98
+
99
+ **路径规则:**
100
+ - 输出目录:`<项目根目录>/.specops/ref/<项目名>/`
101
+ - 项目名取 GitHub URL 的最后一段(如 `github.com/xxx/my-tool` → `my-tool`)
102
+ - 如果项目名冲突,追加 owner 前缀(如 `xxx-my-tool`)
103
+
104
+ ---
105
+
106
+ ## 第三步:分析
107
+
108
+ ### 子 Agent 派发策略
109
+
110
+ **每个项目必须派发到独立的子 agent。** 主 agent 只负责编排:筛选、派发、收集结果、生成 ref.json。
111
+
112
+ **多项目时并行派发:**
113
+
114
+ ```
115
+ 对每个需要分析的项目:
116
+ task(category="quick", load_skills=["repo-clone-analyze"],
117
+ run_in_background=true,
118
+ prompt="分析位于 <repo-path> 的仓库。
119
+ 输出到:<output-dir>。
120
+ ref.json 路径:<ref-json-path>。
121
+
122
+ 执行以下步骤:
123
+ 1. 初步侦察:阅读 README、依赖文件、Dockerfile、顶层目录结构、CI 配置
124
+ 2. 深度分析:阅读每个主要模块的源代码,识别用途、技术栈、依赖、架构、入口点
125
+ 3. 按 overview 模板写入 <output-dir>/overview.md
126
+ 4. 按 index schema 写入 <output-dir>/index.json(所有路径使用绝对路径)
127
+ 5. 合并到 ref.json(使用文件锁)
128
+
129
+ overview.md 用中文撰写。
130
+ index.json 中的 paths 和 key_files 的路径全部使用绝对路径。")
131
+ ```
132
+
133
+ **单项目时直接分析,不派发子 agent。**
134
+
135
+ ### 3a. 初步侦察
136
+
137
+ 优先阅读以下文件建立初步认知:
138
+
139
+ 1. `README.md` / `README.rst` / docs 目录
140
+ 2. `package.json` / `requirements.txt` / `pyproject.toml` / `go.mod` / `Cargo.toml` / `pom.xml`
141
+ 3. `docker-compose.yml` / `Dockerfile` / `Makefile`
142
+ 4. 顶层目录结构
143
+ 5. CI/CD 配置(`.github/workflows/`、`.gitlab-ci.yml`)
144
+
145
+ ### 3b. 深度分析
146
+
147
+ 对每个主要模块/目录,阅读关键源代码文件,识别:
148
+
149
+ - **用途**:该模块做什么
150
+ - **技术与依赖**:使用的框架、库、协议
151
+ - **架构模式**:MVC、微服务、事件驱动、插件系统等
152
+ - **入口点**:主文件、API 路由、CLI 命令
153
+
154
+ ---
155
+
156
+ ## 第四步:输出
157
+
158
+ ### 4a. overview.md(每个项目一份)
159
+
160
+ 路径:`.specops/ref/<项目名>/overview.md`
161
+
162
+ ```markdown
163
+ # <项目名称>
164
+
165
+ ## 项目概述
166
+ <!-- 1-2 段:项目是什么,主要用途 -->
167
+
168
+ ## 技术栈
169
+
170
+ | 类别 | 技术 |
171
+ |------|------|
172
+ | 语言 | Python 3.10+ |
173
+ | 框架 | FastAPI |
174
+ | 数据库 | PostgreSQL, Redis |
175
+
176
+ ## 架构
177
+ <!-- 高层架构描述、数据流 -->
178
+
179
+ ## 核心模块
180
+
181
+ ### <模块名称>
182
+ - **路径**:`src/module/`
183
+ - **用途**:...
184
+ - **关键技术**:...
185
+ - **依赖**:...
186
+ - **关键文件**:
187
+ - `file.py` - 描述
188
+
189
+ ## API / 接口
190
+ <!-- REST 端点、CLI 命令、gRPC 服务(如适用) -->
191
+
192
+ ## 构建与部署
193
+ <!-- 如何构建、测试、部署 -->
194
+
195
+ ## 对我们项目的参考价值
196
+ <!-- 这个项目的哪些实现方式值得借鉴 -->
197
+ ```
198
+
199
+ ### 4b. index.json(每个项目一份)
200
+
201
+ 路径:`.specops/ref/<项目名>/index.json`
202
+
203
+ 将每个功能/模块映射到对应的代码路径。**所有路径必须使用绝对路径**,支持 glob 模式:
204
+
205
+ ```json
206
+ {
207
+ "project": "<项目名>",
208
+ "repo_url": "<github-url>",
209
+ "analyzed_at": "<ISO-8601 时间戳>",
210
+ "modules": [
211
+ {
212
+ "name": "RAG 流水线",
213
+ "description": "基于检索增强生成的文档问答",
214
+ "paths": ["/abs/path/to/.specops/ref/ragflow/rag/**", "/abs/path/to/.specops/ref/ragflow/api/ragflow.py"],
215
+ "tech": ["LangChain", "Elasticsearch", "Python"],
216
+ "dependencies": ["elasticsearch", "langchain", "tiktoken"],
217
+ "key_files": {
218
+ "/abs/path/to/.specops/ref/ragflow/rag/pipeline.py": "RAG 主编排逻辑",
219
+ "/abs/path/to/.specops/ref/ragflow/rag/retriever.py": "向量存储文档检索"
220
+ }
221
+ }
222
+ ]
223
+ }
224
+ ```
225
+
226
+ ### 4c. ref.json(全局合并索引)
227
+
228
+ 路径:`.specops/ref/ref.json`
229
+
230
+ ref.json 是所有项目的**功能级**扁平索引,不按项目区分。`keyset` 是功能名称的数组,用于查重。每个功能名称直接作为顶层 key。
231
+
232
+ **格式:**
233
+
234
+ ```json
235
+ {
236
+ "keyset": ["RAG 流水线", "文档解析", "状态机引擎", "CLI 命令解析"],
237
+ "RAG 流水线": {
238
+ "project": "ragflow",
239
+ "description": "基于检索增强生成的文档问答",
240
+ "paths": ["/abs/path/.specops/ref/ragflow/rag/**"],
241
+ "tech": ["LangChain", "Elasticsearch", "Python"],
242
+ "dependencies": ["elasticsearch", "langchain", "tiktoken"],
243
+ "key_files": {
244
+ "/abs/path/.specops/ref/ragflow/rag/pipeline.py": "RAG 主编排逻辑",
245
+ "/abs/path/.specops/ref/ragflow/rag/retriever.py": "向量存储文档检索"
246
+ }
247
+ },
248
+ "文档解析": {
249
+ "project": "ragflow",
250
+ "description": "解析 PDF、DOCX、图片为结构化文本",
251
+ "paths": ["/abs/path/.specops/ref/ragflow/deepdoc/**"],
252
+ "tech": ["OCR", "pdfplumber", "Python"],
253
+ "dependencies": ["pdfplumber", "tesseract", "pillow"],
254
+ "key_files": {
255
+ "/abs/path/.specops/ref/ragflow/deepdoc/parser.py": "统一解析接口"
256
+ }
257
+ }
258
+ }
259
+ ```
260
+
261
+ ---
262
+
263
+ ## 第五步:合并到 ref.json
264
+
265
+ 每个子 agent 写完 `index.json` 后,**立即**合并到 `ref.json`。不等主 agent 统一收集。
266
+
267
+ ### 文件锁机制
268
+
269
+ 多个子 agent 可能并发写入 `ref.json`,必须使用文件锁防止数据丢失。锁文件路径为 `ref.json.lock`(与 `ref.json` 同目录)。
270
+
271
+ ```bash
272
+ # 获取锁(等待直到获取成功,超时 30 秒)
273
+ while ! mkdir "<ref-json-path>.lock" 2>/dev/null; do sleep 1; done
274
+
275
+ # ... 读取、合并、写回 ref.json ...
276
+
277
+ # 释放锁
278
+ rmdir "<ref-json-path>.lock"
279
+ ```
280
+
281
+ 使用 `mkdir` 作为原子锁操作(目录创建是原子的)。子 agent 在读取 `ref.json` 前获取锁,写回后释放锁。如果异常退出未释放锁,主 agent 在所有子 agent 完成后清理残留锁文件。
282
+
283
+ ### 合并流程(在锁保护下)
284
+
285
+ **核心原则:只追加,不删除、不覆盖已有内容。**
286
+
287
+ 1. 获取文件锁
288
+ 2. 读取 `ref.json` 的**完整内容**(如不存在则创建 `{"keyset": []}`)
289
+ 3. 遍历当前项目 `index.json` 中的每个 module
290
+ 4. 取 module 的 `name`(即功能名称),检查 `keyset` 数组中是否已存在
291
+ 5. 如果已存在:在功能名后追加序号(如「RAG 流水线 2」「RAG 流水线 3」),将新名称追加到 `keyset`,并以新名称为 key 写入条目
292
+ 6. 如果不存在:将功能名称追加到 `keyset`,并新增顶层对象
293
+ 7. 将**完整的** JSON(包含所有已有条目 + 新追加条目)写回 `ref.json`
294
+ 8. 释放文件锁
295
+
296
+ ### 去重规则
297
+
298
+ - `keyset` 是功能名称的数组,合并前逐个查询是否重复
299
+ - 重名时追加序号:「功能名 2」「功能名 3」...
300
+ - 序号从 2 开始,原始条目不带序号
301
+ - 所有路径使用绝对路径
302
+
303
+ ---
304
+
305
+ ## 第六步:注入
306
+
307
+ 将 ref.json 路径注入到项目规范文件,使后续流程可以引用分析结果。
308
+
309
+ **检测顺序**(依次检查,使用第一个找到的):
310
+
311
+ 1. `.specops/REQUIREMENTS.md`
312
+ 2. `CLAUDE.md`(项目根目录)
313
+ 3. `AGENT.md`(项目根目录)
314
+
315
+ **追加内容** —— 在规范文件末尾添加引用部分(如果不存在):
316
+
317
+ ```markdown
318
+ ## 参考仓库
319
+
320
+ 分析索引:`<.specops/ref/ref.json 的绝对路径>`
321
+ ```
322
+
323
+ 如果该部分已存在,更新路径而不重复添加。
324
+
325
+ **跳过条件**:如果没有找到任何规范文件,不要创建新文件。注入步骤可跳过(因为 demand-analysis 编排层会在 PHASE 7 合成时引用 ref.json)。
326
+
327
+ ---
328
+
329
+ ## 输出目录结构
330
+
331
+ ```
332
+ .specops/
333
+ └── ref/
334
+ ├── ref.json # 全局功能级扁平索引
335
+ ├── <project-a>/
336
+ │ ├── overview.md # 项目概览(中文)
337
+ │ ├── index.json # 功能-代码索引
338
+ │ └── <源码文件...> # git clone --depth 1 的内容
339
+ └── <project-b>/
340
+ ├── overview.md
341
+ ├── index.json
342
+ └── <源码文件...>
343
+ ```
344
+
345
+ ---
346
+
347
+ ## 注意事项
348
+
349
+ - **每个项目一个子 agent**:多项目时不要在主 agent 中串行分析,必须并行派发
350
+ - **深度阅读**:子 agent 必须阅读实际源代码,不能只看 README。核心价值在于将功能映射到具体文件
351
+ - **绝对路径**:`index.json` 和 `ref.json` 中所有路径必须使用绝对路径,支持 glob 模式
352
+ - **按功能名去重**:`ref.json` 以功能名称为 key,合并前先查询 `keyset` 数组是否已有该功能名
353
+ - **只追加不覆盖**:`ref.json` 已有的功能条目必须完整保留,新功能只在末尾追加
354
+ - **中文输出**:overview.md 用中文撰写,index.json 中的 name 和 description 用中文
355
+ - **浅克隆**:使用 `--depth 1` 减少磁盘占用和克隆时间
356
+ - **排除基础库**:严格执行排除列表,不要 Clone 通用基础库
357
+
358
+ ---
359
+
360
+ ## 反模式
361
+
362
+ | 违规行为 | 严重性 |
363
+ |---------|--------|
364
+ | Clone 了排除列表中的基础框架/工具库 | **严重** — 浪费时间和磁盘 |
365
+ | 不阅读源码只看 README 就生成 index.json | **严重** — 核心价值丧失 |
366
+ | ref.json 覆盖了已有条目 | **严重** — 必须只追加 |
367
+ | 并发写入 ref.json 不加锁 | 高 — 数据丢失风险 |
368
+ | index.json 使用相对路径 | 高 — 后续引用会失败 |
369
+ | 多项目串行分析不派发子 agent | 中 — 效率低下 |
370
+ | overview.md 不是中文 | 中 |
371
+ | 不生成 Clone 清单就直接 Clone | 中 — 缺少筛选过程 |
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: requesting-code-review
3
+ description: 完成任务、实现主要功能或合并前使用,验证工作是否满足需求
4
+ ---
5
+
6
+ # 请求代码审查
7
+
8
+ 派发 specops:code-reviewer 子 agent,在问题扩散前捕获它们。
9
+
10
+ **核心原则:** 早审查,勤审查。
11
+
12
+ ## 何时请求审查
13
+
14
+ **必须:**
15
+ - 子 agent 驱动开发中每个任务完成后
16
+ - 完成主要功能后
17
+ - 合并到 main 之前
18
+
19
+ **可选但有价值:**
20
+ - 卡住时(换个视角)
21
+ - 重构前(基线检查)
22
+ - 修复复杂 bug 后
23
+
24
+ ## 如何请求
25
+
26
+ **1. 获取 git SHA:**
27
+ ```bash
28
+ BASE_SHA=$(git rev-parse HEAD~1) # 或 origin/main
29
+ HEAD_SHA=$(git rev-parse HEAD)
30
+ ```
31
+
32
+ **2. 派发 code-reviewer 子 agent:**
33
+
34
+ 使用 task() 工具,类型为 specops:code-reviewer,填写 `code-reviewer.md` 中的模板
35
+
36
+ **占位符:**
37
+ - `{WHAT_WAS_IMPLEMENTED}` - 你刚构建了什么
38
+ - `{PLAN_OR_REQUIREMENTS}` - 应该做什么
39
+ - `{BASE_SHA}` - 起始提交
40
+ - `{HEAD_SHA}` - 结束提交
41
+ - `{DESCRIPTION}` - 简要摘要
42
+
43
+ **3. 处理反馈:**
44
+ - 立即修复严重问题
45
+ - 继续之前修复重要问题
46
+ - 记录次要问题留待后续
47
+ - 如果审查者有误,用理由反驳
48
+
49
+ ## 示例
50
+
51
+ ```
52
+ [刚完成任务 2:添加验证函数]
53
+
54
+ 你:让我在继续之前请求代码审查。
55
+
56
+ BASE_SHA=$(git log --oneline | grep "Task 1" | head -1 | awk '{print $1}')
57
+ HEAD_SHA=$(git rev-parse HEAD)
58
+
59
+ [派发 specops:code-reviewer 子 agent]
60
+ WHAT_WAS_IMPLEMENTED: 会话索引的验证和修复函数
61
+ PLAN_OR_REQUIREMENTS: docs/plans/deployment-plan.md 中的任务 2
62
+ BASE_SHA: a7981ec
63
+ HEAD_SHA: 3df7661
64
+ DESCRIPTION: 添加了 verifyIndex() 和 repairIndex(),支持 4 种问题类型
65
+
66
+ [子 agent 返回]:
67
+ 优点:架构清晰,测试真实
68
+ 问题:
69
+ 重要:缺少进度指示器
70
+ 次要:魔法数字(100)用于报告间隔
71
+ 评估:可以继续
72
+
73
+ 你:[修复进度指示器]
74
+ [继续任务 3]
75
+ ```
76
+
77
+ ## 与工作流的集成
78
+
79
+ **子 Agent 驱动开发:**
80
+ - 每个任务后审查
81
+ - 在问题叠加前捕获
82
+ - 进入下一个任务前修复
83
+
84
+ **执行计划:**
85
+ - 每批(3 个任务)后审查
86
+ - 获取反馈,应用,继续
87
+
88
+ **临时开发:**
89
+ - 合并前审查
90
+ - 卡住时审查
91
+
92
+ ## 红线
93
+
94
+ **绝对不要:**
95
+ - 因为"很简单"就跳过审查
96
+ - 忽略严重问题
97
+ - 带着未修复的重要问题继续
98
+ - 对有效的技术反馈争辩
99
+
100
+ **如果审查者有误:**
101
+ - 用技术理由反驳
102
+ - 展示证明其可用的代码/测试
103
+ - 请求澄清
104
+
105
+ 参见模板:requesting-code-review/code-reviewer.md
@@ -0,0 +1,146 @@
1
+ # 代码审查 Agent
2
+
3
+ 你正在审查代码变更的生产就绪性。
4
+
5
+ **你的任务:**
6
+ 1. 审查 {WHAT_WAS_IMPLEMENTED}
7
+ 2. 对照 {PLAN_OR_REQUIREMENTS}
8
+ 3. 检查代码质量、架构、测试
9
+ 4. 按严重程度分类问题
10
+ 5. 评估生产就绪性
11
+
12
+ ## 实现内容
13
+
14
+ {DESCRIPTION}
15
+
16
+ ## 需求/计划
17
+
18
+ {PLAN_REFERENCE}
19
+
20
+ ## 审查的 Git 范围
21
+
22
+ **基准:** {BASE_SHA}
23
+ **当前:** {HEAD_SHA}
24
+
25
+ ```bash
26
+ git diff --stat {BASE_SHA}..{HEAD_SHA}
27
+ git diff {BASE_SHA}..{HEAD_SHA}
28
+ ```
29
+
30
+ ## 审查清单
31
+
32
+ **代码质量:**
33
+ - 关注点分离是否清晰?
34
+ - 错误处理是否恰当?
35
+ - 类型安全(如适用)?
36
+ - 是否遵循 DRY 原则?
37
+ - 边界情况是否处理?
38
+
39
+ **架构:**
40
+ - 设计决策是否合理?
41
+ - 是否考虑了可扩展性?
42
+ - 性能影响?
43
+ - 安全顾虑?
44
+
45
+ **测试:**
46
+ - 测试是否真正测试了逻辑(而非 mock)?
47
+ - 边界情况是否覆盖?
48
+ - 需要时是否有集成测试?
49
+ - 所有测试是否通过?
50
+
51
+ **需求:**
52
+ - 是否满足计划中的所有需求?
53
+ - 实现是否符合规格?
54
+ - 是否有范围蔓延?
55
+ - 破坏性变更是否有文档?
56
+
57
+ **生产就绪性:**
58
+ - 迁移策略(如有 schema 变更)?
59
+ - 是否考虑了向后兼容?
60
+ - 文档是否完整?
61
+ - 是否有明显 bug?
62
+
63
+ ## 输出格式
64
+
65
+ ### 优点
66
+ [哪些做得好?要具体。]
67
+
68
+ ### 问题
69
+
70
+ #### 严重(必须修复)
71
+ [Bug、安全问题、数据丢失风险、功能损坏]
72
+
73
+ #### 重要(应该修复)
74
+ [架构问题、缺失功能、错误处理不当、测试缺口]
75
+
76
+ #### 次要(锦上添花)
77
+ [代码风格、优化机会、文档改进]
78
+
79
+ **每个问题包含:**
80
+ - 文件:行号 引用
81
+ - 什么问题
82
+ - 为什么重要
83
+ - 如何修复(如果不明显)
84
+
85
+ ### 建议
86
+ [代码质量、架构或流程的改进建议]
87
+
88
+ ### 评估
89
+
90
+ **可以合并吗?** [是/否/修复后可以]
91
+
92
+ **理由:** [1-2 句技术评估]
93
+
94
+ ## 关键规则
95
+
96
+ **要:**
97
+ - 按实际严重程度分类(不是所有东西都是严重的)
98
+ - 要具体(文件:行号,不要含糊)
99
+ - 解释问题为什么重要
100
+ - 肯定优点
101
+ - 给出明确结论
102
+
103
+ **不要:**
104
+ - 没检查就说"看起来不错"
105
+ - 把小问题标为严重
106
+ - 对没审查的代码给反馈
107
+ - 含糊其辞("改进错误处理")
108
+ - 回避给出明确结论
109
+
110
+ ## 输出示例
111
+
112
+ ```
113
+ ### 优点
114
+ - 数据库 schema 干净,迁移规范(db.ts:15-42)
115
+ - 测试覆盖全面(18 个测试,所有边界情况)
116
+ - 错误处理好,有降级方案(summarizer.ts:85-92)
117
+
118
+ ### 问题
119
+
120
+ #### 重要
121
+ 1. **CLI 包装器缺少帮助文本**
122
+ - 文件:index-conversations:1-31
123
+ - 问题:没有 --help 标志,用户无法发现 --concurrency
124
+ - 修复:添加 --help 分支,附带使用示例
125
+
126
+ 2. **缺少日期验证**
127
+ - 文件:search.ts:25-27
128
+ - 问题:无效日期静默返回空结果
129
+ - 修复:验证 ISO 格式,抛出错误并附带示例
130
+
131
+ #### 次要
132
+ 1. **进度指示器**
133
+ - 文件:indexer.ts:130
134
+ - 问题:长时间操作没有"X / Y"计数器
135
+ - 影响:用户不知道要等多久
136
+
137
+ ### 建议
138
+ - 添加进度报告以改善用户体验
139
+ - 考虑用配置文件管理排除项目(可移植性)
140
+
141
+ ### 评估
142
+
143
+ **可以合并:修复后可以**
144
+
145
+ **理由:** 核心实现扎实,架构和测试都好。重要问题(帮助文本、日期验证)容易修复,不影响核心功能。
146
+ ```