@sk8metal/michi-cli 0.5.0 → 0.8.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 (284) hide show
  1. package/CHANGELOG.md +136 -1
  2. package/README.md +2 -1
  3. package/dist/scripts/config/config-schema.d.ts +35 -0
  4. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  5. package/dist/scripts/config/config-schema.js +56 -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/template/multi-repo-renderer.d.ts +67 -0
  26. package/dist/scripts/template/multi-repo-renderer.d.ts.map +1 -0
  27. package/dist/scripts/template/multi-repo-renderer.js +123 -0
  28. package/dist/scripts/template/multi-repo-renderer.js.map +1 -0
  29. package/dist/scripts/template/renderer.d.ts +4 -0
  30. package/dist/scripts/template/renderer.d.ts.map +1 -1
  31. package/dist/scripts/template/renderer.js.map +1 -1
  32. package/dist/scripts/test-execution-generator.d.ts.map +1 -1
  33. package/dist/scripts/test-execution-generator.js +94 -11
  34. package/dist/scripts/test-execution-generator.js.map +1 -1
  35. package/dist/scripts/test-script-runner.d.ts +33 -0
  36. package/dist/scripts/test-script-runner.d.ts.map +1 -0
  37. package/dist/scripts/test-script-runner.js +77 -0
  38. package/dist/scripts/test-script-runner.js.map +1 -0
  39. package/dist/scripts/utils/config-loader.d.ts +21 -1
  40. package/dist/scripts/utils/config-loader.d.ts.map +1 -1
  41. package/dist/scripts/utils/config-loader.js +149 -3
  42. package/dist/scripts/utils/config-loader.js.map +1 -1
  43. package/dist/scripts/utils/multi-repo-validator.d.ts +30 -0
  44. package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -0
  45. package/dist/scripts/utils/multi-repo-validator.js +105 -0
  46. package/dist/scripts/utils/multi-repo-validator.js.map +1 -0
  47. package/dist/scripts/utils/spec-archiver.d.ts +38 -0
  48. package/dist/scripts/utils/spec-archiver.d.ts.map +1 -0
  49. package/dist/scripts/utils/spec-archiver.js +210 -0
  50. package/dist/scripts/utils/spec-archiver.js.map +1 -0
  51. package/dist/scripts/utils/spec-updater.d.ts +4 -0
  52. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  53. package/dist/scripts/utils/spec-updater.js.map +1 -1
  54. package/dist/src/cli.d.ts.map +1 -1
  55. package/dist/src/cli.js +262 -14
  56. package/dist/src/cli.js.map +1 -1
  57. package/dist/src/commands/multi-repo-add-repo.d.ts +26 -0
  58. package/dist/src/commands/multi-repo-add-repo.d.ts.map +1 -0
  59. package/dist/src/commands/multi-repo-add-repo.js +56 -0
  60. package/dist/src/commands/multi-repo-add-repo.js.map +1 -0
  61. package/dist/src/commands/multi-repo-ci-status.d.ts +46 -0
  62. package/dist/src/commands/multi-repo-ci-status.d.ts.map +1 -0
  63. package/dist/src/commands/multi-repo-ci-status.js +285 -0
  64. package/dist/src/commands/multi-repo-ci-status.js.map +1 -0
  65. package/dist/src/commands/multi-repo-confluence-sync.d.ts +45 -0
  66. package/dist/src/commands/multi-repo-confluence-sync.d.ts.map +1 -0
  67. package/dist/src/commands/multi-repo-confluence-sync.js +135 -0
  68. package/dist/src/commands/multi-repo-confluence-sync.js.map +1 -0
  69. package/dist/src/commands/multi-repo-init.d.ts +26 -0
  70. package/dist/src/commands/multi-repo-init.d.ts.map +1 -0
  71. package/dist/src/commands/multi-repo-init.js +101 -0
  72. package/dist/src/commands/multi-repo-init.js.map +1 -0
  73. package/dist/src/commands/multi-repo-list.d.ts +28 -0
  74. package/dist/src/commands/multi-repo-list.d.ts.map +1 -0
  75. package/dist/src/commands/multi-repo-list.js +38 -0
  76. package/dist/src/commands/multi-repo-list.js.map +1 -0
  77. package/dist/src/commands/multi-repo-test.d.ts +56 -0
  78. package/dist/src/commands/multi-repo-test.d.ts.map +1 -0
  79. package/dist/src/commands/multi-repo-test.js +70 -0
  80. package/dist/src/commands/multi-repo-test.js.map +1 -0
  81. package/dist/src/commands/setup-existing.d.ts.map +1 -1
  82. package/dist/src/commands/setup-existing.js +30 -8
  83. package/dist/src/commands/setup-existing.js.map +1 -1
  84. package/dist/src/commands/spec-archive.d.ts +17 -0
  85. package/dist/src/commands/spec-archive.d.ts.map +1 -0
  86. package/dist/src/commands/spec-archive.js +40 -0
  87. package/dist/src/commands/spec-archive.js.map +1 -0
  88. package/dist/src/commands/spec-list.d.ts +15 -0
  89. package/dist/src/commands/spec-list.d.ts.map +1 -0
  90. package/dist/src/commands/spec-list.js +55 -0
  91. package/dist/src/commands/spec-list.js.map +1 -0
  92. package/docs/user-guide/guides/multi-repo-guide.md +591 -0
  93. package/docs/user-guide/guides/multi-repo-migration-guide.md +516 -0
  94. package/docs/user-guide/reference/multi-repo-api.md +771 -0
  95. package/docs/user-guide/reference/quick-reference.md +22 -37
  96. package/package.json +1 -4
  97. package/scripts/__tests__/config-loader-multi-repo.test.ts +342 -0
  98. package/scripts/__tests__/github-actions-client.test.ts +543 -0
  99. package/scripts/__tests__/health-check-service.test.ts +142 -0
  100. package/scripts/__tests__/markdown-to-confluence.test.ts +262 -0
  101. package/scripts/__tests__/mermaid-converter.test.ts +236 -0
  102. package/scripts/__tests__/multi-repo-config-schema.test.ts +335 -0
  103. package/scripts/__tests__/multi-repo-validator.test.ts +524 -0
  104. package/scripts/__tests__/spec-archiver.test.ts +512 -0
  105. package/scripts/__tests__/test-script-runner.test.ts +217 -0
  106. package/scripts/config/config-schema.ts +64 -0
  107. package/scripts/confluence-sync.ts +16 -2
  108. package/scripts/github-actions-client.ts +258 -0
  109. package/scripts/health-check-service.ts +171 -0
  110. package/scripts/markdown-to-confluence.ts +37 -6
  111. package/scripts/mermaid-converter.ts +56 -0
  112. package/scripts/template/__tests__/multi-repo-renderer.test.ts +261 -0
  113. package/scripts/template/multi-repo-renderer.ts +172 -0
  114. package/scripts/template/renderer.ts +5 -0
  115. package/scripts/test-execution-generator.ts +104 -11
  116. package/scripts/test-script-runner.ts +130 -0
  117. package/scripts/utils/__tests__/config-validator.test.ts +104 -6
  118. package/scripts/utils/__tests__/multi-repo-validator.test.ts +335 -0
  119. package/scripts/utils/config-loader.ts +197 -3
  120. package/scripts/utils/multi-repo-validator.ts +141 -0
  121. package/scripts/utils/spec-archiver.ts +260 -0
  122. package/scripts/utils/spec-updater.ts +4 -0
  123. package/templates/claude/agents/pr-size-monitor/AGENT.md +330 -0
  124. package/templates/claude/commands/michi/spec-impl.md +208 -35
  125. package/templates/claude-agent/agents/doc-reviewer.md +176 -0
  126. package/templates/claude-agent/rules/doc-review-rules.md +98 -0
  127. package/templates/claude-agent/rules/doc-review.md +91 -0
  128. package/templates/multi-repo/docs/ci-status.md +51 -0
  129. package/templates/multi-repo/docs/release-notes.md +99 -0
  130. package/templates/multi-repo/overview/architecture.md +102 -0
  131. package/templates/multi-repo/overview/requirements.md +68 -0
  132. package/templates/multi-repo/overview/sequence.md +79 -0
  133. package/templates/multi-repo/steering/multi-repo.md +74 -0
  134. package/templates/multi-repo/tests/strategy.md +89 -0
  135. package/dist/scripts/__tests__/create-project.test.d.ts +0 -2
  136. package/dist/scripts/__tests__/create-project.test.d.ts.map +0 -1
  137. package/dist/scripts/__tests__/create-project.test.js +0 -243
  138. package/dist/scripts/__tests__/create-project.test.js.map +0 -1
  139. package/dist/scripts/__tests__/jira-transitions.test.d.ts +0 -5
  140. package/dist/scripts/__tests__/jira-transitions.test.d.ts.map +0 -1
  141. package/dist/scripts/__tests__/jira-transitions.test.js +0 -172
  142. package/dist/scripts/__tests__/jira-transitions.test.js.map +0 -1
  143. package/dist/scripts/__tests__/multi-project-estimate.test.d.ts +0 -2
  144. package/dist/scripts/__tests__/multi-project-estimate.test.d.ts.map +0 -1
  145. package/dist/scripts/__tests__/multi-project-estimate.test.js +0 -118
  146. package/dist/scripts/__tests__/multi-project-estimate.test.js.map +0 -1
  147. package/dist/scripts/__tests__/setup-existing-project.test.d.ts +0 -2
  148. package/dist/scripts/__tests__/setup-existing-project.test.d.ts.map +0 -1
  149. package/dist/scripts/__tests__/setup-existing-project.test.js +0 -208
  150. package/dist/scripts/__tests__/setup-existing-project.test.js.map +0 -1
  151. package/dist/scripts/__tests__/setup-interactive.test.d.ts +0 -2
  152. package/dist/scripts/__tests__/setup-interactive.test.d.ts.map +0 -1
  153. package/dist/scripts/__tests__/setup-interactive.test.js +0 -166
  154. package/dist/scripts/__tests__/setup-interactive.test.js.map +0 -1
  155. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts +0 -5
  156. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts.map +0 -1
  157. package/dist/scripts/__tests__/spec-impl-workflow.test.js +0 -323
  158. package/dist/scripts/__tests__/spec-impl-workflow.test.js.map +0 -1
  159. package/dist/scripts/__tests__/spec-loader.test.d.ts +0 -5
  160. package/dist/scripts/__tests__/spec-loader.test.d.ts.map +0 -1
  161. package/dist/scripts/__tests__/spec-loader.test.js +0 -153
  162. package/dist/scripts/__tests__/spec-loader.test.js.map +0 -1
  163. package/dist/scripts/__tests__/validate-phase.test.d.ts +0 -5
  164. package/dist/scripts/__tests__/validate-phase.test.d.ts.map +0 -1
  165. package/dist/scripts/__tests__/validate-phase.test.js +0 -249
  166. package/dist/scripts/__tests__/validate-phase.test.js.map +0 -1
  167. package/dist/scripts/constants/__tests__/environments.test.d.ts +0 -2
  168. package/dist/scripts/constants/__tests__/environments.test.d.ts.map +0 -1
  169. package/dist/scripts/constants/__tests__/environments.test.js +0 -125
  170. package/dist/scripts/constants/__tests__/environments.test.js.map +0 -1
  171. package/dist/scripts/constants/__tests__/languages.test.d.ts +0 -2
  172. package/dist/scripts/constants/__tests__/languages.test.d.ts.map +0 -1
  173. package/dist/scripts/constants/__tests__/languages.test.js +0 -82
  174. package/dist/scripts/constants/__tests__/languages.test.js.map +0 -1
  175. package/dist/scripts/create-project.d.ts +0 -16
  176. package/dist/scripts/create-project.d.ts.map +0 -1
  177. package/dist/scripts/create-project.js +0 -334
  178. package/dist/scripts/create-project.js.map +0 -1
  179. package/dist/scripts/list-projects.d.ts +0 -7
  180. package/dist/scripts/list-projects.d.ts.map +0 -1
  181. package/dist/scripts/list-projects.js +0 -88
  182. package/dist/scripts/list-projects.js.map +0 -1
  183. package/dist/scripts/template/__tests__/renderer.test.d.ts +0 -2
  184. package/dist/scripts/template/__tests__/renderer.test.d.ts.map +0 -1
  185. package/dist/scripts/template/__tests__/renderer.test.js +0 -165
  186. package/dist/scripts/template/__tests__/renderer.test.js.map +0 -1
  187. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts +0 -5
  188. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts.map +0 -1
  189. package/dist/scripts/utils/__tests__/aidlc-parser.test.js +0 -315
  190. package/dist/scripts/utils/__tests__/aidlc-parser.test.js.map +0 -1
  191. package/dist/scripts/utils/__tests__/business-days.test.d.ts +0 -5
  192. package/dist/scripts/utils/__tests__/business-days.test.d.ts.map +0 -1
  193. package/dist/scripts/utils/__tests__/business-days.test.js +0 -171
  194. package/dist/scripts/utils/__tests__/business-days.test.js.map +0 -1
  195. package/dist/scripts/utils/__tests__/config-loader.test.d.ts +0 -5
  196. package/dist/scripts/utils/__tests__/config-loader.test.d.ts.map +0 -1
  197. package/dist/scripts/utils/__tests__/config-loader.test.js +0 -314
  198. package/dist/scripts/utils/__tests__/config-loader.test.js.map +0 -1
  199. package/dist/scripts/utils/__tests__/config-validator.test.d.ts +0 -5
  200. package/dist/scripts/utils/__tests__/config-validator.test.d.ts.map +0 -1
  201. package/dist/scripts/utils/__tests__/config-validator.test.js +0 -396
  202. package/dist/scripts/utils/__tests__/config-validator.test.js.map +0 -1
  203. package/dist/scripts/utils/__tests__/env-config.test.d.ts +0 -5
  204. package/dist/scripts/utils/__tests__/env-config.test.d.ts.map +0 -1
  205. package/dist/scripts/utils/__tests__/env-config.test.js +0 -216
  206. package/dist/scripts/utils/__tests__/env-config.test.js.map +0 -1
  207. package/dist/scripts/utils/__tests__/feature-name-validator.test.d.ts +0 -5
  208. package/dist/scripts/utils/__tests__/feature-name-validator.test.d.ts.map +0 -1
  209. package/dist/scripts/utils/__tests__/feature-name-validator.test.js +0 -106
  210. package/dist/scripts/utils/__tests__/feature-name-validator.test.js.map +0 -1
  211. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts +0 -5
  212. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts.map +0 -1
  213. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js +0 -202
  214. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js.map +0 -1
  215. package/dist/scripts/utils/__tests__/project-meta.test.d.ts +0 -6
  216. package/dist/scripts/utils/__tests__/project-meta.test.d.ts.map +0 -1
  217. package/dist/scripts/utils/__tests__/project-meta.test.js +0 -154
  218. package/dist/scripts/utils/__tests__/project-meta.test.js.map +0 -1
  219. package/dist/scripts/utils/__tests__/security-validator.test.d.ts +0 -6
  220. package/dist/scripts/utils/__tests__/security-validator.test.d.ts.map +0 -1
  221. package/dist/scripts/utils/__tests__/security-validator.test.js +0 -219
  222. package/dist/scripts/utils/__tests__/security-validator.test.js.map +0 -1
  223. package/dist/scripts/utils/__tests__/spec-updater.test.d.ts +0 -5
  224. package/dist/scripts/utils/__tests__/spec-updater.test.d.ts.map +0 -1
  225. package/dist/scripts/utils/__tests__/spec-updater.test.js +0 -158
  226. package/dist/scripts/utils/__tests__/spec-updater.test.js.map +0 -1
  227. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts +0 -5
  228. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts.map +0 -1
  229. package/dist/scripts/utils/__tests__/tasks-converter.test.js +0 -500
  230. package/dist/scripts/utils/__tests__/tasks-converter.test.js.map +0 -1
  231. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts +0 -5
  232. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts.map +0 -1
  233. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js +0 -314
  234. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js.map +0 -1
  235. package/dist/scripts/utils/__tests__/test-runner.test.d.ts +0 -5
  236. package/dist/scripts/utils/__tests__/test-runner.test.d.ts.map +0 -1
  237. package/dist/scripts/utils/__tests__/test-runner.test.js +0 -64
  238. package/dist/scripts/utils/__tests__/test-runner.test.js.map +0 -1
  239. package/dist/src/__tests__/cli.test.d.ts +0 -5
  240. package/dist/src/__tests__/cli.test.d.ts.map +0 -1
  241. package/dist/src/__tests__/cli.test.js +0 -58
  242. package/dist/src/__tests__/cli.test.js.map +0 -1
  243. package/dist/src/__tests__/integration/internationalization.test.d.ts +0 -8
  244. package/dist/src/__tests__/integration/internationalization.test.d.ts.map +0 -1
  245. package/dist/src/__tests__/integration/internationalization.test.js +0 -333
  246. package/dist/src/__tests__/integration/internationalization.test.js.map +0 -1
  247. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +0 -5
  248. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts.map +0 -1
  249. package/dist/src/__tests__/integration/setup/claude-agent.test.js +0 -122
  250. package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +0 -1
  251. package/dist/src/__tests__/integration/setup/claude.test.d.ts +0 -5
  252. package/dist/src/__tests__/integration/setup/claude.test.d.ts.map +0 -1
  253. package/dist/src/__tests__/integration/setup/claude.test.js +0 -193
  254. package/dist/src/__tests__/integration/setup/claude.test.js.map +0 -1
  255. package/dist/src/__tests__/integration/setup/cursor.test.d.ts +0 -5
  256. package/dist/src/__tests__/integration/setup/cursor.test.d.ts.map +0 -1
  257. package/dist/src/__tests__/integration/setup/cursor.test.js +0 -166
  258. package/dist/src/__tests__/integration/setup/cursor.test.js.map +0 -1
  259. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts +0 -32
  260. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts.map +0 -1
  261. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js +0 -72
  262. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js.map +0 -1
  263. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts +0 -38
  264. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts.map +0 -1
  265. package/dist/src/__tests__/integration/setup/helpers/test-project.js +0 -83
  266. package/dist/src/__tests__/integration/setup/helpers/test-project.js.map +0 -1
  267. package/dist/src/__tests__/integration/setup/init.test.d.ts +0 -5
  268. package/dist/src/__tests__/integration/setup/init.test.d.ts.map +0 -1
  269. package/dist/src/__tests__/integration/setup/init.test.js +0 -352
  270. package/dist/src/__tests__/integration/setup/init.test.js.map +0 -1
  271. package/dist/src/__tests__/integration/setup/validation.test.d.ts +0 -5
  272. package/dist/src/__tests__/integration/setup/validation.test.d.ts.map +0 -1
  273. package/dist/src/__tests__/integration/setup/validation.test.js +0 -301
  274. package/dist/src/__tests__/integration/setup/validation.test.js.map +0 -1
  275. package/dist/src/commands/__tests__/init.test.d.ts +0 -5
  276. package/dist/src/commands/__tests__/init.test.d.ts.map +0 -1
  277. package/dist/src/commands/__tests__/init.test.js +0 -255
  278. package/dist/src/commands/__tests__/init.test.js.map +0 -1
  279. package/dist/src/commands/__tests__/migrate.test.d.ts +0 -5
  280. package/dist/src/commands/__tests__/migrate.test.d.ts.map +0 -1
  281. package/dist/src/commands/__tests__/migrate.test.js +0 -216
  282. package/dist/src/commands/__tests__/migrate.test.js.map +0 -1
  283. package/scripts/create-project.ts +0 -386
  284. package/scripts/list-projects.ts +0 -112
