@deepstorm/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +72 -0
  2. package/dist/agents/reef-inspect-figma.md +77 -0
  3. package/dist/agents/reef-review-backend.md.tmpl +112 -0
  4. package/dist/agents/reef-review-frontend.md.tmpl +78 -0
  5. package/dist/agents/reef-review-infra.md +47 -0
  6. package/dist/agents/reef-review-security.md.tmpl +80 -0
  7. package/dist/agents/reef-scope-analysis.md +64 -0
  8. package/dist/build-registry.js +375 -0
  9. package/dist/cli.js +8581 -0
  10. package/dist/config-schema.json +133 -0
  11. package/dist/env-examples/context7.env-example +19 -0
  12. package/dist/env-examples/feishu-wiki.env-example +16 -0
  13. package/dist/env-examples/figma.env-example +16 -0
  14. package/dist/env-examples/github.env-example +20 -0
  15. package/dist/env-examples/jira.env-example +20 -0
  16. package/dist/hooks/mcp-hook.sh +77 -0
  17. package/dist/hooks/reef-auto-format.sh.tmpl +72 -0
  18. package/dist/hooks/reef-block-dangerous.sh +70 -0
  19. package/dist/hooks/reef-hooks.json +72 -0
  20. package/dist/hooks/reef-intent-detect.sh +129 -0
  21. package/dist/hooks/reef-protect-files.sh +55 -0
  22. package/dist/hooks/reef-run-tests.sh +84 -0
  23. package/dist/hooks/reef-scope-check.sh +386 -0
  24. package/dist/hooks/reef-scope-ci.sh +28 -0
  25. package/dist/hooks/reef-scope-gate.sh +115 -0
  26. package/dist/hooks/reef-scope-pre-commit.sh.tmpl +28 -0
  27. package/dist/hooks/reef-scope-setup.sh +204 -0
  28. package/dist/hooks/reef-scope-split.sh +203 -0
  29. package/dist/hooks/sweep-hooks.json +14 -0
  30. package/dist/hooks/sweep-mcp-hook.sh +77 -0
  31. package/dist/hooks/tide-hooks.json +14 -0
  32. package/dist/hooks/tide-session-preload.sh +17 -0
  33. package/dist/mcp/code-hosting/github.json +20 -0
  34. package/dist/mcp/design-tools/figma.json +19 -0
  35. package/dist/mcp/docs-reference/context7.json +28 -0
  36. package/dist/mcp/e2e-testing/playwright.json +13 -0
  37. package/dist/mcp/knowledge-base/feishu-wiki.json +19 -0
  38. package/dist/mcp/project-management/jira.json +27 -0
  39. package/dist/mcp-skills/deepflow-mcp-feishu-wiki-read/SKILL.md +65 -0
  40. package/dist/mcp-skills/deepflow-mcp-feishu-wiki-write/SKILL.md +63 -0
  41. package/dist/mcp-skills/deepflow-mcp-figma-read/SKILL.md +98 -0
  42. package/dist/mcp-skills/deepflow-mcp-github-read/SKILL.md +62 -0
  43. package/dist/mcp-skills/deepflow-mcp-github-write/SKILL.md +63 -0
  44. package/dist/mcp-skills/deepflow-mcp-jira-read/SKILL.md +80 -0
  45. package/dist/mcp-skills/deepflow-mcp-jira-write/SKILL.md +74 -0
  46. package/dist/mcp-skills/deepflow-mcp-playwright-read/SKILL.md +79 -0
  47. package/dist/mcp-skills/deepstorm-mcp-feishu-wiki-read/SKILL.md +65 -0
  48. package/dist/mcp-skills/deepstorm-mcp-feishu-wiki-write/SKILL.md +63 -0
  49. package/dist/mcp-skills/deepstorm-mcp-figma-read/SKILL.md +98 -0
  50. package/dist/mcp-skills/deepstorm-mcp-github-read/SKILL.md +62 -0
  51. package/dist/mcp-skills/deepstorm-mcp-github-write/SKILL.md +63 -0
  52. package/dist/mcp-skills/deepstorm-mcp-jira-read/SKILL.md +80 -0
  53. package/dist/mcp-skills/deepstorm-mcp-jira-write/SKILL.md +74 -0
  54. package/dist/mcp-skills/deepstorm-mcp-playwright-read/SKILL.md +79 -0
  55. package/dist/registry.json +818 -0
  56. package/dist/skills/atoll-ops/SKILL.md +46 -0
  57. package/dist/skills/reef-commit/SKILL.md +127 -0
  58. package/dist/skills/reef-gen-backend/SKILL.md.tmpl +87 -0
  59. package/dist/skills/reef-gen-backend/variants/java/steps.md +28 -0
  60. package/dist/skills/reef-gen-backend/variants/python/steps.md +70 -0
  61. package/dist/skills/reef-gen-frontend/SKILL.md.tmpl +83 -0
  62. package/dist/skills/reef-gen-frontend/variants/angular/steps.md +30 -0
  63. package/dist/skills/reef-harden/EXAMPLES.md +89 -0
  64. package/dist/skills/reef-harden/SKILL.md +136 -0
  65. package/dist/skills/reef-pr/SKILL.md +97 -0
  66. package/dist/skills/reef-review/SKILL.md.tmpl +107 -0
  67. package/dist/skills/reef-scope/SKILL.md +134 -0
  68. package/dist/skills/reef-start/SKILL.md.tmpl +562 -0
  69. package/dist/skills/reef-start/references/jira-start-subagent.md +60 -0
  70. package/dist/skills/reef-style-backend/SKILL.md.tmpl +134 -0
  71. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/examples/chat-client.md +96 -0
  72. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/examples/rag.md +94 -0
  73. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/examples/structured-output.md +62 -0
  74. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/examples/tool-calling.md +68 -0
  75. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/quick-reference.md +220 -0
  76. package/dist/skills/reef-style-backend/fragments/java/api-spec/quick-reference.md +148 -0
  77. package/dist/skills/reef-style-backend/fragments/java/db-migration/liquibase/examples/database-migration.md +131 -0
  78. package/dist/skills/reef-style-backend/fragments/java/db-migration/liquibase/quick-reference.md +103 -0
  79. package/dist/skills/reef-style-backend/fragments/java/dependency-management/quick-reference.md +119 -0
  80. package/dist/skills/reef-style-backend/fragments/java/exception-handling/examples/error-code-enum.md +101 -0
  81. package/dist/skills/reef-style-backend/fragments/java/exception-handling/quick-reference.md +181 -0
  82. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/controller.md +95 -0
  83. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/dto-mapper.md +121 -0
  84. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/infrastructure.md +179 -0
  85. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/service-entity.md +202 -0
  86. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/testing.md +107 -0
  87. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/quick-reference.md +83 -0
  88. package/dist/skills/reef-style-backend/fragments/java/orm/hibernate/quick-reference.md +150 -0
  89. package/dist/skills/reef-style-backend/fragments/java/security-redlines/quick-reference.md +197 -0
  90. package/dist/skills/reef-style-backend/fragments/java/test/data-jpa-test/examples/user-repository-test.md +69 -0
  91. package/dist/skills/reef-style-backend/fragments/java/test/data-jpa-test/quick-reference.md +101 -0
  92. package/dist/skills/reef-style-backend/fragments/java/test/junit5/examples/user-service-test.md +61 -0
  93. package/dist/skills/reef-style-backend/fragments/java/test/junit5/quick-reference.md +100 -0
  94. package/dist/skills/reef-style-backend/fragments/java/test/spring-mvc-test/examples/user-controller-test.md +61 -0
  95. package/dist/skills/reef-style-backend/fragments/java/test/spring-mvc-test/quick-reference.md +85 -0
  96. package/dist/skills/reef-style-backend/fragments/java/test/spring-service-test/examples/user-service-integration-test.md +56 -0
  97. package/dist/skills/reef-style-backend/fragments/java/test/spring-service-test/quick-reference.md +83 -0
  98. package/dist/skills/reef-style-backend/fragments/python/alembic-migration/quick-reference.md +77 -0
  99. package/dist/skills/reef-style-backend/fragments/python/api-spec/quick-reference.md +164 -0
  100. package/dist/skills/reef-style-backend/fragments/python/dependency-management/quick-reference.md +139 -0
  101. package/dist/skills/reef-style-backend/fragments/python/exception-handling/quick-reference.md +177 -0
  102. package/dist/skills/reef-style-backend/fragments/python/fastapi-quick-reference/quick-reference.md +101 -0
  103. package/dist/skills/reef-style-backend/fragments/python/langchain/quick-reference.md +135 -0
  104. package/dist/skills/reef-style-backend/fragments/python/pytest-testing/quick-reference.md +111 -0
  105. package/dist/skills/reef-style-backend/fragments/python/ruff-mypy-toolchain/quick-reference.md +83 -0
  106. package/dist/skills/reef-style-backend/fragments/python/security-redlines/quick-reference.md +207 -0
  107. package/dist/skills/reef-style-backend/fragments/python/sqlalchemy-orm/quick-reference.md +91 -0
  108. package/dist/skills/reef-style-backend/variants/java/examples/code-wrapping.md +227 -0
  109. package/dist/skills/reef-style-backend/variants/java/examples/contributor-pattern.md +97 -0
  110. package/dist/skills/reef-style-backend/variants/java/quick-reference.md +117 -0
  111. package/dist/skills/reef-style-backend/variants/python/examples/crud-router.md +71 -0
  112. package/dist/skills/reef-style-backend/variants/python/examples/pydantic-schema.md +45 -0
  113. package/dist/skills/reef-style-backend/variants/python/examples/pytest-fixture.md +60 -0
  114. package/dist/skills/reef-style-backend/variants/python/examples/sqlalchemy-model.md +31 -0
  115. package/dist/skills/reef-style-backend/variants/python/quick-reference.md +111 -0
  116. package/dist/skills/reef-style-frontend/SKILL.md.tmpl +70 -0
  117. package/dist/skills/reef-style-frontend/fragments/css/tailwind/quick-reference.md +79 -0
  118. package/dist/skills/reef-style-frontend/fragments/test/vitest/examples/testing.md +150 -0
  119. package/dist/skills/reef-style-frontend/fragments/test/vitest/quick-reference.md +141 -0
  120. package/dist/skills/reef-style-frontend/fragments/ts-config/strict/quick-reference.md +112 -0
  121. package/dist/skills/reef-style-frontend/fragments/ui-lib/primeng/examples/ui-components.md +134 -0
  122. package/dist/skills/reef-style-frontend/fragments/ui-lib/primeng/quick-reference.md +66 -0
  123. package/dist/skills/reef-style-frontend/variants/angular/examples/code-wrapping.md +252 -0
  124. package/dist/skills/reef-style-frontend/variants/angular/examples/component-types-pipes.md +56 -0
  125. package/dist/skills/reef-style-frontend/variants/angular/examples/entity-types.md +100 -0
  126. package/dist/skills/reef-style-frontend/variants/angular/examples/forms-layer.md +119 -0
  127. package/dist/skills/reef-style-frontend/variants/angular/examples/service-routing.md +95 -0
  128. package/dist/skills/reef-style-frontend/variants/angular/quick-reference.md +100 -0
  129. package/dist/skills/reef-testcase/SKILL.md +138 -0
  130. package/dist/skills/reef-testcase/references/coverage-dimensions.md +99 -0
  131. package/dist/skills/reef-testcase/references/test-case-template.md +63 -0
  132. package/dist/skills/sweep-init/SKILL.md +286 -0
  133. package/dist/skills/sweep-init/scripts/flow-selector.mjs +305 -0
  134. package/dist/skills/sweep-plan/SKILL.md.tmpl +312 -0
  135. package/dist/skills/sweep-plan/references/test-flow-template.md +46 -0
  136. package/dist/skills/sweep-run/SKILL.md +437 -0
  137. package/dist/skills/sweep-run/scripts/env-manager.mjs +208 -0
  138. package/dist/skills/sweep-run/scripts/flow-parser.mjs +329 -0
  139. package/dist/skills/sweep-run/scripts/flow-selector.mjs +483 -0
  140. package/dist/skills/sweep-run/scripts/mcp-manager.mjs +208 -0
  141. package/dist/skills/sweep-run/scripts/spec-compiler.mjs +303 -0
  142. package/dist/skills/tide-discuss/SKILL.md.tmpl +449 -0
  143. package/dist/skills/tide-discuss/references/checklists.md +88 -0
  144. package/dist/skills/tide-discuss/references/data-format.md +237 -0
  145. package/dist/skills/tide-discuss/references/prd-template.md +134 -0
  146. package/dist/skills/tide-discuss/references/publish-flow.md +167 -0
  147. package/dist/skills/tide-discuss/references/role-prompts.md +105 -0
  148. package/package.json +38 -0
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: reef-harden
3
+ description: 对 AI 生成的 spec、proposal、design、tasks 等 SDD 文档进行系统性加固。使用四道筛 + 反向 grill + Known Limitations 沉淀。当 AI 刚写完或用户想审查 spec/proposal/design/tasks 文档时触发,尤其当用户说"加固spec"、"按四道筛过"、"补不做什么"、"补known limitation" 或需要改进 SDD 文档质量时。
4
+ allowed-tools: Bash(git:*), Bash(find:*), Read, Edit, Write
5
+ deepstorm:
6
+ tool: reef
7
+ ---
8
+
9
+ # Spec Hardener
10
+
11
+ ## 上下文约定
12
+
13
+ 当前 change 名 = 当前分支名(由 jira-start 阶段三建立):
14
+
15
+ ```bash
16
+ # 自动发现当前 change
17
+ CHANGE=$(git branch --show-current)
18
+ CHANGE_DIR="openspec/changes/$CHANGE"
19
+
20
+ # 如分支名与 change 目录不匹配,遍历所有 change 取最近一个
21
+ if [ ! -d "$CHANGE_DIR" ]; then
22
+ CHANGE=$(ls -t openspec/changes/ 2>/dev/null | head -1)
23
+ CHANGE_DIR="openspec/changes/$CHANGE"
24
+ fi
25
+
26
+ # 如仍无结果,列出所有 change 让用户选择
27
+ if [ ! -d "$CHANGE_DIR" ]; then
28
+ echo "未找到 openspec change,可用的目录:"
29
+ ls openspec/changes/
30
+ echo "请指定 change 名"
31
+ fi
32
+ ```
33
+
34
+ ## 快速开始
35
+
36
+ ```
37
+ 1. 读取当前 change 下所有 SDD 文档(含 design.md 的 Change Scope Matrix)
38
+ 2. 按顺序过五道筛:硬数字 → 不做什么 → 验证方法 → 影响链完整性 → 反向 grill
39
+ 3. 将发现直接编辑回文档
40
+ 4. 将反向 grill 产出的关键风险沉淀为 Known Limitations
41
+ ```
42
+
43
+ ## 工作流
44
+
45
+ ### Step 1: 加载文档
46
+
47
+ ```bash
48
+ # 列出当前 change 下所有 SDD 文档
49
+ find "$CHANGE_DIR" -name "*.md" -maxdepth 2 | sort
50
+ ```
51
+
52
+ 读取所有这些文档。目录结构通常为:
53
+
54
+ ```
55
+ openspec/changes/<change>/
56
+ ├── proposal.md
57
+ ├── specs/
58
+ │ ├── 01-core-scenario.md
59
+ │ └── 02-error-scenario.md
60
+ ├── design.md
61
+ └── tasks.md
62
+ ```
63
+
64
+ ### Step 2: 五道筛
65
+
66
+ 按顺序过筛,每道筛产出可直接编辑到文档中的内容:
67
+
68
+ #### 第一道筛:特定数字
69
+
70
+ 搜索文档中所有具体数字(5MB、3000、80%、100ms 等),逐一判断:
71
+ - 有引用来源(benchmark、SLA、Figma 等)→ 通过
72
+ - 无引用来源 → 标注 TBD 或在旁边加上 Rationale 说明理由
73
+ - 禁止让"看起来合理但无根据"的数字留在文档里
74
+
75
+ #### 第二道筛:"不做什么"
76
+
77
+ 检查是否存在 `## 不做什么` / `## Out of Scope` 段:
78
+ - 若不存在 → 必须新增
79
+ - 若存在但内容敷衍(< 5 条)→ 用反向提问扩充:"这个功能在第一版里应该不做什么?"
80
+
81
+ 至少应覆盖:
82
+ - 不支持的功能/控件/场景(明确列出)
83
+ - 第一版 scale 边界(并发、文件大小、批量操作等)
84
+ - 是 permanent out 还是 v2 做(标注)
85
+
86
+ #### 第三道筛:验证方法
87
+
88
+ 检查所有验证要求,确保每一条可执行:
89
+ - "定期 review" → 不合格,追问为"谁、频率、用什么工具"
90
+ - "写测试" → 不合格,细化为"FormExportServiceTest:覆盖 X/Y/Z 场景"
91
+ - 每条验证应对应一个 CI 命令或具体测试步骤
92
+
93
+ #### 第四道筛:影响链完整性
94
+
95
+ 读取 design.md 中的 Change Scope Matrix,遍历矩阵每一层的变更,检查 `specs/` 中是否有对应场景覆盖:
96
+
97
+ ```
98
+ | Matrix 层 | 变更内容 | specs 覆盖 |
99
+ |-----------|---------|-----------|
100
+ | Entity 新增字段 | status | ✅ specs/cap1-spec.md 场景 4 |
101
+ | Controller 新增接口 | POST /users/{id}/approve | ❌ 缺少异常响应场景 |
102
+ | Migration 新增列 | status VARCHAR | ⚠️ 需要回滚场景 |
103
+ ```
104
+
105
+ - ✅ 已覆盖 → 通过
106
+ - ❌ 缺失 → 标记不合格,要求补充对应场景
107
+ - ⚠️ 需人工确认 → 标记提示(如回滚、迁移数据完整性等跨层场景)
108
+
109
+ **为什么要放在第四道:** 在确认数字合理、边界明确、可验证之后,再从架构层面确认每层变更都有 spec 兜底。不满足此筛时不进入反向 grill,避免在不完整的基础上做无意义质疑。
110
+
111
+ #### 第五道筛:反向 Grill
112
+
113
+ 以质疑者立场追问自己刚写的 spec:
114
+ "请你从质疑者的角度,给我列五个这份 spec 可能在三个月后让我后悔的地方。"
115
+
116
+ 将产出中有价值的点作为 Known Limitations 或风险标注回文档。
117
+
118
+ ### Step 3: 沉淀 Known Limitations
119
+
120
+ 在 proposal.md 末尾添加 `## Known Limitations` 段,内容来源:
121
+ 1. 第二步"不做什么"中标注的边界
122
+ 2. 第四步反向 grill 中不可忽视的风险点
123
+ 3. 已知但有意推迟的 trade-off
124
+
125
+ 格式:每条限制包含**标题**(加粗)+ 解释原因(一行)。
126
+
127
+ ### Step 4: 汇报
128
+
129
+ 输出一张改动清单:按文档列修改了什么,新增了什么段。
130
+
131
+ ## 注意事项
132
+
133
+ - 业务指标类数字(如 SLA 数值)若用户确认则无需修改
134
+ - 不要强行给所有数字标 TBD,需要对有根据的数字(如引用 Figma 的颜色值)放行
135
+ - 反向 grill 产出的五点中,选取可落地的 3-5 条写入文档,而非全量
136
+ - 所有编辑应保持原文档风格和格式一致
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: reef-pr
3
+ description: 将当前分支的变更创建为 GitHub PR。读取 commits 和 OpenSpec 上下文,生成 PR 描述并提交。用户说「创建 PR」「发起 PR」「pull request」「提 PR」「提交 PR」时触发。
4
+ allowed-tools: Bash(git:*), Bash(gh:*)
5
+ deepstorm:
6
+ tool: reef
7
+ ---
8
+
9
+ # 创建 Pull Request
10
+
11
+ ## 前置条件
12
+
13
+ - GitHub CLI (gh) 已安装并登录
14
+ - 当前分支有已提交的 commits
15
+ - `git push` 未阻塞(有远程权限)
16
+
17
+ ## 上下文约定
18
+
19
+ 当前分支名即 OpenSpec change 名(由 jira-start 阶段三创建分支时建立):
20
+
21
+ ```bash
22
+ BRANCH=$(git branch --show-current)
23
+ CHANGE_DIR="openspec/changes/$BRANCH"
24
+ ```
25
+
26
+ ## 工作流
27
+
28
+ ### 1. 收集上下文
29
+
30
+ 先检查未提交变更。如有则提示「请先 commit 再创建 PR」,中止流程。
31
+
32
+ ```bash
33
+ BRANCH=$(git branch --show-current)
34
+ FORK_POINT=$(git merge-base main HEAD 2>/dev/null)
35
+ echo "Branch: $BRANCH"; git status -sb
36
+ echo "Commits:"; git log "$FORK_POINT"..HEAD --oneline
37
+ echo "Changes:"; git diff "$FORK_POINT"..HEAD --stat
38
+ ls -d openspec/changes/$BRANCH/*.md 2>/dev/null
39
+ ```
40
+
41
+ 如有 OpenSpec change,读取 `proposal.md` 和 `tasks.md` 作为描述素材。
42
+
43
+ ### 2. 构建 PR 信息
44
+
45
+ **标题:** OpenSpec proposal 标题优先,否则取第一个 commit 标题。≤ 70 字符。
46
+
47
+ **正文:**
48
+
49
+ ```markdown
50
+ ## Summary
51
+ {2-4 行概括变更动机,优先从 proposal.md 提取}
52
+ ## 关联
53
+ JIRA: {commit body / proposal.md / jira-start 元数据}
54
+ OpenSpec: openspec/changes/{branch-name}/
55
+ ## 变更清单
56
+ {git diff --stat 输出}
57
+ ## Test plan
58
+ - [ ] {前端路径含 src/main/web/ 则加}
59
+ - [ ] {后端路径含 src/main/java/ 则加}
60
+ - [ ] {手动验证步骤,如有}
61
+ ```
62
+
63
+ ### 3. 展示并确认
64
+
65
+ 展示 PR 标题和正文。问用户:
66
+
67
+ - 「需要加 reviewer 和 label 吗?」
68
+ - 「创建 Draft PR?」
69
+ - 「没问题,创建」— 执行步骤 4
70
+ - 「修改一下标题/描述」— 修改后执行
71
+
72
+ ### 4. 推送并创建 PR
73
+
74
+ 先检查是否已有打开的 PR:
75
+
76
+ ```bash
77
+ EXISTING_PR=$(gh pr view --json url 2>/dev/null)
78
+ ```
79
+
80
+ 如有则询问「已有 PR,是否更新描述?」,用户确认后用 `gh pr update` 更新;否则正常创建:
81
+
82
+ ```bash
83
+ # 首次推送当前分支
84
+ git push -u origin $(git branch --show-current)
85
+
86
+ # 创建 PR(如有 reviewer/label/draft 则追加对应参数)
87
+ gh pr create \
88
+ --title "<标题>" \
89
+ --body "<正文>" \
90
+ [--reviewer "<用户>"] \
91
+ [--label "<标签>"] \
92
+ [--draft]
93
+ ```
94
+
95
+ ### 5. 输出结果
96
+
97
+ 返回 PR 链接。
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: reef-review
3
+ description: 对当前分支变更执行前后端代码审查。自动检测变更范围,派发 Sub‑Agent 执行审查并生成结构化报告。
4
+ allowed-tools: Bash(git:*), Agent
5
+ deepstorm:
6
+ tool: reef
7
+ ---
8
+
9
+ # 统一代码审查(Sub‑Agent 模式)
10
+
11
+ 自动检测变更类别,派发对应 Sub‑Agent 执行审查。
12
+
13
+ ## 工作流
14
+
15
+ ### Step 1: 检测变更范围
16
+
17
+ ```bash
18
+ # 获取 fork-point(检测当前分支基于哪个分支创建)
19
+ FORK_POINT=$(git merge-base "$(git reflog --date=local | grep "checkout: moving from.* to $(git rev-parse --abbrev-ref HEAD)$" | head -1 | sed -n 's/.*from \([^ ]*\) to .*/\1/p' || echo main)" HEAD)
20
+ echo "FORK_POINT=$FORK_POINT"
21
+ echo "变更文件统计:"
22
+ git diff "$FORK_POINT"..HEAD --stat
23
+
24
+ # 按类别提取文件清单
25
+ FILE_LIST=$(git diff "$FORK_POINT"..HEAD --name-only)
26
+ FILE_COUNT=$(echo "$FILE_LIST" | wc -l | tr -d ' ')
27
+ BACKEND_FILES=$(git diff "$FORK_POINT"..HEAD --name-only -- {{reef.backend.language.sourcePath}})
28
+ FRONTEND_FILES=$(git diff "$FORK_POINT"..HEAD --name-only -- {{reef.frontend.framework.sourcePath}})
29
+ INFRA_FILES=$(git diff "$FORK_POINT"..HEAD --name-only | grep -v '^{{reef.backend.language.sourcePath}}' | grep -v '^{{reef.frontend.framework.sourcePath}}')
30
+ SECURITY_FILES=$(git diff "$FORK_POINT"..HEAD --name-only -- {{reef.backend.language.sourcePath}} {{reef.frontend.framework.sourcePath}} | grep -iE 'auth|tenant|security|oauth|token|password|permission' || true)
31
+ ```
32
+
33
+ 判断哪些类别有变更:
34
+
35
+ | 类别 | 判断条件 |
36
+ |------|---------|
37
+ | 后端 | `BACKEND_FILES` 非空 |
38
+ | 前端 | `FRONTEND_FILES` 非空 |
39
+ | 基础配置 | `INFRA_FILES` 非空 |
40
+ | 安全敏感 | `SECURITY_FILES` 非空 |
41
+ | 无匹配 | 全部为空 |
42
+
43
+ 据此决定派发哪些 agent:
44
+
45
+ | 有变更的类别 | 派发 agent |
46
+ |-------------|-----------|
47
+ | 仅后端 | `backend-code-audit` |
48
+ | 仅前端 | `frontend-code-audit` |
49
+ | 仅基础配置 | `infra-code-audit` |
50
+ | 后端 + 基础配置 | 并行 `backend-code-audit` + `infra-code-audit` |
51
+ | 前端 + 基础配置 | 并行 `frontend-code-audit` + `infra-code-audit` |
52
+ | 全栈 | 并行 `backend-code-audit` + `frontend-code-audit` |
53
+ | 全栈 + 基础配置 | 并行 `backend-code-audit` + `frontend-code-audit` + `infra-code-audit` |
54
+ | **安全敏感变更** | 在以上基础上 **额外** 并行 `security-code-audit` |
55
+ | 无匹配 | 输出提示,不派发 agent |
56
+
57
+ > 安全敏感变更判定:SECURITY_FILES 非空 或 变更涉及权限/认证逻辑(由调用的 fork-point 范围决定)。
58
+
59
+ ### Step 2: 派发 Sub‑Agent
60
+
61
+ 每个 agent 按各自类别的文件清单构造 prompt。后端 agent 的清单含后端源文件,前端和 infra agent 只含自己的文件。
62
+
63
+ | Agent | prompt 中的文件清单 |
64
+ |-------|-------------------|
65
+ | `backend-code-audit` | 后端文件 |
66
+ | `frontend-code-audit` | 前端文件 |
67
+ | `infra-code-audit` | 基础配置文件 |
68
+ | `security-code-audit` | 安全敏感文件 + 所有变更文件中有安全风险的 diff |
69
+
70
+ ```
71
+ Fork point: {FORK_POINT}
72
+ 变更文件数: {count}
73
+ 变更文件清单:
74
+ {file_list}
75
+ ```
76
+
77
+ Agent 的 system prompt(定义在 `.claude/agents/` 目录中)包含完整的 Checklist + Rules + 输出格式。
78
+
79
+ | Agent | 定义文件 |
80
+ |-------|---------|
81
+ | `reef-review-backend` | `../../agents/reef-review-backend.md` |
82
+ | `reef-review-frontend` | `../../agents/reef-review-frontend.md` |
83
+ | `reef-review-infra` | `../../agents/reef-review-infra.md` |
84
+ | `reef-review-security` | `../../agents/reef-review-security.md` |
85
+
86
+ 多 agent 场景全部使用 `run_in_background: true` 并行执行。每个 agent 设置超时 300 秒(5 分钟),超时未返回则标记为超时,继续等待其他 agent。
87
+
88
+ ### Step 3: 汇总报告
89
+
90
+ 1. 等待所有已派发的 agent 返回(收到全部 task-notification 后才汇总)。任一 agent 超时 300 秒未返回则标记为超时,继续等待其他 agent
91
+ 2. 分章节输出各 agent 的审查报告:
92
+
93
+ ```
94
+ ## 后端代码审查报告
95
+ {后端 agent 输出}
96
+
97
+ ## 前端代码审查报告
98
+ {前端 agent 输出}
99
+
100
+ ## 基础配置审查报告
101
+ {infra agent 输出}
102
+
103
+ ## 安全审查报告
104
+ {security agent 输出(仅安全敏感变更时)}
105
+ ```
106
+
107
+ 3. 最终结论取最低评分。若某 agent 失败(API Error / 超时等),标注失败原因,忽略其评分。仅有派发过的 agent 输出对应章节。
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: reef-scope
3
+ description: 分支范围检查与拆分 — 在提交代码时验证分支是否涉及多个业务领域,以及自动拆分
4
+ allowed-tools: Bash(git:*), Bash(curl:*), Bash(python3:*), Bash(reef-scope-check.sh:*)
5
+ deepstorm:
6
+ tool: reef
7
+ ---
8
+
9
+ # 分支范围检查 (Branch Scope Validation)
10
+
11
+ 在 `git commit` 和 CI/PR 时自动检测当前分支是否涉及多个业务领域,阻止跨领域提交,并提供自动拆分能力。
12
+
13
+ ## 工作原理
14
+
15
+ ```mermaid
16
+ flowchart LR
17
+ COMMIT["git commit"] --> HOOK["pre-commit hook"]
18
+ HOOK --> CHECK["reef-scope-check.sh<br>AI 语义分析 diff"]
19
+ CHECK --> GATE{"涉及几个<br>业务领域?"}
20
+ GATE -->|"≤ 1"| PASS["✅ 通过<br>commit 继续"]
21
+ GATE -->|"> 1"| BLOCK["🚫 阻断<br>输出拆分建议"]
22
+ BLOCK --> USER{"用户确认<br>拆分?"}
23
+ USER -->|"是"| SPLIT["🔀 自动创建分支<br>拆分文件并提交"]
24
+ USER -->|"否"| ABORT["⏹ commit 取消<br>等待人工处理"]
25
+ ```
26
+
27
+ ## 命令清单
28
+
29
+ ### 检查分支范围
30
+
31
+ ```bash
32
+ # 方式1: 自动获取当前分支与 main 的 diff
33
+ bash packages/reef/hooks/reef-scope-check.sh
34
+
35
+ # 方式2: 指定基准分支
36
+ bash packages/reef/hooks/reef-scope-check.sh --diff-from develop
37
+
38
+ # 方式3: 从 stdin 传入 diff
39
+ git diff main...HEAD | bash packages/reef/hooks/reef-scope-check.sh
40
+ ```
41
+
42
+ ### 门禁检查(阻断式)
43
+
44
+ ```bash
45
+ # 本地 commit 检查(exit code 2 = 多领域)
46
+ bash packages/reef/hooks/reef-scope-gate.sh
47
+
48
+ # CI 模式
49
+ bash packages/reef/hooks/reef-scope-gate.sh --ci
50
+ ```
51
+
52
+ ### 安装与卸载
53
+
54
+ ```bash
55
+ # 安装 pre-commit hook(git commit 时自动检查)
56
+ bash packages/reef/hooks/reef-scope-setup.sh install
57
+
58
+ # 查看安装状态
59
+ bash packages/reef/hooks/reef-scope-setup.sh status
60
+
61
+ # 卸载
62
+ bash packages/reef/hooks/reef-scope-setup.sh uninstall
63
+ ```
64
+
65
+ ### 分支拆分
66
+
67
+ ```bash
68
+ # 分析并拆分多领域分支
69
+ bash packages/reef/hooks/reef-scope-split.sh
70
+ ```
71
+
72
+ ## 配置文件
73
+
74
+ 安装后生成 `.deepstorm/scope-config.json`:
75
+
76
+ ```json
77
+ {
78
+ "enabled": true,
79
+ "ciEnabled": true,
80
+ "domains": []
81
+ }
82
+ ```
83
+
84
+ - `enabled`: 本地 commit 门禁开关
85
+ - `ciEnabled`: CI 门禁开关(独立控制)
86
+ - `domains`: 项目业务领域列表(空 = AI 自由分类,非空 = AI 对齐到这些领域)
87
+
88
+ ## 使用流程
89
+
90
+ 1. **安装**: 运行一次 `reef-scope-setup.sh install`
91
+ 2. **日常开发**: 正常 `git commit`,多领域时自动阻断
92
+ 3. **被阻断时**: 查看拆分建议 → `reef-scope-split.sh` → 确认 → 自动拆分
93
+ 4. **CI 集成**: 在 CI 流程中调用 `reef-scope-ci.sh`
94
+
95
+ ## CI 集成示例
96
+
97
+ ### GitHub Actions
98
+
99
+ ```yaml
100
+ - name: Check branch scope
101
+ run: |
102
+ bash packages/reef/hooks/reef-scope-ci.sh --diff-from ${{ github.base_ref }}
103
+ ```
104
+
105
+ ### GitLab CI
106
+
107
+ ```yaml
108
+ scope-check:
109
+ script:
110
+ - bash packages/reef/hooks/reef-scope-ci.sh --diff-from $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
111
+ ```
112
+
113
+ ## 环境变量
114
+
115
+ | 变量 | 默认值 | 说明 |
116
+ |------|--------|------|
117
+ | `ANTHROPIC_API_KEY` | — | Claude API Key(优先使用) |
118
+ | `OPENAI_API_KEY` | — | OpenAI API Key(备选) |
119
+ | `LLM_MODEL` | `claude-sonnet-4-20250514` | 使用的模型 |
120
+ | `MAX_DIFF_CHARS` | 20000 | diff 截断字符数 |
121
+
122
+ ## 常见问题
123
+
124
+ **Q: 我不想在所有项目上都启用这个检查?**
125
+ A: 每个项目独立安装和配置,`scope-config.json` 中的 `enabled: false` 可关闭。
126
+
127
+ **Q: 我改了文档也要被阻断吗?**
128
+ A: 不会。文档(markdown、README 等)变更会被归类为 `documentation` 领域,不计入多领域阻断判断。
129
+
130
+ **Q: 没有 API Key 怎么办?**
131
+ A: 工具会 fallback 到跳过模式,不阻断提交但输出提示消息。
132
+
133
+ **Q: 拆分后原来分支的未提交变更还在吗?**
134
+ A: 会先自动 stash 备份,拆分执行完成后恢复。