universal-dev-standards 5.0.0-rc.8 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/bin/uds.js +5 -3
  2. package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +178 -0
  3. package/bundled/ai/standards/agent-dispatch.ai.yaml +69 -0
  4. package/bundled/ai/standards/ai-command-behavior.ai.yaml +45 -0
  5. package/bundled/ai/standards/api-design-standards.ai.yaml +192 -0
  6. package/bundled/ai/standards/branch-completion.ai.yaml +82 -0
  7. package/bundled/ai/standards/change-batching-standards.ai.yaml +195 -0
  8. package/bundled/ai/standards/database-standards.ai.yaml +220 -0
  9. package/bundled/ai/standards/error-codes.ai.yaml +37 -2
  10. package/bundled/ai/standards/git-worktree.ai.yaml +77 -0
  11. package/bundled/ai/standards/logging.ai.yaml +21 -2
  12. package/bundled/ai/standards/model-selection.ai.yaml +81 -0
  13. package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +184 -0
  14. package/bundled/ai/standards/systematic-debugging.ai.yaml +73 -0
  15. package/bundled/ai/standards/verification-evidence.ai.yaml +84 -0
  16. package/bundled/ai/standards/workflow-enforcement.ai.yaml +253 -0
  17. package/bundled/core/acceptance-criteria-traceability.md +293 -0
  18. package/bundled/core/agent-dispatch.md +149 -0
  19. package/bundled/core/ai-command-behavior.md +239 -0
  20. package/bundled/core/api-design-standards.md +938 -0
  21. package/bundled/core/branch-completion.md +158 -0
  22. package/bundled/core/change-batching-standards.md +257 -0
  23. package/bundled/core/checkin-standards.md +43 -6
  24. package/bundled/core/database-standards.md +828 -0
  25. package/bundled/core/error-code-standards.md +228 -2
  26. package/bundled/core/forward-derivation-standards.md +54 -2
  27. package/bundled/core/git-worktree.md +131 -0
  28. package/bundled/core/model-selection.md +153 -0
  29. package/bundled/core/pipeline-integration-standards.md +230 -0
  30. package/bundled/core/systematic-debugging.md +156 -0
  31. package/bundled/core/testing-standards.md +49 -39
  32. package/bundled/core/verification-evidence.md +172 -0
  33. package/bundled/core/workflow-enforcement.md +132 -0
  34. package/bundled/locales/zh-CN/CLAUDE.md +2 -2
  35. package/bundled/locales/zh-CN/README.md +4 -4
  36. package/bundled/locales/zh-CN/SECURITY.md +92 -0
  37. package/bundled/locales/zh-CN/core/acceptance-criteria-traceability.md +301 -0
  38. package/bundled/locales/zh-CN/core/acceptance-test-driven-development.md +47 -0
  39. package/bundled/locales/zh-CN/core/accessibility-standards.md +124 -0
  40. package/bundled/locales/zh-CN/core/agent-dispatch.md +113 -0
  41. package/bundled/locales/zh-CN/core/ai-agreement-standards.md +103 -0
  42. package/bundled/locales/zh-CN/core/ai-command-behavior.md +247 -0
  43. package/bundled/locales/zh-CN/core/api-design-standards.md +946 -0
  44. package/bundled/locales/zh-CN/core/behavior-driven-development.md +48 -0
  45. package/bundled/locales/zh-CN/core/branch-completion.md +112 -0
  46. package/bundled/locales/zh-CN/core/change-batching-standards.md +265 -0
  47. package/bundled/locales/zh-CN/core/checkin-standards.md +43 -5
  48. package/bundled/locales/zh-CN/core/context-aware-loading.md +106 -0
  49. package/bundled/locales/zh-CN/core/database-standards.md +836 -0
  50. package/bundled/locales/zh-CN/core/deployment-standards.md +80 -0
  51. package/bundled/locales/zh-CN/core/error-code-standards.md +2 -2
  52. package/bundled/locales/zh-CN/core/forward-derivation-standards.md +493 -0
  53. package/bundled/locales/zh-CN/core/git-worktree.md +101 -0
  54. package/bundled/locales/zh-CN/core/model-selection.md +112 -0
  55. package/bundled/locales/zh-CN/core/performance-standards.md +104 -0
  56. package/bundled/locales/zh-CN/core/pipeline-integration-standards.md +238 -0
  57. package/bundled/locales/zh-CN/core/project-context-memory.md +124 -0
  58. package/bundled/locales/zh-CN/core/requirement-engineering.md +49 -0
  59. package/bundled/locales/zh-CN/core/security-standards.md +100 -0
  60. package/bundled/locales/zh-CN/core/systematic-debugging.md +106 -0
  61. package/bundled/locales/zh-CN/core/test-governance.md +116 -0
  62. package/bundled/locales/zh-CN/core/testing-standards.md +392 -156
  63. package/bundled/locales/zh-CN/core/verification-evidence.md +118 -0
  64. package/bundled/locales/zh-CN/core/virtual-organization-standards.md +104 -0
  65. package/bundled/locales/zh-CN/core/workflow-enforcement.md +132 -0
  66. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +27 -1
  67. package/bundled/locales/zh-CN/docs/CLI-INIT-OPTIONS.md +9 -1
  68. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +37 -9
  69. package/bundled/locales/zh-CN/docs/USER-MANUAL.md +652 -0
  70. package/bundled/locales/zh-CN/integrations/github-copilot/copilot-instructions.md +1 -1
  71. package/bundled/locales/zh-CN/integrations/openspec/AGENTS.md +29 -4
  72. package/bundled/locales/zh-CN/integrations/spec-kit/AGENTS.md +143 -72
  73. package/bundled/locales/zh-CN/skills/ac-coverage-assistant/SKILL.md +126 -0
  74. package/bundled/locales/zh-CN/skills/api-design-assistant/SKILL.md +100 -0
  75. package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +119 -0
  76. package/bundled/locales/zh-CN/skills/ci-cd-assistant/SKILL.md +82 -0
  77. package/bundled/locales/zh-CN/skills/commands/ac-coverage.md +97 -0
  78. package/bundled/locales/zh-CN/skills/commands/api-design.md +94 -0
  79. package/bundled/locales/zh-CN/skills/commands/atdd.md +163 -0
  80. package/bundled/locales/zh-CN/skills/commands/audit.md +77 -0
  81. package/bundled/locales/zh-CN/skills/commands/bdd.md +1 -1
  82. package/bundled/locales/zh-CN/skills/commands/brainstorm.md +87 -0
  83. package/bundled/locales/zh-CN/skills/commands/changelog.md +63 -0
  84. package/bundled/locales/zh-CN/skills/commands/check.md +219 -0
  85. package/bundled/locales/zh-CN/skills/commands/checkin.md +61 -0
  86. package/bundled/locales/zh-CN/skills/commands/ci-cd.md +77 -0
  87. package/bundled/locales/zh-CN/skills/commands/commit.md +81 -0
  88. package/bundled/locales/zh-CN/skills/commands/config.md +207 -0
  89. package/bundled/locales/zh-CN/skills/commands/coverage.md +74 -0
  90. package/bundled/locales/zh-CN/skills/commands/database.md +78 -0
  91. package/bundled/locales/zh-CN/skills/commands/derive-all.md +58 -0
  92. package/bundled/locales/zh-CN/skills/commands/derive-atdd.md +54 -0
  93. package/bundled/locales/zh-CN/skills/commands/derive-bdd.md +53 -0
  94. package/bundled/locales/zh-CN/skills/commands/derive-tdd.md +54 -0
  95. package/bundled/locales/zh-CN/skills/commands/derive.md +78 -0
  96. package/bundled/locales/zh-CN/skills/commands/dev-workflow.md +119 -0
  97. package/bundled/locales/zh-CN/skills/commands/discover.md +86 -0
  98. package/bundled/locales/zh-CN/skills/commands/docgen.md +67 -0
  99. package/bundled/locales/zh-CN/skills/commands/docs.md +65 -0
  100. package/bundled/locales/zh-CN/skills/commands/durable.md +87 -0
  101. package/bundled/locales/zh-CN/skills/commands/guide.md +52 -0
  102. package/bundled/locales/zh-CN/skills/commands/incident.md +92 -0
  103. package/bundled/locales/zh-CN/skills/commands/init.md +272 -0
  104. package/bundled/locales/zh-CN/skills/commands/methodology.md +1 -1
  105. package/bundled/locales/zh-CN/skills/commands/metrics.md +73 -0
  106. package/bundled/locales/zh-CN/skills/commands/migrate.md +92 -0
  107. package/bundled/locales/zh-CN/skills/commands/pr.md +80 -0
  108. package/bundled/locales/zh-CN/skills/commands/refactor.md +1 -1
  109. package/bundled/locales/zh-CN/skills/commands/release.md +62 -0
  110. package/bundled/locales/zh-CN/skills/commands/requirement.md +54 -0
  111. package/bundled/locales/zh-CN/skills/commands/reverse-bdd.md +47 -0
  112. package/bundled/locales/zh-CN/skills/commands/reverse-sdd.md +51 -0
  113. package/bundled/locales/zh-CN/skills/commands/reverse-tdd.md +51 -0
  114. package/bundled/locales/zh-CN/skills/commands/reverse.md +63 -0
  115. package/bundled/locales/zh-CN/skills/commands/review.md +50 -0
  116. package/bundled/locales/zh-CN/skills/commands/scan.md +76 -0
  117. package/bundled/locales/zh-CN/skills/commands/sdd-retro.md +40 -0
  118. package/bundled/locales/zh-CN/skills/commands/sdd.md +379 -0
  119. package/bundled/locales/zh-CN/skills/commands/security.md +75 -0
  120. package/bundled/locales/zh-CN/skills/commands/tdd.md +111 -0
  121. package/bundled/locales/zh-CN/skills/commands/update.md +337 -0
  122. package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +1 -2
  123. package/bundled/locales/zh-CN/skills/database-assistant/SKILL.md +97 -0
  124. package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +145 -0
  125. package/bundled/locales/zh-CN/skills/durable-execution-assistant/SKILL.md +84 -0
  126. package/bundled/locales/zh-CN/skills/incident-response-assistant/SKILL.md +107 -0
  127. package/bundled/locales/zh-CN/skills/metrics-dashboard-assistant/SKILL.md +67 -0
  128. package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +77 -0
  129. package/bundled/locales/zh-CN/skills/pr-automation-assistant/SKILL.md +90 -0
  130. package/bundled/locales/zh-CN/skills/security-assistant/SKILL.md +79 -0
  131. package/bundled/locales/zh-CN/skills/security-scan-assistant/SKILL.md +72 -0
  132. package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +73 -10
  133. package/bundled/locales/zh-CN/skills/spec-driven-dev/guide.md +267 -122
  134. package/bundled/locales/zh-TW/CLAUDE.md +2 -2
  135. package/bundled/locales/zh-TW/README.md +4 -4
  136. package/bundled/locales/zh-TW/SECURITY.md +92 -0
  137. package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +301 -0
  138. package/bundled/locales/zh-TW/core/acceptance-test-driven-development.md +47 -0
  139. package/bundled/locales/zh-TW/core/accessibility-standards.md +84 -0
  140. package/bundled/locales/zh-TW/core/agent-dispatch.md +89 -0
  141. package/bundled/locales/zh-TW/core/ai-agreement-standards.md +87 -0
  142. package/bundled/locales/zh-TW/core/ai-command-behavior.md +247 -0
  143. package/bundled/locales/zh-TW/core/api-design-standards.md +946 -0
  144. package/bundled/locales/zh-TW/core/behavior-driven-development.md +63 -0
  145. package/bundled/locales/zh-TW/core/branch-completion.md +76 -0
  146. package/bundled/locales/zh-TW/core/change-batching-standards.md +265 -0
  147. package/bundled/locales/zh-TW/core/checkin-standards.md +39 -5
  148. package/bundled/locales/zh-TW/core/context-aware-loading.md +86 -0
  149. package/bundled/locales/zh-TW/core/database-standards.md +836 -0
  150. package/bundled/locales/zh-TW/core/deployment-standards.md +66 -0
  151. package/bundled/locales/zh-TW/core/error-code-standards.md +230 -4
  152. package/bundled/locales/zh-TW/core/forward-derivation-standards.md +62 -2
  153. package/bundled/locales/zh-TW/core/git-worktree.md +104 -0
  154. package/bundled/locales/zh-TW/core/model-selection.md +83 -0
  155. package/bundled/locales/zh-TW/core/performance-standards.md +84 -0
  156. package/bundled/locales/zh-TW/core/pipeline-integration-standards.md +238 -0
  157. package/bundled/locales/zh-TW/core/project-context-memory.md +79 -0
  158. package/bundled/locales/zh-TW/core/requirement-engineering.md +79 -0
  159. package/bundled/locales/zh-TW/core/security-standards.md +74 -0
  160. package/bundled/locales/zh-TW/core/systematic-debugging.md +95 -0
  161. package/bundled/locales/zh-TW/core/test-governance.md +88 -0
  162. package/bundled/locales/zh-TW/core/testing-standards.md +309 -86
  163. package/bundled/locales/zh-TW/core/verification-evidence.md +94 -0
  164. package/bundled/locales/zh-TW/core/virtual-organization-standards.md +88 -0
  165. package/bundled/locales/zh-TW/core/workflow-enforcement.md +132 -0
  166. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +27 -1
  167. package/bundled/locales/zh-TW/docs/CLI-INIT-OPTIONS.md +9 -1
  168. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +37 -9
  169. package/bundled/locales/zh-TW/docs/USER-MANUAL.md +652 -0
  170. package/bundled/locales/zh-TW/integrations/github-copilot/copilot-instructions.md +1 -1
  171. package/bundled/locales/zh-TW/integrations/openspec/AGENTS.md +29 -4
  172. package/bundled/locales/zh-TW/integrations/spec-kit/AGENTS.md +142 -71
  173. package/bundled/locales/zh-TW/skills/ac-coverage-assistant/SKILL.md +127 -0
  174. package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +1 -4
  175. package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +1 -4
  176. package/bundled/locales/zh-TW/skills/api-design-assistant/SKILL.md +97 -0
  177. package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +1 -4
  178. package/bundled/locales/zh-TW/skills/audit-assistant/SKILL.md +1 -4
  179. package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +1 -4
  180. package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +1 -4
  181. package/bundled/locales/zh-TW/skills/changelog-guide/SKILL.md +1 -4
  182. package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +1 -4
  183. package/bundled/locales/zh-TW/skills/ci-cd-assistant/SKILL.md +79 -0
  184. package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +1 -4
  185. package/bundled/locales/zh-TW/skills/commands/ac-coverage.md +95 -0
  186. package/bundled/locales/zh-TW/skills/commands/api-design.md +92 -0
  187. package/bundled/locales/zh-TW/skills/commands/atdd.md +167 -0
  188. package/bundled/locales/zh-TW/skills/commands/audit.md +75 -0
  189. package/bundled/locales/zh-TW/skills/commands/bdd.md +1 -1
  190. package/bundled/locales/zh-TW/skills/commands/brainstorm.md +91 -0
  191. package/bundled/locales/zh-TW/skills/commands/changelog.md +67 -0
  192. package/bundled/locales/zh-TW/skills/commands/check.md +223 -0
  193. package/bundled/locales/zh-TW/skills/commands/checkin.md +65 -0
  194. package/bundled/locales/zh-TW/skills/commands/ci-cd.md +75 -0
  195. package/bundled/locales/zh-TW/skills/commands/commit.md +85 -0
  196. package/bundled/locales/zh-TW/skills/commands/config.md +211 -0
  197. package/bundled/locales/zh-TW/skills/commands/coverage.md +78 -0
  198. package/bundled/locales/zh-TW/skills/commands/database.md +76 -0
  199. package/bundled/locales/zh-TW/skills/commands/derive-all.md +62 -0
  200. package/bundled/locales/zh-TW/skills/commands/derive-atdd.md +58 -0
  201. package/bundled/locales/zh-TW/skills/commands/derive-bdd.md +54 -0
  202. package/bundled/locales/zh-TW/skills/commands/derive-tdd.md +55 -0
  203. package/bundled/locales/zh-TW/skills/commands/derive.md +79 -0
  204. package/bundled/locales/zh-TW/skills/commands/dev-workflow.md +120 -0
  205. package/bundled/locales/zh-TW/skills/commands/discover.md +87 -0
  206. package/bundled/locales/zh-TW/skills/commands/docgen.md +68 -0
  207. package/bundled/locales/zh-TW/skills/commands/docs.md +66 -0
  208. package/bundled/locales/zh-TW/skills/commands/durable.md +85 -0
  209. package/bundled/locales/zh-TW/skills/commands/guide.md +51 -0
  210. package/bundled/locales/zh-TW/skills/commands/incident.md +90 -0
  211. package/bundled/locales/zh-TW/skills/commands/init.md +273 -0
  212. package/bundled/locales/zh-TW/skills/commands/methodology.md +1 -1
  213. package/bundled/locales/zh-TW/skills/commands/metrics.md +71 -0
  214. package/bundled/locales/zh-TW/skills/commands/migrate.md +90 -0
  215. package/bundled/locales/zh-TW/skills/commands/pr.md +78 -0
  216. package/bundled/locales/zh-TW/skills/commands/refactor.md +1 -1
  217. package/bundled/locales/zh-TW/skills/commands/release.md +63 -0
  218. package/bundled/locales/zh-TW/skills/commands/requirement.md +61 -0
  219. package/bundled/locales/zh-TW/skills/commands/reverse-bdd.md +54 -0
  220. package/bundled/locales/zh-TW/skills/commands/reverse-sdd.md +58 -0
  221. package/bundled/locales/zh-TW/skills/commands/reverse-tdd.md +58 -0
  222. package/bundled/locales/zh-TW/skills/commands/reverse.md +70 -0
  223. package/bundled/locales/zh-TW/skills/commands/review.md +57 -0
  224. package/bundled/locales/zh-TW/skills/commands/scan.md +74 -0
  225. package/bundled/locales/zh-TW/skills/commands/sdd-retro.md +47 -0
  226. package/bundled/locales/zh-TW/skills/commands/sdd.md +362 -0
  227. package/bundled/locales/zh-TW/skills/commands/security.md +73 -0
  228. package/bundled/locales/zh-TW/skills/commands/tdd.md +115 -0
  229. package/bundled/locales/zh-TW/skills/commands/update.md +326 -0
  230. package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +2 -6
  231. package/bundled/locales/zh-TW/skills/database-assistant/SKILL.md +94 -0
  232. package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +140 -0
  233. package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +1 -4
  234. package/bundled/locales/zh-TW/skills/documentation-guide/SKILL.md +1 -4
  235. package/bundled/locales/zh-TW/skills/durable-execution-assistant/SKILL.md +81 -0
  236. package/bundled/locales/zh-TW/skills/error-code-guide/SKILL.md +1 -4
  237. package/bundled/locales/zh-TW/skills/forward-derivation/SKILL.md +1 -4
  238. package/bundled/locales/zh-TW/skills/git-workflow-guide/SKILL.md +1 -4
  239. package/bundled/locales/zh-TW/skills/incident-response-assistant/SKILL.md +104 -0
  240. package/bundled/locales/zh-TW/skills/logging-guide/SKILL.md +1 -4
  241. package/bundled/locales/zh-TW/skills/methodology-system/SKILL.md +1 -4
  242. package/bundled/locales/zh-TW/skills/metrics-dashboard-assistant/SKILL.md +64 -0
  243. package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +74 -0
  244. package/bundled/locales/zh-TW/skills/pr-automation-assistant/SKILL.md +87 -0
  245. package/bundled/locales/zh-TW/skills/project-discovery/SKILL.md +1 -4
  246. package/bundled/locales/zh-TW/skills/refactoring-assistant/SKILL.md +1 -4
  247. package/bundled/locales/zh-TW/skills/release-standards/SKILL.md +1 -4
  248. package/bundled/locales/zh-TW/skills/requirement-assistant/SKILL.md +1 -4
  249. package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +1 -4
  250. package/bundled/locales/zh-TW/skills/security-assistant/SKILL.md +76 -0
  251. package/bundled/locales/zh-TW/skills/security-scan-assistant/SKILL.md +69 -0
  252. package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +74 -14
  253. package/bundled/locales/zh-TW/skills/spec-driven-dev/guide.md +243 -98
  254. package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +1 -4
  255. package/bundled/locales/zh-TW/skills/test-coverage-assistant/SKILL.md +1 -4
  256. package/bundled/locales/zh-TW/skills/testing-guide/SKILL.md +1 -5
  257. package/bundled/skills/README.md +11 -0
  258. package/bundled/skills/ac-coverage-assistant/SKILL.md +127 -0
  259. package/bundled/skills/ai-collaboration-standards/SKILL.md +10 -0
  260. package/bundled/skills/ai-friendly-architecture/SKILL.md +10 -0
  261. package/bundled/skills/ai-instruction-standards/SKILL.md +10 -0
  262. package/bundled/skills/api-design-assistant/SKILL.md +119 -0
  263. package/bundled/skills/atdd-assistant/SKILL.md +7 -0
  264. package/bundled/skills/bdd-assistant/SKILL.md +7 -0
  265. package/bundled/skills/brainstorm-assistant/SKILL.md +7 -0
  266. package/bundled/skills/checkin-assistant/SKILL.md +7 -0
  267. package/bundled/skills/ci-cd-assistant/SKILL.md +97 -0
  268. package/bundled/skills/code-review-assistant/SKILL.md +7 -0
  269. package/bundled/skills/commands/README.md +70 -0
  270. package/bundled/skills/commands/ac-coverage.md +135 -0
  271. package/bundled/skills/commands/api-design.md +86 -0
  272. package/bundled/skills/commands/atdd.md +69 -0
  273. package/bundled/skills/commands/audit.md +69 -0
  274. package/bundled/skills/commands/bdd.md +101 -0
  275. package/bundled/skills/commands/brainstorm.md +45 -0
  276. package/bundled/skills/commands/changelog.md +34 -0
  277. package/bundled/skills/commands/check.md +52 -1
  278. package/bundled/skills/commands/checkin.md +46 -0
  279. package/bundled/skills/commands/ci-cd.md +69 -0
  280. package/bundled/skills/commands/commit.md +79 -0
  281. package/bundled/skills/commands/config.md +48 -0
  282. package/bundled/skills/commands/coverage.md +53 -0
  283. package/bundled/skills/commands/database.md +70 -0
  284. package/bundled/skills/commands/derive-all.md +40 -0
  285. package/bundled/skills/commands/derive-atdd.md +33 -0
  286. package/bundled/skills/commands/derive-bdd.md +39 -0
  287. package/bundled/skills/commands/derive-tdd.md +40 -0
  288. package/bundled/skills/commands/derive.md +47 -0
  289. package/bundled/skills/commands/dev-workflow.md +104 -7
  290. package/bundled/skills/commands/discover.md +39 -0
  291. package/bundled/skills/commands/docgen.md +35 -0
  292. package/bundled/skills/commands/docs.md +40 -0
  293. package/bundled/skills/commands/durable.md +79 -0
  294. package/bundled/skills/commands/incident.md +84 -0
  295. package/bundled/skills/commands/init.md +55 -0
  296. package/bundled/skills/commands/methodology.md +72 -0
  297. package/bundled/skills/commands/metrics.md +65 -0
  298. package/bundled/skills/commands/migrate.md +84 -0
  299. package/bundled/skills/commands/pr.md +72 -0
  300. package/bundled/skills/commands/refactor.md +51 -0
  301. package/bundled/skills/commands/release.md +60 -0
  302. package/bundled/skills/commands/requirement.md +38 -0
  303. package/bundled/skills/commands/reverse-bdd.md +34 -0
  304. package/bundled/skills/commands/reverse-sdd.md +42 -0
  305. package/bundled/skills/commands/reverse-tdd.md +40 -0
  306. package/bundled/skills/commands/reverse.md +41 -0
  307. package/bundled/skills/commands/review.md +39 -0
  308. package/bundled/skills/commands/scan.md +68 -0
  309. package/bundled/skills/commands/sdd-retro.md +48 -0
  310. package/bundled/skills/commands/sdd.md +220 -0
  311. package/bundled/skills/commands/security.md +67 -0
  312. package/bundled/skills/commands/tdd.md +101 -0
  313. package/bundled/skills/commands/update.md +61 -0
  314. package/bundled/skills/commit-standards/SKILL.md +8 -2
  315. package/bundled/skills/database-assistant/SKILL.md +118 -0
  316. package/bundled/skills/dev-workflow-guide/SKILL.md +53 -7
  317. package/bundled/skills/dev-workflow-guide/workflow-phases.md +24 -0
  318. package/bundled/skills/durable-execution-assistant/SKILL.md +116 -0
  319. package/bundled/skills/forward-derivation/SKILL.md +7 -0
  320. package/bundled/skills/incident-response-assistant/SKILL.md +132 -0
  321. package/bundled/skills/methodology-system/SKILL.md +24 -2
  322. package/bundled/skills/metrics-dashboard-assistant/SKILL.md +109 -0
  323. package/bundled/skills/migration-assistant/SKILL.md +119 -0
  324. package/bundled/skills/pr-automation-assistant/SKILL.md +114 -0
  325. package/bundled/skills/project-discovery/SKILL.md +7 -0
  326. package/bundled/skills/refactoring-assistant/SKILL.md +7 -0
  327. package/bundled/skills/release-standards/SKILL.md +7 -0
  328. package/bundled/skills/requirement-assistant/SKILL.md +7 -0
  329. package/bundled/skills/reverse-engineer/SKILL.md +7 -0
  330. package/bundled/skills/security-assistant/SKILL.md +105 -0
  331. package/bundled/skills/security-scan-assistant/SKILL.md +96 -0
  332. package/bundled/skills/spec-driven-dev/SKILL.md +84 -4
  333. package/bundled/skills/spec-driven-dev/guide.md +156 -22
  334. package/bundled/skills/tdd-assistant/SKILL.md +7 -0
  335. package/bundled/skills/test-coverage-assistant/SKILL.md +11 -0
  336. package/bundled/skills/testing-guide/SKILL.md +23 -0
  337. package/package.json +1 -1
  338. package/src/commands/check.js +154 -8
  339. package/src/commands/config.js +231 -104
  340. package/src/commands/init.js +23 -3
  341. package/src/commands/update.js +250 -25
  342. package/src/config/ai-agent-paths.js +16 -0
  343. package/src/config/workflow-definitions.js +184 -0
  344. package/src/core/constants.js +6 -0
  345. package/src/flows/init-flow.js +23 -6
  346. package/src/i18n/messages.js +51 -3
  347. package/src/installers/integration-installer.js +67 -2
  348. package/src/installers/manifest-installer.js +1 -0
  349. package/src/installers/standards-installer.js +3 -2
  350. package/src/prompts/init.js +50 -3
  351. package/src/reconciler/manifest-migrator.js +2 -2
  352. package/src/reconciler/plan-executor.js +11 -0
  353. package/src/utils/integration-generator.js +327 -14
  354. package/src/utils/workflow-gate.js +292 -0
  355. package/standards-registry.json +160 -5
