@sk8metal/michi-cli 0.4.0 → 0.7.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 (321) hide show
  1. package/CHANGELOG.md +162 -1
  2. package/README.md +2 -1
  3. package/dist/scripts/config/config-schema.d.ts +87 -0
  4. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  5. package/dist/scripts/config/config-schema.js +81 -0
  6. package/dist/scripts/config/config-schema.js.map +1 -1
  7. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  8. package/dist/scripts/confluence-sync.js +15 -2
  9. package/dist/scripts/confluence-sync.js.map +1 -1
  10. package/dist/scripts/github-actions-client.d.ts +79 -0
  11. package/dist/scripts/github-actions-client.d.ts.map +1 -0
  12. package/dist/scripts/github-actions-client.js +182 -0
  13. package/dist/scripts/github-actions-client.js.map +1 -0
  14. package/dist/scripts/health-check-service.d.ts +46 -0
  15. package/dist/scripts/health-check-service.d.ts.map +1 -0
  16. package/dist/scripts/health-check-service.js +114 -0
  17. package/dist/scripts/health-check-service.js.map +1 -0
  18. package/dist/scripts/markdown-to-confluence.d.ts.map +1 -1
  19. package/dist/scripts/markdown-to-confluence.js +25 -3
  20. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  21. package/dist/scripts/mermaid-converter.d.ts +24 -0
  22. package/dist/scripts/mermaid-converter.d.ts.map +1 -0
  23. package/dist/scripts/mermaid-converter.js +49 -0
  24. package/dist/scripts/mermaid-converter.js.map +1 -0
  25. package/dist/scripts/pr-automation.d.ts.map +1 -1
  26. package/dist/scripts/pr-automation.js +11 -3
  27. package/dist/scripts/pr-automation.js.map +1 -1
  28. package/dist/scripts/spec-impl-workflow.d.ts.map +1 -1
  29. package/dist/scripts/spec-impl-workflow.js +22 -6
  30. package/dist/scripts/spec-impl-workflow.js.map +1 -1
  31. package/dist/scripts/template/multi-repo-renderer.d.ts +67 -0
  32. package/dist/scripts/template/multi-repo-renderer.d.ts.map +1 -0
  33. package/dist/scripts/template/multi-repo-renderer.js +123 -0
  34. package/dist/scripts/template/multi-repo-renderer.js.map +1 -0
  35. package/dist/scripts/template/renderer.d.ts +4 -0
  36. package/dist/scripts/template/renderer.d.ts.map +1 -1
  37. package/dist/scripts/template/renderer.js.map +1 -1
  38. package/dist/scripts/test-execution-generator.d.ts.map +1 -1
  39. package/dist/scripts/test-execution-generator.js +94 -11
  40. package/dist/scripts/test-execution-generator.js.map +1 -1
  41. package/dist/scripts/test-script-runner.d.ts +33 -0
  42. package/dist/scripts/test-script-runner.d.ts.map +1 -0
  43. package/dist/scripts/test-script-runner.js +77 -0
  44. package/dist/scripts/test-script-runner.js.map +1 -0
  45. package/dist/scripts/utils/config-loader.d.ts +31 -5
  46. package/dist/scripts/utils/config-loader.d.ts.map +1 -1
  47. package/dist/scripts/utils/config-loader.js +363 -50
  48. package/dist/scripts/utils/config-loader.js.map +1 -1
  49. package/dist/scripts/utils/env-config.d.ts +1 -1
  50. package/dist/scripts/utils/env-config.d.ts.map +1 -1
  51. package/dist/scripts/utils/env-config.js +2 -14
  52. package/dist/scripts/utils/env-config.js.map +1 -1
  53. package/dist/scripts/utils/multi-repo-validator.d.ts +30 -0
  54. package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -0
  55. package/dist/scripts/utils/multi-repo-validator.js +105 -0
  56. package/dist/scripts/utils/multi-repo-validator.js.map +1 -0
  57. package/dist/scripts/utils/project-meta.d.ts +9 -0
  58. package/dist/scripts/utils/project-meta.d.ts.map +1 -1
  59. package/dist/scripts/utils/project-meta.js +22 -0
  60. package/dist/scripts/utils/project-meta.js.map +1 -1
  61. package/dist/scripts/utils/security-validator.d.ts +55 -0
  62. package/dist/scripts/utils/security-validator.d.ts.map +1 -0
  63. package/dist/scripts/utils/security-validator.js +232 -0
  64. package/dist/scripts/utils/security-validator.js.map +1 -0
  65. package/dist/scripts/utils/spec-archiver.d.ts +38 -0
  66. package/dist/scripts/utils/spec-archiver.d.ts.map +1 -0
  67. package/dist/scripts/utils/spec-archiver.js +210 -0
  68. package/dist/scripts/utils/spec-archiver.js.map +1 -0
  69. package/dist/scripts/utils/spec-updater.d.ts +4 -0
  70. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  71. package/dist/scripts/utils/spec-updater.js.map +1 -1
  72. package/dist/src/cli.d.ts.map +1 -1
  73. package/dist/src/cli.js +303 -17
  74. package/dist/src/cli.js.map +1 -1
  75. package/dist/src/commands/config-validate.d.ts +9 -0
  76. package/dist/src/commands/config-validate.d.ts.map +1 -0
  77. package/dist/src/commands/config-validate.js +90 -0
  78. package/dist/src/commands/config-validate.js.map +1 -0
  79. package/dist/src/commands/init.d.ts +1 -0
  80. package/dist/src/commands/init.d.ts.map +1 -1
  81. package/dist/src/commands/init.js +29 -6
  82. package/dist/src/commands/init.js.map +1 -1
  83. package/dist/src/commands/migrate.d.ts +25 -0
  84. package/dist/src/commands/migrate.d.ts.map +1 -0
  85. package/dist/src/commands/migrate.js +341 -0
  86. package/dist/src/commands/migrate.js.map +1 -0
  87. package/dist/src/commands/multi-repo-add-repo.d.ts +26 -0
  88. package/dist/src/commands/multi-repo-add-repo.d.ts.map +1 -0
  89. package/dist/src/commands/multi-repo-add-repo.js +56 -0
  90. package/dist/src/commands/multi-repo-add-repo.js.map +1 -0
  91. package/dist/src/commands/multi-repo-ci-status.d.ts +46 -0
  92. package/dist/src/commands/multi-repo-ci-status.d.ts.map +1 -0
  93. package/dist/src/commands/multi-repo-ci-status.js +285 -0
  94. package/dist/src/commands/multi-repo-ci-status.js.map +1 -0
  95. package/dist/src/commands/multi-repo-confluence-sync.d.ts +45 -0
  96. package/dist/src/commands/multi-repo-confluence-sync.d.ts.map +1 -0
  97. package/dist/src/commands/multi-repo-confluence-sync.js +135 -0
  98. package/dist/src/commands/multi-repo-confluence-sync.js.map +1 -0
  99. package/dist/src/commands/multi-repo-init.d.ts +26 -0
  100. package/dist/src/commands/multi-repo-init.d.ts.map +1 -0
  101. package/dist/src/commands/multi-repo-init.js +101 -0
  102. package/dist/src/commands/multi-repo-init.js.map +1 -0
  103. package/dist/src/commands/multi-repo-list.d.ts +28 -0
  104. package/dist/src/commands/multi-repo-list.d.ts.map +1 -0
  105. package/dist/src/commands/multi-repo-list.js +38 -0
  106. package/dist/src/commands/multi-repo-list.js.map +1 -0
  107. package/dist/src/commands/multi-repo-test.d.ts +56 -0
  108. package/dist/src/commands/multi-repo-test.d.ts.map +1 -0
  109. package/dist/src/commands/multi-repo-test.js +70 -0
  110. package/dist/src/commands/multi-repo-test.js.map +1 -0
  111. package/dist/src/commands/setup-existing.d.ts.map +1 -1
  112. package/dist/src/commands/setup-existing.js +0 -1
  113. package/dist/src/commands/setup-existing.js.map +1 -1
  114. package/dist/src/commands/spec-archive.d.ts +17 -0
  115. package/dist/src/commands/spec-archive.d.ts.map +1 -0
  116. package/dist/src/commands/spec-archive.js +40 -0
  117. package/dist/src/commands/spec-archive.js.map +1 -0
  118. package/dist/src/commands/spec-list.d.ts +15 -0
  119. package/dist/src/commands/spec-list.d.ts.map +1 -0
  120. package/dist/src/commands/spec-list.js +55 -0
  121. package/dist/src/commands/spec-list.js.map +1 -0
  122. package/dist/vitest.config.d.ts.map +1 -1
  123. package/dist/vitest.config.js +32 -8
  124. package/dist/vitest.config.js.map +1 -1
  125. package/docs/michi-development/design/config-unification.md +4789 -0
  126. package/docs/user-guide/getting-started/github-token-setup.md +2 -1
  127. package/docs/user-guide/getting-started/new-repository-setup.md +1 -1
  128. package/docs/user-guide/getting-started/quick-start.md +1 -1
  129. package/docs/user-guide/getting-started/setup.md +4 -11
  130. package/docs/user-guide/guides/multi-repo-guide.md +591 -0
  131. package/docs/user-guide/guides/multi-repo-migration-guide.md +516 -0
  132. package/docs/user-guide/hands-on/claude-agent-setup.md +2 -2
  133. package/docs/user-guide/hands-on/claude-setup.md +2 -2
  134. package/docs/user-guide/hands-on/cursor-setup.md +2 -2
  135. package/docs/user-guide/hands-on/workflow-walkthrough.md +4 -1
  136. package/docs/user-guide/reference/multi-repo-api.md +771 -0
  137. package/docs/user-guide/reference/quick-reference.md +22 -37
  138. package/env.example +1 -1
  139. package/package.json +2 -5
  140. package/scripts/__tests__/config-loader-multi-repo.test.ts +342 -0
  141. package/scripts/__tests__/github-actions-client.test.ts +543 -0
  142. package/scripts/__tests__/health-check-service.test.ts +142 -0
  143. package/scripts/__tests__/markdown-to-confluence.test.ts +262 -0
  144. package/scripts/__tests__/mermaid-converter.test.ts +236 -0
  145. package/scripts/__tests__/multi-repo-config-schema.test.ts +335 -0
  146. package/scripts/__tests__/multi-repo-validator.test.ts +524 -0
  147. package/scripts/__tests__/spec-archiver.test.ts +512 -0
  148. package/scripts/__tests__/spec-impl-workflow.test.ts +5 -2
  149. package/scripts/__tests__/test-script-runner.test.ts +217 -0
  150. package/scripts/config/config-schema.ts +104 -0
  151. package/scripts/confluence-sync.ts +16 -2
  152. package/scripts/github-actions-client.ts +258 -0
  153. package/scripts/health-check-service.ts +171 -0
  154. package/scripts/markdown-to-confluence.ts +37 -6
  155. package/scripts/mermaid-converter.ts +56 -0
  156. package/scripts/pr-automation.ts +15 -5
  157. package/scripts/spec-impl-workflow.ts +22 -6
  158. package/scripts/template/__tests__/multi-repo-renderer.test.ts +261 -0
  159. package/scripts/template/multi-repo-renderer.ts +172 -0
  160. package/scripts/template/renderer.ts +5 -0
  161. package/scripts/test-execution-generator.ts +104 -11
  162. package/scripts/test-script-runner.ts +130 -0
  163. package/scripts/utils/__tests__/config-loader.test.ts +149 -0
  164. package/scripts/utils/__tests__/config-validator.test.ts +106 -6
  165. package/scripts/utils/__tests__/env-config.test.ts +0 -2
  166. package/scripts/utils/__tests__/multi-repo-validator.test.ts +335 -0
  167. package/scripts/utils/__tests__/project-meta.test.ts +192 -0
  168. package/scripts/utils/__tests__/security-validator.test.ts +272 -0
  169. package/scripts/utils/config-loader.ts +429 -56
  170. package/scripts/utils/env-config.ts +2 -14
  171. package/scripts/utils/multi-repo-validator.ts +141 -0
  172. package/scripts/utils/project-meta.ts +27 -0
  173. package/scripts/utils/security-validator.ts +286 -0
  174. package/scripts/utils/spec-archiver.ts +260 -0
  175. package/scripts/utils/spec-updater.ts +4 -0
  176. package/templates/claude/agents/pr-size-monitor/AGENT.md +330 -0
  177. package/templates/claude/commands/kiro/kiro-spec-impl.md +1 -1
  178. package/templates/claude/commands/michi/spec-impl.md +208 -35
  179. package/templates/claude-agent/commands/kiro/kiro-spec-impl.md +1 -1
  180. package/templates/cursor/commands/kiro/kiro-spec-impl.md +1 -1
  181. package/templates/multi-repo/docs/ci-status.md +51 -0
  182. package/templates/multi-repo/docs/release-notes.md +99 -0
  183. package/templates/multi-repo/overview/architecture.md +102 -0
  184. package/templates/multi-repo/overview/requirements.md +68 -0
  185. package/templates/multi-repo/overview/sequence.md +79 -0
  186. package/templates/multi-repo/steering/multi-repo.md +74 -0
  187. package/templates/multi-repo/tests/strategy.md +89 -0
  188. package/dist/scripts/__tests__/create-project.test.d.ts +0 -2
  189. package/dist/scripts/__tests__/create-project.test.d.ts.map +0 -1
  190. package/dist/scripts/__tests__/create-project.test.js +0 -243
  191. package/dist/scripts/__tests__/create-project.test.js.map +0 -1
  192. package/dist/scripts/__tests__/jira-transitions.test.d.ts +0 -5
  193. package/dist/scripts/__tests__/jira-transitions.test.d.ts.map +0 -1
  194. package/dist/scripts/__tests__/jira-transitions.test.js +0 -172
  195. package/dist/scripts/__tests__/jira-transitions.test.js.map +0 -1
  196. package/dist/scripts/__tests__/multi-project-estimate.test.d.ts +0 -2
  197. package/dist/scripts/__tests__/multi-project-estimate.test.d.ts.map +0 -1
  198. package/dist/scripts/__tests__/multi-project-estimate.test.js +0 -118
  199. package/dist/scripts/__tests__/multi-project-estimate.test.js.map +0 -1
  200. package/dist/scripts/__tests__/setup-existing-project.test.d.ts +0 -2
  201. package/dist/scripts/__tests__/setup-existing-project.test.d.ts.map +0 -1
  202. package/dist/scripts/__tests__/setup-existing-project.test.js +0 -208
  203. package/dist/scripts/__tests__/setup-existing-project.test.js.map +0 -1
  204. package/dist/scripts/__tests__/setup-interactive.test.d.ts +0 -2
  205. package/dist/scripts/__tests__/setup-interactive.test.d.ts.map +0 -1
  206. package/dist/scripts/__tests__/setup-interactive.test.js +0 -166
  207. package/dist/scripts/__tests__/setup-interactive.test.js.map +0 -1
  208. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts +0 -5
  209. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts.map +0 -1
  210. package/dist/scripts/__tests__/spec-impl-workflow.test.js +0 -321
  211. package/dist/scripts/__tests__/spec-impl-workflow.test.js.map +0 -1
  212. package/dist/scripts/__tests__/spec-loader.test.d.ts +0 -5
  213. package/dist/scripts/__tests__/spec-loader.test.d.ts.map +0 -1
  214. package/dist/scripts/__tests__/spec-loader.test.js +0 -153
  215. package/dist/scripts/__tests__/spec-loader.test.js.map +0 -1
  216. package/dist/scripts/__tests__/validate-phase.test.d.ts +0 -5
  217. package/dist/scripts/__tests__/validate-phase.test.d.ts.map +0 -1
  218. package/dist/scripts/__tests__/validate-phase.test.js +0 -249
  219. package/dist/scripts/__tests__/validate-phase.test.js.map +0 -1
  220. package/dist/scripts/constants/__tests__/environments.test.d.ts +0 -2
  221. package/dist/scripts/constants/__tests__/environments.test.d.ts.map +0 -1
  222. package/dist/scripts/constants/__tests__/environments.test.js +0 -125
  223. package/dist/scripts/constants/__tests__/environments.test.js.map +0 -1
  224. package/dist/scripts/constants/__tests__/languages.test.d.ts +0 -2
  225. package/dist/scripts/constants/__tests__/languages.test.d.ts.map +0 -1
  226. package/dist/scripts/constants/__tests__/languages.test.js +0 -82
  227. package/dist/scripts/constants/__tests__/languages.test.js.map +0 -1
  228. package/dist/scripts/create-project.d.ts +0 -16
  229. package/dist/scripts/create-project.d.ts.map +0 -1
  230. package/dist/scripts/create-project.js +0 -334
  231. package/dist/scripts/create-project.js.map +0 -1
  232. package/dist/scripts/list-projects.d.ts +0 -7
  233. package/dist/scripts/list-projects.d.ts.map +0 -1
  234. package/dist/scripts/list-projects.js +0 -88
  235. package/dist/scripts/list-projects.js.map +0 -1
  236. package/dist/scripts/template/__tests__/renderer.test.d.ts +0 -2
  237. package/dist/scripts/template/__tests__/renderer.test.d.ts.map +0 -1
  238. package/dist/scripts/template/__tests__/renderer.test.js +0 -165
  239. package/dist/scripts/template/__tests__/renderer.test.js.map +0 -1
  240. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts +0 -5
  241. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts.map +0 -1
  242. package/dist/scripts/utils/__tests__/aidlc-parser.test.js +0 -315
  243. package/dist/scripts/utils/__tests__/aidlc-parser.test.js.map +0 -1
  244. package/dist/scripts/utils/__tests__/business-days.test.d.ts +0 -5
  245. package/dist/scripts/utils/__tests__/business-days.test.d.ts.map +0 -1
  246. package/dist/scripts/utils/__tests__/business-days.test.js +0 -171
  247. package/dist/scripts/utils/__tests__/business-days.test.js.map +0 -1
  248. package/dist/scripts/utils/__tests__/config-loader.test.d.ts +0 -5
  249. package/dist/scripts/utils/__tests__/config-loader.test.d.ts.map +0 -1
  250. package/dist/scripts/utils/__tests__/config-loader.test.js +0 -201
  251. package/dist/scripts/utils/__tests__/config-loader.test.js.map +0 -1
  252. package/dist/scripts/utils/__tests__/config-validator.test.d.ts +0 -5
  253. package/dist/scripts/utils/__tests__/config-validator.test.d.ts.map +0 -1
  254. package/dist/scripts/utils/__tests__/config-validator.test.js +0 -394
  255. package/dist/scripts/utils/__tests__/config-validator.test.js.map +0 -1
  256. package/dist/scripts/utils/__tests__/env-config.test.d.ts +0 -5
  257. package/dist/scripts/utils/__tests__/env-config.test.d.ts.map +0 -1
  258. package/dist/scripts/utils/__tests__/env-config.test.js +0 -218
  259. package/dist/scripts/utils/__tests__/env-config.test.js.map +0 -1
  260. package/dist/scripts/utils/__tests__/feature-name-validator.test.d.ts +0 -5
  261. package/dist/scripts/utils/__tests__/feature-name-validator.test.d.ts.map +0 -1
  262. package/dist/scripts/utils/__tests__/feature-name-validator.test.js +0 -106
  263. package/dist/scripts/utils/__tests__/feature-name-validator.test.js.map +0 -1
  264. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts +0 -5
  265. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts.map +0 -1
  266. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js +0 -202
  267. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js.map +0 -1
  268. package/dist/scripts/utils/__tests__/spec-updater.test.d.ts +0 -5
  269. package/dist/scripts/utils/__tests__/spec-updater.test.d.ts.map +0 -1
  270. package/dist/scripts/utils/__tests__/spec-updater.test.js +0 -158
  271. package/dist/scripts/utils/__tests__/spec-updater.test.js.map +0 -1
  272. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts +0 -5
  273. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts.map +0 -1
  274. package/dist/scripts/utils/__tests__/tasks-converter.test.js +0 -500
  275. package/dist/scripts/utils/__tests__/tasks-converter.test.js.map +0 -1
  276. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts +0 -5
  277. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts.map +0 -1
  278. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js +0 -314
  279. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js.map +0 -1
  280. package/dist/scripts/utils/__tests__/test-runner.test.d.ts +0 -5
  281. package/dist/scripts/utils/__tests__/test-runner.test.d.ts.map +0 -1
  282. package/dist/scripts/utils/__tests__/test-runner.test.js +0 -64
  283. package/dist/scripts/utils/__tests__/test-runner.test.js.map +0 -1
  284. package/dist/src/__tests__/cli.test.d.ts +0 -5
  285. package/dist/src/__tests__/cli.test.d.ts.map +0 -1
  286. package/dist/src/__tests__/cli.test.js +0 -58
  287. package/dist/src/__tests__/cli.test.js.map +0 -1
  288. package/dist/src/__tests__/integration/internationalization.test.d.ts +0 -8
  289. package/dist/src/__tests__/integration/internationalization.test.d.ts.map +0 -1
  290. package/dist/src/__tests__/integration/internationalization.test.js +0 -333
  291. package/dist/src/__tests__/integration/internationalization.test.js.map +0 -1
  292. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +0 -5
  293. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts.map +0 -1
  294. package/dist/src/__tests__/integration/setup/claude-agent.test.js +0 -122
  295. package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +0 -1
  296. package/dist/src/__tests__/integration/setup/claude.test.d.ts +0 -5
  297. package/dist/src/__tests__/integration/setup/claude.test.d.ts.map +0 -1
  298. package/dist/src/__tests__/integration/setup/claude.test.js +0 -193
  299. package/dist/src/__tests__/integration/setup/claude.test.js.map +0 -1
  300. package/dist/src/__tests__/integration/setup/cursor.test.d.ts +0 -5
  301. package/dist/src/__tests__/integration/setup/cursor.test.d.ts.map +0 -1
  302. package/dist/src/__tests__/integration/setup/cursor.test.js +0 -166
  303. package/dist/src/__tests__/integration/setup/cursor.test.js.map +0 -1
  304. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts +0 -32
  305. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts.map +0 -1
  306. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js +0 -72
  307. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js.map +0 -1
  308. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts +0 -38
  309. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts.map +0 -1
  310. package/dist/src/__tests__/integration/setup/helpers/test-project.js +0 -83
  311. package/dist/src/__tests__/integration/setup/helpers/test-project.js.map +0 -1
  312. package/dist/src/__tests__/integration/setup/init.test.d.ts +0 -5
  313. package/dist/src/__tests__/integration/setup/init.test.d.ts.map +0 -1
  314. package/dist/src/__tests__/integration/setup/init.test.js +0 -352
  315. package/dist/src/__tests__/integration/setup/init.test.js.map +0 -1
  316. package/dist/src/__tests__/integration/setup/validation.test.d.ts +0 -5
  317. package/dist/src/__tests__/integration/setup/validation.test.d.ts.map +0 -1
  318. package/dist/src/__tests__/integration/setup/validation.test.js +0 -301
  319. package/dist/src/__tests__/integration/setup/validation.test.js.map +0 -1
  320. package/scripts/create-project.ts +0 -386
  321. package/scripts/list-projects.ts +0 -112
