universal-dev-standards 4.1.0 → 5.0.0-beta.10

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 (556) hide show
  1. package/README.md +3 -3
  2. package/bin/uds.js +239 -4
  3. package/bundled/core/acceptance-test-driven-development.md +19 -721
  4. package/bundled/core/accessibility-standards.md +862 -0
  5. package/bundled/core/ai-agreement-standards.md +95 -0
  6. package/bundled/core/ai-friendly-architecture.md +544 -0
  7. package/bundled/core/ai-instruction-standards.md +2 -0
  8. package/bundled/core/anti-hallucination.md +90 -637
  9. package/bundled/core/behavior-driven-development.md +20 -735
  10. package/bundled/core/changelog-standards.md +4 -0
  11. package/bundled/core/checkin-standards.md +21 -4
  12. package/bundled/core/code-review-checklist.md +3 -0
  13. package/bundled/core/commit-message-guide.md +14 -3
  14. package/bundled/core/deployment-standards.md +296 -0
  15. package/bundled/core/developer-memory.md +568 -0
  16. package/bundled/core/documentation-structure.md +114 -18
  17. package/bundled/core/documentation-writing-standards.md +272 -2
  18. package/bundled/core/error-code-standards.md +3 -0
  19. package/bundled/core/forward-derivation-standards.md +134 -8
  20. package/bundled/core/git-workflow.md +72 -686
  21. package/bundled/core/guides/anti-hallucination-guide.md +517 -0
  22. package/bundled/core/guides/git-workflow-guide.md +954 -0
  23. package/bundled/core/guides/performance-guide.md +508 -0
  24. package/bundled/core/guides/refactoring-guide.md +608 -0
  25. package/bundled/core/guides/security-guide.md +485 -0
  26. package/bundled/core/logging-standards.md +337 -2
  27. package/bundled/core/performance-standards.md +231 -0
  28. package/bundled/core/project-context-memory.md +180 -0
  29. package/bundled/core/project-structure.md +315 -2
  30. package/bundled/core/refactoring-standards.md +81 -761
  31. package/bundled/core/requirement-engineering.md +39 -0
  32. package/bundled/core/reverse-engineering-standards.md +6 -4
  33. package/bundled/core/security-standards.md +244 -0
  34. package/bundled/core/spec-driven-development.md +20 -319
  35. package/bundled/core/test-completeness-dimensions.md +213 -11
  36. package/bundled/core/test-driven-development.md +22 -978
  37. package/bundled/core/testing-standards.md +222 -2903
  38. package/bundled/core/versioning.md +16 -55
  39. package/bundled/core/virtual-organization-standards.md +85 -0
  40. package/bundled/locales/README.md +4 -4
  41. package/bundled/locales/zh-CN/CHANGELOG.md +18 -18
  42. package/bundled/locales/zh-CN/CLAUDE.md +3 -3
  43. package/bundled/locales/zh-CN/MAINTENANCE.md +7 -7
  44. package/bundled/locales/zh-CN/README.md +211 -510
  45. package/bundled/locales/zh-CN/STANDARDS-MAPPING.md +1 -1
  46. package/bundled/locales/zh-CN/adoption/ADOPTION-GUIDE.md +3 -3
  47. package/bundled/locales/zh-CN/adoption/DAILY-WORKFLOW-GUIDE.md +66 -7
  48. package/bundled/locales/zh-CN/adoption/STATIC-DYNAMIC-GUIDE.md +22 -22
  49. package/bundled/locales/zh-CN/adoption/checklists/enterprise.md +5 -5
  50. package/bundled/locales/zh-CN/adoption/checklists/minimal.md +4 -4
  51. package/bundled/locales/zh-CN/adoption/checklists/recommended.md +5 -5
  52. package/bundled/locales/zh-CN/ai/MAINTENANCE.md +13 -13
  53. package/bundled/locales/zh-CN/core/ai-friendly-architecture.md +306 -0
  54. package/bundled/locales/zh-CN/core/ai-instruction-standards.md +1 -1
  55. package/bundled/locales/zh-CN/core/anti-hallucination.md +39 -3
  56. package/bundled/locales/zh-CN/core/checkin-standards.md +18 -5
  57. package/bundled/locales/zh-CN/core/commit-message-guide.md +1 -1
  58. package/bundled/locales/zh-CN/core/developer-memory.md +576 -0
  59. package/bundled/locales/zh-CN/core/documentation-structure.md +43 -5
  60. package/bundled/locales/zh-CN/core/documentation-writing-standards.md +146 -5
  61. package/bundled/locales/zh-CN/core/git-workflow.md +179 -4
  62. package/bundled/locales/zh-CN/core/logging-standards.md +177 -4
  63. package/bundled/locales/zh-CN/core/project-structure.md +117 -5
  64. package/bundled/locales/zh-CN/core/refactoring-standards.md +3 -3
  65. package/bundled/locales/zh-CN/core/reverse-engineering-standards.md +6 -6
  66. package/bundled/locales/zh-CN/core/spec-driven-development.md +516 -14
  67. package/bundled/locales/zh-CN/core/test-completeness-dimensions.md +155 -24
  68. package/bundled/locales/zh-CN/core/test-driven-development.md +71 -20
  69. package/bundled/locales/zh-CN/core/testing-standards.md +4 -4
  70. package/bundled/locales/zh-CN/core/versioning.md +1 -1
  71. package/bundled/locales/zh-CN/docs/AI-AGENT-ROADMAP.md +145 -46
  72. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +184 -0
  73. package/bundled/locales/zh-CN/docs/CLI-FLOW.md +239 -0
  74. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +320 -0
  75. package/bundled/locales/zh-CN/docs/OPERATION-WORKFLOW.md +43 -43
  76. package/bundled/locales/zh-CN/docs/STANDARDS-REFERENCE.md +440 -0
  77. package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +1 -1
  78. package/bundled/locales/zh-CN/docs/WINDOWS-GUIDE.md +1 -1
  79. package/bundled/locales/zh-CN/integrations/codex/README.md +3 -3
  80. package/bundled/locales/zh-CN/integrations/gemini-cli/GEMINI.md +35 -3
  81. package/bundled/locales/zh-CN/integrations/gemini-cli/README.md +3 -3
  82. package/bundled/locales/zh-CN/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +89 -3
  83. package/bundled/locales/zh-CN/integrations/github-copilot/README.md +5 -5
  84. package/bundled/locales/zh-CN/integrations/github-copilot/copilot-instructions.md +9 -9
  85. package/bundled/locales/zh-CN/integrations/github-copilot/skills-mapping.md +23 -7
  86. package/bundled/locales/zh-CN/integrations/google-antigravity/README.md +2 -2
  87. package/bundled/locales/zh-CN/integrations/opencode/README.md +3 -3
  88. package/bundled/locales/zh-CN/integrations/opencode/skills-mapping.md +22 -10
  89. package/bundled/locales/zh-CN/integrations/openspec/README.md +1 -1
  90. package/bundled/locales/zh-CN/integrations/spec-kit/AGENTS.md +3 -3
  91. package/bundled/locales/zh-CN/integrations/spec-kit/README.md +1 -1
  92. package/bundled/locales/zh-CN/options/commit-message/bilingual.md +1 -1
  93. package/bundled/locales/zh-CN/options/commit-message/english.md +1 -1
  94. package/bundled/locales/zh-CN/options/commit-message/traditional-chinese.md +1 -1
  95. package/bundled/locales/zh-CN/options/git-workflow/gitflow.md +1 -1
  96. package/bundled/locales/zh-CN/options/git-workflow/github-flow.md +1 -1
  97. package/bundled/locales/zh-CN/options/git-workflow/merge-commit.md +1 -1
  98. package/bundled/locales/zh-CN/options/git-workflow/rebase-ff.md +1 -1
  99. package/bundled/locales/zh-CN/options/git-workflow/squash-merge.md +1 -1
  100. package/bundled/locales/zh-CN/options/git-workflow/trunk-based.md +1 -1
  101. package/bundled/locales/zh-CN/options/project-structure/dotnet.md +1 -1
  102. package/bundled/locales/zh-CN/options/project-structure/go.md +1 -1
  103. package/bundled/locales/zh-CN/options/project-structure/java.md +1 -1
  104. package/bundled/locales/zh-CN/options/project-structure/nodejs.md +1 -1
  105. package/bundled/locales/zh-CN/options/project-structure/python.md +1 -1
  106. package/bundled/locales/zh-CN/options/testing/e2e-testing.md +1 -1
  107. package/bundled/locales/zh-CN/options/testing/integration-testing.md +1 -1
  108. package/bundled/locales/zh-CN/options/testing/system-testing.md +1 -1
  109. package/bundled/locales/zh-CN/options/testing/unit-testing.md +1 -1
  110. package/bundled/locales/zh-CN/skills/{claude-code/CONTRIBUTING.template.md → CONTRIBUTING.template.md} +2 -2
  111. package/bundled/locales/zh-CN/skills/README.md +131 -81
  112. package/bundled/locales/zh-CN/skills/agents/README.md +281 -0
  113. package/bundled/locales/zh-CN/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/SKILL.md +10 -10
  114. package/bundled/locales/zh-CN/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/anti-hallucination.md +8 -8
  115. package/bundled/locales/zh-CN/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/certainty-labels.md +8 -8
  116. package/bundled/locales/zh-CN/skills/ai-friendly-architecture/SKILL.md +221 -0
  117. package/bundled/locales/zh-CN/skills/ai-instruction-standards/SKILL.md +214 -0
  118. package/bundled/locales/zh-CN/skills/atdd-assistant/SKILL.md +71 -0
  119. package/bundled/locales/zh-CN/skills/atdd-assistant/acceptance-criteria-guide.md +428 -0
  120. package/bundled/locales/zh-CN/skills/atdd-assistant/atdd-workflow.md +484 -0
  121. package/bundled/locales/zh-CN/skills/atdd-assistant/guide.md +368 -0
  122. package/bundled/locales/zh-CN/skills/bdd-assistant/SKILL.md +68 -0
  123. package/bundled/locales/zh-CN/skills/bdd-assistant/bdd-workflow.md +406 -0
  124. package/bundled/locales/zh-CN/skills/bdd-assistant/gherkin-guide.md +454 -0
  125. package/bundled/locales/zh-CN/skills/bdd-assistant/guide.md +324 -0
  126. package/bundled/locales/zh-CN/skills/changelog-guide/SKILL.md +64 -0
  127. package/bundled/locales/zh-CN/skills/{claude-code/changelog-guide/SKILL.md → changelog-guide/guide.md} +6 -7
  128. package/bundled/locales/zh-CN/skills/checkin-assistant/SKILL.md +56 -0
  129. package/bundled/locales/zh-CN/skills/{claude-code/checkin-assistant/SKILL.md → checkin-assistant/guide.md} +6 -7
  130. package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +56 -0
  131. package/bundled/locales/zh-CN/skills/{claude-code/code-review-assistant → code-review-assistant}/checkin-checklist.md +4 -4
  132. package/bundled/locales/zh-CN/skills/{claude-code/code-review-assistant/SKILL.md → code-review-assistant/guide.md} +5 -6
  133. package/bundled/locales/zh-CN/skills/{claude-code/code-review-assistant → code-review-assistant}/review-checklist.md +4 -4
  134. package/bundled/locales/zh-CN/skills/{claude-code/commands → commands}/bdd.md +2 -2
  135. package/bundled/locales/zh-CN/skills/{claude-code/commands → commands}/methodology.md +3 -3
  136. package/bundled/locales/zh-CN/skills/{claude-code/commands → commands}/refactor.md +3 -3
  137. package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +61 -0
  138. package/bundled/locales/zh-CN/skills/{claude-code/commit-standards → commit-standards}/conventional-commits.md +4 -4
  139. package/bundled/locales/zh-CN/skills/{claude-code/commit-standards/SKILL.md → commit-standards/guide.md} +5 -6
  140. package/bundled/locales/zh-CN/skills/{claude-code/commit-standards → commit-standards}/language-options.md +3 -3
  141. package/bundled/locales/zh-CN/skills/docs-generator/SKILL.md +59 -0
  142. package/bundled/locales/zh-CN/skills/docs-generator/guide.md +262 -0
  143. package/bundled/locales/zh-CN/skills/{claude-code/documentation-guide → documentation-guide}/SKILL.md +7 -8
  144. package/bundled/locales/zh-CN/skills/{claude-code/documentation-guide → documentation-guide}/documentation-structure.md +4 -4
  145. package/bundled/locales/zh-CN/skills/{claude-code/documentation-guide → documentation-guide}/readme-template.md +3 -3
  146. package/bundled/locales/zh-CN/skills/{claude-code/error-code-guide → error-code-guide}/SKILL.md +6 -6
  147. package/bundled/locales/zh-CN/skills/forward-derivation/SKILL.md +62 -0
  148. package/bundled/locales/zh-CN/skills/forward-derivation/guide.md +130 -0
  149. package/bundled/locales/zh-CN/skills/{claude-code/git-workflow-guide → git-workflow-guide}/SKILL.md +6 -6
  150. package/bundled/locales/zh-CN/skills/{claude-code/git-workflow-guide → git-workflow-guide}/branch-naming.md +3 -3
  151. package/bundled/locales/zh-CN/skills/{claude-code/git-workflow-guide → git-workflow-guide}/git-workflow.md +4 -4
  152. package/bundled/locales/zh-CN/skills/{claude-code/logging-guide → logging-guide}/SKILL.md +6 -6
  153. package/bundled/locales/zh-CN/skills/methodology-system/SKILL.md +78 -0
  154. package/bundled/locales/zh-CN/skills/{claude-code/methodology-system → methodology-system}/create-methodology.md +2 -2
  155. package/bundled/locales/zh-CN/skills/{claude-code/methodology-system/SKILL.md → methodology-system/guide.md} +2 -2
  156. package/bundled/locales/zh-CN/skills/{claude-code/methodology-system → methodology-system}/runtime.md +3 -3
  157. package/bundled/locales/zh-CN/skills/project-discovery/SKILL.md +66 -0
  158. package/bundled/locales/zh-CN/skills/project-discovery/guide.md +371 -0
  159. package/bundled/locales/zh-CN/skills/{claude-code/project-structure-guide → project-structure-guide}/SKILL.md +4 -4
  160. package/bundled/locales/zh-CN/skills/{claude-code/project-structure-guide → project-structure-guide}/language-patterns.md +1 -1
  161. package/bundled/locales/zh-CN/skills/refactoring-assistant/SKILL.md +67 -0
  162. package/bundled/locales/zh-CN/skills/{claude-code/refactoring-assistant/SKILL.md → refactoring-assistant/guide.md} +7 -8
  163. package/bundled/locales/zh-CN/skills/release-standards/SKILL.md +64 -0
  164. package/bundled/locales/zh-CN/skills/{claude-code/release-standards → release-standards}/changelog-format.md +3 -3
  165. package/bundled/locales/zh-CN/skills/{claude-code/release-standards/SKILL.md → release-standards/guide.md} +5 -6
  166. package/bundled/locales/zh-CN/skills/{claude-code/release-standards → release-standards}/release-workflow.md +7 -7
  167. package/bundled/locales/zh-CN/skills/{claude-code/release-standards → release-standards}/semantic-versioning.md +3 -3
  168. package/bundled/locales/zh-CN/skills/requirement-assistant/SKILL.md +67 -0
  169. package/bundled/locales/zh-CN/skills/{claude-code/requirement-assistant/SKILL.md → requirement-assistant/guide.md} +4 -5
  170. package/bundled/locales/zh-CN/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-checklist.md +3 -3
  171. package/bundled/locales/zh-CN/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-writing.md +3 -3
  172. package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +67 -0
  173. package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer → reverse-engineer}/bdd-extraction.md +2 -2
  174. package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer/SKILL.md → reverse-engineer/guide.md} +17 -18
  175. package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer → reverse-engineer}/tdd-analysis.md +2 -2
  176. package/bundled/locales/zh-CN/skills/{claude-code/reverse-engineer → reverse-engineer}/workflow.md +3 -3
  177. package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +75 -0
  178. package/bundled/locales/zh-CN/skills/{claude-code/spec-driven-dev/SKILL.md → spec-driven-dev/guide.md} +10 -11
  179. package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +66 -0
  180. package/bundled/locales/zh-CN/skills/{claude-code/tdd-assistant/SKILL.md → tdd-assistant/guide.md} +12 -16
  181. package/bundled/locales/zh-CN/skills/{claude-code/tdd-assistant → tdd-assistant}/language-examples.md +3 -3
  182. package/bundled/locales/zh-CN/skills/{claude-code/tdd-assistant → tdd-assistant}/tdd-workflow.md +3 -3
  183. package/bundled/locales/zh-CN/skills/test-coverage-assistant/SKILL.md +65 -0
  184. package/bundled/locales/zh-CN/skills/test-coverage-assistant/guide.md +284 -0
  185. package/bundled/locales/zh-CN/skills/{claude-code/testing-guide → testing-guide}/SKILL.md +8 -8
  186. package/bundled/locales/zh-CN/skills/{claude-code/testing-guide → testing-guide}/testing-pyramid.md +4 -4
  187. package/bundled/locales/zh-CN/skills/{cline → tools/cline}/README.md +1 -1
  188. package/bundled/locales/zh-CN/skills/{copilot → tools/copilot}/README.md +1 -1
  189. package/bundled/locales/zh-CN/skills/{copilot → tools/copilot}/copilot-instructions.md +1 -1
  190. package/bundled/locales/zh-CN/skills/{cursor → tools/cursor}/README.md +1 -1
  191. package/bundled/locales/zh-CN/skills/{windsurf → tools/windsurf}/README.md +1 -1
  192. package/bundled/locales/zh-TW/CHANGELOG.md +16 -16
  193. package/bundled/locales/zh-TW/CLAUDE.md +3 -3
  194. package/bundled/locales/zh-TW/MAINTENANCE.md +7 -7
  195. package/bundled/locales/zh-TW/README.md +217 -490
  196. package/bundled/locales/zh-TW/STANDARDS-MAPPING.md +1 -1
  197. package/bundled/locales/zh-TW/adoption/ADOPTION-GUIDE.md +4 -4
  198. package/bundled/locales/zh-TW/adoption/DAILY-WORKFLOW-GUIDE.md +66 -7
  199. package/bundled/locales/zh-TW/adoption/STATIC-DYNAMIC-GUIDE.md +22 -22
  200. package/bundled/locales/zh-TW/adoption/checklists/enterprise.md +5 -5
  201. package/bundled/locales/zh-TW/adoption/checklists/minimal.md +4 -4
  202. package/bundled/locales/zh-TW/adoption/checklists/recommended.md +5 -5
  203. package/bundled/locales/zh-TW/ai/MAINTENANCE.md +13 -13
  204. package/bundled/locales/zh-TW/ai/standards/anti-hallucination.ai.yaml +3 -2
  205. package/bundled/locales/zh-TW/ai/standards/git-workflow.ai.yaml +4 -3
  206. package/bundled/locales/zh-TW/ai/standards/spec-driven-development.ai.yaml +3 -3
  207. package/bundled/locales/zh-TW/ai/standards/testing.ai.yaml +1 -0
  208. package/bundled/locales/zh-TW/core/ai-friendly-architecture.md +306 -0
  209. package/bundled/locales/zh-TW/core/ai-instruction-standards.md +1 -1
  210. package/bundled/locales/zh-TW/core/anti-hallucination.md +38 -701
  211. package/bundled/locales/zh-TW/core/changelog-standards.md +1 -1
  212. package/bundled/locales/zh-TW/core/checkin-standards.md +18 -5
  213. package/bundled/locales/zh-TW/core/code-review-checklist.md +1 -1
  214. package/bundled/locales/zh-TW/core/commit-message-guide.md +1 -1
  215. package/bundled/locales/zh-TW/core/developer-memory.md +576 -0
  216. package/bundled/locales/zh-TW/core/documentation-structure.md +115 -22
  217. package/bundled/locales/zh-TW/core/documentation-writing-standards.md +126 -5
  218. package/bundled/locales/zh-TW/core/forward-derivation-standards.md +2 -2
  219. package/bundled/locales/zh-TW/core/git-workflow.md +38 -812
  220. package/bundled/locales/zh-TW/core/guides/anti-hallucination-guide.md +779 -0
  221. package/bundled/locales/zh-TW/core/guides/git-workflow-guide.md +1016 -0
  222. package/bundled/locales/zh-TW/core/guides/refactoring-guide.md +864 -0
  223. package/bundled/locales/zh-TW/core/guides/testing-guide.md +2280 -0
  224. package/bundled/locales/zh-TW/core/logging-standards.md +159 -4
  225. package/bundled/locales/zh-TW/core/project-structure.md +102 -9
  226. package/bundled/locales/zh-TW/core/refactoring-standards.md +37 -823
  227. package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +6 -6
  228. package/bundled/locales/zh-TW/core/spec-driven-development.md +17 -268
  229. package/bundled/locales/zh-TW/core/test-completeness-dimensions.md +128 -14
  230. package/bundled/locales/zh-TW/core/test-driven-development.md +20 -983
  231. package/bundled/locales/zh-TW/core/testing-standards.md +120 -2105
  232. package/bundled/locales/zh-TW/core/versioning.md +13 -55
  233. package/bundled/locales/zh-TW/docs/AI-AGENT-ROADMAP.md +145 -46
  234. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +184 -0
  235. package/bundled/locales/zh-TW/docs/CLI-FLOW.md +239 -0
  236. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +320 -0
  237. package/bundled/locales/zh-TW/docs/MIGRATION-V5.md +71 -0
  238. package/bundled/locales/zh-TW/docs/OPERATION-WORKFLOW.md +42 -42
  239. package/bundled/locales/zh-TW/docs/STANDARDS-REFERENCE.md +440 -0
  240. package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +1 -1
  241. package/bundled/locales/zh-TW/docs/WINDOWS-GUIDE.md +1 -1
  242. package/bundled/locales/zh-TW/integrations/claude-code/README.md +44 -0
  243. package/bundled/locales/zh-TW/integrations/gemini-cli/GEMINI.md +35 -3
  244. package/bundled/locales/zh-TW/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +89 -3
  245. package/bundled/locales/zh-TW/integrations/github-copilot/copilot-instructions.md +3 -3
  246. package/bundled/locales/zh-TW/integrations/github-copilot/skills-mapping.md +23 -7
  247. package/bundled/locales/zh-TW/integrations/opencode/skills-mapping.md +22 -10
  248. package/bundled/locales/zh-TW/methodologies/guides/sdd-guide.md +338 -0
  249. package/bundled/locales/zh-TW/methodologies/guides/tdd-guide.md +1055 -0
  250. package/bundled/locales/zh-TW/options/commit-message/bilingual.md +1 -1
  251. package/bundled/locales/zh-TW/options/commit-message/english.md +1 -1
  252. package/bundled/locales/zh-TW/options/commit-message/traditional-chinese.md +1 -1
  253. package/bundled/locales/zh-TW/options/git-workflow/gitflow.md +1 -1
  254. package/bundled/locales/zh-TW/options/git-workflow/github-flow.md +1 -1
  255. package/bundled/locales/zh-TW/options/git-workflow/merge-commit.md +1 -1
  256. package/bundled/locales/zh-TW/options/git-workflow/rebase-ff.md +1 -1
  257. package/bundled/locales/zh-TW/options/git-workflow/squash-merge.md +1 -1
  258. package/bundled/locales/zh-TW/options/git-workflow/trunk-based.md +1 -1
  259. package/bundled/locales/zh-TW/options/project-structure/dotnet.md +1 -1
  260. package/bundled/locales/zh-TW/options/project-structure/go.md +1 -1
  261. package/bundled/locales/zh-TW/options/project-structure/java.md +1 -1
  262. package/bundled/locales/zh-TW/options/project-structure/nodejs.md +1 -1
  263. package/bundled/locales/zh-TW/options/project-structure/python.md +1 -1
  264. package/bundled/locales/zh-TW/options/testing/e2e-testing.md +1 -1
  265. package/bundled/locales/zh-TW/options/testing/integration-testing.md +1 -1
  266. package/bundled/locales/zh-TW/options/testing/system-testing.md +1 -1
  267. package/bundled/locales/zh-TW/options/testing/unit-testing.md +1 -1
  268. package/bundled/locales/zh-TW/skills/{claude-code/CONTRIBUTING.template.md → CONTRIBUTING.template.md} +2 -2
  269. package/bundled/locales/zh-TW/skills/README.md +131 -79
  270. package/bundled/locales/zh-TW/skills/agents/README.md +281 -0
  271. package/bundled/locales/zh-TW/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/SKILL.md +7 -7
  272. package/bundled/locales/zh-TW/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/anti-hallucination.md +8 -8
  273. package/bundled/locales/zh-TW/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/certainty-labels.md +8 -8
  274. package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +221 -0
  275. package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +214 -0
  276. package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +71 -0
  277. package/bundled/locales/zh-TW/skills/atdd-assistant/acceptance-criteria-guide.md +428 -0
  278. package/bundled/locales/zh-TW/skills/atdd-assistant/atdd-workflow.md +484 -0
  279. package/bundled/locales/zh-TW/skills/atdd-assistant/guide.md +368 -0
  280. package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +68 -0
  281. package/bundled/locales/zh-TW/skills/bdd-assistant/bdd-workflow.md +406 -0
  282. package/bundled/locales/zh-TW/skills/bdd-assistant/gherkin-guide.md +454 -0
  283. package/bundled/locales/zh-TW/skills/bdd-assistant/guide.md +324 -0
  284. package/bundled/locales/zh-TW/skills/changelog-guide/SKILL.md +64 -0
  285. package/bundled/locales/zh-TW/skills/{claude-code/changelog-guide/SKILL.md → changelog-guide/guide.md} +6 -7
  286. package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +56 -0
  287. package/bundled/locales/zh-TW/skills/{claude-code/checkin-assistant/SKILL.md → checkin-assistant/guide.md} +6 -7
  288. package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +56 -0
  289. package/bundled/locales/zh-TW/skills/{claude-code/code-review-assistant → code-review-assistant}/checkin-checklist.md +4 -4
  290. package/bundled/locales/zh-TW/skills/{claude-code/code-review-assistant/SKILL.md → code-review-assistant/guide.md} +2 -3
  291. package/bundled/locales/zh-TW/skills/{claude-code/code-review-assistant → code-review-assistant}/review-checklist.md +4 -4
  292. package/bundled/locales/zh-TW/skills/{claude-code/commands → commands}/bdd.md +2 -2
  293. package/bundled/locales/zh-TW/skills/{claude-code/commands → commands}/methodology.md +3 -3
  294. package/bundled/locales/zh-TW/skills/{claude-code/commands → commands}/refactor.md +3 -3
  295. package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +61 -0
  296. package/bundled/locales/zh-TW/skills/{claude-code/commit-standards → commit-standards}/conventional-commits.md +4 -4
  297. package/bundled/locales/zh-TW/skills/{claude-code/commit-standards/SKILL.md → commit-standards/guide.md} +5 -6
  298. package/bundled/locales/zh-TW/skills/{claude-code/commit-standards → commit-standards}/language-options.md +3 -3
  299. package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +59 -0
  300. package/bundled/locales/zh-TW/skills/docs-generator/guide.md +262 -0
  301. package/bundled/locales/zh-TW/skills/{claude-code/documentation-guide → documentation-guide}/SKILL.md +7 -8
  302. package/bundled/locales/zh-TW/skills/{claude-code/documentation-guide → documentation-guide}/documentation-structure.md +4 -4
  303. package/bundled/locales/zh-TW/skills/{claude-code/documentation-guide → documentation-guide}/readme-template.md +3 -3
  304. package/bundled/locales/zh-TW/skills/{claude-code/error-code-guide → error-code-guide}/SKILL.md +6 -6
  305. package/bundled/locales/zh-TW/skills/forward-derivation/SKILL.md +62 -0
  306. package/bundled/locales/zh-TW/skills/{claude-code/forward-derivation/SKILL.md → forward-derivation/guide.md} +24 -19
  307. package/bundled/locales/zh-TW/skills/{claude-code/git-workflow-guide → git-workflow-guide}/SKILL.md +3 -3
  308. package/bundled/locales/zh-TW/skills/{claude-code/git-workflow-guide → git-workflow-guide}/branch-naming.md +3 -3
  309. package/bundled/locales/zh-TW/skills/{claude-code/git-workflow-guide → git-workflow-guide}/git-workflow.md +4 -4
  310. package/bundled/locales/zh-TW/skills/{claude-code/logging-guide → logging-guide}/SKILL.md +6 -6
  311. package/bundled/locales/zh-TW/skills/methodology-system/SKILL.md +78 -0
  312. package/bundled/locales/zh-TW/skills/{claude-code/methodology-system → methodology-system}/create-methodology.md +2 -2
  313. package/bundled/locales/zh-TW/skills/{claude-code/methodology-system/SKILL.md → methodology-system/guide.md} +2 -2
  314. package/bundled/locales/zh-TW/skills/{claude-code/methodology-system → methodology-system}/runtime.md +3 -3
  315. package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +66 -0
  316. package/bundled/locales/zh-TW/skills/project-discovery/guide.md +371 -0
  317. package/bundled/locales/zh-TW/skills/project-discovery/workflow.md +574 -0
  318. package/bundled/locales/zh-TW/skills/{claude-code/project-structure-guide → project-structure-guide}/SKILL.md +4 -4
  319. package/bundled/locales/zh-TW/skills/{claude-code/project-structure-guide → project-structure-guide}/language-patterns.md +1 -1
  320. package/bundled/locales/zh-TW/skills/refactoring-assistant/SKILL.md +67 -0
  321. package/bundled/locales/zh-TW/skills/{claude-code/refactoring-assistant/SKILL.md → refactoring-assistant/guide.md} +7 -8
  322. package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +64 -0
  323. package/bundled/locales/zh-TW/skills/{claude-code/release-standards → release-standards}/changelog-format.md +3 -3
  324. package/bundled/locales/zh-TW/skills/{claude-code/release-standards/SKILL.md → release-standards/guide.md} +2 -3
  325. package/bundled/locales/zh-TW/skills/{claude-code/release-standards → release-standards}/release-workflow.md +60 -28
  326. package/bundled/locales/zh-TW/skills/{claude-code/release-standards → release-standards}/semantic-versioning.md +3 -3
  327. package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +67 -0
  328. package/bundled/locales/zh-TW/skills/{claude-code/requirement-assistant/SKILL.md → requirement-assistant/guide.md} +2 -3
  329. package/bundled/locales/zh-TW/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-checklist.md +3 -3
  330. package/bundled/locales/zh-TW/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-writing.md +3 -3
  331. package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +67 -0
  332. package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer → reverse-engineer}/bdd-extraction.md +2 -2
  333. package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer/SKILL.md → reverse-engineer/guide.md} +17 -18
  334. package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer → reverse-engineer}/tdd-analysis.md +2 -2
  335. package/bundled/locales/zh-TW/skills/{claude-code/reverse-engineer → reverse-engineer}/workflow.md +3 -3
  336. package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +75 -0
  337. package/bundled/locales/zh-TW/skills/{claude-code/spec-driven-dev/SKILL.md → spec-driven-dev/guide.md} +9 -10
  338. package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +66 -0
  339. package/bundled/locales/zh-TW/skills/{claude-code/tdd-assistant/SKILL.md → tdd-assistant/guide.md} +9 -10
  340. package/bundled/locales/zh-TW/skills/{claude-code/tdd-assistant → tdd-assistant}/language-examples.md +3 -3
  341. package/bundled/locales/zh-TW/skills/{claude-code/tdd-assistant → tdd-assistant}/tdd-workflow.md +3 -3
  342. package/bundled/locales/zh-TW/skills/test-coverage-assistant/SKILL.md +65 -0
  343. package/bundled/locales/zh-TW/skills/{claude-code/test-coverage-assistant/SKILL.md → test-coverage-assistant/guide.md} +27 -24
  344. package/bundled/locales/zh-TW/skills/{claude-code/testing-guide → testing-guide}/SKILL.md +6 -6
  345. package/bundled/locales/zh-TW/skills/{claude-code/testing-guide → testing-guide}/testing-pyramid.md +4 -4
  346. package/bundled/locales/zh-TW/skills/{cline → tools/cline}/README.md +1 -1
  347. package/bundled/locales/zh-TW/skills/{copilot → tools/copilot}/README.md +1 -1
  348. package/bundled/locales/zh-TW/skills/{copilot → tools/copilot}/copilot-instructions.md +1 -1
  349. package/bundled/locales/zh-TW/skills/{cursor → tools/cursor}/README.md +1 -1
  350. package/bundled/locales/zh-TW/skills/{windsurf → tools/windsurf}/README.md +1 -1
  351. package/bundled/skills/INTEGRATION-GUIDE.md +210 -0
  352. package/bundled/skills/README.md +95 -0
  353. package/bundled/skills/_shared/README.md +60 -0
  354. package/bundled/skills/agents/README.md +305 -0
  355. package/bundled/skills/agents/code-architect.md +259 -0
  356. package/bundled/skills/agents/doc-writer.md +406 -0
  357. package/bundled/skills/agents/reviewer.md +353 -0
  358. package/bundled/skills/agents/spec-analyst.md +374 -0
  359. package/bundled/skills/agents/test-specialist.md +364 -0
  360. package/bundled/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/SKILL.md +28 -5
  361. package/bundled/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/anti-hallucination.md +24 -5
  362. package/bundled/skills/{claude-code/ai-collaboration-standards → ai-collaboration-standards}/certainty-labels.md +31 -6
  363. package/bundled/skills/ai-friendly-architecture/SKILL.md +216 -0
  364. package/bundled/skills/ai-instruction-standards/SKILL.md +209 -0
  365. package/bundled/skills/atdd-assistant/SKILL.md +74 -0
  366. package/bundled/skills/{claude-code/atdd-assistant → atdd-assistant}/acceptance-criteria-guide.md +1 -1
  367. package/bundled/skills/{claude-code/atdd-assistant → atdd-assistant}/atdd-workflow.md +1 -1
  368. package/bundled/skills/{claude-code/atdd-assistant/SKILL.md → atdd-assistant/guide.md} +11 -11
  369. package/bundled/skills/bdd-assistant/SKILL.md +70 -0
  370. package/bundled/skills/{claude-code/bdd-assistant → bdd-assistant}/bdd-workflow.md +1 -1
  371. package/bundled/skills/{claude-code/bdd-assistant → bdd-assistant}/gherkin-guide.md +1 -1
  372. package/bundled/skills/{claude-code/bdd-assistant/SKILL.md → bdd-assistant/guide.md} +11 -11
  373. package/bundled/skills/changelog-guide/SKILL.md +66 -0
  374. package/bundled/skills/{claude-code/changelog-guide/SKILL.md → changelog-guide/guide.md} +8 -6
  375. package/bundled/skills/checkin-assistant/SKILL.md +52 -0
  376. package/bundled/skills/{claude-code/checkin-assistant/SKILL.md → checkin-assistant/guide.md} +6 -6
  377. package/bundled/skills/code-review-assistant/SKILL.md +53 -0
  378. package/bundled/skills/{claude-code/code-review-assistant → code-review-assistant}/checkin-checklist.md +3 -3
  379. package/bundled/skills/{claude-code/code-review-assistant/SKILL.md → code-review-assistant/guide.md} +7 -5
  380. package/bundled/skills/{claude-code/code-review-assistant → code-review-assistant}/review-checklist.md +3 -3
  381. package/bundled/skills/commands/COMMAND-FAMILY-OVERVIEW.md +290 -0
  382. package/bundled/skills/{claude-code/commands → commands}/README.md +13 -3
  383. package/bundled/skills/{claude-code/commands → commands}/atdd.md +3 -3
  384. package/bundled/skills/{claude-code/commands → commands}/bdd.md +2 -2
  385. package/bundled/skills/commands/changelog.md +58 -0
  386. package/bundled/skills/{claude-code/commands → commands}/check.md +1 -1
  387. package/bundled/skills/commands/checkin.md +53 -0
  388. package/bundled/skills/{claude-code/commands → commands}/commit.md +3 -3
  389. package/bundled/skills/{claude-code/commands → commands}/config.md +1 -1
  390. package/bundled/skills/{claude-code/commands → commands}/coverage.md +5 -4
  391. package/bundled/skills/commands/derive-all.md +53 -0
  392. package/bundled/skills/commands/derive-atdd.md +49 -0
  393. package/bundled/skills/commands/derive-bdd.md +47 -0
  394. package/bundled/skills/commands/derive-tdd.md +48 -0
  395. package/bundled/skills/commands/derive.md +72 -0
  396. package/bundled/skills/commands/discover.md +80 -0
  397. package/bundled/skills/commands/docgen.md +61 -0
  398. package/bundled/skills/commands/docs.md +59 -0
  399. package/bundled/skills/commands/guide.md +44 -0
  400. package/bundled/skills/{claude-code/commands → commands}/init.md +2 -2
  401. package/bundled/skills/{claude-code/commands → commands}/methodology.md +32 -16
  402. package/bundled/skills/{claude-code/commands → commands}/refactor.md +2 -2
  403. package/bundled/skills/commands/release.md +56 -0
  404. package/bundled/skills/{claude-code/commands → commands}/requirement.md +3 -3
  405. package/bundled/skills/commands/reverse-bdd.md +47 -0
  406. package/bundled/skills/commands/reverse-sdd.md +51 -0
  407. package/bundled/skills/commands/reverse-tdd.md +51 -0
  408. package/bundled/skills/commands/reverse.md +63 -0
  409. package/bundled/skills/{claude-code/commands → commands}/review.md +3 -3
  410. package/bundled/skills/commands/sdd.md +135 -0
  411. package/bundled/skills/{claude-code/commands → commands}/tdd.md +3 -3
  412. package/bundled/skills/{claude-code/commands → commands}/update.md +2 -2
  413. package/bundled/skills/commit-standards/SKILL.md +60 -0
  414. package/bundled/skills/{claude-code/commit-standards → commit-standards}/conventional-commits.md +3 -3
  415. package/bundled/skills/{claude-code/commit-standards/SKILL.md → commit-standards/guide.md} +17 -5
  416. package/bundled/skills/{claude-code/commit-standards → commit-standards}/language-options.md +2 -2
  417. package/bundled/skills/docs-generator/SKILL.md +69 -0
  418. package/bundled/skills/docs-generator/guide.md +258 -0
  419. package/bundled/skills/{claude-code/documentation-guide → documentation-guide}/SKILL.md +7 -7
  420. package/bundled/skills/{claude-code/documentation-guide → documentation-guide}/documentation-structure.md +3 -3
  421. package/bundled/skills/{claude-code/documentation-guide → documentation-guide}/readme-template.md +2 -2
  422. package/bundled/skills/{claude-code/error-code-guide → error-code-guide}/SKILL.md +7 -5
  423. package/bundled/skills/forward-derivation/SKILL.md +61 -0
  424. package/bundled/skills/{claude-code/forward-derivation/SKILL.md → forward-derivation/guide.md} +44 -29
  425. package/bundled/skills/{claude-code/git-workflow-guide → git-workflow-guide}/SKILL.md +7 -5
  426. package/bundled/skills/{claude-code/git-workflow-guide → git-workflow-guide}/branch-naming.md +2 -2
  427. package/bundled/skills/{claude-code/git-workflow-guide → git-workflow-guide}/git-workflow.md +3 -3
  428. package/bundled/skills/{claude-code/logging-guide → logging-guide}/SKILL.md +7 -5
  429. package/bundled/skills/methodology-system/SKILL.md +75 -0
  430. package/bundled/skills/{claude-code/methodology-system → methodology-system}/create-methodology.md +1 -1
  431. package/bundled/skills/{claude-code/methodology-system/SKILL.md → methodology-system/guide.md} +51 -16
  432. package/bundled/skills/methodology-system/integrated-flow.md +454 -0
  433. package/bundled/skills/{claude-code/methodology-system → methodology-system}/runtime.md +2 -2
  434. package/bundled/skills/project-discovery/SKILL.md +63 -0
  435. package/bundled/skills/project-discovery/guide.md +367 -0
  436. package/bundled/skills/project-discovery/workflow.md +566 -0
  437. package/bundled/skills/{claude-code/project-structure-guide → project-structure-guide}/SKILL.md +14 -4
  438. package/bundled/skills/refactoring-assistant/SKILL.md +78 -0
  439. package/bundled/skills/{claude-code/refactoring-assistant/SKILL.md → refactoring-assistant/guide.md} +7 -7
  440. package/bundled/skills/release-standards/SKILL.md +61 -0
  441. package/bundled/skills/{claude-code/release-standards → release-standards}/changelog-format.md +2 -2
  442. package/bundled/skills/{claude-code/release-standards/SKILL.md → release-standards/guide.md} +7 -5
  443. package/bundled/skills/{claude-code/release-standards → release-standards}/release-workflow.md +59 -24
  444. package/bundled/skills/{claude-code/release-standards → release-standards}/semantic-versioning.md +2 -2
  445. package/bundled/skills/requirement-assistant/SKILL.md +66 -0
  446. package/bundled/skills/{claude-code/requirement-assistant/SKILL.md → requirement-assistant/guide.md} +14 -6
  447. package/bundled/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-checklist.md +2 -2
  448. package/bundled/skills/{claude-code/requirement-assistant → requirement-assistant}/requirement-writing.md +2 -2
  449. package/bundled/skills/reverse-engineer/SKILL.md +64 -0
  450. package/bundled/skills/{claude-code/reverse-engineer → reverse-engineer}/bdd-extraction.md +1 -1
  451. package/bundled/skills/{claude-code/reverse-engineer/SKILL.md → reverse-engineer/guide.md} +21 -18
  452. package/bundled/skills/{claude-code/reverse-engineer → reverse-engineer}/tdd-analysis.md +1 -1
  453. package/bundled/skills/{claude-code/reverse-engineer → reverse-engineer}/workflow.md +2 -2
  454. package/bundled/skills/spec-driven-dev/SKILL.md +80 -0
  455. package/bundled/skills/{claude-code/spec-driven-dev/SKILL.md → spec-driven-dev/guide.md} +50 -8
  456. package/bundled/skills/tdd-assistant/SKILL.md +65 -0
  457. package/bundled/skills/{claude-code/tdd-assistant/SKILL.md → tdd-assistant/guide.md} +10 -10
  458. package/bundled/skills/{claude-code/tdd-assistant → tdd-assistant}/language-examples.md +3 -3
  459. package/bundled/skills/{claude-code/tdd-assistant → tdd-assistant}/tdd-workflow.md +2 -2
  460. package/bundled/skills/test-coverage-assistant/SKILL.md +63 -0
  461. package/bundled/skills/{claude-code/test-coverage-assistant/SKILL.md → test-coverage-assistant/guide.md} +39 -24
  462. package/bundled/skills/{claude-code/testing-guide → testing-guide}/SKILL.md +12 -7
  463. package/bundled/skills/{claude-code/testing-guide → testing-guide}/testing-pyramid.md +3 -3
  464. package/bundled/skills/testing-guide/testing-theory.md +2291 -0
  465. package/bundled/skills/tools/cline/.clinerules +79 -0
  466. package/bundled/skills/tools/cline/README.md +50 -0
  467. package/bundled/skills/tools/copilot/README.md +99 -0
  468. package/bundled/skills/tools/copilot/copilot-instructions.md +71 -0
  469. package/bundled/skills/tools/cursor/.cursorrules +101 -0
  470. package/bundled/skills/tools/cursor/README.md +50 -0
  471. package/bundled/skills/tools/windsurf/.windsurfrules +76 -0
  472. package/bundled/skills/tools/windsurf/README.md +51 -0
  473. package/bundled/skills/workflows/README.md +303 -0
  474. package/bundled/skills/workflows/code-review.workflow.yaml +186 -0
  475. package/bundled/skills/workflows/feature-dev.workflow.yaml +174 -0
  476. package/bundled/skills/workflows/integrated-flow.workflow.yaml +238 -0
  477. package/bundled/skills/workflows/large-codebase-analysis.workflow.yaml +226 -0
  478. package/bundled/skills/workflows/release.workflow.yaml +893 -0
  479. package/package.json +14 -1
  480. package/src/commands/agent.js +417 -0
  481. package/src/commands/ai-context.js +552 -0
  482. package/src/commands/check.js +196 -131
  483. package/src/commands/config.js +1262 -0
  484. package/src/commands/configure.js +3 -950
  485. package/src/commands/fix.js +53 -0
  486. package/src/commands/hitl.js +19 -0
  487. package/src/commands/init.js +320 -1027
  488. package/src/commands/list.js +1 -1
  489. package/src/commands/simulate.js +61 -0
  490. package/src/commands/spec.js +288 -0
  491. package/src/commands/start.js +373 -0
  492. package/src/commands/sweep.js +142 -0
  493. package/src/commands/update.js +136 -19
  494. package/src/commands/workflow.js +689 -0
  495. package/src/config/ai-agent-paths.js +292 -28
  496. package/src/core/constants.js +520 -0
  497. package/src/core/errors.js +398 -0
  498. package/src/core/manifest.js +474 -0
  499. package/src/core/paths.js +398 -0
  500. package/src/flows/init-flow.js +243 -0
  501. package/src/hitl/checkpoint.js +80 -0
  502. package/src/hitl/classifier.js +54 -0
  503. package/src/hitl/manager.js +88 -0
  504. package/src/i18n/messages.js +907 -99
  505. package/src/index.js +1 -0
  506. package/src/installers/integration-installer.js +237 -0
  507. package/src/installers/manifest-installer.js +131 -0
  508. package/src/installers/skills-installer.js +286 -0
  509. package/src/installers/standards-installer.js +193 -0
  510. package/src/missions/MissionManager.js +501 -0
  511. package/src/prompts/init.js +235 -135
  512. package/src/prompts/integrations.js +13 -1
  513. package/src/schemas/standard.schema.json +117 -0
  514. package/src/utils/agent-adapter.js +320 -0
  515. package/src/utils/agents-installer.js +393 -0
  516. package/src/utils/config-loader.js +47 -0
  517. package/src/utils/config-manager.js +108 -0
  518. package/src/utils/config-merger.js +47 -0
  519. package/src/utils/context-chunker.js +467 -0
  520. package/src/utils/copier.js +59 -99
  521. package/src/utils/github.js +22 -18
  522. package/src/utils/hasher.js +2 -16
  523. package/src/utils/inquirer-patch.js +98 -0
  524. package/src/utils/integration-generator.js +420 -110
  525. package/src/utils/reference-sync.js +69 -19
  526. package/src/utils/skills-installer.js +6 -3
  527. package/src/utils/standard-fixer.js +141 -0
  528. package/src/utils/standard-validator.js +329 -0
  529. package/src/utils/workflow-executor.js +886 -0
  530. package/src/utils/workflow-state.js +404 -0
  531. package/src/utils/workflows-installer.js +545 -0
  532. package/src/vibe/auto-sweep.js +349 -0
  533. package/src/vibe/micro-spec.js +428 -0
  534. package/standards-registry.json +429 -107
  535. package/bundled/locales/zh-CN/skills/claude-code/README.md +0 -174
  536. package/bundled/locales/zh-CN/skills/claude-code/test-coverage-assistant/SKILL.md +0 -282
  537. package/bundled/locales/zh-TW/skills/claude-code/README.md +0 -174
  538. package/bundled/skills/claude-code/README.md +0 -207
  539. package/bundled/skills/claude-code/commands/changelog.md +0 -57
  540. package/bundled/skills/claude-code/commands/derive-all.md +0 -214
  541. package/bundled/skills/claude-code/commands/derive-atdd.md +0 -177
  542. package/bundled/skills/claude-code/commands/derive-bdd.md +0 -158
  543. package/bundled/skills/claude-code/commands/derive-tdd.md +0 -259
  544. package/bundled/skills/claude-code/commands/docs.md +0 -75
  545. package/bundled/skills/claude-code/commands/release.md +0 -50
  546. package/bundled/skills/claude-code/commands/reverse-bdd.md +0 -264
  547. package/bundled/skills/claude-code/commands/reverse-spec.md +0 -185
  548. package/bundled/skills/claude-code/commands/reverse-tdd.md +0 -351
  549. package/bundled/skills/claude-code/commands/spec.md +0 -69
  550. package/bundled/skills/claude-code/methodology-system/integrated-flow.md +0 -322
  551. /package/bundled/skills/{claude-code/CONTRIBUTING.template.md → CONTRIBUTING.template.md} +0 -0
  552. /package/bundled/skills/{claude-code/ai → ai}/standards/checkin.ai.yaml +0 -0
  553. /package/bundled/skills/{claude-code/ai → ai}/standards/commit.ai.yaml +0 -0
  554. /package/bundled/skills/{claude-code/ai → ai}/standards/refactoring.ai.yaml +0 -0
  555. /package/bundled/skills/{claude-code/ai → ai}/standards/testing.ai.yaml +0 -0
  556. /package/bundled/skills/{claude-code/project-structure-guide → project-structure-guide}/language-patterns.md +0 -0
