@entelligentsia/forgecli 1.0.25 → 1.0.36

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 (390) hide show
  1. package/CHANGELOG.md +258 -0
  2. package/README.md +2 -0
  3. package/dist/CHANGELOG-forge-plugin.md +163 -0
  4. package/dist/bin/argv.d.ts +2 -2
  5. package/dist/bin/argv.js +25 -0
  6. package/dist/bin/argv.js.map +1 -1
  7. package/dist/bin/forge.js +12 -0
  8. package/dist/bin/forge.js.map +1 -1
  9. package/dist/bin/init.d.ts +23 -0
  10. package/dist/bin/init.js +123 -0
  11. package/dist/bin/init.js.map +1 -0
  12. package/dist/bin/uninstall.d.ts +20 -0
  13. package/dist/bin/uninstall.js +141 -0
  14. package/dist/bin/uninstall.js.map +1 -0
  15. package/dist/extensions/forgecli/add-pipeline.d.ts +19 -0
  16. package/dist/extensions/forgecli/add-pipeline.js +143 -0
  17. package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
  18. package/dist/extensions/forgecli/add-task.d.ts +20 -0
  19. package/dist/extensions/forgecli/add-task.js +154 -0
  20. package/dist/extensions/forgecli/add-task.js.map +1 -0
  21. package/dist/extensions/forgecli/approve.d.ts +22 -0
  22. package/dist/extensions/forgecli/approve.js +152 -0
  23. package/dist/extensions/forgecli/approve.js.map +1 -0
  24. package/dist/extensions/forgecli/banner.d.ts +10 -0
  25. package/dist/extensions/forgecli/banner.js +36 -0
  26. package/dist/extensions/forgecli/banner.js.map +1 -0
  27. package/dist/extensions/forgecli/calibrate.d.ts +64 -0
  28. package/dist/extensions/forgecli/calibrate.js +481 -0
  29. package/dist/extensions/forgecli/calibrate.js.map +1 -0
  30. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
  31. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
  32. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
  33. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
  34. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
  35. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
  36. package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
  37. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
  38. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
  39. package/dist/extensions/forgecli/collate.d.ts +22 -0
  40. package/dist/extensions/forgecli/collate.js +134 -0
  41. package/dist/extensions/forgecli/collate.js.map +1 -0
  42. package/dist/extensions/forgecli/commit.d.ts +22 -0
  43. package/dist/extensions/forgecli/commit.js +152 -0
  44. package/dist/extensions/forgecli/commit.js.map +1 -0
  45. package/dist/extensions/forgecli/config-command.d.ts +8 -0
  46. package/dist/extensions/forgecli/config-command.js +67 -0
  47. package/dist/extensions/forgecli/config-command.js.map +1 -0
  48. package/dist/extensions/forgecli/config-layer.d.ts +53 -0
  49. package/dist/extensions/forgecli/config-layer.js +72 -0
  50. package/dist/extensions/forgecli/config-layer.js.map +1 -0
  51. package/dist/extensions/forgecli/config-writer.d.ts +16 -0
  52. package/dist/extensions/forgecli/config-writer.js +69 -0
  53. package/dist/extensions/forgecli/config-writer.js.map +1 -0
  54. package/dist/extensions/forgecli/dashboard/component.js +10 -7
  55. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  56. package/dist/extensions/forgecli/enhance.d.ts +27 -0
  57. package/dist/extensions/forgecli/enhance.js +199 -0
  58. package/dist/extensions/forgecli/enhance.js.map +1 -0
  59. package/dist/extensions/forgecli/fix-bug.d.ts +85 -0
  60. package/dist/extensions/forgecli/fix-bug.js +1580 -0
  61. package/dist/extensions/forgecli/fix-bug.js.map +1 -0
  62. package/dist/extensions/forgecli/forge-header.d.ts +12 -0
  63. package/dist/extensions/forgecli/forge-header.js +114 -0
  64. package/dist/extensions/forgecli/forge-header.js.map +1 -0
  65. package/dist/extensions/forgecli/forge-init.d.ts +26 -0
  66. package/dist/extensions/forgecli/forge-init.js +514 -0
  67. package/dist/extensions/forgecli/forge-init.js.map +1 -0
  68. package/dist/extensions/forgecli/forge-root.d.ts +10 -0
  69. package/dist/extensions/forgecli/forge-root.js +62 -0
  70. package/dist/extensions/forgecli/forge-root.js.map +1 -0
  71. package/dist/extensions/forgecli/forge-update-command.d.ts +100 -0
  72. package/dist/extensions/forgecli/forge-update-command.js +435 -0
  73. package/dist/extensions/forgecli/forge-update-command.js.map +1 -0
  74. package/dist/extensions/forgecli/friction-emit.d.ts +99 -0
  75. package/dist/extensions/forgecli/friction-emit.js +245 -0
  76. package/dist/extensions/forgecli/friction-emit.js.map +1 -0
  77. package/dist/extensions/forgecli/implement.d.ts +22 -0
  78. package/dist/extensions/forgecli/implement.js +170 -0
  79. package/dist/extensions/forgecli/implement.js.map +1 -0
  80. package/dist/extensions/forgecli/init-context.d.ts +99 -0
  81. package/dist/extensions/forgecli/init-context.js +178 -0
  82. package/dist/extensions/forgecli/init-context.js.map +1 -0
  83. package/dist/extensions/forgecli/init-progress.d.ts +39 -0
  84. package/dist/extensions/forgecli/init-progress.js +117 -0
  85. package/dist/extensions/forgecli/init-progress.js.map +1 -0
  86. package/dist/extensions/forgecli/input-router.d.ts +33 -0
  87. package/dist/extensions/forgecli/input-router.js +136 -0
  88. package/dist/extensions/forgecli/input-router.js.map +1 -0
  89. package/dist/extensions/forgecli/lib/halt-advisor.d.ts +59 -0
  90. package/dist/extensions/forgecli/lib/halt-advisor.js +113 -0
  91. package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -0
  92. package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +46 -0
  93. package/dist/extensions/forgecli/lib/orchestrator-preflight.js +64 -0
  94. package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +1 -0
  95. package/dist/extensions/forgecli/materialize.d.ts +16 -0
  96. package/dist/extensions/forgecli/materialize.js +195 -0
  97. package/dist/extensions/forgecli/materialize.js.map +1 -0
  98. package/dist/extensions/forgecli/migrate.d.ts +22 -0
  99. package/dist/extensions/forgecli/migrate.js +260 -0
  100. package/dist/extensions/forgecli/migrate.js.map +1 -0
  101. package/dist/extensions/forgecli/migration-engine.d.ts +117 -0
  102. package/dist/extensions/forgecli/migration-engine.js +563 -0
  103. package/dist/extensions/forgecli/migration-engine.js.map +1 -0
  104. package/dist/extensions/forgecli/model-registry.d.ts +61 -0
  105. package/dist/extensions/forgecli/model-registry.js +127 -0
  106. package/dist/extensions/forgecli/model-registry.js.map +1 -0
  107. package/dist/extensions/forgecli/model-resolver.d.ts +32 -0
  108. package/dist/extensions/forgecli/model-resolver.js +65 -0
  109. package/dist/extensions/forgecli/model-resolver.js.map +1 -0
  110. package/dist/extensions/forgecli/model-validator.d.ts +29 -0
  111. package/dist/extensions/forgecli/model-validator.js +107 -0
  112. package/dist/extensions/forgecli/model-validator.js.map +1 -0
  113. package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +26 -0
  114. package/dist/extensions/forgecli/orchestrator-status-bar.js +213 -0
  115. package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -0
  116. package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
  117. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
  118. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
  119. package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
  120. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
  121. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
  122. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
  123. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
  124. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
  125. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
  126. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
  127. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
  128. package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
  129. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
  130. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
  131. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
  132. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
  133. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
  134. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
  135. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
  136. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
  137. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
  138. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
  139. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
  140. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
  141. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
  142. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
  143. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
  144. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
  145. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
  146. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
  147. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
  148. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
  149. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
  150. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
  151. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
  152. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
  153. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
  154. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
  155. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
  156. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
  157. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
  158. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
  159. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
  160. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
  161. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
  162. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
  163. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
  164. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -93
  165. package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1721
  166. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  167. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
  168. package/dist/extensions/forgecli/orchestrators/run-sprint.js +48 -270
  169. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  170. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
  171. package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
  172. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
  173. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
  174. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
  175. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
  176. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
  177. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
  178. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
  179. package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
  180. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
  181. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
  182. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
  183. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
  184. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
  185. package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
  186. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
  187. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
  188. package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
  189. package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
  190. package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
  191. package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
  192. package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
  193. package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
  194. package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
  195. package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
  196. package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
  197. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
  198. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
  199. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
  200. package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
  201. package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
  202. package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
  203. package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
  204. package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
  205. package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
  206. package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
  207. package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
  208. package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
  209. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
  210. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
  211. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
  212. package/dist/extensions/forgecli/plan.d.ts +22 -0
  213. package/dist/extensions/forgecli/plan.js +167 -0
  214. package/dist/extensions/forgecli/plan.js.map +1 -0
  215. package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
  216. package/dist/extensions/forgecli/quiz-agent.js +98 -0
  217. package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
  218. package/dist/extensions/forgecli/read-command.d.ts +2 -0
  219. package/dist/extensions/forgecli/read-command.js +100 -0
  220. package/dist/extensions/forgecli/read-command.js.map +1 -0
  221. package/dist/extensions/forgecli/regenerate.d.ts +40 -0
  222. package/dist/extensions/forgecli/regenerate.js +438 -0
  223. package/dist/extensions/forgecli/regenerate.js.map +1 -0
  224. package/dist/extensions/forgecli/remove-command.d.ts +17 -0
  225. package/dist/extensions/forgecli/remove-command.js +124 -0
  226. package/dist/extensions/forgecli/remove-command.js.map +1 -0
  227. package/dist/extensions/forgecli/report-bug.d.ts +25 -0
  228. package/dist/extensions/forgecli/report-bug.js +159 -0
  229. package/dist/extensions/forgecli/report-bug.js.map +1 -0
  230. package/dist/extensions/forgecli/retrospective.d.ts +20 -0
  231. package/dist/extensions/forgecli/retrospective.js +126 -0
  232. package/dist/extensions/forgecli/retrospective.js.map +1 -0
  233. package/dist/extensions/forgecli/review-code.d.ts +35 -0
  234. package/dist/extensions/forgecli/review-code.js +196 -0
  235. package/dist/extensions/forgecli/review-code.js.map +1 -0
  236. package/dist/extensions/forgecli/review-plan.d.ts +35 -0
  237. package/dist/extensions/forgecli/review-plan.js +200 -0
  238. package/dist/extensions/forgecli/review-plan.js.map +1 -0
  239. package/dist/extensions/forgecli/run-sprint.d.ts +27 -0
  240. package/dist/extensions/forgecli/run-sprint.js +716 -0
  241. package/dist/extensions/forgecli/run-sprint.js.map +1 -0
  242. package/dist/extensions/forgecli/run-task.d.ts +204 -0
  243. package/dist/extensions/forgecli/run-task.js +1403 -0
  244. package/dist/extensions/forgecli/run-task.js.map +1 -0
  245. package/dist/extensions/forgecli/skill-curation-flag.d.ts +21 -0
  246. package/dist/extensions/forgecli/skill-curation-flag.js +71 -0
  247. package/dist/extensions/forgecli/skill-curation-flag.js.map +1 -0
  248. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +102 -0
  249. package/dist/extensions/forgecli/skill-curator-subagent.js +339 -0
  250. package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -0
  251. package/dist/extensions/forgecli/skill-retriever.d.ts +84 -0
  252. package/dist/extensions/forgecli/skill-retriever.js +246 -0
  253. package/dist/extensions/forgecli/skill-retriever.js.map +1 -0
  254. package/dist/extensions/forgecli/skill-usage-tracker.d.ts +91 -0
  255. package/dist/extensions/forgecli/skill-usage-tracker.js +224 -0
  256. package/dist/extensions/forgecli/skill-usage-tracker.js.map +1 -0
  257. package/dist/extensions/forgecli/sprint-intake.d.ts +10 -0
  258. package/dist/extensions/forgecli/sprint-intake.js +91 -0
  259. package/dist/extensions/forgecli/sprint-intake.js.map +1 -0
  260. package/dist/extensions/forgecli/sprint-plan.d.ts +14 -0
  261. package/dist/extensions/forgecli/sprint-plan.js +122 -0
  262. package/dist/extensions/forgecli/sprint-plan.js.map +1 -0
  263. package/dist/extensions/forgecli/status-command.d.ts +19 -0
  264. package/dist/extensions/forgecli/status-command.js +140 -0
  265. package/dist/extensions/forgecli/status-command.js.map +1 -0
  266. package/dist/extensions/forgecli/store-error-remediation.d.ts +65 -0
  267. package/dist/extensions/forgecli/store-error-remediation.js +307 -0
  268. package/dist/extensions/forgecli/store-error-remediation.js.map +1 -0
  269. package/dist/extensions/forgecli/store-query.d.ts +22 -0
  270. package/dist/extensions/forgecli/store-query.js +107 -0
  271. package/dist/extensions/forgecli/store-query.js.map +1 -0
  272. package/dist/extensions/forgecli/store-repair.d.ts +17 -0
  273. package/dist/extensions/forgecli/store-repair.js +123 -0
  274. package/dist/extensions/forgecli/store-repair.js.map +1 -0
  275. package/dist/extensions/forgecli/store-resolver.d.ts +56 -0
  276. package/dist/extensions/forgecli/store-resolver.js +263 -0
  277. package/dist/extensions/forgecli/store-resolver.js.map +1 -0
  278. package/dist/extensions/forgecli/store-validator.d.ts +16 -0
  279. package/dist/extensions/forgecli/store-validator.js +32 -0
  280. package/dist/extensions/forgecli/store-validator.js.map +1 -0
  281. package/dist/extensions/forgecli/test-orchestrate.d.ts +2 -0
  282. package/dist/extensions/forgecli/test-orchestrate.js +182 -0
  283. package/dist/extensions/forgecli/test-orchestrate.js.map +1 -0
  284. package/dist/extensions/forgecli/thread-switcher.d.ts +5 -0
  285. package/dist/extensions/forgecli/thread-switcher.js +189 -0
  286. package/dist/extensions/forgecli/thread-switcher.js.map +1 -0
  287. package/dist/extensions/forgecli/transition-guard.d.ts +20 -0
  288. package/dist/extensions/forgecli/transition-guard.js +89 -0
  289. package/dist/extensions/forgecli/transition-guard.js.map +1 -0
  290. package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
  291. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
  292. package/dist/extensions/forgecli/update-check.d.ts +37 -0
  293. package/dist/extensions/forgecli/update-check.js +185 -0
  294. package/dist/extensions/forgecli/update-check.js.map +1 -0
  295. package/dist/extensions/forgecli/update-tools.d.ts +23 -0
  296. package/dist/extensions/forgecli/update-tools.js +135 -0
  297. package/dist/extensions/forgecli/update-tools.js.map +1 -0
  298. package/dist/extensions/forgecli/validate.d.ts +22 -0
  299. package/dist/extensions/forgecli/validate.js +152 -0
  300. package/dist/extensions/forgecli/validate.js.map +1 -0
  301. package/dist/extensions/forgecli/viewport-events.d.ts +78 -0
  302. package/dist/extensions/forgecli/viewport-events.js +243 -0
  303. package/dist/extensions/forgecli/viewport-events.js.map +1 -0
  304. package/dist/extensions/forgecli/viewport-renderer.d.ts +83 -0
  305. package/dist/extensions/forgecli/viewport-renderer.js +233 -0
  306. package/dist/extensions/forgecli/viewport-renderer.js.map +1 -0
  307. package/dist/extensions/forgecli/viewport-theme.d.ts +11 -0
  308. package/dist/extensions/forgecli/viewport-theme.js +128 -0
  309. package/dist/extensions/forgecli/viewport-theme.js.map +1 -0
  310. package/dist/extensions/forgecli/whats-new-widget.d.ts +26 -0
  311. package/dist/extensions/forgecli/whats-new-widget.js +376 -0
  312. package/dist/extensions/forgecli/whats-new-widget.js.map +1 -0
  313. package/dist/extensions/forgecli/whats-new.d.ts +120 -0
  314. package/dist/extensions/forgecli/whats-new.js +470 -0
  315. package/dist/extensions/forgecli/whats-new.js.map +1 -0
  316. package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
  317. package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
  318. package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
  319. package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
  320. package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
  321. package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
  322. package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
  323. package/dist/forge-payload/.base-pack/commands/init.md +278 -0
  324. package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
  325. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
  326. package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
  327. package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
  328. package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
  329. package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
  330. package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
  331. package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
  332. package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
  333. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
  334. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
  335. package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
  336. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  337. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  338. package/dist/forge-payload/.schemas/migrations.json +85 -0
  339. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  340. package/dist/forge-payload/commands/add-task.md +3 -3
  341. package/dist/forge-payload/commands/ask.md +1 -1
  342. package/dist/forge-payload/commands/check-agent.md +1 -1
  343. package/dist/forge-payload/commands/config.md +1 -1
  344. package/dist/forge-payload/commands/health.md +1 -1
  345. package/dist/forge-payload/commands/init.md +62 -7
  346. package/dist/forge-payload/commands/rebuild.md +3 -3
  347. package/dist/forge-payload/commands/remove.md +1 -1
  348. package/dist/forge-payload/commands/repair.md +1 -1
  349. package/dist/forge-payload/commands/report-bug.md +1 -1
  350. package/dist/forge-payload/commands/status.md +1 -1
  351. package/dist/forge-payload/commands/update.md +3 -3
  352. package/dist/forge-payload/hooks/lib/common.cjs +228 -0
  353. package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
  354. package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
  355. package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
  356. package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
  357. package/dist/forge-payload/init/discovery/discover-database.md +32 -0
  358. package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
  359. package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
  360. package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
  361. package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
  362. package/dist/forge-payload/init/generation/generate-commands.md +171 -0
  363. package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
  364. package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
  365. package/dist/forge-payload/init/generation/generate-persona.md +73 -0
  366. package/dist/forge-payload/init/generation/generate-personas.md +54 -0
  367. package/dist/forge-payload/init/generation/generate-skill.md +66 -0
  368. package/dist/forge-payload/init/generation/generate-skills.md +36 -0
  369. package/dist/forge-payload/init/generation/generate-template.md +60 -0
  370. package/dist/forge-payload/init/generation/generate-templates.md +39 -0
  371. package/dist/forge-payload/init/generation/generate-tools.md +133 -0
  372. package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
  373. package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
  374. package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
  375. package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
  376. package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
  377. package/dist/forge-payload/integrity.json +16 -16
  378. package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
  379. package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
  380. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  381. package/dist/forge-payload/schemas/structure-manifest.json +3 -12
  382. package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
  383. package/dist/forge-payload/tools/lib/paths.cjs +12 -11
  384. package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
  385. package/dist/forge-payload/tools/query-logger.cjs +34 -0
  386. package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
  387. package/node_modules/@mariozechner/clipboard/package.json +1 -2
  388. package/package.json +2 -2
  389. package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
  390. package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
