@sk8metal/michi-cli 0.0.9 → 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 (371) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +235 -57
  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 +79 -0
  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.js +39 -5
  36. package/dist/scripts/constants/__tests__/environments.test.js.map +1 -1
  37. package/dist/scripts/constants/environments.d.ts +1 -1
  38. package/dist/scripts/constants/environments.d.ts.map +1 -1
  39. package/dist/scripts/constants/environments.js +22 -7
  40. package/dist/scripts/constants/environments.js.map +1 -1
  41. package/dist/scripts/constants/test-commands.d.ts +36 -0
  42. package/dist/scripts/constants/test-commands.d.ts.map +1 -0
  43. package/dist/scripts/constants/test-commands.js +70 -0
  44. package/dist/scripts/constants/test-commands.js.map +1 -0
  45. package/dist/scripts/jira-sync.d.ts +89 -3
  46. package/dist/scripts/jira-sync.d.ts.map +1 -1
  47. package/dist/scripts/jira-sync.js +366 -96
  48. package/dist/scripts/jira-sync.js.map +1 -1
  49. package/dist/scripts/markdown-to-confluence.js +1 -1
  50. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  51. package/dist/scripts/phase-runner.d.ts +1 -1
  52. package/dist/scripts/phase-runner.d.ts.map +1 -1
  53. package/dist/scripts/phase-runner.js +809 -13
  54. package/dist/scripts/phase-runner.js.map +1 -1
  55. package/dist/scripts/pr-automation.d.ts.map +1 -1
  56. package/dist/scripts/pr-automation.js.map +1 -1
  57. package/dist/scripts/pre-flight-check.js +1 -1
  58. package/dist/scripts/pre-flight-check.js.map +1 -1
  59. package/dist/scripts/setup-existing-project.js +61 -29
  60. package/dist/scripts/setup-existing-project.js.map +1 -1
  61. package/dist/scripts/setup-interactive.js +3 -3
  62. package/dist/scripts/setup-interactive.js.map +1 -1
  63. package/dist/scripts/spec-impl-workflow.d.ts +94 -0
  64. package/dist/scripts/spec-impl-workflow.d.ts.map +1 -0
  65. package/dist/scripts/spec-impl-workflow.js +354 -0
  66. package/dist/scripts/spec-impl-workflow.js.map +1 -0
  67. package/dist/scripts/template/__tests__/renderer.test.js.map +1 -1
  68. package/dist/scripts/test-execution-generator.d.ts +52 -0
  69. package/dist/scripts/test-execution-generator.d.ts.map +1 -0
  70. package/dist/scripts/test-execution-generator.js +576 -0
  71. package/dist/scripts/test-execution-generator.js.map +1 -0
  72. package/dist/scripts/test-interactive.d.ts +10 -0
  73. package/dist/scripts/test-interactive.d.ts.map +1 -0
  74. package/dist/scripts/test-interactive.js +627 -0
  75. package/dist/scripts/test-interactive.js.map +1 -0
  76. package/dist/scripts/test-new-features.d.ts +5 -0
  77. package/dist/scripts/test-new-features.d.ts.map +1 -0
  78. package/dist/scripts/test-new-features.js +145 -0
  79. package/dist/scripts/test-new-features.js.map +1 -0
  80. package/dist/scripts/test-spec-generator.d.ts +29 -0
  81. package/dist/scripts/test-spec-generator.d.ts.map +1 -0
  82. package/dist/scripts/test-spec-generator.js +494 -0
  83. package/dist/scripts/test-spec-generator.js.map +1 -0
  84. package/dist/scripts/test-workflow-stages.d.ts +6 -0
  85. package/dist/scripts/test-workflow-stages.d.ts.map +1 -0
  86. package/dist/scripts/test-workflow-stages.js +43 -0
  87. package/dist/scripts/test-workflow-stages.js.map +1 -0
  88. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts +5 -0
  89. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts.map +1 -0
  90. package/dist/scripts/utils/__tests__/aidlc-parser.test.js +315 -0
  91. package/dist/scripts/utils/__tests__/aidlc-parser.test.js.map +1 -0
  92. package/dist/scripts/utils/__tests__/business-days.test.d.ts +5 -0
  93. package/dist/scripts/utils/__tests__/business-days.test.d.ts.map +1 -0
  94. package/dist/scripts/utils/__tests__/business-days.test.js +171 -0
  95. package/dist/scripts/utils/__tests__/business-days.test.js.map +1 -0
  96. package/dist/scripts/utils/__tests__/config-loader.test.js +1 -1
  97. package/dist/scripts/utils/__tests__/config-loader.test.js.map +1 -1
  98. package/dist/scripts/utils/__tests__/config-validator.test.js +164 -35
  99. package/dist/scripts/utils/__tests__/config-validator.test.js.map +1 -1
  100. package/dist/scripts/utils/__tests__/env-config.test.d.ts +5 -0
  101. package/dist/scripts/utils/__tests__/env-config.test.d.ts.map +1 -0
  102. package/dist/scripts/utils/__tests__/env-config.test.js +218 -0
  103. package/dist/scripts/utils/__tests__/env-config.test.js.map +1 -0
  104. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts +5 -0
  105. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts.map +1 -0
  106. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js +202 -0
  107. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js.map +1 -0
  108. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts +5 -0
  109. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts.map +1 -0
  110. package/dist/scripts/utils/__tests__/tasks-converter.test.js +500 -0
  111. package/dist/scripts/utils/__tests__/tasks-converter.test.js.map +1 -0
  112. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts +5 -0
  113. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts.map +1 -0
  114. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js +314 -0
  115. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js.map +1 -0
  116. package/dist/scripts/utils/__tests__/test-runner.test.d.ts +5 -0
  117. package/dist/scripts/utils/__tests__/test-runner.test.d.ts.map +1 -0
  118. package/dist/scripts/utils/__tests__/test-runner.test.js +64 -0
  119. package/dist/scripts/utils/__tests__/test-runner.test.js.map +1 -0
  120. package/dist/scripts/utils/aidlc-parser.d.ts +86 -0
  121. package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -0
  122. package/dist/scripts/utils/aidlc-parser.js +208 -0
  123. package/dist/scripts/utils/aidlc-parser.js.map +1 -0
  124. package/dist/scripts/utils/business-days.d.ts +52 -0
  125. package/dist/scripts/utils/business-days.d.ts.map +1 -0
  126. package/dist/scripts/utils/business-days.js +98 -0
  127. package/dist/scripts/utils/business-days.js.map +1 -0
  128. package/dist/scripts/utils/ci-generator.d.ts +14 -0
  129. package/dist/scripts/utils/ci-generator.d.ts.map +1 -0
  130. package/dist/scripts/utils/ci-generator.js +61 -0
  131. package/dist/scripts/utils/ci-generator.js.map +1 -0
  132. package/dist/scripts/utils/config-loader.js +2 -2
  133. package/dist/scripts/utils/config-loader.js.map +1 -1
  134. package/dist/scripts/utils/config-validator.d.ts +7 -1
  135. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  136. package/dist/scripts/utils/config-validator.js +136 -23
  137. package/dist/scripts/utils/config-validator.js.map +1 -1
  138. package/dist/scripts/utils/confluence-approval.d.ts +46 -0
  139. package/dist/scripts/utils/confluence-approval.d.ts.map +1 -0
  140. package/dist/scripts/utils/confluence-approval.js +118 -0
  141. package/dist/scripts/utils/confluence-approval.js.map +1 -0
  142. package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -1
  143. package/dist/scripts/utils/confluence-hierarchy.js +1 -1
  144. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
  145. package/dist/scripts/utils/docker-generator.d.ts +9 -0
  146. package/dist/scripts/utils/docker-generator.d.ts.map +1 -0
  147. package/dist/scripts/utils/docker-generator.js +132 -0
  148. package/dist/scripts/utils/docker-generator.js.map +1 -0
  149. package/dist/scripts/utils/docker-requirement-detector.d.ts +15 -0
  150. package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -0
  151. package/dist/scripts/utils/docker-requirement-detector.js +124 -0
  152. package/dist/scripts/utils/docker-requirement-detector.js.map +1 -0
  153. package/dist/scripts/utils/env-config.d.ts +54 -0
  154. package/dist/scripts/utils/env-config.d.ts.map +1 -0
  155. package/dist/scripts/utils/env-config.js +414 -0
  156. package/dist/scripts/utils/env-config.js.map +1 -0
  157. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts +70 -0
  158. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts.map +1 -0
  159. package/dist/scripts/utils/jira-issue-type-fetcher.js +147 -0
  160. package/dist/scripts/utils/jira-issue-type-fetcher.js.map +1 -0
  161. package/dist/scripts/utils/language-detector.d.ts +14 -0
  162. package/dist/scripts/utils/language-detector.d.ts.map +1 -0
  163. package/dist/scripts/utils/language-detector.js +119 -0
  164. package/dist/scripts/utils/language-detector.js.map +1 -0
  165. package/dist/scripts/utils/markdown-parser.d.ts +55 -0
  166. package/dist/scripts/utils/markdown-parser.d.ts.map +1 -0
  167. package/dist/scripts/utils/markdown-parser.js +289 -0
  168. package/dist/scripts/utils/markdown-parser.js.map +1 -0
  169. package/dist/scripts/utils/project-detector.d.ts +17 -0
  170. package/dist/scripts/utils/project-detector.d.ts.map +1 -0
  171. package/dist/scripts/utils/project-detector.js +166 -0
  172. package/dist/scripts/utils/project-detector.js.map +1 -0
  173. package/dist/scripts/utils/project-finder.js +2 -2
  174. package/dist/scripts/utils/project-finder.js.map +1 -1
  175. package/dist/scripts/utils/release-notes-generator.d.ts +56 -0
  176. package/dist/scripts/utils/release-notes-generator.d.ts.map +1 -0
  177. package/dist/scripts/utils/release-notes-generator.js +162 -0
  178. package/dist/scripts/utils/release-notes-generator.js.map +1 -0
  179. package/dist/scripts/utils/spec-loader.d.ts +79 -0
  180. package/dist/scripts/utils/spec-loader.d.ts.map +1 -0
  181. package/dist/scripts/utils/spec-loader.js +80 -0
  182. package/dist/scripts/utils/spec-loader.js.map +1 -0
  183. package/dist/scripts/utils/spec-updater.d.ts +7 -0
  184. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  185. package/dist/scripts/utils/spec-updater.js.map +1 -1
  186. package/dist/scripts/utils/tasks-converter.d.ts +57 -0
  187. package/dist/scripts/utils/tasks-converter.d.ts.map +1 -0
  188. package/dist/scripts/utils/tasks-converter.js +322 -0
  189. package/dist/scripts/utils/tasks-converter.js.map +1 -0
  190. package/dist/scripts/utils/tasks-format-validator.d.ts +36 -0
  191. package/dist/scripts/utils/tasks-format-validator.d.ts.map +1 -0
  192. package/dist/scripts/utils/tasks-format-validator.js +158 -0
  193. package/dist/scripts/utils/tasks-format-validator.js.map +1 -0
  194. package/dist/scripts/utils/template-applier.d.ts +37 -0
  195. package/dist/scripts/utils/template-applier.d.ts.map +1 -0
  196. package/dist/scripts/utils/template-applier.js +129 -0
  197. package/dist/scripts/utils/template-applier.js.map +1 -0
  198. package/dist/scripts/utils/test-config-generator.d.ts +12 -0
  199. package/dist/scripts/utils/test-config-generator.d.ts.map +1 -0
  200. package/dist/scripts/utils/test-config-generator.js +185 -0
  201. package/dist/scripts/utils/test-config-generator.js.map +1 -0
  202. package/dist/scripts/utils/test-runner.d.ts +31 -0
  203. package/dist/scripts/utils/test-runner.d.ts.map +1 -0
  204. package/dist/scripts/utils/test-runner.js +103 -0
  205. package/dist/scripts/utils/test-runner.js.map +1 -0
  206. package/dist/scripts/validate-phase.d.ts +1 -1
  207. package/dist/scripts/validate-phase.d.ts.map +1 -1
  208. package/dist/scripts/validate-phase.js +153 -5
  209. package/dist/scripts/validate-phase.js.map +1 -1
  210. package/dist/scripts/workflow-orchestrator.d.ts +8 -0
  211. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
  212. package/dist/scripts/workflow-orchestrator.js +108 -7
  213. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  214. package/dist/src/__tests__/integration/internationalization.test.d.ts +8 -0
  215. package/dist/src/__tests__/integration/internationalization.test.d.ts.map +1 -0
  216. package/dist/src/__tests__/integration/internationalization.test.js +333 -0
  217. package/dist/src/__tests__/integration/internationalization.test.js.map +1 -0
  218. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +1 -1
  219. package/dist/src/__tests__/integration/setup/claude-agent.test.js +17 -20
  220. package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +1 -1
  221. package/dist/src/__tests__/integration/setup/cursor.test.js +23 -19
  222. package/dist/src/__tests__/integration/setup/cursor.test.js.map +1 -1
  223. package/dist/src/__tests__/integration/setup/validation.test.js +41 -58
  224. package/dist/src/__tests__/integration/setup/validation.test.js.map +1 -1
  225. package/dist/src/cli.d.ts.map +1 -1
  226. package/dist/src/cli.js +208 -18
  227. package/dist/src/cli.js.map +1 -1
  228. package/dist/src/commands/setup-existing.d.ts +3 -0
  229. package/dist/src/commands/setup-existing.d.ts.map +1 -1
  230. package/dist/src/commands/setup-existing.js +334 -47
  231. package/dist/src/commands/setup-existing.js.map +1 -1
  232. package/docs/README.md +3 -1
  233. package/docs/context.md +59 -0
  234. package/docs/design-issue-55.md +240 -0
  235. package/docs/design-issue-56.md +181 -0
  236. package/docs/michi-development/testing/manual-verification-flow.md +2242 -0
  237. package/docs/michi-development/testing/pre-publish-checklist.md +560 -0
  238. package/docs/plan.md +275 -0
  239. package/docs/user-guide/getting-started/github-token-setup.md +509 -0
  240. package/docs/{getting-started → user-guide/getting-started}/quick-start.md +16 -0
  241. package/docs/{getting-started → user-guide/getting-started}/setup.md +28 -1
  242. package/docs/user-guide/guides/internationalization.md +540 -0
  243. package/docs/{guides → user-guide/guides}/multi-project.md +1 -1
  244. package/docs/{guides → user-guide/guides}/phase-automation.md +67 -9
  245. package/docs/user-guide/guides/workflow.md +582 -0
  246. package/docs/user-guide/hands-on/README.md +142 -0
  247. package/docs/user-guide/hands-on/claude-agent-setup.md +455 -0
  248. package/docs/user-guide/hands-on/claude-setup.md +398 -0
  249. package/docs/user-guide/hands-on/cursor-setup.md +352 -0
  250. package/docs/user-guide/hands-on/troubleshooting.md +964 -0
  251. package/docs/user-guide/hands-on/verification-checklist.md +438 -0
  252. package/docs/user-guide/hands-on/workflow-walkthrough.md +906 -0
  253. package/docs/user-guide/reference/config.md +564 -0
  254. package/docs/{reference → user-guide/reference}/quick-reference.md +53 -40
  255. package/docs/user-guide/release/ci-setup.md +541 -0
  256. package/docs/user-guide/release/release-flow.md +476 -0
  257. package/docs/user-guide/templates/test-specs/README.md +173 -0
  258. package/docs/user-guide/templates/test-specs/e2e-test-spec-template.md +547 -0
  259. package/docs/user-guide/templates/test-specs/integration-test-spec-template.md +435 -0
  260. package/docs/user-guide/templates/test-specs/performance-test-spec-template.md +454 -0
  261. package/docs/user-guide/templates/test-specs/security-test-spec-template.md +664 -0
  262. package/docs/user-guide/templates/test-specs/unit-test-spec-template.md +328 -0
  263. package/docs/{testing → user-guide/testing}/integration-tests.md +24 -9
  264. package/docs/user-guide/testing/tdd-cycle.md +349 -0
  265. package/docs/user-guide/testing/test-execution-flow.md +396 -0
  266. package/docs/user-guide/testing/test-failure-handling.md +521 -0
  267. package/docs/user-guide/testing/test-planning-flow.md +181 -0
  268. package/docs/user-guide/testing-strategy.md +185 -0
  269. package/docs/verification-guide.md +518 -0
  270. package/package.json +7 -2
  271. package/scripts/__tests__/create-project.test.ts +67 -49
  272. package/scripts/__tests__/jira-transitions.test.ts +225 -0
  273. package/scripts/__tests__/multi-project-estimate.test.ts +36 -30
  274. package/scripts/__tests__/setup-existing-project.test.ts +98 -1
  275. package/scripts/__tests__/setup-interactive.test.ts +52 -46
  276. package/scripts/__tests__/spec-impl-workflow.test.ts +429 -0
  277. package/scripts/__tests__/spec-loader.test.ts +199 -0
  278. package/scripts/__tests__/validate-phase.test.ts +78 -54
  279. package/scripts/config/config-schema.ts +89 -50
  280. package/scripts/config-interactive.ts +191 -136
  281. package/scripts/confluence-sync.ts +0 -12
  282. package/scripts/constants/__tests__/environments.test.ts +42 -6
  283. package/scripts/constants/environments.ts +33 -13
  284. package/scripts/constants/test-commands.ts +96 -0
  285. package/scripts/jira-sync.ts +767 -232
  286. package/scripts/markdown-to-confluence.ts +1 -1
  287. package/scripts/phase-runner.ts +1056 -63
  288. package/scripts/pr-automation.ts +0 -1
  289. package/scripts/pre-flight-check.ts +1 -1
  290. package/scripts/pre-publish-check.sh +311 -0
  291. package/scripts/quick-verify.sh +115 -0
  292. package/scripts/setup-existing-project.ts +201 -117
  293. package/scripts/setup-interactive.ts +4 -4
  294. package/scripts/spec-impl-workflow.ts +505 -0
  295. package/scripts/template/__tests__/renderer.test.ts +1 -2
  296. package/scripts/test-execution-generator.ts +695 -0
  297. package/scripts/test-interactive.ts +779 -0
  298. package/scripts/test-new-features.ts +168 -0
  299. package/scripts/test-npm-package.sh +345 -0
  300. package/scripts/test-spec-generator.ts +574 -0
  301. package/scripts/test-workflow-stages.ts +53 -0
  302. package/scripts/utils/__tests__/aidlc-parser.test.ts +349 -0
  303. package/scripts/utils/__tests__/business-days.test.ts +214 -0
  304. package/scripts/utils/__tests__/config-loader.test.ts +1 -1
  305. package/scripts/utils/__tests__/config-validator.test.ts +309 -88
  306. package/scripts/utils/__tests__/env-config.test.ts +259 -0
  307. package/scripts/utils/__tests__/jira-issue-type-fetcher.test.ts +272 -0
  308. package/scripts/utils/__tests__/tasks-converter.test.ts +582 -0
  309. package/scripts/utils/__tests__/tasks-format-validator.test.ts +338 -0
  310. package/scripts/utils/__tests__/test-runner.test.ts +77 -0
  311. package/scripts/utils/aidlc-parser.ts +289 -0
  312. package/scripts/utils/business-days.ts +115 -0
  313. package/scripts/utils/ci-generator.ts +84 -0
  314. package/scripts/utils/config-loader.ts +2 -2
  315. package/scripts/utils/config-validator.ts +304 -117
  316. package/scripts/utils/confluence-approval.ts +167 -0
  317. package/scripts/utils/confluence-hierarchy.ts +2 -4
  318. package/scripts/utils/docker-generator.ts +151 -0
  319. package/scripts/utils/docker-requirement-detector.ts +153 -0
  320. package/scripts/utils/env-config.ts +526 -0
  321. package/scripts/utils/jira-issue-type-fetcher.ts +199 -0
  322. package/scripts/utils/language-detector.ts +139 -0
  323. package/scripts/utils/markdown-parser.ts +376 -0
  324. package/scripts/utils/project-detector.ts +192 -0
  325. package/scripts/utils/project-finder.ts +2 -2
  326. package/scripts/utils/release-notes-generator.ts +210 -0
  327. package/scripts/utils/spec-loader.ts +125 -0
  328. package/scripts/utils/spec-updater.ts +8 -1
  329. package/scripts/utils/tasks-converter.ts +601 -0
  330. package/scripts/utils/tasks-format-validator.ts +193 -0
  331. package/scripts/utils/template-applier.ts +202 -0
  332. package/scripts/utils/test-config-generator.ts +210 -0
  333. package/scripts/utils/test-runner.ts +133 -0
  334. package/scripts/validate-phase.ts +186 -9
  335. package/scripts/workflow-orchestrator.ts +130 -12
  336. package/templates/ci/github-actions/java.yml +54 -0
  337. package/templates/ci/github-actions/nodejs.yml +46 -0
  338. package/templates/ci/github-actions/php.yml +52 -0
  339. package/templates/ci/screwdriver/java.yaml +17 -0
  340. package/templates/ci/screwdriver/nodejs.yaml +17 -0
  341. package/templates/ci/screwdriver/php.yaml +20 -0
  342. package/templates/claude/commands/kiro/kiro-spec-impl.md +244 -0
  343. package/templates/claude/commands/kiro/kiro-spec-tasks.md +354 -0
  344. package/templates/claude-agent/README.md +7 -1
  345. package/templates/claude-agent/agents/.gitkeep +0 -0
  346. package/templates/claude-agent/agents/designer.md +79 -0
  347. package/templates/claude-agent/agents/developer.md +68 -0
  348. package/templates/claude-agent/agents/manager-agent.md +59 -0
  349. package/templates/claude-agent/agents/tester.md +101 -0
  350. package/templates/claude-agent/commands/kiro/.gitkeep +0 -0
  351. package/templates/claude-agent/commands/kiro/kiro-spec-impl.md +244 -0
  352. package/templates/claude-agent/commands/kiro/kiro-spec-tasks.md +354 -0
  353. package/templates/cline/rules/atlassian-integration.md +36 -0
  354. package/templates/cline/rules/michi-core.md +56 -0
  355. package/templates/codex/AGENTS.override.md +277 -0
  356. package/templates/codex/prompts/confluence-sync.md +177 -0
  357. package/templates/codex/rules/README.md +210 -0
  358. package/templates/common/.kiro/project.json.template +21 -0
  359. package/templates/cursor/commands/kiro/kiro-spec-impl.md +244 -0
  360. package/templates/cursor/commands/kiro/kiro-spec-tasks.md +354 -0
  361. package/templates/gemini/commands/README.md +41 -0
  362. package/templates/gemini/rules/GEMINI.md +80 -0
  363. package/docs/guides/workflow.md +0 -342
  364. package/docs/reference/config.md +0 -545
  365. package/scripts/setup-existing.sh +0 -279
  366. /package/docs/{contributing → michi-development/contributing}/development.md +0 -0
  367. /package/docs/{contributing → michi-development/contributing}/release.md +0 -0
  368. /package/docs/{testing-strategy.md → michi-development/testing-strategy.md} +0 -0
  369. /package/docs/{getting-started → user-guide/getting-started}/new-repository-setup.md +0 -0
  370. /package/docs/{guides → user-guide/guides}/customization.md +0 -0
  371. /package/docs/{reference → user-guide/reference}/tasks-template.md +0 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * プロジェクト検出ユーティリティ