@@ -0,0 +1,182 @@
1
+ /**
2
+ * GitHub Actions Client
3
+ * GitHub Actions APIへのアクセスを抽象化し、Workflow Runsの取得とレート制限対策を提供
4
+ */
5
+ import { Octokit } from '@octokit/rest';
6
+ /**
7
+ * GitHub Workflow Runを解析してCI結果に変換
8
+ * @param run GitHub Workflow Run情報
9
+ * @returns CI結果
10
+ */
11
+ export function parseGitHubWorkflowRun(run) {
12
+ // statusマッピング
13
+ let status;
14
+ let testStatus;
15
+ if (run.status === 'completed') {
16
+ if (run.conclusion === 'success') {
17
+ status = 'success';
18
+ testStatus = 'passed';
19
+ }
20
+ else if (run.conclusion === 'failure') {
21
+ status = 'failure';
22
+ testStatus = 'failed';
23
+ }
24
+ else if (run.conclusion === 'cancelled') {
25
+ status = 'unknown';
26
+ testStatus = 'skipped';
27
+ }
28
+ else if (run.conclusion === 'skipped') {
29
+ status = 'unknown';
30
+ testStatus = 'skipped';
31
+ }
32
+ else {
33
+ status = 'unknown';
34
+ testStatus = 'unknown';
35
+ }
36
+ }
37
+ else if (run.status === 'in_progress' || run.status === 'queued') {
38
+ status = 'running';
39
+ testStatus = 'unknown';
40
+ }
41
+ else {
42
+ status = 'unknown';
43
+ testStatus = 'unknown';
44
+ }
45
+ // 日時変換
46
+ const lastExecutionTime = new Date(run.updated_at);
47
+ // 失敗詳細
48
+ const failureDetails = status === 'failure' ? run.html_url : undefined;
49
+ return {
50
+ status,
51
+ testStatus,
52
+ lastExecutionTime,
53
+ failureDetails,
54
+ };
55
+ }
56
+ /**
57
+ * Exponential Backoffで再試行
58
+ * @param fn 実行する関数
59
+ * @param maxRetries 最大再試行回数
60
+ * @returns 関数の実行結果
61
+ */
62
+ async function exponentialBackoff(fn, maxRetries = 3) {
63
+ let lastError;
64
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
65
+ try {
66
+ return await fn();
67
+ }
68
+ catch (error) {
69
+ const octokitError = error;
70
+ lastError = octokitError;
71
+ // レート制限エラーでない場合は即座にスロー
72
+ if (octokitError.status !== 403 || !octokitError.response?.headers) {
73
+ throw octokitError;
74
+ }
75
+ // 最後の試行の場合はスロー
76
+ if (attempt === maxRetries - 1) {
77
+ throw octokitError;
78
+ }
79
+ // Exponential Backoff: 1秒、2秒、4秒
80
+ const waitTime = Math.pow(2, attempt) * 1000;
81
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
82
+ }
83
+ }
84
+ throw lastError ?? new Error('Unexpected error in exponentialBackoff');
85
+ }
86
+ /**
87
+ * GitHub Actions Client
88
+ */
89
+ export class GitHubActionsClient {
90
+ octokit;
91
+ constructor() {
92
+ const token = process.env.GITHUB_TOKEN;
93
+ if (!token) {
94
+ throw new Error('GITHUB_TOKENが設定されていません');
95
+ }
96
+ this.octokit = new Octokit({
97
+ auth: token,
98
+ });
99
+ }
100
+ /**
101
+ * リポジトリの最新Workflow Runを取得
102
+ * @param owner リポジトリオーナー
103
+ * @param repo リポジトリ名
104
+ * @param branch ブランチ名
105
+ * @returns Workflow Run情報(成功/失敗)
106
+ */
107
+ async getLatestWorkflowRun(owner, repo, branch) {
108
+ try {
109
+ const response = await exponentialBackoff(async () => {
110
+ return await this.octokit.actions.listWorkflowRunsForRepo({
111
+ owner,
112
+ repo,
113
+ branch,
114
+ status: 'completed',
115
+ per_page: 1,
116
+ });
117
+ });
118
+ if (!response.data.workflow_runs ||
119
+ response.data.workflow_runs.length === 0) {
120
+ return {
121
+ success: false,
122
+ error: {
123
+ type: 'NOT_FOUND',
124
+ message: `リポジトリ ${owner}/${repo} のWorkflow Runが見つかりません`,
125
+ },
126
+ };
127
+ }
128
+ const run = response.data.workflow_runs[0];
129
+ return {
130
+ success: true,
131
+ data: run,
132
+ };
133
+ }
134
+ catch (error) {
135
+ // エラーハンドリング
136
+ const octokitError = error;
137
+ if (octokitError.status === 404) {
138
+ return {
139
+ success: false,
140
+ error: {
141
+ type: 'NOT_FOUND',
142
+ message: octokitError.message || 'リポジトリが見つかりません',
143
+ },
144
+ };
145
+ }
146
+ else if (octokitError.status === 403) {
147
+ // レート制限
148
+ const resetTime = octokitError.response?.headers?.['x-ratelimit-reset'];
149
+ const retryAfter = resetTime
150
+ ? parseInt(resetTime, 10) - Math.floor(Date.now() / 1000)
151
+ : 3600;
152
+ return {
153
+ success: false,
154
+ error: {
155
+ type: 'RATE_LIMIT_EXCEEDED',
156
+ retryAfter: Math.max(retryAfter, 0),
157
+ },
158
+ };
159
+ }
160
+ else if (octokitError.status === 401) {
161
+ return {
162
+ success: false,
163
+ error: {
164
+ type: 'UNAUTHORIZED',
165
+ message: octokitError.message || '認証エラー',
166
+ },
167
+ };
168
+ }
169
+ else {
170
+ return {
171
+ success: false,
172
+ error: {
173
+ type: 'SERVER_ERROR',
174
+ message: octokitError.message || 'サーバーエラー',
175
+ statusCode: octokitError.status || 500,
176
+ },
177
+ };
178
+ }
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=github-actions-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions-client.js","sourceRoot":"","sources":["../../scripts/github-actions-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * ヘルスチェックサービス
3
+ * 依存サービスの状態を確認してテスト実行前の環境チェックを行う
4
+ */
5
+ /**
6
+ * サービスステータス
7
+ */
8
+ export interface ServiceStatus {
9
+ serviceName: string;
10
+ status: 'healthy' | 'unhealthy';
11
+ message?: string;
12
+ }
13
+ /**
14
+ * ヘルスチェック結果
15
+ */
16
+ export interface HealthCheckResult {
17
+ success: boolean;
18
+ servicesStatus: ServiceStatus[];
19
+ }
20
+ /**
21
+ * ヘルスチェックサービス
22
+ */
23
+ export declare class HealthCheckService {
24
+ /**
25
+ * ヘルスチェックを実行
26
+ *
27
+ * @param projectName プロジェクト名
28
+ * @param projectRoot プロジェクトルートディレクトリ(デフォルト: process.cwd())
29
+ * @returns ヘルスチェック結果
30
+ */
31
+ runHealthCheck(projectName: string, projectRoot?: string): Promise<HealthCheckResult>;
32
+ /**
33
+ * ヘルスチェックスクリプトの出力を解析
34
+ *
35
+ * 出力形式:
36
+ * ```
37
+ * service-name: healthy
38
+ * service-name: unhealthy - error message
39
+ * ```
40
+ *
41
+ * @param output スクリプト出力
42
+ * @returns サービスステータス配列
43
+ */
44
+ private parseHealthCheckOutput;
45
+ }
46
+ //# sourceMappingURL=health-check-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check-service.d.ts","sourceRoot":"","sources":["../../scripts/health-check-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAWD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;OAMG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,iBAAiB,CAAC;IAsF7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;CAuB/B"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * ヘルスチェックサービス
3
+ * 依存サービスの状態を確認してテスト実行前の環境チェックを行う
4
+ */
5
+ import { existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { execSync } from 'child_process';
8
+ /**
9
+ * ヘルスチェックサービス
10
+ */
11
+ export class HealthCheckService {
12
+ /**
13
+ * ヘルスチェックを実行
14
+ *
15
+ * @param projectName プロジェクト名
16
+ * @param projectRoot プロジェクトルートディレクトリ(デフォルト: process.cwd())
17
+ * @returns ヘルスチェック結果
18
+ */
19
+ async runHealthCheck(projectName, projectRoot = process.cwd()) {
20
+ // 1. ヘルスチェックスクリプトの存在確認
21
+ const scriptPath = join(projectRoot, 'docs', 'michi', projectName, 'tests', 'scripts', 'health-check.sh');
22
+ if (!existsSync(scriptPath)) {
23
+ console.log(`ℹ️ ヘルスチェックスクリプトが見つかりません: ${scriptPath}。ヘルスチェックをスキップします。`);
24
+ return {
25
+ success: true,
26
+ servicesStatus: [],
27
+ };
28
+ }
29
+ // 2. ヘルスチェックスクリプトを実行
30
+ try {
31
+ console.log('🔍 ヘルスチェックを実行中...');
32
+ const output = execSync(scriptPath, {
33
+ encoding: 'utf-8',
34
+ timeout: 30000, // 30秒タイムアウト
35
+ });
36
+ // 3. スクリプト出力を解析
37
+ const servicesStatus = this.parseHealthCheckOutput(output);
38
+ // 4. unhealthyなサービスがある場合は失敗
39
+ const hasUnhealthyServices = servicesStatus.some((s) => s.status === 'unhealthy');
40
+ if (hasUnhealthyServices) {
41
+ console.log('❌ ヘルスチェックが失敗しました');
42
+ servicesStatus.forEach((s) => {
43
+ const icon = s.status === 'healthy' ? '✅' : '❌';
44
+ const message = s.message ? ` - ${s.message}` : '';
45
+ console.log(` ${icon} ${s.serviceName}: ${s.status}${message}`);
46
+ });
47
+ return {
48
+ success: false,
49
+ servicesStatus,
50
+ };
51
+ }
52
+ console.log('✅ ヘルスチェックが成功しました');
53
+ servicesStatus.forEach((s) => {
54
+ console.log(` ✅ ${s.serviceName}: ${s.status}`);
55
+ });
56
+ return {
57
+ success: true,
58
+ servicesStatus,
59
+ };
60
+ }
61
+ catch (error) {
62
+ // スクリプト実行エラー
63
+ const execError = error;
64
+ console.error('❌ ヘルスチェックスクリプトの実行に失敗しました:', execError.message);
65
+ if (execError.status !== undefined && execError.status !== 0) {
66
+ // 終了コードが非0の場合は失敗
67
+ const output = execError.stdout || execError.stderr || '';
68
+ const outputStr = Buffer.isBuffer(output) ? output.toString('utf-8') : String(output);
69
+ const servicesStatus = this.parseHealthCheckOutput(outputStr);
70
+ return {
71
+ success: false,
72
+ servicesStatus,
73
+ };
74
+ }
75
+ // その他のエラー(タイムアウト、パーミッションエラーなど)
76
+ return {
77
+ success: false,
78
+ servicesStatus: [],
79
+ };
80
+ }
81
+ }
82
+ /**
83
+ * ヘルスチェックスクリプトの出力を解析
84
+ *
85
+ * 出力形式:
86
+ * ```
87
+ * service-name: healthy
88
+ * service-name: unhealthy - error message
89
+ * ```
90
+ *
91
+ * @param output スクリプト出力
92
+ * @returns サービスステータス配列
93
+ */
94
+ parseHealthCheckOutput(output) {
95
+ const servicesStatus = [];
96
+ const lines = output.trim().split('\n');
97
+ for (const line of lines) {
98
+ const match = line.match(/^(\S+):\s+(healthy|unhealthy)(?:\s+-\s+(.+))?$/);
99
+ if (!match) {
100
+ continue; // 不正な形式の行はスキップ
101
+ }
102
+ const serviceName = match[1];
103
+ const status = match[2];
104
+ const message = match[3];
105
+ servicesStatus.push({
106
+ serviceName,
107
+ status,
108
+ message,
109
+ });
110
+ }
111
+ return servicesStatus;
112
+ }
113
+ }
114
+ //# sourceMappingURL=health-check-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check-service.js","sourceRoot":"","sources":["../../scripts/health-check-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-to-confluence.d.ts","sourceRoot":"","sources":["../../scripts/markdown-to-confluence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpE;AA+ED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CA0B3E"}
1
+ {"version":3,"file":"markdown-to-confluence.d.ts","sourceRoot":"","sources":["../../scripts/markdown-to-confluence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiCpE;AAuFD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CA0B3E"}
@@ -11,12 +11,27 @@ const md = new MarkdownIt({
11
11
  * Markdown を Confluence Storage Format (HTML) に変換
12
12
  */
13
13
  export function convertMarkdownToConfluence(markdown) {
14
- // MarkdownIt でHTMLに変換
15
- let html = md.render(markdown);
16
- // Confluence固有の変換
14
+ // 1. Mermaidブロックをプレースホルダーに置き換え
15
+ const mermaidBlocks = [];
16
+ const withPlaceholders = markdown.replace(/```mermaid\n([\s\S]*?)```/g, (match, diagram) => {
17
+ const placeholder = `<!--MERMAID_BLOCK_${mermaidBlocks.length}-->`;
18
+ mermaidBlocks.push(diagram.trim());
19
+ return placeholder;
20
+ });
21
+ // 2. MarkdownIt でHTMLに変換
22
+ let html = md.render(withPlaceholders);
23
+ // 3. Confluence固有の変換
17
24
  html = convertCodeBlocks(html);
18
25
  html = convertTables(html);
19
26
  html = convertInfoBoxes(html);
27
+ // 4. プレースホルダーをConfluenceマクロに戻す
28
+ html = html.replace(/<!--MERMAID_BLOCK_(\d+)-->/g, (match, index) => {
29
+ const diagram = mermaidBlocks[parseInt(index)];
30
+ const escapedDiagram = escapeCDATA(diagram);
31
+ return `<ac:structured-macro ac:name="mermaid">
32
+ <ac:plain-text-body><![CDATA[${escapedDiagram}]]></ac:plain-text-body>
33
+ </ac:structured-macro>`;
34
+ });
20
35
  return html;
21
36
  }
22
37
  /**
@@ -79,6 +94,13 @@ function decodeHtmlEntities(text) {
79
94
  return entities[entity] || entity;
80
95
  });
81
96
  }
97
+ /**
98
+ * CDATA内の ]]> をエスケープ
99
+ */
100
+ function escapeCDATA(text) {
101
+ // ]]> を ]]]]><![CDATA[> に置換してエスケープ
102
+ return text.replace(/]]>/g, ']]]]><![CDATA[>');
103
+ }
82
104
  export function createConfluencePage(options) {
83
105
  const { githubUrl, content, approvers = ['企画', '部長'], projectName } = options;
84
106
  const approversList = approvers.map(a => a.startsWith('@') ? a : `@${a}`).join(',');
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-to-confluence.js","sourceRoot":"","sources":["../../scripts/markdown-to-confluence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-to-confluence.js","sourceRoot":"","sources":["../../scripts/markdown-to-confluence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * MermaidダイアグラムをConfluenceマクロ形式に変換
3
+ */
4
+ /**
5
+ * MermaidConverter
6
+ * MarkdownテキストからMermaidブロックを検出し、Confluenceマクロ形式に変換
7
+ */
8
+ export declare class MermaidConverter {
9
+ /**
10
+ * MarkdownテキストからMermaidブロックをConfluenceマクロ形式に変換
11
+ *
12
+ * @param markdown Markdownテキスト
13
+ * @returns 変換後のテキスト
14
+ */
15
+ convertMermaidToConfluence(markdown: string): string;
16
+ /**
17
+ * CDATA内の ]]> をエスケープ
18
+ *
19
+ * @param text テキスト
20
+ * @returns エスケープ後のテキスト
21
+ */
22
+ private escapeCDATA;
23
+ }
24
+ //# sourceMappingURL=mermaid-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid-converter.d.ts","sourceRoot":"","sources":["../../scripts/mermaid-converter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACH,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IA8BpD;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAIpB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * MermaidダイアグラムをConfluenceマクロ形式に変換
3
+ */
4
+ /**
5
+ * MermaidConverter
6
+ * MarkdownテキストからMermaidブロックを検出し、Confluenceマクロ形式に変換
7
+ */
8
+ export class MermaidConverter {
9
+ /**
10
+ * MarkdownテキストからMermaidブロックをConfluenceマクロ形式に変換
11
+ *
12
+ * @param markdown Markdownテキスト
13
+ * @returns 変換後のテキスト
14
+ */
15
+ convertMermaidToConfluence(markdown) {
16
+ // Mermaidブロックを検出する正規表現
17
+ // ```mermaid\n([\s\S]*?)\n```
18
+ const mermaidBlockRegex = /```mermaid\n([\s\S]*?)```/g;
19
+ // Mermaidブロックを検出
20
+ const matches = Array.from(markdown.matchAll(mermaidBlockRegex));
21
+ // Mermaidブロックがない場合は変更なし
22
+ if (matches.length === 0) {
23
+ return markdown;
24
+ }
25
+ // Mermaidブロックを Confluence マクロ形式に変換
26
+ const converted = markdown.replace(mermaidBlockRegex, (match, diagram) => {
27
+ // 前後の空白を削除
28
+ const trimmedDiagram = diagram.trim();
29
+ // CDATA終了マーカー ]]> をエスケープ
30
+ const escapedDiagram = this.escapeCDATA(trimmedDiagram);
31
+ // Confluenceマクロ形式に変換
32
+ return `<ac:structured-macro ac:name="mermaid">
33
+ <ac:plain-text-body><![CDATA[${escapedDiagram}]]></ac:plain-text-body>
34
+ </ac:structured-macro>`;
35
+ });
36
+ return converted;
37
+ }
38
+ /**
39
+ * CDATA内の ]]> をエスケープ
40
+ *
41
+ * @param text テキスト
42
+ * @returns エスケープ後のテキスト
43
+ */
44
+ escapeCDATA(text) {
45
+ // ]]> を ]]]]><![CDATA[> に置換してエスケープ
46
+ return text.replace(/]]>/g, ']]]]><![CDATA[>');
47
+ }
48
+ }
49
+ //# sourceMappingURL=mermaid-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid-converter.js","sourceRoot":"","sources":["../../scripts/mermaid-converter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACH,0BAA0B,CAAC,QAAgB;QACzC,uBAAuB;QACvB,8BAA8B;QAC9B,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;QAEvD,iBAAiB;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAEjE,wBAAwB;QACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,mCAAmC;QACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACvE,WAAW;YACX,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAEtC,yBAAyB;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAExD,qBAAqB;YACrB,OAAO;iCACoB,cAAc;uBACxB,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,IAAY;QAC9B,mCAAmC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Multi-Repo template renderer
3
+ *
4
+ * Provides template rendering functionality for Multi-Repo projects
5
+ */
6
+ export interface MultiRepoTemplateContext {
7
+ PROJECT_NAME: string;
8
+ JIRA_KEY: string;
9
+ CONFLUENCE_SPACE: string;
10
+ CREATED_AT: string;
11
+ }
12
+ /**
13
+ * Create Multi-Repo template context
14
+ *
15
+ * @param projectName - Project name
16
+ * @param jiraKey - JIRA project key
17
+ * @param confluenceSpace - Confluence space key
18
+ * @param createdAt - Created timestamp (ISO 8601 format)
19
+ * @returns Multi-Repo template context
20
+ */
21
+ export declare const createMultiRepoTemplateContext: (projectName: string, jiraKey: string, confluenceSpace: string, createdAt?: string) => MultiRepoTemplateContext;
22
+ /**
23
+ * Load Multi-Repo template file
24
+ *
25
+ * Security: Path traversal prevention with three-layer validation:
26
+ * 1. Validate template name (no path separators)
27
+ * 2. Resolve absolute paths
28
+ * 3. Verify path containment
29
+ *
30
+ * @param templateName - Template name (e.g., "overview/requirements", "steering/multi-repo")
31
+ * @param projectRoot - Project root directory
32
+ * @returns Template content
33
+ * @throws {Error} If template file not found or path traversal detected
34
+ */
35
+ export declare const loadMultiRepoTemplate: (templateName: string, projectRoot?: string) => string;
36
+ /**
37
+ * Render Multi-Repo template with placeholder replacement
38
+ *
39
+ * @param template - Template string
40
+ * @param context - Multi-Repo template context
41
+ * @returns Rendered template string
42
+ */
43
+ export declare const renderMultiRepoTemplate: (template: string, context: MultiRepoTemplateContext) => string;
44
+ /**
45
+ * Load and render Multi-Repo template
46
+ *
47
+ * @param templateName - Template name
48
+ * @param context - Multi-Repo template context
49
+ * @param projectRoot - Project root directory
50
+ * @returns Rendered template string
51
+ */
52
+ export declare const loadAndRenderMultiRepoTemplate: (templateName: string, context: MultiRepoTemplateContext, projectRoot?: string) => string;
53
+ /**
54
+ * Batch render multiple Multi-Repo templates
55
+ *
56
+ * @param templateNames - Array of template names
57
+ * @param context - Multi-Repo template context
58
+ * @param projectRoot - Project root directory
59
+ * @returns Map of template names to rendered strings
60
+ */
61
+ export declare const renderMultiRepoTemplates: (templateNames: string[], context: MultiRepoTemplateContext, projectRoot?: string) => Record<string, string>;
62
+ /**
63
+ * List of all Multi-Repo template names
64
+ */
65
+ export declare const MULTI_REPO_TEMPLATES: readonly ["overview/requirements", "overview/architecture", "overview/sequence", "steering/multi-repo", "tests/strategy", "docs/ci-status", "docs/release-notes"];
66
+ export type MultiRepoTemplateName = typeof MULTI_REPO_TEMPLATES[number];
67
+ //# sourceMappingURL=multi-repo-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo-renderer.d.ts","sourceRoot":"","sources":["../../../scripts/template/multi-repo-renderer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,GACzC,aAAa,MAAM,EACnB,SAAS,MAAM,EACf,iBAAiB,MAAM,EACvB,YAAY,MAAM,KACjB,wBAKD,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,GAChC,cAAc,MAAM,EACpB,cAAa,MAAsB,KAClC,MAiCF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,EAChB,SAAS,wBAAwB,KAChC,MAcF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GACzC,cAAc,MAAM,EACpB,SAAS,wBAAwB,EACjC,cAAa,MAAsB,KAClC,MAGF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GACnC,eAAe,MAAM,EAAE,EACvB,SAAS,wBAAwB,EACjC,cAAa,MAAsB,KAClC,MAAM,CAAC,MAAM,EAAE,MAAM,CAYvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,mKAQvB,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC"}