@ashlr/hub 3.16.0 → 3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +2 -2
  3. package/dist/authority-surface.json +5 -5
  4. package/dist/build-identity.json +2 -2
  5. package/dist/core/daemon/loop.js +1 -0
  6. package/dist/core/daemon/loop.js.map +1 -1
  7. package/dist/core/daemon/tick-hooks.d.ts +2 -0
  8. package/dist/core/daemon/tick-hooks.js.map +1 -1
  9. package/dist/core/fleet/tick-hooks-live.d.ts +2 -1
  10. package/dist/core/fleet/tick-hooks-live.js +49 -7
  11. package/dist/core/fleet/tick-hooks-live.js.map +1 -1
  12. package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js +2 -0
  13. package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js.map +1 -0
  14. package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js +2 -0
  15. package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js.map +1 -0
  16. package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js +2 -0
  17. package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js.map +1 -0
  18. package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js +2 -0
  19. package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js.map +1 -0
  20. package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js +2 -0
  21. package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js.map +1 -0
  22. package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js +2 -0
  23. package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js.map +1 -0
  24. package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js +3 -0
  25. package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js.map +1 -0
  26. package/dist/core/web/public/next/assets/App-Uy6lDpKw.js +8 -0
  27. package/dist/core/web/public/next/assets/App-Uy6lDpKw.js.map +1 -0
  28. package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js +2 -0
  29. package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js.map +1 -0
  30. package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js +2 -0
  31. package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js.map +1 -0
  32. package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js +2 -0
  33. package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js.map +1 -0
  34. package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js +3 -0
  35. package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js.map +1 -0
  36. package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js +2 -0
  37. package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js.map +1 -0
  38. package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js +2 -0
  39. package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js.map +1 -0
  40. package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js +2 -0
  41. package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js.map +1 -0
  42. package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js +7 -0
  43. package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js.map +1 -0
  44. package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js +2 -0
  45. package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js.map +1 -0
  46. package/dist/core/web/public/next/assets/Button-CMR_Op-0.js +2 -0
  47. package/dist/core/web/public/next/assets/Button-CMR_Op-0.js.map +1 -0
  48. package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js +2 -0
  49. package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js.map +1 -0
  50. package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js +16 -0
  51. package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js.map +1 -0
  52. package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js +2 -0
  53. package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js.map +1 -0
  54. package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js +2 -0
  55. package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js.map +1 -0
  56. package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js +3 -0
  57. package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js.map +1 -0
  58. package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js +5 -0
  59. package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js.map +1 -0
  60. package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js +2 -0
  61. package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js.map +1 -0
  62. package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js +3 -0
  63. package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js.map +1 -0
  64. package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js +3 -0
  65. package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js.map +1 -0
  66. package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js +9 -0
  67. package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js.map +1 -0
  68. package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js +3 -0
  69. package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js.map +1 -0
  70. package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js +4 -0
  71. package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js.map +1 -0
  72. package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js +2 -0
  73. package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js.map +1 -0
  74. package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js +2 -0
  75. package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js.map +1 -0
  76. package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js +2 -0
  77. package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js.map +1 -0
  78. package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js +2 -0
  79. package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js.map +1 -0
  80. package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js +2 -0
  81. package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js.map +1 -0
  82. package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js +2 -0
  83. package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js.map +1 -0
  84. package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js +2 -0
  85. package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js.map +1 -0
  86. package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js +2 -0
  87. package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js.map +1 -0
  88. package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js +2 -0
  89. package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js.map +1 -0
  90. package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js +2 -0
  91. package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js.map +1 -0
  92. package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js +2 -0
  93. package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js.map +1 -0
  94. package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js +2 -0
  95. package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js.map +1 -0
  96. package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js +2 -0
  97. package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js.map +1 -0
  98. package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js +5 -0
  99. package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js.map +1 -0
  100. package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js +2 -0
  101. package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js.map +1 -0
  102. package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js +2 -0
  103. package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js.map +1 -0
  104. package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js +2 -0
  105. package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js.map +1 -0
  106. package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js +3 -0
  107. package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js.map +1 -0
  108. package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js +2 -0
  109. package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js.map +1 -0
  110. package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js +3 -0
  111. package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js.map +1 -0
  112. package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js +2 -0
  113. package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js.map +1 -0
  114. package/dist/core/web/public/next/assets/Input-CsSZI8QC.js +2 -0
  115. package/dist/core/web/public/next/assets/Input-CsSZI8QC.js.map +1 -0
  116. package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js +9 -0
  117. package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js.map +1 -0
  118. package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js +2 -0
  119. package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js.map +1 -0
  120. package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js +3 -0
  121. package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js.map +1 -0
  122. package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js +2 -0
  123. package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js.map +1 -0
  124. package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js +2 -0
  125. package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js.map +1 -0
  126. package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js +2 -0
  127. package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js.map +1 -0
  128. package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js +2 -0
  129. package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js.map +1 -0
  130. package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js +2 -0
  131. package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js.map +1 -0
  132. package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js +2 -0
  133. package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js.map +1 -0
  134. package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js +3 -0
  135. package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js.map +1 -0
  136. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js +72 -0
  137. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js.map +1 -0
  138. package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js +2 -0
  139. package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js.map +1 -0
  140. package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js +2 -0
  141. package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js.map +1 -0
  142. package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js +3 -0
  143. package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js.map +1 -0
  144. package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js +2 -0
  145. package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js.map +1 -0
  146. package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js +2 -0
  147. package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js.map +1 -0
  148. package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js +3 -0
  149. package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js.map +1 -0
  150. package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js +2 -0
  151. package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js.map +1 -0
  152. package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js +7 -0
  153. package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js.map +1 -0
  154. package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js +2 -0
  155. package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js.map +1 -0
  156. package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js +3 -0
  157. package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js.map +1 -0
  158. package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js +2 -0
  159. package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js.map +1 -0
  160. package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js +2 -0
  161. package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js.map +1 -0
  162. package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js +2 -0
  163. package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js.map +1 -0
  164. package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js +4 -0
  165. package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js.map +1 -0
  166. package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js +3 -0
  167. package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js.map +1 -0
  168. package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js +3 -0
  169. package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js.map +1 -0
  170. package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js +9 -0
  171. package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js.map +1 -0
  172. package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js +2 -0
  173. package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js.map +1 -0
  174. package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js +2 -0
  175. package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js.map +1 -0
  176. package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js +2 -0
  177. package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js.map +1 -0
  178. package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js +2 -0
  179. package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js.map +1 -0
  180. package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js +2 -0
  181. package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js.map +1 -0
  182. package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js +2 -0
  183. package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js.map +1 -0
  184. package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js +2 -0
  185. package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js.map +1 -0
  186. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js +7 -0
  187. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js.map +1 -0
  188. package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js +3 -0
  189. package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js.map +1 -0
  190. package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js +3 -0
  191. package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js.map +1 -0
  192. package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js +2 -0
  193. package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js.map +1 -0
  194. package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js +2 -0
  195. package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js.map +1 -0
  196. package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js +2 -0
  197. package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js.map +1 -0
  198. package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js +3 -0
  199. package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js.map +1 -0
  200. package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js +3 -0
  201. package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js.map +1 -0
  202. package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js +2 -0
  203. package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js.map +1 -0
  204. package/dist/core/web/public/next/assets/Select-DjQDkPJU.js +2 -0
  205. package/dist/core/web/public/next/assets/Select-DjQDkPJU.js.map +1 -0
  206. package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js +2 -0
  207. package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js.map +1 -0
  208. package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js +2 -0
  209. package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js.map +1 -0
  210. package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js +2 -0
  211. package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js.map +1 -0
  212. package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js +2 -0
  213. package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js.map +1 -0
  214. package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js +2 -0
  215. package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js.map +1 -0
  216. package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js +3 -0
  217. package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js.map +1 -0
  218. package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js +2 -0
  219. package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js.map +1 -0
  220. package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js +2 -0
  221. package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js.map +1 -0
  222. package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js +3 -0
  223. package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js.map +1 -0
  224. package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js +2 -0
  225. package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js.map +1 -0
  226. package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js +2 -0
  227. package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js.map +1 -0
  228. package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js +2 -0
  229. package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js.map +1 -0
  230. package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js +2 -0
  231. package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js.map +1 -0
  232. package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js +2 -0
  233. package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js.map +1 -0
  234. package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js +2 -0
  235. package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js.map +1 -0
  236. package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js +2 -0
  237. package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js.map +1 -0
  238. package/dist/core/web/public/next/assets/Surface-BEToBKC3.js +2 -0
  239. package/dist/core/web/public/next/assets/Surface-BEToBKC3.js.map +1 -0
  240. package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js +2 -0
  241. package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js.map +1 -0
  242. package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js +2 -0
  243. package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js.map +1 -0
  244. package/dist/core/web/public/next/assets/Tag-Chqolzxz.js +2 -0
  245. package/dist/core/web/public/next/assets/Tag-Chqolzxz.js.map +1 -0
  246. package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js +3 -0
  247. package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js.map +1 -0
  248. package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js +26 -0
  249. package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js.map +1 -0
  250. package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js +2 -0
  251. package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js.map +1 -0
  252. package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js +2 -0
  253. package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js.map +1 -0
  254. package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js +9 -0
  255. package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js.map +1 -0
  256. package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js +3 -0
  257. package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js.map +1 -0
  258. package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js +2 -0
  259. package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js.map +1 -0
  260. package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js +3 -0
  261. package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js.map +1 -0
  262. package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js +3 -0
  263. package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js.map +1 -0
  264. package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js +2 -0
  265. package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js.map +1 -0
  266. package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js +2 -0
  267. package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js.map +1 -0
  268. package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js +2 -0
  269. package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js.map +1 -0
  270. package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js +2 -0
  271. package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js.map +1 -0
  272. package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js +6 -0
  273. package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js.map +1 -0
  274. package/dist/core/web/public/next/assets/actions-BPyW8QC-.js +2 -0
  275. package/dist/core/web/public/next/assets/actions-BPyW8QC-.js.map +1 -0
  276. package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js +2 -0
  277. package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js.map +1 -0
  278. package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js +7 -0
  279. package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js.map +1 -0
  280. package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js +2 -0
  281. package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js.map +1 -0
  282. package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js +2 -0
  283. package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js.map +1 -0
  284. package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js +2 -0
  285. package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js.map +1 -0
  286. package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js +2 -0
  287. package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js.map +1 -0
  288. package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js +2 -0
  289. package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js.map +1 -0
  290. package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js +2 -0
  291. package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js.map +1 -0
  292. package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js +2 -0
  293. package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js.map +1 -0
  294. package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js +2 -0
  295. package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js.map +1 -0
  296. package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js +2 -0
  297. package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js.map +1 -0
  298. package/dist/core/web/public/next/assets/charts-Di0_Q980.js +2 -0
  299. package/dist/core/web/public/next/assets/charts-Di0_Q980.js.map +1 -0
  300. package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js +2 -0
  301. package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js.map +1 -0
  302. package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js +2 -0
  303. package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js.map +1 -0
  304. package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js +2 -0
  305. package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js.map +1 -0
  306. package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js +2 -0
  307. package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js.map +1 -0
  308. package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js +2 -0
  309. package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js.map +1 -0
  310. package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js +2 -0
  311. package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js.map +1 -0
  312. package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js +2 -0
  313. package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js.map +1 -0
  314. package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js +2 -0
  315. package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js.map +1 -0
  316. package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js +2 -0
  317. package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js.map +1 -0
  318. package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js +3 -0
  319. package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js.map +1 -0
  320. package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js +2 -0
  321. package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js.map +1 -0
  322. package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js +2 -0
  323. package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js.map +1 -0
  324. package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js +2 -0
  325. package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js.map +1 -0
  326. package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js +2 -0
  327. package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js.map +1 -0
  328. package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js +2 -0
  329. package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js.map +1 -0
  330. package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js +2 -0
  331. package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js.map +1 -0
  332. package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js +2 -0
  333. package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js.map +1 -0
  334. package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js +2 -0
  335. package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js.map +1 -0
  336. package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js +2 -0
  337. package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js.map +1 -0
  338. package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js +2 -0
  339. package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js.map +1 -0
  340. package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js +2 -0
  341. package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js.map +1 -0
  342. package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js +3 -0
  343. package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js.map +1 -0
  344. package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js +2 -0
  345. package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js.map +1 -0
  346. package/dist/core/web/public/next/assets/format-V6IiIMAL.js +2 -0
  347. package/dist/core/web/public/next/assets/format-V6IiIMAL.js.map +1 -0
  348. package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js +5 -0
  349. package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js.map +1 -0
  350. package/dist/core/web/public/next/assets/global-CYfRwH6t.js +3 -0
  351. package/dist/core/web/public/next/assets/global-CYfRwH6t.js.map +1 -0
  352. package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js +3 -0
  353. package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js.map +1 -0
  354. package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js +2 -0
  355. package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js.map +1 -0
  356. package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js +2 -0
  357. package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js.map +1 -0
  358. package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js +2 -0
  359. package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js.map +1 -0
  360. package/dist/core/web/public/next/assets/icons-BBm_Cy62.js +2 -0
  361. package/dist/core/web/public/next/assets/icons-BBm_Cy62.js.map +1 -0
  362. package/dist/core/web/public/next/assets/index-_izD07R9.js +11 -0
  363. package/dist/core/web/public/next/assets/index-_izD07R9.js.map +1 -0
  364. package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js +2 -0
  365. package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js.map +1 -0
  366. package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js +2 -0
  367. package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js.map +1 -0
  368. package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js +2 -0
  369. package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js.map +1 -0
  370. package/dist/core/web/public/next/assets/live-model-D97AfBFz.js +2 -0
  371. package/dist/core/web/public/next/assets/live-model-D97AfBFz.js.map +1 -0
  372. package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js +2 -0
  373. package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js.map +1 -0
  374. package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js +2 -0
  375. package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js.map +1 -0
  376. package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js +2 -0
  377. package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js.map +1 -0
  378. package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js +7 -0
  379. package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js.map +1 -0
  380. package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js +2 -0
  381. package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js.map +1 -0
  382. package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js +2 -0
  383. package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js.map +1 -0
  384. package/dist/core/web/public/next/assets/nav-DC0ynjdb.js +2 -0
  385. package/dist/core/web/public/next/assets/nav-DC0ynjdb.js.map +1 -0
  386. package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js +2 -0
  387. package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js.map +1 -0
  388. package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js +2 -0
  389. package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js.map +1 -0
  390. package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js +2 -0
  391. package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js.map +1 -0
  392. package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js +2 -0
  393. package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js.map +1 -0
  394. package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js +2 -0
  395. package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js.map +1 -0
  396. package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js +2 -0
  397. package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js.map +1 -0
  398. package/dist/core/web/public/next/assets/panes-DOXM13lF.js +3 -0
  399. package/dist/core/web/public/next/assets/panes-DOXM13lF.js.map +1 -0
  400. package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js +2 -0
  401. package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js.map +1 -0
  402. package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js +2 -0
  403. package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js.map +1 -0
  404. package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js +2 -0
  405. package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js.map +1 -0
  406. package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js +2 -0
  407. package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js.map +1 -0
  408. package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js +2 -0
  409. package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js.map +1 -0
  410. package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js +2 -0
  411. package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js.map +1 -0
  412. package/dist/core/web/public/next/assets/primitives-Bynv7bPl.js +1 -0
  413. package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js +2 -0
  414. package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js.map +1 -0
  415. package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js +2 -0
  416. package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js.map +1 -0
  417. package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js +2 -0
  418. package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js.map +1 -0
  419. package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js +3 -0
  420. package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js.map +1 -0
  421. package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js +2 -0
  422. package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js.map +1 -0
  423. package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js +2 -0
  424. package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js.map +1 -0
  425. package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js +2 -0
  426. package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js.map +1 -0
  427. package/dist/core/web/public/next/assets/rolldown-runtime-hePW80VL.js +1 -0
  428. package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js +2 -0
  429. package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js.map +1 -0
  430. package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js +2 -0
  431. package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js.map +1 -0
  432. package/dist/core/web/public/next/assets/sheet-BxZSmdad.js +2 -0
  433. package/dist/core/web/public/next/assets/sheet-BxZSmdad.js.map +1 -0
  434. package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js +2 -0
  435. package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js.map +1 -0
  436. package/dist/core/web/public/next/assets/slots-BJc3RJkV.js +3 -0
  437. package/dist/core/web/public/next/assets/slots-BJc3RJkV.js.map +1 -0
  438. package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js +4 -0
  439. package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js.map +1 -0
  440. package/dist/core/web/public/next/assets/sse-It4xa040.js +2 -0
  441. package/dist/core/web/public/next/assets/sse-It4xa040.js.map +1 -0
  442. package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js +2 -0
  443. package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js.map +1 -0
  444. package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js +2 -0
  445. package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js.map +1 -0
  446. package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js +2 -0
  447. package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js.map +1 -0
  448. package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js +2 -0
  449. package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js.map +1 -0
  450. package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js +2 -0
  451. package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js.map +1 -0
  452. package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js +6 -0
  453. package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js.map +1 -0
  454. package/dist/core/web/public/next/assets/thread-data-C8z55msn.js +2 -0
  455. package/dist/core/web/public/next/assets/thread-data-C8z55msn.js.map +1 -0
  456. package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js +2 -0
  457. package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js.map +1 -0
  458. package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js +2 -0
  459. package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js.map +1 -0
  460. package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js +2 -0
  461. package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js.map +1 -0
  462. package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js +2 -0
  463. package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js.map +1 -0
  464. package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js +2 -0
  465. package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js.map +1 -0
  466. package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js +2 -0
  467. package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js.map +1 -0
  468. package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js +2 -0
  469. package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js.map +1 -0
  470. package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js +2 -0
  471. package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js.map +1 -0
  472. package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js +2 -0
  473. package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js.map +1 -0
  474. package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js +2 -0
  475. package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js.map +1 -0
  476. package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js +2 -0
  477. package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js.map +1 -0
  478. package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js +2 -0
  479. package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js.map +1 -0
  480. package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js +2 -0
  481. package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js.map +1 -0
  482. package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js +2 -0
  483. package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js.map +1 -0
  484. package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js +2 -0
  485. package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js.map +1 -0
  486. package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js +3 -0
  487. package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js.map +1 -0
  488. package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js +2 -0
  489. package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js.map +1 -0
  490. package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js +2 -0
  491. package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js.map +1 -0
  492. package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js +2 -0
  493. package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js.map +1 -0
  494. package/dist/core/web/public/next/index.html +2 -1
  495. package/dist/core/web/remote-gateway-policy.js +5 -0
  496. package/dist/core/web/remote-gateway-policy.js.map +1 -1
  497. package/dist/core/web/static.d.ts +4 -3
  498. package/dist/core/web/static.js +8 -5
  499. package/dist/core/web/static.js.map +1 -1
  500. package/dist/release-dependency-inventory.json +1 -1
  501. package/node_modules/fast-uri/index.js +20 -5
  502. package/node_modules/fast-uri/lib/utils.js +8 -1
  503. package/node_modules/fast-uri/package.json +1 -1
  504. package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
  505. package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
  506. package/node_modules/ip-address/README.md +134 -134
  507. package/node_modules/ip-address/dist/address-error.d.ts +11 -0
  508. package/node_modules/ip-address/dist/address-error.js.map +1 -1
  509. package/node_modules/ip-address/dist/ipv4.d.ts +22 -6
  510. package/node_modules/ip-address/dist/ipv4.js +22 -6
  511. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  512. package/node_modules/ip-address/dist/ipv6.d.ts +26 -8
  513. package/node_modules/ip-address/dist/ipv6.js +46 -29
  514. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  515. package/node_modules/ip-address/dist/v6/constants.js +1 -0
  516. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  517. package/node_modules/ip-address/package.json +1 -1
  518. package/package.json +5 -4
  519. package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js +0 -2
  520. package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js.map +0 -1
  521. package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js +0 -2
  522. package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js.map +0 -1
  523. package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js +0 -2
  524. package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js.map +0 -1
  525. package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js +0 -2
  526. package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js.map +0 -1
  527. package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js +0 -2
  528. package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js.map +0 -1
  529. package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js +0 -2
  530. package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js.map +0 -1
  531. package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js +0 -3
  532. package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js.map +0 -1
  533. package/dist/core/web/public/next/assets/App-DebYuj1v.js +0 -8
  534. package/dist/core/web/public/next/assets/App-DebYuj1v.js.map +0 -1
  535. package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js +0 -2
  536. package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js.map +0 -1
  537. package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js +0 -2
  538. package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js.map +0 -1
  539. package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js +0 -2
  540. package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js.map +0 -1
  541. package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js +0 -3
  542. package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js.map +0 -1
  543. package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js +0 -2
  544. package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js.map +0 -1
  545. package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js +0 -2
  546. package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js.map +0 -1
  547. package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js +0 -2
  548. package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js.map +0 -1
  549. package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js +0 -7
  550. package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js.map +0 -1
  551. package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js +0 -2
  552. package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js.map +0 -1
  553. package/dist/core/web/public/next/assets/Button-DP2ImS5n.js +0 -2
  554. package/dist/core/web/public/next/assets/Button-DP2ImS5n.js.map +0 -1
  555. package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js +0 -2
  556. package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js.map +0 -1
  557. package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js +0 -16
  558. package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js.map +0 -1
  559. package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js +0 -2
  560. package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js.map +0 -1
  561. package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js +0 -2
  562. package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js.map +0 -1
  563. package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js +0 -3
  564. package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js.map +0 -1
  565. package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js +0 -5
  566. package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js.map +0 -1
  567. package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js +0 -2
  568. package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js.map +0 -1
  569. package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js +0 -3
  570. package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js.map +0 -1
  571. package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js +0 -3
  572. package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js.map +0 -1
  573. package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js +0 -9
  574. package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js.map +0 -1
  575. package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js +0 -3
  576. package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js.map +0 -1
  577. package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js +0 -4
  578. package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js.map +0 -1
  579. package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js +0 -2
  580. package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js.map +0 -1
  581. package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js +0 -2
  582. package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js.map +0 -1
  583. package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js +0 -2
  584. package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js.map +0 -1
  585. package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js +0 -2
  586. package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js.map +0 -1
  587. package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js +0 -2
  588. package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js.map +0 -1
  589. package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js +0 -2
  590. package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js.map +0 -1
  591. package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js +0 -2
  592. package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js.map +0 -1
  593. package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js +0 -2
  594. package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js.map +0 -1
  595. package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js +0 -2
  596. package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js.map +0 -1
  597. package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js +0 -2
  598. package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js.map +0 -1
  599. package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js +0 -2
  600. package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js.map +0 -1
  601. package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js +0 -2
  602. package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js.map +0 -1
  603. package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js +0 -2
  604. package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js.map +0 -1
  605. package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js +0 -5
  606. package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js.map +0 -1
  607. package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js +0 -2
  608. package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js.map +0 -1
  609. package/dist/core/web/public/next/assets/GearTray-Cc14h572.js +0 -2
  610. package/dist/core/web/public/next/assets/GearTray-Cc14h572.js.map +0 -1
  611. package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js +0 -2
  612. package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js.map +0 -1
  613. package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js +0 -3
  614. package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js.map +0 -1
  615. package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js +0 -2
  616. package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js.map +0 -1
  617. package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js +0 -3
  618. package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js.map +0 -1
  619. package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js +0 -2
  620. package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js.map +0 -1
  621. package/dist/core/web/public/next/assets/Input-BEF-ScuG.js +0 -2
  622. package/dist/core/web/public/next/assets/Input-BEF-ScuG.js.map +0 -1
  623. package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js +0 -9
  624. package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js.map +0 -1
  625. package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js +0 -2
  626. package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js.map +0 -1
  627. package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js +0 -3
  628. package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js.map +0 -1
  629. package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js +0 -2
  630. package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js.map +0 -1
  631. package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js +0 -2
  632. package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js.map +0 -1
  633. package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js +0 -2
  634. package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js.map +0 -1
  635. package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js +0 -2
  636. package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js.map +0 -1
  637. package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js +0 -2
  638. package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js.map +0 -1
  639. package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js +0 -2
  640. package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js.map +0 -1
  641. package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js +0 -3
  642. package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js.map +0 -1
  643. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js +0 -72
  644. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js.map +0 -1
  645. package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js +0 -2
  646. package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js.map +0 -1
  647. package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js +0 -2
  648. package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js.map +0 -1
  649. package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js +0 -3
  650. package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js.map +0 -1
  651. package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js +0 -2
  652. package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js.map +0 -1
  653. package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js +0 -2
  654. package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js.map +0 -1
  655. package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js +0 -3
  656. package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js.map +0 -1
  657. package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js +0 -2
  658. package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js.map +0 -1
  659. package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js +0 -7
  660. package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js.map +0 -1
  661. package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js +0 -2
  662. package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js.map +0 -1
  663. package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js +0 -3
  664. package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js.map +0 -1
  665. package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js +0 -2
  666. package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js.map +0 -1
  667. package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js +0 -2
  668. package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js.map +0 -1
  669. package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js +0 -2
  670. package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js.map +0 -1
  671. package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js +0 -4
  672. package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js.map +0 -1
  673. package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js +0 -3
  674. package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js.map +0 -1
  675. package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js +0 -3
  676. package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js.map +0 -1
  677. package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js +0 -9
  678. package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js.map +0 -1
  679. package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js +0 -2
  680. package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js.map +0 -1
  681. package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js +0 -2
  682. package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js.map +0 -1
  683. package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js +0 -2
  684. package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js.map +0 -1
  685. package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js +0 -2
  686. package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js.map +0 -1
  687. package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js +0 -2
  688. package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js.map +0 -1
  689. package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js +0 -2
  690. package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js.map +0 -1
  691. package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js +0 -2
  692. package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js.map +0 -1
  693. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js +0 -7
  694. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js.map +0 -1
  695. package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js +0 -3
  696. package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js.map +0 -1
  697. package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js +0 -3
  698. package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js.map +0 -1
  699. package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js +0 -2
  700. package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js.map +0 -1
  701. package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js +0 -2
  702. package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js.map +0 -1
  703. package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js +0 -2
  704. package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js.map +0 -1
  705. package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js +0 -3
  706. package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js.map +0 -1
  707. package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js +0 -3
  708. package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js.map +0 -1
  709. package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js +0 -2
  710. package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js.map +0 -1
  711. package/dist/core/web/public/next/assets/Select-zXMdgblm.js +0 -2
  712. package/dist/core/web/public/next/assets/Select-zXMdgblm.js.map +0 -1
  713. package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js +0 -2
  714. package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js.map +0 -1
  715. package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js +0 -2
  716. package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js.map +0 -1
  717. package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js +0 -2
  718. package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js.map +0 -1
  719. package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js +0 -2
  720. package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js.map +0 -1
  721. package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js +0 -2
  722. package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js.map +0 -1
  723. package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js +0 -3
  724. package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js.map +0 -1
  725. package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js +0 -2
  726. package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js.map +0 -1
  727. package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js +0 -2
  728. package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js.map +0 -1
  729. package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js +0 -3
  730. package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js.map +0 -1
  731. package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js +0 -2
  732. package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js.map +0 -1
  733. package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js +0 -2
  734. package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js.map +0 -1
  735. package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js +0 -2
  736. package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js.map +0 -1
  737. package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js +0 -2
  738. package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js.map +0 -1
  739. package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js +0 -2
  740. package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js.map +0 -1
  741. package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js +0 -2
  742. package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js.map +0 -1
  743. package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js +0 -2
  744. package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js.map +0 -1
  745. package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js +0 -2
  746. package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js.map +0 -1
  747. package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js +0 -2
  748. package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js.map +0 -1
  749. package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js +0 -2
  750. package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js.map +0 -1
  751. package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js +0 -2
  752. package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js.map +0 -1
  753. package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js +0 -26
  754. package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js.map +0 -1
  755. package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js +0 -3
  756. package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js.map +0 -1
  757. package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js +0 -2
  758. package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js.map +0 -1
  759. package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js +0 -2
  760. package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js.map +0 -1
  761. package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js +0 -9
  762. package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js.map +0 -1
  763. package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js +0 -3
  764. package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js.map +0 -1
  765. package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js +0 -2
  766. package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js.map +0 -1
  767. package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js +0 -3
  768. package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js.map +0 -1
  769. package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js +0 -3
  770. package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js.map +0 -1
  771. package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js +0 -2
  772. package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js.map +0 -1
  773. package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js +0 -2
  774. package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js.map +0 -1
  775. package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js +0 -2
  776. package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js.map +0 -1
  777. package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js +0 -2
  778. package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js.map +0 -1
  779. package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js +0 -6
  780. package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js.map +0 -1
  781. package/dist/core/web/public/next/assets/actions-CyO4R-IO.js +0 -2
  782. package/dist/core/web/public/next/assets/actions-CyO4R-IO.js.map +0 -1
  783. package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js +0 -2
  784. package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js.map +0 -1
  785. package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js +0 -7
  786. package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js.map +0 -1
  787. package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js +0 -2
  788. package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js.map +0 -1
  789. package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js +0 -2
  790. package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js.map +0 -1
  791. package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js +0 -2
  792. package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js.map +0 -1
  793. package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js +0 -2
  794. package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js.map +0 -1
  795. package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js +0 -2
  796. package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js.map +0 -1
  797. package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js +0 -2
  798. package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js.map +0 -1
  799. package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js +0 -2
  800. package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js.map +0 -1
  801. package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js +0 -2
  802. package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js.map +0 -1
  803. package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js +0 -2
  804. package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js.map +0 -1
  805. package/dist/core/web/public/next/assets/charts-D3I0q4hG.js +0 -2
  806. package/dist/core/web/public/next/assets/charts-D3I0q4hG.js.map +0 -1
  807. package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js +0 -2
  808. package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js.map +0 -1
  809. package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js +0 -2
  810. package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js.map +0 -1
  811. package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js +0 -2
  812. package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js.map +0 -1
  813. package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js +0 -2
  814. package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js.map +0 -1
  815. package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js +0 -2
  816. package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js.map +0 -1
  817. package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js +0 -2
  818. package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js.map +0 -1
  819. package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js +0 -2
  820. package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js.map +0 -1
  821. package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js +0 -2
  822. package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js.map +0 -1
  823. package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js +0 -2
  824. package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js.map +0 -1
  825. package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js +0 -3
  826. package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js.map +0 -1
  827. package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js +0 -2
  828. package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js.map +0 -1
  829. package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js +0 -2
  830. package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js.map +0 -1
  831. package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js +0 -2
  832. package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js.map +0 -1
  833. package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js +0 -2
  834. package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js.map +0 -1
  835. package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js +0 -2
  836. package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js.map +0 -1
  837. package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js +0 -2
  838. package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js.map +0 -1
  839. package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js +0 -2
  840. package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js.map +0 -1
  841. package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js +0 -2
  842. package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js.map +0 -1
  843. package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js +0 -2
  844. package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js.map +0 -1
  845. package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js +0 -2
  846. package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js.map +0 -1
  847. package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js +0 -2
  848. package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js.map +0 -1
  849. package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js +0 -3
  850. package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js.map +0 -1
  851. package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js +0 -2
  852. package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js.map +0 -1
  853. package/dist/core/web/public/next/assets/format-CcEKjUou.js +0 -2
  854. package/dist/core/web/public/next/assets/format-CcEKjUou.js.map +0 -1
  855. package/dist/core/web/public/next/assets/git-model-DL3MwN93.js +0 -5
  856. package/dist/core/web/public/next/assets/git-model-DL3MwN93.js.map +0 -1
  857. package/dist/core/web/public/next/assets/global-BWc2NPzv.js +0 -3
  858. package/dist/core/web/public/next/assets/global-BWc2NPzv.js.map +0 -1
  859. package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js +0 -3
  860. package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js.map +0 -1
  861. package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js +0 -2
  862. package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js.map +0 -1
  863. package/dist/core/web/public/next/assets/headroom-CP99UxyV.js +0 -2
  864. package/dist/core/web/public/next/assets/headroom-CP99UxyV.js.map +0 -1
  865. package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js +0 -2
  866. package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js.map +0 -1
  867. package/dist/core/web/public/next/assets/icons-U34oiN9M.js +0 -2
  868. package/dist/core/web/public/next/assets/icons-U34oiN9M.js.map +0 -1
  869. package/dist/core/web/public/next/assets/index-BbDqdepe.js +0 -11
  870. package/dist/core/web/public/next/assets/index-BbDqdepe.js.map +0 -1
  871. package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js +0 -2
  872. package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js.map +0 -1
  873. package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js +0 -2
  874. package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js.map +0 -1
  875. package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js +0 -2
  876. package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js.map +0 -1
  877. package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js +0 -2
  878. package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js.map +0 -1
  879. package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js +0 -2
  880. package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js.map +0 -1
  881. package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js +0 -2
  882. package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js.map +0 -1
  883. package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js +0 -2
  884. package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js.map +0 -1
  885. package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js +0 -7
  886. package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js.map +0 -1
  887. package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js +0 -2
  888. package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js.map +0 -1
  889. package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js +0 -2
  890. package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js.map +0 -1
  891. package/dist/core/web/public/next/assets/nav-CM-mJcSq.js +0 -2
  892. package/dist/core/web/public/next/assets/nav-CM-mJcSq.js.map +0 -1
  893. package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js +0 -2
  894. package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js.map +0 -1
  895. package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js +0 -2
  896. package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js.map +0 -1
  897. package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js +0 -2
  898. package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js.map +0 -1
  899. package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js +0 -2
  900. package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js.map +0 -1
  901. package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js +0 -2
  902. package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js.map +0 -1
  903. package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js +0 -2
  904. package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js.map +0 -1
  905. package/dist/core/web/public/next/assets/panes-BjUzIDw6.js +0 -3
  906. package/dist/core/web/public/next/assets/panes-BjUzIDw6.js.map +0 -1
  907. package/dist/core/web/public/next/assets/path-display-HyxETV-f.js +0 -2
  908. package/dist/core/web/public/next/assets/path-display-HyxETV-f.js.map +0 -1
  909. package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js +0 -2
  910. package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js.map +0 -1
  911. package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js +0 -2
  912. package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js.map +0 -1
  913. package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js +0 -2
  914. package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js.map +0 -1
  915. package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js +0 -2
  916. package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js.map +0 -1
  917. package/dist/core/web/public/next/assets/primitives-BEXDE-HP.js +0 -1
  918. package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js +0 -2
  919. package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js.map +0 -1
  920. package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js +0 -2
  921. package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js.map +0 -1
  922. package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js +0 -2
  923. package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js.map +0 -1
  924. package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js +0 -3
  925. package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js.map +0 -1
  926. package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js +0 -2
  927. package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js.map +0 -1
  928. package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js +0 -2
  929. package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js.map +0 -1
  930. package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js +0 -2
  931. package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js.map +0 -1
  932. package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js +0 -2
  933. package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js.map +0 -1
  934. package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js +0 -2
  935. package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js.map +0 -1
  936. package/dist/core/web/public/next/assets/sheet-D0ciShoy.js +0 -2
  937. package/dist/core/web/public/next/assets/sheet-D0ciShoy.js.map +0 -1
  938. package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js +0 -2
  939. package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js.map +0 -1
  940. package/dist/core/web/public/next/assets/slots-m3L6Ints.js +0 -3
  941. package/dist/core/web/public/next/assets/slots-m3L6Ints.js.map +0 -1
  942. package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js +0 -4
  943. package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js.map +0 -1
  944. package/dist/core/web/public/next/assets/sse-CK65-Cun.js +0 -2
  945. package/dist/core/web/public/next/assets/sse-CK65-Cun.js.map +0 -1
  946. package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js +0 -2
  947. package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js.map +0 -1
  948. package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js +0 -2
  949. package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js.map +0 -1
  950. package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js +0 -2
  951. package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js.map +0 -1
  952. package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js +0 -2
  953. package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js.map +0 -1
  954. package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js +0 -2
  955. package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js.map +0 -1
  956. package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js +0 -6
  957. package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js.map +0 -1
  958. package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js +0 -2
  959. package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js.map +0 -1
  960. package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js +0 -2
  961. package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js.map +0 -1
  962. package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js +0 -2
  963. package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js.map +0 -1
  964. package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js +0 -2
  965. package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js.map +0 -1
  966. package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js +0 -2
  967. package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js.map +0 -1
  968. package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js +0 -2
  969. package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js.map +0 -1
  970. package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js +0 -2
  971. package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js.map +0 -1
  972. package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js +0 -2
  973. package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js.map +0 -1
  974. package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js +0 -2
  975. package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js.map +0 -1
  976. package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js +0 -2
  977. package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js.map +0 -1
  978. package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js +0 -2
  979. package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js.map +0 -1
  980. package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js +0 -2
  981. package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js.map +0 -1
  982. package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js +0 -2
  983. package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js.map +0 -1
  984. package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js +0 -2
  985. package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js.map +0 -1
  986. package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js +0 -2
  987. package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js.map +0 -1
  988. package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js +0 -2
  989. package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js.map +0 -1
  990. package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js +0 -3
  991. package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js.map +0 -1
  992. package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js +0 -2
  993. package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js.map +0 -1
  994. package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js +0 -2
  995. package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js.map +0 -1
  996. package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js +0 -2
  997. package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js.map +0 -1
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ShadowDecisions-Gtrbo4US.js","assets/ladder-queries-Cf64JB04.js","assets/autonomy-ladder.module-DDhzYLrs.js","assets/global-1SED_aTT.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/SkipToContent-c02H5dmz.css","assets/VerseConsoleApp-C5481fH5.css","assets/Surface-e1z6GdZt.css","assets/autonomy-ladder-BGWmZzP7.css","assets/Advanced-C1LtnA8c.js","assets/Epistemic-BPBAmLNh.js","assets/StatusBadge-CJbb9DhR.js","assets/ConfirmDialog-J8CszPmj.js","assets/workspace-model-DRGckE8q.js","assets/fleet-model-CPTadBFK.js","assets/fleet-queries-69WuY-dt.js","assets/Epistemic-OaGnEJkn.css","assets/StatusBadge-BVi0IBb9.css","assets/Dialog-tQ8kFulD.css","assets/MutationTokenDialog-CrfJ0PdD.css","assets/ConfirmDialog-Dx15x0Ho.css","assets/RefreshIndicator-CVv22U_j.css","assets/Segmented-BnjHbKzH.css","assets/Meter-CYt9KpM0.css","assets/Select-DSu5ghId.css","assets/Advanced-D3M7D2EW.css","assets/AutonomyStatus-CdHOyhrV.js","assets/Button-DrnKsvnQ.css","assets/AutonomyOffState-CmSSTHVe.css","assets/Sheet-ChxlNivX.css","assets/Tag-D0rAEciH.css","assets/Switch-CU044EaE.css","assets/Slider-AgAdMFpo.css","assets/BudgetControl-CmG1JOWK.css","assets/actions-BbbnyQzG.css","assets/live-model-DF4kekhO.css"])))=>i.map(i=>d[i]);
2
- import{n as e,s as t,t as n,u as r}from"./index-BbDqdepe.js";import{l as i,u as a}from"./global-BWc2NPzv.js";import{t as o}from"./RefreshIndicator-CEMRNruu.js";import{n as s,t as c}from"./Swimlane-DbUp4tjD.js";import{n as l,t as u}from"./Funnel-rnPUaoN7.js";import{Bt as d,Lt as f,Rt as p,h as m,mt as h}from"./VerseConsoleApp-kFOEmnGC.js";import{M as g}from"./VerseShared-_pMXKs8m.js";import{n as _,u as v,v as y}from"./format-CcEKjUou.js";import{t as b}from"./Tag-CMFqY2MP.js";import{n as x,t as S}from"./budget-queries-q7mCG9Ek.js";import{t as C}from"./Button-DP2ImS5n.js";import{C as w,_ as T,a as E,g as D,p as ee,y as te}from"./icons-U34oiN9M.js";import"./command-catalog-BzHSIzIS.js";import{t as ne}from"./Meter-dMqKBaVV.js";import{c as O,n as k,o as re,r as ie,s as A,t as j}from"./AutonomyOffState-C9S_FXc0.js";import{p as M}from"./cloud-model-DuboHWPT.js";import{n as N,r as P}from"./cloud-queries-DQF1a_R-.js";import{t as F}from"./cloud.module-DOP-N4Ch.js";import{a as I,f as L,s as ae}from"./surface-data-DoN8peNV.js";import{t as R}from"./nav-CM-mJcSq.js";import{a as oe,i as z,n as B,r as V,t as H}from"./Surface-CV-NXGIM.js";import{n as se,t as ce}from"./actions-CyO4R-IO.js";import{_ as le,a as ue,c as de,d as fe,f as pe,g as me,i as he,l as ge,n as _e,o as ve,p as U,r as ye,s as be,t as xe,u as Se,v as Ce}from"./live-model-DHX_2gOu.js";import{t as W}from"./Select-zXMdgblm.js";import{t as we}from"./use-ticker-PQ_oYxn5.js";import{a as Te,r as Ee}from"./overnight-queries-BP6viiM5.js";import{t as De}from"./Input-BEF-ScuG.js";import{a as Oe,i as G,n as ke,r as Ae,t as je}from"./fleet-control-queries-BLoc5Gza.js";import{i as Me,n as Ne,r as Pe,t as Fe}from"./why-seat-model-Dh4-Ty9n.js";var K=r(t(),1);function Ie(){if(typeof window>`u`)return null;let e=window.__ASHLR_DESKTOP__?.fleet;return e&&typeof e.send==`function`&&e.version>=1?e:null}function q(e){let t=Ie();return t?e===void 0||!Array.isArray(t.ops)||t.ops.includes(e):!1}var Le=new Set([`done`,`failed`,`cancelled`]);function Re(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&typeof t.op==`string`&&typeof t.phase==`string`&&typeof t.message==`string`}var ze=0;function Be(e,t={}){let n=Ie();if(!n)return Promise.reject(Error(`This needs the Ashlr desktop app.`));ze+=1;let r=`fleet-${Date.now().toString(36)}-${ze}`;return new Promise((i,a)=>{let o=null,s=e=>{let n=e.detail;Re(n)&&n.id===r&&(t.onProgress?.(n),Le.has(n.phase)&&(window.removeEventListener(`ashlr:fleet`,s),o&&clearTimeout(o),i(n)))};window.addEventListener(`ashlr:fleet`,s),o=setTimeout(()=>{window.removeEventListener(`ashlr:fleet`,s),i({id:r,op:e,phase:`failed`,message:`The desktop app did not answer in time. Check the Fleet tab again in a moment.`})},t.timeoutMs??(e===`custody-install`?15e5:3e5)),n.send(t.checkout?{id:r,op:e,checkout:t.checkout}:{id:r,op:e})||(window.removeEventListener(`ashlr:fleet`,s),o&&clearTimeout(o),a(Error(`The desktop app refused that request.`)))})}var J=e(),Ve=5e3,He={title:`Start the fleet?`,body:`Start clears Stop, resumes dispatch and, if autonomy is switched Off, turns it to Autonomous — only within your signed grant. If the daemon is not running, the desktop app asks you to confirm starting it.`,confirmLabel:`Start fleet`,destructive:!1},Ue={running:`running`,idle:`ok`,paused:`warning`,stopped:`danger`,blocked:`danger`,off:`muted`},We={running:`Running`,idle:`Idle`,paused:`Paused`,stopped:`Stopped`,blocked:`Blocked`,off:`Off`};function Ge(e){let t=f(e);return t?d(t,p()):null}function Y(e){return e===null?`$—`:e>=100?`$${Math.round(e)}`:`$${e.toFixed(2)}`}function Ke(e){return e.kind===`resident-start`?`resident-start`:e.kind===`resident-restart`?`resident-restart`:e.kind===`install-custody`?`custody-install`:null}function qe({actions:e,grantFlow:t,darkSince:n=null,setupShownBelow:r=!1}){let o=i(ke,{freshMs:4e3}),s=a(ke);g(s,Ve);let[c,l]=(0,K.useState)([]),[u,d]=(0,K.useState)(null),[f,p]=(0,K.useState)(null),h=o.data?.value??null;function _(e){l(e.did),p(e.needs),s(),e.needs&&b(e.needs,e.state)}function y(e,t){if(!q(e))return;d({op:e,event:null});let n=t=>d(n=>({op:e,event:t,...t.command??n?.command?{command:t.command??n?.command}:{}}));Be(e,{...t?{checkout:t}:{},onProgress:n}).then(e=>{n(e),e.phase===`done`&&p(null)}).catch(t=>d({op:e,event:{id:``,op:e,phase:`failed`,message:t instanceof Error?t.message:String(t)}})).finally(()=>s())}async function b(e,n=h){if(e.kind===`grant`||e.kind===`re-approve`){t.open(e.kind,e.kind===`re-approve`?`The fleet needs the grant renewed before it can run.`:`The fleet needs a standing grant before it can run.`,`autonomous`);return}if(e.kind===`start`){x();return}if(e.kind===`resume`){E();return}let r=Ke(e);if(r&&q(r)){if(r===`custody-install`){let e=n?.custody.hubCheckout;if(!e)return;y(r,e)}else y(r)}}function x(){e.act(()=>G({action:`start`}),`Start the fleet`,{confirm:He,onDone:_})}function S(){e.act(()=>G({action:`pause`}),`Pause the fleet`,{onDone:_})}function E(){e.act(()=>G({action:`resume`}),`Resume the fleet`,{onDone:_})}function O(){e.act(()=>G({action:`stop`}),`Stop the fleet`,{confirm:le(),onDone:_})}function k(){y(`resident-restart`)}function ie(){y(`resident-stop`)}function A(){let e=h?.grant.state===`active`||h?.grant.state===`paused`||h?.grant.state===`expired`;t.open(e?`re-approve`:`grant`,`Choose what the fleet may do, check the difference, then sign it with Touch ID.`,null,{edit:!0})}let j=h?.controls;if(m(`fleet.start`,()=>{(j?.start.enabled??!0)&&x()}),m(`fleet.pause`,()=>{j?.pause.enabled&&S()}),m(`fleet.resume`,()=>{j?.resume.enabled&&E()}),m(`fleet.halt`,()=>O()),m(`fleet.restart-daemon`,()=>k()),m(`fleet.edit-grant`,()=>A()),m(`fleet.install-custody`,()=>{let e=h?.custody.hubCheckout;e&&q(`custody-install`)&&y(`custody-install`,e)}),!h)return(0,J.jsx)(`section`,{className:U.control,"aria-label":`Fleet control`,"data-state":`unknown`,children:o.status===`loading`&&!o.data?(0,J.jsx)(`p`,{className:U.muted,"aria-busy":`true`,children:`Reading the fleet…`}):(0,J.jsx)(B,{tone:`unknown`,children:o.data?.reason??`The fleet controls could not be read.`})});let M=h.blocker,N=q(),P=e.busy||(u!==null&&u.event!==null?![`done`,`failed`,`cancelled`].includes(u.event.phase):u!==null),F=h.grant,I=F.stageId?`${F.stageId}${F.stageIndex!==null&&F.stageCount?` (${F.stageIndex+1}/${F.stageCount})`:``}`:null,L=h.daemon.service===`running`||h.daemon.liveness===`alive`?`Running${h.daemon.pid?` · pid ${h.daemon.pid}`:``}${h.daemon.lastTickAt?` · ticked ${v(h.daemon.lastTickAt)}`:``}`:h.daemon.service===`absent`?`Not installed`:`Not running`;return(0,J.jsxs)(`section`,{className:U.control,"aria-label":`Fleet control`,"data-state":h.state,children:[(0,J.jsxs)(`div`,{className:U.head,children:[(0,J.jsxs)(`p`,{className:U.headline,role:`status`,"aria-live":`polite`,children:[(0,J.jsx)(`span`,{className:U.dot,"data-tone":Ue[h.state],"aria-hidden":`true`}),(0,J.jsx)(`span`,{className:U.stateWord,children:We[h.state]}),(0,J.jsx)(`span`,{children:h.headline.replace(/^[A-Z][a-z]+ · /u,``)})]}),(0,J.jsxs)(`div`,{className:U.buttons,role:`group`,"aria-label":`Fleet controls`,children:[h.paused?(0,J.jsx)(X,{label:`Resume`,icon:(0,J.jsx)(T,{}),keyId:`fleet.resume`,availability:h.controls.resume,onClick:E,busy:e.busy,readOnly:e.readOnly}):(0,J.jsx)(X,{label:`Start`,icon:(0,J.jsx)(T,{}),keyId:`fleet.start`,availability:h.controls.start,onClick:x,busy:e.busy,readOnly:e.readOnly,primary:!0}),h.paused?null:(0,J.jsx)(X,{label:`Pause`,icon:(0,J.jsx)(D,{}),keyId:`fleet.pause`,availability:h.controls.pause,onClick:S,busy:e.busy,readOnly:e.readOnly}),(0,J.jsx)(X,{label:`Stop`,icon:(0,J.jsx)(w,{}),keyId:`fleet.halt`,availability:h.controls.stop,onClick:O,busy:e.busy,readOnly:e.readOnly,danger:!0})]})]}),n&&h.state!==`running`&&h.state!==`idle`?(0,J.jsxs)(`p`,{className:U.muted,children:[`Fleet dark since `,re(n)]}):null,M?(0,J.jsx)(Je,{reason:M.reason,action:M.action,nativeCapable:N,hubCheckout:h.custody.hubCheckout,busy:P,onTake:()=>void b(M.action),setupShownBelow:r}):f&&f.kind!==`grant`&&f.kind!==`re-approve`?(0,J.jsx)(Je,{reason:`one step left`,action:f,nativeCapable:N,hubCheckout:h.custody.hubCheckout,busy:P,onTake:()=>void b(f)}):null,c.length>0?(0,J.jsxs)(`p`,{className:U.did,role:`status`,children:[c.join(` `),(0,J.jsx)(`button`,{type:`button`,className:U.link,onClick:()=>l([]),children:`Dismiss`})]}):null,u?(0,J.jsx)(Xe,{progress:u,onDismiss:()=>d(null)}):null,(0,J.jsxs)(`dl`,{className:U.facts,children:[(0,J.jsxs)(`div`,{className:U.fact,children:[(0,J.jsx)(`dt`,{children:(0,J.jsx)(z,{children:`Agents`})}),(0,J.jsx)(`dd`,{className:U.factValue,children:h.agents.working===null?`unknown`:h.agents.working===0?`none working`:`${h.agents.working} working`})]}),(0,J.jsxs)(`div`,{className:U.fact,children:[(0,J.jsx)(`dt`,{children:(0,J.jsx)(z,{children:`Grant`})}),(0,J.jsxs)(`dd`,{className:U.factValue,children:[F.state===`active`?`#${F.seq??`?`} · ${F.repos.length} repo${F.repos.length===1?``:`s`} · ${F.daysLeft??`?`} d left${I?` · ${I}`:``}`:F.state===`none`?`none signed`:F.state,(0,J.jsxs)(`span`,{className:U.factSub,children:[F.engines.length?F.engines.join(`, `):`no engines`,` · switch `,F.effectiveSwitch]}),(0,J.jsxs)(`button`,{type:`button`,className:U.link,onClick:A,disabled:e.readOnly,children:[(0,J.jsx)(ee,{width:12,height:12,"aria-hidden":`true`}),` Edit scope`]})]})]}),(0,J.jsxs)(`div`,{className:U.fact,children:[(0,J.jsx)(`dt`,{children:(0,J.jsx)(z,{children:`Spend today`})}),(0,J.jsxs)(`dd`,{className:U.factValue,children:[(0,J.jsx)(ne,{value:h.spend.todayUsd,max:h.spend.capUsd,variant:`line`,"aria-label":`Spend today against the daily cap`,valueText:`${Y(h.spend.todayUsd)} of ${Y(h.spend.capUsd)}`}),(0,J.jsxs)(`span`,{className:U.factSub,children:[Y(h.spend.todayUsd),` of `,Y(h.spend.capUsd),` cap`,h.spend.exhausted?` · spent`:``]})]})]}),(0,J.jsxs)(`div`,{className:U.fact,children:[(0,J.jsx)(`dt`,{children:(0,J.jsx)(z,{children:`Daemon`})}),(0,J.jsxs)(`dd`,{className:U.factValue,children:[L,h.daemon.plist===`drifted`?(0,J.jsx)(`span`,{className:U.factSub,children:`plist is older than your config`}):null,N?(0,J.jsx)(`span`,{className:U.inlineButtons,children:h.daemon.service===`running`||h.daemon.liveness===`alive`?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(C,{size:`sm`,variant:`ghost`,icon:(0,J.jsx)(te,{}),onClick:k,disabled:P,children:`Restart`}),(0,J.jsx)(C,{size:`sm`,variant:`ghost`,onClick:ie,disabled:P,children:`Stop daemon`})]}):null}):null]})]}),(0,J.jsxs)(`div`,{className:U.fact,children:[(0,J.jsx)(`dt`,{children:(0,J.jsx)(z,{children:`Custody`})}),(0,J.jsxs)(`dd`,{className:U.factValue,children:[h.custody.installed===!0?`Installed${h.custody.keyInitialized===!0?` · key ready`:h.custody.keyInitialized===!1?` · no key yet`:``}`:h.custody.installed===!1?`Not installed`:`unknown`,(0,J.jsx)(`span`,{className:U.factSub,children:`Signs grants with Touch ID; holds the GitHub App key`}),N&&h.custody.hubCheckout?(0,J.jsx)(`span`,{className:U.inlineButtons,children:(0,J.jsx)(C,{size:`sm`,variant:`ghost`,onClick:()=>y(`custody-install`,h.custody.hubCheckout),disabled:P,children:h.custody.installed===!0?`Reinstall / upgrade`:`Install`})}):null]})]})]})]})}function X({label:e,icon:t,keyId:n,availability:r,onClick:i,busy:a,readOnly:o,primary:s,danger:c}){let l=Ge(n),u=!r.enabled||o;return(0,J.jsxs)(C,{size:`sm`,variant:c?`danger`:s&&r.enabled?`primary`:`subtle`,icon:t,onClick:i,disabled:u,busy:a&&!u,title:o?`Read-only session`:`${r.hint}${l?` (${l})`:``}`,"aria-keyshortcuts":l??void 0,children:[e,l?(0,J.jsx)(`kbd`,{className:U.kbd,children:l}):null]})}function Je({reason:e,action:t,nativeCapable:n,hubCheckout:r,busy:i,onTake:a,setupShownBelow:o=!1}){let s=Ke(t),c=s!==null,l=c&&n&&(s!==`custody-install`||r!==null),u=t.kind!==`wait`&&t.kind!==`setup`&&(!c||l),d=t.kind===`install-custody`&&r?`cd ${r} && ${t.command}`:t.command;return(0,J.jsxs)(`div`,{className:U.blocker,role:`alert`,children:[(0,J.jsx)(`p`,{className:U.blockerReason,children:(0,J.jsxs)(`strong`,{children:[e.charAt(0).toUpperCase(),e.slice(1),`.`]})}),u?(0,J.jsx)(C,{size:`sm`,variant:`primary`,onClick:a,busy:i,children:t.label}):null,t.kind===`setup`&&o?(0,J.jsx)(`span`,{className:U.muted,children:`The setup checklist below names each remaining step.`}):!u&&d?(0,J.jsxs)(`span`,{className:U.blockerCommand,children:[(0,J.jsx)(`span`,{className:U.muted,children:c&&!n?`Open the Ashlr desktop app to do this with a click, or run:`:t.kind===`setup`?`Finish the remaining setup steps (GitHub App, trust root, Claude token):`:`Run:`}),(0,J.jsx)(k,{command:d})]}):null,t.kind===`install-custody`&&n&&!r?(0,J.jsx)(`span`,{className:U.muted,children:`Enroll your ashlr-hub checkout first — the helper is built from its tools/custody sources.`}):null]})}var Ye={confirming:`Waiting for you in the dialog`,running:`Running`,done:`Done`,failed:`Did not finish`,cancelled:`Cancelled`};function Xe({progress:e,onDismiss:t}){let n=e.event,r=n!==null&&(n.phase===`done`||n.phase===`failed`||n.phase===`cancelled`);return(0,J.jsxs)(`div`,{className:U.progress,"data-phase":n?.phase??`confirming`,role:`status`,"aria-live":`polite`,children:[(0,J.jsxs)(`p`,{className:U.progressLine,children:[(0,J.jsx)(`strong`,{children:n?Ye[n.phase]:`Asking the desktop app…`}),n?` — ${n.message}`:``,r?(0,J.jsx)(`button`,{type:`button`,className:U.link,onClick:t,children:`Dismiss`}):null]}),e.command?(0,J.jsx)(`code`,{className:U.command,children:e.command}):null,n?.output?(0,J.jsxs)(`details`,{className:U.output,open:n.phase===`failed`,children:[(0,J.jsxs)(`summary`,{children:[`Output`,n.exitCode===void 0?``:` (exit ${n.exitCode})`]}),(0,J.jsx)(`pre`,{children:n.output})]}):null]})}var Ze=3e3,Qe=15e3;function $e(e){return e?e.runs.filter(e=>e.phase===`producing`&&e.endedAt===null&&e.outcome===null&&!e.id.startsWith(`task:`)&&!e.id.startsWith(`held:`)):[]}function et({live:e,actions:t,now:n}){let r=i(Ae,{freshMs:1e4}),o=a(Ae);g(o,Qe);let s=r.data?.value??null,c=$e(e);return(0,J.jsxs)(H,{title:`Steer the fleet`,caption:`Stop or redirect a run, reorder the queue, retarget goals, tell the Leader`,children:[(0,J.jsxs)(z,{children:[`Working now (`,c.length,`)`]}),c.length===0?(0,J.jsx)(`p`,{className:U.muted,children:`No run is in flight.`}):(0,J.jsx)(`ul`,{className:U.list,children:c.map(e=>(0,J.jsx)(tt,{run:e,actions:t,now:n,onChanged:o},e.id))}),(0,J.jsx)(`p`,{className:U.sectionLabel,children:(0,J.jsxs)(z,{children:[`Queue (`,s?.tasks.length??0,`)`]})}),s===null?(0,J.jsx)(B,{tone:`unknown`,children:r.data?.reason??`Reading the queue…`}):s.tasks.length===0?(0,J.jsx)(`p`,{className:U.muted,children:`Nothing queued. The Leader and the backlog scan add work on every tick.`}):(0,J.jsx)(`ul`,{className:U.list,children:s.tasks.map(e=>(0,J.jsx)(rt,{task:e,repos:s.targets.repos,actions:t,onChanged:o},e.id))}),s&&s.goals.length>0?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`p`,{className:U.sectionLabel,children:(0,J.jsxs)(z,{children:[`Goals (`,s.goals.length,`)`]})}),(0,J.jsx)(`ul`,{className:U.list,children:s.goals.map(e=>(0,J.jsx)(it,{goal:e,paths:s.targets.paths,actions:t,onChanged:o},e.id))})]}):null,(0,J.jsx)(`p`,{className:U.sectionLabel,children:(0,J.jsx)(z,{children:`Tell the Leader`})}),(0,J.jsx)(at,{actions:t})]})}function tt({run:e,actions:t,now:n,onChanged:r}){let[i,a]=(0,K.useState)(null),[o,s]=(0,K.useState)(``),c=(0,K.useId)(),l=!!e.taskId||/^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9._-]+$/u.test(e.repo),u=e.startedAt?Date.parse(e.startedAt):NaN,d=Number.isFinite(u)?Math.max(0,Math.round((n-u)/6e4)):null;function f(){t.act(()=>G({action:`stop-run`,runId:e.id,...e.taskId?{taskId:e.taskId}:{}}),`Stop this run`,{confirm:{title:`Stop this run?`,body:`"${e.title}" on ${y(e.repo)} halts within a few seconds. Nothing it has not filed is kept; its task goes back to the queue.`,confirmLabel:`Stop run`,destructive:!0},onDone:r})}function p(){let n=o.trim();n&&t.act(()=>G(e.taskId?{action:`interject`,runId:e.id,taskId:e.taskId,note:n}:{action:`interject`,runId:e.id,repo:e.repo,title:e.title,note:n}),`Interject on this run`,{onDone:()=>{s(``),a(null),r()}})}return(0,J.jsxs)(`li`,{className:U.row,children:[(0,J.jsxs)(`div`,{className:U.rowHead,children:[(0,J.jsxs)(`p`,{className:U.rowTitle,children:[e.title,(0,J.jsxs)(`span`,{className:U.rowMeta,children:[` `,`· `,y(e.repo),` · `,e.engine??e.lane??`engine ?`,` · `,e.phase,d===null?``:` · ${d} min`]})]}),(0,J.jsxs)(`span`,{className:U.rowControls,children:[(0,J.jsx)(C,{size:`sm`,variant:`ghost`,"aria-expanded":i===`log`,onClick:()=>a(i===`log`?null:`log`),children:`Log`}),(0,J.jsx)(C,{size:`sm`,variant:`ghost`,"aria-expanded":i===`interject`,onClick:()=>a(i===`interject`?null:`interject`),disabled:t.readOnly||!l,title:l?void 0:`This run has no queue task or GitHub repo to requeue on — use Stop.`,children:`Interject`}),(0,J.jsx)(C,{size:`sm`,variant:`danger`,icon:(0,J.jsx)(w,{}),onClick:f,disabled:t.readOnly,children:`Stop`})]})]}),i===`log`?(0,J.jsx)(nt,{runId:e.id}):null,i===`interject`?(0,J.jsxs)(`div`,{className:U.interject,children:[(0,J.jsx)(`label`,{className:U.muted,htmlFor:c,children:`Fleet engines run headless, so this stops the run and queues it again with your note in its brief.`}),(0,J.jsx)(`textarea`,{id:c,className:U.textarea,value:o,maxLength:1e3,onChange:e=>s(e.target.value),placeholder:`e.g. Use the existing fixture helper; do not touch the CLI.`}),(0,J.jsx)(`span`,{className:U.rowControls,children:(0,J.jsx)(C,{size:`sm`,variant:`primary`,onClick:p,disabled:!o.trim()||t.readOnly,busy:t.busy,children:`Stop and requeue with note`})})]}):null]})}function nt({runId:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(null);return(0,K.useEffect)(()=>{let t=!1,r=new AbortController,a=()=>{je(e,r.signal).then(e=>{t||(n(e),i(null))},e=>{!t&&!(e instanceof DOMException&&e.name===`AbortError`)&&i(`The run log could not be read.`)})};a();let o=setInterval(a,Ze);return()=>{t=!0,r.abort(),clearInterval(o)}},[e]),r?(0,J.jsx)(B,{tone:`unknown`,children:r}):t?(0,J.jsxs)(`div`,{children:[t.stopRequestedAt?(0,J.jsxs)(`p`,{className:U.muted,children:[`Stop requested `,v(t.stopRequestedAt),`.`]}):null,t.available?(0,J.jsxs)(`pre`,{className:U.log,"aria-label":`Run log`,"aria-live":`off`,children:[t.truncated?`…
3
- `:``,t.lines.map(e=>`${e.kind===`model-delta`?``:`[${e.kind}] `}${e.text}`).join(`
4
- `)||`(no output yet)`]}):(0,J.jsx)(B,{tone:`unknown`,children:t.reason??`No log for this run.`})]}):(0,J.jsx)(`p`,{className:U.muted,"aria-busy":`true`,children:`Reading the log…`})}function rt({task:e,repos:t,actions:n,onChanged:r}){let i=t.some(t=>t.toLowerCase()===e.repo.toLowerCase())?t:[e.repo,...t];return(0,J.jsx)(`li`,{className:U.row,children:(0,J.jsxs)(`div`,{className:U.rowHead,children:[(0,J.jsxs)(`p`,{className:U.rowTitle,children:[e.title,(0,J.jsxs)(`span`,{className:U.rowMeta,children:[` · `,e.status,` · `,e.source,` · updated `,v(e.updatedAt)]})]}),(0,J.jsxs)(`span`,{className:U.rowControls,children:[(0,J.jsx)(W,{size:`sm`,"aria-label":`Priority of ${e.title}`,value:String(e.value),disabled:n.readOnly,onChange:t=>{let i=Number(t.target.value);n.act(()=>G({action:`task-edit`,taskId:e.id,value:i}),`Reprioritize the task`,{onDone:r})},children:[5,4,3,2,1].map(e=>(0,J.jsx)(`option`,{value:e,children:e===5?`Priority 5 (highest)`:e===1?`Priority 1 (lowest)`:`Priority ${e}`},e))}),(0,J.jsx)(W,{size:`sm`,"aria-label":`Repo for ${e.title}`,value:e.repo,disabled:n.readOnly||e.status===`dispatched`,onChange:t=>{let i=t.target.value;n.act(()=>G({action:`task-edit`,taskId:e.id,repo:i}),`Retarget the task`,{onDone:r})},children:i.map(e=>(0,J.jsx)(`option`,{value:e,children:e},e))}),(0,J.jsx)(C,{size:`sm`,variant:`ghost`,disabled:n.readOnly||e.status===`dispatched`,onClick:()=>n.act(()=>G({action:`task-cancel`,taskId:e.id}),`Cancel the task`,{confirm:{title:`Cancel this task?`,body:`"${e.title}" leaves the queue.`,confirmLabel:`Cancel task`,destructive:!0},onDone:r}),children:`Cancel`})]})]})})}function it({goal:e,paths:t,actions:n,onChanged:r}){let i=e.project&&!t.includes(e.project)?[e.project,...t]:t;return(0,J.jsx)(`li`,{className:U.row,children:(0,J.jsxs)(`div`,{className:U.rowHead,children:[(0,J.jsxs)(`p`,{className:U.rowTitle,children:[e.objective,(0,J.jsxs)(`span`,{className:U.rowMeta,children:[` · `,e.status,e.missionBound?` · bound to a signed mission`:``]})]}),(0,J.jsx)(`span`,{className:U.rowControls,children:(0,J.jsxs)(W,{size:`sm`,"aria-label":`Target repo for ${e.objective}`,value:e.project??``,disabled:n.readOnly||e.missionBound,onChange:t=>{let i=t.target.value;i&&n.act(()=>G({action:`goal-retarget`,goalId:e.id,project:i}),`Retarget the goal`,{onDone:r})},children:[e.project===null?(0,J.jsx)(`option`,{value:``,children:`No repo (planning only)`}):null,i.map(e=>(0,J.jsx)(`option`,{value:e,children:e},e))]})})]})})}function at({actions:e}){let[t,n]=(0,K.useState)(``),[r,i]=(0,K.useState)(!1);function a(){let r=t.trim();r&&e.act(()=>Oe(r),`Add a Leader directive`,{onDone:()=>{n(``),i(!0)}})}return(0,J.jsxs)(`form`,{className:U.directive,onSubmit:e=>{e.preventDefault(),a()},children:[(0,J.jsx)(De,{size:`sm`,label:`Directive`,value:t,maxLength:300,disabled:e.readOnly,onChange:e=>{n(e.target.value),i(!1)},placeholder:`e.g. Prioritise test coverage in ashlrcode this week`,hint:r?`Added. The Leader reads it on its next run; it never widens the grant.`:`A standing instruction for the Leader. It never widens the grant.`}),(0,J.jsx)(C,{type:`submit`,size:`sm`,variant:`subtle`,disabled:!t.trim()||e.readOnly,children:`Add directive`})]})}function ot({classes:e={}}){let t=i(P,{freshMs:15e3}),n=a(P);g(n,N);let r=t.data?.value??null;if(!r)return null;let o=M(r.tasks),s=`Claude Code cloud sessions Verse launched that have not delivered a PR yet. ${r.budget.sessionsToday} of ${r.budget.budget.maxSessionsPerDay} sessions used today.`;return(0,J.jsxs)(`li`,{className:`${e.lane??``} ${F.laneChip}`,"data-active":o>0||void 0,title:s,"aria-label":`Cloud: ${o} running`,children:[(0,J.jsx)(`span`,{className:e.name,children:`Cloud`}),(0,J.jsx)(`span`,{className:e.sep,"aria-hidden":`true`,children:` · `}),(0,J.jsxs)(`span`,{className:e.slots,children:[o,` running`]})]})}var Z={stack:`_stack_j599h_5`,muted:`_muted_j599h_11`,link:`_link_j599h_18`,disclosure:`_disclosure_j599h_34`,num:`_num_j599h_39`,lanes:`_lanes_j599h_45`,lane:`_lane_j599h_45`,laneName:`_laneName_j599h_72`,laneSlots:`_laneSlots_j599h_77`,laneSep:`_laneSep_j599h_83`,laneStrip:`_laneStrip_j599h_88`,laneNotes:`_laneNotes_j599h_94`,laneNoteLanes:`_laneNoteLanes_j599h_107`,decision:`_decision_j599h_113`,decisionLead:`_decisionLead_j599h_119`,mode:`_mode_j599h_129`,decisionWhy:`_decisionWhy_j599h_142`,candidates:`_candidates_j599h_149`,exclusions:`_exclusions_j599h_150`,excluded:`_excluded_j599h_170`,excludedWhy:`_excludedWhy_j599h_175`,excludedWhen:`_excludedWhen_j599h_179`,overnight:`_overnight_j599h_184`,overnightLead:`_overnightLead_j599h_190`,facts:`_facts_j599h_196`,discarded:`_discarded_j599h_219`,discardTitle:`_discardTitle_j599h_234`,discardWhy:`_discardWhy_j599h_238`,tableWrap:`_tableWrap_j599h_243`,table:`_table_j599h_243`,repoName:`_repoName_j599h_276`,actionCell:`_actionCell_j599h_283`,stage:`_stage_j599h_287`,stageNote:`_stageNote_j599h_309`,green:`_green_j599h_314`,greenValue:`_greenValue_j599h_320`,holds:`_holds_j599h_325`,hold:`_hold_j599h_325`,repoCards:`_repoCards_j599h_347`,repoCard:`_repoCard_j599h_347`,repoCardHead:`_repoCardHead_j599h_365`,advanced:`_advanced_j599h_373`,chevron:`_chevron_j599h_399`,disclosureNote:`_disclosureNote_j599h_407`},Q=36e5;function $(e,t,n){if(!e)return{kind:`loading`};let r=e.value;return r?r.state===`dark`&&!n?O(r):n?{kind:`ready`}:{kind:`empty`,message:t}:{kind:`unknown`,reason:e.reason??`the live fleet view did not answer.`}}function st({lane:e}){let t=he(e);return(0,J.jsxs)(`li`,{className:Z.lane,"data-off":e.slots===0||void 0,title:ve(e)??void 0,children:[(0,J.jsx)(b,{engine:xe[e.lane]}),(0,J.jsx)(`span`,{className:Z.laneName,children:t.name}),(0,J.jsx)(`span`,{className:Z.laneSep,"aria-hidden":`true`,children:` · `}),(0,J.jsx)(`span`,{className:Z.laneSlots,children:t.slots})]})}function ct({live:e}){if(!e||e.lanes.length===0)return null;let t=ue(e.lanes);return(0,J.jsxs)(`div`,{className:Z.laneStrip,children:[(0,J.jsxs)(`ul`,{className:Z.lanes,"aria-label":`Lanes: busy of slots`,children:[e.lanes.map(e=>(0,J.jsx)(st,{lane:e},e.lane)),(0,J.jsx)(ot,{classes:{lane:Z.lane,name:Z.laneName,sep:Z.laneSep,slots:Z.laneSlots}})]}),t.length>0?(0,J.jsx)(`ul`,{className:Z.laneNotes,"aria-label":`Why lanes are limited`,children:t.map(e=>(0,J.jsxs)(`li`,{children:[e.all?null:(0,J.jsxs)(`span`,{className:Z.laneNoteLanes,children:[e.lanes.map(e=>_e[e]).join(`, `),`: `]}),_(e.reason)]},e.lanes.join(`,`)))}):null]})}function lt({read:e,now:t,hours:n}){let r=e?.value??null,i=t-n*Q,a=r?be(r.runs,i,t,{includeParked:!1}):[];return(0,J.jsx)(c,{title:`Live fleet`,description:`Lanes × slots, last ${n} h · bars coloured by phase or outcome · outlines are queued`,status:$(e,`Nothing ran in the last ${n} hours.`,a.length>0),lanes:a,from:i,to:t,now:t,toneOf:pe})}function ut({read:e}){let t=(e?.value??null)?.funnel??null,n=ye(t),r=fe(t),i=t?`${new Date(t.from).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})} – ${new Date(t.to).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})}`:void 0;return(0,J.jsxs)(`div`,{className:Z.stack,children:[(0,J.jsx)(u,{title:`Gate funnel`,description:i?`Proposals through G0–G7, ${i}`:`Proposals through the merge gates G0–G7`,status:$(e,`No proposal reached the gates in this window.`,n.length>0),stages:n}),(0,J.jsx)(l,{title:`Refusals by gate`,description:r.total?`${r.total} refusals · top reasons keep their colour`:`Why proposals stopped`,status:$(e,`Nothing was refused in this window.`,r.total>0),categories:r.categories,segments:r.segments,values:r.values,height:180})]})}function dt(e,t){let n=e?.seatInfo.find(e=>e.seatId===t);return{label:n?.label??t,engine:n?.engine??null}}function ft({decision:e,view:t,now:n}){let r=e.seatId?dt(t,e.seatId):null;return(0,J.jsxs)(`div`,{className:Z.decision,children:[(0,J.jsxs)(`p`,{className:Z.decisionLead,children:[r?(0,J.jsxs)(J.Fragment,{children:[r.engine?(0,J.jsx)(b,{engine:r.engine}):null,(0,J.jsx)(`strong`,{children:r.label})]}):(0,J.jsx)(`strong`,{children:`No seat`}),(0,J.jsx)(`span`,{className:Z.mode,children:e.mode})]}),(0,J.jsx)(`p`,{className:Z.decisionWhy,children:Fe(e)}),e.candidates.length>1?(0,J.jsxs)(`div`,{children:[(0,J.jsx)(z,{children:`Then`}),(0,J.jsx)(`ol`,{className:Z.candidates,children:e.candidates.slice(+!!e.seatId).map(e=>(0,J.jsx)(`li`,{children:dt(t,e).label},e))})]}):null,e.exclusions.length?(0,J.jsxs)(`div`,{children:[(0,J.jsx)(z,{children:`Held back`}),(0,J.jsx)(`ul`,{className:Z.exclusions,"aria-label":`Held back seats`,children:e.exclusions.map(e=>(0,J.jsxs)(`li`,{children:[(0,J.jsx)(`span`,{className:Z.excluded,children:dt(t,e.seatId).label}),(0,J.jsx)(`span`,{className:Z.excludedWhy,children:Me(e)}),(0,J.jsxs)(`span`,{className:Z.excludedWhen,children:[`eligible again: `,Ne(Pe(e),n)]})]},e.seatId))})]}):null]})}function pt({read:e,preview:t,view:n,now:r}){let i=de(e?.value??null);return(0,J.jsx)(H,{title:`Why this seat`,caption:i?`Latest dispatch: ${i.run.title} (${v(i.run.phaseStartedAt??i.run.startedAt)})`:t?`The next medium autonomous task would go to…`:void 0,children:i?(0,J.jsx)(ft,{decision:i.decision,view:n,now:r}):t?(0,J.jsx)(ft,{decision:t,view:n,now:r}):(0,J.jsx)(B,{tone:`unknown`,children:`No routing decision yet. The router preview didn't answer.`})})}function mt({read:e,now:t}){let n=e?.value??null,r=n?Se(n.runs,t):{lanes:[],from:t-Q,to:t+2*Q,unknownRelease:0};return(0,J.jsx)(c,{title:`Parked`,description:`Waiting for a seat to free up — each bar ends when it should`,caveat:r.unknownRelease?`${r.unknownRelease} item${r.unknownRelease===1?` has`:`s have`} no known release time; ${r.unknownRelease===1?`it runs`:`they run`} to the right edge.`:void 0,status:$(e,`Nothing is parked.`,r.lanes.length>0),lanes:r.lanes,from:r.from,to:r.to,now:t,toneOf:pe,formatTick:e=>new Date(e).toLocaleString(`en-US`,{weekday:`short`,hour:`numeric`})})}function ht({read:e,onOpenAdvanced:t,dark:n=!1}){let r=e?.value??null,i=r?.run??null;return(0,J.jsx)(H,{title:`Overnight`,caption:r?r.armed?`Armed`:`Not armed`:void 0,actions:(0,J.jsx)(`button`,{type:`button`,className:Z.link,onClick:t,children:`Arm or stop in Advanced`}),children:e?r?!r.armed&&!i?(0,J.jsx)(B,{children:n?`Nothing armed.`:`Nothing armed. The fleet runs on its normal schedule.`}):(0,J.jsxs)(`div`,{className:Z.overnight,children:[i?.stopRule?(0,J.jsx)(`p`,{className:Z.overnightLead,children:Te(i.stopRule)}):null,(0,J.jsxs)(`dl`,{className:Z.facts,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Started`}),(0,J.jsx)(`dd`,{children:i?.startedAt?v(i.startedAt):`—`})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Iterations`}),(0,J.jsx)(`dd`,{children:i?.iterationsDone??`—`})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Merged`}),(0,J.jsx)(`dd`,{children:i?i.merged.length:`—`})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Discarded`}),(0,J.jsx)(`dd`,{children:i?i.discarded.length:`—`})]})]}),i?.activity?(0,J.jsxs)(`p`,{className:Z.muted,children:[`Now: `,i.activity]}):null,i&&i.discarded.length?(0,J.jsx)(`ul`,{className:Z.discarded,"aria-label":`Discarded work`,children:i.discarded.slice(0,3).map(e=>(0,J.jsxs)(`li`,{children:[(0,J.jsx)(`span`,{className:Z.discardTitle,children:e.title}),(0,J.jsx)(`span`,{className:Z.discardWhy,children:e.reason})]},e.id))}):null]}):(0,J.jsx)(B,{tone:`unknown`,children:e.reason??`The overnight lane did not answer.`}):(0,J.jsx)(`p`,{className:Z.muted,"aria-busy":`true`,children:`Reading the overnight lane…`})})}var gt={quarantine:`Quarantined`,"owner-hold":`On hold (you)`,"leader-pause":`Paused by Leader`,cooldown:`Cooling down`};function _t(e,t){let n=e.until?Date.parse(e.until):NaN,r=Number.isFinite(n)?Math.max(0,n-t):null,i=r===null?`until resumed`:r<36e5?`${Math.ceil(r/6e4)}m left`:`${Math.round(r/36e5)}h left`;return`${gt[e.kind]} · ${i}`}function vt(e){return e.includes(`/`)?e.split(`/`)[1]:e}function yt({row:e}){return e.stage===null?(0,J.jsx)(`span`,{className:Z.stage,"data-stage":`none`,children:`Not in grant`}):(0,J.jsxs)(`span`,{className:Z.stage,"data-stage":e.stage,children:[e.stage===`merge`?`Merge`:`Propose`,e.enforcement===`local`?(0,J.jsx)(`span`,{className:Z.stageNote,children:` · local checks`}):null]})}function bt({row:e,actions:t}){let n=t.busy||t.readOnly;return e.holds.length?(0,J.jsx)(C,{size:`sm`,variant:`subtle`,disabled:n,"aria-label":`Resume ${e.repo}`,onClick:()=>t.act(()=>L({action:`resume-repo`,repo:e.repo}),`Resume ${e.repo}`,{confirm:{title:`Resume ${vt(e.repo)}?`,body:`Clears ${e.holds.map(e=>gt[e.kind].toLowerCase()).join(` and `)}. New fleet work can start there on the next tick.`,confirmLabel:`Resume`}}),children:`Resume`}):e.stage===null?null:(0,J.jsx)(C,{size:`sm`,variant:`ghost`,disabled:n,"aria-label":`Pause ${e.repo}`,onClick:()=>t.act(()=>L({action:`pause-repo`,repo:e.repo,reason:`Paused by Mason from the Fleet surface`}),`Pause ${e.repo}`,{confirm:{title:`Pause ${vt(e.repo)}?`,body:`No new fleet work starts there until you resume it. Runs already in flight finish and are watched as usual.`,confirmLabel:`Pause repo`,destructive:!0}}),children:`Pause`})}function xt({row:e}){return(0,J.jsxs)(`span`,{className:Z.green,children:[(0,J.jsx)(`span`,{className:Z.greenValue,children:e.greenPct7d===null?`—`:`${Math.round(e.greenPct7d)}%`}),(0,J.jsx)(s,{points:e.greenTrend,width:64,height:18,ariaLabel:`${e.repo} post-merge green, 14 days`,describe:e=>`${Math.round(e)}%`})]})}function St({row:e,now:t}){return e.holds.length?(0,J.jsx)(`span`,{className:Z.holds,children:e.holds.map(e=>(0,J.jsx)(`span`,{className:Z.hold,"data-kind":e.kind,title:e.reason,children:_t(e,t)},e.kind))}):(0,J.jsx)(`span`,{className:Z.muted,children:`—`})}function Ct(e){if(e===void 0)return null;if(e===null)return`Fleet mirrors: unknown — the enrollment registry could not be read.`;if(e.count===0)return`Fleet mirrors: none yet — the fleet clones a repo the first time it works on it.`;let t=e.repos.slice(0,6).join(`, `),n=e.repos.length>6?` and ${e.repos.length-6} more`:``;return`Fleet mirrors: ${e.count} working ${e.count===1?`copy`:`copies`}${t?` (${t}${n})`:``} — the fleet's own clones of the repos above.`}var wt=e=>e.mergesToday===null?`—`:`${e.mergesToday}${e.maxMergesPerDay===null?``:` / ${e.maxMergesPerDay}`}`;function Tt({read:e,actions:t,now:n,compact:r}){let i=e?.value??null,a=i?.repos??[];return(0,J.jsxs)(H,{title:`Repositories`,caption:i?`${a.length} enrolled · stage is what the grant and rollout allow right now`:void 0,children:[e?i?a.length===0?(0,J.jsx)(B,{children:`No repositories are enrolled.`}):r?(0,J.jsx)(`ul`,{className:Z.repoCards,children:a.map(e=>(0,J.jsxs)(`li`,{className:Z.repoCard,id:R(`repo-${e.repo}`),children:[(0,J.jsxs)(`div`,{className:Z.repoCardHead,children:[(0,J.jsx)(`span`,{className:Z.repoName,children:e.repo}),(0,J.jsx)(bt,{row:e,actions:t})]}),(0,J.jsxs)(`dl`,{className:Z.facts,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Stage`}),(0,J.jsx)(`dd`,{children:(0,J.jsx)(yt,{row:e})})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Last merge`}),(0,J.jsx)(`dd`,{children:e.lastMergeAt?v(e.lastMergeAt):`—`})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Today`}),(0,J.jsx)(`dd`,{children:wt(e)})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{children:`Green 7d`}),(0,J.jsx)(`dd`,{children:(0,J.jsx)(xt,{row:e})})]})]}),(0,J.jsx)(St,{row:e,now:n})]},e.repo))}):(0,J.jsx)(`div`,{className:Z.tableWrap,children:(0,J.jsxs)(`table`,{className:Z.table,children:[(0,J.jsx)(`caption`,{className:`visually-hidden`,children:`Enrolled repositories`}),(0,J.jsx)(`thead`,{children:(0,J.jsxs)(`tr`,{children:[(0,J.jsx)(`th`,{scope:`col`,children:`Repository`}),(0,J.jsx)(`th`,{scope:`col`,children:`Stage`}),(0,J.jsx)(`th`,{scope:`col`,children:`Last merge`}),(0,J.jsx)(`th`,{scope:`col`,className:Z.num,children:`Today`}),(0,J.jsx)(`th`,{scope:`col`,children:`Post-merge green · 14d`}),(0,J.jsx)(`th`,{scope:`col`,className:Z.num,children:`Open PRs`}),(0,J.jsx)(`th`,{scope:`col`,children:`Holds`}),(0,J.jsx)(`th`,{scope:`col`,children:(0,J.jsx)(`span`,{className:`visually-hidden`,children:`Action`})})]})}),(0,J.jsx)(`tbody`,{children:a.map(e=>(0,J.jsxs)(`tr`,{id:R(`repo-${e.repo}`),"data-held":e.holds.length>0||void 0,children:[(0,J.jsx)(`th`,{scope:`row`,className:Z.repoName,children:e.repo}),(0,J.jsx)(`td`,{children:(0,J.jsx)(yt,{row:e})}),(0,J.jsx)(`td`,{children:e.lastMergeAt?v(e.lastMergeAt):`—`}),(0,J.jsx)(`td`,{className:Z.num,children:wt(e)}),(0,J.jsx)(`td`,{children:(0,J.jsx)(xt,{row:e})}),(0,J.jsx)(`td`,{className:Z.num,children:e.openFleetPrs??`—`}),(0,J.jsx)(`td`,{children:(0,J.jsx)(St,{row:e,now:n})}),(0,J.jsx)(`td`,{className:Z.actionCell,children:(0,J.jsx)(bt,{row:e,actions:t})})]},e.repo))})]})}):(0,J.jsx)(B,{tone:`unknown`,children:e.reason??`The live fleet view did not answer.`}):(0,J.jsx)(`p`,{className:Z.muted,"aria-busy":`true`,children:`Reading repositories…`}),i&&Ct(i.mirrors)?(0,J.jsx)(`p`,{className:Z.muted,children:Ct(i.mirrors)}):null]})}var Et=5e3,Dt=3e4,Ot=(0,K.lazy)(()=>n(()=>import(`./ShadowDecisions-Gtrbo4US.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),kt=(0,K.lazy)(()=>n(()=>import(`./Advanced-C1LtnA8c.js`).then(e=>e.t).then(e=>({default:()=>(0,J.jsx)(e.FleetAdvanced,{embedded:!0})})),__vite__mapDeps([9,10,11,12,13,14,15,3,16,17,18,19,20,21,5,4,6,22,23,24,25]))),At=(0,K.lazy)(()=>n(()=>import(`./AutonomyStatus-CdHOyhrV.js`),__vite__mapDeps([26,1,2,3,4,5,6,27,23,28,22,29,18,19,30,31,32,33,7,34,35,8])));function jt(){let{compact:e}=h(),t=i(ae),n=i(Ee),r=i(x,{freshMs:15e3}),s=i(S,{freshMs:15e3}),c=a(ae),l=a(Ee),u=a(S);g(c,Et),g(()=>{l(),u()},Dt);let d=we(15e3),f=se(),p=Ce(f),[m,_]=(0,K.useState)(!1),v=(0,K.useId)(),y=t.data?.value??null,b=ie(),C=i(I,{freshMs:3e4}).data?.value??null,w=C?.grant.state??null,T=w!==null&&w!==`none`,D=b!=null&&y!==null&&ge(y);function ee(){_(!0),requestAnimationFrame(()=>document.getElementById(v)?.scrollIntoView?.({block:`start`,behavior:`smooth`}))}return(0,J.jsxs)(oe,{title:`Fleet`,actions:t.status===`refreshing`?(0,J.jsx)(o,{}):null,lead:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(ce,{actions:f}),(0,J.jsxs)(`div`,{id:R(`fleet-control`),children:[(0,J.jsx)(`span`,{id:R(`authority-grant`)}),(0,J.jsx)(qe,{actions:f,grantFlow:p,darkSince:A(y),setupShownBelow:b?.kind===`setup`})]}),b&&b.kind===`setup`?(0,J.jsx)(j,{state:b,here:`fleet`}):null,(0,J.jsx)(ct,{live:y})]}),children:[C&&C.grant.state===`active`?(0,J.jsx)(V,{span:12,children:(0,J.jsx)(`div`,{id:R(`autonomy`),children:(0,J.jsx)(K.Suspense,{fallback:(0,J.jsx)(`p`,{className:Z.muted,"aria-busy":`true`,children:`Loading the rollout ladder…`}),children:(0,J.jsx)(At,{status:C,now:d,onReapprove:e=>p.open(`re-approve`,e),blocked:me({status:C,reason:null,readOnly:f.readOnly,busy:f.busy})})})})}):null,(0,J.jsx)(V,{span:12,children:(0,J.jsx)(et,{live:y,actions:f,now:d})}),D?null:(0,J.jsx)(V,{span:12,children:(0,J.jsx)(lt,{read:t.data,now:d,hours:e?6:12})}),T?(0,J.jsx)(V,{span:12,children:(0,J.jsx)(K.Suspense,{fallback:(0,J.jsx)(`p`,{className:Z.muted,"aria-busy":`true`,children:`Loading shadow decisions…`}),children:(0,J.jsx)(Ot,{now:d})})}):null,D?null:(0,J.jsx)(V,{span:7,children:(0,J.jsx)(ut,{read:t.data})}),(0,J.jsx)(V,{span:D?6:5,children:(0,J.jsx)(pt,{read:t.data,preview:s.data??null,view:r.data??null,now:d})}),D?null:(0,J.jsx)(V,{span:7,children:(0,J.jsx)(mt,{read:t.data,now:d})}),(0,J.jsx)(V,{span:D?6:5,children:(0,J.jsx)(ht,{read:n.data,onOpenAdvanced:ee,dark:y?.state===`dark`})}),(0,J.jsx)(V,{span:12,children:(0,J.jsx)(Tt,{read:t.data,actions:f,now:d,compact:e})}),(0,J.jsx)(V,{span:12,children:(0,J.jsxs)(`div`,{className:Z.advanced,children:[(0,J.jsxs)(`button`,{type:`button`,className:Z.disclosure,"aria-expanded":m,"aria-controls":v,onClick:()=>_(e=>!e),children:[(0,J.jsx)(E,{className:Z.chevron,width:14,height:14,"aria-hidden":`true`}),`Advanced`,(0,J.jsx)(`span`,{className:Z.disclosureNote,children:`daemon, overnight, local runtime, caps, scope, activity, safety, goals`})]}),(0,J.jsx)(`div`,{id:v,hidden:!m,children:m?(0,J.jsx)(K.Suspense,{fallback:(0,J.jsx)(`p`,{className:Z.muted,"aria-busy":`true`,children:`Loading the advanced panels…`}),children:(0,J.jsx)(kt,{})}):null})]})}),p.sheet,f.dialogs]})}export{Et as FLEET_POLL_MS,Dt as FLEET_SLOW_POLL_MS,jt as FleetSection};
5
- //# sourceMappingURL=FleetSection-D2M7u9zG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"mappings":";yrDAgCA,SAAS,IAA6B,CACpC,GAAI,OAAO,OAAW,IAAa,OAAO,KAE1C,IAAM,EADW,OAAsE,mBAChE,MACvB,OAAO,GAAS,OAAO,EAAM,MAAS,YAAc,EAAM,SAAW,EAAI,EAAQ,IACnF,CAGA,SAAgB,EAAqB,EAA6B,CAChE,IAAM,EAAI,GAAO,EAEjB,OADK,EACE,IAAO,QAAa,CAAC,MAAM,QAAQ,EAAE,GAAG,GAAK,EAAE,IAAI,SAAS,CAAE,EADtD,EAEjB,CAEA,IAAM,GAA0C,IAAI,IAAI,CAAC,OAAQ,SAAU,WAAW,CAAC,EAEvF,SAAS,GAAa,EAA2C,CAC/D,GAAI,CAAC,GAAS,OAAO,GAAU,SAAU,MAAO,GAChD,IAAM,EAAI,EACV,OAAO,OAAO,EAAE,IAAU,UAAY,OAAO,EAAE,IAAU,UAAY,OAAO,EAAE,OAAa,UAAY,OAAO,EAAE,SAAe,QACjI,CAEA,IAAI,GAAU,EAQd,SAAgB,GACd,EACA,EAAkG,CAAC,EACxE,CAC3B,IAAM,EAAI,GAAO,EACjB,GAAI,CAAC,EAAG,OAAO,QAAQ,OAAW,MAAM,mCAAmC,CAAC,EAC5E,IAAW,EACX,IAAM,EAAK,SAAS,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,KAC/C,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,IAAI,EAA8C,KAC5C,EAAW,GAAiB,CAChC,IAAM,EAAU,EAAsB,OACjC,GAAa,CAAM,GAAK,EAAO,KAAO,IAC3C,EAAK,aAAa,CAAM,EACpB,GAAS,IAAI,EAAO,KAAK,IAC3B,OAAO,oBAAoB,cAAe,CAAO,EAC7C,GAAO,aAAa,CAAK,EAC7B,EAAQ,CAAM,GAElB,EACA,OAAO,iBAAiB,cAAe,CAAO,EAC9C,EAAQ,eAAiB,CACvB,OAAO,oBAAoB,cAAe,CAAO,EACjD,EAAQ,CAAE,KAAI,KAAI,MAAO,SAAU,QAAS,gFAAiF,CAAC,CAChI,EAAG,EAAK,YAAc,IAAO,kBAAoB,KAAc,IAAW,EAC7D,EAAE,KAAK,EAAK,SAAW,CAAE,KAAI,KAAI,SAAU,EAAK,QAAS,EAAI,CAAE,KAAI,IAAG,CAC9E,IACH,OAAO,oBAAoB,cAAe,CAAO,EAC7C,GAAO,aAAa,CAAK,EAC7B,EAAW,MAAM,uCAAuC,CAAC,EAE7D,CAAC,CACH,WCxDa,GAAwB,IAE/B,GAA6B,CACjC,MAAO,mBACP,KAAM,+MACN,aAAc,cACd,YAAa,EACf,EAEM,GAA2D,CAC/D,QAAS,UACT,KAAM,KACN,OAAQ,UACR,QAAS,SACT,QAAS,SACT,IAAK,OACP,EAEM,GAA2D,CAC/D,QAAS,UACT,KAAM,OACN,OAAQ,SACR,QAAS,UACT,QAAS,UACT,IAAK,KACP,EAEA,SAAS,GAAQ,EAA2B,CAC1C,IAAM,EAAQ,EAAa,CAAE,EAC7B,OAAO,EAAQ,EAAY,EAAO,EAAkB,CAAC,EAAI,IAC3D,CAEA,SAAS,EAAM,EAA0B,CAEvC,OADI,IAAM,KAAa,KAChB,GAAK,IAAM,IAAI,KAAK,MAAM,CAAC,IAAM,IAAI,EAAE,QAAQ,CAAC,GACzD,CAGA,SAAS,GAAY,EAA+C,CAIlE,OAHI,EAAO,OAAS,iBAAyB,iBACzC,EAAO,OAAS,mBAA2B,mBAC3C,EAAO,OAAS,kBAA0B,kBACvC,IACT,CAkBA,SAAgB,GAAa,CAAE,UAAS,YAAW,YAAY,KAAM,kBAAkB,IAA4B,CACjH,IAAM,EAAO,EAAS,GAAmB,CAAE,QAAS,GAAM,CAAC,EACrD,EAAU,EAAW,EAAiB,EAC5C,EAAoB,EAAS,EAAqB,EAClD,GAAM,CAAC,EAAK,MAAU,YAAmB,CAAC,CAAC,EACrC,CAAC,EAAU,MAAe,YAA0B,IAAI,EACxD,CAAC,EAAO,MAAY,YAAiC,IAAI,EACzD,EAAQ,EAAK,MAAM,OAAS,KAElC,SAAS,EAAY,EAA0C,CAC7D,EAAO,EAAO,GAAG,EACjB,EAAS,EAAO,KAAK,EACrB,EAAQ,EACJ,EAAO,OAAO,EAAU,EAAO,MAAO,EAAO,KAAK,CACxD,CAEA,SAAS,EAAU,EAAmB,EAAyB,CAC7D,GAAI,CAAC,EAAqB,CAAE,EAAG,OAC/B,EAAY,CAAE,KAAI,MAAO,IAAK,CAAC,EAC/B,IAAM,EAAS,GAA4B,EAAa,IAAU,CAAE,KAAI,QAAO,GAAI,EAAM,SAAW,GAAM,QAAU,CAAE,QAAS,EAAM,SAAW,GAAM,OAAQ,EAAI,CAAC,CAAG,EAAE,EACxK,GAAsB,EAAI,CAAE,GAAI,EAAW,CAAE,UAAS,EAAI,CAAC,EAAI,WAAY,CAAM,CAAC,CAAC,CAChF,KAAM,GAAU,CACf,EAAM,CAAK,EACP,EAAM,QAAU,QAAQ,EAAS,IAAI,CAC3C,CAAC,CAAC,CACD,MAAO,GAAmB,EAAY,CAAE,KAAI,MAAO,CAAE,GAAI,GAAI,KAAI,MAAO,SAAU,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAE,CAAE,CAAC,CAAC,CAAC,CACvJ,YAAc,EAAQ,CAAC,CAC5B,CAGA,eAAe,EAAK,EAAyB,EAAsC,EAAsB,CACvG,GAAI,EAAO,OAAS,SAAW,EAAO,OAAS,aAAc,CAC3D,EAAU,KAAK,EAAO,KAAM,EAAO,OAAS,aAAe,uDAAyD,sDAAuD,YAAY,EACvL,MACF,CACA,GAAI,EAAO,OAAS,QAAS,CAC3B,EAAM,EACN,MACF,CACA,GAAI,EAAO,OAAS,SAAU,CAC5B,EAAO,EACP,MACF,CACA,IAAM,EAAK,GAAY,CAAM,EAC7B,GAAI,GAAM,EAAqB,CAAE,EAAG,CAClC,GAAI,IAAO,kBAAmB,CAC5B,IAAM,EAAW,GAAS,QAAQ,YAClC,GAAI,CAAC,EAAU,OACf,EAAU,EAAI,CAAQ,CACxB,MAAO,EAAU,CAAE,CACrB,CACF,CAEA,SAAS,GAAc,CACrB,EAAQ,QAAU,EAAiB,CAAE,OAAQ,OAAQ,CAAC,EAAG,kBAAmB,CAAE,QAAS,GAAe,OAAQ,CAAY,CAAC,CAC7H,CACA,SAAS,GAAc,CACrB,EAAQ,QAAU,EAAiB,CAAE,OAAQ,OAAQ,CAAC,EAAG,kBAAmB,CAAE,OAAQ,CAAY,CAAC,CACrG,CACA,SAAS,GAAe,CACtB,EAAQ,QAAU,EAAiB,CAAE,OAAQ,QAAS,CAAC,EAAG,mBAAoB,CAAE,OAAQ,CAAY,CAAC,CACvG,CACA,SAAS,GAAa,CACpB,EAAQ,QAAU,EAAiB,CAAE,OAAQ,MAAO,CAAC,EAAG,iBAAkB,CAAE,QAAS,GAAY,EAAG,OAAQ,CAAY,CAAC,CAC3H,CACA,SAAS,GAAsB,CAC7B,EAAU,kBAAkB,CAC9B,CACA,SAAS,IAAmB,CAE1B,EAAU,eAAe,CAC3B,CACA,SAAS,GAAkB,CACzB,IAAM,EAAS,GAAO,MAAM,QAAU,UAAY,GAAO,MAAM,QAAU,UAAY,GAAO,MAAM,QAAU,UAC5G,EAAU,KAAK,EAAS,aAAe,QAAS,kFAAmF,KAAM,CAAE,KAAM,EAAK,CAAC,CACzJ,CAEA,IAAM,EAAW,GAAO,SAkBxB,GAjBA,EAAkB,kBAAqB,EACjC,GAAU,MAAM,SAAW,KAAM,EAAM,CAC7C,CAAC,EACD,EAAkB,kBAAqB,CACjC,GAAU,MAAM,SAAS,EAAM,CACrC,CAAC,EACD,EAAkB,mBAAsB,CAClC,GAAU,OAAO,SAAS,EAAO,CACvC,CAAC,EACD,EAAkB,iBAAoB,EAAK,CAAC,EAC5C,EAAkB,2BAA8B,EAAc,CAAC,EAC/D,EAAkB,uBAA0B,EAAU,CAAC,EACvD,EAAkB,4BAA+B,CAC/C,IAAM,EAAW,GAAO,QAAQ,YAC5B,GAAY,EAAqB,iBAAiB,GAAG,EAAU,kBAAmB,CAAQ,CAChG,CAAC,EAEG,CAAC,EAEH,OACE,SAAC,UAAD,CAAS,UAAW,EAAO,QAAS,aAAW,gBAAgB,aAAW,UACvE,WAAK,SAAW,WAAa,CAAC,EAAK,MAClC,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,6BAAqB,IAElE,SAAC,EAAD,CAAU,KAAK,UAAW,WAAK,MAAM,QAAU,uCAAkD,EAE5F,GAIb,IAAM,EAAU,EAAM,QAChB,EAAgB,EAAqB,EACrC,EAAO,EAAQ,OAAS,IAAa,MAAQ,EAAS,QAAU,KAAO,CAAC,CAAC,OAAQ,SAAU,WAAW,CAAC,CAAC,SAAS,EAAS,MAAM,KAAK,EAAI,IAAa,MACtJ,EAAI,EAAM,MACV,EAAQ,EAAE,QAAU,GAAG,EAAE,UAAU,EAAE,aAAe,MAAQ,EAAE,WAAa,KAAK,EAAE,WAAa,EAAE,GAAG,EAAE,WAAW,GAAK,KAAO,KAC7H,EAAa,EAAM,OAAO,UAAY,WAAa,EAAM,OAAO,WAAa,QAC/E,UAAU,EAAM,OAAO,IAAM,UAAU,EAAM,OAAO,MAAQ,KAAK,EAAM,OAAO,WAAa,aAAa,EAAe,EAAM,OAAO,UAAU,IAAM,KACpJ,EAAM,OAAO,UAAY,SAAW,gBAAkB,cAE1D,OACE,UAAC,UAAD,CAAS,UAAW,EAAO,QAAS,aAAW,gBAAgB,aAAY,EAAM,MAAjF,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,SAAU,KAAK,SAAS,YAAU,SAAvD,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,IAAK,YAAW,GAAW,EAAM,OAAQ,cAAY,MAAQ,IACrF,SAAC,OAAD,CAAM,UAAW,EAAO,UAAY,YAAW,EAAM,MAAa,IAClE,SAAC,OAAD,UAAO,EAAM,SAAS,QAAQ,mBAAoB,EAAE,CAAQ,EAC3D,CACH,cAAC,MAAD,CAAK,UAAW,EAAO,QAAS,KAAK,QAAQ,aAAW,iBAAxD,UACG,EAAM,QACL,SAAC,EAAD,CAAe,MAAM,SAAS,MAAM,SAAC,EAAD,CAAW,GAAG,MAAM,eAAe,aAAc,EAAM,SAAS,OAAQ,QAAS,EAAQ,KAAM,EAAQ,KAAM,SAAU,EAAQ,QAAW,IAE9K,SAAC,EAAD,CAAe,MAAM,QAAQ,MAAM,SAAC,EAAD,CAAW,GAAG,MAAM,cAAc,aAAc,EAAM,SAAS,MAAO,QAAS,EAAO,KAAM,EAAQ,KAAM,SAAU,EAAQ,SAAU,UAAS,GAEnL,EAAM,OAAS,MACd,SAAC,EAAD,CAAe,MAAM,QAAQ,MAAM,SAAC,EAAD,CAAY,GAAG,MAAM,cAAc,aAAc,EAAM,SAAS,MAAO,QAAS,EAAO,KAAM,EAAQ,KAAM,SAAU,EAAQ,QAAW,IAE7K,SAAC,EAAD,CAAe,MAAM,OAAO,MAAM,SAAC,EAAD,CAAW,GAAG,MAAM,aAAa,aAAc,EAAM,SAAS,KAAM,QAAS,EAAM,KAAM,EAAQ,KAAM,SAAU,EAAQ,SAAU,SAAQ,EAC1K,CACF,MAEJ,GAAa,EAAM,QAAU,WAAa,EAAM,QAAU,QACzD,UAAC,IAAD,CAAG,UAAW,EAAO,MAArB,UAA4B,oBAAkB,GAAe,CAAS,CAAK,CACzE,QAEH,GACC,SAAC,GAAD,CACE,OAAQ,EAAQ,OAChB,OAAQ,EAAQ,OACD,gBACf,YAAa,EAAM,QAAQ,YACrB,OACN,WAAc,KAAK,EAAK,EAAQ,MAAM,EACrB,iBAClB,GACC,GAAS,EAAM,OAAS,SAAW,EAAM,OAAS,cACpD,SAAC,GAAD,CAAY,OAAO,gBAAgB,OAAQ,EAAsB,gBAAe,YAAa,EAAM,QAAQ,YAAmB,OAAM,WAAc,KAAK,EAAK,CAAK,CAAI,GACnK,KAEH,EAAI,OAAS,GACZ,UAAC,IAAD,CAAG,UAAW,EAAO,IAAK,KAAK,SAA/B,UACG,EAAI,KAAK,GAAG,GACb,SAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,KAAM,YAAe,EAAO,CAAC,CAAC,EAAG,kBAEjE,EACP,CACD,QAEH,GAAW,SAAC,GAAD,CAA0B,WAAU,cAAiB,EAAY,IAAI,CAAI,GAAI,MAEzF,UAAC,KAAD,CAAI,UAAW,EAAO,MAAtB,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACE,SAAC,KAAD,WAAI,SAAC,EAAD,UAAY,QAAkB,EAAK,IACvC,SAAC,KAAD,CAAI,UAAW,EAAO,UAAY,WAAM,OAAO,UAAY,KAAO,UAAY,EAAM,OAAO,UAAY,EAAI,eAAiB,GAAG,EAAM,OAAO,QAAQ,SAAc,EAC/J,KACL,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACE,SAAC,KAAD,WAAI,SAAC,EAAD,UAAY,OAAiB,EAAK,IACtC,UAAC,KAAD,CAAI,UAAW,EAAO,UAAtB,UACG,EAAE,QAAU,SACT,IAAI,EAAE,KAAO,IAAI,KAAK,EAAE,MAAM,OAAO,OAAO,EAAE,MAAM,SAAW,EAAI,GAAK,IAAI,KAAK,EAAE,UAAY,IAAI,SAAS,EAAQ,MAAM,IAAU,KACpI,EAAE,QAAU,OAAS,cAAgB,EAAE,OAC3C,UAAC,OAAD,CAAM,UAAW,EAAO,QAAxB,UAAkC,EAAE,QAAQ,OAAS,EAAE,QAAQ,KAAK,IAAI,EAAI,aAAa,aAAW,EAAE,eAAsB,KAC5H,UAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,KAAM,QAAS,EAAW,SAAU,EAAQ,SAApF,WACE,SAAC,GAAD,CAAU,MAAO,GAAI,OAAQ,GAAI,cAAY,MAAQ,GAAC,aAChD,GACN,CACD,OACL,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACE,SAAC,KAAD,WAAI,SAAC,EAAD,UAAY,aAAuB,EAAK,IAC5C,UAAC,KAAD,CAAI,UAAW,EAAO,UAAtB,WACE,SAAC,GAAD,CACE,MAAO,EAAM,MAAM,SACnB,IAAK,EAAM,MAAM,OACjB,QAAQ,OACR,aAAW,oCACX,UAAW,GAAG,EAAM,EAAM,MAAM,QAAQ,EAAE,MAAM,EAAM,EAAM,MAAM,MAAM,GACzE,IACD,UAAC,OAAD,CAAM,UAAW,EAAO,QAAxB,UAAkC,EAAM,EAAM,MAAM,QAAQ,EAAE,OAAK,EAAM,EAAM,MAAM,MAAM,EAAE,OAAK,EAAM,MAAM,UAAY,WAAa,EAAS,CAC9I,GACD,OACL,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACE,SAAC,KAAD,WAAI,SAAC,EAAD,UAAY,QAAkB,EAAK,IACvC,UAAC,KAAD,CAAI,UAAW,EAAO,UAAtB,UACG,EACA,EAAM,OAAO,QAAU,WAAY,SAAC,OAAD,CAAM,UAAW,EAAO,QAAS,0CAAqC,GAAI,KAC7G,GACC,SAAC,OAAD,CAAM,UAAW,EAAO,cACrB,WAAM,OAAO,UAAY,WAAa,EAAM,OAAO,WAAa,SAC/D,iCACE,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,MAAM,SAAC,GAAD,CAAc,GAAG,QAAS,EAAe,SAAU,EAAM,kBAEzF,IACR,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,QAAS,GAAY,SAAU,EAAM,sBAE/D,EACR,IACA,IACA,GACJ,IACF,CACD,OACL,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACE,SAAC,KAAD,WAAI,SAAC,EAAD,UAAY,SAAmB,EAAK,IACxC,UAAC,KAAD,CAAI,UAAW,EAAO,UAAtB,UACG,EAAM,QAAQ,YAAc,GACzB,YAAY,EAAM,QAAQ,iBAAmB,GAAO,eAAiB,EAAM,QAAQ,iBAAmB,GAAQ,gBAAkB,KAChI,EAAM,QAAQ,YAAc,GAAQ,gBAAkB,WAC1D,SAAC,OAAD,CAAM,UAAW,EAAO,QAAS,+DAA0D,GAC1F,GAAiB,EAAM,QAAQ,aAC9B,SAAC,OAAD,CAAM,UAAW,EAAO,cACtB,mBAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,YAAe,EAAU,kBAAmB,EAAM,QAAQ,WAAY,EAAG,SAAU,EAClH,WAAM,QAAQ,YAAc,GAAO,sBAAwB,SACtD,EACJ,GACJ,IACF,CACD,KACH,GACG,GAEb,CAEA,SAAS,EAAc,CACrB,QACA,OACA,QACA,eACA,UACA,OACA,WACA,UACA,UAWC,CACD,IAAM,EAAM,GAAQ,CAAK,EACnB,EAAW,CAAC,EAAa,SAAW,EAC1C,OACE,UAAC,EAAD,CACE,KAAK,KACL,QAAS,EAAS,SAAW,GAAW,EAAa,QAAU,UAAY,SACrE,OACG,UACC,WACV,KAAM,GAAQ,CAAC,EACf,MAAO,EAAW,oBAAsB,GAAG,EAAa,OAAO,EAAM,KAAK,EAAI,GAAK,KACnF,oBAAmB,GAAO,OAR5B,UAUG,EACA,GAAM,SAAC,MAAD,CAAK,UAAW,EAAO,IAAM,UAAS,GAAI,IAC3C,GAEZ,CAEA,SAAS,GAAW,CAClB,SACA,SACA,gBACA,cACA,OACA,SACA,kBAAkB,IASjB,CACD,IAAM,EAAK,GAAY,CAAM,EACvB,EAAc,IAAO,KACrB,EAAY,GAAe,IAAkB,IAAO,mBAAqB,IAAgB,MACzF,EAAY,EAAO,OAAS,QAAU,EAAO,OAAS,UAAY,CAAC,GAAe,GAClF,EAAU,EAAO,OAAS,mBAAqB,EAAc,MAAM,EAAY,MAAM,EAAO,UAAY,EAAO,QACrH,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,QAAS,KAAK,QAArC,WACE,SAAC,IAAD,CAAG,UAAW,EAAO,cACnB,oBAAC,SAAD,WAAS,EAAO,OAAO,CAAC,CAAC,CAAC,YAAY,EAAG,EAAO,MAAM,CAAC,EAAE,GAAS,GACjE,GACF,GACC,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,UAAU,QAAS,EAAc,OACxD,WAAO,KACF,GACN,KACH,EAAO,OAAS,SAAW,GAC1B,SAAC,OAAD,CAAM,UAAW,EAAO,MAAO,+DAA0D,GACvF,CAAC,GAAa,GAChB,UAAC,OAAD,CAAM,UAAW,EAAO,eAAxB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,MACrB,YAAe,CAAC,EAAgB,8DAAgE,EAAO,OAAS,QAAU,2EAA6E,MACpM,IACN,SAAC,EAAD,CAAsB,SAAU,EAC5B,CACJ,QACH,EAAO,OAAS,mBAAqB,GAAiB,CAAC,GACtD,SAAC,OAAD,CAAM,UAAW,EAAO,MAAO,qGAAgG,GAC7H,IACD,GAET,CAEA,IAAM,GAAwD,CAC5D,WAAY,gCACZ,QAAS,UACT,KAAM,OACN,OAAQ,iBACR,UAAW,WACb,EAEA,SAAS,GAAe,CAAE,WAAU,aAA4D,CAC9F,IAAM,EAAQ,EAAS,MACjB,EAAW,IAAU,OAAS,EAAM,QAAU,QAAU,EAAM,QAAU,UAAY,EAAM,QAAU,aAC1G,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAU,aAAY,GAAO,OAAS,aAAc,KAAK,SAAS,YAAU,SAAnG,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,aAArB,WACE,SAAC,SAAD,UAAS,EAAQ,GAAW,EAAM,OAAS,yBAAkC,GAC5E,EAAQ,MAAM,EAAM,UAAY,GAChC,GACC,SAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,KAAM,QAAS,EAAW,kBAE1D,GACN,IACH,IACF,EAAS,SAAU,SAAC,OAAD,CAAM,UAAW,EAAO,QAAU,WAAS,OAAc,GAAI,KAChF,GAAO,QACN,UAAC,UAAD,CAAS,UAAW,EAAO,OAAQ,KAAM,EAAM,QAAU,SAAzD,WACE,UAAC,UAAD,WAAS,SAAO,EAAM,WAAa,OAA0C,GAA9B,UAAU,EAAM,SAAS,EAAiB,KACzF,SAAC,MAAD,UAAM,EAAM,MAAY,EACjB,CACP,OACD,GAET,CCzaA,IAAM,GAAc,IACd,GAAgB,KAOtB,SAAgB,GAAY,EAAkD,CAE5E,OADK,EACE,EAAK,KAAK,OAAQ,GACvB,EAAI,QAAU,aACX,EAAI,UAAY,MAChB,EAAI,UAAY,MAChB,CAAC,EAAI,GAAG,WAAW,OAAO,GAC1B,CAAC,EAAI,GAAG,WAAW,OAAO,CAAC,EANd,CAAC,CAOrB,CAQA,SAAgB,GAAW,CAAE,OAAM,UAAS,OAAwB,CAClE,IAAM,EAAQ,EAAS,GAAiB,CAAE,QAAS,GAAO,CAAC,EACrD,EAAe,EAAW,EAAe,EAC/C,EAAoB,EAAc,EAAa,EAC/C,IAAM,EAAI,EAAM,MAAM,OAAS,KACzB,EAAO,GAAY,CAAI,EAE7B,OACE,UAAC,EAAD,CAAM,MAAM,kBAAkB,QAAQ,6EAAtC,WACE,UAAC,EAAD,WAAY,gBAAc,EAAK,OAAO,GAAa,IAClD,EAAK,SAAW,GACf,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,+BAAuB,IAEnD,SAAC,KAAD,CAAI,UAAW,EAAO,KACnB,WAAK,IAAK,IACT,SAAC,GAAD,CAA0B,MAAc,UAAc,MAAK,UAAW,CAAe,EAAxE,EAAI,EAAoE,CACtF,CACC,IAGN,SAAC,IAAD,CAAG,UAAW,EAAO,aAAc,oBAAC,EAAD,WAAY,UAAQ,GAAG,MAAM,QAAU,EAAE,GAAa,GAAI,GAC5F,IAAM,MACL,SAAC,EAAD,CAAU,KAAK,UAAW,WAAM,MAAM,QAAU,oBAA+B,GAC7E,EAAE,MAAM,SAAW,GACrB,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,kFAA0E,IAEtG,SAAC,KAAD,CAAI,UAAW,EAAO,KACnB,WAAE,MAAM,IAAK,IACZ,SAAC,GAAD,CAA6B,OAAM,MAAO,EAAE,QAAQ,MAAgB,UAAS,UAAW,CAAe,EAAzF,EAAK,EAAoF,CACxG,CACC,GAGL,GAAK,EAAE,MAAM,OAAS,GACrB,iCACE,SAAC,IAAD,CAAG,UAAW,EAAO,aAAc,oBAAC,EAAD,WAAY,UAAQ,EAAE,MAAM,OAAO,GAAa,GAAI,IACvF,SAAC,KAAD,CAAI,UAAW,EAAO,KACnB,WAAE,MAAM,IAAK,IACZ,SAAC,GAAD,CAA6B,OAAM,MAAO,EAAE,QAAQ,MAAgB,UAAS,UAAW,CAAe,EAAzF,EAAK,EAAoF,CACxG,CACC,EACJ,IACA,MAEJ,SAAC,IAAD,CAAG,UAAW,EAAO,aAAc,mBAAC,EAAD,UAAY,iBAA2B,EAAI,IAC9E,SAAC,GAAD,CAAwB,SAAU,EAC9B,GAEV,CAEA,SAAS,GAAO,CAAE,MAAK,UAAS,MAAK,aAAiG,CACpI,GAAM,CAAC,EAAM,MAAW,YAAqC,IAAI,EAC3D,CAAC,EAAM,MAAW,YAAS,EAAE,EAC7B,KAAS,SAAM,EAEf,EAAe,EAAQ,EAAI,QAAW,+CAA+C,KAAK,EAAI,IAAI,EAClG,EAAU,EAAI,UAAY,KAAK,MAAM,EAAI,SAAS,EAAI,IACtD,EAAU,OAAO,SAAS,CAAO,EAAI,KAAK,IAAI,EAAG,KAAK,OAAO,EAAM,GAAW,GAAM,CAAC,EAAI,KAE/F,SAAS,GAAgB,CACvB,EAAQ,QACA,EAAiB,CAAE,OAAQ,WAAY,MAAO,EAAI,GAAI,GAAI,EAAI,OAAS,CAAE,OAAQ,EAAI,MAAO,EAAI,CAAC,CAAG,CAAC,EAC3G,gBACA,CACE,QAAS,CAAE,MAAO,iBAAkB,KAAM,IAAI,EAAI,MAAM,OAAO,EAAgB,EAAI,IAAI,EAAE,iGAAkG,aAAc,WAAY,YAAa,EAAK,EACvO,OAAQ,CACV,CACF,CACF,CAEA,SAAS,GAAkB,CACzB,IAAM,EAAO,EAAK,KAAK,EAClB,GACL,EAAQ,QACA,EAAiB,EAAI,OACvB,CAAE,OAAQ,YAAa,MAAO,EAAI,GAAI,OAAQ,EAAI,OAAQ,KAAM,CAAK,EACrE,CAAE,OAAQ,YAAa,MAAO,EAAI,GAAI,KAAM,EAAI,KAAM,MAAO,EAAI,MAAO,KAAM,CAAK,CAAC,EACxF,wBACA,CACE,WAAc,CACZ,EAAQ,EAAE,EACV,EAAQ,IAAI,EACZ,EAAU,CACZ,CACF,CACF,CACF,CAEA,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,IAAtB,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,QAAvB,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,SAArB,UACG,EAAI,OACL,UAAC,OAAD,CAAM,UAAW,EAAO,QAAxB,UACG,IAAI,KAAG,EAAgB,EAAI,IAAI,EAAE,MAAI,EAAI,QAAU,EAAI,MAAQ,WAAW,MAAI,EAAI,MAAO,IAAY,KAA6B,GAAtB,MAAM,EAAQ,KACvH,CACL,GACH,cAAC,OAAD,CAAM,UAAW,EAAO,YAAxB,WACE,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,gBAAe,IAAS,MAAO,YAAe,EAAQ,IAAS,MAAQ,KAAO,KAAK,EAAG,cAEhH,IACR,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,gBAAe,IAAS,YAAa,YAAe,EAAQ,IAAS,YAAc,KAAO,WAAW,EAAG,SAAU,EAAQ,UAAY,CAAC,EAAc,MAAO,EAAe,OAAY,sEAAuE,oBAExR,IACR,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,SAAS,MAAM,SAAC,EAAD,CAAW,GAAG,QAAS,EAAS,SAAU,EAAQ,SAAU,eAE7F,EACJ,CACH,MACJ,IAAS,OAAQ,SAAC,GAAD,CAAQ,MAAO,EAAI,EAAK,GAAI,KAC7C,IAAS,aACR,UAAC,MAAD,CAAK,UAAW,EAAO,UAAvB,WACE,SAAC,QAAD,CAAO,UAAW,EAAO,MAAO,QAAS,EAAQ,6GAE1C,IACP,SAAC,WAAD,CACE,GAAI,EACJ,UAAW,EAAO,SAClB,MAAO,EACP,UAAW,IACX,SAAW,GAAM,EAAQ,EAAE,OAAO,KAAK,EACvC,YAAY,6DACb,IACD,SAAC,OAAD,CAAM,UAAW,EAAO,YACtB,mBAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,UAAU,QAAS,EAAW,SAAU,CAAC,EAAK,KAAK,GAAK,EAAQ,SAAU,KAAM,EAAQ,KAAM,qCAEhH,EACJ,EACH,CACH,OACF,GAER,CAEA,SAAS,GAAO,CAAE,SAA4B,CAC5C,GAAM,CAAC,EAAK,MAAU,YAA+B,IAAI,EACnD,CAAC,EAAO,MAAY,YAAwB,IAAI,EAoBtD,OAnBA,mBAAgB,CACd,IAAI,EAAY,GACV,EAAa,IAAI,gBACjB,MAAa,CACjB,GAAY,EAAO,EAAW,MAAM,CAAC,CAAC,KACnC,GAAS,CAAO,IAAa,EAAO,CAAI,EAAG,EAAS,IAAI,EAAK,EAC7D,GAAiB,CAAM,CAAC,GAAa,EAAE,aAAe,cAAgB,EAAI,OAAS,eAAe,EAAS,gCAAgC,CAAG,CACjJ,CACF,EACA,EAAK,EACL,IAAM,EAAQ,YAAY,EAAM,EAAW,EAC3C,UAAa,CACX,EAAY,GACZ,EAAW,MAAM,EACjB,cAAc,CAAK,CACrB,CACF,EAAG,CAAC,CAAK,CAAC,EACN,GAAc,SAAC,EAAD,CAAU,KAAK,UAAW,UAAgB,GACvD,GAEH,UAAC,MAAD,WACG,EAAI,iBAAkB,UAAC,IAAD,CAAG,UAAW,EAAO,MAArB,UAA4B,kBAAgB,EAAe,EAAI,eAAe,EAAE,GAAI,CAAI,QAC9G,EAAI,WACH,UAAC,MAAD,CAAK,UAAW,EAAO,IAAK,aAAW,UAAU,YAAU,MAA3D,UACG,EAAI,UAAY;EAAQ,GACxB,EAAI,MAAM,IAAK,GAAS,GAAG,EAAK,OAAS,cAAgB,GAAK,IAAI,EAAK,KAAK,MAAM,EAAK,MAAM,CAAC,CAAC,KAAK;CAAI,GAAK,iBAC3G,CAEL,aAAC,EAAD,CAAU,KAAK,UAAW,WAAI,QAAU,sBAAiC,EAExE,KAZU,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,2BAAmB,EAcnF,CAIA,SAAS,GAAQ,CAAE,OAAM,QAAO,UAAS,aAAmG,CAC1I,IAAM,EAAU,EAAM,KAAM,GAAM,EAAE,YAAY,IAAM,EAAK,KAAK,YAAY,CAAC,EAAI,EAAQ,CAAC,EAAK,KAAM,GAAG,CAAK,EAC7G,OACE,SAAC,KAAD,CAAI,UAAW,EAAO,IACpB,oBAAC,MAAD,CAAK,UAAW,EAAO,QAAvB,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,SAArB,UACG,EAAK,OACN,UAAC,OAAD,CAAM,UAAW,EAAO,QAAxB,UAAiC,MAAI,EAAK,OAAO,MAAI,EAAK,OAAO,cAAY,EAAe,EAAK,SAAS,CAAQ,CACjH,GACH,cAAC,OAAD,CAAM,UAAW,EAAO,YAAxB,WACE,SAAC,EAAD,CACE,KAAK,KACL,aAAY,eAAe,EAAK,QAChC,MAAO,OAAO,EAAK,KAAK,EACxB,SAAU,EAAQ,SAClB,SAAW,GAAM,CACf,IAAM,EAAQ,OAAO,EAAE,OAAO,KAAK,EACnC,EAAQ,QAAU,EAAiB,CAAE,OAAQ,YAAa,OAAQ,EAAK,GAAI,OAAM,CAAC,EAAG,wBAAyB,CAAE,OAAQ,CAAU,CAAC,CACrI,EAEC,UAAC,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,IAAK,IACpB,SAAC,SAAD,CAAgB,MAAO,EACpB,aAAM,EAAI,uBAAyB,IAAM,EAAI,sBAAwB,YAAY,GAC5E,EAFK,CAEL,CACT,CACK,IACR,SAAC,EAAD,CACE,KAAK,KACL,aAAY,YAAY,EAAK,QAC7B,MAAO,EAAK,KACZ,SAAU,EAAQ,UAAY,EAAK,SAAW,aAC9C,SAAW,GAAM,CACf,IAAM,EAAO,EAAE,OAAO,MACtB,EAAQ,QAAU,EAAiB,CAAE,OAAQ,YAAa,OAAQ,EAAK,GAAI,MAAK,CAAC,EAAG,oBAAqB,CAAE,OAAQ,CAAU,CAAC,CAChI,EAEC,WAAQ,IAAK,IACZ,SAAC,SAAD,CAAmB,MAAO,EACvB,UACK,EAFK,CAEL,CACT,CACK,IACR,SAAC,EAAD,CACE,KAAK,KACL,QAAQ,QACR,SAAU,EAAQ,UAAY,EAAK,SAAW,aAC9C,YAAe,EAAQ,QAAU,EAAiB,CAAE,OAAQ,cAAe,OAAQ,EAAK,EAAG,CAAC,EAAG,kBAAmB,CAChH,QAAS,CAAE,MAAO,oBAAqB,KAAM,IAAI,EAAK,MAAM,qBAAsB,aAAc,cAAe,YAAa,EAAK,EACjI,OAAQ,CACV,CAAC,EACF,iBAEO,EACJ,CACH,KACH,EAER,CAIA,SAAS,GAAQ,CAAE,OAAM,QAAO,UAAS,aAAmG,CAC1I,IAAM,EAAU,EAAK,SAAW,CAAC,EAAM,SAAS,EAAK,OAAO,EAAI,CAAC,EAAK,QAAS,GAAG,CAAK,EAAI,EAC3F,OACE,SAAC,KAAD,CAAI,UAAW,EAAO,IACpB,oBAAC,MAAD,CAAK,UAAW,EAAO,QAAvB,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,SAArB,UACG,EAAK,WACN,UAAC,OAAD,CAAM,UAAW,EAAO,QAAxB,UAAiC,MAAI,EAAK,OAAQ,EAAK,aAAe,+BAAiC,EAAS,CAC/G,GACH,aAAC,OAAD,CAAM,UAAW,EAAO,YACtB,oBAAC,EAAD,CACE,KAAK,KACL,aAAY,mBAAmB,EAAK,YACpC,MAAO,EAAK,SAAW,GACvB,SAAU,EAAQ,UAAY,EAAK,aACnC,SAAW,GAAM,CACf,IAAM,EAAU,EAAE,OAAO,MACpB,GACL,EAAQ,QAAU,EAAiB,CAAE,OAAQ,gBAAiB,OAAQ,EAAK,GAAI,SAAQ,CAAC,EAAG,oBAAqB,CAAE,OAAQ,CAAU,CAAC,CACvI,EATF,UAWG,EAAK,UAAY,MAAO,SAAC,SAAD,CAAQ,MAAM,GAAG,kCAA+B,GAAI,KAC5E,EAAQ,IAAK,IACZ,SAAC,SAAD,CAAmB,MAAO,EACvB,UACK,EAFK,CAEL,CACT,CACK,GACJ,EACH,GACH,EAER,CAEA,SAAS,GAAc,CAAE,WAAwC,CAC/D,GAAM,CAAC,EAAM,MAAW,YAAS,EAAE,EAC7B,CAAC,EAAM,MAAW,YAAS,EAAK,EACtC,SAAS,GAAe,CACtB,IAAM,EAAQ,EAAK,KAAK,EACnB,GACL,EAAQ,QAAU,GAAoB,CAAK,EAAG,yBAA0B,CACtE,WAAc,CACZ,EAAQ,EAAE,EACV,EAAQ,EAAI,CACd,CACF,CAAC,CACH,CACA,OACE,UAAC,OAAD,CACE,UAAW,EAAO,UAClB,SAAW,GAAM,CACf,EAAE,eAAe,EACjB,EAAO,CACT,EALF,WAOE,SAAC,GAAD,CACE,KAAK,KACL,MAAM,YACN,MAAO,EACP,UAAW,IACX,SAAU,EAAQ,SAClB,SAAW,GAAM,CACf,EAAQ,EAAE,OAAO,KAAK,EACtB,EAAQ,EAAK,CACf,EACA,YAAY,uDACZ,KAAM,EAAO,yEAA2E,mEACzF,IACD,SAAC,EAAD,CAAQ,KAAK,SAAS,KAAK,KAAK,QAAQ,SAAS,SAAU,CAAC,EAAK,KAAK,GAAK,EAAQ,SAAU,wBAErF,EACJ,GAEV,CCrVA,SAAgB,GAAc,CAAE,UAAU,CAAC,GAAyC,CAClF,IAAM,EAAO,EAAS,EAAY,CAAE,QAAS,IAAO,CAAC,EAC/C,EAAU,EAAW,CAAU,EACrC,EAAoB,EAAS,CAAa,EAC1C,IAAM,EAAW,EAAK,MAAM,OAAS,KACrC,GAAI,CAAC,EAAU,OAAO,KACtB,IAAM,EAAU,EAAc,EAAS,KAAK,EACtC,EAAQ,+EAA+E,EAAS,OAAO,cAAc,MAAM,EAAS,OAAO,OAAO,kBAAkB,uBAC1K,OACE,UAAC,KAAD,CAAI,UAAW,GAAG,EAAQ,MAAQ,GAAG,GAAG,EAAO,WAAY,cAAa,EAAU,GAAK,OAAkB,QAAO,aAAY,UAAU,EAAQ,UAA9I,WACE,SAAC,OAAD,CAAM,UAAW,EAAQ,KAAM,gBAAW,IAC1C,SAAC,OAAD,CAAM,UAAW,EAAQ,IAAK,cAAY,OACvC,cACG,IACN,UAAC,OAAD,CAAM,UAAW,EAAQ,MAAzB,UAAiC,EAAQ,UAAc,GACrD,GAER,s2CCZM,EAAO,KAQb,SAAgB,EAAY,EAAqD,EAAe,EAA+B,CAC7H,GAAI,CAAC,EAAM,MAAO,CAAE,KAAM,SAAU,EACpC,IAAM,EAAO,EAAK,MAGlB,OAFK,EACD,EAAK,QAAU,QAAU,CAAC,EAAgB,EAAgB,CAAI,EAC3D,EAAU,CAAE,KAAM,OAAQ,EAAI,CAAE,KAAM,QAAS,QAAS,CAAM,EAFnD,CAAE,KAAM,UAAW,OAAQ,EAAK,QAAU,qCAAsC,CAGpG,CAOA,SAAS,GAAS,CAAE,QAAkC,CACpD,IAAM,EAAO,GAAa,CAAI,EAC9B,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,KAAM,WAAU,EAAK,QAAU,GAAK,OAAW,MAAO,GAAW,CAAI,GAAK,OAAhG,WACE,SAAC,EAAD,CAAc,OAAQ,GAAY,EAAK,KAAQ,IAC/C,SAAC,OAAD,CAAM,UAAW,EAAO,SAAW,WAAK,IAAW,IACnD,SAAC,OAAD,CAAM,UAAW,EAAO,QAAS,cAAY,OAC1C,cACG,IACN,SAAC,OAAD,CAAM,UAAW,EAAO,UAAY,WAAK,KAAY,EACnD,GAER,CAEA,SAAgB,GAAW,CAAE,QAA8C,CACzE,GAAI,CAAC,GAAQ,EAAK,MAAM,SAAW,EAAG,OAAO,KAC7C,IAAM,EAAQ,GAAU,EAAK,KAAK,EAClC,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,UAAvB,WACE,UAAC,KAAD,CAAI,UAAW,EAAO,MAAO,aAAW,uBAAxC,UACG,EAAK,MAAM,IAAK,IACf,SAAC,GAAD,CAAuB,KAAM,CAAI,EAAlB,EAAE,IAAgB,CAClC,GACD,SAAC,GAAD,CAAe,QAAS,CAAE,KAAM,EAAO,KAAM,KAAM,EAAO,SAAU,IAAK,EAAO,QAAS,MAAO,EAAO,SAAU,CAAI,EACnH,CACH,KAAM,OAAS,GACd,SAAC,KAAD,CAAI,UAAW,EAAO,UAAW,aAAW,wBACzC,WAAM,IAAK,IACV,UAAC,KAAD,WACG,EAAE,IAAM,MAAO,UAAC,OAAD,CAAM,UAAW,EAAO,cAAxB,UAAwC,EAAE,MAAM,IAAK,GAAM,GAAW,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,IAAQ,CAC5G,KAAW,EAAE,MAAM,CAClB,GAHK,EAAE,MAAM,KAAK,GAAG,CAGrB,CACL,CACC,GACF,IACD,GAET,CAEA,SAAgB,GAAa,CAAE,OAAM,MAAK,SAA8F,CACtI,IAAM,EAAO,GAAM,OAAS,KACtB,EAAO,EAAM,EAAQ,EACrB,EAAQ,EAAO,GAAS,EAAK,KAAM,EAAM,EAAK,CAAE,cAAe,EAAM,CAAC,EAAI,CAAC,EACjF,OACE,SAAC,EAAD,CACE,MAAM,aACN,YAAa,uBAAuB,EAAM,8DAC1C,OAAQ,EAAY,EAAM,2BAA2B,EAAM,SAAU,EAAM,OAAS,CAAC,EAC9E,QACD,OACN,GAAI,EACC,MACL,OAAQ,EACT,EAEL,CAMA,SAAgB,GAAgB,CAAE,QAAiE,CAEjG,IAAM,GADO,GAAM,OAAS,OACP,QAAU,KACzB,EAAS,GAAa,CAAM,EAC5B,EAAW,GAAa,CAAM,EAC9B,EAAS,EAAS,GAAG,IAAI,KAAK,EAAO,IAAI,CAAC,CAAC,mBAAmB,QAAS,CAAE,MAAO,QAAS,IAAK,SAAU,CAAC,EAAE,KAAK,IAAI,KAAK,EAAO,EAAE,CAAC,CAAC,mBAAmB,QAAS,CAAE,MAAO,QAAS,IAAK,SAAU,CAAC,IAAM,OAC9M,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,MAAvB,WACE,SAAC,EAAD,CACE,MAAM,cACN,YAAa,EAAS,4BAA4B,IAAW,0CAC7D,OAAQ,EAAY,EAAM,gDAAiD,EAAO,OAAS,CAAC,EACpF,QACT,IACD,SAAC,EAAD,CACE,MAAM,mBACN,YAAa,EAAS,MAAQ,GAAG,EAAS,MAAM,2CAA6C,wBAC7F,OAAQ,EAAY,EAAM,sCAAuC,EAAS,MAAQ,CAAC,EACnF,WAAY,EAAS,WACrB,SAAU,EAAS,SACnB,OAAQ,EAAS,OACjB,OAAQ,GACT,EACE,GAET,CAMA,SAAS,GAAU,EAAyB,EAAyF,CACnI,IAAM,EAAO,GAAM,SAAS,KAAM,GAAM,EAAE,SAAW,CAAM,EAC3D,MAAO,CAAE,MAAO,GAAM,OAAS,EAAQ,OAAQ,GAAM,QAAU,IAAK,CACtE,CAEA,SAAgB,GAAa,CAAE,WAAU,OAAM,OAA0E,CACvH,IAAM,EAAS,EAAS,OAAS,GAAU,EAAM,EAAS,MAAM,EAAI,KACpE,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,aAArB,UACG,GACC,gCACG,EAAO,QAAS,SAAC,EAAD,CAAc,OAAQ,EAAO,MAAS,GAAI,MAC3D,SAAC,SAAD,UAAS,EAAO,KAAc,EAC9B,KAEF,SAAC,SAAD,UAAQ,SAAe,IAEzB,SAAC,OAAD,CAAM,UAAW,EAAO,KAAO,WAAS,IAAW,EAClD,KACH,SAAC,IAAD,CAAG,UAAW,EAAO,YAAc,YAAgB,CAAQ,CAAK,GAC/D,EAAS,WAAW,OAAS,GAC5B,UAAC,MAAD,YACE,SAAC,EAAD,UAAY,MAAgB,IAC5B,SAAC,KAAD,CAAI,UAAW,EAAO,WACnB,WAAS,WAAW,MAAM,KAAS,MAAc,CAAC,CAAC,IAAK,IACvD,SAAC,KAAD,UAAc,GAAU,EAAM,CAAE,CAAC,CAAC,KAAU,EAAnC,CAAmC,CAC7C,CACC,EACD,IACH,KACH,EAAS,WAAW,QACnB,UAAC,MAAD,YACE,SAAC,EAAD,UAAY,WAAqB,IACjC,SAAC,KAAD,CAAI,UAAW,EAAO,WAAY,aAAW,kBAC1C,WAAS,WAAW,IAAK,IACxB,UAAC,KAAD,YACE,SAAC,OAAD,CAAM,UAAW,EAAO,SAAW,YAAU,EAAM,EAAE,MAAM,CAAC,CAAC,KAAY,IACzE,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,YAAa,CAAC,CAAQ,IAC5D,UAAC,OAAD,CAAM,UAAW,EAAO,aAAxB,UAAsC,mBAAiB,GAAsB,GAAc,CAAC,EAAG,CAAG,CAAQ,GACxG,GAJK,EAAE,MAIP,CACL,CACC,EACD,IACH,IACD,GAET,CAEA,SAAgB,GAAY,CAAE,OAAM,UAAS,OAAM,OAAqI,CACtL,IAAM,EAAS,GAAe,GAAM,OAAS,IAAI,EACjD,OACE,SAAC,EAAD,CACE,MAAM,gBACN,QAAS,EAAS,oBAAoB,EAAO,IAAI,MAAM,IAAI,EAAe,EAAO,IAAI,gBAAkB,EAAO,IAAI,SAAS,EAAE,GAAK,EAAU,+CAAiD,OAE5L,YACC,SAAC,GAAD,CAAc,SAAU,EAAO,SAAgB,OAAW,KAAM,GAC9D,GACF,SAAC,GAAD,CAAc,SAAU,EAAe,OAAW,KAAM,IAExD,SAAC,EAAD,CAAU,KAAK,UAAU,qEAAoE,EAE3F,EAEV,CAMA,SAAgB,GAAW,CAAE,OAAM,OAA6E,CAC9G,IAAM,EAAO,GAAM,OAAS,KACtB,EAAQ,EAAO,GAAY,EAAK,KAAM,CAAG,EAAI,CAAE,MAAO,CAAC,EAAG,KAAM,EAAM,EAAM,GAAI,EAAM,EAAI,EAAM,eAAgB,CAAE,EACxH,OACE,SAAC,EAAD,CACE,MAAM,SACN,YAAY,+DACZ,OAAQ,EAAM,eAAiB,GAAG,EAAM,eAAe,OAAO,EAAM,iBAAmB,EAAI,OAAS,SAAS,0BAA0B,EAAM,iBAAmB,EAAI,UAAY,WAAW,qBAAuB,OAClN,OAAQ,EAAY,EAAM,qBAAsB,EAAM,MAAM,OAAS,CAAC,EACtE,MAAO,EAAM,MACb,KAAM,EAAM,KACZ,GAAI,EAAM,GACL,MACL,OAAQ,GACR,WAAa,GAAO,IAAI,KAAK,CAAE,CAAC,CAAC,eAAe,QAAS,CAAE,QAAS,QAAS,KAAM,SAAU,CAAC,CAC/F,EAEL,CAMA,SAAgB,GAAc,CAAE,OAAM,iBAAgB,OAAO,IAAgL,CAC3O,IAAM,EAAS,GAAM,OAAS,KACxB,EAAM,GAAQ,KAAO,KAC3B,OACE,SAAC,EAAD,CACE,MAAM,YACN,QAAS,EAAU,EAAO,MAAQ,QAAU,YAAe,OAC3D,SACE,SAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,KAAM,QAAS,EAAgB,kCAE/D,GAGT,SAAC,EAEG,EAED,CAAC,EAAO,OAAS,CAAC,GACpB,SAAC,EAAD,UAAW,EAAO,iBAAmB,uDAAkE,IAEvG,UAAC,MAAD,CAAK,UAAW,EAAO,UAAvB,UACG,GAAK,UAAW,SAAC,IAAD,CAAG,UAAW,EAAO,cAAgB,YAAiB,EAAI,QAAQ,CAAK,GAAI,MAC5F,UAAC,KAAD,CAAI,UAAW,EAAO,MAAtB,WACE,UAAC,MAAD,YACE,SAAC,KAAD,UAAI,SAAW,IACf,SAAC,KAAD,UAAK,GAAK,UAAY,EAAe,EAAI,SAAS,EAAI,GAAQ,EAC3D,KACL,UAAC,MAAD,YACE,SAAC,KAAD,UAAI,YAAc,IAClB,SAAC,KAAD,UAAK,GAAK,gBAAkB,GAAQ,EACjC,KACL,UAAC,MAAD,YACE,SAAC,KAAD,UAAI,QAAU,IACd,SAAC,KAAD,UAAK,EAAM,EAAI,OAAO,OAAS,GAAQ,EACpC,KACL,UAAC,MAAD,YACE,SAAC,KAAD,UAAI,WAAa,IACjB,SAAC,KAAD,UAAK,EAAM,EAAI,UAAU,OAAS,GAAQ,EACvC,GACH,IACH,GAAK,UAAW,UAAC,IAAD,CAAG,UAAW,EAAO,MAArB,UAA4B,QAAM,EAAI,QAAY,CAAI,QACtE,GAAO,EAAI,UAAU,QACpB,SAAC,KAAD,CAAI,UAAW,EAAO,UAAW,aAAW,iBACzC,WAAI,UAAU,MAAM,EAAG,CAAC,CAAC,CAAC,IAAK,IAC9B,UAAC,KAAD,YACE,SAAC,OAAD,CAAM,UAAW,EAAO,aAAe,WAAE,KAAY,IACrD,SAAC,OAAD,CAAM,UAAW,EAAO,WAAa,WAAE,MAAa,EAClD,GAHK,EAAE,EAGP,CACL,CACC,GACF,IACD,KAnCL,SAAC,EAAD,CAAU,KAAK,UAAW,WAAK,QAAU,oCAA+C,IAFxF,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,sCAA8B,EAuCzE,EAEV,CC7QA,IAAM,GAA8C,CAClD,WAAY,cACZ,aAAc,gBACd,eAAgB,mBAChB,SAAU,cACZ,EAEA,SAAgB,GAAS,EAAgB,EAAqB,CAC5D,IAAM,EAAQ,EAAK,MAAQ,KAAK,MAAM,EAAK,KAAK,EAAI,IAC9C,EAAO,OAAO,SAAS,CAAK,EAAI,KAAK,IAAI,EAAG,EAAQ,CAAG,EAAI,KAC3D,EAAO,IAAS,KAAO,gBAAkB,EAAO,KAAY,GAAG,KAAK,KAAK,EAAO,GAAM,EAAE,QAAU,GAAG,KAAK,MAAM,EAAO,IAAS,EAAE,QACxI,MAAO,GAAG,GAAU,EAAK,MAAM,KAAK,GACtC,CAEA,SAAS,GAAU,EAAsB,CACvC,OAAO,EAAK,SAAS,GAAG,EAAI,EAAK,MAAM,GAAG,CAAC,CAAC,GAAM,CACpD,CAEA,SAAS,GAAW,CAAE,OAA8B,CAElD,OADI,EAAI,QAAU,MAAa,SAAC,OAAD,CAAM,UAAW,EAAO,MAAO,aAAW,OAAO,uBAAkB,IAEhG,UAAC,OAAD,CAAM,UAAW,EAAO,MAAO,aAAY,EAAI,MAA/C,UACG,EAAI,QAAU,QAAU,QAAU,UAClC,EAAI,cAAgB,SAAU,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,0BAAqB,GAAI,IACvF,GAEV,CAEA,SAAS,GAAW,CAAE,MAAK,WAA2D,CACpF,IAAM,EAAW,EAAQ,MAAQ,EAAQ,SAuBzC,OAtBI,EAAI,MAAM,QAEV,SAAC,EAAD,CACE,KAAK,KACL,QAAQ,SACE,WACV,aAAY,UAAU,EAAI,OAC1B,YACE,EAAQ,QAAU,EAAc,CAAE,OAAQ,cAAe,KAAM,EAAI,IAAK,CAAC,EAAG,UAAU,EAAI,OAAQ,CAChG,QAAS,CACP,MAAO,UAAU,GAAU,EAAI,IAAI,EAAE,GACrC,KAAM,UAAU,EAAI,MAAM,IAAK,GAAM,GAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,oDACpF,aAAc,QAChB,CACF,CAAC,EAEJ,iBAEO,GAGR,EAAI,QAAU,KAAa,MAE7B,SAAC,EAAD,CACE,KAAK,KACL,QAAQ,QACE,WACV,aAAY,SAAS,EAAI,OACzB,YACE,EAAQ,QAAU,EAAc,CAAE,OAAQ,aAAc,KAAM,EAAI,KAAM,OAAQ,wCAAyC,CAAC,EAAG,SAAS,EAAI,OAAQ,CAChJ,QAAS,CACP,MAAO,SAAS,GAAU,EAAI,IAAI,EAAE,GACpC,KAAM,8GACN,aAAc,aACd,YAAa,EACf,CACF,CAAC,EAEJ,gBAEO,EAEZ,CAEA,SAAS,GAAU,CAAE,OAA8B,CACjD,OACE,UAAC,OAAD,CAAM,UAAW,EAAO,MAAxB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,WAAa,WAAI,aAAe,KAAO,IAAM,GAAG,KAAK,MAAM,EAAI,UAAU,EAAE,EAAS,IAC5G,SAAC,EAAD,CAAW,OAAQ,EAAI,WAAY,MAAO,GAAI,OAAQ,GAAI,UAAW,GAAG,EAAI,KAAK,4BAA6B,SAAW,GAAM,GAAG,KAAK,MAAM,CAAC,EAAE,EAAK,EACjJ,GAEV,CAEA,SAAS,GAAM,CAAE,MAAK,OAA2C,CAE/D,OADK,EAAI,MAAM,QAEb,SAAC,OAAD,CAAM,UAAW,EAAO,MACrB,WAAI,MAAM,IAAK,IACd,SAAC,OAAD,CAAmB,UAAW,EAAO,KAAM,YAAW,EAAE,KAAM,MAAO,EAAE,OACpE,YAAS,EAAG,CAAG,CACZ,EAFK,EAAE,IAEP,CACP,CACG,IARsB,SAAC,OAAD,CAAM,UAAW,EAAO,MAAO,YAAO,EAUtE,CAUA,SAAgB,GAAY,EAA+D,CACzF,GAAI,IAAY,OAAW,OAAO,KAClC,GAAI,IAAY,KAAM,MAAO,sEAC7B,GAAI,EAAQ,QAAU,EAAG,MAAO,mFAChC,IAAM,EAAQ,EAAQ,MAAM,MAAM,EAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAC3C,EAAO,EAAQ,MAAM,OAAS,EAAI,QAAQ,EAAQ,MAAM,OAAS,EAAE,OAAS,GAClF,MAAO,kBAAkB,EAAQ,MAAM,WAAW,EAAQ,QAAU,EAAI,OAAS,WAAW,EAAQ,KAAK,IAAQ,EAAK,GAAK,GAAG,8CAChI,CAEA,IAAM,GAAS,GAAuB,EAAI,cAAgB,KAAO,IAAM,GAAG,EAAI,cAAc,EAAI,kBAAoB,KAAqC,GAA9B,MAAM,EAAI,oBAErI,SAAgB,GAAU,CAAE,OAAM,UAAS,MAAK,WAA4H,CAC1K,IAAM,EAAO,GAAM,OAAS,KACtB,EAAO,GAAM,OAAS,CAAC,EAC7B,OACE,UAAC,EAAD,CAAM,MAAM,eAAe,QAAS,EAAO,GAAG,EAAK,OAAO,iEAAmE,OAA7H,UACI,EAEG,EAED,EAAK,SAAW,GAClB,SAAC,EAAD,UAAU,+BAAuC,GAC/C,GACF,SAAC,KAAD,CAAI,UAAW,EAAO,UACnB,WAAK,IAAK,IACT,UAAC,KAAD,CAAmB,UAAW,EAAO,SAAU,GAAI,EAAS,QAAQ,EAAI,MAAM,EAA9E,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,aAAvB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,SAAW,WAAI,IAAW,IAClD,SAAC,GAAD,CAAiB,MAAc,SAAU,EACtC,KACL,UAAC,KAAD,CAAI,UAAW,EAAO,MAAtB,WACE,UAAC,MAAD,YAAK,SAAC,KAAD,UAAI,OAAS,IAAC,SAAC,KAAD,WAAI,SAAC,GAAD,CAAiB,KAAM,EAAK,EAAM,KACzD,UAAC,MAAD,YAAK,SAAC,KAAD,UAAI,YAAc,IAAC,SAAC,KAAD,UAAK,EAAI,YAAc,EAAe,EAAI,WAAW,EAAI,GAAQ,EAAM,KAC/F,UAAC,MAAD,YAAK,SAAC,KAAD,UAAI,OAAS,IAAC,SAAC,KAAD,UAAK,GAAM,CAAG,CAAM,EAAM,KAC7C,UAAC,MAAD,YAAK,SAAC,KAAD,UAAI,UAAY,IAAC,SAAC,KAAD,WAAI,SAAC,GAAD,CAAgB,KAAM,EAAK,EAAM,GACzD,KACJ,SAAC,GAAD,CAAY,MAAU,KAAM,EAC1B,CAZK,IAAI,IAYT,CACL,CACC,IAEJ,SAAC,MAAD,CAAK,UAAW,EAAO,UACrB,oBAAC,QAAD,CAAO,UAAW,EAAO,MAAzB,WACE,SAAC,UAAD,CAAS,UAAU,kBAAkB,gCAA8B,IACnE,SAAC,QAAD,WACE,UAAC,KAAD,YACE,SAAC,KAAD,CAAI,MAAM,MAAM,qBAAc,IAC9B,SAAC,KAAD,CAAI,MAAM,MAAM,gBAAS,IACzB,SAAC,KAAD,CAAI,MAAM,MAAM,qBAAc,IAC9B,SAAC,KAAD,CAAI,MAAM,MAAM,UAAW,EAAO,IAAK,gBAAS,IAChD,SAAC,KAAD,CAAI,MAAM,MAAM,iCAA0B,IAC1C,SAAC,KAAD,CAAI,MAAM,MAAM,UAAW,EAAO,IAAK,mBAAY,IACnD,SAAC,KAAD,CAAI,MAAM,MAAM,gBAAS,IACzB,SAAC,KAAD,CAAI,MAAM,MAAM,mBAAC,OAAD,CAAM,UAAU,kBAAkB,iBAAY,EAAK,EACjE,GACC,IACP,SAAC,QAAD,UACG,EAAK,IAAK,IACT,UAAC,KAAD,CAAmB,GAAI,EAAS,QAAQ,EAAI,MAAM,EAAG,YAAW,EAAI,MAAM,OAAS,GAAK,OAAxF,WACE,SAAC,KAAD,CAAI,MAAM,MAAM,UAAW,EAAO,SAAW,WAAI,IAAS,IAC1D,SAAC,KAAD,WAAI,SAAC,GAAD,CAAiB,KAAM,EAAK,IAChC,SAAC,KAAD,UAAK,EAAI,YAAc,EAAe,EAAI,WAAW,EAAI,GAAQ,IACjE,SAAC,KAAD,CAAI,UAAW,EAAO,IAAM,YAAM,CAAG,CAAM,IAC3C,SAAC,KAAD,WAAI,SAAC,GAAD,CAAgB,KAAM,EAAK,IAC/B,SAAC,KAAD,CAAI,UAAW,EAAO,IAAM,WAAI,cAAgB,GAAQ,IACxD,SAAC,KAAD,WAAI,SAAC,GAAD,CAAY,MAAU,KAAM,EAAK,IACrC,SAAC,KAAD,CAAI,UAAW,EAAO,WAAY,mBAAC,GAAD,CAAiB,MAAc,SAAU,EAAK,EAC9E,CATK,IAAI,IAST,CACL,CACI,EACF,GACJ,IApDL,SAAC,EAAD,CAAU,KAAK,UAAW,WAAK,QAAU,qCAAgD,IAFzF,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,gCAAwB,GAwDtE,GAAQ,GAAY,EAAK,OAAO,GAAI,SAAC,IAAD,CAAG,UAAW,EAAO,MAAQ,YAAY,EAAK,OAAO,CAAK,GAAI,IAC/F,GAEV,CC1JA,IAAa,GAAgB,IAChB,GAAqB,IAK5B,MAAkB,kBAAW,OAAO,sEAA8B,EAElE,MAAgB,kBAAW,OAAO,yBAAuB,cAAC,KAAM,IAAO,CAAE,aAAe,SAAC,EAAE,cAAH,CAAiB,WAAU,EAAE,EAAE,+EAAC,EAExH,MAAiB,kBAAW,OAAO,6GAA+B,EAExE,SAAgB,IAAe,CAC7B,GAAM,CAAE,WAAY,EAAY,EAC1B,EAAQ,EAAS,EAAc,EAC/B,EAAY,EAAS,EAAc,EACnC,EAAS,EAAS,EAAa,CAAE,QAAS,IAAO,CAAC,EAClD,EAAU,EAAS,EAAoB,CAAE,QAAS,IAAO,CAAC,EAC1D,EAAe,EAAW,EAAc,EACxC,EAAmB,EAAW,EAAc,EAC5C,EAAiB,EAAW,CAAkB,EACpD,EAAoB,EAAc,EAAa,EAC/C,MAA0B,CACxB,EAAiB,EACjB,EAAe,CACjB,EAAG,EAAkB,EAErB,IAAM,EAAM,GAAO,IAAM,EACnB,EAAU,GAAkB,EAE5B,EAAY,GAAa,CAAO,EAChC,CAAC,EAAc,MAAmB,YAAS,EAAK,EAChD,KAAa,SAAM,EACnB,EAAO,EAAM,MAAM,OAAS,KAC5B,EAAM,GAAe,EAGrB,EADY,EAAS,EAAgB,CAAE,QAAS,GAAO,CAChD,EAAU,MAAM,OAAS,KAChC,EAAa,GAAM,MAAM,OAAS,KAElC,EAAgB,IAAe,MAAQ,IAAe,OAGtD,EAAW,GAAO,MAAQ,IAAS,MAAQ,GAAc,CAAI,EAEnE,SAAS,IAAqB,CAC5B,EAAgB,EAAI,EACpB,0BAA4B,SAAS,eAAe,CAAU,CAAC,EAAE,iBAAiB,CAAE,MAAO,QAAS,SAAU,QAAS,CAAC,CAAC,CAC3H,CAEA,OACE,UAAC,GAAD,CACE,MAAM,QACN,QAAS,EAAM,SAAW,cAAe,SAAC,EAAD,CAAmB,GAAI,KAChE,MACE,iCACE,SAAC,GAAD,CAAuB,SAAU,IACjC,UAAC,MAAD,CAAK,GAAI,EAAS,eAAe,EAAjC,WACE,SAAC,OAAD,CAAM,GAAI,EAAS,iBAAiB,CAAI,IACxC,SAAC,GAAD,CAAuB,UAAoB,YAAW,UAAW,EAAe,CAAI,EAAG,gBAAiB,GAAK,OAAS,OAAU,EAC7H,IAGJ,GAAO,EAAI,OAAS,SAAU,SAAC,EAAD,CAAkB,MAAO,EAAK,KAAK,OAAS,GAAI,MAC/E,SAAC,GAAD,CAAkB,MAAO,EACzB,IAdN,UAiBG,GAAQ,EAAK,MAAM,QAAU,UAE5B,SAAC,EAAD,CAAM,KAAM,GACV,mBAAC,MAAD,CAAK,GAAI,EAAS,UAAU,EAC1B,mBAAC,WAAD,CAAU,UAAU,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,sCAA8B,GAC7F,mBAAC,GAAD,CACE,OAAQ,EACH,MACL,YAAc,GAAQ,EAAU,KAAK,aAAc,CAAG,EACtD,QAAS,GAAa,CAAE,OAAQ,EAAM,OAAQ,KAAM,SAAU,EAAQ,SAAU,KAAM,EAAQ,IAAK,CAAC,CACrG,EACO,EACP,EACD,GACJ,MACJ,SAAC,EAAD,CAAM,KAAM,GACV,mBAAC,GAAD,CAAkB,OAAe,UAAc,KAAM,EACjD,GACL,EAAW,MACV,SAAC,EAAD,CAAM,KAAM,GACV,mBAAC,GAAD,CAAc,KAAM,EAAM,KAAW,MAAK,MAAO,EAAU,EAAI,EAAK,EAChE,GAEP,GACC,SAAC,EAAD,CAAM,KAAM,GACV,mBAAC,WAAD,CAAU,UAAU,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,oCAA4B,GAC3F,mBAAC,GAAD,CAAsB,KAAM,EACpB,EACN,GACJ,KACH,EAAW,MACV,SAAC,EAAD,CAAM,KAAM,EACV,mBAAC,GAAD,CAAiB,KAAM,EAAM,IAAO,EAChC,IAER,SAAC,EAAD,CAAM,KAAM,EAAW,EAAI,EACzB,mBAAC,GAAD,CAAa,KAAM,EAAM,KAAM,QAAS,EAAQ,MAAQ,KAAM,KAAM,EAAO,MAAQ,KAAW,KAAM,EAChG,GACL,EAAW,MACV,SAAC,EAAD,CAAM,KAAM,EACV,mBAAC,GAAD,CAAY,KAAM,EAAM,KAAW,KAAM,EACrC,IAER,SAAC,EAAD,CAAM,KAAM,EAAW,EAAI,EACzB,mBAAC,GAAD,CAAe,KAAM,EAAU,KAAM,eAAgB,GAAc,KAAM,GAAM,QAAU,MAAS,EAC9F,IACN,SAAC,EAAD,CAAM,KAAM,GACV,mBAAC,GAAD,CAAW,KAAM,EAAM,KAAe,UAAc,MAAc,SAAU,EACxE,IACN,SAAC,EAAD,CAAM,KAAM,GACV,oBAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,UAAC,SAAD,CACE,KAAK,SACL,UAAW,EAAO,WAClB,gBAAe,EACf,gBAAe,EACf,YAAe,EAAiB,GAAM,CAAC,CAAC,EAL1C,WAOE,SAAC,EAAD,CAAkB,UAAW,EAAO,QAAS,MAAO,GAAI,OAAQ,GAAI,cAAY,MAAQ,GAAC,YAEzF,SAAC,OAAD,CAAM,UAAW,EAAO,eAAgB,iFAA4E,EAC9G,CACR,aAAC,MAAD,CAAK,GAAI,EAAY,OAAQ,CAAC,EAC3B,YACC,SAAC,WAAD,CAAU,UAAU,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,YAAU,OAAO,uCAA+B,GAC9F,mBAAC,GAAD,CAAgB,EACR,GACR,IACD,EACF,GACD,GACL,EAAU,MACV,EAAQ,OACF,GAEb","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/fleet/native-fleet.ts","../../../../../../src/web-ui/routes/verse/fleet/FleetControl.tsx","../../../../../../src/web-ui/routes/verse/fleet/SteerPanel.tsx","../../../../../../src/web-ui/routes/verse/cloud/CloudLaneChip.tsx","../../../../../../src/web-ui/routes/verse/fleet/FleetCards.tsx","../../../../../../src/web-ui/routes/verse/fleet/RepoTable.tsx","../../../../../../src/web-ui/routes/verse/sections/FleetSection.tsx"],"sourcesContent":["/**\n * routes/verse/fleet/native-fleet.ts — the page side of the desktop app's\n * fleet operations (shell contract item 8, desktop/src-tauri/src/fleet_ops.rs).\n *\n * `window.__ASHLR_DESKTOP__.fleet.send({ id, op })` asks native to start /\n * restart / stop the resident daemon or install the custody helper. Native\n * confirms every raise in a NATIVE dialog this page cannot answer, runs the\n * operator's own `ashlr` CLI (or macOS's admin prompt for custody), and\n * reports progress as `ashlr:fleet` window events. In a plain browser (no\n * desktop shell, or an older one) `nativeFleetAvailable()` is false and the\n * Fleet tab shows the Terminal command instead.\n */\n\nexport type NativeFleetOp = 'resident-start' | 'resident-restart' | 'resident-stop' | 'custody-install';\nexport type NativeFleetPhase = 'confirming' | 'running' | 'done' | 'failed' | 'cancelled';\n\nexport interface NativeFleetEvent {\n id: string;\n op: NativeFleetOp;\n phase: NativeFleetPhase;\n message: string;\n command?: string;\n exitCode?: number;\n output?: string;\n}\n\ninterface FleetBridge {\n version: number;\n ops?: readonly string[];\n send: (msg: { id: string; op: NativeFleetOp; checkout?: string }) => boolean;\n}\n\nfunction bridge(): FleetBridge | null {\n if (typeof window === 'undefined') return null;\n const desktop = (window as unknown as { __ASHLR_DESKTOP__?: { fleet?: FleetBridge } }).__ASHLR_DESKTOP__;\n const fleet = desktop?.fleet;\n return fleet && typeof fleet.send === 'function' && fleet.version >= 1 ? fleet : null;\n}\n\n/** The desktop app can run `op` natively. */\nexport function nativeFleetAvailable(op?: NativeFleetOp): boolean {\n const b = bridge();\n if (!b) return false;\n return op === undefined || !Array.isArray(b.ops) || b.ops.includes(op);\n}\n\nconst TERMINAL: ReadonlySet<NativeFleetPhase> = new Set(['done', 'failed', 'cancelled']);\n\nfunction isFleetEvent(value: unknown): value is NativeFleetEvent {\n if (!value || typeof value !== 'object') return false;\n const v = value as Record<string, unknown>;\n return typeof v['id'] === 'string' && typeof v['op'] === 'string' && typeof v['phase'] === 'string' && typeof v['message'] === 'string';\n}\n\nlet counter = 0;\n\n/**\n * Run one native op. `onProgress` sees every event (confirming, running, …);\n * the promise resolves with the terminal one. Rejects only when the bridge is\n * missing or refused the message. A run with no answer in `timeoutMs`\n * resolves as failed (native keeps the op; the page just stops waiting).\n */\nexport function runNativeFleetOp(\n op: NativeFleetOp,\n opts: { checkout?: string; onProgress?: (event: NativeFleetEvent) => void; timeoutMs?: number } = {},\n): Promise<NativeFleetEvent> {\n const b = bridge();\n if (!b) return Promise.reject(new Error('This needs the Ashlr desktop app.'));\n counter += 1;\n const id = `fleet-${Date.now().toString(36)}-${counter}`;\n return new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const onEvent = (event: Event) => {\n const detail = (event as CustomEvent).detail;\n if (!isFleetEvent(detail) || detail.id !== id) return;\n opts.onProgress?.(detail);\n if (TERMINAL.has(detail.phase)) {\n window.removeEventListener('ashlr:fleet', onEvent);\n if (timer) clearTimeout(timer);\n resolve(detail);\n }\n };\n window.addEventListener('ashlr:fleet', onEvent);\n timer = setTimeout(() => {\n window.removeEventListener('ashlr:fleet', onEvent);\n resolve({ id, op, phase: 'failed', message: 'The desktop app did not answer in time. Check the Fleet tab again in a moment.' });\n }, opts.timeoutMs ?? (op === 'custody-install' ? 25 * 60_000 : 5 * 60_000));\n const sent = b.send(opts.checkout ? { id, op, checkout: opts.checkout } : { id, op });\n if (!sent) {\n window.removeEventListener('ashlr:fleet', onEvent);\n if (timer) clearTimeout(timer);\n reject(new Error('The desktop app refused that request.'));\n }\n });\n}\n","/**\n * routes/verse/fleet/FleetControl.tsx — the ONE place to operate the fleet\n * (3.15). The Fleet tab's header:\n *\n * ● Running · 3 agents working · stage shadow [Start ⌘⌥S] [Pause ⌘⌥P] [Stop ⌘⌥.]\n * Blocked: <one reason> [one button]\n * Agents 3 working | Grant #2 · 14 repos · 28 d · shadow 1/8 [Edit] | Spend $1.20 of $20 | Daemon running · ticked 1 m ago [Restart]\n *\n * Every control posts to /api/verse/fleet/control and renders the state the\n * server READ BACK afterwards — never an optimistic flip. Start confirms\n * first; Stop confirms with the catalog's Stop copy; Pause and Resume are\n * instant. What only Mason can do comes back as the single next action:\n * the Touch ID grant sheet, or a native step in the desktop app (resident\n * daemon start / restart, custody install) behind a native confirm dialog.\n * In a browser without the desktop shell those show the Terminal command.\n *\n * ⌘K and the keys (command-keys.ts fleet.*) run the same handlers.\n */\nimport { useState, type ReactNode } from 'react';\nimport type { FleetControlActionResultV1, FleetControlStateV1, FleetNextAction } from '../../../../core/fleet/fleet-control-types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { Meter } from '../../../components/primitives/Meter.js';\nimport { IconLock, IconPause, IconPlay, IconRefresh, IconStop } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { CopyCommand } from '../autonomy/AutonomyOffState.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport { stopConfirm, type GrantFlow } from '../command/AutonomyBar.js';\nimport type { ConfirmSpec, SurfaceActions } from '../command/actions.js';\nimport { CardNote, MicroLabel } from '../command/Surface.js';\nimport { useCommandHandler } from '../shell/command-bus.js';\nimport { detectKeyPlatform, formatChord } from '../shell/command-catalog.js';\nimport { commandChord } from '../shell/command-keys.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { darkSinceLabel } from './dark-since.js';\nimport { fleetControlQuery, postFleetControl } from './fleet-control-queries.js';\nimport { nativeFleetAvailable, runNativeFleetOp, type NativeFleetEvent, type NativeFleetOp } from './native-fleet.js';\nimport styles from './fleet-control.module.css';\n\nexport const FLEET_CONTROL_POLL_MS = 5_000;\n\nconst START_CONFIRM: ConfirmSpec = {\n title: 'Start the fleet?',\n body: 'Start clears Stop, resumes dispatch and, if autonomy is switched Off, turns it to Autonomous — only within your signed grant. If the daemon is not running, the desktop app asks you to confirm starting it.',\n confirmLabel: 'Start fleet',\n destructive: false,\n};\n\nconst STATE_TONE: Record<FleetControlStateV1['state'], string> = {\n running: 'running',\n idle: 'ok',\n paused: 'warning',\n stopped: 'danger',\n blocked: 'danger',\n off: 'muted',\n};\n\nconst STATE_WORD: Record<FleetControlStateV1['state'], string> = {\n running: 'Running',\n idle: 'Idle',\n paused: 'Paused',\n stopped: 'Stopped',\n blocked: 'Blocked',\n off: 'Off',\n};\n\nfunction keyHint(id: string): string | null {\n const chord = commandChord(id);\n return chord ? formatChord(chord, detectKeyPlatform()) : null;\n}\n\nfunction money(n: number | null): string {\n if (n === null) return '$—';\n return n >= 100 ? `$${Math.round(n)}` : `$${n.toFixed(2)}`;\n}\n\n/** The native op a next action maps to, if any. */\nfunction nativeOpFor(action: FleetNextAction): NativeFleetOp | null {\n if (action.kind === 'resident-start') return 'resident-start';\n if (action.kind === 'resident-restart') return 'resident-restart';\n if (action.kind === 'install-custody') return 'custody-install';\n return null;\n}\n\ninterface Progress {\n op: NativeFleetOp;\n event: NativeFleetEvent | null;\n /** The exact command native named (kept across events: the last may omit it). */\n command?: string;\n}\n\nexport interface FleetControlProps {\n actions: SurfaceActions;\n grantFlow: GrantFlow;\n /** THE dark-since instant (fleet/dark-since.ts fleetDarkSince); null unless the fleet is dark. */\n darkSince?: string | null;\n /** The setup checklist is shown under the control (FleetSection): the blocker names no command. */\n setupShownBelow?: boolean;\n}\n\nexport function FleetControl({ actions, grantFlow, darkSince = null, setupShownBelow = false }: FleetControlProps) {\n const read = useQuery(fleetControlQuery, { freshMs: 4_000 });\n const refetch = useRefetch(fleetControlQuery);\n usePollWhileVisible(refetch, FLEET_CONTROL_POLL_MS);\n const [did, setDid] = useState<string[]>([]);\n const [progress, setProgress] = useState<Progress | null>(null);\n const [needs, setNeeds] = useState<FleetNextAction | null>(null);\n const state = read.data?.value ?? null;\n\n function afterAction(result: FleetControlActionResultV1): void {\n setDid(result.did);\n setNeeds(result.needs);\n refetch();\n if (result.needs) void take(result.needs, result.state);\n }\n\n function runNative(op: NativeFleetOp, checkout?: string): void {\n if (!nativeFleetAvailable(op)) return;\n setProgress({ op, event: null });\n const track = (event: NativeFleetEvent) => setProgress((prev) => ({ op, event, ...(event.command ?? prev?.command ? { command: event.command ?? prev?.command } : {}) }));\n void runNativeFleetOp(op, { ...(checkout ? { checkout } : {}), onProgress: track })\n .then((event) => {\n track(event);\n if (event.phase === 'done') setNeeds(null);\n })\n .catch((error: unknown) => setProgress({ op, event: { id: '', op, phase: 'failed', message: error instanceof Error ? error.message : String(error) } }))\n .finally(() => refetch());\n }\n\n /** Do the single next thing Mason was asked to do. */\n async function take(action: FleetNextAction, current: FleetControlStateV1 | null = state): Promise<void> {\n if (action.kind === 'grant' || action.kind === 're-approve') {\n grantFlow.open(action.kind, action.kind === 're-approve' ? 'The fleet needs the grant renewed before it can run.' : 'The fleet needs a standing grant before it can run.', 'autonomous');\n return;\n }\n if (action.kind === 'start') {\n start();\n return;\n }\n if (action.kind === 'resume') {\n resume();\n return;\n }\n const op = nativeOpFor(action);\n if (op && nativeFleetAvailable(op)) {\n if (op === 'custody-install') {\n const checkout = current?.custody.hubCheckout;\n if (!checkout) return;\n runNative(op, checkout);\n } else runNative(op);\n }\n }\n\n function start(): void {\n actions.act(() => postFleetControl({ action: 'start' }), 'Start the fleet', { confirm: START_CONFIRM, onDone: afterAction });\n }\n function pause(): void {\n actions.act(() => postFleetControl({ action: 'pause' }), 'Pause the fleet', { onDone: afterAction });\n }\n function resume(): void {\n actions.act(() => postFleetControl({ action: 'resume' }), 'Resume the fleet', { onDone: afterAction });\n }\n function stop(): void {\n actions.act(() => postFleetControl({ action: 'stop' }), 'Stop the fleet', { confirm: stopConfirm(), onDone: afterAction });\n }\n function restartDaemon(): void {\n runNative('resident-restart');\n }\n function stopDaemon(): void {\n // The desktop app asks in its own native dialog (lowering: no token).\n runNative('resident-stop');\n }\n function editGrant(): void {\n const active = state?.grant.state === 'active' || state?.grant.state === 'paused' || state?.grant.state === 'expired';\n grantFlow.open(active ? 're-approve' : 'grant', 'Choose what the fleet may do, check the difference, then sign it with Touch ID.', null, { edit: true });\n }\n\n const controls = state?.controls;\n useCommandHandler('fleet.start', () => {\n if (controls?.start.enabled ?? true) start();\n });\n useCommandHandler('fleet.pause', () => {\n if (controls?.pause.enabled) pause();\n });\n useCommandHandler('fleet.resume', () => {\n if (controls?.resume.enabled) resume();\n });\n useCommandHandler('fleet.halt', () => stop());\n useCommandHandler('fleet.restart-daemon', () => restartDaemon());\n useCommandHandler('fleet.edit-grant', () => editGrant());\n useCommandHandler('fleet.install-custody', () => {\n const checkout = state?.custody.hubCheckout;\n if (checkout && nativeFleetAvailable('custody-install')) runNative('custody-install', checkout);\n });\n\n if (!state) {\n // The same region while it loads, so the page (and a screen reader) keeps its place.\n return (\n <section className={styles.control} aria-label=\"Fleet control\" data-state=\"unknown\">\n {read.status === 'loading' && !read.data ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the fleet…</p>\n ) : (\n <CardNote tone=\"unknown\">{read.data?.reason ?? 'The fleet controls could not be read.'}</CardNote>\n )}\n </section>\n );\n }\n\n const blocker = state.blocker;\n const nativeCapable = nativeFleetAvailable();\n const busy = actions.busy || (progress !== null && progress.event !== null ? !['done', 'failed', 'cancelled'].includes(progress.event.phase) : progress !== null);\n const g = state.grant;\n const stage = g.stageId ? `${g.stageId}${g.stageIndex !== null && g.stageCount ? ` (${g.stageIndex + 1}/${g.stageCount})` : ''}` : null;\n const daemonLine = state.daemon.service === 'running' || state.daemon.liveness === 'alive'\n ? `Running${state.daemon.pid ? ` · pid ${state.daemon.pid}` : ''}${state.daemon.lastTickAt ? ` · ticked ${formatRelative(state.daemon.lastTickAt)}` : ''}`\n : state.daemon.service === 'absent' ? 'Not installed' : 'Not running';\n\n return (\n <section className={styles.control} aria-label=\"Fleet control\" data-state={state.state}>\n <div className={styles.head}>\n <p className={styles.headline} role=\"status\" aria-live=\"polite\">\n <span className={styles.dot} data-tone={STATE_TONE[state.state]} aria-hidden=\"true\" />\n <span className={styles.stateWord}>{STATE_WORD[state.state]}</span>\n <span>{state.headline.replace(/^[A-Z][a-z]+ · /u, '')}</span>\n </p>\n <div className={styles.buttons} role=\"group\" aria-label=\"Fleet controls\">\n {state.paused ? (\n <ControlButton label=\"Resume\" icon={<IconPlay />} keyId=\"fleet.resume\" availability={state.controls.resume} onClick={resume} busy={actions.busy} readOnly={actions.readOnly} />\n ) : (\n <ControlButton label=\"Start\" icon={<IconPlay />} keyId=\"fleet.start\" availability={state.controls.start} onClick={start} busy={actions.busy} readOnly={actions.readOnly} primary />\n )}\n {state.paused ? null : (\n <ControlButton label=\"Pause\" icon={<IconPause />} keyId=\"fleet.pause\" availability={state.controls.pause} onClick={pause} busy={actions.busy} readOnly={actions.readOnly} />\n )}\n <ControlButton label=\"Stop\" icon={<IconStop />} keyId=\"fleet.halt\" availability={state.controls.stop} onClick={stop} busy={actions.busy} readOnly={actions.readOnly} danger />\n </div>\n </div>\n\n {darkSince && state.state !== 'running' && state.state !== 'idle' ? (\n <p className={styles.muted}>Fleet dark since {darkSinceLabel(darkSince)}</p>\n ) : null}\n\n {blocker ? (\n <BlockerRow\n reason={blocker.reason}\n action={blocker.action}\n nativeCapable={nativeCapable}\n hubCheckout={state.custody.hubCheckout}\n busy={busy}\n onTake={() => void take(blocker.action)}\n setupShownBelow={setupShownBelow}\n />\n ) : needs && needs.kind !== 'grant' && needs.kind !== 're-approve' ? (\n <BlockerRow reason=\"one step left\" action={needs} nativeCapable={nativeCapable} hubCheckout={state.custody.hubCheckout} busy={busy} onTake={() => void take(needs)} />\n ) : null}\n\n {did.length > 0 ? (\n <p className={styles.did} role=\"status\">\n {did.join(' ')}\n <button type=\"button\" className={styles.link} onClick={() => setDid([])}>\n Dismiss\n </button>\n </p>\n ) : null}\n\n {progress ? <NativeProgress progress={progress} onDismiss={() => setProgress(null)} /> : null}\n\n <dl className={styles.facts}>\n <div className={styles.fact}>\n <dt><MicroLabel>Agents</MicroLabel></dt>\n <dd className={styles.factValue}>{state.agents.working === null ? 'unknown' : state.agents.working === 0 ? 'none working' : `${state.agents.working} working`}</dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Grant</MicroLabel></dt>\n <dd className={styles.factValue}>\n {g.state === 'active'\n ? `#${g.seq ?? '?'} · ${g.repos.length} repo${g.repos.length === 1 ? '' : 's'} · ${g.daysLeft ?? '?'} d left${stage ? ` · ${stage}` : ''}`\n : g.state === 'none' ? 'none signed' : g.state}\n <span className={styles.factSub}>{g.engines.length ? g.engines.join(', ') : 'no engines'} · switch {g.effectiveSwitch}</span>\n <button type=\"button\" className={styles.link} onClick={editGrant} disabled={actions.readOnly}>\n <IconLock width={12} height={12} aria-hidden=\"true\" /> Edit scope\n </button>\n </dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Spend today</MicroLabel></dt>\n <dd className={styles.factValue}>\n <Meter\n value={state.spend.todayUsd}\n max={state.spend.capUsd}\n variant=\"line\"\n aria-label=\"Spend today against the daily cap\"\n valueText={`${money(state.spend.todayUsd)} of ${money(state.spend.capUsd)}`}\n />\n <span className={styles.factSub}>{money(state.spend.todayUsd)} of {money(state.spend.capUsd)} cap{state.spend.exhausted ? ' · spent' : ''}</span>\n </dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Daemon</MicroLabel></dt>\n <dd className={styles.factValue}>\n {daemonLine}\n {state.daemon.plist === 'drifted' ? <span className={styles.factSub}>plist is older than your config</span> : null}\n {nativeCapable ? (\n <span className={styles.inlineButtons}>\n {state.daemon.service === 'running' || state.daemon.liveness === 'alive' ? (\n <>\n <Button size=\"sm\" variant=\"ghost\" icon={<IconRefresh />} onClick={restartDaemon} disabled={busy}>\n Restart\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={stopDaemon} disabled={busy}>\n Stop daemon\n </Button>\n </>\n ) : null}\n </span>\n ) : null}\n </dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Custody</MicroLabel></dt>\n <dd className={styles.factValue}>\n {state.custody.installed === true\n ? `Installed${state.custody.keyInitialized === true ? ' · key ready' : state.custody.keyInitialized === false ? ' · no key yet' : ''}`\n : state.custody.installed === false ? 'Not installed' : 'unknown'}\n <span className={styles.factSub}>Signs grants with Touch ID; holds the GitHub App key</span>\n {nativeCapable && state.custody.hubCheckout ? (\n <span className={styles.inlineButtons}>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => runNative('custody-install', state.custody.hubCheckout!)} disabled={busy}>\n {state.custody.installed === true ? 'Reinstall / upgrade' : 'Install'}\n </Button>\n </span>\n ) : null}\n </dd>\n </div>\n </dl>\n </section>\n );\n}\n\nfunction ControlButton({\n label,\n icon,\n keyId,\n availability,\n onClick,\n busy,\n readOnly,\n primary,\n danger,\n}: {\n label: string;\n icon: ReactNode;\n keyId: string;\n availability: { enabled: boolean; hint: string };\n onClick: () => void;\n busy: boolean;\n readOnly: boolean;\n primary?: boolean;\n danger?: boolean;\n}) {\n const key = keyHint(keyId);\n const disabled = !availability.enabled || readOnly;\n return (\n <Button\n size=\"sm\"\n variant={danger ? 'danger' : primary && availability.enabled ? 'primary' : 'subtle'}\n icon={icon}\n onClick={onClick}\n disabled={disabled}\n busy={busy && !disabled}\n title={readOnly ? 'Read-only session' : `${availability.hint}${key ? ` (${key})` : ''}`}\n aria-keyshortcuts={key ?? undefined}\n >\n {label}\n {key ? <kbd className={styles.kbd}>{key}</kbd> : null}\n </Button>\n );\n}\n\nfunction BlockerRow({\n reason,\n action,\n nativeCapable,\n hubCheckout,\n busy,\n onTake,\n setupShownBelow = false,\n}: {\n reason: string;\n action: FleetNextAction;\n nativeCapable: boolean;\n hubCheckout: string | null;\n busy: boolean;\n onTake: () => void;\n setupShownBelow?: boolean;\n}) {\n const op = nativeOpFor(action);\n const needsNative = op !== null;\n const canNative = needsNative && nativeCapable && (op !== 'custody-install' || hubCheckout !== null);\n const clickable = action.kind !== 'wait' && action.kind !== 'setup' && (!needsNative || canNative);\n const command = action.kind === 'install-custody' && hubCheckout ? `cd ${hubCheckout} && ${action.command}` : action.command;\n return (\n <div className={styles.blocker} role=\"alert\">\n <p className={styles.blockerReason}>\n <strong>{reason.charAt(0).toUpperCase()}{reason.slice(1)}.</strong>\n </p>\n {clickable ? (\n <Button size=\"sm\" variant=\"primary\" onClick={onTake} busy={busy}>\n {action.label}\n </Button>\n ) : null}\n {action.kind === 'setup' && setupShownBelow ? (\n <span className={styles.muted}>The setup checklist below names each remaining step.</span>\n ) : !clickable && command ? (\n <span className={styles.blockerCommand}>\n <span className={styles.muted}>\n {needsNative && !nativeCapable ? 'Open the Ashlr desktop app to do this with a click, or run:' : action.kind === 'setup' ? 'Finish the remaining setup steps (GitHub App, trust root, Claude token):' : 'Run:'}\n </span>\n <CopyCommand command={command} />\n </span>\n ) : null}\n {action.kind === 'install-custody' && nativeCapable && !hubCheckout ? (\n <span className={styles.muted}>Enroll your ashlr-hub checkout first — the helper is built from its tools/custody sources.</span>\n ) : null}\n </div>\n );\n}\n\nconst PHASE_WORD: Record<NativeFleetEvent['phase'], string> = {\n confirming: 'Waiting for you in the dialog',\n running: 'Running',\n done: 'Done',\n failed: 'Did not finish',\n cancelled: 'Cancelled',\n};\n\nfunction NativeProgress({ progress, onDismiss }: { progress: Progress; onDismiss: () => void }) {\n const event = progress.event;\n const terminal = event !== null && (event.phase === 'done' || event.phase === 'failed' || event.phase === 'cancelled');\n return (\n <div className={styles.progress} data-phase={event?.phase ?? 'confirming'} role=\"status\" aria-live=\"polite\">\n <p className={styles.progressLine}>\n <strong>{event ? PHASE_WORD[event.phase] : 'Asking the desktop app…'}</strong>\n {event ? ` — ${event.message}` : ''}\n {terminal ? (\n <button type=\"button\" className={styles.link} onClick={onDismiss}>\n Dismiss\n </button>\n ) : null}\n </p>\n {progress.command ? <code className={styles.command}>{progress.command}</code> : null}\n {event?.output ? (\n <details className={styles.output} open={event.phase === 'failed'}>\n <summary>Output{event.exitCode !== undefined ? ` (exit ${event.exitCode})` : ''}</summary>\n <pre>{event.output}</pre>\n </details>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/fleet/SteerPanel.tsx — edit and interject (3.15, the Fleet\n * control surface).\n *\n * Working now per run: Log (live tail), Interject, Stop\n * Queue per task: priority 1–5, retarget to a granted repo, cancel\n * Goals per goal: the enrolled repo it targets\n * Tell the Leader one line → a standing directive\n *\n * Interject is honest about the engines: fleet runs are headless CLI agents\n * with no live input channel, so a note always STOPS the run and puts it back\n * in the queue with the note appended to its brief (the server answers\n * `mode: 'stop-and-requeue'`). A run with no queue task behind it (a scanned\n * backlog item) gets a follow-up task carrying the note instead.\n *\n * Every write goes through the surface's guarded action (token first) and\n * the lists are re-read from the server afterwards.\n */\nimport { useEffect, useId, useState } from 'react';\nimport type { FleetLiveRun, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { FleetControlQueueV1, FleetRunLogV1 } from '../../../../core/fleet/fleet-control-types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { Input } from '../../../components/primitives/Input.js';\nimport { Select } from '../../../components/primitives/Select.js';\nimport { IconStop } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { formatRelative, repoDisplayName } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { fetchRunLog, fleetQueueQuery, postFleetControl, postLeaderDirective } from './fleet-control-queries.js';\nimport styles from './fleet-control.module.css';\n\nconst LOG_POLL_MS = 3_000;\nconst QUEUE_POLL_MS = 15_000;\n\n/**\n * Agents producing right now: a dispatch that started and has not ended. Later\n * phases (verifying, judging, landing, watching) belong to a filed proposal,\n * not a live agent — the gates handle those, and Stop halts them.\n */\nexport function workingRuns(live: FleetLiveSnapshotV1 | null): FleetLiveRun[] {\n if (!live) return [];\n return live.runs.filter((run) =>\n run.phase === 'producing'\n && run.endedAt === null\n && run.outcome === null\n && !run.id.startsWith('task:')\n && !run.id.startsWith('held:'));\n}\n\nexport interface SteerPanelProps {\n live: FleetLiveSnapshotV1 | null;\n actions: SurfaceActions;\n now: number;\n}\n\nexport function SteerPanel({ live, actions, now }: SteerPanelProps) {\n const queue = useQuery(fleetQueueQuery, { freshMs: 10_000 });\n const refetchQueue = useRefetch(fleetQueueQuery);\n usePollWhileVisible(refetchQueue, QUEUE_POLL_MS);\n const q = queue.data?.value ?? null;\n const runs = workingRuns(live);\n\n return (\n <Card title=\"Steer the fleet\" caption=\"Stop or redirect a run, reorder the queue, retarget goals, tell the Leader\">\n <MicroLabel>Working now ({runs.length})</MicroLabel>\n {runs.length === 0 ? (\n <p className={styles.muted}>No run is in flight.</p>\n ) : (\n <ul className={styles.list}>\n {runs.map((run) => (\n <RunRow key={run.id} run={run} actions={actions} now={now} onChanged={refetchQueue} />\n ))}\n </ul>\n )}\n\n <p className={styles.sectionLabel}><MicroLabel>Queue ({q?.tasks.length ?? 0})</MicroLabel></p>\n {q === null ? (\n <CardNote tone=\"unknown\">{queue.data?.reason ?? 'Reading the queue…'}</CardNote>\n ) : q.tasks.length === 0 ? (\n <p className={styles.muted}>Nothing queued. The Leader and the backlog scan add work on every tick.</p>\n ) : (\n <ul className={styles.list}>\n {q.tasks.map((task) => (\n <TaskRow key={task.id} task={task} repos={q.targets.repos} actions={actions} onChanged={refetchQueue} />\n ))}\n </ul>\n )}\n\n {q && q.goals.length > 0 ? (\n <>\n <p className={styles.sectionLabel}><MicroLabel>Goals ({q.goals.length})</MicroLabel></p>\n <ul className={styles.list}>\n {q.goals.map((goal) => (\n <GoalRow key={goal.id} goal={goal} paths={q.targets.paths} actions={actions} onChanged={refetchQueue} />\n ))}\n </ul>\n </>\n ) : null}\n\n <p className={styles.sectionLabel}><MicroLabel>Tell the Leader</MicroLabel></p>\n <DirectiveForm actions={actions} />\n </Card>\n );\n}\n\nfunction RunRow({ run, actions, now, onChanged }: { run: FleetLiveRun; actions: SurfaceActions; now: number; onChanged: () => void }) {\n const [open, setOpen] = useState<'log' | 'interject' | null>(null);\n const [note, setNote] = useState('');\n const noteId = useId();\n // A follow-up needs a GitHub repo to queue on when there is no task behind the run.\n const canInterject = Boolean(run.taskId) || /^[A-Za-z0-9][A-Za-z0-9-]*\\/[A-Za-z0-9._-]+$/u.test(run.repo);\n const started = run.startedAt ? Date.parse(run.startedAt) : NaN;\n const minutes = Number.isFinite(started) ? Math.max(0, Math.round((now - started) / 60_000)) : null;\n\n function stopRun(): void {\n actions.act(\n () => postFleetControl({ action: 'stop-run', runId: run.id, ...(run.taskId ? { taskId: run.taskId } : {}) }),\n 'Stop this run',\n {\n confirm: { title: 'Stop this run?', body: `\"${run.title}\" on ${repoDisplayName(run.repo)} halts within a few seconds. Nothing it has not filed is kept; its task goes back to the queue.`, confirmLabel: 'Stop run', destructive: true },\n onDone: onChanged,\n },\n );\n }\n\n function interject(): void {\n const text = note.trim();\n if (!text) return;\n actions.act(\n () => postFleetControl(run.taskId\n ? { action: 'interject', runId: run.id, taskId: run.taskId, note: text }\n : { action: 'interject', runId: run.id, repo: run.repo, title: run.title, note: text }),\n 'Interject on this run',\n {\n onDone: () => {\n setNote('');\n setOpen(null);\n onChanged();\n },\n },\n );\n }\n\n return (\n <li className={styles.row}>\n <div className={styles.rowHead}>\n <p className={styles.rowTitle}>\n {run.title}\n <span className={styles.rowMeta}>\n {' '}· {repoDisplayName(run.repo)} · {run.engine ?? run.lane ?? 'engine ?'} · {run.phase}{minutes !== null ? ` · ${minutes} min` : ''}\n </span>\n </p>\n <span className={styles.rowControls}>\n <Button size=\"sm\" variant=\"ghost\" aria-expanded={open === 'log'} onClick={() => setOpen(open === 'log' ? null : 'log')}>\n Log\n </Button>\n <Button size=\"sm\" variant=\"ghost\" aria-expanded={open === 'interject'} onClick={() => setOpen(open === 'interject' ? null : 'interject')} disabled={actions.readOnly || !canInterject} title={canInterject ? undefined : 'This run has no queue task or GitHub repo to requeue on — use Stop.'}>\n Interject\n </Button>\n <Button size=\"sm\" variant=\"danger\" icon={<IconStop />} onClick={stopRun} disabled={actions.readOnly}>\n Stop\n </Button>\n </span>\n </div>\n {open === 'log' ? <RunLog runId={run.id} /> : null}\n {open === 'interject' ? (\n <div className={styles.interject}>\n <label className={styles.muted} htmlFor={noteId}>\n Fleet engines run headless, so this stops the run and queues it again with your note in its brief.\n </label>\n <textarea\n id={noteId}\n className={styles.textarea}\n value={note}\n maxLength={1000}\n onChange={(e) => setNote(e.target.value)}\n placeholder=\"e.g. Use the existing fixture helper; do not touch the CLI.\"\n />\n <span className={styles.rowControls}>\n <Button size=\"sm\" variant=\"primary\" onClick={interject} disabled={!note.trim() || actions.readOnly} busy={actions.busy}>\n Stop and requeue with note\n </Button>\n </span>\n </div>\n ) : null}\n </li>\n );\n}\n\nfunction RunLog({ runId }: { runId: string }) {\n const [log, setLog] = useState<FleetRunLogV1 | null>(null);\n const [error, setError] = useState<string | null>(null);\n useEffect(() => {\n let cancelled = false;\n const controller = new AbortController();\n const load = () => {\n fetchRunLog(runId, controller.signal).then(\n (next) => { if (!cancelled) { setLog(next); setError(null); } },\n (err: unknown) => { if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) setError('The run log could not be read.'); },\n );\n };\n load();\n const timer = setInterval(load, LOG_POLL_MS);\n return () => {\n cancelled = true;\n controller.abort();\n clearInterval(timer);\n };\n }, [runId]);\n if (error) return <CardNote tone=\"unknown\">{error}</CardNote>;\n if (!log) return <p className={styles.muted} aria-busy=\"true\">Reading the log…</p>;\n return (\n <div>\n {log.stopRequestedAt ? <p className={styles.muted}>Stop requested {formatRelative(log.stopRequestedAt)}.</p> : null}\n {log.available ? (\n <pre className={styles.log} aria-label=\"Run log\" aria-live=\"off\">\n {log.truncated ? '…\\n' : ''}\n {log.lines.map((line) => `${line.kind === 'model-delta' ? '' : `[${line.kind}] `}${line.text}`).join('\\n') || '(no output yet)'}\n </pre>\n ) : (\n <CardNote tone=\"unknown\">{log.reason ?? 'No log for this run.'}</CardNote>\n )}\n </div>\n );\n}\n\ntype QueueTask = FleetControlQueueV1['tasks'][number];\n\nfunction TaskRow({ task, repos, actions, onChanged }: { task: QueueTask; repos: string[]; actions: SurfaceActions; onChanged: () => void }) {\n const choices = repos.some((r) => r.toLowerCase() === task.repo.toLowerCase()) ? repos : [task.repo, ...repos];\n return (\n <li className={styles.row}>\n <div className={styles.rowHead}>\n <p className={styles.rowTitle}>\n {task.title}\n <span className={styles.rowMeta}> · {task.status} · {task.source} · updated {formatRelative(task.updatedAt)}</span>\n </p>\n <span className={styles.rowControls}>\n <Select\n size=\"sm\"\n aria-label={`Priority of ${task.title}`}\n value={String(task.value)}\n disabled={actions.readOnly}\n onChange={(e) => {\n const value = Number(e.target.value);\n actions.act(() => postFleetControl({ action: 'task-edit', taskId: task.id, value }), 'Reprioritize the task', { onDone: onChanged });\n }}\n >\n {[5, 4, 3, 2, 1].map((v) => (\n <option key={v} value={v}>\n {v === 5 ? 'Priority 5 (highest)' : v === 1 ? 'Priority 1 (lowest)' : `Priority ${v}`}\n </option>\n ))}\n </Select>\n <Select\n size=\"sm\"\n aria-label={`Repo for ${task.title}`}\n value={task.repo}\n disabled={actions.readOnly || task.status === 'dispatched'}\n onChange={(e) => {\n const repo = e.target.value;\n actions.act(() => postFleetControl({ action: 'task-edit', taskId: task.id, repo }), 'Retarget the task', { onDone: onChanged });\n }}\n >\n {choices.map((repo) => (\n <option key={repo} value={repo}>\n {repo}\n </option>\n ))}\n </Select>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={actions.readOnly || task.status === 'dispatched'}\n onClick={() => actions.act(() => postFleetControl({ action: 'task-cancel', taskId: task.id }), 'Cancel the task', {\n confirm: { title: 'Cancel this task?', body: `\"${task.title}\" leaves the queue.`, confirmLabel: 'Cancel task', destructive: true },\n onDone: onChanged,\n })}\n >\n Cancel\n </Button>\n </span>\n </div>\n </li>\n );\n}\n\ntype QueueGoal = FleetControlQueueV1['goals'][number];\n\nfunction GoalRow({ goal, paths, actions, onChanged }: { goal: QueueGoal; paths: string[]; actions: SurfaceActions; onChanged: () => void }) {\n const choices = goal.project && !paths.includes(goal.project) ? [goal.project, ...paths] : paths;\n return (\n <li className={styles.row}>\n <div className={styles.rowHead}>\n <p className={styles.rowTitle}>\n {goal.objective}\n <span className={styles.rowMeta}> · {goal.status}{goal.missionBound ? ' · bound to a signed mission' : ''}</span>\n </p>\n <span className={styles.rowControls}>\n <Select\n size=\"sm\"\n aria-label={`Target repo for ${goal.objective}`}\n value={goal.project ?? ''}\n disabled={actions.readOnly || goal.missionBound}\n onChange={(e) => {\n const project = e.target.value;\n if (!project) return;\n actions.act(() => postFleetControl({ action: 'goal-retarget', goalId: goal.id, project }), 'Retarget the goal', { onDone: onChanged });\n }}\n >\n {goal.project === null ? <option value=\"\">No repo (planning only)</option> : null}\n {choices.map((path) => (\n <option key={path} value={path}>\n {path}\n </option>\n ))}\n </Select>\n </span>\n </div>\n </li>\n );\n}\n\nfunction DirectiveForm({ actions }: { actions: SurfaceActions }) {\n const [text, setText] = useState('');\n const [sent, setSent] = useState(false);\n function submit(): void {\n const value = text.trim();\n if (!value) return;\n actions.act(() => postLeaderDirective(value), 'Add a Leader directive', {\n onDone: () => {\n setText('');\n setSent(true);\n },\n });\n }\n return (\n <form\n className={styles.directive}\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n <Input\n size=\"sm\"\n label=\"Directive\"\n value={text}\n maxLength={300}\n disabled={actions.readOnly}\n onChange={(e) => {\n setText(e.target.value);\n setSent(false);\n }}\n placeholder=\"e.g. Prioritise test coverage in ashlrcode this week\"\n hint={sent ? 'Added. The Leader reads it on its next run; it never widens the grant.' : 'A standing instruction for the Leader. It never widens the grant.'}\n />\n <Button type=\"submit\" size=\"sm\" variant=\"subtle\" disabled={!text.trim() || actions.readOnly}>\n Add directive\n </Button>\n </form>\n );\n}\n","/**\n * routes/verse/cloud/CloudLaneChip.tsx — \"Cloud · N running\" at the end of\n * Fleet's lanes row (3.11 unit C3; mounted by fleet/FleetCards.tsx\n * LanesStrip). Styled by the lanes row's own classes, which it passes in,\n * so it reads as one more lane.\n *\n * N counts tasks queued, launching or running — sessions Verse started that\n * have not delivered a PR yet. A server without the cloud lane renders no\n * chip at all: the lanes row is not the place to say \"not in this build\".\n */\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { inFlightCount } from './cloud-model.js';\nimport { CLOUD_POLL_MS, cloudQuery } from './cloud-queries.js';\nimport styles from './cloud.module.css';\n\nexport interface CloudLaneChipClasses {\n lane?: string;\n name?: string;\n sep?: string;\n slots?: string;\n}\n\nexport function CloudLaneChip({ classes = {} }: { classes?: CloudLaneChipClasses }) {\n const read = useQuery(cloudQuery, { freshMs: 15_000 });\n const refetch = useRefetch(cloudQuery);\n usePollWhileVisible(refetch, CLOUD_POLL_MS);\n const overview = read.data?.value ?? null;\n if (!overview) return null;\n const running = inFlightCount(overview.tasks);\n const title = `Claude Code cloud sessions Verse launched that have not delivered a PR yet. ${overview.budget.sessionsToday} of ${overview.budget.budget.maxSessionsPerDay} sessions used today.`;\n return (\n <li className={`${classes.lane ?? ''} ${styles.laneChip}`} data-active={running > 0 || undefined} title={title} aria-label={`Cloud: ${running} running`}>\n <span className={classes.name}>Cloud</span>\n <span className={classes.sep} aria-hidden=\"true\">\n {' · '}\n </span>\n <span className={classes.slots}>{running} running</span>\n </li>\n );\n}\n","/**\n * routes/verse/fleet/FleetCards.tsx — the Fleet surface's cards (SPEC-310B §6,\n * SPEC-310C §5; unit C7): lanes, the live swimlane, the gate funnel with its\n * refusal reasons, \"why this seat\", the parked Gantt and Overnight.\n *\n * Every card takes an OptionalRead and draws the designed state for each way\n * a source can be missing (not landed, unrecognised, dark) — never empty axes.\n */\nimport type { FleetLaneState, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { SeatDecision } from '../../../../core/routing/types.js';\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport { BarStack } from '../../../components/charts/BarStack.js';\nimport type { ChartStatus } from '../../../components/charts/ChartFrame.js';\nimport { Funnel } from '../../../components/charts/Funnel.js';\nimport { Swimlane } from '../../../components/charts/Swimlane.js';\nimport { EngineMarker } from '../../../components/primitives/Tag.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport type { OptionalFleetRead } from '../autonomy/fleet-contract.js';\nimport type { OvernightStatus } from '../autonomy/overnight-contract.js';\nimport { describeStopRule } from '../autonomy/overnight-model.js';\nimport { CloudLaneChip } from '../cloud/CloudLaneChip.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { fleetDarkStatus } from './dark-since.js';\nimport { LANE_ENGINE, LANE_LABEL, funnelStages, laneChipText, laneNotes, laneReason, laneRows, latestDecision, parkedGantt, refusalStack, runTone } from './live-model.js';\nimport { asSentence, decisionSummary, describeEligibleAgain, eligibleAgain, heldBackText } from './why-seat-model.js';\nimport styles from './fleet.module.css';\n\nconst HOUR = 3_600_000;\n\n/**\n * The shared \"is there a fleet to draw at all\" decision for every chart card.\n * Dark reads THE dark-since instant (`fleetDarkStatus`), as the viewer's local\n * day — the same day Command's verdict line names — and no day at all when\n * the server does not know one.\n */\nexport function fleetStatus(read: OptionalRead<FleetLiveSnapshotV1> | undefined, empty: string, hasData: boolean): ChartStatus {\n if (!read) return { kind: 'loading' };\n const live = read.value;\n if (!live) return { kind: 'unknown', reason: read.reason ?? 'the live fleet view did not answer.' };\n if (live.state === 'dark' && !hasData) return fleetDarkStatus(live);\n return hasData ? { kind: 'ready' } : { kind: 'empty', message: empty };\n}\n\n// ---------------------------------------------------------------------------\n// Lanes strip + live swimlane\n// ---------------------------------------------------------------------------\n\n/** \"Local · off\" — the chip is the lane and its slots; its why is one line below the strip (and its title). */\nfunction LaneChip({ lane }: { lane: FleetLaneState }) {\n const text = laneChipText(lane);\n return (\n <li className={styles.lane} data-off={lane.slots === 0 || undefined} title={laneReason(lane) ?? undefined}>\n <EngineMarker engine={LANE_ENGINE[lane.lane]} />\n <span className={styles.laneName}>{text.name}</span>\n <span className={styles.laneSep} aria-hidden=\"true\">\n {' · '}\n </span>\n <span className={styles.laneSlots}>{text.slots}</span>\n </li>\n );\n}\n\nexport function LanesStrip({ live }: { live: FleetLiveSnapshotV1 | null }) {\n if (!live || live.lanes.length === 0) return null;\n const notes = laneNotes(live.lanes);\n return (\n <div className={styles.laneStrip}>\n <ul className={styles.lanes} aria-label=\"Lanes: busy of slots\">\n {live.lanes.map((l) => (\n <LaneChip key={l.lane} lane={l} />\n ))}\n <CloudLaneChip classes={{ lane: styles.lane, name: styles.laneName, sep: styles.laneSep, slots: styles.laneSlots }} />\n </ul>\n {notes.length > 0 ? (\n <ul className={styles.laneNotes} aria-label=\"Why lanes are limited\">\n {notes.map((n) => (\n <li key={n.lanes.join(',')}>\n {n.all ? null : <span className={styles.laneNoteLanes}>{n.lanes.map((l) => LANE_LABEL[l]).join(', ')}: </span>}\n {asSentence(n.reason)}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nexport function LiveSwimlane({ read, now, hours }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; now: number; hours: number }) {\n const live = read?.value ?? null;\n const from = now - hours * HOUR;\n const lanes = live ? laneRows(live.runs, from, now, { includeParked: false }) : [];\n return (\n <Swimlane\n title=\"Live fleet\"\n description={`Lanes × slots, last ${hours} h · bars coloured by phase or outcome · outlines are queued`}\n status={fleetStatus(read, `Nothing ran in the last ${hours} hours.`, lanes.length > 0)}\n lanes={lanes}\n from={from}\n to={now}\n now={now}\n toneOf={runTone}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Gate funnel + refusal reasons\n// ---------------------------------------------------------------------------\n\nexport function GateFunnelCards({ read }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined }) {\n const live = read?.value ?? null;\n const funnel = live?.funnel ?? null;\n const stages = funnelStages(funnel);\n const refusals = refusalStack(funnel);\n const window = funnel ? `${new Date(funnel.from).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${new Date(funnel.to).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}` : undefined;\n return (\n <div className={styles.stack}>\n <Funnel\n title=\"Gate funnel\"\n description={window ? `Proposals through G0–G7, ${window}` : 'Proposals through the merge gates G0–G7'}\n status={fleetStatus(read, 'No proposal reached the gates in this window.', stages.length > 0)}\n stages={stages}\n />\n <BarStack\n title=\"Refusals by gate\"\n description={refusals.total ? `${refusals.total} refusals · top reasons keep their colour` : 'Why proposals stopped'}\n status={fleetStatus(read, 'Nothing was refused in this window.', refusals.total > 0)}\n categories={refusals.categories}\n segments={refusals.segments}\n values={refusals.values}\n height={180}\n />\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Why this seat\n// ---------------------------------------------------------------------------\n\nfunction seatLabel(view: BudgetView | null, seatId: string): { label: string; engine: 'claude' | 'codex' | 'grok' | 'local' | null } {\n const info = view?.seatInfo.find((s) => s.seatId === seatId);\n return { label: info?.label ?? seatId, engine: info?.engine ?? null };\n}\n\nexport function DecisionView({ decision, view, now }: { decision: SeatDecision; view: BudgetView | null; now?: number }) {\n const chosen = decision.seatId ? seatLabel(view, decision.seatId) : null;\n return (\n <div className={styles.decision}>\n <p className={styles.decisionLead}>\n {chosen ? (\n <>\n {chosen.engine ? <EngineMarker engine={chosen.engine} /> : null}\n <strong>{chosen.label}</strong>\n </>\n ) : (\n <strong>No seat</strong>\n )}\n <span className={styles.mode}>{decision.mode}</span>\n </p>\n <p className={styles.decisionWhy}>{decisionSummary(decision)}</p>\n {decision.candidates.length > 1 ? (\n <div>\n <MicroLabel>Then</MicroLabel>\n <ol className={styles.candidates}>\n {decision.candidates.slice(decision.seatId ? 1 : 0).map((id) => (\n <li key={id}>{seatLabel(view, id).label}</li>\n ))}\n </ol>\n </div>\n ) : null}\n {decision.exclusions.length ? (\n <div>\n <MicroLabel>Held back</MicroLabel>\n <ul className={styles.exclusions} aria-label=\"Held back seats\">\n {decision.exclusions.map((x) => (\n <li key={x.seatId}>\n <span className={styles.excluded}>{seatLabel(view, x.seatId).label}</span>\n <span className={styles.excludedWhy}>{heldBackText(x)}</span>\n <span className={styles.excludedWhen}>eligible again: {describeEligibleAgain(eligibleAgain(x), now)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function WhySeatCard({ read, preview, view, now }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; preview: SeatDecision | null; view: BudgetView | null; now?: number }) {\n const latest = latestDecision(read?.value ?? null);\n return (\n <Card\n title=\"Why this seat\"\n caption={latest ? `Latest dispatch: ${latest.run.title} (${formatRelative(latest.run.phaseStartedAt ?? latest.run.startedAt)})` : preview ? 'The next medium autonomous task would go to…' : undefined}\n >\n {latest ? (\n <DecisionView decision={latest.decision} view={view} now={now} />\n ) : preview ? (\n <DecisionView decision={preview} view={view} now={now} />\n ) : (\n <CardNote tone=\"unknown\">No routing decision yet. The router preview didn't answer.</CardNote>\n )}\n </Card>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Parked Gantt\n// ---------------------------------------------------------------------------\n\nexport function ParkedCard({ read, now }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; now: number }) {\n const live = read?.value ?? null;\n const gantt = live ? parkedGantt(live.runs, now) : { lanes: [], from: now - HOUR, to: now + 2 * HOUR, unknownRelease: 0 };\n return (\n <Swimlane\n title=\"Parked\"\n description=\"Waiting for a seat to free up — each bar ends when it should\"\n caveat={gantt.unknownRelease ? `${gantt.unknownRelease} item${gantt.unknownRelease === 1 ? ' has' : 's have'} no known release time; ${gantt.unknownRelease === 1 ? 'it runs' : 'they run'} to the right edge.` : undefined}\n status={fleetStatus(read, 'Nothing is parked.', gantt.lanes.length > 0)}\n lanes={gantt.lanes}\n from={gantt.from}\n to={gantt.to}\n now={now}\n toneOf={runTone}\n formatTick={(ms) => new Date(ms).toLocaleString('en-US', { weekday: 'short', hour: 'numeric' })}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Overnight\n// ---------------------------------------------------------------------------\n\nexport function OvernightCard({ read, onOpenAdvanced, dark = false }: { read: OptionalFleetRead<OvernightStatus> | undefined; onOpenAdvanced: () => void; /** The fleet is dark: it has no \"normal schedule\" to run on. */ dark?: boolean }) {\n const status = read?.value ?? null;\n const run = status?.run ?? null;\n return (\n <Card\n title=\"Overnight\"\n caption={status ? (status.armed ? 'Armed' : 'Not armed') : undefined}\n actions={\n <button type=\"button\" className={styles.link} onClick={onOpenAdvanced}>\n Arm or stop in Advanced\n </button>\n }\n >\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the overnight lane…</p>\n ) : !status ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The overnight lane did not answer.'}</CardNote>\n ) : !status.armed && !run ? (\n <CardNote>{dark ? 'Nothing armed.' : 'Nothing armed. The fleet runs on its normal schedule.'}</CardNote>\n ) : (\n <div className={styles.overnight}>\n {run?.stopRule ? <p className={styles.overnightLead}>{describeStopRule(run.stopRule)}</p> : null}\n <dl className={styles.facts}>\n <div>\n <dt>Started</dt>\n <dd>{run?.startedAt ? formatRelative(run.startedAt) : '—'}</dd>\n </div>\n <div>\n <dt>Iterations</dt>\n <dd>{run?.iterationsDone ?? '—'}</dd>\n </div>\n <div>\n <dt>Merged</dt>\n <dd>{run ? run.merged.length : '—'}</dd>\n </div>\n <div>\n <dt>Discarded</dt>\n <dd>{run ? run.discarded.length : '—'}</dd>\n </div>\n </dl>\n {run?.activity ? <p className={styles.muted}>Now: {run.activity}</p> : null}\n {run && run.discarded.length ? (\n <ul className={styles.discarded} aria-label=\"Discarded work\">\n {run.discarded.slice(0, 3).map((d) => (\n <li key={d.id}>\n <span className={styles.discardTitle}>{d.title}</span>\n <span className={styles.discardWhy}>{d.reason}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n )}\n </Card>\n );\n}\n","/**\n * routes/verse/fleet/RepoTable.tsx — one row per enrolled repo (SPEC-310C §5\n * Fleet \"Repo table: stage, last merge, green% sparkline, holds,\n * pause/resume\"; unit C7).\n *\n * Pause sets an owner-hold as Mason; Resume clears every active hold (or the\n * one a Needs-you item names). Both confirm first — a pause stops new work\n * in a repo, a resume can lift a quarantine early — then take the token.\n * At 375 px the table becomes one card per repo (a 7-column table does not\n * fit a phone, and a horizontal scroll hides the action).\n */\nimport type { FleetLiveSnapshotV1, FleetMirrorSummary, FleetRepoRow, RepoHold } from '../../../../core/fleet/fleet-types.js';\nimport { Sparkline } from '../../../components/charts/Sparkline.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, CardNote } from '../command/Surface.js';\nimport { postFleetLive, type OptionalRead } from '../command/surface-data.js';\nimport styles from './fleet.module.css';\n\nconst HOLD_WORD: Record<RepoHold['kind'], string> = {\n quarantine: 'Quarantined',\n 'owner-hold': 'On hold (you)',\n 'leader-pause': 'Paused by Leader',\n cooldown: 'Cooling down',\n};\n\nexport function holdText(hold: RepoHold, now: number): string {\n const until = hold.until ? Date.parse(hold.until) : NaN;\n const left = Number.isFinite(until) ? Math.max(0, until - now) : null;\n const tail = left === null ? 'until resumed' : left < 3_600_000 ? `${Math.ceil(left / 60_000)}m left` : `${Math.round(left / 3_600_000)}h left`;\n return `${HOLD_WORD[hold.kind]} · ${tail}`;\n}\n\nfunction shortRepo(repo: string): string {\n return repo.includes('/') ? repo.split('/')[1]! : repo;\n}\n\nfunction StageBadge({ row }: { row: FleetRepoRow }) {\n if (row.stage === null) return <span className={styles.stage} data-stage=\"none\">Not in grant</span>;\n return (\n <span className={styles.stage} data-stage={row.stage}>\n {row.stage === 'merge' ? 'Merge' : 'Propose'}\n {row.enforcement === 'local' ? <span className={styles.stageNote}> · local checks</span> : null}\n </span>\n );\n}\n\nfunction RepoAction({ row, actions }: { row: FleetRepoRow; actions: SurfaceActions }) {\n const disabled = actions.busy || actions.readOnly;\n if (row.holds.length) {\n return (\n <Button\n size=\"sm\"\n variant=\"subtle\"\n disabled={disabled}\n aria-label={`Resume ${row.repo}`}\n onClick={() =>\n actions.act(() => postFleetLive({ action: 'resume-repo', repo: row.repo }), `Resume ${row.repo}`, {\n confirm: {\n title: `Resume ${shortRepo(row.repo)}?`,\n body: `Clears ${row.holds.map((h) => HOLD_WORD[h.kind].toLowerCase()).join(' and ')}. New fleet work can start there on the next tick.`,\n confirmLabel: 'Resume',\n },\n })\n }\n >\n Resume\n </Button>\n );\n }\n if (row.stage === null) return null;\n return (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled}\n aria-label={`Pause ${row.repo}`}\n onClick={() =>\n actions.act(() => postFleetLive({ action: 'pause-repo', repo: row.repo, reason: 'Paused by Mason from the Fleet surface' }), `Pause ${row.repo}`, {\n confirm: {\n title: `Pause ${shortRepo(row.repo)}?`,\n body: 'No new fleet work starts there until you resume it. Runs already in flight finish and are watched as usual.',\n confirmLabel: 'Pause repo',\n destructive: true,\n },\n })\n }\n >\n Pause\n </Button>\n );\n}\n\nfunction GreenCell({ row }: { row: FleetRepoRow }) {\n return (\n <span className={styles.green}>\n <span className={styles.greenValue}>{row.greenPct7d === null ? '—' : `${Math.round(row.greenPct7d)}%`}</span>\n <Sparkline points={row.greenTrend} width={64} height={18} ariaLabel={`${row.repo} post-merge green, 14 days`} describe={(v) => `${Math.round(v)}%`} />\n </span>\n );\n}\n\nfunction Holds({ row, now }: { row: FleetRepoRow; now: number }) {\n if (!row.holds.length) return <span className={styles.muted}>—</span>;\n return (\n <span className={styles.holds}>\n {row.holds.map((h) => (\n <span key={h.kind} className={styles.hold} data-kind={h.kind} title={h.reason}>\n {holdText(h, now)}\n </span>\n ))}\n </span>\n );\n}\n\n/**\n * The fleet's own mirror clones, apart from the repo rows. WHY separate: a\n * mirror is the fleet's working copy of a repo already listed above, so\n * counting it as a row double-counts the repo (and its pause would not pause\n * the real one). `undefined` = an older server that does not report mirrors\n * (say nothing); `null` = the enrollment registry could not be read (say so —\n * unknown is never \"none\").\n */\nexport function mirrorsText(mirrors: FleetMirrorSummary | null | undefined): string | null {\n if (mirrors === undefined) return null;\n if (mirrors === null) return 'Fleet mirrors: unknown — the enrollment registry could not be read.';\n if (mirrors.count === 0) return 'Fleet mirrors: none yet — the fleet clones a repo the first time it works on it.';\n const shown = mirrors.repos.slice(0, 6).join(', ');\n const more = mirrors.repos.length > 6 ? ` and ${mirrors.repos.length - 6} more` : '';\n return `Fleet mirrors: ${mirrors.count} working ${mirrors.count === 1 ? 'copy' : 'copies'}${shown ? ` (${shown}${more})` : ''} — the fleet's own clones of the repos above.`;\n}\n\nconst today = (row: FleetRepoRow) => (row.mergesToday === null ? '—' : `${row.mergesToday}${row.maxMergesPerDay !== null ? ` / ${row.maxMergesPerDay}` : ''}`);\n\nexport function RepoTable({ read, actions, now, compact }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; actions: SurfaceActions; now: number; compact: boolean }) {\n const live = read?.value ?? null;\n const rows = live?.repos ?? [];\n return (\n <Card title=\"Repositories\" caption={live ? `${rows.length} enrolled · stage is what the grant and rollout allow right now` : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading repositories…</p>\n ) : !live ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The live fleet view did not answer.'}</CardNote>\n ) : rows.length === 0 ? (\n <CardNote>No repositories are enrolled.</CardNote>\n ) : compact ? (\n <ul className={styles.repoCards}>\n {rows.map((row) => (\n <li key={row.repo} className={styles.repoCard} id={anchorId(`repo-${row.repo}`)}>\n <div className={styles.repoCardHead}>\n <span className={styles.repoName}>{row.repo}</span>\n <RepoAction row={row} actions={actions} />\n </div>\n <dl className={styles.facts}>\n <div><dt>Stage</dt><dd><StageBadge row={row} /></dd></div>\n <div><dt>Last merge</dt><dd>{row.lastMergeAt ? formatRelative(row.lastMergeAt) : '—'}</dd></div>\n <div><dt>Today</dt><dd>{today(row)}</dd></div>\n <div><dt>Green 7d</dt><dd><GreenCell row={row} /></dd></div>\n </dl>\n <Holds row={row} now={now} />\n </li>\n ))}\n </ul>\n ) : (\n <div className={styles.tableWrap}>\n <table className={styles.table}>\n <caption className=\"visually-hidden\">Enrolled repositories</caption>\n <thead>\n <tr>\n <th scope=\"col\">Repository</th>\n <th scope=\"col\">Stage</th>\n <th scope=\"col\">Last merge</th>\n <th scope=\"col\" className={styles.num}>Today</th>\n <th scope=\"col\">Post-merge green · 14d</th>\n <th scope=\"col\" className={styles.num}>Open PRs</th>\n <th scope=\"col\">Holds</th>\n <th scope=\"col\"><span className=\"visually-hidden\">Action</span></th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.repo} id={anchorId(`repo-${row.repo}`)} data-held={row.holds.length > 0 || undefined}>\n <th scope=\"row\" className={styles.repoName}>{row.repo}</th>\n <td><StageBadge row={row} /></td>\n <td>{row.lastMergeAt ? formatRelative(row.lastMergeAt) : '—'}</td>\n <td className={styles.num}>{today(row)}</td>\n <td><GreenCell row={row} /></td>\n <td className={styles.num}>{row.openFleetPrs ?? '—'}</td>\n <td><Holds row={row} now={now} /></td>\n <td className={styles.actionCell}><RepoAction row={row} actions={actions} /></td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n {live && mirrorsText(live.mirrors) ? <p className={styles.muted}>{mirrorsText(live.mirrors)}</p> : null}\n </Card>\n );\n}\n","/**\n * routes/verse/sections/FleetSection.tsx — ⌘2 Fleet (SPEC-310B §6,\n * SPEC-310C §5; unit C7). THE place to operate the fleet (3.15): what it is\n * doing and the one thing in its way, Start / Pause / Resume / Stop, the grant\n * (and editing it), steering runs and the queue — then what is running where,\n * why that seat, what is waiting, and per-repo control.\n *\n * Fleet control: one sentence, one blocker, the controls, the facts (lead)\n * Rollout ladder (while a grant is active) (12)\n * Steer: working runs (log / interject / stop), queue, goals, Leader (12)\n * Live swimlane by lane × phase (12)\n * Shadow decisions: G0–G7 per proposal, ladder regressions (12)\n * Gate funnel + refusal reasons (7) | Why this seat (5)\n * Parked Gantt (7) | Overnight (5)\n * Repo table: stage, last merge, green% sparkline, holds, pause/resume (12)\n * ▸ Advanced — the eleven legacy Autonomy panels, fetched only when opened\n *\n * At 375 px: one column in that order; the repo table becomes cards.\n * The live view polls every 5 s while Fleet is the visible surface.\n *\n * Autonomy off: the shared AutonomyOffState sits under the lanes, and when\n * the fleet has nothing to draw (no runs, no gate traffic) the three chart\n * cards are left out instead of each repeating \"Fleet dark since …\".\n */\nimport { Suspense, lazy, useId, useState } from 'react';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { IconChevronRight } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { AutonomyOffState, useAutonomyOff } from '../autonomy/AutonomyOffState.js';\nimport { overnightQuery } from '../autonomy/overnight-queries.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { budgetPreviewQuery, budgetQuery } from '../budget/budget-queries.js';\nimport { ActionStatus, useSurfaceActions } from '../command/actions.js';\nimport { paletteBlock, useGrantFlow } from '../command/AutonomyBar.js';\nimport { anchorId } from '../command/nav.js';\nimport { FleetControl } from '../fleet/FleetControl.js';\nimport { SteerPanel } from '../fleet/SteerPanel.js';\nimport { Cell, Surface } from '../command/Surface.js';\nimport { authorityQuery, fleetLiveQuery } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useViewport } from '../shell/viewport.js';\nimport { GateFunnelCards, LanesStrip, LiveSwimlane, OvernightCard, ParkedCard, WhySeatCard } from '../fleet/FleetCards.js';\nimport { RepoTable } from '../fleet/RepoTable.js';\nimport { nothingToDraw } from '../fleet/live-model.js';\nimport { fleetDarkSince } from '../fleet/dark-since.js';\nimport styles from '../fleet/fleet.module.css';\n\nexport const FLEET_POLL_MS = 5_000;\nexport const FLEET_SLOW_POLL_MS = 30_000;\n\n// The legacy cockpit is ~74 KB of panels: its own chunk, loaded on open.\n// Shadow decisions (3.14): the gates' verdicts per proposal and ladder\n// regressions — its own chunk, loaded once a grant has ever been signed.\nconst ShadowDecisions = lazy(() => import('../fleet/ShadowDecisions.js'));\n\nconst FleetAdvanced = lazy(() => import('../fleet/Advanced.js').then((m) => ({ default: () => <m.FleetAdvanced embedded /> })));\n// The rollout ladder (3.14) lives here since 3.15 — Command links to it.\nconst AutonomyStatus = lazy(() => import('../command/AutonomyStatus.js'));\n\nexport function FleetSection() {\n const { compact } = useViewport();\n const fleet = useQuery(fleetLiveQuery);\n const overnight = useQuery(overnightQuery);\n const budget = useQuery(budgetQuery, { freshMs: 15_000 });\n const preview = useQuery(budgetPreviewQuery, { freshMs: 15_000 });\n const refetchFleet = useRefetch(fleetLiveQuery);\n const refetchOvernight = useRefetch(overnightQuery);\n const refetchPreview = useRefetch(budgetPreviewQuery);\n usePollWhileVisible(refetchFleet, FLEET_POLL_MS);\n usePollWhileVisible(() => {\n refetchOvernight();\n refetchPreview();\n }, FLEET_SLOW_POLL_MS);\n\n const now = useNow(15_000);\n const actions = useSurfaceActions();\n // One Touch ID sheet for Start's grant step, the blocker and \"Edit scope\".\n const grantFlow = useGrantFlow(actions);\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const advancedId = useId();\n const live = fleet.data?.value ?? null;\n const off = useAutonomyOff();\n // Same cache entry as the off-state's read (no extra request).\n const authority = useQuery(authorityQuery, { freshMs: 30_000 });\n const auth = authority.data?.value ?? null;\n const grantState = auth?.grant.state ?? null;\n // A grant (active, or lapsed with history) means the ledger has decisions to show.\n const showDecisions = grantState !== null && grantState !== 'none';\n // Collapse only what would be empty: a fleet stopped an hour ago still\n // draws its last runs.\n const collapse = off != null && live !== null && nothingToDraw(live);\n\n function openAdvanced(): void {\n setAdvancedOpen(true);\n requestAnimationFrame(() => document.getElementById(advancedId)?.scrollIntoView?.({ block: 'start', behavior: 'smooth' }));\n }\n\n return (\n <Surface\n title=\"Fleet\"\n actions={fleet.status === 'refreshing' ? <RefreshIndicator /> : null}\n lead={\n <>\n <ActionStatus actions={actions} />\n <div id={anchorId('fleet-control')}>\n <span id={anchorId('authority-grant')} />\n <FleetControl actions={actions} grantFlow={grantFlow} darkSince={fleetDarkSince(live)} setupShownBelow={off?.kind === 'setup'} />\n </div>\n {/* The one-time setup checklist (the only step list left); every other\n off state is FleetControl's single blocker + button. */}\n {off && off.kind === 'setup' ? <AutonomyOffState state={off} here=\"fleet\" /> : null}\n <LanesStrip live={live} />\n </>\n }\n >\n {auth && auth.grant.state === 'active' ? (\n // Needs-you's rollout and Stop items, and ⌘K \"Autonomy status\", point here.\n <Cell span={12}>\n <div id={anchorId('autonomy')}>\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading the rollout ladder…</p>}>\n <AutonomyStatus\n status={auth}\n now={now}\n onReapprove={(why) => grantFlow.open('re-approve', why)}\n blocked={paletteBlock({ status: auth, reason: null, readOnly: actions.readOnly, busy: actions.busy })}\n />\n </Suspense>\n </div>\n </Cell>\n ) : null}\n <Cell span={12}>\n <SteerPanel live={live} actions={actions} now={now} />\n </Cell>\n {collapse ? null : (\n <Cell span={12}>\n <LiveSwimlane read={fleet.data} now={now} hours={compact ? 6 : 12} />\n </Cell>\n )}\n {showDecisions ? (\n <Cell span={12}>\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading shadow decisions…</p>}>\n <ShadowDecisions now={now} />\n </Suspense>\n </Cell>\n ) : null}\n {collapse ? null : (\n <Cell span={7}>\n <GateFunnelCards read={fleet.data} />\n </Cell>\n )}\n <Cell span={collapse ? 6 : 5}>\n <WhySeatCard read={fleet.data} preview={preview.data ?? null} view={budget.data ?? null} now={now} />\n </Cell>\n {collapse ? null : (\n <Cell span={7}>\n <ParkedCard read={fleet.data} now={now} />\n </Cell>\n )}\n <Cell span={collapse ? 6 : 5}>\n <OvernightCard read={overnight.data} onOpenAdvanced={openAdvanced} dark={live?.state === 'dark'} />\n </Cell>\n <Cell span={12}>\n <RepoTable read={fleet.data} actions={actions} now={now} compact={compact} />\n </Cell>\n <Cell span={12}>\n <div className={styles.advanced}>\n <button\n type=\"button\"\n className={styles.disclosure}\n aria-expanded={advancedOpen}\n aria-controls={advancedId}\n onClick={() => setAdvancedOpen((o) => !o)}\n >\n <IconChevronRight className={styles.chevron} width={14} height={14} aria-hidden=\"true\" />\n Advanced\n <span className={styles.disclosureNote}>daemon, overnight, local runtime, caps, scope, activity, safety, goals</span>\n </button>\n <div id={advancedId} hidden={!advancedOpen}>\n {advancedOpen ? (\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading the advanced panels…</p>}>\n <FleetAdvanced />\n </Suspense>\n ) : null}\n </div>\n </div>\n </Cell>\n {grantFlow.sheet}\n {actions.dialogs}\n </Surface>\n );\n}\n"],"file":"FleetSection-D2M7u9zG.js"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{D as r,H as i,L as a,M as o,N as s,O as c,P as l,S as u,V as d,W as f,a as ee,c as te,i as ne,n as re,p,r as ie,s as m,t as ae,u as h,y as oe,z as g}from"./ChartFrame-CtFLETWA.js";import{c as _,m as v}from"./colors-DvK0wMHH.js";import{i as y,r as b,t as se}from"./format-D7nBg2bn.js";var x=n(t(),1),S=e(),C=14,w=26,T=8,E=24,D=2;function ce({title:e,description:t,caveat:n,status:r,categories:p,segments:_,values:ce,normalize:O=!1,height:k=200,width:A,formatValue:j,formatTooltip:le,ariaLabel:ue}){let M=j??se,N=le??j??b,de=ee(),fe=(0,x.useRef)(null),P=ne(fe,A),F=ie(),[I,L]=(0,x.useState)(null),R=(0,x.useId)(),z=v((0,x.useId)()),B=_.map(e=>e.color),V=p.map((e,t)=>{let n=ce[t]??_.map(()=>null);return{label:e,values:n,stack:o(n)}}),H=V.some(e=>!e.stack.unknown),pe=Math.max(0,...V.map(e=>e.stack.total)),me=V.some(e=>e.stack.incomplete),he=r??(V.length===0||H&&pe===0&&!me?{kind:`empty`}:H?{kind:`ready`}:{kind:`unknown`}),ge=V.flatMap(e=>e.values.filter(e=>e!==null&&Number.isFinite(e))),U=O?{ticks:[0,.25,.5,.75,1],labels:[0,.25,.5,.75,1].map(e=>y(e))}:te(0,pe,{count:4,integer:m(ge),format:j}),W=U.ticks,_e=W[W.length-1],G=l(U.labels,28,60,F),K=Math.max(40,P-G-T),q=k-C-w,J=V.length?K/V.length:K,Y=Math.max(2,Math.min(E,J*.66)),X=u(0,_e,C+q,C),Z=e=>G+J*e+(J-Y)/2,ve=Math.max(0,...V.map(e=>e.label.length))*oe(F)+12,ye=s(V.length,Math.max(2,Math.floor(K/Math.max(64*F,ve)))),be=e=>t=>`${t.stack.incomplete&&!t.stack.unknown?`≥ `:``}${t.stack.unknown?`—`:e(t.stack.total)}`,xe=be(M),Se=be(N);function Ce(e){if(V.length===0)return;let t=I??V.length-1,n=e.key===`ArrowLeft`?t-1:e.key===`ArrowRight`?t+1:e.key===`Home`?0:e.key===`End`?V.length-1:null;n!==null&&(e.preventDefault(),L(Math.max(0,Math.min(V.length-1,n))))}let Q=V.reduce((e,t)=>!t.stack.unknown&&(!e||t.stack.total>e.stack.total)?t:e,null),we=ue??`${e}: ${V.length} columns of ${_.map(e=>e.label).join(`, `)}.`+(Q?` Highest: ${Q.label} with ${xe(Q)}.`:``),Te=[{key:`label`,label:`Category`,render:e=>e.label},..._.map((e,t)=>({key:e.id,label:e.label,numeric:!0,render:e=>e.values[t]===null||e.values[t]===void 0?`—`:M(e.values[t])})),{key:`__total`,label:`Total`,numeric:!0,render:xe}],$=I===null?void 0:V[I];return(0,S.jsx)(ae,{title:e,description:t,caveat:n,status:he,skeleton:`bars`,skeletonHeight:k,table:(0,S.jsx)(re,{caption:e,columns:Te,rows:V,rowKey:(e,t)=>`${t}:${e.label}`}),footer:(0,S.jsx)(a,{items:[..._.map((e,t)=>({label:e.label,color:B[t]})),...V.some(e=>e.stack.unknown)?[{label:`no data`,kind:`hatch`}]:[]]}),children:(0,S.jsxs)(`div`,{ref:fe,className:`${f.plotWrap} ${f.focusable}`,"data-motion":de,tabIndex:0,role:`group`,"aria-label":`${e}. Use the left and right arrow keys to read each column.`,"aria-describedby":R,onFocus:()=>L(e=>e??(V.length?V.length-1:null)),onBlur:()=>L(null),onKeyDown:Ce,children:[(0,S.jsxs)(`svg`,{className:f.svg,width:P,height:k,viewBox:`0 0 ${P} ${k}`,role:`img`,"aria-label":we,children:[(0,S.jsx)(`defs`,{children:(0,S.jsx)(d,{id:z})}),I===null?null:(0,S.jsx)(`rect`,{"data-role":`hover-band`,className:f.hoverBand,x:G+J*I+1,y:C,width:Math.max(0,J-2),height:q,rx:4}),W.map((e,t)=>(0,S.jsxs)(`g`,{children:[(0,S.jsx)(`line`,{className:f.grid,x1:G,x2:G+K,y1:h(X(e)),y2:h(X(e))}),(0,S.jsx)(`text`,{className:f.tick,x:G-6,y:X(e),dy:`0.32em`,textAnchor:`end`,children:U.labels[t]})]},e)),V.map((e,t)=>{let n=Z(t),r=O&&e.stack.total||1;if(e.stack.unknown)return(0,S.jsx)(`rect`,{"data-unknown":`true`,className:f.unknownMark,fill:`url(#${z})`,x:n+.5,y:C+q-12.5,width:Math.max(1,Y-1),height:12,rx:2},t);let i=e.stack.segments[e.stack.segments.length-1];return(0,S.jsxs)(`g`,{"data-column":t,className:f.rise,style:{"--chart-i":t},opacity:I!==null&&I!==t?.55:1,children:[e.stack.segments.map(e=>{let t=X(e.y1/r),a=X(e.y0/r),o=e===i,s=Math.max(0,a-t-(o?0:D)),l=o?t:t+D;return o?(0,S.jsx)(`path`,{d:c(n,l,Y,s),fill:B[e.index],"data-segment":_[e.index].id},e.index):(0,S.jsx)(`rect`,{x:n,y:l,width:Y,height:s,fill:B[e.index],"data-segment":_[e.index].id},e.index)}),e.stack.incomplete?(0,S.jsx)(`rect`,{"data-incomplete":`true`,className:f.noData,x:n,y:X(e.stack.total/r)-8,width:Y,height:6,rx:2}):null]},t)}),(0,S.jsx)(`line`,{className:f.axis,x1:G,x2:G+K,y1:h(C+q),y2:h(C+q)}),ye.map(e=>(0,S.jsx)(`text`,{className:f.tick,x:Z(e)+Y/2,y:k-8,textAnchor:`middle`,children:V[e].label},e)),V.map((e,t)=>(0,S.jsx)(`rect`,{className:f.hit,x:G+J*t,y:C,width:J,height:q,onPointerEnter:()=>L(t),onPointerLeave:()=>L(e=>e===t?null:e)},`hit${t}`))]}),(0,S.jsx)(`span`,{id:R,className:f.srOnly,"aria-live":`polite`,children:$?`${$.label}: ${_.map((e,t)=>`${e.label} ${$.values[t]===null?`no data`:N($.values[t])}`).join(`, `)}; total ${Se($)}`:``}),$&&I!==null?(0,S.jsx)(g,{left:i(Z(I)+Y/2,P),top:$.stack.unknown?C+q-12:X(O?1:$.stack.total),title:$.label,rows:[..._.map((e,t)=>({key:e.id,label:e.label,value:$.values[t]===null||$.values[t]===void 0?null:N($.values[t]),color:B[t]})),{key:`__t`,label:`Total`,value:$.stack.unknown?null:Se($),total:!0}]}):null]})})}var O=20,k=480;function A(e,t){return t===0?``:e.ofPrevious===null?`— of previous`:`${y(e.ofPrevious,+(e.ofPrevious<.1&&e.ofPrevious>0))} of previous`}function j({title:e,description:t,caveat:n,status:i,stages:a,width:o,color:s=_,formatValue:c=se,ariaLabel:l}){let u=(0,x.useRef)(null),d=ne(u,o),te=ee(),ie=p(a.map(e=>e.value)),m=a.map((e,t)=>({...ie[t],stage:e})),h=a[0]?.value??null,oe=i??(a.length===0||h===null?a.length===0?{kind:`empty`}:{kind:`unknown`,reason:`the first stage (${a[0].label}) is unknown`}:h===0?{kind:`empty`,message:`No ${a[0].label.toLowerCase()} in this window.`}:{kind:`ready`}),g=Math.max(0,...a.map(e=>e.value!==null&&Number.isFinite(e.value)?e.value:0)),v=d<k,b=v?0:Math.min(170,Math.round(d*.28)),C=v?150:180,w=Math.max(40,d-b-C),T=v?42:34,E=m.length*T+4,D=l??`${e}: `+m.map((e,t)=>`${e.stage.label} ${e.value===null?`unknown`:c(e.value)}${t>0?` (${A(e,t)})`:``}`).join(`, `)+`.`;return(0,S.jsx)(ae,{title:e,description:t,caveat:n,status:oe,skeleton:`funnel`,table:(0,S.jsx)(re,{caption:e,columns:[{key:`stage`,label:`Stage`,render:e=>e.stage.label},{key:`value`,label:`Count`,numeric:!0,render:e=>e.value===null?`—`:c(e.value)},{key:`prev`,label:`Of previous`,numeric:!0,render:e=>e.ofPrevious===null?`—`:y(e.ofPrevious,1)},{key:`first`,label:`Of first`,numeric:!0,render:e=>e.ofFirst===null?`—`:y(e.ofFirst,1)}],rows:m,rowKey:e=>e.stage.id}),children:(0,S.jsx)(`div`,{ref:u,className:f.plotWrap,"data-motion":te,children:(0,S.jsx)(`svg`,{className:f.svg,width:d,height:E,viewBox:`0 0 ${d} ${E}`,role:`img`,"aria-label":D,children:m.map((e,t)=>{let n=t*T+(v?18:7),i=e.value===null||!(e.value>0)||g<=0?0:Math.max(3,e.value/g*w),a=n+O/2;return(0,S.jsxs)(`g`,{"data-stage":e.stage.id,children:[(0,S.jsx)(`text`,{className:f.label,x:v?0:b-10,y:v?n-5:a,dy:v?void 0:`0.32em`,textAnchor:v?`start`:`end`,children:e.stage.label}),(0,S.jsx)(`rect`,{"data-role":`track`,className:f.trackEmpty,x:b,y:n,width:w,height:O,rx:4}),e.value===null?(0,S.jsx)(`rect`,{"data-unknown":`true`,className:f.noData,x:b,y:n,width:Math.min(w,48),height:O,rx:4}):i>0?(0,S.jsx)(`path`,{"data-role":`bar`,className:f.grow,style:{"--chart-i":t},d:r(b,n,i,O),fill:s}):null,(0,S.jsxs)(`text`,{className:f.labelStrong,x:b+w+10,y:a,dy:`0.32em`,children:[e.value===null?`unknown`:c(e.value),t>0?(0,S.jsx)(`tspan`,{className:f.tick,dx:8,children:A(e,t)}):null]})]},e.stage.id)})})})})}export{ce as n,j as t};
2
- //# sourceMappingURL=Funnel-rnPUaoN7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Funnel-rnPUaoN7.js","names":[],"sources":["../../../../../../src/web-ui/components/charts/BarStack.tsx","../../../../../../src/web-ui/components/charts/Funnel.tsx"],"sourcesContent":["/**\n * components/charts/BarStack.tsx — stacked columns over ordered categories\n * (usually days): e.g. runs per day split into done / failed / aborted.\n *\n * Marks follow the kit spec: columns ≤ 24 px, a 4 px rounded data end on the\n * top segment only, square on the baseline, a 2 px surface gap between\n * segments. `normalize` shows each column as 100% (composition, not volume).\n *\n * Honesty: a null segment is UNKNOWN. A column with every segment null draws\n * a dashed \"no data\" placeholder; a column with some nulls stacks what is\n * known and marks the total as a lower bound (hollow cap + \"≥\" in the\n * tooltip and table). Nothing unknown ever renders as a zero-height bar.\n *\n * V3.10: every segment names its colour. The old fallback — categorical slot\n * by INDEX — meant an engine chart silently painted Claude in whatever ink\n * slot 0 held; engine charts must pass engineColor(), status charts\n * toneColor(), identity charts seriesColor(slot) with a slot fixed per entity\n * (SPEC-310C §6). An all-unknown column is drawn with the unknown hatch.\n *\n * Polish (verse-visual-quality): columns rise from the baseline once on\n * mount, staggered left to right (static under reduced motion — motion.ts);\n * the hovered / focused column gets a soft slot band behind it while the\n * others dim; gridlines snap to the pixel grid; the tooltip prints exact\n * values (formatExact unless the caller formats them) with the total set\n * apart; loading holds a column-shaped skeleton.\n */\nimport { useId, useRef, useState, type CSSProperties, type KeyboardEvent } from 'react';\nimport { hatchPatternId } from './colors.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { ChartLegend, ChartTooltip, HatchPattern, clampTooltipLeft } from './ChartParts.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { allIntegers, axisTicks, crisp, labelCharPx, linearScale, roundedTopBar, stackColumn, thinIndexes, tickGutter, type StackedColumn } from './chart-math.js';\nimport { formatCompact, formatExact, formatPercent } from './format.js';\nimport { useChartMotion } from './motion.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useTextScale } from './useTextScale.js';\nimport plot from './plot.module.css';\n\nexport interface BarStackSegment {\n id: string;\n label: string;\n /**\n * Required (V3.10): seriesColor(fixedSlot) for identity, toneColor(...) for\n * status, engineColor(...) for engines. Never picked by index.\n */\n color: string;\n}\n\nexport interface BarStackProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n /** Category labels in display order (e.g. formatted days). */\n categories: string[];\n segments: BarStackSegment[];\n /** values[categoryIndex][segmentIndex]; null = unknown. */\n values: ReadonlyArray<ReadonlyArray<number | null>>;\n normalize?: boolean;\n height?: number;\n width?: number;\n formatValue?: (v: number) => string;\n /** Tooltip value format. Default: `formatValue` when given, else formatExact (\"12,934\", not \"13K\"). */\n formatTooltip?: (v: number) => string;\n ariaLabel?: string;\n}\n\nconst PAD_T = 14;\nconst PAD_B = 26;\nconst PAD_R = 8;\nconst BAR_MAX = 24;\nconst GAP = 2;\n\ninterface Row {\n label: string;\n values: ReadonlyArray<number | null>;\n stack: StackedColumn;\n}\n\nexport function BarStack({\n title,\n description,\n caveat,\n status,\n categories,\n segments,\n values,\n normalize = false,\n height = 200,\n width: fixedWidth,\n formatValue: formatValueProp,\n formatTooltip: formatTooltipProp,\n ariaLabel,\n}: BarStackProps) {\n const formatValue = formatValueProp ?? formatCompact;\n const formatTip = formatTooltipProp ?? formatValueProp ?? formatExact;\n const motion = useChartMotion();\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const textScale = useTextScale();\n const [active, setActive] = useState<number | null>(null);\n const liveId = useId();\n const hatchId = hatchPatternId(useId());\n const colors = segments.map((s) => s.color);\n\n const rows: Row[] = categories.map((label, i) => {\n const vals = values[i] ?? segments.map(() => null);\n return { label, values: vals, stack: stackColumn(vals) };\n });\n const anyKnown = rows.some((r) => !r.stack.unknown);\n const maxTotal = Math.max(0, ...rows.map((r) => r.stack.total));\n const anyIncomplete = rows.some((r) => r.stack.incomplete);\n // A window of known zeros is a designed empty state, not empty axes.\n const resolvedStatus: ChartStatus = status ?? (\n rows.length === 0 || (anyKnown && maxTotal === 0 && !anyIncomplete)\n ? { kind: 'empty' }\n : anyKnown ? { kind: 'ready' } : { kind: 'unknown' }\n );\n\n // Counts (every known value whole) get whole-number ticks: a column of 1\n // run is scaled 0 / 1, never 0 / 0.3 / 0.5 / 0.8 / 1.\n const knownValues = rows.flatMap((r) => r.values.filter((v): v is number => v !== null && Number.isFinite(v)));\n const yAxis = normalize\n ? { ticks: [0, 0.25, 0.5, 0.75, 1], labels: [0, 0.25, 0.5, 0.75, 1].map((v) => formatPercent(v)) }\n : axisTicks(0, maxTotal, { count: 4, integer: allIntegers(knownValues), format: formatValueProp });\n const ticks = yAxis.ticks;\n const top = ticks[ticks.length - 1]!;\n const padL = tickGutter(yAxis.labels, 28, 60, textScale);\n const plotW = Math.max(40, width - padL - PAD_R);\n const plotH = height - PAD_T - PAD_B;\n const slot = rows.length ? plotW / rows.length : plotW;\n const barW = Math.max(2, Math.min(BAR_MAX, slot * 0.66));\n const ys = linearScale(0, top, PAD_T + plotH, PAD_T);\n const xOf = (i: number) => padL + slot * i + (slot - barW) / 2;\n // A category label gets 64 px at 12 px text (more at a larger Display\n // size), or its own estimated width plus air when the labels are longer\n // (\"wk to Sep 18\"): thinned to what fits, never printed over each other.\n const widestLabel = Math.max(0, ...rows.map((r) => r.label.length)) * labelCharPx(textScale) + 12;\n const labelIdx = thinIndexes(rows.length, Math.max(2, Math.floor(plotW / Math.max(64 * textScale, widestLabel))));\n\n const fmtTotalWith = (fmt: (v: number) => string) => (r: Row) =>\n `${r.stack.incomplete && !r.stack.unknown ? '≥ ' : ''}${r.stack.unknown ? '—' : fmt(r.stack.total)}`;\n const fmtTotal = fmtTotalWith(formatValue);\n const fmtTotalExact = fmtTotalWith(formatTip);\n\n function onKey(e: KeyboardEvent<HTMLDivElement>): void {\n if (rows.length === 0) return;\n const cur = active ?? rows.length - 1;\n const next = e.key === 'ArrowLeft' ? cur - 1 : e.key === 'ArrowRight' ? cur + 1 : e.key === 'Home' ? 0 : e.key === 'End' ? rows.length - 1 : null;\n if (next === null) return;\n e.preventDefault();\n setActive(Math.max(0, Math.min(rows.length - 1, next)));\n }\n\n const busiest = rows.reduce<Row | null>((best, r) => (!r.stack.unknown && (!best || r.stack.total > best.stack.total) ? r : best), null);\n const summary = ariaLabel ?? `${title}: ${rows.length} columns of ${segments.map((s) => s.label).join(', ')}.` +\n (busiest ? ` Highest: ${busiest.label} with ${fmtTotal(busiest)}.` : '');\n\n const columns: TableColumn<Row>[] = [\n { key: 'label', label: 'Category', render: (r) => r.label },\n ...segments.map((s, i) => ({\n key: s.id,\n label: s.label,\n numeric: true,\n render: (r: Row) => (r.values[i] === null || r.values[i] === undefined ? '—' : formatValue(r.values[i]!)),\n })),\n { key: '__total', label: 'Total', numeric: true, render: fmtTotal },\n ];\n\n const activeRow = active !== null ? rows[active] : undefined;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n skeleton=\"bars\"\n skeletonHeight={height}\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(r, i) => `${i}:${r.label}`} />}\n footer={\n <ChartLegend\n items={[\n ...segments.map((s, i) => ({ label: s.label, color: colors[i] })),\n ...(rows.some((r) => r.stack.unknown) ? [{ label: 'no data', kind: 'hatch' as const }] : []),\n ]}\n />\n }\n >\n <div\n ref={wrapRef}\n className={`${plot.plotWrap} ${plot.focusable}`}\n data-motion={motion}\n tabIndex={0}\n role=\"group\"\n aria-label={`${title}. Use the left and right arrow keys to read each column.`}\n aria-describedby={liveId}\n onFocus={() => setActive((a) => a ?? (rows.length ? rows.length - 1 : null))}\n onBlur={() => setActive(null)}\n onKeyDown={onKey}\n >\n <svg className={plot.svg} width={width} height={height} viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label={summary}>\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {active !== null ? (\n <rect data-role=\"hover-band\" className={plot.hoverBand} x={padL + slot * active + 1} y={PAD_T} width={Math.max(0, slot - 2)} height={plotH} rx={4} />\n ) : null}\n {ticks.map((t, i) => (\n <g key={t}>\n <line className={plot.grid} x1={padL} x2={padL + plotW} y1={crisp(ys(t))} y2={crisp(ys(t))} />\n <text className={plot.tick} x={padL - 6} y={ys(t)} dy=\"0.32em\" textAnchor=\"end\">{yAxis.labels[i]}</text>\n </g>\n ))}\n {rows.map((r, i) => {\n const x = xOf(i);\n const scaleTotal = normalize ? r.stack.total || 1 : 1;\n if (r.stack.unknown) {\n return (\n <rect\n key={i}\n data-unknown=\"true\"\n className={plot.unknownMark}\n fill={`url(#${hatchId})`}\n x={x + 0.5}\n y={PAD_T + plotH - 12.5}\n width={Math.max(1, barW - 1)}\n height={12}\n rx={2}\n />\n );\n }\n const last = r.stack.segments[r.stack.segments.length - 1];\n return (\n <g\n key={i}\n data-column={i}\n className={plot.rise}\n style={{ '--chart-i': i } as CSSProperties}\n opacity={active !== null && active !== i ? 0.55 : 1}\n >\n {r.stack.segments.map((seg) => {\n const y1 = ys(seg.y1 / scaleTotal);\n const y0 = ys(seg.y0 / scaleTotal);\n const isTop = seg === last;\n // 2 px surface gap above every segment but the top one.\n const h = Math.max(0, y0 - y1 - (isTop ? 0 : GAP));\n const y = isTop ? y1 : y1 + GAP;\n return isTop ? (\n <path key={seg.index} d={roundedTopBar(x, y, barW, h)} fill={colors[seg.index]} data-segment={segments[seg.index]!.id} />\n ) : (\n <rect key={seg.index} x={x} y={y} width={barW} height={h} fill={colors[seg.index]} data-segment={segments[seg.index]!.id} />\n );\n })}\n {r.stack.incomplete ? (\n <rect data-incomplete=\"true\" className={plot.noData} x={x} y={ys(r.stack.total / scaleTotal) - 8} width={barW} height={6} rx={2} />\n ) : null}\n </g>\n );\n })}\n <line className={plot.axis} x1={padL} x2={padL + plotW} y1={crisp(PAD_T + plotH)} y2={crisp(PAD_T + plotH)} />\n {labelIdx.map((i) => (\n <text key={i} className={plot.tick} x={xOf(i) + barW / 2} y={height - 8} textAnchor=\"middle\">{rows[i]!.label}</text>\n ))}\n {rows.map((_, i) => (\n <rect\n key={`hit${i}`}\n className={plot.hit}\n x={padL + slot * i}\n y={PAD_T}\n width={slot}\n height={plotH}\n onPointerEnter={() => setActive(i)}\n onPointerLeave={() => setActive((a) => (a === i ? null : a))}\n />\n ))}\n </svg>\n <span id={liveId} className={plot.srOnly} aria-live=\"polite\">\n {activeRow\n ? `${activeRow.label}: ${segments.map((s, i) => `${s.label} ${activeRow.values[i] === null ? 'no data' : formatTip(activeRow.values[i]!)}`).join(', ')}; total ${fmtTotalExact(activeRow)}`\n : ''}\n </span>\n {activeRow && active !== null ? (\n <ChartTooltip\n left={clampTooltipLeft(xOf(active) + barW / 2, width)}\n top={activeRow.stack.unknown ? PAD_T + plotH - 12 : ys(normalize ? 1 : activeRow.stack.total)}\n title={activeRow.label}\n rows={[\n ...segments.map((s, i) => ({\n key: s.id,\n label: s.label,\n value: activeRow.values[i] === null || activeRow.values[i] === undefined ? null : formatTip(activeRow.values[i]!),\n color: colors[i],\n })),\n { key: '__t', label: 'Total', value: activeRow.stack.unknown ? null : fmtTotalExact(activeRow), total: true },\n ]}\n />\n ) : null}\n </div>\n </ChartFrame>\n );\n}\n","/**\n * components/charts/Funnel.tsx — an ordered pipeline (filed → verified →\n * passed → judged ship → merged). One series, so ONE hue for every bar (no\n * value ramp on stages); each bar's length is its share of the first stage,\n * and the step-to-step conversion is written out in words beside it. A zero\n * stage is an empty neutral track (never a full pale bar that reads 100%).\n *\n * Honesty: an unknown stage (null) draws a dashed placeholder and \"unknown\",\n * and the conversions on either side of it are \"—\", never a guessed rate.\n * Works at 375 px: below 480 px the stage label moves above its bar.\n *\n * Polish (verse-visual-quality): each stage's bar grows from its start edge\n * once on mount, top stage first (static under reduced motion — motion.ts).\n */\nimport { useRef, type CSSProperties } from 'react';\nimport { CHART_SEQUENTIAL } from './colors.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { funnelSteps, roundedRightBar, type FunnelStep } from './chart-math.js';\nimport { formatCompact, formatPercent } from './format.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useChartMotion } from './motion.js';\nimport plot from './plot.module.css';\n\nexport interface FunnelStage {\n id: string;\n label: string;\n value: number | null;\n}\n\nexport interface FunnelProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n stages: FunnelStage[];\n width?: number;\n color?: string;\n formatValue?: (v: number) => string;\n ariaLabel?: string;\n}\n\nconst BAR_H = 20;\nconst NARROW = 480;\n\ninterface Row extends FunnelStep {\n stage: FunnelStage;\n}\n\nfunction conversionText(step: FunnelStep, index: number): string {\n if (index === 0) return '';\n return step.ofPrevious === null ? '— of previous' : `${formatPercent(step.ofPrevious, step.ofPrevious < 0.1 && step.ofPrevious > 0 ? 1 : 0)} of previous`;\n}\n\nexport function Funnel({\n title,\n description,\n caveat,\n status,\n stages,\n width: fixedWidth,\n color = CHART_SEQUENTIAL,\n formatValue = formatCompact,\n ariaLabel,\n}: FunnelProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const motion = useChartMotion();\n const steps = funnelSteps(stages.map((s) => s.value));\n const rows: Row[] = stages.map((stage, i) => ({ ...steps[i]!, stage }));\n const first = stages[0]?.value ?? null;\n const resolvedStatus: ChartStatus = status ?? (\n stages.length === 0 || first === null\n ? (stages.length === 0 ? { kind: 'empty' } : { kind: 'unknown', reason: `the first stage (${stages[0]!.label}) is unknown` })\n : first === 0 ? { kind: 'empty', message: `No ${stages[0]!.label.toLowerCase()} in this window.` } : { kind: 'ready' }\n );\n\n // Bar length is a share of the widest stage — the first, in any real\n // funnel; the max only guards a later stage that out-counts it (it would\n // overflow the track). When that is 0 every bar is 0: an all-zero window\n // is a row of EMPTY tracks, never full bars that read as 100%.\n const scaleMax = Math.max(0, ...stages.map((s) => (s.value !== null && Number.isFinite(s.value) ? s.value : 0)));\n\n const narrow = width < NARROW;\n const labelW = narrow ? 0 : Math.min(170, Math.round(width * 0.28));\n const valueW = narrow ? 150 : 180;\n const plotW = Math.max(40, width - labelW - valueW);\n const rowH = narrow ? BAR_H + 22 : BAR_H + 14;\n const height = rows.length * rowH + 4;\n\n const summary = ariaLabel ?? `${title}: ` + rows\n .map((r, i) => `${r.stage.label} ${r.value === null ? 'unknown' : formatValue(r.value)}${i > 0 ? ` (${conversionText(r, i)})` : ''}`)\n .join(', ') + '.';\n\n const columns: TableColumn<Row>[] = [\n { key: 'stage', label: 'Stage', render: (r) => r.stage.label },\n { key: 'value', label: 'Count', numeric: true, render: (r) => (r.value === null ? '—' : formatValue(r.value)) },\n { key: 'prev', label: 'Of previous', numeric: true, render: (r) => (r.ofPrevious === null ? '—' : formatPercent(r.ofPrevious, 1)) },\n { key: 'first', label: 'Of first', numeric: true, render: (r) => (r.ofFirst === null ? '—' : formatPercent(r.ofFirst, 1)) },\n ];\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n skeleton=\"funnel\"\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(r) => r.stage.id} />}\n >\n <div ref={wrapRef} className={plot.plotWrap} data-motion={motion}>\n <svg className={plot.svg} width={width} height={height} viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label={summary}>\n {rows.map((r, i) => {\n const y = i * rowH + (narrow ? 18 : 7);\n const barW = r.value === null || !(r.value > 0) || scaleMax <= 0 ? 0 : Math.max(3, (r.value / scaleMax) * plotW);\n const textY = y + BAR_H / 2;\n return (\n <g key={r.stage.id} data-stage={r.stage.id}>\n <text className={plot.label} x={narrow ? 0 : labelW - 10} y={narrow ? y - 5 : textY} dy={narrow ? undefined : '0.32em'} textAnchor={narrow ? 'start' : 'end'}>\n {r.stage.label}\n </text>\n {/* The track is the neutral empty-meter gray (plot.module.css\n .trackEmpty), not the pale azure chart track: at 0 it must\n read as empty, and it must be SEEN — it is what every\n bar's length is a share of. */}\n <rect data-role=\"track\" className={plot.trackEmpty} x={labelW} y={y} width={plotW} height={BAR_H} rx={4} />\n {r.value === null ? (\n <rect data-unknown=\"true\" className={plot.noData} x={labelW} y={y} width={Math.min(plotW, 48)} height={BAR_H} rx={4} />\n ) : barW > 0 ? (\n <path data-role=\"bar\" className={plot.grow} style={{ '--chart-i': i } as CSSProperties} d={roundedRightBar(labelW, y, barW, BAR_H)} fill={color} />\n ) : null}\n <text className={plot.labelStrong} x={labelW + plotW + 10} y={textY} dy=\"0.32em\">\n {r.value === null ? 'unknown' : formatValue(r.value)}\n {i > 0 ? <tspan className={plot.tick} dx={8}>{conversionText(r, i)}</tspan> : null}\n </text>\n </g>\n );\n })}\n </svg>\n </div>\n </ChartFrame>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e,o as t,s as n,u as r}from"./index-BbDqdepe.js";import{f as i}from"./global-BWc2NPzv.js";import{Bt as a,I as o,R as s,Rt as c,k as l,u}from"./VerseConsoleApp-kFOEmnGC.js";import{f as d}from"./icons-U34oiN9M.js";import{d as f,m as p,o as m,p as h,r as g,t as _}from"./verse-icons-BQxBZk9k.js";import{a as v}from"./command-catalog-BzHSIzIS.js";var y=r(n(),1),b=r(t(),1),x={menu:`_menu_bwc3k_3`,pop:`_pop_bwc3k_1`,item:`_item_bwc3k_16`,icon:`_icon_bwc3k_33`,check:`_check_bwc3k_40`,label:`_label_bwc3k_49`,key:`_key_bwc3k_51`,separator:`_separator_bwc3k_57`,groupLabel:`_groupLabel_bwc3k_62`},S=e();function C(e){let t=v(e)?.keys[0];return t?a(t,c()):null}var w=[{value:`system`,label:`Match system`},{value:`light`,label:`Light`},{value:`dark`,label:`Dark`}];function T({open:e,anchorRef:t,onClose:n,compact:r}){let a=u(),c=i(),v=(0,y.useRef)(null),[T,E]=(0,y.useState)(0),[D,O]=(0,y.useState)(null),k=[{key:`settings`,role:`menuitem`,label:`Settings`,icon:(0,S.jsx)(f,{}),shortcut:C(`section.settings`),run:()=>o(`settings`)},{key:`apps`,role:`menuitem`,label:`Apps & Accounts`,icon:(0,S.jsx)(_,{}),run:()=>o(`apps`)},{key:`usage`,role:`menuitem`,label:`Usage`,icon:(0,S.jsx)(h,{}),run:()=>o(`usage`)},{key:`wiki`,role:`menuitem`,label:`Repo wiki`,icon:(0,S.jsx)(p,{}),run:()=>o(`wiki`)},{key:`playbooks`,role:`menuitem`,label:`Playbooks`,icon:(0,S.jsx)(m,{}),run:()=>o(`playbooks`)},{key:`automations`,role:`menuitem`,label:`Automations`,icon:(0,S.jsx)(g,{}),run:()=>o(`automations`)},{key:`shortcuts`,role:`menuitem`,label:`Keyboard shortcuts`,icon:(0,S.jsx)(d,{}),shortcut:C(`shortcuts.open`),run:()=>l(`shortcuts`)},...r?[]:[{key:`rail`,role:`menuitemcheckbox`,label:`Show rail labels`,shortcut:C(`rail.toggle-labels`),checked:a.railExpanded,run:s,stay:!0}],...w.map(e=>({key:`theme-${e.value}`,role:`menuitemradio`,label:e.label,checked:c.theme===e.value,run:()=>c.set(e.value),stay:!0}))];(0,y.useLayoutEffect)(()=>{if(!e)return;let n=t.current?.getBoundingClientRect();n&&O(r?{left:8,bottom:Math.max(8,window.innerHeight-n.top+8)}:{left:n.right+8,bottom:Math.max(8,window.innerHeight-n.bottom)})},[e,t,r]);let[A,j]=(0,y.useState)(e);e!==A&&(j(e),e&&E(0));let M=(0,y.useRef)(n);M.current=n,(0,y.useEffect)(()=>{if(!e)return;function n(e){let n=e.target;v.current?.contains(n)||t.current?.contains(n)||M.current()}return document.addEventListener(`mousedown`,n),()=>document.removeEventListener(`mousedown`,n)},[e,t]);let N=D!==null;(0,y.useEffect)(()=>{e&&N&&v.current?.querySelector(`[data-index="${T}"]`)?.focus()},[T,e,N]);let P=(0,y.useRef)(!1);if((0,y.useEffect)(()=>{!e&&P.current&&(P.current=!1,t.current?.focus())},[e,t]),!e)return null;function F(e=!0){P.current=e,n()}function I(e){e.run(),e.stay||F(!1)}function L(e){let t=k.length;switch(e.key){case`ArrowDown`:e.preventDefault(),E(e=>(e+1)%t);break;case`ArrowUp`:e.preventDefault(),E(e=>(e-1+t)%t);break;case`Home`:e.preventDefault(),E(0);break;case`End`:e.preventDefault(),E(t-1);break;case`Escape`:e.preventDefault(),e.stopPropagation(),F();break;case`Tab`:F(!1)}}let R=k.findIndex(e=>e.key.startsWith(`theme-`));return(0,b.createPortal)((0,S.jsx)(`div`,{ref:v,role:`menu`,"aria-label":`Settings and more`,className:x.menu,"data-compact":r||void 0,style:D?{left:D.left,bottom:D.bottom}:{visibility:`hidden`},onKeyDown:L,children:k.map((e,t)=>(0,S.jsxs)(`div`,{role:`none`,children:[t===R?(0,S.jsx)(`div`,{role:`separator`,className:x.separator,children:(0,S.jsx)(`span`,{className:x.groupLabel,children:`Theme`})}):null,e.key===`rail`?(0,S.jsx)(`div`,{role:`separator`,className:x.separator}):null,(0,S.jsxs)(`button`,{type:`button`,role:e.role,"data-index":t,tabIndex:t===T?0:-1,"aria-checked":e.role===`menuitem`?void 0:e.checked===!0,className:x.item,onClick:()=>I(e),onMouseMove:()=>t!==T&&E(t),children:[(0,S.jsx)(`span`,{className:x.icon,"aria-hidden":`true`,children:e.role===`menuitem`?e.icon:e.checked?(0,S.jsx)(`span`,{className:x.check}):null}),(0,S.jsx)(`span`,{className:x.label,children:e.label}),e.shortcut?(0,S.jsx)(`kbd`,{className:x.key,children:e.shortcut}):null]})]},e.key))}),document.body)}export{T as GearTray};
2
- //# sourceMappingURL=GearTray-Cc14h572.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GearTray-Cc14h572.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/GearTray.module.css","../../../../../../src/web-ui/routes/verse/shell/GearTray.tsx"],"sourcesContent":["/* The ⚙ menu: a raised list beside the rail foot (above the bottom bar on a phone). */\n\n.menu {\n position: fixed;\n z-index: var(--z-dropdown);\n min-width: 232px;\n padding: var(--space-1);\n background: var(--bg-surface-raised);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-menu);\n animation: pop var(--duration-fast) var(--ease-decelerate);\n}\n.menu[data-compact] { right: var(--space-2); }\n\n.item {\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--space-2);\n width: 100%;\n min-height: var(--control-h);\n padding: 0 var(--space-2);\n border-radius: var(--radius-sm);\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n text-align: left;\n}\n.item:hover,\n.item:focus-visible { background: var(--bg-hover); outline: none; box-shadow: none; }\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--text-secondary);\n}\n\n.check {\n width: 6px;\n height: 10px;\n margin-top: -2px;\n border: solid var(--accent-500);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n}\n\n.label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n.key {\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n color: var(--text-tertiary);\n}\n\n.separator {\n margin: var(--space-1) var(--space-2);\n border-top: 1px solid var(--border-subtle);\n}\n\n.groupLabel {\n display: block;\n padding-top: var(--space-2);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n@keyframes pop { from { opacity: 0; transform: translateY(2px); } }\n\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion='full']) .menu { animation: none; }\n}\n:root[data-motion='reduce'] .menu { animation: none; }\n","/**\n * routes/verse/shell/GearTray.tsx — the rail foot's ⚙ menu (unit C1;\n * SPEC-310C §0.1): Settings (⌘,), Apps & Accounts, Usage and Keyboard\n * shortcuts (⌘/), plus the two shell preferences that used to sit on the rail\n * itself (rail labels, theme).\n *\n * A real menu: role=\"menu\" with menuitem / menuitemcheckbox / menuitemradio,\n * one roving tab stop, ↑ ↓ Home End to move, Enter / Space to choose, Esc\n * closes and puts focus back on the gear (a press outside just closes).\n * Portalled to <body> so the 56px rail cannot clip it.\n */\nimport { useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type ReactNode, type RefObject } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../../../data/hooks.js';\nimport type { ThemePreference } from '../../../data/theme-store.js';\nimport { useVerseUi } from '../useVerseUi.js';\nimport { AppsIcon, AutomationsIcon, PlaybooksIcon, SettingsIcon, UsageIcon, WikiIcon } from '../verse-icons.js';\nimport { IconKeyboard } from '../../../components/primitives/icons.js';\nimport { openVerseOverlay, setVerseSection, toggleVerseRail } from '../verse-ui-store.js';\nimport { detectKeyPlatform, findCommand, formatChord } from './command-catalog.js';\nimport styles from './GearTray.module.css';\n\nexport interface GearTrayProps {\n open: boolean;\n anchorRef: RefObject<HTMLElement | null>;\n onClose: () => void;\n /** Phone layout: the rail is a bottom bar, so the menu rises from it. */\n compact: boolean;\n}\n\ninterface Entry {\n key: string;\n role: 'menuitem' | 'menuitemcheckbox' | 'menuitemradio';\n label: string;\n icon?: ReactNode;\n shortcut?: string | null;\n checked?: boolean;\n run: () => void;\n /** Keep the menu open after choosing (theme / rail toggles). */\n stay?: boolean;\n}\n\nfunction shortcutOf(id: string): string | null {\n const chord = findCommand(id)?.keys[0];\n return chord ? formatChord(chord, detectKeyPlatform()) : null;\n}\n\nconst THEMES: ReadonlyArray<{ value: ThemePreference; label: string }> = [\n { value: 'system', label: 'Match system' },\n { value: 'light', label: 'Light' },\n { value: 'dark', label: 'Dark' },\n];\n\nexport function GearTray({ open, anchorRef, onClose, compact }: GearTrayProps) {\n const ui = useVerseUi();\n const theme = useTheme();\n const menuRef = useRef<HTMLDivElement>(null);\n const [active, setActive] = useState(0);\n const [position, setPosition] = useState<{ left: number; bottom: number } | null>(null);\n\n const entries: Entry[] = [\n { key: 'settings', role: 'menuitem', label: 'Settings', icon: <SettingsIcon />, shortcut: shortcutOf('section.settings'), run: () => setVerseSection('settings') },\n { key: 'apps', role: 'menuitem', label: 'Apps & Accounts', icon: <AppsIcon />, run: () => setVerseSection('apps') },\n { key: 'usage', role: 'menuitem', label: 'Usage', icon: <UsageIcon />, run: () => setVerseSection('usage') },\n { key: 'wiki', role: 'menuitem', label: 'Repo wiki', icon: <WikiIcon />, run: () => setVerseSection('wiki') },\n { key: 'playbooks', role: 'menuitem', label: 'Playbooks', icon: <PlaybooksIcon />, run: () => setVerseSection('playbooks') },\n { key: 'automations', role: 'menuitem', label: 'Automations', icon: <AutomationsIcon />, run: () => setVerseSection('automations') },\n { key: 'shortcuts', role: 'menuitem', label: 'Keyboard shortcuts', icon: <IconKeyboard />, shortcut: shortcutOf('shortcuts.open'), run: () => openVerseOverlay('shortcuts') },\n ...(compact\n ? []\n : [{ key: 'rail', role: 'menuitemcheckbox' as const, label: 'Show rail labels', shortcut: shortcutOf('rail.toggle-labels'), checked: ui.railExpanded, run: toggleVerseRail, stay: true }]),\n ...THEMES.map((t) => ({\n key: `theme-${t.value}`,\n role: 'menuitemradio' as const,\n label: t.label,\n checked: theme.theme === t.value,\n run: () => theme.set(t.value),\n stay: true,\n })),\n ];\n\n useLayoutEffect(() => {\n if (!open) return;\n const rect = anchorRef.current?.getBoundingClientRect();\n if (!rect) return;\n setPosition(\n compact\n ? { left: 8, bottom: Math.max(8, window.innerHeight - rect.top + 8) }\n : { left: rect.right + 8, bottom: Math.max(8, window.innerHeight - rect.bottom) },\n );\n }, [open, anchorRef, compact]);\n\n // Every open starts on the first item. Reset while rendering (React's\n // \"adjust state when a prop changes\"), not in an effect: an effect runs\n // after the focus effect below has already focused wherever the LAST open\n // left off, so focus would hop there and then back to the first item.\n const [wasOpen, setWasOpen] = useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) setActive(0);\n }\n\n // The latest onClose, without re-subscribing the outside-press listener:\n // the shell passes an inline closure and re-renders on every activity poll.\n const closeRef = useRef(onClose);\n closeRef.current = onClose;\n\n useEffect(() => {\n if (!open) return;\n function onDown(event: MouseEvent) {\n const target = event.target as Node;\n if (menuRef.current?.contains(target) || anchorRef.current?.contains(target)) return;\n closeRef.current();\n }\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [open, anchorRef]);\n\n // Focus follows the roving tab stop — once the menu is placed. Until the\n // layout effect above has measured the gear, the menu renders\n // visibility:hidden and a browser will not focus it; the placed re-render\n // follows in the same task, before paint, and this effect runs again then.\n // (This used to be a requestAnimationFrame that focused item 0 whatever\n // `active` was: an arrow key pressed before that frame moved the tab stop,\n // then the frame pulled focus back to the first item, so focus and the tab\n // stop sat on different items and Enter chose the wrong one.)\n const placed = position !== null;\n useEffect(() => {\n if (!open || !placed) return;\n menuRef.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`)?.focus();\n }, [active, open, placed]);\n\n // Escape hands focus back to the gear AFTER the close has rendered, not in\n // the key handler. The shell turns the gear's tooltip off while the tray is\n // open and back on when it closes, and that re-creates the gear <button>:\n // focusing `anchorRef.current` synchronously focused the button that was\n // about to leave the document, and focus fell to <body>. This effect runs\n // after the shell's commit, when the ref already points at the live button.\n const refocusOnClose = useRef(false);\n useEffect(() => {\n if (open || !refocusOnClose.current) return;\n refocusOnClose.current = false;\n anchorRef.current?.focus();\n }, [open, anchorRef]);\n\n if (!open) return null;\n\n function close(restoreFocus = true) {\n refocusOnClose.current = restoreFocus;\n onClose();\n }\n\n function choose(entry: Entry) {\n entry.run();\n if (!entry.stay) close(false);\n }\n\n function onKeyDown(event: ReactKeyboardEvent<HTMLDivElement>) {\n const count = entries.length;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n setActive((i) => (i + 1) % count);\n break;\n case 'ArrowUp':\n event.preventDefault();\n setActive((i) => (i - 1 + count) % count);\n break;\n case 'Home':\n event.preventDefault();\n setActive(0);\n break;\n case 'End':\n event.preventDefault();\n setActive(count - 1);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n close();\n break;\n case 'Tab':\n // A menu is one tab stop: Tab leaves it (and closes it).\n close(false);\n break;\n default:\n break;\n }\n }\n\n const themeStart = entries.findIndex((e) => e.key.startsWith('theme-'));\n\n return createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n aria-label=\"Settings and more\"\n className={styles.menu}\n data-compact={compact || undefined}\n style={position ? { left: position.left, bottom: position.bottom } : { visibility: 'hidden' }}\n onKeyDown={onKeyDown}\n >\n {entries.map((entry, index) => (\n <div key={entry.key} role=\"none\">\n {index === themeStart ? (\n <div role=\"separator\" className={styles.separator}>\n <span className={styles.groupLabel}>Theme</span>\n </div>\n ) : null}\n {entry.key === 'rail' ? <div role=\"separator\" className={styles.separator} /> : null}\n <button\n type=\"button\"\n role={entry.role}\n data-index={index}\n tabIndex={index === active ? 0 : -1}\n aria-checked={entry.role === 'menuitem' ? undefined : entry.checked === true}\n className={styles.item}\n onClick={() => choose(entry)}\n onMouseMove={() => index !== active && setActive(index)}\n >\n <span className={styles.icon} aria-hidden=\"true\">\n {entry.role === 'menuitem' ? entry.icon : entry.checked ? <span className={styles.check} /> : null}\n </span>\n <span className={styles.label}>{entry.label}</span>\n {entry.shortcut ? <kbd className={styles.key}>{entry.shortcut}</kbd> : null}\n </button>\n </div>\n ))}\n </div>,\n document.body,\n );\n}\n"],"mappings":"imBC0CA,SAAS,EAAW,EAA2B,CAC7C,IAAM,EAAQ,EAAY,CAAE,CAAC,EAAE,KAAK,GACpC,OAAO,EAAQ,EAAY,EAAO,EAAkB,CAAC,EAAI,IAC3D,CAEA,IAAM,EAAmE,CACvE,CAAE,MAAO,SAAU,MAAO,cAAe,EACzC,CAAE,MAAO,QAAS,MAAO,OAAQ,EACjC,CAAE,MAAO,OAAQ,MAAO,MAAO,CACjC,EAEA,SAAgB,EAAS,CAAE,OAAM,YAAW,UAAS,WAA0B,CAC7E,IAAM,EAAK,EAAW,EAChB,EAAQ,EAAS,EACjB,GAAA,EAAU,EAAA,OAAA,CAAuB,IAAI,EACrC,CAAC,EAAQ,IAAA,EAAa,EAAA,SAAA,CAAS,CAAC,EAChC,CAAC,EAAU,IAAA,EAAe,EAAA,SAAA,CAAkD,IAAI,EAEhF,EAAmB,CACvB,CAAE,IAAK,WAAY,KAAM,WAAY,MAAO,WAAY,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,CAAA,EAAG,SAAU,EAAW,kBAAkB,EAAG,QAAW,EAAgB,UAAU,CAAE,EACjK,CAAE,IAAK,OAAQ,KAAM,WAAY,MAAO,kBAAmB,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,CAAA,EAAG,QAAW,EAAgB,MAAM,CAAE,EAClH,CAAE,IAAK,QAAS,KAAM,WAAY,MAAO,QAAS,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,CAAA,EAAG,QAAW,EAAgB,OAAO,CAAE,EAC3G,CAAE,IAAK,OAAQ,KAAM,WAAY,MAAO,YAAa,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,CAAA,EAAG,QAAW,EAAgB,MAAM,CAAE,EAC5G,CAAE,IAAK,YAAa,KAAM,WAAY,MAAO,YAAa,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,CAAA,EAAG,QAAW,EAAgB,WAAW,CAAE,EAC3H,CAAE,IAAK,cAAe,KAAM,WAAY,MAAO,cAAe,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,CAAA,EAAG,QAAW,EAAgB,aAAa,CAAE,EACnI,CAAE,IAAK,YAAa,KAAM,WAAY,MAAO,qBAAsB,MAAM,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,CAAA,EAAG,SAAU,EAAW,gBAAgB,EAAG,QAAW,EAAiB,WAAW,CAAE,EAC5K,GAAI,EACA,CAAC,EACD,CAAC,CAAE,IAAK,OAAQ,KAAM,mBAA6B,MAAO,mBAAoB,SAAU,EAAW,oBAAoB,EAAG,QAAS,EAAG,aAAc,IAAK,EAAiB,KAAM,EAAK,CAAC,EAC1L,GAAG,EAAO,IAAK,IAAO,CACpB,IAAK,SAAS,EAAE,QAChB,KAAM,gBACN,MAAO,EAAE,MACT,QAAS,EAAM,QAAU,EAAE,MAC3B,QAAW,EAAM,IAAI,EAAE,KAAK,EAC5B,KAAM,EACR,EAAE,CACJ,GAEA,EAAA,EAAA,gBAAA,KAAsB,CACpB,GAAI,CAAC,EAAM,OACX,IAAM,EAAO,EAAU,SAAS,sBAAsB,EACjD,GACL,EACE,EACI,CAAE,KAAM,EAAG,OAAQ,KAAK,IAAI,EAAG,OAAO,YAAc,EAAK,IAAM,CAAC,CAAE,EAClE,CAAE,KAAM,EAAK,MAAQ,EAAG,OAAQ,KAAK,IAAI,EAAG,OAAO,YAAc,EAAK,MAAM,CAAE,CACpF,CACF,EAAG,CAAC,EAAM,EAAW,CAAO,CAAC,EAM7B,GAAM,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAS,CAAI,EACvC,IAAS,IACX,EAAW,CAAI,EACX,GAAM,EAAU,CAAC,GAKvB,IAAM,GAAA,EAAW,EAAA,OAAA,CAAO,CAAO,EAC/B,EAAS,QAAU,GAEnB,EAAA,EAAA,UAAA,KAAgB,CACd,GAAI,CAAC,EAAM,OACX,SAAS,EAAO,EAAmB,CACjC,IAAM,EAAS,EAAM,OACjB,EAAQ,SAAS,SAAS,CAAM,GAAK,EAAU,SAAS,SAAS,CAAM,GAC3E,EAAS,QAAQ,CACnB,CAEA,OADA,SAAS,iBAAiB,YAAa,CAAM,MAChC,SAAS,oBAAoB,YAAa,CAAM,CAC/D,EAAG,CAAC,EAAM,CAAS,CAAC,EAUpB,IAAM,EAAS,IAAa,MAC5B,EAAA,EAAA,UAAA,KAAgB,CACT,GAAS,GACd,EAAQ,SAAS,cAA2B,gBAAgB,EAAO,GAAG,CAAC,EAAE,MAAM,CACjF,EAAG,CAAC,EAAQ,EAAM,CAAM,CAAC,EAQzB,IAAM,GAAA,EAAiB,EAAA,OAAA,CAAO,EAAK,EAOnC,IANA,EAAA,EAAA,UAAA,KAAgB,CACV,IAAS,EAAe,UAC5B,EAAe,QAAU,GACzB,EAAU,SAAS,MAAM,EAC3B,EAAG,CAAC,EAAM,CAAS,CAAC,EAEhB,CAAC,EAAM,OAAO,KAElB,SAAS,EAAM,EAAe,GAAM,CAClC,EAAe,QAAU,EACzB,EAAQ,CACV,CAEA,SAAS,EAAO,EAAc,CAC5B,EAAM,IAAI,EACL,EAAM,MAAM,EAAM,EAAK,CAC9B,CAEA,SAAS,EAAU,EAA2C,CAC5D,IAAM,EAAQ,EAAQ,OACtB,OAAQ,EAAM,IAAd,CACE,IAAK,YACH,EAAM,eAAe,EACrB,EAAW,IAAO,EAAI,GAAK,CAAK,EAChC,MACF,IAAK,UACH,EAAM,eAAe,EACrB,EAAW,IAAO,EAAI,EAAI,GAAS,CAAK,EACxC,MACF,IAAK,OACH,EAAM,eAAe,EACrB,EAAU,CAAC,EACX,MACF,IAAK,MACH,EAAM,eAAe,EACrB,EAAU,EAAQ,CAAC,EACnB,MACF,IAAK,SACH,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,EAAM,EACN,MACF,IAAK,MAEH,EAAM,EAAK,CAIf,CACF,CAEA,IAAM,EAAa,EAAQ,UAAW,GAAM,EAAE,IAAI,WAAW,QAAQ,CAAC,EAEtE,OAAA,EAAO,EAAA,aAAA,EACL,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAK,EACL,KAAK,OACL,aAAW,oBACX,UAAW,EAAO,KAClB,eAAc,GAAW,IAAA,GACzB,MAAO,EAAW,CAAE,KAAM,EAAS,KAAM,OAAQ,EAAS,MAAO,EAAI,CAAE,WAAY,QAAS,EACjF,YAEV,SAAA,EAAQ,KAAK,EAAO,KACnB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAqB,KAAK,OAA1B,SAAA,CACG,IAAU,GACT,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,KAAK,YAAY,UAAW,EAAO,UACtC,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,WAAY,SAAA,OAAW,CAAA,CAC5C,CAAA,EACH,KACH,EAAM,MAAQ,QAAS,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,KAAK,YAAY,UAAW,EAAO,SAAY,CAAA,EAAI,MAChF,EAAA,EAAA,KAAA,CAAC,SAAD,CACE,KAAK,SACL,KAAM,EAAM,KACZ,aAAY,EACZ,SAAU,IAAU,EAAS,EAAI,GACjC,eAAc,EAAM,OAAS,WAAa,IAAA,GAAY,EAAM,UAAY,GACxE,UAAW,EAAO,KAClB,YAAe,EAAO,CAAK,EAC3B,gBAAmB,IAAU,GAAU,EAAU,CAAK,EARxD,SAAA,EAUE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,KAAM,cAAY,OACvC,SAAA,EAAM,OAAS,WAAa,EAAM,KAAO,EAAM,SAAU,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,KAAQ,CAAA,EAAI,IAC1F,CAAA,GACN,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,MAAQ,SAAA,EAAM,KAAY,CAAA,EACjD,EAAM,UAAW,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAO,IAAM,SAAA,EAAM,QAAc,CAAA,EAAI,IACjE,GACL,CAvBK,EAAA,EAAM,GAuBX,CACN,CACE,CAAA,EACL,SAAS,IACX,CACF"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{t as r}from"./Dialog-BYIKNPcH.js";import{c as i,f as a,i as o,p as s,s as c}from"./git-model-DL3MwN93.js";import{t as l}from"./Button-DP2ImS5n.js";var u=n(t(),1),d={form:`_form_1pzii_5`,facts:`_facts_1pzii_11`,fact:`_fact_1pzii_11`,factWord:`_factWord_1pzii_34`,ref:`_ref_1pzii_45`,label:`_label_1pzii_55`,optional:`_optional_1pzii_62`,input:`_input_1pzii_68`,textarea:`_textarea_1pzii_69`,mono:`_mono_1pzii_85`,row:`_row_1pzii_87`,field:`_field_1pzii_93`,check:`_check_1pzii_100`,hint:`_hint_1pzii_111`,error:`_error_1pzii_126`,actions:`_actions_1pzii_137`},f=e();function p(e){e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),e.currentTarget.requestSubmit())}function m({children:e}){return(0,f.jsx)(`ul`,{className:d.facts,children:e})}function h({tone:e=`neutral`,children:t}){return(0,f.jsxs)(`li`,{className:d.fact,"data-tone":e,children:[e===`warning`?(0,f.jsx)(`span`,{className:d.factWord,children:`Note`}):null,(0,f.jsx)(`span`,{children:t})]})}function g({error:e}){return e?(0,f.jsx)(`p`,{role:`alert`,className:d.error,children:e}):null}function _({name:e}){return(0,f.jsx)(`code`,{className:d.ref,children:e??`HEAD`})}function v({open:e,status:t,onClose:n,onSubmit:a,error:o,busy:s}){let c=(0,u.useId)(),v=(0,u.useId)(),[y,b]=(0,u.useState)(``),x=(0,u.useRef)(null);return(0,u.useEffect)(()=>{e&&b(``)},[e]),(0,f.jsx)(r,{open:e,onClose:n,titleId:c,title:`Commit changes`,initialFocusRef:x,children:(0,f.jsxs)(`form`,{className:d.form,onSubmit:e=>{e.preventDefault(),y.trim()&&!s&&a(y.trim())},onKeyDown:p,children:[(0,f.jsx)(m,{children:(0,f.jsxs)(h,{children:[i(t.dirty),` changed `,t.dirty===1?`file`:`files`,` in `,(0,f.jsx)(`strong`,{children:t.name}),` on `,(0,f.jsx)(_,{name:t.branch}),`, untracked files included.`]})}),(0,f.jsx)(`label`,{className:d.label,htmlFor:v,children:`Message`}),(0,f.jsx)(`textarea`,{id:v,ref:x,className:d.textarea,rows:4,value:y,onChange:e=>b(e.target.value),placeholder:`What changed, and why`,maxLength:1e4,required:!0}),(0,f.jsxs)(`p`,{className:d.hint,children:[`Git hooks in this repository run as usual. `,(0,f.jsx)(`kbd`,{children:`⌘`}),(0,f.jsx)(`kbd`,{children:`Enter`}),` commits.`]}),(0,f.jsx)(g,{error:o}),(0,f.jsxs)(`div`,{className:d.actions,children:[(0,f.jsx)(l,{variant:`ghost`,onClick:n,children:`Cancel`}),(0,f.jsx)(l,{type:`submit`,variant:`primary`,busy:s,disabled:!y.trim(),children:`Commit`})]})]})})}function y({open:e,status:t,onClose:n,onSubmit:a,error:s,busy:v,draft:y}){let b=(0,u.useId)(),x=(0,u.useId)(),S=(0,u.useId)(),C=(0,u.useId)(),[w,T]=(0,u.useState)(``),[E,D]=(0,u.useState)(``),[O,k]=(0,u.useState)(``),[A,j]=(0,u.useState)(y),M=(0,u.useRef)(null);(0,u.useEffect)(()=>{e&&(T(o(t)),D(``),k(t.base??``),j(y))},[e]);let N=t.upstream===null||t.ahead>0;return(0,f.jsx)(r,{open:e,onClose:n,titleId:b,title:A?`Create draft pull request`:`Create pull request`,initialFocusRef:M,children:(0,f.jsxs)(`form`,{className:d.form,onSubmit:e=>{e.preventDefault(),w.trim()&&O.trim()&&!v&&a({title:w.trim(),body:E,base:O.trim(),draft:A})},onKeyDown:p,children:[(0,f.jsxs)(m,{children:[N?(0,f.jsxs)(h,{children:[`Pushes `,(0,f.jsx)(_,{name:t.branch}),` to `,t.upstream??`origin`,` first`,t.upstream&&t.ahead>0?` (${i(t.ahead)} ${t.ahead===1?`commit`:`commits`})`:``,`.`]}):null,(0,f.jsxs)(h,{children:[`Then opens a PR from `,(0,f.jsx)(_,{name:t.branch}),` into `,(0,f.jsx)(_,{name:O.trim()||null}),`:`,` `,i(t.diffstat.files),` `,t.diffstat.files===1?`file`:`files`,`, `,c(t.diffstat.additions,t.diffstat.deletions),`.`]}),t.dirty>0?(0,f.jsxs)(h,{tone:`warning`,children:[i(t.dirty),` uncommitted `,t.dirty===1?`change is`:`changes are`,` not in the PR. Commit first to include `,t.dirty===1?`it`:`them`,`.`]}):null]}),(0,f.jsx)(`label`,{className:d.label,htmlFor:x,children:`Title`}),(0,f.jsx)(`input`,{id:x,ref:M,className:d.input,value:w,onChange:e=>T(e.target.value),maxLength:256,required:!0}),(0,f.jsxs)(`label`,{className:d.label,htmlFor:S,children:[`Description `,(0,f.jsx)(`span`,{className:d.optional,children:`optional`})]}),(0,f.jsx)(`textarea`,{id:S,className:d.textarea,rows:4,value:E,onChange:e=>D(e.target.value),maxLength:6e4}),(0,f.jsxs)(`div`,{className:d.row,children:[(0,f.jsxs)(`div`,{className:d.field,children:[(0,f.jsx)(`label`,{className:d.label,htmlFor:C,children:`Base branch`}),(0,f.jsx)(`input`,{id:C,className:`${d.input} ${d.mono}`,value:O,onChange:e=>k(e.target.value),spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,required:!0})]}),(0,f.jsxs)(`label`,{className:d.check,children:[(0,f.jsx)(`input`,{type:`checkbox`,checked:A,onChange:e=>j(e.target.checked)}),`Draft`]})]}),(0,f.jsx)(g,{error:s}),(0,f.jsxs)(`div`,{className:d.actions,children:[(0,f.jsx)(l,{variant:`ghost`,onClick:n,children:`Cancel`}),(0,f.jsx)(l,{type:`submit`,variant:`primary`,busy:v,disabled:!w.trim()||!O.trim(),children:A?`Create draft PR`:`Create PR`})]})]})})}function b({open:e,pin:t,live:n,onClose:i,onSubmit:o,error:c,busy:v}){let y=(0,u.useId)(),b=(0,u.useRef)(null),x=s(t),S=a(t,n)??(x.verified?null:`This head has not passed every check GitHub needs to merge it.`);return(0,f.jsx)(r,{open:e,onClose:i,titleId:y,title:`Merge #${t.number}?`,description:t.title,initialFocusRef:b,children:(0,f.jsxs)(`form`,{className:d.form,onSubmit:e=>{e.preventDefault(),!v&&S===null&&o()},onKeyDown:p,children:[(0,f.jsxs)(m,{children:[(0,f.jsxs)(h,{children:[`Squash-merges `,(0,f.jsx)(_,{name:t.headRef||null}),` into `,(0,f.jsx)(_,{name:t.baseRef||null}),` on GitHub.`]}),(0,f.jsxs)(h,{tone:x.verified?`neutral`:`warning`,children:[`Head `,(0,f.jsx)(`code`,{className:d.ref,children:x.sha}),`, `,x.detail]}),(0,f.jsx)(h,{children:`Only this head merges: GitHub re-checks it first, so if a commit landed after it, nothing merges. Admin overrides are never used.`}),S===null?null:(0,f.jsx)(h,{tone:`warning`,children:S})]}),(0,f.jsx)(g,{error:c}),(0,f.jsxs)(`div`,{className:d.actions,children:[(0,f.jsx)(l,{variant:`ghost`,onClick:i,children:`Cancel`}),(0,f.jsxs)(l,{ref:b,type:`submit`,variant:`primary`,busy:v,disabled:S!==null,children:[`Merge #`,t.number]})]})]})})}export{y as n,b as r,v as t};
2
- //# sourceMappingURL=GitDialogs-BSTlyNJR.js.map