cc-devflow 1.0.1

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 (277) hide show
  1. package/.claude/CLAUDE.md +83 -0
  2. package/.claude/agents/architecture-designer.md +443 -0
  3. package/.claude/agents/bug-analyzer.md +382 -0
  4. package/.claude/agents/checklist-agent.md +175 -0
  5. package/.claude/agents/clarify-analyst.md +50 -0
  6. package/.claude/agents/code-reviewer.md +71 -0
  7. package/.claude/agents/codex-analyzer.md +39 -0
  8. package/.claude/agents/compatibility-checker.md +580 -0
  9. package/.claude/agents/consistency-checker.md +532 -0
  10. package/.claude/agents/impact-analyzer.md +441 -0
  11. package/.claude/agents/planner.md +230 -0
  12. package/.claude/agents/prd-writer.md +320 -0
  13. package/.claude/agents/project-guidelines-generator.md +1329 -0
  14. package/.claude/agents/qa-tester.md +313 -0
  15. package/.claude/agents/release-manager.md +295 -0
  16. package/.claude/agents/security-reviewer.md +314 -0
  17. package/.claude/agents/style-guide-generator.md +458 -0
  18. package/.claude/agents/tech-architect.md +516 -0
  19. package/.claude/agents/ui-designer.md +485 -0
  20. package/.claude/commands/code-review-high.md +58 -0
  21. package/.claude/commands/core-architecture.md +429 -0
  22. package/.claude/commands/core-guidelines.md +486 -0
  23. package/.claude/commands/core-roadmap.md +439 -0
  24. package/.claude/commands/core-style.md +293 -0
  25. package/.claude/commands/flow-archive.md +245 -0
  26. package/.claude/commands/flow-checklist.md +260 -0
  27. package/.claude/commands/flow-clarify.md +136 -0
  28. package/.claude/commands/flow-constitution.md +82 -0
  29. package/.claude/commands/flow-dev.md +134 -0
  30. package/.claude/commands/flow-epic.md +150 -0
  31. package/.claude/commands/flow-fix.md +104 -0
  32. package/.claude/commands/flow-ideate.md +214 -0
  33. package/.claude/commands/flow-init.md +313 -0
  34. package/.claude/commands/flow-new.md +394 -0
  35. package/.claude/commands/flow-prd.md +131 -0
  36. package/.claude/commands/flow-qa.md +93 -0
  37. package/.claude/commands/flow-release.md +92 -0
  38. package/.claude/commands/flow-restart.md +98 -0
  39. package/.claude/commands/flow-status.md +64 -0
  40. package/.claude/commands/flow-tech.md +142 -0
  41. package/.claude/commands/flow-ui.md +189 -0
  42. package/.claude/commands/flow-update.md +111 -0
  43. package/.claude/commands/flow-upgrade.md +115 -0
  44. package/.claude/commands/flow-verify.md +96 -0
  45. package/.claude/commands/problem-analyzer.md +60 -0
  46. package/.claude/config/quality-rules.yml +161 -0
  47. package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +426 -0
  48. package/.claude/docs/design/consistency-conflict-detection-algorithms.md +658 -0
  49. package/.claude/docs/design/intent-driven-input-design.md +380 -0
  50. package/.claude/docs/design/prd-version-management-design.md +437 -0
  51. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +117 -0
  52. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +151 -0
  53. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +188 -0
  54. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +338 -0
  55. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +633 -0
  56. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +261 -0
  57. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +52 -0
  58. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +206 -0
  59. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +71 -0
  60. package/.claude/docs/templates/EPIC_TEMPLATE.md +805 -0
  61. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +213 -0
  62. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +57 -0
  63. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +148 -0
  64. package/.claude/docs/templates/PRD_TEMPLATE.md +562 -0
  65. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +276 -0
  66. package/.claude/docs/templates/REVIEW-HIGH.md +57 -0
  67. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +198 -0
  68. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +310 -0
  69. package/.claude/docs/templates/STYLE_TEMPLATE.md +1266 -0
  70. package/.claude/docs/templates/TASKS_TEMPLATE.md +523 -0
  71. package/.claude/docs/templates/TECH_DESIGN_TEMPLATE.md +1019 -0
  72. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +1436 -0
  73. package/.claude/guides/agent-guides/agent-coordination-guide.md +459 -0
  74. package/.claude/guides/project-guidelines-system.md +463 -0
  75. package/.claude/guides/technical-guides/datetime-handling-guide.md +563 -0
  76. package/.claude/guides/technical-guides/git-github-guide.md +642 -0
  77. package/.claude/guides/technical-guides/test-execution-guide.md +618 -0
  78. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +217 -0
  79. package/.claude/guides/workflow-guides/flow-orchestrator.md +282 -0
  80. package/.claude/hooks/checklist-gate.js +397 -0
  81. package/.claude/hooks/error-handling-reminder.sh +12 -0
  82. package/.claude/hooks/error-handling-reminder.ts +459 -0
  83. package/.claude/hooks/post-tool-use-tracker.sh +280 -0
  84. package/.claude/hooks/pre-tool-use-guardrail.sh +36 -0
  85. package/.claude/hooks/pre-tool-use-guardrail.ts +342 -0
  86. package/.claude/hooks/skill-activation-prompt.sh +36 -0
  87. package/.claude/hooks/skill-activation-prompt.ts +214 -0
  88. package/.claude/hooks/state/skills-used-test-guard.json +3 -0
  89. package/.claude/rules/devflow-conventions.md +305 -0
  90. package/.claude/rules/project-constitution.md +748 -0
  91. package/.claude/schemas/constitution.schema.json +43 -0
  92. package/.claude/scripts/analyze-upgrade-impact.sh +200 -0
  93. package/.claude/scripts/archive-requirement.sh +351 -0
  94. package/.claude/scripts/calculate-checklist-completion.sh +243 -0
  95. package/.claude/scripts/calculate-quarter.sh +206 -0
  96. package/.claude/scripts/check-dependencies.sh +409 -0
  97. package/.claude/scripts/check-prerequisites.sh +232 -0
  98. package/.claude/scripts/check-task-status.sh +264 -0
  99. package/.claude/scripts/checklist-errors.sh +131 -0
  100. package/.claude/scripts/common.sh +570 -0
  101. package/.claude/scripts/consolidate-research.sh +182 -0
  102. package/.claude/scripts/create-requirement.sh +426 -0
  103. package/.claude/scripts/export-contracts.sh +117 -0
  104. package/.claude/scripts/extract-data-model.sh +78 -0
  105. package/.claude/scripts/generate-clarification-questions.sh +377 -0
  106. package/.claude/scripts/generate-clarification-report.sh +463 -0
  107. package/.claude/scripts/generate-quickstart.sh +146 -0
  108. package/.claude/scripts/generate-research-tasks.sh +157 -0
  109. package/.claude/scripts/generate-status-report.sh +523 -0
  110. package/.claude/scripts/generate-tech-analysis.sh +46 -0
  111. package/.claude/scripts/locate-requirement-in-roadmap.sh +233 -0
  112. package/.claude/scripts/manage-constitution.sh +602 -0
  113. package/.claude/scripts/mark-task-complete.sh +198 -0
  114. package/.claude/scripts/populate-research-tasks.sh +259 -0
  115. package/.claude/scripts/recover-workflow.sh +460 -0
  116. package/.claude/scripts/run-clarify-scan.sh +601 -0
  117. package/.claude/scripts/run-high-review.sh +62 -0
  118. package/.claude/scripts/run-problem-analysis.sh +68 -0
  119. package/.claude/scripts/setup-epic.sh +173 -0
  120. package/.claude/scripts/sync-roadmap-progress.sh +300 -0
  121. package/.claude/scripts/sync-task-marks.sh +199 -0
  122. package/.claude/scripts/test-clarify-scan.sh +515 -0
  123. package/.claude/scripts/update-agent-context.sh +806 -0
  124. package/.claude/scripts/validate-constitution.sh +567 -0
  125. package/.claude/scripts/validate-hooks.sh +487 -0
  126. package/.claude/scripts/validate-research.sh +332 -0
  127. package/.claude/scripts/validate-scope-boundary.sh +493 -0
  128. package/.claude/scripts/verify-setup.sh +37 -0
  129. package/.claude/settings.json +76 -0
  130. package/.claude/skills/_reference-implementations/README.md +96 -0
  131. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +302 -0
  132. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +451 -0
  133. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +307 -0
  134. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +638 -0
  135. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +275 -0
  136. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +224 -0
  137. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +213 -0
  138. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +756 -0
  139. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +336 -0
  140. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +789 -0
  141. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +235 -0
  142. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +754 -0
  143. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +399 -0
  144. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +331 -0
  145. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +872 -0
  146. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +502 -0
  147. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +767 -0
  148. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +502 -0
  149. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +501 -0
  150. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +406 -0
  151. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +364 -0
  152. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +428 -0
  153. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +418 -0
  154. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +229 -0
  155. package/.claude/skills/constitution-guardian/SKILL.md +306 -0
  156. package/.claude/skills/devflow-constitution-quick-ref/SKILL.md +374 -0
  157. package/.claude/skills/devflow-file-standards/SKILL.md +353 -0
  158. package/.claude/skills/devflow-tdd-enforcer/SKILL.md +192 -0
  159. package/.claude/skills/skill-developer/ADVANCED.md +197 -0
  160. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
  161. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
  162. package/.claude/skills/skill-developer/SKILL.md +426 -0
  163. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
  164. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
  165. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
  166. package/.claude/skills/skill-rules.json +213 -0
  167. package/.claude/tests/README.md +300 -0
  168. package/.claude/tests/TODO.md +69 -0
  169. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  170. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  171. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  172. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  173. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  174. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  175. package/.claude/tests/constitution/run_all_constitution_tests.sh +111 -0
  176. package/.claude/tests/constitution/test_agent_assignment.sh +207 -0
  177. package/.claude/tests/constitution/test_article_coverage.sh +201 -0
  178. package/.claude/tests/constitution/test_template_completeness.sh +150 -0
  179. package/.claude/tests/constitution/test_version_consistency.sh +120 -0
  180. package/.claude/tests/fixtures/spec_delta_full.md +16 -0
  181. package/.claude/tests/fixtures/tasks_progress_sample.md +5 -0
  182. package/.claude/tests/run-all-tests.sh +229 -0
  183. package/.claude/tests/scripts/run.sh +30 -0
  184. package/.claude/tests/scripts/test-framework.sh +128 -0
  185. package/.claude/tests/scripts/test_check_prerequisites.sh +511 -0
  186. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +504 -0
  187. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +505 -0
  188. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +506 -0
  189. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +507 -0
  190. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +508 -0
  191. package/.claude/tests/scripts/test_check_task_status.sh +499 -0
  192. package/.claude/tests/scripts/test_common.sh +244 -0
  193. package/.claude/tests/scripts/test_generate_status_report.sh +71 -0
  194. package/.claude/tests/scripts/test_mark_task_complete.sh +441 -0
  195. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +410 -0
  196. package/.claude/tests/scripts/test_recover_workflow.sh +304 -0
  197. package/.claude/tests/scripts/test_setup_epic.sh +437 -0
  198. package/.claude/tests/scripts/test_sync_task_marks.sh +196 -0
  199. package/.claude/tests/scripts/test_validate_constitution.sh +74 -0
  200. package/.claude/tests/scripts/test_validate_research.sh +462 -0
  201. package/.claude/tests/slugify.bats +82 -0
  202. package/.claude/tests/test-framework.sh +732 -0
  203. package/.claude/tests/test_analyze_upgrade_impact.py +34 -0
  204. package/.claude/tests/test_consolidate_research.py +48 -0
  205. package/.claude/tests/test_export_contracts.py +43 -0
  206. package/.claude/tests/test_extract_data_model.py +33 -0
  207. package/.claude/tests/test_generate_quickstart.py +50 -0
  208. package/.claude/tests/test_generate_research_tasks.py +52 -0
  209. package/.claude/tsc-cache/6e64f818-6398-49ca-8623-581a9af85c44/edited-files.log +1 -0
  210. package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/affected-repos.txt +1 -0
  211. package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/edited-files.log +1 -0
  212. package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/affected-repos.txt +1 -0
  213. package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/edited-files.log +1 -0
  214. package/CHANGELOG.md +507 -0
  215. package/LICENSE +21 -0
  216. package/README.md +534 -0
  217. package/README.zh-CN.md +530 -0
  218. package/bin/adapt.js +240 -0
  219. package/bin/cc-devflow-cli.js +185 -0
  220. package/bin/cc-devflow.js +78 -0
  221. package/config/adapters.yml +5 -0
  222. package/config/schema/adapters.schema.json +44 -0
  223. package/docs/CLAUDE.md +26 -0
  224. package/docs/commands/README.md +61 -0
  225. package/docs/commands/README.zh-CN.md +55 -0
  226. package/docs/commands/core-roadmap.md +106 -0
  227. package/docs/commands/core-roadmap.zh-CN.md +102 -0
  228. package/docs/commands/core-style.md +405 -0
  229. package/docs/commands/core-style.zh-CN.md +405 -0
  230. package/docs/commands/flow-init.md +134 -0
  231. package/docs/commands/flow-init.zh-CN.md +163 -0
  232. package/docs/commands/flow-new.md +274 -0
  233. package/docs/commands/flow-new.zh-CN.md +270 -0
  234. package/docs/guides/getting-started.md +204 -0
  235. package/docs/guides/getting-started.zh-CN.md +152 -0
  236. package/lib/adapters/adapter-interface.js +57 -0
  237. package/lib/adapters/claude-adapter.js +74 -0
  238. package/lib/adapters/codex-adapter.js +40 -0
  239. package/lib/adapters/config-validator.js +68 -0
  240. package/lib/adapters/logger.js +42 -0
  241. package/lib/adapters/registry.js +153 -0
  242. package/lib/compiler/CLAUDE.md +92 -0
  243. package/lib/compiler/__tests__/drift.test.js +215 -0
  244. package/lib/compiler/__tests__/errors.test.js +184 -0
  245. package/lib/compiler/__tests__/incremental.test.js +174 -0
  246. package/lib/compiler/__tests__/integration.test.js +174 -0
  247. package/lib/compiler/__tests__/manifest.test.js +233 -0
  248. package/lib/compiler/__tests__/parser.test.js +456 -0
  249. package/lib/compiler/__tests__/schemas.test.js +301 -0
  250. package/lib/compiler/__tests__/skills-registry.test.js +125 -0
  251. package/lib/compiler/__tests__/transformer.test.js +286 -0
  252. package/lib/compiler/emitters/antigravity-emitter.js +171 -0
  253. package/lib/compiler/emitters/base-emitter.js +73 -0
  254. package/lib/compiler/emitters/codex-emitter.js +52 -0
  255. package/lib/compiler/emitters/cursor-emitter.js +31 -0
  256. package/lib/compiler/emitters/index.js +50 -0
  257. package/lib/compiler/emitters/qwen-emitter.js +39 -0
  258. package/lib/compiler/errors.js +119 -0
  259. package/lib/compiler/index.js +256 -0
  260. package/lib/compiler/manifest.js +242 -0
  261. package/lib/compiler/parser.js +258 -0
  262. package/lib/compiler/platforms.js +113 -0
  263. package/lib/compiler/resource-copier.js +320 -0
  264. package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +191 -0
  265. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +109 -0
  266. package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +123 -0
  267. package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +123 -0
  268. package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +253 -0
  269. package/lib/compiler/rules-emitters/base-rules-emitter.js +83 -0
  270. package/lib/compiler/rules-emitters/codex-rules-emitter.js +116 -0
  271. package/lib/compiler/rules-emitters/cursor-rules-emitter.js +98 -0
  272. package/lib/compiler/rules-emitters/index.js +71 -0
  273. package/lib/compiler/rules-emitters/qwen-rules-emitter.js +70 -0
  274. package/lib/compiler/schemas.js +144 -0
  275. package/lib/compiler/skills-registry.js +225 -0
  276. package/lib/compiler/transformer.js +236 -0
  277. package/package.json +50 -0
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+ # 技能自动激活 Hook - Bash 包装器
5
+ # ═══════════════════════════════════════════════════════════════════════════════
6
+ #
7
+ # 【核心功能】
8
+ # Bash 脚本包装器,调用 TypeScript 实现的技能激活逻辑
9
+ #
10
+ # 【工作原理】
11
+ # 1. 切换到 hooks 目录
12
+ # 2. 通过管道传递 stdin 到 TypeScript 脚本
13
+ # 3. 使用 npx tsx 运行 TypeScript(无需编译)
14
+ #
15
+ # 【为什么需要这个包装器?】
16
+ # - Claude Code hooks 必须是可执行的 shell 脚本
17
+ # - 此脚本负责设置环境并调用实际的 TypeScript 实现
18
+ #
19
+ # 【设计原则】
20
+ # KISS - Keep It Simple, Stupid
21
+ # 包装器只做一件事:调用 TypeScript 实现
22
+ #
23
+ # ═══════════════════════════════════════════════════════════════════════════════
24
+
25
+ # 错误时立即退出
26
+ set -e
27
+
28
+ # 切换到 hooks 目录(确保能找到 TypeScript 文件)
29
+ cd "$CLAUDE_PROJECT_DIR/.claude/hooks"
30
+
31
+ # 通过管道传递 stdin 到 TypeScript 脚本
32
+ # - cat: 读取 stdin
33
+ # - |: 管道传递
34
+ # - npx tsx: 直接运行 TypeScript(无需 tsc 编译)
35
+ # - skill-activation-prompt.ts: TypeScript 实现
36
+ cat | npx tsx skill-activation-prompt.ts
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ // 技能自动激活 Hook - TypeScript 实现
5
+ // ═══════════════════════════════════════════════════════════════════════════════
6
+ //
7
+ // 【核心功能】
8
+ // 在用户每次提交 prompt 时自动分析并建议相关技能
9
+ //
10
+ // 【工作原理】
11
+ // 1. 读取用户输入的 prompt
12
+ // 2. 加载 skill-rules.json 配置文件
13
+ // 3. 根据关键词和意图模式匹配技能
14
+ // 4. 按优先级分组并输出建议
15
+ //
16
+ // 【设计哲学】
17
+ // "工具应该适应人的思维,而不是让人适应工具"
18
+ // 技能在你需要时激活,而不是在你记得时激活
19
+ //
20
+ // ═══════════════════════════════════════════════════════════════════════════════
21
+
22
+ import { readFileSync } from 'fs';
23
+ import { join } from 'path';
24
+
25
+ // ───────────────────────────────────────────────────────────────────────────────
26
+ // 类型定义
27
+ // ───────────────────────────────────────────────────────────────────────────────
28
+
29
+ /**
30
+ * Hook 输入接口
31
+ * Claude Code 传递给 UserPromptSubmit hook 的数据结构
32
+ */
33
+ interface HookInput {
34
+ session_id: string; // 会话 ID
35
+ transcript_path: string; // 对话记录路径
36
+ cwd: string; // 当前工作目录
37
+ permission_mode: string; // 权限模式
38
+ prompt: string; // 用户输入的提示词
39
+ }
40
+
41
+ /**
42
+ * 提示触发器配置
43
+ * 定义如何通过用户输入触发技能
44
+ */
45
+ interface PromptTriggers {
46
+ keywords?: string[]; // 关键词列表(精确匹配)
47
+ intentPatterns?: string[]; // 意图模式列表(正则表达式)
48
+ }
49
+
50
+ /**
51
+ * 技能规则配置
52
+ * 定义单个技能的激活条件和优先级
53
+ */
54
+ interface SkillRule {
55
+ type: 'guardrail' | 'domain'; // 技能类型:护栏 | 领域
56
+ enforcement: 'block' | 'suggest' | 'warn'; // 强制级别:阻塞 | 建议 | 警告
57
+ priority: 'critical' | 'high' | 'medium' | 'low'; // 优先级
58
+ promptTriggers?: PromptTriggers; // 提示触发器
59
+ }
60
+
61
+ /**
62
+ * 技能规则集合
63
+ * skill-rules.json 的根数据结构
64
+ */
65
+ interface SkillRules {
66
+ version: string; // 规则版本
67
+ skills: Record<string, SkillRule>; // 技能名称 -> 规则配置
68
+ }
69
+
70
+ /**
71
+ * 匹配到的技能
72
+ * 内部使用,记录匹配结果
73
+ */
74
+ interface MatchedSkill {
75
+ name: string; // 技能名称
76
+ matchType: 'keyword' | 'intent'; // 匹配类型:关键词 | 意图
77
+ config: SkillRule; // 技能配置
78
+ }
79
+
80
+ // ───────────────────────────────────────────────────────────────────────────────
81
+ // 主函数
82
+ // ───────────────────────────────────────────────────────────────────────────────
83
+
84
+ async function main() {
85
+ try {
86
+ // ┌─────────────────────────────────────────────────────────────────────┐
87
+ // │ 步骤 1: 读取输入 │
88
+ // └─────────────────────────────────────────────────────────────────────┘
89
+ // 从 stdin 读取 Claude Code 传递的 JSON 数据
90
+ const input = readFileSync(0, 'utf-8');
91
+ const data: HookInput = JSON.parse(input);
92
+ const prompt = data.prompt.toLowerCase(); // 转小写便于匹配
93
+
94
+ // ┌─────────────────────────────────────────────────────────────────────┐
95
+ // │ 步骤 2: 加载技能规则配置 │
96
+ // └─────────────────────────────────────────────────────────────────────┘
97
+ const projectDir = process.env.CLAUDE_PROJECT_DIR || process.cwd();
98
+ const rulesPath = join(projectDir, '.claude', 'skills', 'skill-rules.json');
99
+ const rules: SkillRules = JSON.parse(readFileSync(rulesPath, 'utf-8'));
100
+
101
+ // 存储匹配到的技能
102
+ const matchedSkills: MatchedSkill[] = [];
103
+
104
+ // ┌─────────────────────────────────────────────────────────────────────┐
105
+ // │ 步骤 3: 遍历所有技能,检查是否匹配 │
106
+ // └─────────────────────────────────────────────────────────────────────┘
107
+ for (const [skillName, config] of Object.entries(rules.skills)) {
108
+ const triggers = config.promptTriggers;
109
+
110
+ // 如果没有配置触发器,跳过此技能
111
+ if (!triggers) {
112
+ continue;
113
+ }
114
+
115
+ // ┌───────────────────────────────────────────────────────────────┐
116
+ // │ 3.1 关键词匹配 │
117
+ // └───────────────────────────────────────────────────────────────┘
118
+ // 检查 prompt 中是否包含配置的关键词
119
+ if (triggers.keywords) {
120
+ const keywordMatch = triggers.keywords.some(kw =>
121
+ prompt.includes(kw.toLowerCase())
122
+ );
123
+ if (keywordMatch) {
124
+ matchedSkills.push({ name: skillName, matchType: 'keyword', config });
125
+ continue; // 匹配到就继续下一个技能
126
+ }
127
+ }
128
+
129
+ // ┌───────────────────────────────────────────────────────────────┐
130
+ // │ 3.2 意图模式匹配 │
131
+ // └───────────────────────────────────────────────────────────────┘
132
+ // 使用正则表达式匹配更复杂的意图模式
133
+ if (triggers.intentPatterns) {
134
+ const intentMatch = triggers.intentPatterns.some(pattern => {
135
+ const regex = new RegExp(pattern, 'i'); // 'i' = 忽略大小写
136
+ return regex.test(prompt);
137
+ });
138
+ if (intentMatch) {
139
+ matchedSkills.push({ name: skillName, matchType: 'intent', config });
140
+ }
141
+ }
142
+ }
143
+
144
+ // ┌─────────────────────────────────────────────────────────────────────┐
145
+ // │ 步骤 4: 生成输出(如果有匹配) │
146
+ // └─────────────────────────────────────────────────────────────────────┘
147
+ if (matchedSkills.length > 0) {
148
+ let output = '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n';
149
+ output += '🎯 SKILL ACTIVATION CHECK\n';
150
+ output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n';
151
+
152
+ // ┌───────────────────────────────────────────────────────────────┐
153
+ // │ 4.1 按优先级分组 │
154
+ // └───────────────────────────────────────────────────────────────┘
155
+ const critical = matchedSkills.filter(s => s.config.priority === 'critical');
156
+ const high = matchedSkills.filter(s => s.config.priority === 'high');
157
+ const medium = matchedSkills.filter(s => s.config.priority === 'medium');
158
+ const low = matchedSkills.filter(s => s.config.priority === 'low');
159
+
160
+ // ┌───────────────────────────────────────────────────────────────┐
161
+ // │ 4.2 输出各优先级的技能 │
162
+ // └───────────────────────────────────────────────────────────────┘
163
+
164
+ // 关键技能(必需)
165
+ if (critical.length > 0) {
166
+ output += '⚠️ CRITICAL SKILLS (REQUIRED):\n';
167
+ critical.forEach(s => output += ` → ${s.name}\n`);
168
+ output += '\n';
169
+ }
170
+
171
+ // 推荐技能
172
+ if (high.length > 0) {
173
+ output += '📚 RECOMMENDED SKILLS:\n';
174
+ high.forEach(s => output += ` → ${s.name}\n`);
175
+ output += '\n';
176
+ }
177
+
178
+ // 建议技能
179
+ if (medium.length > 0) {
180
+ output += '💡 SUGGESTED SKILLS:\n';
181
+ medium.forEach(s => output += ` → ${s.name}\n`);
182
+ output += '\n';
183
+ }
184
+
185
+ // 可选技能
186
+ if (low.length > 0) {
187
+ output += '📌 OPTIONAL SKILLS:\n';
188
+ low.forEach(s => output += ` → ${s.name}\n`);
189
+ output += '\n';
190
+ }
191
+
192
+ // 操作提示
193
+ output += 'ACTION: Use Skill tool BEFORE responding\n';
194
+ output += '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n';
195
+
196
+ // 输出到 stdout(Claude Code 会捕获并显示给用户)
197
+ console.log(output);
198
+ }
199
+
200
+ process.exit(0); // 成功退出
201
+ } catch (err) {
202
+ // 错误处理:输出错误信息到 stderr
203
+ console.error('Error in skill-activation-prompt hook:', err);
204
+ process.exit(1); // 错误退出
205
+ }
206
+ }
207
+
208
+ // ───────────────────────────────────────────────────────────────────────────────
209
+ // 程序入口
210
+ // ───────────────────────────────────────────────────────────────────────────────
211
+ main().catch(err => {
212
+ console.error('Uncaught error:', err);
213
+ process.exit(1);
214
+ });
@@ -0,0 +1,3 @@
1
+ [
2
+ "devflow-tdd-enforcer"
3
+ ]
@@ -0,0 +1,305 @@
1
+ # CC-DevFlow 工作流约定
2
+
3
+ > **类型**: 工作流约定 (Workflow Conventions)
4
+ > **适用**: CC-DevFlow 需求开发流程
5
+ > **层级**: Rules Layer (具体约定和格式)
6
+ > **前置**: 遵循 Constitution 和 Core Patterns
7
+
8
+ ---
9
+
10
+ ## 🎯 核心约定
11
+
12
+ ### REQ-ID 格式规范
13
+ - **格式**: `REQ-\d+` (例如: REQ-123, REQ-001)
14
+ - **唯一性**: 在当前仓库范围内必须唯一
15
+ - **禁止**: 重复使用已存在的 REQ-ID
16
+
17
+ ### 命令参数格式
18
+ ```bash
19
+ # 标准格式
20
+ /flow-new "REQ-123|支持用户下单|https://plan.example.com/Q1"
21
+
22
+ # 多文档格式
23
+ /flow-new "REQ-124|权限管理|https://spec.doc,https://api.doc"
24
+
25
+ # 无外部文档
26
+ /flow-new "REQ-125|数据导出"
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 📁 文件组织约定
32
+
33
+ ### 目录结构
34
+ ```text
35
+ devflow/requirements/${reqId}/
36
+ ├── PRD.md # 产品需求文档
37
+ ├── UI_PROTOTYPE.html # UI原型 ⚡️ 条件生成 (仅UI需求)
38
+ ├── EPIC.md # Epic 规划
39
+ ├── TASKS.md # 任务分解 (单文件管理所有任务)
40
+ ├── tasks/ # 任务执行标记
41
+ │ ├── TASK_001.completed # 任务完成标记
42
+ │ ├── TASK_002.completed
43
+ │ └── IMPLEMENTATION_PLAN.md # dev-implementer 输出
44
+ ├── research/ # 研究资料
45
+ │ ├── ${reqId}_plan_1.md
46
+ │ ├── ${reqId}_plan_2.md
47
+ │ └── ui_design_strategy.md # UI设计策略 (可选)
48
+ ├── TEST_PLAN.md # 测试计划
49
+ ├── TEST_REPORT.md # 测试报告
50
+ ├── SECURITY_PLAN.md # 安全计划
51
+ ├── SECURITY_REPORT.md # 安全报告
52
+ ├── RELEASE_PLAN.md # 发布计划
53
+ └── EXECUTION_LOG.md # 执行日志
54
+ ```
55
+
56
+ ### 文档命名约定
57
+ - **PRD 文件**: `PRD.md`
58
+ - **Epic 文件**: `EPIC.md`
59
+ - **Tasks 文件**: `TASKS.md` (所有任务集中在一个文件)
60
+ - **任务完成标记**: `tasks/TASK_{ID}.completed` (空文件)
61
+ - **研究文件**: `${reqId}_plan_{序号}.md`
62
+ - **测试报告**: `TEST_REPORT.md`
63
+ - **执行日志**: `EXECUTION_LOG.md`
64
+
65
+ ---
66
+
67
+ ## 🌿 Git 分支约定
68
+
69
+ ### 分支命名
70
+ ```bash
71
+ # 标准格式
72
+ feature/${reqId}-${slug(title)}
73
+
74
+ # 示例
75
+ feature/REQ-123-user-order-support
76
+ feature/REQ-124-permission-management
77
+ ```
78
+
79
+ ### 分支操作流程
80
+ 1. 检查当前在 main 分支且状态干净
81
+ 2. 创建特性分支
82
+ 3. 实施开发 (TDD方式)
83
+ 4. 质量闸检查
84
+ 5. 创建 PR
85
+ 6. 合并后清理分支
86
+
87
+ ---
88
+
89
+ ## 💬 提交信息约定
90
+
91
+ ### 提交格式
92
+ ```text
93
+ {type}({reqId}): {taskTitle}
94
+
95
+ {详细描述}
96
+
97
+ - 实现功能点1
98
+ - 实现功能点2
99
+
100
+ Co-authored-by: Claude <claude@anthropic.com>
101
+ ```
102
+
103
+ ### 提交类型
104
+ - `feat(REQ-xxx)`: 新功能
105
+ - `fix(REQ-xxx)`: 错误修复
106
+ - `docs(REQ-xxx)`: 文档更新
107
+ - `test(REQ-xxx)`: 测试添加/修改
108
+ - `refactor(REQ-xxx)`: 重构
109
+ - `chore(REQ-xxx)`: 构建、配置等杂务
110
+
111
+ ---
112
+
113
+ ## 🤖 子代理调用约定
114
+
115
+ ### 调用顺序 (7个阶段)
116
+ ```text
117
+ 1. flow-init → 初始化需求结构
118
+
119
+ 2. flow-prd → prd-writer (研究型) → PRD.md
120
+
121
+ 2.5 flow-ui → ui-designer (研究型) → UI_PROTOTYPE.html ⚡️ 条件触发
122
+ ↓ 仅在检测到UI需求时自动执行
123
+ 3. flow-epic → planner (研究型) → EPIC.md + TASKS.md
124
+ ↓ 如存在UI_PROTOTYPE.html, 自动集成UI上下文
125
+ 4. flow-dev → dev-implementer (研究型, 每个任务) → IMPLEMENTATION_PLAN.md
126
+ → main-agent (执行型) → 代码实现
127
+ ↓ 前端任务会引用UI_PROTOTYPE.html
128
+ 5. flow-qa → qa-tester (研究型) → TEST_PLAN.md
129
+ → security-reviewer (研究型) → SECURITY_PLAN.md
130
+ → main-agent (执行型) → 运行测试、安全扫描
131
+
132
+ 6. flow-release → release-manager (研究型) → RELEASE_PLAN.md
133
+ → main-agent (执行型) → 创建PR、合并
134
+ ```
135
+
136
+ ### 状态同步约定
137
+ - 每个阶段完成后更新 `orchestration_status.json`
138
+ - 每个任务完成后创建 `tasks/TASK_{ID}.completed`
139
+ - 所有重要操作记录到 `EXECUTION_LOG.md`
140
+
141
+ ---
142
+
143
+ ## ⚠️ 错误处理约定
144
+
145
+ ### 错误分类
146
+ 1. **参数错误**: 命令格式、REQ-ID 格式等
147
+ 2. **环境错误**: Git状态、权限、依赖等
148
+ 3. **网络错误**: URL访问失败
149
+ 4. **质量闸错误**: 代码质量不达标
150
+ 5. **系统错误**: 子代理异常、文件操作失败
151
+
152
+ ### 错误恢复命令
153
+ ```bash
154
+ # 从特定阶段继续
155
+ /flow-restart "REQ-123" --from=prd
156
+ /flow-restart "REQ-123" --from=dev
157
+ /flow-restart "REQ-123" --from=qa
158
+ ```
159
+
160
+ ### 错误日志格式
161
+ ```yaml
162
+ ---
163
+ error_type: parameter_error
164
+ timestamp: 2024-01-15T10:30:00Z
165
+ req_id: REQ-123
166
+ step: parameter_parsing
167
+ ---
168
+
169
+ # 错误详情
170
+ 参数格式不正确:缺少标题部分
171
+
172
+ ## 解决方案
173
+ 请使用正确格式:/flow-new "REQ-123|需求标题|计划URL"
174
+ ```
175
+
176
+ ---
177
+
178
+ ## 📊 文档元数据约定
179
+
180
+ ### YAML Frontmatter 格式
181
+ ```yaml
182
+ ---
183
+ req_id: "REQ-123"
184
+ title: "支持用户下单"
185
+ created_at: "2024-01-15T10:00:00Z"
186
+ updated_at: "2024-01-15T15:30:00Z"
187
+ version: "1.0.0"
188
+ status: "completed"
189
+ author: "prd-writer"
190
+ ---
191
+ ```
192
+
193
+ ---
194
+
195
+ ## 🎯 性能指标约定
196
+
197
+ ### 时间要求
198
+ - **整个流程**: 90% 情况下在 15 分钟内完成
199
+ - **单个任务**: 实施时间不超过 5 分钟
200
+ - **质量闸检查**: 不超过 2 分钟
201
+
202
+ ### 资源约束
203
+ - **内存占用**: < 500MB (峰值)
204
+ - **并发需求**: 支持 3 个并发需求
205
+ - **文档数量**: 支持 1000 个需求文档
206
+
207
+ ---
208
+
209
+ ## ⚙️ 配置约定
210
+
211
+ ### .claude/settings.json 配置项
212
+ ```json
213
+ {
214
+ "devflow": {
215
+ "baseBranch": "main",
216
+ "autoApprove": false,
217
+ "qualityGate": {
218
+ "minCoverage": 80,
219
+ "strictMode": true
220
+ },
221
+ "templates": {
222
+ "customPrdTemplate": ".claude/templates/custom-prd.md"
223
+ }
224
+ }
225
+ }
226
+ ```
227
+
228
+ ### 环境变量
229
+ ```bash
230
+ # 调试模式
231
+ export FLOW_DEBUG=1
232
+
233
+ # 超时设置 (秒)
234
+ export FLOW_TIMEOUT=300
235
+
236
+ # 最小测试覆盖率
237
+ export MIN_COVERAGE=80
238
+ ```
239
+
240
+ ---
241
+
242
+ ## 🔧 工具集成约定
243
+
244
+ ### 钩子脚本
245
+ - `pre-push-guard.sh`: 推送前质量检查
246
+ - `markdown_formatter.py`: 文档格式化
247
+ - `auto-progress-update.py`: 进度自动更新
248
+
249
+ ### 测试脚本
250
+ - `.claude/tests/run-all-tests.sh`: 运行所有测试
251
+ - `.claude/tests/scripts/test_*.sh`: 单个测试套件
252
+
253
+ ---
254
+
255
+ ## 🛠️ 故障排除约定
256
+
257
+ ### 环境检查
258
+ ```bash
259
+ # 检查 Git 状态
260
+ git status
261
+
262
+ # 检查 GitHub CLI
263
+ gh auth status
264
+
265
+ # 检查 npm 脚本
266
+ npm run --silent
267
+
268
+ # 检查权限
269
+ ls -la .claude/
270
+ ```
271
+
272
+ ### 日志查看
273
+ ```bash
274
+ # 查看执行日志
275
+ tail -f devflow/requirements/REQ-123/EXECUTION_LOG.md
276
+
277
+ # 查看错误日志
278
+ tail -f .claude/logs/flow-*.log
279
+ ```
280
+
281
+ ---
282
+
283
+ ## 📋 最佳实践清单
284
+
285
+ ### 开始新需求前
286
+ - [ ] 确认 REQ-ID 唯一性
287
+ - [ ] 准备完整的需求输入 (标题 + 可选URL)
288
+ - [ ] 确保 Git 工作目录干净
289
+ - [ ] 在 main 分支上启动
290
+
291
+ ### 开发过程中
292
+ - [ ] 遵循 TDD 顺序 (Tests First → Implementation)
293
+ - [ ] 每个任务完成后立即提交
294
+ - [ ] 定期同步主分支
295
+ - [ ] 及时更新文档
296
+
297
+ ### 发布前检查
298
+ - [ ] 所有测试通过
299
+ - [ ] 测试覆盖率 ≥ 80%
300
+ - [ ] 安全扫描无高危问题
301
+ - [ ] 文档完整且格式正确
302
+
303
+ ---
304
+
305
+ **重要提示**: 所有约定都是强制性的。这些约定确保 CC-DevFlow 工作流的一致性和可预测性。