@@ -1,110 +1,25 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
+ import { execSync } from 'child_process';
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
3
5
  import { basename, join } from 'path';
4
6
  import {
5
- getStandardsByLevel,
6
- getRepositoryInfo,
7
- getSkillFiles,
8
- getStandardSource,
9
- getOptionSource,
10
- findOption
11
- } from '../utils/registry.js';
7
+ manifestExists as isInitialized
8
+ } from '../core/manifest.js';
9
+ import { t, detectLanguage } from '../i18n/messages.js';
12
10
  import { detectAll } from '../utils/detector.js';
11
+ import { promptConfirm } from '../prompts/init.js';
12
+ import { runInitFlow } from '../flows/init-flow.js';
13
+ import { installStandards } from '../installers/standards-installer.js';
14
+ import { installIntegrations } from '../installers/integration-installer.js';
15
+ import { installSkills, installCommands } from '../installers/skills-installer.js';
16
+ import { writeFinalManifest } from '../installers/manifest-installer.js';
13
17
  import {
14
- copyStandard,
15
- copyIntegration,
16
- writeManifest,
17
- isInitialized
18
- } from '../utils/copier.js';
19
- import { t } from '../i18n/messages.js';
20
- import {
21
- downloadSkillToLocation,
22
18
  getInstalledSkillsInfo,
23
19
  getProjectInstalledSkillsInfo,
24
- writeSkillsManifest,
25
- getSkillsDir,
26
- getProjectSkillsDir
27
- } from '../utils/github.js';
28
- import {
29
- installSkillsToMultipleAgents,
30
- installCommandsToMultipleAgents,
31
- getInstalledSkillsInfoForAgent
32
- } from '../utils/skills-installer.js';
33
- import {
34
20
  getAgentConfig,
35
- getAgentDisplayName,
36
- getSkillsDirForAgent,
37
- getCommandsDirForAgent
38
- } from '../config/ai-agent-paths.js';
39
- import {
40
- promptAITools,
41
- promptSkillsInstallLocation,
42
- promptStandardsScope,
43
- promptLevel,
44
- promptLanguage,
45
- promptFramework,
46
- promptLocale,
47
- promptConfirm,
48
- promptFormat,
49
- promptStandardOptions,
50
- promptContentMode,
51
- promptMethodology,
52
- promptCommandsInstallation,
53
- handleAgentsMdSharing
54
- } from '../prompts/init.js';
55
- import {
56
- promptIntegrationConfig
57
- } from '../prompts/integrations.js';
58
- import {
59
- writeIntegrationFile,
60
- integrationFileExists,
61
- getToolFilePath
62
- } from '../utils/integration-generator.js';
63
- import { computeFileHash } from '../utils/hasher.js';
64
-
65
- // Integration file mappings (legacy - for fallback)
66
- const INTEGRATION_MAPPINGS = {
67
- cursor: {
68
- source: 'integrations/cursor/.cursorrules',
69
- target: '.cursorrules'
70
- },
71
- windsurf: {
72
- source: 'integrations/windsurf/.windsurfrules',
73
- target: '.windsurfrules'
74
- },
75
- cline: {
76
- source: 'integrations/cline/.clinerules',
77
- target: '.clinerules'
78
- },
79
- copilot: {
80
- source: 'integrations/github-copilot/copilot-instructions.md',
81
- target: '.github/copilot-instructions.md'
82
- },
83
- antigravity: {
84
- source: 'integrations/google-antigravity/INSTRUCTIONS.md',
85
- target: 'INSTRUCTIONS.md'
86
- },
87
- codex: {
88
- source: 'integrations/openai-codex/AGENTS.md',
89
- target: 'AGENTS.md'
90
- },
91
- 'gemini-cli': {
92
- source: 'integrations/gemini-cli/GEMINI.md',
93
- target: 'GEMINI.md'
94
- },
95
- opencode: {
96
- source: 'integrations/opencode/AGENTS.md',
97
- target: 'AGENTS.md'
98
- }
99
- };
100
-
101
- // Extension file mappings
102
- const EXTENSION_MAPPINGS = {
103
- csharp: 'extensions/languages/csharp-style.md',
104
- php: 'extensions/languages/php-style.md',
105
- 'fat-free': 'extensions/frameworks/fat-free-patterns.md',
106
- 'zh-tw': 'extensions/locales/zh-tw.md'
107
- };
21
+ getAgentDisplayName
22
+ } from '../utils/github.js';
108
23
 
