@entelligentsia/forgecli 1.0.20 → 1.0.21

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 (324) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +7 -1
  3. package/dist/bin/config.js +4 -4
  4. package/dist/bin/config.js.map +1 -1
  5. package/dist/bin/update-cli.d.ts +1 -1
  6. package/dist/bin/update-cli.js +1 -1
  7. package/dist/bin/update-cli.js.map +1 -1
  8. package/dist/extensions/forgecli/ask-user-tool.js +1 -1
  9. package/dist/extensions/forgecli/ask-user-tool.js.map +1 -1
  10. package/dist/extensions/forgecli/commands/add-pipeline.d.ts +19 -0
  11. package/dist/extensions/forgecli/commands/add-pipeline.js +143 -0
  12. package/dist/extensions/forgecli/commands/add-pipeline.js.map +1 -0
  13. package/dist/extensions/forgecli/commands/add-task.d.ts +20 -0
  14. package/dist/extensions/forgecli/commands/add-task.js +154 -0
  15. package/dist/extensions/forgecli/commands/add-task.js.map +1 -0
  16. package/dist/extensions/forgecli/commands/approve.d.ts +22 -0
  17. package/dist/extensions/forgecli/commands/approve.js +152 -0
  18. package/dist/extensions/forgecli/commands/approve.js.map +1 -0
  19. package/dist/extensions/forgecli/commands/collate.d.ts +22 -0
  20. package/dist/extensions/forgecli/commands/collate.js +134 -0
  21. package/dist/extensions/forgecli/commands/collate.js.map +1 -0
  22. package/dist/extensions/forgecli/commands/commit.d.ts +22 -0
  23. package/dist/extensions/forgecli/commands/commit.js +152 -0
  24. package/dist/extensions/forgecli/commands/commit.js.map +1 -0
  25. package/dist/extensions/forgecli/commands/config-command.d.ts +8 -0
  26. package/dist/extensions/forgecli/commands/config-command.js +67 -0
  27. package/dist/extensions/forgecli/commands/config-command.js.map +1 -0
  28. package/dist/extensions/forgecli/commands/enhance.d.ts +45 -0
  29. package/dist/extensions/forgecli/commands/enhance.js +219 -0
  30. package/dist/extensions/forgecli/commands/enhance.js.map +1 -0
  31. package/dist/extensions/forgecli/commands/implement.d.ts +22 -0
  32. package/dist/extensions/forgecli/commands/implement.js +170 -0
  33. package/dist/extensions/forgecli/commands/implement.js.map +1 -0
  34. package/dist/extensions/forgecli/commands/plan.d.ts +22 -0
  35. package/dist/extensions/forgecli/commands/plan.js +167 -0
  36. package/dist/extensions/forgecli/commands/plan.js.map +1 -0
  37. package/dist/extensions/forgecli/commands/quiz-agent.d.ts +17 -0
  38. package/dist/extensions/forgecli/commands/quiz-agent.js +98 -0
  39. package/dist/extensions/forgecli/commands/quiz-agent.js.map +1 -0
  40. package/dist/extensions/forgecli/commands/read-command.d.ts +2 -0
  41. package/dist/extensions/forgecli/commands/read-command.js +100 -0
  42. package/dist/extensions/forgecli/commands/read-command.js.map +1 -0
  43. package/dist/extensions/forgecli/commands/regenerate.d.ts +40 -0
  44. package/dist/extensions/forgecli/commands/regenerate.js +426 -0
  45. package/dist/extensions/forgecli/commands/regenerate.js.map +1 -0
  46. package/dist/extensions/forgecli/commands/remove-command.d.ts +17 -0
  47. package/dist/extensions/forgecli/commands/remove-command.js +124 -0
  48. package/dist/extensions/forgecli/commands/remove-command.js.map +1 -0
  49. package/dist/extensions/forgecli/commands/report-bug.d.ts +25 -0
  50. package/dist/extensions/forgecli/commands/report-bug.js +159 -0
  51. package/dist/extensions/forgecli/commands/report-bug.js.map +1 -0
  52. package/dist/extensions/forgecli/commands/retrospective.d.ts +20 -0
  53. package/dist/extensions/forgecli/commands/retrospective.js +126 -0
  54. package/dist/extensions/forgecli/commands/retrospective.js.map +1 -0
  55. package/dist/extensions/forgecli/commands/review-code.d.ts +35 -0
  56. package/dist/extensions/forgecli/commands/review-code.js +196 -0
  57. package/dist/extensions/forgecli/commands/review-code.js.map +1 -0
  58. package/dist/extensions/forgecli/commands/review-plan.d.ts +35 -0
  59. package/dist/extensions/forgecli/commands/review-plan.js +200 -0
  60. package/dist/extensions/forgecli/commands/review-plan.js.map +1 -0
  61. package/dist/extensions/forgecli/commands/sprint-intake.d.ts +10 -0
  62. package/dist/extensions/forgecli/commands/sprint-intake.js +91 -0
  63. package/dist/extensions/forgecli/commands/sprint-intake.js.map +1 -0
  64. package/dist/extensions/forgecli/commands/sprint-plan.d.ts +14 -0
  65. package/dist/extensions/forgecli/commands/sprint-plan.js +122 -0
  66. package/dist/extensions/forgecli/commands/sprint-plan.js.map +1 -0
  67. package/dist/extensions/forgecli/commands/status-command.d.ts +19 -0
  68. package/dist/extensions/forgecli/commands/status-command.js +140 -0
  69. package/dist/extensions/forgecli/commands/status-command.js.map +1 -0
  70. package/dist/extensions/forgecli/commands/store-query.d.ts +22 -0
  71. package/dist/extensions/forgecli/commands/store-query.js +107 -0
  72. package/dist/extensions/forgecli/commands/store-query.js.map +1 -0
  73. package/dist/extensions/forgecli/commands/store-repair.d.ts +17 -0
  74. package/dist/extensions/forgecli/commands/store-repair.js +123 -0
  75. package/dist/extensions/forgecli/commands/store-repair.js.map +1 -0
  76. package/dist/extensions/forgecli/commands/test-orchestrate.d.ts +2 -0
  77. package/dist/extensions/forgecli/commands/test-orchestrate.js +182 -0
  78. package/dist/extensions/forgecli/commands/test-orchestrate.js.map +1 -0
  79. package/dist/extensions/forgecli/commands/transcripts-command.d.ts +87 -0
  80. package/dist/extensions/forgecli/commands/transcripts-command.js +418 -0
  81. package/dist/extensions/forgecli/commands/transcripts-command.js.map +1 -0
  82. package/dist/extensions/forgecli/commands/validate.d.ts +22 -0
  83. package/dist/extensions/forgecli/commands/validate.js +152 -0
  84. package/dist/extensions/forgecli/commands/validate.js.map +1 -0
  85. package/dist/extensions/forgecli/config/config-layer.d.ts +53 -0
  86. package/dist/extensions/forgecli/config/config-layer.js +72 -0
  87. package/dist/extensions/forgecli/config/config-layer.js.map +1 -0
  88. package/dist/extensions/forgecli/config/config-writer.d.ts +16 -0
  89. package/dist/extensions/forgecli/config/config-writer.js +69 -0
  90. package/dist/extensions/forgecli/config/config-writer.js.map +1 -0
  91. package/dist/extensions/forgecli/config/model-registry.d.ts +61 -0
  92. package/dist/extensions/forgecli/config/model-registry.js +127 -0
  93. package/dist/extensions/forgecli/config/model-registry.js.map +1 -0
  94. package/dist/extensions/forgecli/config/model-resolver.d.ts +32 -0
  95. package/dist/extensions/forgecli/config/model-resolver.js +65 -0
  96. package/dist/extensions/forgecli/config/model-resolver.js.map +1 -0
  97. package/dist/extensions/forgecli/config/model-validator.d.ts +29 -0
  98. package/dist/extensions/forgecli/config/model-validator.js +107 -0
  99. package/dist/extensions/forgecli/config/model-validator.js.map +1 -0
  100. package/dist/extensions/forgecli/config-tui/component.js +1 -1
  101. package/dist/extensions/forgecli/config-tui/component.js.map +1 -1
  102. package/dist/extensions/forgecli/config-tui/handler.js +1 -1
  103. package/dist/extensions/forgecli/config-tui/handler.js.map +1 -1
  104. package/dist/extensions/forgecli/config-tui/screens/override-editor.js +1 -1
  105. package/dist/extensions/forgecli/config-tui/screens/override-editor.js.map +1 -1
  106. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js +1 -1
  107. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js.map +1 -1
  108. package/dist/extensions/forgecli/config-tui/screens/show-resolved.js +1 -1
  109. package/dist/extensions/forgecli/config-tui/screens/show-resolved.js.map +1 -1
  110. package/dist/extensions/forgecli/config-tui/state/buffer.d.ts +2 -2
  111. package/dist/extensions/forgecli/config-tui/state/model.d.ts +1 -1
  112. package/dist/extensions/forgecli/config-tui/state/reducer.js.map +1 -1
  113. package/dist/extensions/forgecli/config-tui/state/selectors.d.ts +2 -2
  114. package/dist/extensions/forgecli/config-tui/state/selectors.js +1 -1
  115. package/dist/extensions/forgecli/config-tui/state/selectors.js.map +1 -1
  116. package/dist/extensions/forgecli/context-governor-compaction.d.ts +13 -2
  117. package/dist/extensions/forgecli/context-governor-compaction.js +66 -41
  118. package/dist/extensions/forgecli/context-governor-compaction.js.map +1 -1
  119. package/dist/extensions/forgecli/context-governor.d.ts +3 -7
  120. package/dist/extensions/forgecli/context-governor.js +43 -69
  121. package/dist/extensions/forgecli/context-governor.js.map +1 -1
  122. package/dist/extensions/forgecli/dashboard/component.d.ts +10 -1
  123. package/dist/extensions/forgecli/dashboard/component.js +84 -18
  124. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  125. package/dist/extensions/forgecli/dashboard/register.js +1 -1
  126. package/dist/extensions/forgecli/dashboard/register.js.map +1 -1
  127. package/dist/extensions/forgecli/forge-artifact-tool.js +1 -1
  128. package/dist/extensions/forgecli/forge-commands.js +1 -1
  129. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  130. package/dist/extensions/forgecli/forge-init/forge-init.d.ts +26 -0
  131. package/dist/extensions/forgecli/forge-init/forge-init.js +514 -0
  132. package/dist/extensions/forgecli/forge-init/forge-init.js.map +1 -0
  133. package/dist/extensions/forgecli/forge-init/init-context.d.ts +99 -0
  134. package/dist/extensions/forgecli/forge-init/init-context.js +178 -0
  135. package/dist/extensions/forgecli/forge-init/init-context.js.map +1 -0
  136. package/dist/extensions/forgecli/forge-init/init-progress.d.ts +39 -0
  137. package/dist/extensions/forgecli/forge-init/init-progress.js +117 -0
  138. package/dist/extensions/forgecli/forge-init/init-progress.js.map +1 -0
  139. package/dist/extensions/forgecli/forge-init/phase4-register.js +1 -1
  140. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  141. package/dist/extensions/forgecli/forge-init/run-phases.js +2 -2
  142. package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -1
  143. package/dist/extensions/forgecli/forge-subagent.d.ts +22 -0
  144. package/dist/extensions/forgecli/forge-subagent.js +42 -15
  145. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  146. package/dist/extensions/forgecli/forge-tools.d.ts +0 -25
  147. package/dist/extensions/forgecli/forge-tools.js +6 -37
  148. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  149. package/dist/extensions/forgecli/governor-config.d.ts +19 -0
  150. package/dist/extensions/forgecli/governor-config.js +58 -0
  151. package/dist/extensions/forgecli/governor-config.js.map +1 -0
  152. package/dist/extensions/forgecli/health-check.js +1 -1
  153. package/dist/extensions/forgecli/health-check.js.map +1 -1
  154. package/dist/extensions/forgecli/hook-dispatcher.js +2 -2
  155. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  156. package/dist/extensions/forgecli/hooks/post-init-hook.js +11 -6
  157. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
  158. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +11 -6
  159. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
  160. package/dist/extensions/forgecli/hooks/write-guard.js +1 -1
  161. package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -1
  162. package/dist/extensions/forgecli/index.js +37 -35
  163. package/dist/extensions/forgecli/index.js.map +1 -1
  164. package/dist/extensions/forgecli/kickoff.d.ts +9 -0
  165. package/dist/extensions/forgecli/kickoff.js +15 -0
  166. package/dist/extensions/forgecli/kickoff.js.map +1 -1
  167. package/dist/extensions/forgecli/lib/forge-config.d.ts +1 -1
  168. package/dist/extensions/forgecli/lib/forge-config.js +1 -1
  169. package/dist/extensions/forgecli/lib/forge-config.js.map +1 -1
  170. package/dist/extensions/forgecli/lib/forge-root.d.ts +10 -0
  171. package/dist/extensions/forgecli/lib/forge-root.js +62 -0
  172. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -0
  173. package/dist/extensions/forgecli/lib/run-cjs.d.ts +26 -0
  174. package/dist/extensions/forgecli/lib/run-cjs.js +42 -0
  175. package/dist/extensions/forgecli/lib/run-cjs.js.map +1 -0
  176. package/dist/extensions/forgecli/orchestrator-tree.d.ts +4 -0
  177. package/dist/extensions/forgecli/orchestrator-tree.js +21 -3
  178. package/dist/extensions/forgecli/orchestrator-tree.js.map +1 -1
  179. package/dist/extensions/forgecli/orchestrators/calibrate.d.ts +64 -0
  180. package/dist/extensions/forgecli/orchestrators/calibrate.js +481 -0
  181. package/dist/extensions/forgecli/orchestrators/calibrate.js.map +1 -0
  182. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +93 -0
  183. package/dist/extensions/forgecli/orchestrators/fix-bug.js +1705 -0
  184. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -0
  185. package/dist/extensions/forgecli/orchestrators/halt-advisor.d.ts +59 -0
  186. package/dist/extensions/forgecli/orchestrators/halt-advisor.js +113 -0
  187. package/dist/extensions/forgecli/orchestrators/halt-advisor.js.map +1 -0
  188. package/dist/extensions/forgecli/orchestrators/materialize.d.ts +16 -0
  189. package/dist/extensions/forgecli/orchestrators/materialize.js +195 -0
  190. package/dist/extensions/forgecli/orchestrators/materialize.js.map +1 -0
  191. package/dist/extensions/forgecli/orchestrators/migrate.d.ts +22 -0
  192. package/dist/extensions/forgecli/orchestrators/migrate.js +260 -0
  193. package/dist/extensions/forgecli/orchestrators/migrate.js.map +1 -0
  194. package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.d.ts +46 -0
  195. package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.js +64 -0
  196. package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.js.map +1 -0
  197. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +27 -0
  198. package/dist/extensions/forgecli/orchestrators/run-sprint.js +734 -0
  199. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -0
  200. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +215 -0
  201. package/dist/extensions/forgecli/orchestrators/run-task.js +1491 -0
  202. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -0
  203. package/dist/extensions/forgecli/paths/paths.d.ts +8 -0
  204. package/dist/extensions/forgecli/paths/paths.js +17 -0
  205. package/dist/extensions/forgecli/paths/paths.js.map +1 -1
  206. package/dist/extensions/forgecli/phase-vocab.d.ts +31 -0
  207. package/dist/extensions/forgecli/phase-vocab.js +82 -0
  208. package/dist/extensions/forgecli/phase-vocab.js.map +1 -0
  209. package/dist/extensions/forgecli/session-registry.d.ts +2 -2
  210. package/dist/extensions/forgecli/session-registry.js +6 -2
  211. package/dist/extensions/forgecli/session-registry.js.map +1 -1
  212. package/dist/extensions/forgecli/skill-curation/friction-emit.d.ts +99 -0
  213. package/dist/extensions/forgecli/skill-curation/friction-emit.js +245 -0
  214. package/dist/extensions/forgecli/skill-curation/friction-emit.js.map +1 -0
  215. package/dist/extensions/forgecli/skill-curation/skill-curation-flag.d.ts +21 -0
  216. package/dist/extensions/forgecli/skill-curation/skill-curation-flag.js +71 -0
  217. package/dist/extensions/forgecli/skill-curation/skill-curation-flag.js.map +1 -0
  218. package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.d.ts +102 -0
  219. package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.js +339 -0
  220. package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.js.map +1 -0
  221. package/dist/extensions/forgecli/skill-curation/skill-retriever.d.ts +84 -0
  222. package/dist/extensions/forgecli/skill-curation/skill-retriever.js +246 -0
  223. package/dist/extensions/forgecli/skill-curation/skill-retriever.js.map +1 -0
  224. package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.d.ts +91 -0
  225. package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.js +224 -0
  226. package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.js.map +1 -0
  227. package/dist/extensions/forgecli/store/store-error-remediation.d.ts +65 -0
  228. package/dist/extensions/forgecli/store/store-error-remediation.js +307 -0
  229. package/dist/extensions/forgecli/store/store-error-remediation.js.map +1 -0
  230. package/dist/extensions/forgecli/store/store-resolver.d.ts +56 -0
  231. package/dist/extensions/forgecli/store/store-resolver.js +263 -0
  232. package/dist/extensions/forgecli/store/store-resolver.js.map +1 -0
  233. package/dist/extensions/forgecli/store/store-validator.d.ts +16 -0
  234. package/dist/extensions/forgecli/store/store-validator.js +32 -0
  235. package/dist/extensions/forgecli/store/store-validator.js.map +1 -0
  236. package/dist/extensions/forgecli/store/transition-guard.d.ts +20 -0
  237. package/dist/extensions/forgecli/store/transition-guard.js +89 -0
  238. package/dist/extensions/forgecli/store/transition-guard.js.map +1 -0
  239. package/dist/extensions/forgecli/subagent/orchestrator-transcript.js +5 -0
  240. package/dist/extensions/forgecli/subagent/orchestrator-transcript.js.map +1 -1
  241. package/dist/extensions/forgecli/transcript-archive-types.d.ts +171 -0
  242. package/dist/extensions/forgecli/transcript-archive-types.js +130 -0
  243. package/dist/extensions/forgecli/transcript-archive-types.js.map +1 -0
  244. package/dist/extensions/forgecli/transcript-archive.d.ts +127 -0
  245. package/dist/extensions/forgecli/transcript-archive.js +656 -0
  246. package/dist/extensions/forgecli/transcript-archive.js.map +1 -0
  247. package/dist/extensions/forgecli/transcript-replay.d.ts +28 -0
  248. package/dist/extensions/forgecli/transcript-replay.js +153 -0
  249. package/dist/extensions/forgecli/transcript-replay.js.map +1 -0
  250. package/dist/extensions/forgecli/transcripts-tui/component.d.ts +36 -0
  251. package/dist/extensions/forgecli/transcripts-tui/component.js +112 -0
  252. package/dist/extensions/forgecli/transcripts-tui/component.js.map +1 -0
  253. package/dist/extensions/forgecli/transcripts-tui/index.d.ts +4 -0
  254. package/dist/extensions/forgecli/transcripts-tui/index.js +5 -0
  255. package/dist/extensions/forgecli/transcripts-tui/index.js.map +1 -0
  256. package/dist/extensions/forgecli/transcripts-tui/screens/browse.d.ts +21 -0
  257. package/dist/extensions/forgecli/transcripts-tui/screens/browse.js +172 -0
  258. package/dist/extensions/forgecli/transcripts-tui/screens/browse.js.map +1 -0
  259. package/dist/extensions/forgecli/transcripts-tui/screens/types.d.ts +22 -0
  260. package/dist/extensions/forgecli/transcripts-tui/screens/types.js +4 -0
  261. package/dist/extensions/forgecli/transcripts-tui/screens/types.js.map +1 -0
  262. package/dist/extensions/forgecli/transcripts-tui/state/index.d.ts +4 -0
  263. package/dist/extensions/forgecli/transcripts-tui/state/index.js +5 -0
  264. package/dist/extensions/forgecli/transcripts-tui/state/index.js.map +1 -0
  265. package/dist/extensions/forgecli/transcripts-tui/state/init.d.ts +8 -0
  266. package/dist/extensions/forgecli/transcripts-tui/state/init.js +18 -0
  267. package/dist/extensions/forgecli/transcripts-tui/state/init.js.map +1 -0
  268. package/dist/extensions/forgecli/transcripts-tui/state/model.d.ts +56 -0
  269. package/dist/extensions/forgecli/transcripts-tui/state/model.js +6 -0
  270. package/dist/extensions/forgecli/transcripts-tui/state/model.js.map +1 -0
  271. package/dist/extensions/forgecli/transcripts-tui/state/reducer.d.ts +2 -0
  272. package/dist/extensions/forgecli/transcripts-tui/state/reducer.js +51 -0
  273. package/dist/extensions/forgecli/transcripts-tui/state/reducer.js.map +1 -0
  274. package/dist/extensions/forgecli/transcripts-tui/state/selectors.d.ts +10 -0
  275. package/dist/extensions/forgecli/transcripts-tui/state/selectors.js +62 -0
  276. package/dist/extensions/forgecli/transcripts-tui/state/selectors.js.map +1 -0
  277. package/dist/extensions/forgecli/transcripts-tui/theme.d.ts +20 -0
  278. package/dist/extensions/forgecli/transcripts-tui/theme.js +47 -0
  279. package/dist/extensions/forgecli/transcripts-tui/theme.js.map +1 -0
  280. package/dist/extensions/forgecli/tui/banner.d.ts +10 -0
  281. package/dist/extensions/forgecli/tui/banner.js +36 -0
  282. package/dist/extensions/forgecli/tui/banner.js.map +1 -0
  283. package/dist/extensions/forgecli/tui/forge-header.d.ts +12 -0
  284. package/dist/extensions/forgecli/tui/forge-header.js +114 -0
  285. package/dist/extensions/forgecli/tui/forge-header.js.map +1 -0
  286. package/dist/extensions/forgecli/tui/input-router.d.ts +33 -0
  287. package/dist/extensions/forgecli/tui/input-router.js +136 -0
  288. package/dist/extensions/forgecli/tui/input-router.js.map +1 -0
  289. package/dist/extensions/forgecli/tui/orchestrator-status-bar.d.ts +26 -0
  290. package/dist/extensions/forgecli/tui/orchestrator-status-bar.js +213 -0
  291. package/dist/extensions/forgecli/tui/orchestrator-status-bar.js.map +1 -0
  292. package/dist/extensions/forgecli/tui/thread-switcher.d.ts +18 -0
  293. package/dist/extensions/forgecli/tui/thread-switcher.js +194 -0
  294. package/dist/extensions/forgecli/tui/thread-switcher.js.map +1 -0
  295. package/dist/extensions/forgecli/update/forge-update-command.d.ts +100 -0
  296. package/dist/extensions/forgecli/update/forge-update-command.js +435 -0
  297. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -0
  298. package/dist/extensions/forgecli/update/migration-engine.d.ts +117 -0
  299. package/dist/extensions/forgecli/update/migration-engine.js +563 -0
  300. package/dist/extensions/forgecli/update/migration-engine.js.map +1 -0
  301. package/dist/extensions/forgecli/update/update-check.d.ts +37 -0
  302. package/dist/extensions/forgecli/update/update-check.js +185 -0
  303. package/dist/extensions/forgecli/update/update-check.js.map +1 -0
  304. package/dist/extensions/forgecli/update/update-tools.d.ts +23 -0
  305. package/dist/extensions/forgecli/update/update-tools.js +135 -0
  306. package/dist/extensions/forgecli/update/update-tools.js.map +1 -0
  307. package/dist/extensions/forgecli/update/whats-new-widget.d.ts +26 -0
  308. package/dist/extensions/forgecli/update/whats-new-widget.js +376 -0
  309. package/dist/extensions/forgecli/update/whats-new-widget.js.map +1 -0
  310. package/dist/extensions/forgecli/update/whats-new.d.ts +120 -0
  311. package/dist/extensions/forgecli/update/whats-new.js +470 -0
  312. package/dist/extensions/forgecli/update/whats-new.js.map +1 -0
  313. package/dist/extensions/forgecli/viewport/events.d.ts +113 -0
  314. package/dist/extensions/forgecli/viewport/events.js +290 -0
  315. package/dist/extensions/forgecli/viewport/events.js.map +1 -0
  316. package/dist/extensions/forgecli/viewport/renderer.d.ts +102 -0
  317. package/dist/extensions/forgecli/viewport/renderer.js +277 -0
  318. package/dist/extensions/forgecli/viewport/renderer.js.map +1 -0
  319. package/dist/extensions/forgecli/viewport/theme.d.ts +11 -0
  320. package/dist/extensions/forgecli/viewport/theme.js +131 -0
  321. package/dist/extensions/forgecli/viewport/theme.js.map +1 -0
  322. package/dist/extensions/forgecli/wf-engine/engine.js +1 -1
  323. package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -1
  324. package/package.json +4 -2
