@ashlr/hub 3.22.0 → 3.22.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 (929) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +5 -5
  3. package/dist/authority-surface.json +16 -11
  4. package/dist/build-identity.json +2 -2
  5. package/dist/cli/verify-safety-sources.d.ts +4 -0
  6. package/dist/cli/verify-safety-sources.js +41 -0
  7. package/dist/cli/verify-safety-sources.js.map +1 -0
  8. package/dist/cli/verify-safety.js +16 -1
  9. package/dist/cli/verify-safety.js.map +1 -1
  10. package/dist/core/decide/needs-you.d.ts +3 -1
  11. package/dist/core/decide/needs-you.js +52 -28
  12. package/dist/core/decide/needs-you.js.map +1 -1
  13. package/dist/core/fleet/fleet-control-model.d.ts +2 -1
  14. package/dist/core/fleet/fleet-control-model.js +5 -0
  15. package/dist/core/fleet/fleet-control-model.js.map +1 -1
  16. package/dist/core/fleet/fleet-control-types.d.ts +11 -1
  17. package/dist/core/fleet/fleet-control.d.ts +4 -0
  18. package/dist/core/fleet/fleet-control.js +23 -1
  19. package/dist/core/fleet/fleet-control.js.map +1 -1
  20. package/dist/core/fleet/quota.js +1 -1
  21. package/dist/core/fleet/quota.js.map +1 -1
  22. package/dist/core/universe/builtins/preparation/manifest.json +1 -1
  23. package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +4 -2
  24. package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +3 -1
  25. package/dist/core/web/public/next/assets/ActionMenu-Z14OhnFI.js +2 -0
  26. package/dist/core/web/public/next/assets/ActionMenu-Z14OhnFI.js.map +1 -0
  27. package/dist/core/web/public/next/assets/Advanced-fUyq-fpH.js +2 -0
  28. package/dist/core/web/public/next/assets/Advanced-fUyq-fpH.js.map +1 -0
  29. package/dist/core/web/public/next/assets/AgentDetailScreen-C8h--Nah.js +2 -0
  30. package/dist/core/web/public/next/assets/AgentDetailScreen-C8h--Nah.js.map +1 -0
  31. package/dist/core/web/public/next/assets/AgentToolsSheet-BP3h-UbZ.js +2 -0
  32. package/dist/core/web/public/next/assets/AgentToolsSheet-BP3h-UbZ.js.map +1 -0
  33. package/dist/core/web/public/next/assets/AgentToolsStrip--hf18knJ.js +2 -0
  34. package/dist/core/web/public/next/assets/AgentToolsStrip--hf18knJ.js.map +1 -0
  35. package/dist/core/web/public/next/assets/AgentsScreen-BR-j0Fzd.js +2 -0
  36. package/dist/core/web/public/next/assets/AgentsScreen-BR-j0Fzd.js.map +1 -0
  37. package/dist/core/web/public/next/assets/AgentsSection-OKKOuYed.js +3 -0
  38. package/dist/core/web/public/next/assets/AgentsSection-OKKOuYed.js.map +1 -0
  39. package/dist/core/web/public/next/assets/App-ttVrZYp5.js +8 -0
  40. package/dist/core/web/public/next/assets/App-ttVrZYp5.js.map +1 -0
  41. package/dist/core/web/public/next/assets/AppsSection-sqsXqENO.js +2 -0
  42. package/dist/core/web/public/next/assets/AppsSection-sqsXqENO.js.map +1 -0
  43. package/dist/core/web/public/next/assets/AreaTrend-LVgaB49b.js +2 -0
  44. package/dist/core/web/public/next/assets/AreaTrend-LVgaB49b.js.map +1 -0
  45. package/dist/core/web/public/next/assets/AutomationsSection-BITmxjuB.js +2 -0
  46. package/dist/core/web/public/next/assets/AutomationsSection-BITmxjuB.js.map +1 -0
  47. package/dist/core/web/public/next/assets/AutonomyOffState-nO9lIcCv.js +3 -0
  48. package/dist/core/web/public/next/assets/AutonomyOffState-nO9lIcCv.js.map +1 -0
  49. package/dist/core/web/public/next/assets/AutonomySection-DWYUPDP6.js +2 -0
  50. package/dist/core/web/public/next/assets/AutonomySection-DWYUPDP6.js.map +1 -0
  51. package/dist/core/web/public/next/assets/AutonomyStatus-C4Yp1JTY.js +2 -0
  52. package/dist/core/web/public/next/assets/AutonomyStatus-C4Yp1JTY.js.map +1 -0
  53. package/dist/core/web/public/next/assets/BranchBar-CkiZSNqB.js +2 -0
  54. package/dist/core/web/public/next/assets/BranchBar-CkiZSNqB.js.map +1 -0
  55. package/dist/core/web/public/next/assets/BrowserPanel-CECVGJBS.js +7 -0
  56. package/dist/core/web/public/next/assets/BrowserPanel-CECVGJBS.js.map +1 -0
  57. package/dist/core/web/public/next/assets/BudgetControl-De1TPzvX.js +2 -0
  58. package/dist/core/web/public/next/assets/BudgetControl-De1TPzvX.js.map +1 -0
  59. package/dist/core/web/public/next/assets/Button-CstSJwha.js +2 -0
  60. package/dist/core/web/public/next/assets/Button-CstSJwha.js.map +1 -0
  61. package/dist/core/web/public/next/assets/CapacityStrip-nIJcB_lA.js +2 -0
  62. package/dist/core/web/public/next/assets/CapacityStrip-nIJcB_lA.js.map +1 -0
  63. package/dist/core/web/public/next/assets/ChangesPaneHost-Bnj_NcRa.js +16 -0
  64. package/dist/core/web/public/next/assets/ChangesPaneHost-Bnj_NcRa.js.map +1 -0
  65. package/dist/core/web/public/next/assets/ChartFrame-Dljee9y6.js +2 -0
  66. package/dist/core/web/public/next/assets/ChartFrame-Dljee9y6.js.map +1 -0
  67. package/dist/core/web/public/next/assets/ChatPanes-x_ySUIyR.js +2 -0
  68. package/dist/core/web/public/next/assets/ChatPanes-x_ySUIyR.js.map +1 -0
  69. package/dist/core/web/public/next/assets/ChatSection-CXJa8QOi.js +3 -0
  70. package/dist/core/web/public/next/assets/ChatSection-CXJa8QOi.js.map +1 -0
  71. package/dist/core/web/public/next/assets/ChecksPanel-D9r8koxq.js +5 -0
  72. package/dist/core/web/public/next/assets/ChecksPanel-D9r8koxq.js.map +1 -0
  73. package/dist/core/web/public/next/assets/CloudBudgetForm-D5ajpoMe.js +2 -0
  74. package/dist/core/web/public/next/assets/CloudBudgetForm-D5ajpoMe.js.map +1 -0
  75. package/dist/core/web/public/next/assets/CommandPalette-ONyqYZzt.js +3 -0
  76. package/dist/core/web/public/next/assets/CommandPalette-ONyqYZzt.js.map +1 -0
  77. package/dist/core/web/public/next/assets/CommandSection-DxNIibnI.js +3 -0
  78. package/dist/core/web/public/next/assets/CommandSection-DxNIibnI.js.map +1 -0
  79. package/dist/core/web/public/next/assets/CommandWorkflowForm-Bz3PuZXH.js +9 -0
  80. package/dist/core/web/public/next/assets/CommandWorkflowForm-Bz3PuZXH.js.map +1 -0
  81. package/dist/core/web/public/next/assets/CommandWorkflowPicker-COVyeer0.js +3 -0
  82. package/dist/core/web/public/next/assets/CommandWorkflowPicker-COVyeer0.js.map +1 -0
  83. package/dist/core/web/public/next/assets/CompareDialog-PVqv0Tx9.js +4 -0
  84. package/dist/core/web/public/next/assets/CompareDialog-PVqv0Tx9.js.map +1 -0
  85. package/dist/core/web/public/next/assets/ComputerControl-DkSIUrYm.js +2 -0
  86. package/dist/core/web/public/next/assets/ComputerControl-DkSIUrYm.js.map +1 -0
  87. package/dist/core/web/public/next/assets/ConfirmDialog-CdCzzk0I.js +2 -0
  88. package/dist/core/web/public/next/assets/ConfirmDialog-CdCzzk0I.js.map +1 -0
  89. package/dist/core/web/public/next/assets/DeleteChatDialog-BTzOgqho.js +2 -0
  90. package/dist/core/web/public/next/assets/DeleteChatDialog-BTzOgqho.js.map +1 -0
  91. package/dist/core/web/public/next/assets/DevinStopDialog-CGsDqfan.js +2 -0
  92. package/dist/core/web/public/next/assets/DevinStopDialog-CGsDqfan.js.map +1 -0
  93. package/dist/core/web/public/next/assets/Dialog-DDHg9cuT.js +2 -0
  94. package/dist/core/web/public/next/assets/Dialog-DDHg9cuT.js.map +1 -0
  95. package/dist/core/web/public/next/assets/DiffPane-BR3HU7pC.js +2 -0
  96. package/dist/core/web/public/next/assets/DiffPane-BR3HU7pC.js.map +1 -0
  97. package/dist/core/web/public/next/assets/DiffViewer-hJK75qko.js +2 -0
  98. package/dist/core/web/public/next/assets/DiffViewer-hJK75qko.js.map +1 -0
  99. package/dist/core/web/public/next/assets/DockHost-DhOosHbo.js +2 -0
  100. package/dist/core/web/public/next/assets/DockHost-DhOosHbo.js.map +1 -0
  101. package/dist/core/web/public/next/assets/EmptyState-CGVr0VO2.js +2 -0
  102. package/dist/core/web/public/next/assets/EmptyState-CGVr0VO2.js.map +1 -0
  103. package/dist/core/web/public/next/assets/Epistemic-tp0ZNAKZ.js +2 -0
  104. package/dist/core/web/public/next/assets/Epistemic-tp0ZNAKZ.js.map +1 -0
  105. package/dist/core/web/public/next/assets/EvidenceTimeline-YmKIoxNx.js +2 -0
  106. package/dist/core/web/public/next/assets/EvidenceTimeline-YmKIoxNx.js.map +1 -0
  107. package/dist/core/web/public/next/assets/FilesPane-CoNjfkPP.js +2 -0
  108. package/dist/core/web/public/next/assets/FilesPane-CoNjfkPP.js.map +1 -0
  109. package/dist/core/web/public/next/assets/FleetScreen-CstwycnB.js +2 -0
  110. package/dist/core/web/public/next/assets/FleetScreen-CstwycnB.js.map +1 -0
  111. package/dist/core/web/public/next/assets/FleetSection-D0xk0s5J.js +5 -0
  112. package/dist/core/web/public/next/assets/FleetSection-D0xk0s5J.js.map +1 -0
  113. package/dist/core/web/public/next/assets/Funnel-UPrk7fcy.js +2 -0
  114. package/dist/core/web/public/next/assets/Funnel-UPrk7fcy.js.map +1 -0
  115. package/dist/core/web/public/next/assets/GearTray-BSjga1J_.js +2 -0
  116. package/dist/core/web/public/next/assets/GearTray-BSjga1J_.js.map +1 -0
  117. package/dist/core/web/public/next/assets/GitDialogs-ekwzxl76.js +2 -0
  118. package/dist/core/web/public/next/assets/GitDialogs-ekwzxl76.js.map +1 -0
  119. package/dist/core/web/public/next/assets/GrowthSection-Dh-gnkgc.js +3 -0
  120. package/dist/core/web/public/next/assets/GrowthSection-Dh-gnkgc.js.map +1 -0
  121. package/dist/core/web/public/next/assets/HandoffDialog-BDiyA3u-.js +2 -0
  122. package/dist/core/web/public/next/assets/HandoffDialog-BDiyA3u-.js.map +1 -0
  123. package/dist/core/web/public/next/assets/HomeBody-Ce3HBIEb.js +3 -0
  124. package/dist/core/web/public/next/assets/HomeBody-Ce3HBIEb.js.map +1 -0
  125. package/dist/core/web/public/next/assets/HomeSeats-BFLCWCFp.js +2 -0
  126. package/dist/core/web/public/next/assets/HomeSeats-BFLCWCFp.js.map +1 -0
  127. package/dist/core/web/public/next/assets/Input-Cpn9uYj2.js +2 -0
  128. package/dist/core/web/public/next/assets/Input-Cpn9uYj2.js.map +1 -0
  129. package/dist/core/web/public/next/assets/LaunchDialog-CrPEf652.js +9 -0
  130. package/dist/core/web/public/next/assets/LaunchDialog-CrPEf652.js.map +1 -0
  131. package/dist/core/web/public/next/assets/LeaderCard-Dhq-w_Mf.js +2 -0
  132. package/dist/core/web/public/next/assets/LeaderCard-Dhq-w_Mf.js.map +1 -0
  133. package/dist/core/web/public/next/assets/LeaderConversation-CiWqhsoa.js +3 -0
  134. package/dist/core/web/public/next/assets/LeaderConversation-CiWqhsoa.js.map +1 -0
  135. package/dist/core/web/public/next/assets/LeaderScreen-Z5KPjxBV.js +2 -0
  136. package/dist/core/web/public/next/assets/LeaderScreen-Z5KPjxBV.js.map +1 -0
  137. package/dist/core/web/public/next/assets/LessonsPanel-B6XVKAPE.js +2 -0
  138. package/dist/core/web/public/next/assets/LessonsPanel-B6XVKAPE.js.map +1 -0
  139. package/dist/core/web/public/next/assets/LiveTimer-B8t2iX5h.js +2 -0
  140. package/dist/core/web/public/next/assets/LiveTimer-B8t2iX5h.js.map +1 -0
  141. package/dist/core/web/public/next/assets/LocalSeatBadge-HMxIrMiL.js +2 -0
  142. package/dist/core/web/public/next/assets/LocalSeatBadge-HMxIrMiL.js.map +1 -0
  143. package/dist/core/web/public/next/assets/MatrixHeatmap-BlFI5oao.js +2 -0
  144. package/dist/core/web/public/next/assets/MatrixHeatmap-BlFI5oao.js.map +1 -0
  145. package/dist/core/web/public/next/assets/McpSection-snZNKexW.js +2 -0
  146. package/dist/core/web/public/next/assets/McpSection-snZNKexW.js.map +1 -0
  147. package/dist/core/web/public/next/assets/MessageMarkdown-CS0mAtSs.js +3 -0
  148. package/dist/core/web/public/next/assets/MessageMarkdown-CS0mAtSs.js.map +1 -0
  149. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-D5R-zr-W.js +72 -0
  150. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-D5R-zr-W.js.map +1 -0
  151. package/dist/core/web/public/next/assets/Meter-VXI75VNe.js +2 -0
  152. package/dist/core/web/public/next/assets/Meter-VXI75VNe.js.map +1 -0
  153. package/dist/core/web/public/next/assets/MicButton-DORAXsUU.js +2 -0
  154. package/dist/core/web/public/next/assets/MicButton-DORAXsUU.js.map +1 -0
  155. package/dist/core/web/public/next/assets/MindSection-DZLHz29Q.js +3 -0
  156. package/dist/core/web/public/next/assets/MindSection-DZLHz29Q.js.map +1 -0
  157. package/dist/core/web/public/next/assets/MobileComposer-B8nWsIJO.js +2 -0
  158. package/dist/core/web/public/next/assets/MobileComposer-B8nWsIJO.js.map +1 -0
  159. package/dist/core/web/public/next/assets/MobileGuardSheet-BRwOfD9o.js +2 -0
  160. package/dist/core/web/public/next/assets/MobileGuardSheet-BRwOfD9o.js.map +1 -0
  161. package/dist/core/web/public/next/assets/MobileRuntime-kMob_MjB.js +3 -0
  162. package/dist/core/web/public/next/assets/MobileRuntime-kMob_MjB.js.map +1 -0
  163. package/dist/core/web/public/next/assets/MoreScreen-92dC6Bj7.js +2 -0
  164. package/dist/core/web/public/next/assets/MoreScreen-92dC6Bj7.js.map +1 -0
  165. package/dist/core/web/public/next/assets/MultiModelBar-BhAUUQOq.js +7 -0
  166. package/dist/core/web/public/next/assets/MultiModelBar-BhAUUQOq.js.map +1 -0
  167. package/dist/core/web/public/next/assets/MutationTokenDialog-DlY2VLVh.js +2 -0
  168. package/dist/core/web/public/next/assets/MutationTokenDialog-DlY2VLVh.js.map +1 -0
  169. package/dist/core/web/public/next/assets/NeedsYouDrawer-BH0ffbht.js +3 -0
  170. package/dist/core/web/public/next/assets/NeedsYouDrawer-BH0ffbht.js.map +1 -0
  171. package/dist/core/web/public/next/assets/NeedsYouList-CI_Dy-hi.js +2 -0
  172. package/dist/core/web/public/next/assets/NeedsYouList-CI_Dy-hi.js.map +1 -0
  173. package/dist/core/web/public/next/assets/NeedsYouScreen-CvDiEphJ.js +2 -0
  174. package/dist/core/web/public/next/assets/NeedsYouScreen-CvDiEphJ.js.map +1 -0
  175. package/dist/core/web/public/next/assets/NewAgentScreen-BpTRKp9z.js +2 -0
  176. package/dist/core/web/public/next/assets/NewAgentScreen-BpTRKp9z.js.map +1 -0
  177. package/dist/core/web/public/next/assets/NewChatDialog-O1LwwBc4.js +4 -0
  178. package/dist/core/web/public/next/assets/NewChatDialog-O1LwwBc4.js.map +1 -0
  179. package/dist/core/web/public/next/assets/OnboardingFlow-uMNBVHvK.js +3 -0
  180. package/dist/core/web/public/next/assets/OnboardingFlow-uMNBVHvK.js.map +1 -0
  181. package/dist/core/web/public/next/assets/OnboardingGate-sdzxSPZF.js +3 -0
  182. package/dist/core/web/public/next/assets/OnboardingGate-sdzxSPZF.js.map +1 -0
  183. package/dist/core/web/public/next/assets/PlaybooksSection-CnWfwZv8.js +9 -0
  184. package/dist/core/web/public/next/assets/PlaybooksSection-CnWfwZv8.js.map +1 -0
  185. package/dist/core/web/public/next/assets/PreviewPane-D1WaefIG.js +2 -0
  186. package/dist/core/web/public/next/assets/PreviewPane-D1WaefIG.js.map +1 -0
  187. package/dist/core/web/public/next/assets/ProviderLogo-g2YWCmNY.js +2 -0
  188. package/dist/core/web/public/next/assets/ProviderLogo-g2YWCmNY.js.map +1 -0
  189. package/dist/core/web/public/next/assets/RailStatus-OrvAuyzs.js +2 -0
  190. package/dist/core/web/public/next/assets/RailStatus-OrvAuyzs.js.map +1 -0
  191. package/dist/core/web/public/next/assets/ReasoningPane-BARDPl4-.js +2 -0
  192. package/dist/core/web/public/next/assets/ReasoningPane-BARDPl4-.js.map +1 -0
  193. package/dist/core/web/public/next/assets/ReasoningSheet-rPTXyt-b.js +2 -0
  194. package/dist/core/web/public/next/assets/ReasoningSheet-rPTXyt-b.js.map +1 -0
  195. package/dist/core/web/public/next/assets/RefreshIndicator-D96C9qiH.js +2 -0
  196. package/dist/core/web/public/next/assets/RefreshIndicator-D96C9qiH.js.map +1 -0
  197. package/dist/core/web/public/next/assets/RemoteMobileApp-DfDjiBTR.js +2 -0
  198. package/dist/core/web/public/next/assets/RemoteMobileApp-DfDjiBTR.js.map +1 -0
  199. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CcfULh_p.js +7 -0
  200. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CcfULh_p.js.map +1 -0
  201. package/dist/core/web/public/next/assets/ResourcesChrome-DuEa7WOo.css +1 -0
  202. package/dist/core/web/public/next/assets/ResourcesChrome-e9ifgnWf.js +3 -0
  203. package/dist/core/web/public/next/assets/ResourcesChrome-e9ifgnWf.js.map +1 -0
  204. package/dist/core/web/public/next/assets/ResourcesDrawer-DOv_mxpe.js +3 -0
  205. package/dist/core/web/public/next/assets/ResourcesDrawer-DOv_mxpe.js.map +1 -0
  206. package/dist/core/web/public/next/assets/ReviewMenu-Ba3saQlX.js +2 -0
  207. package/dist/core/web/public/next/assets/ReviewMenu-Ba3saQlX.js.map +1 -0
  208. package/dist/core/web/public/next/assets/RouteErrorBoundary-BaJ1ZePy.js +2 -0
  209. package/dist/core/web/public/next/assets/RouteErrorBoundary-BaJ1ZePy.js.map +1 -0
  210. package/dist/core/web/public/next/assets/RunInCloudAction-DRSX84Jy.js +2 -0
  211. package/dist/core/web/public/next/assets/RunInCloudAction-DRSX84Jy.js.map +1 -0
  212. package/dist/core/web/public/next/assets/RunInDevinAction-BMji-YN2.js +2 -0
  213. package/dist/core/web/public/next/assets/RunInDevinAction-BMji-YN2.js.map +1 -0
  214. package/dist/core/web/public/next/assets/SchedulingEvidence-xxjV6HF_.js +2 -0
  215. package/dist/core/web/public/next/assets/SchedulingEvidence-xxjV6HF_.js.map +1 -0
  216. package/dist/core/web/public/next/assets/ScreenHost-Dv6z76Ta.js +3 -0
  217. package/dist/core/web/public/next/assets/ScreenHost-Dv6z76Ta.js.map +1 -0
  218. package/dist/core/web/public/next/assets/SeatSelector-YRNdNpP8.js +3 -0
  219. package/dist/core/web/public/next/assets/SeatSelector-YRNdNpP8.js.map +1 -0
  220. package/dist/core/web/public/next/assets/Segmented-BA8RmKYq.js +2 -0
  221. package/dist/core/web/public/next/assets/Segmented-BA8RmKYq.js.map +1 -0
  222. package/dist/core/web/public/next/assets/Select-B8GqZOX9.js +2 -0
  223. package/dist/core/web/public/next/assets/Select-B8GqZOX9.js.map +1 -0
  224. package/dist/core/web/public/next/assets/SessionGate-CnASHl7g.js +2 -0
  225. package/dist/core/web/public/next/assets/SessionGate-CnASHl7g.js.map +1 -0
  226. package/dist/core/web/public/next/assets/SessionInsightChip-DIKfih6i.js +2 -0
  227. package/dist/core/web/public/next/assets/SessionInsightChip-DIKfih6i.js.map +1 -0
  228. package/dist/core/web/public/next/assets/SessionSearch-K6lvMlji.js +2 -0
  229. package/dist/core/web/public/next/assets/SessionSearch-K6lvMlji.js.map +1 -0
  230. package/dist/core/web/public/next/assets/SettingsSection-C-c3f_6J.js +2 -0
  231. package/dist/core/web/public/next/assets/SettingsSection-C-c3f_6J.js.map +1 -0
  232. package/dist/core/web/public/next/assets/SetupChecklist-DAbAdrX4.js +2 -0
  233. package/dist/core/web/public/next/assets/SetupChecklist-DAbAdrX4.js.map +1 -0
  234. package/dist/core/web/public/next/assets/ShadowDecisions-C41uRSw4.js +3 -0
  235. package/dist/core/web/public/next/assets/ShadowDecisions-C41uRSw4.js.map +1 -0
  236. package/dist/core/web/public/next/assets/Sheet-Bk64-Hlt.js +2 -0
  237. package/dist/core/web/public/next/assets/Sheet-Bk64-Hlt.js.map +1 -0
  238. package/dist/core/web/public/next/assets/ShortcutsOverlay-CcP96zqy.js +2 -0
  239. package/dist/core/web/public/next/assets/ShortcutsOverlay-CcP96zqy.js.map +1 -0
  240. package/dist/core/web/public/next/assets/Sidebar-sSNKd57n.js +3 -0
  241. package/dist/core/web/public/next/assets/Sidebar-sSNKd57n.js.map +1 -0
  242. package/dist/core/web/public/next/assets/SkipToContent-BynsXs9i.js +2 -0
  243. package/dist/core/web/public/next/assets/SkipToContent-BynsXs9i.js.map +1 -0
  244. package/dist/core/web/public/next/assets/Slider-DS5HrVzl.js +2 -0
  245. package/dist/core/web/public/next/assets/Slider-DS5HrVzl.js.map +1 -0
  246. package/dist/core/web/public/next/assets/SourcesPane-QffcyDfA.js +2 -0
  247. package/dist/core/web/public/next/assets/SourcesPane-QffcyDfA.js.map +1 -0
  248. package/dist/core/web/public/next/assets/SourcesPanel-DlttePk7.js +2 -0
  249. package/dist/core/web/public/next/assets/SourcesPanel-DlttePk7.js.map +1 -0
  250. package/dist/core/web/public/next/assets/StatTile-mYm1GPj7.js +2 -0
  251. package/dist/core/web/public/next/assets/StatTile-mYm1GPj7.js.map +1 -0
  252. package/dist/core/web/public/next/assets/StatusBadge-Yz7S3kZ2.js +2 -0
  253. package/dist/core/web/public/next/assets/StatusBadge-Yz7S3kZ2.js.map +1 -0
  254. package/dist/core/web/public/next/assets/StepBand-Bdkv7iGd.js +2 -0
  255. package/dist/core/web/public/next/assets/StepBand-Bdkv7iGd.js.map +1 -0
  256. package/dist/core/web/public/next/assets/Surface-DVOAKl2g.js +2 -0
  257. package/dist/core/web/public/next/assets/Surface-DVOAKl2g.js.map +1 -0
  258. package/dist/core/web/public/next/assets/Swimlane-CeMBD_FC.js +2 -0
  259. package/dist/core/web/public/next/assets/Swimlane-CeMBD_FC.js.map +1 -0
  260. package/dist/core/web/public/next/assets/Switch-Cqc_bSoh.js +2 -0
  261. package/dist/core/web/public/next/assets/Switch-Cqc_bSoh.js.map +1 -0
  262. package/dist/core/web/public/next/assets/Tag-BvOxSxYi.js +2 -0
  263. package/dist/core/web/public/next/assets/Tag-BvOxSxYi.js.map +1 -0
  264. package/dist/core/web/public/next/assets/TerminalPane-D3f02aI4.js +3 -0
  265. package/dist/core/web/public/next/assets/TerminalPane-D3f02aI4.js.map +1 -0
  266. package/dist/core/web/public/next/assets/TerminalPane-XZ5n3Pns.js +26 -0
  267. package/dist/core/web/public/next/assets/TerminalPane-XZ5n3Pns.js.map +1 -0
  268. package/dist/core/web/public/next/assets/ThinkingBlock-DZNlOGaV.js +2 -0
  269. package/dist/core/web/public/next/assets/ThinkingBlock-DZNlOGaV.js.map +1 -0
  270. package/dist/core/web/public/next/assets/UniverseConsoleApp-CzBI6Upl.js +2 -0
  271. package/dist/core/web/public/next/assets/UniverseConsoleApp-CzBI6Upl.js.map +1 -0
  272. package/dist/core/web/public/next/assets/UniverseView-Dsi3Kk8o.js +9 -0
  273. package/dist/core/web/public/next/assets/UniverseView-Dsi3Kk8o.js.map +1 -0
  274. package/dist/core/web/public/next/assets/UsageSection-rVvLat9z.js +3 -0
  275. package/dist/core/web/public/next/assets/UsageSection-rVvLat9z.js.map +1 -0
  276. package/dist/core/web/public/next/assets/UsePlaybookAction-B4XAzSeI.js +2 -0
  277. package/dist/core/web/public/next/assets/UsePlaybookAction-B4XAzSeI.js.map +1 -0
  278. package/dist/core/web/public/next/assets/VerseConsoleApp-BmckthwC.css +1 -0
  279. package/dist/core/web/public/next/assets/VerseConsoleApp-DjPpZLo1.js +3 -0
  280. package/dist/core/web/public/next/assets/VerseConsoleApp-DjPpZLo1.js.map +1 -0
  281. package/dist/core/web/public/next/assets/VerseMobileApp-ePNuVERe.js +3 -0
  282. package/dist/core/web/public/next/assets/VerseMobileApp-ePNuVERe.js.map +1 -0
  283. package/dist/core/web/public/next/assets/VerseShared-Bf-XTHCh.js +2 -0
  284. package/dist/core/web/public/next/assets/VerseShared-Bf-XTHCh.js.map +1 -0
  285. package/dist/core/web/public/next/assets/VoiceHud-BG5FV2h0.js +2 -0
  286. package/dist/core/web/public/next/assets/VoiceHud-BG5FV2h0.js.map +1 -0
  287. package/dist/core/web/public/next/assets/VoiceInput-k3vB_FxV.js +2 -0
  288. package/dist/core/web/public/next/assets/VoiceInput-k3vB_FxV.js.map +1 -0
  289. package/dist/core/web/public/next/assets/WikiSection-DeBKNqd6.js +2 -0
  290. package/dist/core/web/public/next/assets/WikiSection-DeBKNqd6.js.map +1 -0
  291. package/dist/core/web/public/next/assets/Workspace-CvwS2-RN.js +6 -0
  292. package/dist/core/web/public/next/assets/Workspace-CvwS2-RN.js.map +1 -0
  293. package/dist/core/web/public/next/assets/actions-Dg6UJTLn.js +2 -0
  294. package/dist/core/web/public/next/assets/actions-Dg6UJTLn.js.map +1 -0
  295. package/dist/core/web/public/next/assets/agent-tools-client-DmJq7zlr.js +2 -0
  296. package/dist/core/web/public/next/assets/agent-tools-client-DmJq7zlr.js.map +1 -0
  297. package/dist/core/web/public/next/assets/agents-focus-B1LKhUVg.js +2 -0
  298. package/dist/core/web/public/next/assets/agents-focus-B1LKhUVg.js.map +1 -0
  299. package/dist/core/web/public/next/assets/app-version-Cb1z8iCO.js +2 -0
  300. package/dist/core/web/public/next/assets/app-version-Cb1z8iCO.js.map +1 -0
  301. package/dist/core/web/public/next/assets/apps-model-_chbcQeN.js +2 -0
  302. package/dist/core/web/public/next/assets/apps-model-_chbcQeN.js.map +1 -0
  303. package/dist/core/web/public/next/assets/ask-seat-O60AydbV.js +2 -0
  304. package/dist/core/web/public/next/assets/ask-seat-O60AydbV.js.map +1 -0
  305. package/dist/core/web/public/next/assets/authority-model-BeDDHF22.js +2 -0
  306. package/dist/core/web/public/next/assets/authority-model-BeDDHF22.js.map +1 -0
  307. package/dist/core/web/public/next/assets/automations-focus-BXaRZ8nX.js +2 -0
  308. package/dist/core/web/public/next/assets/automations-focus-BXaRZ8nX.js.map +1 -0
  309. package/dist/core/web/public/next/assets/budget-queries-Nvx0H2XE.js +2 -0
  310. package/dist/core/web/public/next/assets/budget-queries-Nvx0H2XE.js.map +1 -0
  311. package/dist/core/web/public/next/assets/capacity-strip-model-CBMJ2U-w.js +2 -0
  312. package/dist/core/web/public/next/assets/capacity-strip-model-CBMJ2U-w.js.map +1 -0
  313. package/dist/core/web/public/next/assets/charts-DT9PYS49.js +2 -0
  314. package/dist/core/web/public/next/assets/charts-DT9PYS49.js.map +1 -0
  315. package/dist/core/web/public/next/assets/chat-pane-data-CfbpeAYX.js +2 -0
  316. package/dist/core/web/public/next/assets/chat-pane-data-CfbpeAYX.js.map +1 -0
  317. package/dist/core/web/public/next/assets/checkpoint-queries-BKD2evmX.js +2 -0
  318. package/dist/core/web/public/next/assets/checkpoint-queries-BKD2evmX.js.map +1 -0
  319. package/dist/core/web/public/next/assets/cloud-queries-CsU54eNn.js +2 -0
  320. package/dist/core/web/public/next/assets/cloud-queries-CsU54eNn.js.map +1 -0
  321. package/dist/core/web/public/next/assets/command-catalog-B0ApAGD0.js +2 -0
  322. package/dist/core/web/public/next/assets/command-catalog-B0ApAGD0.js.map +1 -0
  323. package/dist/core/web/public/next/assets/composer-queries-D1H4E0Ye.js +2 -0
  324. package/dist/core/web/public/next/assets/composer-queries-D1H4E0Ye.js.map +1 -0
  325. package/dist/core/web/public/next/assets/connectivity-xQ0Nh0j3.js +2 -0
  326. package/dist/core/web/public/next/assets/connectivity-xQ0Nh0j3.js.map +1 -0
  327. package/dist/core/web/public/next/assets/context-queries-bnI3P0Wt.js +2 -0
  328. package/dist/core/web/public/next/assets/context-queries-bnI3P0Wt.js.map +1 -0
  329. package/dist/core/web/public/next/assets/control-queries-BG53otwz.js +2 -0
  330. package/dist/core/web/public/next/assets/control-queries-BG53otwz.js.map +1 -0
  331. package/dist/core/web/public/next/assets/copy-setup-COMDnur3.js +2 -0
  332. package/dist/core/web/public/next/assets/copy-setup-COMDnur3.js.map +1 -0
  333. package/dist/core/web/public/next/assets/deep-link-CqOP-JEm.js +2 -0
  334. package/dist/core/web/public/next/assets/deep-link-CqOP-JEm.js.map +1 -0
  335. package/dist/core/web/public/next/assets/device-permissions-DpsJJcUW.js +2 -0
  336. package/dist/core/web/public/next/assets/device-permissions-DpsJJcUW.js.map +1 -0
  337. package/dist/core/web/public/next/assets/devin-queries-BSEOfLuZ.js +2 -0
  338. package/dist/core/web/public/next/assets/devin-queries-BSEOfLuZ.js.map +1 -0
  339. package/dist/core/web/public/next/assets/dock-icons-DK7QcBXJ.js +2 -0
  340. package/dist/core/web/public/next/assets/dock-icons-DK7QcBXJ.js.map +1 -0
  341. package/dist/core/web/public/next/assets/dock-panes-DvQ6t4Nl.js +2 -0
  342. package/dist/core/web/public/next/assets/dock-panes-DvQ6t4Nl.js.map +1 -0
  343. package/dist/core/web/public/next/assets/fleet-control-queries-BL-Vlf85.js +2 -0
  344. package/dist/core/web/public/next/assets/fleet-control-queries-BL-Vlf85.js.map +1 -0
  345. package/dist/core/web/public/next/assets/fleet-queries-eacERnLm.js +2 -0
  346. package/dist/core/web/public/next/assets/fleet-queries-eacERnLm.js.map +1 -0
  347. package/dist/core/web/public/next/assets/fleet-state-DfKcuo4A.js +3 -0
  348. package/dist/core/web/public/next/assets/fleet-state-DfKcuo4A.js.map +1 -0
  349. package/dist/core/web/public/next/assets/focus-trap-BZeH0rVB.js +2 -0
  350. package/dist/core/web/public/next/assets/focus-trap-BZeH0rVB.js.map +1 -0
  351. package/dist/core/web/public/next/assets/git-model-C1I4z_iQ.js +5 -0
  352. package/dist/core/web/public/next/assets/git-model-C1I4z_iQ.js.map +1 -0
  353. package/dist/core/web/public/next/assets/global-w7KDTTi0.js +3 -0
  354. package/dist/core/web/public/next/assets/global-w7KDTTi0.js.map +1 -0
  355. package/dist/core/web/public/next/assets/guarded-action-J9umcJgI.js +3 -0
  356. package/dist/core/web/public/next/assets/guarded-action-J9umcJgI.js.map +1 -0
  357. package/dist/core/web/public/next/assets/guarded-runners-Da5yA9Im.js +2 -0
  358. package/dist/core/web/public/next/assets/guarded-runners-Da5yA9Im.js.map +1 -0
  359. package/dist/core/web/public/next/assets/health-queries-D3HgrdU_.js +2 -0
  360. package/dist/core/web/public/next/assets/health-queries-D3HgrdU_.js.map +1 -0
  361. package/dist/core/web/public/next/assets/icons-C3G-y5j2.js +2 -0
  362. package/dist/core/web/public/next/assets/icons-C3G-y5j2.js.map +1 -0
  363. package/dist/core/web/public/next/assets/index-BC5Uslm5.js +11 -0
  364. package/dist/core/web/public/next/assets/index-BC5Uslm5.js.map +1 -0
  365. package/dist/core/web/public/next/assets/jev-queries-D6JNU-s6.js +2 -0
  366. package/dist/core/web/public/next/assets/jev-queries-D6JNU-s6.js.map +1 -0
  367. package/dist/core/web/public/next/assets/ladder-queries-BnYWjJoi.js +2 -0
  368. package/dist/core/web/public/next/assets/ladder-queries-BnYWjJoi.js.map +1 -0
  369. package/dist/core/web/public/next/assets/leader-focus-C6LVWgYI.js +2 -0
  370. package/dist/core/web/public/next/assets/leader-focus-C6LVWgYI.js.map +1 -0
  371. package/dist/core/web/public/next/assets/live-model-BPyZCTr1.js +2 -0
  372. package/dist/core/web/public/next/assets/live-model-BPyZCTr1.js.map +1 -0
  373. package/dist/core/web/public/next/assets/mobile-actions-avKNGddD.js +2 -0
  374. package/dist/core/web/public/next/assets/mobile-actions-avKNGddD.js.map +1 -0
  375. package/dist/core/web/public/next/assets/mobile-toast-BqSzGmw1.js +2 -0
  376. package/dist/core/web/public/next/assets/mobile-toast-BqSzGmw1.js.map +1 -0
  377. package/dist/core/web/public/next/assets/multimodel-flows-DOHsEKUG.js +7 -0
  378. package/dist/core/web/public/next/assets/multimodel-flows-DOHsEKUG.js.map +1 -0
  379. package/dist/core/web/public/next/assets/multimodel-queries-xmBBUT6n.js +2 -0
  380. package/dist/core/web/public/next/assets/multimodel-queries-xmBBUT6n.js.map +1 -0
  381. package/dist/core/web/public/next/assets/mutations-CdLi0erM.js +2 -0
  382. package/dist/core/web/public/next/assets/mutations-CdLi0erM.js.map +1 -0
  383. package/dist/core/web/public/next/assets/nav-CUXtg-Iw.js +2 -0
  384. package/dist/core/web/public/next/assets/nav-CUXtg-Iw.js.map +1 -0
  385. package/dist/core/web/public/next/assets/needs-you-actions-B2tjWO-0.js +2 -0
  386. package/dist/core/web/public/next/assets/needs-you-actions-B2tjWO-0.js.map +1 -0
  387. package/dist/core/web/public/next/assets/needs-you-model-DL9EEd2L.js +2 -0
  388. package/dist/core/web/public/next/assets/needs-you-model-DL9EEd2L.js.map +1 -0
  389. package/dist/core/web/public/next/assets/open-terminal-BfbxGoYQ.js +2 -0
  390. package/dist/core/web/public/next/assets/open-terminal-BfbxGoYQ.js.map +1 -0
  391. package/dist/core/web/public/next/assets/open-terminal-request-BT1UE0fz.js +2 -0
  392. package/dist/core/web/public/next/assets/open-terminal-request-BT1UE0fz.js.map +1 -0
  393. package/dist/core/web/public/next/assets/overnight-queries-cjjogTzn.js +2 -0
  394. package/dist/core/web/public/next/assets/overnight-queries-cjjogTzn.js.map +1 -0
  395. package/dist/core/web/public/next/assets/palette-handoff-XL2WWc9I.js +2 -0
  396. package/dist/core/web/public/next/assets/palette-handoff-XL2WWc9I.js.map +1 -0
  397. package/dist/core/web/public/next/assets/panes-5GU8cuI9.js +3 -0
  398. package/dist/core/web/public/next/assets/panes-5GU8cuI9.js.map +1 -0
  399. package/dist/core/web/public/next/assets/path-display-ZSzKoo8T.js +2 -0
  400. package/dist/core/web/public/next/assets/path-display-ZSzKoo8T.js.map +1 -0
  401. package/dist/core/web/public/next/assets/playbook-composer-D04tqOmU.js +2 -0
  402. package/dist/core/web/public/next/assets/playbook-composer-D04tqOmU.js.map +1 -0
  403. package/dist/core/web/public/next/assets/playbook-focus-DD1VIfkd.js +2 -0
  404. package/dist/core/web/public/next/assets/playbook-focus-DD1VIfkd.js.map +1 -0
  405. package/dist/core/web/public/next/assets/playbooks-queries-X7NGzpIn.js +2 -0
  406. package/dist/core/web/public/next/assets/playbooks-queries-X7NGzpIn.js.map +1 -0
  407. package/dist/core/web/public/next/assets/preloaded-6hKNGuRp.js +2 -0
  408. package/dist/core/web/public/next/assets/preloaded-6hKNGuRp.js.map +1 -0
  409. package/dist/core/web/public/next/assets/primitives-6nAFZkcg.js +1 -0
  410. package/dist/core/web/public/next/assets/pwa-BzXJXtDt.js +2 -0
  411. package/dist/core/web/public/next/assets/pwa-BzXJXtDt.js.map +1 -0
  412. package/dist/core/web/public/next/assets/queries-PgZlvFqO.js +2 -0
  413. package/dist/core/web/public/next/assets/queries-PgZlvFqO.js.map +1 -0
  414. package/dist/core/web/public/next/assets/reasoning-pref-BS0PSZ8d.js +2 -0
  415. package/dist/core/web/public/next/assets/reasoning-pref-BS0PSZ8d.js.map +1 -0
  416. package/dist/core/web/public/next/assets/remote-session-Bu-dtRcS.js +3 -0
  417. package/dist/core/web/public/next/assets/remote-session-Bu-dtRcS.js.map +1 -0
  418. package/dist/core/web/public/next/assets/resolved-store-UYN2k9My.js +2 -0
  419. package/dist/core/web/public/next/assets/resolved-store-UYN2k9My.js.map +1 -0
  420. package/dist/core/web/public/next/assets/resources-queries-XfQ8w9In.js +2 -0
  421. package/dist/core/web/public/next/assets/resources-queries-XfQ8w9In.js.map +1 -0
  422. package/dist/core/web/public/next/assets/reveal-anchor-3ZUTtB8Q.js +2 -0
  423. package/dist/core/web/public/next/assets/reveal-anchor-3ZUTtB8Q.js.map +1 -0
  424. package/dist/core/web/public/next/assets/sheet-DP8ByDWU.js +2 -0
  425. package/dist/core/web/public/next/assets/sheet-DP8ByDWU.js.map +1 -0
  426. package/dist/core/web/public/next/assets/slots-DWlj_c7i.js +3 -0
  427. package/dist/core/web/public/next/assets/slots-DWlj_c7i.js.map +1 -0
  428. package/dist/core/web/public/next/assets/sources-queries-Cjk1rpDU.js +4 -0
  429. package/dist/core/web/public/next/assets/sources-queries-Cjk1rpDU.js.map +1 -0
  430. package/dist/core/web/public/next/assets/sse-Z3U8XhDI.js +2 -0
  431. package/dist/core/web/public/next/assets/sse-Z3U8XhDI.js.map +1 -0
  432. package/dist/core/web/public/next/assets/surface-data-hufdOfpz.js +2 -0
  433. package/dist/core/web/public/next/assets/surface-data-hufdOfpz.js.map +1 -0
  434. package/dist/core/web/public/next/assets/surface-prefetch-CFtP8imB.js +2 -0
  435. package/dist/core/web/public/next/assets/surface-prefetch-CFtP8imB.js.map +1 -0
  436. package/dist/core/web/public/next/assets/terminal-client-CCSvMeEv.js +2 -0
  437. package/dist/core/web/public/next/assets/terminal-client-CCSvMeEv.js.map +1 -0
  438. package/dist/core/web/public/next/assets/terminal-icons-Dx6neM-J.js +2 -0
  439. package/dist/core/web/public/next/assets/terminal-icons-Dx6neM-J.js.map +1 -0
  440. package/dist/core/web/public/next/assets/terminal-view-BSieiQvi.js +6 -0
  441. package/dist/core/web/public/next/assets/terminal-view-BSieiQvi.js.map +1 -0
  442. package/dist/core/web/public/next/assets/thread-data-Cd2DZffn.js +2 -0
  443. package/dist/core/web/public/next/assets/thread-data-Cd2DZffn.js.map +1 -0
  444. package/dist/core/web/public/next/assets/ui-parts-wvov2ktB.js +2 -0
  445. package/dist/core/web/public/next/assets/ui-parts-wvov2ktB.js.map +1 -0
  446. package/dist/core/web/public/next/assets/usage-queries-nZjJ1aky.js +2 -0
  447. package/dist/core/web/public/next/assets/usage-queries-nZjJ1aky.js.map +1 -0
  448. package/dist/core/web/public/next/assets/use-chat-activity-_tBmEPPN.js +2 -0
  449. package/dist/core/web/public/next/assets/use-chat-activity-_tBmEPPN.js.map +1 -0
  450. package/dist/core/web/public/next/assets/use-guarded-action-DKKjhPKG.js +2 -0
  451. package/dist/core/web/public/next/assets/use-guarded-action-DKKjhPKG.js.map +1 -0
  452. package/dist/core/web/public/next/assets/use-ticker-w1c3SOqK.js +2 -0
  453. package/dist/core/web/public/next/assets/use-ticker-w1c3SOqK.js.map +1 -0
  454. package/dist/core/web/public/next/assets/use-token-gate-h5QAERLT.js +2 -0
  455. package/dist/core/web/public/next/assets/use-token-gate-h5QAERLT.js.map +1 -0
  456. package/dist/core/web/public/next/assets/useAutoSeat-Dpbn0XUv.js +2 -0
  457. package/dist/core/web/public/next/assets/useAutoSeat-Dpbn0XUv.js.map +1 -0
  458. package/dist/core/web/public/next/assets/useOnboarding-VoV1LcuJ.js +2 -0
  459. package/dist/core/web/public/next/assets/useOnboarding-VoV1LcuJ.js.map +1 -0
  460. package/dist/core/web/public/next/assets/useSeatHealth-DuSaKdIs.js +2 -0
  461. package/dist/core/web/public/next/assets/useSeatHealth-DuSaKdIs.js.map +1 -0
  462. package/dist/core/web/public/next/assets/useSeatsRefresh-DFaR1jSz.js +2 -0
  463. package/dist/core/web/public/next/assets/useSeatsRefresh-DFaR1jSz.js.map +1 -0
  464. package/dist/core/web/public/next/assets/useVerseSession-BOsgJzT5.js +2 -0
  465. package/dist/core/web/public/next/assets/useVerseSession-BOsgJzT5.js.map +1 -0
  466. package/dist/core/web/public/next/assets/useVerseTranscript-BN_fMz6x.js +2 -0
  467. package/dist/core/web/public/next/assets/useVerseTranscript-BN_fMz6x.js.map +1 -0
  468. package/dist/core/web/public/next/assets/verse-bootstrap-query-B3vFD9XK.js +2 -0
  469. package/dist/core/web/public/next/assets/verse-bootstrap-query-B3vFD9XK.js.map +1 -0
  470. package/dist/core/web/public/next/assets/verse-icons-vSkflmRB.js +2 -0
  471. package/dist/core/web/public/next/assets/verse-icons-vSkflmRB.js.map +1 -0
  472. package/dist/core/web/public/next/assets/warmup-D9MjYs5S.js +3 -0
  473. package/dist/core/web/public/next/assets/warmup-D9MjYs5S.js.map +1 -0
  474. package/dist/core/web/public/next/assets/wiki-focus-De8-E48Z.js +2 -0
  475. package/dist/core/web/public/next/assets/wiki-focus-De8-E48Z.js.map +1 -0
  476. package/dist/core/web/public/next/index.html +1 -1
  477. package/dist/release-dependency-inventory.json +1 -1
  478. package/package.json +1 -1
  479. package/dist/core/web/public/next/assets/ActionMenu-CebJFKYy.js +0 -2
  480. package/dist/core/web/public/next/assets/ActionMenu-CebJFKYy.js.map +0 -1
  481. package/dist/core/web/public/next/assets/Advanced-Dr9aVbXV.js +0 -2
  482. package/dist/core/web/public/next/assets/Advanced-Dr9aVbXV.js.map +0 -1
  483. package/dist/core/web/public/next/assets/AgentDetailScreen-DCVf81Vo.js +0 -2
  484. package/dist/core/web/public/next/assets/AgentDetailScreen-DCVf81Vo.js.map +0 -1
  485. package/dist/core/web/public/next/assets/AgentToolsSheet-C3SbvEiV.js +0 -2
  486. package/dist/core/web/public/next/assets/AgentToolsSheet-C3SbvEiV.js.map +0 -1
  487. package/dist/core/web/public/next/assets/AgentToolsStrip-CZNxj_Iv.js +0 -2
  488. package/dist/core/web/public/next/assets/AgentToolsStrip-CZNxj_Iv.js.map +0 -1
  489. package/dist/core/web/public/next/assets/AgentsScreen-zLj4gzPR.js +0 -2
  490. package/dist/core/web/public/next/assets/AgentsScreen-zLj4gzPR.js.map +0 -1
  491. package/dist/core/web/public/next/assets/AgentsSection-CIo_nRmi.js +0 -3
  492. package/dist/core/web/public/next/assets/AgentsSection-CIo_nRmi.js.map +0 -1
  493. package/dist/core/web/public/next/assets/App-CPKNuUdC.js +0 -8
  494. package/dist/core/web/public/next/assets/App-CPKNuUdC.js.map +0 -1
  495. package/dist/core/web/public/next/assets/AppsSection-D2F2CM-E.js +0 -2
  496. package/dist/core/web/public/next/assets/AppsSection-D2F2CM-E.js.map +0 -1
  497. package/dist/core/web/public/next/assets/AreaTrend-DiZu8bjc.js +0 -2
  498. package/dist/core/web/public/next/assets/AreaTrend-DiZu8bjc.js.map +0 -1
  499. package/dist/core/web/public/next/assets/AutomationsSection-B4rBNUyo.js +0 -2
  500. package/dist/core/web/public/next/assets/AutomationsSection-B4rBNUyo.js.map +0 -1
  501. package/dist/core/web/public/next/assets/AutonomyOffState-DEznxI-Q.js +0 -3
  502. package/dist/core/web/public/next/assets/AutonomyOffState-DEznxI-Q.js.map +0 -1
  503. package/dist/core/web/public/next/assets/AutonomySection-Dq5n3gs7.js +0 -2
  504. package/dist/core/web/public/next/assets/AutonomySection-Dq5n3gs7.js.map +0 -1
  505. package/dist/core/web/public/next/assets/AutonomyStatus-Uydy6-pZ.js +0 -2
  506. package/dist/core/web/public/next/assets/AutonomyStatus-Uydy6-pZ.js.map +0 -1
  507. package/dist/core/web/public/next/assets/BranchBar-BzUmUM_j.js +0 -2
  508. package/dist/core/web/public/next/assets/BranchBar-BzUmUM_j.js.map +0 -1
  509. package/dist/core/web/public/next/assets/BrowserPanel-C_VI6Awi.js +0 -7
  510. package/dist/core/web/public/next/assets/BrowserPanel-C_VI6Awi.js.map +0 -1
  511. package/dist/core/web/public/next/assets/BudgetControl-B23rNAuC.js +0 -2
  512. package/dist/core/web/public/next/assets/BudgetControl-B23rNAuC.js.map +0 -1
  513. package/dist/core/web/public/next/assets/Button-DJY_Pu5B.js +0 -2
  514. package/dist/core/web/public/next/assets/Button-DJY_Pu5B.js.map +0 -1
  515. package/dist/core/web/public/next/assets/CapacityStrip-B5Yj2PhZ.js +0 -2
  516. package/dist/core/web/public/next/assets/CapacityStrip-B5Yj2PhZ.js.map +0 -1
  517. package/dist/core/web/public/next/assets/ChangesPaneHost-LsUonc7P.js +0 -16
  518. package/dist/core/web/public/next/assets/ChangesPaneHost-LsUonc7P.js.map +0 -1
  519. package/dist/core/web/public/next/assets/ChartFrame-CakjKkPx.js +0 -2
  520. package/dist/core/web/public/next/assets/ChartFrame-CakjKkPx.js.map +0 -1
  521. package/dist/core/web/public/next/assets/ChatPanes-DgKskpXb.js +0 -2
  522. package/dist/core/web/public/next/assets/ChatPanes-DgKskpXb.js.map +0 -1
  523. package/dist/core/web/public/next/assets/ChatSection-DXpzV1NW.js +0 -3
  524. package/dist/core/web/public/next/assets/ChatSection-DXpzV1NW.js.map +0 -1
  525. package/dist/core/web/public/next/assets/ChecksPanel-BeCJVOJC.js +0 -5
  526. package/dist/core/web/public/next/assets/ChecksPanel-BeCJVOJC.js.map +0 -1
  527. package/dist/core/web/public/next/assets/CloudBudgetForm-4SWIGJLs.js +0 -2
  528. package/dist/core/web/public/next/assets/CloudBudgetForm-4SWIGJLs.js.map +0 -1
  529. package/dist/core/web/public/next/assets/CommandPalette-B4QaFGY5.js +0 -3
  530. package/dist/core/web/public/next/assets/CommandPalette-B4QaFGY5.js.map +0 -1
  531. package/dist/core/web/public/next/assets/CommandSection-8TFjYitt.js +0 -3
  532. package/dist/core/web/public/next/assets/CommandSection-8TFjYitt.js.map +0 -1
  533. package/dist/core/web/public/next/assets/CommandWorkflowForm-B2ooVjof.js +0 -9
  534. package/dist/core/web/public/next/assets/CommandWorkflowForm-B2ooVjof.js.map +0 -1
  535. package/dist/core/web/public/next/assets/CommandWorkflowPicker-C09vJiUG.js +0 -3
  536. package/dist/core/web/public/next/assets/CommandWorkflowPicker-C09vJiUG.js.map +0 -1
  537. package/dist/core/web/public/next/assets/CompareDialog-CaopnGI0.js +0 -4
  538. package/dist/core/web/public/next/assets/CompareDialog-CaopnGI0.js.map +0 -1
  539. package/dist/core/web/public/next/assets/ComputerControl-BflC6wd1.js +0 -2
  540. package/dist/core/web/public/next/assets/ComputerControl-BflC6wd1.js.map +0 -1
  541. package/dist/core/web/public/next/assets/ConfirmDialog-CTeMFavv.js +0 -2
  542. package/dist/core/web/public/next/assets/ConfirmDialog-CTeMFavv.js.map +0 -1
  543. package/dist/core/web/public/next/assets/DeleteChatDialog-B2bUTuZ9.js +0 -2
  544. package/dist/core/web/public/next/assets/DeleteChatDialog-B2bUTuZ9.js.map +0 -1
  545. package/dist/core/web/public/next/assets/DevinStopDialog-DPP34cna.js +0 -2
  546. package/dist/core/web/public/next/assets/DevinStopDialog-DPP34cna.js.map +0 -1
  547. package/dist/core/web/public/next/assets/Dialog-r4j4R4b6.js +0 -2
  548. package/dist/core/web/public/next/assets/Dialog-r4j4R4b6.js.map +0 -1
  549. package/dist/core/web/public/next/assets/DiffPane-CKnpzqaU.js +0 -2
  550. package/dist/core/web/public/next/assets/DiffPane-CKnpzqaU.js.map +0 -1
  551. package/dist/core/web/public/next/assets/DiffViewer-BzQ7245p.js +0 -2
  552. package/dist/core/web/public/next/assets/DiffViewer-BzQ7245p.js.map +0 -1
  553. package/dist/core/web/public/next/assets/DockHost-BCZtC_lm.js +0 -2
  554. package/dist/core/web/public/next/assets/DockHost-BCZtC_lm.js.map +0 -1
  555. package/dist/core/web/public/next/assets/EmptyState-Cwpga8L9.js +0 -2
  556. package/dist/core/web/public/next/assets/EmptyState-Cwpga8L9.js.map +0 -1
  557. package/dist/core/web/public/next/assets/Epistemic-BBwXv-C1.js +0 -2
  558. package/dist/core/web/public/next/assets/Epistemic-BBwXv-C1.js.map +0 -1
  559. package/dist/core/web/public/next/assets/EvidenceTimeline-hAENJQCa.js +0 -2
  560. package/dist/core/web/public/next/assets/EvidenceTimeline-hAENJQCa.js.map +0 -1
  561. package/dist/core/web/public/next/assets/FilesPane-CrPN5zlx.js +0 -2
  562. package/dist/core/web/public/next/assets/FilesPane-CrPN5zlx.js.map +0 -1
  563. package/dist/core/web/public/next/assets/FleetScreen-Cz9HQ-st.js +0 -2
  564. package/dist/core/web/public/next/assets/FleetScreen-Cz9HQ-st.js.map +0 -1
  565. package/dist/core/web/public/next/assets/FleetSection-CmZKQ1rr.js +0 -5
  566. package/dist/core/web/public/next/assets/FleetSection-CmZKQ1rr.js.map +0 -1
  567. package/dist/core/web/public/next/assets/Funnel-Cfg55EZp.js +0 -2
  568. package/dist/core/web/public/next/assets/Funnel-Cfg55EZp.js.map +0 -1
  569. package/dist/core/web/public/next/assets/GearTray-D-Mhc8TJ.js +0 -2
  570. package/dist/core/web/public/next/assets/GearTray-D-Mhc8TJ.js.map +0 -1
  571. package/dist/core/web/public/next/assets/GitDialogs-e-7RQEGv.js +0 -2
  572. package/dist/core/web/public/next/assets/GitDialogs-e-7RQEGv.js.map +0 -1
  573. package/dist/core/web/public/next/assets/GrowthSection-DsIrdTDd.js +0 -3
  574. package/dist/core/web/public/next/assets/GrowthSection-DsIrdTDd.js.map +0 -1
  575. package/dist/core/web/public/next/assets/HandoffDialog-1MB2fmT1.js +0 -2
  576. package/dist/core/web/public/next/assets/HandoffDialog-1MB2fmT1.js.map +0 -1
  577. package/dist/core/web/public/next/assets/HomeBody-n_t3A58_.js +0 -3
  578. package/dist/core/web/public/next/assets/HomeBody-n_t3A58_.js.map +0 -1
  579. package/dist/core/web/public/next/assets/HomeSeats-DA66aOWC.js +0 -2
  580. package/dist/core/web/public/next/assets/HomeSeats-DA66aOWC.js.map +0 -1
  581. package/dist/core/web/public/next/assets/Input-Bt6fp051.js +0 -2
  582. package/dist/core/web/public/next/assets/Input-Bt6fp051.js.map +0 -1
  583. package/dist/core/web/public/next/assets/LaunchDialog-BCd7XqCv.js +0 -9
  584. package/dist/core/web/public/next/assets/LaunchDialog-BCd7XqCv.js.map +0 -1
  585. package/dist/core/web/public/next/assets/LeaderCard-DFAFcyfZ.js +0 -2
  586. package/dist/core/web/public/next/assets/LeaderCard-DFAFcyfZ.js.map +0 -1
  587. package/dist/core/web/public/next/assets/LeaderConversation-LSenfZzT.js +0 -3
  588. package/dist/core/web/public/next/assets/LeaderConversation-LSenfZzT.js.map +0 -1
  589. package/dist/core/web/public/next/assets/LeaderScreen-B2UxRWUm.js +0 -2
  590. package/dist/core/web/public/next/assets/LeaderScreen-B2UxRWUm.js.map +0 -1
  591. package/dist/core/web/public/next/assets/LessonsPanel-D86ZT0we.js +0 -2
  592. package/dist/core/web/public/next/assets/LessonsPanel-D86ZT0we.js.map +0 -1
  593. package/dist/core/web/public/next/assets/LiveTimer-AtG5hPwV.js +0 -2
  594. package/dist/core/web/public/next/assets/LiveTimer-AtG5hPwV.js.map +0 -1
  595. package/dist/core/web/public/next/assets/LocalSeatBadge-XfGRZCA3.js +0 -2
  596. package/dist/core/web/public/next/assets/LocalSeatBadge-XfGRZCA3.js.map +0 -1
  597. package/dist/core/web/public/next/assets/MatrixHeatmap-PSnyMJ2h.js +0 -2
  598. package/dist/core/web/public/next/assets/MatrixHeatmap-PSnyMJ2h.js.map +0 -1
  599. package/dist/core/web/public/next/assets/McpSection-BG2FSkgH.js +0 -2
  600. package/dist/core/web/public/next/assets/McpSection-BG2FSkgH.js.map +0 -1
  601. package/dist/core/web/public/next/assets/MessageMarkdown-CQEqoMvf.js +0 -3
  602. package/dist/core/web/public/next/assets/MessageMarkdown-CQEqoMvf.js.map +0 -1
  603. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DU-VLDhb.js +0 -72
  604. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DU-VLDhb.js.map +0 -1
  605. package/dist/core/web/public/next/assets/Meter-BfaE-BjY.js +0 -2
  606. package/dist/core/web/public/next/assets/Meter-BfaE-BjY.js.map +0 -1
  607. package/dist/core/web/public/next/assets/MicButton-BbGB7y_9.js +0 -2
  608. package/dist/core/web/public/next/assets/MicButton-BbGB7y_9.js.map +0 -1
  609. package/dist/core/web/public/next/assets/MindSection-CX0VaHo1.js +0 -3
  610. package/dist/core/web/public/next/assets/MindSection-CX0VaHo1.js.map +0 -1
  611. package/dist/core/web/public/next/assets/MobileComposer-CFeLWUCz.js +0 -2
  612. package/dist/core/web/public/next/assets/MobileComposer-CFeLWUCz.js.map +0 -1
  613. package/dist/core/web/public/next/assets/MobileGuardSheet-cGW9RCTr.js +0 -2
  614. package/dist/core/web/public/next/assets/MobileGuardSheet-cGW9RCTr.js.map +0 -1
  615. package/dist/core/web/public/next/assets/MobileRuntime-BWTZ_QLr.js +0 -3
  616. package/dist/core/web/public/next/assets/MobileRuntime-BWTZ_QLr.js.map +0 -1
  617. package/dist/core/web/public/next/assets/MoreScreen-BcHZhVrR.js +0 -2
  618. package/dist/core/web/public/next/assets/MoreScreen-BcHZhVrR.js.map +0 -1
  619. package/dist/core/web/public/next/assets/MultiModelBar-COxIRv7m.js +0 -7
  620. package/dist/core/web/public/next/assets/MultiModelBar-COxIRv7m.js.map +0 -1
  621. package/dist/core/web/public/next/assets/MutationTokenDialog-Dnf_rcnc.js +0 -2
  622. package/dist/core/web/public/next/assets/MutationTokenDialog-Dnf_rcnc.js.map +0 -1
  623. package/dist/core/web/public/next/assets/NeedsYouDrawer-COrUlnd0.js +0 -3
  624. package/dist/core/web/public/next/assets/NeedsYouDrawer-COrUlnd0.js.map +0 -1
  625. package/dist/core/web/public/next/assets/NeedsYouList-AXzOe4EL.js +0 -2
  626. package/dist/core/web/public/next/assets/NeedsYouList-AXzOe4EL.js.map +0 -1
  627. package/dist/core/web/public/next/assets/NeedsYouScreen-HSXybHgd.js +0 -2
  628. package/dist/core/web/public/next/assets/NeedsYouScreen-HSXybHgd.js.map +0 -1
  629. package/dist/core/web/public/next/assets/NewAgentScreen-BI849ZsG.js +0 -2
  630. package/dist/core/web/public/next/assets/NewAgentScreen-BI849ZsG.js.map +0 -1
  631. package/dist/core/web/public/next/assets/NewChatDialog-BHoCnP6Q.js +0 -4
  632. package/dist/core/web/public/next/assets/NewChatDialog-BHoCnP6Q.js.map +0 -1
  633. package/dist/core/web/public/next/assets/OnboardingFlow-BVljU2uy.js +0 -3
  634. package/dist/core/web/public/next/assets/OnboardingFlow-BVljU2uy.js.map +0 -1
  635. package/dist/core/web/public/next/assets/OnboardingGate-DlI4L7Ki.js +0 -3
  636. package/dist/core/web/public/next/assets/OnboardingGate-DlI4L7Ki.js.map +0 -1
  637. package/dist/core/web/public/next/assets/PlaybooksSection-hhNpXnsR.js +0 -9
  638. package/dist/core/web/public/next/assets/PlaybooksSection-hhNpXnsR.js.map +0 -1
  639. package/dist/core/web/public/next/assets/PreviewPane-BbXr63u2.js +0 -2
  640. package/dist/core/web/public/next/assets/PreviewPane-BbXr63u2.js.map +0 -1
  641. package/dist/core/web/public/next/assets/ProviderLogo-BliSWEMw.js +0 -2
  642. package/dist/core/web/public/next/assets/ProviderLogo-BliSWEMw.js.map +0 -1
  643. package/dist/core/web/public/next/assets/RailStatus-SnrVxLnp.js +0 -2
  644. package/dist/core/web/public/next/assets/RailStatus-SnrVxLnp.js.map +0 -1
  645. package/dist/core/web/public/next/assets/ReasoningPane-C04_bOAi.js +0 -2
  646. package/dist/core/web/public/next/assets/ReasoningPane-C04_bOAi.js.map +0 -1
  647. package/dist/core/web/public/next/assets/ReasoningSheet-BvNFwtuX.js +0 -2
  648. package/dist/core/web/public/next/assets/ReasoningSheet-BvNFwtuX.js.map +0 -1
  649. package/dist/core/web/public/next/assets/RefreshIndicator-BNptNJiV.js +0 -2
  650. package/dist/core/web/public/next/assets/RefreshIndicator-BNptNJiV.js.map +0 -1
  651. package/dist/core/web/public/next/assets/RemoteMobileApp-osaSEvnm.js +0 -2
  652. package/dist/core/web/public/next/assets/RemoteMobileApp-osaSEvnm.js.map +0 -1
  653. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-LO31zjUR.js +0 -7
  654. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-LO31zjUR.js.map +0 -1
  655. package/dist/core/web/public/next/assets/ResourcesChrome-ByZE532G.js +0 -3
  656. package/dist/core/web/public/next/assets/ResourcesChrome-ByZE532G.js.map +0 -1
  657. package/dist/core/web/public/next/assets/ResourcesChrome-p_VCkMZH.css +0 -1
  658. package/dist/core/web/public/next/assets/ResourcesDrawer-BH9uwNE8.js +0 -3
  659. package/dist/core/web/public/next/assets/ResourcesDrawer-BH9uwNE8.js.map +0 -1
  660. package/dist/core/web/public/next/assets/ReviewMenu-B2A_YDPi.js +0 -2
  661. package/dist/core/web/public/next/assets/ReviewMenu-B2A_YDPi.js.map +0 -1
  662. package/dist/core/web/public/next/assets/RouteErrorBoundary-CVabFM97.js +0 -2
  663. package/dist/core/web/public/next/assets/RouteErrorBoundary-CVabFM97.js.map +0 -1
  664. package/dist/core/web/public/next/assets/RunInCloudAction-BpNHE7m8.js +0 -2
  665. package/dist/core/web/public/next/assets/RunInCloudAction-BpNHE7m8.js.map +0 -1
  666. package/dist/core/web/public/next/assets/RunInDevinAction-Bkf5Gb3a.js +0 -2
  667. package/dist/core/web/public/next/assets/RunInDevinAction-Bkf5Gb3a.js.map +0 -1
  668. package/dist/core/web/public/next/assets/SchedulingEvidence-B08-qhhm.js +0 -2
  669. package/dist/core/web/public/next/assets/SchedulingEvidence-B08-qhhm.js.map +0 -1
  670. package/dist/core/web/public/next/assets/ScreenHost-BGSxFyWK.js +0 -3
  671. package/dist/core/web/public/next/assets/ScreenHost-BGSxFyWK.js.map +0 -1
  672. package/dist/core/web/public/next/assets/SeatSelector-B4lRZl0K.js +0 -3
  673. package/dist/core/web/public/next/assets/SeatSelector-B4lRZl0K.js.map +0 -1
  674. package/dist/core/web/public/next/assets/Segmented-Dokzywy8.js +0 -2
  675. package/dist/core/web/public/next/assets/Segmented-Dokzywy8.js.map +0 -1
  676. package/dist/core/web/public/next/assets/Select-tf4lNvWD.js +0 -2
  677. package/dist/core/web/public/next/assets/Select-tf4lNvWD.js.map +0 -1
  678. package/dist/core/web/public/next/assets/SessionGate-Bab2qO29.js +0 -2
  679. package/dist/core/web/public/next/assets/SessionGate-Bab2qO29.js.map +0 -1
  680. package/dist/core/web/public/next/assets/SessionInsightChip-C-fj8h4A.js +0 -2
  681. package/dist/core/web/public/next/assets/SessionInsightChip-C-fj8h4A.js.map +0 -1
  682. package/dist/core/web/public/next/assets/SessionSearch-CqjjwOW2.js +0 -2
  683. package/dist/core/web/public/next/assets/SessionSearch-CqjjwOW2.js.map +0 -1
  684. package/dist/core/web/public/next/assets/SettingsSection-DfOsHzl6.js +0 -2
  685. package/dist/core/web/public/next/assets/SettingsSection-DfOsHzl6.js.map +0 -1
  686. package/dist/core/web/public/next/assets/SetupChecklist-BsxCTcYY.js +0 -2
  687. package/dist/core/web/public/next/assets/SetupChecklist-BsxCTcYY.js.map +0 -1
  688. package/dist/core/web/public/next/assets/ShadowDecisions-B1ZPv7K-.js +0 -3
  689. package/dist/core/web/public/next/assets/ShadowDecisions-B1ZPv7K-.js.map +0 -1
  690. package/dist/core/web/public/next/assets/Sheet-DLlZ00Lu.js +0 -2
  691. package/dist/core/web/public/next/assets/Sheet-DLlZ00Lu.js.map +0 -1
  692. package/dist/core/web/public/next/assets/ShortcutsOverlay-CDwQdpGV.js +0 -2
  693. package/dist/core/web/public/next/assets/ShortcutsOverlay-CDwQdpGV.js.map +0 -1
  694. package/dist/core/web/public/next/assets/Sidebar-H5WNri2S.js +0 -3
  695. package/dist/core/web/public/next/assets/Sidebar-H5WNri2S.js.map +0 -1
  696. package/dist/core/web/public/next/assets/SkipToContent-BjJE6yOo.js +0 -2
  697. package/dist/core/web/public/next/assets/SkipToContent-BjJE6yOo.js.map +0 -1
  698. package/dist/core/web/public/next/assets/Slider-C68TumXj.js +0 -2
  699. package/dist/core/web/public/next/assets/Slider-C68TumXj.js.map +0 -1
  700. package/dist/core/web/public/next/assets/SourcesPane-DHYs4YIg.js +0 -2
  701. package/dist/core/web/public/next/assets/SourcesPane-DHYs4YIg.js.map +0 -1
  702. package/dist/core/web/public/next/assets/SourcesPanel-DFyLfYBO.js +0 -2
  703. package/dist/core/web/public/next/assets/SourcesPanel-DFyLfYBO.js.map +0 -1
  704. package/dist/core/web/public/next/assets/StatTile-CTUuhOLS.js +0 -2
  705. package/dist/core/web/public/next/assets/StatTile-CTUuhOLS.js.map +0 -1
  706. package/dist/core/web/public/next/assets/StatusBadge-DrVbi5dF.js +0 -2
  707. package/dist/core/web/public/next/assets/StatusBadge-DrVbi5dF.js.map +0 -1
  708. package/dist/core/web/public/next/assets/StepBand-CXDpnu2R.js +0 -2
  709. package/dist/core/web/public/next/assets/StepBand-CXDpnu2R.js.map +0 -1
  710. package/dist/core/web/public/next/assets/Surface-DCL7uORg.js +0 -2
  711. package/dist/core/web/public/next/assets/Surface-DCL7uORg.js.map +0 -1
  712. package/dist/core/web/public/next/assets/Swimlane-BAEjfoVU.js +0 -2
  713. package/dist/core/web/public/next/assets/Swimlane-BAEjfoVU.js.map +0 -1
  714. package/dist/core/web/public/next/assets/Switch-Z7RmRjWE.js +0 -2
  715. package/dist/core/web/public/next/assets/Switch-Z7RmRjWE.js.map +0 -1
  716. package/dist/core/web/public/next/assets/Tag-Ciht3C94.js +0 -2
  717. package/dist/core/web/public/next/assets/Tag-Ciht3C94.js.map +0 -1
  718. package/dist/core/web/public/next/assets/TerminalPane-BdIyhtzJ.js +0 -26
  719. package/dist/core/web/public/next/assets/TerminalPane-BdIyhtzJ.js.map +0 -1
  720. package/dist/core/web/public/next/assets/TerminalPane-DJKT600N.js +0 -3
  721. package/dist/core/web/public/next/assets/TerminalPane-DJKT600N.js.map +0 -1
  722. package/dist/core/web/public/next/assets/ThinkingBlock-CHRZX_fJ.js +0 -2
  723. package/dist/core/web/public/next/assets/ThinkingBlock-CHRZX_fJ.js.map +0 -1
  724. package/dist/core/web/public/next/assets/UniverseConsoleApp-QSoaY_Fk.js +0 -2
  725. package/dist/core/web/public/next/assets/UniverseConsoleApp-QSoaY_Fk.js.map +0 -1
  726. package/dist/core/web/public/next/assets/UniverseView-ZXAOJ0Rq.js +0 -9
  727. package/dist/core/web/public/next/assets/UniverseView-ZXAOJ0Rq.js.map +0 -1
  728. package/dist/core/web/public/next/assets/UsageSection-BEAa-W_q.js +0 -3
  729. package/dist/core/web/public/next/assets/UsageSection-BEAa-W_q.js.map +0 -1
  730. package/dist/core/web/public/next/assets/UsePlaybookAction-S7Yky_M8.js +0 -2
  731. package/dist/core/web/public/next/assets/UsePlaybookAction-S7Yky_M8.js.map +0 -1
  732. package/dist/core/web/public/next/assets/VerseConsoleApp-Cj6yPJo3.js +0 -3
  733. package/dist/core/web/public/next/assets/VerseConsoleApp-Cj6yPJo3.js.map +0 -1
  734. package/dist/core/web/public/next/assets/VerseConsoleApp-n6qr3lCF.css +0 -1
  735. package/dist/core/web/public/next/assets/VerseMobileApp-BRayqF_2.js +0 -3
  736. package/dist/core/web/public/next/assets/VerseMobileApp-BRayqF_2.js.map +0 -1
  737. package/dist/core/web/public/next/assets/VerseShared-CH8mV5ew.js +0 -2
  738. package/dist/core/web/public/next/assets/VerseShared-CH8mV5ew.js.map +0 -1
  739. package/dist/core/web/public/next/assets/VoiceHud-CO4yGRlr.js +0 -2
  740. package/dist/core/web/public/next/assets/VoiceHud-CO4yGRlr.js.map +0 -1
  741. package/dist/core/web/public/next/assets/VoiceInput-fSLnbGJ4.js +0 -2
  742. package/dist/core/web/public/next/assets/VoiceInput-fSLnbGJ4.js.map +0 -1
  743. package/dist/core/web/public/next/assets/WikiSection-CN-HansV.js +0 -2
  744. package/dist/core/web/public/next/assets/WikiSection-CN-HansV.js.map +0 -1
  745. package/dist/core/web/public/next/assets/Workspace-dufi6DmW.js +0 -6
  746. package/dist/core/web/public/next/assets/Workspace-dufi6DmW.js.map +0 -1
  747. package/dist/core/web/public/next/assets/actions-gBplqbpY.js +0 -2
  748. package/dist/core/web/public/next/assets/actions-gBplqbpY.js.map +0 -1
  749. package/dist/core/web/public/next/assets/agent-tools-client-ClFut2J1.js +0 -2
  750. package/dist/core/web/public/next/assets/agent-tools-client-ClFut2J1.js.map +0 -1
  751. package/dist/core/web/public/next/assets/agents-focus-DjBz83BQ.js +0 -2
  752. package/dist/core/web/public/next/assets/agents-focus-DjBz83BQ.js.map +0 -1
  753. package/dist/core/web/public/next/assets/app-version-B0FcXqqB.js +0 -2
  754. package/dist/core/web/public/next/assets/app-version-B0FcXqqB.js.map +0 -1
  755. package/dist/core/web/public/next/assets/apps-model-C-SdWY0N.js +0 -2
  756. package/dist/core/web/public/next/assets/apps-model-C-SdWY0N.js.map +0 -1
  757. package/dist/core/web/public/next/assets/ask-seat-DhGxiGSd.js +0 -2
  758. package/dist/core/web/public/next/assets/ask-seat-DhGxiGSd.js.map +0 -1
  759. package/dist/core/web/public/next/assets/authority-model-CoXAS-Z6.js +0 -2
  760. package/dist/core/web/public/next/assets/authority-model-CoXAS-Z6.js.map +0 -1
  761. package/dist/core/web/public/next/assets/automations-focus-CeneF7lP.js +0 -2
  762. package/dist/core/web/public/next/assets/automations-focus-CeneF7lP.js.map +0 -1
  763. package/dist/core/web/public/next/assets/budget-queries-DCZevH2S.js +0 -2
  764. package/dist/core/web/public/next/assets/budget-queries-DCZevH2S.js.map +0 -1
  765. package/dist/core/web/public/next/assets/capacity-strip-model-Wna9o0dS.js +0 -2
  766. package/dist/core/web/public/next/assets/capacity-strip-model-Wna9o0dS.js.map +0 -1
  767. package/dist/core/web/public/next/assets/charts-CzqC55eL.js +0 -2
  768. package/dist/core/web/public/next/assets/charts-CzqC55eL.js.map +0 -1
  769. package/dist/core/web/public/next/assets/chat-pane-data-BBA55Pw-.js +0 -2
  770. package/dist/core/web/public/next/assets/chat-pane-data-BBA55Pw-.js.map +0 -1
  771. package/dist/core/web/public/next/assets/checkpoint-queries-gP6Vh70H.js +0 -2
  772. package/dist/core/web/public/next/assets/checkpoint-queries-gP6Vh70H.js.map +0 -1
  773. package/dist/core/web/public/next/assets/cloud-queries-Bsqo7wye.js +0 -2
  774. package/dist/core/web/public/next/assets/cloud-queries-Bsqo7wye.js.map +0 -1
  775. package/dist/core/web/public/next/assets/command-catalog-Dnx-iMLX.js +0 -2
  776. package/dist/core/web/public/next/assets/command-catalog-Dnx-iMLX.js.map +0 -1
  777. package/dist/core/web/public/next/assets/composer-queries-DHGJlnFJ.js +0 -2
  778. package/dist/core/web/public/next/assets/composer-queries-DHGJlnFJ.js.map +0 -1
  779. package/dist/core/web/public/next/assets/connectivity-BViMMNcD.js +0 -2
  780. package/dist/core/web/public/next/assets/connectivity-BViMMNcD.js.map +0 -1
  781. package/dist/core/web/public/next/assets/context-queries-Bsl-w0q-.js +0 -2
  782. package/dist/core/web/public/next/assets/context-queries-Bsl-w0q-.js.map +0 -1
  783. package/dist/core/web/public/next/assets/control-queries-CUNa6TAx.js +0 -2
  784. package/dist/core/web/public/next/assets/control-queries-CUNa6TAx.js.map +0 -1
  785. package/dist/core/web/public/next/assets/copy-setup-C2goNcTZ.js +0 -2
  786. package/dist/core/web/public/next/assets/copy-setup-C2goNcTZ.js.map +0 -1
  787. package/dist/core/web/public/next/assets/deep-link-Dg_zaqAl.js +0 -2
  788. package/dist/core/web/public/next/assets/deep-link-Dg_zaqAl.js.map +0 -1
  789. package/dist/core/web/public/next/assets/device-permissions-CEXY0Vor.js +0 -2
  790. package/dist/core/web/public/next/assets/device-permissions-CEXY0Vor.js.map +0 -1
  791. package/dist/core/web/public/next/assets/devin-queries-Cu_YYhw2.js +0 -2
  792. package/dist/core/web/public/next/assets/devin-queries-Cu_YYhw2.js.map +0 -1
  793. package/dist/core/web/public/next/assets/dock-icons-DGZoDN6N.js +0 -2
  794. package/dist/core/web/public/next/assets/dock-icons-DGZoDN6N.js.map +0 -1
  795. package/dist/core/web/public/next/assets/dock-panes-BgSO9q_f.js +0 -2
  796. package/dist/core/web/public/next/assets/dock-panes-BgSO9q_f.js.map +0 -1
  797. package/dist/core/web/public/next/assets/fleet-control-queries-clsJWanE.js +0 -2
  798. package/dist/core/web/public/next/assets/fleet-control-queries-clsJWanE.js.map +0 -1
  799. package/dist/core/web/public/next/assets/fleet-queries-DX1AwHEt.js +0 -2
  800. package/dist/core/web/public/next/assets/fleet-queries-DX1AwHEt.js.map +0 -1
  801. package/dist/core/web/public/next/assets/fleet-state-EgNiSDxu.js +0 -3
  802. package/dist/core/web/public/next/assets/fleet-state-EgNiSDxu.js.map +0 -1
  803. package/dist/core/web/public/next/assets/focus-trap-B1vuEhZX.js +0 -2
  804. package/dist/core/web/public/next/assets/focus-trap-B1vuEhZX.js.map +0 -1
  805. package/dist/core/web/public/next/assets/git-model-Bu59fz1m.js +0 -5
  806. package/dist/core/web/public/next/assets/git-model-Bu59fz1m.js.map +0 -1
  807. package/dist/core/web/public/next/assets/global-BJ_kVFpD.js +0 -3
  808. package/dist/core/web/public/next/assets/global-BJ_kVFpD.js.map +0 -1
  809. package/dist/core/web/public/next/assets/guarded-action-CzvG7Qgc.js +0 -3
  810. package/dist/core/web/public/next/assets/guarded-action-CzvG7Qgc.js.map +0 -1
  811. package/dist/core/web/public/next/assets/guarded-runners-BPM0KdoQ.js +0 -2
  812. package/dist/core/web/public/next/assets/guarded-runners-BPM0KdoQ.js.map +0 -1
  813. package/dist/core/web/public/next/assets/health-queries-CMxSsJKS.js +0 -2
  814. package/dist/core/web/public/next/assets/health-queries-CMxSsJKS.js.map +0 -1
  815. package/dist/core/web/public/next/assets/icons-MYfI6vZr.js +0 -2
  816. package/dist/core/web/public/next/assets/icons-MYfI6vZr.js.map +0 -1
  817. package/dist/core/web/public/next/assets/index-DOAOxiKl.js +0 -11
  818. package/dist/core/web/public/next/assets/index-DOAOxiKl.js.map +0 -1
  819. package/dist/core/web/public/next/assets/jev-queries-CS2A5uWe.js +0 -2
  820. package/dist/core/web/public/next/assets/jev-queries-CS2A5uWe.js.map +0 -1
  821. package/dist/core/web/public/next/assets/ladder-queries-CBoG3heV.js +0 -2
  822. package/dist/core/web/public/next/assets/ladder-queries-CBoG3heV.js.map +0 -1
  823. package/dist/core/web/public/next/assets/leader-focus-DDQlv0TB.js +0 -2
  824. package/dist/core/web/public/next/assets/leader-focus-DDQlv0TB.js.map +0 -1
  825. package/dist/core/web/public/next/assets/live-model-CCjYFk48.js +0 -2
  826. package/dist/core/web/public/next/assets/live-model-CCjYFk48.js.map +0 -1
  827. package/dist/core/web/public/next/assets/mobile-actions-XqB_h7a8.js +0 -2
  828. package/dist/core/web/public/next/assets/mobile-actions-XqB_h7a8.js.map +0 -1
  829. package/dist/core/web/public/next/assets/mobile-toast-eIrghd9o.js +0 -2
  830. package/dist/core/web/public/next/assets/mobile-toast-eIrghd9o.js.map +0 -1
  831. package/dist/core/web/public/next/assets/multimodel-flows-CzI-yHg5.js +0 -7
  832. package/dist/core/web/public/next/assets/multimodel-flows-CzI-yHg5.js.map +0 -1
  833. package/dist/core/web/public/next/assets/multimodel-queries-DxIT9AZY.js +0 -2
  834. package/dist/core/web/public/next/assets/multimodel-queries-DxIT9AZY.js.map +0 -1
  835. package/dist/core/web/public/next/assets/mutations-BlGALvmG.js +0 -2
  836. package/dist/core/web/public/next/assets/mutations-BlGALvmG.js.map +0 -1
  837. package/dist/core/web/public/next/assets/nav-ByibvQW1.js +0 -2
  838. package/dist/core/web/public/next/assets/nav-ByibvQW1.js.map +0 -1
  839. package/dist/core/web/public/next/assets/needs-you-actions-Dp5UxM3X.js +0 -2
  840. package/dist/core/web/public/next/assets/needs-you-actions-Dp5UxM3X.js.map +0 -1
  841. package/dist/core/web/public/next/assets/needs-you-model-DYsqHMqy.js +0 -2
  842. package/dist/core/web/public/next/assets/needs-you-model-DYsqHMqy.js.map +0 -1
  843. package/dist/core/web/public/next/assets/open-terminal-dOVyLFvn.js +0 -2
  844. package/dist/core/web/public/next/assets/open-terminal-dOVyLFvn.js.map +0 -1
  845. package/dist/core/web/public/next/assets/open-terminal-request-BIhvirIl.js +0 -2
  846. package/dist/core/web/public/next/assets/open-terminal-request-BIhvirIl.js.map +0 -1
  847. package/dist/core/web/public/next/assets/overnight-queries-KxqH6BRN.js +0 -2
  848. package/dist/core/web/public/next/assets/overnight-queries-KxqH6BRN.js.map +0 -1
  849. package/dist/core/web/public/next/assets/palette-handoff-69pw9oBv.js +0 -2
  850. package/dist/core/web/public/next/assets/palette-handoff-69pw9oBv.js.map +0 -1
  851. package/dist/core/web/public/next/assets/panes-CHt3427X.js +0 -3
  852. package/dist/core/web/public/next/assets/panes-CHt3427X.js.map +0 -1
  853. package/dist/core/web/public/next/assets/path-display-DuIZF5G3.js +0 -2
  854. package/dist/core/web/public/next/assets/path-display-DuIZF5G3.js.map +0 -1
  855. package/dist/core/web/public/next/assets/playbook-composer-DipWgX7t.js +0 -2
  856. package/dist/core/web/public/next/assets/playbook-composer-DipWgX7t.js.map +0 -1
  857. package/dist/core/web/public/next/assets/playbook-focus-EXJPMBBI.js +0 -2
  858. package/dist/core/web/public/next/assets/playbook-focus-EXJPMBBI.js.map +0 -1
  859. package/dist/core/web/public/next/assets/playbooks-queries-BlpGBpOV.js +0 -2
  860. package/dist/core/web/public/next/assets/playbooks-queries-BlpGBpOV.js.map +0 -1
  861. package/dist/core/web/public/next/assets/preloaded-TmpzuCEi.js +0 -2
  862. package/dist/core/web/public/next/assets/preloaded-TmpzuCEi.js.map +0 -1
  863. package/dist/core/web/public/next/assets/primitives-CDKCUR2v.js +0 -1
  864. package/dist/core/web/public/next/assets/pwa-CTGMm-wR.js +0 -2
  865. package/dist/core/web/public/next/assets/pwa-CTGMm-wR.js.map +0 -1
  866. package/dist/core/web/public/next/assets/queries--mGK10fL.js +0 -2
  867. package/dist/core/web/public/next/assets/queries--mGK10fL.js.map +0 -1
  868. package/dist/core/web/public/next/assets/reasoning-pref-CWGL9MD2.js +0 -2
  869. package/dist/core/web/public/next/assets/reasoning-pref-CWGL9MD2.js.map +0 -1
  870. package/dist/core/web/public/next/assets/remote-session-I4RXlsas.js +0 -3
  871. package/dist/core/web/public/next/assets/remote-session-I4RXlsas.js.map +0 -1
  872. package/dist/core/web/public/next/assets/resolved-store-DwGn9hb_.js +0 -2
  873. package/dist/core/web/public/next/assets/resolved-store-DwGn9hb_.js.map +0 -1
  874. package/dist/core/web/public/next/assets/resources-queries-T6ER_hPN.js +0 -2
  875. package/dist/core/web/public/next/assets/resources-queries-T6ER_hPN.js.map +0 -1
  876. package/dist/core/web/public/next/assets/reveal-anchor-CHtvhrYm.js +0 -2
  877. package/dist/core/web/public/next/assets/reveal-anchor-CHtvhrYm.js.map +0 -1
  878. package/dist/core/web/public/next/assets/sheet-BlzGO1wo.js +0 -2
  879. package/dist/core/web/public/next/assets/sheet-BlzGO1wo.js.map +0 -1
  880. package/dist/core/web/public/next/assets/slots-40edgV7X.js +0 -3
  881. package/dist/core/web/public/next/assets/slots-40edgV7X.js.map +0 -1
  882. package/dist/core/web/public/next/assets/sources-queries-BrM41X16.js +0 -4
  883. package/dist/core/web/public/next/assets/sources-queries-BrM41X16.js.map +0 -1
  884. package/dist/core/web/public/next/assets/sse-CAFwslNC.js +0 -2
  885. package/dist/core/web/public/next/assets/sse-CAFwslNC.js.map +0 -1
  886. package/dist/core/web/public/next/assets/surface-data-D_oFOgkh.js +0 -2
  887. package/dist/core/web/public/next/assets/surface-data-D_oFOgkh.js.map +0 -1
  888. package/dist/core/web/public/next/assets/surface-prefetch-wqfiATYQ.js +0 -2
  889. package/dist/core/web/public/next/assets/surface-prefetch-wqfiATYQ.js.map +0 -1
  890. package/dist/core/web/public/next/assets/terminal-client-iL4DagCN.js +0 -2
  891. package/dist/core/web/public/next/assets/terminal-client-iL4DagCN.js.map +0 -1
  892. package/dist/core/web/public/next/assets/terminal-icons-BakeOpKV.js +0 -2
  893. package/dist/core/web/public/next/assets/terminal-icons-BakeOpKV.js.map +0 -1
  894. package/dist/core/web/public/next/assets/terminal-view-D6AAh08q.js +0 -6
  895. package/dist/core/web/public/next/assets/terminal-view-D6AAh08q.js.map +0 -1
  896. package/dist/core/web/public/next/assets/thread-data-CSDZ514s.js +0 -2
  897. package/dist/core/web/public/next/assets/thread-data-CSDZ514s.js.map +0 -1
  898. package/dist/core/web/public/next/assets/ui-parts-DubQJIoq.js +0 -2
  899. package/dist/core/web/public/next/assets/ui-parts-DubQJIoq.js.map +0 -1
  900. package/dist/core/web/public/next/assets/usage-queries-BONqdout.js +0 -2
  901. package/dist/core/web/public/next/assets/usage-queries-BONqdout.js.map +0 -1
  902. package/dist/core/web/public/next/assets/use-chat-activity-BZjdPPNP.js +0 -2
  903. package/dist/core/web/public/next/assets/use-chat-activity-BZjdPPNP.js.map +0 -1
  904. package/dist/core/web/public/next/assets/use-guarded-action-xJ4rxyVo.js +0 -2
  905. package/dist/core/web/public/next/assets/use-guarded-action-xJ4rxyVo.js.map +0 -1
  906. package/dist/core/web/public/next/assets/use-ticker-Bsu0cMvl.js +0 -2
  907. package/dist/core/web/public/next/assets/use-ticker-Bsu0cMvl.js.map +0 -1
  908. package/dist/core/web/public/next/assets/use-token-gate-E-xzEAu6.js +0 -2
  909. package/dist/core/web/public/next/assets/use-token-gate-E-xzEAu6.js.map +0 -1
  910. package/dist/core/web/public/next/assets/useAutoSeat-CXC9e4vx.js +0 -2
  911. package/dist/core/web/public/next/assets/useAutoSeat-CXC9e4vx.js.map +0 -1
  912. package/dist/core/web/public/next/assets/useOnboarding-Csw_AXrj.js +0 -2
  913. package/dist/core/web/public/next/assets/useOnboarding-Csw_AXrj.js.map +0 -1
  914. package/dist/core/web/public/next/assets/useSeatHealth-B6AXxre9.js +0 -2
  915. package/dist/core/web/public/next/assets/useSeatHealth-B6AXxre9.js.map +0 -1
  916. package/dist/core/web/public/next/assets/useSeatsRefresh-BIAa7Exn.js +0 -2
  917. package/dist/core/web/public/next/assets/useSeatsRefresh-BIAa7Exn.js.map +0 -1
  918. package/dist/core/web/public/next/assets/useVerseSession-BOyvOEDi.js +0 -2
  919. package/dist/core/web/public/next/assets/useVerseSession-BOyvOEDi.js.map +0 -1
  920. package/dist/core/web/public/next/assets/useVerseTranscript-BOhcfdp7.js +0 -2
  921. package/dist/core/web/public/next/assets/useVerseTranscript-BOhcfdp7.js.map +0 -1
  922. package/dist/core/web/public/next/assets/verse-bootstrap-query-D-fU89IT.js +0 -2
  923. package/dist/core/web/public/next/assets/verse-bootstrap-query-D-fU89IT.js.map +0 -1
  924. package/dist/core/web/public/next/assets/verse-icons-UKbUG3gv.js +0 -2
  925. package/dist/core/web/public/next/assets/verse-icons-UKbUG3gv.js.map +0 -1
  926. package/dist/core/web/public/next/assets/warmup-CZ-IBU5L.js +0 -3
  927. package/dist/core/web/public/next/assets/warmup-CZ-IBU5L.js.map +0 -1
  928. package/dist/core/web/public/next/assets/wiki-focus-DhAvbMnX.js +0 -2
  929. package/dist/core/web/public/next/assets/wiki-focus-DhAvbMnX.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-DOAOxiKl.js";import{t as r}from"./Dialog-r4j4R4b6.js";import{t as i}from"./MutationTokenDialog-Dnf_rcnc.js";import{t as a}from"./Button-DJY_Pu5B.js";import{n as o}from"./use-guarded-action-xJ4rxyVo.js";var s=e(n(),1),c={lead:`_lead_lxdpw_8`,bar:`_bar_lxdpw_14`,barSpacer:`_barSpacer_lxdpw_22`,barSecondary:`_barSecondary_lxdpw_26`,switchWrap:`_switchWrap_lxdpw_32`,barLabel:`_barLabel_lxdpw_38`,pillLabel:`_pillLabel_lxdpw_39`,switchOption:`_switchOption_lxdpw_48`,touchMark:`_touchMark_lxdpw_54`,pill:`_pill_lxdpw_39`,chip:`_chip_lxdpw_59`,linkButton:`_linkButton_lxdpw_88`,moreLink:`_moreLink_lxdpw_89`,dot:`_dot_lxdpw_103`,verdict:`_verdict_lxdpw_126`,verdictPart:`_verdictPart_lxdpw_135`,verdictSep:`_verdictSep_lxdpw_149`,since:`_since_lxdpw_153`,sinceLead:`_sinceLead_lxdpw_162`,sinceChip:`_sinceChip_lxdpw_166`,actionNote:`_actionNote_lxdpw_192`,actionError:`_actionError_lxdpw_193`,kbd:`_kbd_lxdpw_247`,muted:`_muted_lxdpw_256`,mono:`_mono_lxdpw_263`,num:`_num_lxdpw_268`,confirmBody:`_confirmBody_lxdpw_273`,confirmActions:`_confirmActions_lxdpw_279`,needsList:`_needsList_lxdpw_287`,needsRow:`_needsRow_lxdpw_295`,sevDot:`_sevDot_lxdpw_309`,needsText:`_needsText_lxdpw_323`,needsKind:`_needsKind_lxdpw_331`,needsTitle:`_needsTitle_lxdpw_343`,needsDetail:`_needsDetail_lxdpw_355`,needsMeta:`_needsMeta_lxdpw_363`,needsRepo:`_needsRepo_lxdpw_372`,needsActions:`_needsActions_lxdpw_376`,allClear:`_allClear_lxdpw_384`,allClearTitle:`_allClearTitle_lxdpw_391`,allClearBody:`_allClearBody_lxdpw_399`,memo:`_memo_lxdpw_405`,memoRow:`_memoRow_lxdpw_412`,memoText:`_memoText_lxdpw_423`,delta:`_delta_lxdpw_429`,dryRun:`_dryRun_lxdpw_442`,actionList:`_actionList_lxdpw_454`,actionRow:`_actionRow_lxdpw_463`,actionSummary:`_actionSummary_lxdpw_472`,classBadge:`_classBadge_lxdpw_477`,actionText:`_actionText_lxdpw_500`,actionWhy:`_actionWhy_lxdpw_513`,actionState:`_actionState_lxdpw_520`,statusWord:`_statusWord_lxdpw_526`,vetoChip:`_vetoChip_lxdpw_541`,ring:`_ring_lxdpw_545`,ringTrack:`_ringTrack_lxdpw_555`,ringFill:`_ringFill_lxdpw_561`,ringText:`_ringText_lxdpw_568`,kpis:`_kpis_lxdpw_573`,burnGrid:`_burnGrid_lxdpw_602`,burnStrip:`_burnStrip_lxdpw_610`,burnItem:`_burnItem_lxdpw_621`,freeSeat:`_freeSeat_lxdpw_629`,freeHead:`_freeHead_lxdpw_639`,freeTitle:`_freeTitle_lxdpw_645`,freeValue:`_freeValue_lxdpw_652`,freeBody:`_freeBody_lxdpw_659`,scope:`_scope_lxdpw_666`,scopeBlock:`_scopeBlock_lxdpw_672`,scopeLead:`_scopeLead_lxdpw_678`,eliteToggle:`_eliteToggle_lxdpw_685`,scopeMeta:`_scopeMeta_lxdpw_692`,scopeTable:`_scopeTable_lxdpw_699`,scopeList:`_scopeList_lxdpw_719`,ladder:`_ladder_lxdpw_727`,ladderId:`_ladderId_lxdpw_746`,sheetFooter:`_sheetFooter_lxdpw_751`,sheetFootnote:`_sheetFootnote_lxdpw_757`,sheetButtons:`_sheetButtons_lxdpw_764`,autonomyPlaceholder:`_autonomyPlaceholder_lxdpw_778`,scopeEditToggle:`_scopeEditToggle_lxdpw_786`,scopeEditor:`_scopeEditor_lxdpw_794`,scopeFieldset:`_scopeFieldset_lxdpw_805`,scopeCheck:`_scopeCheck_lxdpw_814`,scopeField:`_scopeField_lxdpw_805`,diffDirection:`_diffDirection_lxdpw_845`},l=t();function u({spec:e,onConfirm:t,onCancel:n}){let i=(0,s.useId)(),o=(0,s.useRef)(null),u=(0,s.useRef)(null);return(0,l.jsxs)(r,{open:e!==null,onClose:n,titleId:i,title:e?.title??``,initialFocusRef:e?.destructive?o:u,children:[(0,l.jsx)(`div`,{className:c.confirmBody,children:e?.body}),(0,l.jsxs)(`div`,{className:c.confirmActions,children:[(0,l.jsx)(a,{ref:o,variant:`ghost`,onClick:n,children:`Cancel`}),(0,l.jsx)(a,{ref:u,variant:e?.destructive?`danger`:`primary`,onClick:t,children:e?.confirmLabel??`Confirm`})]})]})}function d(){let e=o(),[t,n]=(0,s.useState)(null),{request:r}=e,a=(0,s.useCallback)((e,t,i={})=>{let a=()=>r(e,t,i.onDone);i.confirm?n({spec:i.confirm,run:a}):a()},[r]),c=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(u,{spec:t?.spec??null,onCancel:()=>n(null),onConfirm:()=>{let e=t;n(null),e?.run()}}),(0,l.jsx)(i,{open:e.tokenOpen,onClose:e.closeToken,reason:e.tokenReason,tokenHelp:`the mutation token ashlr verse printed`})]});return{act:a,busy:e.busy,error:e.error,clearError:e.clearError,readOnly:e.readOnly,dialogs:c}}function f({actions:e}){return e.readOnly?(0,l.jsx)(`p`,{className:c.actionNote,role:`status`,children:`Read-only session: this server was started without dispatch, so switching, stopping and vetoing are unavailable. Everything shown is live.`}):e.error?(0,l.jsxs)(`p`,{className:c.actionError,role:`alert`,children:[e.error,(0,l.jsx)(`button`,{type:`button`,className:c.linkButton,onClick:e.clearError,children:`Dismiss`})]}):null}export{d as n,c as r,f as t};
