@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,121 @@
1
+ /**
2
+ * Builds focused AI context windows for guide interactions.
3
+ * Each method composes a context string from relevant artifacts,
4
+ * keeping token usage bounded per interaction type.
5
+ */
6
+ export class ChatContextBuilder {
7
+ /**
8
+ * System prompt that defines the AI's role.
9
+ */
10
+ buildSystemPrompt() {
11
+ return [
12
+ 'You are a brXM upgrade assistant helping a customer upgrade their Bloomreach Experience Manager project.',
13
+ 'You explain technical changes in plain language. Be concise and helpful.',
14
+ 'When discussing code changes, reference specific files and line numbers when possible.',
15
+ 'If you are unsure about something, say so rather than guessing.',
16
+ 'Format your responses for terminal display — use short paragraphs, no markdown headers.',
17
+ ].join('\n');
18
+ }
19
+ /**
20
+ * Build context for phase-level chat (between phases).
21
+ */
22
+ buildPhaseContext(phaseName, phaseSummary, discovery, plan) {
23
+ const sections = [];
24
+ sections.push(`Current phase: ${phaseName}`);
25
+ sections.push(`What just happened: ${phaseSummary}`);
26
+ if (discovery) {
27
+ sections.push(this.condensedDiscovery(discovery));
28
+ }
29
+ if (plan) {
30
+ sections.push(this.condensedPlan(plan));
31
+ }
32
+ return sections.join('\n\n');
33
+ }
34
+ /**
35
+ * Build context for step-level coaching (during execution).
36
+ */
37
+ buildStepContext(step, discovery) {
38
+ const sections = [];
39
+ sections.push(`Current step: ${String(step.stepNumber)} — ${step.entryId}`);
40
+ sections.push(`Description: ${step.description}`);
41
+ sections.push(`Type: ${step.type}`);
42
+ sections.push(`Automation: ${step.automatable}`);
43
+ sections.push(`Risk level: ${String(step.riskLevel)}/5`);
44
+ if (step.affectedFiles.length > 0) {
45
+ const fileList = step.affectedFiles.length <= 10
46
+ ? step.affectedFiles.join('\n ')
47
+ : step.affectedFiles.slice(0, 10).join('\n ') +
48
+ `\n ... and ${String(step.affectedFiles.length - 10)} more`;
49
+ sections.push(`Affected files:\n ${fileList}`);
50
+ }
51
+ if (step.analysis) {
52
+ sections.push(`AI analysis: ${step.analysis}`);
53
+ }
54
+ if (step.manualSteps) {
55
+ sections.push(`Manual steps:\n${step.manualSteps.map((s, i) => ` ${String(i + 1)}. ${s}`).join('\n')}`);
56
+ }
57
+ if (step.documentationUrl) {
58
+ sections.push(`Documentation: ${step.documentationUrl}`);
59
+ }
60
+ if (discovery) {
61
+ sections.push(this.condensedDiscovery(discovery));
62
+ }
63
+ return sections.join('\n\n');
64
+ }
65
+ /**
66
+ * Build context for AI fix generation.
67
+ */
68
+ buildFixContext(step, discovery, files) {
69
+ const sections = [];
70
+ sections.push(this.buildStepContext(step, discovery));
71
+ sections.push('File contents for reference:');
72
+ for (const file of files) {
73
+ const content = file.content.length > 3000
74
+ ? file.content.substring(0, 3000) + '\n... (truncated)'
75
+ : file.content;
76
+ sections.push(`--- ${file.path} ---\n${content}`);
77
+ }
78
+ return sections.join('\n\n');
79
+ }
80
+ /**
81
+ * Build a prompt for AI-generated version summary in a customer-friendly format.
82
+ *
83
+ * @param manifestDescriptions - List of manifest entry description strings to summarize
84
+ * @returns A prompt string that instructs the AI to respond with JSON in the form:
85
+ * `{ "headline": string, "bullets": string[] }` (up to 4 bullets).
86
+ * Callers such as {@link DiscoveryPhase.buildSummary} must `JSON.parse()` the
87
+ * response and handle parse failures, as the AI may occasionally deviate from
88
+ * the requested format.
89
+ */
90
+ buildVersionSummaryPrompt(manifestDescriptions) {
91
+ return [
92
+ 'Summarize these upgrade manifest entries into a customer-friendly changelog.',
93
+ 'Group by theme. Mention the number of automated vs. manual steps.',
94
+ 'Keep it under 4 bullet points. Write for a technical audience that may not know Bloomreach internals.',
95
+ 'Return JSON: { "headline": "short title", "bullets": ["point1", "point2"] }',
96
+ '',
97
+ 'Entries:',
98
+ ...manifestDescriptions.map((d, i) => `${String(i + 1)}. ${d}`),
99
+ ].join('\n');
100
+ }
101
+ condensedDiscovery(discovery) {
102
+ return [
103
+ 'Project:',
104
+ ` Version: ${discovery.build.brxmVersion}`,
105
+ ` Modules: ${String(discovery.build.moduleCount)}`,
106
+ ` Java files: ${String(discovery.build.totalJavaFiles)}`,
107
+ ` Upgrade ready: ${discovery.isUpgradeReady ? 'yes' : 'no'}`,
108
+ discovery.validations.length > 0
109
+ ? ` Warnings: ${String(discovery.validations.length)}`
110
+ : '',
111
+ ].filter(Boolean).join('\n');
112
+ }
113
+ condensedPlan(plan) {
114
+ return [
115
+ 'Plan:',
116
+ ` ${plan.fromVersion} → ${plan.toVersion}`,
117
+ ` Steps: ${String(plan.summary.totalSteps)} (${String(plan.summary.automatedSteps)} auto, ${String(plan.summary.aiAssistedSteps)} AI, ${String(plan.summary.manualSteps)} manual)`,
118
+ ].join('\n');
119
+ }
120
+ }
121
+ //# sourceMappingURL=ChatContextBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatContextBuilder.js","sourceRoot":"","sources":["../../../src/guide/chat/ChatContextBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AIClient } from '../../ai/types.js';
2
+ /**
3
+ * Interactive Q&A loop. Prompts the user for free-text questions,
4
+ * sends them to the AI with the provided context, and displays responses.
5
+ * Loops until the user enters an empty string.
6
+ */
7
+ export declare class ChatLoop {
8
+ private readonly ai;
9
+ constructor(ai: AIClient);
10
+ /**
11
+ * Run the chat loop.
12
+ *
13
+ * @param contextPrompt - The context to include with each question
14
+ * @param systemPrompt - The system prompt for the AI
15
+ */
16
+ run(contextPrompt: string, systemPrompt: string): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=ChatLoop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatLoop.d.ts","sourceRoot":"","sources":["../../../src/guide/chat/ChatLoop.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAElB,EAAE,EAAE,QAAQ;IAIxB;;;;;OAKG;IACG,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsCtE"}
@@ -0,0 +1,59 @@
1
+ /* eslint-disable no-console */
2
+ import inquirer from 'inquirer';
3
+ import chalk from 'chalk';
4
+ import { createLogger } from '../../utils/logger.js';
5
+ import { createSpinner } from '../../utils/spinner.js';
6
+ const logger = createLogger({ prefix: 'ChatLoop' });
7
+ /**
8
+ * Interactive Q&A loop. Prompts the user for free-text questions,
9
+ * sends them to the AI with the provided context, and displays responses.
10
+ * Loops until the user enters an empty string.
11
+ */
12
+ export class ChatLoop {
13
+ ai;
14
+ constructor(ai) {
15
+ this.ai = ai;
16
+ }
17
+ /**
18
+ * Run the chat loop.
19
+ *
20
+ * @param contextPrompt - The context to include with each question
21
+ * @param systemPrompt - The system prompt for the AI
22
+ */
23
+ async run(contextPrompt, systemPrompt) {
24
+ while (true) {
25
+ const { question } = (await inquirer.prompt([
26
+ {
27
+ type: 'input',
28
+ name: 'question',
29
+ message: chalk.cyan('Your question (press Enter to continue):'),
30
+ },
31
+ ]));
32
+ const trimmed = question.trim();
33
+ if (!trimmed) {
34
+ break;
35
+ }
36
+ const spinner = createSpinner({ text: 'Thinking...', color: 'cyan' });
37
+ spinner.start();
38
+ try {
39
+ const fullPrompt = `Context:\n${contextPrompt}\n\nUser question: ${trimmed}`;
40
+ const result = await this.ai.generate(fullPrompt, {
41
+ system: systemPrompt,
42
+ maxTokens: 1000,
43
+ temperature: 0.3,
44
+ });
45
+ spinner.stop();
46
+ console.log('');
47
+ console.log(chalk.dim(' ') + result.text.split('\n').join('\n '));
48
+ console.log('');
49
+ }
50
+ catch (error) {
51
+ spinner.fail('Failed to generate response');
52
+ logger.warn(`AI response failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
53
+ console.log(chalk.yellow(' Sorry, I couldn\'t generate a response. Try again or press Enter to continue.'));
54
+ console.log('');
55
+ }
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=ChatLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatLoop.js","sourceRoot":"","sources":["../../../src/guide/chat/ChatLoop.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACF,EAAE,CAAW;IAE9B,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,aAAqB,EAAE,YAAoB;QACnD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC1C;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC;iBAChE;aACF,CAAC,CAAyB,CAAC;YAE5B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM;YACR,CAAC;YAED,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,aAAa,aAAa,sBAAsB,OAAO,EAAE,CAAC;gBAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;oBAChD,MAAM,EAAE,YAAY;oBACpB,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iFAAiF,CAAC,CAAC,CAAC;gBAC7G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import type { AIClient } from '../../ai/types.js';
2
+ import type { PlanStep } from '../../planning/types.js';
3
+ import type { ProjectContext } from '../../discovery/types.js';
4
+ /**
5
+ * Provides per-step AI coaching during the execution phase.
6
+ * Generates briefings, handles Q&A, and supports "fix this for me" flows.
7
+ */
8
+ export declare class StepCoach {
9
+ private readonly ai;
10
+ private readonly contextBuilder;
11
+ constructor(ai: AIClient);
12
+ /**
13
+ * Generate an AI briefing for a step in plain language.
14
+ * Falls back to the step description if AI fails.
15
+ *
16
+ * @param step - The plan step to generate a briefing for
17
+ * @param discovery - Optional project context for richer explanations
18
+ * @returns A plain-language briefing string
19
+ */
20
+ generateBriefing(step: PlanStep, discovery?: ProjectContext): Promise<string>;
21
+ }
22
+ //# sourceMappingURL=StepCoach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepCoach.d.ts","sourceRoot":"","sources":["../../../src/guide/chat/StepCoach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,EAAE,EAAE,QAAQ;IAKxB;;;;;;;OAOG;IACG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAoBpF"}
@@ -0,0 +1,39 @@
1
+ import { ChatContextBuilder } from './ChatContextBuilder.js';
2
+ import { createLogger } from '../../utils/logger.js';
3
+ const logger = createLogger({ prefix: 'StepCoach' });
4
+ /**
5
+ * Provides per-step AI coaching during the execution phase.
6
+ * Generates briefings, handles Q&A, and supports "fix this for me" flows.
7
+ */
8
+ export class StepCoach {
9
+ ai;
10
+ contextBuilder;
11
+ constructor(ai) {
12
+ this.ai = ai;
13
+ this.contextBuilder = new ChatContextBuilder();
14
+ }
15
+ /**
16
+ * Generate an AI briefing for a step in plain language.
17
+ * Falls back to the step description if AI fails.
18
+ *
19
+ * @param step - The plan step to generate a briefing for
20
+ * @param discovery - Optional project context for richer explanations
21
+ * @returns A plain-language briefing string
22
+ */
23
+ async generateBriefing(step, discovery) {
24
+ try {
25
+ const context = this.contextBuilder.buildStepContext(step, discovery);
26
+ const result = await this.ai.generate(`Explain this upgrade step in 2-3 sentences for a customer who may not know the platform internals:\n\n${context}`, {
27
+ system: this.contextBuilder.buildSystemPrompt(),
28
+ maxTokens: 300,
29
+ temperature: 0.3,
30
+ });
31
+ return result.text;
32
+ }
33
+ catch (error) {
34
+ logger.warn(`Failed to generate briefing: ${error instanceof Error ? error.message : 'Unknown error'}`);
35
+ return step.description;
36
+ }
37
+ }
38
+ }
39
+ //# sourceMappingURL=StepCoach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepCoach.js","sourceRoot":"","sources":["../../../src/guide/chat/StepCoach.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,OAAO,SAAS;IACH,EAAE,CAAW;IACb,cAAc,CAAqB;IAEpD,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACjD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAC,IAAc,EAAE,SAA0B;QAC/D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CACnC,yGAAyG,OAAO,EAAE,EAClH;gBACE,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;gBAC/C,SAAS,EAAE,GAAG;gBACd,WAAW,EAAE,GAAG;aACjB,CACF,CAAC;YACF,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CACT,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC3F,CAAC;YACF,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;IACH,CAAC;CAEF"}
@@ -0,0 +1,4 @@
1
+ export { ChatContextBuilder } from './ChatContextBuilder.js';
2
+ export { ChatLoop } from './ChatLoop.js';
3
+ export { StepCoach } from './StepCoach.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/guide/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ChatContextBuilder } from './ChatContextBuilder.js';
2
+ export { ChatLoop } from './ChatLoop.js';
3
+ export { StepCoach } from './StepCoach.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/guide/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { GuideRunner } from './GuideRunner.js';
2
+ export type { GuidePhase, GuideContext, PhaseResult, GuideSummary, VersionSummary, VersionSummaryCache, ResumeState, } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guide/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,WAAW,GACZ,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { GuideRunner } from './GuideRunner.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guide/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { GuidePhase, GuideContext, PhaseResult } from '../types.js';
2
+ /**
3
+ * Discovery phase: scans the project using DiscoveryOrchestrator,
4
+ * presents findings with an AI summary (or raw validation list),
5
+ * and persists the result to disk.
6
+ */
7
+ export declare class DiscoveryPhase implements GuidePhase {
8
+ readonly name = "Discovery";
9
+ readonly phaseNumber = 1;
10
+ readonly totalPhases = 3;
11
+ readonly canChat = true;
12
+ run(context: GuideContext): Promise<PhaseResult>;
13
+ /**
14
+ * Resolve the target version for a guided upgrade run.
15
+ */
16
+ private selectTargetVersion;
17
+ /**
18
+ * Display validation issues grouped by severity.
19
+ */
20
+ private showValidations;
21
+ /**
22
+ * Display file path and suggestion for a validation issue, if present.
23
+ */
24
+ private showIssueDetails;
25
+ /**
26
+ * Generate and display an AI-powered summary of the discovery results.
27
+ */
28
+ private showAiSummary;
29
+ }
30
+ //# sourceMappingURL=DiscoveryPhase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscoveryPhase.d.ts","sourceRoot":"","sources":["../../../src/guide/phases/DiscoveryPhase.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzE;;;;GAIG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,KAAK;IACzB,QAAQ,CAAC,WAAW,KAAK;IACzB,QAAQ,CAAC,OAAO,QAAQ;IAElB,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAyHtD;;OAEG;YACW,mBAAmB;IAyCjC;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;YACW,aAAa;CA4B5B"}
@@ -0,0 +1,238 @@
1
+ /* eslint-disable no-console */
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import semver from 'semver';
5
+ import { DiscoveryOrchestrator } from '../../discovery/orchestrator.js';
6
+ import { getAvailableVersions } from '../../planning/index.js';
7
+ import { saveUpgradeState } from '../../core/upgrade-state.js';
8
+ import { createSpinner } from '../../utils/spinner.js';
9
+ import { writeTextFile, joinPaths } from '../../utils/fs.js';
10
+ import { formatPhaseHeader } from '../rendering/formatters.js';
11
+ import { ChatContextBuilder } from '../chat/ChatContextBuilder.js';
12
+ /**
13
+ * Discovery phase: scans the project using DiscoveryOrchestrator,
14
+ * presents findings with an AI summary (or raw validation list),
15
+ * and persists the result to disk.
16
+ */
17
+ export class DiscoveryPhase {
18
+ name = 'Discovery';
19
+ phaseNumber = 1;
20
+ totalPhases = 3;
21
+ canChat = true;
22
+ async run(context) {
23
+ console.log(formatPhaseHeader(this.phaseNumber, this.totalPhases, this.name));
24
+ console.log(chalk.dim(' Analyzing your project structure, Maven modules, and'));
25
+ console.log(chalk.dim(' configuration to determine upgrade readiness.'));
26
+ console.log('');
27
+ const spinner = createSpinner({ text: 'Scanning project...', color: 'cyan' });
28
+ spinner.start();
29
+ let result;
30
+ try {
31
+ const orchestrator = new DiscoveryOrchestrator();
32
+ result = await orchestrator.discover(context.projectRoot);
33
+ }
34
+ catch (error) {
35
+ spinner.fail('Discovery failed');
36
+ const message = error instanceof Error ? error.message : 'Unknown error during discovery';
37
+ return {
38
+ success: false,
39
+ summary: 'Discovery failed unexpectedly',
40
+ error: message,
41
+ };
42
+ }
43
+ if (!result.success || !result.context) {
44
+ spinner.fail('Discovery failed');
45
+ return {
46
+ success: false,
47
+ summary: 'Discovery failed',
48
+ error: result.error ?? 'Unknown discovery error',
49
+ };
50
+ }
51
+ const projectContext = result.context;
52
+ context.discovery = projectContext;
53
+ context.currentVersion = projectContext.build.brxmVersion;
54
+ const moduleCount = String(projectContext.build.moduleCount);
55
+ const javaFiles = String(projectContext.build.totalJavaFiles);
56
+ spinner.succeed(`Scanned ${moduleCount} modules, ${javaFiles} Java files (${String(result.duration)}ms)`);
57
+ // Display warnings from the orchestrator
58
+ if (result.warnings && result.warnings.length > 0) {
59
+ for (const warning of result.warnings) {
60
+ console.log(chalk.yellow(` ⚠ ${warning}`));
61
+ }
62
+ }
63
+ // Show validation results
64
+ this.showValidations(projectContext.validations, projectContext.isUpgradeReady);
65
+ // Show AI summary if available, or raw findings
66
+ if (context.ai) {
67
+ await this.showAiSummary(context);
68
+ }
69
+ // If there are errors, block progression — user must fix them first
70
+ if (!projectContext.isUpgradeReady) {
71
+ const errorCount = projectContext.validations.filter((v) => v.severity === 'error').length;
72
+ console.log('');
73
+ console.log(chalk.red(' Please fix the error(s) above and re-run the upgrade tool.'));
74
+ return {
75
+ success: false,
76
+ summary: `Discovery found ${String(errorCount)} error(s) that must be resolved before upgrading`,
77
+ error: 'Project has blocking errors that must be resolved before proceeding',
78
+ };
79
+ }
80
+ // Select target version for the next phase
81
+ try {
82
+ context.targetVersion = await this.selectTargetVersion(context, projectContext.build.brxmVersion);
83
+ }
84
+ catch (error) {
85
+ spinner.fail('Target version selection failed');
86
+ const message = error instanceof Error ? error.message : 'Unable to resolve target version';
87
+ return {
88
+ success: false,
89
+ summary: 'Discovery completed but target selection failed',
90
+ error: message,
91
+ };
92
+ }
93
+ // Persist discovery to disk
94
+ try {
95
+ const outputPath = joinPaths(context.projectRoot, '.brxm-upgrade', 'discovery.json');
96
+ await writeTextFile(outputPath, JSON.stringify(projectContext, null, 2));
97
+ if (context.config.output.verbose) {
98
+ console.log(chalk.dim(` Saved to .brxm-upgrade/discovery.json`));
99
+ }
100
+ }
101
+ catch {
102
+ // Non-critical: warn but don't fail the phase
103
+ console.log(chalk.yellow(' Could not save discovery.json'));
104
+ }
105
+ try {
106
+ await saveUpgradeState(context.projectRoot, {
107
+ currentVersion: context.currentVersion,
108
+ targetVersion: context.targetVersion,
109
+ });
110
+ if (context.config.output.verbose) {
111
+ console.log(chalk.dim(' Saved to .brxm-upgrade/upgrade-state.json'));
112
+ }
113
+ }
114
+ catch {
115
+ console.log(chalk.yellow(' Could not save upgrade-state.json'));
116
+ }
117
+ const summary = projectContext.isUpgradeReady
118
+ ? `Project is ready for upgrade (${moduleCount} modules, ${javaFiles} Java files)`
119
+ : `Project has issues to resolve before upgrade (${String(projectContext.validations.filter((v) => v.severity === 'error').length)} errors)`;
120
+ return {
121
+ success: true,
122
+ summary: `${summary}; target version ${context.targetVersion} selected`,
123
+ data: projectContext,
124
+ };
125
+ }
126
+ /**
127
+ * Resolve the target version for a guided upgrade run.
128
+ */
129
+ async selectTargetVersion(context, currentVersion) {
130
+ const versions = await getAvailableVersions(context.manifestOptions);
131
+ if (versions.length === 0) {
132
+ throw new Error('No upgrade manifests found. Run `brxm-upgrade setup-manifests` to configure them.');
133
+ }
134
+ const newerVersions = versions.filter((version) => semver.gt(version, currentVersion));
135
+ if (newerVersions.length === 0) {
136
+ console.log(chalk.dim(` No newer manifests available; staying on ${currentVersion}`));
137
+ return currentVersion;
138
+ }
139
+ if (newerVersions.length === 1) {
140
+ console.log(chalk.dim(` Target version: ${newerVersions[0]}`));
141
+ return newerVersions[0];
142
+ }
143
+ const latestVersion = newerVersions[newerVersions.length - 1];
144
+ const { targetVersion } = (await inquirer.prompt([
145
+ {
146
+ type: 'select',
147
+ name: 'targetVersion',
148
+ message: 'Which version do you want to upgrade to?',
149
+ choices: newerVersions.map((version) => ({
150
+ name: version === latestVersion ? `${version} (latest)` : version,
151
+ value: version,
152
+ })),
153
+ default: latestVersion,
154
+ },
155
+ ]));
156
+ return targetVersion;
157
+ }
158
+ /**
159
+ * Display validation issues grouped by severity.
160
+ */
161
+ showValidations(validations, isUpgradeReady) {
162
+ if (validations.length === 0) {
163
+ console.log(chalk.green(' No validation issues found'));
164
+ console.log('');
165
+ console.log(chalk.green(' ✓ Project is ready for upgrade'));
166
+ return;
167
+ }
168
+ console.log('');
169
+ const errors = validations.filter((v) => v.severity === 'error');
170
+ const warnings = validations.filter((v) => v.severity === 'warning');
171
+ const infos = validations.filter((v) => v.severity === 'info');
172
+ if (errors.length > 0) {
173
+ console.log(chalk.red(` ${String(errors.length)} error(s) — must be resolved before upgrading:`));
174
+ for (const err of errors) {
175
+ console.log(chalk.red(` ✗ ${err.message}`));
176
+ this.showIssueDetails(err);
177
+ }
178
+ }
179
+ if (warnings.length > 0) {
180
+ console.log(chalk.yellow(` ${String(warnings.length)} warning(s) — may need attention during upgrade:`));
181
+ for (const warn of warnings) {
182
+ console.log(chalk.yellow(` ⚠ ${warn.message}`));
183
+ this.showIssueDetails(warn);
184
+ }
185
+ }
186
+ if (infos.length > 0) {
187
+ console.log(chalk.dim(` ${String(infos.length)} info(s) — for your awareness:`));
188
+ for (const info of infos) {
189
+ console.log(chalk.dim(` ℹ ${info.message}`));
190
+ this.showIssueDetails(info);
191
+ }
192
+ }
193
+ console.log('');
194
+ if (isUpgradeReady) {
195
+ console.log(chalk.green(' ✓ Project is ready for upgrade'));
196
+ }
197
+ else {
198
+ console.log(chalk.yellow(' ⚠ Project has issues — upgrade may require manual fixes'));
199
+ console.log(chalk.dim(' Errors must be resolved before proceeding. Warnings are advisory.'));
200
+ }
201
+ }
202
+ /**
203
+ * Display file path and suggestion for a validation issue, if present.
204
+ */
205
+ showIssueDetails(issue) {
206
+ if (issue.file) {
207
+ console.log(chalk.dim(` in ${issue.file}`));
208
+ }
209
+ const suggestion = issue.details?.['suggestion'];
210
+ if (typeof suggestion === 'string') {
211
+ console.log(chalk.dim(` ${suggestion}`));
212
+ }
213
+ }
214
+ /**
215
+ * Generate and display an AI-powered summary of the discovery results.
216
+ */
217
+ async showAiSummary(context) {
218
+ if (!context.ai || !context.discovery)
219
+ return;
220
+ try {
221
+ const chatBuilder = new ChatContextBuilder();
222
+ const discoveryContext = chatBuilder.buildPhaseContext(this.name, 'Project discovery completed. Summarize the findings for the user.', context.discovery);
223
+ const result = await context.ai.generate(`${discoveryContext}\n\nProvide a brief, plain-language summary of this project's readiness for upgrade. Mention key findings. Keep it to 2-3 sentences. Do not reference commands, reports, or features that are not part of this tool.`, {
224
+ system: chatBuilder.buildSystemPrompt(),
225
+ maxTokens: 300,
226
+ temperature: 0.3,
227
+ });
228
+ console.log('');
229
+ console.log(chalk.bold(' AI Summary:'));
230
+ console.log(' ' + result.text.split('\n').join('\n '));
231
+ console.log('');
232
+ }
233
+ catch {
234
+ // AI summary is nice-to-have — continue without it
235
+ }
236
+ }
237
+ }
238
+ //# sourceMappingURL=DiscoveryPhase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscoveryPhase.js","sourceRoot":"","sources":["../../../src/guide/phases/DiscoveryPhase.ts"],"names":[],"mappings":"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"}