@@ -0,0 +1,100 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ declare function changelogTagUrl(version: string): string;
3
+ export type InstallMethod = "global" | "npx" | "local-dev" | "unknown";
4
+ export interface DetectInstallOptions {
5
+ pkgRoot: string;
6
+ globalRoot?: string | null;
7
+ }
8
+ export declare function detectInstallMethod(opts: DetectInstallOptions): InstallMethod;
9
+ type ExecFileAsync = (cmd: string, args: readonly string[], options?: {
10
+ timeout?: number;
11
+ }) => Promise<{
12
+ stdout: string;
13
+ stderr: string;
14
+ }>;
15
+ export declare function getNpmGlobalRoot(runner?: ExecFileAsync): Promise<string | null>;
16
+ export interface ChangelogResult {
17
+ tag: string;
18
+ version: string;
19
+ body: string;
20
+ }
21
+ export declare function fetchChangelog(fetchImpl: typeof fetch): Promise<ChangelogResult | null>;
22
+ declare function parseTriple(v: string): [number, number, number] | null;
23
+ export declare function isUpgrade(current: string, latest: string): boolean;
24
+ export declare function composeChangelogSummary(current: string, latest: string, body: string): string;
25
+ export interface UpgradeResult {
26
+ ok: boolean;
27
+ stdout: string;
28
+ stderr: string;
29
+ }
30
+ export declare function runUpgrade(spec: string, runner?: ExecFileAsync): Promise<UpgradeResult>;
31
+ interface DriftCache {
32
+ lastSeenBundledForgeVersion: string | null;
33
+ promptedForVersions: string[];
34
+ }
35
+ declare function defaultCacheDir(): string;
36
+ declare function driftCachePath(dir: string): string;
37
+ declare function readDriftCache(dir: string): Promise<DriftCache>;
38
+ declare function writeDriftCache(dir: string, cache: DriftCache): Promise<void>;
39
+ export interface DriftCheckOptions {
40
+ currentBundledForgeVersion: string;
41
+ notify(message: string, level: "info" | "warning" | "error"): void;
42
+ cacheDir?: string;
43
+ }
44
+ export declare function checkBundledForgeDrift(opts: DriftCheckOptions): Promise<void>;
45
+ interface CliPreflightResult {
46
+ method: InstallMethod;
47
+ upgraded: boolean;
48
+ cliOldVersion?: string;
49
+ cliNewVersion?: string;
50
+ npmVersion?: string;
51
+ npmFetchFailed: boolean;
52
+ bundledForgeVersion: string;
53
+ }
54
+ /**
55
+ * Read the bundled update.md and apply forge-cli-specific patches.
56
+ *
57
+ * The plugin's update.md was written for Claude Code's plugin architecture.
58
+ * forge-cli uses a bundled payload instead of the Claude Code plugin cache,
59
+ * so we patch:
60
+ *
61
+ * 1. FORGE_ROOT: Replace CLAUDE_PLUGIN_ROOT with bundled payload path
62
+ * 2. IS_CANARY: Always true (bundle is never in /.claude/plugins/)
63
+ * 3. DISTRIBUTION: Always "forge@forge" (no marketplace detection)
64
+ * 4. migrations.json: Bundle puts it in .schemas/, not top-level
65
+ * 5. CLI preflight result: Instruct agent to skip Steps 1/2A/3
66
+ * 6. CLAUDE_PLUGIN_DATA: Replace with bundled payload path
67
+ *
68
+ * All patches are pure string replacements — no AST parsing needed.
69
+ * If a patch target isn't found, we log a warning but don't crash
70
+ * (the agent may still be able to follow the unpatched instructions
71
+ * partially).
72
+ */
73
+ export declare function composeUpdateKickoff(updateMd: string, bundleRoot: string, preflight: CliPreflightResult): string;
74
+ export interface RegisterUpdateCommandOptions {
75
+ pkgRoot: string;
76
+ currentCliVersion: string;
77
+ fetchImpl?: typeof fetch;
78
+ globalRootResolver?: () => Promise<string | null>;
79
+ upgradeRunner?: (spec: string) => Promise<UpgradeResult>;
80
+ /** Override bundled-forge version for drift cache */
81
+ currentBundledForgeVersion?: string;
82
+ /** Override drift cache path */
83
+ driftCacheDir?: string;
84
+ }
85
+ export declare function registerForgeUpdateCommand(pi: ExtensionAPI, opts: RegisterUpdateCommandOptions): void;
86
+ export declare const __test__: {
87
+ parseTriple: typeof parseTriple;
88
+ driftCachePath: typeof driftCachePath;
89
+ readDriftCache: typeof readDriftCache;
90
+ writeDriftCache: typeof writeDriftCache;
91
+ defaultCacheDir: typeof defaultCacheDir;
92
+ PKG_NAME: string;
93
+ NPM_DIST_TAGS_URL: string;
94
+ changelogTagUrl: typeof changelogTagUrl;
95
+ UPGRADE_TIMEOUT_MS: number;
96
+ NPM_ROOT_TIMEOUT_MS: number;
97
+ PROBE_TIMEOUT_MS: number;
98
+ composeUpdateKickoff: typeof composeUpdateKickoff;
99
+ };
100
+ export {};
@@ -0,0 +1,435 @@
1
+ // /forge:update — CLI preflight + patched plugin-native flow (FORGE-BUG-039).
2
+ //
3
+ // Two-layer kickoff-shim architecture:
4
+ // Layer 1 (TypeScript): CLI-specific preflight — install method detection,
5
+ // npm changelog + upgrade. NOT handled by the plugin's update.md.
6
+ // Layer 2 (agent follows update.md): Full 7-step plugin update workflow
7
+ // with surgical text patches for forge-cli context differences.
8
+ //
9
+ // This replaces the previous monolithic TypeScript reimplementation that:
10
+ // - Missed generation-manifest checks (data loss risk)
11
+ // - Bypassed /forge:regenerate's modification guard + snapshot replay
12
+ // - Skipped Steps 5 (pipeline audit) and 7 (KB link refresh)
13
+ // - Always lagged behind the plugin's evolving workflow
14
+ //
15
+ // The patched update.md is read from the bundled payload at runtime,
16
+ // so plugin changes are automatically picked up. Patches are minimal
17
+ // and validated by tests.
18
+ import { execFile } from "node:child_process";
19
+ import { existsSync, promises as fs, readFileSync } from "node:fs";
20
+ import * as path from "node:path";
21
+ import { promisify } from "node:util";
22
+ import { getBundledPayloadRoot } from "../forge-init/forge-init.js";
23
+ import { sendKickoff } from "../kickoff.js";
24
+ import { getUserCacheDir } from "../paths/paths.js";
25
+ const execFileAsync = promisify(execFile);
26
+ const PKG_NAME = "@entelligentsia/forgecli";
27
+ const NPM_DIST_TAGS_URL = "https://registry.npmjs.org/@entelligentsia/forgecli";
28
+ function changelogTagUrl(version) {
29
+ return `https://api.github.com/repos/Entelligentsia/forge-cli/releases/tags/v${version}`;
30
+ }
31
+ const PROBE_TIMEOUT_MS = 5000;
32
+ const UPGRADE_TIMEOUT_MS = 120_000;
33
+ const NPM_ROOT_TIMEOUT_MS = 5000;
34
+ const BODY_EXCERPT_MAX = 1200;
35
+ export function detectInstallMethod(opts) {
36
+ const norm = path.resolve(opts.pkgRoot);
37
+ if (/[/\\]_npx[/\\]/.test(norm))
38
+ return "npx";
39
+ if (opts.globalRoot && norm.startsWith(path.resolve(opts.globalRoot)))
40
+ return "global";
41
+ return "local-dev";
42
+ }
43
+ export async function getNpmGlobalRoot(runner) {
44
+ const run = runner ?? execFileAsync;
45
+ try {
46
+ const { stdout } = await run("npm", ["root", "-g"], { timeout: NPM_ROOT_TIMEOUT_MS });
47
+ const trimmed = stdout.trim();
48
+ return trimmed.length > 0 ? trimmed : null;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ export async function fetchChangelog(fetchImpl) {
55
+ const npmCtl = new AbortController();
56
+ const npmTimer = setTimeout(() => npmCtl.abort(), PROBE_TIMEOUT_MS);
57
+ let npmVersion = null;
58
+ try {
59
+ const res = await fetchImpl(NPM_DIST_TAGS_URL, {
60
+ signal: npmCtl.signal,
61
+ headers: { Accept: "application/json" },
62
+ });
63
+ if (res.ok) {
64
+ const body = (await res.json());
65
+ const tag = body["dist-tags"]?.latest;
66
+ npmVersion = typeof tag === "string" ? tag : null;
67
+ }
68
+ }
69
+ catch {
70
+ // fall through to null return
71
+ }
72
+ finally {
73
+ clearTimeout(npmTimer);
74
+ }
75
+ if (!npmVersion)
76
+ return null;
77
+ const version = npmVersion.startsWith("v") ? npmVersion.slice(1) : npmVersion;
78
+ const ghCtl = new AbortController();
79
+ const ghTimer = setTimeout(() => ghCtl.abort(), PROBE_TIMEOUT_MS);
80
+ let releaseBody = "";
81
+ try {
82
+ const res = await fetchImpl(changelogTagUrl(version), {
83
+ signal: ghCtl.signal,
84
+ headers: { Accept: "application/vnd.github+json" },
85
+ });
86
+ if (res.ok) {
87
+ const json = (await res.json());
88
+ if (typeof json.body === "string")
89
+ releaseBody = json.body;
90
+ }
91
+ }
92
+ catch {
93
+ // changelog body is optional — proceed with empty
94
+ }
95
+ finally {
96
+ clearTimeout(ghTimer);
97
+ }
98
+ return { tag: `v${version}`, version, body: releaseBody };
99
+ }
100
+ function parseTriple(v) {
101
+ const cleaned = v.startsWith("v") ? v.slice(1) : v;
102
+ const parts = cleaned.split(".");
103
+ if (parts.length !== 3)
104
+ return null;
105
+ const nums = [];
106
+ for (const p of parts) {
107
+ if (!/^\d+$/.test(p))
108
+ return null;
109
+ nums.push(Number.parseInt(p, 10));
110
+ }
111
+ return [nums[0], nums[1], nums[2]];
112
+ }
113
+ export function isUpgrade(current, latest) {
114
+ const a = parseTriple(latest);
115
+ const b = parseTriple(current);
116
+ if (!a || !b)
117
+ return false;
118
+ for (let i = 0; i < 3; i++) {
119
+ if (a[i] > b[i])
120
+ return true;
121
+ if (a[i] < b[i])
122
+ return false;
123
+ }
124
+ return false;
125
+ }
126
+ export function composeChangelogSummary(current, latest, body) {
127
+ const trimmed = body.trim();
128
+ const excerpt = trimmed.length > BODY_EXCERPT_MAX ? `${trimmed.slice(0, BODY_EXCERPT_MAX)}…` : trimmed;
129
+ return [
130
+ `Current: ${current}`,
131
+ `Latest: ${latest}`,
132
+ "",
133
+ "Release notes:",
134
+ excerpt.length > 0 ? excerpt : "(release body empty)",
135
+ "",
136
+ `This will run: npm i -g ${PKG_NAME}@${latest}`,
137
+ ].join("\n");
138
+ }
139
+ export async function runUpgrade(spec, runner) {
140
+ const run = runner ?? execFileAsync;
141
+ try {
142
+ const { stdout, stderr } = await run("npm", ["i", "-g", spec], { timeout: UPGRADE_TIMEOUT_MS });
143
+ return { ok: true, stdout, stderr };
144
+ }
145
+ catch (err) {
146
+ const e = err;
147
+ return { ok: false, stdout: e.stdout ?? "", stderr: e.stderr ?? e.message ?? "unknown error" };
148
+ }
149
+ }
150
+ function truncate(s, max) {
151
+ return s.length > max ? `${s.slice(0, max)}…` : s;
152
+ }
153
+ // ── Bundled-forge drift detection (session-start hook) ──────────────────────
154
+ //
155
+ // On every session_start we compare the bundled-forge version recorded in the
156
+ // drift cache against the current package.json forge.bundledVersion. If the
157
+ // version changed and we have not already prompted for it, emit a one-shot
158
+ // migration prompt. The cache is per-version idempotent.
159
+ //
160
+ // This hook is independent of the /forge:update command — it runs at session
161
+ // start, before the user invokes any command.
162
+ const DRIFT_CACHE_FILE = "drift-seen.json";
163
+ function defaultCacheDir() {
164
+ return getUserCacheDir();
165
+ }
166
+ function driftCachePath(dir) {
167
+ return path.join(dir, DRIFT_CACHE_FILE);
168
+ }
169
+ async function readDriftCache(dir) {
170
+ try {
171
+ const raw = await fs.readFile(driftCachePath(dir), "utf8");
172
+ const parsed = JSON.parse(raw);
173
+ return {
174
+ lastSeenBundledForgeVersion: typeof parsed.lastSeenBundledForgeVersion === "string" ? parsed.lastSeenBundledForgeVersion : null,
175
+ promptedForVersions: Array.isArray(parsed.promptedForVersions)
176
+ ? parsed.promptedForVersions.filter((v) => typeof v === "string")
177
+ : [],
178
+ };
179
+ }
180
+ catch {
181
+ return { lastSeenBundledForgeVersion: null, promptedForVersions: [] };
182
+ }
183
+ }
184
+ async function writeDriftCache(dir, cache) {
185
+ await fs.mkdir(dir, { recursive: true });
186
+ const final = driftCachePath(dir);
187
+ const tmp = `${final}.${process.pid}.${Date.now()}.tmp`;
188
+ await fs.writeFile(tmp, JSON.stringify(cache, null, 2), "utf8");
189
+ await fs.rename(tmp, final);
190
+ }
191
+ export async function checkBundledForgeDrift(opts) {
192
+ const current = opts.currentBundledForgeVersion;
193
+ if (!current)
194
+ return;
195
+ const cacheDir = opts.cacheDir ?? defaultCacheDir();
196
+ const cache = await readDriftCache(cacheDir);
197
+ const last = cache.lastSeenBundledForgeVersion;
198
+ if (last && last !== current && !cache.promptedForVersions.includes(current)) {
199
+ opts.notify(`forge: bundled forge plugin changed (${last} → ${current}). ` +
200
+ `Run /forge:update to apply project migrations from v${last} to v${current}.`, "info");
201
+ cache.promptedForVersions = [...cache.promptedForVersions, current];
202
+ }
203
+ cache.lastSeenBundledForgeVersion = current;
204
+ try {
205
+ await writeDriftCache(cacheDir, cache);
206
+ }
207
+ catch {
208
+ // fail-silent — banner already shown if applicable
209
+ }
210
+ }
211
+ /**
212
+ * Read the bundled update.md and apply forge-cli-specific patches.
213
+ *
214
+ * The plugin's update.md was written for Claude Code's plugin architecture.
215
+ * forge-cli uses a bundled payload instead of the Claude Code plugin cache,
216
+ * so we patch:
217
+ *
218
+ * 1. FORGE_ROOT: Replace CLAUDE_PLUGIN_ROOT with bundled payload path
219
+ * 2. IS_CANARY: Always true (bundle is never in /.claude/plugins/)
220
+ * 3. DISTRIBUTION: Always "forge@forge" (no marketplace detection)
221
+ * 4. migrations.json: Bundle puts it in .schemas/, not top-level
222
+ * 5. CLI preflight result: Instruct agent to skip Steps 1/2A/3
223
+ * 6. CLAUDE_PLUGIN_DATA: Replace with bundled payload path
224
+ *
225
+ * All patches are pure string replacements — no AST parsing needed.
226
+ * If a patch target isn't found, we log a warning but don't crash
227
+ * (the agent may still be able to follow the unpatched instructions
228
+ * partially).
229
+ */
230
+ export function composeUpdateKickoff(updateMd, bundleRoot, preflight) {
231
+ let patched = updateMd;
232
+ // Patch 1: FORGE_ROOT — replace Claude Code directive with literal path
233
+ // Original: FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
234
+ // Patched: FORGE_ROOT = <bundledPayloadRoot>
235
+ const forgeRootDirective = '!`echo "${CLAUDE_PLUGIN_ROOT}"`';
236
+ if (patched.includes(forgeRootDirective)) {
237
+ patched = patched.replaceAll(forgeRootDirective, bundleRoot);
238
+ }
239
+ // Patch 1b: Second occurrence is in Step 3's "Re-derive FORGE_ROOT"
240
+ // Same directive appears there. Already handled by replaceAll above.
241
+ // Patch 2: CLAUDE_PLUGIN_DATA — used for legacy cache fallback
242
+ // Replace with bundle root since forge-cli doesn't have plugin data dir
243
+ if (patched.includes("${CLAUDE_PLUGIN_DATA}")) {
244
+ patched = patched.replaceAll("${CLAUDE_PLUGIN_DATA}", bundleRoot);
245
+ }
246
+ // Patch 3: IS_CANARY — force to true. The plugin's canary detection
247
+ // checks for "/.claude/plugins/" in FORGE_ROOT, which never matches
248
+ // the bundled payload path. Setting IS_CANARY=true ensures:
249
+ // - Row 3 triggers (skip Step 2A — no plugin manager install)
250
+ // - Step 3 re-derivation is skipped (FORGE_ROOT doesn't change)
251
+ // We insert this right after the IS_CANARY detection paragraph.
252
+ const canaryAnchor = "**Canary / source install** (`IS_CANARY = true`)";
253
+ if (patched.includes(canaryAnchor)) {
254
+ patched = patched.replace(canaryAnchor, ` forge-cli: IS_CANARY is ALWAYS true — the bundled payload is never in the Claude Code plugin directory. ` +
255
+ "Row 3 of the decision table always applies: skip Step 2A, proceed to Step 2B. " +
256
+ "`IS_CANARY` = true");
257
+ }
258
+ // Patch 4: DISTRIBUTION — forge-cli always uses canary distribution
259
+ // Insert after the distribution table
260
+ const distAnchor = "| anything else | `forge@forge` / canary |";
261
+ if (patched.includes(distAnchor)) {
262
+ patched = patched.replace(distAnchor, distAnchor +
263
+ "\n\n> **forge-cli note:** The bundled payload is never in the Claude Code plugin cache, " +
264
+ 'so DISTRIBUTION is always `forge@forge` / canary. Set `DISTRIBUTION = "forge@forge"` now.');
265
+ }
266
+ // Patch 5: migrations.json path — bundle puts it in .schemas/, not top-level
267
+ // Step 2B reads: Read `$FORGE_ROOT/migrations.json` (local).
268
+ // Step 4 reads: Read `$FORGE_ROOT/migrations.json` (local — now updated after install).
269
+ if (patched.includes("$FORGE_ROOT/migrations.json")) {
270
+ patched = patched.replaceAll("$FORGE_ROOT/migrations.json", "$FORGE_ROOT/.schemas/migrations.json");
271
+ }
272
+ // Patch 6: CLI preflight result — inject before Step 1
273
+ // This tells the agent what the CLI preflight already did so it can
274
+ // skip the remote version check, Step 2A, and Step 3.
275
+ const cliResult = [
276
+ "",
277
+ "---",
278
+ "",
279
+ "## forge-cli: CLI Preflight Result",
280
+ "",
281
+ `Install method: **${preflight.method}**`,
282
+ preflight.upgraded
283
+ ? `CLI upgraded: **${preflight.cliOldVersion} → ${preflight.cliNewVersion}**`
284
+ : "No CLI upgrade needed (or not eligible).",
285
+ preflight.npmVersion
286
+ ? `Remote version (npm): **${preflight.npmVersion}**`
287
+ : preflight.npmFetchFailed
288
+ ? "Could not reach npm registry — proceeding with local version only."
289
+ : "",
290
+ `LOCAL_VERSION (bundled forge): **${preflight.bundledForgeVersion}**`,
291
+ "",
292
+ "**Action for the agent:**",
293
+ preflight.npmFetchFailed
294
+ ? "- Could not reach registry → use LOCAL_VERSION as both local and remote"
295
+ : "- Use LOCAL_VERSION and the npm version above for the decision table",
296
+ "- **Skip Step 2A** — CLI already handled npm upgrade (or not applicable)",
297
+ "- **Skip Step 3** — FORGE_ROOT does not change in forge-cli (npm path is stable)",
298
+ "- Resume detection (FR-002): check `.forge/update-check-cache.json` `updateStatus` as usual",
299
+ "- All other steps (1, 2B, 4, 5, 6, 7) proceed normally",
300
+ `- **FORGE_ROOT resolution**: When reading bundled commands or workflows (e.g. regenerate.md, update-tools.md), replace any Claude-Code plugin-root env-var reference with ${bundleRoot}. FORGE_ROOT = ${bundleRoot} in forge-cli.`,
301
+ `- **Step 6 migratedFrom**: Write migratedFrom: LOCAL_VERSION (the CURRENT version after update, e.g. ${preflight.bundledForgeVersion}), NOT the old baseline. This ensures subsequent updates correctly detect the project is up to date.`,
302
+ `- **substitute-placeholders base-pack path**: In forge-cli, the base-pack is at ${bundleRoot}/.base-pack/ (not init/base-pack). When invoking substitute-placeholders.cjs, pass --base-pack ${bundleRoot}/.base-pack to avoid "base-pack not found" errors.`,
303
+ "",
304
+ "---",
305
+ "",
306
+ ].join("\n");
307
+ // Insert before "## Step 1"
308
+ const step1Anchor = "## Step 1 — Check for updates";
309
+ if (patched.includes(step1Anchor)) {
310
+ patched = patched.replace(step1Anchor, cliResult + step1Anchor);
311
+ }
312
+ return patched;
313
+ }
314
+ export function registerForgeUpdateCommand(pi, opts) {
315
+ pi.registerCommand("forge:update", {
316
+ description: "Guided upgrade for forgecli (npm i -g) + project migration via plugin-native update workflow",
317
+ async handler(_args, ctx) {
318
+ const fetchImpl = opts.fetchImpl ?? fetch;
319
+ const resolveGlobal = opts.globalRootResolver ?? (() => getNpmGlobalRoot());
320
+ const upgrade = opts.upgradeRunner ?? ((spec) => runUpgrade(spec));
321
+ // ── Layer 1: CLI Preflight ───────────────────────────────────────
322
+ const globalRoot = await resolveGlobal();
323
+ const method = detectInstallMethod({ pkgRoot: opts.pkgRoot, globalRoot });
324
+ let release = null;
325
+ let upgraded = false;
326
+ let cliOldVersion;
327
+ let cliNewVersion;
328
+ if (method !== "global") {
329
+ ctx.ui.notify(`forge:update — install method '${method}' is not eligible for guided npm upgrade. ` +
330
+ `To upgrade the CLI manually: npm i -g ${PKG_NAME}@latest. ` +
331
+ "Proceeding to project update…", "warning");
332
+ }
333
+ else {
334
+ // Fetch latest changelog + confirm upgrade
335
+ ctx.ui.setStatus("forge:update", "Fetching latest release notes…");
336
+ release = await fetchChangelog(fetchImpl);
337
+ ctx.ui.setStatus("forge:update", undefined);
338
+ if (!release) {
339
+ ctx.ui.notify("forge:update — could not reach the npm registry to check for updates. " +
340
+ `Check your network and retry, or upgrade manually: npm i -g ${PKG_NAME}@latest. ` +
341
+ "Proceeding to project update…", "warning");
342
+ }
343
+ else {
344
+ const current = opts.currentCliVersion;
345
+ if (!isUpgrade(current, release.version)) {
346
+ ctx.ui.notify(`forge:update — already at the latest version (${current}; latest published: ${release.version}).`, "info");
347
+ }
348
+ else {
349
+ const summary = composeChangelogSummary(current, release.version, release.body);
350
+ const proceed = await ctx.ui.confirm(`Upgrade forgecli ${current} → ${release.version}?`, summary);
351
+ if (!proceed) {
352
+ ctx.ui.notify("forge:update — npm upgrade cancelled. Proceeding to project update…", "info");
353
+ }
354
+ else {
355
+ ctx.ui.setStatus("forge:update", `Upgrading to ${release.version}…`);
356
+ const result = await upgrade(`${PKG_NAME}@${release.version}`);
357
+ ctx.ui.setStatus("forge:update", undefined);
358
+ if (!result.ok) {
359
+ ctx.ui.notify(`forge:update — npm i -g failed: ${truncate(result.stderr, 400)}. ` +
360
+ "Check the error above; you may need elevated permissions. " +
361
+ "Proceeding to project update…", "error");
362
+ }
363
+ else {
364
+ upgraded = true;
365
+ cliOldVersion = current;
366
+ cliNewVersion = release.version;
367
+ ctx.ui.notify(`forge:update — installed ${PKG_NAME}@${release.version}. ` +
368
+ "Restart your forge session for the new version to take effect.", "info");
369
+ }
370
+ }
371
+ }
372
+ }
373
+ } // end global-only branch
374
+ // ── Layer 2: Patched Plugin-Native Flow ──────────────────────────
375
+ const bundleRoot = getBundledPayloadRoot();
376
+ // Read bundled forge version for the preflight result
377
+ let bundledForgeVersion = opts.currentBundledForgeVersion ?? "";
378
+ if (!bundledForgeVersion) {
379
+ try {
380
+ const pluginJsonPath = path.join(bundleRoot, ".claude-plugin", "plugin.json");
381
+ if (existsSync(pluginJsonPath)) {
382
+ const pluginJson = JSON.parse(readFileSync(pluginJsonPath, "utf8"));
383
+ bundledForgeVersion = pluginJson.version ?? "";
384
+ }
385
+ }
386
+ catch {
387
+ // unable to read
388
+ }
389
+ }
390
+ if (!bundledForgeVersion) {
391
+ ctx.ui.notify("forge:update — could not determine bundled forge version. " +
392
+ "Run /forge:init first, or check the forge-payload installation.", "error");
393
+ return;
394
+ }
395
+ // Read and patch update.md from bundled payload
396
+ const updateMdPath = path.join(bundleRoot, "commands", "update.md");
397
+ let updateMd;
398
+ try {
399
+ updateMd = readFileSync(updateMdPath, "utf8");
400
+ }
401
+ catch {
402
+ ctx.ui.notify(`forge:update — bundled update.md not found at ${updateMdPath}. ` +
403
+ "The bundled payload may be incomplete. Run /forge:init to repair.", "error");
404
+ return;
405
+ }
406
+ const preflight = {
407
+ method,
408
+ upgraded,
409
+ cliOldVersion,
410
+ cliNewVersion,
411
+ npmVersion: release?.version,
412
+ npmFetchFailed: method === "global" && !release,
413
+ bundledForgeVersion,
414
+ };
415
+ const kickoffText = composeUpdateKickoff(updateMd, bundleRoot, preflight);
416
+ sendKickoff(pi, kickoffText);
417
+ },
418
+ });
419
+ }
420
+ // ── Test helpers ────────────────────────────────────────────────────────────
421
+ export const __test__ = {
422
+ parseTriple,
423
+ driftCachePath,
424
+ readDriftCache,
425
+ writeDriftCache,
426
+ defaultCacheDir,
427
+ PKG_NAME,
428
+ NPM_DIST_TAGS_URL,
429
+ changelogTagUrl,
430
+ UPGRADE_TIMEOUT_MS,
431
+ NPM_ROOT_TIMEOUT_MS,
432
+ PROBE_TIMEOUT_MS,
433
+ composeUpdateKickoff,
434
+ };
435
+ //# sourceMappingURL=forge-update-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-update-command.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/update/forge-update-command.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,uCAAuC;AACvC,6EAA6E;AAC7E,sEAAsE;AACtE,0EAA0E;AAC1E,oEAAoE;AACpE,EAAE;AACF,0EAA0E;AAC1E,yDAAyD;AACzD,wEAAwE;AACxE,+DAA+D;AAC/D,0DAA0D;AAC1D,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,0BAA0B;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAC5C,MAAM,iBAAiB,GAAG,qDAAqD,CAAC;AAChF,SAAS,eAAe,CAAC,OAAe;IACvC,OAAO,wEAAwE,OAAO,EAAE,CAAC;AAC1F,CAAC;AACD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAW9B,MAAM,UAAU,mBAAmB,CAAC,IAA0B;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvF,OAAO,WAAW,CAAC;AACpB,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAsB;IAC5D,MAAM,GAAG,GAAG,MAAM,IAAK,aAA+B,CAAC;IACvD,IAAI,CAAC;QACJ,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAuB;IAC3D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACpE,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE;YAC9C,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACvC,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2C,CAAC;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YACtC,UAAU,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,8BAA8B;IAC/B,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAE9E,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAClE,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YACrD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE;SAClD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;YACtD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5D,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,kDAAkD;IACnD,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAc;IACxD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE;YAAE,OAAO,KAAK,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,MAAc,EAAE,IAAY;IACpF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IACvG,OAAO;QACN,YAAY,OAAO,EAAE;QACrB,YAAY,MAAM,EAAE;QACpB,EAAE;QACF,gBAAgB;QAChB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;QACrD,EAAE;QACF,2BAA2B,QAAQ,IAAI,MAAM,EAAE;KAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,MAAsB;IACpE,MAAM,GAAG,GAAG,MAAM,IAAK,aAA+B,CAAC;IACvD,IAAI,CAAC;QACJ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAChG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,GAA6D,CAAC;QACxE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;IAChG,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACvC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,yDAAyD;AACzD,EAAE;AACF,6EAA6E;AAC7E,8CAA8C;AAE9C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAO3C,SAAS,eAAe;IACvB,OAAO,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QACtD,OAAO;YACN,2BAA2B,EAC1B,OAAO,MAAM,CAAC,2BAA2B,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI;YACnG,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC;gBAC7D,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBAC9E,CAAC,CAAC,EAAE;SACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC;IACvE,CAAC;AACF,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,KAAiB;IAC5D,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACxD,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAuB;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,eAAe,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,2BAA2B,CAAC;IAC/C,IAAI,IAAI,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,IAAI,CAAC,MAAM,CACV,wCAAwC,IAAI,MAAM,OAAO,KAAK;YAC7D,uDAAuD,IAAI,QAAQ,OAAO,GAAG,EAC9E,MAAM,CACN,CAAC;QACF,KAAK,CAAC,mBAAmB,GAAG,CAAC,GAAG,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,CAAC,2BAA2B,GAAG,OAAO,CAAC;IAC5C,IAAI,CAAC;QACJ,MAAM,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACR,mDAAmD;IACpD,CAAC;AACF,CAAC;AAcD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,UAAkB,EAAE,SAA6B;IACvG,IAAI,OAAO,GAAG,QAAQ,CAAC;IAEvB,wEAAwE;IACxE,yDAAyD;IACzD,+CAA+C;IAC/C,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;IAC7D,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,oEAAoE;IACpE,qEAAqE;IAErE,+DAA+D;IAC/D,wEAAwE;IACxE,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,oEAAoE;IACpE,oEAAoE;IACpE,4DAA4D;IAC5D,gEAAgE;IAChE,kEAAkE;IAClE,gEAAgE;IAChE,MAAM,YAAY,GAAG,kDAAkD,CAAC;IACxE,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CACxB,YAAY,EACZ,2GAA2G;YAC1G,gFAAgF;YAChF,oBAAoB,CACrB,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,sCAAsC;IACtC,MAAM,UAAU,GAAG,4CAA4C,CAAC;IAChE,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CACxB,UAAU,EACV,UAAU;YACT,0FAA0F;YAC1F,2FAA2F,CAC5F,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,6DAA6D;IAC7D,wFAAwF;IACxF,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACrD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,6BAA6B,EAAE,sCAAsC,CAAC,CAAC;IACrG,CAAC;IAED,uDAAuD;IACvD,oEAAoE;IACpE,sDAAsD;IACtD,MAAM,SAAS,GAAG;QACjB,EAAE;QACF,KAAK;QACL,EAAE;QACF,oCAAoC;QACpC,EAAE;QACF,qBAAqB,SAAS,CAAC,MAAM,IAAI;QACzC,SAAS,CAAC,QAAQ;YACjB,CAAC,CAAC,mBAAmB,SAAS,CAAC,aAAa,MAAM,SAAS,CAAC,aAAa,IAAI;YAC7E,CAAC,CAAC,0CAA0C;QAC7C,SAAS,CAAC,UAAU;YACnB,CAAC,CAAC,2BAA2B,SAAS,CAAC,UAAU,IAAI;YACrD,CAAC,CAAC,SAAS,CAAC,cAAc;gBACzB,CAAC,CAAC,oEAAoE;gBACtE,CAAC,CAAC,EAAE;QACN,oCAAoC,SAAS,CAAC,mBAAmB,IAAI;QACrE,EAAE;QACF,2BAA2B;QAC3B,SAAS,CAAC,cAAc;YACvB,CAAC,CAAC,yEAAyE;YAC3E,CAAC,CAAC,sEAAsE;QACzE,0EAA0E;QAC1E,kFAAkF;QAClF,6FAA6F;QAC7F,wDAAwD;QACxD,6KAA6K,UAAU,kBAAkB,UAAU,gBAAgB;QACnO,wGAAwG,SAAS,CAAC,mBAAmB,sGAAsG;QAC3O,mFAAmF,UAAU,kGAAkG,UAAU,oDAAoD;QAC7P,EAAE;QACF,KAAK;QACL,EAAE;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,4BAA4B;IAC5B,MAAM,WAAW,GAAG,+BAA+B,CAAC;IACpD,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAgBD,MAAM,UAAU,0BAA0B,CAAC,EAAgB,EAAE,IAAkC;IAC9F,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE;QAClC,WAAW,EAAE,8FAA8F;QAC3G,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAE3E,oEAAoE;YAEpE,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAE1E,IAAI,OAAO,GAA2B,IAAI,CAAC;YAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,aAAiC,CAAC;YACtC,IAAI,aAAiC,CAAC;YAEtC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzB,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,kCAAkC,MAAM,4CAA4C;oBACnF,yCAAyC,QAAQ,WAAW;oBAC5D,+BAA+B,EAChC,SAAS,CACT,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,2CAA2C;gBAC3C,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;gBACnE,OAAO,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC1C,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,wEAAwE;wBACvE,+DAA+D,QAAQ,WAAW;wBAClF,+BAA+B,EAChC,SAAS,CACT,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;oBACvC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC1C,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,iDAAiD,OAAO,uBAAuB,OAAO,CAAC,OAAO,IAAI,EAClG,MAAM,CACN,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACP,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;wBAChF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,OAAO,MAAM,OAAO,CAAC,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;wBACnG,IAAI,CAAC,OAAO,EAAE,CAAC;4BACd,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,qEAAqE,EAAE,MAAM,CAAC,CAAC;wBAC9F,CAAC;6BAAM,CAAC;4BACP,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,gBAAgB,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;4BACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;4BAC/D,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;4BAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gCAChB,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,mCAAmC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;oCAClE,4DAA4D;oCAC5D,+BAA+B,EAChC,OAAO,CACP,CAAC;4BACH,CAAC;iCAAM,CAAC;gCACP,QAAQ,GAAG,IAAI,CAAC;gCAChB,aAAa,GAAG,OAAO,CAAC;gCACxB,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;gCAChC,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,4BAA4B,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI;oCAC1D,gEAAgE,EACjE,MAAM,CACN,CAAC;4BACH,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,yBAAyB;YAE3B,oEAAoE;YAEpE,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;YAE3C,sDAAsD;YACtD,IAAI,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC;YAChE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACJ,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;oBAC9E,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;wBAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAyB,CAAC;wBAC5F,mBAAmB,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;oBAChD,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,iBAAiB;gBAClB,CAAC;YACF,CAAC;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC1B,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,4DAA4D;oBAC3D,iEAAiE,EAClE,OAAO,CACP,CAAC;gBACF,OAAO;YACR,CAAC;YAED,gDAAgD;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YACpE,IAAI,QAAgB,CAAC;YACrB,IAAI,CAAC;gBACJ,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACR,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,iDAAiD,YAAY,IAAI;oBAChE,mEAAmE,EACpE,OAAO,CACP,CAAC;gBACF,OAAO;YACR,CAAC;YAED,MAAM,SAAS,GAAuB;gBACrC,MAAM;gBACN,QAAQ;gBACR,aAAa;gBACb,aAAa;gBACb,UAAU,EAAE,OAAO,EAAE,OAAO;gBAC5B,cAAc,EAAE,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO;gBAC/C,mBAAmB;aACnB,CAAC;YAEF,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAE1E,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC9B,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,WAAW;IACX,cAAc;IACd,cAAc;IACd,eAAe;IACf,eAAe;IACf,QAAQ;IACR,iBAAiB;IACjB,eAAe;IACf,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;CACpB,CAAC"}