3
+ * 既存ファイルからプロジェクト情報を自動検出
4
+ */
5
+
6
+ import { existsSync, readFileSync } from 'fs';
7
+
8
+ export interface ProjectInfo {
9
+ language: 'nodejs' | 'java' | 'php' | 'python' | 'go' | 'rust' | 'other';
10
+ buildTool: string;
11
+ testFramework?: string;
12
+ hasCI: boolean;
13
+ hasDependencies: boolean;
14
+ packageManager?: string;
15
+ }
16
+
17
+ /**
18
+ * プロジェクト情報を自動検出
19
+ */
20
+ export function detectProject(projectRoot: string = process.cwd()): ProjectInfo {
21
+ // Node.js/TypeScript
22
+ if (existsSync(`${projectRoot}/package.json`)) {
23
+ return detectNodeJsProject(projectRoot);
24
+ }
25
+
26
+ // Java
27
+ if (existsSync(`${projectRoot}/build.gradle`) || existsSync(`${projectRoot}/build.gradle.kts`)) {
28
+ return detectJavaProject(projectRoot, 'gradle');
29
+ }
30
+
31
+ if (existsSync(`${projectRoot}/pom.xml`)) {
32
+ return detectJavaProject(projectRoot, 'maven');
33
+ }
34
+
35
+ // PHP
36
+ if (existsSync(`${projectRoot}/composer.json`)) {
37
+ return detectPHPProject(projectRoot);
38
+ }
39
+
40
+ // Python
41
+ if (existsSync(`${projectRoot}/requirements.txt`) ||
42
+ existsSync(`${projectRoot}/pyproject.toml`) ||
43
+ existsSync(`${projectRoot}/setup.py`)) {
44
+ return detectPythonProject(projectRoot);
45
+ }
46
+
47
+ // Go
48
+ if (existsSync(`${projectRoot}/go.mod`)) {
49
+ return detectGoProject(projectRoot);
50
+ }
51
+
52
+ // Rust
53
+ if (existsSync(`${projectRoot}/Cargo.toml`)) {
54
+ return detectRustProject(projectRoot);
55
+ }
56
+
57
+ // 検出できない場合
58
+ return {
59
+ language: 'other',
60
+ buildTool: 'unknown',
61
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
62
+ hasDependencies: false
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Node.jsプロジェクトを検出
68
+ */
69
+ function detectNodeJsProject(projectRoot: string): ProjectInfo {
70
+ const packageJson = JSON.parse(readFileSync(`${projectRoot}/package.json`, 'utf-8'));
71
+
72
+ // パッケージマネージャーを検出
73
+ let packageManager = 'npm';
74
+ if (existsSync(`${projectRoot}/pnpm-lock.yaml`)) {
75
+ packageManager = 'pnpm';
76
+ } else if (existsSync(`${projectRoot}/yarn.lock`)) {
77
+ packageManager = 'yarn';
78
+ }
79
+
80
+ // テストフレームワークを検出
81
+ let testFramework: string | undefined;
82
+ const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
83
+ if (deps['vitest']) {
84
+ testFramework = 'vitest';
85
+ } else if (deps['jest']) {
86
+ testFramework = 'jest';
87
+ } else if (deps['mocha']) {
88
+ testFramework = 'mocha';
89
+ }
90
+
91
+ return {
92
+ language: 'nodejs',
93
+ buildTool: packageManager,
94
+ testFramework,
95
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
96
+ hasDependencies: true,
97
+ packageManager
98
+ };
99
+ }
100
+
101
+ /**
102
+ * Javaプロジェクトを検出
103
+ */
104
+ function detectJavaProject(projectRoot: string, buildTool: 'gradle' | 'maven'): ProjectInfo {
105
+ return {
106
+ language: 'java',
107
+ buildTool,
108
+ testFramework: 'junit',
109
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
110
+ hasDependencies: true
111
+ };
112
+ }
113
+
114
+ /**
115
+ * PHPプロジェクトを検出
116
+ */
117
+ function detectPHPProject(projectRoot: string): ProjectInfo {
118
+ const composerJson = JSON.parse(readFileSync(`${projectRoot}/composer.json`, 'utf-8'));
119
+
120
+ // テストフレームワークを検出
121
+ let testFramework: string | undefined;
122
+ const deps = { ...composerJson.require, ...composerJson['require-dev'] };
123
+ if (deps['phpunit/phpunit']) {
124
+ testFramework = 'phpunit';
125
+ }
126
+
127
+ return {
128
+ language: 'php',
129
+ buildTool: 'composer',
130
+ testFramework,
131
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
132
+ hasDependencies: true
133
+ };
134
+ }
135
+
136
+ /**
137
+ * Pythonプロジェクトを検出
138
+ */
139
+ function detectPythonProject(projectRoot: string): ProjectInfo {
140
+ let buildTool = 'pip';
141
+ let testFramework: string | undefined;
142
+
143
+ if (existsSync(`${projectRoot}/pyproject.toml`)) {
144
+ buildTool = 'poetry or uv';
145
+ const pyproject = readFileSync(`${projectRoot}/pyproject.toml`, 'utf-8');
146
+ if (pyproject.includes('pytest')) {
147
+ testFramework = 'pytest';
148
+ } else if (pyproject.includes('unittest')) {
149
+ testFramework = 'unittest';
150
+ }
151
+ } else if (existsSync(`${projectRoot}/requirements.txt`)) {
152
+ const requirements = readFileSync(`${projectRoot}/requirements.txt`, 'utf-8');
153
+ if (requirements.includes('pytest')) {
154
+ testFramework = 'pytest';
155
+ }
156
+ }
157
+
158
+ return {
159
+ language: 'python',
160
+ buildTool,
161
+ testFramework,
162
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
163
+ hasDependencies: true
164
+ };
165
+ }
166
+
167
+ /**
168
+ * Goプロジェクトを検出
169
+ */
170
+ function detectGoProject(projectRoot: string): ProjectInfo {
171
+ return {
172
+ language: 'go',
173
+ buildTool: 'go',
174
+ testFramework: 'testing',
175
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
176
+ hasDependencies: true
177
+ };
178
+ }
179
+
180
+ /**
181
+ * Rustプロジェクトを検出
182
+ */
183
+ function detectRustProject(projectRoot: string): ProjectInfo {
184
+ return {
185
+ language: 'rust',
186
+ buildTool: 'cargo',
187
+ testFramework: 'cargo-test',
188
+ hasCI: existsSync(`${projectRoot}/.github/workflows`),
189
+ hasDependencies: true
190
+ };
191
+ }
192
+
@@ -38,7 +38,7 @@ function loadProjectMetadata(dir: string): ProjectMetadata | null {
38
38
  const content = readFileSync(projectJsonPath, 'utf-8');
39
39
  const meta = JSON.parse(content) as ProjectMetadata;
40
40
  return meta;
41
- } catch (error) {
41
+ } catch {
42
42
  // パースエラーなどは無視
43
43
  return null;
44
44
  }
@@ -143,7 +143,7 @@ export function findAllProjects(
143
143
  }
144
144
  }
145
145
  }
