@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,29 @@
1
+ import type { AIClient } from '../ai/types.js';
2
+ import type { ManifestEntry } from '../planning/types.js';
3
+ import type { CritiqueResult } from './critique-types.js';
4
+ /**
5
+ * Builds a prompt instructing the AI to regenerate a manifest entry,
6
+ * incorporating the critique issues and original change document content.
7
+ *
8
+ * @param entry - The original manifest entry that needs regeneration
9
+ * @param changeDocContent - The original change document content
10
+ * @param critique - The critique result with issues and flags
11
+ * @returns A prompt string for the AI client
12
+ */
13
+ export declare function buildRegenerationPrompt(entry: ManifestEntry, changeDocContent: string, critique: CritiqueResult): string;
14
+ /**
15
+ * Uses an AI client to regenerate a manifest entry based on critique feedback.
16
+ * Handles both single-entry and split (array) responses, validates each result
17
+ * against the schema, and preserves the original jira_ticket.
18
+ *
19
+ * Falls back to returning the original entry if the AI response is unparseable
20
+ * or all generated entries fail validation.
21
+ *
22
+ * @param entry - The original manifest entry to regenerate
23
+ * @param changeDocContent - The original change document content
24
+ * @param critique - The critique result driving the regeneration
25
+ * @param aiClient - The AI client to use for generation
26
+ * @returns An array of validated ManifestEntry objects
27
+ */
28
+ export declare function regenerateEntry(entry: ManifestEntry, changeDocContent: string, critique: CritiqueResult, aiClient: AIClient): Promise<ManifestEntry[]>;
29
+ //# sourceMappingURL=entry-regeneration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-regeneration.d.ts","sourceRoot":"","sources":["../../src/capture/entry-regeneration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,GACvB,MAAM,CAqER;AA8BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAwD1B"}
@@ -0,0 +1,164 @@
1
+ import { validateManifestEntry } from './entry-validator.js';
2
+ import { coerceArrayFields } from './entry-generator.js';
3
+ /**
4
+ * Builds a prompt instructing the AI to regenerate a manifest entry,
5
+ * incorporating the critique issues and original change document content.
6
+ *
7
+ * @param entry - The original manifest entry that needs regeneration
8
+ * @param changeDocContent - The original change document content
9
+ * @param critique - The critique result with issues and flags
10
+ * @returns A prompt string for the AI client
11
+ */
12
+ export function buildRegenerationPrompt(entry, changeDocContent, critique) {
13
+ const entryJson = JSON.stringify(entry, null, 2);
14
+ const issueLines = critique.issues
15
+ .map((issue, i) => {
16
+ return `${i + 1}. [${issue.severity.toUpperCase()}] ${issue.category}: ${issue.description}\n Suggestion: ${issue.suggestion}`;
17
+ })
18
+ .join('\n');
19
+ let outputInstructions;
20
+ if (critique.shouldSplit) {
21
+ const splitHint = critique.suggestedSplits && critique.suggestedSplits.length > 0
22
+ ? `\n\nSuggested splits:\n${critique.suggestedSplits.map((s, i) => `${i + 1}. ${s}`).join('\n')}`
23
+ : '';
24
+ outputInstructions = `## Output Instructions
25
+
26
+ The critique identified that this entry should be split into multiple focused entries.
27
+ Return a JSON array (e.g. \`[]\`) of ManifestEntry objects — one per concern.${splitHint}
28
+
29
+ Each entry in the array must be a complete, valid ManifestEntry object.`;
30
+ }
31
+ else {
32
+ outputInstructions = `## Output Instructions
33
+
34
+ Return a single valid ManifestEntry JSON object (not an array) that addresses all the critique issues above.`;
35
+ }
36
+ const informationalInstruction = critique.shouldBeInformational
37
+ ? `\n\n## Informational Flag\n\nThis entry should be classified as informational: set \`"informational": true\` and include a concise \`"changelog_summary"\` field (one-line summary for the Platform Changes Summary).`
38
+ : '';
39
+ return `You are a software upgrade automation expert. Regenerate the following manifest entry to fix the quality issues identified by the critique.
40
+
41
+ ## Original Entry
42
+ \`\`\`json
43
+ ${entryJson}
44
+ \`\`\`
45
+
46
+ ## Original Change Document
47
+ ${changeDocContent}
48
+
49
+ ## Critique Issues
50
+ ${issueLines || 'No specific issues listed — improve overall quality.'}
51
+ ${informationalInstruction}
52
+
53
+ ## ManifestEntry Schema Reference
54
+
55
+ - **id** (required): Lowercase kebab-case identifier, e.g. "cms-18384-jakarta-migration"
56
+ - **description** (required): Human-readable description of the change
57
+ - **type** (required): One of: namespace_migration, dependency_migration, maven_update, configuration_migration, api_migration, security_configuration, repository_migration, frontend_migration
58
+ - **automatable** (required): One of: "true" (fully automatable with patterns), "partial" (AI-assisted), "false" (manual only)
59
+ - **jira_ticket**: JIRA ticket reference (e.g. "CMS-18384")
60
+
61
+ When automatable is "true":
62
+ - **patterns** (required): Array of { match, replace } objects for find/replace
63
+ - **file_globs** (required): Array of glob patterns for files to transform
64
+
65
+ When automatable is "partial":
66
+ - **detection_patterns** (required): Array of string patterns to detect if change applies
67
+ - **ai_guidance** (required): Guidance text for AI-assisted migration
68
+
69
+ When automatable is "false":
70
+ - **manual_steps** (required): Array of step-by-step instructions
71
+
72
+ Optional fields: doc_search_keywords, documentation_url, changelog_entry, depends_on, risk_level, informational, changelog_summary
73
+
74
+ ${outputInstructions}
75
+
76
+ Respond with ONLY the JSON (object or array as instructed), no explanation or markdown fences.`;
77
+ }
78
+ /**
79
+ * Extracts JSON from AI response text, stripping optional markdown code fences.
80
+ *
81
+ * @param text - Raw AI response text
82
+ * @returns Cleaned JSON string
83
+ */
84
+ function extractJson(text) {
85
+ const fenceMatch = /^\s*```(?:json)?\s*\n([\s\S]*?)\n\s*```\s*$/.exec(text);
86
+ if (fenceMatch?.[1]) {
87
+ return fenceMatch[1].trim();
88
+ }
89
+ return text.trim();
90
+ }
91
+ /**
92
+ * Sanitizes an entry id to conform to the schema pattern ^[a-z0-9-]+$.
93
+ *
94
+ * @param id - Raw id string from AI response
95
+ * @returns Sanitized lowercase kebab-case id
96
+ */
97
+ function sanitizeId(id) {
98
+ return id
99
+ .toLowerCase()
100
+ .replace(/[^a-z0-9-]/g, '-')
101
+ .replace(/-{2,}/g, '-')
102
+ .replace(/^-|-$/g, '');
103
+ }
104
+ /**
105
+ * Uses an AI client to regenerate a manifest entry based on critique feedback.
106
+ * Handles both single-entry and split (array) responses, validates each result
107
+ * against the schema, and preserves the original jira_ticket.
108
+ *
109
+ * Falls back to returning the original entry if the AI response is unparseable
110
+ * or all generated entries fail validation.
111
+ *
112
+ * @param entry - The original manifest entry to regenerate
113
+ * @param changeDocContent - The original change document content
114
+ * @param critique - The critique result driving the regeneration
115
+ * @param aiClient - The AI client to use for generation
116
+ * @returns An array of validated ManifestEntry objects
117
+ */
118
+ export async function regenerateEntry(entry, changeDocContent, critique, aiClient) {
119
+ const prompt = buildRegenerationPrompt(entry, changeDocContent, critique);
120
+ const result = await aiClient.generate(prompt, {
121
+ maxTokens: 4096,
122
+ temperature: 0.3,
123
+ });
124
+ const jsonText = extractJson(result.text);
125
+ let parsed;
126
+ try {
127
+ parsed = JSON.parse(jsonText);
128
+ }
129
+ catch {
130
+ // Unparseable AI response — fall back to original entry
131
+ return [entry];
132
+ }
133
+ // Normalise to array regardless of whether AI returned one object or many
134
+ const candidates = Array.isArray(parsed) ? parsed : [parsed];
135
+ const validated = [];
136
+ for (const candidate of candidates) {
137
+ if (candidate === null || typeof candidate !== 'object') {
138
+ continue;
139
+ }
140
+ const record = candidate;
141
+ // Sanitize id
142
+ if (typeof record.id === 'string') {
143
+ record.id = sanitizeId(record.id);
144
+ }
145
+ // Always preserve jira_ticket from original entry
146
+ if (entry.jira_ticket) {
147
+ record.jira_ticket = entry.jira_ticket;
148
+ }
149
+ coerceArrayFields(record);
150
+ try {
151
+ validateManifestEntry(record);
152
+ validated.push(record);
153
+ }
154
+ catch {
155
+ // Entry failed schema validation — skip it
156
+ }
157
+ }
158
+ // If nothing validated, return the original entry unchanged
159
+ if (validated.length === 0) {
160
+ return [entry];
161
+ }
162
+ return validated;
163
+ }
164
+ //# sourceMappingURL=entry-regeneration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-regeneration.js","sourceRoot":"","sources":["../../src/capture/entry-regeneration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ManifestEntry } from '../planning/types.js';
2
+ /**
3
+ * Validates that a value is a valid ManifestEntry according to the JSON schema.
4
+ * Throws an Error with details if validation fails.
5
+ *
6
+ * @param entry - The value to validate
7
+ * @throws Error if the entry does not match the ManifestEntry schema
8
+ */
9
+ export declare function validateManifestEntry(entry: unknown): asserts entry is ManifestEntry;
10
+ /**
11
+ * Returns an array of validation error messages for a ManifestEntry candidate.
12
+ * Returns an empty array if the entry is valid.
13
+ *
14
+ * @param entry - The value to validate
15
+ * @returns Array of human-readable error strings
16
+ */
17
+ export declare function getEntryValidationErrors(entry: unknown): string[];
18
+ //# sourceMappingURL=entry-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-validator.d.ts","sourceRoot":"","sources":["../../src/capture/entry-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiB1D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAQpF;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CASjE"}
@@ -0,0 +1,47 @@
1
+ import AjvModule from 'ajv';
2
+ import { createRequire } from 'node:module';
3
+ const Ajv = AjvModule.default ?? AjvModule;
4
+ const esmRequire = createRequire(import.meta.url);
5
+ const manifestSchema = esmRequire('../manifests/schema.json');
6
+ // Build a standalone entry schema from the definitions
7
+ const entrySchema = {
8
+ $schema: 'http://json-schema.org/draft-07/schema#',
9
+ ...manifestSchema['definitions']['ManifestEntry'],
10
+ definitions: manifestSchema['definitions'],
11
+ };
12
+ const ajv = new Ajv({ allErrors: true, verbose: true });
13
+ const validate = ajv.compile(entrySchema);
14
+ /**
15
+ * Validates that a value is a valid ManifestEntry according to the JSON schema.
16
+ * Throws an Error with details if validation fails.
17
+ *
18
+ * @param entry - The value to validate
19
+ * @throws Error if the entry does not match the ManifestEntry schema
20
+ */
21
+ export function validateManifestEntry(entry) {
22
+ const valid = validate(entry);
23
+ if (!valid) {
24
+ const errors = validate.errors
25
+ ?.map((e) => `${e.instancePath || 'entry'} ${e.message ?? 'validation failed'}`)
26
+ .join('; ');
27
+ throw new Error(`Invalid manifest entry: ${errors}`);
28
+ }
29
+ }
30
+ /**
31
+ * Returns an array of validation error messages for a ManifestEntry candidate.
32
+ * Returns an empty array if the entry is valid.
33
+ *
34
+ * @param entry - The value to validate
35
+ * @returns Array of human-readable error strings
36
+ */
37
+ export function getEntryValidationErrors(entry) {
38
+ validate(entry);
39
+ if (!validate.errors) {
40
+ return [];
41
+ }
42
+ return validate.errors.map((e) => {
43
+ const path = e.instancePath || 'entry';
44
+ return `${path}: ${e.message ?? 'validation failed'}`;
45
+ });
46
+ }
47
+ //# sourceMappingURL=entry-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-validator.js","sourceRoot":"","sources":["../../src/capture/entry-validator.ts"],"names":[],"mappings":"AAAA,OAAO,SAAsD,MAAM,KAAK,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC;AAE3C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,UAAU,CAAC,0BAA0B,CAA4B,CAAC;AAEzF,uDAAuD;AACvD,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,yCAAyC;IAClD,GAAI,cAAc,CAAC,aAAa,CAA6B,CAAC,eAAe,CAA4B;IACzG,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC;CAC3C,CAAC;AAEF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAoC,GAAG,CAAC,OAAO,CAAgB,WAAW,CAAC,CAAC;AAE1F;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;YAC5B,EAAE,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;aAC5F,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAc,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC;QACvC,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ManifestEntry } from '../planning/types.js';
2
+ /**
3
+ * Result of a single heuristic check applied to a manifest entry.
4
+ */
5
+ export interface HeuristicFix {
6
+ /** Identifier for the check that fired (e.g. 'binary_file_globs') */
7
+ check: string;
8
+ /** Human-readable description of what was found and (if auto-fixed) what changed */
9
+ description: string;
10
+ /** Whether the entry was mutated in place to resolve the issue */
11
+ autoFixed: boolean;
12
+ }
13
+ /**
14
+ * Applies a set of fast, non-AI heuristic checks to a manifest entry.
15
+ * The entry is mutated in place when an auto-fix is applied.
16
+ *
17
+ * Checks performed:
18
+ * 1. Binary file globs — removed automatically
19
+ * 2. Catch-all globs mixed with specific globs — catch-alls removed automatically
20
+ * 3. Short detection patterns (< 4 chars) when longer ones exist — removed automatically
21
+ * 4. Invalid regex in /pattern/ wrapped detection_patterns — flagged, not fixed
22
+ * 5. Missing isRegex on TransformPatterns with regex metacharacters — flagged, not fixed
23
+ * 6. Missing changelog_summary when informational is true — derived automatically
24
+ * 7. Invalid informational_category enum value — removed automatically
25
+ *
26
+ * @param entry - The manifest entry to check and potentially mutate
27
+ * @returns Array of HeuristicFix records describing every issue found
28
+ */
29
+ export declare function applyHeuristicFixes(entry: ManifestEntry): HeuristicFix[];
30
+ //# sourceMappingURL=heuristics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heuristics.d.ts","sourceRoot":"","sources":["../../src/capture/heuristics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,OAAO,CAAC;CACpB;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAYxE"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Binary file extensions whose globs should never appear in file_globs because
3
+ * automated text-transform patterns cannot act on binary content.
4
+ */
5
+ const BINARY_EXTENSIONS = new Set([
6
+ 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'ico', 'svg',
7
+ 'jar', 'class', 'war', 'ear',
8
+ 'zip', 'gz', 'tar',
9
+ 'pdf', 'doc', 'docx', 'xls', 'xlsx',
10
+ ]);
11
+ /**
12
+ * Glob patterns that match any file of a given extension — treated as catch-alls.
13
+ * A lone catch-all is acceptable; one mixed with specific globs is not.
14
+ */
15
+ const CATCH_ALL_GLOB_PATTERN = /^\*\*\/\*\.[a-zA-Z0-9]+$/;
16
+ /**
17
+ * Regex metacharacter sequences that indicate a `match` string is likely intended
18
+ * as a regex but may be missing `isRegex: true`.
19
+ */
20
+ const REGEX_META_SEQUENCES = [
21
+ '\\s', '\\d', '\\w', '\\b',
22
+ '.*',
23
+ '[^',
24
+ '\\+', '\\{', '\\}',
25
+ '(?', '(?:', '(?=', '(?!',
26
+ ];
27
+ /**
28
+ * Applies a set of fast, non-AI heuristic checks to a manifest entry.
29
+ * The entry is mutated in place when an auto-fix is applied.
30
+ *
31
+ * Checks performed:
32
+ * 1. Binary file globs — removed automatically
33
+ * 2. Catch-all globs mixed with specific globs — catch-alls removed automatically
34
+ * 3. Short detection patterns (< 4 chars) when longer ones exist — removed automatically
35
+ * 4. Invalid regex in /pattern/ wrapped detection_patterns — flagged, not fixed
36
+ * 5. Missing isRegex on TransformPatterns with regex metacharacters — flagged, not fixed
37
+ * 6. Missing changelog_summary when informational is true — derived automatically
38
+ * 7. Invalid informational_category enum value — removed automatically
39
+ *
40
+ * @param entry - The manifest entry to check and potentially mutate
41
+ * @returns Array of HeuristicFix records describing every issue found
42
+ */
43
+ export function applyHeuristicFixes(entry) {
44
+ const fixes = [];
45
+ fixes.push(...checkBinaryFileGlobs(entry));
46
+ fixes.push(...checkCatchAllGlobs(entry));
47
+ fixes.push(...checkShortDetectionPatterns(entry));
48
+ fixes.push(...checkInvalidRegexPatterns(entry));
49
+ fixes.push(...checkMissingIsRegex(entry));
50
+ fixes.push(...checkMissingChangelogSummary(entry));
51
+ fixes.push(...checkInvalidInformationalCategory(entry));
52
+ return fixes;
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Check 1 – Binary file globs
56
+ // ---------------------------------------------------------------------------
57
+ function checkBinaryFileGlobs(entry) {
58
+ if (!entry.file_globs || entry.file_globs.length === 0)
59
+ return [];
60
+ const removed = [];
61
+ const filtered = entry.file_globs.filter(glob => {
62
+ const ext = extractExtension(glob);
63
+ if (ext !== null && BINARY_EXTENSIONS.has(ext)) {
64
+ removed.push(glob);
65
+ return false;
66
+ }
67
+ return true;
68
+ });
69
+ if (removed.length === 0)
70
+ return [];
71
+ // Don't leave file_globs empty — warn instead of removing when all globs are binary
72
+ if (filtered.length === 0) {
73
+ return [{
74
+ check: 'binary_file_globs',
75
+ description: `All file globs are binary (${removed.join(', ')}) — kept unchanged to avoid empty file_globs`,
76
+ autoFixed: false,
77
+ }];
78
+ }
79
+ entry.file_globs = filtered;
80
+ return [{
81
+ check: 'binary_file_globs',
82
+ description: `Removed ${removed.length} binary file glob(s): ${removed.join(', ')}`,
83
+ autoFixed: true,
84
+ }];
85
+ }
86
+ /** Extracts the lowercase extension from a glob like **\/*.jpg → 'jpg', or null. */
87
+ function extractExtension(glob) {
88
+ const match = /\.([a-zA-Z0-9]+)$/.exec(glob);
89
+ return match ? match[1].toLowerCase() : null;
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Check 2 – Catch-all globs
93
+ // ---------------------------------------------------------------------------
94
+ function checkCatchAllGlobs(entry) {
95
+ if (!entry.file_globs || entry.file_globs.length === 0)
96
+ return [];
97
+ const catchAlls = entry.file_globs.filter(g => CATCH_ALL_GLOB_PATTERN.test(g));
98
+ const specifics = entry.file_globs.filter(g => !CATCH_ALL_GLOB_PATTERN.test(g));
99
+ // Only act when there is a mix of specific and catch-all globs
100
+ if (catchAlls.length === 0 || specifics.length === 0)
101
+ return [];
102
+ entry.file_globs = specifics;
103
+ return [{
104
+ check: 'catch_all_globs',
105
+ description: `Removed ${catchAlls.length} catch-all glob(s) (${catchAlls.join(', ')}) because specific globs are present`,
106
+ autoFixed: true,
107
+ }];
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Check 3 – Short detection patterns
111
+ // ---------------------------------------------------------------------------
112
+ function checkShortDetectionPatterns(entry) {
113
+ if (!entry.detection_patterns || entry.detection_patterns.length === 0)
114
+ return [];
115
+ const SHORT_MIN_LENGTH = 4;
116
+ const short = entry.detection_patterns.filter(p => p.length < SHORT_MIN_LENGTH);
117
+ const longer = entry.detection_patterns.filter(p => p.length >= SHORT_MIN_LENGTH);
118
+ // Only remove if there are longer patterns to fall back on
119
+ if (short.length === 0 || longer.length === 0)
120
+ return [];
121
+ entry.detection_patterns = longer;
122
+ return [{
123
+ check: 'short_detection_patterns',
124
+ description: `Removed ${short.length} detection pattern(s) shorter than ${SHORT_MIN_LENGTH} chars: ${short.map(p => JSON.stringify(p)).join(', ')}`,
125
+ autoFixed: true,
126
+ }];
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Check 4 – Invalid regex in /pattern/ wrapped detection_patterns
130
+ // ---------------------------------------------------------------------------
131
+ function checkInvalidRegexPatterns(entry) {
132
+ if (!entry.detection_patterns || entry.detection_patterns.length === 0)
133
+ return [];
134
+ const fixes = [];
135
+ for (const pattern of entry.detection_patterns) {
136
+ // Only inspect patterns explicitly wrapped as /regex/
137
+ if (!pattern.startsWith('/') || !pattern.endsWith('/') || pattern.length < 3)
138
+ continue;
139
+ const inner = pattern.slice(1, -1);
140
+ try {
141
+ new RegExp(inner);
142
+ }
143
+ catch {
144
+ fixes.push({
145
+ check: 'invalid_regex_pattern',
146
+ description: `Detection pattern ${JSON.stringify(pattern)} is wrapped as a regex but is not valid: ${inner}`,
147
+ autoFixed: false,
148
+ });
149
+ }
150
+ }
151
+ return fixes;
152
+ }
153
+ // ---------------------------------------------------------------------------
154
+ // Check 5 – Missing isRegex on TransformPatterns
155
+ // ---------------------------------------------------------------------------
156
+ function checkMissingIsRegex(entry) {
157
+ if (!entry.patterns || entry.patterns.length === 0)
158
+ return [];
159
+ const fixes = [];
160
+ for (const pattern of entry.patterns) {
161
+ if (pattern.isRegex !== undefined)
162
+ continue;
163
+ const looksLikeRegex = REGEX_META_SEQUENCES.some(seq => pattern.match.includes(seq));
164
+ if (looksLikeRegex) {
165
+ fixes.push({
166
+ check: 'missing_is_regex',
167
+ description: `TransformPattern match ${JSON.stringify(pattern.match)} contains regex metacharacters but isRegex is not set`,
168
+ autoFixed: false,
169
+ });
170
+ }
171
+ }
172
+ return fixes;
173
+ }
174
+ // ---------------------------------------------------------------------------
175
+ // Check 6 – Missing changelog_summary when informational is true
176
+ // ---------------------------------------------------------------------------
177
+ /**
178
+ * The JSON schema requires changelog_summary when informational is true.
179
+ * If the AI omitted it, derive one from changelog_entry or description
180
+ * (truncated to a single sentence).
181
+ */
182
+ function checkMissingChangelogSummary(entry) {
183
+ if (!entry.informational || entry.changelog_summary)
184
+ return [];
185
+ const source = entry.changelog_entry ?? entry.description;
186
+ // Take the first sentence (up to first period followed by space or end)
187
+ const firstSentence = source.replace(/\.\s[\s\S]*$/, '').trim();
188
+ // Cap at 200 chars
189
+ entry.changelog_summary = firstSentence.length > 200
190
+ ? firstSentence.slice(0, 197) + '...'
191
+ : firstSentence;
192
+ return [{
193
+ check: 'missing_changelog_summary',
194
+ description: `Derived changelog_summary from ${entry.changelog_entry ? 'changelog_entry' : 'description'} (required when informational is true)`,
195
+ autoFixed: true,
196
+ }];
197
+ }
198
+ // ---------------------------------------------------------------------------
199
+ // Check 7 – Invalid informational_category enum value
200
+ // ---------------------------------------------------------------------------
201
+ const VALID_INFORMATIONAL_CATEGORIES = new Set([
202
+ 'security', 'performance', 'ui_ux', 'internal_cleanup', 'configuration',
203
+ ]);
204
+ /**
205
+ * The schema restricts informational_category to a fixed enum. The AI
206
+ * sometimes invents values like "api_change" or "new_feature". Since
207
+ * the field is optional (falls back to a mapping from entry type),
208
+ * removing invalid values is safe.
209
+ */
210
+ function checkInvalidInformationalCategory(entry) {
211
+ if (!entry.informational_category)
212
+ return [];
213
+ if (VALID_INFORMATIONAL_CATEGORIES.has(entry.informational_category))
214
+ return [];
215
+ const removed = entry.informational_category;
216
+ delete entry.informational_category;
217
+ return [{
218
+ check: 'invalid_informational_category',
219
+ description: `Removed invalid informational_category "${removed}" (allowed: ${[...VALID_INFORMATIONAL_CATEGORIES].join(', ')})`,
220
+ autoFixed: true,
221
+ }];
222
+ }
223
+ //# sourceMappingURL=heuristics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../../src/capture/heuristics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type { ChangeDocMetadata, AIContextTags, ChangeDocument, ConflictCheckResult, ReviewDecision, ReviewResult, LogChangeSummary, LogChangeOptions, FinalizeOptions, } from './types.js';
2
+ export { scanChangeDocuments, parseChangeDocument, extractMetadata, extractContextTags, } from './change-scanner.js';
3
+ export { checkConflict, resolveConflict, } from './conflict-resolver.js';
4
+ export { generateManifestEntry, buildEntryPrompt, } from './entry-generator.js';
5
+ export { validateManifestEntry, getEntryValidationErrors, } from './entry-validator.js';
6
+ export { ReviewFlow } from './review-flow.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Change scanning
2
+ export { scanChangeDocuments, parseChangeDocument, extractMetadata, extractContextTags, } from './change-scanner.js';
3
+ // Conflict resolution
4
+ export { checkConflict, resolveConflict, } from './conflict-resolver.js';
5
+ // Entry generation
6
+ export { generateManifestEntry, buildEntryPrompt, } from './entry-generator.js';
7
+ // Entry validation
8
+ export { validateManifestEntry, getEntryValidationErrors, } from './entry-validator.js';
9
+ // Review flow
10
+ export { ReviewFlow } from './review-flow.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AAaA,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,sBAAsB;AACtB,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,mBAAmB;AACnB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { QARecord } from './critique-types.js';
2
+ /**
3
+ * Generates a markdown quality report for the QA pipeline run against a single
4
+ * manifest version.
5
+ *
6
+ * Sections produced (conditional sections are omitted when empty):
7
+ * 1. Header with version and date
8
+ * 2. Summary table with key metrics
9
+ * 3. Informational Reclassifications (if any)
10
+ * 4. Entries Regenerated (if any), with full critique issue details
11
+ * 5. Warnings (needs_improvement entries not regenerated, if any)
12
+ * 6. Heuristic Fixes (if any)
13
+ *
14
+ * @param version - The manifest version string (e.g. "16.7.0")
15
+ * @param records - All QARecord objects produced by the pipeline
16
+ * @returns A markdown-formatted quality report string
17
+ */
18
+ export declare function generateQualityReport(version: string, records: QARecord[]): string;
19
+ //# sourceMappingURL=quality-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-report.d.ts","sourceRoot":"","sources":["../../src/capture/quality-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAwB,MAAM,qBAAqB,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CA8BlF"}