@@ -0,0 +1,593 @@
1
+ // claude-bootstrap/bootstrap.ts — deterministic Claude Code project bootstrap (FORGE-S31-T02 + T03)
2
+ //
3
+ // Scaffolds a Claude Code project from the bundled forge-payload in seconds.
4
+ // Zero LLM tokens, zero network access, pure fs operations.
5
+ //
6
+ // Grep-negative ACs (enforced by test):
7
+ // - No fetch/https/network imports
8
+ // - No writes to .forge/store/
9
+ // - No sendUserMessage, no ctx.ui.*
10
+ //
11
+ // Idempotency contract:
12
+ // - Running against a fully-bootstrapped dir → all paths exist → all skipped →
13
+ // dir tree byte-identical to previous run.
14
+ // - Running against a partial bootstrap → only missing files/dirs created.
15
+ // - .forge/config.json, .forge/store/**, KB folder are NEVER touched.
16
+ import * as child_process from "node:child_process";
17
+ import * as crypto from "node:crypto";
18
+ import * as fs from "node:fs";
19
+ import * as path from "node:path";
20
+ import { mergeForgeHooks } from "./settings-merge.js";
21
+ // ── Private helpers ───────────────────────────────────────────────────────────
22
+ // ── Gitignore patterns (mirrors phase4-register.ts) ──────────────────────────
23
+ const GITIGNORE_FORGE_PATTERNS = [".forge/store/events/", ".forge/store/events", ".forge/store/", ".forge/"];
24
+ const GITIGNORE_APPEND_BLOCK = "\n# Forge — transient agent event logs (one file per phase, do not commit)\n.forge/store/events/\n";
25
+ /**
26
+ * Idempotent .gitignore update. Pure function — returns outcome string.
27
+ * Does not create .gitignore if absent.
28
+ */
29
+ function updateGitignorePure(gitignorePath) {
30
+ if (!fs.existsSync(gitignorePath))
31
+ return "absent";
32
+ let content;
33
+ try {
34
+ content = fs.readFileSync(gitignorePath, "utf8");
35
+ }
36
+ catch {
37
+ return "error";
38
+ }
39
+ const lines = content.split("\n");
40
+ const alreadyIgnored = lines.some((line) => {
41
+ const trimmed = line.trim();
42
+ if (!trimmed || trimmed.startsWith("#"))
43
+ return false;
44
+ return GITIGNORE_FORGE_PATTERNS.some((pat) => trimmed.includes(pat));
45
+ });
46
+ if (alreadyIgnored)
47
+ return "already-present";
48
+ try {
49
+ fs.appendFileSync(gitignorePath, GITIGNORE_APPEND_BLOCK, "utf8");
50
+ return "appended";
51
+ }
52
+ catch {
53
+ return "error";
54
+ }
55
+ }
56
+ /**
57
+ * Preflight check for claude binary reachability (Step 9).
58
+ * Non-fatal — returns result rather than throwing.
59
+ */
60
+ function runPreflight() {
61
+ const preflight = {
62
+ claudeAvailable: false,
63
+ workflowToolChecked: false,
64
+ warnings: [],
65
+ };
66
+ try {
67
+ child_process.execFileSync("claude", ["--version"], { timeout: 5000, stdio: "pipe" });
68
+ preflight.claudeAvailable = true;
69
+ }
70
+ catch {
71
+ preflight.claudeAvailable = false;
72
+ preflight.warnings.push("Claude Code not found on PATH — install Claude Code (https://code.claude.com) " +
73
+ "and ensure 'claude' is on your PATH before opening the project.");
74
+ }
75
+ // workflowToolChecked is always false — no reliable offline check exists.
76
+ // Confirmed at runtime on first /forge:init.
77
+ preflight.workflowToolChecked = false;
78
+ return preflight;
79
+ }
80
+ /** Read the bundled forge version from .claude-plugin/plugin.json */
81
+ function readPayloadVersion(payloadRoot) {
82
+ try {
83
+ const pluginPath = path.join(payloadRoot, ".claude-plugin", "plugin.json");
84
+ const raw = fs.readFileSync(pluginPath, "utf8");
85
+ const plugin = JSON.parse(raw);
86
+ return typeof plugin.version === "string" ? plugin.version : "0.0.0";
87
+ }
88
+ catch {
89
+ return "0.0.0";
90
+ }
91
+ }
92
+ /** Compute SHA-256 of a file, or empty string if unreadable. */
93
+ function fileSha256(filePath) {
94
+ try {
95
+ const content = fs.readFileSync(filePath);
96
+ return crypto.createHash("sha256").update(content).digest("hex");
97
+ }
98
+ catch {
99
+ return "";
100
+ }
101
+ }
102
+ /**
103
+ * Ensure a directory exists. Returns "created" if it was new, "skipped" if it
104
+ * already existed, or throws on permission error.
105
+ */
106
+ function ensureDir(dirPath) {
107
+ if (fs.existsSync(dirPath)) {
108
+ return "skipped";
109
+ }
110
+ fs.mkdirSync(dirPath, { recursive: true });
111
+ return "created";
112
+ }
113
+ /**
114
+ * Copy a file from src to dst.
115
+ * If dst is byte-identical to src → "skipped".
116
+ * Otherwise → overwrite and return "created".
117
+ */
118
+ function copyFile(src, dst) {
119
+ if (fs.existsSync(dst) && fileSha256(src) === fileSha256(dst)) {
120
+ return "skipped";
121
+ }
122
+ fs.copyFileSync(src, dst);
123
+ return "created";
124
+ }
125
+ /**
126
+ * Recursively copy a directory tree. Only regular files are copied; each file
127
+ * goes through copyFile (idempotent: byte-identical → skipped). Tracks created
128
+ * and skipped paths into the provided arrays.
129
+ */
130
+ function copyDirRecursive(src, dest, created, skipped) {
131
+ const destOutcome = ensureDir(dest);
132
+ if (destOutcome === "created")
133
+ created.push(dest);
134
+ else
135
+ skipped.push(dest);
136
+ const entries = fs.readdirSync(src, { withFileTypes: true });
137
+ for (const entry of entries) {
138
+ const srcPath = path.join(src, entry.name);
139
+ const destPath = path.join(dest, entry.name);
140
+ if (entry.isDirectory()) {
141
+ copyDirRecursive(srcPath, destPath, created, skipped);
142
+ }
143
+ else if (entry.isFile()) {
144
+ const outcome = copyFile(srcPath, destPath);
145
+ if (outcome === "created")
146
+ created.push(destPath);
147
+ else
148
+ skipped.push(destPath);
149
+ }
150
+ }
151
+ }
152
+ /**
153
+ * Write a JSON file. If dst already contains the same content → "skipped".
154
+ * Otherwise → overwrite and return "created".
155
+ */
156
+ function writeJsonFile(dst, content) {
157
+ const serialized = JSON.stringify(content, null, 2) + "\n";
158
+ if (fs.existsSync(dst)) {
159
+ try {
160
+ const existing = fs.readFileSync(dst, "utf8");
161
+ if (existing === serialized)
162
+ return "skipped";
163
+ }
164
+ catch {
165
+ // fall through to overwrite
166
+ }
167
+ }
168
+ fs.writeFileSync(dst, serialized, "utf8");
169
+ return "created";
170
+ }
171
+ // ── Main export ───────────────────────────────────────────────────────────────
172
+ /**
173
+ * Bootstrap a Claude Code project from the bundled forge-payload.
174
+ *
175
+ * This function is deterministic and idempotent:
176
+ * - Running against a fresh dir scaffolds everything.
177
+ * - Running against a partially-bootstrapped dir repairs only missing items.
178
+ * - Running against a fully-bootstrapped dir is a no-op (byte-identical).
179
+ *
180
+ * .forge/config.json and .forge/store/** are never touched.
181
+ */
182
+ export function bootstrapClaudeProject(opts) {
183
+ const { dir, payloadRoot } = opts;
184
+ const created = [];
185
+ const skipped = [];
186
+ const warnings = [];
187
+ const preflight = { claudeAvailable: false, workflowToolChecked: false, warnings: [] };
188
+ // ── Step 1: Validate payload root ─────────────────────────────────────────
189
+ const storeCli = path.join(payloadRoot, "tools", "store-cli.cjs");
190
+ if (!fs.existsSync(storeCli)) {
191
+ warnings.push(`Payload validation failed: store-cli.cjs missing from ${path.join(payloadRoot, "tools")}. ` +
192
+ "Run 'npm run build' to populate dist/forge-payload/tools/.");
193
+ return { ok: false, created, skipped, warnings, preflight };
194
+ }
195
+ // ── Step 2: Scaffold .forge/ skeleton + store dirs ────────────────────────
196
+ const dirsToScaffold = [
197
+ path.join(dir, ".forge"),
198
+ path.join(dir, ".forge", "store", "sprints"),
199
+ path.join(dir, ".forge", "store", "tasks"),
200
+ path.join(dir, ".forge", "store", "bugs"),
201
+ path.join(dir, ".forge", "store", "events"),
202
+ path.join(dir, ".forge", "cache"),
203
+ path.join(dir, ".forge", "schemas"),
204
+ path.join(dir, ".forge", "tools"),
205
+ path.join(dir, ".claude", "commands", "forge"),
206
+ path.join(dir, ".claude", "workflows"),
207
+ ];
208
+ try {
209
+ for (const d of dirsToScaffold) {
210
+ const outcome = ensureDir(d);
211
+ if (outcome === "created") {
212
+ created.push(d);
213
+ // Write .gitkeep into store dirs only
214
+ if (d.includes(path.join(".forge", "store"))) {
215
+ const gitkeep = path.join(d, ".gitkeep");
216
+ if (!fs.existsSync(gitkeep)) {
217
+ fs.writeFileSync(gitkeep, "", "utf8");
218
+ created.push(gitkeep);
219
+ }
220
+ }
221
+ }
222
+ else {
223
+ skipped.push(d);
224
+ }
225
+ }
226
+ }
227
+ catch (err) {
228
+ const e = err;
229
+ warnings.push(`Failed to scaffold directory structure in ${dir}: ${e.message ?? String(err)}. ` +
230
+ "Check directory permissions.");
231
+ return { ok: false, created, skipped, warnings, preflight };
232
+ }
233
+ // ── Step 3: Vendor tools + lib into .forge/tools/ ─────────────────────────
234
+ const toolsSrc = path.join(payloadRoot, "tools");
235
+ const toolsDest = path.join(dir, ".forge", "tools");
236
+ try {
237
+ // Copy *.cjs and *.js files, plus the package.json CJS scope marker
238
+ // (FORGE-BUG-030: lib/*.js are CommonJS; without the marker they resolve
239
+ // as ESM in "type":"module" host projects and crash on module.exports).
240
+ const toolFiles = fs
241
+ .readdirSync(toolsSrc)
242
+ .filter((f) => f.endsWith(".cjs") || f.endsWith(".js") || f === "package.json");
243
+ for (const f of toolFiles) {
244
+ const outcome = copyFile(path.join(toolsSrc, f), path.join(toolsDest, f));
245
+ const destPath = path.join(toolsDest, f);
246
+ if (outcome === "created")
247
+ created.push(destPath);
248
+ else
249
+ skipped.push(destPath);
250
+ }
251
+ // Copy lib/ subdirectory
252
+ const libSrc = path.join(toolsSrc, "lib");
253
+ const libDest = path.join(toolsDest, "lib");
254
+ if (fs.existsSync(libSrc)) {
255
+ const libOutcome = ensureDir(libDest);
256
+ if (libOutcome === "created")
257
+ created.push(libDest);
258
+ else
259
+ skipped.push(libDest);
260
+ const libFiles = fs.readdirSync(libSrc).filter((f) => f.endsWith(".cjs") || f.endsWith(".js"));
261
+ for (const f of libFiles) {
262
+ const outcome = copyFile(path.join(libSrc, f), path.join(libDest, f));
263
+ const destPath = path.join(libDest, f);
264
+ if (outcome === "created")
265
+ created.push(destPath);
266
+ else
267
+ skipped.push(destPath);
268
+ }
269
+ }
270
+ // Write .forge-tools-version marker
271
+ const payloadVersion = readPayloadVersion(payloadRoot);
272
+ const markerPath = path.join(toolsDest, ".forge-tools-version");
273
+ const markerOutcome = writeJsonFile(markerPath, { version: payloadVersion });
274
+ if (markerOutcome === "created")
275
+ created.push(markerPath);
276
+ else
277
+ skipped.push(markerPath);
278
+ }
279
+ catch (err) {
280
+ const e = err;
281
+ warnings.push(`tools-copy non-fatal: ${e.message ?? String(err)}`);
282
+ }
283
+ // ── Step 3b: Vendor hook scripts into .forge/tools/hooks/ ─────────────────
284
+ // settings-merge.ts wires .claude/settings.json hooks at these paths — without
285
+ // this copy every hook fires node against a nonexistent file (MODULE_NOT_FOUND).
286
+ const hooksSrc = path.join(payloadRoot, "hooks");
287
+ const hooksDest = path.join(toolsDest, "hooks");
288
+ if (fs.existsSync(hooksSrc)) {
289
+ try {
290
+ const hooksDirOutcome = ensureDir(hooksDest);
291
+ if (hooksDirOutcome === "created")
292
+ created.push(hooksDest);
293
+ else
294
+ skipped.push(hooksDest);
295
+ const hookFiles = fs.readdirSync(hooksSrc).filter((f) => f.endsWith(".cjs") || f.endsWith(".js"));
296
+ for (const f of hookFiles) {
297
+ const outcome = copyFile(path.join(hooksSrc, f), path.join(hooksDest, f));
298
+ const destPath = path.join(hooksDest, f);
299
+ if (outcome === "created")
300
+ created.push(destPath);
301
+ else
302
+ skipped.push(destPath);
303
+ }
304
+ // Copy hooks/lib/ — hook scripts require ./lib/common.cjs etc. at runtime;
305
+ // without these every PostToolUse hook fails with MODULE_NOT_FOUND.
306
+ const hooksLibSrc = path.join(hooksSrc, "lib");
307
+ const hooksLibDest = path.join(hooksDest, "lib");
308
+ if (fs.existsSync(hooksLibSrc)) {
309
+ const hooksLibOutcome = ensureDir(hooksLibDest);
310
+ if (hooksLibOutcome === "created")
311
+ created.push(hooksLibDest);
312
+ else
313
+ skipped.push(hooksLibDest);
314
+ const hooksLibFiles = fs.readdirSync(hooksLibSrc).filter((f) => f.endsWith(".cjs") || f.endsWith(".js"));
315
+ for (const f of hooksLibFiles) {
316
+ const outcome = copyFile(path.join(hooksLibSrc, f), path.join(hooksLibDest, f));
317
+ const destPath = path.join(hooksLibDest, f);
318
+ if (outcome === "created")
319
+ created.push(destPath);
320
+ else
321
+ skipped.push(destPath);
322
+ }
323
+ }
324
+ }
325
+ catch (err) {
326
+ const e = err;
327
+ warnings.push(`hooks-copy non-fatal: ${e.message ?? String(err)}`);
328
+ }
329
+ }
330
+ else {
331
+ warnings.push(`hooks/ not found in payload at ${hooksSrc} — .claude/settings.json hooks will fail with MODULE_NOT_FOUND.`);
332
+ }
333
+ // ── Step 3c: Vendor schemas into .forge/schemas/ ──────────────────────────
334
+ // validate-store.cjs and store tooling resolve schemas from .forge/schemas/.
335
+ const schemasSrc = path.join(payloadRoot, "schemas");
336
+ const schemasDest = path.join(dir, ".forge", "schemas");
337
+ if (fs.existsSync(schemasSrc)) {
338
+ try {
339
+ const schemaFiles = fs.readdirSync(schemasSrc).filter((f) => f.endsWith(".json"));
340
+ for (const f of schemaFiles) {
341
+ const outcome = copyFile(path.join(schemasSrc, f), path.join(schemasDest, f));
342
+ const destPath = path.join(schemasDest, f);
343
+ if (outcome === "created")
344
+ created.push(destPath);
345
+ else
346
+ skipped.push(destPath);
347
+ }
348
+ // Copy _defs/ subdirectory
349
+ const defsSrc = path.join(schemasSrc, "_defs");
350
+ const defsDest = path.join(schemasDest, "_defs");
351
+ if (fs.existsSync(defsSrc)) {
352
+ const defsDirOutcome = ensureDir(defsDest);
353
+ if (defsDirOutcome === "created")
354
+ created.push(defsDest);
355
+ else
356
+ skipped.push(defsDest);
357
+ const defsFiles = fs.readdirSync(defsSrc).filter((f) => f.endsWith(".json"));
358
+ for (const f of defsFiles) {
359
+ const outcome = copyFile(path.join(defsSrc, f), path.join(defsDest, f));
360
+ const destPath = path.join(defsDest, f);
361
+ if (outcome === "created")
362
+ created.push(destPath);
363
+ else
364
+ skipped.push(destPath);
365
+ }
366
+ }
367
+ }
368
+ catch (err) {
369
+ const e = err;
370
+ warnings.push(`schemas-copy non-fatal: ${e.message ?? String(err)}`);
371
+ }
372
+ }
373
+ else {
374
+ warnings.push(`schemas/ not found in payload at ${schemasSrc} — .forge/schemas/ left empty.`);
375
+ }
376
+ // ── Step 4: Vendor the full /forge:* command surface ──────────────────────
377
+ // CLI-first redesign: project-prefix namespaces (/acme:*, /hello:*) are
378
+ // retired. The union of .base-pack/commands/ (sprint-workflow shims, static
379
+ // /forge:* files) and commands/ (plugin utility commands) vendors into
380
+ // .claude/commands/forge/. On name collision (init.md, check-agent.md,
381
+ // enhance.md) the .base-pack version wins — it is the project-local,
382
+ // vendored-paths variant.
383
+ const commandsDest = path.join(dir, ".claude", "commands", "forge");
384
+ const bpCommandsSrc = path.join(payloadRoot, ".base-pack", "commands");
385
+ const utilCommandsSrc = path.join(payloadRoot, "commands");
386
+ try {
387
+ const vendoredNames = new Set();
388
+ // 4a: .base-pack/commands/ — winners
389
+ if (fs.existsSync(bpCommandsSrc)) {
390
+ const bpFiles = fs.readdirSync(bpCommandsSrc).filter((f) => f.endsWith(".md"));
391
+ for (const f of bpFiles) {
392
+ const outcome = copyFile(path.join(bpCommandsSrc, f), path.join(commandsDest, f));
393
+ const destPath = path.join(commandsDest, f);
394
+ if (outcome === "created")
395
+ created.push(destPath);
396
+ else
397
+ skipped.push(destPath);
398
+ vendoredNames.add(f);
399
+ }
400
+ }
401
+ else {
402
+ warnings.push(`.base-pack/commands/ not found at ${bpCommandsSrc} — workflow command shims missing.`);
403
+ }
404
+ // 4b: commands/ — utility commands fill the remaining names
405
+ if (fs.existsSync(utilCommandsSrc)) {
406
+ const utilFiles = fs.readdirSync(utilCommandsSrc).filter((f) => f.endsWith(".md") && !vendoredNames.has(f));
407
+ for (const f of utilFiles) {
408
+ const outcome = copyFile(path.join(utilCommandsSrc, f), path.join(commandsDest, f));
409
+ const destPath = path.join(commandsDest, f);
410
+ if (outcome === "created")
411
+ created.push(destPath);
412
+ else
413
+ skipped.push(destPath);
414
+ }
415
+ }
416
+ else {
417
+ warnings.push(`commands/ not found at ${utilCommandsSrc} — utility commands missing.`);
418
+ }
419
+ }
420
+ catch (err) {
421
+ const e = err;
422
+ warnings.push(`vendor-commands non-fatal: ${e.message ?? String(err)}`);
423
+ }
424
+ // ── Step 4c: Vendor Forge-root content into .forge/ ───────────────────────
425
+ // The vendored .forge/ IS the Forge root in plugin-less projects
426
+ // (FORGE_ROOT: ${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}). wfl:init reads
427
+ // init/phases/ rulebooks; substitute-placeholders probes .base-pack/;
428
+ // meta/ serves rebuild/migrate workflows; .claude-plugin/plugin.json is the
429
+ // version source commands report.
430
+ const FORGE_ROOT_DIRS = [
431
+ ["init", "init"],
432
+ [".base-pack", ".base-pack"],
433
+ ["meta", "meta"],
434
+ [".claude-plugin", ".claude-plugin"],
435
+ ];
436
+ for (const [srcName, destName] of FORGE_ROOT_DIRS) {
437
+ const src = path.join(payloadRoot, srcName);
438
+ if (!fs.existsSync(src)) {
439
+ warnings.push(`${srcName}/ not found in payload — .forge/${destName}/ not vendored.`);
440
+ continue;
441
+ }
442
+ try {
443
+ copyDirRecursive(src, path.join(dir, ".forge", destName), created, skipped);
444
+ }
445
+ catch (err) {
446
+ const e = err;
447
+ warnings.push(`vendor-forge-root (${srcName}) non-fatal: ${e.message ?? String(err)}`);
448
+ }
449
+ }
450
+ // ── Step 4d: Vendor Claude Code assets (agents, skills) into .claude/ ─────
451
+ const CLAUDE_ASSET_DIRS = [
452
+ ["agents", "agents"],
453
+ ["skills", "skills"],
454
+ ];
455
+ for (const [srcName, destName] of CLAUDE_ASSET_DIRS) {
456
+ const src = path.join(payloadRoot, srcName);
457
+ if (!fs.existsSync(src)) {
458
+ warnings.push(`${srcName}/ not found in payload — .claude/${destName}/ not vendored.`);
459
+ continue;
460
+ }
461
+ try {
462
+ copyDirRecursive(src, path.join(dir, ".claude", destName), created, skipped);
463
+ }
464
+ catch (err) {
465
+ const e = err;
466
+ warnings.push(`vendor-claude-assets (${srcName}) non-fatal: ${e.message ?? String(err)}`);
467
+ }
468
+ }
469
+ // ── Step 5: Install wfl-*.js drivers ──────────────────────────────────────
470
+ const wflSrc = path.join(payloadRoot, ".base-pack", "workflows-js");
471
+ const wflDest = path.join(dir, ".claude", "workflows");
472
+ if (fs.existsSync(wflSrc)) {
473
+ try {
474
+ const wflFiles = fs.readdirSync(wflSrc).filter((f) => f.startsWith("wfl-") && f.endsWith(".js"));
475
+ for (const f of wflFiles) {
476
+ const outcome = copyFile(path.join(wflSrc, f), path.join(wflDest, f));
477
+ const destPath = path.join(wflDest, f);
478
+ if (outcome === "created")
479
+ created.push(destPath);
480
+ else
481
+ skipped.push(destPath);
482
+ }
483
+ }
484
+ catch (err) {
485
+ const e = err;
486
+ warnings.push(`install-workflows non-fatal: ${e.message ?? String(err)}`);
487
+ }
488
+ }
489
+ else {
490
+ warnings.push(`wfl-*.js drivers not found at ${wflSrc} — .base-pack/workflows-js/ missing from payload.`);
491
+ }
492
+ // ── Step 6: Write bootstrap manifest ──────────────────────────────────────
493
+ const manifestPath = path.join(dir, ".forge", ".bootstrap-manifest.json");
494
+ const payloadVersion = readPayloadVersion(payloadRoot);
495
+ // Compute payload integrity hash
496
+ let payloadIntegrityHash = "";
497
+ try {
498
+ const integrityPath = path.join(payloadRoot, "integrity.json");
499
+ if (fs.existsSync(integrityPath)) {
500
+ payloadIntegrityHash = crypto.createHash("sha256").update(fs.readFileSync(integrityPath)).digest("hex");
501
+ }
502
+ }
503
+ catch {
504
+ // non-fatal
505
+ }
506
+ try {
507
+ // Preserve existing bootstrappedAt if manifest already exists (idempotency: stable hash)
508
+ let bootstrappedAt = new Date().toISOString();
509
+ if (fs.existsSync(manifestPath)) {
510
+ try {
511
+ const existing = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
512
+ // If payload version matches, keep existing timestamp for hash stability
513
+ if (existing.bootstrappedAt && existing.payloadVersion === payloadVersion) {
514
+ bootstrappedAt = existing.bootstrappedAt;
515
+ }
516
+ }
517
+ catch {
518
+ // fall through to overwrite with current timestamp
519
+ }
520
+ }
521
+ const manifest = {
522
+ bootstrappedAt,
523
+ payloadVersion,
524
+ payloadIntegrityHash,
525
+ steps: [
526
+ "scaffold",
527
+ "vendor-tools",
528
+ "vendor-hooks",
529
+ "vendor-schemas",
530
+ "vendor-commands",
531
+ "vendor-forge-root",
532
+ "vendor-claude-assets",
533
+ "install-workflows",
534
+ ],
535
+ };
536
+ const manifestOutcome = writeJsonFile(manifestPath, manifest);
537
+ if (manifestOutcome === "created")
538
+ created.push(manifestPath);
539
+ else
540
+ skipped.push(manifestPath);
541
+ }
542
+ catch (err) {
543
+ const e = err;
544
+ warnings.push(`manifest write non-fatal: ${e.message ?? String(err)}`);
545
+ }
546
+ // ── Step 7: Settings hooks wiring ─────────────────────────────────────────
547
+ const settingsPath = path.join(dir, ".claude", "settings.json");
548
+ try {
549
+ const mergeResult = mergeForgeHooks(settingsPath);
550
+ if (mergeResult.outcome === "created" || mergeResult.outcome === "merged") {
551
+ created.push(settingsPath);
552
+ }
553
+ else if (mergeResult.outcome === "already-present") {
554
+ skipped.push(settingsPath);
555
+ }
556
+ else if (mergeResult.outcome === "error") {
557
+ warnings.push(`settings-merge non-fatal: ${mergeResult.warning ?? "unknown error"}`);
558
+ }
559
+ }
560
+ catch (err) {
561
+ const e = err;
562
+ warnings.push(`settings-merge non-fatal: ${e.message ?? String(err)}`);
563
+ }
564
+ // ── Step 8: .gitignore append ─────────────────────────────────────────────
565
+ const gitignorePath = path.join(dir, ".gitignore");
566
+ try {
567
+ const gitignoreOutcome = updateGitignorePure(gitignorePath);
568
+ if (gitignoreOutcome === "appended") {
569
+ created.push(gitignorePath);
570
+ }
571
+ else if (gitignoreOutcome === "already-present" || gitignoreOutcome === "absent") {
572
+ // absent = no .gitignore, skipped silently; already-present = idempotent skip
573
+ }
574
+ else if (gitignoreOutcome === "error") {
575
+ warnings.push("gitignore-update non-fatal: could not update .gitignore — update manually.");
576
+ }
577
+ }
578
+ catch (err) {
579
+ const e = err;
580
+ warnings.push(`gitignore-update non-fatal: ${e.message ?? String(err)}`);
581
+ }
582
+ // ── Step 9: Preflight check ───────────────────────────────────────────────
583
+ const preflightResult = runPreflight();
584
+ preflight.claudeAvailable = preflightResult.claudeAvailable;
585
+ preflight.workflowToolChecked = preflightResult.workflowToolChecked;
586
+ preflight.warnings = preflightResult.warnings;
587
+ // Propagate preflight warnings to top-level warnings (non-fatal)
588
+ for (const w of preflightResult.warnings) {
589
+ warnings.push(w);
590
+ }
591
+ return { ok: true, created, skipped, warnings, preflight };
592
+ }
593
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/claude-bootstrap/bootstrap.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,EAAE;AACF,6EAA6E;AAC7E,4DAA4D;AAC5D,EAAE;AACF,wCAAwC;AACxC,qCAAqC;AACrC,iCAAiC;AACjC,sCAAsC;AACtC,EAAE;AACF,wBAAwB;AACxB,iFAAiF;AACjF,+CAA+C;AAC/C,6EAA6E;AAC7E,wEAAwE;AAExE,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAoCtD,iFAAiF;AAEjF,gFAAgF;AAEhF,MAAM,wBAAwB,GAAG,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAC7G,MAAM,sBAAsB,GAC3B,oGAAoG,CAAC;AAEtG;;;GAGG;AACH,SAAS,mBAAmB,CAAC,aAAqB;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEnD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc;QAAE,OAAO,iBAAiB,CAAC;IAE7C,IAAI,CAAC;QACJ,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,UAAU,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC;IAChB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY;IACpB,MAAM,SAAS,GAAuB;QACrC,eAAe,EAAE,KAAK;QACtB,mBAAmB,EAAE,KAAK;QAC1B,QAAQ,EAAE,EAAE;KACZ,CAAC;IAEF,IAAI,CAAC;QACJ,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,SAAS,CAAC,eAAe,GAAG,KAAK,CAAC;QAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACtB,gFAAgF;YAC/E,iEAAiE,CAClE,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,6CAA6C;IAC7C,SAAS,CAAC,mBAAmB,GAAG,KAAK,CAAC;IAEtC,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,qEAAqE;AACrE,SAAS,kBAAkB,CAAC,WAAmB;IAC9C,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACvD,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC;IAChB,CAAC;AACF,CAAC;AAED,gEAAgE;AAChE,SAAS,UAAU,CAAC,QAAgB;IACnC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,OAAe;IACjC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY,EAAE,OAAiB,EAAE,OAAiB;IACxF,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,OAAgB;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC9C,IAAI,QAAQ,KAAK,UAAU;gBAAE,OAAO,SAAS,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACR,4BAA4B;QAC7B,CAAC;IACF,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC5D,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAuB,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAE3G,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CACZ,yDAAyD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI;YAC3F,4DAA4D,CAC7D,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC7D,CAAC;IAED,6EAA6E;IAC7E,MAAM,cAAc,GAAG;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC;KACtC,CAAC;IAEF,IAAI,CAAC;QACJ,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,sCAAsC;gBACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;oBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;oBACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC7B,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;wBACtC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvB,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,QAAQ,CAAC,IAAI,CACZ,6CAA6C,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI;YAChF,8BAA8B,CAC/B,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC7D,CAAC;IAED,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpD,IAAI,CAAC;QACJ,oEAAoE;QACpE,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,SAAS,GAAG,EAAE;aAClB,WAAW,CAAC,QAAQ,CAAC;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC;QACjF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAC/C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE3B,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/F,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACvC,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;QAED,oCAAoC;QACpC,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7E,IAAI,aAAa,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;YACrD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,6EAA6E;IAC7E,+EAA+E;IAC/E,iFAAiF;IACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEhD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACJ,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,eAAe,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;gBACtD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE7B,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAClG,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACzC,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,2EAA2E;YAC3E,oEAAoE;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChC,MAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;gBAChD,IAAI,eAAe,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;oBACzD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEhC,MAAM,aAAa,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzG,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;oBAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBAC5C,IAAI,OAAO,KAAK,SAAS;wBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;wBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;SAAM,CAAC;QACP,QAAQ,CAAC,IAAI,CACZ,kCAAkC,QAAQ,iEAAiE,CAC3G,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAExD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAClF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC3C,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,2BAA2B;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,cAAc,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE5B,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7E,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACxC,IAAI,OAAO,KAAK,SAAS;wBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;wBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACF,CAAC;SAAM,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC,oCAAoC,UAAU,gCAAgC,CAAC,CAAC;IAC/F,CAAC;IAED,6EAA6E;IAC7E,wEAAwE;IACxE,4EAA4E;IAC5E,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAE3D,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,qCAAqC;QACrC,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBAC5C,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,qCAAqC,aAAa,oCAAoC,CAAC,CAAC;QACvG,CAAC;QAED,4DAA4D;QAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5G,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBAC5C,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,0BAA0B,eAAe,8BAA8B,CAAC,CAAC;QACxF,CAAC;IACF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,6EAA6E;IAC7E,iEAAiE;IACjE,qEAAqE;IACrE,sEAAsE;IACtE,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,eAAe,GAA4B;QAChD,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,YAAY,EAAE,YAAY,CAAC;QAC5B,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;KACpC,CAAC;IACF,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,mCAAmC,QAAQ,iBAAiB,CAAC,CAAC;YACtF,SAAS;QACV,CAAC;QACD,IAAI,CAAC;YACJ,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,OAAO,gBAAgB,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;IACF,CAAC;IAED,6EAA6E;IAC7E,MAAM,iBAAiB,GAA4B;QAClD,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;IACF,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,oCAAoC,QAAQ,iBAAiB,CAAC,CAAC;YACvF,SAAS;QACV,CAAC;QACD,IAAI,CAAC;YACJ,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,OAAO,gBAAgB,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;IACF,CAAC;IAED,6EAA6E;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACjG,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACvC,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;SAAM,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC,iCAAiC,MAAM,mDAAmD,CAAC,CAAC;IAC3G,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEvD,iCAAiC;IACjC,IAAI,oBAAoB,GAAG,EAAE,CAAC;IAC9B,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzG,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,YAAY;IACb,CAAC;IAED,IAAI,CAAC;QACJ,yFAAyF;QACzF,IAAI,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAGhE,CAAC;gBACF,yEAAyE;gBACzE,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;oBAC3E,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;gBAC1C,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,mDAAmD;YACpD,CAAC;QACF,CAAC;QACD,MAAM,QAAQ,GAAG;YAChB,cAAc;YACd,cAAc;YACd,oBAAoB;YACpB,KAAK,EAAE;gBACN,UAAU;gBACV,cAAc;gBACd,cAAc;gBACd,gBAAgB;gBAChB,iBAAiB;gBACjB,mBAAmB;gBACnB,sBAAsB;gBACtB,mBAAmB;aACnB;SACD,CAAC;QACF,MAAM,eAAe,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,eAAe,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;YACzD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,6BAA6B,WAAW,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QACtF,CAAC;IACF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,6EAA6E;IAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC;QACJ,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,gBAAgB,KAAK,iBAAiB,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACpF,8EAA8E;QAC/E,CAAC;aAAM,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC7F,CAAC;IACF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,6EAA6E;IAC7E,MAAM,eAAe,GAAG,YAAY,EAAE,CAAC;IACvC,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;IAC5D,SAAS,CAAC,mBAAmB,GAAG,eAAe,CAAC,mBAAmB,CAAC;IACpE,SAAS,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;IAC9C,iEAAiE;IACjE,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC5D,CAAC"}