@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,161 @@
1
+ /**
2
+ * Generates a markdown quality report for the QA pipeline run against a single
3
+ * manifest version.
4
+ *
5
+ * Sections produced (conditional sections are omitted when empty):
6
+ * 1. Header with version and date
7
+ * 2. Summary table with key metrics
8
+ * 3. Informational Reclassifications (if any)
9
+ * 4. Entries Regenerated (if any), with full critique issue details
10
+ * 5. Warnings (needs_improvement entries not regenerated, if any)
11
+ * 6. Heuristic Fixes (if any)
12
+ *
13
+ * @param version - The manifest version string (e.g. "16.7.0")
14
+ * @param records - All QARecord objects produced by the pipeline
15
+ * @returns A markdown-formatted quality report string
16
+ */
17
+ export function generateQualityReport(version, records) {
18
+ const summary = computeSummary(records);
19
+ const sections = [];
20
+ sections.push(renderHeader(version));
21
+ sections.push(renderSummary(summary));
22
+ const informational = records.filter(r => r.critique.shouldBeInformational);
23
+ if (informational.length > 0) {
24
+ sections.push(renderInformationalSection(informational));
25
+ }
26
+ const regenerated = records.filter(r => r.regenerated);
27
+ if (regenerated.length > 0) {
28
+ sections.push(renderRegeneratedSection(regenerated));
29
+ }
30
+ const warnings = records.filter(r => r.finalQuality === 'needs_improvement' && !r.regenerated);
31
+ if (warnings.length > 0) {
32
+ sections.push(renderWarningsSection(warnings));
33
+ }
34
+ const withFixes = records.filter(r => r.heuristicFixes.length > 0);
35
+ if (withFixes.length > 0) {
36
+ sections.push(renderHeuristicFixesSection(withFixes));
37
+ }
38
+ return sections.join('\n\n') + '\n';
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // Summary computation
42
+ // ---------------------------------------------------------------------------
43
+ function computeSummary(records) {
44
+ const entriesProcessed = records.length;
45
+ const passed = records.filter(r => r.finalQuality === 'good' && !r.regenerated).length;
46
+ const improved = records.filter(r => r.finalQuality === 'needs_improvement' && !r.regenerated).length;
47
+ const regenerated = records.filter(r => r.regenerated).length;
48
+ const splitCount = records.filter(r => r.split).length;
49
+ // Final entry count: non-split entries count as 1 each; split entries count
50
+ // as their splitCount (falling back to 1 if not set).
51
+ const finalEntryCount = records.reduce((total, r) => {
52
+ if (r.split && r.splitCount !== undefined) {
53
+ return total + r.splitCount;
54
+ }
55
+ return total + 1;
56
+ }, 0);
57
+ const informationalReclassifications = records.filter(r => r.critique.shouldBeInformational).length;
58
+ return {
59
+ entriesProcessed,
60
+ passed,
61
+ improved,
62
+ regenerated,
63
+ splitCount,
64
+ finalEntryCount,
65
+ informationalReclassifications,
66
+ };
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Section renderers
70
+ // ---------------------------------------------------------------------------
71
+ function renderHeader(version) {
72
+ const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
73
+ return `# Manifest Quality Report: ${version}\n\n_Generated on ${date}_`;
74
+ }
75
+ function renderSummary(summary) {
76
+ const rows = [
77
+ `| Entries processed | ${summary.entriesProcessed} |`,
78
+ `| Passed (good, no regeneration) | ${summary.passed} |`,
79
+ `| Warnings (needs improvement) | ${summary.improved} |`,
80
+ `| Regenerated | ${summary.regenerated} |`,
81
+ `| Split entries | ${summary.splitCount} |`,
82
+ `| Final entry count | ${summary.finalEntryCount} |`,
83
+ ];
84
+ if (summary.informationalReclassifications > 0) {
85
+ rows.push(`| Informational reclassifications | ${summary.informationalReclassifications} |`);
86
+ }
87
+ const lines = [
88
+ '## Summary',
89
+ '',
90
+ '| Metric | Count |',
91
+ '|--------|-------|',
92
+ ...rows,
93
+ ];
94
+ return lines.join('\n');
95
+ }
96
+ function renderInformationalSection(records) {
97
+ const lines = ['## Informational Reclassifications', ''];
98
+ lines.push('The following entries were flagged as candidates for reclassification to the ' +
99
+ '`informational` type:');
100
+ lines.push('');
101
+ for (const r of records) {
102
+ lines.push(`- \`${r.entryId}\``);
103
+ }
104
+ return lines.join('\n');
105
+ }
106
+ function renderRegeneratedSection(records) {
107
+ const lines = ['## Entries Regenerated', ''];
108
+ for (const r of records) {
109
+ lines.push(`### \`${r.entryId}\``);
110
+ lines.push('');
111
+ if (r.critique.issues.length === 0) {
112
+ lines.push('_No issues recorded (critique data unavailable)._');
113
+ }
114
+ else {
115
+ for (const issue of r.critique.issues) {
116
+ lines.push(`- **[${issue.severity}] ${issue.category}**: ${issue.description}`);
117
+ lines.push(` - _Suggestion_: ${issue.suggestion}`);
118
+ }
119
+ }
120
+ lines.push('');
121
+ }
122
+ // Remove trailing blank line from last entry
123
+ if (lines[lines.length - 1] === '') {
124
+ lines.pop();
125
+ }
126
+ return lines.join('\n');
127
+ }
128
+ function renderWarningsSection(records) {
129
+ const lines = ['## Warnings', ''];
130
+ lines.push('These entries have quality issues but were kept without regeneration:');
131
+ lines.push('');
132
+ for (const r of records) {
133
+ lines.push(`### \`${r.entryId}\``);
134
+ lines.push('');
135
+ for (const issue of r.critique.issues) {
136
+ lines.push(`- **[${issue.severity}] ${issue.category}**: ${issue.description}`);
137
+ lines.push(` - _Suggestion_: ${issue.suggestion}`);
138
+ }
139
+ lines.push('');
140
+ }
141
+ if (lines[lines.length - 1] === '') {
142
+ lines.pop();
143
+ }
144
+ return lines.join('\n');
145
+ }
146
+ function renderHeuristicFixesSection(records) {
147
+ const lines = ['## Heuristic Fixes Applied', ''];
148
+ for (const r of records) {
149
+ lines.push(`### \`${r.entryId}\``);
150
+ lines.push('');
151
+ for (const fix of r.heuristicFixes) {
152
+ lines.push(`- ${fix}`);
153
+ }
154
+ lines.push('');
155
+ }
156
+ if (lines[lines.length - 1] === '') {
157
+ lines.pop();
158
+ }
159
+ return lines.join('\n');
160
+ }
161
+ //# sourceMappingURL=quality-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-report.js","sourceRoot":"","sources":["../../src/capture/quality-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ManifestEntry } from '../planning/types.js';
2
+ import type { ChangeDocument, ConflictCheckResult, ReviewResult } from './types.js';
3
+ /**
4
+ * Interactive review flow for manifest entries during change capture.
5
+ * Presents each generated entry to the user and collects their decision.
6
+ */
7
+ export declare class ReviewFlow {
8
+ /**
9
+ * Formats a ManifestEntry as a human-readable summary for terminal display.
10
+ *
11
+ * @param entry - The manifest entry to format
12
+ * @returns A multi-line string with color-coded field names
13
+ */
14
+ formatEntrySummary(entry: ManifestEntry): string;
15
+ /**
16
+ * Presents a manifest entry for interactive review and collects the user's decision.
17
+ * Displays the entry summary, conflict information (if any), and prompts the user
18
+ * to accept, skip, edit, replace, or add as a separate entry.
19
+ *
20
+ * @param entry - The generated manifest entry to review
21
+ * @param doc - The source change document
22
+ * @param conflict - Result of conflict checking against existing entries
23
+ * @returns The user's review result including decision and (possibly edited) entry
24
+ */
25
+ reviewEntry(entry: ManifestEntry, doc: ChangeDocument, conflict: ConflictCheckResult): Promise<ReviewResult>;
26
+ /**
27
+ * Opens the entry in the user's $EDITOR for manual editing, validates the
28
+ * result against the ManifestEntry schema, and re-prompts on validation errors.
29
+ *
30
+ * @param entry - The original manifest entry to edit
31
+ * @param doc - The source change document
32
+ * @param conflict - Conflict check result for post-edit decision
33
+ * @returns The review result with the edited entry
34
+ */
35
+ private handleEdit;
36
+ }
37
+ //# sourceMappingURL=review-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-flow.d.ts","sourceRoot":"","sources":["../../src/capture/review-flow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpG;;;GAGG;AACH,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IA0ChD;;;;;;;;;OASG;IACG,WAAW,CACf,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC;IAmExB;;;;;;;;OAQG;YACW,UAAU;CA0FzB"}
@@ -0,0 +1,212 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import inquirer from 'inquirer';
3
+ import chalk from 'chalk';
4
+ import yaml from 'js-yaml';
5
+ /**
6
+ * Interactive review flow for manifest entries during change capture.
7
+ * Presents each generated entry to the user and collects their decision.
8
+ */
9
+ export class ReviewFlow {
10
+ /**
11
+ * Formats a ManifestEntry as a human-readable summary for terminal display.
12
+ *
13
+ * @param entry - The manifest entry to format
14
+ * @returns A multi-line string with color-coded field names
15
+ */
16
+ formatEntrySummary(entry) {
17
+ const lines = [];
18
+ lines.push(` ${chalk.cyan('id')}: ${entry.id}`);
19
+ lines.push(` ${chalk.cyan('type')}: ${entry.type}`);
20
+ lines.push(` ${chalk.cyan('automatable')}: ${entry.automatable}`);
21
+ lines.push(` ${chalk.cyan('description')}: ${entry.description}`);
22
+ if (entry.jira_ticket) {
23
+ lines.push(` ${chalk.cyan('jira_ticket')}: ${entry.jira_ticket}`);
24
+ }
25
+ if (entry.patterns && entry.patterns.length > 0) {
26
+ lines.push(` ${chalk.cyan('patterns')}:`);
27
+ for (const p of entry.patterns) {
28
+ lines.push(` - match: "${p.match}"`);
29
+ lines.push(` replace: "${p.replace}"`);
30
+ }
31
+ }
32
+ if (entry.file_globs) {
33
+ lines.push(` ${chalk.cyan('file_globs')}: ${JSON.stringify(entry.file_globs)}`);
34
+ }
35
+ if (entry.detection_patterns) {
36
+ lines.push(` ${chalk.cyan('detection_patterns')}: ${JSON.stringify(entry.detection_patterns)}`);
37
+ }
38
+ if (entry.ai_guidance) {
39
+ lines.push(` ${chalk.cyan('ai_guidance')}: ${entry.ai_guidance}`);
40
+ }
41
+ if (entry.manual_steps) {
42
+ lines.push(` ${chalk.cyan('manual_steps')}:`);
43
+ for (const s of entry.manual_steps) {
44
+ lines.push(` - "${s}"`);
45
+ }
46
+ }
47
+ if (entry.changelog_entry) {
48
+ lines.push(` ${chalk.cyan('changelog_entry')}: ${entry.changelog_entry}`);
49
+ }
50
+ if (entry.risk_level !== undefined) {
51
+ lines.push(` ${chalk.cyan('risk_level')}: ${entry.risk_level}`);
52
+ }
53
+ return lines.join('\n');
54
+ }
55
+ /**
56
+ * Presents a manifest entry for interactive review and collects the user's decision.
57
+ * Displays the entry summary, conflict information (if any), and prompts the user
58
+ * to accept, skip, edit, replace, or add as a separate entry.
59
+ *
60
+ * @param entry - The generated manifest entry to review
61
+ * @param doc - The source change document
62
+ * @param conflict - Result of conflict checking against existing entries
63
+ * @returns The user's review result including decision and (possibly edited) entry
64
+ */
65
+ async reviewEntry(entry, doc, conflict) {
66
+ // eslint-disable-next-line no-console
67
+ console.log('');
68
+ // eslint-disable-next-line no-console
69
+ console.log(chalk.bold('\u2501'.repeat(60)));
70
+ // eslint-disable-next-line no-console
71
+ console.log(chalk.bold(`Change doc: ${doc.filename}`));
72
+ if (doc.metadata.jiraTicket) {
73
+ // eslint-disable-next-line no-console
74
+ console.log(chalk.bold(`JIRA: ${doc.metadata.jiraTicket}`));
75
+ }
76
+ // eslint-disable-next-line no-console
77
+ console.log(chalk.bold('\u2501'.repeat(60)));
78
+ if (conflict.hasConflict) {
79
+ // eslint-disable-next-line no-console
80
+ console.log('');
81
+ // eslint-disable-next-line no-console
82
+ console.log(chalk.yellow(`\u26A0 JIRA ${doc.metadata.jiraTicket} already has ${conflict.existingEntries.length} entry(ies) in unreleased.yaml:`));
83
+ for (const existing of conflict.existingEntries) {
84
+ // eslint-disable-next-line no-console
85
+ console.log(chalk.dim(this.formatEntrySummary(existing)));
86
+ }
87
+ // eslint-disable-next-line no-console
88
+ console.log('');
89
+ }
90
+ // eslint-disable-next-line no-console
91
+ console.log(chalk.green('Suggested manifest entry:'));
92
+ // eslint-disable-next-line no-console
93
+ console.log('');
94
+ // eslint-disable-next-line no-console
95
+ console.log(this.formatEntrySummary(entry));
96
+ // eslint-disable-next-line no-console
97
+ console.log('');
98
+ const choices = [];
99
+ if (conflict.hasConflict) {
100
+ choices.push({ name: 'Replace existing entry(ies)', value: 'replace' });
101
+ choices.push({ name: 'Add as separate entry', value: 'add_separate' });
102
+ }
103
+ else {
104
+ choices.push({ name: 'Accept', value: 'accept' });
105
+ }
106
+ choices.push({ name: 'Edit in $EDITOR', value: 'edit' });
107
+ choices.push({ name: 'Skip', value: 'skip' });
108
+ const { decision } = await inquirer.prompt([
109
+ {
110
+ type: 'select',
111
+ name: 'decision',
112
+ message: 'What would you like to do?',
113
+ choices,
114
+ },
115
+ ]);
116
+ if (decision === 'edit') {
117
+ return this.handleEdit(entry, doc, conflict);
118
+ }
119
+ return {
120
+ entry,
121
+ decision,
122
+ sourceFile: doc.filename,
123
+ };
124
+ }
125
+ /**
126
+ * Opens the entry in the user's $EDITOR for manual editing, validates the
127
+ * result against the ManifestEntry schema, and re-prompts on validation errors.
128
+ *
129
+ * @param entry - The original manifest entry to edit
130
+ * @param doc - The source change document
131
+ * @param conflict - Conflict check result for post-edit decision
132
+ * @returns The review result with the edited entry
133
+ */
134
+ async handleEdit(entry, doc, conflict) {
135
+ const { writeFile, readFile, unlink } = await import('node:fs/promises');
136
+ const { tmpdir } = await import('node:os');
137
+ const pathModule = await import('node:path');
138
+ const { spawnSync } = await import('node:child_process');
139
+ const { getEntryValidationErrors } = await import('./entry-validator.js');
140
+ const tmpPath = pathModule.join(tmpdir(), `brxm-entry-${randomUUID()}.yaml`);
141
+ const entryYaml = yaml.dump(entry, { lineWidth: 120, noRefs: true });
142
+ await writeFile(tmpPath, entryYaml, 'utf-8');
143
+ const editor = process.env['EDITOR'] ?? process.env['VISUAL'] ?? 'vi';
144
+ let editedEntry;
145
+ try {
146
+ while (!editedEntry) {
147
+ const editorResult = spawnSync(editor, [tmpPath], { stdio: 'inherit' });
148
+ if (editorResult.error || editorResult.status !== 0) {
149
+ // eslint-disable-next-line no-console
150
+ console.log(chalk.red(`\nFailed to launch editor (${editor}).`));
151
+ const { retry } = await inquirer.prompt([
152
+ {
153
+ type: 'confirm',
154
+ name: 'retry',
155
+ message: 'Try again?',
156
+ default: false,
157
+ },
158
+ ]);
159
+ if (!retry) {
160
+ return { entry, decision: 'skip', sourceFile: doc.filename };
161
+ }
162
+ continue;
163
+ }
164
+ const editedContent = await readFile(tmpPath, 'utf-8');
165
+ const parsed = yaml.load(editedContent);
166
+ const errors = getEntryValidationErrors(parsed);
167
+ if (errors.length > 0) {
168
+ // eslint-disable-next-line no-console
169
+ console.log(chalk.red('\nValidation errors:'));
170
+ for (const err of errors) {
171
+ // eslint-disable-next-line no-console
172
+ console.log(chalk.red(` - ${err}`));
173
+ }
174
+ const { retry } = await inquirer.prompt([
175
+ {
176
+ type: 'confirm',
177
+ name: 'retry',
178
+ message: 'Re-open editor to fix?',
179
+ default: true,
180
+ },
181
+ ]);
182
+ if (!retry) {
183
+ return { entry, decision: 'skip', sourceFile: doc.filename };
184
+ }
185
+ }
186
+ else {
187
+ editedEntry = parsed;
188
+ }
189
+ }
190
+ }
191
+ finally {
192
+ await unlink(tmpPath).catch(() => { });
193
+ }
194
+ if (conflict.hasConflict) {
195
+ const { decision } = await inquirer.prompt([
196
+ {
197
+ type: 'select',
198
+ name: 'decision',
199
+ message: 'Edited entry ready. What would you like to do?',
200
+ choices: [
201
+ { name: 'Replace existing entry(ies)', value: 'replace' },
202
+ { name: 'Add as separate entry', value: 'add_separate' },
203
+ { name: 'Skip', value: 'skip' },
204
+ ],
205
+ },
206
+ ]);
207
+ return { entry: editedEntry, decision, sourceFile: doc.filename };
208
+ }
209
+ return { entry: editedEntry, decision: 'accept', sourceFile: doc.filename };
210
+ }
211
+ }
212
+ //# sourceMappingURL=review-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-flow.js","sourceRoot":"","sources":["../../src/capture/review-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import type { ManifestEntry } from '../planning/types.js';
2
+ /**
3
+ * Metadata extracted from a change document's front-matter.
4
+ */
5
+ export interface ChangeDocMetadata {
6
+ /** JIRA ticket (e.g., "CMS-18384") */
7
+ jiraTicket: string | undefined;
8
+ /** Branch name */
9
+ branch: string | undefined;
10
+ /** Document date (YYYY-MM-DD) */
11
+ date: string | undefined;
12
+ /** Author name */
13
+ author: string | undefined;
14
+ }
15
+ /**
16
+ * AI Context Tags parsed from the YAML block at the end of a change document.
17
+ */
18
+ export interface AIContextTags {
19
+ change_type?: string;
20
+ modules_affected?: string[];
21
+ api_changes?: string;
22
+ breaking_changes?: boolean;
23
+ database_changes?: boolean;
24
+ test_coverage?: string;
25
+ risk_level?: string;
26
+ }
27
+ /**
28
+ * A parsed change document ready for AI analysis.
29
+ */
30
+ export interface ChangeDocument {
31
+ /** Filename (e.g., "2026-01-15-CMS-18384-jakarta.md") */
32
+ filename: string;
33
+ /** Absolute file path */
34
+ filePath: string;
35
+ /** Extracted metadata from front-matter */
36
+ metadata: ChangeDocMetadata;
37
+ /** AI Context Tags from the YAML block */
38
+ contextTags: AIContextTags;
39
+ /** Full Markdown content */
40
+ content: string;
41
+ }
42
+ /**
43
+ * Result of conflict checking a change document against unreleased.yaml.
44
+ */
45
+ export interface ConflictCheckResult {
46
+ /** Whether a conflict exists */
47
+ hasConflict: boolean;
48
+ /** Existing entries with the same JIRA ticket */
49
+ existingEntries: ManifestEntry[];
50
+ }
51
+ /**
52
+ * User decision for a manifest entry during interactive review.
53
+ */
54
+ export type ReviewDecision = 'accept' | 'edit' | 'skip' | 'replace' | 'add_separate';
55
+ /**
56
+ * Result of reviewing a single entry.
57
+ */
58
+ export interface ReviewResult {
59
+ /** The candidate manifest entry (after possible edits). Always present, but unused when decision is 'skip'. */
60
+ entry: ManifestEntry;
61
+ /** User's decision */
62
+ decision: ReviewDecision;
63
+ /** The source change document filename */
64
+ sourceFile: string;
65
+ }
66
+ /**
67
+ * Summary of the log-change processing run.
68
+ */
69
+ export interface LogChangeSummary {
70
+ /** Total change documents scanned */
71
+ totalScanned: number;
72
+ /** Entries accepted (new or edited) */
73
+ accepted: number;
74
+ /** Entries intentionally skipped (user choice in interactive review,
75
+ * or conflict resolution blocked by missing metadata) */
76
+ skipped: number;
77
+ /** Documents that failed to produce a manifest entry (validation error,
78
+ * AI returned malformed data, etc.) — separate from `skipped` so the
79
+ * CI wrapper can hard-fail when these are non-zero */
80
+ failed: number;
81
+ /** Entries that replaced existing ones */
82
+ replaced: number;
83
+ /** Entries added alongside existing (same JIRA) */
84
+ addedSeparate: number;
85
+ }
86
+ /**
87
+ * Options for the log-change command.
88
+ */
89
+ export interface LogChangeOptions {
90
+ /** Path to change documents directory (default: docs/changes) */
91
+ changesDir?: string;
92
+ /** Path to unreleased.yaml */
93
+ unreleasedPath?: string;
94
+ /** Skip interactive review (auto-accept all) */
95
+ autoAccept?: boolean;
96
+ /** Enable verbose output */
97
+ verbose?: boolean;
98
+ }
99
+ /**
100
+ * Options for the finalize command.
101
+ */
102
+ export interface FinalizeOptions {
103
+ /** Version string to finalize as (e.g., "16.3.0") */
104
+ version: string;
105
+ /** Path to unreleased.yaml */
106
+ unreleasedPath?: string;
107
+ /** Path to released manifests directory */
108
+ releasedDir?: string;
109
+ /** Skip confirmation prompt */
110
+ force?: boolean;
111
+ /** Enable verbose output */
112
+ verbose?: boolean;
113
+ }
114
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capture/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,0CAA0C;IAC1C,WAAW,EAAE,aAAa,CAAC;IAC3B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+GAA+G;IAC/G,KAAK,EAAE,aAAa,CAAC;IACrB,sBAAsB;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB;8DAC0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB;;2DAEuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/capture/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Create the discover command.
4
+ */
5
+ export declare function createDiscoverCommand(): Command;
6
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwGpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA+D/C"}