@sk8metal/michi-cli 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +420 -49
  3. package/dist/scripts/__tests__/create-project.test.js +24 -28
  4. package/dist/scripts/__tests__/create-project.test.js.map +1 -1
  5. package/dist/scripts/__tests__/jira-transitions.test.d.ts +5 -0
  6. package/dist/scripts/__tests__/jira-transitions.test.d.ts.map +1 -0
  7. package/dist/scripts/__tests__/jira-transitions.test.js +172 -0
  8. package/dist/scripts/__tests__/jira-transitions.test.js.map +1 -0
  9. package/dist/scripts/__tests__/multi-project-estimate.test.js +14 -15
  10. package/dist/scripts/__tests__/multi-project-estimate.test.js.map +1 -1
  11. package/dist/scripts/__tests__/setup-existing-project.test.js +146 -5
  12. package/dist/scripts/__tests__/setup-existing-project.test.js.map +1 -1
  13. package/dist/scripts/__tests__/setup-interactive.test.js +23 -17
  14. package/dist/scripts/__tests__/setup-interactive.test.js.map +1 -1
  15. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts +5 -0
  16. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts.map +1 -0
  17. package/dist/scripts/__tests__/spec-impl-workflow.test.js +321 -0
  18. package/dist/scripts/__tests__/spec-impl-workflow.test.js.map +1 -0
  19. package/dist/scripts/__tests__/spec-loader.test.d.ts +5 -0
  20. package/dist/scripts/__tests__/spec-loader.test.d.ts.map +1 -0
  21. package/dist/scripts/__tests__/spec-loader.test.js +153 -0
  22. package/dist/scripts/__tests__/spec-loader.test.js.map +1 -0
  23. package/dist/scripts/__tests__/validate-phase.test.js +26 -22
  24. package/dist/scripts/__tests__/validate-phase.test.js.map +1 -1
  25. package/dist/scripts/config/config-schema.d.ts +17 -0
  26. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  27. package/dist/scripts/config/config-schema.js +55 -26
  28. package/dist/scripts/config/config-schema.js.map +1 -1
  29. package/dist/scripts/config-interactive.d.ts.map +1 -1
  30. package/dist/scripts/config-interactive.js +53 -38
  31. package/dist/scripts/config-interactive.js.map +1 -1
  32. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  33. package/dist/scripts/confluence-sync.js +0 -11
  34. package/dist/scripts/confluence-sync.js.map +1 -1
  35. package/dist/scripts/constants/__tests__/environments.test.d.ts +2 -0
  36. package/dist/scripts/constants/__tests__/environments.test.d.ts.map +1 -0
  37. package/dist/scripts/constants/__tests__/environments.test.js +125 -0
  38. package/dist/scripts/constants/__tests__/environments.test.js.map +1 -0
  39. package/dist/scripts/constants/__tests__/languages.test.d.ts +2 -0
  40. package/dist/scripts/constants/__tests__/languages.test.d.ts.map +1 -0
  41. package/dist/scripts/constants/__tests__/languages.test.js +82 -0
  42. package/dist/scripts/constants/__tests__/languages.test.js.map +1 -0
  43. package/dist/scripts/constants/environments.d.ts +33 -0
  44. package/dist/scripts/constants/environments.d.ts.map +1 -0
  45. package/dist/scripts/constants/environments.js +64 -0
  46. package/dist/scripts/constants/environments.js.map +1 -0
  47. package/dist/scripts/constants/languages.d.ts +23 -0
  48. package/dist/scripts/constants/languages.d.ts.map +1 -0
  49. package/dist/scripts/constants/languages.js +53 -0
  50. package/dist/scripts/constants/languages.js.map +1 -0
  51. package/dist/scripts/constants/test-commands.d.ts +36 -0
  52. package/dist/scripts/constants/test-commands.d.ts.map +1 -0
  53. package/dist/scripts/constants/test-commands.js +70 -0
  54. package/dist/scripts/constants/test-commands.js.map +1 -0
  55. package/dist/scripts/create-project.d.ts +4 -0
  56. package/dist/scripts/create-project.d.ts.map +1 -1
  57. package/dist/scripts/create-project.js +51 -22
  58. package/dist/scripts/create-project.js.map +1 -1
  59. package/dist/scripts/jira-sync.d.ts +89 -3
  60. package/dist/scripts/jira-sync.d.ts.map +1 -1
  61. package/dist/scripts/jira-sync.js +366 -96
  62. package/dist/scripts/jira-sync.js.map +1 -1
  63. package/dist/scripts/markdown-to-confluence.js +1 -1
  64. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  65. package/dist/scripts/phase-runner.d.ts +1 -1
  66. package/dist/scripts/phase-runner.d.ts.map +1 -1
  67. package/dist/scripts/phase-runner.js +809 -13
  68. package/dist/scripts/phase-runner.js.map +1 -1
  69. package/dist/scripts/pr-automation.d.ts.map +1 -1
  70. package/dist/scripts/pr-automation.js.map +1 -1
  71. package/dist/scripts/pre-flight-check.js +1 -1
  72. package/dist/scripts/pre-flight-check.js.map +1 -1
  73. package/dist/scripts/setup-existing-project.d.ts +3 -1
  74. package/dist/scripts/setup-existing-project.d.ts.map +1 -1
  75. package/dist/scripts/setup-existing-project.js +165 -78
  76. package/dist/scripts/setup-existing-project.js.map +1 -1
  77. package/dist/scripts/setup-interactive.js +3 -3
  78. package/dist/scripts/setup-interactive.js.map +1 -1
  79. package/dist/scripts/spec-impl-workflow.d.ts +94 -0
  80. package/dist/scripts/spec-impl-workflow.d.ts.map +1 -0
  81. package/dist/scripts/spec-impl-workflow.js +354 -0
  82. package/dist/scripts/spec-impl-workflow.js.map +1 -0
  83. package/dist/scripts/template/__tests__/renderer.test.d.ts +2 -0
  84. package/dist/scripts/template/__tests__/renderer.test.d.ts.map +1 -0
  85. package/dist/scripts/template/__tests__/renderer.test.js +165 -0
  86. package/dist/scripts/template/__tests__/renderer.test.js.map +1 -0
  87. package/dist/scripts/template/renderer.d.ts +70 -0
  88. package/dist/scripts/template/renderer.d.ts.map +1 -0
  89. package/dist/scripts/template/renderer.js +99 -0
  90. package/dist/scripts/template/renderer.js.map +1 -0
  91. package/dist/scripts/test-execution-generator.d.ts +52 -0
  92. package/dist/scripts/test-execution-generator.d.ts.map +1 -0
  93. package/dist/scripts/test-execution-generator.js +576 -0
  94. package/dist/scripts/test-execution-generator.js.map +1 -0
  95. package/dist/scripts/test-interactive.d.ts +10 -0
  96. package/dist/scripts/test-interactive.d.ts.map +1 -0
  97. package/dist/scripts/test-interactive.js +627 -0
  98. package/dist/scripts/test-interactive.js.map +1 -0
  99. package/dist/scripts/test-new-features.d.ts +5 -0
  100. package/dist/scripts/test-new-features.d.ts.map +1 -0
  101. package/dist/scripts/test-new-features.js +145 -0
  102. package/dist/scripts/test-new-features.js.map +1 -0
  103. package/dist/scripts/test-spec-generator.d.ts +29 -0
  104. package/dist/scripts/test-spec-generator.d.ts.map +1 -0
  105. package/dist/scripts/test-spec-generator.js +494 -0
  106. package/dist/scripts/test-spec-generator.js.map +1 -0
  107. package/dist/scripts/test-workflow-stages.d.ts +6 -0
  108. package/dist/scripts/test-workflow-stages.d.ts.map +1 -0
  109. package/dist/scripts/test-workflow-stages.js +43 -0
  110. package/dist/scripts/test-workflow-stages.js.map +1 -0
  111. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts +5 -0
  112. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts.map +1 -0
  113. package/dist/scripts/utils/__tests__/aidlc-parser.test.js +315 -0
  114. package/dist/scripts/utils/__tests__/aidlc-parser.test.js.map +1 -0
  115. package/dist/scripts/utils/__tests__/business-days.test.d.ts +5 -0
  116. package/dist/scripts/utils/__tests__/business-days.test.d.ts.map +1 -0
  117. package/dist/scripts/utils/__tests__/business-days.test.js +171 -0
  118. package/dist/scripts/utils/__tests__/business-days.test.js.map +1 -0
  119. package/dist/scripts/utils/__tests__/config-loader.test.js +1 -1
  120. package/dist/scripts/utils/__tests__/config-loader.test.js.map +1 -1
  121. package/dist/scripts/utils/__tests__/config-validator.test.js +164 -35
  122. package/dist/scripts/utils/__tests__/config-validator.test.js.map +1 -1
  123. package/dist/scripts/utils/__tests__/env-config.test.d.ts +5 -0
  124. package/dist/scripts/utils/__tests__/env-config.test.d.ts.map +1 -0
  125. package/dist/scripts/utils/__tests__/env-config.test.js +218 -0
  126. package/dist/scripts/utils/__tests__/env-config.test.js.map +1 -0
  127. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts +5 -0
  128. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts.map +1 -0
  129. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js +202 -0
  130. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js.map +1 -0
  131. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts +5 -0
  132. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts.map +1 -0
  133. package/dist/scripts/utils/__tests__/tasks-converter.test.js +500 -0
  134. package/dist/scripts/utils/__tests__/tasks-converter.test.js.map +1 -0
  135. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts +5 -0
  136. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts.map +1 -0
  137. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js +314 -0
  138. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js.map +1 -0
  139. package/dist/scripts/utils/__tests__/test-runner.test.d.ts +5 -0
  140. package/dist/scripts/utils/__tests__/test-runner.test.d.ts.map +1 -0
  141. package/dist/scripts/utils/__tests__/test-runner.test.js +64 -0
  142. package/dist/scripts/utils/__tests__/test-runner.test.js.map +1 -0
  143. package/dist/scripts/utils/aidlc-parser.d.ts +86 -0
  144. package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -0
  145. package/dist/scripts/utils/aidlc-parser.js +208 -0
  146. package/dist/scripts/utils/aidlc-parser.js.map +1 -0
  147. package/dist/scripts/utils/business-days.d.ts +52 -0
  148. package/dist/scripts/utils/business-days.d.ts.map +1 -0
  149. package/dist/scripts/utils/business-days.js +98 -0
  150. package/dist/scripts/utils/business-days.js.map +1 -0
  151. package/dist/scripts/utils/ci-generator.d.ts +14 -0
  152. package/dist/scripts/utils/ci-generator.d.ts.map +1 -0
  153. package/dist/scripts/utils/ci-generator.js +61 -0
  154. package/dist/scripts/utils/ci-generator.js.map +1 -0
  155. package/dist/scripts/utils/config-loader.js +2 -2
  156. package/dist/scripts/utils/config-loader.js.map +1 -1
  157. package/dist/scripts/utils/config-validator.d.ts +7 -1
  158. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  159. package/dist/scripts/utils/config-validator.js +136 -23
  160. package/dist/scripts/utils/config-validator.js.map +1 -1
  161. package/dist/scripts/utils/confluence-approval.d.ts +46 -0
  162. package/dist/scripts/utils/confluence-approval.d.ts.map +1 -0
  163. package/dist/scripts/utils/confluence-approval.js +118 -0
  164. package/dist/scripts/utils/confluence-approval.js.map +1 -0
  165. package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -1
  166. package/dist/scripts/utils/confluence-hierarchy.js +1 -1
  167. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
  168. package/dist/scripts/utils/docker-generator.d.ts +9 -0
  169. package/dist/scripts/utils/docker-generator.d.ts.map +1 -0
  170. package/dist/scripts/utils/docker-generator.js +132 -0
  171. package/dist/scripts/utils/docker-generator.js.map +1 -0
  172. package/dist/scripts/utils/docker-requirement-detector.d.ts +15 -0
  173. package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -0
  174. package/dist/scripts/utils/docker-requirement-detector.js +124 -0
  175. package/dist/scripts/utils/docker-requirement-detector.js.map +1 -0
  176. package/dist/scripts/utils/env-config.d.ts +54 -0
  177. package/dist/scripts/utils/env-config.d.ts.map +1 -0
  178. package/dist/scripts/utils/env-config.js +414 -0
  179. package/dist/scripts/utils/env-config.js.map +1 -0
  180. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts +70 -0
  181. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts.map +1 -0
  182. package/dist/scripts/utils/jira-issue-type-fetcher.js +147 -0
  183. package/dist/scripts/utils/jira-issue-type-fetcher.js.map +1 -0
  184. package/dist/scripts/utils/language-detector.d.ts +14 -0
  185. package/dist/scripts/utils/language-detector.d.ts.map +1 -0
  186. package/dist/scripts/utils/language-detector.js +119 -0
  187. package/dist/scripts/utils/language-detector.js.map +1 -0
  188. package/dist/scripts/utils/markdown-parser.d.ts +55 -0
  189. package/dist/scripts/utils/markdown-parser.d.ts.map +1 -0
  190. package/dist/scripts/utils/markdown-parser.js +289 -0
  191. package/dist/scripts/utils/markdown-parser.js.map +1 -0
  192. package/dist/scripts/utils/project-detector.d.ts +17 -0
  193. package/dist/scripts/utils/project-detector.d.ts.map +1 -0
  194. package/dist/scripts/utils/project-detector.js +166 -0
  195. package/dist/scripts/utils/project-detector.js.map +1 -0
  196. package/dist/scripts/utils/project-finder.js +2 -2
  197. package/dist/scripts/utils/project-finder.js.map +1 -1
  198. package/dist/scripts/utils/release-notes-generator.d.ts +56 -0
  199. package/dist/scripts/utils/release-notes-generator.d.ts.map +1 -0
  200. package/dist/scripts/utils/release-notes-generator.js +162 -0
  201. package/dist/scripts/utils/release-notes-generator.js.map +1 -0
  202. package/dist/scripts/utils/spec-loader.d.ts +79 -0
  203. package/dist/scripts/utils/spec-loader.d.ts.map +1 -0
  204. package/dist/scripts/utils/spec-loader.js +80 -0
  205. package/dist/scripts/utils/spec-loader.js.map +1 -0
  206. package/dist/scripts/utils/spec-updater.d.ts +7 -0
  207. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  208. package/dist/scripts/utils/spec-updater.js.map +1 -1
  209. package/dist/scripts/utils/tasks-converter.d.ts +57 -0
  210. package/dist/scripts/utils/tasks-converter.d.ts.map +1 -0
  211. package/dist/scripts/utils/tasks-converter.js +322 -0
  212. package/dist/scripts/utils/tasks-converter.js.map +1 -0
  213. package/dist/scripts/utils/tasks-format-validator.d.ts +36 -0
  214. package/dist/scripts/utils/tasks-format-validator.d.ts.map +1 -0
  215. package/dist/scripts/utils/tasks-format-validator.js +158 -0
  216. package/dist/scripts/utils/tasks-format-validator.js.map +1 -0
  217. package/dist/scripts/utils/template-applier.d.ts +37 -0
  218. package/dist/scripts/utils/template-applier.d.ts.map +1 -0
  219. package/dist/scripts/utils/template-applier.js +129 -0
  220. package/dist/scripts/utils/template-applier.js.map +1 -0
  221. package/dist/scripts/utils/template-finder.d.ts +37 -0
  222. package/dist/scripts/utils/template-finder.d.ts.map +1 -0
  223. package/dist/scripts/utils/template-finder.js +63 -0
  224. package/dist/scripts/utils/template-finder.js.map +1 -0
  225. package/dist/scripts/utils/test-config-generator.d.ts +12 -0
  226. package/dist/scripts/utils/test-config-generator.d.ts.map +1 -0
  227. package/dist/scripts/utils/test-config-generator.js +185 -0
  228. package/dist/scripts/utils/test-config-generator.js.map +1 -0
  229. package/dist/scripts/utils/test-runner.d.ts +31 -0
  230. package/dist/scripts/utils/test-runner.d.ts.map +1 -0
  231. package/dist/scripts/utils/test-runner.js +103 -0
  232. package/dist/scripts/utils/test-runner.js.map +1 -0
  233. package/dist/scripts/validate-phase.d.ts +1 -1
  234. package/dist/scripts/validate-phase.d.ts.map +1 -1
  235. package/dist/scripts/validate-phase.js +153 -5
  236. package/dist/scripts/validate-phase.js.map +1 -1
  237. package/dist/scripts/workflow-orchestrator.d.ts +8 -0
  238. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
  239. package/dist/scripts/workflow-orchestrator.js +108 -7
  240. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  241. package/dist/src/__tests__/integration/internationalization.test.d.ts +8 -0
  242. package/dist/src/__tests__/integration/internationalization.test.d.ts.map +1 -0
  243. package/dist/src/__tests__/integration/internationalization.test.js +333 -0
  244. package/dist/src/__tests__/integration/internationalization.test.js.map +1 -0
  245. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +5 -0
  246. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts.map +1 -0
  247. package/dist/src/__tests__/integration/setup/claude-agent.test.js +122 -0
  248. package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +1 -0
  249. package/dist/src/__tests__/integration/setup/claude.test.d.ts +5 -0
  250. package/dist/src/__tests__/integration/setup/claude.test.d.ts.map +1 -0
  251. package/dist/src/__tests__/integration/setup/claude.test.js +111 -0
  252. package/dist/src/__tests__/integration/setup/claude.test.js.map +1 -0
  253. package/dist/src/__tests__/integration/setup/cursor.test.d.ts +5 -0
  254. package/dist/src/__tests__/integration/setup/cursor.test.d.ts.map +1 -0
  255. package/dist/src/__tests__/integration/setup/cursor.test.js +166 -0
  256. package/dist/src/__tests__/integration/setup/cursor.test.js.map +1 -0
  257. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts +32 -0
  258. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts.map +1 -0
  259. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js +72 -0
  260. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js.map +1 -0
  261. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts +38 -0
  262. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts.map +1 -0
  263. package/dist/src/__tests__/integration/setup/helpers/test-project.js +83 -0
  264. package/dist/src/__tests__/integration/setup/helpers/test-project.js.map +1 -0
  265. package/dist/src/__tests__/integration/setup/validation.test.d.ts +5 -0
  266. package/dist/src/__tests__/integration/setup/validation.test.d.ts.map +1 -0
  267. package/dist/src/__tests__/integration/setup/validation.test.js +301 -0
  268. package/dist/src/__tests__/integration/setup/validation.test.js.map +1 -0
  269. package/dist/src/cli.d.ts.map +1 -1
  270. package/dist/src/cli.js +228 -18
  271. package/dist/src/cli.js.map +1 -1
  272. package/dist/src/commands/setup-existing.d.ts +25 -0
  273. package/dist/src/commands/setup-existing.d.ts.map +1 -0
  274. package/dist/src/commands/setup-existing.js +695 -0
  275. package/dist/src/commands/setup-existing.js.map +1 -0
  276. package/dist/vitest.config.d.ts.map +1 -1
  277. package/dist/vitest.config.js +4 -3
  278. package/dist/vitest.config.js.map +1 -1
  279. package/docs/README.md +3 -1
  280. package/docs/context.md +59 -0
  281. package/docs/design-issue-55.md +240 -0
  282. package/docs/design-issue-56.md +181 -0
  283. package/docs/michi-development/testing/manual-verification-flow.md +2242 -0
  284. package/docs/michi-development/testing/pre-publish-checklist.md +560 -0
  285. package/docs/plan.md +275 -0
  286. package/docs/user-guide/getting-started/github-token-setup.md +509 -0
  287. package/docs/{getting-started → user-guide/getting-started}/new-repository-setup.md +108 -28
  288. package/docs/{getting-started → user-guide/getting-started}/quick-start.md +73 -6
  289. package/docs/{getting-started → user-guide/getting-started}/setup.md +278 -3
  290. package/docs/{guides → user-guide/guides}/customization.md +3 -3
  291. package/docs/user-guide/guides/internationalization.md +540 -0
  292. package/docs/{guides → user-guide/guides}/multi-project.md +2 -2
  293. package/docs/{guides → user-guide/guides}/phase-automation.md +67 -9
  294. package/docs/user-guide/guides/workflow.md +582 -0
  295. package/docs/user-guide/hands-on/README.md +142 -0
  296. package/docs/user-guide/hands-on/claude-agent-setup.md +455 -0
  297. package/docs/user-guide/hands-on/claude-setup.md +398 -0
  298. package/docs/user-guide/hands-on/cursor-setup.md +352 -0
  299. package/docs/user-guide/hands-on/troubleshooting.md +964 -0
  300. package/docs/user-guide/hands-on/verification-checklist.md +438 -0
  301. package/docs/user-guide/hands-on/workflow-walkthrough.md +906 -0
  302. package/docs/user-guide/reference/config.md +564 -0
  303. package/docs/{reference → user-guide/reference}/quick-reference.md +75 -53
  304. package/docs/user-guide/release/ci-setup.md +541 -0
  305. package/docs/user-guide/release/release-flow.md +476 -0
  306. package/docs/user-guide/templates/test-specs/README.md +173 -0
  307. package/docs/user-guide/templates/test-specs/e2e-test-spec-template.md +547 -0
  308. package/docs/user-guide/templates/test-specs/integration-test-spec-template.md +435 -0
  309. package/docs/user-guide/templates/test-specs/performance-test-spec-template.md +454 -0
  310. package/docs/user-guide/templates/test-specs/security-test-spec-template.md +664 -0
  311. package/docs/user-guide/templates/test-specs/unit-test-spec-template.md +328 -0
  312. package/docs/user-guide/testing/integration-tests.md +312 -0
  313. package/docs/user-guide/testing/tdd-cycle.md +349 -0
  314. package/docs/user-guide/testing/test-execution-flow.md +396 -0
  315. package/docs/user-guide/testing/test-failure-handling.md +521 -0
  316. package/docs/user-guide/testing/test-planning-flow.md +181 -0
  317. package/docs/user-guide/testing-strategy.md +185 -0
  318. package/docs/verification-guide.md +518 -0
  319. package/package.json +13 -3
  320. package/scripts/__tests__/create-project.test.ts +67 -49
  321. package/scripts/__tests__/jira-transitions.test.ts +225 -0
  322. package/scripts/__tests__/multi-project-estimate.test.ts +36 -30
  323. package/scripts/__tests__/setup-existing-project.test.ts +171 -6
  324. package/scripts/__tests__/setup-interactive.test.ts +52 -46
  325. package/scripts/__tests__/spec-impl-workflow.test.ts +429 -0
  326. package/scripts/__tests__/spec-loader.test.ts +199 -0
  327. package/scripts/__tests__/validate-phase.test.ts +78 -54
  328. package/scripts/config/config-schema.ts +89 -50
  329. package/scripts/config-interactive.ts +191 -136
  330. package/scripts/confluence-sync.ts +0 -12
  331. package/scripts/constants/__tests__/environments.test.ts +146 -0
  332. package/scripts/constants/__tests__/languages.test.ts +100 -0
  333. package/scripts/constants/environments.ts +81 -0
  334. package/scripts/constants/languages.ts +70 -0
  335. package/scripts/constants/test-commands.ts +96 -0
  336. package/scripts/create-project.ts +52 -22
  337. package/scripts/jira-sync.ts +767 -232
  338. package/scripts/markdown-to-confluence.ts +1 -1
  339. package/scripts/phase-runner.ts +1056 -63
  340. package/scripts/pr-automation.ts +0 -1
  341. package/scripts/pre-flight-check.ts +1 -1
  342. package/scripts/pre-publish-check.sh +311 -0
  343. package/scripts/quick-verify.sh +115 -0
  344. package/scripts/setup-existing-project.ts +306 -143
  345. package/scripts/setup-interactive.ts +4 -4
  346. package/scripts/spec-impl-workflow.ts +505 -0
  347. package/scripts/template/__tests__/renderer.test.ts +206 -0
  348. package/scripts/template/renderer.ts +133 -0
  349. package/scripts/test-execution-generator.ts +695 -0
  350. package/scripts/test-interactive.ts +779 -0
  351. package/scripts/test-new-features.ts +168 -0
  352. package/scripts/test-npm-package.sh +345 -0
  353. package/scripts/test-spec-generator.ts +574 -0
  354. package/scripts/test-workflow-stages.ts +53 -0
  355. package/scripts/utils/__tests__/aidlc-parser.test.ts +349 -0
  356. package/scripts/utils/__tests__/business-days.test.ts +214 -0
  357. package/scripts/utils/__tests__/config-loader.test.ts +1 -1
  358. package/scripts/utils/__tests__/config-validator.test.ts +309 -88
  359. package/scripts/utils/__tests__/env-config.test.ts +259 -0
  360. package/scripts/utils/__tests__/jira-issue-type-fetcher.test.ts +272 -0
  361. package/scripts/utils/__tests__/tasks-converter.test.ts +582 -0
  362. package/scripts/utils/__tests__/tasks-format-validator.test.ts +338 -0
  363. package/scripts/utils/__tests__/test-runner.test.ts +77 -0
  364. package/scripts/utils/aidlc-parser.ts +289 -0
  365. package/scripts/utils/business-days.ts +115 -0
  366. package/scripts/utils/ci-generator.ts +84 -0
  367. package/scripts/utils/config-loader.ts +2 -2
  368. package/scripts/utils/config-validator.ts +304 -117
  369. package/scripts/utils/confluence-approval.ts +167 -0
  370. package/scripts/utils/confluence-hierarchy.ts +2 -4
  371. package/scripts/utils/docker-generator.ts +151 -0
  372. package/scripts/utils/docker-requirement-detector.ts +153 -0
  373. package/scripts/utils/env-config.ts +526 -0
  374. package/scripts/utils/jira-issue-type-fetcher.ts +199 -0
  375. package/scripts/utils/language-detector.ts +139 -0
  376. package/scripts/utils/markdown-parser.ts +376 -0
  377. package/scripts/utils/project-detector.ts +192 -0
  378. package/scripts/utils/project-finder.ts +2 -2
  379. package/scripts/utils/release-notes-generator.ts +210 -0
  380. package/scripts/utils/spec-loader.ts +125 -0
  381. package/scripts/utils/spec-updater.ts +8 -1
  382. package/scripts/utils/tasks-converter.ts +601 -0
  383. package/scripts/utils/tasks-format-validator.ts +193 -0
  384. package/scripts/utils/template-applier.ts +202 -0
  385. package/scripts/utils/template-finder.ts +75 -0
  386. package/scripts/utils/test-config-generator.ts +210 -0
  387. package/scripts/utils/test-runner.ts +133 -0
  388. package/scripts/validate-phase.ts +186 -9
  389. package/scripts/workflow-orchestrator.ts +130 -12
  390. package/templates/ci/github-actions/java.yml +54 -0
  391. package/templates/ci/github-actions/nodejs.yml +46 -0
  392. package/templates/ci/github-actions/php.yml +52 -0
  393. package/templates/ci/screwdriver/java.yaml +17 -0
  394. package/templates/ci/screwdriver/nodejs.yaml +17 -0
  395. package/templates/ci/screwdriver/php.yaml +20 -0
  396. package/templates/claude/commands/kiro/kiro-spec-impl.md +244 -0
  397. package/templates/claude/commands/kiro/kiro-spec-tasks.md +354 -0
  398. package/templates/claude/commands/michi/confluence-sync.md +38 -0
  399. package/templates/claude/commands/michi/project-switch.md +36 -0
  400. package/templates/claude/rules/atlassian-integration.md +35 -0
  401. package/templates/claude/rules/michi-core.md +54 -0
  402. package/templates/claude-agent/README.md +31 -0
  403. package/templates/claude-agent/agents/.gitkeep +0 -0
  404. package/templates/claude-agent/agents/designer.md +79 -0
  405. package/templates/claude-agent/agents/developer.md +68 -0
  406. package/templates/claude-agent/agents/manager-agent.md +59 -0
  407. package/templates/claude-agent/agents/tester.md +101 -0
  408. package/templates/claude-agent/commands/kiro/.gitkeep +0 -0
  409. package/templates/claude-agent/commands/kiro/kiro-spec-impl.md +244 -0
  410. package/templates/claude-agent/commands/kiro/kiro-spec-tasks.md +354 -0
  411. package/templates/cline/rules/atlassian-integration.md +36 -0
  412. package/templates/cline/rules/michi-core.md +56 -0
  413. package/templates/codex/AGENTS.override.md +277 -0
  414. package/templates/codex/prompts/confluence-sync.md +177 -0
  415. package/templates/codex/rules/README.md +210 -0
  416. package/templates/common/.kiro/project.json.template +21 -0
  417. package/templates/cursor/commands/kiro/kiro-spec-impl.md +244 -0
  418. package/templates/cursor/commands/kiro/kiro-spec-tasks.md +354 -0
  419. package/templates/cursor/commands/michi/confluence-sync.md +76 -0
  420. package/templates/cursor/commands/michi/project-switch.md +69 -0
  421. package/templates/cursor/rules/atlassian-mcp.mdc +188 -0
  422. package/templates/cursor/rules/github-ssot.mdc +151 -0
  423. package/templates/cursor/rules/multi-project.mdc +81 -0
  424. package/templates/gemini/commands/README.md +41 -0
  425. package/templates/gemini/rules/GEMINI.md +80 -0
  426. package/docs/guides/workflow.md +0 -342
  427. package/docs/reference/config.md +0 -545
  428. package/scripts/setup-env.sh +0 -52
  429. package/scripts/setup-existing.sh +0 -152
  430. /package/docs/{contributing → michi-development/contributing}/development.md +0 -0
  431. /package/docs/{contributing → michi-development/contributing}/release.md +0 -0
  432. /package/docs/{testing-strategy.md → michi-development/testing-strategy.md} +0 -0
  433. /package/docs/{reference → user-guide/reference}/tasks-template.md +0 -0
