@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,526 @@
1
+ /**
2
+ * .env ファイルの対話的設定ユーティリティ
3
+ *
4
+ * 機能:
5
+ * - .envファイルのパース
6
+ * - 対話的な環境変数入力(既存値の表示、上書き確認)
7
+ * - sensitiveな値のマスク表示
8
+ * - .envファイルの生成
9
+ */
10
+
11
+ import { readFileSync, existsSync } from 'fs';
12
+ import * as readline from 'readline';
13
+ import {
14
+ getProjectIssueTypes,
15
+ hasJiraCredentials,
16
+ findIssueTypeIdByName,
17
+ filterStoryTypes,
18
+ filterSubtaskTypes,
19
+ } from './jira-issue-type-fetcher.js';
20
+
21
+ /**
22
+ * 環境変数の設定項目定義
23
+ */
24
+ export interface EnvValue {
25
+ key: string;
26
+ description: string;
27
+ defaultValue?: string;
28
+ required: boolean;
29
+ sensitive?: boolean; // API token等のマスク表示対象
30
+ }
31
+
32
+ /**
33
+ * 環境変数の設定項目リスト
34
+ */
35
+ const ENV_CONFIG: EnvValue[] = [
36
+ {
37
+ key: 'ATLASSIAN_URL',
38
+ description: 'Atlassian URL (例: https://your-domain.atlassian.net)',
39
+ required: true,
40
+ },
41
+ {
42
+ key: 'ATLASSIAN_EMAIL',
43
+ description: 'Atlassianアカウントのメールアドレス',
44
+ required: true,
45
+ },
46
+ {
47
+ key: 'ATLASSIAN_API_TOKEN',
48
+ description:
49
+ 'Atlassian API Token (https://id.atlassian.com/manage-profile/security/api-tokens で生成)',
50
+ required: true,
51
+ sensitive: true,
52
+ },
53
+ {
54
+ key: 'GITHUB_ORG',
55
+ description: 'GitHub Organization (オプション)',
56
+ required: false,
57
+ },
58
+ {
59
+ key: 'GITHUB_TOKEN',
60
+ description: 'GitHub Personal Access Token (オプション)',
61
+ required: false,
62
+ sensitive: true,
63
+ },
64
+ {
65
+ key: 'GITHUB_REPO',
66
+ description: 'GitHubリポジトリ (例: owner/repo)',
67
+ required: false,
68
+ },
69
+ {
70
+ key: 'CONFLUENCE_PRD_SPACE',
71
+ description: 'Confluence PRDスペースキー',
72
+ required: false,
73
+ defaultValue: 'PRD',
74
+ },
75
+ {
76
+ key: 'CONFLUENCE_QA_SPACE',
77
+ description: 'Confluence QAスペースキー',
78
+ required: false,
79
+ defaultValue: 'QA',
80
+ },
81
+ {
82
+ key: 'CONFLUENCE_RELEASE_SPACE',
83
+ description: 'Confluence Releaseスペースキー',
84
+ required: false,
85
+ defaultValue: 'RELEASE',
86
+ },
87
+ {
88
+ key: 'JIRA_PROJECT_KEYS',
89
+ description: 'JIRAプロジェクトキー(カンマ区切り)',
90
+ required: false,
91
+ },
92
+ {
93
+ key: 'JIRA_ISSUE_TYPE_STORY',
94
+ description: 'JIRA Story Issue Type ID (JIRAインスタンス固有)',
95
+ required: true,
96
+ defaultValue: '10036',
97
+ },
98
+ {
99
+ key: 'JIRA_ISSUE_TYPE_SUBTASK',
100
+ description: 'JIRA Subtask Issue Type ID (JIRAインスタンス固有)',
101
+ required: true,
102
+ defaultValue: '10037',
103
+ },
104
+ ];
105
+
106
+ /**
107
+ * .envファイルをパースしてMapで返す
108
+ *
109
+ * @param filePath .envファイルのパス
110
+ * @returns 環境変数のMap (key -> value)
111
+ */
112
+ export function parseEnvFile(filePath: string): Map<string, string> {
113
+ const envMap = new Map<string, string>();
114
+
115
+ if (!existsSync(filePath)) {
116
+ return envMap;
117
+ }
118
+
119
+ try {
120
+ const content = readFileSync(filePath, 'utf-8');
121
+ const lines = content.split('\n');
122
+
123
+ for (const line of lines) {
124
+ const trimmed = line.trim();
125
+
126
+ // コメント行または空行をスキップ
127
+ if (!trimmed || trimmed.startsWith('#')) {
128
+ continue;
129
+ }
130
+
131
+ // KEY=VALUE 形式をパース
132
+ const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);
133
+ if (match) {
134
+ const key = match[1];
135
+ let value = match[2];
136
+
137
+ // クォートを除去
138
+ if (
139
+ (value.startsWith('"') && value.endsWith('"')) ||
140
+ (value.startsWith('\'') && value.endsWith('\''))
141
+ ) {
142
+ value = value.slice(1, -1);
143
+ }
144
+
145
+ envMap.set(key, value);
146
+ }
147
+ }
148
+ } catch (error) {
149
+ console.warn(
150
+ `⚠️ Warning: Failed to parse ${filePath}:`,
151
+ error instanceof Error ? error.message : error,
152
+ );
153
+ }
154
+
155
+ return envMap;
156
+ }
157
+
158
+ /**
159
+ * 値をマスク表示(sensitiveな値用)
160
+ *
161
+ * @param value 元の値
162
+ * @returns マスクされた値 (例: "***hidden***")
163
+ */
164
+ function maskValue(value: string): string {
165
+ if (!value) {
166
+ return '';
167
+ }
168
+ return '***hidden***';
169
+ }
170
+
171
+ /**
172
+ * readlineインターフェースで質問して回答を取得
173
+ *
174
+ * @param rl readlineインターフェース
175
+ * @param question 質問文
176
+ * @returns ユーザーの入力
177
+ */
178
+ async function question(
179
+ rl: readline.Interface,
180
+ question: string,
181
+ ): Promise<string> {
182
+ return new Promise((resolve) => {
183
+ rl.question(question, (answer) => {
184
+ resolve(answer.trim());
185
+ });
186
+ });
187
+ }
188
+
189
+ /**
190
+ * JIRA Issue Type IDの対話的選択
191
+ *
192
+ * @param rl readlineインターフェース
193
+ * @param config 環境変数の設定項目
194
+ * @param projectKey JIRAプロジェクトキー
195
+ * @param existingValue 既存の値(あれば)
196
+ * @returns 選択されたIssue Type ID
197
+ */
198
+ async function promptJiraIssueTypeId(
199
+ rl: readline.Interface,
200
+ config: EnvValue,
201
+ projectKey: string | undefined,
202
+ existingValue?: string,
203
+ ): Promise<string> {
204
+ const requiredMark = config.required ? ' (必須)' : ' (オプション)';
205
+
206
+ console.log(`\n📌 ${config.key}${requiredMark}`);
207
+ console.log(` ${config.description}`);
208
+
209
+ if (existingValue) {
210
+ console.log(` 現在の値: ${existingValue}`);
211
+ } else if (config.defaultValue) {
212
+ console.log(` デフォルト値: ${config.defaultValue}`);
213
+ }
214
+
215
+ // JIRA認証情報が設定済みで、プロジェクトキーがある場合、APIから取得を試みる
216
+ if (hasJiraCredentials() && projectKey) {
217
+ console.log(
218
+ `\n 🔍 JIRAプロジェクト "${projectKey}" からIssue Typesを取得中...`,
219
+ );
220
+
221
+ const issueTypes = await getProjectIssueTypes(projectKey);
222
+
223
+ if (issueTypes && issueTypes.length > 0) {
224
+ // StoryまたはSubtaskタイプをフィルタリング
225
+ const filteredTypes =
226
+ config.key === 'JIRA_ISSUE_TYPE_STORY'
227
+ ? filterStoryTypes(issueTypes)
228
+ : filterSubtaskTypes(issueTypes);
229
+
230
+ if (filteredTypes.length > 0) {
231
+ console.log('\n 📋 利用可能なIssue Types:');
232
+ filteredTypes.forEach((it, index) => {
233
+ const marker = existingValue === it.id ? ' ← 現在の値' : '';
234
+ console.log(` ${index + 1}. ${it.name} (ID: ${it.id})${marker}`);
235
+ });
236
+
237
+ console.log('\n 選択方法:');
238
+ console.log(` - 番号を入力 (1-${filteredTypes.length})`);
239
+ console.log(` - Issue Type名を入力 (例: ${filteredTypes[0].name})`);
240
+ console.log(` - IDを直接入力 (例: ${filteredTypes[0].id})`);
241
+ console.log(' - Enterキーで既存値またはデフォルト値を使用');
242
+
243
+ const promptText = ' 選択: ';
244
+ const input = await question(rl, promptText);
245
+
246
+ if (!input) {
247
+ // 入力が空の場合、既存値またはデフォルト値を使用
248
+ return existingValue || config.defaultValue || '';
249
+ }
250
+
251
+ // 番号で選択
252
+ const index = parseInt(input, 10);
253
+ if (!isNaN(index) && index >= 1 && index <= filteredTypes.length) {
254
+ const selected = filteredTypes[index - 1];
255
+ console.log(
256
+ ` ✅ ${selected.name} (ID: ${selected.id}) を選択しました`,
257
+ );
258
+ return selected.id;
259
+ }
260
+
261
+ // 名前で検索
262
+ const foundById = findIssueTypeIdByName(filteredTypes, input);
263
+ if (foundById) {
264
+ const selected = filteredTypes.find((it) => it.id === foundById);
265
+ console.log(
266
+ ` ✅ ${selected?.name} (ID: ${foundById}) を選択しました`,
267
+ );
268
+ return foundById;
269
+ }
270
+
271
+ // IDとして直接入力された場合
272
+ const foundDirect = filteredTypes.find((it) => it.id === input);
273
+ if (foundDirect) {
274
+ console.log(
275
+ ` ✅ ${foundDirect.name} (ID: ${foundDirect.id}) を選択しました`,
276
+ );
277
+ return foundDirect.id;
278
+ }
279
+
280
+ // 見つからない場合、入力値をそのまま使用(ユーザーが手動でIDを入力した可能性)
281
+ console.log(
282
+ ` ⚠️ 選択肢に一致しませんでしたが、入力値 "${input}" を使用します`,
283
+ );
284
+ return input;
285
+ } else {
286
+ console.log(
287
+ ` ⚠️ ${config.key === 'JIRA_ISSUE_TYPE_STORY' ? 'Story' : 'Subtask'}タイプが見つかりませんでした`,
288
+ );
289
+ }
290
+ } else {
291
+ console.log(
292
+ ' ⚠️ JIRA APIへのアクセスに失敗しました(認証情報が未設定、またはネットワークエラー)',
293
+ );
294
+ console.log(' 手動でIDを入力してください。');
295
+ console.log(' ');
296
+ console.log(' JIRA管理画面で確認:');
297
+ console.log(' Settings > Issues > Issue types');
298
+ console.log(' ');
299
+ console.log(' または、REST APIで確認:');
300
+ console.log(
301
+ ` GET https://your-domain.atlassian.net/rest/api/3/project/${projectKey}`,
302
+ );
303
+ }
304
+ } else {
305
+ if (!hasJiraCredentials()) {
306
+ console.log(
307
+ ' ℹ️ Atlassian認証情報が未設定のため、手動でIDを入力してください',
308
+ );
309
+ }
310
+ if (!projectKey) {
311
+ console.log(
312
+ ' ℹ️ JIRAプロジェクトキーが未設定のため、手動でIDを入力してください',
313
+ );
314
+ }
315
+ }
316
+
317
+ // フォールバック: 通常の入力プロンプト
318
+ const promptText = existingValue
319
+ ? ' 新しい値を入力(Enter=変更なし): '
320
+ : config.defaultValue
321
+ ? ' 値を入力(Enter=デフォルト): '
322
+ : ' 値を入力: ';
323
+
324
+ const input = await question(rl, promptText);
325
+
326
+ // 入力が空の場合
327
+ if (!input) {
328
+ // 既存値があればそれを使用
329
+ if (existingValue) {
330
+ return existingValue;
331
+ }
332
+ // デフォルト値があればそれを使用
333
+ if (config.defaultValue) {
334
+ return config.defaultValue;
335
+ }
336
+ // 必須項目で値がない場合はエラー
337
+ if (config.required) {
338
+ console.log(' ⚠️ 必須項目です。値を入力してください。');
339
+ return promptJiraIssueTypeId(rl, config, projectKey, existingValue);
340
+ }
341
+ // オプション項目は空文字を返す
342
+ return '';
343
+ }
344
+
345
+ return input;
346
+ }
347
+
348
+ /**
349
+ * 環境変数の対話的入力(既存値がある場合は表示)
350
+ *
351
+ * @param rl readlineインターフェース
352
+ * @param config 環境変数の設定項目
353
+ * @param existingValue 既存の値(あれば)
354
+ * @param projectKey JIRAプロジェクトキー(Issue Type ID設定時のみ使用)
355
+ * @returns 入力された値
356
+ */
357
+ export async function promptEnvValue(
358
+ rl: readline.Interface,
359
+ config: EnvValue,
360
+ existingValue?: string,
361
+ projectKey?: string,
362
+ ): Promise<string> {
363
+ // JIRA Issue Type ID設定の場合は特別な処理
364
+ if (
365
+ config.key === 'JIRA_ISSUE_TYPE_STORY' ||
366
+ config.key === 'JIRA_ISSUE_TYPE_SUBTASK'
367
+ ) {
368
+ return promptJiraIssueTypeId(rl, config, projectKey, existingValue);
369
+ }
370
+
371
+ // 通常の入力処理
372
+ const requiredMark = config.required ? ' (必須)' : ' (オプション)';
373
+
374
+ console.log(`\n📌 ${config.key}${requiredMark}`);
375
+ console.log(` ${config.description}`);
376
+
377
+ if (existingValue) {
378
+ const displayValue = config.sensitive
379
+ ? maskValue(existingValue)
380
+ : existingValue;
381
+ console.log(` 現在の値: ${displayValue}`);
382
+ } else if (config.defaultValue) {
383
+ console.log(` デフォルト値: ${config.defaultValue}`);
384
+ }
385
+
386
+ const promptText = existingValue
387
+ ? ' 新しい値を入力(Enter=変更なし): '
388
+ : config.defaultValue
389
+ ? ' 値を入力(Enter=デフォルト): '
390
+ : ' 値を入力: ';
391
+
392
+ const input = await question(rl, promptText);
393
+
394
+ // 入力が空の場合
395
+ if (!input) {
396
+ // 既存値があればそれを使用
397
+ if (existingValue) {
398
+ return existingValue;
399
+ }
400
+ // デフォルト値があればそれを使用
401
+ if (config.defaultValue) {
402
+ return config.defaultValue;
403
+ }
404
+ // 必須項目で値がない場合はエラー
405
+ if (config.required) {
406
+ console.log(' ⚠️ 必須項目です。値を入力してください。');
407
+ return promptEnvValue(rl, config, existingValue, projectKey);
408
+ }
409
+ // オプション項目は空文字を返す
410
+ return '';
411
+ }
412
+
413
+ return input;
414
+ }
415
+
416
+ /**
417
+ * .envファイルの内容を生成
418
+ *
419
+ * @param values 環境変数のMap
420
+ * @returns .envファイルの内容
421
+ */
422
+ export function generateEnvContent(values: Map<string, string>): string {
423
+ let content = '# Atlassian設定(MCP + REST API共通)\n';
424
+
425
+ // Atlassian設定
426
+ const atlassianKeys = [
427
+ 'ATLASSIAN_URL',
428
+ 'ATLASSIAN_EMAIL',
429
+ 'ATLASSIAN_API_TOKEN',
430
+ ];
431
+ for (const key of atlassianKeys) {
432
+ const value = values.get(key) || '';
433
+ content += `${key}=${value}\n`;
434
+ }
435
+
436
+ // GitHub設定
437
+ content += '\n# GitHub設定\n';
438
+ const githubKeys = ['GITHUB_ORG', 'GITHUB_TOKEN', 'GITHUB_REPO'];
439
+ for (const key of githubKeys) {
440
+ const value = values.get(key) || '';
441
+ content += `${key}=${value}\n`;
442
+ }
443
+
444
+ // Confluence設定
445
+ content += '\n# Confluence共有スペース\n';
446
+ const confluenceKeys = [
447
+ 'CONFLUENCE_PRD_SPACE',
448
+ 'CONFLUENCE_QA_SPACE',
449
+ 'CONFLUENCE_RELEASE_SPACE',
450
+ ];
451
+ for (const key of confluenceKeys) {
452
+ const value = values.get(key) || '';
453
+ content += `${key}=${value}\n`;
454
+ }
455
+
456
+ // JIRA設定
457
+ content += '\n# JIRAプロジェクトキー\n';
458
+ content += `JIRA_PROJECT_KEYS=${values.get('JIRA_PROJECT_KEYS') || ''}\n`;
459
+
460
+ content += '\n# JIRA Issue Type IDs(JIRAインスタンス固有 - 必須)\n';
461
+ const storyConfig = ENV_CONFIG.find(c => c.key === 'JIRA_ISSUE_TYPE_STORY');
462
+ const subtaskConfig = ENV_CONFIG.find(c => c.key === 'JIRA_ISSUE_TYPE_SUBTASK');
463
+ content += `JIRA_ISSUE_TYPE_STORY=${values.get('JIRA_ISSUE_TYPE_STORY') || storyConfig?.defaultValue || ''}\n`;
464
+ content += `JIRA_ISSUE_TYPE_SUBTASK=${values.get('JIRA_ISSUE_TYPE_SUBTASK') || subtaskConfig?.defaultValue || ''}\n`;
465
+
466
+ return content;
467
+ }
468
+
469
+ /**
470
+ * 対話的にすべての環境変数を設定
471
+ *
472
+ * @param existingValues 既存の環境変数Map(あれば)
473
+ * @param jiraKey JIRAプロジェクトキー(自動設定用)
474
+ * @param repoUrl リポジトリURL(自動設定用)
475
+ * @returns 設定された環境変数のMap
476
+ */
477
+ export async function configureEnvInteractive(
478
+ existingValues?: Map<string, string>,
479
+ jiraKey?: string,
480
+ repoUrl?: string,
481
+ ): Promise<Map<string, string>> {
482
+ const rl = readline.createInterface({
483
+ input: process.stdin,
484
+ output: process.stdout,
485
+ });
486
+
487
+ const newValues = new Map<string, string>();
488
+
489
+ try {
490
+ console.log('\n🔐 環境変数の設定');
491
+ console.log('='.repeat(60));
492
+ console.log(
493
+ '各項目を設定してください。Enterキーのみで既存値またはデフォルト値を使用します。',
494
+ );
495
+
496
+ for (const config of ENV_CONFIG) {
497
+ let existingValue = existingValues?.get(config.key);
498
+
499
+ // 自動設定項目
500
+ if (config.key === 'JIRA_PROJECT_KEYS' && jiraKey && !existingValue) {
501
+ existingValue = jiraKey;
502
+ }
503
+ if (config.key === 'GITHUB_REPO' && repoUrl && !existingValue) {
504
+ // URLからリポジトリ名を抽出 (例: https://github.com/owner/repo -> owner/repo)
505
+ const match = repoUrl.match(/github\.com[/:]([\w-]+\/[\w-]+)/);
506
+ if (match) {
507
+ existingValue = match[1];
508
+ }
509
+ }
510
+
511
+ // JIRA Issue Type ID設定時は、プロジェクトキーを渡す
512
+ const projectKey = jiraKey || existingValues?.get('JIRA_PROJECT_KEYS');
513
+ const value = await promptEnvValue(rl, config, existingValue, projectKey);
514
+
515
+ if (value) {
516
+ newValues.set(config.key, value);
517
+ }
518
+ }
519
+
520
+ console.log('\n✅ 環境変数の設定が完了しました');
521
+ } finally {
522
+ rl.close();
523
+ }
524
+
525
+ return newValues;
526
+ }