@@ -27,6 +27,7 @@ import {
27
27
  promptManageAITools,
28
28
  promptContentModeChange,
29
29
  handleAgentsMdSharing,
30
+ promptAgentsMd,
30
31
  promptMethodology,
31
32
  promptSkillsInstallLocation,
32
33
  promptCommandsInstallation,
@@ -148,10 +149,21 @@ export async function configCommand(action, key, value, options) {
148
149
  return;
149
150
  }
150
151
 
151
- // Handle 'init' action
152
+ // Handle 'init' action — backward compatible
152
153
  if (action === 'init') {
153
- await handleConfigInit(options);
154
- return;
154
+ if (options.vibeMode) {
155
+ await initVibeMode(options);
156
+ return;
157
+ }
158
+ // Treat as no-action: route to flat menu or limited menu
159
+ const projectPath = process.cwd();
160
+ const initialized = isInitialized(projectPath);
161
+ if (initialized) {
162
+ return runProjectConfiguration(options);
163
+ } else {
164
+ await handleLimitedConfig(options);
165
+ return;
166
+ }
155
167
  }
156
168
 
157
169
  // No action: check for --type (direct project configuration) or show interactive menu
@@ -168,80 +180,38 @@ export async function configCommand(action, key, value, options) {
168
180
  return;
169
181
  }
170
182
 
171
- // No arguments at all: show unified interactive menu
183
+ // No arguments at all: route based on initialization state
172
184
  const projectPath = process.cwd();
173
185
  const initialized = isInitialized(projectPath);
174
186
 
175
- // Set language from manifest (same pattern as runProjectConfiguration)
176
- if (initialized && !isLanguageExplicitlySet()) {
177
- const manifest = readManifest(projectPath);
178
- if (manifest) {
179
- const uiLang = manifest.options?.display_language || 'en';
180
- setLanguage(uiLang);
181
- }
182
- }
183
-
184
- const menuChoices = [];
185
-
186
187
  if (initialized) {
187
- menuChoices.push({
188
- name: t('config.menuProjectSettings', 'Project settings (level, AI tools, Skills, format, workflow...)'),
189
- value: 'project'
190
- });
191
- }
192
-
193
- menuChoices.push({
194
- name: t('config.menuPreferences', 'Preferences (UI language, HITL threshold, Vibe Coding)'),
195
- value: 'preferences'
196
- });
197
-
198
- menuChoices.push({
199
- name: t('config.menuShowConfig', 'Show current configuration (JSON)'),
200
- value: 'show'
201
- });
202
-
203
- const { menuChoice } = await inquirer.prompt([
204
- {
205
- type: 'list',
206
- name: 'menuChoice',
207
- message: t('config.menuQuestion', 'What would you like to configure?'),
208
- choices: menuChoices
209
- }
210
- ]);
211
-
212
- if (menuChoice === 'project') {
213
188
  return runProjectConfiguration(options);
214
- } else if (menuChoice === 'preferences') {
215
- await handleConfigInit(options);
216
- return;
217
- } else if (menuChoice === 'show') {
218
- console.log(chalk.bold('Current Configuration:'));
219
- console.log(JSON.stringify(currentConfig, null, 2));
189
+ } else {
190
+ await handleLimitedConfig(options);
220
191
  return;
221
192
  }
222
-
223
- return;
224
193
  }
