@sk8metal/michi-cli 0.14.1 → 0.19.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 (614) hide show
  1. package/CHANGELOG.md +268 -2
  2. package/README.md +27 -2
  3. package/dist/scripts/config/config-schema.d.ts +5 -333
  4. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  5. package/dist/scripts/config/config-schema.js +6 -233
  6. package/dist/scripts/config/config-schema.js.map +1 -1
  7. package/dist/scripts/config-global.d.ts.map +1 -1
  8. package/dist/scripts/config-global.js +3 -2
  9. package/dist/scripts/config-global.js.map +1 -1
  10. package/dist/scripts/confluence-sync.d.ts +5 -73
  11. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  12. package/dist/scripts/confluence-sync.js +14 -392
  13. package/dist/scripts/confluence-sync.js.map +1 -1
  14. package/dist/scripts/constants/environments.d.ts +3 -30
  15. package/dist/scripts/constants/environments.d.ts.map +1 -1
  16. package/dist/scripts/constants/environments.js +3 -41
  17. package/dist/scripts/constants/environments.js.map +1 -1
  18. package/dist/scripts/constants/languages.d.ts +3 -20
  19. package/dist/scripts/constants/languages.d.ts.map +1 -1
  20. package/dist/scripts/constants/languages.js +3 -50
  21. package/dist/scripts/constants/languages.js.map +1 -1
  22. package/dist/scripts/constants/test-commands.d.ts +3 -33
  23. package/dist/scripts/constants/test-commands.d.ts.map +1 -1
  24. package/dist/scripts/constants/test-commands.js +3 -67
  25. package/dist/scripts/constants/test-commands.js.map +1 -1
  26. package/dist/scripts/dev-tools/mermaid-converter.d.ts.map +1 -0
  27. package/dist/scripts/dev-tools/mermaid-converter.js.map +1 -0
  28. package/dist/scripts/dev-tools/test-interactive.d.ts.map +1 -0
  29. package/dist/scripts/{test-interactive.js → dev-tools/test-interactive.js} +4 -3
  30. package/dist/scripts/dev-tools/test-interactive.js.map +1 -0
  31. package/dist/scripts/github-actions-client.d.ts +5 -75
  32. package/dist/scripts/github-actions-client.d.ts.map +1 -1
  33. package/dist/scripts/github-actions-client.js +4 -178
  34. package/dist/scripts/github-actions-client.js.map +1 -1
  35. package/dist/scripts/jira-sync.d.ts +3 -121
  36. package/dist/scripts/jira-sync.d.ts.map +1 -1
  37. package/dist/scripts/jira-sync.js +5 -879
  38. package/dist/scripts/jira-sync.js.map +1 -1
  39. package/dist/scripts/markdown-to-confluence.d.ts.map +1 -1
  40. package/dist/scripts/markdown-to-confluence.js +2 -2
  41. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  42. package/dist/scripts/multi-project-estimate.d.ts.map +1 -1
  43. package/dist/scripts/multi-project-estimate.js +3 -2
  44. package/dist/scripts/multi-project-estimate.js.map +1 -1
  45. package/dist/scripts/phase-runner.d.ts.map +1 -1
  46. package/dist/scripts/phase-runner.js +34 -18
  47. package/dist/scripts/phase-runner.js.map +1 -1
  48. package/dist/scripts/pre-flight-check.d.ts.map +1 -1
  49. package/dist/scripts/pre-flight-check.js +27 -11
  50. package/dist/scripts/pre-flight-check.js.map +1 -1
  51. package/dist/scripts/template/multi-repo-renderer.js +2 -2
  52. package/dist/scripts/template/multi-repo-renderer.js.map +1 -1
  53. package/dist/scripts/test-execution-generator.d.ts.map +1 -1
  54. package/dist/scripts/test-execution-generator.js +5 -4
  55. package/dist/scripts/test-execution-generator.js.map +1 -1
  56. package/dist/scripts/utils/aidlc-parser.d.ts +5 -82
  57. package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -1
  58. package/dist/scripts/utils/aidlc-parser.js +4 -204
  59. package/dist/scripts/utils/aidlc-parser.js.map +1 -1
  60. package/dist/scripts/utils/ci-generator.d.ts.map +1 -1
  61. package/dist/scripts/utils/ci-generator.js +4 -3
  62. package/dist/scripts/utils/ci-generator.js.map +1 -1
  63. package/dist/scripts/utils/config-loader.d.ts.map +1 -1
  64. package/dist/scripts/utils/config-loader.js +46 -49
  65. package/dist/scripts/utils/config-loader.js.map +1 -1
  66. package/dist/scripts/utils/config-validator.d.ts +9 -10
  67. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  68. package/dist/scripts/utils/config-validator.js +68 -70
  69. package/dist/scripts/utils/config-validator.js.map +1 -1
  70. package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -1
  71. package/dist/scripts/utils/docker-requirement-detector.js +5 -4
  72. package/dist/scripts/utils/docker-requirement-detector.js.map +1 -1
  73. package/dist/scripts/utils/env-config.d.ts.map +1 -1
  74. package/dist/scripts/utils/env-config.js +55 -38
  75. package/dist/scripts/utils/env-config.js.map +1 -1
  76. package/dist/scripts/utils/feature-name-validator.d.ts +4 -9
  77. package/dist/scripts/utils/feature-name-validator.d.ts.map +1 -1
  78. package/dist/scripts/utils/feature-name-validator.js +12 -21
  79. package/dist/scripts/utils/feature-name-validator.js.map +1 -1
  80. package/dist/scripts/utils/interactive-helpers.d.ts +5 -29
  81. package/dist/scripts/utils/interactive-helpers.d.ts.map +1 -1
  82. package/dist/scripts/utils/interactive-helpers.js +5 -89
  83. package/dist/scripts/utils/interactive-helpers.js.map +1 -1
  84. package/dist/scripts/utils/language-detector.d.ts.map +1 -1
  85. package/dist/scripts/utils/language-detector.js +4 -3
  86. package/dist/scripts/utils/language-detector.js.map +1 -1
  87. package/dist/scripts/utils/markdown-parser.d.ts +6 -52
  88. package/dist/scripts/utils/markdown-parser.d.ts.map +1 -1
  89. package/dist/scripts/utils/markdown-parser.js +5 -286
  90. package/dist/scripts/utils/markdown-parser.js.map +1 -1
  91. package/dist/scripts/utils/multi-repo-validator.d.ts +9 -10
  92. package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -1
  93. package/dist/scripts/utils/multi-repo-validator.js +15 -17
  94. package/dist/scripts/utils/multi-repo-validator.js.map +1 -1
  95. package/dist/scripts/utils/project-analyzer.d.ts +120 -0
  96. package/dist/scripts/utils/project-analyzer.d.ts.map +1 -0
  97. package/dist/scripts/utils/project-analyzer.js +358 -0
  98. package/dist/scripts/utils/project-analyzer.js.map +1 -0
  99. package/dist/scripts/utils/project-detector.d.ts.map +1 -1
  100. package/dist/scripts/utils/project-detector.js +6 -5
  101. package/dist/scripts/utils/project-detector.js.map +1 -1
  102. package/dist/scripts/utils/project-finder.d.ts +1 -21
  103. package/dist/scripts/utils/project-finder.d.ts.map +1 -1
  104. package/dist/scripts/utils/project-finder.js +2 -121
  105. package/dist/scripts/utils/project-finder.js.map +1 -1
  106. package/dist/scripts/utils/project-meta.d.ts +4 -27
  107. package/dist/scripts/utils/project-meta.d.ts.map +1 -1
  108. package/dist/scripts/utils/project-meta.js +3 -67
  109. package/dist/scripts/utils/project-meta.js.map +1 -1
  110. package/dist/scripts/utils/safe-file-reader.d.ts +84 -0
  111. package/dist/scripts/utils/safe-file-reader.d.ts.map +1 -0
  112. package/dist/scripts/utils/safe-file-reader.js +122 -0
  113. package/dist/scripts/utils/safe-file-reader.js.map +1 -0
  114. package/dist/scripts/utils/security-validator.d.ts +8 -19
  115. package/dist/scripts/utils/security-validator.d.ts.map +1 -1
  116. package/dist/scripts/utils/security-validator.js +28 -58
  117. package/dist/scripts/utils/security-validator.js.map +1 -1
  118. package/dist/scripts/utils/spec-archiver.d.ts.map +1 -1
  119. package/dist/scripts/utils/spec-archiver.js +7 -6
  120. package/dist/scripts/utils/spec-archiver.js.map +1 -1
  121. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  122. package/dist/scripts/utils/spec-updater.js +10 -7
  123. package/dist/scripts/utils/spec-updater.js.map +1 -1
  124. package/dist/scripts/utils/tasks-converter.js +2 -2
  125. package/dist/scripts/utils/tasks-converter.js.map +1 -1
  126. package/dist/scripts/utils/tasks-format-validator.js +4 -4
  127. package/dist/scripts/utils/tasks-format-validator.js.map +1 -1
  128. package/dist/scripts/utils/template-applier.d.ts.map +1 -1
  129. package/dist/scripts/utils/template-applier.js +4 -3
  130. package/dist/scripts/utils/template-applier.js.map +1 -1
  131. package/dist/scripts/utils/types/validation.d.ts +57 -0
  132. package/dist/scripts/utils/types/validation.d.ts.map +1 -0
  133. package/dist/scripts/utils/types/validation.js +50 -0
  134. package/dist/scripts/utils/types/validation.js.map +1 -0
  135. package/dist/scripts/validate-phase.d.ts +6 -1
  136. package/dist/scripts/validate-phase.d.ts.map +1 -1
  137. package/dist/scripts/validate-phase.js +42 -20
  138. package/dist/scripts/validate-phase.js.map +1 -1
  139. package/dist/scripts/workflow-orchestrator.d.ts +4 -40
  140. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
  141. package/dist/scripts/workflow-orchestrator.js +7 -194
  142. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  143. package/dist/src/application/interfaces/config-provider.d.ts +89 -0
  144. package/dist/src/application/interfaces/config-provider.d.ts.map +1 -0
  145. package/dist/src/application/interfaces/config-provider.js +8 -0
  146. package/dist/src/application/interfaces/config-provider.js.map +1 -0
  147. package/dist/src/application/interfaces/external-api.d.ts +80 -0
  148. package/dist/src/application/interfaces/external-api.d.ts.map +1 -0
  149. package/dist/src/application/interfaces/external-api.js +8 -0
  150. package/dist/src/application/interfaces/external-api.js.map +1 -0
  151. package/dist/src/application/interfaces/spec-repository.d.ts +52 -0
  152. package/dist/src/application/interfaces/spec-repository.d.ts.map +1 -0
  153. package/dist/src/application/interfaces/spec-repository.js +8 -0
  154. package/dist/src/application/interfaces/spec-repository.js.map +1 -0
  155. package/dist/src/application/services/spec-service.d.ts +49 -0
  156. package/dist/src/application/services/spec-service.d.ts.map +1 -0
  157. package/dist/src/application/services/spec-service.js +94 -0
  158. package/dist/src/application/services/spec-service.js.map +1 -0
  159. package/dist/src/application/services/workflow-service.d.ts +58 -0
  160. package/dist/src/application/services/workflow-service.d.ts.map +1 -0
  161. package/dist/src/application/services/workflow-service.js +125 -0
  162. package/dist/src/application/services/workflow-service.js.map +1 -0
  163. package/dist/src/application/templates/processor.d.ts +31 -0
  164. package/dist/src/application/templates/processor.d.ts.map +1 -0
  165. package/dist/src/application/templates/processor.js +58 -0
  166. package/dist/src/application/templates/processor.js.map +1 -0
  167. package/dist/src/application/use-cases/spec/archive-spec.d.ts +34 -0
  168. package/dist/src/application/use-cases/spec/archive-spec.d.ts.map +1 -0
  169. package/dist/src/application/use-cases/spec/archive-spec.js +56 -0
  170. package/dist/src/application/use-cases/spec/archive-spec.js.map +1 -0
  171. package/dist/src/application/use-cases/spec/generate-design.d.ts +34 -0
  172. package/dist/src/application/use-cases/spec/generate-design.d.ts.map +1 -0
  173. package/dist/src/application/use-cases/spec/generate-design.js +58 -0
  174. package/dist/src/application/use-cases/spec/generate-design.js.map +1 -0
  175. package/dist/src/application/use-cases/spec/generate-requirements.d.ts +34 -0
  176. package/dist/src/application/use-cases/spec/generate-requirements.d.ts.map +1 -0
  177. package/dist/src/application/use-cases/spec/generate-requirements.js +58 -0
  178. package/dist/src/application/use-cases/spec/generate-requirements.js.map +1 -0
  179. package/dist/src/application/use-cases/spec/generate-tasks.d.ts +34 -0
  180. package/dist/src/application/use-cases/spec/generate-tasks.d.ts.map +1 -0
  181. package/dist/src/application/use-cases/spec/generate-tasks.js +58 -0
  182. package/dist/src/application/use-cases/spec/generate-tasks.js.map +1 -0
  183. package/dist/src/application/use-cases/spec/init-spec.d.ts +48 -0
  184. package/dist/src/application/use-cases/spec/init-spec.d.ts.map +1 -0
  185. package/dist/src/application/use-cases/spec/init-spec.js +121 -0
  186. package/dist/src/application/use-cases/spec/init-spec.js.map +1 -0
  187. package/dist/src/cli.d.ts +6 -7
  188. package/dist/src/cli.d.ts.map +1 -1
  189. package/dist/src/cli.js +6 -745
  190. package/dist/src/cli.js.map +1 -1
  191. package/dist/src/commands/config-validate.js +2 -2
  192. package/dist/src/commands/init.d.ts +6 -21
  193. package/dist/src/commands/init.d.ts.map +1 -1
  194. package/dist/src/commands/init.js +5 -508
  195. package/dist/src/commands/init.js.map +1 -1
  196. package/dist/src/commands/migrate.js +4 -3
  197. package/dist/src/commands/migrate.js.map +1 -1
  198. package/dist/src/commands/spec-archive.d.ts +6 -13
  199. package/dist/src/commands/spec-archive.d.ts.map +1 -1
  200. package/dist/src/commands/spec-archive.js +5 -36
  201. package/dist/src/commands/spec-archive.js.map +1 -1
  202. package/dist/src/commands/spec-list.d.ts +6 -11
  203. package/dist/src/commands/spec-list.d.ts.map +1 -1
  204. package/dist/src/commands/spec-list.js +5 -51
  205. package/dist/src/commands/spec-list.js.map +1 -1
  206. package/dist/src/domain/constants/approval.d.ts +18 -0
  207. package/dist/src/domain/constants/approval.d.ts.map +1 -0
  208. package/dist/src/domain/constants/approval.js +23 -0
  209. package/dist/src/domain/constants/approval.js.map +1 -0
  210. package/dist/src/domain/constants/environments.d.ts +33 -0
  211. package/dist/src/domain/constants/environments.d.ts.map +1 -0
  212. package/dist/src/domain/constants/environments.js +44 -0
  213. package/dist/src/domain/constants/environments.js.map +1 -0
  214. package/dist/src/domain/constants/index.d.ts +12 -0
  215. package/dist/src/domain/constants/index.d.ts.map +1 -0
  216. package/dist/src/domain/constants/index.js +18 -0
  217. package/dist/src/domain/constants/index.js.map +1 -0
  218. package/dist/src/domain/constants/languages.d.ts +23 -0
  219. package/dist/src/domain/constants/languages.d.ts.map +1 -0
  220. package/dist/src/domain/constants/languages.js +53 -0
  221. package/dist/src/domain/constants/languages.js.map +1 -0
  222. package/dist/src/domain/constants/phases.d.ts +32 -0
  223. package/dist/src/domain/constants/phases.d.ts.map +1 -0
  224. package/dist/src/domain/constants/phases.js +52 -0
  225. package/dist/src/domain/constants/phases.js.map +1 -0
  226. package/dist/src/domain/constants/test-commands.d.ts +36 -0
  227. package/dist/src/domain/constants/test-commands.d.ts.map +1 -0
  228. package/dist/src/domain/constants/test-commands.js +70 -0
  229. package/dist/src/domain/constants/test-commands.js.map +1 -0
  230. package/dist/src/domain/constants/validation-rules.d.ts +32 -0
  231. package/dist/src/domain/constants/validation-rules.d.ts.map +1 -0
  232. package/dist/src/domain/constants/validation-rules.js +51 -0
  233. package/dist/src/domain/constants/validation-rules.js.map +1 -0
  234. package/dist/src/domain/entities/spec.d.ts +66 -0
  235. package/dist/src/domain/entities/spec.d.ts.map +1 -0
  236. package/dist/src/domain/entities/spec.js +112 -0
  237. package/dist/src/domain/entities/spec.js.map +1 -0
  238. package/dist/src/domain/entities/task.d.ts +43 -0
  239. package/dist/src/domain/entities/task.d.ts.map +1 -0
  240. package/dist/src/domain/entities/task.js +65 -0
  241. package/dist/src/domain/entities/task.js.map +1 -0
  242. package/dist/src/domain/services/spec-validator.d.ts +46 -0
  243. package/dist/src/domain/services/spec-validator.d.ts.map +1 -0
  244. package/dist/src/domain/services/spec-validator.js +99 -0
  245. package/dist/src/domain/services/spec-validator.js.map +1 -0
  246. package/dist/src/domain/value-objects/feature-name.d.ts +24 -0
  247. package/dist/src/domain/value-objects/feature-name.d.ts.map +1 -0
  248. package/dist/src/domain/value-objects/feature-name.js +36 -0
  249. package/dist/src/domain/value-objects/feature-name.js.map +1 -0
  250. package/dist/src/domain/value-objects/index.d.ts +7 -0
  251. package/dist/src/domain/value-objects/index.d.ts.map +1 -0
  252. package/dist/src/domain/value-objects/index.js +7 -0
  253. package/dist/src/domain/value-objects/index.js.map +1 -0
  254. package/dist/src/infrastructure/config/index.d.ts +5 -0
  255. package/dist/src/infrastructure/config/index.d.ts.map +1 -0
  256. package/dist/src/infrastructure/config/index.js +6 -0
  257. package/dist/src/infrastructure/config/index.js.map +1 -0
  258. package/dist/src/infrastructure/config/schema.d.ts +337 -0
  259. package/dist/src/infrastructure/config/schema.d.ts.map +1 -0
  260. package/dist/src/infrastructure/config/schema.js +237 -0
  261. package/dist/src/infrastructure/config/schema.js.map +1 -0
  262. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.d.ts +14 -0
  263. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.d.ts.map +1 -0
  264. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.js +102 -0
  265. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.js.map +1 -0
  266. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.d.ts +23 -0
  267. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.d.ts.map +1 -0
  268. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.js +192 -0
  269. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.js.map +1 -0
  270. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.d.ts +48 -0
  271. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.d.ts.map +1 -0
  272. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.js +531 -0
  273. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.js.map +1 -0
  274. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.d.ts +10 -0
  275. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.d.ts.map +1 -0
  276. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.js +12 -0
  277. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.js.map +1 -0
  278. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.d.ts +13 -0
  279. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.d.ts.map +1 -0
  280. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.js +129 -0
  281. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.js.map +1 -0
  282. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.d.ts +113 -0
  283. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.d.ts.map +1 -0
  284. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.js +5 -0
  285. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.js.map +1 -0
  286. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.d.ts +15 -0
  287. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.d.ts.map +1 -0
  288. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.js +141 -0
  289. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.js.map +1 -0
  290. package/dist/src/infrastructure/external-apis/atlassian/jira/client.d.ts +50 -0
  291. package/dist/src/infrastructure/external-apis/atlassian/jira/client.d.ts.map +1 -0
  292. package/dist/src/infrastructure/external-apis/atlassian/jira/client.js +226 -0
  293. package/dist/src/infrastructure/external-apis/atlassian/jira/client.js.map +1 -0
  294. package/dist/src/infrastructure/external-apis/atlassian/jira/index.d.ts +12 -0
  295. package/dist/src/infrastructure/external-apis/atlassian/jira/index.d.ts.map +1 -0
  296. package/dist/src/infrastructure/external-apis/atlassian/jira/index.js +16 -0
  297. package/dist/src/infrastructure/external-apis/atlassian/jira/index.js.map +1 -0
  298. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.d.ts +49 -0
  299. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.d.ts.map +1 -0
  300. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.js +165 -0
  301. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.js.map +1 -0
  302. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.d.ts +14 -0
  303. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.d.ts.map +1 -0
  304. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.js +110 -0
  305. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.js.map +1 -0
  306. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.d.ts +32 -0
  307. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.d.ts.map +1 -0
  308. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.js +284 -0
  309. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.js.map +1 -0
  310. package/dist/src/infrastructure/external-apis/atlassian/jira/types.d.ts +114 -0
  311. package/dist/src/infrastructure/external-apis/atlassian/jira/types.d.ts.map +1 -0
  312. package/dist/src/infrastructure/external-apis/atlassian/jira/types.js +7 -0
  313. package/dist/src/infrastructure/external-apis/atlassian/jira/types.js.map +1 -0
  314. package/dist/src/infrastructure/external-apis/github/client.d.ts +25 -0
  315. package/dist/src/infrastructure/external-apis/github/client.d.ts.map +1 -0
  316. package/dist/src/infrastructure/external-apis/github/client.js +109 -0
  317. package/dist/src/infrastructure/external-apis/github/client.js.map +1 -0
  318. package/dist/src/infrastructure/external-apis/github/index.d.ts +7 -0
  319. package/dist/src/infrastructure/external-apis/github/index.d.ts.map +1 -0
  320. package/dist/src/infrastructure/external-apis/github/index.js +8 -0
  321. package/dist/src/infrastructure/external-apis/github/index.js.map +1 -0
  322. package/dist/src/infrastructure/external-apis/github/types.d.ts +69 -0
  323. package/dist/src/infrastructure/external-apis/github/types.d.ts.map +1 -0
  324. package/dist/src/infrastructure/external-apis/github/types.js +5 -0
  325. package/dist/src/infrastructure/external-apis/github/types.js.map +1 -0
  326. package/dist/src/infrastructure/external-apis/github/utils.d.ts +18 -0
  327. package/dist/src/infrastructure/external-apis/github/utils.d.ts.map +1 -0
  328. package/dist/src/infrastructure/external-apis/github/utils.js +84 -0
  329. package/dist/src/infrastructure/external-apis/github/utils.js.map +1 -0
  330. package/dist/src/infrastructure/filesystem/index.d.ts +6 -0
  331. package/dist/src/infrastructure/filesystem/index.d.ts.map +1 -0
  332. package/dist/src/infrastructure/filesystem/index.js +5 -0
  333. package/dist/src/infrastructure/filesystem/index.js.map +1 -0
  334. package/dist/src/infrastructure/filesystem/project-meta.d.ts +32 -0
  335. package/dist/src/infrastructure/filesystem/project-meta.d.ts.map +1 -0
  336. package/dist/src/infrastructure/filesystem/project-meta.js +75 -0
  337. package/dist/src/infrastructure/filesystem/project-meta.js.map +1 -0
  338. package/dist/src/infrastructure/parsers/aidlc-parser.d.ts +86 -0
  339. package/dist/src/infrastructure/parsers/aidlc-parser.d.ts.map +1 -0
  340. package/dist/src/infrastructure/parsers/aidlc-parser.js +208 -0
  341. package/dist/src/infrastructure/parsers/aidlc-parser.js.map +1 -0
  342. package/dist/src/infrastructure/parsers/index.d.ts +8 -0
  343. package/dist/src/infrastructure/parsers/index.d.ts.map +1 -0
  344. package/dist/src/infrastructure/parsers/index.js +6 -0
  345. package/dist/src/infrastructure/parsers/index.js.map +1 -0
  346. package/dist/src/infrastructure/parsers/markdown-parser.d.ts +51 -0
  347. package/dist/src/infrastructure/parsers/markdown-parser.d.ts.map +1 -0
  348. package/dist/src/infrastructure/parsers/markdown-parser.js +253 -0
  349. package/dist/src/infrastructure/parsers/markdown-parser.js.map +1 -0
  350. package/dist/src/presentation/cli/config.d.ts +12 -0
  351. package/dist/src/presentation/cli/config.d.ts.map +1 -0
  352. package/dist/src/presentation/cli/config.js +22 -0
  353. package/dist/src/presentation/cli/config.js.map +1 -0
  354. package/dist/src/presentation/cli/version.d.ts +10 -0
  355. package/dist/src/presentation/cli/version.d.ts.map +1 -0
  356. package/dist/src/presentation/cli/version.js +41 -0
  357. package/dist/src/presentation/cli/version.js.map +1 -0
  358. package/dist/src/presentation/cli.d.ts +22 -0
  359. package/dist/src/presentation/cli.d.ts.map +1 -0
  360. package/dist/src/presentation/cli.js +85 -0
  361. package/dist/src/presentation/cli.js.map +1 -0
  362. package/dist/src/presentation/commands/config/register.d.ts +11 -0
  363. package/dist/src/presentation/commands/config/register.d.ts.map +1 -0
  364. package/dist/src/presentation/commands/config/register.js +44 -0
  365. package/dist/src/presentation/commands/config/register.js.map +1 -0
  366. package/dist/src/presentation/commands/confluence/register.d.ts +11 -0
  367. package/dist/src/presentation/commands/confluence/register.d.ts.map +1 -0
  368. package/dist/src/presentation/commands/confluence/register.js +32 -0
  369. package/dist/src/presentation/commands/confluence/register.js.map +1 -0
  370. package/dist/src/presentation/commands/confluence/sync.d.ts +17 -0
  371. package/dist/src/presentation/commands/confluence/sync.d.ts.map +1 -0
  372. package/dist/src/presentation/commands/confluence/sync.js +25 -0
  373. package/dist/src/presentation/commands/confluence/sync.js.map +1 -0
  374. package/dist/src/presentation/commands/init/handler.d.ts +10 -0
  375. package/dist/src/presentation/commands/init/handler.d.ts.map +1 -0
  376. package/dist/src/presentation/commands/init/handler.js +64 -0
  377. package/dist/src/presentation/commands/init/handler.js.map +1 -0
  378. package/dist/src/presentation/commands/init/prompts.d.ts +41 -0
  379. package/dist/src/presentation/commands/init/prompts.d.ts.map +1 -0
  380. package/dist/src/presentation/commands/init/prompts.js +119 -0
  381. package/dist/src/presentation/commands/init/prompts.js.map +1 -0
  382. package/dist/src/presentation/commands/init/register.d.ts +11 -0
  383. package/dist/src/presentation/commands/init/register.d.ts.map +1 -0
  384. package/dist/src/presentation/commands/init/register.js +141 -0
  385. package/dist/src/presentation/commands/init/register.js.map +1 -0
  386. package/dist/src/presentation/commands/init/setup.d.ts +26 -0
  387. package/dist/src/presentation/commands/init/setup.d.ts.map +1 -0
  388. package/dist/src/presentation/commands/init/setup.js +196 -0
  389. package/dist/src/presentation/commands/init/setup.js.map +1 -0
  390. package/dist/src/presentation/commands/init/templates.d.ts +19 -0
  391. package/dist/src/presentation/commands/init/templates.d.ts.map +1 -0
  392. package/dist/src/presentation/commands/init/templates.js +140 -0
  393. package/dist/src/presentation/commands/init/templates.js.map +1 -0
  394. package/dist/src/presentation/commands/init/validation.d.ts +21 -0
  395. package/dist/src/presentation/commands/init/validation.d.ts.map +1 -0
  396. package/dist/src/presentation/commands/init/validation.js +65 -0
  397. package/dist/src/presentation/commands/init/validation.js.map +1 -0
  398. package/dist/src/presentation/commands/jira/register.d.ts +11 -0
  399. package/dist/src/presentation/commands/jira/register.d.ts.map +1 -0
  400. package/dist/src/presentation/commands/jira/register.js +75 -0
  401. package/dist/src/presentation/commands/jira/register.js.map +1 -0
  402. package/dist/src/presentation/commands/jira/sync.d.ts +29 -0
  403. package/dist/src/presentation/commands/jira/sync.d.ts.map +1 -0
  404. package/dist/src/presentation/commands/jira/sync.js +37 -0
  405. package/dist/src/presentation/commands/jira/sync.js.map +1 -0
  406. package/dist/src/{commands/multi-repo-add-repo.d.ts → presentation/commands/multi-repo/add-repo.d.ts} +1 -1
  407. package/dist/src/presentation/commands/multi-repo/add-repo.d.ts.map +1 -0
  408. package/dist/src/{commands/multi-repo-add-repo.js → presentation/commands/multi-repo/add-repo.js} +4 -4
  409. package/dist/src/presentation/commands/multi-repo/add-repo.js.map +1 -0
  410. package/dist/src/{commands/multi-repo-ci-status.d.ts → presentation/commands/multi-repo/ci-status.d.ts} +2 -2
  411. package/dist/src/presentation/commands/multi-repo/ci-status.d.ts.map +1 -0
  412. package/dist/src/{commands/multi-repo-ci-status.js → presentation/commands/multi-repo/ci-status.js} +95 -81
  413. package/dist/src/presentation/commands/multi-repo/ci-status.js.map +1 -0
  414. package/dist/src/{commands/multi-repo-confluence-sync.d.ts → presentation/commands/multi-repo/confluence-sync.d.ts} +1 -1
  415. package/dist/src/presentation/commands/multi-repo/confluence-sync.d.ts.map +1 -0
  416. package/dist/src/{commands/multi-repo-confluence-sync.js → presentation/commands/multi-repo/confluence-sync.js} +7 -6
  417. package/dist/src/presentation/commands/multi-repo/confluence-sync.js.map +1 -0
  418. package/dist/src/{commands/multi-repo-init.d.ts → presentation/commands/multi-repo/init.d.ts} +1 -1
  419. package/dist/src/presentation/commands/multi-repo/init.d.ts.map +1 -0
  420. package/dist/src/{commands/multi-repo-init.js → presentation/commands/multi-repo/init.js} +6 -6
  421. package/dist/src/presentation/commands/multi-repo/init.js.map +1 -0
  422. package/dist/src/{commands/multi-repo-list.d.ts → presentation/commands/multi-repo/list.d.ts} +1 -1
  423. package/dist/src/presentation/commands/multi-repo/list.d.ts.map +1 -0
  424. package/dist/src/{commands/multi-repo-list.js → presentation/commands/multi-repo/list.js} +2 -2
  425. package/dist/src/presentation/commands/multi-repo/list.js.map +1 -0
  426. package/dist/src/presentation/commands/multi-repo/register.d.ts +12 -0
  427. package/dist/src/presentation/commands/multi-repo/register.d.ts.map +1 -0
  428. package/dist/src/presentation/commands/multi-repo/register.js +249 -0
  429. package/dist/src/presentation/commands/multi-repo/register.js.map +1 -0
  430. package/dist/src/{commands/multi-repo-test.d.ts → presentation/commands/multi-repo/test.d.ts} +1 -1
  431. package/dist/src/presentation/commands/multi-repo/test.d.ts.map +1 -0
  432. package/dist/src/{commands/multi-repo-test.js → presentation/commands/multi-repo/test.js} +4 -4
  433. package/dist/src/presentation/commands/multi-repo/test.js.map +1 -0
  434. package/dist/src/presentation/commands/phase/register.d.ts +11 -0
  435. package/dist/src/presentation/commands/phase/register.d.ts.map +1 -0
  436. package/dist/src/presentation/commands/phase/register.js +97 -0
  437. package/dist/src/presentation/commands/phase/register.js.map +1 -0
  438. package/dist/src/presentation/commands/spec/archive.d.ts +17 -0
  439. package/dist/src/presentation/commands/spec/archive.d.ts.map +1 -0
  440. package/dist/src/presentation/commands/spec/archive.js +40 -0
  441. package/dist/src/presentation/commands/spec/archive.js.map +1 -0
  442. package/dist/src/presentation/commands/spec/list.d.ts +15 -0
  443. package/dist/src/presentation/commands/spec/list.d.ts.map +1 -0
  444. package/dist/src/presentation/commands/spec/list.js +55 -0
  445. package/dist/src/presentation/commands/spec/list.js.map +1 -0
  446. package/dist/src/presentation/commands/spec/register.d.ts +11 -0
  447. package/dist/src/presentation/commands/spec/register.d.ts.map +1 -0
  448. package/dist/src/presentation/commands/spec/register.js +45 -0
  449. package/dist/src/presentation/commands/spec/register.js.map +1 -0
  450. package/dist/src/presentation/commands/workflow/orchestrator.d.ts +50 -0
  451. package/dist/src/presentation/commands/workflow/orchestrator.d.ts.map +1 -0
  452. package/dist/src/presentation/commands/workflow/orchestrator.js +174 -0
  453. package/dist/src/presentation/commands/workflow/orchestrator.js.map +1 -0
  454. package/dist/src/presentation/commands/workflow/register.d.ts +11 -0
  455. package/dist/src/presentation/commands/workflow/register.d.ts.map +1 -0
  456. package/dist/src/presentation/commands/workflow/register.js +58 -0
  457. package/dist/src/presentation/commands/workflow/register.js.map +1 -0
  458. package/dist/src/presentation/formatters/error-formatter.d.ts +79 -0
  459. package/dist/src/presentation/formatters/error-formatter.d.ts.map +1 -0
  460. package/dist/src/presentation/formatters/error-formatter.js +150 -0
  461. package/dist/src/presentation/formatters/error-formatter.js.map +1 -0
  462. package/dist/src/presentation/formatters/index.d.ts +8 -0
  463. package/dist/src/presentation/formatters/index.d.ts.map +1 -0
  464. package/dist/src/presentation/formatters/index.js +11 -0
  465. package/dist/src/presentation/formatters/index.js.map +1 -0
  466. package/dist/src/presentation/formatters/output-formatter.d.ts +98 -0
  467. package/dist/src/presentation/formatters/output-formatter.d.ts.map +1 -0
  468. package/dist/src/presentation/formatters/output-formatter.js +165 -0
  469. package/dist/src/presentation/formatters/output-formatter.js.map +1 -0
  470. package/dist/src/presentation/formatters/progress-formatter.d.ts +121 -0
  471. package/dist/src/presentation/formatters/progress-formatter.d.ts.map +1 -0
  472. package/dist/src/presentation/formatters/progress-formatter.js +235 -0
  473. package/dist/src/presentation/formatters/progress-formatter.js.map +1 -0
  474. package/dist/src/presentation/interactive/confirmation.d.ts +24 -0
  475. package/dist/src/presentation/interactive/confirmation.d.ts.map +1 -0
  476. package/dist/src/presentation/interactive/confirmation.js +54 -0
  477. package/dist/src/presentation/interactive/confirmation.js.map +1 -0
  478. package/dist/src/presentation/interactive/index.d.ts +8 -0
  479. package/dist/src/presentation/interactive/index.d.ts.map +1 -0
  480. package/dist/src/presentation/interactive/index.js +11 -0
  481. package/dist/src/presentation/interactive/index.js.map +1 -0
  482. package/dist/src/presentation/interactive/prompts.d.ts +31 -0
  483. package/dist/src/presentation/interactive/prompts.d.ts.map +1 -0
  484. package/dist/src/presentation/interactive/prompts.js +71 -0
  485. package/dist/src/presentation/interactive/prompts.js.map +1 -0
  486. package/dist/src/presentation/interactive/selection.d.ts +31 -0
  487. package/dist/src/presentation/interactive/selection.d.ts.map +1 -0
  488. package/dist/src/presentation/interactive/selection.js +138 -0
  489. package/dist/src/presentation/interactive/selection.js.map +1 -0
  490. package/dist/src/shared/types/errors.d.ts +132 -0
  491. package/dist/src/shared/types/errors.d.ts.map +1 -0
  492. package/dist/src/shared/types/errors.js +61 -0
  493. package/dist/src/shared/types/errors.js.map +1 -0
  494. package/dist/src/shared/types/result.d.ts +53 -0
  495. package/dist/src/shared/types/result.d.ts.map +1 -0
  496. package/dist/src/shared/types/result.js +42 -0
  497. package/dist/src/shared/types/result.js.map +1 -0
  498. package/dist/test-confluence-auth.d.ts +6 -0
  499. package/dist/test-confluence-auth.d.ts.map +1 -0
  500. package/dist/test-confluence-auth.js +128 -0
  501. package/dist/test-confluence-auth.js.map +1 -0
  502. package/docs/MIGRATION.md +513 -0
  503. package/docs/architecture.md +774 -0
  504. package/docs/guides/comprehensive-verification-guide.md +1926 -0
  505. package/docs/onion-architecture-phase0-complete.md +91 -0
  506. package/package.json +6 -6
  507. package/scripts/README.md +148 -0
  508. package/scripts/__tests__/jira-transitions.test.ts +44 -30
  509. package/scripts/__tests__/mermaid-converter.test.ts +2 -2
  510. package/scripts/__tests__/multi-repo-validator.test.ts +62 -62
  511. package/scripts/__tests__/spec-archiver.test.ts +12 -0
  512. package/scripts/__tests__/validate-phase.test.ts +6 -6
  513. package/scripts/build/README.md +24 -0
  514. package/scripts/{copy-static-assets.js → build/copy-static-assets.js} +1 -1
  515. package/scripts/{set-permissions.js → build/set-permissions.js} +1 -1
  516. package/scripts/config/config-schema.ts +43 -302
  517. package/scripts/config-global.ts +3 -2
  518. package/scripts/confluence-sync.ts +17 -538
  519. package/scripts/constants/environments.ts +3 -53
  520. package/scripts/constants/languages.ts +3 -68
  521. package/scripts/constants/test-commands.ts +3 -94
  522. package/scripts/dev-tools/README.md +22 -0
  523. package/scripts/{test-interactive.ts → dev-tools/test-interactive.ts} +4 -3
  524. package/scripts/github-actions-client.ts +18 -256
  525. package/scripts/jira-sync.ts +5 -1270
  526. package/scripts/markdown-to-confluence.ts +5 -5
  527. package/scripts/multi-project-estimate.ts +3 -2
  528. package/scripts/phase-runner.ts +41 -19
  529. package/scripts/pre-flight-check.ts +27 -11
  530. package/scripts/template/__tests__/multi-repo-renderer.test.ts +12 -0
  531. package/scripts/template/multi-repo-renderer.ts +2 -2
  532. package/scripts/test-execution-generator.ts +5 -4
  533. package/scripts/utils/__tests__/config-validator.test.ts +19 -19
  534. package/scripts/utils/__tests__/feature-name-validator.test.ts +13 -13
  535. package/scripts/utils/__tests__/multi-repo-validator.test.ts +34 -34
  536. package/scripts/utils/__tests__/project-analyzer.test.ts +542 -0
  537. package/scripts/utils/__tests__/safe-file-reader.test.ts +208 -0
  538. package/scripts/utils/__tests__/security-validator.test.ts +33 -33
  539. package/scripts/utils/__tests__/validation-result.test.ts +112 -0
  540. package/scripts/utils/aidlc-parser.ts +18 -287
  541. package/scripts/utils/ci-generator.ts +4 -3
  542. package/scripts/utils/config-loader.ts +54 -50
  543. package/scripts/utils/config-validator.ts +89 -80
  544. package/scripts/utils/docker-requirement-detector.ts +5 -4
  545. package/scripts/utils/env-config.ts +59 -40
  546. package/scripts/utils/feature-name-validator.ts +25 -40
  547. package/scripts/utils/interactive-helpers.ts +24 -132
  548. package/scripts/utils/language-detector.ts +4 -3
  549. package/scripts/utils/markdown-parser.ts +18 -373
  550. package/scripts/utils/multi-repo-validator.ts +27 -28
  551. package/scripts/utils/project-analyzer.ts +429 -0
  552. package/scripts/utils/project-detector.ts +6 -5
  553. package/scripts/utils/project-finder.ts +2 -154
  554. package/scripts/utils/project-meta.ts +8 -91
  555. package/scripts/utils/safe-file-reader.ts +158 -0
  556. package/scripts/utils/security-validator.ts +42 -78
  557. package/scripts/utils/spec-archiver.ts +7 -6
  558. package/scripts/utils/spec-updater.ts +12 -6
  559. package/scripts/utils/tasks-converter.ts +2 -2
  560. package/scripts/utils/tasks-format-validator.ts +4 -4
  561. package/scripts/utils/template-applier.ts +4 -3
  562. package/scripts/utils/types/validation.ts +92 -0
  563. package/scripts/validate-phase.ts +51 -23
  564. package/scripts/workflow-orchestrator.ts +16 -251
  565. package/dist/scripts/mermaid-converter.d.ts.map +0 -1
  566. package/dist/scripts/mermaid-converter.js.map +0 -1
  567. package/dist/scripts/resource-dashboard.d.ts +0 -7
  568. package/dist/scripts/resource-dashboard.d.ts.map +0 -1
  569. package/dist/scripts/resource-dashboard.js +0 -157
  570. package/dist/scripts/resource-dashboard.js.map +0 -1
  571. package/dist/scripts/test-interactive.d.ts.map +0 -1
  572. package/dist/scripts/test-interactive.js.map +0 -1
  573. package/dist/scripts/test-new-features.d.ts +0 -5
  574. package/dist/scripts/test-new-features.d.ts.map +0 -1
  575. package/dist/scripts/test-new-features.js +0 -148
  576. package/dist/scripts/test-new-features.js.map +0 -1
  577. package/dist/scripts/test-spec-generator.d.ts +0 -29
  578. package/dist/scripts/test-spec-generator.d.ts.map +0 -1
  579. package/dist/scripts/test-spec-generator.js +0 -493
  580. package/dist/scripts/test-spec-generator.js.map +0 -1
  581. package/dist/scripts/utils/confluence-approval.d.ts +0 -46
  582. package/dist/scripts/utils/confluence-approval.d.ts.map +0 -1
  583. package/dist/scripts/utils/confluence-approval.js +0 -120
  584. package/dist/scripts/utils/confluence-approval.js.map +0 -1
  585. package/dist/scripts/utils/template-finder.d.ts +0 -37
  586. package/dist/scripts/utils/template-finder.d.ts.map +0 -1
  587. package/dist/scripts/utils/template-finder.js +0 -58
  588. package/dist/scripts/utils/template-finder.js.map +0 -1
  589. package/dist/src/commands/multi-repo-add-repo.d.ts.map +0 -1
  590. package/dist/src/commands/multi-repo-add-repo.js.map +0 -1
  591. package/dist/src/commands/multi-repo-ci-status.d.ts.map +0 -1
  592. package/dist/src/commands/multi-repo-ci-status.js.map +0 -1
  593. package/dist/src/commands/multi-repo-confluence-sync.d.ts.map +0 -1
  594. package/dist/src/commands/multi-repo-confluence-sync.js.map +0 -1
  595. package/dist/src/commands/multi-repo-init.d.ts.map +0 -1
  596. package/dist/src/commands/multi-repo-init.js.map +0 -1
  597. package/dist/src/commands/multi-repo-list.d.ts.map +0 -1
  598. package/dist/src/commands/multi-repo-list.js.map +0 -1
  599. package/dist/src/commands/multi-repo-test.d.ts.map +0 -1
  600. package/dist/src/commands/multi-repo-test.js.map +0 -1
  601. package/dist/src/commands/setup-existing.d.ts +0 -22
  602. package/dist/src/commands/setup-existing.d.ts.map +0 -1
  603. package/dist/src/commands/setup-existing.js +0 -606
  604. package/dist/src/commands/setup-existing.js.map +0 -1
  605. package/scripts/__tests__/setup-existing-project.test.ts +0 -244
  606. package/scripts/resource-dashboard.ts +0 -189
  607. package/scripts/test-new-features.ts +0 -171
  608. package/scripts/test-spec-generator.ts +0 -570
  609. package/scripts/utils/confluence-approval.ts +0 -169
  610. package/scripts/utils/template-finder.ts +0 -69
  611. /package/dist/scripts/{mermaid-converter.d.ts → dev-tools/mermaid-converter.d.ts} +0 -0
  612. /package/dist/scripts/{mermaid-converter.js → dev-tools/mermaid-converter.js} +0 -0
  613. /package/dist/scripts/{test-interactive.d.ts → dev-tools/test-interactive.d.ts} +0 -0
  614. /package/scripts/{mermaid-converter.ts → dev-tools/mermaid-converter.ts} +0 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * 共通 ValidationResult 型定義
