@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 +0,0 @@
1
- {"version":3,"file":"Advanced-Dr9aVbXV.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/autonomy/control-types.ts","../../../../../../src/web-ui/routes/verse/autonomy/autonomy.module.css","../../../../../../src/web-ui/routes/verse/autonomy/ActivityPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/caps-spec.ts","../../../../../../src/web-ui/routes/verse/autonomy/goal-preferences-spec.ts","../../../../../../src/web-ui/routes/verse/autonomy/GoalPreferencesPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/leader-preferences-spec.ts","../../../../../../src/web-ui/routes/verse/autonomy/LeaderPreferencesPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/CapsPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/StatusHeader.tsx","../../../../../../src/web-ui/routes/verse/autonomy/DaemonControls.tsx","../../../../../../src/web-ui/routes/verse/autonomy/FleetPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/GoalsBacklogPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/LocalOnlyPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/LocalRuntimePanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/overnight.module.css","../../../../../../src/web-ui/routes/verse/autonomy/OvernightPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/SafetyPanel.tsx","../../../../../../src/web-ui/routes/verse/autonomy/ScopePanel.tsx","../../../../../../src/web-ui/routes/verse/sections/AutonomySection.module.css","../../../../../../src/web-ui/routes/verse/fleet/Advanced.tsx"],"sourcesContent":["/**\n * routes/verse/autonomy/control-types.ts\n *\n * The V2 control-plane shapes, re-exported from the ONE declaration site:\n * `src/core/verse/control-types.ts` (owner B), by way of\n * `src/web-ui/data/api-types.ts`. This file used to hold a local\n * transcription of the contract prose because the backend module did not\n * exist yet; that block is gone and the cockpit is now typed by the same\n * declarations the routes serialize.\n *\n * Reconciliation notes — where the transcription had guessed wrong, and what\n * the real server sends:\n * - `VerseControlSnapshot.enrollment` → `.scope: VerseScope` (`.scope.repos`)\n * - `VerseControlSnapshot.todaySpendUsd` → `.spend: VerseSpend` (`.spend.todayUsd`)\n * - `VerseControlSnapshot.engines` → `.quota: FrontierEngineUsage[]`, whose\n * rows carry `callsToday`/`limit`/`limitWindow`, not `dispatchesRecent`\n * plus a precomputed `quota` word. `engineQuotaStanding()` below derives\n * that word on the client, so the UI copy is unchanged.\n * - `VerseCapsUpdateResult.applied` is `VerseCapKey[]` (which caps changed),\n * not the whole `VerseCaps`; the new caps come back on `.caps`.\n * - `maxConcurrent` and each `concurrency.*` are `number | null` — null\n * means \"not configured\", which is an honest state, not a zero.\n *\n * The local alias names the cockpit already used (`VerseCapsPatch`,\n * `VerseCapsApplyResult`, `VerseScopePatch`, `VerseAuditPage`) are kept as\n * aliases of the real types so call sites read the same.\n */\nimport type { FrontierEngineUsage } from '../../../../core/usage/frontier-usage.js';\nimport type { VerseFoundryLimit } from '../../../data/api-types.js';\n\nexport type {\n AuditEntry,\n VerseAuditResponse,\n VerseAuditResult,\n VerseCapKey,\n VerseCaps,\n VerseCapsConcurrency,\n VerseCapsUpdate,\n VerseCapsUpdateResult,\n VerseControlError,\n VerseControlErrorCode,\n VerseControlSnapshot,\n VerseDaemonAction,\n VerseDaemonActionResult,\n VerseDaemonStateProjection,\n VerseFleetEssentials,\n VerseFoundryLimit,\n VerseKillSwitch,\n VerseSafetyReport,\n VerseScope,\n VerseScopeAction,\n VerseScopeRepo,\n VerseScopeRequest,\n VerseScopeResult,\n VerseSpend,\n} from '../../../data/api-types.js';\nexport type { PublicDaemonObservation } from '../../../data/api-types.js';\nexport type { DaemonDispatchTrace, DaemonTick } from '../../../../core/types.js';\nexport type { FrontierEngineUsage };\n\n/**\n * Runtime constants from the same backend module. `control-types.ts` has only\n * type-only imports, so pulling these values into the bundle costs nothing and\n * removes the last place the client could disagree with the server about a\n * bound or the kill switch's wording.\n */\nexport {\n VERSE_AUDIT_MAX_LIMIT,\n VERSE_CAPS_BOUNDS,\n VERSE_DAEMON_PAUSE_NOTE,\n VERSE_KILL_SWITCH_NOTE,\n} from '../../../../core/verse/control-types.js';\n\n/**\n * The DAEMON-SCOPED pause (V2.1), taken straight from the backend contract\n * rather than through `data/api-types.ts`.\n *\n * Every other shape here routes through that barrel, and this one should join\n * it when the barrel is next edited. It is imported directly for now because\n * `api-types.ts` is being changed by another surface in the same build, and a\n * type-only re-export is the one place where the short path costs nothing:\n * it is the same declaration either way, and `VERSE_CAPS_BOUNDS` above already\n * reaches for the core module by this exact path.\n */\nexport type { VerseDaemonPause } from '../../../../core/verse/control-types.js';\n\nimport type {\n VerseAuditResponse,\n VerseAuditResult,\n VerseCapsUpdate,\n VerseCapsUpdateResult,\n VerseScopeRequest,\n} from '../../../data/api-types.js';\n\n/** Partial update body for `POST /api/verse/caps`. */\nexport type VerseCapsPatch = VerseCapsUpdate;\n/** `{ok, applied, live: true, caps}` — the \"takes effect live\" receipt. */\nexport type VerseCapsApplyResult = VerseCapsUpdateResult;\n/** `POST /api/verse/scope` body. */\nexport type VerseScopePatch = VerseScopeRequest;\n/** `GET /api/verse/audit` — one page of the audit trail. */\nexport type VerseAuditPage = VerseAuditResponse;\n\n/** Client-side filter state for `GET /api/verse/audit`. */\nexport interface VerseAuditFilters {\n limit?: number;\n action?: string;\n result?: VerseAuditResult;\n}\n\n/** How a quota row stands against its configured limit, as a single word. */\nexport type VerseQuotaStanding = 'ok' | 'warn' | 'over' | 'unlimited';\n\n/**\n * Derive the standing word from a real `FrontierEngineUsage` row.\n *\n * The server does not precompute this (the transcription assumed it did), and\n * it is a pure function of two numbers, so it belongs on the client rather\n * than in a new response field. No limit configured is `unlimited` — which\n * the UI must render as \"no limit configured\", never as headroom.\n */\nexport function engineQuotaStanding(row: FrontierEngineUsage): VerseQuotaStanding {\n const limit = row.limit;\n if (typeof limit !== 'number' || !Number.isFinite(limit) || limit <= 0) return 'unlimited';\n const used = typeof row.callsToday === 'number' && Number.isFinite(row.callsToday) ? row.callsToday : 0;\n if (used >= limit) return 'over';\n if (used >= limit * 0.8) return 'warn';\n return 'ok';\n}\n\n/** The configured foundry limit matching a quota row, when there is one. */\nexport function limitForEngine(\n engine: string,\n limits: readonly VerseFoundryLimit[] | undefined,\n): VerseFoundryLimit | null {\n return limits?.find((l) => l.engine === engine) ?? null;\n}\n","/**\n * routes/verse/autonomy/autonomy.module.css — one stylesheet for the whole\n * cockpit so the panels cannot drift apart.\n *\n * Design language (docs/VERSE-DESIGN-V2.md): monochrome, hairlines instead of\n * cards, no shadows outside true overlays, tight radii, Space Grotesk on every\n * numeral and micro-label, colour only where it carries meaning. Row heights\n * and padding derive from --density-row/--density-pad; both carry a fallback\n * so this renders correctly before owner A's token pass lands.\n */\n\n.panel { border-top: 1px solid var(--border-subtle); padding-block: var(--space-6); }\n.panel:first-of-type { border-top: 0; padding-top: var(--space-4); }\n\n.panelHead { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-3); margin-bottom: var(--space-4); }\n.panelTitle {\n font-family: var(--font-display);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n.panelHeadSpaced { margin-top: var(--space-6); }\n.panelNote { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-tertiary); }\n.panelActions { display: flex; align-items: center; gap: var(--space-2); }\n\n/* --- status header ------------------------------------------------------ */\n.status { display: flex; flex-direction: column; gap: var(--space-4); }\n.statusTop { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3) var(--space-5); }\n.runState { display: inline-flex; align-items: center; gap: var(--space-2); font-family: var(--font-display); font-size: var(--text-xl-size); line-height: var(--text-xl-line); font-weight: var(--font-weight-semibold); letter-spacing: var(--tracking-display, -0.02em); }\n.runDot { width: 8px; height: 8px; border-radius: var(--radius-full); background: var(--status-neutral-solid); flex-shrink: 0; }\n.runState[data-state=\"running\"] .runDot { background: var(--status-running-solid); }\n.runState[data-state=\"stopped\"] .runDot { background: var(--status-neutral-solid); }\n.runState[data-state=\"unknown\"] .runDot { background: var(--status-unknown-solid); }\n.runState[data-state=\"killed\"] .runDot { background: var(--status-danger-solid); }\n\n.facts { display: flex; flex-wrap: wrap; gap: var(--space-3) var(--space-5); }\n.fact { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n.factLabel { font-family: var(--font-display); font-size: var(--text-2xs-size, 11px); letter-spacing: var(--tracking-label, 0.06em); text-transform: uppercase; color: var(--text-tertiary); }\n.factValue { font-family: var(--font-display); font-size: var(--text-sm-size); line-height: var(--text-sm-line); color: var(--text-primary); white-space: nowrap; }\n.factValue[data-tone=\"warning\"] { color: var(--status-warning-fg); }\n.factValue[data-tone=\"danger\"] { color: var(--status-danger-fg); }\n.factValue[data-tone=\"success\"] { color: var(--status-success-fg); }\n.factValue[data-tone=\"unknown\"] { color: var(--status-unknown-fg); }\n\n/* Budget: one line, never a labelled progress bar. */\n.budget { display: flex; flex-direction: column; gap: var(--space-2); }\n.budgetLine { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--space-2); }\n.budgetLabel { font-family: var(--font-display); font-size: var(--text-sm-size); color: var(--text-primary); }\n.budgetNote { font-size: var(--text-xs-size); color: var(--text-tertiary); }\n.meter { --meter-color: var(--accent-500); height: 2px; background: var(--meter-track); overflow: hidden; }\n.meter[data-state=\"warn\"] { --meter-color: var(--status-warning-solid); }\n.meter[data-state=\"over\"] { --meter-color: var(--status-danger-solid); }\n.meter[data-state=\"stopped\"] { --meter-color: var(--status-danger-solid); }\n.meter[data-state=\"unknown\"] { --meter-color: var(--status-unknown-solid); }\n.meterFill { height: 100%; background: var(--meter-color); transition: width var(--duration-base) var(--ease-decelerate); }\n\n/* --- controls ----------------------------------------------------------- */\n.controls { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); }\n.button {\n min-height: var(--density-row, 32px);\n padding: 0 var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n color: var(--text-primary);\n font-family: var(--font-ui);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-medium);\n cursor: pointer;\n}\n.button:hover:not(:disabled) { background: var(--bg-hover); border-color: var(--border-strong); }\n.button:disabled { color: var(--text-disabled); cursor: not-allowed; }\n.buttonPrimary { border-color: var(--accent-500); color: var(--accent-600); }\n.buttonPrimary:hover:not(:disabled) { background: var(--bg-selected); }\n\n/* The emergency stop is separated by a rule, not by colour alone. */\n.emergency { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); margin-top: var(--space-4); padding-top: var(--space-4); border-top: 1px solid var(--border-default); }\n.emergencyButton {\n min-height: var(--density-row, 32px);\n padding: 0 var(--space-4);\n border: 1px solid var(--status-danger-solid);\n border-radius: var(--radius-sm);\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n font-family: var(--font-ui);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-semibold);\n cursor: pointer;\n}\n/* Hover keeps the RESTING pair. `--accent-contrast` on `--status-danger-solid`\n measures 3.97:1 in light (#ffffff on #e5473a) — below the 4.5:1 floor, on\n the label of the most destructive control in the app, at the exact moment\n the operator is reading it to confirm what they are about to do. It also\n borrowed the accent system's foreground token for a danger ground, coupling\n this button to a colour the operator can re-hue in Settings. The hover cue\n is achromatic instead: the hairline thickens its contrast. */\n.emergencyButton:hover:not(:disabled) { border-color: var(--status-danger-fg); background: var(--status-danger-bg); }\n.emergencyButton:disabled { border-color: var(--border-default); background: var(--bg-surface); color: var(--text-disabled); cursor: not-allowed; }\n.emergencyNote { flex: 1; min-width: 220px; font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-secondary); }\n\n/* --- caps --------------------------------------------------------------- */\n.capGrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--space-4) var(--space-5); }\n.goalNote { max-width: 68ch; margin-bottom: var(--space-4); color: var(--text-secondary); font-size: var(--text-sm-size); line-height: var(--text-base-line); }\n.goalSummary { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); cursor: pointer; }\n.goalSummaryLabel { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }\n.goalChevron { flex: none; color: var(--text-tertiary); }\n.goalDisclosure[open] .goalChevron { transform: rotate(90deg); }\n.goalSummary:focus-visible { outline: 2px solid var(--border-focus); outline-offset: var(--space-1); }\n.goalDisclosure[open] .goalSummary { margin-bottom: var(--space-4); }\n.goalFields { min-width: 0; padding: 0; margin: 0; border: 0; }\n.goalLabel { font-family: var(--font-display); font-size: var(--text-sm-size); font-weight: var(--font-weight-medium); color: var(--text-primary); }\n.goalChoice { display: flex; align-items: flex-start; gap: var(--space-2); margin-top: var(--space-1); color: var(--text-secondary); font-size: var(--text-xs-size); line-height: var(--text-xs-line); }\n.goalChoice input { flex: none; accent-color: var(--text-primary); }\n.goalChoice input:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 2px; }\n.goalActions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); margin-top: var(--space-4); }\n.goalFocus { margin-top: var(--space-4); padding-top: var(--space-3); border-top: 1px solid var(--border-subtle); }\n.goalFocus p { max-width: 68ch; margin-top: var(--space-2); }\n.cap { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }\n.capLabel { font-family: var(--font-display); font-size: var(--text-2xs-size, 11px); letter-spacing: var(--tracking-label, 0.06em); text-transform: uppercase; color: var(--text-tertiary); }\n.capRow { display: flex; align-items: center; gap: var(--space-2); }\n.capInput {\n flex: 1;\n min-width: 0;\n min-height: var(--density-row, 32px);\n padding: 0 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-family: var(--font-display);\n font-size: var(--text-sm-size);\n}\n.capInput:focus-visible { border-color: var(--border-focus); }\n.capInput:disabled { color: var(--text-disabled); background: var(--bg-canvas); cursor: not-allowed; }\n.capInputInvalid { border-color: var(--status-danger-solid); }\n.capUnit { font-size: var(--text-xs-size); color: var(--text-tertiary); white-space: nowrap; }\n.capHelp { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-tertiary); }\n.capUsage { font-family: var(--font-display); font-size: var(--text-xs-size); color: var(--text-secondary); }\n.capError { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--status-danger-fg); }\n/* The server's own sentence about what the last action did. Not an error, not\n a success toast — a statement of fact, so it reads as body copy. */\n.actionNote { margin-top: var(--space-3); font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-secondary); }\n.capApplied { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--text-xs-size); color: var(--status-success-fg); }\n.capApplied::before { content: \"✓\"; }\n\n/* --- scope -------------------------------------------------------------- */\n.repoList { display: flex; flex-direction: column; }\n.repoRow { display: flex; align-items: center; gap: var(--space-3); min-height: var(--density-row, 32px); padding: var(--space-1) 0; border-bottom: 1px solid var(--border-subtle); }\n.repoName { font-family: var(--font-display); font-size: var(--text-sm-size); color: var(--text-primary); white-space: nowrap; }\n.repoPath { flex: 1; min-width: 0; font-family: var(--font-mono); font-size: var(--text-xs-size); color: var(--text-tertiary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; direction: rtl; text-align: left; }\n.repoMissing { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--text-xs-size); color: var(--status-warning-fg); white-space: nowrap; }\n.addRow { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-4); }\n.addInput {\n flex: 1;\n min-width: 240px;\n min-height: var(--density-row, 32px);\n padding: 0 var(--space-3);\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-family: var(--font-mono);\n font-size: var(--text-xs-size);\n}\n.addInput:focus-visible { border-color: var(--border-focus); }\n\n/* --- dense tables (audit, ticks, dispatches) ---------------------------- */\n.tableScroll { max-height: 520px; overflow: auto; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); scrollbar-gutter: stable; }\n.table { width: 100%; border-collapse: collapse; font-size: var(--text-xs-size); line-height: var(--text-xs-line); }\n.table th {\n font-family: var(--font-display);\n position: sticky;\n top: 0;\n z-index: var(--z-sticky);\n padding: var(--space-2) var(--space-3);\n background: var(--bg-surface);\n border-bottom: 1px solid var(--border-default);\n text-align: left;\n font-size: var(--text-2xs-size, 11px);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n font-weight: var(--font-weight-semibold);\n color: var(--text-tertiary);\n white-space: nowrap;\n}\n.table td { padding: var(--space-1) var(--space-3); border-bottom: 1px solid var(--border-subtle); vertical-align: top; }\n.table tbody tr:hover { background: var(--bg-hover); }\n.cellAction { font-family: var(--font-mono); color: var(--text-primary); white-space: nowrap; }\n.cellTime { font-family: var(--font-display); color: var(--text-tertiary); white-space: nowrap; }\n.cellSummary { color: var(--text-secondary); }\n.cellRepo { font-family: var(--font-mono); color: var(--text-tertiary); white-space: nowrap; }\n/* --text-tertiary is a direct declaration on a CHILD, so the parent's\n :hover/[aria-current] colour change does not reach it — only the ground\n under it moves. Measured on --bg-selected it is 3.95:1 in light and 4.40:1\n in dark, both under the 4.5:1 floor in DESIGN-V2 §6; --text-secondary is\n 6.32:1 on the worst of them. design/tokens-contrast.test.ts now pins the\n token pair so the gap cannot reopen. */\n.table tbody tr:hover .cellTime,\n.table tbody tr:hover .cellRepo { color: var(--text-secondary); }\n.resultTag { display: inline-flex; align-items: center; gap: var(--space-1); font-family: var(--font-display); white-space: nowrap; }\n.resultTag::before { content: \"•\"; }\n.resultTag[data-result=\"ok\"] { color: var(--status-success-fg); }\n.resultTag[data-result=\"refused\"] { color: var(--status-warning-fg); }\n.resultTag[data-result=\"error\"] { color: var(--status-danger-fg); }\n.resultTag[data-result=\"ok\"]::before { content: \"✓\"; }\n.resultTag[data-result=\"refused\"]::before { content: \"⊘\"; }\n.resultTag[data-result=\"error\"]::before { content: \"✕\"; }\n\n.filters { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--space-3); margin-bottom: var(--space-3); }\n.filterField { display: flex; flex-direction: column; gap: var(--space-1); }\n.filterLabel { font-family: var(--font-display); font-size: var(--text-2xs-size, 11px); letter-spacing: var(--tracking-label, 0.06em); text-transform: uppercase; color: var(--text-tertiary); }\n.filterField input {\n min-height: var(--density-row, 32px);\n padding: 0 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-family: var(--font-ui);\n font-size: var(--text-xs-size);\n}\n\n/* The Select primitive renders its own <label>; restyle it to the uppercase\n micro-label the sibling text filters use so the row still reads as one\n group. Descendant element selector, so it stays module-scoped. */\n.filterSelect > label {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size, 11px);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n font-weight: var(--font-weight-regular, 400);\n color: var(--text-tertiary);\n}\n\n/* WebKit paints its own clear affordance inside type=search, which is a\n default browser control (§7). Sidebar.module.css already resets it. */\n.filterField input[type='search']::-webkit-search-cancel-button { appearance: none; }\n\n\n/* --- safety ------------------------------------------------------------- */\n.checkList { display: flex; flex-direction: column; }\n.check { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--space-1) var(--space-3); padding: var(--space-2) 0; border-bottom: 1px solid var(--border-subtle); }\n.checkMark { grid-row: 1 / span 2; font-family: var(--font-display); font-size: var(--text-sm-size); }\n.check[data-pass=\"true\"] .checkMark { color: var(--status-success-fg); }\n.check[data-pass=\"false\"] .checkMark { color: var(--status-danger-fg); }\n.checkLabel { font-size: var(--text-sm-size); line-height: var(--text-sm-line); color: var(--text-primary); }\n.checkDetail { font-family: var(--font-mono); font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-tertiary); }\n\n/* --- goals + backlog ---------------------------------------------------- */\n.summaryColumns { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--space-5); }\n.summaryList { display: flex; flex-direction: column; }\n.summaryRow { display: flex; align-items: baseline; gap: var(--space-3); min-height: var(--density-row, 32px); padding: var(--space-1) 0; border-bottom: 1px solid var(--border-subtle); }\n.summaryTitle { flex: 1; min-width: 0; font-size: var(--text-sm-size); color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.summaryMeta { font-family: var(--font-display); font-size: var(--text-xs-size); color: var(--text-tertiary); white-space: nowrap; }\n\n/* --- shared states ------------------------------------------------------ */\n.empty { padding: var(--space-4) 0; font-size: var(--text-sm-size); line-height: var(--text-base-line); color: var(--text-secondary); max-width: 62ch; }\n.emptyStrong { color: var(--text-primary); font-weight: var(--font-weight-medium); }\n/* An empty state names its next action, often a command or a config key. */\n.empty code { font-family: var(--font-mono); font-size: var(--text-xs-size); color: var(--text-primary); }\n.error { padding: var(--space-3); border: 1px solid var(--status-danger-solid); border-radius: var(--radius-sm); background: var(--status-danger-bg); color: var(--status-danger-fg); font-size: var(--text-sm-size); line-height: var(--text-sm-line); }\n.readOnly { padding: var(--space-3); border: 1px solid var(--border-default); border-radius: var(--radius-sm); background: var(--bg-canvas); color: var(--text-secondary); font-size: var(--text-sm-size); line-height: var(--text-base-line); }\n.readOnly code { font-family: var(--font-mono); font-size: var(--text-xs-size); }\n.skeletons { display: flex; flex-direction: column; gap: var(--space-2); }\n.srOnly { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }\n\n/* Guarded: appearance-store.ts writes data-motion=\"full\" so an operator can\n opt out of the OS preference, and every other animated surface here honours\n it. */\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion=\"full\"]) .meterFill { transition: none; }\n}\n\n/* --- local fleet: serving runtime, local-only, agents in flight ---------- */\n/* Owner U. Same rules as the rest of this sheet: hairlines not cards, tone\n always paired with a word, every numeral in the display face with tabular\n figures so a column of elapsed times does not shimmer as it ticks. Reads at\n 900px — every grid here collapses to one column before that. */\n\n.runtimeTop { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); margin-bottom: var(--space-4); }\n.runtimeState { display: inline-flex; align-items: center; gap: var(--space-2); font-family: var(--font-display); font-size: var(--text-base-size); line-height: var(--text-base-line); font-weight: var(--font-weight-semibold); letter-spacing: var(--tracking-display, -0.02em); }\n.runtimeStateText { white-space: nowrap; }\n.runtimeState[data-state=\"running\"] .runDot { background: var(--status-success-solid); }\n.runtimeState[data-state=\"starting\"] .runDot,\n.runtimeState[data-state=\"stopping\"] .runDot { background: var(--status-running-solid); }\n.runtimeState[data-state=\"stopped\"] .runDot { background: var(--status-neutral-solid); }\n.runtimeState[data-state=\"unknown\"] .runDot { background: var(--status-unknown-solid); }\n\n.factWide { flex: 1 1 260px; min-width: 0; }\n.factMono { font-family: var(--font-mono); font-size: var(--text-xs-size); overflow: hidden; text-overflow: ellipsis; }\n\n/* The capacity block. The big numeral is the EFFECTIVE concurrency; the\n verdict word beside it carries the state so colour is never alone. */\n.capacityBlock { margin-top: var(--space-5); padding-top: var(--space-4); border-top: 1px solid var(--border-subtle); }\n.capacityHead { display: flex; align-items: flex-start; gap: var(--space-4); }\n.capacityBig {\n flex: none;\n min-width: 2ch;\n font-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n font-size: var(--text-3xl-size, 30px);\n line-height: 1;\n letter-spacing: var(--tracking-display, -0.02em);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n.capacityBlock[data-verdict=\"serialized\"] .capacityBig { color: var(--status-danger-fg); }\n.capacityBlock[data-verdict=\"unknown\"] .capacityBig,\n.capacityBlock[data-verdict=\"offline\"] .capacityBig { color: var(--text-tertiary); }\n.capacityWords { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }\n.capacityHeadline { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); font-family: var(--font-display); font-size: var(--text-sm-size); line-height: var(--text-sm-line); color: var(--text-primary); }\n.capacityDetail { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-secondary); max-width: 68ch; }\n\n/* The measurement, shown only when the configured number is not the real one. */\n.evidence { margin-top: var(--space-4); padding: var(--space-3); border: 1px solid var(--border-default); border-radius: var(--radius-sm); background: var(--bg-canvas); }\n.evidenceLead { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-secondary); margin-bottom: var(--space-3); max-width: 68ch; }\n.evidenceScroll { overflow-x: auto; }\n.evidenceTable { width: 100%; min-width: 380px; border-collapse: collapse; font-size: var(--text-xs-size); line-height: var(--text-xs-line); }\n.evidenceTable th, .evidenceTable td { padding: var(--space-1) var(--space-2); text-align: left; border-bottom: 1px solid var(--border-subtle); }\n.evidenceTable thead th { font-family: var(--font-display); font-size: var(--text-2xs-size, 11px); letter-spacing: var(--tracking-label, 0.06em); text-transform: uppercase; color: var(--text-tertiary); font-weight: var(--font-weight-medium); }\n.evidenceTable tbody th { font-family: var(--font-display); color: var(--text-primary); font-weight: var(--font-weight-medium); white-space: nowrap; }\n.evidenceTable tbody tr:last-child th, .evidenceTable tbody tr:last-child td { border-bottom: 0; }\n.evidenceNums { font-family: var(--font-display); font-variant-numeric: tabular-nums; color: var(--text-secondary); white-space: nowrap; }\n.evidenceCode { font-family: var(--font-mono); font-size: var(--text-2xs-size, 11px); color: var(--text-tertiary); overflow-wrap: anywhere; }\n\n.utilisation { display: flex; flex-direction: column; gap: var(--space-2); margin-top: var(--space-5); }\n\n/* --- local only --------------------------------------------------------- */\n.toggleRow { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-3); }\n.toggleState { display: inline-flex; align-items: center; gap: var(--space-2); }\n.policyExplain { margin-top: var(--space-3); font-size: var(--text-sm-size); line-height: var(--text-base-line); color: var(--text-secondary); max-width: 68ch; }\n.policyExplain strong { color: var(--text-primary); font-weight: var(--font-weight-semibold); }\n\n.impact { margin-top: var(--space-5); padding-top: var(--space-4); border-top: 1px solid var(--border-subtle); }\n.impactTitle { font-family: var(--font-display); font-size: var(--text-2xs-size, 11px); letter-spacing: var(--tracking-label, 0.06em); text-transform: uppercase; color: var(--text-tertiary); margin-bottom: var(--space-2); }\n.impactSummary { font-size: var(--text-sm-size); line-height: var(--text-base-line); color: var(--text-primary); max-width: 68ch; }\n.seatList { display: flex; flex-direction: column; margin-top: var(--space-3); }\n.seatRow { display: grid; grid-template-columns: minmax(64px, auto) minmax(0, 1fr); gap: var(--space-1) var(--space-3); align-items: baseline; padding: var(--space-2) 0; border-bottom: 1px solid var(--border-subtle); }\n.seatEngine {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size, 11px);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n color: var(--text-secondary);\n /* A 2px engine marker, per the design language: identity, never state. */\n border-left: 2px solid var(--engine-color, var(--border-strong));\n padding-left: var(--space-2);\n white-space: nowrap;\n}\n.seatEngine[data-engine=\"claude\"] { --engine-color: var(--engine-claude); }\n.seatEngine[data-engine=\"codex\"] { --engine-color: var(--engine-codex); }\n.seatEngine[data-engine=\"grok\"] { --engine-color: var(--engine-grok); }\n.seatEngine[data-engine=\"local\"] { --engine-color: var(--engine-local); }\n.seatEngine[data-engine=\"devin\"] { --engine-color: var(--engine-devin); }\n.seatLabel { font-size: var(--text-sm-size); line-height: var(--text-sm-line); color: var(--text-primary); min-width: 0; overflow-wrap: anywhere; }\n.seatRefusal { grid-column: 2; font-family: var(--font-mono); font-size: var(--text-2xs-size, 11px); line-height: var(--text-xs-line); color: var(--text-tertiary); overflow-wrap: anywhere; }\n\n/* --- fleet -------------------------------------------------------------- */\n.pressure { display: flex; flex-direction: column; gap: var(--space-1); }\n.pressureHead { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); }\n.pressureHeadline { font-family: var(--font-display); font-size: var(--text-lg-size); line-height: var(--text-lg-line); font-weight: var(--font-weight-semibold); letter-spacing: var(--tracking-display, -0.02em); color: var(--text-primary); }\n.pressure[data-state=\"queued\"] .pressureHeadline { color: var(--status-warning-fg); }\n.pressure[data-state=\"unknown\"] .pressureHeadline { color: var(--status-unknown-fg); }\n.pressureDetail { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-secondary); max-width: 68ch; }\n\n.fleetMeters { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); align-items: end; gap: var(--space-3) var(--space-5); margin: var(--space-4) 0; }\n.elapsedQualifier { color: var(--text-tertiary); font-family: var(--font-ui); font-style: italic; }\n.noteList { display: flex; flex-direction: column; gap: var(--space-1); margin-top: var(--space-3); list-style: none; }\n\n/* Standing of one enrolled repo in the autonomous lane: its sections and its\n rank. Ordering only — neither of these enrols anything. */\n.repoStanding {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--space-1);\n align-items: center;\n}\n\n.repoPriority,\n.repoSection,\n.repoOutsideFocus {\n padding: 0 var(--space-1);\n border-radius: var(--radius-sm);\n border: 1px solid var(--border-subtle);\n font-size: var(--text-2xs, 0.6875rem);\n line-height: 1.6;\n color: var(--text-muted);\n white-space: nowrap;\n}\n\n.repoPriority { border-color: var(--accent); color: var(--text-default); }\n.repoOutsideFocus { font-style: italic; }\n","/**\n * routes/verse/autonomy/ActivityPanel.tsx — \"what did it do while I was\n * asleep\": recent ticks, the dispatches inside them, and the append-only audit\n * trail as a dense filterable table.\n *\n * Readability at 200 rows is a requirement, not an aspiration, so: one scroll\n * container with a sticky header rather than pagination, monospace in the\n * identifier columns so they align, wall-clock time (an audit read at 07:00 is\n * about *when*, and \"14h ago\" is useless for that) with the relative age as a\n * tooltip, and result carried by a glyph as well as a colour.\n *\n * The audit filters are applied deliberately, not per keystroke: the action\n * filter is server-side (`?action=`), so committing on Enter/blur keeps one\n * cache entry per real filter instead of one per character typed.\n */\nimport { useMemo, useState } from 'react';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { Select } from '../../../components/primitives/Select.js';\nimport { SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport { useQuery, useRefresh } from '../../../data/hooks.js';\nimport { verseAuditQuery, VERSE_AUDIT_DEFAULT_LIMIT } from './control-queries.js';\nimport type { AuditEntry, DaemonDispatchTrace, VerseControlSnapshot } from './control-types.js';\n// formatStamp, not formatClock: these three tables span days (the audit trail\n// defaults to 200 rows and offers 500), so a bare \"03:12:44\" cannot tell last\n// night from last week. It prints time alone for today and prefixes the date\n// otherwise.\n// The relative age rides in the tooltip as a phrase (\"7m ago\"), not a bare \"7m\".\nimport {\n describeTickOutcome,\n formatCount,\n formatRelative,\n formatStamp,\n formatUsd,\n repoDisplayName,\n tidyProse,\n UNKNOWN,\n} from './format.js';\nimport styles from './autonomy.module.css';\n\nconst RECENT_TICKS = 20;\nconst RECENT_DISPATCHES = 40;\n\ntype ResultFilter = '' | AuditEntry['result'];\n\ninterface DispatchRow extends DaemonDispatchTrace {\n tickTs: string;\n}\n\nexport function ActivityPanel({ snapshot }: { snapshot: VerseControlSnapshot }) {\n const ticks = snapshot.daemon?.ticks ?? null;\n\n const recentTicks = useMemo(() => (ticks ? [...ticks].slice(-RECENT_TICKS).reverse() : []), [ticks]);\n\n const dispatches = useMemo<DispatchRow[]>(() => {\n if (!ticks) return [];\n const rows: DispatchRow[] = [];\n for (let i = ticks.length - 1; i >= 0 && rows.length < RECENT_DISPATCHES; i -= 1) {\n const tick = ticks[i];\n if (!tick?.dispatches) continue;\n for (let j = tick.dispatches.length - 1; j >= 0 && rows.length < RECENT_DISPATCHES; j -= 1) {\n rows.push({ ...tick.dispatches[j]!, tickTs: tick.ts });\n }\n }\n return rows;\n }, [ticks]);\n\n return (\n <section className={styles.panel} aria-label=\"Activity\">\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>Recent ticks</h3>\n <p className={styles.panelNote}>Newest first · last {RECENT_TICKS}</p>\n </div>\n {ticks === null ? (\n <p className={styles.empty}>The daemon ledger is not readable right now, so tick history is unknown.</p>\n ) : recentTicks.length === 0 ? (\n <p className={styles.empty}>No ticks have been recorded yet. Start the loop, or run one tick, to produce the first.</p>\n ) : (\n <div className={styles.tableScroll}>\n <table className={styles.table}>\n <thead>\n <tr>\n <th scope=\"col\">Time</th>\n <th scope=\"col\">Outcome</th>\n <th scope=\"col\">Items</th>\n <th scope=\"col\">Proposals</th>\n <th scope=\"col\">Dispatched</th>\n <th scope=\"col\">Spend</th>\n <th scope=\"col\">Direction</th>\n </tr>\n </thead>\n <tbody>\n {recentTicks.map((tick) => {\n const outcome = describeTickOutcome(tick.reason);\n return (\n <tr key={`${tick.ts}-${tick.reason}`}>\n <td className={styles.cellTime} title={formatRelative(tick.ts)}>\n {formatStamp(tick.ts)}\n </td>\n <td className={styles.cellSummary} data-tone={outcome.tone}>\n {outcome.label}\n {tick.dryRun ? ' (dry run)' : ''}\n </td>\n <td className={styles.cellTime}>{formatCount(tick.itemsConsidered)}</td>\n <td className={styles.cellTime}>{formatCount(tick.proposalsCreated)}</td>\n <td className={styles.cellTime}>{tick.dispatches ? tick.dispatches.length : UNKNOWN}</td>\n <td className={styles.cellTime}>{formatUsd(tick.spentUsd)}</td>\n <td className={styles.cellSummary}>{tick.directionMode ?? '—'}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n\n <div className={`${styles.panelHead} ${styles.panelHeadSpaced}`}>\n <h3 className={styles.panelTitle}>Recent dispatches</h3>\n <p className={styles.panelNote}>Newest first · last {RECENT_DISPATCHES}</p>\n </div>\n {dispatches.length === 0 ? (\n <p className={styles.empty}>\n No dispatches in the recorded ticks. Run one tick from Controls to see what it would pick up.\n </p>\n ) : (\n <div className={styles.tableScroll}>\n <table className={styles.table}>\n <thead>\n <tr>\n <th scope=\"col\">Time</th>\n <th scope=\"col\">Item</th>\n <th scope=\"col\">Repo</th>\n <th scope=\"col\">Engine</th>\n <th scope=\"col\">Outcome</th>\n <th scope=\"col\">Spend</th>\n </tr>\n </thead>\n <tbody>\n {dispatches.map((row, i) => (\n <tr key={`${row.tickTs}-${row.itemId}-${i}`}>\n <td className={styles.cellTime} title={formatRelative(row.tickTs)}>\n {formatStamp(row.tickTs)}\n </td>\n <td className={styles.cellSummary} title={row.title}>\n {row.title}\n </td>\n <td className={styles.cellRepo} title={row.repo}>\n {row.repo ? repoDisplayName(row.repo) : UNKNOWN}\n </td>\n <td className={styles.cellAction}>{row.backend ?? 'not routed'}</td>\n <td className={styles.cellSummary}>\n {row.dispatched ? 'dispatched' : `skipped — ${tidyProse(row.reason)}`}\n </td>\n <td className={styles.cellTime}>{formatUsd(row.spentUsd)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n <AuditTrail />\n </section>\n );\n}\n\nexport function AuditTrail() {\n const [actionDraft, setActionDraft] = useState('');\n const [action, setAction] = useState('');\n const [result, setResult] = useState<ResultFilter>('');\n const [limit, setLimit] = useState(VERSE_AUDIT_DEFAULT_LIMIT);\n\n const def = useMemo(\n () => verseAuditQuery({ limit, action: action || undefined, result: result || undefined }),\n [limit, action, result],\n );\n const query = useQuery(def);\n const refetch = useRefresh(def);\n\n const entries = query.data?.entries ?? [];\n\n return (\n <>\n <div className={`${styles.panelHead} ${styles.panelHeadSpaced}`}>\n <h3 className={styles.panelTitle}>Audit trail</h3>\n <div className={styles.panelActions}>\n {query.status === 'refreshing' ? <RefreshIndicator /> : null}\n <button type=\"button\" className={styles.button} onClick={refetch}>\n Refresh\n </button>\n </div>\n </div>\n\n <div className={styles.filters}>\n <label className={styles.filterField}>\n <span className={styles.filterLabel}>Action</span>\n <input\n type=\"search\"\n value={actionDraft}\n placeholder=\"e.g. enroll.add\"\n onChange={(e) => setActionDraft(e.target.value)}\n onBlur={() => setAction(actionDraft.trim())}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n setAction(actionDraft.trim());\n }\n }}\n />\n </label>\n {/* The Select primitive, not a raw <select>: it carries the\n appearance: none reset, our own chevron, the --density-row height\n and the disabled styling. DESIGN-V2 §7 — \"Nothing is a default\n browser control\" — and an unreset <select> loses its border-radius\n to the native bezel on macOS Safari and grows a second OS chevron\n on Chrome/Windows. */}\n <Select\n className={styles.filterSelect}\n label=\"Result\"\n value={result}\n onChange={(e) => setResult(e.target.value as ResultFilter)}\n >\n <option value=\"\">Any result</option>\n <option value=\"ok\">ok</option>\n <option value=\"refused\">refused</option>\n <option value=\"error\">error</option>\n </Select>\n <Select\n className={styles.filterSelect}\n label=\"Rows\"\n value={limit}\n onChange={(e) => setLimit(Number(e.target.value))}\n >\n <option value={50}>50</option>\n <option value={200}>200</option>\n <option value={500}>500</option>\n </Select>\n </div>\n\n {query.status === 'loading' ? (\n <div className={styles.skeletons}>\n <SkeletonRow />\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : query.status === 'error' ? (\n <p className={styles.error} role=\"alert\">\n {query.error?.message ?? 'Could not read the audit trail.'}\n </p>\n ) : entries.length === 0 ? (\n <p className={styles.empty}>\n {action || result\n ? 'No audit entries match this filter. Clear the Action or Result filter to see every entry.'\n : 'No audit entries recorded yet. Every autonomous or sandbox action appends one here, and none are ever deleted.'}\n </p>\n ) : (\n <>\n <p className={styles.panelNote} aria-live=\"polite\">\n {entries.length} {entries.length === 1 ? 'entry' : 'entries'} · newest first\n {query.data?.truncated ? ' · capped by the server, narrow the filter to see more' : ''}\n </p>\n <div className={styles.tableScroll}>\n <table className={styles.table}>\n <thead>\n <tr>\n <th scope=\"col\">Time</th>\n <th scope=\"col\">Action</th>\n <th scope=\"col\">Result</th>\n <th scope=\"col\">Repo</th>\n <th scope=\"col\">Summary</th>\n </tr>\n </thead>\n <tbody>\n {entries.map((entry, i) => (\n <tr key={`${entry.ts}-${entry.action}-${i}`}>\n <td className={styles.cellTime} title={formatRelative(entry.ts)}>\n {formatStamp(entry.ts)}\n </td>\n <td className={styles.cellAction}>{entry.action}</td>\n <td>\n <span className={styles.resultTag} data-result={entry.result}>\n {entry.result}\n </span>\n </td>\n <td className={styles.cellRepo} title={entry.repo ?? undefined}>\n {entry.repo ? repoDisplayName(entry.repo) : UNKNOWN}\n </td>\n <td className={styles.cellSummary}>{tidyProse(entry.summary)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n )}\n </>\n );\n}\n","/**\n * routes/verse/autonomy/caps-spec.ts — one table describing every editable\n * cap, mirroring the server-side ranges in docs/VERSE-CONTRACT-V2.md so the\n * operator gets the error BEFORE the round trip, not after it.\n *\n * The table is the single source of truth for: the label, the unit shown next\n * to the number, the accepted range, whether the value must be whole, the\n * display transform (tick interval is edited in minutes, stored in ms), the\n * one-line explanation under the control, and how a committed value turns\n * into a `POST /api/verse/caps` partial body. Adding a cap is one entry here\n * and nothing else.\n *\n * If these ranges ever disagree with the server the server still wins — this\n * is a courtesy gate, never an authority. That is why `applyCapPatch` builds\n * a PARTIAL body and the panel re-reads the server's `applied` snapshot.\n */\nimport { VERSE_CAPS_BOUNDS, type VerseCaps, type VerseCapsPatch } from './control-types.js';\n\nexport type CapKey =\n | 'dailyBudgetUsd'\n | 'perTickItems'\n | 'parallel'\n | 'intervalMs'\n | 'maxConcurrent'\n | 'concurrency.local'\n | 'concurrency.cloud'\n | 'concurrency.total'\n | 'subscriptionMaxPercent';\n\nexport interface CapFieldSpec {\n key: CapKey;\n label: string;\n /** Shown after the input; also read aloud as part of the accessible name. */\n unit: string;\n /** Inclusive bounds, expressed in DISPLAY units. */\n min: number;\n max: number;\n /** Display values must be whole numbers (tick interval is the exception). */\n integer: boolean;\n step: number;\n help: string;\n /** Stored value -> what the operator types. */\n toDisplay: (stored: number) => number;\n /** What the operator typed -> what the server stores. */\n fromDisplay: (display: number) => number;\n}\n\nconst identity = (n: number) => n;\n\n/** Tick interval is stored in ms and edited in minutes — 30s..24h. */\nconst MS_PER_MINUTE = 60_000;\n\nexport const CAP_FIELDS: readonly CapFieldSpec[] = [\n {\n key: 'dailyBudgetUsd',\n label: 'Daily budget',\n unit: 'USD / day',\n min: 0,\n max: VERSE_CAPS_BOUNDS.dailyBudgetUsd.max,\n integer: false,\n step: 1,\n help: 'Hard ceiling on what the loop may spend in a calendar day. 0 stops the loop.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'perTickItems',\n label: 'Items per tick',\n unit: 'items',\n min: 1,\n max: VERSE_CAPS_BOUNDS.perTickItems.max,\n integer: true,\n step: 1,\n help: 'Requested items per tick. Queue, journal, account, and resource admission still apply.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'parallel',\n label: 'Parallel swarms',\n unit: 'swarms',\n min: 1,\n max: VERSE_CAPS_BOUNDS.parallel.max,\n integer: true,\n step: 1,\n help: 'Requested simultaneous swarms in batch mode. Available work and resource admission still apply.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'intervalMs',\n label: 'Tick interval',\n unit: 'minutes',\n min: 0.5,\n max: 1440,\n integer: false,\n step: 0.5,\n help: 'Gap between ticks in loop mode. 30 seconds minimum, 24 hours maximum.',\n toDisplay: (stored) => Math.round((stored / MS_PER_MINUTE) * 100) / 100,\n fromDisplay: (display) => Math.round(display * MS_PER_MINUTE),\n },\n {\n key: 'maxConcurrent',\n label: 'Max concurrent',\n unit: 'dispatches',\n min: 1,\n max: VERSE_CAPS_BOUNDS.maxConcurrent.max,\n integer: true,\n step: 1,\n help: 'Absolute ceiling on in-flight dispatches in continuous mode. Takes precedence over the per-tier totals.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'concurrency.local',\n label: 'Local tier',\n unit: 'slots',\n min: 1,\n max: VERSE_CAPS_BOUNDS.concurrency.max,\n integer: true,\n step: 1,\n help: 'On-device engines. GPU/RAM bound — keep this low.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'concurrency.cloud',\n label: 'Cloud tier',\n unit: 'slots',\n min: 1,\n max: VERSE_CAPS_BOUNDS.concurrency.max,\n integer: true,\n step: 1,\n help: 'Subscription cloud agents. I/O bound — many can run at once.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'concurrency.total',\n label: 'All tiers',\n unit: 'slots',\n min: 1,\n max: VERSE_CAPS_BOUNDS.concurrency.max,\n integer: true,\n step: 1,\n help: 'Hard cap across every tier combined.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n {\n key: 'subscriptionMaxPercent',\n label: 'Subscription ceiling',\n unit: '% of window',\n min: 1,\n max: 100,\n integer: true,\n step: 1,\n help: 'How much of a flat-fee provider window the fleet may consume before it backs off.',\n toDisplay: identity,\n fromDisplay: identity,\n },\n] as const;\n\nexport function capFieldByKey(key: CapKey): CapFieldSpec {\n const found = CAP_FIELDS.find((f) => f.key === key);\n /* istanbul ignore next -- CapKey is closed; this is a type-level guarantee. */\n if (!found) throw new Error(`unknown cap field: ${key}`);\n return found;\n}\n\n/** Current stored value for a cap, or null when the server did not send it. */\nexport function readCap(caps: VerseCaps | undefined, key: CapKey): number | null {\n if (!caps) return null;\n const raw =\n key === 'concurrency.local'\n ? caps.concurrency?.local\n : key === 'concurrency.cloud'\n ? caps.concurrency?.cloud\n : key === 'concurrency.total'\n ? caps.concurrency?.total\n : (caps as unknown as Record<string, unknown>)[key];\n return typeof raw === 'number' && Number.isFinite(raw) ? raw : null;\n}\n\nexport type CapValidation =\n | { ok: true; stored: number; display: number }\n | { ok: false; error: string };\n\n/**\n * A number with its unit, as a sentence writes it: \"50 items\", but \"100% of\n * window\" — a percent sign hugs its number (\"100 % of window\" read as a typo).\n */\nfunction withUnit(value: number, unit: string): string {\n return unit.startsWith('%') ? `${value}${unit}` : `${value} ${unit}`;\n}\n\n/**\n * Validate what the operator typed against the spec's DISPLAY range, then\n * convert to the stored unit. Rejects blanks, non-numbers, fractions on\n * whole-number caps, and anything outside the range the server enforces.\n */\nexport function validateCap(spec: CapFieldSpec, raw: string): CapValidation {\n const trimmed = raw.trim();\n if (trimmed === '') return { ok: false, error: `${spec.label} cannot be blank.` };\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) return { ok: false, error: `${spec.label} must be a number.` };\n if (spec.integer && !Number.isInteger(parsed)) {\n // \"a whole number of % of window\" is not a phrase; a percentage cap says so plainly.\n const whole = spec.unit.startsWith('%') ? 'a whole percentage' : `a whole number of ${spec.unit}`;\n return { ok: false, error: `${spec.label} must be ${whole}.` };\n }\n if (spec.integer && !Number.isSafeInteger(parsed)) {\n return { ok: false, error: `${spec.label} must be a safe whole number.` };\n }\n if (parsed < spec.min || parsed > spec.max) {\n return { ok: false, error: `${spec.label} must be between ${spec.min} and ${withUnit(spec.max, spec.unit)}.` };\n }\n return { ok: true, stored: spec.fromDisplay(parsed), display: parsed };\n}\n\n/** Build the smallest `POST /api/verse/caps` body that applies one cap. */\nexport function capPatch(key: CapKey, stored: number): VerseCapsPatch {\n switch (key) {\n case 'concurrency.local':\n return { concurrency: { local: stored } };\n case 'concurrency.cloud':\n return { concurrency: { cloud: stored } };\n case 'concurrency.total':\n return { concurrency: { total: stored } };\n default:\n return { [key]: stored } as VerseCapsPatch;\n }\n}\n\n/**\n * Inclusive display range for a per-engine foundry limit `max`. Read straight\n * off the server's own bound so the courtesy gate cannot drift from the 400\n * (`bounded(entry['max'], …, VERSE_CAPS_BOUNDS.foundryLimitMax)` in\n * control-api.ts). It is not a `CAP_FIELDS` entry, so the drift test that\n * iterates that table never reached it — hence the explicit export.\n */\nexport const FOUNDRY_LIMIT_MAX_RANGE = VERSE_CAPS_BOUNDS.foundryLimitMax;\n\n/** Per-engine foundry limit `max` — bounded exactly as the server bounds it. */\nexport function validateFoundryMax(raw: string, engine: string): CapValidation {\n const trimmed = raw.trim();\n if (trimmed === '') return { ok: false, error: `${engine} limit cannot be blank.` };\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) return { ok: false, error: `${engine} limit must be a number.` };\n if (!Number.isInteger(parsed)) return { ok: false, error: `${engine} limit must be a whole number of dispatches.` };\n if (parsed < FOUNDRY_LIMIT_MAX_RANGE.min) return { ok: false, error: `${engine} limit cannot be negative.` };\n if (parsed > FOUNDRY_LIMIT_MAX_RANGE.max) {\n return {\n ok: false,\n error: `${engine} limit must be at most ${FOUNDRY_LIMIT_MAX_RANGE.max} dispatches.`,\n };\n }\n return { ok: true, stored: parsed, display: parsed };\n}\n","import type { VerseCaps } from './control-types.js';\n\nexport const GOAL_PREFERENCE_FIELDS = [\n { key: 'maxOpenGoals', label: 'Active goals', help: 'Goals Leader can keep open at once.', defaultValue: 4 },\n { key: 'maxNewGoalsPerDay', label: 'New goals per day', help: 'New goals Leader can create each day.', defaultValue: 3 },\n { key: 'maxGoalProposalsPerMemo', label: 'New goal proposals', help: 'New goals Leader can propose in each plan or check-in.', defaultValue: 3 },\n { key: 'maxGoalsPerConductorCycle', label: 'Goals per planning pass', help: 'Goals Leader can schedule in one planning pass.', defaultValue: 3 },\n] as const;\n\nexport type GoalPreferenceKey = (typeof GOAL_PREFERENCE_FIELDS)[number]['key'];\nexport type GoalPreferences = NonNullable<VerseCaps['goalPreferences']>;\nexport type GoalPreferenceValues = Pick<GoalPreferences, GoalPreferenceKey>;\nexport type GoalPreferenceDraft = Record<GoalPreferenceKey, { text: string; unlimited: boolean }>;\n\nexport function readGoalFocus(mode: unknown, threshold: unknown): { mode: boolean; threshold: number } | null {\n return typeof mode === 'boolean' && typeof threshold === 'number' && Number.isSafeInteger(threshold) && threshold > 0\n ? { mode, threshold } : null;\n}\n\nfunction own(value: unknown, key: string): unknown {\n if (!value || typeof value !== 'object') return undefined;\n try { return Array.isArray(value) ? undefined : Object.getOwnPropertyDescriptor(value, key)?.value; } catch { return undefined; }\n}\n\nexport type GoalPreferenceRead =\n | { state: 'ready'; values: GoalPreferenceValues; defaulted: GoalPreferenceKey[] }\n | { state: 'unsupported' | 'invalid' | 'unavailable' };\n\n/** Absence is an older server, never an explicit no-limit choice. */\nexport function readGoalPreferences(raw: unknown): GoalPreferenceRead {\n if (raw === undefined) return { state: 'unsupported' };\n const source = own(raw, 'sourceState');\n if (source !== 'ready') return { state: source === 'unavailable' ? 'unavailable' : 'invalid' };\n const values = {} as GoalPreferenceValues;\n for (const field of GOAL_PREFERENCE_FIELDS) {\n const value = own(raw, field.key);\n if (value !== null && (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0)) return { state: 'invalid' };\n values[field.key] = value as number | null;\n }\n const defaults = own(raw, 'defaulted');\n const defaulted: GoalPreferenceKey[] = [];\n // Bound malformed arrays and avoid invoking getters on projection metadata.\n try {\n if (Array.isArray(defaults) && defaults.length <= GOAL_PREFERENCE_FIELDS.length) {\n for (let i = 0; i < defaults.length; i++) {\n const key: unknown = Object.getOwnPropertyDescriptor(defaults, String(i))?.value;\n const field = GOAL_PREFERENCE_FIELDS.find((entry) => entry.key === key);\n if (field && values[field.key] !== null && !defaulted.includes(field.key)) defaulted.push(field.key);\n }\n }\n } catch { /* Missing default metadata never changes an explicit limit. */ }\n return { state: 'ready', values, defaulted };\n}\n\nexport function goalPreferenceDraft(values: GoalPreferenceValues): GoalPreferenceDraft {\n return Object.fromEntries(GOAL_PREFERENCE_FIELDS.map((field) => [field.key, {\n text: String(values[field.key] ?? field.defaultValue), unlimited: values[field.key] === null,\n }])) as GoalPreferenceDraft;\n}\n\nexport function validateGoalPreference(text: string, unlimited: boolean): { ok: true; value: number | null } | { ok: false; error: string } {\n if (unlimited) return { ok: true, value: null };\n const trimmed = text.trim();\n const value = Number(trimmed);\n if (!/^\\d+$/.test(trimmed) || !Number.isSafeInteger(value) || value <= 0) return { ok: false, error: 'Enter a positive whole number, or choose No preference limit.' };\n return { ok: true, value };\n}\n\n/** Preserve omitted choices: a no-limit value is sent only after an explicit edit. */\nexport function goalPreferencePatch(draft: GoalPreferenceDraft, saved: GoalPreferenceValues): {\n patch: Partial<GoalPreferenceValues>; errors: Partial<Record<GoalPreferenceKey, string>>;\n} {\n const patch: Partial<GoalPreferenceValues> = {};\n const errors: Partial<Record<GoalPreferenceKey, string>> = {};\n for (const field of GOAL_PREFERENCE_FIELDS) {\n const result = validateGoalPreference(draft[field.key].text, draft[field.key].unlimited);\n if (!result.ok) errors[field.key] = result.error;\n else if (result.value !== saved[field.key]) patch[field.key] = result.value;\n }\n return { patch, errors };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { IconChevronRight } from '../../../components/primitives/icons.js';\nimport { updateVerseCaps } from './control-queries.js';\nimport {\n GOAL_PREFERENCE_FIELDS, goalPreferenceDraft, goalPreferencePatch, readGoalFocus, readGoalPreferences, validateGoalPreference,\n type GoalPreferenceDraft, type GoalPreferenceKey, type GoalPreferenceRead, type GoalPreferences,\n} from './goal-preferences-spec.js';\nimport { describeControlError, type GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\nexport function GoalPreferencesPanel({ preferences, focusMode, focusThreshold, focusDefaulted = false, guard, dispatchEnabled }: {\n preferences: GoalPreferences | undefined; guard: GuardedAction; dispatchEnabled: boolean;\n focusMode?: boolean; focusThreshold?: number; focusDefaulted?: boolean;\n}) {\n const read = readGoalPreferences(preferences);\n return (\n <section className={styles.panel} aria-label=\"Goal preferences\">\n <details className={styles.goalDisclosure}>\n <summary className={styles.goalSummary}>\n <span className={styles.goalSummaryLabel}><IconChevronRight size={14} className={styles.goalChevron} /><span className={styles.panelTitle}>Goal preferences</span></span>\n <span className={styles.panelNote}>{read.state === 'ready' ? 'Advanced' : 'Unavailable'}</span>\n </summary>\n <p className={styles.goalNote}>Guide how much work Leader proposes and keeps open. Available agent slots, provider limits and your signed permissions still determine what runs.</p>\n {read.state === 'ready' ? <GoalPreferencesForm read={read} serverValue={preferences!}\n focusMode={focusMode} focusThreshold={focusThreshold} focusDefaulted={focusDefaulted} guard={guard} dispatchEnabled={dispatchEnabled} /> : (\n <p className={styles.empty} role=\"status\">{read.state === 'unsupported'\n ? 'Goal preferences are unavailable from this server. Update Hub to view and change them.'\n : read.state === 'unavailable' ? 'Saved goal preferences could not be read. Refresh the connection before changing them.'\n : 'Saved goal preferences need attention. Correct the configuration and refresh before changing them here.'}</p>\n )}\n </details>\n </section>\n );\n}\n\nfunction GoalPreferencesForm({ read, serverValue, focusMode, focusThreshold, focusDefaulted, guard, dispatchEnabled }: {\n read: Extract<GoalPreferenceRead, { state: 'ready' }>; guard: GuardedAction; dispatchEnabled: boolean;\n serverValue: GoalPreferences; focusMode: boolean | undefined; focusThreshold: number | undefined; focusDefaulted: boolean;\n}) {\n const [saved, setSaved] = useState(read.values);\n const [defaulted, setDefaulted] = useState(read.defaulted);\n const savedRef = useRef(saved);\n const [draft, setDraft] = useState(() => goalPreferenceDraft(read.values));\n const [errors, setErrors] = useState<Partial<Record<GoalPreferenceKey, string>>>({});\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const focus = readGoalFocus(focusMode, focusThreshold);\n const [savedFocus, setSavedFocus] = useState(focus);\n const savedFocusRef = useRef(savedFocus);\n const [draftFocus, setDraftFocus] = useState(focus?.mode ?? null);\n const focusEdited = useRef(false);\n const [defaultFocus, setDefaultFocus] = useState(focusDefaulted);\n const running = useRef(false);\n const mounted = useRef(true);\n useEffect(() => { mounted.current = true; return () => { mounted.current = false; }; }, []);\n const signature = JSON.stringify({ values: read.values, defaulted: read.defaulted, focus, focusDefaulted });\n\n useEffect(() => {\n const next = read.values;\n const before = savedRef.current;\n setDefaulted(read.defaulted);\n setDefaultFocus(focusDefaulted);\n const beforeFocus = savedFocusRef.current;\n if (JSON.stringify(beforeFocus) !== JSON.stringify(focus)) {\n if (!focusEdited.current) setDraftFocus(focus?.mode ?? null);\n savedFocusRef.current = focus;\n setSavedFocus(focus);\n setNotice(null);\n }\n if (JSON.stringify(before) === JSON.stringify(next)) return;\n // Refresh untouched choices without discarding an operator's unsaved edit.\n setDraft((current) => {\n const fresh = goalPreferenceDraft(next);\n const merged = { ...current };\n for (const field of GOAL_PREFERENCE_FIELDS) {\n const value = validateGoalPreference(current[field.key].text, current[field.key].unlimited);\n if (value.ok && value.value === before[field.key]) merged[field.key] = fresh[field.key];\n }\n return merged;\n });\n savedRef.current = next;\n setSaved(next);\n setNotice(null);\n // Depend on values, not a newly allocated projection on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signature, serverValue]);\n\n const result = goalPreferencePatch(draft, saved);\n const focusChanged = focusEdited.current && focus !== null && draftFocus !== null && draftFocus !== savedFocus?.mode;\n const changed = Object.keys(result.patch).length > 0 || Object.keys(result.errors).length > 0 || focusChanged;\n const locked = !dispatchEnabled || guard.readOnly || guard.busy || guard.tokenOpen || saving;\n\n function change(key: GoalPreferenceKey, update: Partial<GoalPreferenceDraft[GoalPreferenceKey]>) {\n setDraft((current) => ({ ...current, [key]: { ...current[key], ...update } }));\n setErrors((current) => ({ ...current, [key]: undefined }));\n setError(null);\n setNotice(null);\n }\n\n function save() {\n if (locked || running.current) return;\n const checked = goalPreferencePatch(draft, saved);\n setErrors(checked.errors);\n setError(null);\n setNotice(null);\n if (Object.keys(checked.errors).length || (!Object.keys(checked.patch).length && !focusChanged)) return;\n const patch = {\n ...(Object.keys(checked.patch).length ? { goalPreferences: checked.patch } : {}),\n ...(focusChanged && draftFocus !== null ? { goalFocusMode: draftFocus } : {}),\n };\n guard.request(async () => {\n if (!mounted.current) throw new Error('Review goal preferences again before saving.');\n if (running.current) throw new Error('A goal preferences save is already in progress.');\n running.current = true;\n setSaving(true);\n try {\n const response = await updateVerseCaps(patch);\n const confirmed = readGoalPreferences(response?.caps?.goalPreferences);\n if (confirmed.state !== 'ready') throw new Error('The server did not confirm saved goal preferences. Refresh before trying again.');\n if ((Object.keys(checked.patch) as GoalPreferenceKey[]).some((key) => confirmed.values[key] !== checked.patch[key])) {\n throw new Error('The server returned different goal preferences. Refresh and review them before trying again.');\n }\n const confirmedFocus = readGoalFocus(response.caps.goalFocusMode, response.caps.goalFocusActiveThreshold);\n if (focusChanged && (!confirmedFocus || confirmedFocus.mode !== draftFocus)) throw new Error('The server did not confirm the finishing preference. Refresh before trying again.');\n return { confirmed, confirmedFocus, defaultFocus: Array.isArray(response.caps.defaulted)\n && response.caps.defaulted.length <= 32 && response.caps.defaulted.includes('goalFocusMode') };\n } catch (err) {\n if (mounted.current) setError(describeControlError(err));\n throw err;\n } finally {\n running.current = false;\n if (mounted.current) setSaving(false);\n }\n }, 'Saving goal preferences requires the dispatch token.', ({ confirmed, confirmedFocus, defaultFocus: confirmedDefaultFocus }) => {\n if (!mounted.current) return;\n savedRef.current = confirmed.values;\n setSaved(confirmed.values);\n setDefaulted(confirmed.defaulted);\n setDraft(goalPreferenceDraft(confirmed.values));\n savedFocusRef.current = confirmedFocus;\n setSavedFocus(confirmedFocus);\n setDraftFocus(confirmedFocus?.mode ?? null);\n focusEdited.current = false;\n setDefaultFocus(confirmedDefaultFocus);\n setErrors({});\n setNotice('Goal preferences saved. Leader uses them on its next planning pass.');\n });\n }\n\n return (\n <form onSubmit={(event) => { event.preventDefault(); save(); }} aria-busy={saving || undefined}>\n <fieldset className={styles.goalFields} disabled={locked}>\n <legend className={styles.srOnly}>Leader goal preferences</legend>\n <div className={styles.capGrid}>\n {GOAL_PREFERENCE_FIELDS.map((field) => {\n const id = `goal-preference-${field.key}`;\n const choice = draft[field.key];\n return <div key={field.key} className={styles.cap}>\n <label className={styles.goalLabel} htmlFor={id}>{field.label}</label>\n <input id={id} className={`${styles.capInput} ${errors[field.key] ? styles.capInputInvalid : ''}`}\n type=\"text\" inputMode=\"numeric\" autoComplete=\"off\" value={choice.unlimited ? '' : choice.text}\n placeholder={choice.unlimited ? 'No preference limit' : undefined} disabled={choice.unlimited}\n aria-invalid={errors[field.key] ? true : undefined}\n aria-describedby={`${id}-help${errors[field.key] ? ` ${id}-error` : ''}`}\n onChange={(event) => change(field.key, { text: event.target.value })} />\n <label className={styles.goalChoice}>\n <input type=\"checkbox\" checked={choice.unlimited} aria-label={`No preference limit for ${field.label.toLowerCase()}`}\n onChange={(event) => change(field.key, { unlimited: event.target.checked })} />\n <span>No preference limit</span>\n </label>\n <span className={styles.capHelp} id={`${id}-help`}>{field.help}{defaulted.includes(field.key) ? ` Current default: ${saved[field.key]}.` : ''}</span>\n {errors[field.key] ? <span className={styles.capError} id={`${id}-error`} role=\"alert\">{errors[field.key]}</span> : null}\n </div>;\n })}\n </div>\n <div className={styles.goalFocus}>\n {focus && savedFocus ? <>\n <label className={styles.goalChoice}>\n <input type=\"checkbox\" checked={draftFocus === true} aria-describedby=\"goal-focus-help\"\n onChange={(event) => { focusEdited.current = event.target.checked !== savedFocus.mode; setDraftFocus(event.target.checked); setError(null); setNotice(null); }} />\n <span>Prefer finishing current work before expanding</span>\n </label>\n <p className={styles.capHelp} id=\"goal-focus-help\">At {savedFocus.threshold} or more active goals, defer new planning and invention. Clear this preference to plan new work alongside current goals.{defaultFocus ? ' On by default.' : ''} This is separate from the active-goal limit above.</p>\n </> : <p className={styles.capHelp}>The finishing preference is unavailable from this server. A separate planning preference may still defer new goals.</p>}\n </div>\n <div className={styles.goalActions}>\n <Button type=\"submit\" busy={saving} disabled={!changed}>Save goal preferences</Button>\n {changed ? <Button variant=\"ghost\" onClick={() => {\n setDraft(goalPreferenceDraft(saved)); setDraftFocus(savedFocus?.mode ?? null); focusEdited.current = false; setErrors({}); setError(null); setNotice(null);\n }}>Discard changes</Button> : null}\n </div>\n </fieldset>\n {!dispatchEnabled || guard.readOnly ? <p className={styles.capHelp}>This connection is read-only. Goal preferences cannot be changed here.</p> : null}\n {error ? <p className={styles.capError} role=\"alert\">{error}</p> : null}\n {saving ? <p className={styles.capHelp} role=\"status\">Saving goal preferences…</p> : null}\n {notice ? <p className={styles.capApplied} role=\"status\">{notice}</p> : null}\n </form>\n );\n}\n","import type { VerseCaps } from './control-types.js';\nimport { validateGoalPreference } from './goal-preferences-spec.js';\n\nexport const LEADER_PREFERENCE_FIELDS = [\n { key: 'maxFullRunsPerDay', label: 'Full plans per day', help: 'Daily full planning runs. These also count toward total runs.' },\n { key: 'maxTotalRunsPerDay', label: 'Total runs per day', help: 'Daily planning runs and check-ins combined.' },\n { key: 'maxGrokLanes', label: 'Parallel Grok lanes', help: 'Maximum Grok lanes Leader may request. Available accounts and execution slots still determine what runs.' },\n] as const;\nexport type LeaderPreferenceKey = typeof LEADER_PREFERENCE_FIELDS[number]['key'];\nexport type LeaderPreferences = NonNullable<VerseCaps['leaderPreferences']>;\nexport type LeaderPreferenceValues = Pick<LeaderPreferences, LeaderPreferenceKey>;\nexport type LeaderPreferenceDraft = Record<LeaderPreferenceKey, { text: string; unlimited: boolean }>;\nexport type LeaderPreferenceRead = { state: 'ready'; values: LeaderPreferenceValues; defaulted: LeaderPreferenceKey[] }\n | { state: 'unsupported' | 'invalid' | 'unavailable' };\n\nfunction own(raw: unknown, key: string): unknown {\n try { return raw && typeof raw === 'object' && !Array.isArray(raw) ? Object.getOwnPropertyDescriptor(raw, key)?.value : undefined; }\n catch { return undefined; }\n}\n\nexport function readLeaderPreferences(raw: unknown): LeaderPreferenceRead {\n if (raw === undefined) return { state: 'unsupported' };\n const source = own(raw, 'sourceState');\n if (source !== 'ready') return { state: source === 'unavailable' ? 'unavailable' : 'invalid' };\n const values = {} as LeaderPreferenceValues;\n for (const field of LEADER_PREFERENCE_FIELDS) {\n const value = own(raw, field.key);\n if (value !== null && (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0)) return { state: 'invalid' };\n values[field.key] = value as number | null;\n }\n const defaulted: LeaderPreferenceKey[] = [];\n const metadata = own(raw, 'defaulted');\n try {\n if (Array.isArray(metadata) && metadata.length <= LEADER_PREFERENCE_FIELDS.length) {\n for (let i = 0; i < metadata.length; i++) {\n const key: unknown = Object.getOwnPropertyDescriptor(metadata, String(i))?.value;\n const field = LEADER_PREFERENCE_FIELDS.find((entry) => entry.key === key);\n if (field && values[field.key] !== null && !defaulted.includes(field.key)) defaulted.push(field.key);\n }\n }\n } catch { /* Unknown default metadata never changes explicit preferences. */ }\n return { state: 'ready', values, defaulted };\n}\n\nexport function leaderPreferenceDraft(values: LeaderPreferenceValues): LeaderPreferenceDraft {\n // A null-to-finite edit requires a number; never guess whether check-ins are enabled.\n return Object.fromEntries(LEADER_PREFERENCE_FIELDS.map(({ key }) => [key, {\n text: values[key] === null ? '' : String(values[key]), unlimited: values[key] === null,\n }])) as LeaderPreferenceDraft;\n}\n\nexport function leaderPreferencePatch(draft: LeaderPreferenceDraft, saved: LeaderPreferenceValues) {\n const patch: Partial<LeaderPreferenceValues> = {};\n const errors: Partial<Record<LeaderPreferenceKey, string>> = {};\n for (const { key } of LEADER_PREFERENCE_FIELDS) {\n const result = validateGoalPreference(draft[key].text, draft[key].unlimited);\n if (!result.ok) errors[key] = result.error;\n else if (result.value !== saved[key]) patch[key] = result.value;\n }\n return { patch, errors };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { IconChevronRight } from '../../../components/primitives/icons.js';\nimport { updateVerseCaps } from './control-queries.js';\nimport { validateGoalPreference } from './goal-preferences-spec.js';\nimport {\n LEADER_PREFERENCE_FIELDS, leaderPreferenceDraft, leaderPreferencePatch, readLeaderPreferences,\n type LeaderPreferenceDraft, type LeaderPreferenceKey, type LeaderPreferenceRead, type LeaderPreferences,\n} from './leader-preferences-spec.js';\nimport { describeControlError, type GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\nexport function LeaderPreferencesPanel({ preferences, guard, dispatchEnabled }: {\n preferences: LeaderPreferences | undefined; guard: GuardedAction; dispatchEnabled: boolean;\n}) {\n const read = readLeaderPreferences(preferences);\n return <section className={styles.panel} aria-label=\"Leader preferences\">\n <details className={styles.goalDisclosure}>\n <summary className={styles.goalSummary}>\n <span className={styles.goalSummaryLabel}><IconChevronRight size={14} className={styles.goalChevron} /><span className={styles.panelTitle}>Leader preferences</span></span>\n <span className={styles.panelNote}>{read.state === 'ready' ? 'Advanced' : 'Unavailable'}</span>\n </summary>\n <p className={styles.goalNote}>Choose daily run preferences and requested capacity. Run intervals, account availability, Stop and your signed permissions still apply. Removing a preference limit does not start work.</p>\n {read.state === 'ready' ? <LeaderPreferencesForm read={read} serverValue={preferences!} guard={guard} dispatchEnabled={dispatchEnabled} />\n : <p className={styles.empty} role=\"status\">{read.state === 'unsupported'\n ? 'Leader preferences are unavailable from this server. Update Hub to view and change them.'\n : read.state === 'unavailable' ? 'Saved Leader preferences could not be read. Refresh the connection before changing them.'\n : 'Saved Leader preferences need attention. Correct the configuration and refresh before changing them here.'}</p>}\n </details>\n </section>;\n}\n\nfunction LeaderPreferencesForm({ read, serverValue, guard, dispatchEnabled }: {\n read: Extract<LeaderPreferenceRead, { state: 'ready' }>; serverValue: LeaderPreferences;\n guard: GuardedAction; dispatchEnabled: boolean;\n}) {\n const [saved, setSaved] = useState(read.values);\n const savedRef = useRef(saved);\n const [defaulted, setDefaulted] = useState(read.defaulted);\n const [draft, setDraft] = useState(() => leaderPreferenceDraft(saved));\n const [errors, setErrors] = useState<Partial<Record<LeaderPreferenceKey, string>>>({});\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const running = useRef(false);\n const mounted = useRef(true);\n useEffect(() => { mounted.current = true; return () => { mounted.current = false; }; }, []);\n const signature = JSON.stringify({ values: read.values, defaulted: read.defaulted });\n useEffect(() => {\n setDefaulted(read.defaulted);\n const before = savedRef.current;\n if (JSON.stringify(before) === JSON.stringify(read.values)) return;\n setDraft((current) => {\n const next = leaderPreferenceDraft(read.values);\n const merged = { ...current };\n for (const { key } of LEADER_PREFERENCE_FIELDS) {\n const value = validateGoalPreference(current[key].text, current[key].unlimited);\n if (value.ok && value.value === before[key]) merged[key] = next[key];\n }\n return merged;\n });\n savedRef.current = read.values;\n setSaved(read.values);\n setNotice(null);\n // Fresh server reads can revert a value previously confirmed by POST.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signature, serverValue]);\n\n const result = leaderPreferencePatch(draft, saved);\n const changed = Object.keys(result.patch).length > 0 || Object.keys(result.errors).length > 0;\n const locked = !dispatchEnabled || guard.readOnly || guard.busy || guard.tokenOpen || saving;\n function change(key: LeaderPreferenceKey, value: Partial<LeaderPreferenceDraft[LeaderPreferenceKey]>) {\n setDraft((current) => ({ ...current, [key]: { ...current[key], ...value } }));\n setErrors((current) => ({ ...current, [key]: undefined })); setError(null); setNotice(null);\n }\n function save() {\n if (locked || running.current) return;\n const checked = leaderPreferencePatch(draft, saved);\n setErrors(checked.errors); setError(null); setNotice(null);\n if (Object.keys(checked.errors).length || !Object.keys(checked.patch).length) return;\n guard.request(async () => {\n if (!mounted.current) throw new Error('Review Leader preferences again before saving.');\n if (running.current) throw new Error('A Leader preferences save is already in progress.');\n running.current = true; setSaving(true);\n try {\n const response = await updateVerseCaps({ leaderPreferences: checked.patch });\n const confirmed = readLeaderPreferences(response?.caps?.leaderPreferences);\n if (confirmed.state !== 'ready') throw new Error('The server did not confirm saved Leader preferences. Refresh before trying again.');\n if ((Object.keys(checked.patch) as LeaderPreferenceKey[]).some((key) => confirmed.values[key] !== checked.patch[key])) {\n throw new Error('The server returned different Leader preferences. Refresh and review them before trying again.');\n }\n return confirmed;\n } catch (err) { if (mounted.current) setError(describeControlError(err)); throw err; }\n finally { running.current = false; if (mounted.current) setSaving(false); }\n }, 'Saving Leader preferences requires the dispatch token.', (confirmed) => {\n if (!mounted.current) return;\n savedRef.current = confirmed.values; setSaved(confirmed.values); setDefaulted(confirmed.defaulted);\n setDraft(leaderPreferenceDraft(confirmed.values)); setErrors({});\n setNotice('Leader preferences saved. They apply when Leader next considers a run.');\n });\n }\n return <form onSubmit={(event) => { event.preventDefault(); save(); }} aria-busy={saving || undefined}>\n <fieldset className={styles.goalFields} disabled={locked}>\n <legend className={styles.srOnly}>Leader run preferences</legend>\n <div className={styles.capGrid}>{LEADER_PREFERENCE_FIELDS.map((field) => {\n const id = `leader-preference-${field.key}`; const choice = draft[field.key];\n return <div key={field.key} className={styles.cap}>\n <label className={styles.goalLabel} htmlFor={id}>{field.label}</label>\n <input id={id} className={`${styles.capInput} ${errors[field.key] ? styles.capInputInvalid : ''}`}\n type=\"text\" inputMode=\"numeric\" autoComplete=\"off\" value={choice.unlimited ? '' : choice.text}\n placeholder={choice.unlimited ? 'No preference limit' : undefined} disabled={choice.unlimited}\n aria-invalid={errors[field.key] ? true : undefined} aria-describedby={`${id}-help${errors[field.key] ? ` ${id}-error` : ''}`}\n onChange={(event) => change(field.key, { text: event.target.value })} />\n <label className={styles.goalChoice}><input type=\"checkbox\" checked={choice.unlimited}\n aria-label={`No preference limit for ${field.label.toLowerCase()}`}\n onChange={(event) => change(field.key, { unlimited: event.target.checked })} /><span>No preference limit</span></label>\n <span className={styles.capHelp} id={`${id}-help`}>{field.help}{defaulted.includes(field.key) ? ` Current default: ${saved[field.key]}.` : ''}</span>\n {errors[field.key] ? <span className={styles.capError} id={`${id}-error`} role=\"alert\">{errors[field.key]}</span> : null}\n </div>;\n })}</div>\n <div className={styles.goalActions}><Button type=\"submit\" busy={saving} disabled={!changed}>Save Leader preferences</Button>\n {changed ? <Button variant=\"ghost\" onClick={() => { setDraft(leaderPreferenceDraft(saved)); setErrors({}); setError(null); setNotice(null); }}>Discard changes</Button> : null}</div>\n </fieldset>\n {!dispatchEnabled || guard.readOnly ? <p className={styles.capHelp}>This connection is read-only. Leader preferences cannot be changed here.</p> : null}\n {error ? <p className={styles.capError} role=\"alert\">{error}</p> : null}\n {saving ? <p className={styles.capHelp} role=\"status\">Saving Leader preferences…</p> : null}\n {notice ? <p className={styles.capApplied} role=\"status\">{notice}</p> : null}\n </form>;\n}\n","/**\n * routes/verse/autonomy/CapsPanel.tsx — the leash: every configured cap, the\n * live usage against it, and an inline edit that commits on blur or Enter.\n *\n * Three behaviours the contract calls out explicitly:\n * - **Validate before the round trip.** caps-spec.ts mirrors the server's\n * ranges, so a bad value is refused inline instead of costing a 400.\n * - **\"Applied live\" means applied live.** The daemon re-reads config each\n * tick, so a committed cap takes effect without a restart; the confirmation\n * says so, and clears on the next edit rather than lingering.\n * - **A daily budget of 0 reads as \"stopped\".** Never as \"unlimited\". The\n * usage line under the budget field says it in words as well as in the\n * header's meter.\n *\n * Live usage is shown ONLY where the number is genuinely observable. Per-tier\n * concurrency has no live signal, so it gets no usage line — an invented\n * \"0 / 8\" would be worse than silence.\n */\nimport { useEffect, useState } from 'react';\nimport {\n CAP_FIELDS,\n FOUNDRY_LIMIT_MAX_RANGE,\n capPatch,\n readCap,\n validateCap,\n validateFoundryMax,\n type CapFieldSpec,\n type CapKey,\n} from './caps-spec.js';\nimport { updateVerseCaps } from './control-queries.js';\nimport { GoalPreferencesPanel } from './GoalPreferencesPanel.js';\nimport { LeaderPreferencesPanel } from './LeaderPreferencesPanel.js';\nimport { engineQuotaStanding } from './control-types.js';\nimport type { VerseCaps, VerseControlSnapshot, VerseFoundryLimit } from './control-types.js';\nimport { budgetMeter, formatAge, formatCount, formatUsd } from './format.js';\nimport type { GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\nexport interface CapsPanelProps {\n caps: VerseCaps;\n snapshot: VerseControlSnapshot;\n guard: GuardedAction;\n dispatchEnabled: boolean;\n}\n\n/** What is actually measurable against each cap right now. */\nfunction usageFor(key: CapKey, caps: VerseCaps, snapshot: VerseControlSnapshot): string | null {\n const daemon = snapshot.daemon;\n const lastTick = daemon?.ticks?.[daemon.ticks.length - 1] ?? null;\n switch (key) {\n case 'dailyBudgetUsd': {\n const cap = caps.dailyBudgetUsd;\n if (cap === 0) return 'Loop stopped ($0 budget).';\n // Same honesty rule as the status header: `todayUsd` belongs to\n // `todayDate`, and a ledger day that is not today says nothing about\n // today. budgetMeter owns that comparison for both surfaces.\n const spend = snapshot.spend;\n const meter = spend\n ? budgetMeter(spend.todayUsd, cap, spend.todayDate)\n : budgetMeter(daemon?.todaySpentUsd ?? null, cap, null);\n if (meter.state === 'unknown') return meter.note;\n return `${formatUsd(spend ? spend.todayUsd : (daemon?.todaySpentUsd ?? null))} spent today`;\n }\n case 'perTickItems':\n return lastTick ? `${formatCount(lastTick.itemsConsidered)} considered on the last tick` : null;\n case 'parallel':\n return lastTick?.dispatches ? `${lastTick.dispatches.length} dispatched on the last tick` : null;\n case 'intervalMs':\n return daemon?.lastTickAt ? `last tick ${formatAge(daemon.lastTickAt)} ago` : null;\n default:\n return null;\n }\n}\n\nexport function CapsPanel({ caps, snapshot, guard, dispatchEnabled }: CapsPanelProps) {\n const [activeKey, setActiveKey] = useState<string | null>(null);\n const [busyKey, setBusyKey] = useState<string | null>(null);\n const [appliedKey, setAppliedKey] = useState<string | null>(null);\n const locked = !dispatchEnabled || guard.readOnly || guard.busy || guard.tokenOpen;\n\n function commit(id: string, reason: string, run: () => Promise<unknown>) {\n setActiveKey(id);\n setAppliedKey(null);\n guard.request(async () => {\n setBusyKey(id);\n try {\n await run();\n setAppliedKey(id);\n } finally {\n setBusyKey(null);\n }\n }, reason);\n }\n\n const limits = caps.foundryLimits ?? [];\n\n return (\n <><section className={styles.panel} aria-label=\"Budget and limits\">\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>Budget and limits</h3>\n <p className={styles.panelNote}>Committed on blur or Enter. The daemon re-reads config each tick, so changes apply live.</p>\n </div>\n\n <div className={styles.capGrid}>\n {CAP_FIELDS.map((spec) => (\n <CapField\n key={spec.key}\n spec={spec.key === 'perTickItems' ? {\n ...spec,\n help: Number.isSafeInteger(caps.journalItemCapacity) && (caps.journalItemCapacity ?? 0) > 0\n ? `${spec.help} At most ${caps.journalItemCapacity} items are journaled per tick; remaining work continues on later ticks.`\n : `${spec.help} Journal capacity is unavailable from this server.`,\n } : spec}\n stored={readCap(caps, spec.key)}\n usage={usageFor(spec.key, caps, snapshot)}\n disabled={locked || (busyKey !== null && busyKey !== spec.key)}\n busy={busyKey === spec.key}\n applied={appliedKey === spec.key}\n error={activeKey === spec.key ? guard.error : null}\n onCommit={(stored) =>\n commit(spec.key, `Changing ${spec.label.toLowerCase()} requires the dispatch token.`, () =>\n updateVerseCaps(capPatch(spec.key, stored)),\n )\n }\n />\n ))}\n </div>\n\n <div className={`${styles.panelHead} ${styles.panelHeadSpaced}`}>\n <h3 className={styles.panelTitle}>Per-engine dispatch limits</h3>\n </div>\n {limits.length === 0 ? (\n <p className={styles.empty}>\n No per-engine dispatch limits are configured. Every engine is bounded only by the caps above and by its own\n provider quota. To cap one, add it under <code>foundry.limits</code> in <code>~/.ashlr/config.json</code>{' '}\n (a <code>max</code> and a <code>window</code>); it then appears here to edit.\n </p>\n ) : (\n <div className={styles.capGrid}>\n {limits.map((limit, index) => (\n <FoundryLimitField\n key={`${limit.engine}:${limit.window}`}\n limit={limit}\n usage={engineUsage(limit.engine, snapshot)}\n disabled={locked || (busyKey !== null && busyKey !== limitId(limit))}\n busy={busyKey === limitId(limit)}\n applied={appliedKey === limitId(limit)}\n error={activeKey === limitId(limit) ? guard.error : null}\n onCommit={(max) =>\n commit(limitId(limit), `Changing the ${limit.engine} dispatch limit requires the dispatch token.`, () => {\n const next = limits.map((entry, i) => (i === index ? { ...entry, max } : entry));\n return updateVerseCaps({ foundryLimits: next });\n })\n }\n />\n ))}\n </div>\n )}\n </section>\n <GoalPreferencesPanel preferences={caps.goalPreferences} focusMode={caps.goalFocusMode} focusThreshold={caps.goalFocusActiveThreshold}\n focusDefaulted={caps.defaulted.includes('goalFocusMode')} guard={guard} dispatchEnabled={dispatchEnabled && busyKey === null} />\n <LeaderPreferencesPanel preferences={caps.leaderPreferences} guard={guard} dispatchEnabled={dispatchEnabled && busyKey === null} />\n </>\n );\n}\n\nfunction limitId(limit: VerseFoundryLimit): string {\n return `foundry:${limit.engine}:${limit.window}`;\n}\n\nfunction engineUsage(engine: string, snapshot: VerseControlSnapshot): string | null {\n // `/api/verse/control` sends raw frontier-usage rows; the standing word\n // (\"ok\"/\"warn\"/\"over\"/\"unlimited\") is derived here rather than served, so\n // the client and the server cannot disagree about a threshold they both own.\n const row = snapshot.quota?.find((e) => e.engine === engine);\n if (!row) return null;\n const standing = engineQuotaStanding(row);\n const quota = standing === 'unlimited' ? 'no limit configured' : standing;\n // `callsToday` is NOT a 24h figure: frontier-usage counts it over the\n // CONFIGURED limit window, which the row carries as `limitWindow`. Saying\n // \"24h\" under a field labelled \"dispatches / 1h\" described one number two\n // contradictory ways.\n return `${formatCount(row.callsToday)} dispatched in the last ${row.limitWindow ?? '1d'} · ${quota}`;\n}\n\ninterface FieldShellProps {\n id: string;\n label: string;\n unit: string;\n help?: string;\n usage: string | null;\n value: string;\n invalid: string | null;\n disabled: boolean;\n busy: boolean;\n applied: boolean;\n error: string | null;\n onChange: (next: string) => void;\n onCommit: () => void;\n step: number;\n min: number;\n max: number;\n}\n\nfunction FieldShell(props: FieldShellProps) {\n const describedBy = [props.usage ? `${props.id}-usage` : null, props.help ? `${props.id}-help` : null]\n .filter((x): x is string => x !== null)\n .join(' ');\n return (\n <div className={styles.cap}>\n <label className={styles.capLabel} htmlFor={props.id}>\n {props.label}\n </label>\n <div className={styles.capRow}>\n <input\n id={props.id}\n type=\"number\"\n inputMode=\"decimal\"\n className={`${styles.capInput} ${props.invalid ? styles.capInputInvalid : ''}`}\n value={props.value}\n step={props.step}\n min={props.min}\n max={props.max}\n disabled={props.disabled || props.busy}\n aria-invalid={props.invalid ? true : undefined}\n aria-describedby={describedBy || undefined}\n onChange={(e) => props.onChange(e.target.value)}\n onBlur={props.onCommit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n props.onCommit();\n }\n }}\n />\n <span className={styles.capUnit}>{props.unit}</span>\n </div>\n {props.usage ? (\n <span className={styles.capUsage} id={`${props.id}-usage`}>\n {props.usage}\n </span>\n ) : null}\n {props.help ? (\n <span className={styles.capHelp} id={`${props.id}-help`}>\n {props.help}\n </span>\n ) : null}\n {props.invalid ? (\n <span className={styles.capError} role=\"alert\">\n {props.invalid}\n </span>\n ) : null}\n {props.error && !props.invalid ? (\n <span className={styles.capError} role=\"alert\">\n {props.error}\n </span>\n ) : null}\n {props.applied && !props.invalid && !props.error ? <span className={styles.capApplied}>applied live</span> : null}\n </div>\n );\n}\n\nfunction CapField({\n spec,\n stored,\n usage,\n disabled,\n busy,\n applied,\n error,\n onCommit,\n}: {\n spec: CapFieldSpec;\n stored: number | null;\n usage: string | null;\n disabled: boolean;\n busy: boolean;\n applied: boolean;\n error: string | null;\n onCommit: (stored: number) => void;\n}) {\n const canonical = stored === null ? '' : String(spec.toDisplay(stored));\n const [draft, setDraft] = useState(canonical);\n const [invalid, setInvalid] = useState<string | null>(null);\n\n // The server is the authority: when its value changes under us (another tab,\n // another cap's POST returning a fresh snapshot) adopt it, unless the\n // operator is mid-edit with something invalid they still need to see.\n useEffect(() => {\n if (invalid === null) setDraft(canonical);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- adopt server value only when it actually changes\n }, [canonical]);\n\n function commit() {\n if (draft === canonical) {\n setInvalid(null);\n return;\n }\n const result = validateCap(spec, draft);\n if (!result.ok) {\n setInvalid(result.error);\n return;\n }\n setInvalid(null);\n onCommit(result.stored);\n }\n\n return (\n <FieldShell\n id={`cap-${spec.key.replace('.', '-')}`}\n label={spec.label}\n unit={spec.unit}\n help={spec.help}\n usage={usage}\n value={draft}\n invalid={invalid}\n // `stored === null` means \"not configured yet\" — the ONE state this\n // control most needs to be editable in. Disabling it made Max\n // concurrent and all three tiers permanently uneditable on a default\n // config, which is the default. `commit()` already handles an empty\n // untouched field: `draft === canonical` is `'' === ''`, so it posts\n // nothing until something is typed.\n disabled={disabled}\n busy={busy}\n applied={applied}\n error={error}\n step={spec.step}\n min={spec.min}\n max={spec.max}\n onChange={(next) => {\n setDraft(next);\n if (invalid) setInvalid(null);\n }}\n onCommit={commit}\n />\n );\n}\n\nfunction FoundryLimitField({\n limit,\n usage,\n disabled,\n busy,\n applied,\n error,\n onCommit,\n}: {\n limit: VerseFoundryLimit;\n usage: string | null;\n disabled: boolean;\n busy: boolean;\n applied: boolean;\n error: string | null;\n onCommit: (max: number) => void;\n}) {\n const canonical = String(limit.max);\n const [draft, setDraft] = useState(canonical);\n const [invalid, setInvalid] = useState<string | null>(null);\n\n useEffect(() => {\n if (invalid === null) setDraft(canonical);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- adopt server value only when it actually changes\n }, [canonical]);\n\n function commit() {\n if (draft === canonical) {\n setInvalid(null);\n return;\n }\n const result = validateFoundryMax(draft, limit.engine);\n if (!result.ok) {\n setInvalid(result.error);\n return;\n }\n setInvalid(null);\n onCommit(result.stored);\n }\n\n return (\n <FieldShell\n id={`cap-foundry-${limit.engine}-${limit.window}`}\n label={limit.engine}\n unit={`dispatches / ${limit.window}`}\n usage={usage}\n value={draft}\n invalid={invalid}\n disabled={disabled}\n busy={busy}\n applied={applied}\n error={error}\n step={1}\n min={FOUNDRY_LIMIT_MAX_RANGE.min}\n max={FOUNDRY_LIMIT_MAX_RANGE.max}\n onChange={(next) => {\n setDraft(next);\n if (invalid) setInvalid(null);\n }}\n onCommit={commit}\n />\n );\n}\n","/**\n * routes/verse/autonomy/StatusHeader.tsx — the five questions the cockpit has\n * to answer before the operator reads anything else: is it running, what is it\n * doing, what has it spent, when does it move next, and is the leash on.\n *\n * Epistemic rule enforced here: the daemon's run state is only stated when\n * `sourceQuality` says the observation is healthy AND complete. A degraded\n * read renders \"unknown\" — never \"stopped\", which would read as a fact.\n * The kill switch outranks everything: while it is engaged the header says so\n * regardless of what the daemon ledger claims.\n */\nimport { isKnown } from '../../../components/primitives/Epistemic.js';\nimport type { VerseControlSnapshot } from './control-types.js';\nimport { budgetMeter, countdownLabel, describeTickOutcome, formatInterval, formatRelative, formatStamp, nextTickAt, UNKNOWN } from './format.js';\nimport { useNow } from './use-ticker.js';\nimport styles from './autonomy.module.css';\n\nexport type RunState = 'running' | 'stopped' | 'unknown' | 'killed';\n\nexport function runStateOf(snapshot: VerseControlSnapshot): { state: RunState; label: string } {\n // \"Kill switch engaged\", not \"Emergency stop engaged\". The sentinel has two\n // authors — the Emergency stop button and the ordinary `Stop loop`, which\n // `stopDaemon()` implements as `setKill(true)` — and the snapshot cannot\n // tell them apart. Naming the switch rather than the button states the fact\n // both paths share instead of accusing an operator who only pressed Stop.\n if (snapshot.killSwitch?.state === 'active') return { state: 'killed', label: 'Kill switch engaged' };\n const daemon = snapshot.daemon;\n if (!daemon || !isKnown(daemon.sourceQuality)) return { state: 'unknown', label: 'Run state unknown' };\n if (daemon.runtimeState === 'running') return { state: 'running', label: 'Running' };\n if (daemon.runtimeState === 'stopped') return { state: 'stopped', label: 'Stopped' };\n return { state: 'unknown', label: 'Run state unknown' };\n}\n\nexport function StatusHeader({ snapshot }: { snapshot: VerseControlSnapshot }) {\n const now = useNow(1000);\n const { state, label } = runStateOf(snapshot);\n const daemon = snapshot.daemon;\n const observed = isKnown(daemon?.sourceQuality);\n\n const lastTick = daemon?.ticks?.[daemon.ticks.length - 1] ?? null;\n const outcome = describeTickOutcome(lastTick?.reason);\n const directionMode = snapshot.fleet?.directionMode ?? lastTick?.directionMode ?? null;\n\n // The enrollment registry arrives as `scope.repos`; a missing scope block is\n // unknown (UNKNOWN), which is not the same as an enrolled-zero registry.\n const repos = snapshot.scope?.repos ?? null;\n\n const interval = snapshot.caps?.intervalMs ?? null;\n const next = state === 'running' ? nextTickAt(daemon?.lastTickAt, interval) : null;\n // `spend.todayUsd` belongs to `spend.todayDate`, and the daemon writes that\n // figure once a day and leaves it there. Handing the meter the date lets it\n // say \"nothing recorded today\" instead of presenting a three-week-old ledger\n // day as today's spend. When only the legacy daemon observation exists there\n // is no date to check, so it is passed as null and the meter behaves as before.\n const spend = snapshot.spend;\n const budget = spend\n ? budgetMeter(spend.todayUsd, snapshot.caps?.dailyBudgetUsd ?? null, spend.todayDate)\n : budgetMeter(daemon?.todaySpentUsd ?? null, snapshot.caps?.dailyBudgetUsd ?? null, null);\n\n return (\n <section className={styles.status} aria-label=\"Autonomy status\">\n <div className={styles.statusTop}>\n <span className={styles.runState} data-state={state}>\n <span className={styles.runDot} aria-hidden=\"true\" />\n {label}\n </span>\n <div className={styles.facts}>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Direction</span>\n <span className={styles.factValue}>{directionMode ?? 'default'}</span>\n </div>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Last tick</span>\n <span className={styles.factValue} data-tone={outcome.tone}>\n {/* formatStamp: a loop idle since yesterday must not show a bare \"03:12:44\" as if it ticked today. */}\n {observed && daemon?.lastTickAt ? `${formatStamp(daemon.lastTickAt)} · ${outcome.label}` : outcome.label}\n </span>\n </div>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Next tick</span>\n <span className={styles.factValue}>\n {state === 'running' ? countdownLabel(next, now) : state === 'killed' ? 'blocked' : 'not scheduled'}\n </span>\n </div>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Interval</span>\n <span className={styles.factValue}>{formatInterval(interval)}</span>\n </div>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Scope</span>\n <span className={styles.factValue} data-tone={(repos?.length ?? 0) === 0 ? 'warning' : undefined}>\n {repos ? `${repos.length} ${repos.length === 1 ? 'repo' : 'repos'}` : UNKNOWN}\n </span>\n </div>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Awaiting you</span>\n <span className={styles.factValue}>\n {typeof snapshot.pendingApprovals === 'number'\n ? `${snapshot.pendingApprovals} ${snapshot.pendingApprovals === 1 ? 'approval' : 'approvals'}`\n : UNKNOWN}\n </span>\n </div>\n <div className={styles.fact}>\n <span className={styles.factLabel}>Started</span>\n <span className={styles.factValue}>{observed ? formatRelative(daemon?.startedAt) : UNKNOWN}</span>\n </div>\n </div>\n </div>\n\n <div className={styles.budget}>\n <div className={styles.budgetLine}>\n <span className={styles.budgetLabel}>{budget.label}</span>\n <span className={styles.budgetNote}>{budget.note}</span>\n </div>\n <div\n className={styles.meter}\n data-state={budget.state}\n role=\"meter\"\n aria-label=\"Today's spend against the daily budget\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={budget.percent ?? undefined}\n aria-valuetext={`${budget.label}. ${budget.note}`}\n >\n <div className={styles.meterFill} style={{ width: `${budget.percent ?? 0}%` }} />\n </div>\n </div>\n </section>\n );\n}\n","/**\n * routes/verse/autonomy/DaemonControls.tsx — THREE stops with three honestly\n * different scopes, ordered by how much they break.\n *\n * 1. Pause / Resume — primary, UNCONFIRMED, obviously reversible.\n * `POST /api/verse/daemon {action:'pause'}` writes the daemon-scoped\n * sentinel `~/.ashlr/daemon.paused`. It halts autonomous dispatch and\n * NOTHING else: the operator's own write tools keep working, a resident\n * loop parks instead of dying, and Resume brings it back with no restart.\n * It gets no confirm dialog on purpose — a control that is free to undo\n * must be free to reach, or people reach for the drastic one instead.\n *\n * 2. Stop loop — confirmed. `stopDaemon()` is still `setKill(true)`\n * (core/daemon/loop.ts), so the ordinary stop engages the SAME global\n * sentinel as the emergency button. The confirm says that plainly and\n * points at Pause, because with Pause shipped, Stop is now the WRONG\n * choice for \"just halt the loop\" rather than the only one.\n *\n * 3. Emergency stop — confirmed, below a rule, danger-styled. The global\n * kill switch, stated at its true blast radius.\n *\n * VERSE-CONTRACT-V2's two rules still hold: the kill switch is never labelled\n * \"pause\", and the confirm states what else it disables before the click. The\n * word \"pause\" now belongs to the control that earns it.\n */\nimport { useState } from 'react';\nimport { Tooltip } from '../../../components/primitives/Tooltip.js';\nimport { ConfirmDialog } from '../../inbox/ConfirmDialog.js';\nimport { engageEmergencyStop, releaseEmergencyStop, runDaemonAction } from './control-queries.js';\nimport type { VerseControlSnapshot, VerseDaemonActionResult } from './control-types.js';\nimport { tidyProse } from './format.js';\nimport { runStateOf } from './StatusHeader.js';\nimport type { GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\ntype Confirming = 'engage' | 'release' | 'stop' | null;\n\nexport interface DaemonControlsProps {\n snapshot: VerseControlSnapshot;\n guard: GuardedAction;\n /** False when the server was started without dispatch: every POST 404s. */\n dispatchEnabled: boolean;\n}\n\nexport function DaemonControls({ snapshot, guard, dispatchEnabled }: DaemonControlsProps) {\n const [confirming, setConfirming] = useState<Confirming>(null);\n // The server's own account of what the last action did. Every daemon action\n // returns one and every one of them used to be discarded — which is how\n // \"Stop loop\" could engage the global kill switch without the operator ever\n // being told. Cleared on the next action so it is never stale.\n const [lastNote, setLastNote] = useState<string | null>(null);\n const { state } = runStateOf(snapshot);\n const killed = snapshot.killSwitch?.state === 'active';\n const killUnknown = snapshot.killSwitch?.state === 'unknown';\n // The pause is its own sentinel with its own third state. `unknown` means\n // the sentinel could not be read, and the daemon FAILS SAFE by treating that\n // as paused — so the UI must too, rather than showing a running loop.\n const pauseState = snapshot.pause?.state ?? 'unknown';\n const paused = pauseState !== 'running';\n const pauseUnknown = pauseState === 'unknown';\n const locked = !dispatchEnabled || guard.readOnly;\n const disabled = locked || guard.busy;\n\n const noteOf = (result: VerseDaemonActionResult) => setLastNote(result.note ? tidyProse(result.note) : null);\n\n return (\n <section className={styles.panel} aria-label=\"Loop controls\">\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>Controls</h3>\n </div>\n\n <div className={styles.controls}>\n {paused ? (\n <button\n type=\"button\"\n className={`${styles.button} ${styles.buttonPrimary}`}\n disabled={disabled}\n onClick={() =>\n guard.request(\n () => runDaemonAction('resume'),\n 'Resuming autonomous dispatch requires the dispatch token.',\n noteOf,\n )\n }\n >\n Resume\n </button>\n ) : (\n // No confirm. Pausing costs nothing, undoes in one click, and leaves\n // every other capability intact — a dialog here would only teach the\n // operator to click through dialogs.\n <button\n type=\"button\"\n className={`${styles.button} ${styles.buttonPrimary}`}\n disabled={disabled}\n onClick={() =>\n guard.request(\n () => runDaemonAction('pause'),\n 'Pausing autonomous dispatch requires the dispatch token.',\n noteOf,\n )\n }\n >\n Pause\n </button>\n )}\n {/* WHY IS THIS GREYED OUT. The reason a control is refusing is the\n one thing a disabled control must be able to say, and a native\n `title` said it to a mouse and to nobody else. `disabled` also\n eats pointer events on the button itself — the Tooltip listens on\n its wrapper, so the reason survives that too. */}\n <Tooltip\n label={\n killed\n ? 'Release the emergency stop before starting the loop.'\n : paused\n ? 'Dispatch is paused — resume before starting the loop.'\n : ''\n }\n >\n <button\n type=\"button\"\n className={styles.button}\n disabled={disabled || state === 'running' || killed || paused}\n onClick={() =>\n guard.request(\n () => runDaemonAction('start'),\n 'Starting the autonomous loop requires the dispatch token.',\n noteOf,\n )\n }\n >\n Start loop\n </button>\n </Tooltip>\n <button\n type=\"button\"\n className={styles.button}\n disabled={disabled || state === 'stopped'}\n onClick={() => setConfirming('stop')}\n >\n Stop loop\n </button>\n <Tooltip label={paused ? 'Dispatch is paused — resume before running a tick.' : ''}>\n <button\n type=\"button\"\n className={styles.button}\n disabled={disabled || killed || paused}\n onClick={() =>\n guard.request(\n () => runDaemonAction('once'),\n 'Running one tick requires the dispatch token.',\n noteOf,\n )\n }\n >\n Run one tick\n </button>\n </Tooltip>\n </div>\n\n {paused ? (\n <p className={styles.actionNote} role=\"status\">\n {pauseUnknown\n ? 'Treated as paused — the pause sentinel is unreadable.'\n : 'Autonomous dispatch is paused. The loop parks between ticks; your own write tools are unaffected, and the global kill switch is not engaged.'}\n </p>\n ) : null}\n\n <div className={styles.emergency}>\n {killed ? (\n <>\n <button type=\"button\" className={styles.button} disabled={disabled} onClick={() => setConfirming('release')}>\n Release emergency stop\n </button>\n <p className={styles.emergencyNote}>\n The global kill switch is engaged. The daemon refuses to tick <em>and</em> the agent&rsquo;s own write tools\n refuse to edit anything, anywhere — not just in enrolled repos.\n </p>\n </>\n ) : (\n <>\n <button type=\"button\" className={styles.emergencyButton} disabled={disabled} onClick={() => setConfirming('engage')}>\n Emergency stop\n </button>\n <p className={styles.emergencyNote}>\n Engages the global kill switch. Wider than &ldquo;stop the loop&rdquo;: it also disables the agent&rsquo;s own\n write tools everywhere until you release it. To halt only the loop, use <strong>Pause</strong>.\n {killUnknown ? ' The switch’s current state could not be read.' : ''}\n </p>\n </>\n )}\n </div>\n\n {guard.error && confirming === null ? (\n <p className={styles.capError} role=\"alert\">\n {guard.error}\n </p>\n ) : null}\n\n {lastNote && !guard.error ? (\n <p className={styles.actionNote} role=\"status\">\n {lastNote}\n </p>\n ) : null}\n\n <ConfirmDialog\n open={confirming === 'stop'}\n onClose={() => setConfirming(null)}\n title=\"Stop the autonomous loop?\"\n body={\n <>\n This is the ordinary stop, but it works by engaging the global kill switch — the same\n <code> ~/.ashlr/KILL </code> sentinel the emergency stop writes. While it is set, the agent&rsquo;s own write\n tools also refuse to edit anything, anywhere, until you release it from this panel.\n <br />\n <br />\n If you only want the loop to stop working, <strong>Pause</strong> does exactly that and nothing else — it\n leaves your own tools alone and undoes in one click.\n <br />\n <br />\n Nothing in flight is rolled back. The loop will not restart by itself.\n </>\n }\n confirmLabel=\"Stop loop\"\n destructive\n busy={guard.busy}\n error={guard.error}\n onConfirm={() =>\n guard.request(\n () => runDaemonAction('stop'),\n 'Stopping the autonomous loop requires the dispatch token.',\n (result) => {\n noteOf(result);\n setConfirming(null);\n },\n )\n }\n />\n\n <ConfirmDialog\n open={confirming === 'engage'}\n onClose={() => setConfirming(null)}\n title=\"Engage the emergency stop?\"\n body={\n <>\n This writes the global kill switch. It stops the autonomous loop <strong>and</strong> disables the\n agent&rsquo;s own write tools — every edit, apply, and merge path refuses while it is engaged, in every repo,\n not only the enrolled ones. Nothing in flight is rolled back; nothing new can start.\n <br />\n <br />\n <strong>Pause</strong> halts autonomous dispatch only and leaves everything else working.{' '}\n <strong>Stop loop</strong> is not narrower than this button: it engages the same global kill switch.\n </>\n }\n confirmLabel=\"Engage emergency stop\"\n destructive\n busy={guard.busy}\n error={guard.error}\n onConfirm={() =>\n guard.request(async () => {\n await engageEmergencyStop();\n setConfirming(null);\n }, 'Engaging the emergency stop requires the dispatch token.')\n }\n />\n\n <ConfirmDialog\n open={confirming === 'release'}\n onClose={() => setConfirming(null)}\n title=\"Release the emergency stop?\"\n body={\n <>\n This clears the global kill switch. Write tools become usable again immediately. The autonomous loop does\n not restart by itself — use <strong>Start loop</strong> when you want it running.\n </>\n }\n confirmLabel=\"Release emergency stop\"\n busy={guard.busy}\n error={guard.error}\n onConfirm={() =>\n guard.request(async () => {\n await releaseEmergencyStop();\n setConfirming(null);\n }, 'Releasing the emergency stop requires the dispatch token.')\n }\n />\n </section>\n );\n}\n","/**\n * routes/verse/autonomy/FleetPanel.tsx — what the fleet is doing right now.\n *\n * The test this panel has to pass: a reader should be able to answer \"is it\n * working, and on what\" without opening a log. That means three things on\n * screen at once —\n *\n * - a verdict in words at the top (`fleetPressure`), because \"4 agents\" is\n * not an answer if three of them are queued;\n * - slot occupancy against the EFFECTIVE concurrency, not the configured\n * slot count, so a full runtime reads as full;\n * - one row per agent with what it is working on and how long it has been\n * at it, ticking, because a stuck agent is identified by its elapsed time\n * and nothing else.\n *\n * The failure this panel exists to prevent: a queue that presents as slowness.\n * When turns are waiting, the panel says they are waiting, says they have not\n * started, and — on a runtime that serializes — says the queue drains one at a\n * time. Elapsed time for a queued turn is labelled as queued, never as work,\n * because those two numbers mean opposite things to whoever is deciding\n * whether something is wrong.\n */\nimport type { ReactNode } from 'react';\nimport { Meter } from '../../../components/primitives/Meter.js';\nimport { StatusBadge, type Tone } from '../../../components/primitives/StatusBadge.js';\nimport { UNKNOWN, formatCount, repoDisplayName, tidyProse } from './format.js';\nimport type { FleetAgent, FleetSnapshot, OptionalFleetRead } from './fleet-contract.js';\nimport {\n elapsedSince,\n fleetPressure,\n orderAgents,\n runtimeCapacity,\n slotUtilisation,\n type RuntimeCapacity,\n} from './fleet-model.js';\nimport type { ServingRuntimeSnapshot } from './fleet-contract.js';\nimport { useNow } from './use-ticker.js';\nimport styles from './autonomy.module.css';\n\nconst PRESSURE_TONE: Record<string, Tone> = {\n idle: 'neutral',\n working: 'running',\n saturated: 'running',\n queued: 'warning',\n unknown: 'unknown',\n};\n\nconst AGENT_TONE: Record<FleetAgent['state'], Tone> = {\n running: 'running',\n finishing: 'running',\n queued: 'neutral',\n};\n\nexport interface FleetPanelProps {\n read: OptionalFleetRead<FleetSnapshot> | null;\n /** Needed for the EFFECTIVE concurrency; occupancy is meaningless without it. */\n runtime: ServingRuntimeSnapshot | null;\n loading?: boolean;\n}\n\nexport function FleetPanel({ read, runtime, loading = false }: FleetPanelProps): ReactNode {\n const now = useNow(1000);\n const fleet = read?.value ?? null;\n const capacity = runtimeCapacity(runtime);\n\n // Slot figures come from the fleet snapshot when it has them and from the\n // runtime otherwise — one number, two possible reporters, never two numbers.\n const busy = fleet?.slotsBusy ?? runtime?.slotsBusy ?? null;\n const utilisation = slotUtilisation(busy, capacity.effectiveConcurrency);\n const pressure = fleetPressure(fleet, utilisation, capacity);\n const agents = fleet ? orderAgents(fleet.agents) : [];\n const queued = fleet?.queueDepth ?? agents.filter((a) => a.state === 'queued').length;\n\n return (\n <section className={styles.panel} aria-labelledby=\"verse-fleet-title\">\n <div className={styles.panelHead}>\n <h3 id=\"verse-fleet-title\" className={styles.panelTitle}>\n Fleet in flight\n </h3>\n <p className={styles.panelNote}>\n Every agent mid-turn right now, what it is working on, and how long it has been at it.\n </p>\n </div>\n\n {loading && read === null ? (\n <p className={styles.empty}>Reading the fleet…</p>\n ) : read === null || (!read.available && read.value === null) ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>Fleet status unavailable. </span>\n {read?.reason ?? null}\n </p>\n ) : fleet === null ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>Unreadable reading. </span>\n {read.reason ?? 'Unrecognized response — update Ashlr.'}\n </p>\n ) : (\n <>\n <div className={styles.pressure} data-state={pressure.state}>\n <span className={styles.pressureHead}>\n <span className={styles.pressureHeadline}>{pressure.headline}</span>\n <StatusBadge status={pressure.state} tone={PRESSURE_TONE[pressure.state] ?? 'unknown'}>\n {pressure.state}\n </StatusBadge>\n </span>\n <p className={styles.pressureDetail}>{pressure.detail}</p>\n </div>\n\n <div className={styles.fleetMeters}>\n <Meter\n value={utilisation.busy}\n max={utilisation.total}\n label=\"Slot utilisation\"\n valueText={\n utilisation.percentText === null\n ? 'unknown'\n : `${utilisation.busy} / ${utilisation.total} · ${utilisation.percentText}`\n }\n tone={utilisation.saturated ? 'warning' : undefined}\n />\n <div className={styles.fact}>\n <span className={styles.factLabel}>Queue depth</span>\n <span\n className={styles.factValue}\n data-tone={queued > 0 ? 'warning' : undefined}\n >\n {fleet.queueDepth === null && agents.length === 0\n ? UNKNOWN\n : `${formatCount(queued)} waiting`}\n </span>\n </div>\n </div>\n\n {utilisation.saturated && queued === 0 ? (\n <p className={styles.capHelp}>\n Every slot is occupied. Nothing is waiting yet, but the next turn will.\n </p>\n ) : null}\n\n {agents.length === 0 ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>Nothing in flight. </span>\n No agent is mid-turn. The fleet answered and reported an empty list — an idle fleet,\n not a missing reading. Run one tick from Controls to put work in flight.\n </p>\n ) : (\n <div className={styles.tableScroll}>\n <table className={styles.table}>\n <caption className={styles.srOnly}>\n Agents in flight: state, task, repository, model, slot and elapsed time\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">State</th>\n <th scope=\"col\">Working on</th>\n <th scope=\"col\">Repo</th>\n <th scope=\"col\">Model</th>\n <th scope=\"col\">Slot</th>\n <th scope=\"col\">Elapsed</th>\n </tr>\n </thead>\n <tbody>\n {agents.map((agent) => (\n <AgentRow key={agent.id} agent={agent} now={now} capacity={capacity} />\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {fleet.notes.length > 0 ? (\n <ul className={styles.noteList}>\n {fleet.notes.map((n) => (\n <li key={n} className={styles.capHelp}>\n {tidyProse(n)}\n </li>\n ))}\n </ul>\n ) : null}\n </>\n )}\n </section>\n );\n}\n\n/**\n * One agent.\n *\n * The elapsed column is the reason this table exists, and it is the column\n * most easily made to lie: for a QUEUED turn the same number is time spent\n * waiting, not time spent working. Labelling it \"queued\" rather than letting\n * it sit under the same header as a running turn's duration is the difference\n * between \"this one is stuck\" and \"this one has not started\".\n */\nfunction AgentRow({\n agent,\n now,\n capacity,\n}: {\n agent: FleetAgent;\n now: number;\n capacity: RuntimeCapacity;\n}): ReactNode {\n const elapsed = elapsedSince(agent.startedAt, now);\n const queued = agent.state === 'queued';\n return (\n <tr>\n <td>\n <StatusBadge status={agent.state} tone={AGENT_TONE[agent.state]}>\n {agent.state}\n </StatusBadge>\n </td>\n <td className={styles.cellSummary}>\n {agent.task ?? <span className={styles.capHelp}>not reported</span>}\n </td>\n {/* The enrolled checkout's folder name; the full path is the tooltip. */}\n <td className={styles.cellRepo} title={agent.repo ?? undefined}>\n {agent.repo ? repoDisplayName(agent.repo) : UNKNOWN}\n </td>\n <td className={styles.cellRepo}>{agent.model ?? agent.engine ?? UNKNOWN}</td>\n <td className={styles.cellTime}>\n {agent.slot === null ? (\n queued ? (\n <span\n className={styles.capHelp}\n title={\n capacity.verdict === 'serialized'\n ? 'This runtime serializes, so only one slot ever frees up at a time.'\n : undefined\n }\n >\n no slot\n </span>\n ) : (\n UNKNOWN\n )\n ) : (\n `#${agent.slot}`\n )}\n </td>\n <td className={styles.cellTime}>\n {elapsed}\n {queued ? <span className={styles.elapsedQualifier}> queued</span> : null}\n </td>\n </tr>\n );\n}\n","/**\n * routes/verse/autonomy/GoalsBacklogPanel.tsx — read-only context for what the\n * loop is aiming at and what it has queued.\n *\n * V2 is explicit that goal mutation stays out of this surface, so there are no\n * controls here at all — only the two existing reads. `GET /api/backlog`\n * returns `null` when no backlog has been built, which is \"not yet\", not an\n * error, and renders as such.\n */\nimport { SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { verseBacklogQuery, verseGoalsQuery } from './control-queries.js';\nimport { formatWholePercent, repoDisplayName, UNKNOWN } from './format.js';\nimport styles from './autonomy.module.css';\n\nconst MAX_ROWS = 8;\n\nexport function GoalsBacklogPanel() {\n const goals = useQuery(verseGoalsQuery);\n const backlog = useQuery(verseBacklogQuery);\n\n const activeGoals = (goals.data ?? []).filter((g) => g.status !== 'done' && g.status !== 'archived');\n const items = backlog.data?.items ?? [];\n\n return (\n <section className={styles.panel} aria-label=\"Goals and backlog\">\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>Goals and backlog</h3>\n <p className={styles.panelNote}>Read-only in this view.</p>\n </div>\n\n <div className={styles.summaryColumns}>\n <div>\n <p className={styles.factLabel}>Active goals</p>\n {goals.status === 'loading' ? (\n <div className={styles.skeletons}>\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : goals.status === 'error' ? (\n <p className={styles.error} role=\"alert\">\n {goals.error?.message ?? 'Could not read goals.'}\n </p>\n ) : activeGoals.length === 0 ? (\n <p className={styles.empty}>\n No active goals, so the loop falls back to the backlog for work. Add one with{' '}\n <code>ashlr goals add \"&lt;objective&gt;\"</code>.\n </p>\n ) : (\n <div className={styles.summaryList}>\n {activeGoals.slice(0, MAX_ROWS).map((goal) => {\n // One precision for the column: whole percent, \"<1%\" for a started goal.\n const done = formatWholePercent(goal.progress?.fractionDone ?? 0);\n return (\n <div className={styles.summaryRow} key={goal.id}>\n <span className={styles.summaryTitle} title={goal.objective}>\n {goal.objective}\n </span>\n <span className={styles.summaryMeta}>\n {done} · {goal.status}\n </span>\n </div>\n );\n })}\n {activeGoals.length > MAX_ROWS ? (\n <p className={styles.panelNote}>+{activeGoals.length - MAX_ROWS} more</p>\n ) : null}\n </div>\n )}\n </div>\n\n <div>\n <p className={styles.factLabel}>Backlog</p>\n {backlog.status === 'loading' ? (\n <div className={styles.skeletons}>\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : backlog.status === 'error' ? (\n <p className={styles.error} role=\"alert\">\n {backlog.error?.message ?? 'Could not read the backlog.'}\n </p>\n ) : backlog.data?.absent ? (\n <p className={styles.empty}>\n No backlog has been built yet. Run one tick from Controls, or <code>ashlr backlog</code>, to produce one.\n </p>\n ) : items.length === 0 ? (\n <p className={styles.empty}>\n The backlog is empty, so a tick records <code>no-backlog</code> and idles. Enroll another repository in\n Scope, or add a goal, to give it work.\n </p>\n ) : (\n <div className={styles.summaryList}>\n {items.slice(0, MAX_ROWS).map((item, i) => (\n <div className={styles.summaryRow} key={item.id ?? `${item.title ?? 'item'}-${i}`}>\n <span className={styles.summaryTitle} title={item.title}>\n {item.title ?? item.id ?? 'untitled item'}\n </span>\n <span className={styles.summaryMeta} title={item.repo ?? undefined}>\n {item.repo ? repoDisplayName(item.repo) : UNKNOWN}\n {typeof item.score === 'number' ? ` · ${item.score}` : ''}\n </span>\n </div>\n ))}\n {items.length > MAX_ROWS ? <p className={styles.panelNote}>+{items.length - MAX_ROWS} more</p> : null}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n}\n","/**\n * routes/verse/autonomy/LocalOnlyPanel.tsx — the local-only switch, and an\n * honest account of what flipping it does.\n *\n * Local-only is a REFUSAL, not a preference (docs/LOCAL-FLEET.md). Cloud\n * engines become unreachable: `provider-client.ts` throws on a cloud provider\n * without `--allow-cloud` and `router.ts` checks `cloudKeyAvailable`. Calling\n * that \"prefer local models\" would be the single most expensive piece of\n * wrong copy in the app, because an operator who reads it as a preference will\n * assume a frontier dispatch is merely unlikely rather than impossible — and\n * the whole point of the switch is to make accidental spend impossible.\n *\n * So the panel does two things a toggle usually does not:\n *\n * 1. It states the refusal in the present tense, in the operator's own\n * words back to them, before the click.\n * 2. It names, from the LIVE seat roster, exactly which of THEIR seats stop\n * working. \"Blocks cloud engines\" is abstract; \"blocks 3 of your 5 seats,\n * here they are\" is a decision an operator can actually make.\n *\n * Turning it ON is confirm-guarded even though it is reversible, because the\n * blast radius is the point. Turning it OFF is not: re-opening a door the\n * operator deliberately closed is their call, and a dialog there would only\n * teach them to click through dialogs.\n */\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { StatusBadge } from '../../../components/primitives/StatusBadge.js';\nimport { ConfirmDialog } from '../../inbox/ConfirmDialog.js';\nimport type { LocalOnlyPolicy, OptionalFleetRead } from './fleet-contract.js';\nimport { localOnlyImpact, localOnlySourceNote, type SeatLike } from './fleet-model.js';\nimport { setLocalOnly } from './fleet-queries.js';\nimport { tidyProse } from './format.js';\nimport type { GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\nexport interface LocalOnlyPanelProps {\n read: OptionalFleetRead<LocalOnlyPolicy> | null;\n /** The live seat roster, so the blast radius is the operator's own number. */\n seats: readonly SeatLike[];\n guard: GuardedAction;\n dispatchEnabled: boolean;\n loading?: boolean;\n}\n\nexport function LocalOnlyPanel({\n read,\n seats,\n guard,\n dispatchEnabled,\n loading = false,\n}: LocalOnlyPanelProps): ReactNode {\n const [confirming, setConfirming] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n\n const policy = read?.value ?? null;\n const impact = localOnlyImpact(policy, seats);\n const sourceNote = localOnlySourceNote(policy);\n const enabled = policy?.enabled ?? false;\n const locked = !dispatchEnabled || guard.readOnly;\n const disabled = locked || guard.busy || !(policy?.mutable ?? false);\n\n const apply = (next: boolean): void => {\n guard.request(\n () => setLocalOnly(next),\n next\n ? 'Turning local-only on requires the dispatch token.'\n : 'Turning local-only off requires the dispatch token.',\n (result) => {\n setNote(result.note ? tidyProse(result.note) : null);\n setConfirming(false);\n },\n );\n };\n\n return (\n <section className={styles.panel} aria-labelledby=\"verse-local-only-title\">\n <div className={styles.panelHead}>\n <h3 id=\"verse-local-only-title\" className={styles.panelTitle}>\n Local only\n </h3>\n <p className={styles.panelNote}>\n While on, cloud engines are unreachable.\n </p>\n </div>\n\n {loading && read === null ? (\n <p className={styles.empty}>Reading the local-only policy…</p>\n ) : read === null || policy === null ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>No local-only source. </span>\n {read?.reason ??\n 'Nothing answered for the local-only policy, so whether cloud engines are reachable cannot be stated here. It is not shown as off — an unread switch is not a switch that is off.'}\n </p>\n ) : (\n <>\n <div className={styles.toggleRow}>\n <span className={styles.toggleState} data-on={enabled ? 'true' : 'false'}>\n <StatusBadge\n status={enabled ? 'local-only-on' : 'local-only-off'}\n tone={enabled ? 'success' : 'neutral'}\n >\n {enabled ? 'on — cloud refused' : 'off — cloud reachable'}\n </StatusBadge>\n </span>\n <button\n type=\"button\"\n className={`${styles.button} ${enabled ? '' : styles.buttonPrimary}`}\n disabled={disabled}\n aria-pressed={enabled}\n onClick={() => (enabled ? apply(false) : setConfirming(true))}\n >\n {enabled ? 'Turn local-only off' : 'Turn local-only on'}\n </button>\n </div>\n\n <p className={styles.policyExplain}>\n {enabled ? (\n <>\n Every non-local engine is <strong>refused at dispatch</strong>. A turn sent to one\n does not fall back, does not queue, and does not run more slowly — it fails with a\n named refusal. Nothing can spend money while this is on.\n </>\n ) : (\n <>\n Cloud engines are reachable. Turning this on makes them <strong>unreachable</strong>: a\n dispatch to one fails outright.\n </>\n )}\n </p>\n\n {sourceNote ? <p className={styles.capHelp}>{sourceNote}</p> : null}\n {!policy.mutable && dispatchEnabled && !guard.readOnly ? (\n <p className={styles.actionNote} role=\"status\">\n Read-only here.\n </p>\n ) : null}\n\n <div className={styles.impact}>\n <h4 className={styles.impactTitle}>\n {enabled ? 'What is blocked right now' : 'What this would block'}\n </h4>\n <p className={styles.impactSummary}>{impact.summary}</p>\n\n {impact.blocked.length > 0 ? (\n <ul className={styles.seatList}>\n {impact.blocked.map((seat) => (\n <li key={seat.id} className={styles.seatRow}>\n <span className={styles.seatEngine} data-engine={seat.engine}>\n {seat.engine}\n </span>\n <span className={styles.seatLabel}>{seat.label}</span>\n <span className={styles.seatRefusal}>{impact.refusalFor(seat.engine)}</span>\n </li>\n ))}\n </ul>\n ) : null}\n\n {impact.allowed.length > 0 ? (\n <p className={styles.capHelp}>\n Still reachable:{' '}\n {impact.allowed.map((s) => s.label).join(', ')}. Local seats cost nothing to run and\n are unaffected by this switch.\n </p>\n ) : (\n <p className={styles.capHelp}>\n No local seat is configured. With local-only on there would be nothing left to\n dispatch to — add a local seat before relying on this switch.\n </p>\n )}\n </div>\n\n {note && !guard.error ? (\n <p className={styles.actionNote} role=\"status\">\n {note}\n </p>\n ) : null}\n\n {guard.error && !confirming ? (\n <p className={styles.capError} role=\"alert\">\n {guard.error}\n </p>\n ) : null}\n\n <ConfirmDialog\n open={confirming}\n onClose={() => setConfirming(false)}\n title=\"Make cloud engines unreachable?\"\n body={\n <>\n While local-only is on, a dispatch to a non-local engine <strong>fails</strong> with a\n named refusal — no fallback to a local seat, no waiting.\n <br />\n <br />\n {impact.blocked.length === 0\n ? 'No seat on this machine is affected today: every configured seat is local.'\n : `${impact.blocked.length} of your ${seats.length} ${seats.length === 1 ? 'seat' : 'seats'} ${\n impact.blocked.length === 1 ? 'stops' : 'stop'\n } working: ${impact.blocked.map((s) => s.label).join(', ')}.`}\n <br />\n <br />\n It is reversible from this panel at any time.\n </>\n }\n confirmLabel=\"Turn local-only on\"\n busy={guard.busy}\n error={guard.error}\n onConfirm={() => apply(true)}\n />\n </>\n )}\n </section>\n );\n}\n","/**\n * routes/verse/autonomy/LocalRuntimePanel.tsx — the serving runtime, which is\n * the thing that makes a local fleet possible at all.\n *\n * Read order, top to bottom, because that is the order the questions arrive:\n * is it up, what is it serving, how many agents can it actually run at once,\n * how full is it, and how do I start or stop it.\n *\n * The third question is the one this panel is really for. A runtime's\n * CONFIGURED slot count and its EFFECTIVE concurrency are different numbers\n * whenever the runtime refuses to batch, and printing the configured one is\n * how four agents become a four-deep queue that reads as slowness. So the big\n * number on this panel is `capacity.effectiveConcurrency` — never\n * `slotsTotal` — and when they disagree the panel says which is which and\n * shows the measurement behind the claim (docs/LOCAL-FLEET.md).\n *\n * State is never carried by colour alone: every tone is paired with a word\n * (StatusBadge) and a sentence.\n */\nimport { useCallback, useState, useSyncExternalStore } from 'react';\nimport type { ReactNode } from 'react';\nimport { getQuerySnapshot, subscribeQuery } from '../../../data/cache.js';\nimport { StatusBadge, type Tone } from '../../../components/primitives/StatusBadge.js';\nimport { Meter } from '../../../components/primitives/Meter.js';\nimport { ConfirmDialog } from '../../inbox/ConfirmDialog.js';\nimport { formatContextWindow } from '../verse-model.js';\nimport { asClause, asSentence, tidyProse, UNKNOWN } from './format.js';\nimport type {\n FleetSnapshot,\n OptionalFleetRead,\n RuntimeAction,\n ServingRuntimeSnapshot,\n} from './fleet-contract.js';\nimport {\n CONCURRENCY_EVIDENCE,\n formatUptime,\n runtimeCapacity,\n runtimeLabel,\n slotUtilisation,\n type RuntimeCapacity,\n} from './fleet-model.js';\nimport { runRuntimeAction, VERSE_FLEET_KEY } from './fleet-queries.js';\nimport { useNow } from './use-ticker.js';\nimport type { GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\nconst STATE_TONE: Record<ServingRuntimeSnapshot['state'], Tone> = {\n running: 'success',\n starting: 'running',\n stopping: 'running',\n stopped: 'neutral',\n unknown: 'unknown',\n};\n\nconst CAPACITY_TONE: Record<RuntimeCapacity['tone'], Tone> = {\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n neutral: 'neutral',\n unknown: 'unknown',\n};\n\nexport interface LocalRuntimePanelProps {\n read: OptionalFleetRead<ServingRuntimeSnapshot> | null;\n guard: GuardedAction;\n dispatchEnabled: boolean;\n /** Shown while the read is in flight and nothing has arrived yet. */\n loading?: boolean;\n /**\n * The fleet read, for the lane-cap line. Omitted = the panel peeks the\n * app-wide `/api/verse/fleet` cache entry (see `useCachedFleetRead`).\n */\n fleet?: OptionalFleetRead<FleetSnapshot> | null;\n}\n\n// ---------------------------------------------------------------------------\n// The lane cap (V3.10, B-U6)\n// ---------------------------------------------------------------------------\n//\n// WHY THIS PANEL SAYS IT. The big number above is what the RUNTIME can run in\n// parallel. Since 3.10 the fleet may run FEWER than that on a given tick: the\n// tick's `laneCaps.local` (Mason present → 2, a Leader lane decision, the\n// budget, the grant) lowers `deriveLocalFleetConcurrency`'s answer and names\n// the limiter 'lane-cap'. Without a line here, \"4 agents in parallel\" next to\n// a fleet running two reads as a slow or wedged fleet — the exact confusion\n// the effective-vs-configured headline exists to prevent.\n//\n// The wire carries it only as a sentence: `projectFleetSnapshot`\n// (core/daemon/local-fleet.ts) pushes LANE_CAP_NOTE_PREFIX + the limiter's\n// reason into FleetSnapshot.notes; there is no structured limiter field on\n// the route. The prefix is mirrored here and pinned against the real\n// projector in fleet-panels.test.tsx, so a reworded note fails a test instead\n// of silently hiding this line.\n\n/** What `projectFleetSnapshot` prefixes a binding lane-cap note with. */\nexport const LANE_CAP_NOTE_PREFIX = \"bounded by this tick's lane cap, not by slots: \";\n/** `deriveLocalFleetConcurrency`'s reason when the cap is 0 (lane off). */\nconst LANE_OFF_RE = /^local lane is off this tick: (.+)$/s;\n/** `deriveLocalFleetConcurrency`'s reason when the cap binds below the slots. */\nconst LANE_BELOW_RE = /^lane cap (\\d+) is below (\\d+) \\([^)]*\\): (.+)$/s;\n\nexport interface LaneCapView {\n /** true = no local agent this tick (cap 0). */\n off: boolean;\n /** The cap in force; null when the lane is off or the number is not stated. */\n limit: number | null;\n /** The concurrency the runtime would otherwise have allowed; null when not stated. */\n uncapped: number | null;\n /** Why — the tick's own sentence (presence, Leader, budget, grant). */\n why: string;\n}\n\n/** The binding lane cap from the fleet's notes, or null when no lane cap binds. */\nexport function laneCapFromNotes(notes: readonly string[] | null | undefined): LaneCapView | null {\n const note = notes?.find((n) => typeof n === 'string' && n.startsWith(LANE_CAP_NOTE_PREFIX));\n if (!note) return null;\n const reason = note.slice(LANE_CAP_NOTE_PREFIX.length).trim();\n const off = LANE_OFF_RE.exec(reason);\n // `why` is embedded mid-sentence (\"…this tick: <why>.\"), so it is carried as\n // a clause: no closing period of its own, instants read as local time.\n if (off) return { off: true, limit: null, uncapped: null, why: asClause(tidyProse(off[1]!)) };\n const below = LANE_BELOW_RE.exec(reason);\n if (below) {\n return { off: false, limit: Number(below[1]), uncapped: Number(below[2]), why: asClause(tidyProse(below[3]!)) };\n }\n // A reason in a shape this client does not know: still say a lane cap binds,\n // in the server's words, rather than dropping the fact.\n return { off: false, limit: null, uncapped: null, why: asClause(tidyProse(reason)) };\n}\n\n/**\n * The fleet read as the app-wide cache holds it — WITHOUT fetching. The Fleet\n * tab's Advanced view already reads and polls `/api/verse/fleet` for the\n * FleetPanel beside this one; a second subscriber that fetched would only add\n * requests, and one mounted elsewhere (a test, a future surface) must not\n * start polling a route on its own.\n */\nfunction useCachedFleetRead(): OptionalFleetRead<FleetSnapshot> | null {\n const entry = useSyncExternalStore(\n useCallback((listener: () => void) => subscribeQuery(VERSE_FLEET_KEY, listener), []),\n () => getQuerySnapshot<OptionalFleetRead<FleetSnapshot>>(VERSE_FLEET_KEY),\n () => getQuerySnapshot<OptionalFleetRead<FleetSnapshot>>(VERSE_FLEET_KEY),\n );\n return entry.data ?? null;\n}\n\nexport function LocalRuntimePanel({\n read,\n guard,\n dispatchEnabled,\n loading = false,\n fleet: fleetProp,\n}: LocalRuntimePanelProps): ReactNode {\n const now = useNow(1000);\n const cachedFleet = useCachedFleetRead();\n const fleet = fleetProp === undefined ? cachedFleet : fleetProp;\n const laneCap = laneCapFromNotes(fleet?.value?.notes);\n // The daemon writes the snapshot when it ticks; an aged one is last tick's cap, not this one's.\n const laneCapStale = fleet?.value?.notes.some((n) => n.startsWith('snapshot is ')) ?? false;\n const [confirmStop, setConfirmStop] = useState<RuntimeAction | null>(null);\n const [note, setNote] = useState<string | null>(null);\n\n const runtime = read?.value ?? null;\n const capacity = runtimeCapacity(runtime);\n const utilisation = slotUtilisation(runtime?.slotsBusy ?? null, capacity.effectiveConcurrency);\n const locked = !dispatchEnabled || guard.readOnly;\n const supervised = runtime?.supervised ?? false;\n const disabled = locked || guard.busy || !supervised;\n const running = runtime?.state === 'running';\n\n const act = (action: RuntimeAction, reason: string): void => {\n guard.request(\n () => runRuntimeAction(action),\n reason,\n (result) => {\n setNote(result.note ? tidyProse(result.note) : null);\n setConfirmStop(null);\n },\n );\n };\n\n return (\n <section className={styles.panel} aria-labelledby=\"verse-runtime-title\">\n <div className={styles.panelHead}>\n <h3 id=\"verse-runtime-title\" className={styles.panelTitle}>\n Serving runtime\n </h3>\n <p className={styles.panelNote}>\n The process that answers local agent turns. Without it, a local fleet has nowhere to run.\n </p>\n </div>\n\n {loading && read === null ? (\n <p className={styles.empty}>Reading the serving runtime…</p>\n ) : read === null || (!read.available && read.value === null) ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>No serving-runtime source. </span>\n {read?.reason ??\n 'Serving runtime unavailable.'}\n </p>\n ) : runtime === null ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>Unreadable reading. </span>\n {read.reason ?? 'Unrecognized response — update Ashlr.'}\n </p>\n ) : (\n <>\n <div className={styles.runtimeTop}>\n <span className={styles.runtimeState} data-state={runtime.state}>\n <span className={styles.runDot} aria-hidden=\"true\" />\n <span className={styles.runtimeStateText}>\n {runtimeLabel(runtime.kind)}\n {' · '}\n {runtime.state === 'unknown' ? 'state unknown' : runtime.state}\n </span>\n </span>\n <StatusBadge status={runtime.state} tone={STATE_TONE[runtime.state]}>\n {runtime.state === 'running' ? 'serving' : runtime.state}\n </StatusBadge>\n {runtime.reason ? (\n <code className={styles.evidenceCode}>{tidyProse(runtime.reason)}</code>\n ) : null}\n </div>\n\n <div className={styles.facts}>\n <Fact label=\"Model\" value={runtime.model ?? UNKNOWN} wide />\n <Fact label=\"Endpoint\" value={runtime.endpoint ?? UNKNOWN} mono />\n <Fact label=\"Context\" value={formatContextWindow(runtime.contextTokens)} />\n <Fact\n label=\"Slots configured\"\n value={runtime.slotsTotal === null ? UNKNOWN : String(runtime.slotsTotal)}\n />\n <Fact\n label=\"Uptime\"\n value={running ? formatUptime(runtime.startedAt, now) : 'not running'}\n />\n </div>\n\n {/* The headline number. Deliberately the EFFECTIVE concurrency, so a\n runtime that will not batch cannot advertise its slot count. */}\n <div className={styles.capacityBlock} data-verdict={capacity.verdict}>\n <div className={styles.capacityHead}>\n <span className={styles.capacityBig}>\n {capacity.effectiveConcurrency === null ? UNKNOWN : capacity.effectiveConcurrency}\n </span>\n <div className={styles.capacityWords}>\n <span className={styles.capacityHeadline}>\n {capacity.headline}\n <StatusBadge status={capacity.verdict} tone={CAPACITY_TONE[capacity.tone]}>\n {capacity.verdict === 'batched'\n ? 'batches'\n : capacity.verdict === 'serialized'\n ? 'serializes'\n : capacity.verdict === 'offline'\n ? 'not serving'\n : 'unconfirmed'}\n </StatusBadge>\n </span>\n <span className={styles.capacityDetail}>{capacity.detail}</span>\n </div>\n </div>\n\n {laneCap ? (\n <p className={styles.capacityDetail} data-limiter=\"lane-cap\" role=\"note\">\n <StatusBadge status=\"lane-cap\" tone={laneCap.off ? 'neutral' : 'warning'}>\n {laneCap.off ? 'lane off' : 'lane-capped'}\n </StatusBadge>{' '}\n {laneCap.off\n ? `The fleet runs no local agent ${laneCapStale ? 'as of its last tick' : 'this tick'}: ${asSentence(laneCap.why)}`\n : `The fleet runs ${laneCap.limit === null ? 'fewer' : `at most ${laneCap.limit}`} local ${laneCap.limit === 1 ? 'agent' : 'agents'} ${laneCapStale ? 'as of its last tick' : 'this tick'}${laneCap.uncapped === null ? '' : `, not ${laneCap.uncapped}`} — a lane cap is tighter than this runtime: ${asSentence(laneCap.why)}`}\n </p>\n ) : null}\n\n {capacity.overstated ? (\n <ConcurrencyEvidence\n configured={capacity.configuredSlots}\n refusal={runtime.parallel.refusal}\n />\n ) : null}\n </div>\n\n <div className={styles.utilisation}>\n <Meter\n value={utilisation.busy}\n max={utilisation.total}\n label=\"Slots in use\"\n valueText={\n utilisation.percent === null\n ? 'unknown'\n : `${utilisation.busy} / ${utilisation.total}`\n }\n tone={utilisation.saturated ? 'warning' : undefined}\n />\n <p className={styles.capHelp}>{utilisation.label}</p>\n </div>\n\n <div className={styles.controls}>\n <button\n type=\"button\"\n className={`${styles.button} ${styles.buttonPrimary}`}\n disabled={disabled || running}\n onClick={() => act('start', 'Starting the serving runtime requires the dispatch token.')}\n >\n Start runtime\n </button>\n <button\n type=\"button\"\n className={styles.button}\n disabled={disabled || !running}\n onClick={() => setConfirmStop('stop')}\n >\n Stop runtime\n </button>\n <button\n type=\"button\"\n className={styles.button}\n disabled={disabled}\n onClick={() => setConfirmStop('restart')}\n >\n Restart runtime\n </button>\n </div>\n\n {!supervised ? (\n <p className={styles.actionNote} role=\"status\">\n Managed outside the hub (a login item or terminal owns it) — start and stop it there.\n </p>\n ) : null}\n\n {note && !guard.error ? (\n <p className={styles.actionNote} role=\"status\">\n {note}\n </p>\n ) : null}\n\n {guard.error && confirmStop === null ? (\n <p className={styles.capError} role=\"alert\">\n {guard.error}\n </p>\n ) : null}\n\n <ConfirmDialog\n open={confirmStop === 'stop'}\n onClose={() => setConfirmStop(null)}\n title=\"Stop the serving runtime?\"\n body={\n <>\n Every local agent turn in flight is answered by this process. Stopping it ends those\n turns — nothing in flight is rolled back, and no local seat can take a new turn until\n it is running again.\n <br />\n <br />\n This does not touch the autonomous loop, the kill switch, or your own write tools.\n </>\n }\n confirmLabel=\"Stop runtime\"\n destructive\n busy={guard.busy}\n error={guard.error}\n onConfirm={() => act('stop', 'Stopping the serving runtime requires the dispatch token.')}\n />\n\n <ConfirmDialog\n open={confirmStop === 'restart'}\n onClose={() => setConfirmStop(null)}\n title=\"Restart the serving runtime?\"\n body={\n <>\n The process is stopped and started again. Turns in flight end with it, and the first\n turn afterwards pays the model load — on a 27 GB model that is not instant.\n <br />\n <br />\n Restart is the way to pick up a changed slot count or context size, since both are\n fixed at launch.\n </>\n }\n confirmLabel=\"Restart runtime\"\n destructive\n busy={guard.busy}\n error={guard.error}\n onConfirm={() =>\n act('restart', 'Restarting the serving runtime requires the dispatch token.')\n }\n />\n </>\n )}\n </section>\n );\n}\n\n/**\n * The measurement behind \"this runtime will not honour that slot count\".\n *\n * Shown only when the two numbers actually disagree, because an operator on a\n * runtime that batches does not need to be argued with. It is presented as\n * measured data with its per-request times, not as a claim: the stagger in one\n * row and the dead heat in the other are the whole argument.\n */\nfunction ConcurrencyEvidence({\n configured,\n refusal,\n}: {\n configured: number | null;\n refusal: string | null;\n}): ReactNode {\n return (\n <div className={styles.evidence}>\n <p className={styles.evidenceLead}>\n {configured === null\n ? 'The configured slot count is not a concurrency on this runtime.'\n : `${configured} slots are configured, but this runtime will not run them in parallel. Measured on this machine, four concurrent requests to the same model:`}\n </p>\n {/* Four columns of numerals do not fit a 900px window beside the rest\n of the cockpit, so the table gets its own scroll container rather\n than forcing the page body to scroll sideways. */}\n <div className={styles.evidenceScroll}>\n <table className={styles.evidenceTable}>\n <caption className={styles.srOnly}>\n Four concurrent requests to the same Qwen3.8 model file, per-runtime completion times in\n seconds\n </caption>\n <thead>\n <tr>\n <th scope=\"col\">Runtime</th>\n <th scope=\"col\">Per request (s)</th>\n <th scope=\"col\">Wall (s)</th>\n <th scope=\"col\">Finished</th>\n </tr>\n </thead>\n <tbody>\n {CONCURRENCY_EVIDENCE.map((row) => (\n <tr key={row.runtime}>\n <th scope=\"row\">{row.runtime}</th>\n <td className={styles.evidenceNums}>{row.perRequestSeconds.join(' · ')}</td>\n <td className={styles.evidenceNums}>{row.wallSeconds.toFixed(1)}</td>\n <td>{row.verdict}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {refusal ? (\n <p className={styles.capHelp}>\n The runtime&rsquo;s own words: <code className={styles.evidenceCode}>{refusal}</code>\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction Fact({\n label,\n value,\n mono = false,\n wide = false,\n}: {\n label: string;\n value: string;\n mono?: boolean;\n wide?: boolean;\n}): ReactNode {\n return (\n <div className={`${styles.fact} ${wide ? styles.factWide : ''}`}>\n <span className={styles.factLabel}>{label}</span>\n {/* A mono or wide value can be cut with an ellipsis, so it carries itself in full as a tooltip. */}\n <span className={`${styles.factValue} ${mono ? styles.factMono : ''}`} title={mono || wide ? value : undefined}>\n {value}\n </span>\n </div>\n );\n}\n","/**\n * routes/verse/autonomy/overnight.module.css — the Overnight panel's own\n * layout. Everything shared (panel frame, buttons, empty/error states, the\n * action note) comes from autonomy.module.css, which this panel imports\n * alongside this sheet; only the shapes that exist nowhere else live here.\n *\n * Same rules as the rest of the cockpit (docs/VERSE-DESIGN-V2.md): monochrome,\n * hairlines instead of cards, no shadows, tight radii, the display face with\n * tabular figures on every numeral, colour only where it carries meaning and\n * always paired with a word.\n *\n * No literal px for anything that should scale. The Display-size setting\n * multiplies the type, spacing, density and control ramps together\n * (design/ui-scale.test.ts), so every measure here is a token or a `calc()`\n * over one — including the `ch`/`em` measures, which follow the font size by\n * definition. The one exception is the 2px engine-marker-style rule on\n * `.authorisation`, which is a hairline accent: a hairline is one device pixel\n * at every display size, exactly as tokens.css keeps `--space-px` at 1px.\n */\n\n/* --- armed: the halt first, then everything there is to read ------------- */\n.armedTop {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n}\n\n.armedState {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.haltRow {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n}\n\n.haltNote {\n margin-top: var(--space-3);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n max-width: 68ch;\n}\n\n/* The heavier control, named rather than duplicated. Quiet on purpose: it is\n a signpost, not a second emergency stop. */\n.heavier {\n margin-top: var(--space-4);\n padding-top: var(--space-4);\n border-top: 1px solid var(--border-subtle);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n max-width: 68ch;\n}\n\n.heavier strong {\n color: var(--text-secondary);\n font-weight: var(--font-weight-semibold);\n}\n\n/* --- what it is doing right now ----------------------------------------- */\n.facts {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-3) var(--space-5);\n margin: var(--space-5) 0 0;\n}\n\n.fact {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.factWide {\n flex: 1 1 26ch;\n}\n\n.factLabel {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n.factValue {\n margin: 0;\n font-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.factMono {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n}\n\n/* --- how far to the stop condition -------------------------------------- */\n.stop {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin-top: var(--space-5);\n padding-top: var(--space-4);\n border-top: 1px solid var(--border-subtle);\n}\n\n.stopHead {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--space-2);\n}\n\n.stopHeadline {\n font-family: var(--font-display);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n}\n\n.stopRemaining {\n font-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n white-space: nowrap;\n}\n\n.stopDetail {\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n max-width: 68ch;\n}\n\n/* --- merged / discarded -------------------------------------------------- */\n.ledger {\n margin-top: var(--space-5);\n}\n\n.ledgerTitle {\n display: flex;\n align-items: baseline;\n gap: var(--space-2);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n font-weight: var(--font-weight-semibold);\n color: var(--text-tertiary);\n margin-bottom: var(--space-2);\n}\n\n.ledgerCount {\n font-variant-numeric: tabular-nums;\n letter-spacing: normal;\n color: var(--text-secondary);\n}\n\n.ledgerEmpty {\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n}\n\n.ledgerList {\n display: flex;\n flex-direction: column;\n list-style: none;\n}\n\n.ledgerRow {\n display: grid;\n grid-template-columns: minmax(8ch, auto) minmax(0, 1fr);\n gap: var(--space-1) var(--space-3);\n align-items: baseline;\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--border-subtle);\n transition: background-color var(--duration-fast) var(--ease-standard);\n}\n\n.ledgerRow:hover {\n background: var(--bg-hover);\n}\n\n.ledgerRepo {\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n color: var(--text-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ledgerChange {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n/* The reason a change was thrown away, and the stamp. Column 2 so it sits\n under the change it belongs to rather than under the repo name. */\n.ledgerMeta {\n grid-column: 2;\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n overflow-wrap: anywhere;\n}\n\n/* --- the arm form -------------------------------------------------------- */\n.form {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: var(--space-3) var(--space-5);\n}\n\n.field {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.fieldLabel {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n.input {\n min-height: var(--control-h);\n min-width: 10ch;\n padding: 0 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-family: var(--font-display);\n font-variant-numeric: tabular-nums;\n font-size: var(--text-sm-size);\n}\n\n.input:focus-visible {\n border-color: var(--border-focus);\n}\n\n.input:disabled {\n color: var(--text-disabled);\n background: var(--bg-canvas);\n cursor: not-allowed;\n}\n\n.rulePreview {\n margin-top: var(--space-3);\n font-family: var(--font-display);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n}\n\n.armRow {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n margin-top: var(--space-4);\n}\n\n/* --- what you are authorising ------------------------------------------- */\n/* Not an alert. This is the designed behaviour, stated plainly, so it wears\n body copy and a neutral 2px marker — the same identity marker the seat rows\n use — rather than the danger ground `.error` carries. */\n.authorisation {\n margin-top: var(--space-5);\n padding: var(--space-3) var(--space-4);\n border-left: 2px solid var(--border-strong);\n background: var(--bg-canvas);\n border-radius: 0 var(--radius-sm) var(--radius-sm) 0;\n}\n\n.authorisationTitle {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n letter-spacing: var(--tracking-label, 0.06em);\n text-transform: uppercase;\n font-weight: var(--font-weight-semibold);\n color: var(--text-tertiary);\n margin-bottom: var(--space-2);\n}\n\n.authorisationBody {\n font-size: var(--text-sm-size);\n line-height: var(--text-base-line);\n color: var(--text-secondary);\n max-width: 68ch;\n}\n\n.authorisationBody strong {\n color: var(--text-primary);\n font-weight: var(--font-weight-semibold);\n}\n\n.authorisationCaveat {\n margin-top: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--status-warning-fg);\n max-width: 68ch;\n}\n\n.authorisationCaveat strong {\n font-weight: var(--font-weight-semibold);\n}\n\n/* Guarded the way the rest of the cockpit guards motion: appearance-store.ts\n writes data-motion=\"full\" so an operator can opt back in to animation over\n the OS preference. Nothing here animates except this one hover tint, and\n under reduced motion it simply switches instantly. */\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion='full']) .ledgerRow {\n transition: none;\n }\n}\n","/**\n * routes/verse/autonomy/OvernightPanel.tsx — the control the operator arms\n * when they leave the computer, so local models keep working the enrolled\n * repos while they are asleep.\n *\n * It has to answer four things, and it answers them in this order because\n * that is the order they are asked at 11pm and again at 7am:\n *\n * 1. **What am I authorising?** Stated in full, always visible, above the\n * Arm button — never behind a dialog. While a run is armed it merges to\n * master on its own behind a test/lint/typecheck gate. That is the\n * designed behaviour and the operator's considered choice, so it is\n * written as a description, not a warning: no red, no destructive\n * styling, no \"are you sure\". It is also not hidden. A person arming\n * this should be able to read exactly what they are agreeing to without\n * clicking anything, which is strictly more than a confirm dialog\n * achieves — DaemonControls already makes this argument for Pause\n * (\"a dialog here would only teach the operator to click through\n * dialogs\"), and it applies with more force to a control that is used\n * once a night.\n *\n * 2. **How does it stop?** Exactly one rule per run — until paused, at a\n * wall-clock time, or after N iterations — chosen in a radiogroup, so\n * the choice has single-selection semantics for a screen reader and the\n * form cannot express two rules at once.\n *\n * 3. **What is it doing right now?** Which repo, what activity, how long it\n * has been running, how far it is from its stop condition, what it has\n * merged, what it has discarded and why.\n *\n * 4. **How do I stop it right now?** With PAUSE — `~/.ashlr/daemon.paused`\n * via `runDaemonAction('pause')`. The halt sits at the TOP of the armed\n * block, before any of the reading material, so it is never below the\n * fold.\n *\n * WHY THE HALT IS PAUSE AND NOT \"STOP LOOP\". `stopDaemon()` is literally\n * `setKill(true)` (core/daemon/loop.ts), i.e. the ordinary stop engages the\n * SAME global sentinel as the emergency stop and takes the agent's own write\n * tools down with it. Wiring a woken-at-3am operator's first instinct to that\n * would mean the cheapest reaction to \"it is doing something I do not like\"\n * has the widest blast radius in the app. Pause halts autonomous dispatch and\n * nothing else, and undoes in one click.\n *\n * WHY THERE IS NO EMERGENCY STOP BUTTON HERE. It is one panel up, in\n * Controls, under a rule and danger-styled, and a second copy of it would\n * both duplicate that ladder and put two identically-named buttons on one\n * screen. It is named in prose instead, with its true blast radius, so it\n * stays reachable and stays visibly heavier than the halt this panel offers.\n *\n * WHY DISARM IS NOT THE HALT EITHER. Disarming stops the ARRANGEMENT; the run\n * already in flight keeps going. Two different questions, two different\n * controls, and the panel says which is which at the point of the click.\n *\n * THE BACKEND DOES NOT EXIST YET. `GET/POST /api/verse/overnight` are being\n * written in parallel by other owners, so an absent route is a designed state\n * of this panel (\"not available in this build\"), never a spinner that never\n * resolves and never a crash. See overnight-contract.ts for the shapes this\n * is coded against.\n */\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Meter } from '../../../components/primitives/Meter.js';\nimport { Segmented } from '../../../components/primitives/Segmented.js';\nimport { StatusBadge } from '../../../components/primitives/StatusBadge.js';\nimport { Tooltip } from '../../../components/primitives/Tooltip.js';\nimport { runDaemonAction } from './control-queries.js';\nimport type { VerseControlSnapshot } from './control-types.js';\nimport type { OptionalFleetRead } from './fleet-contract.js';\nimport { asClause, formatStamp, repoDisplayName, tidyProse, UNKNOWN } from './format.js';\nimport type { OvernightStatus, OvernightStopRule, OvernightStopRuleKind } from './overnight-contract.js';\nimport { armOvernight, disarmOvernight } from './overnight-queries.js';\nimport {\n ITERATIONS_MAX,\n ITERATIONS_MIN,\n describeStopRule,\n formatRunElapsed,\n gateChecks,\n gateUnstated,\n joinPhrase,\n resolveStopAt,\n stopProgress,\n} from './overnight-model.js';\nimport { useNow } from './use-ticker.js';\nimport type { GuardedAction } from './use-guarded-action.js';\nimport autonomy from './autonomy.module.css';\nimport styles from './overnight.module.css';\n\nconst STOP_OPTIONS: ReadonlyArray<{ value: OvernightStopRuleKind; label: string }> = [\n { value: 'until-paused', label: 'Until I pause it' },\n { value: 'at-time', label: 'At a time' },\n { value: 'after-iterations', label: 'After N iterations' },\n];\n\n/** A sensible 7am, so the common case is one click away from correct. */\nconst DEFAULT_STOP_TIME = '07:00';\nconst DEFAULT_ITERATIONS = '20';\n\nexport interface OvernightPanelProps {\n read: OptionalFleetRead<OvernightStatus> | null;\n /** For the pause sentinel and the enrolled-repo count — the same snapshot\n * every other panel here reads, so this one cannot disagree with them. */\n snapshot: VerseControlSnapshot;\n guard: GuardedAction;\n dispatchEnabled: boolean;\n loading?: boolean;\n}\n\nexport function OvernightPanel({\n read,\n snapshot,\n guard,\n dispatchEnabled,\n loading = false,\n}: OvernightPanelProps): ReactNode {\n const now = useNow(1000);\n const [kind, setKind] = useState<OvernightStopRuleKind>('until-paused');\n const [timeValue, setTimeValue] = useState(DEFAULT_STOP_TIME);\n const [iterationsValue, setIterationsValue] = useState(DEFAULT_ITERATIONS);\n const [formError, setFormError] = useState<string | null>(null);\n const [note, setNoteRaw] = useState<string | null>(null);\n // Every action note is the server's own sentence: shown verbatim, except\n // that an ISO instant in it is read as local time.\n const setNote = (next: string | null): void => setNoteRaw(next ? tidyProse(next) : null);\n\n const status = read?.value ?? null;\n const run = status?.run ?? null;\n\n // The pause sentinel has three states and `unknown` FAILS SAFE as paused —\n // the daemon treats an unreadable sentinel as paused, so this must too\n // rather than drawing a running loop over a signal nobody could read.\n const pauseState = snapshot.pause?.state ?? 'unknown';\n const paused = pauseState !== 'running';\n const pauseUnknown = pauseState === 'unknown';\n const killed = snapshot.killSwitch?.state === 'active';\n\n const locked = !dispatchEnabled || guard.readOnly;\n const disabled = locked || guard.busy;\n\n const repos = status?.repos ?? snapshot.scope?.repos?.length ?? null;\n // Counted APART from repos: a mirror is the fleet's clone of a repo, not\n // another repo, so the sentence never adds the two (overnight-contract.ts).\n const mirrors = status?.mirrors;\n const gate = status?.gate ?? null;\n const checks = gateChecks(gate);\n const unstated = gateUnstated(gate);\n const branch = gate?.branch ?? 'master';\n\n const rule = buildRule(kind, timeValue, iterationsValue);\n const progress = stopProgress(run?.stopRule ?? null, run, now);\n\n // Only the reasons the button is actually DISABLED for. An incomplete stop\n // rule leaves the button live — clicking it says what is missing, which is\n // more use than a dead control — and the visible preview line already says\n // what to enter, so a tooltip repeating it would be noise.\n const armDisabledReason = locked\n ? 'This server runs without dispatch, so an overnight run cannot be armed from here.'\n : killed\n ? 'Release the emergency stop before arming an overnight run.'\n : '';\n\n const halt = (): void => {\n setFormError(null);\n guard.request(\n () => runDaemonAction('pause'),\n 'Pausing autonomous dispatch requires the dispatch token.',\n (result) => setNote(result.note || null),\n );\n };\n\n const resume = (): void => {\n setFormError(null);\n guard.request(\n () => runDaemonAction('resume'),\n 'Resuming autonomous dispatch requires the dispatch token.',\n (result) => setNote(result.note || null),\n );\n };\n\n const arm = (): void => {\n if (rule === null) {\n setFormError(\n kind === 'at-time'\n ? 'Enter a stop time as HH:MM before arming.'\n : `Enter a number of iterations between ${ITERATIONS_MIN} and ${ITERATIONS_MAX} before arming.`,\n );\n return;\n }\n setFormError(null);\n guard.request(\n () => armOvernight(rule),\n 'Arming an overnight run requires the dispatch token.',\n (result) => setNote(result.note || null),\n );\n };\n\n const disarm = (): void => {\n setFormError(null);\n guard.request(\n () => disarmOvernight(),\n 'Disarming the overnight run requires the dispatch token.',\n (result) => setNote(result.note || null),\n );\n };\n\n /** The permanent, unavoidable statement of what an armed run does. */\n const authorisation = (\n <div className={styles.authorisation}>\n <h4 className={styles.authorisationTitle}>What it does while you sleep</h4>\n <p className={styles.authorisationBody}>\n Local models work through{' '}\n <strong>{repos === null ? 'your enrolled repositories' : `your ${repos} enrolled ${repos === 1 ? 'repository' : 'repositories'}`}</strong>{' '}\n unattended. Each change it writes is put through the gate\n {checks.length > 0 ? (\n <>\n {' '}— <strong>{joinPhrase(checks)}</strong> must pass\n </>\n ) : null}\n . A change that passes the gate is <strong>merged to {branch} without asking you</strong>. A\n change that fails is discarded and the repository is left as it was.\n </p>\n {typeof mirrors === 'number' && mirrors > 0 ? (\n <p className={styles.authorisationBody} data-testid=\"overnight-mirrors\">\n Fleet mirrors: <strong>{mirrors}</strong> — the standing fleet&rsquo;s own{' '}\n {mirrors === 1 ? 'clone' : 'clones'} of enrolled repositories, counted apart. A mirror is not an\n additional repository.\n </p>\n ) : mirrors === null && status?.armed ? (\n <p className={styles.authorisationCaveat} data-testid=\"overnight-mirrors\">\n Fleet mirrors were not recorded for this run, so how many the standing fleet works in is unknown.\n </p>\n ) : null}\n {unstated.length > 0 ? (\n <p className={styles.authorisationCaveat}>\n Not reported whether {joinPhrase(unstated)}{' '}\n {unstated.length === 1 ? 'runs' : 'run'} in the gate — don&apos;t count {unstated.length === 1 ? 'it' : 'them'} as passing.\n </p>\n ) : null}\n {gate?.autoMerge === false ? (\n <p className={styles.authorisationCaveat}>\n This build reports that passing changes are <strong>not</strong> merged automatically — they\n wait for you in Approvals.\n </p>\n ) : null}\n </div>\n );\n\n return (\n <section className={autonomy.panel} aria-labelledby=\"verse-overnight-title\">\n <div className={autonomy.panelHead}>\n <h3 id=\"verse-overnight-title\" className={autonomy.panelTitle}>\n Overnight\n </h3>\n <p className={autonomy.panelNote}>\n Arm this when you walk away. One stop rule per run; pause halts it at any time.\n </p>\n </div>\n\n {loading && read === null ? (\n <p className={autonomy.empty}>Reading the overnight lane…</p>\n ) : read === null || (!read.available && read.value === null) ? (\n <p className={autonomy.empty}>\n <span className={autonomy.emptyStrong}>Not available in this build. </span>\n {read?.reason ??\n 'Nothing answered for the overnight lane, so a run cannot be armed or reported here. Nothing is running because of this panel.'}\n </p>\n ) : status === null ? (\n <p className={autonomy.empty}>\n <span className={autonomy.emptyStrong}>Unreadable reading. </span>\n {read.reason ??\n 'Unrecognized response — update Ashlr.'}\n </p>\n ) : status.armed ? (\n <>\n {/* The halt comes FIRST, before anything there is to read. */}\n <div className={styles.armedTop}>\n <span className={styles.armedState}>\n <StatusBadge status={paused ? 'paused' : 'running'} tone={paused ? 'warning' : 'running'}>\n {paused ? 'armed — dispatch paused' : 'armed — running'}\n </StatusBadge>\n </span>\n <div className={styles.haltRow}>\n {paused ? (\n <button\n type=\"button\"\n className={`${autonomy.button} ${autonomy.buttonPrimary}`}\n disabled={disabled}\n onClick={resume}\n >\n Resume now\n </button>\n ) : (\n <button\n type=\"button\"\n className={`${autonomy.button} ${autonomy.buttonPrimary}`}\n disabled={disabled}\n onClick={halt}\n >\n Pause now\n </button>\n )}\n <button type=\"button\" className={autonomy.button} disabled={disabled} onClick={disarm}>\n Disarm\n </button>\n </div>\n </div>\n\n <p className={styles.haltNote}>\n {paused\n ? pauseUnknown\n ? 'Treated as paused — the pause sentinel is unreadable. Nothing is being dispatched.'\n : 'Autonomous dispatch is paused. The loop parks between iterations; your own write tools are unaffected and the global kill switch is not engaged.'\n : 'Pause halts autonomous dispatch and nothing else — it undoes in one click. Disarm stops the next run from starting but leaves this one going.'}\n </p>\n\n <dl className={styles.facts}>\n <Fact label=\"Doing now\" value={run?.activity ? tidyProse(run.activity) : UNKNOWN} wide />\n {/* The checkout's folder name; the full path is the tooltip. */}\n <Fact\n label=\"Repository\"\n value={run?.repo ? repoDisplayName(run.repo) : UNKNOWN}\n title={run?.repo ?? undefined}\n mono\n />\n <Fact label=\"Running for\" value={formatRunElapsed(run?.startedAt, now)} />\n </dl>\n\n <div className={styles.stop}>\n <div className={styles.stopHead}>\n <span className={styles.stopHeadline}>{progress.headline}</span>\n <span className={styles.stopRemaining}>{progress.remaining}</span>\n </div>\n {progress.percent === null ? (\n <p className={styles.stopDetail}>\n No progress is drawn for an open-ended run: there is no finish line to draw it\n against.\n </p>\n ) : (\n <Meter\n value={progress.percent}\n max={100}\n variant=\"line\"\n tone={progress.reached ? 'warning' : 'accent'}\n aria-label=\"Progress toward the stop condition\"\n />\n )}\n </div>\n\n <Ledger\n title=\"Merged\"\n empty=\"Nothing merged yet. Changes that pass the gate land here as they merge.\"\n rows={(run?.merged ?? []).map((m) => ({\n id: m.id,\n repo: m.repo,\n title: m.title,\n // A short sha, like every git surface; the full one is the tooltip.\n meta: metaLine(m.commit ? m.commit.slice(0, 7) : null, m.at),\n metaTitle: m.commit ?? undefined,\n }))}\n />\n <Ledger\n title=\"Discarded\"\n empty=\"Nothing discarded yet. A change that fails the gate is listed here with the reason.\"\n rows={(run?.discarded ?? []).map((d) => ({\n id: d.id,\n repo: d.repo,\n title: d.title,\n // The reason is a sentence of its own, often several joined by\n // the server: tidied so it never reads \".;\" or \". ·\".\n meta: metaLine(asClause(tidyProse(d.reason)), d.at),\n }))}\n />\n\n {authorisation}\n </>\n ) : (\n <>\n <div className={styles.form}>\n <div className={styles.field}>\n <span className={styles.fieldLabel} id=\"verse-overnight-stop-label\">\n Stop rule\n </span>\n <Segmented\n options={STOP_OPTIONS}\n value={kind}\n onChange={(next) => {\n setKind(next);\n setFormError(null);\n }}\n aria-labelledby=\"verse-overnight-stop-label\"\n size=\"sm\"\n />\n </div>\n\n {kind === 'at-time' ? (\n <div className={styles.field}>\n <label className={styles.fieldLabel} htmlFor=\"verse-overnight-time\">\n Stop at\n </label>\n <input\n id=\"verse-overnight-time\"\n type=\"time\"\n className={styles.input}\n value={timeValue}\n disabled={disabled}\n onChange={(e) => {\n setTimeValue(e.target.value);\n setFormError(null);\n }}\n />\n </div>\n ) : null}\n\n {kind === 'after-iterations' ? (\n <div className={styles.field}>\n <label className={styles.fieldLabel} htmlFor=\"verse-overnight-iterations\">\n Iterations\n </label>\n <input\n id=\"verse-overnight-iterations\"\n type=\"number\"\n inputMode=\"numeric\"\n min={ITERATIONS_MIN}\n max={ITERATIONS_MAX}\n className={styles.input}\n value={iterationsValue}\n disabled={disabled}\n onChange={(e) => {\n setIterationsValue(e.target.value);\n setFormError(null);\n }}\n />\n </div>\n ) : null}\n </div>\n\n <p className={styles.rulePreview}>\n {rule === null\n ? kind === 'at-time'\n ? 'Enter a stop time as HH:MM.'\n : `Enter a number of iterations between ${ITERATIONS_MIN} and ${ITERATIONS_MAX}.`\n : describeStopRule(rule, new Date(now))}\n </p>\n\n {authorisation}\n\n <div className={styles.armRow}>\n {/* WHY IS THIS GREYED OUT — the one thing a disabled control has\n to be able to say. `disabled` eats pointer events on the button\n itself, so the Tooltip listens on its wrapper; it carries a\n DESCRIPTION, and the button keeps its own visible text as its\n accessible name. */}\n <Tooltip label={armDisabledReason}>\n <button\n type=\"button\"\n className={`${autonomy.button} ${autonomy.buttonPrimary}`}\n disabled={disabled || killed}\n onClick={arm}\n >\n Arm overnight run\n </button>\n </Tooltip>\n {paused ? (\n <button\n type=\"button\"\n className={autonomy.button}\n disabled={disabled}\n onClick={resume}\n >\n Resume now\n </button>\n ) : null}\n </div>\n\n {paused ? (\n <p className={styles.haltNote} role=\"status\">\n {pauseUnknown\n ? 'Treated as paused — the pause sentinel is unreadable. An armed run would park until that is fixed.'\n : 'Autonomous dispatch is paused, so an armed run would park. Resume before walking away.'}\n </p>\n ) : null}\n\n <p className={styles.heavier}>\n Pause is the halt for this run and it undoes in one click.{' '}\n <strong>Emergency stop</strong>, in Controls above, is heavier on purpose: it engages the\n global kill switch, which also stops the agent&rsquo;s own write tools from editing\n anything, anywhere, until you release it.\n </p>\n </>\n )}\n\n {formError ? (\n <p className={autonomy.capError} role=\"alert\">\n {formError}\n </p>\n ) : null}\n\n {guard.error ? (\n <p className={autonomy.capError} role=\"alert\">\n {guard.error}\n </p>\n ) : null}\n\n {note && !guard.error ? (\n <p className={autonomy.actionNote} role=\"status\">\n {note}\n </p>\n ) : null}\n </section>\n );\n}\n\n/**\n * The form state as a rule, or null when it is not yet a rule.\n *\n * Null is the single source of \"cannot arm yet\" — the preview line, the\n * disabled Arm button's tooltip and the submit guard all read it, so they\n * cannot disagree about whether the form is complete.\n */\nfunction buildRule(\n kind: OvernightStopRuleKind,\n timeValue: string,\n iterationsValue: string,\n): OvernightStopRule | null {\n if (kind === 'until-paused') return { kind: 'until-paused' };\n if (kind === 'at-time') {\n const at = resolveStopAt(timeValue);\n return at === null ? null : { kind: 'at-time', at };\n }\n const iterations = Number(iterationsValue);\n if (!Number.isInteger(iterations) || iterations < ITERATIONS_MIN || iterations > ITERATIONS_MAX) {\n return null;\n }\n return { kind: 'after-iterations', iterations };\n}\n\n/** \"abc1234 · 03:12:44\" — a missing part is left out, never printed as \"—\". */\nfunction metaLine(lead: string | null, at: string | null): string {\n const stamp = at ? formatStamp(at) : null;\n return [lead, stamp === UNKNOWN ? null : stamp].filter((part): part is string => Boolean(part)).join(' · ');\n}\n\nfunction Fact({\n label,\n value,\n title,\n mono = false,\n wide = false,\n}: {\n label: string;\n value: string;\n /** The full text when `value` is a shortened form (a path shown by its folder name). */\n title?: string;\n mono?: boolean;\n wide?: boolean;\n}): ReactNode {\n return (\n <div className={`${styles.fact} ${wide ? styles.factWide : ''}`}>\n <dt className={styles.factLabel}>{label}</dt>\n {/* A mono or wide value can be cut with an ellipsis, so it always carries its full text as a tooltip. */}\n <dd className={`${styles.factValue} ${mono ? styles.factMono : ''}`} title={title ?? (mono || wide ? value : undefined)}>\n {value}\n </dd>\n </div>\n );\n}\n\ninterface LedgerRow {\n id: string;\n repo: string;\n title: string;\n meta: string;\n /** Full text behind a shortened meta (the whole commit sha). */\n metaTitle?: string;\n}\n\n/** What it merged, and what it threw away — same row shape for both. */\nfunction Ledger({\n title,\n empty,\n rows,\n}: {\n title: string;\n empty: string;\n rows: readonly LedgerRow[];\n}): ReactNode {\n return (\n <div className={styles.ledger}>\n <h4 className={styles.ledgerTitle}>\n {title} <span className={styles.ledgerCount}>{rows.length}</span>\n </h4>\n {rows.length === 0 ? (\n <p className={styles.ledgerEmpty}>{empty}</p>\n ) : (\n <ul className={styles.ledgerList}>\n {rows.map((row) => (\n <li key={row.id} className={styles.ledgerRow}>\n {/* The repo cell truncates: its folder name (or owner/name) shows, the full value is the tooltip. */}\n <span className={styles.ledgerRepo} title={row.repo}>{repoDisplayName(row.repo)}</span>\n <span className={styles.ledgerChange}>{row.title}</span>\n {row.meta ? <span className={styles.ledgerMeta} title={row.metaTitle}>{row.meta}</span> : null}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","/**\n * routes/verse/autonomy/SafetyPanel.tsx — the `verify-safety` report as\n * pass/fail lines with a re-run button.\n *\n * These are READ-ONLY structural checks on this build's own source, so the\n * \"Re-run\" button is a plain re-fetch of `GET /api/verse/safety`: it needs no\n * mutation token and cannot change anything. The count is stated rather than\n * hardcoded to five — if the backend grows a sixth check the panel should show\n * six, not silently hide it.\n */\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { SkeletonLine } from '../../../components/primitives/Skeleton.js';\nimport { useQuery, useRefresh } from '../../../data/hooks.js';\nimport { verseSafetyQuery } from './control-queries.js';\nimport { tidyProse } from './format.js';\nimport styles from './autonomy.module.css';\n\nexport function SafetyPanel() {\n const query = useQuery(verseSafetyQuery);\n const refetch = useRefresh(verseSafetyQuery);\n const report = query.data;\n const passed = report?.checks?.filter((c) => c.pass).length ?? 0;\n const total = report?.checks?.length ?? 0;\n\n return (\n <section className={styles.panel} aria-label=\"Safety checks\">\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>Safety</h3>\n <div className={styles.panelActions}>\n {query.status === 'refreshing' ? <RefreshIndicator /> : null}\n {report ? (\n <span className={styles.panelNote}>\n {passed}/{total} passing\n </span>\n ) : null}\n <button type=\"button\" className={styles.button} onClick={refetch} disabled={query.status === 'loading'}>\n Re-run checks\n </button>\n </div>\n </div>\n\n {query.status === 'loading' ? (\n <div className={styles.skeletons}>\n <SkeletonLine width=\"70%\" />\n <SkeletonLine width=\"55%\" />\n <SkeletonLine width=\"62%\" />\n </div>\n ) : query.status === 'error' ? (\n <p className={styles.error} role=\"alert\">\n {query.error?.message ?? 'Could not run the safety checks.'}\n </p>\n ) : !report || total === 0 ? (\n <p className={styles.empty}>\n The safety report came back with no checks. Press <strong>Re-run checks</strong>; if it stays empty, treat\n it as a failure.\n </p>\n ) : (\n <div className={styles.checkList}>\n {report.checks.map((check) => (\n <div className={styles.check} key={check.id} data-pass={check.pass}>\n <span className={styles.checkMark} aria-hidden=\"true\">\n {check.pass ? '✓' : '✕'}\n </span>\n <span className={styles.checkLabel}>\n {check.label}\n <span className={styles.srOnly}>{check.pass ? ' — passed' : ' — failed'}</span>\n </span>\n <span className={styles.checkDetail}>{check.detail ? tidyProse(check.detail) : check.id}</span>\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n","/**\n * routes/verse/autonomy/ScopePanel.tsx — the enrollment registry: the single\n * biggest lever on what the autonomous loop is allowed to touch, and the one\n * with no UI path before V2.\n *\n * The empty state is the important one. An empty registry is the DEFAULT and\n * it means the daemon can mutate nothing at all — so the panel says that in\n * plain words instead of rendering an apologetic \"no data\" and letting the\n * operator conclude something is broken.\n *\n * Path rules mirror the server (docs/VERSE-CONTRACT-V2.md): absolute paths\n * only, and never anything under `~/.codex/artifacts`. The server is still the\n * authority; this just spares a round trip on an obvious mistake.\n */\nimport { useState } from 'react';\nimport { SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { ConfirmDialog } from '../../inbox/ConfirmDialog.js';\nimport { updateVerseScope, verseScopeQuery } from './control-queries.js';\nimport { verseAutonomyScopeQuery } from '../verse-queries.js';\nimport { ROOT_PRIORITY_LABEL, ROOT_PRIORITY_NOTE } from '../workspace-model.js';\nimport type { VerseAutonomyScopeView } from '../../../data/api-types.js';\nimport type { VerseScopeRepo } from './control-types.js';\nimport { tidyProse } from './format.js';\nimport type { GuardedAction } from './use-guarded-action.js';\nimport styles from './autonomy.module.css';\n\n/**\n * Returns an error string, or null when the path is worth sending.\n *\n * A courtesy gate only — `checkVerseScopePath` on the server is the authority\n * and knows the operator's real home directory, which this cannot. The rules\n * mirrored here are the ones expressible without it.\n */\nexport function validateRepoPath(raw: string): string | null {\n const trimmed = raw.trim();\n if (trimmed === '') return 'Enter the absolute path of the repository to enroll.';\n if (!trimmed.startsWith('/')) return 'Enrollment takes an absolute path, e.g. /Users/you/code/project.';\n if (trimmed === '/') return 'The filesystem root cannot be enrolled as autonomous scope.';\n if (/(^|\\/)\\.codex\\/artifacts(\\/|$)/.test(trimmed)) return 'Paths under ~/.codex/artifacts cannot be enrolled.';\n // ~/.ashlr holds config.json, the enrollment registry, the KILL sentinel and\n // the private launcher records. Enrolling it would put the agent's own\n // control directory inside the scope those files define.\n if (/(^|\\/)\\.ashlr(\\/|$)/.test(trimmed)) return 'Paths under ~/.ashlr cannot be enrolled — that is the agent’s own control directory.';\n return null;\n}\n\n/**\n * One repo's standing in the autonomous lane: its sections and its priority.\n *\n * Renders NOTHING when the repo is in no section and carries the default\n * priority — which is every repo until the operator says otherwise, and is\n * exactly how the panel behaved before sections existed.\n */\nfunction ScopeRepoStanding({ path, scope }: { path: string; scope: VerseAutonomyScopeView | null }) {\n const entry = scope?.entries.find((e) => e.path === path) ?? null;\n if (entry === null) return null;\n const ranked = entry.priority !== 'normal';\n if (!ranked && entry.sections.length === 0) return null;\n return (\n <span className={styles.repoStanding} title={ROOT_PRIORITY_NOTE}>\n {ranked ? <span className={styles.repoPriority}>{ROOT_PRIORITY_LABEL[entry.priority]}</span> : null}\n {entry.sections.map((section) => (\n <span key={section.id} className={styles.repoSection}>{section.name}</span>\n ))}\n {entry.outsideFocus ? <span className={styles.repoOutsideFocus}>outside the focused section</span> : null}\n </span>\n );\n}\n\nexport function ScopePanel({ guard, dispatchEnabled }: { guard: GuardedAction; dispatchEnabled: boolean }) {\n const scope = useQuery(verseScopeQuery);\n // The RANKED view of the same registry. Read separately so it is obvious\n // these are two facts: what is enrolled, and in what order it is worked on.\n const autonomy = useQuery(verseAutonomyScopeQuery);\n const [path, setPath] = useState('');\n const [pathError, setPathError] = useState<string | null>(null);\n const [removing, setRemoving] = useState<VerseScopeRepo | null>(null);\n // The path the confirm dialog is asking about. Enrolment GRANTS an\n // autonomous agent write authority over a directory; removal takes authority\n // away and changes nothing on disk. Confirming only the removal put the\n // friction on the safe half, so the grant gets the same step — and in the\n // desktop shell, where the mutation hold never expires, this dialog is the\n // only thing between an Enter keypress and the grant.\n const [enrolling, setEnrolling] = useState<string | null>(null);\n const locked = !dispatchEnabled || guard.readOnly;\n\n /** Validate, then ASK. The Enter shortcut opens the confirm, never posts. */\n function submitEnroll() {\n const problem = validateRepoPath(path);\n if (problem) {\n setPathError(problem);\n return;\n }\n setPathError(null);\n setEnrolling(path.trim());\n }\n\n function confirmEnroll() {\n const target = enrolling;\n if (!target) return;\n guard.request(async () => {\n await updateVerseScope({ action: 'enroll', path: target });\n setPath('');\n setEnrolling(null);\n }, 'Enrolling a repository for autonomous work requires the dispatch token.');\n }\n\n const repos = scope.data?.repos ?? [];\n\n return (\n <section className={styles.panel} aria-label=\"Scope\">\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>Scope — enrolled repositories</h3>\n {scope.status === 'refreshing' ? <RefreshIndicator /> : null}\n </div>\n\n {scope.data?.degradedReason ? (\n <p className={styles.readOnly}>The enrollment registry read is degraded: {tidyProse(scope.data.degradedReason)}</p>\n ) : null}\n\n {scope.status === 'loading' ? (\n <div className={styles.skeletons}>\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : scope.status === 'error' ? (\n <p className={styles.error} role=\"alert\">\n {scope.error?.message ?? 'Could not read the enrollment registry.'}\n </p>\n ) : repos.length === 0 ? (\n <p className={styles.empty}>\n <span className={styles.emptyStrong}>No repositories are enrolled, so the daemon will do nothing.</span>{' '}\n That is the default and it is not a bug — nothing autonomous can mutate a real repository until you enroll it\n here. Add one below to give the loop somewhere to work.\n </p>\n ) : (\n <div className={styles.repoList}>\n {repos.map((repo) => (\n <div className={styles.repoRow} key={repo.path}>\n <span className={styles.repoName}>{repo.name}</span>\n {/* `direction: rtl` makes the ellipsis eat the head of a long path\n so its tail survives; <bdi> keeps the path itself reading\n left-to-right — without it the leading \"/\" is reordered to\n the END (\"Users/you/code/project/\"). */}\n <span className={styles.repoPath} title={repo.path}>\n <bdi>{repo.path}</bdi>\n </span>\n {repo.exists ? null : <span className={styles.repoMissing}>⚠ path missing on disk</span>}\n {/* Workspace membership and rank, so the blast radius is legible:\n WHICH sections claim this repo, and where the fleet's\n attention goes. Both are ordering — neither enrols. */}\n <ScopeRepoStanding path={repo.path} scope={autonomy.data ?? null} />\n <button type=\"button\" className={styles.button} disabled={locked || guard.busy} onClick={() => setRemoving(repo)}>\n Remove\n </button>\n </div>\n ))}\n </div>\n )}\n\n <div className={styles.addRow}>\n <input\n className={styles.addInput}\n type=\"text\"\n value={path}\n placeholder=\"/absolute/path/to/repository\"\n aria-label=\"Repository path to enroll\"\n aria-invalid={pathError ? true : undefined}\n disabled={locked || guard.busy}\n onChange={(e) => {\n setPath(e.target.value);\n if (pathError) setPathError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n submitEnroll();\n }\n }}\n />\n <button type=\"button\" className={styles.button} disabled={locked || guard.busy} onClick={submitEnroll}>\n Enroll repository\n </button>\n </div>\n {pathError ? (\n <p className={styles.capError} role=\"alert\">\n {pathError}\n </p>\n ) : null}\n {guard.error && !pathError ? (\n <p className={styles.capError} role=\"alert\">\n {guard.error}\n </p>\n ) : null}\n\n <ConfirmDialog\n open={enrolling !== null}\n onClose={() => setEnrolling(null)}\n title=\"Give the autonomous loop write authority here?\"\n body={\n <>\n <code>{enrolling}</code> becomes autonomous scope. The loop may propose work against it, and the\n agent&rsquo;s own MCP-native write tools will act on it — enrolment is the gate those tools check.\n <br />\n <br />\n Nothing is written by enrolling. You can remove it again from this panel at any time.\n </>\n }\n confirmLabel=\"Enroll repository\"\n busy={guard.busy}\n error={guard.error}\n onConfirm={confirmEnroll}\n />\n\n <ConfirmDialog\n open={removing !== null}\n onClose={() => setRemoving(null)}\n title=\"Remove this repository from scope?\"\n body={\n <>\n The autonomous loop will stop proposing work for <code>{removing?.path}</code>. Existing proposals stay in\n the inbox; nothing on disk is changed or deleted.\n </>\n }\n confirmLabel=\"Remove from scope\"\n destructive\n busy={guard.busy}\n error={guard.error}\n onConfirm={() => {\n const target = removing;\n if (!target) return;\n guard.request(async () => {\n await updateVerseScope({ action: 'unenroll', path: target.path });\n setRemoving(null);\n }, 'Removing a repository from autonomous scope requires the dispatch token.');\n }}\n />\n </section>\n );\n}\n","/**\n * routes/verse/sections/AutonomySection.module.css — the section shell only.\n * Panel-level styling lives in ../autonomy/autonomy.module.css so the cockpit\n * reads as one object; this file owns the 48px header strip, the scroll\n * region, and the wide (non-720px) measure a dense control plane needs.\n */\n\n.section { display: flex; flex-direction: column; min-height: 0; height: 100%; background: var(--bg-canvas); }\n\n.header {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n /* DESIGN-V2 §4: header strips are --strip-height, and the token is what the\n desktop shell's inset maths is written against. */\n height: var(--strip-height);\n padding: 0 var(--space-5);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n.title {\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 letter-spacing: var(--tracking-display, -0.02em);\n color: var(--text-primary);\n}\n.headerActions { display: flex; align-items: center; gap: var(--space-2); }\n.ghost {\n min-height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 0;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--text-secondary);\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n.ghost:hover { background: var(--bg-hover); color: var(--text-primary); }\n\n.scroll { flex: 1; min-height: 0; overflow-y: auto; scrollbar-gutter: stable; }\n.measure { max-width: 1040px; margin: 0 auto; padding: var(--space-5) var(--space-5) var(--space-16); }\n\n.banner {\n margin-bottom: var(--space-5);\n padding: var(--space-3) var(--space-4);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-base-line);\n}\n.banner code { font-family: var(--font-mono); font-size: var(--text-xs-size); }\n.bannerTitle { display: block; color: var(--text-primary); font-weight: var(--font-weight-medium); }\n\n.failure {\n padding: var(--space-4);\n border: 1px solid var(--status-danger-solid);\n border-radius: var(--radius-sm);\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n font-size: var(--text-sm-size);\n line-height: var(--text-base-line);\n}\n.retry {\n margin-top: var(--space-3);\n min-height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 1px solid currentColor;\n border-radius: var(--radius-sm);\n background: transparent;\n color: inherit;\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n.loading { display: flex; flex-direction: column; gap: var(--space-3); }\n\n@media (max-width: 900px) {\n .measure { padding: var(--space-4) var(--space-4) var(--space-12); }\n}\n\n/* ---- desktop shell (see desktop/README.md \"Desktop shell contract\") -----\n * In the Tauri window the OS title bar overlays the top 48px and the macOS\n * traffic lights float over the top-LEFT 92px of the WINDOW. This strip does\n * not start at the window's left edge — the 56px rail does — so the inset it\n * owes is the overlap, never the full 92px. Both vars are absent in a\n * browser, where the expression floors to 0px and the layout is unchanged. */\n.header {\n padding-left: max(\n var(--space-5),\n calc(var(--app-traffic-light-inset, 0px) - var(--rail-width, 56px))\n );\n}\n","/**\n * routes/verse/fleet/Advanced.tsx — the eleven legacy Autonomy panels, now\n * \"Fleet ▸ Advanced\" (SPEC-310C §0.1 / §5; unit C7). Moved here verbatim from\n * sections/AutonomySection.tsx: the daemon controls, overnight, local\n * runtime, local-only, the local fleet, caps, scope, activity, safety and\n * goals still work exactly as they did — 3.10 only moves them below the fold\n * of the Fleet surface, behind a disclosure, so they are not fetched until\n * opened. `embedded` drops the section chrome (strip + scroll) because the\n * Fleet surface already provides both; the legacy AutonomySection wrapper\n * renders it standalone until the shell (C1) retires the old rail entry.\n *\n * (Original header, unchanged:)\n *\n * It answers, top to bottom: is it running, how do I stop it, what is it\n * allowed to spend, what is it allowed to touch, what did it do, is it safe,\n * and what is it aiming at. The order is the priority order — the stop button\n * is never below the fold.\n *\n * One `GET /api/verse/control` aggregate backs the header, the controls, and\n * the live-usage figures; the panels underneath fetch their own slower or\n * filterable data (`/caps`, `/scope`, `/audit`, `/safety`, `/goals`,\n * `/backlog`) so a slow audit read never blocks the stop button from\n * rendering.\n *\n * Read-only sessions: `ashlr serve` without dispatch 404s every POST. That is\n * detected two ways — the bootstrap's `dispatchEnabled` up front, and a\n * `DispatchDisabledError` from any attempted write — and is rendered as an\n * explained session mode, never as an error.\n *\n * LOCAL FLEET (owner U). Three panels sit directly under the controls, above\n * budget and scope, because on a local-only machine they are the answer to\n * \"is it working\": the serving runtime that makes local agents possible at\n * all, the local-only refusal, and the agents in flight. They read\n * `/api/verse/{runtime,local-only,fleet}` through `fleet-queries.ts`, which\n * treats an absent route as a degraded panel rather than a dead section — the\n * three routes are landing in parallel with this surface.\n *\n * They also poll. The runtime and the fleet are the only things on this screen\n * that change while nobody clicks anything, and neither has an SSE event yet,\n * so `useFleetPolling` re-reads them while the tab is visible. Everything else\n * here still refreshes on the existing cache rules.\n *\n * OVERNIGHT (owner U). It sits directly under the controls, above the local\n * fleet, because it is a CONTROL — the one the operator arms when they walk\n * away — and the order of this section is the priority order. It reads\n * `/api/verse/overnight` through `overnight-queries.ts`, which treats an\n * absent route as a designed \"not available in this build\" state rather than\n * an error, and polls only while a run is armed.\n */\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { SkeletonLine, SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport { useQuery, useRefresh } from '../../../data/hooks.js';\nimport { ActivityPanel } from '../autonomy/ActivityPanel.js';\nimport { CapsPanel } from '../autonomy/CapsPanel.js';\nimport { DaemonControls } from '../autonomy/DaemonControls.js';\nimport { FleetPanel } from '../autonomy/FleetPanel.js';\nimport { GoalsBacklogPanel } from '../autonomy/GoalsBacklogPanel.js';\nimport { LocalOnlyPanel } from '../autonomy/LocalOnlyPanel.js';\nimport { LocalRuntimePanel } from '../autonomy/LocalRuntimePanel.js';\nimport { OvernightPanel } from '../autonomy/OvernightPanel.js';\nimport { SafetyPanel } from '../autonomy/SafetyPanel.js';\nimport { ScopePanel } from '../autonomy/ScopePanel.js';\nimport { StatusHeader } from '../autonomy/StatusHeader.js';\nimport { verseCapsQuery, verseControlQuery } from '../autonomy/control-queries.js';\nimport {\n fleetQuery,\n localOnlyQuery,\n servingRuntimeQuery,\n useFleetPolling,\n} from '../autonomy/fleet-queries.js';\nimport type { SeatLike } from '../autonomy/fleet-model.js';\nimport { overnightQuery, useOvernightPolling } from '../autonomy/overnight-queries.js';\nimport { useGuardedAction } from '../autonomy/use-guarded-action.js';\nimport { verseBootstrapQuery } from '../verse-queries.js';\nimport autonomy from '../autonomy/autonomy.module.css';\nimport styles from '../sections/AutonomySection.module.css';\n\nexport function FleetAdvanced({ embedded = false }: { embedded?: boolean }) {\n const control = useQuery(verseControlQuery);\n const caps = useQuery(verseCapsQuery);\n const bootstrap = useQuery(verseBootstrapQuery);\n const runtime = useQuery(servingRuntimeQuery);\n const fleet = useQuery(fleetQuery);\n const localOnly = useQuery(localOnlyQuery);\n const overnight = useQuery(overnightQuery);\n const refetchControl = useRefresh(verseControlQuery);\n const guard = useGuardedAction();\n useFleetPolling();\n // Only an ARMED run has counters that move on their own; a disarmed panel\n // has one boolean to report and is left to the ordinary cache rules.\n useOvernightPolling(overnight.data?.value?.armed ?? false);\n\n const dispatchEnabled = (bootstrap.data?.dispatchEnabled ?? true) && !guard.readOnly;\n const snapshot = control.data;\n\n // The live seat roster, narrowed to what the local-only blast radius needs.\n // Bootstrap is the roster every other Verse surface reads, so this panel's\n // \"3 of your 5 seats\" cannot disagree with the seat picker.\n const seats: SeatLike[] = useMemo(\n () => (bootstrap.data?.seats ?? []).map((s) => ({ id: s.id, engine: s.engine, label: s.label })),\n [bootstrap.data],\n );\n\n const content: ReactNode = (\n <>\n {!dispatchEnabled ? (\n <div className={styles.banner} role=\"status\">\n <span className={styles.bannerTitle}>Read-only session</span>\n This server was started without dispatch, so starting, stopping, editing caps, and changing scope are\n unavailable. Everything below is live and accurate — run <code>ashlr verse</code> to get the controls.\n </div>\n ) : null}\n\n {control.status === 'loading' ? (\n <div className={styles.loading}>\n <SkeletonLine width=\"42%\" />\n <SkeletonLine width=\"68%\" />\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : control.status === 'error' || !snapshot ? (\n <div className={styles.failure} role=\"alert\">\n {control.error?.message ?? 'Could not read the autonomy control snapshot.'}\n <br />\n Loop status unknown, so nothing below is shown.\n <br />\n <button type=\"button\" className={styles.retry} onClick={refetchControl}>\n Try again\n </button>\n </div>\n ) : (\n <>\n <StatusHeader snapshot={snapshot} />\n <DaemonControls snapshot={snapshot} guard={guard} dispatchEnabled={dispatchEnabled} />\n {/* The unattended lane, directly under the controls: arming it\n is the biggest single thing an operator does on this screen,\n and its halt must never be below the fold. */}\n <OvernightPanel\n read={overnight.data ?? null}\n snapshot={snapshot}\n guard={guard}\n dispatchEnabled={dispatchEnabled}\n loading={overnight.status === 'loading'}\n />\n {/* The local fleet, in the order the questions arrive: can it\n run, what is it allowed to reach, and what is it doing. */}\n {/* `fleet` explicitly: this screen already holds the fleet read\n (FleetPanel below), so the lane-cap line reads the same\n object rather than peeking the shared cache entry — one\n source for both panels, no reliance on cache timing. */}\n <LocalRuntimePanel\n read={runtime.data ?? null}\n guard={guard}\n dispatchEnabled={dispatchEnabled}\n loading={runtime.status === 'loading'}\n fleet={fleet.data ?? null}\n />\n <LocalOnlyPanel\n read={localOnly.data ?? null}\n seats={seats}\n guard={guard}\n dispatchEnabled={dispatchEnabled}\n loading={localOnly.status === 'loading'}\n />\n <FleetPanel\n read={fleet.data ?? null}\n runtime={runtime.data?.value ?? null}\n loading={fleet.status === 'loading'}\n />\n {caps.status === 'loading' ? (\n <div className={autonomy.panel}>\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : caps.data ? (\n <CapsPanel caps={caps.data} snapshot={snapshot} guard={guard} dispatchEnabled={dispatchEnabled} />\n ) : (\n <section className={autonomy.panel} aria-label=\"Budget and limits\">\n <div className={autonomy.panelHead}>\n <h3 className={autonomy.panelTitle}>Budget and limits</h3>\n </div>\n <p className={autonomy.error} role=\"alert\">\n {caps.error?.message ?? 'Could not read the configured caps, so none are shown or editable.'}\n </p>\n </section>\n )}\n <ScopePanel guard={guard} dispatchEnabled={dispatchEnabled} />\n <ActivityPanel snapshot={snapshot} />\n <SafetyPanel />\n <GoalsBacklogPanel />\n </>\n )}\n </>\n );\n\n const token = (\n <MutationTokenDialog\n open={guard.tokenOpen}\n onClose={guard.closeToken}\n reason={guard.tokenReason}\n tokenHelp=\"the mutation token ashlr verse printed\"\n />\n );\n\n if (embedded) {\n return (\n <div className={styles.loading} data-embedded=\"true\">\n <div className={styles.headerActions}>\n {control.status === 'refreshing' ? <RefreshIndicator /> : null}\n <button type=\"button\" className={styles.ghost} onClick={refetchControl}>\n Refresh\n </button>\n </div>\n {content}\n {token}\n </div>\n );\n }\n\n return (\n <section className={styles.section} aria-label=\"Autonomy\">\n <header className={styles.header} data-app-region=\"drag\">\n <h2 className={styles.title}>Autonomy</h2>\n <div className={styles.headerActions}>\n {control.status === 'refreshing' ? <RefreshIndicator /> : null}\n <button type=\"button\" className={styles.ghost} onClick={refetchControl}>\n Refresh\n </button>\n </div>\n </header>\n\n <div className={styles.scroll}>\n <div className={styles.measure}>{content}</div>\n </div>\n\n {token}\n </section>\n );\n}\n"],"mappings":"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"}