225
194
 
226
195
  console.error(chalk.red(`Unknown action: ${action}`));
227
196
  }
228
197
 
229
198
  /**
230
- * Handle config init with optional --vibe-mode
199
+ * Handle limited config menu when project is not initialized.
200
+ * Shows only: Display Language (global), Vibe Coding, Show config.
231
201
  * @param {Object} options - Command options
232
202
  */
233
- async function handleConfigInit(options) {
203
+ async function handleLimitedConfig(options) {
204
+ // Set language from global config if available
205
+ if (!isLanguageExplicitlySet()) {
206
+ const globalLang = config.get('ui.language') || 'en';
207
+ setLanguage(globalLang);
208
+ }
209
+
234
210
  console.log('');
235
211
  console.log(chalk.bold(t('config.initTitle', 'UDS Configuration Setup')));
212
+ console.log(chalk.gray(t('config.notInitializedHint', 'Project not initialized. Run `uds init` for full configuration.')));
236
213
  console.log('');
237
214
 
238
- // Check for --vibe-mode flag
239
- if (options.vibeMode) {
240
- await initVibeMode(options);
241
- return;
242
- }
243
-
244
- // Default init: show menu
245
215
  const { initType } = await inquirer.prompt([
246
216
  {
247
217
  type: 'list',
@@ -257,12 +227,8 @@ async function handleConfigInit(options) {
257
227
  value: 'vibe'
258
228
  },
259
229
  {
260
- name: t('config.missionMode', 'Mission Mode - For goal-oriented development'),
261
- value: 'mission'
262
- },
263
- {
264
- name: t('config.customMode', 'Custom - Set individual options'),
265
- value: 'custom'
230
+ name: t('config.menuShowConfig', 'Show current configuration (JSON)'),
231
+ value: 'show'
266
232
  }
267
233
  ]
268
234
  }
@@ -273,16 +239,21 @@ async function handleConfigInit(options) {
273
239
  return;
274
240
  } else if (initType === 'vibe') {
275
241
  await initVibeMode(options);
276
- } else if (initType === 'mission') {
277
- console.log(chalk.yellow(t('config.missionComingSoon', 'Mission mode setup coming soon!')));
278
- console.log(chalk.gray(t('config.useStartCommand', 'For now, use: uds start <mission-type> <intent>')));
279
- } else {
280
- console.log(chalk.gray(t('config.customHint', 'Use: uds config set <key> <value>')));
242
+ } else if (initType === 'show') {
243
+ const currentConfig = config.init();
244
+ console.log(chalk.bold('Current Configuration:'));
245
+ console.log(JSON.stringify(currentConfig, null, 2));
281
246
  }
282
247
  }
283
248
 
284
249
  /**
285
- * Handle display language change
250
+ * Handle display language change with cascade:
251
+ * 1. Update manifest + setLanguage
252
+ * 2. Auto-prompt commit_language
253
+ * 3. If skills/commands installed → confirm reinstall with new locale
254
+ * 4. If AI tools → confirm regenerate integrations
255
+ * 5. Copy commit_language option file if changed
256
+ * 6. Write manifest once at end
286
257
  */
287
258
  async function handleDisplayLanguageChange() {
288
259
  const projectPath = process.cwd();
@@ -306,37 +277,91 @@ async function handleDisplayLanguageChange() {
306
277
  return;
307
278
  }
308
279
 
280
+ // Save to global config regardless of initialization
281
+ config.set('ui.language', newLang, 'global');
282
+
309
283
  if (!initialized) {
310
- const common = getMessages().commands.common;
311
- console.log(chalk.red(common.notInitialized));
312
- console.log(chalk.gray(` ${common.runInit}`));
284
+ // Not initialized: save to global config only
285
+ setLanguage(newLang);
286
+ console.log(chalk.green(t('config.languageUpdated', 'Display language updated!')));
313
287
  return;
314
288
  }
315
289
 
316
290
  const manifest = readManifest(projectPath);
317
- if (manifest) {
318
- manifest.options = manifest.options || {};
319
- manifest.options.display_language = newLang;
320
- writeManifest(manifest, projectPath);
321
- console.log(chalk.green(t('config.languageUpdated', 'Display language updated!')));
291
+ if (!manifest) return;
292
+
293
+ // Update manifest display_language and switch UI
294
+ manifest.options = manifest.options || {};
295
+ manifest.options.display_language = newLang;
296
+ setLanguage(newLang);
297
+
298
+ // Cascade 1: Auto-prompt commit_language
299
+ const oldCommitLang = manifest.options.commit_language;
300
+ const newCommitLang = await promptCommitLanguage(newLang);
301
+ manifest.options.commit_language = newCommitLang;
302
+
303
+ // Copy commit_language option file if changed
304
+ if (newCommitLang !== oldCommitLang) {
305
+ const standards = getAllStandards();
306
+ const formatsToUse = manifest.format === 'both' ? ['ai', 'human'] : [manifest.format || 'human'];
307
+ for (const std of standards) {
308
+ if (std.id === 'commit-message' && std.options) {
309
+ for (const targetFormat of formatsToUse) {
310
+ const option = findOption(std, 'commit_language', newCommitLang);
311
+ if (option) {
312
+ const sourcePath = getOptionSource(option, targetFormat);
313
+ await copyStandard(sourcePath, '.standards/options', projectPath);
314
+ }
315
+ }
316
+ }
317
+ }
318
+ }
322
319
 
323
- // Offer to regenerate integrations if AI tools are configured
324
- if (manifest.aiTools?.length > 0) {
325
- const { confirm } = await inquirer.prompt([{
326
- type: 'confirm',
327
- name: 'confirm',
328
- message: t('config.regenerateForLanguage', 'Regenerate AI tool integrations with new language?'),
329
- default: true
330
- }]);
320
+ // Cascade 2: Reinstall skills/commands with new locale if installed
321
+ const hasSkillInstalls = manifest.skills?.installations?.length > 0;
322
+ const hasCommandInstalls = manifest.commands?.installations?.length > 0;
323
+ if (hasSkillInstalls || hasCommandInstalls) {
324
+ const { confirm } = await inquirer.prompt([{
325
+ type: 'confirm',
326
+ name: 'confirm',
327
+ message: t('config.reinstallWithNewLocale', 'Reinstall Skills/Commands with new language?'),
328
+ default: true
329
+ }]);
331
330
 
332
- if (confirm) {
333
- const spinner = (await import('ora')).default(t('config.applyingPreset', 'Applying...')).start();
334
- regenerateIntegrations(projectPath, manifest);
335
- writeManifest(manifest, projectPath);
336
- spinner.succeed(t('config.languageUpdated', 'Display language updated!'));
331
+ if (confirm) {
332
+ const cmdLocale = displayLanguageToLocale(newLang);
333
+ if (hasSkillInstalls) {
334
+ const spinner = ora(t('config.reinstallingSkills', 'Reinstalling Skills...')).start();
335
+ await installSkillsToMultipleAgents(manifest.skills.installations, null, projectPath, cmdLocale);
336
+ spinner.succeed(t('config.skillsReinstalled', 'Skills reinstalled'));
337
337
  }
338
+ if (hasCommandInstalls) {
339
+ const spinner = ora(t('config.reinstallingCommands', 'Reinstalling Commands...')).start();
340
+ await installCommandsToMultipleAgents(manifest.commands.installations, null, projectPath, cmdLocale);
341
+ spinner.succeed(t('config.commandsReinstalled', 'Commands reinstalled'));
342
+ }
343
+ }
344
+ }
345
+
346
+ // Cascade 3: Regenerate integrations if AI tools configured
347
+ if (manifest.aiTools?.length > 0) {
348
+ const { confirm } = await inquirer.prompt([{
349
+ type: 'confirm',
350
+ name: 'confirm',
351
+ message: t('config.regenerateForLanguage', 'Regenerate AI tool integrations with new language?'),
352
+ default: true
353
+ }]);
354
+
355
+ if (confirm) {
356
+ const spinner = ora(t('config.applyingPreset', 'Applying...')).start();
357
+ regenerateIntegrations(projectPath, manifest);
358
+ spinner.succeed(t('config.integrationsRegenerated', 'Integrations regenerated'));
338
359
  }
339
360
  }
361
+
362
+ // Single write at the end
363
+ writeManifest(manifest, projectPath);
364
+ console.log(chalk.green(t('config.languageUpdated', 'Display language updated!')));
340
365
  }
341
366
 
342
367
  /**
@@ -453,6 +478,9 @@ export async function runProjectConfiguration(options) {
453
478
 
454
479
  console.log();
455
480
  console.log(chalk.cyan(msgObj.currentConfig));
481
+ const langNames = { en: 'English', 'zh-tw': '繁體中文', 'zh-cn': '简体中文' };
482
+ const displayLang = manifest.options?.display_language || 'en';
483
+ console.log(chalk.gray(` ${t('config.displayLanguageLabel', 'Display Language')}: ${langNames[displayLang] || displayLang}`));
456
484
  console.log(chalk.gray(` ${common.format}: ${manifest.format || 'human'}`));
457
485
  console.log(chalk.gray(` ${common.contentMode}: ${manifest.contentMode || 'minimal'}`));
458
486
  console.log(chalk.gray(` ${common.aiTools}: ${manifest.aiTools?.length > 0 ? manifest.aiTools.join(', ') : common.none}`));
@@ -482,31 +510,49 @@ export async function runProjectConfiguration(options) {
482
510
  if (!configType) {
483
511
  const inq = await import('inquirer');
484
512
 
485
- // Build choices array - methodology only shown with -E flag
513
+ // Build flat menu matching init step order
486
514
  const baseChoices = [
487
- { name: msgObj.optionFormat, value: 'format' },
488
- { name: msgObj.optionWorkflow, value: 'workflow' },
489
- { name: msgObj.optionMergeStrategy, value: 'merge_strategy' },
490
- { name: msgObj.optionCommitLanguage, value: 'commit_language' },
491
- { name: msgObj.optionTestLevels, value: 'test_levels' },
515
+ { name: t('config.displayLanguageOption', 'Display Language - Change UI language'), value: 'display_language' },
492
516
  new inq.default.Separator(),
493
517
  { name: chalk.cyan(msgObj.optionAITools), value: 'ai_tools' },
494
518
  { name: chalk.cyan(msgObj.optionSkills || 'Manage Skills installations'), value: 'skills' },
495
519
  { name: chalk.cyan(msgObj.optionCommands || 'Manage Commands installations'), value: 'commands' },
496
- new inq.default.Separator(),
497
- { name: chalk.cyan(msgObj.optionContentMode), value: 'content_mode' }
520
+ new inq.default.Separator()
498
521
  ];
499
522
 
500
- // Only add methodology option when -E flag is used
523
+ // Format, Merge Strategy, Content Mode: only show with -E flag (advanced)
524
+ if (options.experimental) {
525
+ baseChoices.push({ name: `${msgObj.optionFormat} ${chalk.yellow(msgObj.experimental)}`, value: 'format' });
526
+ }
527
+
528
+ baseChoices.push(
529
+ { name: msgObj.optionWorkflow, value: 'workflow' }
530
+ );
531
+
532
+ if (options.experimental) {
533
+ baseChoices.push({ name: `${msgObj.optionMergeStrategy} ${chalk.yellow(msgObj.experimental)}`, value: 'merge_strategy' });
534
+ }
535
+
536
+ baseChoices.push(
537
+ { name: msgObj.optionCommitLanguage, value: 'commit_language' }
538
+ );
539
+
540
+ // Test Levels, Content Mode and Methodology: only with -E flag (advanced)
501
541
  if (options.experimental) {
502
542
  baseChoices.push(
543
+ { name: `${msgObj.optionTestLevels} ${chalk.yellow(msgObj.experimental)}`, value: 'test_levels' },
544
+ new inq.default.Separator(),
545
+ { name: `${chalk.cyan(msgObj.optionContentMode)} ${chalk.yellow(msgObj.experimental)}`, value: 'content_mode' },
503
546
  { name: `${chalk.cyan(msgObj.optionMethodology)} ${chalk.yellow(msgObj.experimental)}`, value: 'methodology' }
504
547
  );
505
548
  }
506
549
 
507
550
  baseChoices.push(
508
551
  new inq.default.Separator(),
509
- { name: msgObj.optionAll, value: 'all' }
552
+ { name: t('config.vibeMode', 'Vibe Coding Mode'), value: 'vibe_coding' },
553
+ new inq.default.Separator(),
554
+ { name: msgObj.optionAll, value: 'all' },
555
+ { name: t('config.menuShowConfig', 'Show current configuration (JSON)'), value: 'show' }
510
556
  );
511
557
 
512
558
  const { type } = await inq.default.prompt([
@@ -520,6 +566,26 @@ export async function runProjectConfiguration(options) {
520
566
  configType = type;
521
567
  }
522
568
 
569
+ // Handle display_language (flat menu item)
570
+ if (configType === 'display_language') {
571
+ await handleDisplayLanguageChange();
572
+ process.exit(0);
573
+ }
574
+
575
+ // Handle vibe_coding (flat menu item)
576
+ if (configType === 'vibe_coding') {
577
+ await initVibeMode(options);
578
+ process.exit(0);
579
+ }
580
+
581
+ // Handle show (flat menu item)
582
+ if (configType === 'show') {
583
+ const currentConfig = config.init();
584
+ console.log(chalk.bold('Current Configuration:'));
585
+ console.log(JSON.stringify(currentConfig, null, 2));
586
+ process.exit(0);
587
+ }
588
+
523
589
  // Collect new options
524
590
  const newOptions = { ...manifest.options };
525
591
  let newFormat = manifest.format;
@@ -536,6 +602,15 @@ export async function runProjectConfiguration(options) {
536
602
  const toolsWithSharing = handleAgentsMdSharing(result.tools);
537
603
  newAITools = [...new Set([...newAITools, ...toolsWithSharing])];
538
604
  needsIntegrationRegeneration = true;
605
+
606
+ // Prompt for AGENTS.md universal output if no codex/opencode in final set
607
+ const hasAgentsMdTool = newAITools.includes('codex') || newAITools.includes('opencode');
608
+ if (!hasAgentsMdTool && !manifest.generateAgentsMd) {
609
+ const wantAgentsMd = await promptAgentsMd(newAITools);
610
+ if (wantAgentsMd) {
611
+ manifest.generateAgentsMd = true;
612
+ }
613
+ }
539
614
  } else if (result.action === 'remove' && result.tools.length > 0) {
540
615
  newAITools = newAITools.filter(tool => !result.tools.includes(tool));
541
616
 
@@ -585,8 +660,26 @@ export async function runProjectConfiguration(options) {
585
660
  newMethodology = await promptMethodology();
586
661
  }
587
662
 
663
+ // For 'all': prompt display_language first, then format and the rest
664
+ let allDisplayLanguageChanged = false;
665
+ if (configType === 'all') {
666
+ const oldDisplayLang = manifest.options?.display_language || 'en';
667
+ const newDisplayLang = await promptDisplayLanguage();
668
+ if (newDisplayLang !== oldDisplayLang) {
669
+ newOptions.display_language = newDisplayLang;
670
+ manifest.options = manifest.options || {};
671
+ manifest.options.display_language = newDisplayLang;
672
+ setLanguage(newDisplayLang);
673
+ config.set('ui.language', newDisplayLang, 'global');
674
+ allDisplayLanguageChanged = true;
675
+ } else {
676
+ newOptions.display_language = oldDisplayLang;
677
+ }
678
+ }
679
+
588
680
  // Handle traditional options
589
- if (configType === 'all' || configType === 'format') {
681
+ // Format: only prompt with -E or direct --type format (advanced setting)
682
+ if (configType === 'format' || (configType === 'all' && options.experimental)) {
590
683
  newFormat = await promptFormat();
591
684
  }
592
685
 
@@ -594,7 +687,8 @@ export async function runProjectConfiguration(options) {
594
687
  newOptions.workflow = await promptGitWorkflow();
595
688
  }
596
689
 
597
- if (configType === 'all' || configType === 'merge_strategy') {
690
+ // Merge strategy: only prompt with -E or direct --type merge_strategy (advanced setting)
691
+ if (configType === 'merge_strategy' || (configType === 'all' && options.experimental)) {
598
692
  newOptions.merge_strategy = await promptMergeStrategy();
599
693
  }
600
694
 
@@ -603,10 +697,24 @@ export async function runProjectConfiguration(options) {
603
697
  newOptions.commit_language = await promptCommitLanguage(displayLanguage);
604
698
  }
605
699
 
606
- if (configType === 'all' || configType === 'test_levels') {
700
+ // Test levels: only prompt with -E or direct --type test_levels (advanced setting)
701
+ if (configType === 'test_levels' || (configType === 'all' && options.experimental)) {
607
702
  newOptions.test_levels = await promptTestLevels();
608
703
  }
609
704
 
705
+ // Content mode: only prompt with -E or direct --type content_mode (advanced setting)
706
+ if (configType === 'content_mode') {
707
+ newContentMode = await promptContentModeChange(manifest.contentMode || 'minimal');
708
+ if (newContentMode !== manifest.contentMode) {
709
+ needsIntegrationRegeneration = true;
710
+ }
711
+ } else if (configType === 'all' && options.experimental) {
712
+ newContentMode = await promptContentModeChange(manifest.contentMode || 'minimal');
713
+ if (newContentMode !== manifest.contentMode) {
714
+ needsIntegrationRegeneration = true;
715
+ }
716
+ }
717
+
610
718
  // Show changes
611
719
  console.log();
612
720
  console.log(chalk.cyan(msgObj.newConfig));
@@ -844,6 +952,25 @@ export async function runProjectConfiguration(options) {
844
952
  }
845
953
  }
846
954
 
955
+ // For 'all' flow: if display_language changed, reinstall skills/commands with new locale
956
+ if (configType === 'all' && allDisplayLanguageChanged) {
957
+ const hasSkillInstalls = manifest.skills?.installations?.length > 0;
958
+ const hasCommandInstalls = manifest.commands?.installations?.length > 0;
959
+ if (hasSkillInstalls || hasCommandInstalls) {
960
+ const cmdLocale = displayLanguageToLocale(newOptions.display_language);
961
+ if (hasSkillInstalls) {
962
+ const skillSpinner = ora(t('config.reinstallingSkills', 'Reinstalling Skills...')).start();
963
+ await installSkillsToMultipleAgents(manifest.skills.installations, null, projectPath, cmdLocale);
964
+ skillSpinner.succeed(t('config.skillsReinstalled', 'Skills reinstalled'));
965
+ }
966
+ if (hasCommandInstalls) {
967
+ const cmdSpinner = ora(t('config.reinstallingCommands', 'Reinstalling Commands...')).start();
968
+ await installCommandsToMultipleAgents(manifest.commands.installations, null, projectPath, cmdLocale);
969
+ cmdSpinner.succeed(t('config.commandsReinstalled', 'Commands reinstalled'));
970
+ }
971
+ }
972
+ }
973
+
847
974
  console.log();
848
975
 
849
976
  // Exit explicitly to prevent hanging due to inquirer's readline interface
@@ -11,7 +11,7 @@ import { detectAll } from '../utils/detector.js';
11
11
  import { promptConfirm } from '../prompts/init.js';
12
12
  import { runInitFlow } from '../flows/init-flow.js';
13
13
  import { installStandards } from '../installers/standards-installer.js';
14
- import { installIntegrations } from '../installers/integration-installer.js';
14
+ import { installIntegrations, generateUniversalAgentsMd } from '../installers/integration-installer.js';
15
15
  import { installSkills, installCommands } from '../installers/skills-installer.js';
16
16
  import { writeFinalManifest } from '../installers/manifest-installer.js';
17
17
  import {
@@ -94,6 +94,18 @@ export async function initCommand(options) {
94
94
  // 2. Install Integrations
95
95
  const integrationResults = await installIntegrations(config, projectPath);
96
96
 
97
+ // 2.5. Generate universal AGENTS.md if requested
98
+ const agentsMdResult = await generateUniversalAgentsMd(config, integrationResults, projectPath);
99
+ if (agentsMdResult.path) {
100
+ integrationResults.integrations.push(agentsMdResult.path);
101
+ if (agentsMdResult.blockHashInfo) {
102
+ integrationResults.integrationBlockHashes[agentsMdResult.path] = {
103
+ ...agentsMdResult.blockHashInfo,
104
+ installedAt: new Date().toISOString()
105
+ };
106
+ }
107
+ }
108
+
97
109
  // 3. Install Skills & Commands
98
110
  const skillsResults = {
99
111
  skills: [],
@@ -289,6 +301,13 @@ function buildNonInteractiveConfig(options, detected, projectPath) {
289
301
 
290
302
  skillsConfig.locale = displayLanguageToLocale(displayLanguage);
291
303
 
304
+ // AGENTS.md: default to true in --yes mode unless codex/opencode selected or --no-agents-md
305
+ // When codex/opencode is selected, they already generate AGENTS.md — no need for universal output
306
+ const hasAgentsMdTool = aiToolsNormalized.includes('codex') || aiToolsNormalized.includes('opencode');
307
+ const generateAgentsMd = hasAgentsMdTool
308
+ ? false // codex/opencode handles AGENTS.md, skip universal output
309
+ : (options.agentsMd !== undefined ? !!options.agentsMd : true);
310
+
292
311
  return {
293
312
  languages: options.lang ? [options.lang] : Object.keys(detected.languages).filter(k => detected.languages[k]),
294
313
  frameworks: options.framework ? [options.framework] : Object.keys(detected.frameworks).filter(k => detected.frameworks[k]),
@@ -298,13 +317,14 @@ function buildNonInteractiveConfig(options, detected, projectPath) {
298
317
  workflow: options.workflow || 'github-flow',
299
318
  merge_strategy: options.mergeStrategy || 'squash',
300
319
  commit_language: options.commitLang || 'english',
301
- test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing']
320
+ test_levels: options.testLevels ? options.testLevels.split(',') : ['unit-testing', 'integration-testing', 'system-testing', 'e2e-testing']
302
321
  },
303
322
  skillsConfig,
304
323
  aiTools: aiToolsNormalized,
305
324
  integrations: [...aiToolsNormalized],
306
325
  contentMode: skillsConfig.contentMode || 'minimal',
307
- methodology: null
326
+ methodology: null,
327
+ generateAgentsMd
308
328
  };
309
329
  }
310
330