146
- } catch (error) {
146
+ } catch {
147
147
  // アクセス権限エラーなどは無視
148
148
  }
149
149
 
@@ -0,0 +1,210 @@
1
+ /**
2
+ * リリースノート生成ユーティリティ
3
+ * git logからコミット履歴を取得してリリースノートを生成
4
+ */
5
+
6
+ import { exec } from 'child_process';
7
+ import { promisify } from 'util';
8
+
9
+ const execAsync = promisify(exec);
10
+
11
+ /**
12
+ * コミット情報
13
+ */
14
+ export interface Commit {
15
+ hash: string;
16
+ type: string;
17
+ scope?: string;
18
+ subject: string;
19
+ body?: string;
20
+ breaking: boolean;
21
+ }
22
+
23
+ /**
24
+ * リリースノート
25
+ */
26
+ export interface ReleaseNotes {
27
+ version: string;
28
+ date: string;
29
+ features: Commit[];
30
+ fixes: Commit[];
31
+ breaking: Commit[];
32
+ others: Commit[];
33
+ }
34
+
35
+ /**
36
+ * git logからコミット履歴を取得
37
+ * @param fromTag 開始タグ (省略時は最新タグから)
38
+ * @param toTag 終了タグ (デフォルト: HEAD)
39
+ * @param projectRoot プロジェクトルート
40
+ * @returns コミット一覧
41
+ */
42
+ export async function getCommits(
43
+ fromTag?: string,
44
+ toTag: string = 'HEAD',
45
+ projectRoot: string = process.cwd()
46
+ ): Promise<Commit[]> {
47
+ // 開始タグが指定されていない場合、最新タグを取得
48
+ if (!fromTag) {
49
+ try {
50
+ const { stdout } = await execAsync('git describe --tags --abbrev=0', {
51
+ cwd: projectRoot
52
+ });
53
+ fromTag = stdout.trim();
54
+ } catch {
55
+ // タグが存在しない場合は全コミットを取得
56
+ fromTag = '';
57
+ }
58
+ }
59
+
60
+ // git logコマンドを構築
61
+ const range = fromTag ? `${fromTag}..${toTag}` : toTag;
62
+ const command = `git log ${range} --pretty=format:"%H%n%s%n%b%n---END---"`;
63
+
64
+ try {
65
+ const { stdout } = await execAsync(command, { cwd: projectRoot });
66
+
67
+ const commits: Commit[] = [];
68
+ const commitBlocks = stdout.split('---END---').filter(block => block.trim());
69
+
70
+ for (const block of commitBlocks) {
71
+ const lines = block.trim().split('\n');
72
+ if (lines.length < 2) continue;
73
+
74
+ const hash = lines[0];
75
+ const subject = lines[1];
76
+ const body = lines.slice(2).join('\n').trim();
77
+
78
+ // Conventional Commitsパターンを解析
79
+ const conventionalPattern = /^(\w+)(\(([^)]+)\))?(!)?:\s*(.+)$/;
80
+ const match = subject.match(conventionalPattern);
81
+
82
+ if (match) {
83
+ commits.push({
84
+ hash,
85
+ type: match[1],
86
+ scope: match[3],
87
+ subject: match[5],
88
+ body: body || undefined,
89
+ breaking: !!match[4] || body.includes('BREAKING CHANGE')
90
+ });
91
+ } else {
92
+ // Conventional Commitsに従っていない場合はothersに分類
93
+ commits.push({
94
+ hash,
95
+ type: 'other',
96
+ subject,
97
+ body: body || undefined,
98
+ breaking: body.includes('BREAKING CHANGE')
99
+ });
100
+ }
101
+ }
102
+
103
+ return commits;
104
+ } catch (error: any) {
105
+ console.error('Failed to get commits:', error.message);
106
+ return [];
107
+ }
108
+ }
109
+
110
+ /**
111
+ * コミット一覧からリリースノートを生成
112
+ * @param commits コミット一覧
113
+ * @param version リリースバージョン
114
+ * @returns リリースノート
115
+ */
116
+ export function generateReleaseNotes(
117
+ commits: Commit[],
118
+ version: string
119
+ ): ReleaseNotes {
120
+ const notes: ReleaseNotes = {
121
+ version,
122
+ date: new Date().toISOString().split('T')[0],
123
+ features: [],
124
+ fixes: [],
125
+ breaking: [],
126
+ others: []
127
+ };
128
+
129
+ for (const commit of commits) {
130
+ if (commit.breaking) {
131
+ notes.breaking.push(commit);
132
+ } else if (commit.type === 'feat') {
133
+ notes.features.push(commit);
134
+ } else if (commit.type === 'fix') {
135
+ notes.fixes.push(commit);
136
+ } else {
137
+ notes.others.push(commit);
138
+ }
139
+ }
140
+
141
+ return notes;
142
+ }
143
+
144
+ /**
145
+ * リリースノートをMarkdown形式で出力
146
+ * @param notes リリースノート
147
+ * @returns Markdown文字列
148
+ */
149
+ export function formatReleaseNotes(notes: ReleaseNotes): string {
150
+ let markdown = `# Release ${notes.version}\n\n`;
151
+ markdown += `**Release Date**: ${notes.date}\n\n`;
152
+
153
+ if (notes.breaking.length > 0) {
154
+ markdown += '## ⚠️ Breaking Changes\n\n';
155
+ for (const commit of notes.breaking) {
156
+ const scope = commit.scope ? `**${commit.scope}**: ` : '';
157
+ markdown += `- ${scope}${commit.subject} (${commit.hash.substring(0, 7)})\n`;
158
+ if (commit.body) {
159
+ markdown += ` ${commit.body.split('\n').join('\n ')}\n`;
160
+ }
161
+ }
162
+ markdown += '\n';
163
+ }
164
+
165
+ if (notes.features.length > 0) {
166
+ markdown += '## ✨ Features\n\n';
167
+ for (const commit of notes.features) {
168
+ const scope = commit.scope ? `**${commit.scope}**: ` : '';
169
+ markdown += `- ${scope}${commit.subject} (${commit.hash.substring(0, 7)})\n`;
170
+ }
171
+ markdown += '\n';
172
+ }
173
+
174
+ if (notes.fixes.length > 0) {
175
+ markdown += '## 🐛 Bug Fixes\n\n';
176
+ for (const commit of notes.fixes) {
177
+ const scope = commit.scope ? `**${commit.scope}**: ` : '';
178
+ markdown += `- ${scope}${commit.subject} (${commit.hash.substring(0, 7)})\n`;
179
+ }
180
+ markdown += '\n';
181
+ }
182
+
183
+ if (notes.others.length > 0) {
184
+ markdown += '## 📝 Other Changes\n\n';
185
+ for (const commit of notes.others) {
186
+ const scope = commit.scope ? `**${commit.scope}**: ` : '';
187
+ markdown += `- ${scope}${commit.subject} (${commit.hash.substring(0, 7)})\n`;
188
+ }
189
+ markdown += '\n';
190
+ }
191
+
192
+ return markdown;
193
+ }
194
+
195
+ /**
196
+ * リリースノートを生成してMarkdown文字列を返す
197
+ * @param version リリースバージョン
198
+ * @param fromTag 開始タグ
199
+ * @param projectRoot プロジェクトルート
200
+ * @returns Markdown形式のリリースノート
201
+ */
202
+ export async function createReleaseNotes(
203
+ version: string,
204
+ fromTag?: string,
205
+ projectRoot: string = process.cwd()
206
+ ): Promise<string> {
207
+ const commits = await getCommits(fromTag, 'HEAD', projectRoot);
208
+ const notes = generateReleaseNotes(commits, version);
209
+ return formatReleaseNotes(notes);
210
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * spec.json から JIRA 情報を読み込むユーティリティ
3
+ *
4
+ * kiro:spec-impl ワークフローで使用され、spec.json から
5
+ * Epic/Story のキーを自動取得する
6
+ */
7
+
8
+ import { loadSpecJson } from './spec-updater.js';
9
+
10
+ /**
11
+ * spec.json から抽出された JIRA 情報
12
+ */
13
+ export interface JiraInfo {
14
+ /** Epic キー (例: "PROJ-123") */
15
+ epicKey: string | null;
16
+ /** Story キーの配列 */
17
+ storyKeys: string[];
18
+ /** 最初の Story キー(実装時のメインターゲット) */
19
+ firstStoryKey: string | null;
20
+ /** JIRA プロジェクトキー (例: "PROJ") */
21
+ projectKey: string | null;
22
+ /** Epic の URL */
23
+ epicUrl: string | null;
24
+ }
25
+
26
+ /**
27
+ * JIRA 情報の存在状態
28
+ */
29
+ export interface JiraInfoStatus {
30
+ /** JIRA 情報が存在するか */
31
+ hasJiraInfo: boolean;
32
+ /** Epic キーが存在するか */
33
+ hasEpic: boolean;
34
+ /** Story が存在するか */
35
+ hasStories: boolean;
36
+ /** 不足している情報のリスト */
37
+ missing: string[];
38
+ }
39
+
40
+ /**
41
+ * spec.json から JIRA 情報を取得
42
+ *
43
+ * @param featureName 機能名
44
+ * @param projectRoot プロジェクトルート(デフォルト: process.cwd())
45
+ * @returns JIRA 情報
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const jiraInfo = getJiraInfoFromSpec('user-auth');
50
+ * if (jiraInfo.epicKey) {
51
+ * await transitionToInProgress(jiraInfo.epicKey);
52
+ * }
53
+ * if (jiraInfo.firstStoryKey) {
54
+ * await transitionToInProgress(jiraInfo.firstStoryKey);
55
+ * }
56
+ * ```
57
+ */
58
+ export function getJiraInfoFromSpec(
59
+ featureName: string,
60
+ projectRoot: string = process.cwd(),
61
+ ): JiraInfo {
62
+ const spec = loadSpecJson(featureName, projectRoot);
63
+
64
+ return {
65
+ epicKey: spec.jira?.epicKey || null,
66
+ storyKeys: spec.jira?.storyKeys || [],
67
+ firstStoryKey: spec.jira?.storyKeys?.[0] || null,
68
+ projectKey: spec.jira?.projectKey || null,
69
+ epicUrl: spec.jira?.epicUrl || null,
70
+ };
71
+ }
72
+
73
+ /**
74
+ * JIRA 情報の存在状態をチェック
75
+ *
76
+ * @param featureName 機能名
77
+ * @param projectRoot プロジェクトルート(デフォルト: process.cwd())
78
+ * @returns JIRA 情報の存在状態
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const status = checkJiraInfoStatus('user-auth');
83
+ * if (!status.hasJiraInfo) {
84
+ * console.log('JIRA 情報がありません:', status.missing.join(', '));
85
+ * // ユーザーに確認: "JIRA連携をスキップしますか?"
86
+ * }
87
+ * ```
88
+ */
89
+ export function checkJiraInfoStatus(
90
+ featureName: string,
91
+ projectRoot: string = process.cwd(),
92
+ ): JiraInfoStatus {
93
+ const jiraInfo = getJiraInfoFromSpec(featureName, projectRoot);
94
+ const missing: string[] = [];
95
+
96
+ if (!jiraInfo.epicKey) {
97
+ missing.push('Epic');
98
+ }
99
+ if (jiraInfo.storyKeys.length === 0) {
100
+ missing.push('Story');
101
+ }
102
+
103
+ return {
104
+ hasJiraInfo: jiraInfo.epicKey !== null || jiraInfo.storyKeys.length > 0,
105
+ hasEpic: jiraInfo.epicKey !== null,
106
+ hasStories: jiraInfo.storyKeys.length > 0,
107
+ missing,
108
+ };
109
+ }
110
+
111
+ /**
112
+ * JIRA 連携に必要な情報が揃っているかチェック
113
+ *
114
+ * @param featureName 機能名
115
+ * @param projectRoot プロジェクトルート
116
+ * @returns true: JIRA 連携可能, false: 不可
117
+ */
118
+ export function canIntegrateWithJira(
119
+ featureName: string,
120
+ projectRoot: string = process.cwd(),
121
+ ): boolean {
122
+ const status = checkJiraInfoStatus(featureName, projectRoot);
123
+ // Epic があれば JIRA 連携可能(Story がなくても Epic のみ更新)
124
+ return status.hasEpic;
125
+ }
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
7
- import { resolve, dirname } from 'path';
7
+ import { resolve } from 'path';
8
8
 
9
9
  /**
10
10
  * spec.json の型定義
@@ -36,6 +36,13 @@ export interface SpecJson {
36
36
  epicUrl?: string;
37
37
  storyKeys?: string[];
38
38
  };
39
+ environmentSetup?: {
40
+ completed?: boolean;
41
+ language?: string;
42
+ ciTool?: string;
43
+ dockerCompose?: boolean;
44
+ completedAt?: string;
45
+ };
39
46
  milestones?: {
40
47
  requirementsCompleted?: boolean;
41
48
  designCompleted?: boolean;