@ashlr/hub 3.10.0 → 3.11.0

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 (534) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/README.md +343 -82
  3. package/dist/authority-surface.json +109 -29
  4. package/dist/build-identity.json +2 -2
  5. package/dist/cli/cloud.d.ts +39 -0
  6. package/dist/cli/cloud.js +448 -0
  7. package/dist/cli/cloud.js.map +1 -0
  8. package/dist/cli/completions.js +4 -0
  9. package/dist/cli/completions.js.map +1 -1
  10. package/dist/cli/help.js +2 -0
  11. package/dist/cli/help.js.map +1 -1
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +10 -0
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/core/cloud/backlog.d.ts +17 -0
  16. package/dist/core/cloud/backlog.js +177 -0
  17. package/dist/core/cloud/backlog.js.map +1 -0
  18. package/dist/core/cloud/budget.d.ts +19 -0
  19. package/dist/core/cloud/budget.js +99 -0
  20. package/dist/core/cloud/budget.js.map +1 -0
  21. package/dist/core/cloud/checkout.d.ts +41 -0
  22. package/dist/core/cloud/checkout.js +168 -0
  23. package/dist/core/cloud/checkout.js.map +1 -0
  24. package/dist/core/cloud/cloud-api.d.ts +86 -0
  25. package/dist/core/cloud/cloud-api.js +599 -0
  26. package/dist/core/cloud/cloud-api.js.map +1 -0
  27. package/dist/core/cloud/delivery-contract.d.ts +25 -0
  28. package/dist/core/cloud/delivery-contract.js +138 -0
  29. package/dist/core/cloud/delivery-contract.js.map +1 -0
  30. package/dist/core/cloud/improvement-backlog.d.ts +11 -0
  31. package/dist/core/cloud/improvement-backlog.js +26 -0
  32. package/dist/core/cloud/improvement-backlog.js.map +1 -0
  33. package/dist/core/cloud/launcher.d.ts +68 -0
  34. package/dist/core/cloud/launcher.js +312 -0
  35. package/dist/core/cloud/launcher.js.map +1 -0
  36. package/dist/core/cloud/service.d.ts +51 -0
  37. package/dist/core/cloud/service.js +215 -0
  38. package/dist/core/cloud/service.js.map +1 -0
  39. package/dist/core/cloud/store.d.ts +41 -0
  40. package/dist/core/cloud/store.js +278 -0
  41. package/dist/core/cloud/store.js.map +1 -0
  42. package/dist/core/cloud/tracker.d.ts +30 -0
  43. package/dist/core/cloud/tracker.js +152 -0
  44. package/dist/core/cloud/tracker.js.map +1 -0
  45. package/dist/core/cloud/types.d.ts +233 -0
  46. package/dist/core/cloud/types.js +73 -0
  47. package/dist/core/cloud/types.js.map +1 -0
  48. package/dist/core/daemon/capacity-publisher.d.ts +19 -0
  49. package/dist/core/daemon/capacity-publisher.js +49 -2
  50. package/dist/core/daemon/capacity-publisher.js.map +1 -1
  51. package/dist/core/daemon/overnight-status.d.ts +13 -0
  52. package/dist/core/daemon/overnight-status.js +93 -8
  53. package/dist/core/daemon/overnight-status.js.map +1 -1
  54. package/dist/core/fleet/dispatch-router.js +26 -9
  55. package/dist/core/fleet/dispatch-router.js.map +1 -1
  56. package/dist/core/fleet/fleet-runtime-journal.js +12 -5
  57. package/dist/core/fleet/fleet-runtime-journal.js.map +1 -1
  58. package/dist/core/fleet/fleet-types.d.ts +13 -0
  59. package/dist/core/routing/budget-store.js +11 -5
  60. package/dist/core/routing/budget-store.js.map +1 -1
  61. package/dist/core/routing/capacity-history-api.d.ts +30 -0
  62. package/dist/core/routing/capacity-history-api.js +147 -0
  63. package/dist/core/routing/capacity-history-api.js.map +1 -0
  64. package/dist/core/routing/capacity-history-types.d.ts +63 -0
  65. package/dist/core/routing/capacity-history-types.js +18 -0
  66. package/dist/core/routing/capacity-history-types.js.map +1 -0
  67. package/dist/core/routing/capacity-history.d.ts +130 -0
  68. package/dist/core/routing/capacity-history.js +654 -0
  69. package/dist/core/routing/capacity-history.js.map +1 -0
  70. package/dist/core/routing/headroom.d.ts +5 -1
  71. package/dist/core/routing/headroom.js +82 -41
  72. package/dist/core/routing/headroom.js.map +1 -1
  73. package/dist/core/routing/router.d.ts +8 -1
  74. package/dist/core/routing/router.js +49 -16
  75. package/dist/core/routing/router.js.map +1 -1
  76. package/dist/core/routing/seat-reasons.d.ts +35 -0
  77. package/dist/core/routing/seat-reasons.js +48 -0
  78. package/dist/core/routing/seat-reasons.js.map +1 -0
  79. package/dist/core/routing/types.d.ts +37 -0
  80. package/dist/core/routing/types.js.map +1 -1
  81. package/dist/core/verse/activity-api.d.ts +3 -1
  82. package/dist/core/verse/activity-api.js +16 -1
  83. package/dist/core/verse/activity-api.js.map +1 -1
  84. package/dist/core/verse/activity.d.ts +7 -0
  85. package/dist/core/verse/activity.js +23 -0
  86. package/dist/core/verse/activity.js.map +1 -1
  87. package/dist/core/verse/fleet-history-types.d.ts +12 -4
  88. package/dist/core/verse/fleet-history-types.js +4 -2
  89. package/dist/core/verse/fleet-history-types.js.map +1 -1
  90. package/dist/core/verse/fleet-live-api.d.ts +14 -1
  91. package/dist/core/verse/fleet-live-api.js +31 -11
  92. package/dist/core/verse/fleet-live-api.js.map +1 -1
  93. package/dist/core/verse/preferences.d.ts +3 -1
  94. package/dist/core/verse/preferences.js +5 -2
  95. package/dist/core/verse/preferences.js.map +1 -1
  96. package/dist/core/verse/types.d.ts +5 -1
  97. package/dist/core/verse/types.js.map +1 -1
  98. package/dist/core/verse/verse-api.d.ts +1 -1
  99. package/dist/core/verse/verse-api.js +4 -1
  100. package/dist/core/verse/verse-api.js.map +1 -1
  101. package/dist/core/vision/leader-cloud.d.ts +63 -0
  102. package/dist/core/vision/leader-cloud.js +134 -0
  103. package/dist/core/vision/leader-cloud.js.map +1 -0
  104. package/dist/core/vision/leader.d.ts +6 -0
  105. package/dist/core/vision/leader.js +12 -1
  106. package/dist/core/vision/leader.js.map +1 -1
  107. package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js → ActionMenu-CQvNJvHY.js} +2 -2
  108. package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js.map → ActionMenu-CQvNJvHY.js.map} +1 -1
  109. package/dist/core/web/public/next/assets/Advanced-Bywv_iYR.css +1 -0
  110. package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js +2 -0
  111. package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js.map +1 -0
  112. package/dist/core/web/public/next/assets/{App-DyBg1v_q.js → App-CimXmK0L.js} +5 -5
  113. package/dist/core/web/public/next/assets/{App-DyBg1v_q.js.map → App-CimXmK0L.js.map} +1 -1
  114. package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js +2 -0
  115. package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js.map +1 -0
  116. package/dist/core/web/public/next/assets/AreaTrend-LD9lCPkT.js +2 -0
  117. package/dist/core/web/public/next/assets/AreaTrend-LD9lCPkT.js.map +1 -0
  118. package/dist/core/web/public/next/assets/AutonomySection-3V9pUyxm.js +2 -0
  119. package/dist/core/web/public/next/assets/{AutonomySection-CoMngwNB.js.map → AutonomySection-3V9pUyxm.js.map} +1 -1
  120. package/dist/core/web/public/next/assets/BranchBar-BZNQ50YE.css +1 -0
  121. package/dist/core/web/public/next/assets/BranchBar-U8UdpfEB.js +2 -0
  122. package/dist/core/web/public/next/assets/BranchBar-U8UdpfEB.js.map +1 -0
  123. package/dist/core/web/public/next/assets/BudgetControl-DOTlMSmW.js +2 -0
  124. package/dist/core/web/public/next/assets/BudgetControl-DOTlMSmW.js.map +1 -0
  125. package/dist/core/web/public/next/assets/BurnDown-x4PWH9JF.js +2 -0
  126. package/dist/core/web/public/next/assets/BurnDown-x4PWH9JF.js.map +1 -0
  127. package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js → Button-DYv_KKxr.js} +2 -2
  128. package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js.map → Button-DYv_KKxr.js.map} +1 -1
  129. package/dist/core/web/public/next/assets/CapacityStrip-C667yQe8.js +2 -0
  130. package/dist/core/web/public/next/assets/CapacityStrip-C667yQe8.js.map +1 -0
  131. package/dist/core/web/public/next/assets/CapacityStrip-Cc28CyWk.css +1 -0
  132. package/dist/core/web/public/next/assets/ChatSection-CCcIPpOq.js +3 -0
  133. package/dist/core/web/public/next/assets/{ChatSection-B9cdRKUh.js.map → ChatSection-CCcIPpOq.js.map} +1 -1
  134. package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js +2 -0
  135. package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js.map +1 -0
  136. package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js → CommandPalette-FiD4N8XD.js} +2 -2
  137. package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js.map → CommandPalette-FiD4N8XD.js.map} +1 -1
  138. package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js +2 -0
  139. package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js.map +1 -0
  140. package/dist/core/web/public/next/assets/Composer-ByzxOJK6.css +1 -0
  141. package/dist/core/web/public/next/assets/Composer.module-C8U73KdQ.js +2 -0
  142. package/dist/core/web/public/next/assets/{Composer.module-DJMdrqNt.js.map → Composer.module-C8U73KdQ.js.map} +1 -1
  143. package/dist/core/web/public/next/assets/DiffPane-BAvvbBsf.css +1 -0
  144. package/dist/core/web/public/next/assets/DiffPane-DLJ3gGGK.js +2 -0
  145. package/dist/core/web/public/next/assets/DiffPane-DLJ3gGGK.js.map +1 -0
  146. package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js → DiffViewer-B7NWPjIO.js} +2 -2
  147. package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js.map → DiffViewer-B7NWPjIO.js.map} +1 -1
  148. package/dist/core/web/public/next/assets/DockHost-B4RaYOET.css +1 -0
  149. package/dist/core/web/public/next/assets/DockHost-DvR-hPhZ.js +2 -0
  150. package/dist/core/web/public/next/assets/DockHost-DvR-hPhZ.js.map +1 -0
  151. package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js → EmptyState-DhNgDDrF.js} +2 -2
  152. package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js.map → EmptyState-DhNgDDrF.js.map} +1 -1
  153. package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js → Epistemic-uARPnx9x.js} +2 -2
  154. package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js.map → Epistemic-uARPnx9x.js.map} +1 -1
  155. package/dist/core/web/public/next/assets/FleetSection-CFiWeOEs.css +1 -0
  156. package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js +3 -0
  157. package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js.map +1 -0
  158. package/dist/core/web/public/next/assets/Funnel-CL8uHONq.js +2 -0
  159. package/dist/core/web/public/next/assets/Funnel-CL8uHONq.js.map +1 -0
  160. package/dist/core/web/public/next/assets/GearTray-C7k4l_BW.js +2 -0
  161. package/dist/core/web/public/next/assets/GearTray-C7k4l_BW.js.map +1 -0
  162. package/dist/core/web/public/next/assets/GrowthSection-DwdNSGj8.js +2 -0
  163. package/dist/core/web/public/next/assets/GrowthSection-DwdNSGj8.js.map +1 -0
  164. package/dist/core/web/public/next/assets/HandoffDialog-FPVOqOMN.js +2 -0
  165. package/dist/core/web/public/next/assets/HandoffDialog-FPVOqOMN.js.map +1 -0
  166. package/dist/core/web/public/next/assets/{Input-CTu0CycC.js → Input-B9-VLcHS.js} +2 -2
  167. package/dist/core/web/public/next/assets/{Input-CTu0CycC.js.map → Input-B9-VLcHS.js.map} +1 -1
  168. package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js → LeaderCard-4R0BhDzT.js} +2 -2
  169. package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js.map → LeaderCard-4R0BhDzT.js.map} +1 -1
  170. package/dist/core/web/public/next/assets/{MatrixHeatmap-9dKgJ_pT.css → MatrixHeatmap-Bmnvo1l1.css} +1 -1
  171. package/dist/core/web/public/next/assets/MatrixHeatmap-DiuushcS.js +2 -0
  172. package/dist/core/web/public/next/assets/MatrixHeatmap-DiuushcS.js.map +1 -0
  173. package/dist/core/web/public/next/assets/McpSection-CJ__OJKl.js +2 -0
  174. package/dist/core/web/public/next/assets/{McpSection-1UncWBpW.js.map → McpSection-CJ__OJKl.js.map} +1 -1
  175. package/dist/core/web/public/next/assets/MessageMarkdown-Cgh5f1-Q.css +1 -0
  176. package/dist/core/web/public/next/assets/MessageMarkdown-qWKyJvAQ.js +3 -0
  177. package/dist/core/web/public/next/assets/{MessageMarkdown-C4pl9LI5.js.map → MessageMarkdown-qWKyJvAQ.js.map} +1 -1
  178. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js → MessageMarkdownRenderer-x05TrsrW.js} +2 -2
  179. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js.map → MessageMarkdownRenderer-x05TrsrW.js.map} +1 -1
  180. package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js → Meter-D-hncpkO.js} +2 -2
  181. package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js.map → Meter-D-hncpkO.js.map} +1 -1
  182. package/dist/core/web/public/next/assets/MindSection-BjXHkQPS.js +2 -0
  183. package/dist/core/web/public/next/assets/MindSection-BjXHkQPS.js.map +1 -0
  184. package/dist/core/web/public/next/assets/MutationTokenDialog-SkRxqV_I.js +2 -0
  185. package/dist/core/web/public/next/assets/MutationTokenDialog-SkRxqV_I.js.map +1 -0
  186. package/dist/core/web/public/next/assets/NeedsYouDrawer-BpvidnM2.css +1 -0
  187. package/dist/core/web/public/next/assets/NeedsYouDrawer-rSd1ZHAR.js +2 -0
  188. package/dist/core/web/public/next/assets/NeedsYouDrawer-rSd1ZHAR.js.map +1 -0
  189. package/dist/core/web/public/next/assets/NeedsYouList-CG-nB1tr.js +2 -0
  190. package/dist/core/web/public/next/assets/NeedsYouList-CG-nB1tr.js.map +1 -0
  191. package/dist/core/web/public/next/assets/NeedsYouList-CruOt4JT.css +1 -0
  192. package/dist/core/web/public/next/assets/NewChatDialog-BeDQ1eW3.js +3 -0
  193. package/dist/core/web/public/next/assets/{NewChatDialog-B_BsS9pr.js.map → NewChatDialog-BeDQ1eW3.js.map} +1 -1
  194. package/dist/core/web/public/next/assets/OnboardingFlow-CkTZtt-m.js +2 -0
  195. package/dist/core/web/public/next/assets/{OnboardingFlow-CtCPpgoX.js.map → OnboardingFlow-CkTZtt-m.js.map} +1 -1
  196. package/dist/core/web/public/next/assets/PreviewPane-DoMsJSG3.css +1 -0
  197. package/dist/core/web/public/next/assets/PreviewPane-kzbbSK4u.js +2 -0
  198. package/dist/core/web/public/next/assets/PreviewPane-kzbbSK4u.js.map +1 -0
  199. package/dist/core/web/public/next/assets/RailStatus-D-t2gPae.js +2 -0
  200. package/dist/core/web/public/next/assets/RailStatus-D-t2gPae.js.map +1 -0
  201. package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js → RefreshIndicator-BLnr9IOM.js} +2 -2
  202. package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js.map → RefreshIndicator-BLnr9IOM.js.map} +1 -1
  203. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js → ResourcePoolConsoleApp-BeG0gBif.js} +4 -4
  204. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js.map → ResourcePoolConsoleApp-BeG0gBif.js.map} +1 -1
  205. package/dist/core/web/public/next/assets/ResourcesChrome-B3Z3O98t.css +1 -0
  206. package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js +3 -0
  207. package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js.map +1 -0
  208. package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +1 -0
  209. package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js +2 -0
  210. package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js.map +1 -0
  211. package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js → RouteErrorBoundary-C5SxA2Dg.js} +2 -2
  212. package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js.map → RouteErrorBoundary-C5SxA2Dg.js.map} +1 -1
  213. package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js +2 -0
  214. package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js.map +1 -0
  215. package/dist/core/web/public/next/assets/SeatSelector-DpvvbjNm.js +3 -0
  216. package/dist/core/web/public/next/assets/{SeatSelector-DaUO-zoK.js.map → SeatSelector-DpvvbjNm.js.map} +1 -1
  217. package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js → Segmented-BL40udoO.js} +2 -2
  218. package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js.map → Segmented-BL40udoO.js.map} +1 -1
  219. package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js → Select-FWLnAw_j.js} +2 -2
  220. package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js.map → Select-FWLnAw_j.js.map} +1 -1
  221. package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js → SessionInsightChip-CWye87Ju.js} +2 -2
  222. package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js.map → SessionInsightChip-CWye87Ju.js.map} +1 -1
  223. package/dist/core/web/public/next/assets/SessionSearch-YvCHFUuN.js +2 -0
  224. package/dist/core/web/public/next/assets/{SessionSearch-B5aQ0BCM.js.map → SessionSearch-YvCHFUuN.js.map} +1 -1
  225. package/dist/core/web/public/next/assets/SettingsSection-Dr18upeE.js +2 -0
  226. package/dist/core/web/public/next/assets/SettingsSection-Dr18upeE.js.map +1 -0
  227. package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js → Sheet-DZKcQXQg.js} +2 -2
  228. package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js.map → Sheet-DZKcQXQg.js.map} +1 -1
  229. package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js → ShortcutsOverlay-BpDimdPq.js} +2 -2
  230. package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js.map → ShortcutsOverlay-BpDimdPq.js.map} +1 -1
  231. package/dist/core/web/public/next/assets/Sidebar-BRc1vGDF.css +1 -0
  232. package/dist/core/web/public/next/assets/Sidebar-BoBzBEFX.js +3 -0
  233. package/dist/core/web/public/next/assets/Sidebar-BoBzBEFX.js.map +1 -0
  234. package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js → Slider-DUMo9HDD.js} +2 -2
  235. package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js.map → Slider-DUMo9HDD.js.map} +1 -1
  236. package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js → StatusBadge-BwnBNFQr.js} +2 -2
  237. package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js.map → StatusBadge-BwnBNFQr.js.map} +1 -1
  238. package/dist/core/web/public/next/assets/StepBand-PDXMIlRk.js +2 -0
  239. package/dist/core/web/public/next/assets/StepBand-PDXMIlRk.js.map +1 -0
  240. package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js → Surface-B3TZVoER.js} +2 -2
  241. package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js.map → Surface-B3TZVoER.js.map} +1 -1
  242. package/dist/core/web/public/next/assets/Swimlane-DR4OgON_.js +2 -0
  243. package/dist/core/web/public/next/assets/Swimlane-DR4OgON_.js.map +1 -0
  244. package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js → Switch-CcR5Llk5.js} +2 -2
  245. package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js.map → Switch-CcR5Llk5.js.map} +1 -1
  246. package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js → Tag-_-K1h7Hk.js} +2 -2
  247. package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js.map → Tag-_-K1h7Hk.js.map} +1 -1
  248. package/dist/core/web/public/next/assets/TerminalPane-BwfMbnJz.css +1 -0
  249. package/dist/core/web/public/next/assets/TerminalPane-_1aH4ndN.js +7 -0
  250. package/dist/core/web/public/next/assets/TerminalPane-_1aH4ndN.js.map +1 -0
  251. package/dist/core/web/public/next/assets/UniverseConsoleApp-BUsq-inZ.js +2 -0
  252. package/dist/core/web/public/next/assets/{UniverseConsoleApp-DKqAf-eD.js.map → UniverseConsoleApp-BUsq-inZ.js.map} +1 -1
  253. package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js → UniverseView-Dogy_dsB.js} +2 -2
  254. package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js.map → UniverseView-Dogy_dsB.js.map} +1 -1
  255. package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js +2 -0
  256. package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js.map +1 -0
  257. package/dist/core/web/public/next/assets/UsageSection-DsB-Jqyl.css +1 -0
  258. package/dist/core/web/public/next/assets/VerseConsoleApp-Cxqr-3qc.css +1 -0
  259. package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js +3 -0
  260. package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js.map +1 -0
  261. package/dist/core/web/public/next/assets/Workspace-BYW9dm90.css +1 -0
  262. package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js +10 -0
  263. package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js.map +1 -0
  264. package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +1 -0
  265. package/dist/core/web/public/next/assets/actions-s2lfm_5k.js +2 -0
  266. package/dist/core/web/public/next/assets/actions-s2lfm_5k.js.map +1 -0
  267. package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +2 -0
  268. package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +1 -0
  269. package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js → budget-queries-wUshcovN.js} +2 -2
  270. package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js.map → budget-queries-wUshcovN.js.map} +1 -1
  271. package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js +2 -0
  272. package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js.map +1 -0
  273. package/dist/core/web/public/next/assets/capacity-strip-model-Bj_9ztzs.js +2 -0
  274. package/dist/core/web/public/next/assets/capacity-strip-model-Bj_9ztzs.js.map +1 -0
  275. package/dist/core/web/public/next/assets/charts-CMSgAUKn.js +2 -0
  276. package/dist/core/web/public/next/assets/charts-CMSgAUKn.js.map +1 -0
  277. package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +1 -0
  278. package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js +2 -0
  279. package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js.map +1 -0
  280. package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js +2 -0
  281. package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js.map +1 -0
  282. package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js +2 -0
  283. package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js.map +1 -0
  284. package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js → command-bus-DqimKCUY.js} +2 -2
  285. package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js.map → command-bus-DqimKCUY.js.map} +1 -1
  286. package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js +2 -0
  287. package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js.map +1 -0
  288. package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js → composer-keys-DBRymxQn.js} +2 -2
  289. package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js.map → composer-keys-DBRymxQn.js.map} +1 -1
  290. package/dist/core/web/public/next/assets/context-model-Dwd49-dp.js +2 -0
  291. package/dist/core/web/public/next/assets/context-model-Dwd49-dp.js.map +1 -0
  292. package/dist/core/web/public/next/assets/context-model-MT17V86_.js +2 -0
  293. package/dist/core/web/public/next/assets/context-model-MT17V86_.js.map +1 -0
  294. package/dist/core/web/public/next/assets/context-queries-xVKIeynP.js +2 -0
  295. package/dist/core/web/public/next/assets/context-queries-xVKIeynP.js.map +1 -0
  296. package/dist/core/web/public/next/assets/context.module-BijAfoJw.js +2 -0
  297. package/dist/core/web/public/next/assets/context.module-BijAfoJw.js.map +1 -0
  298. package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js → control-queries-DOZR-D8G.js} +2 -2
  299. package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js.map → control-queries-DOZR-D8G.js.map} +1 -1
  300. package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +2 -0
  301. package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +1 -0
  302. package/dist/core/web/public/next/assets/dock-icons-8EtARwUm.js +2 -0
  303. package/dist/core/web/public/next/assets/dock-icons-8EtARwUm.js.map +1 -0
  304. package/dist/core/web/public/next/assets/dock-panes-UKS-mXhr.js +2 -0
  305. package/dist/core/web/public/next/assets/{dock-panes-BNTLvX7G.js.map → dock-panes-UKS-mXhr.js.map} +1 -1
  306. package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js → dock-store-BA1cHOYA.js} +2 -2
  307. package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js.map → dock-store-BA1cHOYA.js.map} +1 -1
  308. package/dist/core/web/public/next/assets/fleet-model-CNe8Wh-s.js +2 -0
  309. package/dist/core/web/public/next/assets/fleet-model-CNe8Wh-s.js.map +1 -0
  310. package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js +2 -0
  311. package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js.map +1 -0
  312. package/dist/core/web/public/next/assets/format-B8DAVcn2.js +2 -0
  313. package/dist/core/web/public/next/assets/format-B8DAVcn2.js.map +1 -0
  314. package/dist/core/web/public/next/assets/format-DKrNjdwD.js +2 -0
  315. package/dist/core/web/public/next/assets/format-DKrNjdwD.js.map +1 -0
  316. package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js → git-model-CivuBY_D.js} +2 -2
  317. package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js.map → git-model-CivuBY_D.js.map} +1 -1
  318. package/dist/core/web/public/next/assets/global-Di2PUgj4.js +2 -0
  319. package/dist/core/web/public/next/assets/global-Di2PUgj4.js.map +1 -0
  320. package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js → guarded-action-CvOHcqyH.js} +2 -2
  321. package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js.map → guarded-action-CvOHcqyH.js.map} +1 -1
  322. package/dist/core/web/public/next/assets/{icons-DWb24OA6.js → icons-B_yuAgdN.js} +2 -2
  323. package/dist/core/web/public/next/assets/{icons-DWb24OA6.js.map → icons-B_yuAgdN.js.map} +1 -1
  324. package/dist/core/web/public/next/assets/{index-afDA8cwW.js → index-oAAq8XJa.js} +3 -3
  325. package/dist/core/web/public/next/assets/{index-afDA8cwW.js.map → index-oAAq8XJa.js.map} +1 -1
  326. package/dist/core/web/public/next/assets/live-model-DCw_IFRI.js +2 -0
  327. package/dist/core/web/public/next/assets/live-model-DCw_IFRI.js.map +1 -0
  328. package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +2 -0
  329. package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +1 -0
  330. package/dist/core/web/public/next/assets/mind-B9PzLcl0.css +1 -0
  331. package/dist/core/web/public/next/assets/mind.module-vnuJcwvD.js +2 -0
  332. package/dist/core/web/public/next/assets/mind.module-vnuJcwvD.js.map +1 -0
  333. package/dist/core/web/public/next/assets/mutations-Dpsql5t7.js +2 -0
  334. package/dist/core/web/public/next/assets/{mutations-C6E10SPX.js.map → mutations-Dpsql5t7.js.map} +1 -1
  335. package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js → overnight-queries-X-44Gsw5.js} +2 -2
  336. package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js.map → overnight-queries-X-44Gsw5.js.map} +1 -1
  337. package/dist/core/web/public/next/assets/pane-chrome-8JmEhHVD.css +1 -0
  338. package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js +2 -0
  339. package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js.map +1 -0
  340. package/dist/core/web/public/next/assets/primitives-BDIcUvob.js +1 -0
  341. package/dist/core/web/public/next/assets/{queries-BuYIEHst.js → queries-BA4rNGD-.js} +2 -2
  342. package/dist/core/web/public/next/assets/{queries-BuYIEHst.js.map → queries-BA4rNGD-.js.map} +1 -1
  343. package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js → reasoning-pref-B9-DJUXP.js} +2 -2
  344. package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js.map → reasoning-pref-B9-DJUXP.js.map} +1 -1
  345. package/dist/core/web/public/next/assets/seat-subscription-CH6fW4fJ.js +2 -0
  346. package/dist/core/web/public/next/assets/seat-subscription-CH6fW4fJ.js.map +1 -0
  347. package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js → section-visibility-qFqc_d4Z.js} +2 -2
  348. package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js.map → section-visibility-qFqc_d4Z.js.map} +1 -1
  349. package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js → sidebar-model-M1GaQU5l.js} +2 -2
  350. package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js.map → sidebar-model-M1GaQU5l.js.map} +1 -1
  351. package/dist/core/web/public/next/assets/slots-Ds9ZIqUL.js +3 -0
  352. package/dist/core/web/public/next/assets/{slots-W8gkmdfE.js.map → slots-Ds9ZIqUL.js.map} +1 -1
  353. package/dist/core/web/public/next/assets/surface-data-J52iIGMD.js +2 -0
  354. package/dist/core/web/public/next/assets/surface-data-J52iIGMD.js.map +1 -0
  355. package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js +2 -0
  356. package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js.map +1 -0
  357. package/dist/core/web/public/next/assets/tasks-model-ent8f0jZ.js +2 -0
  358. package/dist/core/web/public/next/assets/{tasks-model-CnYQzgxk.js.map → tasks-model-ent8f0jZ.js.map} +1 -1
  359. package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js → terminal-icons-DJTK7QpR.js} +2 -2
  360. package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js.map → terminal-icons-DJTK7QpR.js.map} +1 -1
  361. package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js → tool-semantics-GX8ScuSH.js} +2 -2
  362. package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js.map → tool-semantics-GX8ScuSH.js.map} +1 -1
  363. package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js → turn-files-BPHQzYuH.js} +2 -2
  364. package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js.map → turn-files-BPHQzYuH.js.map} +1 -1
  365. package/dist/core/web/public/next/assets/types-D5XOdyw8.js +2 -0
  366. package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -0
  367. package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js → usage-queries-Bn8ccqyN.js} +2 -2
  368. package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js.map → usage-queries-Bn8ccqyN.js.map} +1 -1
  369. package/dist/core/web/public/next/assets/use-guarded-action-C2HlSzkz.js +2 -0
  370. package/dist/core/web/public/next/assets/use-guarded-action-C2HlSzkz.js.map +1 -0
  371. package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js → use-ticker-BNc1H4ZC.js} +2 -2
  372. package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js.map → use-ticker-BNc1H4ZC.js.map} +1 -1
  373. package/dist/core/web/public/next/assets/use-token-gate-B3IJL6bf.js +2 -0
  374. package/dist/core/web/public/next/assets/use-token-gate-B3IJL6bf.js.map +1 -0
  375. package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js → useActivity-Bk3XgXjL.js} +2 -2
  376. package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js.map → useActivity-Bk3XgXjL.js.map} +1 -1
  377. package/dist/core/web/public/next/assets/useChartWidth-BAtVgn2n.css +1 -0
  378. package/dist/core/web/public/next/assets/useChartWidth-lZ9PrQn0.js +2 -0
  379. package/dist/core/web/public/next/assets/useChartWidth-lZ9PrQn0.js.map +1 -0
  380. package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js → useSeatsRefresh-CG4jczeL.js} +2 -2
  381. package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js.map → useSeatsRefresh-CG4jczeL.js.map} +1 -1
  382. package/dist/core/web/public/next/assets/verse-model-D7NZQFAR.js +2 -0
  383. package/dist/core/web/public/next/assets/verse-model-D7NZQFAR.js.map +1 -0
  384. package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js → verse-queries-DvIJcn6Z.js} +2 -2
  385. package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js.map → verse-queries-DvIJcn6Z.js.map} +1 -1
  386. package/dist/core/web/public/next/assets/verse-store-DjBWj04q.js +3 -0
  387. package/dist/core/web/public/next/assets/verse-store-DjBWj04q.js.map +1 -0
  388. package/dist/core/web/public/next/assets/verse-ui-store-zafyzXKD.js +3 -0
  389. package/dist/core/web/public/next/assets/{verse-ui-store-KTTKfv-T.js.map → verse-ui-store-zafyzXKD.js.map} +1 -1
  390. package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js → viewport-BEqGUoTA.js} +2 -2
  391. package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js.map → viewport-BEqGUoTA.js.map} +1 -1
  392. package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js +3 -0
  393. package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js.map +1 -0
  394. package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js → workspace-model-D_tWD5Wt.js} +2 -2
  395. package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js.map → workspace-model-D_tWD5Wt.js.map} +1 -1
  396. package/dist/core/web/public/next/index.html +1 -1
  397. package/dist/release-dependency-inventory.json +1 -1
  398. package/package.json +1 -1
  399. package/dist/core/web/public/next/assets/Advanced-CHjxJt2z.css +0 -1
  400. package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js +0 -2
  401. package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js.map +0 -1
  402. package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js +0 -2
  403. package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js.map +0 -1
  404. package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js +0 -2
  405. package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js.map +0 -1
  406. package/dist/core/web/public/next/assets/AutonomySection-CoMngwNB.js +0 -2
  407. package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js +0 -2
  408. package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js.map +0 -1
  409. package/dist/core/web/public/next/assets/BranchBar-C9BpPVLr.css +0 -1
  410. package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js +0 -2
  411. package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js.map +0 -1
  412. package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js +0 -2
  413. package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js.map +0 -1
  414. package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js +0 -2
  415. package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js.map +0 -1
  416. package/dist/core/web/public/next/assets/CapacityStrip-wgFP9MUA.css +0 -1
  417. package/dist/core/web/public/next/assets/ChatSection-B9cdRKUh.js +0 -3
  418. package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js +0 -2
  419. package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js.map +0 -1
  420. package/dist/core/web/public/next/assets/Composer-CkcwbQhG.css +0 -1
  421. package/dist/core/web/public/next/assets/Composer.module-DJMdrqNt.js +0 -2
  422. package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js +0 -2
  423. package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js.map +0 -1
  424. package/dist/core/web/public/next/assets/DiffPane-Csboxnn0.css +0 -1
  425. package/dist/core/web/public/next/assets/DockHost-BGnTgdIb.css +0 -1
  426. package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js +0 -2
  427. package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js.map +0 -1
  428. package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js +0 -3
  429. package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js.map +0 -1
  430. package/dist/core/web/public/next/assets/FleetSection-w9AjqfTR.css +0 -1
  431. package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js +0 -2
  432. package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js.map +0 -1
  433. package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js +0 -2
  434. package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js.map +0 -1
  435. package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js +0 -2
  436. package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js.map +0 -1
  437. package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js +0 -2
  438. package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js.map +0 -1
  439. package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js +0 -2
  440. package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js.map +0 -1
  441. package/dist/core/web/public/next/assets/McpSection-1UncWBpW.js +0 -2
  442. package/dist/core/web/public/next/assets/MessageMarkdown-C4pl9LI5.js +0 -3
  443. package/dist/core/web/public/next/assets/MessageMarkdown-Czcl3L_Q.css +0 -1
  444. package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js +0 -2
  445. package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js.map +0 -1
  446. package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js +0 -2
  447. package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js.map +0 -1
  448. package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js +0 -2
  449. package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js.map +0 -1
  450. package/dist/core/web/public/next/assets/NeedsYouDrawer-SkhvvdLb.css +0 -1
  451. package/dist/core/web/public/next/assets/NewChatDialog-B_BsS9pr.js +0 -3
  452. package/dist/core/web/public/next/assets/OnboardingFlow-CtCPpgoX.js +0 -2
  453. package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js +0 -2
  454. package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js.map +0 -1
  455. package/dist/core/web/public/next/assets/PreviewPane-WQJFjSXe.css +0 -1
  456. package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js +0 -2
  457. package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js.map +0 -1
  458. package/dist/core/web/public/next/assets/SeatSelector-DaUO-zoK.js +0 -3
  459. package/dist/core/web/public/next/assets/SessionSearch-B5aQ0BCM.js +0 -2
  460. package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js +0 -2
  461. package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js.map +0 -1
  462. package/dist/core/web/public/next/assets/Sidebar-DfD8MNZt.css +0 -1
  463. package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js +0 -3
  464. package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js.map +0 -1
  465. package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js +0 -2
  466. package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js.map +0 -1
  467. package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js +0 -2
  468. package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js.map +0 -1
  469. package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js +0 -7
  470. package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js.map +0 -1
  471. package/dist/core/web/public/next/assets/TerminalPane-CmE2QL-Q.css +0 -1
  472. package/dist/core/web/public/next/assets/UniverseConsoleApp-DKqAf-eD.js +0 -2
  473. package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js +0 -2
  474. package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js.map +0 -1
  475. package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +0 -1
  476. package/dist/core/web/public/next/assets/VerseConsoleApp-C0V221WL.css +0 -1
  477. package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js +0 -3
  478. package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js.map +0 -1
  479. package/dist/core/web/public/next/assets/Workspace-DQXMVDf7.css +0 -1
  480. package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js +0 -10
  481. package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js.map +0 -1
  482. package/dist/core/web/public/next/assets/actions-Bszsdpms.js +0 -2
  483. package/dist/core/web/public/next/assets/actions-Bszsdpms.js.map +0 -1
  484. package/dist/core/web/public/next/assets/actions-Dug8YIf0.css +0 -1
  485. package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js +0 -2
  486. package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js.map +0 -1
  487. package/dist/core/web/public/next/assets/charts-D4NaLaXA.js +0 -2
  488. package/dist/core/web/public/next/assets/charts-D4NaLaXA.js.map +0 -1
  489. package/dist/core/web/public/next/assets/colors-B-vHsX1S.js +0 -2
  490. package/dist/core/web/public/next/assets/colors-B-vHsX1S.js.map +0 -1
  491. package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js +0 -2
  492. package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js.map +0 -1
  493. package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js +0 -2
  494. package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js.map +0 -1
  495. package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js +0 -2
  496. package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js.map +0 -1
  497. package/dist/core/web/public/next/assets/context.module-B_k02HNU.js +0 -2
  498. package/dist/core/web/public/next/assets/context.module-B_k02HNU.js.map +0 -1
  499. package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js +0 -2
  500. package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js.map +0 -1
  501. package/dist/core/web/public/next/assets/dock-panes-BNTLvX7G.js +0 -2
  502. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +0 -2
  503. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +0 -1
  504. package/dist/core/web/public/next/assets/format-BNYWGJat.js +0 -2
  505. package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +0 -1
  506. package/dist/core/web/public/next/assets/global-DVgMguLr.js +0 -2
  507. package/dist/core/web/public/next/assets/global-DVgMguLr.js.map +0 -1
  508. package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js +0 -2
  509. package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js.map +0 -1
  510. package/dist/core/web/public/next/assets/mind-B-lYfSUJ.css +0 -1
  511. package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js +0 -2
  512. package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js.map +0 -1
  513. package/dist/core/web/public/next/assets/mutations-C6E10SPX.js +0 -2
  514. package/dist/core/web/public/next/assets/primitives-DQvYikjm.js +0 -1
  515. package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js +0 -2
  516. package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js.map +0 -1
  517. package/dist/core/web/public/next/assets/slots-W8gkmdfE.js +0 -3
  518. package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js +0 -2
  519. package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js.map +0 -1
  520. package/dist/core/web/public/next/assets/tasks-model-CnYQzgxk.js +0 -2
  521. package/dist/core/web/public/next/assets/types-Dypu22dp.js +0 -3
  522. package/dist/core/web/public/next/assets/types-Dypu22dp.js.map +0 -1
  523. package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js +0 -2
  524. package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js.map +0 -1
  525. package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js +0 -2
  526. package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js.map +0 -1
  527. package/dist/core/web/public/next/assets/useChartWidth-B8E5mJgM.css +0 -1
  528. package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js +0 -2
  529. package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js.map +0 -1
  530. package/dist/core/web/public/next/assets/verse-model-E98kXngO.js +0 -2
  531. package/dist/core/web/public/next/assets/verse-model-E98kXngO.js.map +0 -1
  532. package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js +0 -2
  533. package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js.map +0 -1
  534. package/dist/core/web/public/next/assets/verse-ui-store-KTTKfv-T.js +0 -3