2
- //# sourceMappingURL=actions-gBplqbpY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actions-gBplqbpY.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/command/command.module.css","../../../../../../src/web-ui/routes/verse/command/actions.tsx"],"sourcesContent":["/*\n * routes/verse/command/command.module.css — Command's cards and top bar\n * (unit C7). Tokens only: style-scan-310 bans raw hex colours and px font\n * sizes in this folder, and every colour here follows the theme.\n */\n\n/* ---- lead: top bar, verdict, since ------------------------------------ */\n.lead {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n\n.bar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-3);\n min-height: var(--control-h);\n}\n\n.barSpacer {\n flex: 1;\n}\n\n.barSecondary {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.switchWrap {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.barLabel,\n.pillLabel {\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.switchOption {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n}\n\n.touchMark {\n color: var(--text-tertiary);\n}\n\n.pill,\n.chip {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n color: var(--text-primary);\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n white-space: nowrap;\n}\n\nbutton.pill,\nbutton.chip {\n cursor: pointer;\n transition: background-color var(--duration-fast) var(--ease-standard);\n}\n\nbutton.pill:hover,\nbutton.chip:hover {\n background: var(--bg-hover);\n}\n\n.pill:focus-visible,\n.chip:focus-visible,\n.linkButton:focus-visible,\n.moreLink:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n}\n\n.chip[data-tone='warning'] {\n border-color: var(--status-warning-solid);\n}\n\n.chip[data-tone='danger'] {\n border-color: var(--status-danger-solid);\n color: var(--status-danger-fg);\n}\n\n.dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n flex: none;\n background: var(--status-neutral-solid);\n}\n\n.dot[data-tone='success'] {\n background: var(--status-success-solid);\n}\n.dot[data-tone='warning'] {\n background: var(--status-warning-solid);\n}\n.dot[data-tone='danger'] {\n background: var(--status-danger-solid);\n}\n.dot[data-tone='unknown'] {\n background: var(--chart-unknown-hatch);\n border: 1px solid var(--status-unknown-solid);\n}\n\n/* Verdict: 17/24, weight 500 (SPEC-310C §6). */\n.verdict {\n margin: 0;\n font-size: var(--text-lg-size);\n line-height: var(--text-lg-line);\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.verdictPart[data-tone='danger'] {\n color: var(--status-danger-fg);\n}\n.verdictPart[data-tone='warning'] {\n color: var(--status-warning-fg);\n}\n.verdictPart[data-tone='success'] {\n color: var(--status-success-fg);\n}\n.verdictPart[data-tone='unknown'] {\n color: var(--status-unknown-fg);\n font-style: italic;\n}\n\n.verdictSep {\n color: var(--text-tertiary);\n}\n\n.since {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.sinceLead {\n color: var(--text-tertiary);\n}\n\n.sinceChip {\n display: inline-flex;\n align-items: center;\n padding: 1px var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n font-variant-numeric: tabular-nums;\n}\n.sinceChip[data-tone='success'] {\n background: var(--status-success-bg);\n color: var(--status-success-fg);\n}\n.sinceChip[data-tone='danger'] {\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n.sinceChip[data-tone='warning'] {\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n}\n.sinceChip[data-tone='info'] {\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n}\n\n.actionNote,\n.actionError {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-md);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n\n.actionNote {\n background: var(--bg-hover);\n color: var(--text-secondary);\n}\n\n.actionError {\n display: flex;\n align-items: baseline;\n gap: var(--space-3);\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n\n/* ---- shared small controls ------------------------------------------- */\n.linkButton,\n.moreLink {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n padding: 0;\n border: 0;\n background: none;\n color: var(--text-link);\n font: inherit;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n text-decoration: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.linkButton:hover,\n.moreLink:hover {\n text-decoration: underline;\n}\n\n.moreLink {\n align-self: flex-start;\n}\n\n.moreLink:disabled {\n color: var(--text-disabled);\n cursor: default;\n text-decoration: none;\n}\n\n.kbd {\n padding: 0 var(--space-1);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n color: var(--text-tertiary);\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n}\n\n.muted {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.mono {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n}\n\n.num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.confirmBody {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n}\n\n.confirmActions {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n margin-top: var(--space-5);\n}\n\n/* ---- Needs you ------------------------------------------------------- */\n.needsList {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.needsRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--space-2) var(--space-3);\n padding: var(--space-2) 0;\n border-top: 1px solid var(--border-subtle);\n}\n\n.needsRow:first-child {\n border-top: 0;\n padding-top: 0;\n}\n\n.sevDot {\n width: 8px;\n height: 8px;\n margin-top: 6px;\n border-radius: var(--radius-full);\n background: var(--status-info-solid);\n}\n.sevDot[data-severity='warn'] {\n background: var(--status-warning-solid);\n}\n.sevDot[data-severity='high'] {\n background: var(--status-danger-solid);\n}\n\n.needsText {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n/* \"Patch · Claude run\" — the proposal kind and engine the wire title led with. */\n.needsKind {\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-secondary);\n}\n\n/* Two lines at most, wrapped at word boundaries. The text already ends on a\n whole word (needs-you-model readableItemTitle); the full server title rides\n in `title`. */\n.needsTitle {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n overflow: hidden;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: break-word;\n}\n\n.needsDetail {\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n overflow-wrap: anywhere;\n}\n\n/* \"binshield · #81 · 38 days ago\". */\n.needsMeta {\n display: flex;\n flex-wrap: wrap;\n gap: 0 var(--space-1);\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.needsRepo {\n font-weight: var(--font-weight-medium);\n}\n\n.needsActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--space-2);\n}\n\n.allClear {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n padding: var(--space-4) 0;\n}\n\n.allClearTitle {\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.allClearBody {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n}\n\n/* ---- Leader ---------------------------------------------------------- */\n.memo {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n}\n\n.memoRow {\n display: grid;\n grid-template-columns: 96px minmax(0, 1fr);\n gap: var(--space-3);\n align-items: baseline;\n}\n\n.memoRow dd {\n margin: 0;\n}\n\n.memoText {\n color: var(--text-primary);\n font-size: var(--text-base-size);\n line-height: var(--text-base-line);\n}\n\n.delta {\n display: inline-block;\n margin-left: var(--space-2);\n padding: 0 var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.dryRun {\n font-family: var(--font-display); /* micro-labels follow the Display-font setting */\n padding: 0 var(--space-2);\n border: 1px dashed var(--border-strong);\n border-radius: var(--radius-full);\n color: var(--text-secondary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n}\n\n.actionList {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n border-top: 1px solid var(--border-subtle);\n}\n\n.actionRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--space-3);\n align-items: center;\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--border-subtle);\n}\n\n.actionRow[data-status='vetoed'] .actionSummary {\n text-decoration: line-through;\n color: var(--text-tertiary);\n}\n\n.classBadge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n color: var(--text-secondary);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n font-weight: var(--font-weight-semibold);\n}\n\n.classBadge[data-class='B'] {\n border-color: var(--status-warning-solid);\n color: var(--status-warning-fg);\n}\n\n.classBadge[data-class='C'] {\n border-style: dashed;\n}\n\n.actionText {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.actionSummary {\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: anywhere;\n}\n\n.actionWhy {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n overflow-wrap: anywhere;\n}\n\n.actionState {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.statusWord {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n white-space: nowrap;\n}\n\n.statusWord[data-status='escalated'] {\n color: var(--status-warning-fg);\n}\n\n.statusWord[data-status='failed'],\n.statusWord[data-status='refused'] {\n color: var(--status-danger-fg);\n}\n\n.vetoChip {\n border: 1px solid var(--border-default);\n}\n\n.ring {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n color: var(--status-warning-fg);\n font-size: var(--text-xs-size);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.ringTrack {\n fill: none;\n stroke: var(--border-subtle);\n stroke-width: 2.5;\n}\n\n.ringFill {\n fill: none;\n stroke: var(--status-warning-solid);\n stroke-width: 2.5;\n stroke-linecap: round;\n}\n\n.ringText {\n min-width: 4ch;\n}\n\n/* ---- KPIs and burn-downs --------------------------------------------- */\n.kpis {\n display: grid;\n grid-template-columns: repeat(5, minmax(0, 1fr));\n gap: var(--surface-gap);\n /* One height for every tile in a row, whatever its caption wraps to (audit 15). */\n align-items: stretch;\n}\n\n/* Medium: five tiles as 3 + 2 on a 6-column track — the last two share the\n second row instead of leaving a blank third column (audit 15). */\n[data-viewport='medium'] .kpis {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n}\n\n[data-viewport='medium'] .kpis > * {\n grid-column: span 2;\n}\n\n[data-viewport='medium'] .kpis > :nth-child(3n + 1):nth-last-child(2),\n[data-viewport='medium'] .kpis > :nth-child(3n + 2):nth-last-child(1) {\n grid-column: span 3;\n}\n\n[data-viewport='compact'] .kpis {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n/* The burn-downs live on Usage (SeatBurnPanel), which has no Surface\n viewport attribute: the columns follow the panel's own width instead. */\n.burnGrid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));\n gap: var(--surface-gap);\n align-items: start;\n}\n\n/* 375: one card at a time, snapping — the next card peeks in at the edge. */\n.burnStrip {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 86%;\n gap: var(--space-3);\n overflow-x: auto;\n overscroll-behavior-x: contain;\n scroll-snap-type: x mandatory;\n padding-bottom: var(--space-1);\n}\n\n.burnStrip > .burnItem {\n scroll-snap-align: start;\n}\n\n.burnItem {\n min-width: 0;\n}\n\n.freeSeat {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--card-pad);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n}\n\n.freeHead {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.freeTitle {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.freeValue {\n font-size: var(--text-2xl-size);\n line-height: var(--text-2xl-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-secondary);\n}\n\n.freeBody {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n/* ---- Touch ID sheet -------------------------------------------------- */\n.scope {\n display: flex;\n flex-direction: column;\n gap: var(--space-5);\n}\n\n.scopeBlock {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.scopeLead {\n margin: 0;\n color: var(--text-primary);\n font-size: var(--text-base-size);\n line-height: var(--text-base-line);\n}\n\n.eliteToggle {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n font-weight: 600;\n}\n\n.scopeMeta {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.scopeTable {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--text-xs-size);\n}\n\n.scopeTable th {\n padding: var(--space-1) var(--space-2) var(--space-1) 0;\n border-bottom: 1px solid var(--border-subtle);\n color: var(--text-tertiary);\n font-weight: var(--font-weight-medium);\n text-align: left;\n}\n\n.scopeTable td {\n padding: var(--space-1) var(--space-2) var(--space-1) 0;\n border-bottom: 1px solid var(--border-subtle);\n color: var(--text-primary);\n}\n\n.scopeList {\n margin: 0;\n padding-left: var(--space-4);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.ladder {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n counter-reset: rung;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-secondary);\n}\n\n.ladder li {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n gap: var(--space-2);\n}\n\n.ladderId {\n font-family: var(--font-mono);\n color: var(--text-primary);\n}\n\n.sheetFooter {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n\n.sheetFootnote {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.sheetButtons {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n}\n\n@media (prefers-reduced-motion: reduce) {\n button.pill,\n button.chip {\n transition: none;\n }\n}\n\n/* Held while the AutonomyStatus chunk loads (3.14), so the verdict does not jump. */\n.autonomyPlaceholder {\n min-height: 132px;\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n}\n\n/* ---- 3.15 grant scope editor (GrantScopeEditor.tsx) --------------------- */\n.scopeEditToggle {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n margin-bottom: var(--space-3);\n}\n\n.scopeEditor {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n margin-bottom: var(--space-4);\n padding: var(--space-3);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-md);\n background: var(--bg-surface-raised);\n}\n\n.scopeFieldset {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n.scopeCheck {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n}\n\n.scopeField {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n.scopeField input,\n.scopeField select {\n min-width: 96px;\n padding: var(--space-1) var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-input);\n color: var(--text-primary);\n font: inherit;\n}\n\n.diffDirection[data-direction='wider'] {\n color: var(--status-warning-fg);\n font-weight: var(--font-weight-medium);\n}\n\n.diffDirection[data-direction='narrower'] {\n color: var(--status-success-fg);\n}\n","/**\n * routes/verse/command/actions.tsx — how every write on the four surfaces\n * reaches the server (unit C7).\n *\n * Order is fixed and the same for a click, a key and the palette\n * (SPEC-310C §1 \"Guarded actions ask for confirmation, then the mutation\n * token\"):\n *\n * 1. a confirmation dialog, when the action asks for one (Stop, Veto,\n * Resume, every Needs-you approve / reject / veto);\n * 2. the mutation token, when none is held (useGuardedAction);\n * 3. the request, one at a time, with the server's own refusal sentence\n * shown on failure and read-only sessions explained, never errored.\n *\n * LOWERING needs no confirmation (SPEC-310B I1: \"lowering authority is\n * instant\") — callers simply omit `confirm` for the switch-down path.\n */\nimport { useCallback, useId, useRef, useState, type ReactNode } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Dialog } from '../../../components/primitives/Dialog.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { useGuardedAction } from '../autonomy/use-guarded-action.js';\nimport styles from './command.module.css';\n\nexport interface ConfirmSpec {\n title: string;\n body: ReactNode;\n confirmLabel: string;\n destructive?: boolean;\n}\n\nexport function ConfirmDialog({ spec, onConfirm, onCancel }: { spec: ConfirmSpec | null; onConfirm: () => void; onCancel: () => void }) {\n const titleId = useId();\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n return (\n <Dialog\n open={spec !== null}\n onClose={onCancel}\n titleId={titleId}\n title={spec?.title ?? ''}\n // A destructive confirm starts on Cancel, so a stray Enter never stops the fleet.\n initialFocusRef={spec?.destructive ? cancelRef : confirmRef}\n >\n <div className={styles.confirmBody}>{spec?.body}</div>\n <div className={styles.confirmActions}>\n <Button ref={cancelRef} variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button ref={confirmRef} variant={spec?.destructive ? 'danger' : 'primary'} onClick={onConfirm}>\n {spec?.confirmLabel ?? 'Confirm'}\n </Button>\n </div>\n </Dialog>\n );\n}\n\nexport interface SurfaceActions {\n /** Confirm (when asked), then token (when needed), then run `fn`. */\n act: <T>(fn: () => Promise<T>, reason: string, options?: { confirm?: ConfirmSpec; onDone?: (result: T) => void }) => void;\n busy: boolean;\n error: string | null;\n clearError: () => void;\n readOnly: boolean;\n /** Render once per surface. */\n dialogs: ReactNode;\n}\n\nexport function useSurfaceActions(): SurfaceActions {\n const guard = useGuardedAction();\n const [pending, setPending] = useState<{ spec: ConfirmSpec; run: () => void } | null>(null);\n const { request } = guard;\n\n const act = useCallback(\n <T,>(fn: () => Promise<T>, reason: string, options: { confirm?: ConfirmSpec; onDone?: (result: T) => void } = {}) => {\n const run = () => request(fn, reason, options.onDone);\n if (options.confirm) setPending({ spec: options.confirm, run });\n else run();\n },\n [request],\n );\n\n const dialogs = (\n <>\n <ConfirmDialog\n spec={pending?.spec ?? null}\n onCancel={() => setPending(null)}\n onConfirm={() => {\n const next = pending;\n setPending(null);\n next?.run();\n }}\n />\n <MutationTokenDialog open={guard.tokenOpen} onClose={guard.closeToken} reason={guard.tokenReason} tokenHelp=\"the mutation token ashlr verse printed\" />\n </>\n );\n\n return { act, busy: guard.busy, error: guard.error, clearError: guard.clearError, readOnly: guard.readOnly, dialogs };\n}\n\n/** The error / read-only line a surface shows under its top bar. */\nexport function ActionStatus({ actions }: { actions: Pick<SurfaceActions, 'error' | 'clearError' | 'readOnly'> }) {\n if (actions.readOnly) {\n return (\n <p className={styles.actionNote} role=\"status\">\n Read-only session: this server was started without dispatch, so switching, stopping and vetoing are unavailable. Everything shown is live.\n </p>\n );\n }\n if (!actions.error) return null;\n return (\n <p className={styles.actionError} role=\"alert\">\n {actions.error}\n <button type=\"button\" className={styles.linkButton} onClick={actions.clearError}>\n Dismiss\n </button>\n </p>\n );\n}\n"],"mappings":"+jGC+BA,SAAgB,EAAc,CAAE,OAAM,YAAW,YAAuF,CACtI,IAAM,GAAA,EAAU,EAAA,MAAA,CAAM,EAChB,GAAA,EAAY,EAAA,OAAA,CAA0B,IAAI,EAC1C,GAAA,EAAa,EAAA,OAAA,CAA0B,IAAI,EACjD,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,KAAM,IAAS,KACf,QAAS,EACA,UACT,MAAO,GAAM,OAAS,GAEtB,gBAAiB,GAAM,YAAc,EAAY,EANnD,SAAA,EAQE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAO,YAAc,SAAA,GAAM,IAAU,CAAA,GACrD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,eAAvB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,IAAK,EAAW,QAAQ,QAAQ,QAAS,EAAU,SAAA,QAEnD,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,IAAK,EAAY,QAAS,GAAM,YAAc,SAAW,UAAW,QAAS,EAClF,SAAA,GAAM,cAAgB,SACjB,CAAA,CACL,CACC,CAAA,CAAA,GAEZ,CAaA,SAAgB,GAAoC,CAClD,IAAM,EAAQ,EAAiB,EACzB,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAwD,IAAI,EACpF,CAAE,WAAY,EAEd,GAAA,EAAM,EAAA,YAAA,EACL,EAAsB,EAAgB,EAAmE,CAAC,IAAM,CACnH,IAAM,MAAY,EAAQ,EAAI,EAAQ,EAAQ,MAAM,EAChD,EAAQ,QAAS,EAAW,CAAE,KAAM,EAAQ,QAAS,KAAI,CAAC,EACzD,EAAI,CACX,EACA,CAAC,CAAO,CACV,EAEM,GACJ,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,GAAS,MAAQ,KACvB,aAAgB,EAAW,IAAI,EAC/B,cAAiB,CACf,IAAM,EAAO,EACb,EAAW,IAAI,EACf,GAAM,IAAI,CACZ,CACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,KAAM,EAAM,UAAW,QAAS,EAAM,WAAY,OAAQ,EAAM,YAAa,UAAU,wCAA0C,CAAA,CACtJ,CAAA,CAAA,EAGJ,MAAO,CAAE,MAAK,KAAM,EAAM,KAAM,MAAO,EAAM,MAAO,WAAY,EAAM,WAAY,SAAU,EAAM,SAAU,SAAQ,CACtH,CAGA,SAAgB,EAAa,CAAE,WAAmF,CAShH,OARI,EAAQ,UAER,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAO,WAAY,KAAK,SAAS,SAAA,4IAE5C,CAAA,EAGF,EAAQ,OAEX,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAW,EAAO,YAAa,KAAK,QAAvC,SAAA,CACG,EAAQ,OACT,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,WAAY,QAAS,EAAQ,WAAY,SAAA,SAEzE,CAAA,CACP,IAPsB,IAS7B"}
@@ -1,2 +0,0 @@
1
- import{C as e,M as t,a as n,i as r}from"./global-BJ_kVFpD.js";import{r as i}from"./VerseShared-CH8mV5ew.js";var a=`/api/verse/agent-tools`;`${a}`;var o=`${a}/grant`,s=`${a}/activity`,c=`${a}/confirm`,l=`${a}/share`,u=`${a}/resume`,d=`${a}/tabs`;Object.freeze({terminal:`off`,browser:`off`,browserScript:!1,computer:`off`,computerApps:[]});var f=e=>new URLSearchParams(e).toString();async function p(r,a){let o=e();if(!o)throw new i;let s=await n(r,a,o);return t(),s}var m={state:(e,t)=>r(`${o}?${f({sessionId:e})}`,t),setGrant:e=>p(o,e),activity:(e,t)=>r(`${s}?${f({sessionId:e})}`,t),confirm:async(e,t,n)=>{await p(c,{sessionId:e,id:t,answer:n})},share:(e,t,n)=>p(l,{sessionId:e,tabId:t,shared:n}),resume:async e=>{await p(u,{tabId:e})},tabs:e=>r(d,e)};export{m as t};
2
- //# sourceMappingURL=agent-tools-client-ClFut2J1.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-tools-client-ClFut2J1.js","names":[],"sources":["../../../../../../src/core/verse/verse-mcp-types.ts","../../../../../../src/web-ui/routes/verse/agent-tools/agent-tools-client.ts"],"sourcesContent":["/**\n * core/verse/verse-mcp-types.ts — the contract of Verse's one MCP server for\n * every chat seat (3.15 agent tools, P0+P1).\n *\n * Three parties exchange these shapes:\n * - a chat SEAT (Claude, local, Codex, Grok, Devin CLI) calls the MCP\n * endpoint `POST /api/verse/agent-tools/mcp` with `Authorization: Bearer <turn token>`\n * (verse-mcp.ts serves it; verse-mcp-grants.ts mints and revokes tokens);\n * - the OPERATOR's page reads and changes the chat's grant (the \"Agent\n * tools\" sheet), answers destructive-command confirmations, hands a shell\n * back after a takeover, and shares operator shells per tab;\n * - the sidecar, which enforces all of it.\n *\n * BROWSER-SAFE: imported by the web bundle. Plain data and pure functions only.\n */\n\n/**\n * The route family. NOT `/api/verse/mcp`: that path (and /cli-health,\n * /proposal, /apply) is the MCP-management page's (mcp-control-api.ts), whose\n * GET sits behind the read session — a seat's MCP client probing GET there\n * would get a 401 and go looking for OAuth.\n */\nexport const VERSE_AGENT_TOOLS_PATH = '/api/verse/agent-tools';\n/** POST (MCP streamable HTTP, stateless) — authenticated by the per-turn bearer token, not the mutation token. */\nexport const VERSE_MCP_PATH = `${VERSE_AGENT_TOOLS_PATH}/mcp`;\n/** GET ?sessionId= → VerseAgentToolsState; POST VerseAgentToolsGrantRequest → VerseAgentToolsState. */\nexport const VERSE_MCP_GRANT_PATH = `${VERSE_AGENT_TOOLS_PATH}/grant`;\n/** GET ?sessionId= → VerseAgentToolsActivity (pending confirmations, takeovers, recent actions). */\nexport const VERSE_MCP_ACTIVITY_PATH = `${VERSE_AGENT_TOOLS_PATH}/activity`;\n/** POST { sessionId, id, answer } → { ok } */\nexport const VERSE_MCP_CONFIRM_PATH = `${VERSE_AGENT_TOOLS_PATH}/confirm`;\n/** POST { tabId, sessionId, shared } → VerseAgentToolsState — \"Share this shell with <seat>\". */\nexport const VERSE_MCP_SHARE_PATH = `${VERSE_AGENT_TOOLS_PATH}/share`;\n/** POST { tabId } → { ok } — \"Resume agent\" after the operator took a shell over. */\nexport const VERSE_MCP_RESUME_PATH = `${VERSE_AGENT_TOOLS_PATH}/resume`;\n/** GET → { tabs: VerseAgentTabInfo[] } — ownership/takeover for the Terminal pane. */\nexport const VERSE_MCP_TABS_PATH = `${VERSE_AGENT_TOOLS_PATH}/tabs`;\n\n/** The one server name every seat sees (`mcp__ashlr-verse__terminal_run`). */\nexport const VERSE_MCP_SERVER_NAME = 'ashlr-verse';\n\n/** Newest-but-one first: an unknown version is answered with the first (what every current seat speaks). */\nexport const VERSE_MCP_PROTOCOL_VERSIONS = ['2025-06-18', '2026-07-28', '2025-03-26', '2024-11-05'] as const;\nexport const VERSE_MCP_SERVER_INFO = { name: VERSE_MCP_SERVER_NAME, version: '1.0.0' };\n\n/**\n * How `ashlr verse-mcp-stdio` finds its turn (verse-mcp-stdio.ts). Kept here,\n * with the other plain data, so the launch code (verse-mcp-launch.ts) names\n * them without importing the bridge.\n */\nexport const VERSE_MCP_TOKEN_FILE_ENV = 'ASHLR_VERSE_MCP_TOKEN_FILE';\nexport const VERSE_MCP_RESOLVE_ENV = 'ASHLR_VERSE_MCP_RESOLVE';\nexport const VERSE_MCP_DIR_ENV = 'ASHLR_VERSE_MCP_DIR';\nexport const VERSE_MCP_RUNNING_FILE_ENV = 'ASHLR_VERSE_RUNNING_FILE';\n\nexport function isVerseMcpEndpointPath(path: string): boolean {\n return path === VERSE_MCP_PATH;\n}\n\n/**\n * What a turn token may reach. A tool belongs to exactly one scope; tools/list\n * shows only the tools whose scope the chat's grant holds right now.\n */\nexport type VerseMcpScope = 'terminal' | 'browser' | 'browser_act' | 'browser_script' | 'computer';\nexport const VERSE_MCP_SCOPES: readonly VerseMcpScope[] = ['terminal', 'browser', 'browser_act', 'browser_script', 'computer'];\n\n/** Terminal: off / agent-owned tabs only / agent tabs plus operator shells shared per tab. */\nexport type VerseAgentTerminalMode = 'off' | 'agent' | 'shared';\n/** Browser: off / look (observe) / act on localhost / act on the origins allowed for this chat. */\nexport type VerseAgentBrowserMode = 'off' | 'look' | 'act-localhost' | 'act-allowed';\n/** Computer use: off / only the listed apps. */\nexport type VerseAgentComputerMode = 'off' | 'apps';\n\nexport const VERSE_AGENT_TERMINAL_MODES: readonly VerseAgentTerminalMode[] = ['off', 'agent', 'shared'];\nexport const VERSE_AGENT_BROWSER_MODES: readonly VerseAgentBrowserMode[] = ['off', 'look', 'act-localhost', 'act-allowed'];\nexport const VERSE_AGENT_COMPUTER_MODES: readonly VerseAgentComputerMode[] = ['off', 'apps'];\n\n/** The operator's per-chat choices. Memory only: a sidecar restart turns every chat's tools off. */\nexport interface VerseAgentToolsGrant {\n terminal: VerseAgentTerminalMode;\n browser: VerseAgentBrowserMode;\n /** Page scripts (JavaScript evaluation) on top of an act mode. */\n browserScript: boolean;\n computer: VerseAgentComputerMode;\n /** Apps computer use may drive (bundle ids or names), when `computer` is 'apps'. */\n computerApps: string[];\n}\n\nexport const VERSE_AGENT_TOOLS_OFF: VerseAgentToolsGrant = Object.freeze({\n terminal: 'off',\n browser: 'off',\n browserScript: false,\n computer: 'off',\n computerApps: [] as string[],\n}) as VerseAgentToolsGrant;\n\n/** The scopes a grant holds. Pure: the sidecar and the page agree on it. */\nexport function scopesOfGrant(grant: VerseAgentToolsGrant): VerseMcpScope[] {\n const out: VerseMcpScope[] = [];\n if (grant.terminal !== 'off') out.push('terminal');\n if (grant.browser !== 'off') out.push('browser');\n if (grant.browser === 'act-localhost' || grant.browser === 'act-allowed') {\n out.push('browser_act');\n if (grant.browserScript) out.push('browser_script');\n }\n if (grant.computer === 'apps' && grant.computerApps.length > 0) out.push('computer');\n return out;\n}\n\n/** How a seat engine reaches the server, as the sheet explains it. */\nexport type VerseMcpSeatSupport =\n | { supported: true; transport: 'http' | 'stdio'; note: string }\n | { supported: false; reason: string };\n\n/**\n * Per-engine injection (verse-mcp-launch.ts), for the sheet. Devin's cloud\n * lane runs on Cognition's machines and cannot reach this Mac's loopback\n * server, so it is the one seat that cannot use the tools.\n */\nexport function verseMcpSeatSupport(engine: string, devinLane: 'cloud' | 'cli' | null = null): VerseMcpSeatSupport {\n switch (engine) {\n case 'claude':\n case 'local':\n return { supported: true, transport: 'http', note: 'Loaded from a private per-turn config file.' };\n case 'codex':\n return { supported: true, transport: 'stdio', note: 'Loaded through Ashlr\\'s stdio bridge for each turn.' };\n case 'grok':\n return { supported: true, transport: 'stdio', note: 'Loaded through Ashlr\\'s stdio bridge from this account\\'s own Grok profile.' };\n case 'devin':\n return devinLane === 'cloud'\n ? { supported: false, reason: 'Devin cloud runs on Cognition\\'s machines and cannot reach tools on this Mac. Use the Devin CLI seat for terminal and browser tools.' }\n : { supported: true, transport: 'http', note: 'Offered to the Devin CLI over ACP, and Devin\\'s own terminals run in a visible Verse tab.' };\n default:\n return { supported: false, reason: 'This seat cannot load Ashlr\\'s tools.' };\n }\n}\n\n/** One command the agent ran or asked for, for the chat's recent-actions strip. */\nexport interface VerseAgentAction {\n id: string;\n at: string;\n tool: string;\n /** Short, scrubbed description (`npm test` in \"proj\"). */\n summary: string;\n tabId: string | null;\n outcome: 'ok' | 'error' | 'denied' | 'pending';\n}\n\nexport type VerseMcpConfirmAnswer = 'once' | 'chat' | 'deny';\n\n/** A destructive command waiting for the operator (≤ 120 s). */\nexport interface VerseAgentPendingConfirmation {\n id: string;\n sessionId: string;\n at: string;\n expiresAt: string;\n tool: string;\n /** The rule that matched (`rm-rf`, `git-force-push`, …) — \"Allow for chat\" allows this rule. */\n rule: string;\n /** Why it needs a yes, in one sentence. */\n reason: string;\n /** The command, scrubbed. */\n command: string;\n tabId: string | null;\n}\n\n/** An agent-controlled terminal tab as the Terminal pane sees it. */\nexport interface VerseAgentTabInfo {\n tabId: string;\n /** The chat whose agent opened it (agent tab) or may use it (shared shell). */\n sessionId: string;\n kind: 'agent' | 'shared';\n /** Set while the operator has taken the shell over; the agent's writes are refused until \"Resume agent\". */\n takenOverAt: string | null;\n}\n\n/** The seat's name as the sheet and the Terminal pane say it (\"Share this shell with Codex\"). */\nexport function verseSeatToolLabel(engine: string): string {\n switch (engine) {\n case 'claude': return 'Claude';\n case 'local': return 'the local model';\n case 'codex': return 'Codex';\n case 'grok': return 'Grok';\n case 'devin': return 'Devin';\n default: return 'the agent';\n }\n}\n\nexport interface VerseAgentToolsState {\n sessionId: string;\n /** verseSeatToolLabel(engine) for the chat's seat. */\n seatLabel: string;\n grant: VerseAgentToolsGrant;\n scopes: VerseMcpScope[];\n /** Operator shells of this chat shared with its agent (tab ids). */\n sharedTabs: string[];\n support: VerseMcpSeatSupport;\n /** False under Node (no PTY / no native webview): terminal and computer tools answer \"desktop app only\". */\n desktop: boolean;\n /** A turn currently holds a live token. */\n turnActive: boolean;\n}\n\nexport interface VerseAgentToolsActivity {\n sessionId: string;\n pending: VerseAgentPendingConfirmation[];\n actions: VerseAgentAction[];\n tabs: VerseAgentTabInfo[];\n}\n\nexport interface VerseAgentToolsGrantRequest {\n sessionId: string;\n terminal?: VerseAgentTerminalMode;\n browser?: VerseAgentBrowserMode;\n browserScript?: boolean;\n computer?: VerseAgentComputerMode;\n computerApps?: string[];\n}\n","/**\n * routes/verse/agent-tools/agent-tools-client.ts — the page's calls to the\n * agent-tools routes (core/verse/verse-mcp-api.ts). Same conventions as the\n * Browser pane's: writes pull the held mutation token and throw\n * `VerseMutationLockedError` when none is held; reads carry the read-client\n * proof. Injectable (`AgentToolsApi`) so components test on fakes.\n */\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { apiGet, apiPost } from '../../../data/client.js';\nimport {\n VERSE_MCP_ACTIVITY_PATH,\n VERSE_MCP_CONFIRM_PATH,\n VERSE_MCP_GRANT_PATH,\n VERSE_MCP_RESUME_PATH,\n VERSE_MCP_SHARE_PATH,\n VERSE_MCP_TABS_PATH,\n type VerseAgentTabInfo,\n type VerseAgentToolsActivity,\n type VerseAgentToolsGrantRequest,\n type VerseAgentToolsState,\n type VerseMcpConfirmAnswer,\n} from '../../../../core/verse/verse-mcp-types.js';\nimport { VerseMutationLockedError } from '../verse-queries.js';\n\nexport interface AgentToolsApi {\n state(sessionId: string, signal?: AbortSignal): Promise<VerseAgentToolsState>;\n setGrant(req: VerseAgentToolsGrantRequest): Promise<VerseAgentToolsState>;\n activity(sessionId: string, signal?: AbortSignal): Promise<VerseAgentToolsActivity>;\n confirm(sessionId: string, id: string, answer: VerseMcpConfirmAnswer): Promise<void>;\n share(sessionId: string, tabId: string, shared: boolean): Promise<VerseAgentToolsState>;\n resume(tabId: string): Promise<void>;\n tabs(signal?: AbortSignal): Promise<{ tabs: VerseAgentTabInfo[] }>;\n}\n\nconst q = (params: Record<string, string>): string => new URLSearchParams(params).toString();\n\nasync function post<T>(path: string, body: unknown): Promise<T> {\n const token = getMutationToken();\n if (!token) throw new VerseMutationLockedError();\n const result = await apiPost<T>(path, body, token);\n touchMutationHold();\n return result;\n}\n\nexport const agentToolsApi: AgentToolsApi = {\n state: (sessionId, signal) => apiGet(`${VERSE_MCP_GRANT_PATH}?${q({ sessionId })}`, signal),\n setGrant: (req) => post(VERSE_MCP_GRANT_PATH, req),\n activity: (sessionId, signal) => apiGet(`${VERSE_MCP_ACTIVITY_PATH}?${q({ sessionId })}`, signal),\n confirm: async (sessionId, id, answer) => { await post(VERSE_MCP_CONFIRM_PATH, { sessionId, id, answer }); },\n share: (sessionId, tabId, shared) => post(VERSE_MCP_SHARE_PATH, { sessionId, tabId, shared }),\n resume: async (tabId) => { await post(VERSE_MCP_RESUME_PATH, { tabId }); },\n tabs: (signal) => apiGet(VERSE_MCP_TABS_PATH, signal),\n};\n"],"mappings":"4GAsBA,IAAa,EAAyB,yBAER,GAAG,EAAH,EAE9B,IAAa,EAAuB,GAAG,EAAuB,QAEjD,EAA0B,GAAG,EAAuB,WAEpD,EAAyB,GAAG,EAAuB,UAEnD,EAAuB,GAAG,EAAuB,QAEjD,EAAwB,GAAG,EAAuB,SAElD,EAAsB,GAAG,EAAuB,OAoDF,OAAO,OAAO,CACvE,SAAU,MACV,QAAS,MACT,cAAe,GACf,SAAU,MACV,aAAc,CAAC,CACjB,CAAC,EC5DD,IAAM,EAAK,GAA2C,IAAI,gBAAgB,CAAM,CAAC,CAAC,SAAS,EAE3F,eAAe,EAAQ,EAAc,EAA2B,CAC9D,IAAM,EAAQ,EAAiB,EAC/B,GAAI,CAAC,EAAO,MAAM,IAAI,EACtB,IAAM,EAAS,MAAM,EAAW,EAAM,EAAM,CAAK,EAEjD,OADA,EAAkB,EACX,CACT,CAEA,IAAa,EAA+B,CAC1C,OAAQ,EAAW,IAAW,EAAO,GAAG,EAAqB,GAAG,EAAE,CAAE,WAAU,CAAC,IAAK,CAAM,EAC1F,SAAW,GAAQ,EAAK,EAAsB,CAAG,EACjD,UAAW,EAAW,IAAW,EAAO,GAAG,EAAwB,GAAG,EAAE,CAAE,WAAU,CAAC,IAAK,CAAM,EAChG,QAAS,MAAO,EAAW,EAAI,IAAW,CAAE,MAAM,EAAK,EAAwB,CAAE,YAAW,KAAI,QAAO,CAAC,CAAG,EAC3G,OAAQ,EAAW,EAAO,IAAW,EAAK,EAAsB,CAAE,YAAW,QAAO,QAAO,CAAC,EAC5F,OAAQ,KAAO,IAAU,CAAE,MAAM,EAAK,EAAuB,CAAE,OAAM,CAAC,CAAG,EACzE,KAAO,GAAW,EAAO,EAAqB,CAAM,CACtD"}
@@ -1,2 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-hePW80VL.js";import{R as t}from"./VerseConsoleApp-Cj6yPJo3.js";var n=e({REQUEST_TTL_MS:()=>r,getAgentsFocus:()=>l,isAgentsFocusLive:()=>u,requestAgentsFocus:()=>c,subscribeAgentsFocus:()=>f,takeAgentsFocus:()=>d}),r=2e4,i=null,a=0,o=new Set;function s(){for(let e of[...o])e()}function c(e,n){a+=1,i={kind:e,seq:a,at:Date.now(),...n?{cardId:n}:{}},t(`agents`),s()}function l(){return i}function u(e,t=Date.now()){return t-e.at<=r}function d(e){i?.seq===e&&(i=null,s())}function f(e){return o.add(e),()=>o.delete(e)}export{d as a,f as i,l as n,u as r,n as t};
2
- //# sourceMappingURL=agents-focus-DjBz83BQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents-focus-DjBz83BQ.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/agents/agents-focus.ts"],"sourcesContent":["/**\n * routes/verse/agents/agents-focus.ts — \"open the Agents board with New agent\n * up\" from a key (⌘N on the board, ⇧⌘N anywhere) or ⌘K. The board is its own\n * lazy chunk, so a request waits here (up to REQUEST_TTL_MS) until it mounts\n * and takes it — the same shape as automations-focus.ts.\n */\nimport { setVerseSection } from '../verse-ui-store.js';\n\nexport type AgentsFocusKind = 'new' | 'new-multi' | 'board';\nexport type AgentsFocusRequest = { kind: AgentsFocusKind; seq: number; at: number; cardId?: string };\n\nexport const REQUEST_TTL_MS = 20_000;\n\nlet current: AgentsFocusRequest | null = null;\nlet seq = 0;\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const l of [...listeners]) l();\n}\n\nexport function requestAgentsFocus(kind: AgentsFocusKind, cardId?: string): void {\n seq += 1;\n current = { kind, seq, at: Date.now(), ...(cardId ? { cardId } : {}) };\n setVerseSection('agents');\n emit();\n}\n\nexport function getAgentsFocus(): AgentsFocusRequest | null {\n return current;\n}\n\nexport function isAgentsFocusLive(request: AgentsFocusRequest, now: number = Date.now()): boolean {\n return now - request.at <= REQUEST_TTL_MS;\n}\n\nexport function takeAgentsFocus(requestSeq: number): void {\n if (current?.seq !== requestSeq) return;\n current = null;\n emit();\n}\n\nexport function subscribeAgentsFocus(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n"],"mappings":"4PAWa,EAAiB,IAE1B,EAAqC,KACrC,EAAM,EACJ,EAAY,IAAI,IAEtB,SAAS,GAAa,CACpB,IAAK,IAAM,IAAK,CAAC,GAAG,CAAS,EAAG,EAAE,CACpC,CAEA,SAAgB,EAAmB,EAAuB,EAAuB,CAC/E,GAAO,EACP,EAAU,CAAE,OAAM,MAAK,GAAI,KAAK,IAAI,EAAG,GAAI,EAAS,CAAE,QAAO,EAAI,CAAC,CAAG,EACrE,EAAgB,QAAQ,EACxB,EAAK,CACP,CAEA,SAAgB,GAA4C,CAC1D,OAAO,CACT,CAEA,SAAgB,EAAkB,EAA6B,EAAc,KAAK,IAAI,EAAY,CAChG,OAAO,EAAM,EAAQ,IAAM,CAC7B,CAEA,SAAgB,EAAgB,EAA0B,CACpD,GAAS,MAAQ,IACrB,EAAU,KACV,EAAK,EACP,CAEA,SAAgB,EAAqB,EAAkC,CAErE,OADA,EAAU,IAAI,CAAQ,MACT,EAAU,OAAO,CAAQ,CACxC"}
@@ -1,2 +0,0 @@
1
- var e=`3.22.0`,t=`Ashlr Verse`;export{e as n,t};
2
- //# sourceMappingURL=app-version-B0FcXqqB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-version-B0FcXqqB.js","names":[],"sources":["../../../../../../package.json","../../../../../../src/web-ui/routes/verse/sections/app-version.ts"],"sourcesContent":["{\n \"name\": \"@ashlr/hub\",\n \"version\": \"3.22.0\",\n \"description\": \"Local-first command center for agentic engineers.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": \"Mason Wyatt <mason@evero-consulting.com>\",\n \"homepage\": \"https://github.com/ashlrai/ashlr-hub#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ashlrai/ashlr-hub.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ashlrai/ashlr-hub/issues\"\n },\n \"keywords\": [\n \"cli\",\n \"agentic\",\n \"mcp\",\n \"local-first\",\n \"raycast\",\n \"developer-tools\",\n \"ai\"\n ],\n \"type\": \"module\",\n \"bin\": {\n \"ashlr\": \"bin/ashlr\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"scripts/run-verify-command.mjs\",\n \"scripts/scorecard-history-worker.mjs\",\n \"scripts/evaluators/preparation-verification-activity.mjs\",\n \"scripts/evaluators/preparation-verification-activity.d.mts\",\n \"scripts/evaluators/preparation-verification-protocol.mjs\",\n \"scripts/evaluators/preparation-verification-native.mjs\",\n \"scripts/evaluators/preparation-verification-native.d.mts\",\n \"schema\",\n \"CHANGELOG.md\",\n \"docs/README.md\",\n \"docs/QUICKSTART.md\",\n \"docs/DEMO.md\",\n \"docs/ARCHITECTURE.md\",\n \"docs/MISSION-OS.md\",\n \"docs/ASHLR-UNIVERSE.md\",\n \"docs/AUTONOMY-GAP.md\",\n \"docs/FIRM-DEMO.md\",\n \"docs/UNIVERSE-RESEARCH.md\",\n \"docs/UNIVERSE-AUTONOMY-RESEARCH.md\",\n \"docs/RESOURCE-POOLS.md\",\n \"docs/NORTH-STAR.md\",\n \"docs/ELITE-AGENT-EFFICIENCY.md\",\n \"docs/OPENAI-AGENTS-INTEGRATION.md\",\n \"docs/DOTS-COMPANION.md\",\n \"docs/AGENT-HARNESS-EVOLUTION.md\",\n \"docs/RESET-AWARE-SCHEDULING.md\",\n \"docs/EXECUTION-FEEDBACK.md\",\n \"docs/RESOURCE-EVIDENCE.md\",\n \"docs/RUNTIME_ACTIVATION_AUTHORITY.md\",\n \"docs/REMOTE-PHONE.md\",\n \"docs/contracts/CONTRACT-M515.md\",\n \"docs/contracts/CONTRACT-M521.md\",\n \"docs/contracts/CONTRACT-M568.md\",\n \"docs/contracts/CONTRACT-MISSION-RECEIPT-V1.md\"\n ],\n \"bundledDependencies\": [\n \"@modelcontextprotocol/sdk\",\n \"@simplewebauthn/browser\",\n \"@simplewebauthn/server\",\n \"jose\",\n \"marked\",\n \"reflect-metadata\",\n \"tar\",\n \"web-push\",\n \"yaml\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/api/index.d.ts\",\n \"import\": \"./dist/api/index.js\"\n },\n \"./core\": {\n \"types\": \"./dist/api/core.d.ts\",\n \"import\": \"./dist/api/core.js\"\n },\n \"./types\": {\n \"types\": \"./dist/api/types.d.ts\",\n \"import\": \"./dist/api/types.js\"\n },\n \"./plugin\": {\n \"types\": \"./dist/api/plugin.d.ts\",\n \"import\": \"./dist/api/plugin.js\"\n },\n \"./universe\": {\n \"types\": \"./dist/core/universe/index.d.ts\",\n \"import\": \"./dist/core/universe/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"engines\": {\n \"node\": \">=22.15.0\"\n },\n \"scripts\": {\n \"prepublishOnly\": \"npm run build && npm run check:first-paint && npm run check:docs && npm run typecheck && npm run lint && npm run test:ci:sharded && npm run test:web\",\n \"prepack\": \"npm run build\",\n \"build\": \"tsc -p tsconfig.json && node scripts/authority-surface.mjs && node scripts/copy-assets.mjs && node scripts/build-preparation-builtin.mjs && vite build --config vite.config.web.ts && node scripts/build-release-dependency-inventory.mjs && node scripts/build-identity.mjs\",\n \"build:preparation-builtin\": \"node scripts/build-preparation-builtin.mjs\",\n \"build:binary\": \"node scripts/build-sea.mjs\",\n \"release:canary\": \"node scripts/run-signed-release-canary.mjs\",\n \"verify:local-production\": \"node scripts/run-local-production-gate.mjs\",\n \"build:web\": \"vite build --config vite.config.web.ts\",\n \"dev\": \"tsx src/cli/index.ts\",\n \"dev:web\": \"vite --config vite.config.web.ts\",\n \"test\": \"vitest run\",\n \"test:serial\": \"vitest run --no-file-parallelism\",\n \"test:web\": \"vitest run --config vitest.config.web.ts\",\n \"test:ci\": \"node scripts/test-ci.mjs\",\n \"test:ci:sharded\": \"node scripts/test-ci-sharded.mjs\",\n \"test:invariants\": \"vitest run test/h*.test.ts --no-file-parallelism\",\n \"test:engineering-responsiveness\": \"vitest run --config vitest.config.engineering-performance.ts\",\n \"conformance:ecosystem\": \"tsx scripts/run-ecosystem-conformance.ts\",\n \"check:first-paint\": \"node scripts/check-first-paint-budget.mjs --budget-kb 353 --mobile-budget-kb 250\",\n \"check:docs\": \"node scripts/check-documentation.mjs\",\n \"gate\": \"node scripts/gate.mjs\",\n \"gate:full\": \"node scripts/gate.mjs --full\",\n \"ship:local\": \"node scripts/ship-local.mjs\",\n \"lint\": \"eslint . && npm run lint:realio-lane && npm run lint:verse-sync-io\",\n \"lint:realio-lane\": \"node scripts/check-realio-lane-membership.mjs\",\n \"lint:verse-sync-io\": \"node scripts/check-verse-sync-io.mjs\",\n \"typecheck\": \"tsc --noEmit && npm run typecheck:web\",\n \"typecheck:web\": \"tsc --noEmit -p src/web-ui/tsconfig.json\"\n },\n \"devDependencies\": {\n \"@codemirror/autocomplete\": \"^6.20.3\",\n \"@codemirror/commands\": \"^6.11.1\",\n \"@codemirror/language\": \"^6.12.4\",\n \"@codemirror/legacy-modes\": \"^6.5.4\",\n \"@codemirror/state\": \"^6.7.6\",\n \"@codemirror/view\": \"^6.43.13\",\n \"@lezer/highlight\": \"^1.2.4\",\n \"@testing-library/jest-dom\": \"^7.0.1\",\n \"@testing-library/react\": \"^16.1.0\",\n \"@testing-library/user-event\": \"^14.5.2\",\n \"@types/node\": \"^26.2.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@types/web-push\": \"^3.6.4\",\n \"@vitejs/plugin-react\": \"^6.1.0\",\n \"@xterm/addon-fit\": \"^0.11.0\",\n \"@xterm/addon-search\": \"^0.16.0\",\n \"@xterm/addon-unicode11\": \"^0.9.0\",\n \"@xterm/addon-web-links\": \"^0.12.0\",\n \"@xterm/addon-webgl\": \"^0.19.0\",\n \"@xterm/xterm\": \"^6.0.0\",\n \"dompurify\": \"^3.4.16\",\n \"eslint\": \"^9.0.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0\",\n \"jsdom\": \"^25.0.1\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"react-router-dom\": \"^7.1.1\",\n \"tsx\": \"^4.0.0\",\n \"typescript\": \"^5.5.0\",\n \"typescript-eslint\": \"^8.61.0\",\n \"vite\": \"8.2.2\",\n \"vitest\": \"4.1.11\"\n },\n \"overrides\": {\n \"fast-uri\": \"3.1.8\",\n \"hono\": \"4.13.7\",\n \"ip-address\": \"10.7.2\",\n \"vite\": \"8.2.2\",\n \"js-yaml\": \"4.3.2\",\n \"nanoid\": \"3.3.18\",\n \"qs\": \"6.16.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.30.0\",\n \"@simplewebauthn/browser\": \"^14.0.0\",\n \"@simplewebauthn/server\": \"^14.0.3\",\n \"jose\": \"^6.2.12\",\n \"marked\": \"18.0.10\",\n \"reflect-metadata\": \"0.2.2\",\n \"tar\": \"7.5.22\",\n \"web-push\": \"3.6.7\",\n \"yaml\": \"^2.8.1\"\n },\n \"bundleDependencies\": [\n \"@modelcontextprotocol/sdk\",\n \"@simplewebauthn/browser\",\n \"@simplewebauthn/server\",\n \"jose\",\n \"marked\",\n \"tar\",\n \"web-push\",\n \"yaml\"\n ]\n}\n","/**\n * routes/verse/sections/app-version.ts — the hub's version, for About.\n *\n * Read straight from package.json (Vite inlines the named export at build\n * time and `resolveJsonModule` types it), because no API route reports it:\n * /api/health answers liveness, /api/snapshot answers fleet state, and\n * neither carries the running hub's version. A hardcoded string here would\n * silently drift from the published package on every release.\n */\nimport { version } from '../../../../../package.json';\n\nexport const APP_VERSION: string = version;\nexport const APP_NAME = 'Ashlr Verse';\n"],"mappings":"ACWA,IAAa,EAAsB,SACtB,EAAW"}
@@ -1,2 +0,0 @@
1
- import{V as e}from"./VerseShared-CH8mV5ew.js";var t={name:`name`,command:`command`,args:`args`,env:`env`,sourceRef:`sourceRef`},n={seatId:`seatId`,label:`label`,engine:`engine`,accountId:`accountId`,servers:`servers`,reason:`reason`,configFile:`configFile`,configFormat:`configFormat`,notes:`notes`},r={servers:`servers`,configured:`configured`,note:`note`},i={sampledAt:`sampledAt`,seats:`seats`,machine:`machine`,scope:`scope`,notes:`notes`},a={accountId:`accountId`,label:`label`,provider:`provider`,authentication:`authentication`,state:`state`,planType:`planType`,reason:`reason`,version:`version`,pinnedVersion:`pinnedVersion`,versionState:`versionState`,usageBlockedByPin:`usageBlockedByPin`,notes:`notes`},o={sampledAt:`sampledAt`,accounts:`accounts`,driftDetected:`driftDetected`,notes:`notes`},s={available:`available`,pinned:`pinned`,aliasRef:`aliasRef`,tenantRef:`tenantRef`,principalRef:`principalRef`,reason:`reason`,setupIssues:`setupIssues`};function c(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function l(e){return typeof e==`string`?e:null}function u(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function d(e){return e===!0}function f(e){let n=c(e);if(n===null)return null;let r=l(n[t.name]),i=l(n[t.command]);if(r===null||i===null)return null;let a=null,o=c(n[t.env]);if(o!==null){let e=Object.keys(o);if(e.length>0){a={};for(let t of e)a[t]=`<set>`}}return{name:r,command:i,args:u(n[t.args]),env:a,sourceRef:l(n[t.sourceRef])??`(unknown source)`}}function p(e){let t=c(e);if(t===null)return null;let r=l(t[n.seatId]);if(r===null)return null;let i=Array.isArray(t[n.servers])?t[n.servers].map(f).filter(e=>e!==null):[];return{seatId:r,label:l(t[n.label])??r,engine:l(t[n.engine])??`unknown`,accountId:l(t[n.accountId])??r,servers:i,reason:l(t[n.reason])??`unknown`,configFile:l(t[n.configFile]),configFormat:l(t[n.configFormat]),notes:u(t[n.notes])}}function m(e){let t=c(e);return t===null?null:{available:d(t[s.available]),pinned:d(t[s.pinned]),aliasRef:l(t[s.aliasRef]),tenantRef:l(t[s.tenantRef]),principalRef:l(t[s.principalRef]),reason:l(t[s.reason])??`unknown`,...Array.isArray(t[s.setupIssues])?{setupIssues:u(t[s.setupIssues]).filter(e=>Object.hasOwn(b,e))}:{}}}function h(e){let t=c(e);if(t===null||!Array.isArray(t[i.seats]))return null;let n=c(t[i.machine]),a=n!==null&&Array.isArray(n[r.servers])?n[r.servers].map(f).filter(e=>e!==null):[];return{sampledAt:l(t[i.sampledAt]),seats:t[i.seats].map(p).filter(e=>e!==null),machine:{servers:a,configured:n===null?a.length>0:d(n[r.configured]),note:(n===null?null:l(n[r.note]))??``},scope:m(t[i.scope]),notes:u(t[i.notes])}}function g(e){let t=c(e);if(t===null)return null;let n=l(t[a.accountId]);return n===null?null:{accountId:n,label:l(t[a.label])??n,provider:l(t[a.provider])??`unknown`,authentication:l(t[a.authentication])??`unknown`,state:l(t[a.state])??`unknown`,planType:l(t[a.planType]),reason:l(t[a.reason])??`unknown`,version:l(t[a.version]),pinnedVersion:l(t[a.pinnedVersion]),versionState:l(t[a.versionState])??`unverified`,usageBlockedByPin:d(t[a.usageBlockedByPin]),notes:u(t[a.notes])}}function _(e){let t=c(e);if(t===null||!Array.isArray(t[o.accounts]))return null;let n=t[o.accounts].map(g).filter(e=>e!==null);return{sampledAt:l(t[o.sampledAt]),accounts:n,driftDetected:d(t[o.driftDetected])||n.some(e=>e.versionState===`drift`),notes:u(t[o.notes])}}var v={"mcp-seat-isolated-by-adapter":`Verse launches every turn on this seat with an empty MCP configuration, so it loads no MCP servers at all — whatever is configured elsewhere on this machine.`,"mcp-account-config-absent":`This account has no MCP configuration file of its own, so it starts with none.`,"mcp-account-config-not-json":`This account keeps its MCP servers in a TOML config that the provider CLI reads directly. Hub does not parse or rewrite it, so it cannot list what is in there.`,"mcp-account-config-read":`Read from this account's own private configuration.`,"mcp-account-config-unreadable":`This account's configuration could not be read.`,"mcp-account-profile-unresolved":`This account's private profile could not be located, so Hub cannot say what it would load.`},y={"mcp-scope-locus-unavailable":`Locus is not reachable on this machine, so writes are not attributable to a tenant.`,"mcp-scope-unpinned":`Locus is running but nothing is pinned, so there is no tenant to scope a write to.`,"mcp-scope-seal-unverified":`Locus reports a pin whose seal did not verify. Fix the pin before writing anything.`,"mcp-scope-expired":`The Locus pin has expired.`,"mcp-scope-frozen":`The Locus pin is frozen. Scope attribution is unavailable until it is restored.`,"mcp-scope-not-ready":`Locus reports this identity is not ready. Scope attribution could not be verified.`,"mcp-scope-readiness-unverified":`Locus did not verify the pin’s seal and expiry. Scope attribution is unverified.`,"mcp-scope-pinned":`Locus verified the current pin for the tenant shown here.`},b={phantom_unavailable:`Phantom is not available to Locus. Install Phantom or restore its executable on PATH, then run locus doctor.`,authority_anchor_unavailable:`The Locus authority anchor is unavailable. Run locus doctor on your Mac and restore the intended pin manually.`,credential_migration_incomplete:`Credential migration is incomplete. Run locus doctor on your Mac to review reconciliation.`};function x(e,t,n){return e[t]??n}var S={ok:`success`,warn:`warning`,error:`danger`,off:`off`,unknown:`neutral`};function C(e){return S[e]}var w=[`claude`,`codex`,`grok`,`local`];function T(e){return w.includes(e)?e:null}function E(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)||t}function D(e){if(!e)return[];let t=[],n=new Set,r=(e,r)=>{typeof e!=`string`||e.length===0||n.has(e)||(n.add(e),t.push({path:e,name:r??E(e)}))},i=[...e.sessions].sort((e,t)=>Date.parse(t.updatedAt)-Date.parse(e.updatedAt));for(let e of i)r(e.projectPath);for(let t of e.projects)r(t.path,t.name);return t}function O(e){let t=[];for(let n of e){if(n.engine!==`local`)continue;let e=n.models[0]?.id??(n.id.startsWith(`local:`)?n.id.slice(6):null);e&&!t.includes(e)&&t.push(e)}return t}function k(e,t){return t.via===`ollama`?e.ollamaLaunch?t.model?[...e.ollamaLaunch,`--model`,t.model]:[...e.ollamaLaunch]:null:e.actions.find(e=>e.kind===`launch`)?.command??null}var A=new Set([`spent`,`not-checked`,`unavailable`]);function j(e,t){if(e.kind===`local`)return[];let n=[],r=e.connection,i=e.signedOut||r!==null&&(r.connection===`signed-out`||r.connection===`expiring`||r.fixKind===`reauth`);i&&n.push({kind:`reconnect`,label:`Reconnect`,command:null,primary:!0});let a=!i&&t!=null&&A.has(t.kind);return a&&n.push({kind:`check-again`,label:`Check again`,command:null,primary:!0}),r!==null&&r.fixKind!==`reauth`&&r.fixKind!==`none`&&r.fixCommand!==null&&n.push({kind:`fix`,label:`Fix`,command:r.fixCommand,primary:!i&&!a}),n.push({kind:`edit-budget`,label:`Edit budget`,command:null,primary:!1}),n}function M(t){return t.seats.map(t=>{let n=T(t.engine),r=t.reason===`mcp-seat-isolated-by-adapter`,i=t.servers.length;return{seatId:t.seatId,label:t.label,engine:n,monogram:n?e[n]:t.label.slice(0,1).toUpperCase(),servers:t.servers,loads:i>0?`loads ${i} server${i===1?``:`s`}`:r?`loads none — isolated by Verse`:`loads none`,isolated:r,sentence:x(v,t.reason,`Hub cannot say what this seat would load.`),reason:t.reason,notes:t.notes}})}function N(e){let t=[{id:`hub`,label:`Hub gateway registry`,disabledReason:null}];for(let n of e?.seats??[]){if(n.seatId===`local`)continue;let e=n.configFormat===`toml`||n.reason===`mcp-account-config-not-json`;t.push({id:`account:${n.accountId}`,label:`${n.label} (${n.engine})`,disabledReason:e?`Keeps its MCP servers in TOML, which Hub does not rewrite.`:null})}return t}function P(e){let t=[],n=``,r=null,i=!1;for(let a of e){if(r){a===r?r=null:n+=a;continue}if(a===`"`||a===`'`){r=a,i=!0;continue}if(/\s/.test(a)){(i||n.length>0)&&t.push(n),n=``,i=!1;continue}n+=a}return(i||n.length>0)&&t.push(n),t}function F(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(e.length===0||e.startsWith(`#`))continue;let r=e.indexOf(`=`),i=r===-1?``:e.slice(0,r).trim();if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(i))return{ok:!1,error:`“${e.slice(0,40)}” is not KEY=value.`};t[i]=e.slice(r+1)}return{ok:!0,env:t}}export{O as a,F as c,b as d,f,x as h,D as i,P as l,h as m,C as n,M as o,_ as p,k as r,N as s,j as t,y as u};
2
- //# sourceMappingURL=apps-model-C-SdWY0N.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apps-model-C-SdWY0N.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mcp/mcp-contract.ts","../../../../../../src/web-ui/routes/verse/apps/apps-model.ts"],"sourcesContent":["/**\n * routes/verse/mcp/mcp-contract.ts — the wire seam for MCP management.\n *\n * Same posture as routes/verse/usage/usage-contract.ts, for the same two\n * reasons:\n *\n * 1. EVERY import from src/core here MUST be type-only. `core/verse/\n * mcp-seat-view.ts` pulls `node:fs` and `node:os`; a VALUE import of even\n * one constant drags that graph into the browser bundle and `vite build`\n * fails. Type-only imports are erased, so the seam guards below cost\n * nothing at runtime.\n * 2. Nothing is CAST. Every read goes through a structural narrower, so a\n * field rename in src/core degrades this panel to an honest \"unknown\"\n * instead of throwing at render time — and the `WIRE_*_KEYS` blocks make\n * that rename fail `npm run typecheck:web` here, at the seam, first.\n *\n * SECURITY: the server already redacts every env value to '<set>' via\n * `redactEnv` and publishes config files as home-relative refs. This module\n * is the client-side backstop on top of that: {@link narrowServer} FORCES\n * every env value to '<set>' whatever arrived, so a server that ever\n * regressed could not print a secret through this panel.\n *\n * Pure: no React, no I/O.\n */\nimport type {\n VerseMcpMachineRegistry,\n VerseMcpSeatView,\n VerseMcpServerView,\n VerseMcpSnapshot,\n} from '../../../../core/verse/mcp-seat-view.js';\nimport type { VerseMcpScope } from '../../../../core/verse/mcp-scope.js';\nimport type {\n VerseAccountCliHealth,\n VerseCliHealthSnapshot,\n} from '../../../../core/verse/mcp-cli-health.js';\n\n// ---------------------------------------------------------------------------\n// Seam contract — compile-time only, zero runtime cost.\n// ---------------------------------------------------------------------------\n\nconst WIRE_SERVER_KEYS = {\n name: 'name',\n command: 'command',\n args: 'args',\n env: 'env',\n sourceRef: 'sourceRef',\n} as const satisfies Record<string, keyof VerseMcpServerView>;\n\nconst WIRE_SEAT_KEYS = {\n seatId: 'seatId',\n label: 'label',\n engine: 'engine',\n accountId: 'accountId',\n servers: 'servers',\n reason: 'reason',\n configFile: 'configFile',\n configFormat: 'configFormat',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseMcpSeatView>;\n\nconst WIRE_MACHINE_KEYS = {\n servers: 'servers',\n configured: 'configured',\n note: 'note',\n} as const satisfies Record<string, keyof VerseMcpMachineRegistry>;\n\nconst WIRE_SNAPSHOT_KEYS = {\n sampledAt: 'sampledAt',\n seats: 'seats',\n machine: 'machine',\n scope: 'scope',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseMcpSnapshot>;\n\nconst WIRE_HEALTH_KEYS = {\n accountId: 'accountId',\n label: 'label',\n provider: 'provider',\n authentication: 'authentication',\n state: 'state',\n planType: 'planType',\n reason: 'reason',\n version: 'version',\n pinnedVersion: 'pinnedVersion',\n versionState: 'versionState',\n usageBlockedByPin: 'usageBlockedByPin',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseAccountCliHealth>;\n\nconst WIRE_HEALTH_SNAPSHOT_KEYS = {\n sampledAt: 'sampledAt',\n accounts: 'accounts',\n driftDetected: 'driftDetected',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseCliHealthSnapshot>;\n\nconst WIRE_SCOPE_KEYS = {\n available: 'available',\n pinned: 'pinned',\n aliasRef: 'aliasRef',\n tenantRef: 'tenantRef',\n principalRef: 'principalRef',\n reason: 'reason',\n setupIssues: 'setupIssues',\n} as const satisfies Record<string, keyof VerseMcpScope>;\n\n// ---------------------------------------------------------------------------\n// Display shapes\n// ---------------------------------------------------------------------------\n\nexport interface McpServer {\n name: string;\n command: string;\n args: string[];\n /** Keys only. Every value is '<set>' — forced here, not merely trusted. */\n env: Record<string, string> | null;\n sourceRef: string;\n}\n\nexport interface McpSeat {\n seatId: string;\n label: string;\n engine: string;\n accountId: string;\n servers: McpServer[];\n reason: string;\n configFile: string | null;\n configFormat: string | null;\n notes: string[];\n}\n\nexport interface McpScope {\n available: boolean;\n pinned: boolean;\n aliasRef: string | null;\n tenantRef: string | null;\n principalRef: string | null;\n reason: string;\n setupIssues?: string[];\n}\n\nexport interface McpSnapshot {\n sampledAt: string | null;\n seats: McpSeat[];\n machine: { servers: McpServer[]; configured: boolean; note: string };\n scope: McpScope | null;\n notes: string[];\n}\n\nexport interface CliHealthRow {\n accountId: string;\n label: string;\n provider: string;\n authentication: string;\n state: string;\n planType: string | null;\n reason: string;\n version: string | null;\n pinnedVersion: string | null;\n versionState: string;\n usageBlockedByPin: boolean;\n notes: string[];\n}\n\nexport interface CliHealthSnapshot {\n sampledAt: string | null;\n accounts: CliHealthRow[];\n driftDetected: boolean;\n notes: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Narrowers\n// ---------------------------------------------------------------------------\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction text(value: unknown): string | null {\n return typeof value === 'string' ? value : null;\n}\n\nfunction strings(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction flag(value: unknown): boolean {\n return value === true;\n}\n\n/**\n * Narrow one server, forcing every env value to '<set>'.\n *\n * The redaction is re-applied rather than trusted. The server already did it;\n * doing it again here means no future server bug can turn this panel into a\n * secret printer, and it costs one map over at most a handful of keys.\n */\nexport function narrowServer(raw: unknown): McpServer | null {\n const row = record(raw);\n if (row === null) return null;\n const name = text(row[WIRE_SERVER_KEYS.name]);\n const command = text(row[WIRE_SERVER_KEYS.command]);\n if (name === null || command === null) return null;\n\n let env: Record<string, string> | null = null;\n const rawEnv = record(row[WIRE_SERVER_KEYS.env]);\n if (rawEnv !== null) {\n const keys = Object.keys(rawEnv);\n if (keys.length > 0) {\n env = {};\n for (const key of keys) env[key] = '<set>';\n }\n }\n\n return {\n name,\n command,\n args: strings(row[WIRE_SERVER_KEYS.args]),\n env,\n sourceRef: text(row[WIRE_SERVER_KEYS.sourceRef]) ?? '(unknown source)',\n };\n}\n\nfunction narrowSeat(raw: unknown): McpSeat | null {\n const row = record(raw);\n if (row === null) return null;\n const seatId = text(row[WIRE_SEAT_KEYS.seatId]);\n if (seatId === null) return null;\n const servers = Array.isArray(row[WIRE_SEAT_KEYS.servers])\n ? (row[WIRE_SEAT_KEYS.servers] as unknown[]).map(narrowServer).filter((s): s is McpServer => s !== null)\n : [];\n return {\n seatId,\n label: text(row[WIRE_SEAT_KEYS.label]) ?? seatId,\n engine: text(row[WIRE_SEAT_KEYS.engine]) ?? 'unknown',\n accountId: text(row[WIRE_SEAT_KEYS.accountId]) ?? seatId,\n servers,\n reason: text(row[WIRE_SEAT_KEYS.reason]) ?? 'unknown',\n configFile: text(row[WIRE_SEAT_KEYS.configFile]),\n configFormat: text(row[WIRE_SEAT_KEYS.configFormat]),\n notes: strings(row[WIRE_SEAT_KEYS.notes]),\n };\n}\n\nfunction narrowScope(raw: unknown): McpScope | null {\n const row = record(raw);\n if (row === null) return null;\n return {\n available: flag(row[WIRE_SCOPE_KEYS.available]),\n pinned: flag(row[WIRE_SCOPE_KEYS.pinned]),\n aliasRef: text(row[WIRE_SCOPE_KEYS.aliasRef]),\n tenantRef: text(row[WIRE_SCOPE_KEYS.tenantRef]),\n principalRef: text(row[WIRE_SCOPE_KEYS.principalRef]),\n reason: text(row[WIRE_SCOPE_KEYS.reason]) ?? 'unknown',\n ...(Array.isArray(row[WIRE_SCOPE_KEYS.setupIssues]) ? {\n setupIssues: strings(row[WIRE_SCOPE_KEYS.setupIssues]).filter((code) => Object.hasOwn(SCOPE_SETUP_COPY, code)),\n } : {}),\n };\n}\n\n/** Narrow GET /api/verse/mcp. Null when the body is not this shape at all. */\nexport function projectMcpSnapshot(raw: unknown): McpSnapshot | null {\n const row = record(raw);\n if (row === null) return null;\n if (!Array.isArray(row[WIRE_SNAPSHOT_KEYS.seats])) return null;\n\n const machine = record(row[WIRE_SNAPSHOT_KEYS.machine]);\n const machineServers = machine !== null && Array.isArray(machine[WIRE_MACHINE_KEYS.servers])\n ? (machine[WIRE_MACHINE_KEYS.servers] as unknown[]).map(narrowServer).filter((s): s is McpServer => s !== null)\n : [];\n\n return {\n sampledAt: text(row[WIRE_SNAPSHOT_KEYS.sampledAt]),\n seats: (row[WIRE_SNAPSHOT_KEYS.seats] as unknown[])\n .map(narrowSeat)\n .filter((s): s is McpSeat => s !== null),\n machine: {\n servers: machineServers,\n configured: machine !== null ? flag(machine[WIRE_MACHINE_KEYS.configured]) : machineServers.length > 0,\n note: (machine !== null ? text(machine[WIRE_MACHINE_KEYS.note]) : null) ?? '',\n },\n scope: narrowScope(row[WIRE_SNAPSHOT_KEYS.scope]),\n notes: strings(row[WIRE_SNAPSHOT_KEYS.notes]),\n };\n}\n\nfunction narrowHealthRow(raw: unknown): CliHealthRow | null {\n const row = record(raw);\n if (row === null) return null;\n const accountId = text(row[WIRE_HEALTH_KEYS.accountId]);\n if (accountId === null) return null;\n return {\n accountId,\n label: text(row[WIRE_HEALTH_KEYS.label]) ?? accountId,\n provider: text(row[WIRE_HEALTH_KEYS.provider]) ?? 'unknown',\n authentication: text(row[WIRE_HEALTH_KEYS.authentication]) ?? 'unknown',\n state: text(row[WIRE_HEALTH_KEYS.state]) ?? 'unknown',\n planType: text(row[WIRE_HEALTH_KEYS.planType]),\n reason: text(row[WIRE_HEALTH_KEYS.reason]) ?? 'unknown',\n // A missing version stays NULL. It is never coerced to a string, because\n // \"no reading\" and \"some version\" are different facts.\n version: text(row[WIRE_HEALTH_KEYS.version]),\n pinnedVersion: text(row[WIRE_HEALTH_KEYS.pinnedVersion]),\n versionState: text(row[WIRE_HEALTH_KEYS.versionState]) ?? 'unverified',\n usageBlockedByPin: flag(row[WIRE_HEALTH_KEYS.usageBlockedByPin]),\n notes: strings(row[WIRE_HEALTH_KEYS.notes]),\n };\n}\n\n/** Narrow GET /api/verse/mcp/cli-health. */\nexport function projectCliHealth(raw: unknown): CliHealthSnapshot | null {\n const row = record(raw);\n if (row === null) return null;\n if (!Array.isArray(row[WIRE_HEALTH_SNAPSHOT_KEYS.accounts])) return null;\n const accounts = (row[WIRE_HEALTH_SNAPSHOT_KEYS.accounts] as unknown[])\n .map(narrowHealthRow)\n .filter((a): a is CliHealthRow => a !== null);\n return {\n sampledAt: text(row[WIRE_HEALTH_SNAPSHOT_KEYS.sampledAt]),\n accounts,\n // Derived locally as well as read, so a server that forgot the flag still\n // renders the banner rather than silently hiding a drift.\n driftDetected:\n flag(row[WIRE_HEALTH_SNAPSHOT_KEYS.driftDetected]) ||\n accounts.some((account) => account.versionState === 'drift'),\n notes: strings(row[WIRE_HEALTH_SNAPSHOT_KEYS.notes]),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Copy for the machine-readable reasons this surface renders\n// ---------------------------------------------------------------------------\n\n/**\n * Plain language for each seat reason. The CODE is still shown next to the\n * sentence — it is the thing to search for — but it is never the sentence.\n * Same split `usage/accounts-model.ts` uses for probe reasons.\n */\nexport const SEAT_REASON_COPY: Record<string, string> = {\n 'mcp-seat-isolated-by-adapter':\n 'Verse launches every turn on this seat with an empty MCP configuration, so it loads no MCP '\n + 'servers at all — whatever is configured elsewhere on this machine.',\n 'mcp-account-config-absent':\n 'This account has no MCP configuration file of its own, so it starts with none.',\n 'mcp-account-config-not-json':\n 'This account keeps its MCP servers in a TOML config that the provider CLI reads directly. '\n + 'Hub does not parse or rewrite it, so it cannot list what is in there.',\n 'mcp-account-config-read':\n 'Read from this account\\'s own private configuration.',\n 'mcp-account-config-unreadable':\n 'This account\\'s configuration could not be read.',\n 'mcp-account-profile-unresolved':\n 'This account\\'s private profile could not be located, so Hub cannot say what it would load.',\n};\n\nexport const SCOPE_REASON_COPY: Record<string, string> = {\n 'mcp-scope-locus-unavailable':\n 'Locus is not reachable on this machine, so writes are not attributable to a tenant.',\n 'mcp-scope-unpinned':\n 'Locus is running but nothing is pinned, so there is no tenant to scope a write to.',\n 'mcp-scope-seal-unverified':\n 'Locus reports a pin whose seal did not verify. Fix the pin before writing anything.',\n 'mcp-scope-expired': 'The Locus pin has expired.',\n 'mcp-scope-frozen': 'The Locus pin is frozen. Scope attribution is unavailable until it is restored.',\n 'mcp-scope-not-ready': 'Locus reports this identity is not ready. Scope attribution could not be verified.',\n 'mcp-scope-readiness-unverified': 'Locus did not verify the pin’s seal and expiry. Scope attribution is unverified.',\n 'mcp-scope-pinned': 'Locus verified the current pin for the tenant shown here.',\n};\n\nexport const SCOPE_SETUP_COPY: Record<string, string> = {\n phantom_unavailable: 'Phantom is not available to Locus. Install Phantom or restore its executable on PATH, then run locus doctor.',\n authority_anchor_unavailable: 'The Locus authority anchor is unavailable. Run locus doctor on your Mac and restore the intended pin manually.',\n credential_migration_incomplete: 'Credential migration is incomplete. Run locus doctor on your Mac to review reconciliation.',\n};\n\n/** Prose for a code, or the caller's own sentence. NEVER the raw code alone. */\nexport function reasonSentence(\n copy: Record<string, string>,\n reason: string,\n fallback: string,\n): string {\n return copy[reason] ?? fallback;\n}\n","/**\n * routes/verse/apps/apps-model.ts — pure view-model for Apps & Accounts.\n *\n * The page has five groups (SPEC-310C §4), from three kinds of source:\n * ACCOUNTS the shared capacity rows (usage/capacity-strip-model.ts)\n * plus the actions each seat needs (Reconnect / Check again / Fix / Edit budget);\n * DESKTOP, TERMINAL AGENTS, LOCAL MODELS GET /api/verse/apps, as served;\n * MCP SERVERS GET /api/verse/mcp (what each seat would ACTUALLY load).\n * Everything that decides a word, a tone or whether a control is enabled\n * lives here, so it is unit-tested without a DOM.\n *\n * Pure: no React, no I/O.\n */\nimport type { VerseAppHealthState, VerseAppRow } from '../../../../core/verse/workbench-types.js';\nimport { ENGINE_MONOGRAM } from '../../../../core/verse/workbench-types.js';\nimport type { VerseBootstrap, VerseEngine, VerseSeat } from '../../../data/api-types.js';\nimport type { HealthTone } from '../health/health-model.js';\nimport type { McpSeat, McpServer, McpSnapshot } from '../mcp/mcp-contract.js';\nimport { reasonSentence, SEAT_REASON_COPY } from '../mcp/mcp-contract.js';\nimport type { AccountStatus, CapacityRow } from '../usage/capacity-strip-model.js';\n\n/** SPEC-310C §4 order. */\nexport const APPS_GROUP_ORDER = ['accounts', 'desktop', 'terminal-agents', 'local-models', 'mcp-servers'] as const;\nexport type AppsGroupId = (typeof APPS_GROUP_ORDER)[number];\n\nexport const APPS_GROUP_TITLE: Readonly<Record<AppsGroupId, string>> = {\n accounts: 'Accounts',\n desktop: 'Desktop',\n 'terminal-agents': 'Terminal agents',\n 'local-models': 'Local models',\n 'mcp-servers': 'MCP servers',\n};\n\nconst HEALTH_TONE: Readonly<Record<VerseAppHealthState, HealthTone | 'off'>> = {\n ok: 'success',\n warn: 'warning',\n error: 'danger',\n off: 'off',\n unknown: 'neutral',\n};\n\n/** A row's dot tone. `off` is its own quiet state (not installed, switched off) — never a fault. */\nexport function appHealthTone(state: VerseAppHealthState): HealthTone | 'off' {\n return HEALTH_TONE[state];\n}\n\nconst VERSE_ENGINES: readonly VerseEngine[] = ['claude', 'codex', 'grok', 'local'];\n\nexport function asEngine(value: string): VerseEngine | null {\n return (VERSE_ENGINES as readonly string[]).includes(value) ? (value as VerseEngine) : null;\n}\n\n// ---------------------------------------------------------------------------\n// Launch targets\n// ---------------------------------------------------------------------------\n\nexport interface LaunchProject {\n path: string;\n name: string;\n}\n\nfunction baseName(path: string): string {\n const trimmed = path.replace(/\\/+$/, '');\n const i = trimmed.lastIndexOf('/');\n return i === -1 ? trimmed : trimmed.slice(i + 1) || trimmed;\n}\n\n/**\n * Where a Launch may start, most relevant first: the folders of the most\n * recently used chats (the \"current project\"), then every discovered project.\n * The server re-checks each against the same two sources, so this list is a\n * convenience, never the gate.\n */\nexport function launchProjects(bootstrap: Pick<VerseBootstrap, 'sessions' | 'projects'> | undefined): LaunchProject[] {\n if (!bootstrap) return [];\n const out: LaunchProject[] = [];\n const seen = new Set<string>();\n const add = (path: string, name?: string) => {\n if (typeof path !== 'string' || path.length === 0 || seen.has(path)) return;\n seen.add(path);\n out.push({ path, name: name ?? baseName(path) });\n };\n const recent = [...bootstrap.sessions].sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt));\n for (const s of recent) add(s.projectPath);\n for (const p of bootstrap.projects) add(p.path, p.name);\n return out;\n}\n\n/** Ollama tags the local seats run — the model choices for `ollama launch <id> --model`. */\nexport function localModelTags(seats: readonly VerseSeat[]): string[] {\n const out: string[] = [];\n for (const seat of seats) {\n if (seat.engine !== 'local') continue;\n const tag = seat.models[0]?.id ?? (seat.id.startsWith('local:') ? seat.id.slice('local:'.length) : null);\n if (tag && !out.includes(tag)) out.push(tag);\n }\n return out;\n}\n\nexport type LaunchVia = 'native' | 'ollama';\n\nexport interface LaunchChoice {\n via: LaunchVia;\n model: string | null;\n}\n\n/** The argv a launch choice runs, as the operator would type it. */\nexport function launchCommand(row: VerseAppRow, choice: LaunchChoice): string[] | null {\n if (choice.via === 'ollama') {\n if (!row.ollamaLaunch) return null;\n return choice.model ? [...row.ollamaLaunch, '--model', choice.model] : [...row.ollamaLaunch];\n }\n return row.actions.find((a) => a.kind === 'launch')?.command ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// Accounts\n// ---------------------------------------------------------------------------\n\nexport type AccountActionKind = 'reconnect' | 'check-again' | 'fix' | 'edit-budget';\n\nexport interface AccountAction {\n kind: AccountActionKind;\n label: string;\n /** Fix only: the command the dialog shows. */\n command: string[] | null;\n /** Primary = the one thing this seat needs now. */\n primary: boolean;\n}\n\n/** Statuses a fresh health sweep can change on its own: offer \"Check again\" for them. */\nconst RECHECKABLE: ReadonlySet<AccountStatus['kind']> = new Set(['spent', 'not-checked', 'unavailable']);\n\n/**\n * What a seat row offers, the one it needs most first:\n * Reconnect signed out or sign-in expiring (the provider's own login, in Terminal);\n * Check again spent, not checked, or unavailable — a zero-cost health sweep\n * is what moves those (pass the row's SETTLED status, so the\n * button stays put while its own check runs);\n * Fix A2 has a command for what is wrong (a re-pin);\n * Edit budget every paid seat.\n * Local rows need none of these.\n */\nexport function accountActions(row: CapacityRow, status?: AccountStatus | null): AccountAction[] {\n if (row.kind === 'local') return [];\n const out: AccountAction[] = [];\n const c = row.connection;\n const needsLogin = row.signedOut\n || (c !== null && (c.connection === 'signed-out' || c.connection === 'expiring' || c.fixKind === 'reauth'));\n if (needsLogin) out.push({ kind: 'reconnect', label: 'Reconnect', command: null, primary: true });\n const recheck = !needsLogin && status != null && RECHECKABLE.has(status.kind);\n if (recheck) out.push({ kind: 'check-again', label: 'Check again', command: null, primary: true });\n if (c !== null && c.fixKind !== 'reauth' && c.fixKind !== 'none' && c.fixCommand !== null) {\n out.push({ kind: 'fix', label: 'Fix', command: c.fixCommand, primary: !needsLogin && !recheck });\n }\n out.push({ kind: 'edit-budget', label: 'Edit budget', command: null, primary: false });\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// MCP\n// ---------------------------------------------------------------------------\n\nexport interface McpSeatRow {\n seatId: string;\n label: string;\n engine: VerseEngine | null;\n monogram: string;\n servers: McpServer[];\n /** \"loads 2 servers\", \"loads none — isolated by Verse\". */\n loads: string;\n isolated: boolean;\n /** Plain language for the seat's reason; the code rides beside it. */\n sentence: string;\n reason: string;\n notes: string[];\n}\n\nexport function mcpSeatRows(snapshot: McpSnapshot): McpSeatRow[] {\n return snapshot.seats.map((seat: McpSeat) => {\n const engine = asEngine(seat.engine);\n const isolated = seat.reason === 'mcp-seat-isolated-by-adapter';\n const n = seat.servers.length;\n return {\n seatId: seat.seatId,\n label: seat.label,\n engine,\n monogram: engine ? ENGINE_MONOGRAM[engine] : seat.label.slice(0, 1).toUpperCase(),\n servers: seat.servers,\n loads: n > 0 ? `loads ${n} server${n === 1 ? '' : 's'}` : isolated ? 'loads none — isolated by Verse' : 'loads none',\n isolated,\n sentence: reasonSentence(SEAT_REASON_COPY, seat.reason, 'Hub cannot say what this seat would load.'),\n reason: seat.reason,\n notes: seat.notes,\n };\n });\n}\n\n/** Where an Add can write: the hub registry, and each account whose config is JSON. */\nexport interface McpTargetOption {\n id: string;\n label: string;\n /** Why this target cannot take a write, or null. */\n disabledReason: string | null;\n}\n\nexport function mcpTargets(snapshot: McpSnapshot | null): McpTargetOption[] {\n const out: McpTargetOption[] = [{ id: 'hub', label: 'Hub gateway registry', disabledReason: null }];\n for (const seat of snapshot?.seats ?? []) {\n if (seat.seatId === 'local') continue;\n // An isolated (Claude) account CAN be written — Claude Code in a terminal\n // reads it — and the form says a Verse chat on it still loads nothing.\n const toml = seat.configFormat === 'toml' || seat.reason === 'mcp-account-config-not-json';\n out.push({\n id: `account:${seat.accountId}`,\n label: `${seat.label} (${seat.engine})`,\n disabledReason: toml ? 'Keeps its MCP servers in TOML, which Hub does not rewrite.' : null,\n });\n }\n return out;\n}\n\n/** Split `a \"b c\" d` into argv the way a shell would, for the Add form's arguments field. */\nexport function splitArgs(text: string): string[] {\n const out: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | null = null;\n let has = false;\n for (const ch of text) {\n if (quote) {\n if (ch === quote) quote = null;\n else current += ch;\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n has = true;\n continue;\n }\n if (/\\s/.test(ch)) {\n if (has || current.length > 0) out.push(current);\n current = '';\n has = false;\n continue;\n }\n current += ch;\n }\n if (has || current.length > 0) out.push(current);\n return out;\n}\n\n/** `KEY=value` lines → an env object; the first bad line is reported, never guessed. */\nexport function parseEnvLines(text: string): { ok: true; env: Record<string, string> } | { ok: false; error: string } {\n const env: Record<string, string> = {};\n for (const raw of text.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (line.length === 0 || line.startsWith('#')) continue;\n const eq = line.indexOf('=');\n const key = eq === -1 ? '' : line.slice(0, eq).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) return { ok: false, error: `“${line.slice(0, 40)}” is not KEY=value.` };\n env[key] = line.slice(eq + 1);\n }\n return { ok: true, env };\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{a as e}from"./verse-model-DAOz9LrY.js";import{o as t}from"./multimodel-flows-CzI-yHg5.js";function n(t){return t.flatMap(t=>{if(t.health.state===`unavailable`)return[];let n=e(t);return n?[{seatId:t.id,model:n.id,label:t.label,engine:t.engine,ready:t.health.state===`ready`}]:[]})}function r(e,t){let r=n(e);return t.flatMap(e=>{let t=r.find(t=>t.engine===e&&t.ready)??r.find(t=>t.engine===e);return t?[t]:[]})}async function i(e,n){let{source:r,target:i,text:a}=n;if(r.seatId===i.seatId)return await e.sendTurn(r.id,a),{sessionId:r.id,created:!1,label:i.label};let o=n.title??`${r.title.slice(0,80)} · ${i.label}`,s=await e.createSession(t(r,i,o));return e.link({parentSessionId:r.id,childSessionId:s.id,relation:n.relation??`compare`}).catch(()=>!1),await e.sendTurn(s.id,a),{sessionId:s.id,created:!0,label:i.label}}export{n,r,i as t};
2
- //# sourceMappingURL=ask-seat-DhGxiGSd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ask-seat-DhGxiGSd.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/multimodel/ask-seat.ts"],"sourcesContent":["/**\n * routes/verse/multimodel/ask-seat.ts — \"Ask <seat>\": send one message to a\n * named seat, from anywhere in the workbench (3.15: a terminal block's\n * \"Ask…\", review comments' \"Send N comments\" and \"Re-review with…\").\n *\n * A turn cannot change its chat's seat, so the message goes to:\n * - the chat itself, when the chat is already on that seat;\n * - otherwise a NEW chat on that seat, on the same pinned folders, linked\n * to the source chat (so the thread view shows where it came from).\n * Built from the same ordinary calls a typed message makes (multimodel-flows'\n * FlowApi), so the spend chokepoint, readiness gate, local-only gate and\n * mutation token all apply. Nothing here runs a command.\n */\nimport type { VerseSeat, VerseSession } from '../../../data/api-types.js';\nimport type { ThreadRelation } from '../../../../core/verse/multimodel/types.js';\nimport { firstRunnableModel } from '../verse-model.js';\nimport { siblingRequest, type FlowApi, type FlowTarget } from './multimodel-flows.js';\n\nexport type AskSeatApi = Pick<FlowApi, 'createSession' | 'sendTurn' | 'link'>;\n\nexport interface AskSeatResult {\n sessionId: string;\n /** True when a new chat was created for the seat. */\n created: boolean;\n label: string;\n}\n\n/**\n * Every seat a message can be sent to, in the bootstrap's order: seats that\n * are not `unavailable` and have a runnable model. `ready` marks the ones\n * whose health is `ready` (the others may still answer; the server's\n * readiness gate is the authority and refuses with a reason).\n */\nexport function askableSeats(seats: readonly VerseSeat[]): Array<FlowTarget & { ready: boolean }> {\n return seats.flatMap((seat) => {\n if (seat.health.state === 'unavailable') return [];\n const model = firstRunnableModel(seat);\n if (!model) return [];\n return [{ seatId: seat.id, model: model.id, label: seat.label, engine: seat.engine, ready: seat.health.state === 'ready' }];\n });\n}\n\n/** Seats of one engine family, for the \"Ask Claude Code / Codex / Devin\" chips: the first askable seat per engine. */\nexport function firstSeatPerEngine(seats: readonly VerseSeat[], engines: readonly string[]): Array<FlowTarget & { ready: boolean }> {\n const all = askableSeats(seats);\n return engines.flatMap((engine) => {\n const hit = all.find((s) => s.engine === engine && s.ready) ?? all.find((s) => s.engine === engine);\n return hit ? [hit] : [];\n });\n}\n\nexport async function askSeat(\n api: AskSeatApi,\n input: { source: VerseSession; target: FlowTarget; text: string; title?: string; relation?: ThreadRelation },\n): Promise<AskSeatResult> {\n const { source, target, text } = input;\n if (source.seatId === target.seatId) {\n await api.sendTurn(source.id, text);\n return { sessionId: source.id, created: false, label: target.label };\n }\n const title = input.title ?? `${source.title.slice(0, 80)} · ${target.label}`;\n const session = await api.createSession(siblingRequest(source, target, title));\n // The link is bookkeeping: a failure there never loses the message.\n void api.link({ parentSessionId: source.id, childSessionId: session.id, relation: input.relation ?? 'compare' }).catch(() => false);\n await api.sendTurn(session.id, text);\n return { sessionId: session.id, created: true, label: target.label };\n}\n"],"mappings":"iGAiCA,SAAgB,EAAa,EAAqE,CAChG,OAAO,EAAM,QAAS,GAAS,CAC7B,GAAI,EAAK,OAAO,QAAU,cAAe,MAAO,CAAC,EACjD,IAAM,EAAQ,EAAmB,CAAI,EAErC,OADK,EACE,CAAC,CAAE,OAAQ,EAAK,GAAI,MAAO,EAAM,GAAI,MAAO,EAAK,MAAO,OAAQ,EAAK,OAAQ,MAAO,EAAK,OAAO,QAAU,OAAQ,CAAC,EADvG,CAAC,CAEtB,CAAC,CACH,CAGA,SAAgB,EAAmB,EAA6B,EAAoE,CAClI,IAAM,EAAM,EAAa,CAAK,EAC9B,OAAO,EAAQ,QAAS,GAAW,CACjC,IAAM,EAAM,EAAI,KAAM,GAAM,EAAE,SAAW,GAAU,EAAE,KAAK,GAAK,EAAI,KAAM,GAAM,EAAE,SAAW,CAAM,EAClG,OAAO,EAAM,CAAC,CAAG,EAAI,CAAC,CACxB,CAAC,CACH,CAEA,eAAsB,EACpB,EACA,EACwB,CACxB,GAAM,CAAE,SAAQ,SAAQ,QAAS,EACjC,GAAI,EAAO,SAAW,EAAO,OAE3B,OADA,MAAM,EAAI,SAAS,EAAO,GAAI,CAAI,EAC3B,CAAE,UAAW,EAAO,GAAI,QAAS,GAAO,MAAO,EAAO,KAAM,EAErE,IAAM,EAAQ,EAAM,OAAS,GAAG,EAAO,MAAM,MAAM,EAAG,EAAE,EAAE,KAAK,EAAO,QAChE,EAAU,MAAM,EAAI,cAAc,EAAe,EAAQ,EAAQ,CAAK,CAAC,EAI7E,OAFA,EAAS,KAAK,CAAE,gBAAiB,EAAO,GAAI,eAAgB,EAAQ,GAAI,SAAU,EAAM,UAAY,SAAU,CAAC,CAAC,CAAC,UAAY,EAAK,EAClI,MAAM,EAAI,SAAS,EAAQ,GAAI,CAAI,EAC5B,CAAE,UAAW,EAAQ,GAAI,QAAS,GAAM,MAAO,EAAO,KAAM,CACrE"}
@@ -1,2 +0,0 @@
1
- import{o as e}from"./AutonomyOffState-DEznxI-Q.js";var t={off:0,propose:1,autonomous:2},n={off:`Off`,propose:`Propose`,autonomous:`Autonomous`},r={off:`Off`,propose:`Propose`,autonomous:`Auto`},i=[`off`,`propose`,`autonomous`];function a(e,n){let r=t[e.switch],i=t[n];return i===r?`same`:i<r?`lower`:i<=t[e.maxSwitchWithoutGrant]?`raise`:`raise-needs-grant`}function o(e){return i.map(i=>{let a=t[i]>Math.max(t[e.switch],t[e.maxSwitchWithoutGrant]);return{value:i,label:n[i],short:r[i],needsGrant:a,ariaLabel:a?`${n[i]} (needs a new grant — Touch ID)`:n[i]}})}var s=864e5,c=36e5;function l(e){if(!Number.isFinite(e)||e<=0)return`0m`;if(e>=3*s)return`${Math.floor(e/s)}d`;if(e>=s){let t=Math.floor(e/s),n=Math.floor((e-t*s)/c);return n?`${t}d ${n}h`:`${t}d`}return e>=c?`${Math.floor(e/c)}h`:`${Math.max(1,Math.floor(e/6e4))}m`}var u={none:`No grant`,active:`Active`,paused:`Paused, re-approve`,expired:`Expired, renew`,revoked:`Revoked, new grant`,invalid:`Grant invalid`};function d(e,t){if(!e)return{label:`Grant unknown`,tone:`unknown`,detail:`The authority service did not answer, so the grant state is unknown.`,action:null};let n=e.grant;switch(n.state){case`active`:{let e=n.expiresAt?Date.parse(n.expiresAt):NaN;if(!Number.isFinite(e))return{label:`Active`,tone:`success`,detail:`A grant is active; its expiry could not be read.`,action:null};let r=e-t,i=r<s?`danger`:r<3*s?`warning`:`success`;return{label:l(r),tone:i,detail:`Grant active until ${new Date(e).toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}${r<3*s?` — renew soon`:``}.`,action:r<3*s?`grant`:null}}case`paused`:return{label:u.paused,tone:`warning`,detail:n.reason??`The grant is paused until you re-approve it.`,action:`re-approve`};case`expired`:return{label:u.expired,tone:`danger`,detail:n.reason??`The grant expired; autonomy is dark until a new one is signed.`,action:`grant`};case`revoked`:return{label:u.revoked,tone:`danger`,detail:n.reason??`The grant was revoked; a new one needs Touch ID.`,action:`grant`};case`invalid`:return{label:u.invalid,tone:`danger`,detail:n.reason??`The installed grant failed verification.`,action:`grant`};default:return{label:u.none,tone:`neutral`,detail:`No standing grant is installed; autonomy can only propose.`,action:`grant`}}}function f(e){return e?e.kill?{key:`mode`,text:`Stopped`,tone:`danger`}:e.grant.state===`paused`?{key:`mode`,text:`Paused, re-approve`,tone:`warning`}:{key:`mode`,text:n[e.effectiveSwitch],tone:e.effectiveSwitch===`autonomous`?`success`:`neutral`}:{key:`mode`,text:`Autonomy unknown`,tone:`unknown`}}function p(t){let n=[f(t.authority)],r=t.building!==null||t.mergedToday!==null||t.revertsToday!==null;return t.darkSince&&!(t.building&&t.building>0)?n.push({key:`dark`,text:`fleet dark since ${e(t.darkSince)}`,tone:`neutral`}):r?(t.building!==null&&n.push({key:`building`,text:`${t.building} building`}),t.mergedToday!==null&&n.push({key:`merged`,text:`${t.mergedToday} merged today`}),t.revertsToday!==null&&n.push({key:`reverts`,text:`${t.revertsToday} revert${t.revertsToday===1?``:`s`}`,tone:t.revertsToday>0?`warning`:void 0})):n.push({key:`fleet`,text:`fleet status unknown`,tone:`unknown`}),t.reserve&&t.authority?.effectiveSwitch!==`off`&&n.push({key:`reserve`,text:`${t.reserve.label} ${Math.round(t.reserve.percent)}% reserved for you`}),n}function m(e,t){let n=e.kind;return n===`new`?`grant`:n===`reapprove`?`re-approve`:t}function h(e){if(typeof e!=`object`||!e)return null;let t=e.result?.stop;if(typeof t!=`object`||!t)return null;let n=t,r=typeof n.liveExecutionLeases==`number`&&Number.isFinite(n.liveExecutionLeases)?Math.max(0,Math.round(n.liveExecutionLeases)):null,i=[];n.quiesced===!0||r===0?i.push(`Stopped. No agent is still running.`):r===null?i.push(`Stopped. Agents started before Stop may still be finishing; no new work starts.`):i.push(`Stopped. ${r} agent${r===1?``:`s`} started before Stop ${r===1?`is`:`are`} still finishing; no new work starts.`),typeof n.mergesRevoked==`number`&&n.mergesRevoked>0&&i.push(`${n.mergesRevoked} armed merge${n.mergesRevoked===1?` was`:`s were`} revoked.`);let a=Array.isArray(n.mergeRevokeFailures)?n.mergeRevokeFailures.length:0;return a>0&&i.push(`${a} armed merge${a===1?``:`s`} could not be revoked; Stop still blocks ${a===1?`it`:`them`}.`),i.join(` `)}export{d as a,o as c,a as i,p as l,t as n,f as o,m as r,h as s,n as t};
2
- //# sourceMappingURL=authority-model-CoXAS-Z6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authority-model-CoXAS-Z6.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/command/authority-model.ts"],"sourcesContent":["/**\n * routes/verse/command/authority-model.ts — the pure decisions behind the\n * Command top bar (unit C7; SPEC-310B §0 I1 + §6, SPEC-310C §5).\n *\n * I1 is the whole design: ONLY a grant signed under Touch ID raises\n * authority; LOWERING is instant and needs no auth. So every click on the\n * switch is classified before anything is sent:\n *\n * lower → POST at once (Off is always one click away);\n * raise → POST at once, but only up to `maxSwitchWithoutGrant`\n * — the installed grant already allows it;\n * raise-needs-grant→ nothing is sent; the Touch ID sheet opens with the\n * draft grant's full scope and expiry. The server is\n * still the authority (409 `grant-required` on a stale\n * page) — this only keeps the page from asking for\n * something it knows will be refused.\n *\n * Framework-free; tested directly.\n */\nimport type { AuthorityGrantDraft, AuthorityStatusV1, AutonomySwitch, GrantState } from '../../../../core/authority/types.js';\nimport { darkSinceLabel } from '../fleet/dark-since.js';\n\nexport const SWITCH_RANK: Readonly<Record<AutonomySwitch, number>> = { off: 0, propose: 1, autonomous: 2 };\n\nexport const SWITCH_LABEL: Readonly<Record<AutonomySwitch, string>> = {\n off: 'Off',\n propose: 'Propose',\n autonomous: 'Autonomous',\n};\n\n/** Short labels for the 375 px bar (same order, same meaning). */\nexport const SWITCH_SHORT: Readonly<Record<AutonomySwitch, string>> = {\n off: 'Off',\n propose: 'Propose',\n autonomous: 'Auto',\n};\n\nexport const SWITCH_ORDER: readonly AutonomySwitch[] = ['off', 'propose', 'autonomous'];\n\nexport type SwitchChange = 'same' | 'lower' | 'raise' | 'raise-needs-grant';\n\n/** What a click on `to` means, given the status the page last read. */\nexport function classifySwitch(status: Pick<AuthorityStatusV1, 'switch' | 'maxSwitchWithoutGrant'>, to: AutonomySwitch): SwitchChange {\n const from = SWITCH_RANK[status.switch];\n const target = SWITCH_RANK[to];\n if (target === from) return 'same';\n if (target < from) return 'lower';\n return target <= SWITCH_RANK[status.maxSwitchWithoutGrant] ? 'raise' : 'raise-needs-grant';\n}\n\nexport interface SwitchOption {\n value: AutonomySwitch;\n label: string;\n short: string;\n /** Selecting it opens the Touch ID sheet instead of switching. */\n needsGrant: boolean;\n /** Spoken name, carrying the grant requirement in words. */\n ariaLabel: string;\n}\n\nexport function switchOptions(status: Pick<AuthorityStatusV1, 'switch' | 'maxSwitchWithoutGrant'>): SwitchOption[] {\n return SWITCH_ORDER.map((value) => {\n const needsGrant = SWITCH_RANK[value] > Math.max(SWITCH_RANK[status.switch], SWITCH_RANK[status.maxSwitchWithoutGrant]);\n return {\n value,\n label: SWITCH_LABEL[value],\n short: SWITCH_SHORT[value],\n needsGrant,\n ariaLabel: needsGrant ? `${SWITCH_LABEL[value]} (needs a new grant — Touch ID)` : SWITCH_LABEL[value],\n };\n });\n}\n\n// ---------------------------------------------------------------------------\n// Grant chip\n// ---------------------------------------------------------------------------\n\nexport type ChipTone = 'neutral' | 'success' | 'warning' | 'danger' | 'unknown';\n\nexport interface GrantChip {\n label: string;\n tone: ChipTone;\n /** Longer sentence for the tooltip / accessible description. */\n detail: string;\n /** Clicking the chip opens the Touch ID sheet for this action; null = informational. */\n action: 'grant' | 're-approve' | null;\n}\n\nconst DAY = 86_400_000;\nconst HOUR = 3_600_000;\n\n/** \"23d\", \"2d 4h\", \"5h\", \"40m\" — time left, coarse on purpose (it is a chip). */\nexport function timeLeft(ms: number): string {\n if (!Number.isFinite(ms) || ms <= 0) return '0m';\n if (ms >= 3 * DAY) return `${Math.floor(ms / DAY)}d`;\n if (ms >= DAY) {\n const d = Math.floor(ms / DAY);\n const h = Math.floor((ms - d * DAY) / HOUR);\n return h ? `${d}d ${h}h` : `${d}d`;\n }\n if (ms >= HOUR) return `${Math.floor(ms / HOUR)}h`;\n return `${Math.max(1, Math.floor(ms / 60_000))}m`;\n}\n\nconst STATE_WORDS: Record<GrantState, string> = {\n none: 'No grant',\n active: 'Active',\n paused: 'Paused, re-approve',\n expired: 'Expired, renew',\n revoked: 'Revoked, new grant',\n invalid: 'Grant invalid',\n};\n\nexport function grantChip(status: AuthorityStatusV1 | null, now: number): GrantChip {\n if (!status) return { label: 'Grant unknown', tone: 'unknown', detail: 'The authority service did not answer, so the grant state is unknown.', action: null };\n const g = status.grant;\n switch (g.state) {\n case 'active': {\n const expires = g.expiresAt ? Date.parse(g.expiresAt) : NaN;\n if (!Number.isFinite(expires)) return { label: 'Active', tone: 'success', detail: 'A grant is active; its expiry could not be read.', action: null };\n const left = expires - now;\n const tone: ChipTone = left < DAY ? 'danger' : left < 3 * DAY ? 'warning' : 'success';\n return {\n label: timeLeft(left),\n tone,\n detail: `Grant active until ${new Date(expires).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' })}${left < 3 * DAY ? ' — renew soon' : ''}.`,\n action: left < 3 * DAY ? 'grant' : null,\n };\n }\n case 'paused':\n return { label: STATE_WORDS.paused, tone: 'warning', detail: g.reason ?? 'The grant is paused until you re-approve it.', action: 're-approve' };\n case 'expired':\n return { label: STATE_WORDS.expired, tone: 'danger', detail: g.reason ?? 'The grant expired; autonomy is dark until a new one is signed.', action: 'grant' };\n case 'revoked':\n return { label: STATE_WORDS.revoked, tone: 'danger', detail: g.reason ?? 'The grant was revoked; a new one needs Touch ID.', action: 'grant' };\n case 'invalid':\n return { label: STATE_WORDS.invalid, tone: 'danger', detail: g.reason ?? 'The installed grant failed verification.', action: 'grant' };\n case 'none':\n default:\n return { label: STATE_WORDS.none, tone: 'neutral', detail: 'No standing grant is installed; autonomy can only propose.', action: 'grant' };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Verdict line\n// ---------------------------------------------------------------------------\n\nexport interface VerdictInputs {\n authority: AuthorityStatusV1 | null;\n /** FleetLiveSummary fields, null = unknown. */\n building: number | null;\n mergedToday: number | null;\n revertsToday: number | null;\n /** \"Claude\" and the percent reserved for Mason on that seat; null = unknown / no such seat. */\n reserve: { label: string; percent: number } | null;\n /**\n * THE dark-since instant — `fleetDarkSince(live)` (fleet/dark-since.ts),\n * null unless the fleet is dark. Never fleet history's \"quiet since\": an\n * idle fleet that has not produced lately is not dark.\n */\n darkSince: string | null;\n}\n\nexport interface VerdictPart {\n key: string;\n text: string;\n tone?: ChipTone;\n}\n\n/** The mode word first: what autonomy is doing right now, in one word. */\nexport function modeWord(authority: AuthorityStatusV1 | null): VerdictPart {\n if (!authority) return { key: 'mode', text: 'Autonomy unknown', tone: 'unknown' };\n if (authority.kill) return { key: 'mode', text: 'Stopped', tone: 'danger' };\n if (authority.grant.state === 'paused') return { key: 'mode', text: 'Paused, re-approve', tone: 'warning' };\n return { key: 'mode', text: SWITCH_LABEL[authority.effectiveSwitch], tone: authority.effectiveSwitch === 'autonomous' ? 'success' : 'neutral' };\n}\n\n/**\n * \"Autonomous · 5 building · 7 merged today · 0 reverts · Claude 46%\n * reserved for you\". A number that is unknown is LEFT OUT rather than shown\n * as 0 (the line would otherwise claim \"0 reverts\" it never counted); when\n * the whole fleet read is missing the line says so instead.\n */\nexport function verdictParts(v: VerdictInputs): VerdictPart[] {\n const parts: VerdictPart[] = [modeWord(v.authority)];\n const anyFleet = v.building !== null || v.mergedToday !== null || v.revertsToday !== null;\n if (v.darkSince && !(v.building && v.building > 0)) {\n // The same local-day label the Fleet surface's dark charts use.\n parts.push({ key: 'dark', text: `fleet dark since ${darkSinceLabel(v.darkSince)}`, tone: 'neutral' });\n } else if (!anyFleet) {\n parts.push({ key: 'fleet', text: 'fleet status unknown', tone: 'unknown' });\n } else {\n if (v.building !== null) parts.push({ key: 'building', text: `${v.building} building` });\n if (v.mergedToday !== null) parts.push({ key: 'merged', text: `${v.mergedToday} merged today` });\n if (v.revertsToday !== null) parts.push({ key: 'reverts', text: `${v.revertsToday} revert${v.revertsToday === 1 ? '' : 's'}`, tone: v.revertsToday > 0 ? 'warning' : undefined });\n }\n // The reserve is what autonomy leaves you; with autonomy off it reserves nothing.\n if (v.reserve && v.authority?.effectiveSwitch !== 'off') parts.push({ key: 'reserve', text: `${v.reserve.label} ${Math.round(v.reserve.percent)}% reserved for you` });\n return parts;\n}\n\n/**\n * Which POST signs a draft: the DRAFT's own `kind` decides (B-U1: GET\n * /api/verse/authority/draft answers with `kind`, and POST refuses a digest\n * whose kind does not match the action). The clicked intent is only the\n * fallback for a server that sends no kind — a grant that is no longer\n * continuable is drafted as a NEW one, and signing it must say so.\n */\nexport function actionForDraft(draft: AuthorityGrantDraft, fallback: 'grant' | 're-approve'): 'grant' | 're-approve' {\n const kind = (draft as AuthorityGrantDraft & { kind?: unknown }).kind;\n if (kind === 'new') return 'grant';\n if (kind === 'reapprove') return 're-approve';\n return fallback;\n}\n\n/**\n * What Stop actually did, in one sentence (B-U6 → C: the Stop UI shows the\n * drain result). The POST answers with the status plus `result.stop`\n * (authority/clamp.ts StopResult). Stop from Verse never waits, so agents\n * admitted before it may still be finishing; that is said with the count,\n * never as \"stopped\" alone. Unknown leases are counted as live upstream\n * (fail closed). Null when the response carries no stop result.\n */\nexport function stopOutcomeSentence(response: unknown): string | null {\n if (response === null || typeof response !== 'object') return null;\n const stop = (response as { result?: { stop?: unknown } }).result?.stop;\n if (stop === null || typeof stop !== 'object') return null;\n const r = stop as { quiesced?: unknown; liveExecutionLeases?: unknown; mergesRevoked?: unknown; mergeRevokeFailures?: unknown };\n const live = typeof r.liveExecutionLeases === 'number' && Number.isFinite(r.liveExecutionLeases) ? Math.max(0, Math.round(r.liveExecutionLeases)) : null;\n const parts: string[] = [];\n if (r.quiesced === true || live === 0) parts.push('Stopped. No agent is still running.');\n else if (live !== null) parts.push(`Stopped. ${live} agent${live === 1 ? '' : 's'} started before Stop ${live === 1 ? 'is' : 'are'} still finishing; no new work starts.`);\n else parts.push('Stopped. Agents started before Stop may still be finishing; no new work starts.');\n if (typeof r.mergesRevoked === 'number' && r.mergesRevoked > 0) {\n parts.push(`${r.mergesRevoked} armed merge${r.mergesRevoked === 1 ? ' was' : 's were'} revoked.`);\n }\n const failed = Array.isArray(r.mergeRevokeFailures) ? r.mergeRevokeFailures.length : 0;\n if (failed > 0) parts.push(`${failed} armed merge${failed === 1 ? '' : 's'} could not be revoked; Stop still blocks ${failed === 1 ? 'it' : 'them'}.`);\n return parts.join(' ');\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-hePW80VL.js";import{R as t}from"./VerseConsoleApp-Cj6yPJo3.js";var n=e({REQUEST_TTL_MS:()=>r,getAutomationsFocus:()=>l,isAutomationsFocusLive:()=>u,requestAutomationsFocus:()=>c,subscribeAutomationsFocus:()=>f,takeAutomationsFocus:()=>d}),r=2e4,i=null,a=0,o=new Set;function s(){for(let e of[...o])e()}function c(e){a+=1,i={kind:e,seq:a,at:Date.now()},t(`automations`),s()}function l(){return i}function u(e,t=Date.now()){return t-e.at<=r}function d(e){i?.seq===e&&(i=null,s())}function f(e){return o.add(e),()=>o.delete(e)}export{d as a,f as i,l as n,u as r,n as t};
2
- //# sourceMappingURL=automations-focus-CeneF7lP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automations-focus-CeneF7lP.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/automations/automations-focus.ts"],"sourcesContent":["/**\n * routes/verse/automations/automations-focus.ts — \"take me to Automations\"\n * from ⌘K: open the section, optionally with the New automation form open\n * (same shape as wiki/wiki-focus.ts). The section is its own lazy chunk, so a\n * request waits here (up to REQUEST_TTL_MS) until it mounts and takes it.\n */\nimport { setVerseSection } from '../verse-ui-store.js';\n\nexport type AutomationsFocusRequest = { kind: 'list' | 'new'; seq: number; at: number };\n\nexport const REQUEST_TTL_MS = 20_000;\n\nlet current: AutomationsFocusRequest | null = null;\nlet seq = 0;\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const l of [...listeners]) l();\n}\n\nexport function requestAutomationsFocus(kind: AutomationsFocusRequest['kind']): void {\n seq += 1;\n current = { kind, seq, at: Date.now() };\n setVerseSection('automations');\n emit();\n}\n\nexport function getAutomationsFocus(): AutomationsFocusRequest | null {\n return current;\n}\n\nexport function isAutomationsFocusLive(request: AutomationsFocusRequest, now: number = Date.now()): boolean {\n return now - request.at <= REQUEST_TTL_MS;\n}\n\nexport function takeAutomationsFocus(requestSeq: number): void {\n if (current?.seq !== requestSeq) return;\n current = null;\n emit();\n}\n\nexport function subscribeAutomationsFocus(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function resetAutomationsFocus(): void {\n current = null;\n emit();\n}\n"],"mappings":"qRAUa,EAAiB,IAE1B,EAA0C,KAC1C,EAAM,EACJ,EAAY,IAAI,IAEtB,SAAS,GAAa,CACpB,IAAK,IAAM,IAAK,CAAC,GAAG,CAAS,EAAG,EAAE,CACpC,CAEA,SAAgB,EAAwB,EAA6C,CACnF,GAAO,EACP,EAAU,CAAE,OAAM,MAAK,GAAI,KAAK,IAAI,CAAE,EACtC,EAAgB,aAAa,EAC7B,EAAK,CACP,CAEA,SAAgB,GAAsD,CACpE,OAAO,CACT,CAEA,SAAgB,EAAuB,EAAkC,EAAc,KAAK,IAAI,EAAY,CAC1G,OAAO,EAAM,EAAQ,IAAM,CAC7B,CAEA,SAAgB,EAAqB,EAA0B,CACzD,GAAS,MAAQ,IACrB,EAAU,KACV,EAAK,EACP,CAEA,SAAgB,EAA0B,EAAkC,CAE1E,OADA,EAAU,IAAI,CAAQ,MACT,EAAU,OAAO,CAAQ,CACxC"}
@@ -1,2 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-hePW80VL.js";import{C as t,M as n,V as r,a as i,i as a}from"./global-BJ_kVFpD.js";import{r as o}from"./VerseShared-CH8mV5ew.js";var s=e({BUDGET_KEY:()=>c,BUDGET_PATH:()=>u,BUDGET_PREVIEW_KEY:()=>l,BUDGET_PREVIEW_PATH:()=>d,budgetPreviewQuery:()=>p,budgetQuery:()=>f,updateBudget:()=>m}),c=`verse-budget`,l=`verse-budget-preview`,u=`/api/verse/budget`,d=`/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true`,f={key:c,fetch:e=>a(u,e)},p={key:l,fetch:e=>a(d,e)};async function m(e){let a=t();if(!a)throw new o;let s=await i(u,e,a);return n(),r(c),r(l),s}export{m as i,f as n,s as r,p as t};
2
- //# sourceMappingURL=budget-queries-DCZevH2S.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"budget-queries-DCZevH2S.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/budget/budget-queries.ts"],"sourcesContent":["/**\n * routes/verse/budget/budget-queries.ts — the reads and the one write behind\n * the Budget panel (core/routing/budget-api.ts).\n *\n * GET /api/verse/budget → BudgetView (policy + live headroom)\n * GET /api/verse/budget/preview → SeatDecision for \"the next medium\n * autonomous code task\"\n * POST /api/verse/budget → BudgetView after ONE change\n *\n * Nothing here spends: every route is a file read / pure computation on the\n * server. Writes pull the held mutation token (like verse-queries.ts), touch\n * the hold on success, and invalidate both keys so the headroom bars and the\n * \"next task goes to…\" line move together.\n */\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport type { BudgetUpdateRequest, SeatDecision } from '../../../../core/routing/types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { apiGet, apiPost } from '../../../data/client.js';\nimport { invalidate } from '../../../data/cache.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { VerseMutationLockedError } from '../verse-queries.js';\n\nexport const BUDGET_KEY = 'verse-budget';\nexport const BUDGET_PREVIEW_KEY = 'verse-budget-preview';\nexport const BUDGET_PATH = '/api/verse/budget';\nexport const BUDGET_PREVIEW_PATH = '/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true';\n\nexport const budgetQuery: QueryDef<BudgetView> = {\n key: BUDGET_KEY,\n fetch: (signal) => apiGet<BudgetView>(BUDGET_PATH, signal),\n};\n\nexport const budgetPreviewQuery: QueryDef<SeatDecision> = {\n key: BUDGET_PREVIEW_KEY,\n fetch: (signal) => apiGet<SeatDecision>(BUDGET_PREVIEW_PATH, signal),\n};\n\n/**\n * The per-seat patch as it goes on the wire. `null` clears an optional field\n * (the server's parser accepts it; the frozen contract's Partial<> cannot say\n * \"remove\" because JSON has no `undefined`).\n */\nexport interface BudgetSeatPatchWire {\n enabled?: boolean;\n reservePercent?: number;\n maxSessionWindowPercent?: number | null;\n dailyUsdCap?: number | null;\n}\n\n/** `BudgetUpdateRequest`, widened only by the `null`-clears rule above. */\nexport type BudgetUpdateWire = Extract<BudgetUpdateRequest, { mode: unknown }>\n | { seatId: string; policy: BudgetSeatPatchWire };\n\nexport async function updateBudget(update: BudgetUpdateWire): Promise<BudgetView> {\n const token = getMutationToken();\n if (!token) throw new VerseMutationLockedError();\n const view = await apiPost<BudgetView>(BUDGET_PATH, update, token);\n touchMutationHold();\n invalidate(BUDGET_KEY);\n invalidate(BUDGET_PREVIEW_KEY);\n return view;\n}\n"],"mappings":"qUAsBa,EAAa,eACb,EAAqB,uBACrB,EAAc,oBACd,EAAsB,wEAEtB,EAAoC,CAC/C,IAAK,EACL,MAAQ,GAAW,EAAmB,EAAa,CAAM,CAC3D,EAEa,EAA6C,CACxD,IAAK,EACL,MAAQ,GAAW,EAAqB,EAAqB,CAAM,CACrE,EAkBA,eAAsB,EAAa,EAA+C,CAChF,IAAM,EAAQ,EAAiB,EAC/B,GAAI,CAAC,EAAO,MAAM,IAAI,EACtB,IAAM,EAAO,MAAM,EAAoB,EAAa,EAAQ,CAAK,EAIjE,OAHA,EAAkB,EAClB,EAAW,CAAU,EACrB,EAAW,CAAkB,EACtB,CACT"}
@@ -1,2 +0,0 @@
1
- import{V as e}from"./VerseShared-CH8mV5ew.js";import{r as t}from"./verse-model-DAOz9LrY.js";import{t as n}from"./seat-readiness-a5B9iqP-.js";import{_ as r,y as i}from"./format-V6IiIMAL.js";import{n as a,t as o}from"./seat-subscription-BQOYfPCE.js";import{i as s,n as c}from"./budget-model-BZyGzAr4.js";import{v as l}from"./context-model-DYkDKK6C.js";function u(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString()===e}function d(e,t){let n=e.lastKnownUsage;return!n||n.source!==`native-account-checked-history`||![`native-account-checked`,`native-account-checked-local-epoch`].includes(n.identitySource)||!u(n.observedAt)||!u(n.expiresAt)||Date.parse(n.observedAt)>t||Date.parse(n.expiresAt)<=Date.parse(n.observedAt)||Date.parse(n.expiresAt)-Date.parse(n.observedAt)>6e4||!Array.isArray(n.windows)||!n.windows.length||!n.windows.every(e=>!!e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.id==`string`&&/^[a-z0-9][a-z0-9_-]{0,63}$/.test(e.id)&&(e.usedPercent===null||typeof e.usedPercent==`number`&&Number.isFinite(e.usedPercent)&&e.usedPercent>=0&&e.usedPercent<=100)&&(e.resetsAt===null||u(e.resetsAt))&&(e.limitReached===void 0||e.limitReached===!0&&e.usedPercent===100))?null:n}function f(e){let t=e.windows.flatMap(e=>e.limitReached?[100]:e.usedPercent===null?[]:[e.usedPercent]);return t.length?100-Math.max(...t):null}var p={available:`ready`,credits:`ready`,tight:`tight`,exhausted:`blocked`,"signed-out":`blocked`,"probe-unsupported":`blocked`,unknown:`unread`};function m(e,t,n){return e===1?t:n}function h(e){let{ready:t,tight:n,blocked:r,unread:i,total:a,local:o}=e;if(a===0)return`No seats found.`;let s=o===null?``:o.reachable&&o.residentCount>0?` ${o.residentCount} local ${m(o.residentCount,`model is`,`models are`)} resident and answer with no load delay.`:o.reachable&&o.agenticCount>0?` No local model is resident, but ${o.agenticCount} installed ${m(o.agenticCount,`one can`,`ones can`)} drive a session after a load.`:o.reachable?` No local model is resident.`:` The local runtime did not answer, so local capacity is unknown.`,c=i===0?``:` ${i} ${m(i,`seat has`,`seats have`)} no reading yet.`;return t>0?`${t} of ${a} ${m(a,`seat is`,`seats are`)} usable right now.${c}${s}`:n>0?`No seat is clear: ${n} ${m(n,`is`,`are`)} running tight and ${r} ${m(r,`is`,`are`)} blocked.${c}${s}`:r>0?`No cloud seat reports headroom — ${r} blocked.${c}${s}`:`No seat reported a usable window.${c}${s}`}function g(e){let t=e.binding;return{id:e.id,label:e.label,kind:`account`,color:e.color,cls:p[e.verdict.state],headline:e.verdict.headline,usedPct:t&&t.measured&&!t.limitReached?t.usedPct:null,measured:t!==null&&t.measured&&!t.limitReached}}function _(e){return{id:`local`,label:`Local`,kind:`local`,color:e.color,cls:p[e.verdict.state],headline:e.verdict.headline,usedPct:e.usedPct,measured:e.usedPct!==null}}function v(e,t){let n=[],r=[],i=new Set;for(let a of e)for(let e of a.windows){if(e.resetsAt!==null){let r=Date.parse(e.resetsAt);if(!Number.isNaN(r)){let i=r-t;n.push({seatLabel:a.label,windowLabel:e.label,atMs:r,inMs:i,overdue:i<=0});continue}}if(e.resetText!==null){let t=`${a.label}|${e.label}|${e.resetText}`;if(i.has(t))continue;i.add(t),r.push({seatLabel:a.label,windowLabel:e.label,text:e.resetText})}}return{instants:n,prose:r}}function y(e){let t=e.filter(e=>!e.overdue);return t.length>0?t.reduce((e,t)=>t.inMs<e.inMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function b(e,t){let n=e.filter(e=>e.atMs>t);return n.length>0?n.reduce((e,t)=>t.atMs<e.atMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function x(e,t){if(e===null&&t===null)return null;let n=e?.residentBytes??t?.residentBytes??null,r=e?.memoryBudgetBytes??t?.memoryBudgetBytes??null;return{reachable:t?.reachable??e?.verdict.state!==`unknown`,residentCount:e?.residentCount??t?.rows.filter(e=>e.resident).length??0,installedCount:e?.installedCount??t?.rows.length??0,agenticCount:t?.agenticCount??0,unknownToolCount:t?.unknownToolCount??0,residentBytes:n,memoryBudgetBytes:r,headroomBytes:n!==null&&r!==null?Math.max(0,r-n):null,freeMemoryBytes:t?.freeMemoryBytes??null,usedPct:e?.usedPct??t?.memoryUsedPct??null}}function S(e){let t=e.nowMs??Date.now(),n=e.cards.map(g);e.localCard&&n.push(_(e.localCard));let r=e=>n.filter(t=>t.cls===e).length,i=r(`ready`),a=r(`tight`),o=r(`blocked`),s=r(`unread`),{instants:c,prose:l}=v(e.cards.map(e=>({label:e.label,windows:e.allWindows})),t),u=x(e.localCard,e.localView);return{seats:n,ready:i,tight:a,blocked:o,unread:s,total:n.length,resets:c,nextReset:y(c),proseResets:l,local:u,headline:h({ready:i,tight:a,blocked:o,unread:s,total:n.length,local:u}),noCapacity:n.length>0&&i===0&&a===0&&s<n.length}}function C(e){if(!Number.isFinite(e))return`—`;if(e<=0)return`overdue`;let t=Math.floor(e/1e3),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60);return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${t}s`}var w={connected:`connected`,expiring:`sign-in expiring`,"signed-out":`signed out`,exhausted:`out of usage`,"binary-skew":`older CLI pinned`,unknown:`not checked`},T={connected:`success`,expiring:`warning`,"signed-out":`danger`,exhausted:`danger`,"binary-skew":`warning`,unknown:`neutral`},E={"signed-out":0,exhausted:1,expiring:2,"binary-skew":3,unknown:4,connected:5};function D(e,t=Date.now()){if(typeof e!=`string`)return null;let n=Date.parse(e);return!Number.isFinite(n)||n<=t?null:`usable again in ${C(n-t)}`}function O(e){return e.connection===`connected`?!1:e.connection!==`unknown`||e.reasons.length>0&&!e.reasons[0].includes(`has not reached this seat`)}function ee(e,t=[],r=Date.now()){let s=new Map(t.map(e=>[e.id,e]));return e.filter(O).map(e=>{let t=s.get(e.seatId),c=e.connection===`exhausted`&&t!==void 0?o(a(t,r),e.resetAt):e.resetAt,l=n(c,r);return{report:e,label:t?.label??e.seatId,word:w[e.connection],tone:T[e.connection],detail:e.reasons[0]?i(e.reasons[0],r):null,reset:l===null?null:`resets ${l}`,usableAgain:e.connection===`exhausted`?D(c,r):null}}).sort((e,t)=>E[e.report.connection]-E[t.report.connection])}function te(e){return e.map(e=>/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)||e.startsWith(`~/`)&&/^[A-Za-z0-9_@%+=:,./~-]+$/.test(e)?e:e.startsWith(`~/`)?`~/'${e.slice(2).replaceAll(`'`,`'\\''`)}'`:`'${e.replaceAll(`'`,`'\\''`)}'`).join(` `)}function k(e){if(e.length===0)return`All seats are connected.`;let t=e.filter(e=>e.tone===`danger`).length;return t>0?t===1?`${e.find(e=>e.tone===`danger`).label} can't run turns right now.`:`${t} seats can't run turns right now.`:e.length===1?`${e[0].label} needs attention.`:`${e.length} seats need attention.`}var A={ready:`success`,tight:`warning`,blocked:`danger`,unread:`neutral`};function j(e){return A[e]}function M(e,t){return{id:e.id,label:e.label,usedPercent:e.usedPercent,limitReached:e.limitReached,resetText:e.resetText,resetsAt:e.resetsAt,binding:t}}function N(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))}function P(e){return e.limitReached||e.usedPercent!==null&&e.usedPercent>=100}function F(e,t){return e?{connection:e.connection,word:w[e.connection],tone:T[e.connection],reasons:I(e.reasons,t),fixKind:e.fix.kind,fixCommand:e.fix.command&&e.fix.command.length>0?[...e.fix.command]:null}:null}function I(e,t){return e.map(e=>i(e,t).trim()).filter(e=>e.length>0)}function L(e){if(!e||e.free)return null;let{policy:t}=e,n=Math.max(0,Math.min(100,Math.round(t.reservePercent))),r=t.enabled?n===0?`No reserve — autonomy may use all of it`:`Reserved for you ${n}%`:`Autonomy off — all yours`;return{percent:t.enabled?n:null,label:r,autonomy:e.status,autonomyWord:c[e.status],why:e.why}}function R(n,r,i,s){let c=a(n,s),l=[];c.binding&&l.push(M(c.binding,!0));for(let e of c.others){if(l.length>=3)break;l.push(M(e,!1))}let u=r.get(n.id),f=F(u,s),p=f!==null&&(f.connection===`signed-out`||f.connection===`exhausted`);return{seatId:n.id,label:n.label,engine:n.engine,monogram:e[n.engine],kind:c.kind,plan:c.plan,cls:p?`blocked`:c.cls,word:p?t.blocked:c.word,summary:p?f.reasons[0]??f.word:c.summary,connection:f,windows:l,historicalUsage:l.length===0?d(n,s):null,credits:c.credits,creditBalance:c.creditBalance??null,creditState:c.creditState??`unknown`,creditSpendControlReached:c.creditSpendControlReached??null,reserve:L(i.get(n.id)),notes:[...c.notes],localCount:1,checkedAt:N(u?.checkedAt)?u.checkedAt:N(c.observedAt)?c.observedAt:null,resetAt:o(c,u?.resetAt),signedOut:f?.connection===`signed-out`||n.capacity?.usability===`signed-out`,lastReading:n.health.state===`degraded`&&n.capacity?.usability===`unknown`&&l.length>0}}function z(t,n,r){let i=t.map(e=>a(e,r)),o=i.filter(e=>e.cls===`ready`).length,s=i.filter(e=>e.cls===`blocked`).length,c=o>0?`ready`:s===i.length?`blocked`:`unread`,l=t.map(e=>n.get(e.id)).find(e=>e!==void 0),u=t.length;return{seatId:`local`,label:`Local models`,engine:`local`,monogram:e.local,kind:`local`,plan:null,cls:c,word:i.find(e=>e.cls===c)?.word??`no reading`,summary:c===`ready`?`${u} ${u===1?`model`:`models`} on this machine · free`:c===`blocked`?i[0]?.summary??`local runtime unavailable`:`readiness not reported`,connection:F(l,r),windows:[],credits:null,reserve:null,notes:[],localCount:u,checkedAt:N(l?.checkedAt)?l.checkedAt:i.map(e=>e.observedAt).filter(N).sort((e,t)=>Date.parse(t)-Date.parse(e))[0]??null,resetAt:null,signedOut:!1}}function B(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var V=e=>typeof e==`number`&&Number.isFinite(e)?e:null;function H(e){if(!B(e)||typeof e.seatId!=`string`)return null;let t=e.bindingWindow;return{seatId:e.seatId,sessionUsedPercent:V(e.sessionUsedPercent),weeklyUsedPercent:V(e.weeklyUsedPercent),bindingWindow:t===`session`||t===`weekly`?t:null,autonomyHeadroomPercent:V(e.autonomyHeadroomPercent),resetAt:typeof e.resetAt==`string`?e.resetAt:null,eligibleForAutonomy:e.eligibleForAutonomy===!0,reasons:Array.isArray(e.reasons)?e.reasons.filter(e=>typeof e==`string`):[]}}function U(e,t){if(!B(t)||typeof t.enabled!=`boolean`)return null;let n=t.reservePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r={seatId:e,enabled:t.enabled,reservePercent:n},i=t.maxSessionWindowPercent;return typeof i==`number`&&Number.isFinite(i)&&(r.maxSessionWindowPercent=i),r}function W(e){if(!B(e)||!Array.isArray(e.seatInfo))return new Map;let t=B(e.effective)?e.effective:{},n={},r=[];for(let i of e.seatInfo){if(!B(i)||typeof i.seatId!=`string`)continue;let e=i.seatId,a=i.engine;if(a===`claude`||a===`codex`||a===`grok`||a===`local`){if(Object.prototype.hasOwnProperty.call(t,e)){let r=U(e,t[e]);if(r===null)continue;n[e]=r}r.push({seatId:e,label:typeof i.label==`string`?i.label:e,engine:a,free:i.free===!0})}}let i=Array.isArray(e.headroom)?e.headroom.map(H).filter(e=>e!==null):[],a={...e,seatInfo:r,effective:n,headroom:i};try{return new Map(s(a).map(e=>[e.seatId,e]))}catch{return new Map}}function G(e){let t=new Map;if(!Array.isArray(e))return t;for(let n of e){if(!B(n)||typeof n.seatId!=`string`)continue;let e=n.connection;if(typeof e!=`string`||!Object.prototype.hasOwnProperty.call(w,e))continue;let r=B(n.fix)?n.fix:{},i=r.kind,a=Array.isArray(r.command)&&r.command.every(e=>typeof e==`string`)?r.command:void 0;t.set(n.seatId,{...n,reasons:Array.isArray(n.reasons)?n.reasons.filter(e=>typeof e==`string`):[],fix:{kind:i===`reauth`||i===`repin`||i===`wait`?i:`none`,...a?{command:a}:{}}})}return t}function K(e,t={}){let n=G(t.health),r=W(t.budget),i=Array.isArray(e)?e.filter(e=>B(e)&&typeof e.id==`string`):[],a=t.local??`collapse`,o=t.now??Date.now(),s=i;if(t.seatIds){let e=new Map(i.map(e=>[e.id,e]));s=t.seatIds.map(t=>e.get(t)).filter(e=>e!==void 0)}let c=[],l=[],u=-1;for(let e of s){if(e.engine===`local`){if(a===`hide`)continue;if(a===`collapse`){u===-1&&(u=c.length),l.push(e);continue}}c.push(R(e,n,r,o))}if(l.length>0){let e=l.length===1?R(l[0],n,r,o):z(l,n,o);c.splice(u,0,e)}return c}function q(e){let t=e.filter(e=>e.kind===`subscription`),n=e.filter(e=>e.kind===`local`),r=t.filter(e=>e.cls===`ready`||e.cls===`tight`).length,i=t.filter(e=>e.lastReading).length,a=t.filter(e=>e.cls===`unread`&&!e.lastReading).length,o=[];return t.length===0?o.push(`No accounts connected`):o.push(`${r} of ${t.length} ${t.length===1?`account`:`accounts`} usable`),i>0&&o.push(`${i} last ${i===1?`reading`:`readings`}`),a>0&&o.push(`${a} not read yet`),n.some(e=>e.cls===`ready`)?o.push(`local models ready`):n.length>0&&o.push(`local models not ready`),o.join(` · `)}function J(e){let t=null;for(let n of e){if(n.kind!==`subscription`)continue;let e=n.windows.find(e=>e.binding)??null,r;if(n.cls===`blocked`||e?.limitReached)r=300;else if(e?.usedPercent!=null)r=(n.cls===`tight`?100:0)+e.usedPercent;else continue;(t===null||r>t.score)&&(t={row:n,score:r})}return t?.row??null}function Y(e,t,n={}){return K(e,{...n,seatIds:[t],local:`each`})[0]??null}function X(e,t,n){let i=`${e.label} ${t.label}`,a=t.resetText===null?``:`, ${t.resetText}`;if(t.limitReached)return`${i}: limit reached${a}`;if(t.usedPercent===null)return`${i}: no reading${a}`;let o=n!==null&&n>0?`; ${n}% kept for you`:``;return`${i}: ${r(t.usedPercent)} used${o}${a}`}var Z={usable:`success`,low:`warning`,spent:`danger`,"signed-out":`danger`,unavailable:`danger`,"not-checked":`neutral`,checking:`neutral`},Q={usable:0,low:1,checking:2,"not-checked":3,spent:4,unavailable:5,"signed-out":6};function ne(e,t){let n=l(e.checkedAt,t);if(n===null||e.checkedAt===null)return{checked:null,checkedTitle:null};let r=new Date(e.checkedAt);return{checked:`checked ${n}`,checkedTitle:`Last checked ${r.toLocaleString([],{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}`}}function $(e,t){let r=t.now??Date.now(),{checked:i,checkedTitle:a}=ne(e,r),o=(e,t,n,r={})=>({kind:e,label:t,detail:n,tone:Z[e],usableAgain:null,checked:i,checkedTitle:a,coversConnection:!1,...r});if(t.checking)return o(`checking`,`Checking…`,null);if(e.kind===`local`)return e.cls===`ready`?o(`usable`,`Ready`,e.localCount>1?`${e.localCount} models on this machine · free`:`runs on this machine · free`):e.cls===`blocked`?o(`unavailable`,`Not running`,e.summary):t.healthRead?o(`not-checked`,`Not checked`,`readiness not reported yet`):o(`checking`,`Checking…`,null);let s=e.connection?.connection??null;if(e.signedOut)return o(`signed-out`,`Signed out`,`reconnect to use it`,{coversConnection:!0});if(e.lastReading)return o(`unavailable`,`Last reading`,`latest check failed · access unconfirmed`,{coversConnection:!0});let c=e.windows.find(e=>e.binding)??null,l=s===`exhausted`||e.cls===`blocked`&&c!==null&&P(c)||e.engine===`codex`&&e.credits===null&&c?.limitReached===!0;if(e.engine===`codex`&&e.credits!==null)return e.creditSpendControlReached===!0?o(`unavailable`,`Credits held`,`native spend control reached · balance is separate`,{coversConnection:!0}):o(`low`,`Credits available`,c!==null&&P(c)?`subscription window spent · autonomous credit spending is not admitted`:`native credit balance · separate from subscription usage`,{coversConnection:s===`exhausted`});if(l){let t=n(e.resetAt,r),i=e.resetAt!==null&&Date.parse(e.resetAt)>r,a=(e.windows.find(e=>P(e)&&!N(e.resetsAt)&&e.resetText!==null)??null)?.resetText??(c!==null&&!N(c.resetsAt)?c.resetText:null);return o(`spent`,`Spent`,t===null?a??`reset time not reported`:i?`resets ${t}`:`was due to reset ${t}`,{usableAgain:D(e.resetAt,r),coversConnection:s===`exhausted`})}if(e.cls===`blocked`)return o(`unavailable`,`Unavailable`,e.summary);if(e.cls===`unread`)return t.healthRead?s===null||s===`unknown`?o(`not-checked`,`Not checked`,`no reading yet`):o(`usable`,`Connected`,`no usage reading yet`):o(`checking`,`Checking…`,null);let u=s===null||s===`unknown`?`Usable`:`Connected`;if(e.cls===`tight`){let t=c!==null&&P(c)&&e.credits!==null;return u===`Usable`?o(`low`,`Usable`,t?`on credits`:`running low`):o(`low`,u,t?`usable on credits`:`running low`)}return u===`Usable`?o(`usable`,`Usable now`,null):o(`usable`,`Connected`,`usable now`)}function re(e){return Q[e]}function ie(e,t){let n=e.map((e,n)=>({row:e,index:n,rank:Q[$(e,{...t,checking:!1}).kind],local:+(e.kind===`local`)}));return n.sort((e,t)=>e.rank-t.rank||e.local-t.local||e.index-t.index),n.map(e=>e.row)}export{f as _,Y as a,W as c,k as d,ee as f,b as g,C as h,q as i,J as l,S as m,re as n,j as o,te as p,K as r,ie as s,$ as t,X as u};
2
- //# sourceMappingURL=capacity-strip-model-Wna9o0dS.js.map