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
package/bin/adapt.js ADDED
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI Entry Point - bin/adapt.js (v2.0)
4
+ *
5
+ * Usage:
6
+ * npm run adapt # Compile all (commands + skills + rules)
7
+ * npm run adapt -- --platform codex # Compile for Codex only
8
+ * npm run adapt -- --all # Compile for all platforms (explicit)
9
+ * npm run adapt -- --check # Check for drift
10
+ * npm run adapt -- --skills # Generate skills-registry.json only
11
+ * npm run adapt -- --rules # Generate rules entry files only
12
+ * npm run adapt -- --verbose # Show detailed output
13
+ * npm run adapt -- --help # Show help
14
+ *
15
+ * Exit Codes:
16
+ * 0: Success
17
+ * 1: Compilation error
18
+ * 2: Drift detected (with --check)
19
+ * 3: Invalid arguments
20
+ */
21
+ const { compile, PLATFORMS } = require('../lib/compiler/index.js');
22
+ const { generateSkillsRegistryV2, writeSkillsRegistry } = require('../lib/compiler/skills-registry.js');
23
+ const { emitAllRules } = require('../lib/compiler/rules-emitters/index.js');
24
+
25
+ // ============================================================
26
+ // parseArgs - 解析命令行参数
27
+ // ============================================================
28
+ function parseArgs(argv) {
29
+ const args = {
30
+ platform: null,
31
+ all: false,
32
+ check: false,
33
+ verbose: false,
34
+ help: false,
35
+ skills: false,
36
+ rules: false
37
+ };
38
+
39
+ for (let i = 0; i < argv.length; i++) {
40
+ const arg = argv[i];
41
+
42
+ switch (arg) {
43
+ case '--platform':
44
+ args.platform = argv[++i];
45
+ break;
46
+ case '--all':
47
+ args.all = true;
48
+ break;
49
+ case '--check':
50
+ args.check = true;
51
+ break;
52
+ case '--verbose':
53
+ args.verbose = true;
54
+ break;
55
+ case '--help':
56
+ case '-h':
57
+ args.help = true;
58
+ break;
59
+ case '--skills':
60
+ args.skills = true;
61
+ break;
62
+ case '--rules':
63
+ args.rules = true;
64
+ break;
65
+ default:
66
+ if (arg.startsWith('-')) {
67
+ console.error(`Unknown option: ${arg}`);
68
+ process.exit(3);
69
+ }
70
+ }
71
+ }
72
+
73
+ return args;
74
+ }
75
+
76
+ // ============================================================
77
+ // showHelp - 显示帮助信息
78
+ // ============================================================
79
+ function showHelp() {
80
+ console.log(`
81
+ Usage: npm run adapt [options]
82
+
83
+ Adapter Compiler - Compile CC-DevFlow to multi-platform formats
84
+
85
+ Options:
86
+ --platform <name> Compile for specific platform (${PLATFORMS.join(', ')})
87
+ --all Compile for all platforms (default if no --platform)
88
+ --check Check for drift without compiling
89
+ --skills Generate skills-registry.json only
90
+ --rules Generate rules entry files only
91
+ --verbose Show detailed compilation output
92
+ --help, -h Show this help message
93
+
94
+ Examples:
95
+ npm run adapt # Full compilation
96
+ npm run adapt -- --platform codex # Compile for Codex only
97
+ npm run adapt -- --skills # Generate skills registry
98
+ npm run adapt -- --rules # Generate rules entry files
99
+ npm run adapt -- --check # Check for drift
100
+ npm run adapt -- --verbose # Show detailed output
101
+
102
+ Exit Codes:
103
+ 0 - Success
104
+ 1 - Compilation error
105
+ 2 - Drift detected (with --check)
106
+ 3 - Invalid arguments
107
+ `);
108
+ }
109
+
110
+ // ============================================================
111
+ // main - 主函数
112
+ // ============================================================
113
+ async function main() {
114
+ const args = parseArgs(process.argv.slice(2));
115
+
116
+ // 显示帮助
117
+ if (args.help) {
118
+ showHelp();
119
+ process.exit(0);
120
+ }
121
+
122
+ // 确定目标平台
123
+ let platforms;
124
+ if (args.platform) {
125
+ if (!PLATFORMS.includes(args.platform)) {
126
+ console.error(`Unknown platform: ${args.platform}`);
127
+ console.error(`Available platforms: ${PLATFORMS.join(', ')}`);
128
+ process.exit(3);
129
+ }
130
+ platforms = [args.platform];
131
+ } else {
132
+ platforms = PLATFORMS;
133
+ }
134
+
135
+ // 处理 --skills 单独模式
136
+ if (args.skills && !args.rules) {
137
+ try {
138
+ const skillsDir = '.claude/skills';
139
+ const registry = await generateSkillsRegistryV2(skillsDir);
140
+ const outputPath = await writeSkillsRegistry(registry);
141
+
142
+ console.log(`Skills registry generated: ${outputPath}`);
143
+ console.log(` Skills found: ${registry.skills.length}`);
144
+ process.exit(0);
145
+ } catch (error) {
146
+ console.error(`Error generating skills registry: ${error.message}`);
147
+ process.exit(1);
148
+ }
149
+ }
150
+
151
+ // 处理 --rules 单独模式
152
+ if (args.rules && !args.skills) {
153
+ try {
154
+ const skillsDir = '.claude/skills';
155
+ const registry = await generateSkillsRegistryV2(skillsDir);
156
+
157
+ const rulesResults = await emitAllRules(registry, [], { platforms });
158
+ let rulesGenerated = 0;
159
+
160
+ for (const ruleResult of rulesResults) {
161
+ if (ruleResult.error) {
162
+ console.error(` Error (${ruleResult.platform}): ${ruleResult.error}`);
163
+ } else {
164
+ rulesGenerated++;
165
+ if (args.verbose) {
166
+ console.log(` Generated: ${ruleResult.path}`);
167
+ }
168
+ }
169
+ }
170
+
171
+ console.log(`Rules entry files generated: ${rulesGenerated}`);
172
+ process.exit(0);
173
+ } catch (error) {
174
+ console.error(`Error generating rules: ${error.message}`);
175
+ process.exit(1);
176
+ }
177
+ }
178
+
179
+ try {
180
+ // 确定编译选项
181
+ const compileOptions = {
182
+ platforms,
183
+ verbose: args.verbose,
184
+ check: args.check,
185
+ rules: true,
186
+ skills: true
187
+ };
188
+
189
+ // 如果只指定 --skills 或 --rules,调整选项
190
+ if (args.skills || args.rules) {
191
+ compileOptions.skills = args.skills;
192
+ compileOptions.rules = args.rules;
193
+ }
194
+
195
+ const result = await compile(compileOptions);
196
+
197
+ // 处理 check 模式
198
+ if (args.check) {
199
+ if (result.drift && result.drift.length > 0) {
200
+ console.log('Drift detected:');
201
+ for (const item of result.drift) {
202
+ console.log(` - ${item.source}: ${item.issue}`);
203
+ }
204
+ process.exit(2);
205
+ }
206
+ console.log('No drift detected.');
207
+ process.exit(0);
208
+ }
209
+
210
+ // 输出编译结果
211
+ if (result.success) {
212
+ console.log(`Compilation complete.`);
213
+ console.log(` Platforms: ${result.platforms.join(', ')}`);
214
+ console.log(` Files compiled: ${result.filesCompiled}`);
215
+ console.log(` Files skipped: ${result.filesSkipped}`);
216
+ console.log(` Resources copied: ${result.resourcesCopied}`);
217
+ console.log(` Resources skipped: ${result.resourcesSkipped}`);
218
+ console.log(` Skills registered: ${result.skillsRegistered}`);
219
+ console.log(` Rules generated: ${result.rulesGenerated}`);
220
+ process.exit(0);
221
+ } else {
222
+ console.error('Compilation failed:');
223
+ for (const error of result.errors) {
224
+ console.error(` - ${error}`);
225
+ }
226
+ process.exit(1);
227
+ }
228
+ } catch (error) {
229
+ console.error(`Error: ${error.message}`);
230
+ process.exit(1);
231
+ }
232
+ }
233
+
234
+ // 导出 parseArgs 供测试使用
235
+ module.exports = { parseArgs };
236
+
237
+ // 如果是直接运行则执行 main
238
+ if (require.main === module) {
239
+ main();
240
+ }
@@ -0,0 +1,185 @@
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const { spawnSync } = require('child_process');
5
+
6
+ const PACKAGE_ROOT = path.resolve(__dirname, '..');
7
+ const TEMPLATE_DIR = path.join(PACKAGE_ROOT, '.claude');
8
+ const ADAPT_BIN = path.join(PACKAGE_ROOT, 'bin', 'adapt.js');
9
+ const ADAPTER_BIN = path.join(PACKAGE_ROOT, 'bin', 'cc-devflow.js');
10
+
11
+ function showHelp() {
12
+ console.log(`
13
+ Usage: cc-devflow <command> [options]
14
+
15
+ Commands:
16
+ init Install .claude template into a project
17
+ adapt Compile .claude into multi-platform outputs
18
+
19
+ Init options:
20
+ --dir <path> Target project path (default: cwd)
21
+ --force Overwrite existing .claude
22
+
23
+ Adapt options:
24
+ --cwd <path> Target project path (default: cwd)
25
+ --platform <name> Compile for specific platform
26
+ --all Compile all platforms (default)
27
+ --check Check for drift without compiling
28
+ --skills Generate skills registry only
29
+ --rules Generate rules entry files only
30
+ --verbose Show detailed output
31
+
32
+ Examples:
33
+ cc-devflow init
34
+ cc-devflow init --dir /path/to/project
35
+ cc-devflow adapt --platform cursor
36
+ cc-devflow adapt --cwd /path/to/project --platform codex
37
+ `);
38
+ }
39
+
40
+ function parseCliArgs(args) {
41
+ const options = {
42
+ dir: null,
43
+ cwd: null,
44
+ force: false,
45
+ help: false
46
+ };
47
+ const rest = [];
48
+
49
+ for (let i = 0; i < args.length; i++) {
50
+ const arg = args[i];
51
+
52
+ if (arg === '--help' || arg === '-h') {
53
+ options.help = true;
54
+ continue;
55
+ }
56
+
57
+ if (arg === '--force') {
58
+ options.force = true;
59
+ continue;
60
+ }
61
+
62
+ if (arg === '--dir') {
63
+ options.dir = args[i + 1];
64
+ i += 1;
65
+ continue;
66
+ }
67
+
68
+ if (arg.startsWith('--dir=')) {
69
+ options.dir = arg.slice('--dir='.length);
70
+ continue;
71
+ }
72
+
73
+ if (arg === '--cwd') {
74
+ options.cwd = args[i + 1];
75
+ i += 1;
76
+ continue;
77
+ }
78
+
79
+ if (arg.startsWith('--cwd=')) {
80
+ options.cwd = arg.slice('--cwd='.length);
81
+ continue;
82
+ }
83
+
84
+ rest.push(arg);
85
+ }
86
+
87
+ return { options, rest };
88
+ }
89
+
90
+ function runInit(args) {
91
+ const { options } = parseCliArgs(args);
92
+
93
+ if (options.help) {
94
+ showHelp();
95
+ return 0;
96
+ }
97
+
98
+ const targetRoot = path.resolve(options.dir || options.cwd || process.cwd());
99
+ const targetDir = path.join(targetRoot, '.claude');
100
+
101
+ if (!fs.existsSync(TEMPLATE_DIR)) {
102
+ console.error(`Template not found: ${TEMPLATE_DIR}`);
103
+ return 1;
104
+ }
105
+
106
+ if (fs.existsSync(targetDir)) {
107
+ if (!options.force) {
108
+ console.error(`Target already exists: ${targetDir}`);
109
+ console.error('Use --force to overwrite.');
110
+ return 1;
111
+ }
112
+ fs.rmSync(targetDir, { recursive: true, force: true });
113
+ }
114
+
115
+ fs.cpSync(TEMPLATE_DIR, targetDir, { recursive: true });
116
+ console.log(`Initialized .claude in ${targetRoot}`);
117
+ return 0;
118
+ }
119
+
120
+ function runAdapt(args) {
121
+ const { options, rest } = parseCliArgs(args);
122
+
123
+ if (options.help) {
124
+ showHelp();
125
+ return 0;
126
+ }
127
+
128
+ const targetRoot = path.resolve(options.cwd || process.cwd());
129
+ const claudeDir = path.join(targetRoot, '.claude');
130
+
131
+ if (!fs.existsSync(claudeDir)) {
132
+ console.error(`Missing .claude directory in ${targetRoot}`);
133
+ console.error('Run: cc-devflow init');
134
+ return 1;
135
+ }
136
+
137
+ const result = spawnSync(process.execPath, [ADAPT_BIN, ...rest], {
138
+ stdio: 'inherit',
139
+ cwd: targetRoot
140
+ });
141
+
142
+ if (result.error) {
143
+ console.error(`Failed to run adapt: ${result.error.message}`);
144
+ return 1;
145
+ }
146
+
147
+ return typeof result.status === 'number' ? result.status : 1;
148
+ }
149
+
150
+ function runAdapter(command, args) {
151
+ const result = spawnSync(process.execPath, [ADAPTER_BIN, command, ...args], {
152
+ stdio: 'inherit'
153
+ });
154
+
155
+ if (result.error) {
156
+ console.error(`Failed to run adapter: ${result.error.message}`);
157
+ return 1;
158
+ }
159
+
160
+ return typeof result.status === 'number' ? result.status : 1;
161
+ }
162
+
163
+ function main() {
164
+ const argv = process.argv.slice(2);
165
+ const [command, ...rest] = argv;
166
+
167
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
168
+ showHelp();
169
+ return 0;
170
+ }
171
+
172
+ if (command === 'init') {
173
+ return runInit(rest);
174
+ }
175
+
176
+ if (command === 'adapt') {
177
+ return runAdapt(rest);
178
+ }
179
+
180
+ return runAdapter(command, rest);
181
+ }
182
+
183
+ if (require.main === module) {
184
+ process.exit(main());
185
+ }
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+
3
+ const AdapterRegistry = require('../lib/adapters/registry');
4
+ const ClaudeAdapter = require('../lib/adapters/claude-adapter');
5
+ const CodexAdapter = require('../lib/adapters/codex-adapter');
6
+ const { validateConfig, getDefaultConfig } = require('../lib/adapters/config-validator');
7
+ const logger = require('../lib/adapters/logger');
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const yaml = require('js-yaml');
11
+
12
+ async function main() {
13
+ try {
14
+ // 1. Initialize Registry
15
+ const registry = AdapterRegistry.getInstance();
16
+
17
+ // 2. Register known adapters
18
+ registry.register(new ClaudeAdapter());
19
+ registry.register(new CodexAdapter());
20
+
21
+ // 3. Load and Validate Config
22
+ let config = getDefaultConfig();
23
+ const configPath = path.resolve(__dirname, '../config/adapters.yml');
24
+
25
+ if (fs.existsSync(configPath)) {
26
+ try {
27
+ const fileContents = fs.readFileSync(configPath, 'utf8');
28
+ const rawConfig = yaml.load(fileContents);
29
+ const result = validateConfig(rawConfig);
30
+
31
+ if (result.success) {
32
+ config = result.data;
33
+ logger.debug('Config loaded', { path: configPath });
34
+ } else {
35
+ logger.error('Config validation failed', { error: result.error });
36
+ process.exit(1);
37
+ }
38
+ } catch (e) {
39
+ logger.warn('Failed to load config, using defaults', { error: e.message });
40
+ }
41
+ }
42
+
43
+ registry.setConfig(config.adapters);
44
+
45
+ // 4. Parse Command
46
+ // Usage: cc-devflow <command> [args...]
47
+ const [, , command, ...args] = process.argv;
48
+
49
+ if (!command) {
50
+ logger.info('Usage: cc-devflow <command> [args...]');
51
+ process.exit(0);
52
+ }
53
+
54
+ // 5. Detect & Execute
55
+ // Note: executeCommand will auto-detect if no adapter specified
56
+ logger.info('Processing command', { command });
57
+
58
+ try {
59
+ const result = await registry.executeCommand(command, args);
60
+ // If result has output/code, handle it.
61
+ // Claude adapter pipes to stdio, so result might be just an exit code.
62
+ if (result && result.msg) {
63
+ logger.info('Command completed', { msg: result.msg, code: result.code });
64
+ }
65
+ process.exit(result.code || 0);
66
+
67
+ } catch (err) {
68
+ logger.error('Execution failed', { error: err.message });
69
+ process.exit(1);
70
+ }
71
+
72
+ } catch (error) {
73
+ logger.error('Fatal error', { error: error.message, stack: error.stack });
74
+ process.exit(1);
75
+ }
76
+ }
77
+
78
+ main();
@@ -0,0 +1,5 @@
1
+ adapters:
2
+ preferred: null
3
+ policies:
4
+ allow_shell: false
5
+ allow_network: false
@@ -0,0 +1,44 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "adapters": {
6
+ "type": "object",
7
+ "properties": {
8
+ "preferred": {
9
+ "type": [
10
+ "string",
11
+ "null"
12
+ ],
13
+ "description": "The preferred adapter key (e.g. 'codex', 'claude'). If null, auto-detection logic applies."
14
+ },
15
+ "policies": {
16
+ "type": "object",
17
+ "properties": {
18
+ "allow_shell": {
19
+ "type": "boolean",
20
+ "default": false,
21
+ "description": "Whether to allow the adapter to execute arbitrary shell commands."
22
+ },
23
+ "allow_network": {
24
+ "type": "boolean",
25
+ "default": false,
26
+ "description": "Whether to allow the adapter to make arbitrary network requests."
27
+ }
28
+ },
29
+ "required": [
30
+ "allow_shell"
31
+ ],
32
+ "additionalProperties": false
33
+ }
34
+ },
35
+ "required": [
36
+ "policies"
37
+ ],
38
+ "additionalProperties": false
39
+ }
40
+ },
41
+ "required": [
42
+ "adapters"
43
+ ]
44
+ }
package/docs/CLAUDE.md ADDED
@@ -0,0 +1,26 @@
1
+ # docs/
2
+
3
+ 本目录存放 **cc-devflow 的用户可读文档**(命令说明、上手指南、对外分析报告)。
4
+
5
+ ## 目录结构
6
+
7
+ ```text
8
+ docs/
9
+ ├── CLAUDE.md
10
+ ├── SPEC_KIT_REFERENCE_ANALYSIS.md
11
+ ├── SPEC_KIT_ITERATION_BORROWING.md
12
+ ├── commands/
13
+ └── guides/
14
+ ```
15
+
16
+ ## 文件职责(一句话说清)
17
+
18
+ - `docs/SPEC_KIT_REFERENCE_ANALYSIS.md`: cc-devflow 与 spec-kit 的总体架构/理念/机制对照(静态对比基线)。
19
+ - `docs/SPEC_KIT_ITERATION_BORROWING.md`: 基于 spec-kit 近期迭代(Changelog)的“增量差异”与可借鉴项(动态演进对比)。
20
+
21
+ ## 编写约定
22
+
23
+ - 面向使用者:优先写“怎么用/怎么做”,其次再写“为什么”。
24
+ - 可检索:标题清晰、关键词统一(`/flow-*`、`/core-*`、`/speckit.*`)。
25
+ - 可落地:结论必须能映射到具体命令、脚本或模板文件路径。
26
+
@@ -0,0 +1,61 @@
1
+ # 📋 Command Reference
2
+
3
+ [中文文档](./README.zh-CN.md) | [English](./README.md)
4
+
5
+ ---
6
+
7
+ ## 🎯 Requirement Management Commands
8
+
9
+ | Command | Purpose | Quick Example | Detailed Docs |
10
+ |---------|---------|---------------|---------------|
11
+ | `/flow-new` | 🚀 Start New Requirement Development | `/flow-new "REQ-123\|Feature"` | [→](./flow-new.md) |
12
+ | `/flow-init` | 📦 Initialize Requirement Structure | `/flow-init "REQ-123\|Feature"` | [→](./flow-init.md) |
13
+ | `/flow-status` | 📊 Query Development Progress | `/flow-status REQ-123` | [→](./flow-status.md) |
14
+ | `/flow-restart` | 🔄 Resume Interrupted Development | `/flow-restart "REQ-123"` | [→](./flow-restart.md) |
15
+ | `/flow-update` | ✅ Update Task Progress | `/flow-update "REQ-123" "T001"` | [→](./flow-update.md) |
16
+
17
+ ## 🏗️ Architecture Design Commands
18
+
19
+ | Command | Purpose | Quick Example | Detailed Docs |
20
+ |---------|---------|---------------|---------------|
21
+ | `/core-roadmap` | 🗺️ Generate Product Roadmap | `/core-roadmap` | [→](./core-roadmap.md) |
22
+ | `/core-architecture` | 🏛️ Generate System Architecture | `/core-architecture` | [→](./core-architecture.md) |
23
+ | `/core-guidelines` | 📘 Generate Project Guidelines | `/core-guidelines` | [→](./core-guidelines.md) |
24
+
25
+ ## 🧪 Quality Assurance Commands
26
+
27
+ | Command | Purpose | Quick Example | Detailed Docs |
28
+ |---------|---------|---------------|---------------|
29
+ | `/flow-checklist` | ✅ Requirement Quality Check | `/flow-checklist --type ux` | [→](../../.claude/commands/flow-checklist.md) |
30
+ | `/flow-verify` | 🔍 Verify Document Consistency | `/flow-verify "REQ-123"` | [→](./flow-verify.md) |
31
+ | `/flow-qa` | 🧪 Execute Quality Assurance | `/flow-qa "REQ-123"` | [→](./flow-qa.md) |
32
+ | `/flow-constitution` | 📜 Constitution Compliance | `/flow-constitution --verify` | [→](./flow-constitution.md) |
33
+
34
+ ## 🛠️ Tool Commands
35
+
36
+ | Command | Purpose | Quick Example | Detailed Docs |
37
+ |---------|---------|---------------|---------------|
38
+ | `/flow-fix` | 🐛 Bug Fix Flow | `/flow-fix "BUG-001\|Description"` | [→](./flow-fix.md) |
39
+ | `/flow-release` | 🚢 Create Release | `/flow-release "REQ-123"` | [→](./flow-release.md) |
40
+
41
+ ## 🎯 Quick Selection Guide
42
+
43
+ ```
44
+ Your Scenario:
45
+ ├─ Start brand new feature? → /flow-new "REQ-123|Feature"
46
+ ├─ Plan product direction? → /core-roadmap
47
+ ├─ Design system architecture? → /core-architecture
48
+ ├─ Validate requirement quality? → /flow-checklist --type ux,api,security
49
+ ├─ Continue interrupted development? → /flow-restart "REQ-123"
50
+ ├─ Check development progress? → /flow-status REQ-123
51
+ ├─ Found document conflicts? → /flow-verify "REQ-123"
52
+ ├─ Development complete, test? → /flow-qa "REQ-123"
53
+ ├─ Fix production bug? → /flow-fix "BUG-001|Description"
54
+ └─ Ready to release? → /flow-release "REQ-123"
55
+ ```
56
+
57
+ ## 📚 Related Documentation
58
+
59
+ - [Getting Started Guide](../guides/getting-started.md)
60
+ - [Workflow Guide](../guides/workflow-guide.md)
61
+ - [Best Practices](../guides/best-practices.md)
@@ -0,0 +1,55 @@
1
+ # 📋 命令参考文档
2
+
3
+ ## 🎯 需求管理命令
4
+
5
+ | 命令 | 用途 | 快速示例 |
6
+ |------|------|----------|
7
+ | `/flow-new` | 🚀 启动新需求开发 | `/flow-new "REQ-123|功能"` → [详细文档](./flow-new.md) |
8
+ | `/flow-init` | 📦 初始化需求结构 | `/flow-init "REQ-123|功能"` → [详细文档](./flow-init.md) |
9
+ | `/flow-status` | 📊 查询开发进度 | `/flow-status REQ-123` → [详细文档](./flow-status.md) |
10
+ | `/flow-restart` | 🔄 恢复中断的开发 | `/flow-restart "REQ-123"` → [详细文档](./flow-restart.md) |
11
+ | `/flow-update` | ✅ 更新任务进度 | `/flow-update "REQ-123" "T001"` → [详细文档](./flow-update.md) |
12
+
13
+ ## 🏗️ 架构设计命令
14
+
15
+ | 命令 | 用途 | 快速示例 |
16
+ |------|------|----------|
17
+ | `/core-roadmap` | 🗺️ 生成产品路线图 | `/core-roadmap` → [详细文档](./core-roadmap.md) |
18
+ | `/core-architecture` | 🏛️ 生成系统架构 | `/core-architecture` → [详细文档](./core-architecture.md) |
19
+ | `/core-guidelines` | 📘 生成项目规范 | `/core-guidelines` → [详细文档](./core-guidelines.md) |
20
+
21
+ ## 🧪 质量保证命令
22
+
23
+ | 命令 | 用途 | 快速示例 |
24
+ |------|------|----------|
25
+ | `/flow-verify` | 🔍 验证文档一致性 | `/flow-verify "REQ-123"` → [详细文档](./flow-verify.md) |
26
+ | `/flow-qa` | 🧪 执行质量保证 | `/flow-qa "REQ-123"` → [详细文档](./flow-qa.md) |
27
+ | `/flow-constitution` | 📜 Constitution 合规 | `/flow-constitution --verify` → [详细文档](./flow-constitution.md) |
28
+
29
+ ## 🛠️ 工具命令
30
+
31
+ | 命令 | 用途 | 快速示例 |
32
+ |------|------|----------|
33
+ | `/flow-fix` | 🐛 Bug 修复流程 | `/flow-fix "BUG-001\|描述"` → [详细文档](./flow-fix.md) |
34
+ | `/flow-release` | 🚢 创建发布 | `/flow-release "REQ-123"` → [详细文档](./flow-release.md) |
35
+
36
+ ## 🎯 快速选择指南
37
+
38
+ ```
39
+ 你的场景:
40
+ ├─ 启动全新功能? → /flow-new "REQ-123|功能"
41
+ ├─ 规划产品方向? → /core-roadmap
42
+ ├─ 设计系统架构? → /core-architecture
43
+ ├─ 开发中断继续? → /flow-restart "REQ-123"
44
+ ├─ 检查开发进度? → /flow-status REQ-123
45
+ ├─ 发现文档冲突? → /flow-verify "REQ-123"
46
+ ├─ 开发完成测试? → /flow-qa "REQ-123"
47
+ ├─ 修复生产 Bug? → /flow-fix "BUG-001|描述"
48
+ └─ 准备发布上线? → /flow-release "REQ-123"
49
+ ```
50
+
51
+ ## 📚 相关文档
52
+
53
+ - [快速开始](../guides/getting-started.md)
54
+ - [工作流指南](../guides/workflow-guide.md)
55
+ - [最佳实践](../guides/best-practices.md)