@bloomreach/brxm-upgrade 0.1.1

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 (420) hide show
  1. package/README.md +217 -0
  2. package/dist/ai/index.d.ts +3 -0
  3. package/dist/ai/index.d.ts.map +1 -0
  4. package/dist/ai/index.js +2 -0
  5. package/dist/ai/index.js.map +1 -0
  6. package/dist/ai/providers.d.ts +27 -0
  7. package/dist/ai/providers.d.ts.map +1 -0
  8. package/dist/ai/providers.js +105 -0
  9. package/dist/ai/providers.js.map +1 -0
  10. package/dist/ai/types.d.ts +47 -0
  11. package/dist/ai/types.d.ts.map +1 -0
  12. package/dist/ai/types.js +2 -0
  13. package/dist/ai/types.js.map +1 -0
  14. package/dist/capture/change-scanner.d.ts +20 -0
  15. package/dist/capture/change-scanner.d.ts.map +1 -0
  16. package/dist/capture/change-scanner.js +71 -0
  17. package/dist/capture/change-scanner.js.map +1 -0
  18. package/dist/capture/conflict-resolver.d.ts +21 -0
  19. package/dist/capture/conflict-resolver.d.ts.map +1 -0
  20. package/dist/capture/conflict-resolver.js +45 -0
  21. package/dist/capture/conflict-resolver.js.map +1 -0
  22. package/dist/capture/critique-types.d.ts +60 -0
  23. package/dist/capture/critique-types.d.ts.map +1 -0
  24. package/dist/capture/critique-types.js +2 -0
  25. package/dist/capture/critique-types.js.map +1 -0
  26. package/dist/capture/entry-critique.d.ts +30 -0
  27. package/dist/capture/entry-critique.d.ts.map +1 -0
  28. package/dist/capture/entry-critique.js +137 -0
  29. package/dist/capture/entry-critique.js.map +1 -0
  30. package/dist/capture/entry-generator.d.ts +32 -0
  31. package/dist/capture/entry-generator.d.ts.map +1 -0
  32. package/dist/capture/entry-generator.js +209 -0
  33. package/dist/capture/entry-generator.js.map +1 -0
  34. package/dist/capture/entry-qa.d.ts +28 -0
  35. package/dist/capture/entry-qa.d.ts.map +1 -0
  36. package/dist/capture/entry-qa.js +84 -0
  37. package/dist/capture/entry-qa.js.map +1 -0
  38. package/dist/capture/entry-regeneration.d.ts +29 -0
  39. package/dist/capture/entry-regeneration.d.ts.map +1 -0
  40. package/dist/capture/entry-regeneration.js +164 -0
  41. package/dist/capture/entry-regeneration.js.map +1 -0
  42. package/dist/capture/entry-validator.d.ts +18 -0
  43. package/dist/capture/entry-validator.d.ts.map +1 -0
  44. package/dist/capture/entry-validator.js +47 -0
  45. package/dist/capture/entry-validator.js.map +1 -0
  46. package/dist/capture/heuristics.d.ts +30 -0
  47. package/dist/capture/heuristics.d.ts.map +1 -0
  48. package/dist/capture/heuristics.js +223 -0
  49. package/dist/capture/heuristics.js.map +1 -0
  50. package/dist/capture/index.d.ts +7 -0
  51. package/dist/capture/index.d.ts.map +1 -0
  52. package/dist/capture/index.js +11 -0
  53. package/dist/capture/index.js.map +1 -0
  54. package/dist/capture/quality-report.d.ts +19 -0
  55. package/dist/capture/quality-report.d.ts.map +1 -0
  56. package/dist/capture/quality-report.js +161 -0
  57. package/dist/capture/quality-report.js.map +1 -0
  58. package/dist/capture/review-flow.d.ts +37 -0
  59. package/dist/capture/review-flow.d.ts.map +1 -0
  60. package/dist/capture/review-flow.js +212 -0
  61. package/dist/capture/review-flow.js.map +1 -0
  62. package/dist/capture/types.d.ts +114 -0
  63. package/dist/capture/types.d.ts.map +1 -0
  64. package/dist/capture/types.js +2 -0
  65. package/dist/capture/types.js.map +1 -0
  66. package/dist/commands/discover.d.ts +6 -0
  67. package/dist/commands/discover.d.ts.map +1 -0
  68. package/dist/commands/discover.js +147 -0
  69. package/dist/commands/discover.js.map +1 -0
  70. package/dist/commands/execute.d.ts +12 -0
  71. package/dist/commands/execute.d.ts.map +1 -0
  72. package/dist/commands/execute.js +113 -0
  73. package/dist/commands/execute.js.map +1 -0
  74. package/dist/commands/export.d.ts +26 -0
  75. package/dist/commands/export.d.ts.map +1 -0
  76. package/dist/commands/export.js +291 -0
  77. package/dist/commands/export.js.map +1 -0
  78. package/dist/commands/finalize.d.ts +12 -0
  79. package/dist/commands/finalize.d.ts.map +1 -0
  80. package/dist/commands/finalize.js +225 -0
  81. package/dist/commands/finalize.js.map +1 -0
  82. package/dist/commands/guide.d.ts +12 -0
  83. package/dist/commands/guide.d.ts.map +1 -0
  84. package/dist/commands/guide.js +28 -0
  85. package/dist/commands/guide.js.map +1 -0
  86. package/dist/commands/index.d.ts +6 -0
  87. package/dist/commands/index.d.ts.map +1 -0
  88. package/dist/commands/index.js +22 -0
  89. package/dist/commands/index.js.map +1 -0
  90. package/dist/commands/log-change.d.ts +14 -0
  91. package/dist/commands/log-change.d.ts.map +1 -0
  92. package/dist/commands/log-change.js +243 -0
  93. package/dist/commands/log-change.js.map +1 -0
  94. package/dist/commands/plan.d.ts +12 -0
  95. package/dist/commands/plan.d.ts.map +1 -0
  96. package/dist/commands/plan.js +162 -0
  97. package/dist/commands/plan.js.map +1 -0
  98. package/dist/commands/review-manifest.d.ts +39 -0
  99. package/dist/commands/review-manifest.d.ts.map +1 -0
  100. package/dist/commands/review-manifest.js +178 -0
  101. package/dist/commands/review-manifest.js.map +1 -0
  102. package/dist/commands/setup-manifests.d.ts +12 -0
  103. package/dist/commands/setup-manifests.d.ts.map +1 -0
  104. package/dist/commands/setup-manifests.js +229 -0
  105. package/dist/commands/setup-manifests.js.map +1 -0
  106. package/dist/config/defaults.d.ts +15 -0
  107. package/dist/config/defaults.d.ts.map +1 -0
  108. package/dist/config/defaults.js +36 -0
  109. package/dist/config/defaults.js.map +1 -0
  110. package/dist/config/index.d.ts +17 -0
  111. package/dist/config/index.d.ts.map +1 -0
  112. package/dist/config/index.js +104 -0
  113. package/dist/config/index.js.map +1 -0
  114. package/dist/config/schema.d.ts +33 -0
  115. package/dist/config/schema.d.ts.map +1 -0
  116. package/dist/config/schema.js +110 -0
  117. package/dist/config/schema.js.map +1 -0
  118. package/dist/core/index.d.ts +12 -0
  119. package/dist/core/index.d.ts.map +1 -0
  120. package/dist/core/index.js +16 -0
  121. package/dist/core/index.js.map +1 -0
  122. package/dist/core/phase-manager.d.ts +53 -0
  123. package/dist/core/phase-manager.d.ts.map +1 -0
  124. package/dist/core/phase-manager.js +124 -0
  125. package/dist/core/phase-manager.js.map +1 -0
  126. package/dist/core/upgrade-state.d.ts +24 -0
  127. package/dist/core/upgrade-state.d.ts.map +1 -0
  128. package/dist/core/upgrade-state.js +32 -0
  129. package/dist/core/upgrade-state.js.map +1 -0
  130. package/dist/discovery/index.d.ts +5 -0
  131. package/dist/discovery/index.d.ts.map +1 -0
  132. package/dist/discovery/index.js +4 -0
  133. package/dist/discovery/index.js.map +1 -0
  134. package/dist/discovery/orchestrator.d.ts +46 -0
  135. package/dist/discovery/orchestrator.d.ts.map +1 -0
  136. package/dist/discovery/orchestrator.js +124 -0
  137. package/dist/discovery/orchestrator.js.map +1 -0
  138. package/dist/discovery/scanners/config-detector.d.ts +24 -0
  139. package/dist/discovery/scanners/config-detector.d.ts.map +1 -0
  140. package/dist/discovery/scanners/config-detector.js +82 -0
  141. package/dist/discovery/scanners/config-detector.js.map +1 -0
  142. package/dist/discovery/scanners/cv-scanner.d.ts +30 -0
  143. package/dist/discovery/scanners/cv-scanner.d.ts.map +1 -0
  144. package/dist/discovery/scanners/cv-scanner.js +85 -0
  145. package/dist/discovery/scanners/cv-scanner.js.map +1 -0
  146. package/dist/discovery/scanners/index.d.ts +6 -0
  147. package/dist/discovery/scanners/index.d.ts.map +1 -0
  148. package/dist/discovery/scanners/index.js +6 -0
  149. package/dist/discovery/scanners/index.js.map +1 -0
  150. package/dist/discovery/scanners/maven-scanner.d.ts +33 -0
  151. package/dist/discovery/scanners/maven-scanner.d.ts.map +1 -0
  152. package/dist/discovery/scanners/maven-scanner.js +96 -0
  153. package/dist/discovery/scanners/maven-scanner.js.map +1 -0
  154. package/dist/discovery/scanners/repo-scanner.d.ts +9 -0
  155. package/dist/discovery/scanners/repo-scanner.d.ts.map +1 -0
  156. package/dist/discovery/scanners/repo-scanner.js +80 -0
  157. package/dist/discovery/scanners/repo-scanner.js.map +1 -0
  158. package/dist/discovery/scanners/version-resolver.d.ts +45 -0
  159. package/dist/discovery/scanners/version-resolver.d.ts.map +1 -0
  160. package/dist/discovery/scanners/version-resolver.js +119 -0
  161. package/dist/discovery/scanners/version-resolver.js.map +1 -0
  162. package/dist/discovery/types.d.ts +156 -0
  163. package/dist/discovery/types.d.ts.map +1 -0
  164. package/dist/discovery/types.js +2 -0
  165. package/dist/discovery/types.js.map +1 -0
  166. package/dist/discovery/validators/index.d.ts +2 -0
  167. package/dist/discovery/validators/index.d.ts.map +1 -0
  168. package/dist/discovery/validators/index.js +2 -0
  169. package/dist/discovery/validators/index.js.map +1 -0
  170. package/dist/discovery/validators/upgrade-validator.d.ts +34 -0
  171. package/dist/discovery/validators/upgrade-validator.d.ts.map +1 -0
  172. package/dist/discovery/validators/upgrade-validator.js +135 -0
  173. package/dist/discovery/validators/upgrade-validator.js.map +1 -0
  174. package/dist/docs/docs-client.d.ts +44 -0
  175. package/dist/docs/docs-client.d.ts.map +1 -0
  176. package/dist/docs/docs-client.js +161 -0
  177. package/dist/docs/docs-client.js.map +1 -0
  178. package/dist/docs/docs-context.d.ts +23 -0
  179. package/dist/docs/docs-context.d.ts.map +1 -0
  180. package/dist/docs/docs-context.js +41 -0
  181. package/dist/docs/docs-context.js.map +1 -0
  182. package/dist/docs/index.d.ts +4 -0
  183. package/dist/docs/index.d.ts.map +1 -0
  184. package/dist/docs/index.js +3 -0
  185. package/dist/docs/index.js.map +1 -0
  186. package/dist/docs/types.d.ts +27 -0
  187. package/dist/docs/types.d.ts.map +1 -0
  188. package/dist/docs/types.js +2 -0
  189. package/dist/docs/types.js.map +1 -0
  190. package/dist/execution/diff-presenter.d.ts +52 -0
  191. package/dist/execution/diff-presenter.d.ts.map +1 -0
  192. package/dist/execution/diff-presenter.js +148 -0
  193. package/dist/execution/diff-presenter.js.map +1 -0
  194. package/dist/execution/executors/ai-assisted.d.ts +28 -0
  195. package/dist/execution/executors/ai-assisted.d.ts.map +1 -0
  196. package/dist/execution/executors/ai-assisted.js +226 -0
  197. package/dist/execution/executors/ai-assisted.js.map +1 -0
  198. package/dist/execution/executors/automated.d.ts +15 -0
  199. package/dist/execution/executors/automated.d.ts.map +1 -0
  200. package/dist/execution/executors/automated.js +37 -0
  201. package/dist/execution/executors/automated.js.map +1 -0
  202. package/dist/execution/executors/cv-gate.d.ts +23 -0
  203. package/dist/execution/executors/cv-gate.d.ts.map +1 -0
  204. package/dist/execution/executors/cv-gate.js +63 -0
  205. package/dist/execution/executors/cv-gate.js.map +1 -0
  206. package/dist/execution/executors/index.d.ts +7 -0
  207. package/dist/execution/executors/index.d.ts.map +1 -0
  208. package/dist/execution/executors/index.js +7 -0
  209. package/dist/execution/executors/index.js.map +1 -0
  210. package/dist/execution/executors/manual.d.ts +18 -0
  211. package/dist/execution/executors/manual.d.ts.map +1 -0
  212. package/dist/execution/executors/manual.js +31 -0
  213. package/dist/execution/executors/manual.js.map +1 -0
  214. package/dist/execution/executors/override-resolution.d.ts +27 -0
  215. package/dist/execution/executors/override-resolution.d.ts.map +1 -0
  216. package/dist/execution/executors/override-resolution.js +79 -0
  217. package/dist/execution/executors/override-resolution.js.map +1 -0
  218. package/dist/execution/executors/version-bump.d.ts +20 -0
  219. package/dist/execution/executors/version-bump.d.ts.map +1 -0
  220. package/dist/execution/executors/version-bump.js +65 -0
  221. package/dist/execution/executors/version-bump.js.map +1 -0
  222. package/dist/execution/file-transformer.d.ts +25 -0
  223. package/dist/execution/file-transformer.d.ts.map +1 -0
  224. package/dist/execution/file-transformer.js +74 -0
  225. package/dist/execution/file-transformer.js.map +1 -0
  226. package/dist/execution/index.d.ts +7 -0
  227. package/dist/execution/index.d.ts.map +1 -0
  228. package/dist/execution/index.js +9 -0
  229. package/dist/execution/index.js.map +1 -0
  230. package/dist/execution/state-manager.d.ts +27 -0
  231. package/dist/execution/state-manager.d.ts.map +1 -0
  232. package/dist/execution/state-manager.js +48 -0
  233. package/dist/execution/state-manager.js.map +1 -0
  234. package/dist/execution/step-executor.d.ts +68 -0
  235. package/dist/execution/step-executor.d.ts.map +1 -0
  236. package/dist/execution/step-executor.js +243 -0
  237. package/dist/execution/step-executor.js.map +1 -0
  238. package/dist/execution/types.d.ts +92 -0
  239. package/dist/execution/types.d.ts.map +1 -0
  240. package/dist/execution/types.js +2 -0
  241. package/dist/execution/types.js.map +1 -0
  242. package/dist/guide/GuideRunner.d.ts +62 -0
  243. package/dist/guide/GuideRunner.d.ts.map +1 -0
  244. package/dist/guide/GuideRunner.js +390 -0
  245. package/dist/guide/GuideRunner.js.map +1 -0
  246. package/dist/guide/chat/ChatContextBuilder.d.ts +44 -0
  247. package/dist/guide/chat/ChatContextBuilder.d.ts.map +1 -0
  248. package/dist/guide/chat/ChatContextBuilder.js +121 -0
  249. package/dist/guide/chat/ChatContextBuilder.js.map +1 -0
  250. package/dist/guide/chat/ChatLoop.d.ts +18 -0
  251. package/dist/guide/chat/ChatLoop.d.ts.map +1 -0
  252. package/dist/guide/chat/ChatLoop.js +59 -0
  253. package/dist/guide/chat/ChatLoop.js.map +1 -0
  254. package/dist/guide/chat/StepCoach.d.ts +22 -0
  255. package/dist/guide/chat/StepCoach.d.ts.map +1 -0
  256. package/dist/guide/chat/StepCoach.js +39 -0
  257. package/dist/guide/chat/StepCoach.js.map +1 -0
  258. package/dist/guide/chat/index.d.ts +4 -0
  259. package/dist/guide/chat/index.d.ts.map +1 -0
  260. package/dist/guide/chat/index.js +4 -0
  261. package/dist/guide/chat/index.js.map +1 -0
  262. package/dist/guide/index.d.ts +3 -0
  263. package/dist/guide/index.d.ts.map +1 -0
  264. package/dist/guide/index.js +2 -0
  265. package/dist/guide/index.js.map +1 -0
  266. package/dist/guide/phases/DiscoveryPhase.d.ts +30 -0
  267. package/dist/guide/phases/DiscoveryPhase.d.ts.map +1 -0
  268. package/dist/guide/phases/DiscoveryPhase.js +238 -0
  269. package/dist/guide/phases/DiscoveryPhase.js.map +1 -0
  270. package/dist/guide/phases/ExecutionPhase.d.ts +80 -0
  271. package/dist/guide/phases/ExecutionPhase.d.ts.map +1 -0
  272. package/dist/guide/phases/ExecutionPhase.js +574 -0
  273. package/dist/guide/phases/ExecutionPhase.js.map +1 -0
  274. package/dist/guide/phases/PlanPhase.d.ts +22 -0
  275. package/dist/guide/phases/PlanPhase.d.ts.map +1 -0
  276. package/dist/guide/phases/PlanPhase.js +200 -0
  277. package/dist/guide/phases/PlanPhase.js.map +1 -0
  278. package/dist/guide/phases/index.d.ts +4 -0
  279. package/dist/guide/phases/index.d.ts.map +1 -0
  280. package/dist/guide/phases/index.js +4 -0
  281. package/dist/guide/phases/index.js.map +1 -0
  282. package/dist/guide/rendering/formatters.d.ts +126 -0
  283. package/dist/guide/rendering/formatters.d.ts.map +1 -0
  284. package/dist/guide/rendering/formatters.js +340 -0
  285. package/dist/guide/rendering/formatters.js.map +1 -0
  286. package/dist/guide/rendering/index.d.ts +2 -0
  287. package/dist/guide/rendering/index.d.ts.map +1 -0
  288. package/dist/guide/rendering/index.js +2 -0
  289. package/dist/guide/rendering/index.js.map +1 -0
  290. package/dist/guide/rendering/platform-changes.d.ts +18 -0
  291. package/dist/guide/rendering/platform-changes.d.ts.map +1 -0
  292. package/dist/guide/rendering/platform-changes.js +86 -0
  293. package/dist/guide/rendering/platform-changes.js.map +1 -0
  294. package/dist/guide/types.d.ts +100 -0
  295. package/dist/guide/types.d.ts.map +1 -0
  296. package/dist/guide/types.js +2 -0
  297. package/dist/guide/types.js.map +1 -0
  298. package/dist/index.d.ts +3 -0
  299. package/dist/index.d.ts.map +1 -0
  300. package/dist/index.js +138 -0
  301. package/dist/index.js.map +1 -0
  302. package/dist/manifests/maven-settings.d.ts +7 -0
  303. package/dist/manifests/maven-settings.d.ts.map +1 -0
  304. package/dist/manifests/maven-settings.js +33 -0
  305. package/dist/manifests/maven-settings.js.map +1 -0
  306. package/dist/manifests/parent-properties.d.ts +12 -0
  307. package/dist/manifests/parent-properties.d.ts.map +1 -0
  308. package/dist/manifests/parent-properties.js +28 -0
  309. package/dist/manifests/parent-properties.js.map +1 -0
  310. package/dist/manifests/schema.json +198 -0
  311. package/dist/manifests/unreleased.yaml +3 -0
  312. package/dist/mcp/index.d.ts +3 -0
  313. package/dist/mcp/index.d.ts.map +1 -0
  314. package/dist/mcp/index.js +13 -0
  315. package/dist/mcp/index.js.map +1 -0
  316. package/dist/mcp/resources/index.d.ts +32 -0
  317. package/dist/mcp/resources/index.d.ts.map +1 -0
  318. package/dist/mcp/resources/index.js +55 -0
  319. package/dist/mcp/resources/index.js.map +1 -0
  320. package/dist/mcp/server.d.ts +9 -0
  321. package/dist/mcp/server.d.ts.map +1 -0
  322. package/dist/mcp/server.js +162 -0
  323. package/dist/mcp/server.js.map +1 -0
  324. package/dist/mcp/tools/complete-step.d.ts +26 -0
  325. package/dist/mcp/tools/complete-step.d.ts.map +1 -0
  326. package/dist/mcp/tools/complete-step.js +73 -0
  327. package/dist/mcp/tools/complete-step.js.map +1 -0
  328. package/dist/mcp/tools/create-upgrade-plan.d.ts +36 -0
  329. package/dist/mcp/tools/create-upgrade-plan.d.ts.map +1 -0
  330. package/dist/mcp/tools/create-upgrade-plan.js +143 -0
  331. package/dist/mcp/tools/create-upgrade-plan.js.map +1 -0
  332. package/dist/mcp/tools/discover-project.d.ts +33 -0
  333. package/dist/mcp/tools/discover-project.d.ts.map +1 -0
  334. package/dist/mcp/tools/discover-project.js +96 -0
  335. package/dist/mcp/tools/discover-project.js.map +1 -0
  336. package/dist/mcp/tools/get-next-step.d.ts +54 -0
  337. package/dist/mcp/tools/get-next-step.d.ts.map +1 -0
  338. package/dist/mcp/tools/get-next-step.js +110 -0
  339. package/dist/mcp/tools/get-next-step.js.map +1 -0
  340. package/dist/mcp/tools/get-upgrade-status.d.ts +25 -0
  341. package/dist/mcp/tools/get-upgrade-status.d.ts.map +1 -0
  342. package/dist/mcp/tools/get-upgrade-status.js +79 -0
  343. package/dist/mcp/tools/get-upgrade-status.js.map +1 -0
  344. package/dist/mcp/tools/upgrade-targets.d.ts +19 -0
  345. package/dist/mcp/tools/upgrade-targets.d.ts.map +1 -0
  346. package/dist/mcp/tools/upgrade-targets.js +132 -0
  347. package/dist/mcp/tools/upgrade-targets.js.map +1 -0
  348. package/dist/planning/ai-analyzer.d.ts +20 -0
  349. package/dist/planning/ai-analyzer.d.ts.map +1 -0
  350. package/dist/planning/ai-analyzer.js +97 -0
  351. package/dist/planning/ai-analyzer.js.map +1 -0
  352. package/dist/planning/index.d.ts +8 -0
  353. package/dist/planning/index.d.ts.map +1 -0
  354. package/dist/planning/index.js +13 -0
  355. package/dist/planning/index.js.map +1 -0
  356. package/dist/planning/manifest-loader.d.ts +54 -0
  357. package/dist/planning/manifest-loader.d.ts.map +1 -0
  358. package/dist/planning/manifest-loader.js +233 -0
  359. package/dist/planning/manifest-loader.js.map +1 -0
  360. package/dist/planning/manifest-schema.d.ts +41 -0
  361. package/dist/planning/manifest-schema.d.ts.map +1 -0
  362. package/dist/planning/manifest-schema.js +71 -0
  363. package/dist/planning/manifest-schema.js.map +1 -0
  364. package/dist/planning/override-analyzer.d.ts +12 -0
  365. package/dist/planning/override-analyzer.d.ts.map +1 -0
  366. package/dist/planning/override-analyzer.js +42 -0
  367. package/dist/planning/override-analyzer.js.map +1 -0
  368. package/dist/planning/plan-generator.d.ts +15 -0
  369. package/dist/planning/plan-generator.d.ts.map +1 -0
  370. package/dist/planning/plan-generator.js +250 -0
  371. package/dist/planning/plan-generator.js.map +1 -0
  372. package/dist/planning/project-matcher.d.ts +65 -0
  373. package/dist/planning/project-matcher.d.ts.map +1 -0
  374. package/dist/planning/project-matcher.js +265 -0
  375. package/dist/planning/project-matcher.js.map +1 -0
  376. package/dist/planning/types.d.ts +237 -0
  377. package/dist/planning/types.d.ts.map +1 -0
  378. package/dist/planning/types.js +2 -0
  379. package/dist/planning/types.js.map +1 -0
  380. package/dist/types/index.d.ts +90 -0
  381. package/dist/types/index.d.ts.map +1 -0
  382. package/dist/types/index.js +2 -0
  383. package/dist/types/index.js.map +1 -0
  384. package/dist/utils/command-helpers.d.ts +14 -0
  385. package/dist/utils/command-helpers.d.ts.map +1 -0
  386. package/dist/utils/command-helpers.js +18 -0
  387. package/dist/utils/command-helpers.js.map +1 -0
  388. package/dist/utils/diff.d.ts +42 -0
  389. package/dist/utils/diff.d.ts.map +1 -0
  390. package/dist/utils/diff.js +80 -0
  391. package/dist/utils/diff.js.map +1 -0
  392. package/dist/utils/error.d.ts +5 -0
  393. package/dist/utils/error.d.ts.map +1 -0
  394. package/dist/utils/error.js +8 -0
  395. package/dist/utils/error.js.map +1 -0
  396. package/dist/utils/fs.d.ts +50 -0
  397. package/dist/utils/fs.d.ts.map +1 -0
  398. package/dist/utils/fs.js +117 -0
  399. package/dist/utils/fs.js.map +1 -0
  400. package/dist/utils/index.d.ts +9 -0
  401. package/dist/utils/index.d.ts.map +1 -0
  402. package/dist/utils/index.js +9 -0
  403. package/dist/utils/index.js.map +1 -0
  404. package/dist/utils/logger.d.ts +31 -0
  405. package/dist/utils/logger.d.ts.map +1 -0
  406. package/dist/utils/logger.js +62 -0
  407. package/dist/utils/logger.js.map +1 -0
  408. package/dist/utils/output-writer.d.ts +26 -0
  409. package/dist/utils/output-writer.d.ts.map +1 -0
  410. package/dist/utils/output-writer.js +62 -0
  411. package/dist/utils/output-writer.js.map +1 -0
  412. package/dist/utils/pom-parser.d.ts +94 -0
  413. package/dist/utils/pom-parser.d.ts.map +1 -0
  414. package/dist/utils/pom-parser.js +120 -0
  415. package/dist/utils/pom-parser.js.map +1 -0
  416. package/dist/utils/spinner.d.ts +35 -0
  417. package/dist/utils/spinner.d.ts.map +1 -0
  418. package/dist/utils/spinner.js +46 -0
  419. package/dist/utils/spinner.js.map +1 -0
  420. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalize.d.ts","sourceRoot":"","sources":["../../src/commands/finalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA8L/C"}