3
+ *
4
+ * すべてのバリデーション結果を統一的に扱うための Result 型。
5
+ * Result<T, E> パターンを採用し、型安全性を向上。
6
+ */
7
+
8
+ /**
9
+ * Result<T, E> 型
10
+ *
11
+ * @template T - 成功時の値の型
12
+ * @template E - エラーの型(デフォルトは string)
13
+ */
14
+ export interface Result<T, E = string> {
15
+ /**
16
+ * バリデーションが成功したかどうか
17
+ */
18
+ success: boolean;
19
+
20
+ /**
21
+ * 成功時の値(失敗時は undefined)
22
+ */
23
+ value: T | undefined;
24
+
25
+ /**
26
+ * エラーメッセージの配列
27
+ */
28
+ errors: E[];
29
+
30
+ /**
31
+ * 警告メッセージの配列
32
+ */
33
+ warnings: E[];
34
+ }
35
+
36
+ /**
37
+ * 成功結果を作成するヘルパー関数
38
+ */
39
+ export function success<T, E = string>(value: T, warnings: E[] = []): Result<T, E> {
40
+ return {
41
+ success: true,
42
+ value,
43
+ errors: [],
44
+ warnings
45
+ };
46
+ }
47
+
48
+ /**
49
+ * 失敗結果を作成するヘルパー関数
50
+ */
51
+ export function failure<T, E = string>(errors: E[], warnings: E[] = []): Result<T, E> {
52
+ return {
53
+ success: false,
54
+ value: undefined,
55
+ errors,
56
+ warnings
57
+ };
58
+ }
59
+
60
+ /**
61
+ * 旧 ValidationResult 互換型(移行期間用)
62
+ *
63
+ * @deprecated Use Result<boolean, string> instead
64
+ */
65
+ export interface LegacyValidationResult {
66
+ valid: boolean;
67
+ errors: string[];
68
+ warnings?: string[];
69
+ }
70
+
71
+ /**
72
+ * 旧 ValidationResult を Result に変換
73
+ */
74
+ export function fromLegacy(legacy: LegacyValidationResult): Result<boolean, string> {
75
+ return {
76
+ success: legacy.valid,
77
+ value: legacy.valid,
78
+ errors: legacy.errors,
79
+ warnings: legacy.warnings || []
80
+ };
81
+ }
82
+
83
+ /**
84
+ * Result を 旧 ValidationResult に変換
85
+ */
86
+ export function toLegacy(result: Result<boolean, string>): LegacyValidationResult {
87
+ return {
88
+ valid: result.success,
89
+ errors: result.errors,
90
+ warnings: result.warnings
91
+ };
92
+ }
@@ -3,7 +3,8 @@
3
3
  * 各フェーズで必須項目が完了しているかチェック