@@ -1,35 +1,61 @@
1
1
  #!/usr/bin/env tsx
2
2
  /**
3
3
  * 既存プロジェクトにMichiワークフローを追加するスクリプト
4
- *
4
+ *
5
5
  * 使い方:
6
6
  * cd /path/to/existing-repo
7
7
  * npx tsx /path/to/michi/scripts/setup-existing-project.ts \
8
8
  * --michi-path /path/to/michi \
9
9
  * --project-name "既存プロジェクト" \
10
- * --jira-key "EXIST"
10
+ * --jira-key "EXIST" \
11
+ * --environment cursor \
12
+ * --lang ja
11
13
  */
12
14
 
13
- import { cpSync, existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
14
- import { resolve, join, basename } from 'path';
15
+ import {
16
+ cpSync,
17
+ existsSync,
18
+ mkdirSync,
19
+ writeFileSync,
20
+ readFileSync,
21
+ readdirSync,
22
+ } from 'fs';
23
+ import { resolve, join, basename, dirname } from 'path';
24
+ import { fileURLToPath } from 'url';
15
25
  import { execSync } from 'child_process';
16
26
  import { findRepositoryRoot } from './utils/project-finder.js';
27
+ import {
28
+ type Environment,
29
+ getEnvironmentConfig,
30
+ isSupportedEnvironment,
31
+ } from './constants/environments.js';
32
+ import {
33
+ type SupportedLanguage,
34
+ isSupportedLanguage,
35
+ } from './constants/languages.js';
36
+ import { createTemplateContext, renderTemplate } from './template/renderer.js';
37
+
38
+ // ES module で __dirname を取得
39
+ const __filename = fileURLToPath(import.meta.url);
40
+ const __dirname = dirname(__filename);
17
41
 
18
42
  interface SetupConfig {
19
- michiPath: string; // Michiリポジトリのパス
20
- projectName: string; // プロジェクト表示名
21
- jiraKey: string; // JIRAプロジェクトキー
22
- labels?: string[]; // Confluenceラベル(オプション)
43
+ michiPath: string; // Michiリポジトリのパス
44
+ projectName: string; // プロジェクト表示名
45
+ jiraKey: string; // JIRAプロジェクトキー
46
+ labels?: string[]; // Confluenceラベル(オプション)
47
+ environment: Environment; // cc-sdd環境: 'claude' | 'claude-agent' | 'cursor'
48
+ langCode: SupportedLanguage; // 言語コード: 'ja'
23
49
  }
24
50
 
25
51
  function parseArgs(): SetupConfig {
26
52
  const args = process.argv.slice(2);
27
53
  const config: Partial<SetupConfig> = {};
28
-
54
+
29
55
  for (let i = 0; i < args.length; i += 2) {
30
56
  const key = args[i].replace(/^--/, '');
31
57
  const value = args[i + 1];
32
-
58
+
33
59
  switch (key) {
34
60
  case 'michi-path':
35
61
  config.michiPath = value;
@@ -40,45 +66,108 @@ function parseArgs(): SetupConfig {
40
66
  case 'jira-key':
41
67
  config.jiraKey = value;
42
68
  break;
69
+ case 'environment':
70
+ config.environment = value as Environment;
71
+ break;
72
+ case 'lang':
73
+ config.langCode = value as SupportedLanguage;
74
+ break;
43
75
  }
44
76
  }
45
-
77
+
46
78
  // デフォルト値
47
79
  if (!config.michiPath) {
48
80
  config.michiPath = resolve(__dirname, '..');
49
81
  }
50
-
82
+ if (!config.environment) {
83
+ config.environment = 'claude';
84
+ }
85
+ if (!config.langCode) {
86
+ config.langCode = 'ja';
87
+ }
88
+
51
89
  // 必須フィールドチェック
52
90
  if (!config.projectName || !config.jiraKey) {
53
91
  console.error('Missing required parameters');
54
- console.error('Usage: tsx setup-existing-project.ts --project-name <name> --jira-key <key> [--michi-path <path>]');
92
+ console.error(
93
+ 'Usage: tsx setup-existing-project.ts --project-name <name> --jira-key <key> [--michi-path <path>] [--environment <env>] [--lang <code>]',
94
+ );
55
95
  process.exit(1);
56
96
  }
57
-
97
+
98
+ // 環境バリデーション
99
+ if (!isSupportedEnvironment(config.environment)) {
100
+ console.error(`Unsupported environment: ${config.environment}`);
101
+ console.error('Supported environments: claude, claude-agent, cursor');
102
+ process.exit(1);
103
+ }
104
+
105
+ // 言語バリデーション
106
+ if (!isSupportedLanguage(config.langCode)) {
107
+ console.error(`Unsupported language: ${config.langCode}`);
108
+ console.error(
109
+ 'Supported languages: ja, en, zh-TW, zh, es, pt, de, fr, ru, it, ko, ar',
110
+ );
111
+ process.exit(1);
112
+ }
113
+
58
114
  return config as SetupConfig;
59
115
  }
60
116
 
117
+ /**
118
+ * Copy and render templates recursively
119
+ *
120
+ * @param sourceDir - Source directory containing templates
121
+ * @param destDir - Destination directory for rendered files
122
+ * @param context - Template context for rendering
123
+ */
124
+ function copyAndRenderTemplates(
125
+ sourceDir: string,
126
+ destDir: string,
127
+ context: ReturnType<typeof createTemplateContext>,
128
+ ): void {
129
+ const entries = readdirSync(sourceDir, { withFileTypes: true });
130
+
131
+ for (const entry of entries) {
132
+ const sourcePath = join(sourceDir, entry.name);
133
+ const destPath = join(destDir, entry.name);
134
+
135
+ if (entry.isDirectory()) {
136
+ // ディレクトリは再帰的にコピー
137
+ mkdirSync(destPath, { recursive: true });
138
+ copyAndRenderTemplates(sourcePath, destPath, context);
139
+ } else if (entry.isFile()) {
140
+ // ファイルはレンダリングしてコピー
141
+ const content = readFileSync(sourcePath, 'utf-8');
142
+ const rendered = renderTemplate(content, context);
143
+ writeFileSync(destPath, rendered, 'utf-8');
144
+ }
145
+ }
146
+ }
147
+
61
148
  async function setupExistingProject(config: SetupConfig): Promise<void> {
62
149
  const currentDir = process.cwd();
63
150
  const projectId = basename(currentDir);
64
-
151
+
65
152
  console.log('🚀 既存プロジェクトにMichiワークフローを追加');
66
153
  console.log(` プロジェクト: ${config.projectName}`);
67
154
  console.log(` ディレクトリ: ${currentDir}`);
68
155
  console.log(` Michiパス: ${config.michiPath}`);
156
+ console.log(` 環境: ${config.environment}`);
157
+ console.log(` 言語: ${config.langCode}`);
69
158
  console.log('');
70
-
159
+
71
160
  // リポジトリルートを検出
72
161
  const repoRoot = findRepositoryRoot(currentDir);
73
-
162
+
74
163
  // projects/{project-id}/配下にプロジェクトを作成
75
164
  const projectsDir = join(repoRoot, 'projects');
76
165
  const projectDir = join(projectsDir, projectId);
77
-
166
+
78
167
  console.log(`📁 リポジトリルート: ${repoRoot}`);
79
168
  console.log(`📁 プロジェクトディレクトリ: ${projectDir}`);
80
169
  console.log('');
81
-
170
+
82
171
  // projects/ディレクトリとプロジェクトディレクトリを作成
83
172
  if (!existsSync(projectsDir)) {
84
173
  mkdirSync(projectsDir, { recursive: true });
@@ -88,24 +177,26 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
88
177
  mkdirSync(projectDir, { recursive: true });
89
178
  console.log(` ✅ Created: ${projectDir}`);
90
179
  }
91
-
180
+
92
181
  // 元の作業ディレクトリを保存
93
182
  const originalCwd = process.cwd();
94
-
183
+
95
184
  try {
96
185
  // プロジェクトディレクトリに移動
97
186
  process.chdir(projectDir);
98
-
187
+
99
188
  // Step 1: cc-sdd導入確認
100
189
  console.log('\n📦 Step 1: Checking cc-sdd installation...');
101
190
  if (!existsSync('.cursor/commands/kiro')) {
102
191
  console.log(' Installing cc-sdd...');
103
- execSync('npx cc-sdd@latest --cursor --lang ja --yes', { stdio: 'inherit' });
192
+ execSync('npx cc-sdd@latest --cursor --lang ja --yes', {
193
+ stdio: 'inherit',
194
+ });
104
195
  console.log(' ✅ cc-sdd installed');
105
196
  } else {
106
197
  console.log(' ✅ cc-sdd already installed');
107
198
  }
108
-
199
+
109
200
  // Step 2: .kiro ディレクトリ作成
110
201
  console.log('\n📁 Step 2: Creating .kiro directory structure...');
111
202
  mkdirSync('.kiro/settings/templates', { recursive: true });
@@ -115,134 +206,193 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
115
206
 
116
207
  // Step 3: プロジェクトメタデータ作成
117
208
  console.log('\n📝 Step 3: Creating project metadata...');
118
-
209
+
119
210
  // GitHub URLを取得(既存リポジトリから)
120
211
  let repoUrl = '';
121
212
  try {
122
- repoUrl = execSync('git config --get remote.origin.url', { encoding: 'utf-8', cwd: repoRoot }).trim();
213
+ repoUrl = execSync('git config --get remote.origin.url', {
214
+ encoding: 'utf-8',
215
+ cwd: repoRoot,
216
+ }).trim();
123
217
  // SSH形式をHTTPS形式に変換
124
218
  if (repoUrl.startsWith('git@github.com:')) {
125
- repoUrl = repoUrl.replace('git@github.com:', 'https://github.com/').replace('.git', '');
219
+ repoUrl = repoUrl
220
+ .replace('git@github.com:', 'https://github.com/')
221
+ .replace('.git', '');
126
222
  }
127
223
  } catch {
128
224
  repoUrl = `https://github.com/org/${projectId}`;
129
225
  }
130
-
131
- const labels = config.labels || (() => {
132
- // プロジェクトIDからプロジェクトラベル生成
133
- const projectLabel = projectId.toLowerCase().replace(/[^a-z0-9-]/g, '');
134
- const labelSet = new Set([`project:${projectLabel}`]);
135
-
136
- // ハイフンが存在する場合のみサービスラベルを生成
137
- if (projectId.includes('-')) {
138
- const parts = projectId.split('-');
139
- const servicePart = parts[parts.length - 1];
140
- const serviceLabel = servicePart.toLowerCase().replace(/[^a-z0-9-]/g, '');
141
-
142
- // サービスラベルがプロジェクトラベルと異なる場合のみ追加
143
- if (serviceLabel !== projectLabel) {
144
- labelSet.add(`service:${serviceLabel}`);
226
+
227
+ const labels =
228
+ config.labels ||
229
+ (() => {
230
+ // プロジェクトIDからプロジェクトラベル生成
231
+ const projectLabel = projectId.toLowerCase().replace(/[^a-z0-9-]/g, '');
232
+ const labelSet = new Set([`project:${projectLabel}`]);
233
+
234
+ // ハイフンが存在する場合のみサービスラベルを生成
235
+ if (projectId.includes('-')) {
236
+ const parts = projectId.split('-');
237
+ const servicePart = parts[parts.length - 1];
238
+ const serviceLabel = servicePart
239
+ .toLowerCase()
240
+ .replace(/[^a-z0-9-]/g, '');
241
+
242
+ // サービスラベルがプロジェクトラベルと異なる場合のみ追加
243
+ if (serviceLabel !== projectLabel) {
244
+ labelSet.add(`service:${serviceLabel}`);
245
+ }
145
246
  }
146
- }
147
-
148
- return Array.from(labelSet);
149
- })();
150
-
247
+
248
+ return Array.from(labelSet);
249
+ })();
250
+
151
251
  const projectJson = {
152
252
  projectId,
153
253
  projectName: config.projectName,
254
+ language: config.langCode,
154
255
  jiraProjectKey: config.jiraKey,
155
256
  confluenceLabels: labels,
156
257
  status: 'active',
157
258
  team: [],
158
259
  stakeholders: ['@企画', '@部長'],
159
260
  repository: repoUrl,
160
- description: `${config.projectName}の開発`
261
+ description: `${config.projectName}の開発`,
161
262
  };
162
-
263
+
163
264
  writeFileSync('.kiro/project.json', JSON.stringify(projectJson, null, 2));
164
265
  console.log(' ✅ project.json created');
165
-
166
- // Step 4: Michiから共通ルールをコピー
167
- console.log('\n📋 Step 4: Copying common rules from Michi...');
168
-
169
- // ディレクトリを事前に作成
170
- mkdirSync(join(projectDir, '.cursor/rules'), { recursive: true });
171
- mkdirSync(join(projectDir, '.cursor/commands/kiro'), { recursive: true });
172
-
173
- const rulesToCopy = [
174
- 'multi-project.mdc',
175
- 'github-ssot.mdc',
176
- 'atlassian-mcp.mdc'
177
- ];
178
-
179
- for (const rule of rulesToCopy) {
180
- const src = join(config.michiPath, '.cursor/rules', rule);
181
- const dest = join(projectDir, '.cursor/rules', rule);
182
- if (existsSync(src)) {
183
- cpSync(src, dest);
184
- console.log(` ✅ ${rule}`);
185
- } else {
186
- console.log(` ⚠️ ${rule} not found in Michi`);
266
+
267
+ // Step 4: 環境別テンプレートのコピーとレンダリング
268
+ console.log('\n📋 Step 4: Copying and rendering templates from Michi...');
269
+
270
+ const envConfig = getEnvironmentConfig(config.environment);
271
+ const templateContext = createTemplateContext(
272
+ config.langCode,
273
+ '.kiro',
274
+ envConfig.rulesDir.startsWith('.')
275
+ ? envConfig.rulesDir.substring(1, envConfig.rulesDir.indexOf('/', 1))
276
+ : envConfig.rulesDir.split('/')[0],
277
+ );
278
+
279
+ // テンプレートソースディレクトリ
280
+ const templateSourceDir = join(
281
+ config.michiPath,
282
+ 'templates',
283
+ envConfig.templateSource,
284
+ );
285
+
286
+ if (!existsSync(templateSourceDir)) {
287
+ console.log(` ⚠️ Template source not found: ${templateSourceDir}`);
288
+ console.log(' Skipping template copy');
289
+ } else {
290
+ // rulesディレクトリのコピーとレンダリング(環境別にテンプレートディレクトリ名が異なる)
291
+ // cursor/claude: 'rules', claude-agent: 'agents'
292
+ const templateDirName =
293
+ config.environment === 'claude-agent' ? 'agents' : 'rules';
294
+ const rulesTemplateDir = join(templateSourceDir, templateDirName);
295
+ const rulesDestDir = join(projectDir, envConfig.rulesDir);
296
+
297
+ if (existsSync(rulesTemplateDir)) {
298
+ mkdirSync(rulesDestDir, { recursive: true });
299
+ copyAndRenderTemplates(rulesTemplateDir, rulesDestDir, templateContext);
300
+ console.log(` ✅ Rules copied and rendered to ${envConfig.rulesDir}`);
187
301
  }
188
- }
189
-
190
- // Step 5: カスタムコマンドをコピー
191
- console.log('\n🔧 Step 5: Copying custom commands...');
192
-
193
- const commandsToCopy = [
194
- 'confluence-sync.md',
195
- 'project-switch.md'
196
- ];
197
-
198
- for (const cmd of commandsToCopy) {
199
- const src = join(config.michiPath, '.cursor/commands/kiro', cmd);
200
- const dest = join(projectDir, '.cursor/commands/kiro', cmd);
201
- if (existsSync(src)) {
202
- cpSync(src, dest);
203
- console.log(` ✅ ${cmd}`);
302
+
303
+ // commandsディレクトリのコピーとレンダリング
304
+ const commandsTemplateDir = join(templateSourceDir, 'commands');
305
+ const commandsDestDir = join(projectDir, envConfig.commandsDir);
306
+
307
+ if (existsSync(commandsTemplateDir)) {
308
+ mkdirSync(commandsDestDir, { recursive: true });
309
+ copyAndRenderTemplates(
310
+ commandsTemplateDir,
311
+ commandsDestDir,
312
+ templateContext,
313
+ );
314
+ console.log(
315
+ ` ✅ Commands copied and rendered to ${envConfig.commandsDir}`,
316
+ );
204
317
  }
205
318
  }
206
-
207
- // Step 6: Steeringテンプレートをコピー
208
- console.log('\n📚 Step 6: Copying steering templates...');
209
-
319
+
320
+ // Step 5: Steeringテンプレートをコピー
321
+ console.log('\n📚 Step 5: Copying steering templates...');
322
+
210
323
  const steeringDir = join(config.michiPath, '.kiro/steering');
211
324
  if (existsSync(steeringDir)) {
212
- cpSync(steeringDir, join(projectDir, '.kiro/steering'), { recursive: true });
325
+ cpSync(steeringDir, join(projectDir, '.kiro/steering'), {
326
+ recursive: true,
327
+ });
213
328
  console.log(' ✅ product.md, tech.md, structure.md');
214
329
  }
215
-
216
- // Step 7: テンプレートをコピー
217
- console.log('\n📄 Step 7: Copying spec templates...');
218
-
330
+
331
+ // Step 6: テンプレートをコピー
332
+ console.log('\n📄 Step 6: Copying spec templates...');
333
+
219
334
  const templatesDir = join(config.michiPath, '.kiro/settings/templates');
220
335
  if (existsSync(templatesDir)) {
221
- cpSync(templatesDir, join(projectDir, '.kiro/settings/templates'), { recursive: true });
336
+ cpSync(templatesDir, join(projectDir, '.kiro/settings/templates'), {
337
+ recursive: true,
338
+ });
222
339
  console.log(' ✅ requirements.md, design.md, tasks.md');
223
340
  }
224
-
225
- // Step 8: CLIツールのセットアップ案内
226
- console.log('\n⚙️ Step 8: Setting up Michi CLI...');
341
+
342
+ // Step 6.1: kiro-spec-tasksテンプレートを上書き(cc-sddのAI-DLC形式をMichiワークフロー形式に置換)
343
+ console.log('\n📋 Step 6.1: Overriding kiro-spec-tasks template...');
344
+ const kiroSpecTasksSource = join(
345
+ config.michiPath,
346
+ 'templates',
347
+ envConfig.templateSource,
348
+ 'commands',
349
+ 'kiro',
350
+ 'kiro-spec-tasks.md',
351
+ );
352
+ const kiroSpecTasksDest = join(projectDir, '.kiro', 'commands', 'kiro');
353
+
354
+ if (existsSync(kiroSpecTasksSource)) {
355
+ mkdirSync(kiroSpecTasksDest, { recursive: true });
356
+ cpSync(
357
+ kiroSpecTasksSource,
358
+ join(kiroSpecTasksDest, 'kiro-spec-tasks.md'),
359
+ );
360
+ console.log(
361
+ ' ✅ kiro-spec-tasks.md overridden with Michi workflow format',
362
+ );
363
+ console.log(
364
+ ' (This ensures /kiro:spec-tasks generates Phase-based tasks.md)',
365
+ );
366
+ } else {
367
+ console.log(
368
+ ` ⚠️ kiro-spec-tasks template not found: ${kiroSpecTasksSource}`,
369
+ );
370
+ console.log(' (cc-sdd default template will be used)');
371
+ }
372
+
373
+ // Step 7: CLIツールのセットアップ案内
374
+ console.log('\n⚙️ Step 7: Setting up Michi CLI...');
227
375
  console.log(' ✅ Michi CLI setup complete!');
228
376
  console.log('');
229
377
  console.log(' 📋 使用方法:');
230
378
  console.log(' npx @sk8metal/michi-cli jira:sync <feature>');
231
- console.log(' npx @sk8metal/michi-cli confluence:sync <feature> requirements');
379
+ console.log(
380
+ ' npx @sk8metal/michi-cli confluence:sync <feature> requirements',
381
+ );
232
382
  console.log(' npx @sk8metal/michi-cli phase:run <feature> tasks');
233
383
  console.log('');
234
384
  console.log(' または、グローバルインストール:');
235
385
  console.log(' npm install -g @sk8metal/michi-cli');
236
386
  console.log(' michi jira:sync <feature>');
237
-
238
- // Step 9: package.json と tsconfig.json をリポジトリルートにコピー
239
- console.log('\n📦 Step 9: Setting up package.json and TypeScript...');
240
-
387
+
388
+ // Step 8: package.json と tsconfig.json をリポジトリルートにコピー
389
+ console.log('\n📦 Step 8: Setting up package.json and TypeScript...');
390
+
241
391
  // 既存の package.json があるかチェック(リポジトリルート)
242
392
  const hasPackageJson = existsSync(join(repoRoot, 'package.json'));
243
-
393
+
244
394
  if (!hasPackageJson) {
245
- // package.json がない場合はリポジトリルートにコピー
395
+ // package.json がない場合はリポジトリルートにコピー
246
396
  const src = join(config.michiPath, 'package.json');
247
397
  const dest = join(repoRoot, 'package.json');
248
398
  if (existsSync(src)) {
@@ -250,23 +400,33 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
250
400
  console.log(' ✅ package.json created (in repository root)');
251
401
  }
252
402
  } else {
253
- // 既存の package.json にスクリプトを追加
403
+ // 既存の package.json にスクリプトを追加
254
404
  console.log(' ℹ️ Existing package.json found');
255
405
  console.log(' 📝 手動で以下のスクリプトを追加してください:');
256
406
  console.log('');
257
407
  console.log(' "scripts": {');
258
408
  console.log(' "jira:sync": "npx @sk8metal/michi-cli jira:sync",');
259
- console.log(' "confluence:sync": "npx @sk8metal/michi-cli confluence:sync",');
409
+ console.log(
410
+ ' "confluence:sync": "npx @sk8metal/michi-cli confluence:sync",',
411
+ );
260
412
  console.log(' "phase:run": "npx @sk8metal/michi-cli phase:run",');
261
- console.log(' "validate:phase": "npx @sk8metal/michi-cli validate:phase",');
413
+ console.log(
414
+ ' "validate:phase": "npx @sk8metal/michi-cli validate:phase",',
415
+ );
262
416
  console.log(' "preflight": "npx @sk8metal/michi-cli preflight",');
263
- console.log(' "project:list": "npx @sk8metal/michi-cli project:list",');
264
- console.log(' "project:dashboard": "npx @sk8metal/michi-cli project:dashboard",');
265
- console.log(' "workflow:run": "npx @sk8metal/michi-cli workflow:run"');
417
+ console.log(
418
+ ' "project:list": "npx @sk8metal/michi-cli project:list",',
419
+ );
420
+ console.log(
421
+ ' "project:dashboard": "npx @sk8metal/michi-cli project:dashboard",',
422
+ );
423
+ console.log(
424
+ ' "workflow:run": "npx @sk8metal/michi-cli workflow:run"',
425
+ );
266
426
  console.log(' }');
267
427
  console.log('');
268
428
  }
269
-
429
+
270
430
  // tsconfig.json をリポジトリルートにコピー
271
431
  if (!existsSync(join(repoRoot, 'tsconfig.json'))) {
272
432
  const src = join(config.michiPath, 'tsconfig.json');
@@ -278,10 +438,10 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
278
438
  } else {
279
439
  console.log(' ℹ️ Existing tsconfig.json found (kept)');
280
440
  }
281
-
282
- // Step 10: .env テンプレート作成(プロジェクトディレクトリに)
283
- console.log('\n🔐 Step 10: Creating .env template...');
284
-
441
+
442
+ // Step 9: .env テンプレート作成(プロジェクトディレクトリに)
443
+ console.log('\n🔐 Step 9: Creating .env template...');
444
+
285
445
  const envTemplate = `# Atlassian設定(MCP + REST API共通)
286
446
  ATLASSIAN_URL=https://your-domain.atlassian.net
287
447
  ATLASSIAN_EMAIL=your-email@company.com
@@ -300,21 +460,21 @@ CONFLUENCE_RELEASE_SPACE=RELEASE
300
460
  # JIRAプロジェクトキー
301
461
  JIRA_PROJECT_KEYS=${config.jiraKey}
302
462
  `;
303
-
463
+
304
464
  if (!existsSync(join(projectDir, '.env'))) {
305
465
  writeFileSync(join(projectDir, '.env'), envTemplate);
306
466
  console.log(' ✅ .env template created');
307
467
  } else {
308
468
  console.log(' ℹ️ .env already exists (kept)');
309
469
  }
310
-
311
- // Step 11: README.md を更新(オプション、プロジェクトディレクトリに)
312
- console.log('\n📖 Step 11: Updating documentation...');
313
-
470
+
471
+ // Step 10: README.md を更新(オプション、プロジェクトディレクトリに)
472
+ console.log('\n📖 Step 10: Updating documentation...');
473
+
314
474
  const readmePath = join(projectDir, 'README.md');
315
475
  if (existsSync(readmePath)) {
316
476
  const currentReadme = readFileSync(readmePath, 'utf-8');
317
-
477
+
318
478
  // Michiワークフロー情報を追加
319
479
  const workflowSection = `
320
480
 
@@ -342,7 +502,7 @@ npm run github:create-pr <branch> # PR作成
342
502
 
343
503
  詳細: [Michi Documentation](https://github.com/sk8metalme/michi)
344
504
  `;
345
-
505
+
346
506
  if (!currentReadme.includes('AI開発ワークフロー')) {
347
507
  writeFileSync(readmePath, currentReadme + workflowSection);
348
508
  console.log(' ✅ README.md updated');
@@ -350,25 +510,25 @@ npm run github:create-pr <branch> # PR作成
350
510
  console.log(' ℹ️ README.md already has workflow section');
351
511
  }
352
512
  }
353
-
354
- // Step 12: .gitignore 更新(リポジトリルートに)
355
- console.log('\n🚫 Step 12: Updating .gitignore...');
356
-
513
+
514
+ // Step 11: .gitignore 更新(リポジトリルートに)
515
+ console.log('\n🚫 Step 11: Updating .gitignore...');
516
+
357
517
  const gitignoreEntries = [
358
518
  '# AI Development Workflow',
359
519
  'node_modules/',
360
520
  '.env',
361
521
  '.env.local',
362
522
  'dist/',
363
- '*.log'
523
+ '*.log',
364
524
  ];
365
-
525
+
366
526
  const gitignorePath = join(repoRoot, '.gitignore');
367
527
  let gitignore = '';
368
528
  if (existsSync(gitignorePath)) {
369
529
  gitignore = readFileSync(gitignorePath, 'utf-8');
370
530
  }
371
-
531
+
372
532
  let updated = false;
373
533
  for (const entry of gitignoreEntries) {
374
534
  if (!gitignore.includes(entry)) {
@@ -376,14 +536,14 @@ npm run github:create-pr <branch> # PR作成
376
536
  updated = true;
377
537
  }
378
538
  }
379
-
539
+
380
540
  if (updated) {
381
541
  writeFileSync(gitignorePath, gitignore);
382
542
  console.log(' ✅ .gitignore updated (in repository root)');
383
543
  } else {
384
544
  console.log(' ℹ️ .gitignore already up to date');
385
545
  }
386
-
546
+
387
547
  // 完了メッセージ
388
548
  console.log('\n');
389
549
  console.log('🎉 セットアップ完了!');
@@ -392,21 +552,25 @@ npm run github:create-pr <branch> # PR作成
392
552
  console.log(` 1. cd ${projectDir}`);
393
553
  console.log(' 2. .env ファイルを編集して認証情報を設定');
394
554
  console.log(' 3. package.json が既存の場合、スクリプトを手動追加');
395
- console.log(' 4. npm install で依存関係をインストール(リポジトリルートで実行)');
396
- console.log(' 5. jj commit でセットアップをコミット');
397
- console.log(' 6. Cursor で開く: cursor .');
398
- console.log(' 7. /kiro:spec-init <機能説明> で開発開始');
555
+ console.log(
556
+ ' 4. npm install で依存関係をインストール(リポジトリルートで実行)',
557
+ );
558
+ console.log(
559
+ ` 5. cc-sddを導入: npx cc-sdd@latest --lang ${config.langCode} --${config.environment}`,
560
+ );
561
+ console.log(' 6. jj commit でセットアップをコミット');
562
+ console.log(' 7. Cursor で開く: cursor .');
563
+ console.log(' 8. /kiro:spec-init <機能説明> で開発開始');
399
564
  console.log('');
400
565
  console.log('作成されたファイル:');
401
566
  console.log(` - ${projectDir}/.kiro/project.json`);
402
- console.log(` - ${projectDir}/.cursor/rules/ (3ファイル)`);
403
- console.log(` - ${projectDir}/.cursor/commands/kiro/ (2ファイル)`);
567
+ console.log(` - ${projectDir}/${envConfig.rulesDir}/`);
568
+ console.log(` - ${projectDir}/${envConfig.commandsDir}/`);
404
569
  console.log(` - ${projectDir}/.kiro/steering/ (3ファイル)`);
405
570
  console.log(` - ${projectDir}/.kiro/settings/templates/ (3ファイル)`);
406
571
  console.log(` - ${repoRoot}/package.json (新規の場合)`);
407
572
  console.log(` - ${repoRoot}/tsconfig.json (新規の場合)`);
408
573
  console.log(` - ${projectDir}/.env (テンプレート)`);
409
-
410
574
  } finally {
411
575
  // 元の作業ディレクトリに戻る
412
576
  process.chdir(originalCwd);
@@ -415,8 +579,7 @@ npm run github:create-pr <branch> # PR作成
415
579
 
416
580
  // 実行
417
581
  const config = parseArgs();
418
- setupExistingProject(config).catch(error => {
582
+ setupExistingProject(config).catch((error) => {
419
583
  console.error('❌ Error:', error.message);
420
584
  process.exit(1);
421
585
  });
422
-