@@ -0,0 +1,225 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import semver from 'semver';
4
+ import inquirer from 'inquirer';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { dirname, join } from 'node:path';
7
+ import { createSpinner } from '../utils/spinner.js';
8
+ import { createLogger } from '../utils/logger.js';
9
+ import { pathExists } from '../utils/fs.js';
10
+ import { getApiKey } from '../config/index.js';
11
+ import { createAIClient } from '../ai/index.js';
12
+ import { loadUnreleasedManifest, saveManifest } from '../planning/manifest-loader.js';
13
+ import { extractVersionProperties } from '../manifests/parent-properties.js';
14
+ import { getCommandConfig } from '../utils/command-helpers.js';
15
+ /* eslint-disable no-console */
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ /**
19
+ * Get the project root directory for brxm-upgrade (where package.json lives).
20
+ */
21
+ function getProjectRoot() {
22
+ return join(__dirname, '..', '..');
23
+ }
24
+ function getDefaultUnreleasedPath() {
25
+ return join(getProjectRoot(), 'src', 'manifests', 'unreleased.yaml');
26
+ }
27
+ /**
28
+ * Get the default directory for released manifests.
29
+ */
30
+ function getDefaultReleasedDir() {
31
+ return join(getProjectRoot(), 'src', 'manifests', 'released');
32
+ }
33
+ /**
34
+ * Generate a changelog entry for a manifest entry using an AI client.
35
+ *
36
+ * @param entry - The manifest entry to generate a changelog for
37
+ * @param aiClient - The AI client to use for generation
38
+ * @returns A concise, one-sentence changelog entry
39
+ */
40
+ async function generateChangelogEntry(entry, aiClient) {
41
+ const result = await aiClient.generate(`Write a concise, one-sentence changelog entry for this upgrade step:\n\n` +
42
+ `ID: ${entry.id}\n` +
43
+ `Type: ${entry.type}\n` +
44
+ `Description: ${entry.description}\n` +
45
+ `Automatable: ${entry.automatable}\n\n` +
46
+ `Respond with ONLY the changelog text, no quotes or prefixes.`, { maxTokens: 200, temperature: 0.3 });
47
+ return result.text.trim();
48
+ }
49
+ /**
50
+ * Create the finalize command for promoting unreleased manifest entries to a released version.
51
+ *
52
+ * The finalize command loads the unreleased manifest, optionally generates missing
53
+ * changelog entries using AI, and writes a new versioned manifest file in the
54
+ * released directory. It then resets the unreleased manifest to empty.
55
+ *
56
+ * @returns Configured Commander command instance
57
+ */
58
+ export function createFinalizeCommand() {
59
+ const command = new Command('finalize')
60
+ .description('Promote unreleased manifest entries to a released version')
61
+ .argument('<version>', 'Version to finalize (e.g., 16.3.0)')
62
+ .option('--unreleased <path>', 'Path to unreleased.yaml')
63
+ .option('--released-dir <path>', 'Path to released manifests directory')
64
+ .option('--repo-path <path>', 'Path to the brXM monorepo root (for extracting managed_properties)')
65
+ .option('--force', 'Skip confirmation prompt', false)
66
+ .option('-v, --verbose', 'Enable verbose output', false)
67
+ .action(async (version, options) => {
68
+ const logger = createLogger({ verbose: options.verbose });
69
+ const spinner = createSpinner();
70
+ try {
71
+ // Validate version
72
+ if (!semver.valid(version)) {
73
+ console.log(chalk.red(`Invalid version: "${version}". Must be a valid semver (e.g., 16.3.0).`));
74
+ process.exit(1);
75
+ }
76
+ // Resolve paths
77
+ const unreleasedPath = options.unreleased ?? getDefaultUnreleasedPath();
78
+ const releasedDir = options.releasedDir ?? getDefaultReleasedDir();
79
+ const releasedPath = join(releasedDir, `${version}.yaml`);
80
+ // Check for version collision
81
+ if (await pathExists(releasedPath)) {
82
+ console.log(chalk.red(`Released manifest already exists: ${releasedPath}`));
83
+ console.log('Remove it manually if you want to re-finalize.');
84
+ process.exit(1);
85
+ }
86
+ // Load unreleased manifest
87
+ spinner.start('Loading unreleased manifest...');
88
+ const unreleased = await loadUnreleasedManifest(unreleasedPath);
89
+ if (unreleased.entries.length === 0) {
90
+ spinner.succeed('No unreleased entries — creating empty release manifest');
91
+ }
92
+ else {
93
+ spinner.succeed(`Loaded ${unreleased.entries.length} unreleased entries`);
94
+ }
95
+ // Quality gate: check for missing changelog entries
96
+ const missingChangelog = unreleased.entries.filter(e => !e.changelog_entry);
97
+ if (missingChangelog.length > 0) {
98
+ console.log('');
99
+ console.log(chalk.yellow(`${missingChangelog.length} entries missing changelog_entry:`));
100
+ for (const entry of missingChangelog) {
101
+ console.log(chalk.yellow(` - ${entry.id}`));
102
+ }
103
+ const config = await getCommandConfig(command);
104
+ const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
105
+ if (apiKey) {
106
+ const backfill = options.force || (await inquirer.prompt([{
107
+ type: 'confirm',
108
+ name: 'backfill',
109
+ message: 'Generate missing changelog entries with AI?',
110
+ default: true,
111
+ }])).backfill;
112
+ if (backfill) {
113
+ const aiClient = createAIClient(config.ai.provider, config.ai.model, apiKey, config.ai.baseUrl);
114
+ const skippedEntries = [];
115
+ for (const entry of missingChangelog) {
116
+ spinner.start(`Generating changelog for ${entry.id}...`);
117
+ try {
118
+ entry.changelog_entry = await generateChangelogEntry(entry, aiClient);
119
+ spinner.succeed(`${entry.id}: ${entry.changelog_entry}`);
120
+ }
121
+ catch (error) {
122
+ const msg = error instanceof Error ? error.message : String(error);
123
+ spinner.warn(`Failed to generate changelog for ${entry.id}: ${msg}`);
124
+ skippedEntries.push(entry.id);
125
+ }
126
+ }
127
+ if (skippedEntries.length > 0) {
128
+ console.log(chalk.yellow(`\nSkipped changelog generation for: ${skippedEntries.join(', ')}`));
129
+ }
130
+ }
131
+ }
132
+ else {
133
+ console.log(chalk.yellow('No AI provider configured. Cannot auto-generate changelog entries.'));
134
+ console.log('Add them manually or configure AI and try again.');
135
+ }
136
+ }
137
+ // Confirmation
138
+ if (!options.force) {
139
+ console.log('');
140
+ const { confirmed } = await inquirer.prompt([{
141
+ type: 'confirm',
142
+ name: 'confirmed',
143
+ message: `Finalize ${unreleased.entries.length} entries as ${version}?`,
144
+ default: true,
145
+ }]);
146
+ if (!confirmed) {
147
+ console.log('Cancelled.');
148
+ return;
149
+ }
150
+ }
151
+ const today = new Date().toISOString().split('T')[0];
152
+ // Extract managed version properties from the community parent POM at brxm-<version>.
153
+ // Non-fatal: if the tag isn't available (e.g., finalize run before tagging) or the POM
154
+ // has no *.version properties, we log and continue with an empty object.
155
+ let managedProperties = {};
156
+ const repoPath = options.repoPath ?? process.cwd();
157
+ const gitTag = `brxm-${version}`;
158
+ spinner.start(`Extracting managed properties from ${gitTag}...`);
159
+ try {
160
+ managedProperties = extractVersionProperties(gitTag, repoPath);
161
+ const propCount = Object.keys(managedProperties).length;
162
+ if (propCount === 0) {
163
+ spinner.warn(`No *.version properties found at ${gitTag} — managed_properties will be empty.`);
164
+ }
165
+ else {
166
+ spinner.succeed(`Extracted ${propCount} managed properties from ${gitTag}`);
167
+ }
168
+ }
169
+ catch (error) {
170
+ const msg = error instanceof Error ? error.message : String(error);
171
+ spinner.warn(`Could not read POM at ${gitTag} (${msg}) — skipping managed_properties.`);
172
+ }
173
+ const released = {
174
+ schema_version: unreleased.schema_version,
175
+ version,
176
+ release_date: today,
177
+ ...(Object.keys(managedProperties).length > 0 ? { managed_properties: managedProperties } : {}),
178
+ entries: unreleased.entries,
179
+ };
180
+ // Write released manifest
181
+ spinner.start(`Writing released manifest: ${version}.yaml...`);
182
+ await saveManifest(releasedPath, released);
183
+ spinner.succeed(`Released: ${releasedPath}`);
184
+ // Reset unreleased
185
+ spinner.start('Resetting unreleased.yaml...');
186
+ const emptyManifest = {
187
+ schema_version: '1.0',
188
+ version: 'unreleased',
189
+ entries: [],
190
+ };
191
+ await saveManifest(unreleasedPath, emptyManifest);
192
+ spinner.succeed('Unreleased manifest reset');
193
+ // Summary
194
+ console.log('');
195
+ console.log(chalk.bold('\u2501'.repeat(60)));
196
+ console.log(chalk.bold(` Finalized: ${version}`));
197
+ console.log(chalk.bold('\u2501'.repeat(60)));
198
+ console.log(` Total entries: ${released.entries.length}`);
199
+ const byType = new Map();
200
+ const byAutomation = new Map();
201
+ for (const entry of released.entries) {
202
+ byType.set(entry.type, (byType.get(entry.type) ?? 0) + 1);
203
+ byAutomation.set(entry.automatable, (byAutomation.get(entry.automatable) ?? 0) + 1);
204
+ }
205
+ console.log(' By type:');
206
+ for (const [type, count] of byType.entries()) {
207
+ console.log(` ${type}: ${count}`);
208
+ }
209
+ console.log(' By automation:');
210
+ for (const [level, count] of byAutomation.entries()) {
211
+ const label = level === 'true' ? 'Automated' : level === 'partial' ? 'AI-assisted' : 'Manual';
212
+ console.log(` ${label}: ${count}`);
213
+ }
214
+ console.log('');
215
+ }
216
+ catch (error) {
217
+ spinner.fail('Finalize failed');
218
+ logger.error(error instanceof Error ? error.message : 'Unknown error');
219
+ process.exit(1);
220
+ }
221
+ });
222
+ return command;
223
+ }
224
+ /* eslint-enable no-console */
225
+ //# sourceMappingURL=finalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalize.js","sourceRoot":"","sources":["../../src/commands/finalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { BrxmUpgradeConfig } from '../config/index.js';
2
+ /**
3
+ * Launch the guided upgrade experience.
4
+ *
5
+ * Creates an AI client (when an API key is available) and starts
6
+ * the interactive GuideRunner that walks the user through discovery,
7
+ * planning, execution, and summary phases.
8
+ *
9
+ * @param config - Resolved CLI configuration
10
+ */
11
+ export declare function runGuide(config: BrxmUpgradeConfig): Promise<void>;
12
+ //# sourceMappingURL=guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/commands/guide.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAevE"}
@@ -0,0 +1,28 @@
1
+ import { GuideRunner } from '../guide/GuideRunner.js';
2
+ import { createAIClient } from '../ai/index.js';
3
+ import { getApiKey } from '../config/index.js';
4
+ import { DocsClient } from '../docs/index.js';
5
+ /**
6
+ * Launch the guided upgrade experience.
7
+ *
8
+ * Creates an AI client (when an API key is available) and starts
9
+ * the interactive GuideRunner that walks the user through discovery,
10
+ * planning, execution, and summary phases.
11
+ *
12
+ * @param config - Resolved CLI configuration
13
+ */
14
+ export async function runGuide(config) {
15
+ const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
16
+ const ai = apiKey
17
+ ? createAIClient(config.ai.provider, config.ai.model, apiKey, config.ai.baseUrl)
18
+ : undefined;
19
+ const docsClient = ai ? new DocsClient({}, config.output.verbose) : undefined;
20
+ const manifestOptions = {
21
+ source: config.upgrade.source,
22
+ url: config.upgrade.url,
23
+ localPath: config.upgrade.localPath,
24
+ };
25
+ const runner = new GuideRunner(process.cwd(), config, manifestOptions, ai, docsClient);
26
+ await runner.run();
27
+ }
28
+ //# sourceMappingURL=guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/commands/guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAyB;IACtD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,MAAM;QACf,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,eAAe,GAAwB;QAC3C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QAC7B,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;QACvB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;KACpC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACvF,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register all commands with the CLI program.
4
+ */
5
+ export declare function registerCommands(program: Command): void;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASvD"}
@@ -0,0 +1,22 @@
1
+ import { createDiscoverCommand } from './discover.js';
2
+ import { createPlanCommand } from './plan.js';
3
+ import { createExecuteCommand } from './execute.js';
4
+ import { createFinalizeCommand } from './finalize.js';
5
+ import { createLogChangeCommand } from './log-change.js';
6
+ import { createExportCommand } from './export.js';
7
+ import { createReviewManifestCommand } from './review-manifest.js';
8
+ import { createSetupManifestsCommand } from './setup-manifests.js';
9
+ /**
10
+ * Register all commands with the CLI program.
11
+ */
12
+ export function registerCommands(program) {
13
+ program.addCommand(createDiscoverCommand());
14
+ program.addCommand(createPlanCommand());
15
+ program.addCommand(createExecuteCommand());
16
+ program.addCommand(createLogChangeCommand());
17
+ program.addCommand(createFinalizeCommand());
18
+ program.addCommand(createExportCommand());
19
+ program.addCommand(createReviewManifestCommand());
20
+ program.addCommand(createSetupManifestsCommand());
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Create the log-change command for scanning change documents and generating
4
+ * manifest entries via AI.
5
+ *
6
+ * The command scans a directory for Markdown change documents, uses AI to
7
+ * generate structured manifest entries from each document, checks for
8
+ * conflicts with existing entries, and supports interactive review or
9
+ * auto-accept mode.
10
+ *
11
+ * @returns Configured Commander command instance
12
+ */
13
+ export declare function createLogChangeCommand(): Command;
14
+ //# sourceMappingURL=log-change.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-change.d.ts","sourceRoot":"","sources":["../../src/commands/log-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAoOhD"}
@@ -0,0 +1,243 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { dirname, join } from 'node:path';
5
+ import { createSpinner } from '../utils/spinner.js';
6
+ import { createLogger } from '../utils/logger.js';
7
+ import { resolvePath } from '../utils/fs.js';
8
+ import { getApiKey } from '../config/index.js';
9
+ import { createAIClient } from '../ai/index.js';
10
+ import { loadUnreleasedManifest, saveManifest } from '../planning/manifest-loader.js';
11
+ import { scanChangeDocuments } from '../capture/change-scanner.js';
12
+ import { generateAndReviewEntry } from '../capture/entry-qa.js';
13
+ import { checkConflict, resolveConflict } from '../capture/conflict-resolver.js';
14
+ import { ReviewFlow } from '../capture/review-flow.js';
15
+ import { getCommandConfig } from '../utils/command-helpers.js';
16
+ /* eslint-disable no-console */
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+ /**
20
+ * Get the project root directory for brxm-upgrade (where package.json lives).
21
+ */
22
+ function getProjectRoot() {
23
+ return join(__dirname, '..', '..');
24
+ }
25
+ /**
26
+ * Get the default path to the unreleased manifest.
27
+ */
28
+ function getDefaultUnreleasedPath() {
29
+ return join(getProjectRoot(), 'src', 'manifests', 'unreleased.yaml');
30
+ }
31
+ /**
32
+ * Create the log-change command for scanning change documents and generating
33
+ * manifest entries via AI.
34
+ *
35
+ * The command scans a directory for Markdown change documents, uses AI to
36
+ * generate structured manifest entries from each document, checks for
37
+ * conflicts with existing entries, and supports interactive review or
38
+ * auto-accept mode.
39
+ *
40
+ * @returns Configured Commander command instance
41
+ */
42
+ export function createLogChangeCommand() {
43
+ const command = new Command('log-change')
44
+ .description('Scan change documents and generate manifest entries via AI')
45
+ .option('--changes-dir <path>', 'Path to change documents directory', 'docs/changes')
46
+ .option('--unreleased <path>', 'Path to unreleased.yaml')
47
+ .option('--auto-accept', 'Auto-accept all AI-generated entries', false)
48
+ .option('-v, --verbose', 'Enable verbose output', false)
49
+ .action(async (options) => {
50
+ const logger = createLogger({ verbose: options.verbose });
51
+ const spinner = createSpinner();
52
+ try {
53
+ // Load configuration
54
+ spinner.start('Loading configuration...');
55
+ const config = await getCommandConfig(command);
56
+ spinner.succeed('Configuration loaded');
57
+ spinner.start('Initializing AI provider...');
58
+ const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
59
+ if (!apiKey) {
60
+ spinner.fail(`No API key found for ${config.ai.provider}.`);
61
+ console.log('AI is required for log-change. Set your API key and try again.');
62
+ process.exit(1);
63
+ }
64
+ const aiClient = createAIClient(config.ai.provider, config.ai.model, apiKey, config.ai.baseUrl);
65
+ spinner.succeed(`AI provider: ${config.ai.provider} (${config.ai.model})`);
66
+ // Resolve paths
67
+ const changesDir = resolvePath(options.changesDir);
68
+ const unreleasedPath = options.unreleased ?? getDefaultUnreleasedPath();
69
+ // Scan change documents
70
+ spinner.start('Scanning change documents...');
71
+ const docs = await scanChangeDocuments(changesDir);
72
+ if (docs.length === 0) {
73
+ spinner.warn('No change documents found.');
74
+ console.log(`Looked in: ${changesDir}`);
75
+ return;
76
+ }
77
+ spinner.succeed(`Found ${docs.length} change document(s)`);
78
+ // Load unreleased manifest
79
+ spinner.start('Loading unreleased manifest...');
80
+ let manifest = await loadUnreleasedManifest(unreleasedPath);
81
+ spinner.succeed(`Unreleased manifest: ${manifest.entries.length} existing entries`);
82
+ // Process each document through the full QA pipeline
83
+ const reviewFlow = new ReviewFlow();
84
+ const summary = {
85
+ totalScanned: docs.length,
86
+ accepted: 0,
87
+ skipped: 0,
88
+ failed: 0,
89
+ replaced: 0,
90
+ addedSeparate: 0,
91
+ };
92
+ const failedDocs = [];
93
+ const qaRecords = [];
94
+ for (const doc of docs) {
95
+ console.log('');
96
+ spinner.start(`Processing ${doc.filename} (generate → critique → validate)...`);
97
+ try {
98
+ const { entries, qaRecord } = await generateAndReviewEntry(doc, aiClient);
99
+ qaRecords.push(qaRecord);
100
+ const qualityNote = qaRecord.regenerated
101
+ ? chalk.cyan(` [regenerated${qaRecord.split ? `, split→${entries.length}` : ''}]`)
102
+ : qaRecord.heuristicFixes.length > 0
103
+ ? chalk.cyan(` [${qaRecord.heuristicFixes.length} heuristic fix(es)]`)
104
+ : '';
105
+ spinner.succeed(`${entries.length} entry(ies) generated [quality: ${qaRecord.finalQuality}]${qualityNote}`);
106
+ // Check conflict once per doc (before adding any entries from this doc)
107
+ const conflict = checkConflict(doc.metadata.jiraTicket, manifest);
108
+ if (options.autoAccept) {
109
+ if (conflict.hasConflict && doc.metadata.jiraTicket) {
110
+ // Remove all old entries for this JIRA, then add all new entries
111
+ manifest = {
112
+ ...manifest,
113
+ entries: [
114
+ ...manifest.entries.filter((e) => e.jira_ticket !== doc.metadata.jiraTicket),
115
+ ...entries,
116
+ ],
117
+ };
118
+ summary.replaced++;
119
+ console.log(chalk.green(` ✓ Auto-replaced with ${entries.length} entry(ies): ${entries.map((e) => e.id).join(', ')}`));
120
+ }
121
+ else if (conflict.hasConflict && !doc.metadata.jiraTicket) {
122
+ console.log(chalk.yellow(` ⚠ Cannot auto-replace: missing jiraTicket`));
123
+ summary.skipped++;
124
+ }
125
+ else {
126
+ manifest = { ...manifest, entries: [...manifest.entries, ...entries] };
127
+ summary.accepted += entries.length;
128
+ for (const entry of entries) {
129
+ console.log(chalk.green(` ✓ Auto-accepted: ${entry.id}`));
130
+ }
131
+ }
132
+ }
133
+ else {
134
+ // Interactive: review each entry. First entry gets conflict info;
135
+ // subsequent entries from the same doc are treated as new (the first
136
+ // entry's replace decision already removed old entries).
137
+ for (let i = 0; i < entries.length; i++) {
138
+ const entry = entries[i];
139
+ const entryConflict = i === 0 ? conflict : { hasConflict: false, existingEntries: [] };
140
+ const result = await reviewFlow.reviewEntry(entry, doc, entryConflict);
141
+ switch (result.decision) {
142
+ case 'accept':
143
+ manifest = { ...manifest, entries: [...manifest.entries, result.entry] };
144
+ summary.accepted++;
145
+ break;
146
+ case 'replace':
147
+ if (doc.metadata.jiraTicket) {
148
+ manifest = resolveConflict(manifest, result.entry, doc.metadata.jiraTicket, 'replace');
149
+ summary.replaced++;
150
+ }
151
+ else {
152
+ console.log(chalk.yellow(' ⚠ Cannot replace: missing jiraTicket'));
153
+ summary.skipped++;
154
+ }
155
+ break;
156
+ case 'add_separate':
157
+ if (doc.metadata.jiraTicket) {
158
+ manifest = resolveConflict(manifest, result.entry, doc.metadata.jiraTicket, 'add_separate');
159
+ summary.addedSeparate++;
160
+ }
161
+ else {
162
+ console.log(chalk.yellow(' ⚠ Cannot add separate: missing jiraTicket'));
163
+ summary.skipped++;
164
+ }
165
+ break;
166
+ case 'skip':
167
+ summary.skipped++;
168
+ break;
169
+ case 'edit':
170
+ // edit resolves to accept/replace/add_separate/skip in reviewEntry
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ }
176
+ catch (error) {
177
+ spinner.fail(`Failed to process ${doc.filename}`);
178
+ logger.error(error instanceof Error ? error.message : 'Unknown error');
179
+ summary.failed++;
180
+ failedDocs.push(doc.filename);
181
+ }
182
+ }
183
+ // Summary
184
+ const qaRegenerated = qaRecords.filter((r) => r.regenerated).length;
185
+ const qaSplit = qaRecords.filter((r) => r.split).length;
186
+ const qaHeuristicFixes = qaRecords.reduce((sum, r) => sum + r.heuristicFixes.length, 0);
187
+ const qaGood = qaRecords.filter((r) => r.finalQuality === 'good').length;
188
+ console.log('');
189
+ console.log(chalk.bold('\u2501'.repeat(60)));
190
+ console.log(chalk.bold(' Log-Change Summary'));
191
+ console.log(chalk.bold('\u2501'.repeat(60)));
192
+ console.log(` Scanned: ${summary.totalScanned}`);
193
+ console.log(` ${chalk.green('Accepted:')} ${summary.accepted}`);
194
+ console.log(` ${chalk.blue('Replaced:')} ${summary.replaced}`);
195
+ console.log(` ${chalk.blue('Added separate:')} ${summary.addedSeparate}`);
196
+ console.log(` ${chalk.yellow('Skipped:')} ${summary.skipped}`);
197
+ const failedColor = summary.failed > 0 ? chalk.red : chalk.gray;
198
+ console.log(` ${failedColor('Failed:')} ${summary.failed}`);
199
+ console.log('');
200
+ console.log(chalk.bold(' QA Pipeline'));
201
+ console.log(chalk.bold('\u2501'.repeat(60)));
202
+ console.log(` Critiqued: ${qaRecords.length}`);
203
+ console.log(` ${chalk.green('Passed (good):')} ${qaGood}`);
204
+ console.log(` ${chalk.cyan('Regenerated:')} ${qaRegenerated}`);
205
+ console.log(` ${chalk.cyan('Split:')} ${qaSplit}`);
206
+ console.log(` ${chalk.cyan('Heuristic fixes:')} ${qaHeuristicFixes}`);
207
+ console.log('');
208
+ // Save if any changes
209
+ const totalChanges = summary.accepted + summary.replaced + summary.addedSeparate;
210
+ if (totalChanges > 0) {
211
+ spinner.start('Saving unreleased manifest...');
212
+ await saveManifest(unreleasedPath, manifest);
213
+ spinner.succeed(`Saved ${manifest.entries.length} entries to unreleased.yaml`);
214
+ }
215
+ else {
216
+ console.log(chalk.yellow('No changes to save.'));
217
+ }
218
+ // Hard-fail when any change document failed to produce a manifest
219
+ // entry. The caller (CI bash wrapper) treats this as a pipeline
220
+ // failure rather than letting tickets silently disappear from the
221
+ // manifest. Successful entries are still persisted above so the
222
+ // operator can inspect partial progress; a re-run after fixing
223
+ // the prompt or shape can pick them up via idempotence.
224
+ if (summary.failed > 0) {
225
+ console.log('');
226
+ console.log(chalk.red(`ERROR: ${summary.failed} change document(s) failed to produce a manifest entry:`));
227
+ for (const filename of failedDocs) {
228
+ console.log(chalk.red(` - ${filename}`));
229
+ }
230
+ console.log(chalk.red('See the per-doc error messages above for the underlying validation failures.'));
231
+ process.exit(1);
232
+ }
233
+ }
234
+ catch (error) {
235
+ spinner.fail('log-change failed');
236
+ logger.error(error instanceof Error ? error.message : 'Unknown error');
237
+ process.exit(1);
238
+ }
239
+ });
240
+ return command;
241
+ }
242
+ /* eslint-enable no-console */
243
+ //# sourceMappingURL=log-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-change.js","sourceRoot":"","sources":["../../src/commands/log-change.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Create the plan command for generating an upgrade plan.
4
+ *
5
+ * The plan command loads project discovery, matches upgrade manifests
6
+ * against the project, optionally runs AI analysis, and produces an
7
+ * ordered upgrade plan saved to disk.
8
+ *
9
+ * @returns Configured Commander command instance
10
+ */
11
+ export declare function createPlanCommand(): Command;
12
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiEpC;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAiK3C"}