@@ -1,386 +0,0 @@
1
- #!/usr/bin/env tsx
2
- /**
3
- * 新規プロジェクト自動セットアップスクリプト
4
- *
5
- * Issue #35: cc-sdd準拠の多環境対応基盤
6
- * - templates/ディレクトリから読み込み
7
- * - プレースホルダーはそのまま(実行時にAIが解釈)
8
- *
9
- * 使い方:
10
- * npm run create-project -- \
11
- * --name "20240115-payment-api" \
12
- * --project-name "プロジェクトA" \
13
- * --jira-key "PRJA"
14
- */
15
-
16
- import { execSync } from 'child_process';
17
- import { writeFileSync, mkdirSync, cpSync, existsSync } from 'fs';
18
- import { resolve, join, dirname, basename } from 'path';
19
- import { fileURLToPath } from 'url';
20
- import { config as loadDotenv } from 'dotenv';
21
- import { findTemplateFile, validateRequiredTemplates } from './utils/template-finder.js';
22
-
23
- // ESモジュール対応: __dirnameの代替
24
- const __filename = fileURLToPath(import.meta.url);
25
- const __dirname = dirname(__filename);
26
-
27
- loadDotenv();
28
-
29
- interface ProjectConfig {
30
- name: string; // リポジトリ名: 20240115-payment-api
31
- projectName: string; // 表示名: プロジェクトA
32
- jiraKey: string; // JIRAキー: PRJA
33
- org?: string; // GitHub組織名(デフォルト: .envから)
34
- labels?: string[]; // Confluenceラベル(デフォルト: 自動生成)
35
- }
36
-
37
- function parseArgs(): ProjectConfig {
38
- const args = process.argv.slice(2);
39
- const config: Partial<ProjectConfig> = {};
40
-
41
- for (let i = 0; i < args.length; i += 2) {
42
- const key = args[i].replace(/^--/, '');
43
- const value = args[i + 1];
44
-
45
- switch (key) {
46
- case 'name':
47
- config.name = value;
48
- break;
49
- case 'project-name':
50
- config.projectName = value;
51
- break;
52
- case 'jira-key':
53
- config.jiraKey = value;
54
- break;
55
- case 'org':
56
- config.org = value;
57
- break;
58
- case 'labels':
59
- // カンマ区切りでラベル配列に変換
60
- config.labels = value.split(',').map(l => l.trim());
61
- break;
62
- }
63
- }
64
-
65
- // 必須フィールドチェック
66
- if (!config.name || !config.projectName || !config.jiraKey) {
67
- console.error('Missing required parameters');
68
- console.error('Usage: npm run create-project -- --name <name> --project-name <display> --jira-key <key>');
69
- process.exit(1);
70
- }
71
-
72
- return config as ProjectConfig;
73
- }
74
-
75
- /**
76
- * jj/git の依存性をチェックし、利用可能なVCSを返す
77
- */
78
- function checkDependencies(): { vcs: 'jj' | 'git'; version: string } {
79
- try {
80
- const jjVersion = execSync('jj --version', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
81
- return { vcs: 'jj', version: jjVersion };
82
- } catch {
83
- try {
84
- const gitVersion = execSync('git --version', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
85
- return { vcs: 'git', version: gitVersion };
86
- } catch {
87
- console.error('❌ Neither jj nor git is installed');
88
- console.error(' Please install jj (https://github.com/martinvonz/jj) or git');
89
- process.exit(1);
90
- }
91
- }
92
- }
93
-
94
- async function createProject(config: ProjectConfig): Promise<void> {
95
- const org = config.org || process.env.GITHUB_ORG;
96
-
97
- if (!org) {
98
- console.error('❌ GitHub organization not specified');
99
- console.error(' Set GITHUB_ORG in .env or use --org parameter');
100
- process.exit(1);
101
- }
102
-
103
- const repoName = config.name;
104
- const repoUrl = `https://github.com/${org}/${repoName}`;
105
- const projectDir = resolve(`../${repoName}`);
106
-
107
- // VCS依存性チェック
108
- const deps = checkDependencies();
109
-
110
- console.log(`🚀 Creating new project: ${config.projectName}`);
111
- console.log(` Repository: ${org}/${repoName}`);
112
- console.log(` JIRA: ${config.jiraKey}`);
113
- console.log(` VCS: ${deps.vcs} (${deps.version})`);
114
- console.log('');
115
-
116
- // Step 1: GitHubリポジトリ作成
117
- console.log('📦 Step 1: Creating GitHub repository...');
118
- try {
119
- execSync(
120
- `gh repo create ${org}/${repoName} --private --description "${config.projectName}"`,
121
- { stdio: 'inherit' }
122
- );
123
- console.log(' ✅ Repository created');
124
- } catch {
125
- console.log(' ⚠️ Repository may already exist');
126
- }
127
-
128
- // Step 2: リポジトリクローン
129
- console.log('\n📥 Step 2: Cloning repository...');
130
- try {
131
- if (deps.vcs === 'jj') {
132
- execSync(`jj git clone ${repoUrl} ${projectDir}`, { stdio: 'inherit' });
133
- } else {
134
- execSync(`git clone ${repoUrl} ${projectDir}`, { stdio: 'inherit' });
135
- }
136
- console.log(' ✅ Repository cloned');
137
- } catch {
138
- console.log(' ⚠️ Clone failed, checking if directory exists...');
139
- }
140
-
141
- // Step 3: ディレクトリ存在確認と移動
142
- if (!existsSync(projectDir)) {
143
- console.error(' ❌ Project directory does not exist. Clone may have failed.');
144
- console.error(` Expected directory: ${projectDir}`);
145
- process.exit(1);
146
- }
147
-
148
- // 元の作業ディレクトリを保存
149
- const originalCwd = process.cwd();
150
-
151
- try {
152
- process.chdir(projectDir);
153
- console.log(` 📂 Working directory: ${projectDir}`);
154
-
155
- // Step 4: projects/ディレクトリとプロジェクトディレクトリを作成
156
- console.log('\n📁 Step 4: Creating project directory structure...');
157
- const projectsDir = join(projectDir, 'projects');
158
- const actualProjectDir = join(projectsDir, repoName);
159
- mkdirSync(actualProjectDir, { recursive: true });
160
- console.log(` ✅ Project directory created: ${actualProjectDir}`);
161
-
162
- // Step 5: プロジェクトディレクトリに移動
163
- process.chdir(actualProjectDir);
164
- console.log(` 📂 Working directory: ${actualProjectDir}`);
165
-
166
- // Step 6: cc-sdd導入
167
- console.log('\n⚙️ Step 6: Installing cc-sdd...');
168
- execSync('npx cc-sdd@latest --cursor --lang ja --yes', { stdio: 'inherit' });
169
- console.log(' ✅ cc-sdd installed');
170
-
171
- // Step 7: .kiro/project.json 作成
172
- console.log('\n📝 Step 7: Creating project metadata...');
173
- mkdirSync('.kiro', { recursive: true });
174
-
175
- // ラベル生成(安全なフォールバック付き)
176
- const labels = config.labels || (() => {
177
- // プロジェクトIDからプロジェクトラベル生成
178
- const projectLabel = repoName.toLowerCase().replace(/[^a-z0-9-]/g, '');
179
- const labelSet = new Set([`project:${projectLabel}`]);
180
-
181
- // ハイフンが存在する場合のみサービスラベルを生成
182
- if (repoName.includes('-')) {
183
- const parts = repoName.split('-');
184
- const servicePart = parts[parts.length - 1];
185
- const serviceLabel = servicePart.toLowerCase().replace(/[^a-z0-9-]/g, '');
186
-
187
- // サービスラベルがプロジェクトラベルと異なる場合のみ追加
188
- if (serviceLabel !== projectLabel) {
189
- labelSet.add(`service:${serviceLabel}`);
190
- }
191
- }
192
-
193
- return Array.from(labelSet);
194
- })();
195
-
196
- const projectJson = {
197
- projectId: repoName,
198
- projectName: config.projectName,
199
- jiraProjectKey: config.jiraKey,
200
- confluenceLabels: labels,
201
- status: 'active',
202
- team: [],
203
- stakeholders: ['@企画', '@部長'],
204
- repository: repoUrl,
205
- description: `${config.projectName}の開発`
206
- };
207
-
208
- writeFileSync('.kiro/project.json', JSON.stringify(projectJson, null, 2));
209
- console.log(' ✅ project.json created');
210
-
211
- // Step 8: Michiから共通ファイルをコピー(templates/から)
212
- console.log('\n📋 Step 8: Copying common files from Michi templates...');
213
- console.log(' ℹ️ Issue #35: cc-sdd compliant approach (placeholders preserved)');
214
- const michiPath = resolve(__dirname, '..');
215
-
216
- // 必須テンプレートのバリデーション
217
- const requiredTemplates = [
218
- 'rules/github-ssot.mdc',
219
- 'rules/multi-project.mdc',
220
- 'commands/michi/confluence-sync.md',
221
- 'commands/michi/project-switch.md'
222
- ];
223
-
224
- try {
225
- validateRequiredTemplates(michiPath, requiredTemplates);
226
- } catch (error) {
227
- console.error('\n❌ Template validation failed:');
228
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
229
- process.exit(1);
230
- }
231
-
232
- // コピー先ディレクトリを事前に作成(actualProjectDir 配下に作成)
233
- console.log(` 📂 Copying to: ${actualProjectDir}`);
234
- mkdirSync(join(actualProjectDir, '.cursor/rules'), { recursive: true });
235
- mkdirSync(join(actualProjectDir, '.cursor/commands/michi'), { recursive: true });
236
- mkdirSync(join(actualProjectDir, '.kiro/steering'), { recursive: true });
237
- mkdirSync(join(actualProjectDir, '.kiro/settings/templates'), { recursive: true });
238
- mkdirSync(join(actualProjectDir, 'scripts/utils'), { recursive: true });
239
-
240
- // ルールファイル(templates/から)
241
- const rulesToCopy = [
242
- 'rules/multi-project.mdc',
243
- 'rules/github-ssot.mdc',
244
- 'rules/atlassian-mcp.mdc'
245
- ];
246
-
247
- for (const rulePath of rulesToCopy) {
248
- const src = findTemplateFile(michiPath, rulePath);
249
- const fileName = basename(rulePath);
250
- const dest = join(actualProjectDir, '.cursor/rules', fileName);
251
-
252
- if (src) {
253
- cpSync(src, dest);
254
- console.log(` ✅ Copied: .cursor/rules/${fileName} (from templates/)`);
255
- } else {
256
- console.log(` ⚠️ ${fileName} not found in templates/`);
257
- }
258
- }
259
-
260
- // カスタムコマンド(templates/から)
261
- const commandsToCopy = [
262
- 'commands/michi/confluence-sync.md',
263
- 'commands/michi/project-switch.md'
264
- ];
265
-
266
- for (const cmdPath of commandsToCopy) {
267
- const src = findTemplateFile(michiPath, cmdPath);
268
- const fileName = basename(cmdPath);
269
- const dest = join(actualProjectDir, '.cursor/commands/michi', fileName);
270
-
271
- if (src) {
272
- cpSync(src, dest);
273
- console.log(` ✅ Copied: .cursor/commands/michi/${fileName} (from templates/)`);
274
- } else {
275
- console.log(` ⚠️ ${fileName} not found in templates/`);
276
- }
277
- }
278
-
279
- // Steering
280
- const steeringDir = join(michiPath, '.kiro/steering');
281
- if (existsSync(steeringDir)) {
282
- const destSteeringDir = join(actualProjectDir, '.kiro/steering');
283
- mkdirSync(destSteeringDir, { recursive: true });
284
- cpSync(steeringDir, destSteeringDir, { recursive: true });
285
- console.log(' ✅ Copied: .kiro/steering/');
286
- }
287
-
288
- // Scripts(必要なスクリプトのみコピー)
289
- const scriptsDir = join(michiPath, 'scripts');
290
- if (existsSync(scriptsDir)) {
291
- const scriptsToCopy = [
292
- 'confluence-sync.ts',
293
- 'jira-sync.ts',
294
- 'pr-automation.ts',
295
- 'markdown-to-confluence.ts',
296
- 'workflow-orchestrator.ts',
297
- 'list-projects.ts',
298
- 'resource-dashboard.ts',
299
- 'multi-project-estimate.ts',
300
- 'utils/project-meta.ts'
301
- ];
302
-
303
- for (const script of scriptsToCopy) {
304
- const src = join(scriptsDir, script);
305
- const dest = join(actualProjectDir, 'scripts', script);
306
- if (existsSync(src)) {
307
- // ディレクトリが必要な場合は作成
308
- const destDir = dirname(dest);
309
- mkdirSync(destDir, { recursive: true });
310
- cpSync(src, dest);
311
- console.log(` ✅ Copied: scripts/${script}`);
312
- }
313
- }
314
- }
315
-
316
- // package.json, tsconfig.jsonをリポジトリルートにコピー
317
- ['package.json', 'tsconfig.json'].forEach(file => {
318
- const src = join(michiPath, file);
319
- const dest = join(projectDir, file); // リポジトリルートにコピー
320
- if (existsSync(src)) {
321
- cpSync(src, dest);
322
- console.log(` ✅ Copied: ${file} (to repository root)`);
323
- }
324
- });
325
-
326
- // Step 9: npm install(リポジトリルートで実行)
327
- // 注意: setup:env は bash スクリプトなので依存関係不要だが、
328
- // 将来的に setup:env が tsx やローカルスクリプトに依存する場合は
329
- // npm install を先に実行する必要があるため、順序を入れ替え
330
- console.log('\n📦 Step 9: Installing dependencies...');
331
- process.chdir(projectDir);
332
- execSync('npm install', { stdio: 'inherit' });
333
- console.log(' ✅ Dependencies installed');
334
-
335
- // Step 10: .env テンプレート作成(プロジェクトディレクトリで実行)
336
- console.log('\n🔐 Step 10: Creating .env template...');
337
- // package.jsonはprojectDirにあるため、そこで実行
338
- execSync('npm run setup:env', { cwd: actualProjectDir, stdio: 'inherit' });
339
- console.log(' ✅ .env created');
340
-
341
- // Step 11: 初期コミット
342
- console.log('\n💾 Step 11: Creating initial commit...');
343
-
344
- const commitMessage = `chore: プロジェクト初期化
345
-
346
- - cc-sdd導入
347
- - プロジェクトメタデータ設定(${config.jiraKey})
348
- - 自動化スクリプト追加
349
- - Confluence/JIRA連携設定`;
350
-
351
- if (deps.vcs === 'jj') {
352
- execSync(`jj commit -m "${commitMessage}"`, { stdio: 'inherit' });
353
- execSync('jj bookmark create main -r "@-"', { stdio: 'inherit' });
354
- } else {
355
- execSync('git add .', { stdio: 'inherit' });
356
- execSync(`git commit -m "${commitMessage}"`, { stdio: 'inherit' });
357
- execSync('git branch -M main', { stdio: 'inherit' });
358
- }
359
- console.log(' ✅ Initial commit created');
360
-
361
- // 完了メッセージ
362
- console.log('\n');
363
- console.log('🎉 プロジェクトセットアップ完了!');
364
- console.log('');
365
- console.log('次のステップ:');
366
- console.log(` 1. cd ${actualProjectDir}`);
367
- console.log(' 2. .env ファイルを編集して認証情報を設定');
368
- console.log(' 3. jj git push --bookmark main --allow-new');
369
- console.log(' 4. Cursor で開く: cursor .');
370
- console.log(' 5. /kiro:spec-init <機能説明> で開発開始');
371
- console.log('');
372
- console.log('詳細: docs/getting-started/new-repository-setup.md');
373
-
374
- } finally {
375
- // 元の作業ディレクトリに戻る
376
- process.chdir(originalCwd);
377
- }
378
- }
379
-
380
- // 実行
381
- const config = parseArgs();
382
- createProject(config).catch(error => {
383
- console.error('❌ Error:', error.message);
384
- process.exit(1);
385
- });
386
-
@@ -1,112 +0,0 @@
1
- /**
2
- * プロジェクト一覧ツール
3
- * 全リポジトリのプロジェクト情報を表示
4
- */
5
-
6
- import { Octokit } from '@octokit/rest';
7
- import { config } from 'dotenv';
8
-
9
- config();
10
-
11
- interface ProjectInfo {
12
- name: string;
13
- projectId: string;
14
- status: string;
15
- jiraKey: string;
16
- team: string[];
17
- }
18
-
19
- async function listProjects(): Promise<void> {
20
- const token = process.env.GITHUB_TOKEN;
21
- const org = process.env.GITHUB_ORG;
22
-
23
- if (!token || !org) {
24
- throw new Error('Missing GitHub credentials');
25
- }
26
-
27
- const octokit = new Octokit({ auth: token });
28
-
29
- console.log(`Fetching projects for organization: ${org}`);
30
-
31
- // ページネーション対応:全リポジトリを取得
32
- const repos = await octokit.paginate(octokit.repos.listForOrg, {
33
- org,
34
- per_page: 100
35
- });
36
-
37
- console.log(`Found ${repos.length} repositories`);
38
-
39
- const projects: ProjectInfo[] = [];
40
-
41
- for (const repo of repos) {
42
- try {
43
- // ページネーション対応:projects/ディレクトリの全コンテンツを取得
44
- const projectsDir = await octokit.paginate('GET /repos/{owner}/{repo}/contents/{path}', {
45
- owner: org,
46
- repo: repo.name,
47
- path: 'projects',
48
- per_page: 100
49
- });
50
-
51
- if (Array.isArray(projectsDir)) {
52
- // projects/配下の各プロジェクトディレクトリを処理
53
- for (const projectEntry of projectsDir) {
54
- if (typeof projectEntry === 'object' && projectEntry !== null && 'type' in projectEntry && projectEntry.type === 'dir' && 'name' in projectEntry) {
55
- try {
56
- // projects/{project-id}/.kiro/project.json を取得
57
- const { data } = await octokit.repos.getContent({
58
- owner: org,
59
- repo: repo.name,
60
- path: `projects/${(projectEntry as { name: string }).name}/.kiro/project.json`
61
- });
62
-
63
- if ('content' in data) {
64
- const content = Buffer.from(data.content, 'base64').toString('utf-8');
65
- const projectMeta = JSON.parse(content);
66
-
67
- projects.push({
68
- name: projectMeta.projectName,
69
- projectId: projectMeta.projectId,
70
- status: projectMeta.status,
71
- jiraKey: projectMeta.jiraProjectKey,
72
- team: projectMeta.team
73
- });
74
- }
75
- } catch (error) {
76
- // プロジェクトディレクトリに.kiro/project.jsonがない場合はスキップ
77
- console.warn(`⚠️ Skipping project ${(projectEntry as { name: string }).name} in ${repo.name}:`, error instanceof Error ? error.message : 'Unknown error');
78
- continue;
79
- }
80
- }
81
- }
82
- }
83
- } catch (error) {
84
- // projects/ディレクトリが存在しない、または API エラーの場合はスキップ
85
- console.warn(`⚠️ Skipping ${repo.name}:`, error instanceof Error ? error.message : 'Unknown error');
86
- continue;
87
- }
88
- }
89
-
90
- console.log('\n📋 プロジェクト一覧:\n');
91
- console.log('| プロジェクト | ID | ステータス | JIRA | チーム |');
92
- console.log('|------------|-------|----------|------|--------|');
93
-
94
- for (const project of projects) {
95
- console.log(`| ${project.name} | ${project.projectId} | ${project.status} | ${project.jiraKey} | ${project.team.join(', ')} |`);
96
- }
97
-
98
- console.log(`\n合計: ${projects.length} プロジェクト`);
99
- }
100
-
101
- // CLI実行
102
- if (import.meta.url === `file://${process.argv[1]}`) {
103
- listProjects()
104
- .then(() => process.exit(0))
105
- .catch((error) => {
106
- console.error('❌ Failed:', error.message);
107
- process.exit(1);
108
- });
109
- }
110
-
111
- export { listProjects };
112
-