4
4
  */
5
5
 
6
- import { existsSync, readFileSync } from 'fs';
6
+ import { existsSync } from 'fs';
7
+ import { safeReadFileOrThrow, safeReadJsonFile } from './utils/safe-file-reader.js';
7
8
  import { join } from 'path';
8
9
  import { validateFeatureName } from './utils/feature-name-validator.js';
9
10
  import { loadConfig } from './utils/config-loader.js';
@@ -17,9 +18,14 @@ type Phase =
17
18
  | 'phase-a'
18
19
  | 'phase-b';
19
20
 
21
+ /**
22
+ * Phase validation result type
23
+ * Based on Result<T, E> pattern but specialized for phase validation
24
+ */
20
25
  interface ValidationResult {
21
26
  phase: Phase;
22
- valid: boolean;
27
+ success: boolean;
28
+ value: void;
23
29
  errors: string[];
24
30
  warnings: string[];
25
31
  }
@@ -29,12 +35,22 @@ interface ValidationResult {
29
35
  */
30
36
  function loadSpecJson(feature: string): SpecJson {
31
37
  const specPath = join(process.cwd(), '.kiro', 'specs', feature, 'spec.json');
32
-
38
+
33
39
  if (!existsSync(specPath)) {
34
40
  throw new Error(`spec.json not found: ${specPath}`);
35
41
  }
36
-
37
- return JSON.parse(readFileSync(specPath, 'utf-8'));
42
+
43
+ const result = safeReadJsonFile<SpecJson>(specPath);
44
+
45
+ if (!result.success) {
46
+ const errorType = result.errors[0].type;
47
+ const errorMsg = errorType === 'InvalidJSON'
48
+ ? `Invalid JSON: ${result.errors[0].cause}`
49
+ : errorType;
50
+ throw new Error(`spec.json読み込みエラー: ${errorMsg}`);
51
+ }
52
+
53
+ return result.value!;
38
54
  }
39
55
 
40
56
  /**
@@ -46,7 +62,7 @@ function validateRequirements(feature: string): ValidationResult {
46
62
 
47
63
  // 0. feature名のバリデーション
48
64
  const nameValidation = validateFeatureName(feature);
49
- if (!nameValidation.valid) {
65
+ if (!nameValidation.success) {
50
66
  errors.push(...nameValidation.errors);
51
67
  }
52
68
 
@@ -63,7 +79,7 @@ function validateRequirements(feature: string): ValidationResult {
63
79
  } catch (error: unknown) {
64
80
  const message = error instanceof Error ? error.message : String(error);
65
81
  errors.push(`❌ spec.json読み込みエラー: ${message}`);
66
- return { phase: 'requirements', valid: false, errors, warnings };
82
+ return { phase: 'requirements', success: false, value: undefined, errors, warnings };
67
83
  }
68
84
 
69
85
  // 3. Confluenceページ作成チェック(必須)
@@ -84,7 +100,8 @@ function validateRequirements(feature: string): ValidationResult {
84
100
 
85
101
  return {
86
102
  phase: 'requirements',
87
- valid: errors.length === 0,
103
+ success: errors.length === 0,
104
+ value: undefined,
88
105
  errors,
89
106
  warnings
90
107
  };
@@ -99,7 +116,7 @@ function validateDesign(feature: string): ValidationResult {
99
116
 
100
117
  // 0. feature名のバリデーション
101
118
  const nameValidation = validateFeatureName(feature);
102
- if (!nameValidation.valid) {
119
+ if (!nameValidation.success) {
103
120
  errors.push(...nameValidation.errors);
104
121
  }
105
122
 
@@ -116,7 +133,7 @@ function validateDesign(feature: string): ValidationResult {
116
133
  } catch (error: unknown) {
117
134
  const message = error instanceof Error ? error.message : String(error);
118
135
  errors.push(`❌ spec.json読み込みエラー: ${message}`);
119
- return { phase: 'design', valid: false, errors, warnings };
136
+ return { phase: 'design', success: false, value: undefined, errors, warnings };
120
137
  }
121
138
 
122
139
  // 3. 前提: 要件定義完了チェック
@@ -137,7 +154,8 @@ function validateDesign(feature: string): ValidationResult {
137
154
 
138
155
  return {
139
156
  phase: 'design',
140
- valid: errors.length === 0,
157
+ success: errors.length === 0,
158
+ value: undefined,
141
159
  errors,
142
160
  warnings
143
161
  };
@@ -152,7 +170,7 @@ function validateTasks(feature: string): ValidationResult {
152
170
 
153
171
  // 0. feature名のバリデーション
154
172
  const nameValidation = validateFeatureName(feature);
155
- if (!nameValidation.valid) {
173
+ if (!nameValidation.success) {
156
174
  errors.push(...nameValidation.errors);
157
175
  }
158
176
 
@@ -171,7 +189,13 @@ function validateTasks(feature: string): ValidationResult {
171
189
  }
172
190
 
173
191
  // 営業日表記チェック(設定で無効化可能)
174
- const tasksContent = readFileSync(tasksPath, 'utf-8');
192
+ let tasksContent: string;
193
+ try {
194
+ tasksContent = safeReadFileOrThrow(tasksPath);
195
+ } catch (_error) {
196
+ errors.push('❌ tasks.md の読み込みに失敗しました');
197
+ return { phase: 'tasks', success: false, value: undefined, errors, warnings };
198
+ }
175
199
 
176
200
  if (config.validation?.weekdayNotation !== false) {
177
201
  // 日本語または英語の曜日表記をチェック
@@ -198,7 +222,7 @@ function validateTasks(feature: string): ValidationResult {
198
222
  } catch (error: unknown) {
199
223
  const message = error instanceof Error ? error.message : String(error);
200
224
  errors.push(`❌ spec.json読み込みエラー: ${message}`);
201
- return { phase: 'tasks', valid: false, errors, warnings };
225
+ return { phase: 'tasks', success: false, value: undefined, errors, warnings };
202
226
  }
203
227
 
204
228
  // 3. 前提: 設計完了チェック
@@ -236,7 +260,8 @@ function validateTasks(feature: string): ValidationResult {
236
260
 
237
261
  return {
238
262
  phase: 'tasks',
239
- valid: errors.length === 0,
263
+ success: errors.length === 0,
264
+ value: undefined,
240
265
  errors,
241
266
  warnings
242
267
  };
@@ -253,7 +278,7 @@ function validateEnvironmentSetup(feature: string): ValidationResult {
253
278
 
254
279
  // feature名のバリデーション
255
280
  const nameValidation = validateFeatureName(feature);
256
- if (!nameValidation.valid) {
281
+ if (!nameValidation.success) {
257
282
  errors.push(...nameValidation.errors);
258
283
  }
259
284
 
@@ -261,7 +286,8 @@ function validateEnvironmentSetup(feature: string): ValidationResult {
261
286
 
262
287
  return {
263
288
  phase: 'environment-setup',
264
- valid: errors.length === 0,
289
+ success: errors.length === 0,
290
+ value: undefined,
265
291
  errors,
266
292
  warnings
267
293
  };
@@ -277,7 +303,7 @@ function validatePhaseA(feature: string): ValidationResult {
277
303
 
278
304
  // feature名のバリデーション
279
305
  const nameValidation = validateFeatureName(feature);
280
- if (!nameValidation.valid) {
306
+ if (!nameValidation.success) {
281
307
  errors.push(...nameValidation.errors);
282
308
  }
283
309
 
@@ -285,7 +311,8 @@ function validatePhaseA(feature: string): ValidationResult {
285
311
 
286
312
  return {
287
313
  phase: 'phase-a',
288
- valid: errors.length === 0,
314
+ success: errors.length === 0,
315
+ value: undefined,
289
316
  errors,
290
317
  warnings
291
318
  };
@@ -301,7 +328,7 @@ function validatePhaseB(feature: string): ValidationResult {
301
328
 
302
329
  // feature名のバリデーション
303
330
  const nameValidation = validateFeatureName(feature);
304
- if (!nameValidation.valid) {
331
+ if (!nameValidation.success) {
305
332
  errors.push(...nameValidation.errors);
306
333
  }
307
334
 
@@ -309,7 +336,8 @@ function validatePhaseB(feature: string): ValidationResult {
309
336
 
310
337
  return {
311
338
  phase: 'phase-b',
312
- valid: errors.length === 0,
339
+ success: errors.length === 0,
340
+ value: undefined,
313
341
  errors,
314
342
  warnings
315
343
  };
@@ -359,7 +387,7 @@ export function validatePhase(feature: string, phase: Phase): ValidationResult {
359
387
  result.warnings.forEach(warn => console.log(` ${warn}`));
360
388
  }
361
389
 
362
- if (result.valid) {
390
+ if (result.success) {
363
391
  console.log('\n✅ バリデーション成功: すべての必須項目が完了しています');
364
392
  } else {
365
393
  console.log('\n❌ バリデーション失敗: 上記のエラーを修正してください');
@@ -405,7 +433,7 @@ if (import.meta.url === `file://${process.argv[1]}`) {
405
433
 
406
434
  try {
407
435
  const result = validatePhase(feature, phase as Phase);
408
- process.exit(result.valid ? 0 : 1);
436
+ process.exit(result.success ? 0 : 1);
409
437
  } catch (error: unknown) {
410
438
  const message = error instanceof Error ? error.message : String(error);
411
439
  console.error(`\n❌ Validation error: ${message}`);
@@ -1,262 +1,29 @@
1
1
  /**
2
- * ワークフローオーケストレーター
3
- * AI開発フロー全体を統合実行
2
+ * ワークフローオーケストレーター - Entry Point
3
+ * The actual logic has been moved to src/presentation/commands/workflow/
4
4
  */
5
5
 
6
6
  import { loadEnv } from './utils/env-loader.js';
7
- import { loadProjectMeta } from './utils/project-meta.js';
8
- import { syncToConfluence, getConfluenceConfig } from './confluence-sync.js';
9
- import { syncTasksToJIRA } from './jira-sync.js';
10
- import { analyzeLanguage } from './utils/language-detector.js';
11
- import { executeTests, generateTestReport } from './utils/test-runner.js';
12
- import { createReleaseNotes } from './utils/release-notes-generator.js';
13
- import { pollForApproval, waitForManualApproval } from './utils/confluence-approval.js';
7
+ import {
8
+ WorkflowOrchestrator,
9
+ workflowRunCommand,
10
+ type WorkflowConfig,
11
+ type WorkflowStage,
12
+ } from '../src/presentation/commands/workflow/orchestrator.js';
14
13
 
15
14
  loadEnv();
16
15
 
17
- export interface WorkflowConfig {
18
- feature: string;
19
- stages: WorkflowStage[];
20
- approvalGates?: {
21
- requirements?: string[];
22
- design?: string[];
23
- release?: string[];
24
- };
25
- }
26
-
27
- export type WorkflowStage =
28
- | 'requirements'
29
- | 'design'
30
- | 'tasks'
31
- | 'implement'
32
- | 'test'
33
- | 'release';
34
-
35
- export class WorkflowOrchestrator {
36
- private config: WorkflowConfig;
37
-
38
- constructor(config: WorkflowConfig) {
39
- this.config = config;
40
- }
41
-
42
- /**
43
- * ワークフロー全体を実行
44
- */
45
- async run(): Promise<void> {
46
- console.log(`🚀 Starting workflow for: ${this.config.feature}`);
47
- console.log(`Stages: ${this.config.stages.join(' → ')}`);
48
-
49
- const projectMeta = loadProjectMeta();
50
- console.log(`Project: ${projectMeta.projectName}`);
51
-
52
- for (const stage of this.config.stages) {
53
- console.log(`\n📋 Stage: ${stage}`);
54
-
55
- try {
56
- await this.executeStage(stage);
57
-
58
- // 承認ゲートチェック
59
- if (this.hasApprovalGate(stage)) {
60
- await this.waitForApproval(stage);
61
- }
62
-
63
- console.log(`✅ Stage completed: ${stage}`);
64
- } catch (error: unknown) {
65
- const message = error instanceof Error ? error.message : String(error);
66
- console.error(`❌ Stage failed: ${stage}`, message);
67
- throw error;
68
- }
69
- }
70
-
71
- console.log('\n🎉 Workflow completed successfully!');
72
- }
73
-
74
- /**
75
- * 各ステージを実行
76
- */
77
- private async executeStage(stage: WorkflowStage): Promise<void> {
78
- switch (stage) {
79
- case 'requirements':
80
- console.log(' Syncing requirements to Confluence...');
81
- await syncToConfluence(this.config.feature, 'requirements');
82
- break;
83
-
84
- case 'design':
85
- console.log(' Syncing design to Confluence...');
86
- await syncToConfluence(this.config.feature, 'design');
87
- break;
88
-
89
- case 'tasks':
90
- console.log(' Creating JIRA tasks...');
91
- await syncTasksToJIRA(this.config.feature);
92
- break;
93
-
94
- case 'implement':
95
- console.log(' Implementation phase - manual step');
96
- console.log(' Use: /kiro:spec-impl <feature> <tasks>');
97
- break;
98
-
99
- case 'test':
100
- console.log(' Test phase - execute tests');
101
- await this.executeTestPhase();
102
- break;
103
-
104
- case 'release':
105
- console.log(' Release preparation');
106
- await this.executeReleasePhase();
107
- break;
108
- }
109
- }
110
-
111
- /**
112
- * 承認ゲートがあるかチェック
113
- */
114
- private hasApprovalGate(stage: WorkflowStage): boolean {
115
- const gates = this.config.approvalGates;
116
- if (!gates) return false;
117
-
118
- const gateList =
119
- stage === 'requirements' ? gates.requirements :
120
- stage === 'design' ? gates.design :
121
- stage === 'release' ? gates.release :
122
- undefined;
123
-
124
- return Array.isArray(gateList) && gateList.length > 0;
125
- }
126
-
127
- /**
128
- * テストフェーズを実行
129
- */
130
- private async executeTestPhase(): Promise<void> {
131
- // プロジェクトの言語を検出
132
- const languageInfo = analyzeLanguage(this.config.feature);
133
- console.log(` Detected language: ${languageInfo.language} (${languageInfo.confidence} confidence)`);
134
-
135
- // テストを実行
136
- console.log(' Running tests...');
137
- const testResult = await executeTests(languageInfo.language);
138
-
139
- // レポートを生成
140
- const report = generateTestReport(testResult, this.config.feature);
141
-
142
- // Confluenceにレポートをアップロード
143
- try {
144
- // レポートをConfluenceに同期(テスト用のページとして)
145
- console.log(' Uploading test report to Confluence...');
146
-
147
- // テストレポートをファイルに保存
148
- const { writeFileSync, mkdirSync } = await import('fs');
149
- const { resolve } = await import('path');
150
- const reportDir = resolve(`.kiro/specs/${this.config.feature}`);
151
- mkdirSync(reportDir, { recursive: true });
152
- const reportPath = resolve(reportDir, 'test-report.md');
153
- writeFileSync(reportPath, report, 'utf-8');
154
-
155
- console.log(` ✅ Test report saved: ${reportPath}`);
156
-
157
- if (!testResult.success) {
158
- throw new Error('Tests failed. Please fix the issues before proceeding.');
159
- }
160
- } catch (error: unknown) {
161
- const message = error instanceof Error ? error.message : String(error);
162
- console.error(' ❌ Test execution failed:', message);
163
- throw error;
164
- }
165
- }
166
-
167
- /**
168
- * リリースフェーズを実行
169
- */
170
- private async executeReleasePhase(): Promise<void> {
171
- // リリースバージョンを決定(環境変数またはデフォルト)
172
- const version = process.env.RELEASE_VERSION || 'v1.0.0';
173
-
174
- console.log(` Generating release notes for ${version}...`);
175
-
176
- // リリースノートを生成
177
- const releaseNotes = await createReleaseNotes(version);
178
-
179
- // リリースノートをファイルに保存
180
- const { writeFileSync, mkdirSync } = await import('fs');
181
- const { resolve } = await import('path');
182
- const releaseDir = resolve(`.kiro/specs/${this.config.feature}`);
183
- mkdirSync(releaseDir, { recursive: true });
184
- const releaseNotesPath = resolve(releaseDir, `release-notes-${version}.md`);
185
- writeFileSync(releaseNotesPath, releaseNotes, 'utf-8');
186
-
187
- console.log(` ✅ Release notes saved: ${releaseNotesPath}`);
188
-
189
- // JIRA Releaseを作成
190
- try {
191
- console.log(' Creating JIRA Release...');
192
-
193
- // JIRA Release作成APIを呼び出し
194
- // Note: JIRAClientにcreateVersionメソッドを追加する必要があります
195
- console.log(' ℹ️ JIRA Release creation is pending JIRAClient enhancement');
196
- console.log(` 📋 Manual action required: Create release ${version} in JIRA`);
197
- console.log(` 📄 Release notes: ${releaseNotesPath}`);
198
- } catch (error: unknown) {
199
- const message = error instanceof Error ? error.message : String(error);
200
- console.warn(' ⚠️ Failed to create JIRA Release:', message);
201
- console.log(' 📋 Please create the release manually in JIRA');
202
- }
203
- }
204
-
205
- /**
206
- * 承認を待つ
207
- */
208
- private async waitForApproval(stage: WorkflowStage): Promise<void> {
209
- console.log(`\n⏸️ Approval required for: ${stage}`);
210
-
211
- const approvers = this.config.approvalGates?.[stage as keyof typeof this.config.approvalGates];
212
- if (approvers) {
213
- console.log(` Approvers: ${approvers.join(', ')}`);
214
- }
215
-
216
- console.log(' ✅ Confluence で承認してください');
217
- console.log(' ⏳ 承認完了後、次のステージに進みます');
218
-
219
- // Confluence自動ポーリングが有効な場合
220
- if (process.env.CONFLUENCE_AUTO_POLL === 'true') {
221
- try {
222
- const confluenceConfig = getConfluenceConfig();
223
-
224
- // TODO: ステージに応じたページIDを取得する必要があります
225
- // 現在は環境変数から取得
226
- const pageId = process.env.CONFLUENCE_APPROVAL_PAGE_ID;
227
-
228
- if (!pageId) {
229
- console.log(' ℹ️ CONFLUENCE_APPROVAL_PAGE_ID not set, falling back to manual approval');
230
- waitForManualApproval('', approvers || []);
231
- return;
232
- }
233
-
234
- console.log(' 🔄 Polling for approval...');
235
- const status = await pollForApproval(pageId, confluenceConfig);
236
-
237
- console.log(` ✅ Approved by: ${status.approvers.join(', ')}`);
238
- } catch (error: unknown) {
239
- const message = error instanceof Error ? error.message : String(error);
240
- console.error(' ❌ Approval polling failed:', message);
241
- throw error;
242
- }
243
- } else {
244
- // 手動承認
245
- waitForManualApproval('', approvers || []);
246
- console.log(' (手動で承認を確認してください)');
247
- }
248
- }
249
- }
16
+ export { WorkflowOrchestrator, workflowRunCommand, type WorkflowConfig, type WorkflowStage };
250
17
 
251
18
  // CLI実行
252
19
  if (import.meta.url === `file://${process.argv[1]}`) {
253
20
  const args = process.argv.slice(2);
254
-
21
+
255
22
  if (args.length === 0) {
256
23
  console.error('Usage: npm run workflow:run -- --feature <feature_name>');
257
24
  process.exit(1);
258
25
  }
259
-
26
+
260
27
  const featureIndex = args.indexOf('--feature');
261
28
  const feature = featureIndex >= 0 ? args[featureIndex + 1] : undefined;
262
29
 
@@ -264,20 +31,18 @@ if (import.meta.url === `file://${process.argv[1]}`) {
264
31
  console.error('Usage: npm run workflow:run -- --feature <feature_name>');
265
32
  process.exit(1);
266
33
  }
267
-
34
+
268
35
  const workflowConfig: WorkflowConfig = {
269
36
  feature,
270
37
  stages: ['requirements', 'design', 'tasks', 'implement', 'test', 'release'],
271
38
  approvalGates: {
272
39
  requirements: ['企画', '部長'],
273
40
  design: ['アーキテクト', '部長'],
274
- release: ['SM', '部長']
275
- }
41
+ release: ['SM', '部長'],
42
+ },
276
43
  };
277
-
278
- const orchestrator = new WorkflowOrchestrator(workflowConfig);
279
-
280
- orchestrator.run()
44
+
45
+ workflowRunCommand(workflowConfig)
281
46
  .then(() => process.exit(0))
282
47
  .catch((error: unknown) => {
283
48
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * リソースダッシュボード生成
3
- * プロジェクト横断のリソース管理ダッシュボードをConfluenceに作成
4
- */
5
- declare function createResourceDashboard(): Promise<void>;
6
- export { createResourceDashboard };
7
- //# sourceMappingURL=resource-dashboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-dashboard.d.ts","sourceRoot":"","sources":["../../scripts/resource-dashboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH,iBAAe,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4ItD;AAeD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}