109
24
  /**
110
25
  * Init command - initialize standards in current project
@@ -112,10 +27,8 @@ const EXTENSION_MAPPINGS = {
112
27
  */
113
28
  export async function initCommand(options) {
114
29
  const projectPath = process.cwd();
115
- const msg = t().commands.init;
116
- const common = t().commands.common;
117
-
118
- // Note: UI language is now set globally in uds.js preAction hook
30
+ let msg = t().commands.init;
31
+ let common = t().commands.common;
119
32
 
120
33
  console.log();
121
34
  console.log(chalk.bold(msg.title));
@@ -134,395 +47,34 @@ export async function initCommand(options) {
134
47
  spinner.succeed(msg.analysisComplete);
135
48
 
136
49
  // Show detected info
137
- const detectedLangs = Object.entries(detected.languages)
138
- .filter(([, v]) => v)
139
- .map(([k]) => k);
140
- const detectedFrameworks = Object.entries(detected.frameworks)
141
- .filter(([, v]) => v)
142
- .map(([k]) => k);
143
- const detectedTools = Object.entries(detected.aiTools)
144
- .filter(([, v]) => v)
145
- .map(([k]) => k);
50
+ const detectedLangs = Object.entries(detected.languages).filter(([, v]) => v).map(([k]) => k);
51
+ const detectedFrameworks = Object.entries(detected.frameworks).filter(([, v]) => v).map(([k]) => k);
52
+ const detectedTools = Object.entries(detected.aiTools).filter(([, v]) => v).map(([k]) => k);
146
53
 
147
- if (detectedLangs.length > 0) {
148
- console.log(chalk.gray(` ${msg.languages}: ${detectedLangs.join(', ')}`));
149
- }
150
- if (detectedFrameworks.length > 0) {
151
- console.log(chalk.gray(` ${msg.frameworks}: ${detectedFrameworks.join(', ')}`));
152
- }
153
- if (detectedTools.length > 0) {
154
- console.log(chalk.gray(` ${msg.aiTools}: ${detectedTools.join(', ')}`));
155
- }
54
+ if (detectedLangs.length > 0) console.log(chalk.gray(` ${msg.languages}: ${detectedLangs.join(', ')}`));
55
+ if (detectedFrameworks.length > 0) console.log(chalk.gray(` ${msg.frameworks}: ${detectedFrameworks.join(', ')}`));
56
+ if (detectedTools.length > 0) console.log(chalk.gray(` ${msg.aiTools}: ${detectedTools.join(', ')}`));
156
57
  console.log();
157
58
 
158
- // Initialize configuration variables
159
- let level = options.level ? parseInt(options.level, 10) : null;
160
- let languages = options.lang ? [options.lang] : null;
161
- let frameworks = options.framework ? [options.framework] : null;
162
- let locale = options.locale || null;
163
- let format = options.format || null;
164
- let standardOptions = {};
165
-
166
- // Skills configuration (unified for all AI agents)
167
- let skillsConfig = {
168
- installed: false,
169
- location: null, // Legacy: single location for backward compatibility
170
- needsInstall: false,
171
- updateTargets: [], // Legacy: array of 'user' or 'project'
172
- // New: multi-agent installations
173
- skillsInstallations: [], // Array of {agent, level}
174
- commandsInstallations: [] // Array of {agent, level}
175
- };
176
-
177
- // AI tools configuration
178
- let aiTools = [];
179
- let integrations = [];
59
+ // Configuration object
60
+ let config = {};
180
61
 
181
62
  if (!options.yes) {
182
- // ===== Interactive mode =====
183
-
184
- // STEP 3: Ask for AI tools (all 9 supported tools)
185
- aiTools = await promptAITools({
186
- claudeCode: detected.aiTools.claudeCode || false,
187
- cursor: detected.aiTools.cursor || false,
188
- windsurf: detected.aiTools.windsurf || false,
189
- cline: detected.aiTools.cline || false,
190
- copilot: detected.aiTools.copilot || false,
191
- antigravity: detected.aiTools.antigravity || false,
192
- codex: detected.aiTools.codex || false,
193
- opencode: detected.aiTools.opencode || false,
194
- geminiCli: detected.aiTools.geminiCli || false
195
- });
196
-
197
- // Handle AGENTS.md sharing notification (Codex + OpenCode)
198
- aiTools = handleAgentsMdSharing(aiTools);
199
-
200
- // Check which tools support skills
201
- const skillsSupportedTools = aiTools.filter(tool => {
202
- const config = getAgentConfig(tool);
203
- return config?.supportsSkills && config?.skills;
204
- });
205
- const hasSkillsTools = skillsSupportedTools.length > 0;
206
-
207
- // STEP 4: Skills handling (unified for all AI agents)
208
- // Now supports multiple agents with individual user/project level choices
209
- if (hasSkillsTools) {
210
- // Check existing installations for each skills-supported agent
211
- console.log();
212
- console.log(chalk.cyan(msg.skillsStatus));
213
-
214
- let hasAnyExisting = false;
215
- for (const tool of skillsSupportedTools) {
216
- const displayName = getAgentDisplayName(tool);
217
- const projectInfo = getInstalledSkillsInfoForAgent(tool, 'project', projectPath);
218
- const userInfo = getInstalledSkillsInfoForAgent(tool, 'user');
219
-
220
- if (projectInfo || userInfo) {
221
- hasAnyExisting = true;
222
- if (projectInfo) {
223
- console.log(chalk.gray(` ${displayName} ${msg.projectLevel}: v${projectInfo.version || 'unknown'}`));
224
- }
225
- if (userInfo) {
226
- console.log(chalk.gray(` ${displayName} ${msg.userLevel}: v${userInfo.version || 'unknown'}`));
227
- }
228
- }
229
- }
230
-
231
- if (!hasAnyExisting) {
232
- console.log(chalk.gray(` ${msg.noSkillsDetected}`));
233
- }
234
-
235
- // Prompt for installation locations (multi-agent, multi-select)
236
- const installations = await promptSkillsInstallLocation(aiTools);
237
-
238
- if (installations.length > 0) {
239
- // Check if marketplace was selected
240
- const isMarketplace = installations.some(i => i.level === 'marketplace');
241
-
242
- if (isMarketplace) {
243
- skillsConfig = {
244
- ...skillsConfig,
245
- installed: true,
246
- location: 'marketplace',
247
- needsInstall: false,
248
- updateTargets: [],
249
- skillsInstallations: installations
250
- };
251
- } else {
252
- // File-based installations
253
- skillsConfig = {
254
- ...skillsConfig,
255
- installed: true,
256
- location: installations.length === 1 ? installations[0].level : 'multiple',
257
- needsInstall: true,
258
- updateTargets: installations.map(i => i.level),
259
- skillsInstallations: installations
260
- };
261
- }
262
- }
263
-
264
- // STEP 4.5: Slash commands installation (for supported agents)
265
- const commandsAgents = await promptCommandsInstallation(aiTools);
266
- if (commandsAgents.length > 0) {
267
- skillsConfig.commandsInstallations = commandsAgents;
268
- }
269
- }
270
-
271
- // STEP 5: Standards scope (if Skills are installed)
272
- const standardsScope = await promptStandardsScope(skillsConfig.installed);
273
-
274
- // STEP 6: Adoption level
275
- if (!level) {
276
- level = await promptLevel();
277
- }
278
-
279
- // STEP 7: Standards format
280
- if (!format) {
281
- format = await promptFormat();
282
- }
283
-
284
- // STEP 8: Standard options
285
- standardOptions = await promptStandardOptions(level);
286
-
287
- // STEP 9: Language extensions
288
- if (!languages) {
289
- languages = await promptLanguage(detected.languages) || [];
290
- }
291
-
292
- // STEP 10: Framework extensions
293
- if (!frameworks) {
294
- frameworks = await promptFramework(detected.frameworks) || [];
295
- }
296
-
297
- // STEP 11: Locale
298
- if (!locale) {
299
- locale = await promptLocale();
300
- }
301
-
302
- // Determine integrations from AI tools (excluding claude-code)
303
- integrations = aiTools.filter(t => t !== 'claude-code');
304
-
305
- // STEP 12: Integration configuration for non-Claude tools
306
- // All tools share the same configuration since they have identical functionality
307
- const integrationConfigs = {};
308
- if (integrations.length > 0) {
309
- console.log();
310
- console.log(chalk.cyan(msg.integrationConfig));
311
-
312
- if (integrations.length > 1) {
313
- console.log(chalk.gray(` ${msg.sharedRuleConfig}`));
314
- console.log();
315
- }
316
-
317
- // Check if any existing files
318
- const existingFiles = {};
319
- for (const tool of integrations) {
320
- existingFiles[tool] = integrationFileExists(tool, projectPath);
321
- }
322
-
323
- const hasAnyExisting = Object.values(existingFiles).some(v => v);
324
-
325
- // Prompt configuration once for all tools
326
- // Use first tool as representative, but mention all tools
327
- const toolNames = integrations.length === 1
328
- ? integrations[0]
329
- : `${integrations.slice(0, -1).join(', ')} & ${integrations[integrations.length - 1]}`;
330
-
331
- const sharedConfig = await promptIntegrationConfig(toolNames, detected, hasAnyExisting);
332
-
333
- // Apply shared config to all tools (unless user chose to keep existing)
334
- if (sharedConfig.mergeStrategy !== 'keep') {
335
- for (const tool of integrations) {
336
- // Each tool gets the same config but with its specific tool name
337
- integrationConfigs[tool] = { ...sharedConfig, tool };
338
- }
339
- }
340
- }
341
-
342
- // Store integration configs for later use
343
- skillsConfig.integrationConfigs = integrationConfigs;
344
-
345
- // Store standards scope for later use
346
- skillsConfig.standardsScope = standardsScope;
347
-
348
- // STEP 13: Content mode for integration files (if any AI tools selected)
349
- let contentMode = 'minimal'; // default for backward compatibility
350
- if (aiTools.length > 0) {
351
- contentMode = await promptContentMode();
352
- }
353
- skillsConfig.contentMode = contentMode;
354
-
355
- // STEP 14: Development methodology (experimental - requires -E flag)
356
- let methodology = null;
357
- if (options.experimental) {
358
- methodology = await promptMethodology();
359
- }
360
- skillsConfig.methodology = methodology;
361
-
63
+ // Interactive Mode
64
+ config = await runInitFlow(options, detected, projectPath);
65
+ if (!config) return; // Flow cancelled or exited
66
+ // Re-fetch translations after language selection in flow
67
+ msg = t().commands.init;
68
+ common = t().commands.common;
362
69
  } else {
363
- // ===== Non-interactive mode =====
364
- level = level || 2;
365
- format = format || 'ai';
366
- languages = languages || Object.keys(detected.languages).filter(k => detected.languages[k]);
367
- frameworks = frameworks || Object.keys(detected.frameworks).filter(k => detected.frameworks[k]);
368
- integrations = Object.keys(detected.aiTools).filter(k => detected.aiTools[k] && k !== 'claudeCode');
369
-
370
- // Default standard options
371
- standardOptions = {
372
- workflow: options.workflow || 'github-flow',
373
- merge_strategy: options.mergeStrategy || 'squash',
374
- commit_language: options.commitLang || 'english',
375
- test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing']
376
- };
377
-
378
- // Determine AI tools from detection for skills compatibility check
379
- const detectedAiTools = Object.keys(detected.aiTools).filter(k => detected.aiTools[k]);
380
- // Map detected keys to standard tool names
381
- const aiToolsNormalized = detectedAiTools.map(k => {
382
- if (k === 'claudeCode') return 'claude-code';
383
- if (k === 'geminiCli') return 'gemini-cli';
384
- return k;
385
- });
386
-
387
- // Assign normalized AI tools to manifest variable
388
- aiTools = aiToolsNormalized;
389
-
390
- // Check if only skills-compatible tools are detected
391
- const hasSkillsCompatibleTool = aiToolsNormalized.some(t => t === 'claude-code' || t === 'opencode');
392
- const onlySkillsCompatibleTools = aiToolsNormalized.every(t => t === 'claude-code' || t === 'opencode');
393
-
394
- // Handle Skills configuration based on CLI flag
395
- // Default: marketplace only if all detected tools support skills
396
- // If non-skills tools are detected, default to 'none' (full standards)
397
- let skillsLocationFlag = options.skillsLocation;
398
- if (!skillsLocationFlag) {
399
- skillsLocationFlag = (hasSkillsCompatibleTool && onlySkillsCompatibleTools) ? 'marketplace' : 'none';
400
- }
401
-
402
- // Content mode from CLI flag (default: index for best balance)
403
- const contentModeFlag = options.contentMode || 'index';
404
-
405
- if (skillsLocationFlag === 'marketplace') {
406
- skillsConfig = {
407
- installed: true,
408
- location: 'marketplace',
409
- needsInstall: false,
410
- updateTargets: [],
411
- standardsScope: 'minimal',
412
- contentMode: contentModeFlag
413
- };
414
- } else if (skillsLocationFlag === 'none') {
415
- skillsConfig = {
416
- installed: false,
417
- location: null,
418
- needsInstall: false,
419
- updateTargets: [],
420
- standardsScope: 'full',
421
- contentMode: contentModeFlag
422
- };
423
- } else if (skillsLocationFlag === 'project') {
424
- skillsConfig = {
425
- installed: true,
426
- location: 'project',
427
- needsInstall: true,
428
- updateTargets: ['project'],
429
- standardsScope: 'minimal',
430
- contentMode: contentModeFlag
431
- };
432
- } else if (skillsLocationFlag === 'user') {
433
- skillsConfig = {
434
- installed: true,
435
- location: 'user',
436
- needsInstall: true,
437
- updateTargets: ['user'],
438
- standardsScope: 'minimal',
439
- contentMode: contentModeFlag
440
- };
441
- } else {
442
- // Fallback: auto-detect user/project installation
443
- const userSkillsInfo = getInstalledSkillsInfo();
444
- const projectSkillsInfo = getProjectInstalledSkillsInfo(projectPath);
445
-
446
- if (userSkillsInfo?.installed || projectSkillsInfo?.installed) {
447
- const location = projectSkillsInfo?.installed ? 'project' : 'user';
448
- skillsConfig = {
449
- installed: true,
450
- location,
451
- needsInstall: false,
452
- updateTargets: [],
453
- standardsScope: 'minimal',
454
- contentMode: contentModeFlag
455
- };
456
- } else {
457
- // Fallback to marketplace if nothing detected
458
- skillsConfig = {
459
- installed: true,
460
- location: 'marketplace',
461
- needsInstall: false,
462
- updateTargets: [],
463
- standardsScope: 'minimal',
464
- contentMode: contentModeFlag
465
- };
466
- }
467
- }
468
-
469
- // Auto-install commands for detected agents that support commands
470
- // This matches the interactive mode behavior where commands are checked by default (project level)
471
- const commandsSupportedAgents = aiToolsNormalized.filter(tool => {
472
- const config = getAgentConfig(tool);
473
- return config?.commands !== null;
474
- });
475
-
476
- if (commandsSupportedAgents.length > 0) {
477
- // Convert to {agent, level} format for consistency with interactive mode
478
- skillsConfig.commandsInstallations = commandsSupportedAgents.map(agent => ({
479
- agent,
480
- level: 'project' // Default to project level in non-interactive mode
481
- }));
482
- }
70
+ // Non-interactive Mode (Defaults/Flags)
71
+ config = buildNonInteractiveConfig(options, detected, projectPath);
483
72
  }
484
73
 
485
- // Configuration summary
486
- console.log();
487
- console.log(chalk.cyan(msg.configSummary));
488
- console.log(chalk.gray(` ${common.level}: ${level}`));
489
- console.log(chalk.gray(` ${common.format}: ${format === 'ai' ? 'Compact' : format === 'human' ? 'Detailed' : 'Both'}`));
490
- console.log(chalk.gray(` ${msg.standardsScope}: ${skillsConfig.standardsScope === 'minimal' ? msg.standardsScopeLean : msg.standardsScopeComplete}`));
491
- console.log(chalk.gray(` ${msg.contentModeLabel}: ${skillsConfig.contentMode === 'full' ? msg.contentModeFull : skillsConfig.contentMode === 'index' ? msg.contentModeIndex : msg.contentModeMinimal}`));
492
- console.log(chalk.gray(` ${msg.languages}: ${languages.length > 0 ? languages.join(', ') : common.none}`));
493
- console.log(chalk.gray(` ${msg.frameworks}: ${frameworks.length > 0 ? frameworks.join(', ') : common.none}`));
494
- console.log(chalk.gray(` ${msg.locale}: ${locale || msg.localeDefault}`));
495
- console.log(chalk.gray(` ${common.aiTools}: ${aiTools.length > 0 ? aiTools.join(', ') : common.none}`));
496
- console.log(chalk.gray(` ${msg.integrations}: ${integrations.length > 0 ? integrations.join(', ') : common.none}`));
497
- console.log(chalk.gray(` ${common.methodology}: ${skillsConfig.methodology || common.none}${skillsConfig.methodology ? chalk.yellow(' [Experimental]') : ''}`));
498
-
499
- if (skillsConfig.installed) {
500
- let skillsStatusText;
501
- if (skillsConfig.location === 'marketplace') {
502
- skillsStatusText = msg.skillsMarketplace;
503
- } else {
504
- skillsStatusText = skillsConfig.needsInstall
505
- ? msg.skillsInstallTo.replace('{location}', skillsConfig.location)
506
- : msg.skillsUsingExisting.replace('{location}', skillsConfig.location);
507
- }
508
- console.log(chalk.gray(` ${msg.skillsLabel}: ${skillsStatusText}`));
509
- }
510
-
511
- // Show selected standard options
512
- if (standardOptions.workflow) {
513
- console.log(chalk.gray(` ${msg.gitWorkflow}: ${standardOptions.workflow}`));
514
- }
515
- if (standardOptions.merge_strategy) {
516
- console.log(chalk.gray(` ${msg.mergeStrategy}: ${standardOptions.merge_strategy}`));
517
- }
518
- if (standardOptions.commit_language) {
519
- console.log(chalk.gray(` ${msg.commitLanguage}: ${standardOptions.commit_language}`));
520
- }
521
- if (standardOptions.test_levels && standardOptions.test_levels.length > 0) {
522
- console.log(chalk.gray(` ${msg.testLevels}: ${standardOptions.test_levels.join(', ')}`));
523
- }
524
- console.log();
74
+ // Show Configuration Summary
75
+ displaySummary(config, msg, common);
525
76
 
77
+ // Confirm Installation
526
78
  if (!options.yes) {
527
79
  const confirmed = await promptConfirm(msg.proceedInstall);
528
80
  if (!confirmed) {
@@ -531,610 +83,351 @@ export async function initCommand(options) {
531
83
  }
532
84
  }
533
85
 
534
- // ===== Start installation =====
86
+ // ===== Execute Installation =====
535
87
  console.log();
536
- const copySpinner = ora(msg.copyingStandards).start();
88
+
89
+ // 1. Install Standards
90
+ const standardsResults = await installStandards(config, projectPath);
91
+ config.installedStandards = standardsResults.standards.map(s => basename(s));
537
92
 
538
- const results = {
539
- standards: [],
540
- extensions: [],
541
- integrations: [],
93
+ // 2. Install Integrations
94
+ const integrationResults = await installIntegrations(config, projectPath);
95
+
96
+ // 3. Install Skills & Commands
97
+ const skillsResults = {
542
98
  skills: [],
543
99
  commands: [],
544
100
  errors: [],
545
- // New: hash tracking for enhanced file integrity
546
101
  skillHashes: {},
547
- commandHashes: {},
548
- integrationBlockHashes: {}
102
+ commandHashes: {}
549
103
  };
550
-
551
- // Get standards for the selected level
552
- const standards = getStandardsByLevel(level);
553
-
554
- // Determine which standards to copy based on scope
555
- const standardsToCopy = skillsConfig.standardsScope === 'minimal'
556
- ? standards.filter(s => s.category === 'reference')
557
- : standards.filter(s => s.category === 'reference' || s.category === 'skill');
558
-
559
- // Helper to copy standard with format awareness
560
- const copyStandardWithFormat = async (std, targetFormat) => {
561
- const sourcePath = getStandardSource(std, targetFormat);
562
- const result = await copyStandard(sourcePath, '.standards', projectPath);
563
- return { ...result, sourcePath };
104
+ await installSkills(config.skillsConfig, projectPath, msg, skillsResults);
105
+ await installCommands(config.skillsConfig, projectPath, msg, skillsResults);
106
+
107
+ // Combine results
108
+ const combinedResults = {
109
+ standards: standardsResults.standards,
110
+ extensions: standardsResults.extensions,
111
+ integrations: integrationResults.integrations,
112
+ skills: skillsResults.skills,
113
+ commands: skillsResults.commands,
114
+ errors: [
115
+ ...standardsResults.errors,
116
+ ...integrationResults.errors,
117
+ ...skillsResults.errors
118
+ ],
119
+ fileHashes: standardsResults.fileHashes,
120
+ skillHashes: skillsResults.skillHashes,
121
+ commandHashes: skillsResults.commandHashes,
122
+ integrationBlockHashes: integrationResults.integrationBlockHashes,
123
+ manifestIntegrationConfigs: integrationResults.manifestIntegrationConfigs
564
124
  };
565
125
 
566
- // Helper to copy option files
567
- const copyOptionFiles = async (std, optionCategory, selectedOptionIds, targetFormat) => {
568
- const copiedOptions = [];
569
- if (!std.options || !std.options[optionCategory]) return copiedOptions;
570
-
571
- const optionIds = Array.isArray(selectedOptionIds) ? selectedOptionIds : [selectedOptionIds];
572
- for (const optionId of optionIds) {
573
- const option = findOption(std, optionCategory, optionId);
574
- if (option) {
575
- const sourcePath = getOptionSource(option, targetFormat);
576
- const result = await copyStandard(sourcePath, '.standards/options', projectPath);
577
- if (result.success) {
578
- copiedOptions.push(sourcePath);
579
- } else {
580
- results.errors.push(`${sourcePath}: ${result.error}`);
581
- }
582
- }
583
- }
584
- return copiedOptions;
585
- };
126
+ // 4. Write Manifest & Display Summary
127
+ writeFinalManifest(config, combinedResults, projectPath);
586
128
 
587
- // Copy standards based on format
588
- const formatsToUse = format === 'both' ? ['ai', 'human'] : [format];
129
+ // 5. Setup Pre-commit Hook
130
+ await setupHuskyHook(projectPath);
589
131
 
590
- for (const std of standardsToCopy) {
591
- for (const targetFormat of formatsToUse) {
592
- const { success, sourcePath, error } = await copyStandardWithFormat(std, targetFormat);
593
- if (success) {
594
- results.standards.push(sourcePath);
595
- } else {
596
- results.errors.push(`${sourcePath}: ${error}`);
597
- }
598
- }
132
+ process.exit(0);
133
+ }
599
134
 
600
- // Copy selected options for this standard
601
- if (std.options) {
602
- for (const targetFormat of formatsToUse) {
603
- // Git workflow options
604
- if (std.id === 'git-workflow') {
605
- if (standardOptions.workflow) {
606
- const copied = await copyOptionFiles(std, 'workflow', standardOptions.workflow, targetFormat);
607
- results.standards.push(...copied);
608
- }
609
- if (standardOptions.merge_strategy) {
610
- const copied = await copyOptionFiles(std, 'merge_strategy', standardOptions.merge_strategy, targetFormat);
611
- results.standards.push(...copied);
612
- }
613
- }
614
- // Commit message options
615
- if (std.id === 'commit-message' && standardOptions.commit_language) {
616
- const copied = await copyOptionFiles(std, 'commit_language', standardOptions.commit_language, targetFormat);
617
- results.standards.push(...copied);
618
- }
619
- // Testing options
620
- if (std.id === 'testing' && standardOptions.test_levels) {
621
- const copied = await copyOptionFiles(std, 'test_level', standardOptions.test_levels, targetFormat);
622
- results.standards.push(...copied);
623
- }
135
+ /**
136
+ * Configure Husky pre-commit hook
137
+ */
138
+ async function setupHuskyHook(projectPath) {
139
+ const hasGit = existsSync(join(projectPath, '.git'));
140
+ if (!hasGit) return;
141
+
142
+ console.log(chalk.cyan('Configuring Pre-commit Hook (Husky)...'));
143
+
144
+ // 1. Install husky if needed
145
+ try {
146
+ const pkgPath = join(projectPath, 'package.json');
147
+ if (existsSync(pkgPath)) {
148
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
149
+ const hasHusky = pkg.devDependencies?.husky || pkg.dependencies?.husky;
150
+
151
+ if (!hasHusky) {
152
+ console.log(chalk.gray(' Installing husky...'));
153
+ execSync('npm install --save-dev husky', { stdio: 'ignore', cwd: projectPath });
624
154
  }
625
155
  }
156
+ } catch (e) {
157
+ console.log(chalk.yellow(` ⚠ Failed to check/install husky: ${e.message}`));
158
+ return;
626
159
  }
627
160
 
628
- copySpinner.succeed(msg.copiedStandards.replace('{count}', results.standards.length));
629
-
630
- // Copy extensions
631
- if (languages.length > 0 || frameworks.length > 0 || locale) {
632
- const extSpinner = ora(msg.copyingExtensions).start();
633
-
634
- for (const lang of languages) {
635
- if (EXTENSION_MAPPINGS[lang]) {
636
- const result = await copyStandard(EXTENSION_MAPPINGS[lang], '.standards', projectPath);
637
- if (result.success) {
638
- results.extensions.push(EXTENSION_MAPPINGS[lang]);
639
- } else {
640
- results.errors.push(`${EXTENSION_MAPPINGS[lang]}: ${result.error}`);
641
- }
642
- }
643
- }
644
-
645
- for (const fw of frameworks) {
646
- if (EXTENSION_MAPPINGS[fw]) {
647
- const result = await copyStandard(EXTENSION_MAPPINGS[fw], '.standards', projectPath);
648
- if (result.success) {
649
- results.extensions.push(EXTENSION_MAPPINGS[fw]);
650
- } else {
651
- results.errors.push(`${EXTENSION_MAPPINGS[fw]}: ${result.error}`);
652
- }
653
- }
161
+ // 2. Initialize husky
162
+ const huskyDir = join(projectPath, '.husky');
163
+ try {
164
+ if (!existsSync(huskyDir)) {
165
+ console.log(chalk.gray(' Initializing husky...'));
166
+ execSync('npx husky init', { stdio: 'ignore', cwd: projectPath });
654
167
  }
655
-
656
- if (locale && EXTENSION_MAPPINGS[locale]) {
657
- const result = await copyStandard(EXTENSION_MAPPINGS[locale], '.standards', projectPath);
658
- if (result.success) {
659
- results.extensions.push(EXTENSION_MAPPINGS[locale]);
660
- } else {
661
- results.errors.push(`${EXTENSION_MAPPINGS[locale]}: ${result.error}`);
662
- }
663
- }
664
-
665
- extSpinner.succeed(msg.copiedExtensions.replace('{count}', results.extensions.length));
168
+ } catch (e) {
169
+ // Ignore, might already be init
666
170
  }
667
171
 
668
- // Build installed standards list for compliance instructions (used by all AI tools)
669
- const installedStandardsList = results.standards.map(s => basename(s));
670
-
671
- // Determine common language setting
672
- let commonLanguage = 'en';
673
- if (locale === 'zh-tw') {
674
- commonLanguage = 'zh-tw';
675
- } else if (standardOptions?.commit_language === 'bilingual') {
676
- commonLanguage = 'bilingual';
677
- } else if (standardOptions?.commit_language === 'traditional-chinese') {
678
- commonLanguage = 'zh-tw';
679
- }
680
-
681
- // Generate and write integrations
682
- if (integrations.length > 0) {
683
- const intSpinner = ora(msg.generatingIntegrations).start();
684
- const integrationConfigs = skillsConfig.integrationConfigs || {};
685
-
686
- // Track generated files to handle AGENTS.md sharing (codex + opencode)
687
- const generatedFiles = new Set();
688
-
689
- for (const tool of integrations) {
690
- // Check if this file was already generated (for AGENTS.md sharing)
691
- const targetFile = getToolFilePath(tool);
692
- if (generatedFiles.has(targetFile)) {
693
- // Skip - file already generated by another tool (e.g., codex generated AGENTS.md, skip opencode)
694
- continue;
695
- }
696
-
697
- // Build enhanced config with installed standards
698
- const enhancedConfig = {
699
- ...integrationConfigs[tool],
700
- tool,
701
- categories: integrationConfigs[tool]?.categories || ['anti-hallucination', 'commit-standards', 'code-review'],
702
- language: integrationConfigs[tool]?.language || commonLanguage,
703
- installedStandards: installedStandardsList,
704
- contentMode: skillsConfig.contentMode || 'minimal',
705
- level: level,
706
- // Pass commit_language for dynamic commit standards generation
707
- commitLanguage: standardOptions?.commit_language || 'english'
708
- };
709
-
710
- // Use dynamic generator
711
- const result = writeIntegrationFile(tool, enhancedConfig, projectPath);
712
- if (result.success) {
713
- results.integrations.push(result.path);
714
- generatedFiles.add(targetFile);
715
-
716
- // Capture integration block hash for tracking UDS content
717
- if (result.blockHashInfo) {
718
- results.integrationBlockHashes[result.path] = {
719
- ...result.blockHashInfo,
720
- installedAt: new Date().toISOString()
721
- };
722
- }
723
- } else {
724
- // Fall back to legacy static file copy
725
- const mapping = INTEGRATION_MAPPINGS[tool];
726
- if (mapping) {
727
- const copyResult = await copyIntegration(mapping.source, mapping.target, projectPath);
728
- if (copyResult.success) {
729
- results.integrations.push(mapping.target);
730
- generatedFiles.add(targetFile);
731
- } else {
732
- results.errors.push(`${tool}: ${result.error || copyResult.error}`);
733
- }
734
- } else {
735
- results.errors.push(`${tool}: ${result.error}`);
736
- }
737
- }
172
+ // 3. Ensure .husky directory exists (fallback if husky init failed)
173
+ if (!existsSync(huskyDir)) {
174
+ try {
175
+ mkdirSync(huskyDir, { recursive: true });
176
+ } catch (e) {
177
+ console.log(chalk.red(` Failed to create .husky directory: ${e.message}`));
178
+ return;
738
179
  }
739
-
740
- intSpinner.succeed(msg.generatedIntegrations.replace('{count}', results.integrations.length));
741
180
  }
742
181
 
743
- // Generate CLAUDE.md for Claude Code if selected
744
- const claudeCodeSelected = aiTools.includes('claude-code');
745
- if (claudeCodeSelected && !integrationFileExists('claude-code', projectPath)) {
746
- const claudeSpinner = ora(msg.generatingClaudeMd).start();
747
-
748
- const claudeConfig = {
749
- tool: 'claude-code',
750
- categories: ['anti-hallucination', 'commit-standards', 'code-review'],
751
- languages: [],
752
- exclusions: [],
753
- customRules: [],
754
- detailLevel: 'standard',
755
- language: commonLanguage,
756
- // Enhanced standards compliance fields
757
- installedStandards: installedStandardsList,
758
- contentMode: skillsConfig.contentMode || 'minimal',
759
- level: level,
760
- // Pass commit_language for dynamic commit standards generation
761
- commitLanguage: standardOptions?.commit_language || 'english'
762
- };
182
+ // 4. Add pre-commit hook
183
+ const preCommitPath = join(huskyDir, 'pre-commit');
184
+ const udsCmd = 'npx uds check --standard checkin-standards';
763
185
 
764
- const result = writeIntegrationFile('claude-code', claudeConfig, projectPath);
765
- if (result.success) {
766
- results.integrations.push(result.path);
767
- claudeSpinner.succeed(msg.generatedClaudeMd);
186
+ try {
187
+ let content = '';
188
+ if (existsSync(preCommitPath)) {
189
+ content = readFileSync(preCommitPath, 'utf-8');
768
190
  } else {
769
- claudeSpinner.warn(msg.couldNotGenerateClaudeMd);
770
- results.errors.push(`CLAUDE.md: ${result.error}`);
191
+ // Create if not exists (husky init usually creates it, but just in case)
192
+ content = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n';
771
193
  }
772
- }
773
194
 
774
- // Install Skills if needed (unified multi-agent installation)
775
- if (skillsConfig.needsInstall && skillsConfig.skillsInstallations?.length > 0) {
776
- const skillSpinner = ora(msg.installingSkills).start();
777
-
778
- // Use new unified installer for multi-agent support
779
- const installResult = await installSkillsToMultipleAgents(
780
- skillsConfig.skillsInstallations,
781
- null, // Install all skills
782
- projectPath
783
- );
784
-
785
- // Collect results
786
- for (const agentResult of installResult.installations) {
787
- if (agentResult.installed.length > 0) {
788
- for (const skillName of agentResult.installed) {
789
- if (!results.skills.includes(skillName)) {
790
- results.skills.push(skillName);
791
- }
792
- }
793
- }
794
- for (const err of agentResult.errors) {
795
- results.errors.push(`${agentResult.agent} - ${err.skill}: ${err.error}`);
195
+ if (!content.includes('checkin-standards')) {
196
+ writeFileSync(preCommitPath, content + `\n# UDS Standard Check\n${udsCmd}\n`, 'utf-8');
197
+ try {
198
+ execSync(`chmod +x ${preCommitPath}`);
199
+ } catch (e) {
200
+ // Ignore chmod failures on systems that don't support it
796
201
  }
797
- }
798
-
799
- // Collect skill file hashes for integrity tracking
800
- if (installResult.allFileHashes) {
801
- Object.assign(results.skillHashes, installResult.allFileHashes);
802
- }
803
-
804
- // Build location summary for display
805
- const targetLocations = skillsConfig.skillsInstallations.map(inst => {
806
- const displayName = getAgentDisplayName(inst.agent);
807
- const dir = getSkillsDirForAgent(inst.agent, inst.level, projectPath);
808
- return `${displayName} (${dir})`;
809
- }).join(', ');
810
-
811
- if (installResult.totalErrors === 0) {
812
- skillSpinner.succeed(msg.installedSkills
813
- .replace('{count}', installResult.totalInstalled)
814
- .replace('{locations}', targetLocations));
202
+ console.log(chalk.green(' ✓ Adding uds check to pre-commit hook'));
815
203
  } else {
816
- skillSpinner.warn(msg.installedSkillsWithErrors
817
- .replace('{count}', installResult.totalInstalled)
818
- .replace('{errors}', installResult.totalErrors));
819
- }
820
- } else if (skillsConfig.needsInstall && skillsConfig.updateTargets.length > 0) {
821
- // Legacy fallback for backward compatibility
822
- const skillSpinner = ora(msg.installingSkills).start();
823
-
824
- const skillFiles = getSkillFiles();
825
- const repoInfo = getRepositoryInfo();
826
- let successCount = 0;
827
- let errorCount = 0;
828
-
829
- for (const target of skillsConfig.updateTargets) {
830
- for (const [skillName, files] of Object.entries(skillFiles)) {
831
- const result = await downloadSkillToLocation(
832
- skillName,
833
- files,
834
- target,
835
- target === 'project' ? projectPath : null
836
- );
837
-
838
- if (result.success) {
839
- successCount++;
840
- if (!results.skills.includes(skillName)) {
841
- results.skills.push(skillName);
842
- }
843
- } else {
844
- errorCount++;
845
- const failedFiles = result.files.filter(f => !f.success).map(f => f.file).join(', ');
846
- results.errors.push(`Skill ${skillName} (${target}): failed to install ${failedFiles}`);
847
- }
848
- }
849
-
850
- // Write manifest for each target location
851
- const targetDir = target === 'project'
852
- ? getProjectSkillsDir(projectPath)
853
- : getSkillsDir();
854
- writeSkillsManifest(repoInfo.skills.version, targetDir);
204
+ console.log(chalk.gray(' ✓ Pre-commit hook already configured'));
855
205
  }
206
+ } catch (e) {
207
+ console.log(chalk.red(` ✗ Failed to configure pre-commit hook: ${e.message}`));
208
+ }
209
+ console.log();
210
+ }
856
211
 
857
- const targetLocations = skillsConfig.updateTargets.map(t =>
858
- t === 'project' ? getProjectSkillsDir(projectPath) : getSkillsDir()
859
- ).join(', ');
212
+ /**
213
+ * Build configuration for non-interactive mode
214
+ */
215
+ function buildNonInteractiveConfig(options, detected, projectPath) {
216
+ const displayLanguage = options.locale || detectLanguage(null);
217
+
218
+ // Determine AI tools
219
+ const detectedAiTools = Object.keys(detected.aiTools).filter(k => detected.aiTools[k]);
220
+ const aiToolsNormalized = detectedAiTools.map(k => {
221
+ if (k === 'claudeCode') return 'claude-code';
222
+ if (k === 'geminiCli') return 'gemini-cli';
223
+ return k;
224
+ });
225
+
226
+ // Skills Configuration Logic
227
+ const hasSkillsCompatibleTool = aiToolsNormalized.some(t => t === 'claude-code' || t === 'opencode');
228
+ const onlySkillsCompatibleTools = aiToolsNormalized.every(t => t === 'claude-code' || t === 'opencode');
229
+
230
+ let skillsLocationFlag = options.skillsLocation;
231
+ if (!skillsLocationFlag) {
232
+ skillsLocationFlag = (hasSkillsCompatibleTool && onlySkillsCompatibleTools) ? 'marketplace' : 'none';
233
+ }
860
234
 
861
- if (errorCount === 0) {
862
- skillSpinner.succeed(msg.installedSkills.replace('{count}', successCount).replace('{locations}', targetLocations));
863
- } else {
864
- skillSpinner.warn(msg.installedSkillsWithErrors.replace('{count}', successCount).replace('{errors}', errorCount));
865
- }
235
+ const contentModeFlag = options.contentMode || 'index';
236
+ let skillsConfig = {};
237
+
238
+ if (skillsLocationFlag === 'marketplace') {
239
+ skillsConfig = {
240
+ installed: true,
241
+ location: 'marketplace',
242
+ needsInstall: false,
243
+ updateTargets: [],
244
+ standardsScope: 'minimal',
245
+ contentMode: contentModeFlag
246
+ };
247
+ } else if (skillsLocationFlag === 'none') {
248
+ skillsConfig = {
249
+ installed: false,
250
+ location: null,
251
+ needsInstall: false,
252
+ updateTargets: [],
253
+ standardsScope: 'full',
254
+ contentMode: contentModeFlag
255
+ };
256
+ } else {
257
+ // Determine location (project vs user)
258
+ const userSkillsInfo = getInstalledSkillsInfo();
259
+ const projectSkillsInfo = getProjectInstalledSkillsInfo(projectPath);
260
+ let location = 'user';
261
+
262
+ if (skillsLocationFlag === 'project' || projectSkillsInfo?.installed) {
263
+ location = 'project';
264
+ }
265
+
266
+ skillsConfig = {
267
+ installed: true,
268
+ location,
269
+ needsInstall: skillsLocationFlag === 'project' || skillsLocationFlag === 'user' || (!userSkillsInfo?.installed && !projectSkillsInfo?.installed),
270
+ updateTargets: [location],
271
+ standardsScope: 'minimal',
272
+ contentMode: contentModeFlag
273
+ };
866
274
  }
867
275
 
868
- // Install slash commands if requested
869
- if (skillsConfig.commandsInstallations?.length > 0) {
870
- const cmdSpinner = ora(msg.installingCommands || 'Installing slash commands...').start();
276
+ // Auto-install commands
277
+ const commandsSupportedAgents = aiToolsNormalized.filter(tool => {
278
+ const config = getAgentConfig(tool);
279
+ return config?.commands !== null;
280
+ });
281
+
282
+ if (commandsSupportedAgents.length > 0) {
283
+ skillsConfig.commandsInstallations = commandsSupportedAgents.map(agent => ({
284
+ agent,
285
+ level: 'project'
286
+ }));
287
+ }
871
288
 
872
- const cmdResult = await installCommandsToMultipleAgents(
873
- skillsConfig.commandsInstallations,
874
- null, // Install all commands
875
- projectPath
876
- );
289
+ return {
290
+ level: options.level ? parseInt(options.level, 10) : 2,
291
+ languages: options.lang ? [options.lang] : Object.keys(detected.languages).filter(k => detected.languages[k]),
292
+ frameworks: options.framework ? [options.framework] : Object.keys(detected.frameworks).filter(k => detected.frameworks[k]),
293
+ displayLanguage,
294
+ format: options.format || 'ai',
295
+ standardOptions: {
296
+ workflow: options.workflow || 'github-flow',
297
+ merge_strategy: options.mergeStrategy || 'squash',
298
+ commit_language: options.commitLang || 'english',
299
+ test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing']
300
+ },
301
+ skillsConfig,
302
+ aiTools: aiToolsNormalized,
303
+ integrations: [...aiToolsNormalized],
304
+ contentMode: skillsConfig.contentMode || 'minimal',
305
+ standardsScope: skillsConfig.standardsScope || 'full',
306
+ methodology: null
307
+ };
308
+ }
877
309
 
878
- // Initialize commands results array if not exists
879
- results.commands = results.commands || [];
310
+ /**
311
+ * Get label for a value from translation labels object
312
+ * Tries to find in messages.js labels, falls back to original value
313
+ * @param {string} key - The translation key (e.g., 'gitWorkflow', 'mergeStrategy', 'level')
314
+ * @param {string|number} value - The value to look up
315
+ * @returns {string} The label or the original value if not found
316
+ */
317
+ function getValueLabel(key, value) {
318
+ const translations = t();
319
+ // Try direct key lookup (e.g., t().gitWorkflow.labels)
320
+ const labels = translations[key]?.labels;
321
+ if (labels?.[value]) {
322
+ return labels[value];
323
+ }
324
+ // Try commands.init labels for nested structures
325
+ const initLabels = translations.commands?.init?.[key + 'Labels'];
326
+ if (initLabels?.[value]) {
327
+ return initLabels[value];
328
+ }
329
+ return String(value);
330
+ }
880
331
 
881
- // Collect results
882
- for (const agentResult of cmdResult.installations) {
883
- if (agentResult.installed.length > 0) {
884
- for (const cmdName of agentResult.installed) {
885
- if (!results.commands.includes(cmdName)) {
886
- results.commands.push(cmdName);
887
- }
888
- }
889
- }
890
- for (const err of agentResult.errors) {
891
- results.errors.push(`${agentResult.agent} command - ${err.command}: ${err.error}`);
892
- }
893
- }
332
+ /**
333
+ * Display configuration summary
334
+ * Order follows init-flow.js question sequence for consistency
335
+ */
336
+ function displaySummary(config, msg, common) {
337
+ console.log(chalk.cyan(msg.configSummary));
894
338
 
895
- // Collect command file hashes for integrity tracking
896
- if (cmdResult.allFileHashes) {
897
- Object.assign(results.commandHashes, cmdResult.allFileHashes);
898
- }
339
+ // 1. Display Language (STEP 1)
340
+ const displayLangLabel = config.displayLanguage === 'zh-tw' ? '繁體中文' : config.displayLanguage === 'zh-cn' ? '简体中文' : 'English';
341
+ console.log(chalk.gray(` ${msg.displayLanguageLabel || 'Display Language'}: ${displayLangLabel}`));
899
342
 
900
- // Build location summary
901
- const cmdLocations = skillsConfig.commandsInstallations.map(item => {
902
- // Support both {agent, level} objects and simple agent strings (backward compatibility)
903
- const agent = typeof item === 'string' ? item : item.agent;
904
- const level = typeof item === 'string' ? 'project' : (item.level || 'project');
905
- const displayName = getAgentDisplayName(agent);
906
- const dir = getCommandsDirForAgent(agent, level, projectPath);
907
- return `${displayName} (${dir})`;
908
- }).join(', ');
343
+ // 2. AI Tools (STEP 2) - Use getAgentDisplayName for readable names
344
+ const aiToolNames = config.aiTools.map(id => getAgentDisplayName(id) || id);
345
+ console.log(chalk.gray(` ${common.aiTools}: ${aiToolNames.length > 0 ? aiToolNames.join(', ') : common.none}`));
909
346
 
910
- if (cmdResult.totalErrors === 0) {
911
- cmdSpinner.succeed((msg.installedCommands || 'Installed {count} commands to: {locations}')
912
- .replace('{count}', cmdResult.totalInstalled)
913
- .replace('{locations}', cmdLocations));
347
+ // 3. Skills Installation (STEP 4)
348
+ if (config.skillsConfig.installed) {
349
+ let skillsStatusText;
350
+ if (config.skillsConfig.location === 'marketplace') {
351
+ skillsStatusText = msg.skillsMarketplace;
352
+ } else if (config.skillsConfig.location === 'multiple') {
353
+ // Handle multiple installation locations
354
+ const count = config.skillsConfig.skillsInstallations?.length || 0;
355
+ skillsStatusText = (msg.skillsInstalledToCount || '{count} locations').replace('{count}', count);
914
356
  } else {
915
- cmdSpinner.warn((msg.installedCommandsWithErrors || 'Installed {count} commands with {errors} errors')
916
- .replace('{count}', cmdResult.totalInstalled)
917
- .replace('{errors}', cmdResult.totalErrors));
918
- }
919
- }
920
-
921
- // Compute file hashes for integrity checking
922
- const fileHashes = {};
923
- const now = new Date().toISOString();
924
-
925
- // Helper to compute and store hash
926
- const addFileHash = (relativePath) => {
927
- const fullPath = join(projectPath, relativePath);
928
- const hashInfo = computeFileHash(fullPath);
929
- if (hashInfo) {
930
- fileHashes[relativePath] = {
931
- ...hashInfo,
932
- installedAt: now
933
- };
357
+ skillsStatusText = config.skillsConfig.needsInstall
358
+ ? msg.skillsInstallTo.replace('{location}', config.skillsConfig.location)
359
+ : msg.skillsUsingExisting.replace('{location}', config.skillsConfig.location);
934
360
  }
935
- };
936
-
937
- // Hash standards (stored as source paths, need to convert to target paths)
938
- for (const sourcePath of results.standards) {
939
- const fileName = basename(sourcePath);
940
- // Check if it's an option file (path contains 'options/')
941
- const relativePath = sourcePath.includes('options/')
942
- ? join('.standards', 'options', fileName)
943
- : join('.standards', fileName);
944
- addFileHash(relativePath);
945
- }
946
-
947
- // Hash extensions
948
- for (const sourcePath of results.extensions) {
949
- const fileName = basename(sourcePath);
950
- const relativePath = join('.standards', fileName);
951
- addFileHash(relativePath);
361
+ console.log(chalk.gray(` ${msg.skillsLabel}: ${skillsStatusText}`));
952
362
  }
953
363
 
954
- // Hash integrations (already stored as target paths)
955
- for (const targetPath of results.integrations) {
956
- addFileHash(targetPath);
364
+ // 3b. Commands Installation (STEP 5)
365
+ if (config.skillsConfig.commandsInstallations?.length > 0) {
366
+ const count = config.skillsConfig.commandsInstallations.length;
367
+ const commandsStatusText = (msg.commandsInstalledToCount || '{count} locations').replace('{count}', count);
368
+ console.log(chalk.gray(` ${msg.commandsLabel || 'Slash Commands'}: ${commandsStatusText}`));
957
369
  }
958
370
 
959
- // Create manifest
960
- const repoInfo = getRepositoryInfo();
371
+ // 4. Standards Scope (STEP 6)
372
+ console.log(chalk.gray(` ${msg.standardsScope}: ${config.skillsConfig.standardsScope === 'minimal' ? msg.standardsScopeLean : msg.standardsScopeComplete}`));
961
373
 
962
- // Always record options as user preferences (for Skills and future updates)
963
- // Even when standards aren't copied locally (minimal scope), options should be preserved
964
- const manifestOptions = {
965
- workflow: standardOptions.workflow || null,
966
- merge_strategy: standardOptions.merge_strategy || null,
967
- commit_language: standardOptions.commit_language || null,
968
- test_levels: standardOptions.test_levels || []
969
- };
374
+ // 5. Adoption Level (STEP 7) - Use level.labels for translated display
375
+ const levelLabels = t().level?.labels || { 1: 'Level 1', 2: 'Level 2', 3: 'Level 3' };
376
+ console.log(chalk.gray(` ${common.level}: ${levelLabels[config.level] || `Level ${config.level}`}`));
970
377
 
971
- // Build integrationConfigs for manifest
972
- // This allows uds update to regenerate integration files with the same settings
973
- const manifestIntegrationConfigs = {};
974
- const integrationConfigs = skillsConfig.integrationConfigs || {};
378
+ // 6. Standards Format (STEP 8)
379
+ const formatLabels = t().format?.labels || { ai: 'Compact', human: 'Detailed', both: 'Both' };
380
+ console.log(chalk.gray(` ${common.format}: ${formatLabels[config.format]}`));
975
381
 
976
- for (const targetPath of results.integrations) {
977
- // Find the tool name for this integration
978
- let toolName = null;
979
- let config = null;
980
-
981
- // Check if this is from the integrationConfigs (dynamic generation)
982
- for (const [tool, toolConfig] of Object.entries(integrationConfigs)) {
983
- const mapping = INTEGRATION_MAPPINGS[tool];
984
- if (mapping && mapping.target === targetPath) {
985
- toolName = tool;
986
- config = toolConfig;
987
- break;
988
- }
989
- }
990
-
991
- // Check if this is CLAUDE.md
992
- if (targetPath === 'CLAUDE.md' || targetPath === '.standards/CLAUDE.md') {
993
- toolName = 'claude-code';
994
- config = {
995
- tool: 'claude-code',
996
- categories: ['anti-hallucination', 'commit-standards', 'code-review'],
997
- languages: [],
998
- exclusions: [],
999
- customRules: [],
1000
- detailLevel: 'standard',
1001
- language: commonLanguage
1002
- };
1003
- }
1004
-
1005
- if (toolName && config) {
1006
- manifestIntegrationConfigs[targetPath] = {
1007
- tool: toolName,
1008
- categories: config.categories || [],
1009
- detailLevel: config.detailLevel || 'standard',
1010
- language: config.language || commonLanguage,
1011
- contentMode: skillsConfig.contentMode || 'minimal',
1012
- installedStandards: installedStandardsList,
1013
- generatedAt: now
1014
- };
1015
- }
382
+ // 7. Standard Options (STEP 9) - use labels for human-readable values
383
+ if (config.standardOptions.workflow) {
384
+ console.log(chalk.gray(` ${msg.gitWorkflow}: ${getValueLabel('gitWorkflow', config.standardOptions.workflow)}`));
385
+ }
386
+ if (config.standardOptions.merge_strategy) {
387
+ console.log(chalk.gray(` ${msg.mergeStrategy}: ${getValueLabel('mergeStrategy', config.standardOptions.merge_strategy)}`));
388
+ }
389
+ if (config.standardOptions.commit_language) {
390
+ console.log(chalk.gray(` ${msg.commitLanguage}: ${getValueLabel('commitLanguage', config.standardOptions.commit_language)}`));
391
+ }
392
+ if (config.standardOptions.test_levels?.length > 0) {
393
+ const testLabels = config.standardOptions.test_levels.map(level => getValueLabel('testLevels', level));
394
+ console.log(chalk.gray(` ${msg.testLevels}: ${testLabels.join(', ')}`));
1016
395
  }
1017
396
 
1018
- const manifest = {
1019
- version: '3.3.0', // Updated for enhanced file tracking
1020
- upstream: {
1021
- repo: 'AsiaOstrich/universal-dev-standards',
1022
- version: repoInfo.standards.version,
1023
- installed: new Date().toISOString().split('T')[0]
1024
- },
1025
- level,
1026
- format,
1027
- standardsScope: skillsConfig.standardsScope || 'full',
1028
- contentMode: skillsConfig.contentMode || 'minimal',
1029
- standards: results.standards,
1030
- extensions: results.extensions,
1031
- integrations: results.integrations,
1032
- integrationConfigs: manifestIntegrationConfigs,
1033
- options: manifestOptions,
1034
- aiTools,
1035
- skills: {
1036
- installed: skillsConfig.installed,
1037
- location: skillsConfig.location,
1038
- names: skillsConfig.location === 'marketplace' ? ['all-via-plugin'] : results.skills,
1039
- version: skillsConfig.installed ? repoInfo.skills.version : null,
1040
- // New: multi-agent installations tracking
1041
- installations: skillsConfig.skillsInstallations || []
1042
- },
1043
- commands: {
1044
- installed: skillsConfig.commandsInstallations?.length > 0,
1045
- names: results.commands || [],
1046
- installations: skillsConfig.commandsInstallations || []
1047
- },
1048
- methodology: skillsConfig.methodology ? {
1049
- active: skillsConfig.methodology,
1050
- available: ['tdd', 'bdd', 'sdd', 'atdd'],
1051
- config: {
1052
- checkpointsEnabled: true,
1053
- reminderIntensity: 'suggest',
1054
- skipLimit: 3
1055
- }
1056
- } : null,
1057
- fileHashes,
1058
- // New: enhanced file tracking for Skills, Commands, and Integration blocks
1059
- skillHashes: results.skillHashes || {},
1060
- commandHashes: results.commandHashes || {},
1061
- integrationBlockHashes: results.integrationBlockHashes || {}
1062
- };
397
+ // 8. Language Extensions (STEP 10)
398
+ console.log(chalk.gray(` ${msg.languages}: ${config.languages.length > 0 ? config.languages.join(', ') : common.none}`));
1063
399
 
1064
- writeManifest(manifest, projectPath);
400
+ // 9. Framework Extensions (STEP 11)
401
+ console.log(chalk.gray(` ${msg.frameworks}: ${config.frameworks.length > 0 ? config.frameworks.join(', ') : common.none}`));
1065
402
 
1066
- // Summary
1067
- console.log();
1068
- console.log(chalk.green(msg.initializedSuccess));
1069
- console.log();
403
+ // 10. Integration Config (STEP 12)
404
+ if (config.skillsConfig.integrationConfigs && Object.keys(config.skillsConfig.integrationConfigs).length > 0) {
405
+ // Get the first config (shared config)
406
+ const firstConfigKey = Object.keys(config.skillsConfig.integrationConfigs)[0];
407
+ const integrationConfig = config.skillsConfig.integrationConfigs[firstConfigKey];
1070
408
 
1071
- const totalFiles = results.standards.length + results.extensions.length + results.integrations.length;
1072
- console.log(chalk.gray(` ${msg.filesCopied.replace('{count}', totalFiles)}`));
409
+ if (integrationConfig && integrationConfig.mode) {
410
+ const modeLabels = t().integration?.mode?.labels || { default: 'Default', custom: 'Custom', merge: 'Merge' };
411
+ const modeLabel = modeLabels[integrationConfig.mode] || integrationConfig.mode;
412
+ console.log(chalk.gray(` ${msg.integrationConfigLabel || 'Integration Config'}: ${modeLabel}`));
1073
413
 
1074
- if (skillsConfig.installed) {
1075
- if (skillsConfig.location === 'marketplace') {
1076
- console.log(chalk.gray(` ${msg.skillsUsingMarketplace}`));
1077
- } else if (results.skills.length > 0) {
1078
- // Build location summary from skillsInstallations or legacy updateTargets
1079
- const skillLocations = [];
1080
- if (skillsConfig.skillsInstallations?.length > 0) {
1081
- for (const inst of skillsConfig.skillsInstallations) {
1082
- const displayName = getAgentDisplayName(inst.agent);
1083
- const dir = getSkillsDirForAgent(inst.agent, inst.level, projectPath);
1084
- skillLocations.push(`${displayName}: ${dir}`);
1085
- }
1086
- } else {
1087
- // Legacy fallback
1088
- if (skillsConfig.updateTargets.includes('user')) {
1089
- skillLocations.push('~/.claude/skills/');
1090
- }
1091
- if (skillsConfig.updateTargets.includes('project')) {
1092
- skillLocations.push('.claude/skills/');
1093
- }
414
+ // If custom mode, show selected categories
415
+ if (integrationConfig.mode === 'custom' && integrationConfig.categories?.length > 0) {
416
+ const categoryLabels = t().integration?.categoryLabels || {};
417
+ const categoryNames = integrationConfig.categories.map(cat => categoryLabels[cat] || cat);
418
+ console.log(chalk.gray(` ${msg.ruleCategoriesLabel || 'Rule Categories'}: ${categoryNames.join(', ')}`));
1094
419
  }
1095
- console.log(chalk.gray(` ${msg.skillsInstalledTo.replace('{count}', results.skills.length).replace('{locations}', skillLocations.join(' and '))}`));
1096
420
  }
1097
421
  }
1098
422
 
1099
- // Show commands installation summary
1100
- if (results.commands?.length > 0) {
1101
- const cmdLocations = skillsConfig.commandsInstallations?.map(item => {
1102
- // Support both {agent, level} objects and simple agent strings (backward compatibility)
1103
- const agent = typeof item === 'string' ? item : item.agent;
1104
- const level = typeof item === 'string' ? 'project' : (item.level || 'project');
1105
- const displayName = getAgentDisplayName(agent);
1106
- const dir = getCommandsDirForAgent(agent, level, projectPath);
1107
- return `${displayName}: ${dir}`;
1108
- }).join(' and ') || '';
1109
-
1110
- console.log(chalk.gray(` ${(msg.commandsInstalledTo || 'Commands ({count}): {locations}').replace('{count}', results.commands.length).replace('{locations}', cmdLocations)}`));
1111
- }
1112
- console.log(chalk.gray(` ${msg.manifestCreated}`));
423
+ // 11. Content Mode (STEP 13)
424
+ const contentModeLabels = t().contentMode?.labels || { index: 'Standard', full: 'Full', minimal: 'Minimal' };
425
+ console.log(chalk.gray(` ${msg.contentModeLabel}: ${contentModeLabels[config.contentMode] || config.contentMode}`));
1113
426
 
1114
- if (results.errors.length > 0) {
1115
- console.log();
1116
- console.log(chalk.yellow(msg.errorsOccurred.replace('{count}', results.errors.length)));
1117
- for (const err of results.errors) {
1118
- console.log(chalk.gray(` ${err}`));
1119
- }
427
+ // 12. Methodology (STEP 14, experimental)
428
+ if (config.skillsConfig.methodology) {
429
+ console.log(chalk.gray(` ${common.methodology}: ${config.skillsConfig.methodology} ${chalk.yellow('[Experimental]')}`));
1120
430
  }
1121
431
 
1122
432
  console.log();
1123
- console.log(chalk.gray(msg.nextSteps));
1124
- console.log(chalk.gray(` ${msg.reviewDirectory}`));
1125
- console.log(chalk.gray(` ${msg.addToVcs}`));
1126
- if (skillsConfig.installed) {
1127
- // Build unique tool names from installations
1128
- const toolNames = skillsConfig.skillsInstallations?.length > 0
1129
- ? [...new Set(skillsConfig.skillsInstallations.map(inst => getAgentDisplayName(inst.agent)))].join(' / ')
1130
- : 'Claude Code';
1131
- console.log(chalk.gray(` ${msg.restartAgent.replace('{tools}', toolNames)}`));
1132
- console.log(chalk.gray(` 4. ${msg.runCheck}`));
1133
- } else {
1134
- console.log(chalk.gray(` 3. ${msg.runCheck}`));
1135
- }
1136
- console.log();
1137
-
1138
- // Exit explicitly to prevent hanging due to inquirer's readline interface
1139
- process.exit(0);
1140
- }
433
+ }