@@ -0,0 +1,599 @@
1
+ import { passesMutationGate, readBody, sendJson } from '../web/api.js';
2
+ import { scrubSecrets } from '../util/scrub.js';
3
+ import { isNeedsYouItem, NEEDS_YOU_DETAIL_MAX, NEEDS_YOU_TITLE_MAX, } from '../verse/workbench-types.js';
4
+ import { cloudBudgetView } from './budget.js';
5
+ import { cloudOverview, launchCloudTask, runSelfImprove } from './service.js';
6
+ import { listCloudTasks, readCloudTask, updateCloudBudget, writeCloudTask } from './store.js';
7
+ import { refreshCloudTasks } from './tracker.js';
8
+ import { CLOUD_TASK_ID_PATTERN, VERSE_CLOUD_BUDGET_PATH, VERSE_CLOUD_IMPROVE_PATH, VERSE_CLOUD_LAUNCH_PATH, VERSE_CLOUD_PATH, VERSE_CLOUD_REFRESH_PATH, VERSE_CLOUD_TASKS_PATH, } from './types.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Input validation (pure, exported for tests)
11
+ // ---------------------------------------------------------------------------
12
+ /** Same shape the service validates (spec C1); checked here too so bad input is a 400, not a failed task. */
13
+ export const CLOUD_REPO_PATTERN = /^[A-Za-z0-9-]+\/[A-Za-z0-9._-]+$/;
14
+ /**
15
+ * A conservative git branch name: what `git check-ref-format --branch`
16
+ * accepts minus the exotic parts. The session clones this branch, so a
17
+ * typo'd or hostile name must stop at the door, not in a PTY.
18
+ */
19
+ const BRANCH_RE = /^[A-Za-z0-9][A-Za-z0-9._/-]{0,199}$/;
20
+ /** Launch bodies carry a prompt of up to CLOUD_PROMPT_MAX_CHARS (20 000) chars — up to 80 KB of UTF-8. */
21
+ const LAUNCH_BODY_MAX_BYTES = 128 * 1024;
22
+ const SMALL_BODY_MAX_BYTES = 4 * 1024;
23
+ const TITLE_MAX = 200;
24
+ const IMPROVE_MAX_COUNT = 5;
25
+ /** Budget figures above this are typos, not budgets ($1M of credits, a million sessions). */
26
+ const BUDGET_NUMBER_MAX = 1_000_000;
27
+ const LAUNCH_KEYS = new Set(['repo', 'baseBranch', 'title', 'prompt', 'origin']);
28
+ const LAUNCH_ORIGINS = ['chat', 'operator', 'cli'];
29
+ const BUDGET_NUMBER_KEYS = ['creditsTotalUsd', 'creditsSpentAdjustmentUsd', 'estimatedCostPerSessionUsd'];
30
+ const BUDGET_COUNT_KEYS = ['maxConcurrent', 'maxSessionsPerDay'];
31
+ const BUDGET_KEYS = new Set([...BUDGET_NUMBER_KEYS, ...BUDGET_COUNT_KEYS, 'selfImprove']);
32
+ const SELF_IMPROVE_KEYS = new Set(['enabled', 'repo', 'maxPerDay', 'reserveUsd']);
33
+ export class CloudInputError extends Error {
34
+ }
35
+ function isRecord(value) {
36
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
37
+ }
38
+ function rejectUnknownKeys(body, allowed, where = '') {
39
+ for (const key of Object.keys(body)) {
40
+ if (!allowed.has(key))
41
+ throw new CloudInputError(`Unknown field ${where}${key}.`);
42
+ }
43
+ }
44
+ export function isValidCloudRepo(value) {
45
+ return typeof value === 'string' && value.length <= 200 && CLOUD_REPO_PATTERN.test(value);
46
+ }
47
+ export function isValidBranchName(value) {
48
+ return typeof value === 'string'
49
+ && BRANCH_RE.test(value)
50
+ && !value.includes('..')
51
+ && !value.includes('//')
52
+ && !value.endsWith('/')
53
+ && !value.endsWith('.')
54
+ && !value.endsWith('.lock');
55
+ }
56
+ /** Strict parse of a launch body; throws CloudInputError with a plain sentence. `origin` defaults to operator. */
57
+ export function parseCloudLaunchBody(body) {
58
+ rejectUnknownKeys(body, LAUNCH_KEYS);
59
+ const { repo, baseBranch, title, prompt, origin } = body;
60
+ if (!isValidCloudRepo(repo))
61
+ throw new CloudInputError('Repo must look like owner/name.');
62
+ if (typeof prompt !== 'string' || prompt.trim().length === 0)
63
+ throw new CloudInputError('Describe the task to run.');
64
+ const out = { repo, prompt, origin: 'operator' };
65
+ if (baseBranch !== undefined) {
66
+ if (!isValidBranchName(baseBranch))
67
+ throw new CloudInputError('Base branch is not a valid branch name.');
68
+ out.baseBranch = baseBranch;
69
+ }
70
+ if (title !== undefined) {
71
+ if (typeof title !== 'string' || title.length > TITLE_MAX) {
72
+ throw new CloudInputError(`Title must be text of at most ${TITLE_MAX} characters.`);
73
+ }
74
+ if (title.trim().length > 0)
75
+ out.title = title.trim();
76
+ }
77
+ if (origin !== undefined) {
78
+ if (!LAUNCH_ORIGINS.includes(origin)) {
79
+ throw new CloudInputError(`Origin must be one of: ${LAUNCH_ORIGINS.join(', ')}.`);
80
+ }
81
+ out.origin = origin;
82
+ }
83
+ return out;
84
+ }
85
+ function budgetNumber(key, value, whole) {
86
+ if (typeof value !== 'number' || !Number.isFinite(value))
87
+ throw new CloudInputError(`${key} must be a number.`);
88
+ if (value < 0)
89
+ throw new CloudInputError(`${key} can't be negative.`);
90
+ if (value > BUDGET_NUMBER_MAX)
91
+ throw new CloudInputError(`${key} is too large.`);
92
+ if (whole && !Number.isInteger(value))
93
+ throw new CloudInputError(`${key} must be a whole number.`);
94
+ return value;
95
+ }
96
+ /**
97
+ * Strict parse of a budget update: types and signs only. Clamping to sane
98
+ * maxima is the store's job (updateCloudBudget), so the two never disagree
99
+ * about what "sane" means.
100
+ */
101
+ export function parseCloudBudgetBody(body) {
102
+ rejectUnknownKeys(body, BUDGET_KEYS);
103
+ const out = {};
104
+ for (const key of BUDGET_NUMBER_KEYS) {
105
+ if (body[key] !== undefined)
106
+ out[key] = budgetNumber(key, body[key], false);
107
+ }
108
+ for (const key of BUDGET_COUNT_KEYS) {
109
+ if (body[key] !== undefined)
110
+ out[key] = budgetNumber(key, body[key], true);
111
+ }
112
+ if (body['selfImprove'] !== undefined) {
113
+ const raw = body['selfImprove'];
114
+ if (!isRecord(raw))
115
+ throw new CloudInputError('selfImprove must be an object.');
116
+ rejectUnknownKeys(raw, SELF_IMPROVE_KEYS, 'selfImprove.');
117
+ const self = {};
118
+ if (raw['enabled'] !== undefined) {
119
+ if (typeof raw['enabled'] !== 'boolean')
120
+ throw new CloudInputError('selfImprove.enabled must be true or false.');
121
+ self.enabled = raw['enabled'];
122
+ }
123
+ if (raw['repo'] !== undefined) {
124
+ if (!isValidCloudRepo(raw['repo']))
125
+ throw new CloudInputError('selfImprove.repo must look like owner/name.');
126
+ self.repo = raw['repo'];
127
+ }
128
+ if (raw['maxPerDay'] !== undefined)
129
+ self.maxPerDay = budgetNumber('selfImprove.maxPerDay', raw['maxPerDay'], true);
130
+ if (raw['reserveUsd'] !== undefined)
131
+ self.reserveUsd = budgetNumber('selfImprove.reserveUsd', raw['reserveUsd'], false);
132
+ if (Object.keys(self).length > 0)
133
+ out.selfImprove = self;
134
+ }
135
+ if (Object.keys(out).length === 0)
136
+ throw new CloudInputError('Nothing to update.');
137
+ return out;
138
+ }
139
+ export function parseCloudImproveBody(body) {
140
+ rejectUnknownKeys(body, new Set(['count']));
141
+ const count = body['count'];
142
+ if (count === undefined)
143
+ return { count: 1 };
144
+ if (typeof count !== 'number' || !Number.isInteger(count) || count < 1 || count > IMPROVE_MAX_COUNT) {
145
+ throw new CloudInputError(`Count must be a whole number from 1 to ${IMPROVE_MAX_COUNT}.`);
146
+ }
147
+ return { count };
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Dismiss (local record only — never GitHub)
151
+ // ---------------------------------------------------------------------------
152
+ export const CLOUD_DISMISS_REASON = 'Dismissed in Verse.';
153
+ /**
154
+ * Mark a task `closed` with "Dismissed in Verse." — idempotent for a task
155
+ * already closed. Refused for a MERGED task (closing it would rewrite what
156
+ * happened) and while a launch is still in flight (the service would then
157
+ * overwrite the dismissal with `running`).
158
+ */
159
+ export function dismissCloudTask(id, now = new Date()) {
160
+ const task = readCloudTask(id);
161
+ if (!task)
162
+ return { ok: false, status: 404, error: 'No cloud task with that id.' };
163
+ if (task.state === 'closed')
164
+ return { ok: true, task };
165
+ if (task.state === 'merged')
166
+ return { ok: false, status: 409, error: 'This task was merged; there is nothing to dismiss.' };
167
+ if (task.state === 'queued' || task.state === 'launching') {
168
+ return { ok: false, status: 409, error: 'This task is still launching. Try again in a minute.' };
169
+ }
170
+ const next = { ...task, state: 'closed', stateReason: CLOUD_DISMISS_REASON, updatedAt: now.toISOString() };
171
+ writeCloudTask(next);
172
+ return { ok: true, task: next };
173
+ }
174
+ // ---------------------------------------------------------------------------
175
+ // Needs-you producer
176
+ // ---------------------------------------------------------------------------
177
+ /** Failed launches stay in Needs-you this long (spec C2). */
178
+ export const CLOUD_FAILED_WINDOW_MS = 24 * 60 * 60 * 1000;
179
+ /** The cache behind needsYouItems() is rebuilt, off the caller's stack, when older than this. */
180
+ const NEEDS_YOU_CACHE_MS = 15_000;
181
+ /** Newest tasks considered for Needs-you — PR-open and fresh failures are always among recent ones. */
182
+ const NEEDS_YOU_TASK_SCAN = 200;
183
+ function clip(text, max) {
184
+ // eslint-disable-next-line no-control-regex
185
+ const flat = text.replace(/[\u0000-\u001f\u007f\u2028\u2029]+/g, ' ').replace(/\s+/g, ' ').trim();
186
+ return flat.length <= max ? flat : `${flat.slice(0, max - 1).trimEnd()}…`;
187
+ }
188
+ function taskTitle(task) {
189
+ const t = clip(task.title ?? '', 80);
190
+ return t.length > 0 ? t : 'Untitled cloud task';
191
+ }
192
+ function dismissAction(task, confirmFirst) {
193
+ return {
194
+ kind: 'done',
195
+ label: 'Dismiss',
196
+ request: { method: 'POST', path: `${VERSE_CLOUD_TASKS_PATH}/${task.id}/dismiss`, body: {} },
197
+ confirm: confirmFirst
198
+ ? {
199
+ title: 'Stop tracking this cloud task?',
200
+ body: 'Verse marks it closed. The pull request on GitHub is not touched.',
201
+ confirmLabel: 'Dismiss',
202
+ }
203
+ : null,
204
+ destructive: false,
205
+ };
206
+ }
207
+ function isoOr(value, fallback) {
208
+ return typeof value === 'string' && !Number.isNaN(Date.parse(value)) ? new Date(value).toISOString() : fallback;
209
+ }
210
+ /**
211
+ * PURE: the Needs-you items for `tasks` at `now`.
212
+ *
213
+ * WHY THESE SOURCES AND KINDS: the Needs-you contract (workbench-types.ts
214
+ * §2) has a closed set of sources and kinds, and the web drawer and the
215
+ * desktop shell switch on both exhaustively, so a new one is not additive.
216
+ * A cloud PR is exactly an `owner-lane-pr` — a PR that is never merged
217
+ * automatically and waits for Mason — filed under `fleet`, the source the
218
+ * drawer already reads for that kind. A failed launch is a failed piece of
219
+ * work the operator started (often from a chat's "Run in cloud"), so it is a
220
+ * `chats` / `chat-failed` item with no session to open.
221
+ */
222
+ export function cloudNeedsYouItems(tasks, now) {
223
+ const nowIso = now.toISOString();
224
+ const out = [];
225
+ for (const task of tasks) {
226
+ let item = null;
227
+ if (task.state === 'pr-open' && task.pr) {
228
+ const report = task.report;
229
+ const summary = report ? scrubSecrets(report.summary) : 'No report yet: the pull request has no ashlr-cloud-report block.';
230
+ const status = report && report.status !== 'done' ? ` (${report.status})` : '';
231
+ item = {
232
+ id: `fleet:owner-lane-pr:cloud-${task.id}`,
233
+ source: 'fleet',
234
+ kind: 'owner-lane-pr',
235
+ severity: 'info',
236
+ title: clip(`Cloud task ready for review: ${taskTitle(task)}`, NEEDS_YOU_TITLE_MAX),
237
+ detail: clip(`${summary}${status}`, NEEDS_YOU_DETAIL_MAX) || null,
238
+ since: isoOr(task.updatedAt, nowIso),
239
+ expiresAt: null,
240
+ subject: { repo: task.repo, pr: task.pr.number, seatId: null, sessionId: null, engine: 'claude' },
241
+ target: { kind: 'url', url: task.pr.url },
242
+ actions: [dismissAction(task, true)],
243
+ };
244
+ }
245
+ else if (task.state === 'failed') {
246
+ const at = Date.parse(task.updatedAt);
247
+ if (Number.isNaN(at) || now.getTime() - at > CLOUD_FAILED_WINDOW_MS)
248
+ continue;
249
+ const reason = task.stateReason ? scrubSecrets(task.stateReason) : 'The cloud session could not be started.';
250
+ item = {
251
+ id: `chats:chat-failed:cloud-${task.id}`,
252
+ source: 'chats',
253
+ kind: 'chat-failed',
254
+ severity: 'warn',
255
+ title: clip(`Cloud launch failed: ${taskTitle(task)}`, NEEDS_YOU_TITLE_MAX),
256
+ detail: clip(reason, NEEDS_YOU_DETAIL_MAX) || null,
257
+ since: isoOr(task.updatedAt, nowIso),
258
+ expiresAt: new Date(at + CLOUD_FAILED_WINDOW_MS).toISOString(),
259
+ subject: { repo: task.repo, pr: null, seatId: null, sessionId: null, engine: 'claude' },
260
+ target: { kind: 'section', section: 'command', anchor: 'cloud' },
261
+ actions: [dismissAction(task, false)],
262
+ };
263
+ }
264
+ // The same boundary activity applies to Track B producers: a task record
265
+ // with a non-https PR url or a malformed time never reaches the drawer.
266
+ if (item && isNeedsYouItem(item))
267
+ out.push(item);
268
+ }
269
+ return out;
270
+ }
271
+ let needsYouCache = null;
272
+ let needsYouPending = false;
273
+ let needsYouReadTasks = () => listCloudTasks(NEEDS_YOU_TASK_SCAN);
274
+ function rebuildNeedsYou() {
275
+ try {
276
+ needsYouCache = { at: Date.now(), items: cloudNeedsYouItems(needsYouReadTasks(), new Date()) };
277
+ }
278
+ catch {
279
+ // Keep the last good answer: a transient store error must not flash an
280
+ // empty drawer. Stamp it so the next rebuild waits a cache period.
281
+ needsYouCache = { at: Date.now(), items: needsYouCache?.items ?? [] };
282
+ }
283
+ }
284
+ function scheduleNeedsYouRebuild() {
285
+ if (needsYouPending)
286
+ return;
287
+ needsYouPending = true;
288
+ setImmediate(() => {
289
+ needsYouPending = false;
290
+ rebuildNeedsYou();
291
+ });
292
+ }
293
+ /**
294
+ * Needs-you producer (activity-api.ts calls it on every poll). Returns the
295
+ * cached items in O(1) and, when the cache is stale, rebuilds it on a later
296
+ * tick — the task store is file I/O and never runs on the poll's stack. The
297
+ * first call answers [] (cloud items are additive to sources that vouch for
298
+ * themselves) and has the real answer ready for the next poll.
299
+ */
300
+ export function needsYouItems() {
301
+ if (!needsYouCache || Date.now() - needsYouCache.at >= NEEDS_YOU_CACHE_MS)
302
+ scheduleNeedsYouRebuild();
303
+ return needsYouCache ? [...needsYouCache.items] : [];
304
+ }
305
+ /** After a mutation: the next poll should see it without waiting out the cache. */
306
+ function invalidateNeedsYou() {
307
+ if (needsYouCache)
308
+ needsYouCache = { ...needsYouCache, at: 0 };
309
+ scheduleNeedsYouRebuild();
310
+ }
311
+ /** Test seam: replace the task reader (null restores) and drop the cache. */
312
+ export function setCloudNeedsYouReaderForTest(read) {
313
+ needsYouReadTasks = read ?? (() => listCloudTasks(NEEDS_YOU_TASK_SCAN));
314
+ needsYouCache = null;
315
+ needsYouPending = false;
316
+ }
317
+ const inFlight = {};
318
+ /**
319
+ * One run of `name` at a time across the scheduler AND the routes: a POST
320
+ * /refresh during a scheduled refresh joins it instead of racing a second
321
+ * `gh` sweep over the same task files.
322
+ */
323
+ function guarded(name, run) {
324
+ const current = inFlight[name];
325
+ if (current)
326
+ return current;
327
+ const next = run().finally(() => {
328
+ delete inFlight[name];
329
+ invalidateNeedsYou();
330
+ });
331
+ inFlight[name] = next;
332
+ return next;
333
+ }
334
+ export function refreshCloudTasksGuarded() {
335
+ return guarded('refresh', () => refreshCloudTasks());
336
+ }
337
+ /**
338
+ * The operator's "Improve Verse" must not be answered with the scheduler's
339
+ * auto run (different gate, different count), so it waits for a run in
340
+ * flight to settle and then starts its own — still one at a time.
341
+ */
342
+ async function improveGuarded(opts) {
343
+ const current = inFlight.improve;
344
+ if (current)
345
+ await current.catch(() => undefined);
346
+ return guarded('improve', () => runSelfImprove(opts));
347
+ }
348
+ // ---------------------------------------------------------------------------
349
+ // Background scheduler
350
+ // ---------------------------------------------------------------------------
351
+ export const CLOUD_REFRESH_EVERY_MS = 10 * 60 * 1000;
352
+ export const CLOUD_IMPROVE_EVERY_MS = 60 * 60 * 1000;
353
+ export const CLOUD_IMPROVE_FIRST_DELAY_MS = 2 * 60 * 1000;
354
+ /** Why this process must not run the scheduler; null when it may. */
355
+ export function cloudSchedulerRefusal(env = process.env) {
356
+ // Never from a test run: a timer that outlives a test could launch a real
357
+ // (paid) cloud session or write under whatever HOME the next test set.
358
+ if (env['VITEST'] || env['NODE_ENV'] === 'test')
359
+ return 'test process';
360
+ if (env['ASHLR_CLOUD_AUTO'] === '0')
361
+ return 'disabled by ASHLR_CLOUD_AUTO=0';
362
+ return null;
363
+ }
364
+ let scheduler = null;
365
+ function errorText(err) {
366
+ // Scrubbed: the log line may be read by anyone who can read the server's
367
+ // stderr, and a gh / git error can quote a token-bearing URL.
368
+ return scrubSecrets(err instanceof Error ? err.message : String(err)).slice(0, 300);
369
+ }
370
+ /**
371
+ * Start the process-wide scheduler once (idempotent, never throws). True when
372
+ * it runs. Jobs are guarded against overlapping runs — a tick that finds its
373
+ * previous run still going is skipped, not queued — and a failure is logged
374
+ * once per DISTINCT error, then stays quiet until it changes or clears.
375
+ */
376
+ export function startCloudScheduler(env = process.env, deps = {}) {
377
+ if (scheduler)
378
+ return true;
379
+ if (cloudSchedulerRefusal(env) !== null)
380
+ return false;
381
+ const refresh = deps.refresh ?? (() => refreshCloudTasksGuarded());
382
+ const improve = deps.improve ?? (() => improveGuarded({ count: 1, auto: true }));
383
+ const log = deps.log ?? ((message) => { console.warn(`[ashlr] ${message}`); });
384
+ const state = { timers: [], running: {}, lastError: {} };
385
+ const tick = (name, job) => {
386
+ if (state.running[name])
387
+ return;
388
+ state.running[name] = true;
389
+ let promise;
390
+ try {
391
+ promise = job();
392
+ }
393
+ catch (err) {
394
+ promise = Promise.reject(err);
395
+ }
396
+ void promise
397
+ .then(() => { delete state.lastError[name]; })
398
+ .catch((err) => {
399
+ const text = errorText(err);
400
+ if (state.lastError[name] !== text) {
401
+ state.lastError[name] = text;
402
+ try {
403
+ log(`cloud ${name} failed (${text}); retrying on the next tick`);
404
+ }
405
+ catch { /* never throws */ }
406
+ }
407
+ })
408
+ .finally(() => { state.running[name] = false; });
409
+ };
410
+ try {
411
+ const every = (ms, fn) => {
412
+ const t = setInterval(fn, ms);
413
+ t.unref?.();
414
+ state.timers.push(t);
415
+ };
416
+ every(CLOUD_REFRESH_EVERY_MS, () => tick('refresh', refresh));
417
+ every(CLOUD_IMPROVE_EVERY_MS, () => tick('improve', improve));
418
+ const first = setTimeout(() => tick('improve', improve), CLOUD_IMPROVE_FIRST_DELAY_MS);
419
+ first.unref?.();
420
+ state.timers.push(first);
421
+ }
422
+ catch {
423
+ for (const t of state.timers)
424
+ clearInterval(t);
425
+ return false;
426
+ }
427
+ scheduler = state;
428
+ return true;
429
+ }
430
+ /** Stop the scheduler (tests, shutdown). Safe to call when it never started. */
431
+ export function stopCloudScheduler() {
432
+ if (!scheduler)
433
+ return;
434
+ // clearInterval clears a setTimeout handle too (one timer id space).
435
+ for (const t of scheduler.timers)
436
+ clearInterval(t);
437
+ scheduler = null;
438
+ }
439
+ export function cloudSchedulerRunning() {
440
+ return scheduler !== null;
441
+ }
442
+ // ---------------------------------------------------------------------------
443
+ // Request helpers
444
+ // ---------------------------------------------------------------------------
445
+ function sendInvalid(res, message) {
446
+ sendJson(res, 400, { code: 'VERSE_INVALID', error: message });
447
+ }
448
+ function rejectQuery(req, res) {
449
+ let params;
450
+ try {
451
+ params = new URL(req.url ?? '/', 'http://localhost').searchParams;
452
+ }
453
+ catch {
454
+ sendInvalid(res, 'Invalid query string.');
455
+ return true;
456
+ }
457
+ const first = params.keys().next();
458
+ if (first.done)
459
+ return false;
460
+ sendInvalid(res, `Unknown query parameter: ${first.value}.`);
461
+ return true;
462
+ }
463
+ async function readMutationBody(ctx, req, res, maxBytes) {
464
+ // The mount already gated this POST; re-checking keeps the module safe if
465
+ // it is ever mounted or called some other way.
466
+ if (!ctx.allowDispatch) {
467
+ sendJson(res, 404, { error: 'not found' });
468
+ return null;
469
+ }
470
+ if (!passesMutationGate(req, res, ctx.token))
471
+ return null;
472
+ if (rejectQuery(req, res))
473
+ return null;
474
+ let raw;
475
+ try {
476
+ raw = await readBody(req, maxBytes);
477
+ }
478
+ catch {
479
+ sendJson(res, 413, { code: 'VERSE_TOO_LARGE', error: 'Request body too large.' });
480
+ return null;
481
+ }
482
+ let parsed;
483
+ try {
484
+ parsed = raw.trim().length === 0 ? {} : JSON.parse(raw);
485
+ }
486
+ catch {
487
+ sendInvalid(res, 'Invalid JSON body.');
488
+ return null;
489
+ }
490
+ if (!isRecord(parsed)) {
491
+ sendInvalid(res, 'Body must be a JSON object.');
492
+ return null;
493
+ }
494
+ return parsed;
495
+ }
496
+ const TASK_DISMISS_RE = /^\/api\/verse\/cloud\/tasks\/([^/]+)\/dismiss$/;
497
+ function ownsPath(path) {
498
+ return path === VERSE_CLOUD_PATH || path.startsWith(`${VERSE_CLOUD_PATH}/`);
499
+ }
500
+ // ---------------------------------------------------------------------------
501
+ // Handler
502
+ // ---------------------------------------------------------------------------
503
+ export const handleCloudApi = async (ctx, req, res, path, method) => {
504
+ if (!ownsPath(path))
505
+ return false;
506
+ try {
507
+ if (path === VERSE_CLOUD_PATH) {
508
+ if (method !== 'GET') {
509
+ sendJson(res, 404, { error: `not found: ${method} ${path}` });
510
+ return true;
511
+ }
512
+ if (rejectQuery(req, res))
513
+ return true;
514
+ sendJson(res, 200, await cloudOverview());
515
+ return true;
516
+ }
517
+ // Every other cloud route is a POST.
518
+ if (method !== 'POST') {
519
+ sendJson(res, 404, { error: `not found: ${method} ${path}` });
520
+ return true;
521
+ }
522
+ if (path === VERSE_CLOUD_LAUNCH_PATH) {
523
+ const body = await readMutationBody(ctx, req, res, LAUNCH_BODY_MAX_BYTES);
524
+ if (!body)
525
+ return true;
526
+ const request = parseCloudLaunchBody(body);
527
+ const result = await launchCloudTask(request);
528
+ invalidateNeedsYou();
529
+ // A refusal or failed launch keeps the full CloudLaunchResponse body, so
530
+ // a client that only reads `error` on a non-2xx still shows the reason.
531
+ sendJson(res, result.ok ? 200 : 409, result);
532
+ return true;
533
+ }
534
+ if (path === VERSE_CLOUD_BUDGET_PATH) {
535
+ const body = await readMutationBody(ctx, req, res, SMALL_BODY_MAX_BYTES);
536
+ if (!body)
537
+ return true;
538
+ // Validate BEFORE any write: a malformed body touches nothing.
539
+ const update = parseCloudBudgetBody(body);
540
+ const budget = updateCloudBudget(update);
541
+ sendJson(res, 200, cloudBudgetView(listCloudTasks(), budget, new Date()));
542
+ return true;
543
+ }
544
+ if (path === VERSE_CLOUD_REFRESH_PATH) {
545
+ const body = await readMutationBody(ctx, req, res, SMALL_BODY_MAX_BYTES);
546
+ if (!body)
547
+ return true;
548
+ rejectUnknownKeys(body, new Set());
549
+ sendJson(res, 200, await refreshCloudTasksGuarded());
550
+ return true;
551
+ }
552
+ if (path === VERSE_CLOUD_IMPROVE_PATH) {
553
+ const body = await readMutationBody(ctx, req, res, SMALL_BODY_MAX_BYTES);
554
+ if (!body)
555
+ return true;
556
+ const { count } = parseCloudImproveBody(body);
557
+ // The operator's "Improve Verse" button: canLaunch gate only (auto: false).
558
+ sendJson(res, 200, await improveGuarded({ count, auto: false }));
559
+ return true;
560
+ }
561
+ const dismiss = TASK_DISMISS_RE.exec(path);
562
+ if (dismiss) {
563
+ const body = await readMutationBody(ctx, req, res, SMALL_BODY_MAX_BYTES);
564
+ if (!body)
565
+ return true;
566
+ rejectUnknownKeys(body, new Set());
567
+ const id = dismiss[1];
568
+ if (!CLOUD_TASK_ID_PATTERN.test(id)) {
569
+ sendInvalid(res, 'That is not a cloud task id.');
570
+ return true;
571
+ }
572
+ const result = dismissCloudTask(id);
573
+ if (!result.ok) {
574
+ sendJson(res, result.status, { error: result.error });
575
+ return true;
576
+ }
577
+ invalidateNeedsYou();
578
+ sendJson(res, 200, { ok: true, task: result.task });
579
+ return true;
580
+ }
581
+ sendJson(res, 404, { error: `not found: ${method} ${path}` });
582
+ return true;
583
+ }
584
+ catch (err) {
585
+ if (err instanceof CloudInputError) {
586
+ sendInvalid(res, err.message);
587
+ return true;
588
+ }
589
+ // Never the raw message: service errors can carry checkout paths.
590
+ if (!res.headersSent)
591
+ sendJson(res, 500, { error: 'cloud request failed' });
592
+ return true;
593
+ }
594
+ };
595
+ // The scheduler starts with the module (spec C2). The Verse server loads this
596
+ // module on the first activity poll (activity-api.ts reads needsYouItems) or
597
+ // the first /api/verse/cloud request; a test runner never starts it.
598
+ startCloudScheduler();
599
+ //# sourceMappingURL=cloud-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-api.js","sourceRoot":"","sources":["../../../src/core/cloud/cloud-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The delivery contract appended to every cloud task prompt (unit C1), and
3
+ * the parser for what the session reports back in its PR body.
4
+ *
5
+ * WHY a contract at all: Verse cannot read a cloud session back (attach is
6
+ * not enabled for the account), so GitHub is the only channel. A session that
7
+ * delivers anywhere but `ashlr-cloud/<taskId>` is invisible to the tracker,
8
+ * and one that merges bypasses custody — so both are spelled out, every time.
9
+ */
10
+ import { type CloudTaskReport, type CloudTaskV1 } from './types.js';
11
+ /** A report block is a few hundred bytes; past this it is not a report, it is a dump. */
12
+ export declare const CLOUD_REPORT_MAX_BLOCK_CHARS: number;
13
+ /**
14
+ * The full prompt handed to `claude --cloud`: the task text, then the
15
+ * contract — create and work on branch `task.branch` from `task.baseBranch`;
16
+ * never push to any other branch; never merge; run the repo's relevant tests;
17
+ * commit; push; open a DRAFT PR against `task.baseBranch` titled
18
+ * `${CLOUD_PR_TITLE_PREFIX} <title>`; the PR body ends with a fenced
19
+ * `${CLOUD_REPORT_FENCE}` JSON block matching CloudTaskReport. If nothing
20
+ * needs changing, still push an empty commit on the branch and open the PR
21
+ * with status "no-change" so Verse sees completion.
22
+ */
23
+ export declare function buildCloudPrompt(task: CloudTaskV1): string;
24
+ /** Last well-formed `ashlr-cloud-report` block in the body, validated; else null. */
25
+ export declare function parseCloudReport(prBody: string | null | undefined): CloudTaskReport | null;