@ashlr/hub 3.16.0 → 3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +2 -2
  3. package/dist/authority-surface.json +5 -5
  4. package/dist/build-identity.json +2 -2
  5. package/dist/core/daemon/loop.js +1 -0
  6. package/dist/core/daemon/loop.js.map +1 -1
  7. package/dist/core/daemon/tick-hooks.d.ts +2 -0
  8. package/dist/core/daemon/tick-hooks.js.map +1 -1
  9. package/dist/core/fleet/tick-hooks-live.d.ts +2 -1
  10. package/dist/core/fleet/tick-hooks-live.js +49 -7
  11. package/dist/core/fleet/tick-hooks-live.js.map +1 -1
  12. package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js +2 -0
  13. package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js.map +1 -0
  14. package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js +2 -0
  15. package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js.map +1 -0
  16. package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js +2 -0
  17. package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js.map +1 -0
  18. package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js +2 -0
  19. package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js.map +1 -0
  20. package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js +2 -0
  21. package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js.map +1 -0
  22. package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js +2 -0
  23. package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js.map +1 -0
  24. package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js +3 -0
  25. package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js.map +1 -0
  26. package/dist/core/web/public/next/assets/App-Uy6lDpKw.js +8 -0
  27. package/dist/core/web/public/next/assets/App-Uy6lDpKw.js.map +1 -0
  28. package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js +2 -0
  29. package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js.map +1 -0
  30. package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js +2 -0
  31. package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js.map +1 -0
  32. package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js +2 -0
  33. package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js.map +1 -0
  34. package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js +3 -0
  35. package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js.map +1 -0
  36. package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js +2 -0
  37. package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js.map +1 -0
  38. package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js +2 -0
  39. package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js.map +1 -0
  40. package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js +2 -0
  41. package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js.map +1 -0
  42. package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js +7 -0
  43. package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js.map +1 -0
  44. package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js +2 -0
  45. package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js.map +1 -0
  46. package/dist/core/web/public/next/assets/Button-CMR_Op-0.js +2 -0
  47. package/dist/core/web/public/next/assets/Button-CMR_Op-0.js.map +1 -0
  48. package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js +2 -0
  49. package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js.map +1 -0
  50. package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js +16 -0
  51. package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js.map +1 -0
  52. package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js +2 -0
  53. package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js.map +1 -0
  54. package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js +2 -0
  55. package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js.map +1 -0
  56. package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js +3 -0
  57. package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js.map +1 -0
  58. package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js +5 -0
  59. package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js.map +1 -0
  60. package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js +2 -0
  61. package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js.map +1 -0
  62. package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js +3 -0
  63. package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js.map +1 -0
  64. package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js +3 -0
  65. package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js.map +1 -0
  66. package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js +9 -0
  67. package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js.map +1 -0
  68. package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js +3 -0
  69. package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js.map +1 -0
  70. package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js +4 -0
  71. package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js.map +1 -0
  72. package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js +2 -0
  73. package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js.map +1 -0
  74. package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js +2 -0
  75. package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js.map +1 -0
  76. package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js +2 -0
  77. package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js.map +1 -0
  78. package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js +2 -0
  79. package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js.map +1 -0
  80. package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js +2 -0
  81. package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js.map +1 -0
  82. package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js +2 -0
  83. package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js.map +1 -0
  84. package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js +2 -0
  85. package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js.map +1 -0
  86. package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js +2 -0
  87. package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js.map +1 -0
  88. package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js +2 -0
  89. package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js.map +1 -0
  90. package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js +2 -0
  91. package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js.map +1 -0
  92. package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js +2 -0
  93. package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js.map +1 -0
  94. package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js +2 -0
  95. package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js.map +1 -0
  96. package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js +2 -0
  97. package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js.map +1 -0
  98. package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js +5 -0
  99. package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js.map +1 -0
  100. package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js +2 -0
  101. package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js.map +1 -0
  102. package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js +2 -0
  103. package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js.map +1 -0
  104. package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js +2 -0
  105. package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js.map +1 -0
  106. package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js +3 -0
  107. package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js.map +1 -0
  108. package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js +2 -0
  109. package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js.map +1 -0
  110. package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js +3 -0
  111. package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js.map +1 -0
  112. package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js +2 -0
  113. package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js.map +1 -0
  114. package/dist/core/web/public/next/assets/Input-CsSZI8QC.js +2 -0
  115. package/dist/core/web/public/next/assets/Input-CsSZI8QC.js.map +1 -0
  116. package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js +9 -0
  117. package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js.map +1 -0
  118. package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js +2 -0
  119. package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js.map +1 -0
  120. package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js +3 -0
  121. package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js.map +1 -0
  122. package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js +2 -0
  123. package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js.map +1 -0
  124. package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js +2 -0
  125. package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js.map +1 -0
  126. package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js +2 -0
  127. package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js.map +1 -0
  128. package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js +2 -0
  129. package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js.map +1 -0
  130. package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js +2 -0
  131. package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js.map +1 -0
  132. package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js +2 -0
  133. package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js.map +1 -0
  134. package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js +3 -0
  135. package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js.map +1 -0
  136. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js +72 -0
  137. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js.map +1 -0
  138. package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js +2 -0
  139. package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js.map +1 -0
  140. package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js +2 -0
  141. package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js.map +1 -0
  142. package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js +3 -0
  143. package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js.map +1 -0
  144. package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js +2 -0
  145. package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js.map +1 -0
  146. package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js +2 -0
  147. package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js.map +1 -0
  148. package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js +3 -0
  149. package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js.map +1 -0
  150. package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js +2 -0
  151. package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js.map +1 -0
  152. package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js +7 -0
  153. package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js.map +1 -0
  154. package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js +2 -0
  155. package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js.map +1 -0
  156. package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js +3 -0
  157. package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js.map +1 -0
  158. package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js +2 -0
  159. package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js.map +1 -0
  160. package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js +2 -0
  161. package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js.map +1 -0
  162. package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js +2 -0
  163. package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js.map +1 -0
  164. package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js +4 -0
  165. package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js.map +1 -0
  166. package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js +3 -0
  167. package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js.map +1 -0
  168. package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js +3 -0
  169. package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js.map +1 -0
  170. package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js +9 -0
  171. package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js.map +1 -0
  172. package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js +2 -0
  173. package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js.map +1 -0
  174. package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js +2 -0
  175. package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js.map +1 -0
  176. package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js +2 -0
  177. package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js.map +1 -0
  178. package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js +2 -0
  179. package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js.map +1 -0
  180. package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js +2 -0
  181. package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js.map +1 -0
  182. package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js +2 -0
  183. package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js.map +1 -0
  184. package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js +2 -0
  185. package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js.map +1 -0
  186. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js +7 -0
  187. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js.map +1 -0
  188. package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js +3 -0
  189. package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js.map +1 -0
  190. package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js +3 -0
  191. package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js.map +1 -0
  192. package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js +2 -0
  193. package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js.map +1 -0
  194. package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js +2 -0
  195. package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js.map +1 -0
  196. package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js +2 -0
  197. package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js.map +1 -0
  198. package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js +3 -0
  199. package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js.map +1 -0
  200. package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js +3 -0
  201. package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js.map +1 -0
  202. package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js +2 -0
  203. package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js.map +1 -0
  204. package/dist/core/web/public/next/assets/Select-DjQDkPJU.js +2 -0
  205. package/dist/core/web/public/next/assets/Select-DjQDkPJU.js.map +1 -0
  206. package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js +2 -0
  207. package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js.map +1 -0
  208. package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js +2 -0
  209. package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js.map +1 -0
  210. package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js +2 -0
  211. package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js.map +1 -0
  212. package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js +2 -0
  213. package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js.map +1 -0
  214. package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js +2 -0
  215. package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js.map +1 -0
  216. package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js +3 -0
  217. package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js.map +1 -0
  218. package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js +2 -0
  219. package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js.map +1 -0
  220. package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js +2 -0
  221. package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js.map +1 -0
  222. package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js +3 -0
  223. package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js.map +1 -0
  224. package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js +2 -0
  225. package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js.map +1 -0
  226. package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js +2 -0
  227. package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js.map +1 -0
  228. package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js +2 -0
  229. package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js.map +1 -0
  230. package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js +2 -0
  231. package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js.map +1 -0
  232. package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js +2 -0
  233. package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js.map +1 -0
  234. package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js +2 -0
  235. package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js.map +1 -0
  236. package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js +2 -0
  237. package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js.map +1 -0
  238. package/dist/core/web/public/next/assets/Surface-BEToBKC3.js +2 -0
  239. package/dist/core/web/public/next/assets/Surface-BEToBKC3.js.map +1 -0
  240. package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js +2 -0
  241. package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js.map +1 -0
  242. package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js +2 -0
  243. package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js.map +1 -0
  244. package/dist/core/web/public/next/assets/Tag-Chqolzxz.js +2 -0
  245. package/dist/core/web/public/next/assets/Tag-Chqolzxz.js.map +1 -0
  246. package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js +3 -0
  247. package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js.map +1 -0
  248. package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js +26 -0
  249. package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js.map +1 -0
  250. package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js +2 -0
  251. package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js.map +1 -0
  252. package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js +2 -0
  253. package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js.map +1 -0
  254. package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js +9 -0
  255. package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js.map +1 -0
  256. package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js +3 -0
  257. package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js.map +1 -0
  258. package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js +2 -0
  259. package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js.map +1 -0
  260. package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js +3 -0
  261. package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js.map +1 -0
  262. package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js +3 -0
  263. package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js.map +1 -0
  264. package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js +2 -0
  265. package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js.map +1 -0
  266. package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js +2 -0
  267. package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js.map +1 -0
  268. package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js +2 -0
  269. package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js.map +1 -0
  270. package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js +2 -0
  271. package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js.map +1 -0
  272. package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js +6 -0
  273. package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js.map +1 -0
  274. package/dist/core/web/public/next/assets/actions-BPyW8QC-.js +2 -0
  275. package/dist/core/web/public/next/assets/actions-BPyW8QC-.js.map +1 -0
  276. package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js +2 -0
  277. package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js.map +1 -0
  278. package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js +7 -0
  279. package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js.map +1 -0
  280. package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js +2 -0
  281. package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js.map +1 -0
  282. package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js +2 -0
  283. package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js.map +1 -0
  284. package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js +2 -0
  285. package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js.map +1 -0
  286. package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js +2 -0
  287. package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js.map +1 -0
  288. package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js +2 -0
  289. package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js.map +1 -0
  290. package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js +2 -0
  291. package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js.map +1 -0
  292. package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js +2 -0
  293. package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js.map +1 -0
  294. package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js +2 -0
  295. package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js.map +1 -0
  296. package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js +2 -0
  297. package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js.map +1 -0
  298. package/dist/core/web/public/next/assets/charts-Di0_Q980.js +2 -0
  299. package/dist/core/web/public/next/assets/charts-Di0_Q980.js.map +1 -0
  300. package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js +2 -0
  301. package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js.map +1 -0
  302. package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js +2 -0
  303. package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js.map +1 -0
  304. package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js +2 -0
  305. package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js.map +1 -0
  306. package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js +2 -0
  307. package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js.map +1 -0
  308. package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js +2 -0
  309. package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js.map +1 -0
  310. package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js +2 -0
  311. package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js.map +1 -0
  312. package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js +2 -0
  313. package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js.map +1 -0
  314. package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js +2 -0
  315. package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js.map +1 -0
  316. package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js +2 -0
  317. package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js.map +1 -0
  318. package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js +3 -0
  319. package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js.map +1 -0
  320. package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js +2 -0
  321. package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js.map +1 -0
  322. package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js +2 -0
  323. package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js.map +1 -0
  324. package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js +2 -0
  325. package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js.map +1 -0
  326. package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js +2 -0
  327. package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js.map +1 -0
  328. package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js +2 -0
  329. package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js.map +1 -0
  330. package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js +2 -0
  331. package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js.map +1 -0
  332. package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js +2 -0
  333. package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js.map +1 -0
  334. package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js +2 -0
  335. package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js.map +1 -0
  336. package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js +2 -0
  337. package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js.map +1 -0
  338. package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js +2 -0
  339. package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js.map +1 -0
  340. package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js +2 -0
  341. package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js.map +1 -0
  342. package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js +3 -0
  343. package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js.map +1 -0
  344. package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js +2 -0
  345. package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js.map +1 -0
  346. package/dist/core/web/public/next/assets/format-V6IiIMAL.js +2 -0
  347. package/dist/core/web/public/next/assets/format-V6IiIMAL.js.map +1 -0
  348. package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js +5 -0
  349. package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js.map +1 -0
  350. package/dist/core/web/public/next/assets/global-CYfRwH6t.js +3 -0
  351. package/dist/core/web/public/next/assets/global-CYfRwH6t.js.map +1 -0
  352. package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js +3 -0
  353. package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js.map +1 -0
  354. package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js +2 -0
  355. package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js.map +1 -0
  356. package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js +2 -0
  357. package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js.map +1 -0
  358. package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js +2 -0
  359. package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js.map +1 -0
  360. package/dist/core/web/public/next/assets/icons-BBm_Cy62.js +2 -0
  361. package/dist/core/web/public/next/assets/icons-BBm_Cy62.js.map +1 -0
  362. package/dist/core/web/public/next/assets/index-_izD07R9.js +11 -0
  363. package/dist/core/web/public/next/assets/index-_izD07R9.js.map +1 -0
  364. package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js +2 -0
  365. package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js.map +1 -0
  366. package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js +2 -0
  367. package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js.map +1 -0
  368. package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js +2 -0
  369. package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js.map +1 -0
  370. package/dist/core/web/public/next/assets/live-model-D97AfBFz.js +2 -0
  371. package/dist/core/web/public/next/assets/live-model-D97AfBFz.js.map +1 -0
  372. package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js +2 -0
  373. package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js.map +1 -0
  374. package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js +2 -0
  375. package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js.map +1 -0
  376. package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js +2 -0
  377. package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js.map +1 -0
  378. package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js +7 -0
  379. package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js.map +1 -0
  380. package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js +2 -0
  381. package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js.map +1 -0
  382. package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js +2 -0
  383. package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js.map +1 -0
  384. package/dist/core/web/public/next/assets/nav-DC0ynjdb.js +2 -0
  385. package/dist/core/web/public/next/assets/nav-DC0ynjdb.js.map +1 -0
  386. package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js +2 -0
  387. package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js.map +1 -0
  388. package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js +2 -0
  389. package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js.map +1 -0
  390. package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js +2 -0
  391. package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js.map +1 -0
  392. package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js +2 -0
  393. package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js.map +1 -0
  394. package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js +2 -0
  395. package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js.map +1 -0
  396. package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js +2 -0
  397. package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js.map +1 -0
  398. package/dist/core/web/public/next/assets/panes-DOXM13lF.js +3 -0
  399. package/dist/core/web/public/next/assets/panes-DOXM13lF.js.map +1 -0
  400. package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js +2 -0
  401. package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js.map +1 -0
  402. package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js +2 -0
  403. package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js.map +1 -0
  404. package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js +2 -0
  405. package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js.map +1 -0
  406. package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js +2 -0
  407. package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js.map +1 -0
  408. package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js +2 -0
  409. package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js.map +1 -0
  410. package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js +2 -0
  411. package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js.map +1 -0
  412. package/dist/core/web/public/next/assets/primitives-Bynv7bPl.js +1 -0
  413. package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js +2 -0
  414. package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js.map +1 -0
  415. package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js +2 -0
  416. package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js.map +1 -0
  417. package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js +2 -0
  418. package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js.map +1 -0
  419. package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js +3 -0
  420. package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js.map +1 -0
  421. package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js +2 -0
  422. package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js.map +1 -0
  423. package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js +2 -0
  424. package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js.map +1 -0
  425. package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js +2 -0
  426. package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js.map +1 -0
  427. package/dist/core/web/public/next/assets/rolldown-runtime-hePW80VL.js +1 -0
  428. package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js +2 -0
  429. package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js.map +1 -0
  430. package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js +2 -0
  431. package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js.map +1 -0
  432. package/dist/core/web/public/next/assets/sheet-BxZSmdad.js +2 -0
  433. package/dist/core/web/public/next/assets/sheet-BxZSmdad.js.map +1 -0
  434. package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js +2 -0
  435. package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js.map +1 -0
  436. package/dist/core/web/public/next/assets/slots-BJc3RJkV.js +3 -0
  437. package/dist/core/web/public/next/assets/slots-BJc3RJkV.js.map +1 -0
  438. package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js +4 -0
  439. package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js.map +1 -0
  440. package/dist/core/web/public/next/assets/sse-It4xa040.js +2 -0
  441. package/dist/core/web/public/next/assets/sse-It4xa040.js.map +1 -0
  442. package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js +2 -0
  443. package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js.map +1 -0
  444. package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js +2 -0
  445. package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js.map +1 -0
  446. package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js +2 -0
  447. package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js.map +1 -0
  448. package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js +2 -0
  449. package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js.map +1 -0
  450. package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js +2 -0
  451. package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js.map +1 -0
  452. package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js +6 -0
  453. package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js.map +1 -0
  454. package/dist/core/web/public/next/assets/thread-data-C8z55msn.js +2 -0
  455. package/dist/core/web/public/next/assets/thread-data-C8z55msn.js.map +1 -0
  456. package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js +2 -0
  457. package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js.map +1 -0
  458. package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js +2 -0
  459. package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js.map +1 -0
  460. package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js +2 -0
  461. package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js.map +1 -0
  462. package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js +2 -0
  463. package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js.map +1 -0
  464. package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js +2 -0
  465. package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js.map +1 -0
  466. package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js +2 -0
  467. package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js.map +1 -0
  468. package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js +2 -0
  469. package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js.map +1 -0
  470. package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js +2 -0
  471. package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js.map +1 -0
  472. package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js +2 -0
  473. package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js.map +1 -0
  474. package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js +2 -0
  475. package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js.map +1 -0
  476. package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js +2 -0
  477. package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js.map +1 -0
  478. package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js +2 -0
  479. package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js.map +1 -0
  480. package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js +2 -0
  481. package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js.map +1 -0
  482. package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js +2 -0
  483. package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js.map +1 -0
  484. package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js +2 -0
  485. package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js.map +1 -0
  486. package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js +3 -0
  487. package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js.map +1 -0
  488. package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js +2 -0
  489. package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js.map +1 -0
  490. package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js +2 -0
  491. package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js.map +1 -0
  492. package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js +2 -0
  493. package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js.map +1 -0
  494. package/dist/core/web/public/next/index.html +2 -1
  495. package/dist/core/web/remote-gateway-policy.js +5 -0
  496. package/dist/core/web/remote-gateway-policy.js.map +1 -1
  497. package/dist/core/web/static.d.ts +4 -3
  498. package/dist/core/web/static.js +8 -5
  499. package/dist/core/web/static.js.map +1 -1
  500. package/dist/release-dependency-inventory.json +1 -1
  501. package/node_modules/fast-uri/index.js +20 -5
  502. package/node_modules/fast-uri/lib/utils.js +8 -1
  503. package/node_modules/fast-uri/package.json +1 -1
  504. package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
  505. package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
  506. package/node_modules/ip-address/README.md +134 -134
  507. package/node_modules/ip-address/dist/address-error.d.ts +11 -0
  508. package/node_modules/ip-address/dist/address-error.js.map +1 -1
  509. package/node_modules/ip-address/dist/ipv4.d.ts +22 -6
  510. package/node_modules/ip-address/dist/ipv4.js +22 -6
  511. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  512. package/node_modules/ip-address/dist/ipv6.d.ts +26 -8
  513. package/node_modules/ip-address/dist/ipv6.js +46 -29
  514. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  515. package/node_modules/ip-address/dist/v6/constants.js +1 -0
  516. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  517. package/node_modules/ip-address/package.json +1 -1
  518. package/package.json +5 -4
  519. package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js +0 -2
  520. package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js.map +0 -1
  521. package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js +0 -2
  522. package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js.map +0 -1
  523. package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js +0 -2
  524. package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js.map +0 -1
  525. package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js +0 -2
  526. package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js.map +0 -1
  527. package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js +0 -2
  528. package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js.map +0 -1
  529. package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js +0 -2
  530. package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js.map +0 -1
  531. package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js +0 -3
  532. package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js.map +0 -1
  533. package/dist/core/web/public/next/assets/App-DebYuj1v.js +0 -8
  534. package/dist/core/web/public/next/assets/App-DebYuj1v.js.map +0 -1
  535. package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js +0 -2
  536. package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js.map +0 -1
  537. package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js +0 -2
  538. package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js.map +0 -1
  539. package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js +0 -2
  540. package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js.map +0 -1
  541. package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js +0 -3
  542. package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js.map +0 -1
  543. package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js +0 -2
  544. package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js.map +0 -1
  545. package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js +0 -2
  546. package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js.map +0 -1
  547. package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js +0 -2
  548. package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js.map +0 -1
  549. package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js +0 -7
  550. package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js.map +0 -1
  551. package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js +0 -2
  552. package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js.map +0 -1
  553. package/dist/core/web/public/next/assets/Button-DP2ImS5n.js +0 -2
  554. package/dist/core/web/public/next/assets/Button-DP2ImS5n.js.map +0 -1
  555. package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js +0 -2
  556. package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js.map +0 -1
  557. package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js +0 -16
  558. package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js.map +0 -1
  559. package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js +0 -2
  560. package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js.map +0 -1
  561. package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js +0 -2
  562. package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js.map +0 -1
  563. package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js +0 -3
  564. package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js.map +0 -1
  565. package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js +0 -5
  566. package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js.map +0 -1
  567. package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js +0 -2
  568. package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js.map +0 -1
  569. package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js +0 -3
  570. package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js.map +0 -1
  571. package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js +0 -3
  572. package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js.map +0 -1
  573. package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js +0 -9
  574. package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js.map +0 -1
  575. package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js +0 -3
  576. package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js.map +0 -1
  577. package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js +0 -4
  578. package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js.map +0 -1
  579. package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js +0 -2
  580. package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js.map +0 -1
  581. package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js +0 -2
  582. package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js.map +0 -1
  583. package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js +0 -2
  584. package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js.map +0 -1
  585. package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js +0 -2
  586. package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js.map +0 -1
  587. package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js +0 -2
  588. package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js.map +0 -1
  589. package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js +0 -2
  590. package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js.map +0 -1
  591. package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js +0 -2
  592. package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js.map +0 -1
  593. package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js +0 -2
  594. package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js.map +0 -1
  595. package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js +0 -2
  596. package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js.map +0 -1
  597. package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js +0 -2
  598. package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js.map +0 -1
  599. package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js +0 -2
  600. package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js.map +0 -1
  601. package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js +0 -2
  602. package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js.map +0 -1
  603. package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js +0 -2
  604. package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js.map +0 -1
  605. package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js +0 -5
  606. package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js.map +0 -1
  607. package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js +0 -2
  608. package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js.map +0 -1
  609. package/dist/core/web/public/next/assets/GearTray-Cc14h572.js +0 -2
  610. package/dist/core/web/public/next/assets/GearTray-Cc14h572.js.map +0 -1
  611. package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js +0 -2
  612. package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js.map +0 -1
  613. package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js +0 -3
  614. package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js.map +0 -1
  615. package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js +0 -2
  616. package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js.map +0 -1
  617. package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js +0 -3
  618. package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js.map +0 -1
  619. package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js +0 -2
  620. package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js.map +0 -1
  621. package/dist/core/web/public/next/assets/Input-BEF-ScuG.js +0 -2
  622. package/dist/core/web/public/next/assets/Input-BEF-ScuG.js.map +0 -1
  623. package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js +0 -9
  624. package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js.map +0 -1
  625. package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js +0 -2
  626. package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js.map +0 -1
  627. package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js +0 -3
  628. package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js.map +0 -1
  629. package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js +0 -2
  630. package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js.map +0 -1
  631. package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js +0 -2
  632. package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js.map +0 -1
  633. package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js +0 -2
  634. package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js.map +0 -1
  635. package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js +0 -2
  636. package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js.map +0 -1
  637. package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js +0 -2
  638. package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js.map +0 -1
  639. package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js +0 -2
  640. package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js.map +0 -1
  641. package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js +0 -3
  642. package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js.map +0 -1
  643. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js +0 -72
  644. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js.map +0 -1
  645. package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js +0 -2
  646. package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js.map +0 -1
  647. package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js +0 -2
  648. package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js.map +0 -1
  649. package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js +0 -3
  650. package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js.map +0 -1
  651. package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js +0 -2
  652. package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js.map +0 -1
  653. package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js +0 -2
  654. package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js.map +0 -1
  655. package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js +0 -3
  656. package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js.map +0 -1
  657. package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js +0 -2
  658. package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js.map +0 -1
  659. package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js +0 -7
  660. package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js.map +0 -1
  661. package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js +0 -2
  662. package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js.map +0 -1
  663. package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js +0 -3
  664. package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js.map +0 -1
  665. package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js +0 -2
  666. package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js.map +0 -1
  667. package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js +0 -2
  668. package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js.map +0 -1
  669. package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js +0 -2
  670. package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js.map +0 -1
  671. package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js +0 -4
  672. package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js.map +0 -1
  673. package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js +0 -3
  674. package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js.map +0 -1
  675. package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js +0 -3
  676. package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js.map +0 -1
  677. package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js +0 -9
  678. package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js.map +0 -1
  679. package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js +0 -2
  680. package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js.map +0 -1
  681. package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js +0 -2
  682. package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js.map +0 -1
  683. package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js +0 -2
  684. package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js.map +0 -1
  685. package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js +0 -2
  686. package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js.map +0 -1
  687. package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js +0 -2
  688. package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js.map +0 -1
  689. package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js +0 -2
  690. package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js.map +0 -1
  691. package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js +0 -2
  692. package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js.map +0 -1
  693. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js +0 -7
  694. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js.map +0 -1
  695. package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js +0 -3
  696. package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js.map +0 -1
  697. package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js +0 -3
  698. package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js.map +0 -1
  699. package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js +0 -2
  700. package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js.map +0 -1
  701. package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js +0 -2
  702. package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js.map +0 -1
  703. package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js +0 -2
  704. package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js.map +0 -1
  705. package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js +0 -3
  706. package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js.map +0 -1
  707. package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js +0 -3
  708. package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js.map +0 -1
  709. package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js +0 -2
  710. package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js.map +0 -1
  711. package/dist/core/web/public/next/assets/Select-zXMdgblm.js +0 -2
  712. package/dist/core/web/public/next/assets/Select-zXMdgblm.js.map +0 -1
  713. package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js +0 -2
  714. package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js.map +0 -1
  715. package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js +0 -2
  716. package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js.map +0 -1
  717. package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js +0 -2
  718. package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js.map +0 -1
  719. package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js +0 -2
  720. package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js.map +0 -1
  721. package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js +0 -2
  722. package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js.map +0 -1
  723. package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js +0 -3
  724. package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js.map +0 -1
  725. package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js +0 -2
  726. package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js.map +0 -1
  727. package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js +0 -2
  728. package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js.map +0 -1
  729. package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js +0 -3
  730. package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js.map +0 -1
  731. package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js +0 -2
  732. package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js.map +0 -1
  733. package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js +0 -2
  734. package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js.map +0 -1
  735. package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js +0 -2
  736. package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js.map +0 -1
  737. package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js +0 -2
  738. package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js.map +0 -1
  739. package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js +0 -2
  740. package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js.map +0 -1
  741. package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js +0 -2
  742. package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js.map +0 -1
  743. package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js +0 -2
  744. package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js.map +0 -1
  745. package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js +0 -2
  746. package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js.map +0 -1
  747. package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js +0 -2
  748. package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js.map +0 -1
  749. package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js +0 -2
  750. package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js.map +0 -1
  751. package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js +0 -2
  752. package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js.map +0 -1
  753. package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js +0 -26
  754. package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js.map +0 -1
  755. package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js +0 -3
  756. package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js.map +0 -1
  757. package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js +0 -2
  758. package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js.map +0 -1
  759. package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js +0 -2
  760. package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js.map +0 -1
  761. package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js +0 -9
  762. package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js.map +0 -1
  763. package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js +0 -3
  764. package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js.map +0 -1
  765. package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js +0 -2
  766. package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js.map +0 -1
  767. package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js +0 -3
  768. package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js.map +0 -1
  769. package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js +0 -3
  770. package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js.map +0 -1
  771. package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js +0 -2
  772. package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js.map +0 -1
  773. package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js +0 -2
  774. package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js.map +0 -1
  775. package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js +0 -2
  776. package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js.map +0 -1
  777. package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js +0 -2
  778. package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js.map +0 -1
  779. package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js +0 -6
  780. package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js.map +0 -1
  781. package/dist/core/web/public/next/assets/actions-CyO4R-IO.js +0 -2
  782. package/dist/core/web/public/next/assets/actions-CyO4R-IO.js.map +0 -1
  783. package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js +0 -2
  784. package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js.map +0 -1
  785. package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js +0 -7
  786. package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js.map +0 -1
  787. package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js +0 -2
  788. package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js.map +0 -1
  789. package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js +0 -2
  790. package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js.map +0 -1
  791. package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js +0 -2
  792. package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js.map +0 -1
  793. package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js +0 -2
  794. package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js.map +0 -1
  795. package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js +0 -2
  796. package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js.map +0 -1
  797. package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js +0 -2
  798. package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js.map +0 -1
  799. package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js +0 -2
  800. package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js.map +0 -1
  801. package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js +0 -2
  802. package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js.map +0 -1
  803. package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js +0 -2
  804. package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js.map +0 -1
  805. package/dist/core/web/public/next/assets/charts-D3I0q4hG.js +0 -2
  806. package/dist/core/web/public/next/assets/charts-D3I0q4hG.js.map +0 -1
  807. package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js +0 -2
  808. package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js.map +0 -1
  809. package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js +0 -2
  810. package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js.map +0 -1
  811. package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js +0 -2
  812. package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js.map +0 -1
  813. package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js +0 -2
  814. package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js.map +0 -1
  815. package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js +0 -2
  816. package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js.map +0 -1
  817. package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js +0 -2
  818. package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js.map +0 -1
  819. package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js +0 -2
  820. package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js.map +0 -1
  821. package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js +0 -2
  822. package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js.map +0 -1
  823. package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js +0 -2
  824. package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js.map +0 -1
  825. package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js +0 -3
  826. package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js.map +0 -1
  827. package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js +0 -2
  828. package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js.map +0 -1
  829. package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js +0 -2
  830. package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js.map +0 -1
  831. package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js +0 -2
  832. package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js.map +0 -1
  833. package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js +0 -2
  834. package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js.map +0 -1
  835. package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js +0 -2
  836. package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js.map +0 -1
  837. package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js +0 -2
  838. package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js.map +0 -1
  839. package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js +0 -2
  840. package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js.map +0 -1
  841. package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js +0 -2
  842. package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js.map +0 -1
  843. package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js +0 -2
  844. package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js.map +0 -1
  845. package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js +0 -2
  846. package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js.map +0 -1
  847. package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js +0 -2
  848. package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js.map +0 -1
  849. package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js +0 -3
  850. package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js.map +0 -1
  851. package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js +0 -2
  852. package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js.map +0 -1
  853. package/dist/core/web/public/next/assets/format-CcEKjUou.js +0 -2
  854. package/dist/core/web/public/next/assets/format-CcEKjUou.js.map +0 -1
  855. package/dist/core/web/public/next/assets/git-model-DL3MwN93.js +0 -5
  856. package/dist/core/web/public/next/assets/git-model-DL3MwN93.js.map +0 -1
  857. package/dist/core/web/public/next/assets/global-BWc2NPzv.js +0 -3
  858. package/dist/core/web/public/next/assets/global-BWc2NPzv.js.map +0 -1
  859. package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js +0 -3
  860. package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js.map +0 -1
  861. package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js +0 -2
  862. package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js.map +0 -1
  863. package/dist/core/web/public/next/assets/headroom-CP99UxyV.js +0 -2
  864. package/dist/core/web/public/next/assets/headroom-CP99UxyV.js.map +0 -1
  865. package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js +0 -2
  866. package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js.map +0 -1
  867. package/dist/core/web/public/next/assets/icons-U34oiN9M.js +0 -2
  868. package/dist/core/web/public/next/assets/icons-U34oiN9M.js.map +0 -1
  869. package/dist/core/web/public/next/assets/index-BbDqdepe.js +0 -11
  870. package/dist/core/web/public/next/assets/index-BbDqdepe.js.map +0 -1
  871. package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js +0 -2
  872. package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js.map +0 -1
  873. package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js +0 -2
  874. package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js.map +0 -1
  875. package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js +0 -2
  876. package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js.map +0 -1
  877. package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js +0 -2
  878. package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js.map +0 -1
  879. package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js +0 -2
  880. package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js.map +0 -1
  881. package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js +0 -2
  882. package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js.map +0 -1
  883. package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js +0 -2
  884. package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js.map +0 -1
  885. package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js +0 -7
  886. package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js.map +0 -1
  887. package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js +0 -2
  888. package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js.map +0 -1
  889. package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js +0 -2
  890. package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js.map +0 -1
  891. package/dist/core/web/public/next/assets/nav-CM-mJcSq.js +0 -2
  892. package/dist/core/web/public/next/assets/nav-CM-mJcSq.js.map +0 -1
  893. package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js +0 -2
  894. package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js.map +0 -1
  895. package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js +0 -2
  896. package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js.map +0 -1
  897. package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js +0 -2
  898. package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js.map +0 -1
  899. package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js +0 -2
  900. package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js.map +0 -1
  901. package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js +0 -2
  902. package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js.map +0 -1
  903. package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js +0 -2
  904. package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js.map +0 -1
  905. package/dist/core/web/public/next/assets/panes-BjUzIDw6.js +0 -3
  906. package/dist/core/web/public/next/assets/panes-BjUzIDw6.js.map +0 -1
  907. package/dist/core/web/public/next/assets/path-display-HyxETV-f.js +0 -2
  908. package/dist/core/web/public/next/assets/path-display-HyxETV-f.js.map +0 -1
  909. package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js +0 -2
  910. package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js.map +0 -1
  911. package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js +0 -2
  912. package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js.map +0 -1
  913. package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js +0 -2
  914. package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js.map +0 -1
  915. package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js +0 -2
  916. package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js.map +0 -1
  917. package/dist/core/web/public/next/assets/primitives-BEXDE-HP.js +0 -1
  918. package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js +0 -2
  919. package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js.map +0 -1
  920. package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js +0 -2
  921. package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js.map +0 -1
  922. package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js +0 -2
  923. package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js.map +0 -1
  924. package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js +0 -3
  925. package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js.map +0 -1
  926. package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js +0 -2
  927. package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js.map +0 -1
  928. package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js +0 -2
  929. package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js.map +0 -1
  930. package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js +0 -2
  931. package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js.map +0 -1
  932. package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js +0 -2
  933. package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js.map +0 -1
  934. package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js +0 -2
  935. package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js.map +0 -1
  936. package/dist/core/web/public/next/assets/sheet-D0ciShoy.js +0 -2
  937. package/dist/core/web/public/next/assets/sheet-D0ciShoy.js.map +0 -1
  938. package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js +0 -2
  939. package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js.map +0 -1
  940. package/dist/core/web/public/next/assets/slots-m3L6Ints.js +0 -3
  941. package/dist/core/web/public/next/assets/slots-m3L6Ints.js.map +0 -1
  942. package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js +0 -4
  943. package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js.map +0 -1
  944. package/dist/core/web/public/next/assets/sse-CK65-Cun.js +0 -2
  945. package/dist/core/web/public/next/assets/sse-CK65-Cun.js.map +0 -1
  946. package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js +0 -2
  947. package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js.map +0 -1
  948. package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js +0 -2
  949. package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js.map +0 -1
  950. package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js +0 -2
  951. package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js.map +0 -1
  952. package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js +0 -2
  953. package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js.map +0 -1
  954. package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js +0 -2
  955. package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js.map +0 -1
  956. package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js +0 -6
  957. package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js.map +0 -1
  958. package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js +0 -2
  959. package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js.map +0 -1
  960. package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js +0 -2
  961. package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js.map +0 -1
  962. package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js +0 -2
  963. package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js.map +0 -1
  964. package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js +0 -2
  965. package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js.map +0 -1
  966. package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js +0 -2
  967. package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js.map +0 -1
  968. package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js +0 -2
  969. package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js.map +0 -1
  970. package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js +0 -2
  971. package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js.map +0 -1
  972. package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js +0 -2
  973. package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js.map +0 -1
  974. package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js +0 -2
  975. package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js.map +0 -1
  976. package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js +0 -2
  977. package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js.map +0 -1
  978. package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js +0 -2
  979. package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js.map +0 -1
  980. package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js +0 -2
  981. package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js.map +0 -1
  982. package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js +0 -2
  983. package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js.map +0 -1
  984. package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js +0 -2
  985. package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js.map +0 -1
  986. package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js +0 -2
  987. package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js.map +0 -1
  988. package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js +0 -2
  989. package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js.map +0 -1
  990. package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js +0 -3
  991. package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js.map +0 -1
  992. package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js +0 -2
  993. package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js.map +0 -1
  994. package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js +0 -2
  995. package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js.map +0 -1
  996. package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js +0 -2
  997. package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/approvals/ApprovalDetail.tsx","../../../../../../src/web-ui/routes/verse/shell/cloud-triage.ts","../../../../../../src/web-ui/routes/verse/shell/NeedsYouDrawer.tsx"],"sourcesContent":["/**\n * routes/verse/approvals/ApprovalDetail.tsx — everything a human needs before\n * deciding, and an approve path that cannot fire on one click.\n *\n * Reuses the inbox review machinery verbatim (`DiffViewer` + `diff-parser.ts`\n * + `highlight.ts`, and `ConfirmDialog`) rather than growing a second diff\n * renderer, per docs/VERSE-CONTRACT-V2.md.\n *\n * Two rules enforced here:\n * - **Judge evidence is epistemic.** A `judge-parse-failure` /\n * `judge-network-failure` is an infra failure, never a considered verdict,\n * and a degraded decisions-ledger read renders \"unknown\" via <Epistemic/>\n * instead of letting an empty array read as \"never judged\".\n * - **Nothing signed is ever printed.** Provenance shows WHETHER a proposal\n * carries a producer attestation, never the HMAC itself — the same rule\n * that keeps launcher commands and tokens off every Verse payload.\n */\nimport { useState } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Epistemic } from '../../../components/primitives/Epistemic.js';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { SkeletonLine } from '../../../components/primitives/Skeleton.js';\nimport { StatusBadge, type Tone } from '../../../components/primitives/StatusBadge.js';\nimport type { DecisionEntry, JudgeDecisionReasonCode } from '../../../data/api-types.js';\nimport { hasMutationHold } from '../../../data/auth-store.js';\nimport { DispatchDisabledError } from '../../../data/client.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { approveProposal, rejectProposal } from '../../../data/mutations.js';\nimport { proposalDetailQuery } from '../../../data/queries.js';\nimport { ConfirmDialog } from '../../inbox/ConfirmDialog.js';\nimport { DiffViewer } from '../../inbox/DiffViewer.js';\n// Shell helpers, not autonomy/'s: 3.10 moves the Autonomy panels under Fleet\n// (C7), and the drawer that hosts this view must not break when they move.\nimport { describeActionError as describeControlError } from '../shell/guarded-action.js';\n// A pure text helper (no panel code): ISO instants → local time, \".;\" → \";\".\nimport { tidyProse } from '../autonomy/format.js';\nimport {\n describeApproveConsequence,\n describeDiffStats,\n engineOf,\n formatDiffStats,\n kindLabel,\n localStamp,\n longAgo,\n parseRunSummary,\n reachesRemote,\n readableTitle,\n repoName,\n} from './approvals-model.js';\nimport styles from './approvals.module.css';\n\nconst JUDGE_REASON_DISPLAY: Record<JudgeDecisionReasonCode, { label: string; tone: Tone }> = {\n 'judge-ship-would-merge': { label: 'Ship (would merge)', tone: 'success' },\n 'judge-ship-review-required': { label: 'Ship (review required)', tone: 'success' },\n 'judge-review': { label: 'Review', tone: 'warning' },\n 'judge-noise': { label: 'Noise', tone: 'neutral' },\n 'judge-harmful': { label: 'Harmful', tone: 'danger' },\n 'judge-verdict-unrecognized': { label: 'Unrecognized verdict', tone: 'unknown' },\n 'judge-parse-failure': { label: 'Judge parse failure — not a review', tone: 'unknown' },\n 'judge-network-failure': { label: 'Judge network failure — not a review', tone: 'unknown' },\n};\n\nfunction latestJudged(decisions: DecisionEntry[]): DecisionEntry | null {\n const judged = decisions.filter((d) => d.action === 'judged' && d.judgeReasonCode);\n if (judged.length === 0) return null;\n return judged.reduce((a, b) => (Date.parse(b.ts) > Date.parse(a.ts) ? b : a));\n}\n\ntype PendingAction = 'approve' | 'reject' | null;\n\nexport interface ApprovalDetailProps {\n id: string;\n dispatchEnabled: boolean;\n onDispatchDisabled: () => void;\n onDecided: () => void;\n}\n\nexport function ApprovalDetail({ id, dispatchEnabled, onDispatchDisabled, onDecided }: ApprovalDetailProps) {\n const query = useQuery(proposalDetailQuery(id));\n const [pendingAction, setPendingAction] = useState<PendingAction>(null);\n const [tokenPrompt, setTokenPrompt] = useState(false);\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [busy, setBusy] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n // Confirmation FIRST, then the token (SPEC-310C §1; the same order as the\n // Needs-you drawer's A / R keys — shell/guarded-action.tsx). An operator who\n // pressed Approve by mistake backs out at a prompt that says what is about\n // to happen, not at one asking for a secret.\n function requestAction(action: 'approve' | 'reject') {\n setActionError(null);\n setPendingAction(action);\n setConfirmOpen(true);\n }\n\n function closeTokenPrompt() {\n setTokenPrompt(false);\n // Live read — MutationTokenDialog closes synchronously after setToken().\n if (hasMutationHold()) {\n setConfirmOpen(true);\n void execute();\n } else {\n setPendingAction(null);\n }\n }\n\n function confirmAction() {\n if (!pendingAction) return;\n if (!hasMutationHold()) {\n setConfirmOpen(false);\n setTokenPrompt(true);\n return;\n }\n void execute();\n }\n\n async function execute() {\n if (!pendingAction) return;\n setBusy(true);\n setActionError(null);\n try {\n if (pendingAction === 'approve') await approveProposal(id);\n else await rejectProposal(id);\n setConfirmOpen(false);\n setPendingAction(null);\n onDecided();\n } catch (err) {\n if (err instanceof DispatchDisabledError) {\n setConfirmOpen(false);\n setPendingAction(null);\n onDispatchDisabled();\n } else {\n setActionError(describeControlError(err));\n }\n } finally {\n setBusy(false);\n }\n }\n\n if (query.status === 'loading') {\n return (\n <div className={styles.detail}>\n <SkeletonLine width=\"55%\" />\n <SkeletonLine width=\"30%\" />\n <SkeletonLine width=\"88%\" />\n </div>\n );\n }\n\n if (query.status === 'error' || !query.data) {\n return (\n <p className={styles.error} role=\"alert\">\n {query.error?.message ?? 'Could not load this proposal.'}\n </p>\n );\n }\n\n const p = query.data;\n const evidence = p.decisionEvidence;\n const judged = latestJudged(evidence?.decisions ?? []);\n const judgeDisplay = judged?.judgeReasonCode ? JUDGE_REASON_DISPLAY[judged.judgeReasonCode] : null;\n const canDecide = p.status === 'pending' && dispatchEnabled;\n const engine = engineOf(p);\n const consequence = describeApproveConsequence(p.kind, p.repo);\n const title = readableTitle(p.title);\n const project = repoName(p.repo);\n const facts = parseRunSummary(p.summary);\n // The run facts are shown as stats; only what the summary says beyond them stays a sentence.\n const summaryText = facts ? facts.rest : p.summary ? tidyProse(p.summary) : null;\n\n return (\n <div className={styles.detail}>\n <header className={styles.detailHead}>\n <p className={styles.eyebrow}>\n {kindLabel(p.kind)}\n {title.eyebrow ? ` \\u00b7 ${title.eyebrow}` : ''}\n </p>\n {/* Two lines at most; the whole title (as the server sent it) is the tooltip. */}\n <h3 className={styles.detailTitle} title={p.title}>{title.text}</h3>\n <div className={styles.detailMeta}>\n <StatusBadge status={p.status} />\n {project ? (\n <span className={styles.project} title={p.repo ?? undefined}>{project}</span>\n ) : (\n <span>no repository</span>\n )}\n <span>{p.riskClass ? `${p.riskClass} risk` : 'risk unstated'}</span>\n {engine ? <code title=\"The model that produced this change\">{engine}</code> : null}\n <span title={localStamp(p.createdAt)}>created {longAgo(p.createdAt)}</span>\n {p.decidedAt ? <span title={localStamp(p.decidedAt)}>decided {longAgo(p.decidedAt)}</span> : null}\n {query.status === 'refreshing' ? <RefreshIndicator /> : null}\n </div>\n {facts ? (\n <p className={styles.runFacts}>\n {/* aria-label on a plain span is ignored (a generic role cannot be\n named), so the glyphs are hidden and the sentence is real,\n visually-hidden text — NeedsYouRunFacts' pattern. */}\n <span className={styles.diffStats} aria-hidden=\"true\">\n {formatDiffStats(facts)}\n </span>\n <span className=\"visually-hidden\">{describeDiffStats(facts)}</span>\n <span aria-hidden=\"true\">·</span>\n <span className={styles.runSource} title={facts.sourceHint ?? undefined}>\n {facts.partial ? 'Partial \\u00b7 ' : ''}{facts.sourceLabel}\n </span>\n {engine === null ? (\n <>\n <span aria-hidden=\"true\">·</span>\n <code title=\"The model that produced this change\">{facts.model}</code>\n </>\n ) : null}\n </p>\n ) : null}\n {summaryText ? <p className={styles.summary}>{summaryText}</p> : null}\n </header>\n\n <section className={styles.block} aria-label=\"Evidence\">\n <h4 className={styles.blockTitle}>Evidence</h4>\n <dl className={styles.defs}>\n <dt>Judge verdict</dt>\n <dd>\n <Epistemic quality={evidence?.sourceQuality} label=\"judge verdict\">\n {judgeDisplay && judged?.judgeReasonCode ? (\n <StatusBadge status={judged.judgeReasonCode} tone={judgeDisplay.tone}>\n {judgeDisplay.label}\n </StatusBadge>\n ) : (\n <span className={styles.muted}>not yet judged</span>\n )}\n </Epistemic>\n </dd>\n\n <dt>Verification</dt>\n <dd>\n {p.verifyResult ? (\n <>\n <StatusBadge status={p.verifyResult.passed ? 'success' : 'failed'}>\n {p.verifyResult.passed ? 'passed' : 'failed'}\n </StatusBadge>\n {p.verifyResult.ran && p.verifyResult.ran.length > 0 ? (\n <span className={styles.muted}> · ran {p.verifyResult.ran.map((r) => r.kind).join(', ')}</span>\n ) : null}\n {!p.verifyResult.passed && p.verifyResult.failureCategory && p.verifyResult.failureCategory !== 'code' ? (\n <span className={styles.muted}> · {p.verifyResult.failureCategory} failure — the verifier itself, not the diff</span>\n ) : null}\n {p.verifyResult.failed && p.verifyResult.failed.length > 0 ? (\n <p className={styles.failedChecks}>failed: {p.verifyResult.failed.join(', ')}</p>\n ) : null}\n </>\n ) : (\n <span className={styles.muted}>not verified</span>\n )}\n </dd>\n\n {p.decisionReason ? (\n <>\n <dt>Decision reason</dt>\n <dd>{tidyProse(p.decisionReason)}</dd>\n </>\n ) : null}\n\n {p.evidenceOutcome ? (\n <>\n <dt>Gates</dt>\n <dd className={styles.muted}>\n {p.evidenceOutcome.gateCount ?? 0} gate{p.evidenceOutcome.gateCount === 1 ? '' : 's'}\n {p.evidenceOutcome.policyAction ? ` · policy ${p.evidenceOutcome.policyAction}` : ''}\n {p.evidenceOutcome.trustBasis ? ` · trust ${p.evidenceOutcome.trustBasis}` : ''}\n </dd>\n </>\n ) : null}\n\n {p.result ? (\n <>\n <dt>Result</dt>\n <dd>{tidyProse(p.result)}</dd>\n </>\n ) : null}\n </dl>\n </section>\n\n <section className={styles.block} aria-label=\"Provenance\">\n <h4 className={styles.blockTitle}>Provenance</h4>\n <dl className={styles.defs}>\n <dt>Produced by</dt>\n <dd>{engine ? <code>{engine}</code> : <span className={styles.muted}>unknown engine</span>}</dd>\n <dt>Origin</dt>\n <dd>{p.origin}</dd>\n {facts ? (\n <>\n <dt>How it was made</dt>\n <dd>\n <span title={facts.sourceHint ?? undefined}>{facts.sourceLabel}</span>\n {facts.sourceHint ? <p className={styles.hint}>{facts.sourceHint}</p> : null}\n </dd>\n </>\n ) : null}\n {p.repo ? (\n <>\n <dt>Repository</dt>\n <dd><code>{p.repo}</code></dd>\n </>\n ) : null}\n {p.workItemId ? (\n <>\n <dt>Work item</dt>\n <dd>\n <code>{p.workItemId}</code>\n </dd>\n </>\n ) : null}\n {p.runId ? (\n <>\n <dt>Run</dt>\n <dd>\n <code>{p.runId}</code>\n </dd>\n </>\n ) : null}\n <dt>Attestation</dt>\n <dd className={styles.muted}>\n {/* The signature itself is never rendered — only whether one exists. */}\n {p.producerProvenanceSig\n ? `signed by the sandboxed producer (v${p.producerProvenanceVersion ?? 2})`\n : p.provenanceSig\n ? 'legacy signature present'\n : 'unsigned — earns no positive routing credit'}\n {p.diffHash ? ' · diff hashed at signing time' : ''}\n </dd>\n </dl>\n </section>\n\n <section className={styles.block} aria-label=\"Diff\">\n <h4 className={styles.blockTitle}>Diff</h4>\n <DiffViewer diff={p.diff} proposalKind={p.kind} />\n </section>\n\n {p.status === 'pending' ? (\n <footer className={styles.actions}>\n <p className={styles.actionNote}>\n {dispatchEnabled ? consequence : 'Read-only session — approve and reject are unavailable without dispatch.'}\n </p>\n {actionError && !confirmOpen ? (\n <p className={styles.error} role=\"alert\">\n {actionError}\n </p>\n ) : null}\n <button type=\"button\" className={styles.reject} disabled={!canDecide || busy} onClick={() => requestAction('reject')}>\n Reject\n </button>\n <button type=\"button\" className={styles.approve} disabled={!canDecide || busy} onClick={() => requestAction('approve')}>\n Approve…\n </button>\n </footer>\n ) : (\n <footer className={styles.decided}>\n This proposal is already <strong>{p.status}</strong> — no further action is available.\n </footer>\n )}\n\n <MutationTokenDialog\n open={tokenPrompt}\n onClose={closeTokenPrompt}\n reason={\n pendingAction === 'approve'\n ? 'Approving a proposal writes to a real repository and requires the dispatch token.'\n : 'Rejecting a proposal requires the dispatch token.'\n }\n tokenHelp=\"the mutation token ashlr verse printed\"\n />\n\n <ConfirmDialog\n open={confirmOpen}\n onClose={() => {\n setConfirmOpen(false);\n setPendingAction(null);\n setActionError(null);\n }}\n title={\n pendingAction === 'approve'\n ? `Approve this ${p.kind} against ${project ?? 'the repository'}?`\n : 'Reject this proposal?'\n }\n body={\n pendingAction === 'approve' ? (\n <>\n <strong>{title.text}</strong>\n <br />\n {kindLabel(p.kind)} · <strong>{project ?? 'unknown repository'}</strong>\n {p.repo ? (\n <>\n <br />\n {/* The exact checkout the write lands in — the one place the full path belongs. */}\n <code>{p.repo}</code>\n </>\n ) : null}\n <br />\n <br />\n {consequence}\n {reachesRemote(p.kind) ? (\n <>\n <br />\n <br />\n This one leaves your machine.\n </>\n ) : null}\n </>\n ) : (\n <>\n This rejects <strong>{title.text}</strong> and discards it. It stays in history as rejected and is never\n applied.\n </>\n )\n }\n confirmLabel={pendingAction === 'approve' ? `Approve and ${reachesRemote(p.kind) ? 'open the pull request' : 'apply'}` : 'Reject'}\n // Approve is the irreversible one — a `pr` pushes a branch and opens a\n // real PR other people can see, a `patch` writes to disk now. Reject\n // only discards a proposal that stays in history. Putting the danger\n // styling on Reject trained the reflex that the red button is the safe\n // one; VERSE-CONTRACT-V2 calls Approve destructive explicitly.\n destructive={pendingAction === 'approve'}\n busy={busy}\n error={actionError}\n onConfirm={confirmAction}\n />\n </div>\n );\n}\n","/**\n * routes/verse/shell/cloud-triage.ts — the Needs-you drawer's cloud PR\n * triage (3.13): each cloud PR's gate preview (GET /api/verse/cloud/previews,\n * core/cloud/pr-preview.ts), the chip a row shows for it, and running one\n * action kind over several items at once (\"Land all clean\", or A / R / E on a\n * multi-selection).\n *\n * 3.15 — Devin PRs are triaged the same way: their previews come from GET\n * /api/verse/devin/previews (same shape; the server's shared pr-actions.ts\n * computes both) and are merged with the cloud lane's. Each lane's endpoint\n * may only speak for its own rows (`cloud-ct_…` / `devin-dv_…` item ids), and\n * one lane failing — a 404 while Devin is off — never costs the other its\n * chips.\n *\n * The actions themselves are the items' own (cloud-api.ts triageActions maps\n * Land / Close / Update branch onto approve / reject / fix), so nothing here\n * builds a route: a batch POSTs each item's own request, pinned by the server\n * to the head SHA its preview judged.\n *\n * Loads with the drawer (VerseApp imports the drawer with import()), never\n * at first paint; pr-preview.ts is imported for its TYPES only — its value\n * graph is the server's merge gates.\n */\nimport type { CloudPrCheck, CloudPrPreview, CloudPrPreviewsResponse } from '../../../../core/cloud/pr-preview.js';\nimport { CLOUD_TASK_ID_PATTERN, VERSE_CLOUD_PATH } from '../../../../core/cloud/types.js';\nimport { DEVIN_TASK_ID_PATTERN, VERSE_DEVIN_PATH } from '../../../../core/devin/types.js';\nimport { isSafeApiRoute, type NeedsYouActionKind, type NeedsYouItem } from '../../../../core/verse/workbench-types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { ApiError, apiGet, apiPost } from '../../../data/client.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { requestGuarded, describeActionError } from './guarded-action.js';\nimport { markResolved } from './needs-you-actions.js';\nimport { actionOf, readableItemTitle } from './needs-you-model.js';\nimport { refreshActivity } from './useActivity.js';\n\nexport const CLOUD_PREVIEWS_KEY = 'verse-cloud-previews';\nconst PREVIEWS_PATH = `${VERSE_CLOUD_PATH}/previews`;\n/** core/devin/devin-api.ts VERSE_DEVIN_PREVIEWS_PATH (that module is server-only). */\nconst DEVIN_PREVIEWS_PATH = `${VERSE_DEVIN_PATH}/previews`;\n\nexport type DeliveryLane = 'cloud' | 'devin';\n\n/** Needs-you item id prefix of each lane's PR rows (cloud-api.ts / devin-api.ts). */\nexport const PR_ITEM_PREFIX: Readonly<Record<DeliveryLane, string>> = {\n cloud: 'fleet:owner-lane-pr:cloud-',\n devin: 'fleet:owner-lane-pr:devin-',\n};\n\n/** A PR row of either lane — the only rows with a gate preview. */\nexport function isDeliveryPrItem(id: string): boolean {\n return id.startsWith(PR_ITEM_PREFIX.cloud) || id.startsWith(PR_ITEM_PREFIX.devin);\n}\n\nconst ITEM_TASK_RE = /^(?:fleet:owner-lane-pr|chats:chat-failed):(cloud|devin)-([^:]+)$/;\n\n/**\n * The lane and task behind a cloud or Devin item (its PR, its failed launch,\n * a waiting Devin session) — for its evidence. Null unless the id carries a\n * task id OF THAT LANE's own format, so no other id is ever spliced into a\n * request path (`cloud-dv_…` or `devin-ct_…` are refused).\n */\nexport function deliveryTaskOfItem(id: string): { lane: DeliveryLane; taskId: string } | null {\n const match = ITEM_TASK_RE.exec(id);\n if (!match) return null;\n const lane = match[1] as DeliveryLane;\n const taskId = match[2]!;\n const pattern = lane === 'cloud' ? CLOUD_TASK_ID_PATTERN : DEVIN_TASK_ID_PATTERN;\n return pattern.test(taskId) ? { lane, taskId } : null;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\n\nfunction isCheck(value: unknown): value is CloudPrCheck {\n return isRecord(value) && typeof value['id'] === 'string' && typeof value['ok'] === 'boolean' && typeof value['text'] === 'string';\n}\n\nfunction isPreview(value: unknown): value is CloudPrPreview {\n return isRecord(value)\n && typeof value['itemId'] === 'string'\n && typeof value['headSha'] === 'string'\n && typeof value['wouldAutoLand'] === 'boolean'\n && typeof value['reason'] === 'string'\n && Array.isArray(value['checks']) && value['checks'].every(isCheck);\n}\n\n/**\n * Previews by Needs-you item id. A malformed entry is dropped, never guessed\n * at. With `lane`, only that lane's rows are kept: a lane's endpoint cannot\n * vouch for the other lane's pull requests.\n */\nexport function narrowPreviews(raw: unknown, lane?: DeliveryLane): ReadonlyMap<string, CloudPrPreview> {\n const out = new Map<string, CloudPrPreview>();\n const list = isRecord(raw) ? (raw as Partial<CloudPrPreviewsResponse>).previews : undefined;\n if (!Array.isArray(list)) return out;\n for (const entry of list) {\n if (!isPreview(entry)) continue;\n if (lane && !entry.itemId.startsWith(PR_ITEM_PREFIX[lane])) continue;\n out.set(entry.itemId, entry);\n }\n return out;\n}\n\nconst NONE: ReadonlyMap<string, CloudPrPreview> = new Map();\n\n/** One lane's previews; a 404 (Devin off, an older server) or any failed read is no chips for that lane. */\nasync function lanePreviews(path: string, lane: DeliveryLane, signal: AbortSignal | undefined): Promise<ReadonlyMap<string, CloudPrPreview>> {\n try {\n return narrowPreviews(await apiGet<unknown>(path, signal), lane);\n } catch (err) {\n if (err instanceof ApiError && err.status === 401) throw err;\n if (err instanceof DOMException && err.name === 'AbortError') throw err;\n return NONE;\n }\n}\n\n/**\n * Optional read of both lanes' previews, merged. A server without a route\n * (404) or a failed read shows no chips for that lane — the items and their\n * own actions still work, and the other lane is unaffected. 401 propagates\n * (the whole app's read session expired).\n */\nexport const cloudPreviewsQuery: QueryDef<ReadonlyMap<string, CloudPrPreview>> = {\n key: CLOUD_PREVIEWS_KEY,\n fetch: async (signal) => {\n const [cloud, devin] = await Promise.all([\n lanePreviews(PREVIEWS_PATH, 'cloud', signal),\n lanePreviews(DEVIN_PREVIEWS_PATH, 'devin', signal),\n ]);\n if (devin.size === 0) return cloud;\n if (cloud.size === 0) return devin;\n return new Map([...cloud, ...devin]);\n },\n};\n\n// ---------------------------------------------------------------------------\n// What a row shows\n// ---------------------------------------------------------------------------\n\nexport interface TriageChip {\n tone: 'clean' | 'held';\n /** \"Clean\" / \"Held\". */\n label: string;\n /** The first failing check, in its own words (\"2 commits behind\"); null when clean. */\n why: string | null;\n /** The whole verdict sentence, for a tooltip. */\n title: string;\n}\n\n/** The chip for an item's preview, when the preview is for the head its actions are pinned to. */\nexport function triageChip(item: NeedsYouItem, preview: CloudPrPreview | undefined): TriageChip | null {\n if (!preview || !previewMatchesItem(item, preview)) return null;\n if (preview.wouldAutoLand) return { tone: 'clean', label: 'Clean', why: null, title: preview.reason };\n const failing = preview.checks.find((c) => !c.ok);\n return { tone: 'held', label: 'Held', why: failing?.text ?? null, title: preview.reason };\n}\n\n/**\n * A preview only speaks for an item whose actions are pinned to the same\n * head. Between a push and the next rebuild the two can disagree; the chip\n * then waits rather than vouch for a commit the Land button will not merge.\n */\nexport function previewMatchesItem(item: NeedsYouItem, preview: CloudPrPreview): boolean {\n const pinned = item.actions.find((a) => a.request !== null && typeof a.request.body['headSha'] === 'string');\n return pinned ? pinned.request!.body['headSha'] === preview.headSha : false;\n}\n\n/** Items \"Land all clean\" would land: previewed clean, pinned to that head, and carrying a Land action. */\nexport function cleanLandable(items: readonly NeedsYouItem[], previews: ReadonlyMap<string, CloudPrPreview>): NeedsYouItem[] {\n return items.filter((item) => {\n const preview = previews.get(item.id);\n return preview !== undefined && preview.wouldAutoLand && previewMatchesItem(item, preview) && actionOf(item, 'approve') !== null;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Batches\n// ---------------------------------------------------------------------------\n\nexport interface BatchContext {\n toast: (message: string, tone?: 'neutral' | 'success' | 'danger') => void;\n /** Called with the ids that succeeded (the drawer clears them from its selection). */\n onSettled?: (succeeded: readonly string[]) => void;\n}\n\n/** The verb a batch dialog uses for `kind` over `n` items (\"Land 3 pull requests?\"). */\nfunction batchCopy(kind: NeedsYouActionKind, items: readonly NeedsYouItem[]): { title: string; confirmLabel: string; verb: string } {\n const label = actionOf(items[0]!, kind)?.label ?? kind;\n const n = items.length;\n const noun = items.every((i) => i.subject.pr !== null) ? (n === 1 ? 'pull request' : 'pull requests') : n === 1 ? 'item' : 'items';\n return { title: `${label} ${n} ${noun}?`, confirmLabel: `${label} ${n}`, verb: label };\n}\n\n/**\n * One confirmation, one token, then each item's own `kind` request in turn\n * (sequential: GitHub merges into one base branch, and a second merge must\n * see the first). A refusal does not stop the rest; the toast names what\n * landed and why anything did not. Items without that action are skipped.\n */\nexport function runBatch(items: readonly NeedsYouItem[], kind: NeedsYouActionKind, ctx: BatchContext): boolean {\n const eligible = items.filter((item) => {\n const action = actionOf(item, kind);\n return action?.request != null && isSafeApiRoute(action.request.path);\n });\n if (eligible.length === 0) {\n ctx.toast('None of the selected items can do that.', 'neutral');\n return false;\n }\n const copy = batchCopy(kind, eligible);\n const named = eligible.slice(0, 3).map((item) => (item.subject.pr ? `#${item.subject.pr}` : `“${readableItemTitle(item).text}”`));\n const list = eligible.length > 3 ? `${named.join(', ')} and ${eligible.length - 3} more` : named.join(', ');\n const destructive = eligible.some((item) => actionOf(item, kind)?.destructive === true);\n const succeeded = new Set<string>();\n let failures: string[] = [];\n return requestGuarded({\n title: copy.title,\n body: `${list}. Each runs on the exact commit it was checked on; one that moved since is refused, not changed.`,\n confirmLabel: copy.confirmLabel,\n destructive,\n token: true,\n tokenReason: `${copy.verb} changes pull requests on GitHub and requires the dispatch token.`,\n run: async () => {\n const token = getMutationToken();\n if (!token) throw new ApiError('Mutation token was rejected.', 401, PREVIEWS_PATH);\n // A retry from the dialog re-runs only what has not gone through yet.\n failures = [];\n for (const item of eligible) {\n if (succeeded.has(item.id)) continue;\n const request = actionOf(item, kind)!.request!;\n try {\n await apiPost<unknown>(request.path, request.body, token);\n succeeded.add(item.id);\n markResolved(item.id);\n } catch (err) {\n // A rejected token stops the batch: every later POST would fail the same way.\n if (err instanceof ApiError && err.status === 401) throw err;\n failures.push(`${item.subject.pr ? `#${item.subject.pr}` : readableItemTitle(item).text}: ${describeActionError(err)}`);\n }\n }\n touchMutationHold();\n if (succeeded.size === 0) throw new Error(failures.length === 1 ? failures[0]! : `None went through. ${failures[0]!}`);\n },\n onDone: () => {\n void refreshActivity();\n ctx.onSettled?.([...succeeded]);\n const done = `${copy.verb}: ${succeeded.size} of ${eligible.length} done.`;\n ctx.toast(\n failures.length === 0 ? done : `${done} ${failures[0]}${failures.length > 1 ? ` (+${failures.length - 1} more)` : ''}`,\n failures.length === 0 ? 'success' : 'neutral',\n );\n },\n });\n}\n","/**\n * routes/verse/shell/NeedsYouDrawer.tsx — ⌘J, the one inbox for everything\n * waiting on the operator (unit C1; SPEC-310C §1 \"Needs-you drawer\").\n *\n * splits All · Approvals · Fleet · Chats · Accounts (H / L)\n * list J / K move · ↩ open · A approve · R reject · V veto · E done\n * X (or Shift-click) picks rows; A / R / E then act on every pick\n * detail an approval reuses ApprovalDetail (diff, evidence, provenance);\n * anything else shows its argument, its deadline and its actions\n * cloud a cloud or Devin PR shows its gate verdict (Clean / Held · why)\n * and, in its detail, every check and its Evidence; \"Land all\n * clean\" lands every Clean one after one confirmation\n * (cloud-triage.ts)\n *\n * Every A / R / V goes through confirmation and then the mutation token\n * (needs-you-actions.ts → guarded-action.tsx) — keyboard triage is fast, but\n * never one keystroke from a real pull request.\n *\n * \"All clear\" is a claim, so it is only made for a split whose every producer\n * answered (needs-you-model splitCoverage). Otherwise the empty state names\n * who is not reporting — an empty list from a silent source is not good news.\n *\n * A right-hand sheet on a desktop window; a full-screen sheet below 480px.\n */\nimport { lazy, Suspense, useCallback, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button, IconButton } from '../../../components/primitives/Button.js';\nimport { useFocusTrap } from '../../../components/primitives/focus-trap.js';\nimport { IconExternalLink, IconX } from '../../../components/primitives/icons.js';\nimport { SkeletonRow } from '../../../components/primitives/Skeleton.js';\nimport { useToast } from '../../../components/primitives/Toast.js';\nimport type { VerseSeat } from '../../../data/api-types.js';\nimport type { CloudPrPreview } from '../../../../core/cloud/pr-preview.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport {\n NEEDS_YOU_ACTION_KEYS,\n type NeedsYouActionKind,\n type NeedsYouItem,\n} from '../../../../core/verse/workbench-types.js';\nimport { ApprovalDetail } from '../approvals/ApprovalDetail.js';\nimport { useVerseUi } from '../useVerseUi.js';\nimport { ReturnKeyIcon } from '../verse-icons.js';\nimport { verseBootstrapQuery } from '../verse-queries.js';\nimport {\n closeVerseOverlay,\n NEEDS_YOU_SPLITS,\n openVerseSession,\n sectionEntry,\n setVerseNeedsYouSplit,\n setVerseSection,\n type NeedsYouSplit,\n} from '../verse-ui-store.js';\nimport { matchCommand } from './command-catalog.js';\nimport { isGuardOpen } from './guarded-action.js';\nimport { markResolved, pruneResolved, runNeedsYouAction, useResolvedIds } from './needs-you-actions.js';\nimport { requestOpenTerminal } from './open-terminal-request.js';\nimport { requestLeaderFocus } from '../leader/leader-focus.js';\nimport { needsYouQuestionText, questionIdOfNeedsYouItem } from '../leader/question-id.js';\nimport {\n cleanLandable,\n cloudPreviewsQuery,\n deliveryTaskOfItem,\n isDeliveryPrItem,\n PR_ITEM_PREFIX,\n runBatch,\n triageChip,\n type TriageChip,\n} from './cloud-triage.js';\nimport {\n actionOf,\n describeSilence,\n itemsForSplit,\n needsYouRowView,\n runModelDisplayName,\n seatDisplayName,\n SPLIT_LABEL,\n splitCounts,\n splitCoverage,\n until,\n} from './needs-you-model.js';\nimport { NeedsYouList, NeedsYouRunFacts, TriageChipView } from './NeedsYouList.js';\nimport { refreshActivity, useActivity } from './useActivity.js';\nimport { useViewport } from './viewport.js';\nimport styles from './NeedsYouDrawer.module.css';\n\n/** A section anchor for the surface an item points into (the shell reveals it: shell/reveal-anchor.ts). */\nexport { VERSE_ANCHOR_EVENT } from '../verse-ui-store.js';\n\n/** The task's evidence sheet (cloud/EvidenceTimeline.tsx, cloud and Devin tasks): its own chunk, fetched the first time it opens. */\nconst EvidenceTimeline = lazy(() => import('../cloud/EvidenceTimeline.js'));\n\nconst DRAWER_ACTION: Readonly<Record<string, NeedsYouActionKind>> = {\n 'drawer.approve': 'approve',\n 'drawer.reject': 'reject',\n 'drawer.veto': 'veto',\n 'drawer.done': 'done',\n};\n\nfunction isTextTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return target.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(target.tagName);\n}\n\nexport function NeedsYouDrawer() {\n const ui = useVerseUi();\n const activity = useActivity();\n const toast = useToast();\n const bootstrap = useQuery(verseBootstrapQuery);\n const { compact } = useViewport();\n const resolved = useResolvedIds();\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const detailRef = useRef<HTMLDivElement>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [detailId, setDetailId] = useState<string | null>(null);\n const [dispatchDenied, setDispatchDenied] = useState(false);\n const [now, setNow] = useState(() => Date.now());\n const [picked, setPicked] = useState<ReadonlySet<string>>(() => new Set());\n\n // Countdowns (\"closes in 24m\") tick while the drawer is open; nothing else re-renders.\n useEffect(() => {\n const id = setInterval(() => setNow(Date.now()), 15_000);\n return () => clearInterval(id);\n }, []);\n\n const data = activity.data;\n const liveItems = data?.needsYou;\n useEffect(() => {\n if (liveItems) pruneResolved(new Set(liveItems.map((i) => i.id)));\n }, [liveItems]);\n\n const all = useMemo(() => (liveItems ?? []).filter((i) => !resolved.has(i.id)), [liveItems, resolved]);\n const split = ui.needsYouSplit;\n const items = useMemo(() => itemsForSplit(all, split), [all, split]);\n const counts = useMemo(() => splitCounts(all), [all]);\n const coverage = splitCoverage(data?.sources ?? null, split);\n const dispatchEnabled = (bootstrap.data?.dispatchEnabled ?? true) && !dispatchDenied;\n\n // Cloud and Devin PR verdicts: re-read whenever such an item's text\n // changes (the server rewrites its detail when a new preview lands).\n const previewsQuery = useQuery(cloudPreviewsQuery, { freshMs: 15_000 });\n const refetchPreviews = useRefetch(cloudPreviewsQuery);\n const cloudSignature = useMemo(\n () => all.filter((i) => isDeliveryPrItem(i.id)).map((i) => `${i.id}\\u0000${i.detail ?? ''}`).join('\\u0001'),\n [all],\n );\n const firstSignature = useRef(true);\n useEffect(() => {\n // The mount already fetched; only a CHANGE re-reads.\n if (firstSignature.current) {\n firstSignature.current = false;\n return;\n }\n if (cloudSignature) refetchPreviews();\n }, [cloudSignature, refetchPreviews]);\n const previews = previewsQuery.data ?? NO_PREVIEWS;\n const chips = useMemo(() => {\n const out = new Map<string, TriageChip>();\n for (const item of all) {\n const chip = triageChip(item, previews.get(item.id));\n if (chip) out.set(item.id, chip);\n }\n return out;\n }, [all, previews]);\n const landAll = useMemo(() => cleanLandable(items, previews), [items, previews]);\n\n // Picks only ever name rows this split shows.\n useEffect(() => {\n setPicked((prev) => {\n if (prev.size === 0) return prev;\n const next = new Set([...prev].filter((id) => items.some((i) => i.id === id)));\n return next.size === prev.size ? prev : next;\n });\n }, [items]);\n const togglePick = useCallback((id: string) => {\n setPicked((prev) => {\n const next = new Set(prev);\n if (!next.delete(id)) next.add(id);\n return next;\n });\n }, []);\n const clearPicks = useCallback(() => setPicked(new Set()), []);\n\n // Open on the item the palette / a notification asked for.\n const focusId = ui.needsYouFocus;\n useEffect(() => {\n if (!focusId) return;\n const item = all.find((i) => i.id === focusId);\n if (!item) return;\n setSelectedId(item.id);\n setDetailId(item.id);\n }, [focusId, all]);\n\n // Keep the selection on a real row as items come and go.\n useEffect(() => {\n if (items.length === 0) {\n if (selectedId !== null) setSelectedId(null);\n return;\n }\n if (!selectedId || !items.some((i) => i.id === selectedId)) setSelectedId(items[0]!.id);\n }, [items, selectedId]);\n\n const detailItem = detailId ? all.find((i) => i.id === detailId) ?? null : null;\n useEffect(() => {\n // The item was resolved (here or elsewhere) while open: back to the list.\n if (detailId && !detailItem) setDetailId(null);\n }, [detailId, detailItem]);\n\n const closeDetail = useCallback(() => setDetailId(null), []);\n\n const trapClose = useCallback(() => {\n // Esc in a dialog opened FROM the drawer (a confirmation, the token\n // prompt) belongs to that dialog: every trap hears Escape, and this one\n // registered first.\n if (isGuardOpen() || document.querySelector('[aria-modal=\"true\"]:not([data-verse-overlay])')) return;\n if (detailId) closeDetail();\n else closeVerseOverlay();\n }, [detailId, closeDetail]);\n useFocusTrap({ open: true, containerRef: panelRef, onClose: trapClose, initialFocusRef: listRef });\n\n // Focus follows the view: into the detail when it opens, back to the list\n // when it closes (not on first mount — the focus trap places that).\n const detailWasOpen = useRef(false);\n useEffect(() => {\n if (detailId) {\n detailWasOpen.current = true;\n detailRef.current?.focus({ preventScroll: true });\n } else if (detailWasOpen.current) {\n detailWasOpen.current = false;\n listRef.current?.focus({ preventScroll: true });\n }\n }, [detailId]);\n\n // The list usually arrives AFTER the drawer opened (the first poll): the\n // trap focused the placeholder, which is then removed and focus falls to\n // <body>. Hand it to the list — unless the operator has moved it anywhere\n // real (a dialog opened from the drawer lives outside this panel).\n const hasItems = items.length > 0;\n useEffect(() => {\n if (!hasItems || detailId) return;\n const active = document.activeElement;\n if (active === null || active === document.body || active === panelRef.current) listRef.current?.focus({ preventScroll: true });\n }, [hasItems, detailId]);\n\n const openTarget = useCallback((item: NeedsYouItem) => {\n const target = item.target;\n switch (target.kind) {\n case 'approval':\n setSelectedId(item.id);\n setDetailId(item.id);\n return;\n case 'session':\n closeVerseOverlay();\n openVerseSession(target.sessionId);\n return;\n case 'section':\n closeVerseOverlay();\n setVerseSection(target.section, target.anchor);\n return;\n case 'seat':\n closeVerseOverlay();\n setVerseSection('apps', `seat:${target.seatId}`);\n return;\n case 'terminal':\n // An agent tab waiting on the operator: its chat, the Terminal pane,\n // that tab (the shell's one terminal handler, open-terminal-request.ts).\n closeVerseOverlay();\n requestOpenTerminal({ tabId: target.tabId, blockId: null, sessionId: target.sessionId });\n return;\n case 'url':\n // https only (isNeedsYouItem), a new browsing context with no opener.\n window.open(target.url, '_blank', 'noopener,noreferrer');\n return;\n default:\n return;\n }\n }, []);\n\n /**\n * ↩ / a click on a row: its detail — except an agent waiting in a terminal\n * tab, which has nothing to decide here: the answer is typed in that tab,\n * so it goes straight there.\n */\n const openItem = useCallback((item: NeedsYouItem) => {\n if (item.target.kind === 'terminal') openTarget(item);\n else setDetailId(item.id);\n }, [openTarget]);\n\n const act = useCallback((item: NeedsYouItem, kind: NeedsYouActionKind) => {\n const action = actionOf(item, kind);\n if (!action) {\n toast.show(`Nothing to ${kind} on this item.`, 'neutral');\n return;\n }\n if (isAnswerAction(item, action)) {\n // The server's \"Answer\" needs words the drawer cannot take: the answer\n // box lives in Mind's conversation, opened on this question.\n answerLeaderQuestion(item);\n return;\n }\n if (!dispatchEnabled && action.request) {\n toast.show('This server was started without dispatch — run `ashlr verse` to act.', 'neutral');\n return;\n }\n runNeedsYouAction(item, action, { openTarget, toast: toast.show });\n }, [dispatchEnabled, openTarget, toast]);\n\n const actOnMany = useCallback((targets: readonly NeedsYouItem[], kind: NeedsYouActionKind) => {\n if (!dispatchEnabled) {\n toast.show('This server was started without dispatch — run `ashlr verse` to act.', 'neutral');\n return;\n }\n runBatch(targets, kind, {\n toast: toast.show,\n onSettled: (done) => setPicked((prev) => new Set([...prev].filter((id) => !done.includes(id)))),\n });\n }, [dispatchEnabled, toast]);\n\n function move(delta: 1 | -1) {\n if (items.length === 0) return;\n const at = Math.max(0, items.findIndex((i) => i.id === selectedId));\n const next = items[(at + delta + items.length) % items.length]!;\n setSelectedId(next.id);\n if (detailId) setDetailId(next.id);\n }\n\n function stepSplit(delta: 1 | -1) {\n const at = NEEDS_YOU_SPLITS.indexOf(split);\n const next = NEEDS_YOU_SPLITS[(at + delta + NEEDS_YOU_SPLITS.length) % NEEDS_YOU_SPLITS.length]!;\n setVerseNeedsYouSplit(next);\n setDetailId(null);\n clearPicks();\n }\n\n function onKeyDown(event: ReactKeyboardEvent<HTMLDivElement>) {\n if (event.defaultPrevented || isTextTarget(event.target)) return;\n // React bubbles through portals: a key typed in a dialog ApprovalDetail\n // opened (rendered outside this panel's DOM) is not a triage key.\n if (!(event.target instanceof Node) || !panelRef.current?.contains(event.target)) return;\n const command = matchCommand(event.nativeEvent, ['drawer']);\n if (!command) return;\n // A button inside the detail answers Enter itself; the drawer's Enter is\n // for the list.\n if (command.id === 'drawer.open' && event.target instanceof HTMLButtonElement) return;\n event.preventDefault();\n event.stopPropagation();\n const current = items.find((i) => i.id === (detailId ?? selectedId)) ?? null;\n switch (command.id) {\n case 'drawer.next':\n move(1);\n return;\n case 'drawer.prev':\n move(-1);\n return;\n case 'drawer.split-next':\n stepSplit(1);\n return;\n case 'drawer.split-prev':\n stepSplit(-1);\n return;\n case 'drawer.open':\n if (current) openItem(current);\n return;\n case 'drawer.select':\n if (current && !detailId) togglePick(current.id);\n return;\n default: {\n const kind = DRAWER_ACTION[command.id];\n if (!kind) return;\n // With rows picked (and the list showing), the key acts on every pick.\n const many = !detailId && picked.size > 0 ? items.filter((i) => picked.has(i.id)) : [];\n if (many.length > 0) actOnMany(many, kind);\n else if (current) act(current, kind);\n }\n }\n }\n\n const loading = !data && (activity.status === 'loading' || activity.status === 'idle');\n const unavailable = !data && activity.status === 'unavailable';\n\n return createPortal(\n <div className={styles.backdrop} onMouseDown={(e) => e.target === e.currentTarget && closeVerseOverlay()}>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={styles.panel}\n data-presentation={compact ? 'full' : 'side'}\n data-verse-overlay=\"needs-you\"\n data-scope=\"drawer\"\n tabIndex={-1}\n onKeyDown={onKeyDown}\n >\n <header className={styles.head}>\n <h2 id={titleId} className={styles.title}>\n Needs you\n {data ? <span className={styles.titleCount}>{counts.all}</span> : null}\n </h2>\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconX />} aria-label=\"Close Needs you\" onClick={closeVerseOverlay} />\n </header>\n\n <div\n role=\"tablist\"\n aria-label=\"Splits\"\n className={styles.splits}\n onKeyDown={(e) => {\n if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;\n e.preventDefault();\n stepSplit(e.key === 'ArrowRight' ? 1 : -1);\n }}\n >\n {NEEDS_YOU_SPLITS.map((s: NeedsYouSplit) => (\n <button\n key={s}\n type=\"button\"\n role=\"tab\"\n aria-selected={s === split}\n tabIndex={s === split ? 0 : -1}\n className={styles.split}\n onClick={() => {\n setVerseNeedsYouSplit(s);\n setDetailId(null);\n }}\n >\n {SPLIT_LABEL[s]}\n <span className={styles.splitCount} aria-label={`${counts[s]} items`}>{counts[s]}</span>\n </button>\n ))}\n </div>\n\n {!detailItem && (picked.size > 0 || landAll.length > 0) ? (\n <BatchBar\n pickedItems={items.filter((i) => picked.has(i.id))}\n landAll={landAll}\n dispatchEnabled={dispatchEnabled}\n onRun={actOnMany}\n onClear={clearPicks}\n />\n ) : null}\n\n <div className={styles.body}>\n {detailItem ? (\n <div ref={detailRef} className={styles.detail} tabIndex={-1} aria-label=\"Item detail\">\n <button type=\"button\" className={styles.back} onClick={closeDetail}>\n ‹ All {SPLIT_LABEL[split].toLowerCase()}\n </button>\n {detailItem.target.kind === 'approval' ? (\n <div className={styles.approval}>\n <ApprovalDetail\n key={detailItem.target.proposalId}\n id={detailItem.target.proposalId}\n dispatchEnabled={dispatchEnabled}\n onDispatchDisabled={() => setDispatchDenied(true)}\n onDecided={() => {\n markResolved(detailItem.id);\n void refreshActivity();\n closeDetail();\n }}\n />\n </div>\n ) : (\n <ItemDetail\n item={detailItem}\n now={now}\n seats={bootstrap.data?.seats ?? NO_SEATS}\n onAct={act}\n onOpenTarget={openTarget}\n dispatchEnabled={dispatchEnabled}\n chip={chips.get(detailItem.id) ?? null}\n preview={chips.has(detailItem.id) ? previews.get(detailItem.id) ?? null : null}\n />\n )}\n </div>\n ) : loading ? (\n <div className={styles.loading} role=\"status\" aria-label=\"Loading\">\n <SkeletonRow />\n <SkeletonRow />\n <SkeletonRow />\n </div>\n ) : unavailable ? (\n <div className={styles.empty}>\n <p className={styles.emptyTitle}>Needs you isn't available on this server</p>\n <p className={styles.emptyBody}>This build does not report activity yet, so nothing here can be vouched for. Approvals still work from the inbox.</p>\n </div>\n ) : items.length === 0 ? (\n <EmptySplit coverageText={describeSilence(coverage)} vouched={coverage.vouched} autonomyLabel={data?.autonomy?.label ?? null} split={split} />\n ) : (\n <NeedsYouList\n ref={listRef}\n items={items}\n selectedId={selectedId}\n onSelect={setSelectedId}\n // A click (or a tap — a phone has no J / K) opens the item;\n // the keyboard moves the selection without opening.\n onOpen={(id) => {\n setSelectedId(id);\n const item = items.find((i) => i.id === id);\n if (item) openItem(item);\n }}\n now={now}\n label={`${SPLIT_LABEL[split]} needing you`}\n picked={picked}\n onTogglePick={togglePick}\n chips={chips}\n />\n )}\n {/* The list holds the initial focus; with no list, the panel does. */}\n {items.length === 0 && !detailItem ? <div ref={listRef} tabIndex={-1} className={styles.focusSink} aria-hidden=\"true\" /> : null}\n </div>\n\n {!compact ? (\n <footer className={styles.foot} aria-hidden=\"true\">\n <span><kbd className={styles.key}>J</kbd><kbd className={styles.key}>K</kbd> move</span>\n <span><kbd className={styles.key}><ReturnKeyIcon /></kbd> open</span>\n <span><kbd className={styles.key}>A</kbd> approve</span>\n <span><kbd className={styles.key}>R</kbd> reject</span>\n <span><kbd className={styles.key}>V</kbd> veto</span>\n <span><kbd className={styles.key}>E</kbd> done</span>\n <span><kbd className={styles.key}>X</kbd> pick</span>\n <span><kbd className={styles.key}>H</kbd><kbd className={styles.key}>L</kbd> splits</span>\n </footer>\n ) : null}\n {!coverage.vouched && items.length > 0 ? (\n <p className={styles.caveat} role=\"note\">{describeSilence(coverage)} — this list may be incomplete.</p>\n ) : null}\n </div>\n </div>,\n document.body,\n );\n}\n\nfunction EmptySplit({ vouched, coverageText, autonomyLabel, split }: { vouched: boolean; coverageText: string; autonomyLabel: string | null; split: NeedsYouSplit }) {\n if (vouched) {\n return (\n <div className={styles.empty} data-state=\"clear\">\n <span className={styles.clearMark} aria-hidden=\"true\" />\n <p className={styles.emptyTitle}>All clear</p>\n <p className={styles.emptyBody}>{autonomyLabel ? `Fleet: ${autonomyLabel}.` : 'Nothing is waiting on you.'}</p>\n </div>\n );\n }\n return (\n <div className={styles.empty} data-state=\"unknown\">\n <p className={styles.emptyTitle}>Nothing to show{split === 'all' ? '' : ` in ${SPLIT_LABEL[split]}`} — but it isn't an all-clear</p>\n <p className={styles.emptyBody}>{coverageText}.</p>\n </div>\n );\n}\n\nconst TARGET_LABEL = (item: NeedsYouItem): string | null => {\n switch (item.target.kind) {\n case 'session':\n return 'Open chat';\n case 'section':\n return `Open ${sectionEntry(item.target.section).label}`;\n case 'seat':\n return 'Open Apps & Accounts';\n case 'terminal':\n return 'Open terminal';\n case 'url':\n return 'Open on GitHub';\n default:\n return null;\n }\n};\n\n/**\n * A Leader question's \"Answer\" (the server maps it to the button-only `fix`\n * kind with no request: it needs free text).\n */\nfunction isAnswerAction(item: NeedsYouItem, action: NeedsYouItem['actions'][number]): boolean {\n return item.kind === 'leader-question' && action.kind === 'fix' && action.request === null;\n}\n\n/** Close the drawer and open this question's answer box in Mind's Leader conversation. */\nfunction answerLeaderQuestion(item: NeedsYouItem): void {\n closeVerseOverlay();\n requestLeaderFocus({ kind: 'question', questionId: questionIdOfNeedsYouItem(item.id), text: needsYouQuestionText(item) });\n}\n\nconst NO_SEATS: readonly VerseSeat[] = [];\nconst NO_PREVIEWS: ReadonlyMap<string, CloudPrPreview> = new Map();\n\n/** Which actions the picks can run: every kind at least one pick has, with how many have it. */\nfunction sharedActions(pickedItems: readonly NeedsYouItem[]): Array<{ kind: NeedsYouActionKind; label: string; destructive: boolean; count: number }> {\n const byKind = new Map<NeedsYouActionKind, { label: string; destructive: boolean; count: number }>();\n for (const item of pickedItems) {\n for (const action of item.actions) {\n if (!action.request) continue;\n const entry = byKind.get(action.kind);\n if (entry) entry.count += 1;\n else byKind.set(action.kind, { label: action.label, destructive: action.destructive, count: 1 });\n }\n }\n // Land first, Dismiss last.\n const order: NeedsYouActionKind[] = ['approve', 'fix', 'reject', 'veto', 'resume', 'renew', 'done'];\n return order.flatMap((kind) => {\n const entry = byKind.get(kind);\n return entry ? [{ kind, ...entry }] : [];\n });\n}\n\n/**\n * The strip over the list: what the picks can do (each button runs on the\n * picks that have that action), or — with nothing picked — \"Land all clean\".\n */\nfunction BatchBar({\n pickedItems,\n landAll,\n dispatchEnabled,\n onRun,\n onClear,\n}: {\n pickedItems: readonly NeedsYouItem[];\n landAll: readonly NeedsYouItem[];\n dispatchEnabled: boolean;\n onRun: (targets: readonly NeedsYouItem[], kind: NeedsYouActionKind) => void;\n onClear: () => void;\n}) {\n if (pickedItems.length === 0) {\n // Name the lane when every clean PR is from one (\"2 clean Devin PRs\").\n const lanes = new Set(landAll.map((i) => (i.id.startsWith(PR_ITEM_PREFIX.devin) ? 'Devin' : 'cloud')));\n const lane = lanes.size === 1 ? [...lanes][0]! : null;\n return (\n <div className={styles.batch} role=\"toolbar\" aria-label={lane ? `${lane === 'cloud' ? 'Cloud' : 'Devin'} pull requests` : 'Pull requests'}>\n <span className={styles.batchCount}>\n {landAll.length} clean {lane ? `${lane} ` : ''}{landAll.length === 1 ? 'PR' : 'PRs'}\n </span>\n <Button size=\"sm\" variant=\"primary\" disabled={!dispatchEnabled} onClick={() => onRun(landAll, 'approve')}>\n Land all clean\n </Button>\n </div>\n );\n }\n const actions = sharedActions(pickedItems);\n return (\n <div className={styles.batch} role=\"toolbar\" aria-label=\"Picked items\">\n <span className={styles.batchCount}>{pickedItems.length} picked</span>\n {actions.map((a) => {\n const key = NEEDS_YOU_ACTION_KEYS[a.kind];\n const partial = a.count < pickedItems.length;\n return (\n <Button\n key={a.kind}\n size=\"sm\"\n variant={a.destructive ? 'danger' : a.kind === 'approve' ? 'primary' : 'subtle'}\n disabled={!dispatchEnabled}\n onClick={() => onRun(pickedItems, a.kind)}\n aria-keyshortcuts={key}\n title={partial ? `${a.count} of ${pickedItems.length} picked can do this` : undefined}\n >\n {a.label}{partial ? ` ${a.count}` : ''}\n {key ? <kbd className={styles.inlineKey} aria-hidden=\"true\">{key}</kbd> : null}\n </Button>\n );\n })}\n <Button size=\"sm\" variant=\"ghost\" onClick={onClear}>Clear</Button>\n </div>\n );\n}\n\nfunction ItemDetail({\n item,\n now,\n seats,\n onAct,\n onOpenTarget,\n dispatchEnabled,\n chip,\n preview,\n}: {\n item: NeedsYouItem;\n now: number;\n /** The roster (bootstrap), for naming the item's seat and its run's model. */\n seats: readonly VerseSeat[];\n onAct: (item: NeedsYouItem, kind: NeedsYouActionKind) => void;\n onOpenTarget: (item: NeedsYouItem) => void;\n dispatchEnabled: boolean;\n /** A cloud or Devin PR's verdict and the checks behind it; null for everything else. */\n chip: TriageChip | null;\n preview: CloudPrPreview | null;\n}) {\n const targetLabel = TARGET_LABEL(item);\n // A cloud or Devin task's item → its task id, for its evidence (null for\n // anything else, or for an id that is not its lane's own format).\n const evidenceTaskId = deliveryTaskOfItem(item.id)?.taskId ?? null;\n const [evidenceOpen, setEvidenceOpen] = useState(false);\n // The same readable text as the row (needs-you-model needsYouRowView), with room for the whole title.\n const view = needsYouRowView(item, now);\n // \"Claude Max\" and \"Fable 5.1\", never `claude-a` / `claude:claude-fable-5-1`\n // — the ids ride in tooltips (monospace only when the id is all we have).\n const seat = item.subject.seatId ? seatDisplayName(seats, item.subject.seatId) : null;\n const model = view.run ? runModelDisplayName(seats, view.run.model, item.subject.seatId) : null;\n return (\n <article className={styles.item}>\n <header className={styles.itemHead}>\n {view.kindLabel ? <p className={styles.rowKind}>{view.kindLabel}</p> : null}\n <h3 className={styles.itemTitle} title={view.fullTitle}>{view.title}</h3>\n {view.run ? <NeedsYouRunFacts run={view.run} /> : null}\n </header>\n {view.detail ? <p className={styles.itemDetail}>{view.detail}</p> : null}\n {chip && preview ? (\n <section className={styles.verdict} aria-label=\"Gate preview\">\n <p className={styles.verdictHead}>\n <TriageChipView chip={{ ...chip, why: null }} />\n <span className={styles.mono} title={preview.headSha}>{preview.headSha.slice(0, 7)}</span>\n </p>\n <ul className={styles.checks}>\n {preview.checks.map((check) => (\n <li key={check.id} data-ok={check.ok ? 'true' : 'false'}>\n <span className={styles.checkMark} aria-hidden=\"true\">{check.ok ? '✓' : '×'}</span>\n <span className=\"visually-hidden\">{check.ok ? 'Passes: ' : 'Fails: '}</span>\n {check.text}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n <dl className={styles.defs}>\n {view.repo ? (<><dt>Repo</dt><dd className={styles.repo} title={view.repoFull}>{view.repo}</dd></>) : null}\n {item.subject.pr ? (<><dt>Pull request</dt><dd>#{item.subject.pr}</dd></>) : null}\n {seat ? (<><dt>Seat</dt><dd className={seat.raw ? undefined : styles.mono} title={seat.raw}>{seat.text}</dd></>) : null}\n {model ? (<><dt>Model</dt><dd className={model.raw ? undefined : styles.mono} title={model.raw}>{model.text}</dd></>) : null}\n <dt>Raised</dt>\n <dd title={view.ageStamp}>{view.age}</dd>\n {item.expiresAt ? (<><dt>Closes</dt><dd className={styles.deadline}>{until(item.expiresAt, now)}</dd></>) : null}\n </dl>\n <div className={styles.itemActions}>\n {item.kind === 'leader-question' && !item.actions.some((a) => isAnswerAction(item, a)) ? (\n // A server from before 3.14 sends no Answer action: offer the same\n // jump to Mind's conversation with this question's answer box open.\n <Button variant=\"primary\" size=\"sm\" onClick={() => answerLeaderQuestion(item)}>\n Answer\n </Button>\n ) : null}\n {targetLabel ? (\n <Button variant=\"subtle\" size=\"sm\" onClick={() => onOpenTarget(item)} trailingIcon={item.target.kind === 'url' ? <IconExternalLink /> : undefined}>\n {targetLabel}\n </Button>\n ) : null}\n {evidenceTaskId ? (\n <Button variant=\"subtle\" size=\"sm\" aria-haspopup=\"dialog\" onClick={() => setEvidenceOpen(true)}>\n Evidence\n </Button>\n ) : null}\n {item.actions.map((action) => {\n const key = NEEDS_YOU_ACTION_KEYS[action.kind];\n const needsDispatch = action.request !== null;\n const primary = action.kind === 'approve' || isAnswerAction(item, action);\n return (\n <Button\n key={action.kind}\n size=\"sm\"\n variant={action.destructive ? 'danger' : primary ? 'primary' : 'subtle'}\n disabled={needsDispatch && !dispatchEnabled}\n onClick={() => onAct(item, action.kind)}\n aria-keyshortcuts={key}\n >\n {action.label}\n {key ? <kbd className={styles.inlineKey} aria-hidden=\"true\">{key}</kbd> : null}\n </Button>\n );\n })}\n </div>\n {!dispatchEnabled ? <p className={styles.caveat}>Read-only session — actions need `ashlr verse`.</p> : null}\n {evidenceOpen && evidenceTaskId ? (\n <Suspense fallback={null}>\n <EvidenceTimeline taskId={evidenceTaskId} title={view.title} open onClose={() => setEvidenceOpen(false)} now={now} />\n </Suspense>\n ) : null}\n </article>\n );\n}\n"],"file":"NeedsYouDrawer-6ud1RHOU.js"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{U as r}from"./VerseShared-_pMXKs8m.js";import{p as i,s as a}from"./needs-you-model-DqmU5YOe.js";var o=n(t(),1),s={backdrop:`_backdrop_1d2dw_4`,fade:`_fade_1d2dw_1`,panel:`_panel_1d2dw_14`,slide:`_slide_1d2dw_1`,rise:`_rise_1d2dw_1`,head:`_head_1d2dw_33`,title:`_title_1d2dw_43`,titleCount:`_titleCount_1d2dw_54`,splits:`_splits_1d2dw_62`,split:`_split_1d2dw_62`,splitCount:`_splitCount_1d2dw_86`,body:`_body_1d2dw_98`,rows:`_rows_1d2dw_106`,row:`_row_1d2dw_106`,rule:`_rule_1d2dw_125`,rowMain:`_rowMain_1d2dw_133`,rowKind:`_rowKind_1d2dw_138`,rowTitle:`_rowTitle_1d2dw_151`,runFacts:`_runFacts_1d2dw_164`,diffStats:`_diffStats_1d2dw_173`,runSource:`_runSource_1d2dw_174`,repo:`_repo_1d2dw_176`,rowMeta:`_rowMeta_1d2dw_178`,severity:`_severity_1d2dw_187`,mono:`_mono_1d2dw_196`,deadline:`_deadline_1d2dw_197`,rowKeys:`_rowKeys_1d2dw_199`,key:`_key_1d2dw_201`,inlineKey:`_inlineKey_1d2dw_202`,loading:`_loading_1d2dw_218`,empty:`_empty_1d2dw_220`,emptyTitle:`_emptyTitle_1d2dw_228`,emptyBody:`_emptyBody_1d2dw_235`,clearMark:`_clearMark_1d2dw_243`,focusSink:`_focusSink_1d2dw_263`,detail:`_detail_1d2dw_265`,back:`_back_1d2dw_4`,approval:`_approval_1d2dw_279`,item:`_item_1d2dw_281`,itemHead:`_itemHead_1d2dw_282`,itemTitle:`_itemTitle_1d2dw_284`,itemDetail:`_itemDetail_1d2dw_292`,defs:`_defs_1d2dw_299`,itemActions:`_itemActions_1d2dw_310`,foot:`_foot_1d2dw_312`,caveat:`_caveat_1d2dw_324`,chip:`_chip_1d2dw_348`,chipWhy:`_chipWhy_1d2dw_364`,pickMark:`_pickMark_1d2dw_368`,batch:`_batch_1d2dw_380`,batchCount:`_batchCount_1d2dw_389`,verdict:`_verdict_1d2dw_397`,verdictHead:`_verdictHead_1d2dw_405`,checks:`_checks_1d2dw_406`,checkMark:`_checkMark_1d2dw_419`},c=e();function l({run:e}){return(0,c.jsxs)(`span`,{className:s.runFacts,children:[(0,c.jsx)(`span`,{className:s.diffStats,"aria-hidden":`true`,children:e.stats}),(0,c.jsx)(`span`,{className:`visually-hidden`,children:e.statsSpoken}),(0,c.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,c.jsxs)(`span`,{className:s.runSource,title:e.sourceHint??void 0,children:[e.partial?`Partial · `:``,e.source]})]})}var u={high:`Urgent`,warn:`Soon`,info:`When you can`},d={approvals:`Approval`,authority:`Autonomy`,fleet:`Fleet`,leader:`Leader`,chats:`Chat`,accounts:`Account`},f=new Set,p=new Map;function m({chip:e}){return(0,c.jsxs)(`span`,{className:s.chip,"data-tone":e.tone,title:e.title,children:[e.label,e.why?(0,c.jsxs)(`span`,{className:s.chipWhy,children:[` · `,e.why]}):null]})}var h=(0,o.forwardRef)(function({items:e,selectedId:t,onSelect:n,onOpen:h,now:g,label:_,picked:v=f,onTogglePick:y,chips:b=p},x){let S=`verse-needs-you-list`,C=(0,o.useRef)(null);return(0,o.useEffect)(()=>{t&&[...C.current?.querySelectorAll(`[data-item-id]`)??[]].find(e=>e.dataset.itemId===t)?.scrollIntoView?.({block:`nearest`})},[t]),(0,c.jsx)(`div`,{ref:e=>{C.current=e,typeof x==`function`?x(e):x&&(x.current=e)},id:S,role:`listbox`,"aria-label":v.size>0?`${_}, ${v.size} picked`:_,tabIndex:0,"aria-activedescendant":t?`${S}-${e.findIndex(e=>e.id===t)}`:void 0,className:s.rows,children:e.map((e,o)=>{let f=e.actions.map(e=>r[e.kind]).filter(e=>e!==void 0),p=a(e,g),_=v.has(e.id),x=b.get(e.id);return(0,c.jsxs)(`div`,{id:`${S}-${o}`,"data-item-id":e.id,role:`option`,"aria-selected":e.id===t,"data-picked":_?`true`:void 0,className:s.row,"data-severity":e.severity,onClick:t=>{if(t.shiftKey&&y){t.preventDefault(),y(e.id);return}h(e.id)},onMouseMove:()=>e.id!==t&&n(e.id),children:[(0,c.jsx)(`span`,{className:s.rule,"aria-hidden":`true`}),(0,c.jsxs)(`span`,{className:s.rowMain,children:[p.kindLabel?(0,c.jsx)(`span`,{className:s.rowKind,children:p.kindLabel}):null,(0,c.jsx)(`span`,{className:s.rowTitle,title:p.fullTitle,children:p.title}),p.run?(0,c.jsx)(l,{run:p.run}):null,(0,c.jsxs)(`span`,{className:s.rowMeta,children:[_?(0,c.jsx)(`span`,{className:`visually-hidden`,children:`Picked. `}):null,x?(0,c.jsx)(m,{chip:x}):null,(0,c.jsx)(`span`,{className:s.severity,"data-severity":e.severity,children:u[e.severity]}),(0,c.jsx)(`span`,{children:d[e.source]}),p.repo?(0,c.jsx)(`span`,{className:s.repo,title:p.repoFull,children:p.repo}):null,e.subject.pr?(0,c.jsxs)(`span`,{children:[`#`,e.subject.pr]}):null,(0,c.jsx)(`span`,{title:p.ageStamp,children:p.age}),e.expiresAt?(0,c.jsxs)(`span`,{className:s.deadline,children:[`closes `,i(e.expiresAt,g)]}):null]})]}),_?(0,c.jsx)(`span`,{className:s.pickMark,"aria-hidden":`true`,children:`✓`}):e.id===t&&f.length>0?(0,c.jsx)(`span`,{className:s.rowKeys,"aria-hidden":`true`,children:f.map(e=>(0,c.jsx)(`kbd`,{className:s.key,children:e},e))}):null]},e.id)})})});export{s as i,l as n,m as r,h as t};
2
- //# sourceMappingURL=NeedsYouList-E-yy-xKE.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NeedsYouList-E-yy-xKE.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/NeedsYouDrawer.module.css","../../../../../../src/web-ui/routes/verse/shell/NeedsYouList.tsx"],"sourcesContent":["/* ⌘J — a right-hand sheet over the workbench; full screen on a phone.\n Hairlines, no cards. Severity is a word plus a 2px rule, never colour alone. */\n\n.backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--z-dialog);\n display: flex;\n justify-content: flex-end;\n background: var(--bg-overlay);\n animation: fade var(--duration-fast) var(--ease-standard);\n}\n\n.panel {\n display: flex;\n flex-direction: column;\n width: min(480px, calc(100vw - var(--space-8)));\n height: 100%;\n background: var(--bg-surface);\n border-left: 1px solid var(--border-default);\n box-shadow: var(--shadow-dialog);\n outline: none;\n animation: slide var(--duration-base) var(--ease-decelerate);\n}\n\n/* Phone: the whole screen, sliding up. */\n.panel[data-presentation='full'] {\n width: 100%;\n border-left: 0;\n animation-name: rise;\n}\n\n.head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n min-height: var(--strip-height);\n padding: var(--space-2) var(--space-3) var(--space-2) var(--space-4);\n border-bottom: 1px solid var(--border-subtle);\n}\n\n.title {\n display: flex;\n align-items: baseline;\n gap: var(--space-2);\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);\n}\n\n.titleCount {\n font-family: var(--font-ui);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-regular);\n font-variant-numeric: tabular-nums;\n color: var(--text-tertiary);\n}\n\n.splits {\n display: flex;\n gap: var(--space-1);\n padding: var(--space-2) var(--space-3);\n border-bottom: 1px solid var(--border-subtle);\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.split {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n flex: none;\n min-height: var(--control-h-sm);\n padding: 0 var(--space-2);\n border-radius: var(--radius-sm);\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n.split:hover { background: var(--bg-hover); color: var(--text-primary); }\n.split[aria-selected='true'] { background: var(--bg-selected); color: var(--text-primary); font-weight: var(--font-weight-medium); }\n\n.splitCount {\n min-width: 18px;\n padding: 0 4px;\n border-radius: var(--radius-full);\n background: var(--bg-hover);\n font-size: var(--text-2xs-size);\n line-height: 18px;\n text-align: center;\n font-variant-numeric: tabular-nums;\n color: var(--text-secondary);\n}\n\n.body {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.rows { outline: none; }\n.rows:focus-visible { box-shadow: none; }\n/* The list holds focus (aria-activedescendant), so the focus ring is drawn on\n the ROW it points at — a ring around the whole list says nothing about\n which item A / R / V will act on. */\n.rows:focus-visible .row[aria-selected='true'] { box-shadow: inset 0 0 0 2px var(--border-focus); }\n\n.row {\n display: grid;\n grid-template-columns: 2px minmax(0, 1fr) auto;\n column-gap: var(--space-3);\n align-items: center;\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--border-subtle);\n cursor: pointer;\n}\n.row:hover { background: var(--bg-hover); }\n.row[aria-selected='true'] { background: var(--bg-selected); }\n\n.rule {\n align-self: stretch;\n border-radius: var(--radius-full);\n background: var(--border-strong);\n}\n.row[data-severity='high'] .rule { background: var(--status-danger-solid); }\n.row[data-severity='warn'] .rule { background: var(--status-warning-solid); }\n\n.rowMain { display: flex; flex-direction: column; min-width: 0; gap: 2px; }\n\n/* \"Patch · Claude run\" — the kind, above the title it no longer clutters.\n Secondary, not tertiary: tertiary falls under 4.5:1 on --bg-selected\n (approvals.module.css has the measurements). */\n.rowKind {\n margin: 0;\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-secondary);\n}\n\n/* Two lines at most, wrapped at word boundaries. The text itself already\n ends on a whole word (approvals-model readableTitle); the full server\n title rides in `title`. */\n.rowTitle {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n overflow: hidden;\n overflow-wrap: break-word;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n}\n\n/* \"2 files · +384 −0 · Test-and-repair loop\". */\n.runFacts {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 0 var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n.diffStats { font-family: var(--font-display); font-variant-numeric: tabular-nums; color: var(--text-primary); }\n.runSource[title] { text-decoration: underline dotted; text-underline-offset: 3px; cursor: help; }\n\n.repo { font-weight: var(--font-weight-medium); }\n\n.rowMeta {\n display: flex;\n flex-wrap: wrap;\n gap: 0 var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n\n.severity {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n}\n.severity[data-severity='high'] { color: var(--status-danger-fg); }\n.severity[data-severity='warn'] { color: var(--status-warning-fg); }\n\n.mono { font-family: var(--font-mono); font-size: var(--text-xs-size); }\n.deadline { color: var(--status-warning-fg); font-variant-numeric: tabular-nums; }\n\n.rowKeys { display: flex; gap: 2px; }\n\n.key,\n.inlineKey {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 4px;\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n background: var(--bg-surface);\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n color: var(--text-secondary);\n}\n.inlineKey { margin-left: var(--space-2); background: transparent; }\n\n.loading { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-4); }\n\n.empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-16) var(--space-6);\n text-align: center;\n}\n.emptyTitle {\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n.emptyBody {\n max-width: 44ch;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n/* The reward for an empty inbox: a quiet check, not a confetti cannon. */\n.clearMark {\n position: relative;\n width: 40px;\n height: 40px;\n margin-bottom: var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-success-bg);\n}\n.clearMark::after {\n content: '';\n position: absolute;\n left: 14px;\n top: 10px;\n width: 10px;\n height: 16px;\n border: solid var(--status-success-solid);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n}\n\n.focusSink { position: absolute; width: 1px; height: 1px; overflow: hidden; outline: none; }\n\n.detail { outline: none; }\n\n.back {\n display: inline-flex;\n align-items: center;\n margin: var(--space-2) var(--space-3) 0;\n padding: var(--space-1) var(--space-2);\n border-radius: var(--radius-sm);\n font-size: var(--text-xs-size);\n color: var(--text-secondary);\n}\n.back:hover { background: var(--bg-hover); color: var(--text-primary); }\n\n/* ApprovalDetail was drawn for a wide pane: tighten its gutters in the sheet. */\n.approval > div { padding: var(--space-3) var(--space-4) var(--space-12); }\n\n.item { display: flex; flex-direction: column; gap: var(--space-4); padding: var(--space-3) var(--space-4) var(--space-8); }\n.itemHead { display: flex; flex-direction: column; gap: var(--space-1); }\n\n.itemTitle {\n font-family: var(--font-display);\n font-size: var(--text-lg-size);\n line-height: var(--text-lg-line);\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-display);\n}\n\n.itemDetail {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n color: var(--text-secondary);\n overflow-wrap: anywhere;\n}\n\n.defs {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n gap: var(--space-2) var(--space-4);\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n.defs dt { color: var(--text-tertiary); }\n.defs dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }\n\n.itemActions { display: flex; flex-wrap: wrap; gap: var(--space-2); }\n\n.foot {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-1) var(--space-4);\n padding: var(--space-2) var(--space-4);\n border-top: 1px solid var(--border-subtle);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n color: var(--text-tertiary);\n}\n.foot span { display: inline-flex; align-items: center; gap: 2px; }\n\n.caveat {\n margin: 0;\n padding: var(--space-2) 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(--status-warning-fg);\n background: var(--status-warning-bg);\n}\n\n@keyframes fade { from { opacity: 0; } }\n@keyframes slide { from { opacity: 0; transform: translateX(4px); } }\n@keyframes rise { from { opacity: 0; transform: translateY(4px); } }\n\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion='full']) .backdrop,\n :root:not([data-motion='full']) .panel { animation: none; }\n}\n:root[data-motion='reduce'] .backdrop,\n:root[data-motion='reduce'] .panel { animation: none; }\n\n/* ---- Cloud PR triage (3.13) ------------------------------------------------\n A verdict chip on the row (word + colour, never colour alone), picks for a\n batch, and the strip that acts on them. */\n.chip {\n display: inline-flex;\n align-items: baseline;\n max-width: 100%;\n padding: 0 var(--space-1);\n border-radius: var(--radius-xs);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n letter-spacing: var(--tracking-label);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.chip[data-tone='clean'] { background: var(--status-success-bg); color: var(--status-success-fg); }\n.chip[data-tone='held'] { background: var(--status-warning-bg); color: var(--status-warning-fg); }\n.chipWhy { font-family: var(--font-ui); letter-spacing: normal; }\n\n.row[data-picked='true'] { background: var(--bg-selected); }\n.row[data-picked='true'] .rule { background: var(--border-focus); }\n.pickMark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border-radius: var(--radius-xs);\n background: var(--border-focus);\n color: var(--accent-contrast);\n font-size: var(--text-2xs-size);\n}\n\n.batch {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-4);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n.batchCount {\n margin-right: auto;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n font-variant-numeric: tabular-nums;\n}\n\n.verdict {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--space-3);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-sm);\n}\n.verdictHead { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); margin: 0; }\n.checks {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: var(--space-1) var(--space-3);\n margin: 0;\n padding: 0;\n list-style: none;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n.checks li { display: flex; gap: var(--space-1); min-width: 0; overflow-wrap: anywhere; }\n.checks li[data-ok='false'] { color: var(--text-primary); }\n.checkMark { flex: none; width: 1em; text-align: center; }\n.checks li[data-ok='true'] .checkMark { color: var(--status-success-fg); }\n.checks li[data-ok='false'] .checkMark { color: var(--status-warning-fg); }\n","/**\n * routes/verse/shell/NeedsYouList.tsx — the rows of the Needs-you drawer\n * (unit C1). A listbox with ONE tab stop and aria-activedescendant, so J / K\n * move the selection without moving focus (and without the page scrolling\n * under the drawer). Presentational: selection and keys belong to the drawer.\n *\n * Each row says what, where, and how urgent — severity is a word AND a colour\n * (never colour alone), and an item with a deadline shows it counting down.\n *\n * Rows print needsYouRowView, not the wire text: \"patch: claude run: Advance\n * goal \"… so a deg\" becomes a \"Patch · Claude run\" label over a title that\n * ends on a whole word (two lines at most; the server's text is the tooltip),\n * a run summary becomes \"2 files · +384 −0 · Test-and-repair loop\", and an age\n * is \"38 days ago\" with the exact local time on hover.\n *\n * Triage (3.13): a cloud PR's row carries its gate verdict as a chip (\"Clean\",\n * or \"Held · 2 commits behind\"), and rows can be picked for a batch — X on\n * the selected row or Shift-click — which the drawer then acts on with\n * A / R / E. Picking never moves the cursor and never opens the item.\n */\nimport { forwardRef, useEffect, useRef } from 'react';\nimport type { NeedsYouItem } from '../../../../core/verse/workbench-types.js';\nimport { NEEDS_YOU_ACTION_KEYS } from '../../../../core/verse/workbench-types.js';\nimport type { TriageChip } from './cloud-triage.js';\nimport { needsYouRowView, until, type NeedsYouRunView } from './needs-you-model.js';\nimport styles from './NeedsYouDrawer.module.css';\n\n/**\n * \"2 files · +384 −0 · Test-and-repair loop\". The stats are drawn for the eye\n * and spoken as a sentence; the source's meaning (what TITRR did) is its\n * tooltip. Shared with the drawer's item detail.\n */\nexport function NeedsYouRunFacts({ run }: { run: NeedsYouRunView }) {\n return (\n <span className={styles.runFacts}>\n <span className={styles.diffStats} aria-hidden=\"true\">{run.stats}</span>\n <span className=\"visually-hidden\">{run.statsSpoken}</span>\n <span aria-hidden=\"true\">·</span>\n <span className={styles.runSource} title={run.sourceHint ?? undefined}>\n {run.partial ? 'Partial · ' : ''}{run.source}\n </span>\n </span>\n );\n}\n\nconst SEVERITY_WORD: Readonly<Record<NeedsYouItem['severity'], string>> = { high: 'Urgent', warn: 'Soon', info: 'When you can' };\n\nconst SOURCE_WORD: Readonly<Record<NeedsYouItem['source'], string>> = {\n approvals: 'Approval',\n authority: 'Autonomy',\n fleet: 'Fleet',\n leader: 'Leader',\n chats: 'Chat',\n accounts: 'Account',\n};\n\nexport interface NeedsYouListProps {\n items: readonly NeedsYouItem[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n onOpen: (id: string) => void;\n now: number;\n label: string;\n /** Rows picked for a batch action. */\n picked?: ReadonlySet<string>;\n /** Shift-click: pick or unpick a row. */\n onTogglePick?: (id: string) => void;\n /** Cloud PR verdicts by item id. */\n chips?: ReadonlyMap<string, TriageChip>;\n}\n\nconst NO_PICKS: ReadonlySet<string> = new Set();\nconst NO_CHIPS: ReadonlyMap<string, TriageChip> = new Map();\n\n/** \"Clean\" / \"Held · 2 commits behind\" — tone is a word as well as a colour. */\nexport function TriageChipView({ chip }: { chip: TriageChip }) {\n return (\n <span className={styles.chip} data-tone={chip.tone} title={chip.title}>\n {chip.label}\n {chip.why ? <span className={styles.chipWhy}> · {chip.why}</span> : null}\n </span>\n );\n}\n\nexport const NeedsYouList = forwardRef<HTMLDivElement, NeedsYouListProps>(function NeedsYouList(\n { items, selectedId, onSelect, onOpen, now, label, picked = NO_PICKS, onTogglePick, chips = NO_CHIPS },\n ref,\n) {\n const listId = 'verse-needs-you-list';\n const rowsRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!selectedId) return;\n // Matched by dataset, not a selector: ids come from other units' producers.\n const rows = rowsRef.current?.querySelectorAll<HTMLElement>('[data-item-id]') ?? [];\n const row = [...rows].find((el) => el.dataset['itemId'] === selectedId);\n row?.scrollIntoView?.({ block: 'nearest' });\n }, [selectedId]);\n\n return (\n <div\n ref={(node) => {\n rowsRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={listId}\n role=\"listbox\"\n aria-label={picked.size > 0 ? `${label}, ${picked.size} picked` : label}\n tabIndex={0}\n aria-activedescendant={selectedId ? `${listId}-${items.findIndex((i) => i.id === selectedId)}` : undefined}\n className={styles.rows}\n >\n {items.map((item, index) => {\n const keyed = item.actions\n .map((a) => NEEDS_YOU_ACTION_KEYS[a.kind])\n .filter((k): k is 'A' | 'R' | 'V' | 'E' => k !== undefined);\n const view = needsYouRowView(item, now);\n const isPicked = picked.has(item.id);\n const chip = chips.get(item.id);\n return (\n <div\n key={item.id}\n id={`${listId}-${index}`}\n data-item-id={item.id}\n role=\"option\"\n aria-selected={item.id === selectedId}\n data-picked={isPicked ? 'true' : undefined}\n className={styles.row}\n data-severity={item.severity}\n onClick={(event) => {\n if (event.shiftKey && onTogglePick) {\n event.preventDefault();\n onTogglePick(item.id);\n return;\n }\n onOpen(item.id);\n }}\n onMouseMove={() => item.id !== selectedId && onSelect(item.id)}\n >\n <span className={styles.rule} aria-hidden=\"true\" />\n <span className={styles.rowMain}>\n {view.kindLabel ? <span className={styles.rowKind}>{view.kindLabel}</span> : null}\n {/* Two lines at most, ending on a whole word; the server's title is the tooltip. */}\n <span className={styles.rowTitle} title={view.fullTitle}>{view.title}</span>\n {view.run ? <NeedsYouRunFacts run={view.run} /> : null}\n <span className={styles.rowMeta}>\n {isPicked ? <span className=\"visually-hidden\">Picked. </span> : null}\n {chip ? <TriageChipView chip={chip} /> : null}\n <span className={styles.severity} data-severity={item.severity}>{SEVERITY_WORD[item.severity]}</span>\n <span>{SOURCE_WORD[item.source]}</span>\n {view.repo ? <span className={styles.repo} title={view.repoFull}>{view.repo}</span> : null}\n {item.subject.pr ? <span>#{item.subject.pr}</span> : null}\n <span title={view.ageStamp}>{view.age}</span>\n {item.expiresAt ? <span className={styles.deadline}>closes {until(item.expiresAt, now)}</span> : null}\n </span>\n </span>\n {isPicked ? <span className={styles.pickMark} aria-hidden=\"true\">✓</span> : item.id === selectedId && keyed.length > 0 ? (\n <span className={styles.rowKeys} aria-hidden=\"true\">\n {keyed.map((k) => (\n <kbd key={k} className={styles.key}>{k}</kbd>\n ))}\n </span>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n});\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{N as r}from"./global-BWc2NPzv.js";import{a as i,f as a,i as o,o as s,p as c,r as l}from"./VerseMobileApp-BTGF5yuZ.js";import{n as u}from"./thread-data-Dq7QugaD.js";import{t as d}from"./sheet-D0ciShoy.js";import{c as f,i as p,n as m,r as h,t as g}from"./ui-parts-2JLq2ZSq.js";import{r as _,t as v}from"./resolved-store-Ba-W6Uhy.js";import{n as y}from"./connectivity-Svn7iy2K.js";import{n as b}from"./mobile-toast-C_UP13GQ.js";import{t as x}from"./MicButton-92I_NsaT.js";import{t as S}from"./mobile-actions-CvGouAAH.js";import{n as ee,r as C,t as w}from"./needs-you-actions-DF2zEltF.js";import{a as te,d as ne,f as re,n as T,o as ie,p as E,s as ae}from"./needs-you-model-DqmU5YOe.js";var D=n(t(),1),O={splits:`_splits_17dw6_10`,list:`_list_17dw6_14`,swipe:`_swipe_17dw6_4`,hint:`_hint_17dw6_29`,card:`_card_17dw6_51`,head:`_head_17dw6_64`,age:`_age_17dw6_72`,title:`_title_17dw6_78`,meta:`_meta_17dw6_85`,expires:`_expires_17dw6_95`,detail:`_detail_17dw6_100`,consequence:`_consequence_17dw6_108`,note:`_note_17dw6_117`,undo:`_undo_17dw6_123`},k=e(),A=new Set,j=new Set;function M(e){A=e;for(let e of[...j])e()}function oe(e){M(new Set(A).add(e))}function N(e){let t=new Set(A);for(let n of e)t.delete(n);M(t)}function se(){M(new Set)}function ce(){return(0,D.useSyncExternalStore)(e=>(j.add(e),()=>j.delete(e)),()=>A,()=>A)}var le=Object.keys(T),P=.3,F=10,ue=6e3,I=[`approve`,`resume`,`renew`,`fix`,`done`],L=[`veto`,`reject`];function R(e,t){for(let n of t){let t=e.actions.find(e=>e.kind===n);if(t)return t}return null}function z(e){return R(e,I)}function B(e){return R(e,L)}function V(e){let t=e.request;if(!t)return!0;if(t.method!==`POST`)return!1;let{path:n,body:r}=t;return n===`/api/verse/activity/seen`?!0:n===`/api/verse/fleet/live`?r.action===`resume-repo`:n===`/api/verse/leader`?r.action===`veto`||r.action===`dismiss`:/^\/api\/inbox\/[^/?#]+\/(approve|reject)$/.test(n)||/^\/api\/verse\/leader\/actions\/[^/?#]+\/approve$/.test(n)||/^\/api\/verse\/leader\/questions\/[^/?#]+\/answer$/.test(n)||/^\/api\/verse\/(cloud|devin)\/tasks\/[^/?#]+\/(land|close|update-branch|dismiss)$/.test(n)||/^\/api\/verse\/sessions\/[^/?#]+\/(turns|cancel|terminate)$/.test(n)||/^\/api\/verse\/queue\/[^/?#]+$/.test(n)?!0:/^\/api\/verse\/agents\/ag_[a-z0-9]{8,32}\/plan$/.test(n)?Object.keys(r).length===1&&(r.action===`approve`||r.action===`discard`):/^\/api\/verse\/queue\/[A-Za-z0-9][A-Za-z0-9_-]{0,127}\/[0-9a-f]{12}\/send$/.test(n)?Object.keys(r).length===0:!1}function H(e,t){return r()&&(e.kind===`grant`||e.kind===`kill`||t.request?.path.startsWith(`/api/verse/authority`)===!0||!V(t))}var U={approval:`Approval`,"owner-lane-pr":`Owner-lane PR`,"class-c":`Leader ask`,"veto-window":`Veto window`,"leader-question":`Leader question`,"owner-hold":`Owner hold`,quarantine:`Quarantined`,revert:`Reverted`,grant:`Grant`,kill:`Stopped`,"chat-failed":`Chat failed`,"agent-plan":`Agent plan`,"agent-spend":`Agent spend`,"agent-ci":`Agent checks`,"agent-setup":`Agent setup`,"agent-waiting":`Agent waiting`,"queue-held":`Queue held`,reconnect:`Sign-in`,repin:`CLI pin`},W={high:`danger`,warn:`warning`,info:`info`};function G(e,t){let n=e.replace(/\s+/g,` `).trim();if(n.length<=t)return n;let r=n.slice(0,t-1),i=r.lastIndexOf(` `);return`${(i>t*.6?r.slice(0,i):r).replace(/[\s,.;:–—-]+$/,``)}…`}var K={"owner-lane-pr/approve":`Merges the PR on GitHub. This can’t be undone from the phone.`,"veto-window/approve":`Applies the Leader’s action now instead of when its veto window closes. You can still veto it afterwards.`,"veto-window/veto":`Cancels the Leader’s action before it applies.`,"class-c/approve":`Records your go-ahead for the Leader. Nothing applies until its next run, and the server re-checks your grant.`,"kill/resume":`Clears Stop: autonomy resumes within what the current grant allows.`,"agent-plan/approve":`Sends the approved plan to the agent, which can then edit its workspace.`,"agent-plan/reject":`Discards this plan; the agent will wait for another instruction.`,"queue-held/resume":`Sends the held message to the agent now.`},q={approve:`Approves it on your Mac.`,reject:`Rejects it on your Mac; it is never applied.`,veto:`Cancels the Leader’s action.`,done:`Clears it from Needs you on your Mac too.`,resume:`Resumes it on your Mac.`,renew:`Renews it on your Mac.`,fix:`Runs the fix on your Mac.`};function J(e,t){return e.kind===`leader-question`&&t.request===null?`Sends your answer to the Leader — the same thread as Mind and Telegram.`:t.request===null?e.target.kind===`session`?`Opens the chat on this phone.`:e.target.kind===`url`?`Opens it in your browser.`:`This step happens on your Mac.`:K[`${e.kind}/${t.kind}`]||(t.confirm?.body?G(t.confirm.body,180):q[t.kind])}function de(e){return/^https:\/\//i.test(e)}function fe(e){return e.target.kind===`session`?`Open chat`:e.target.kind===`url`&&de(e.target.url)?/^https:\/\/github\.com\//i.test(e.target.url)?`Open on GitHub`:`Open link`:null}var Y=`(prefers-reduced-motion: reduce)`;function X(e){if(typeof window.matchMedia!=`function`)return()=>void 0;let t=window.matchMedia(Y);return t.addEventListener?.(`change`,e),()=>t.removeEventListener?.(`change`,e)}function Z(){if(typeof window.matchMedia!=`function`)return!1;let e=document.documentElement.dataset.motion;return e===`reduce`||e!==`full`&&window.matchMedia(Y).matches}function pe(){return(0,D.useSyncExternalStore)(X,Z,()=>!1)}function Q(e,t){let[n,r]=(0,D.useState)(0),i=(0,D.useRef)(null),a=(0,D.useRef)(!1),o=e.right||e.left,s=e=>{!o||e.button!==void 0&&e.button>0||(a.current=!1,i.current={id:e.pointerId,x:e.clientX,y:e.clientY,width:e.currentTarget.offsetWidth||320,dragging:!1})},c=t=>{let n=i.current;if(!n||t.pointerId!==n.id)return;let a=t.clientX-n.x,o=t.clientY-n.y;if(!n.dragging){if(Math.abs(o)>F&&Math.abs(o)>=Math.abs(a)){i.current=null;return}if(Math.abs(a)<F)return;n.dragging=!0;try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}}r(a>0?e.right?a:0:e.left?a:0)},l=(n,o)=>{let s=i.current;if(i.current=null,r(0),!s||!s.dragging)return;a.current=!0;let c=n.clientX-s.x;!o||Math.abs(c)<s.width*.3||(c>0&&e.right?t(`right`):c<0&&e.left&&t(`left`))};return{dx:n,handlers:o?{onPointerDown:s,onPointerMove:c,onPointerUp:e=>l(e,!0),onPointerCancel:e=>l(e,!1),onClickCapture:e=>{a.current&&(a.current=!1,e.preventDefault(),e.stopPropagation())}}:{}}}function me({item:e,canAct:t,offline:n,reduced:r,onAction:i,onOpen:a,onHide:o}){let c=(0,D.useId)(),u=ae(e),d=e.actions.filter(t=>!H(e,t)),p=d.length!==e.actions.length,m=t?R({...e,actions:d},I):null,h=t?R({...e,actions:d},L):null,_=t&&!n,v=_?m:null,y=_?h:null,b=fe(e),x=b!==null&&!d.some(e=>e.request===null&&t),{dx:S,handlers:ee}=Q({right:!r&&v!==null,left:!r},t=>{t===`right`&&v?i(e,v):t===`left`&&(y?i(e,y):o(e))}),C=S>0&&v?{side:`right`,text:v.label}:S<0?y?{side:`left`,text:y.label}:{side:`hide`,text:`Hide`}:null,w=e.expiresAt?`${e.kind===`veto-window`?`Applies`:`Expires`} ${E(e.expiresAt)}`:null;return(0,k.jsxs)(`li`,{className:O.swipe,children:[C?(0,k.jsx)(`div`,{className:O.hint,"data-side":C.side,"aria-hidden":`true`,children:C.text}):null,(0,k.jsxs)(`article`,{className:s(f.card,O.card),"aria-labelledby":c,"data-dragging":S===0?void 0:``,style:S===0?void 0:{transform:`translateX(${S}px)`},...ee,children:[(0,k.jsxs)(`div`,{className:O.head,children:[(0,k.jsx)(g,{tone:W[e.severity],children:U[e.kind]}),(0,k.jsx)(`span`,{className:O.age,title:u.ageStamp,children:u.age})]}),(0,k.jsx)(`h2`,{id:c,className:O.title,title:u.fullTitle,children:u.title}),u.kindLabel||u.repo||u.run||w?(0,k.jsxs)(`p`,{className:O.meta,children:[u.kindLabel?(0,k.jsx)(`span`,{children:u.kindLabel}):null,u.repo?(0,k.jsx)(`span`,{title:u.repoFull,children:u.repo}):null,u.run?(0,k.jsx)(`span`,{"aria-label":u.run.statsSpoken,children:u.run.stats}):null,u.run?(0,k.jsx)(`span`,{title:u.run.sourceHint??void 0,children:u.run.source}):null,w?(0,k.jsx)(`span`,{className:O.expires,children:w}):null]}):null,u.detail?(0,k.jsx)(`p`,{className:O.detail,children:u.detail}):null,p?(0,k.jsx)(`p`,{className:O.consequence,children:`This action is available on your Mac.`}):null,m?(0,k.jsx)(`p`,{className:O.consequence,children:J(e,m)}):null,(0,k.jsxs)(`div`,{className:f.buttonRow,children:[t?d.map((t,r)=>{let a=t===m,o=t.kind===`veto`||t.kind===`reject`;return(0,k.jsx)(l,{variant:a?`primary`:o?`destructiveTinted`:`secondary`,disabled:n,"aria-label":`${t.label}: ${u.title}`,onClick:()=>i(e,t),children:t.label},`${t.kind}-${r}`)}):null,x?(0,k.jsx)(l,{variant:`secondary`,"aria-label":`${b}: ${u.title}`,onClick:()=>a(e),children:b}):null,(0,k.jsx)(l,{variant:`plain`,"aria-label":`Hide on this phone: ${u.title}`,onClick:()=>o(e),children:`Hide`})]})]})]})}function he(){let{activity:e,permissions:t,reachability:n,navigate:r,refreshActivity:g}=c(),E=_(),A=ce(),j=pe(),[M,se]=(0,D.useState)(`all`),[P,F]=(0,D.useState)(null),[I,L]=(0,D.useState)(null),[R,z]=(0,D.useState)({}),[B,V]=(0,D.useState)(``),U=(0,D.useId)(),W=a(t),G=n===`offline`||n===`unreachable`,K=e.data,q=K?.needsYou??[],J=q.filter(e=>!E.has(e.id)&&!A.has(e.id)),fe=ne(J),Y=ie(J,M),X=ie(q.filter(e=>A.has(e.id)&&!E.has(e.id)),M),Z=re(K?.sources??null,M);(0,D.useEffect)(()=>{if(!P)return;let e=setTimeout(()=>F(null),ue);return()=>clearTimeout(e)},[P]);let Q=(0,D.useCallback)(e=>{let t=e.target;if(t.kind===`session`){r({screen:`agent`,id:t.sessionId,pane:`transcript`});return}if(t.kind===`url`){de(t.url)?window.open(t.url,`_blank`,`noopener`):b(`That link is not https, so it was not opened.`,`danger`);return}b(`Open this on your Mac — the phone has no screen for it yet.`,`neutral`)},[r]),he=(0,D.useCallback)((e,t)=>{if(H(e,t)){b(`This action is available on your Mac.`,`neutral`);return}if(e.kind===`leader-question`&&t.request===null&&C(e.id)){V(``),L(e);return}w(e,t,{openTarget:Q,toast:b})},[Q]),ge=(0,D.useCallback)(e=>{oe(e.id),F({id:e.id,title:ae(e).title})},[]),_e=()=>{let e=I,t=e?C(e.id):null,n=e?(R[e.id]??``).trim():``;e&&t&&n&&(L(null),S({title:`Answer the Leader`,consequences:`Sends your answer to the Leader.`,confirmLabel:`Send answer`,confirm:!1,run:async()=>{try{await u(t,n)}catch(t){throw L(e),t}},success:`Answer sent to the Leader`,onDone:()=>{z(t=>{let n={...t};return delete n[e.id],n}),v(e.id),g()}}))},$=I?R[I.id]??``:``,ve=e=>{I&&z(t=>({...t,[I.id]:e}))},ye;ye=K?Y.length===0?X.length>0?(0,k.jsx)(h,{title:`Nothing else waiting`,body:`${X.length} hidden on this phone for now. ${X.length===1?`It is`:`They are`} still waiting on your Mac.`,action:(0,k.jsx)(l,{variant:`tinted`,onClick:()=>N(X.map(e=>e.id)),children:`Show hidden`})}):Z.vouched?(0,k.jsx)(h,{title:`All clear`,body:M===`all`?`Nothing is waiting on you. Approvals, fleet holds, Leader questions, failed chats and seat sign-ins appear here.`:`Nothing waiting in ${T[M]}.`}):(0,k.jsx)(h,{title:`Nothing from what answered`,body:`${te(Z)}, so this can’t say all clear.`}):(0,k.jsx)(`ul`,{className:O.list,"aria-label":`${T[M]} waiting on you`,children:Y.map(e=>(0,k.jsx)(me,{item:e,canAct:W,offline:G,reduced:j,onAction:he,onOpen:Q,onHide:ge},e.id))}):e.status===`idle`||e.status===`loading`?(0,k.jsx)(i,{rows:3,label:`Loading what needs you`}):e.status===`unavailable`&&!e.error?(0,k.jsx)(p,{title:`Needs you isn’t available`,reason:`Verse on your Mac does not serve Needs you in this build. Update Ashlr on the Mac.`,onRetry:()=>void g()}):(0,k.jsx)(p,{title:`Couldn’t load Needs you`,reason:e.error??`Your Mac did not answer.`,onRetry:()=>void g()});let be=B?`${$}${$&&!$.endsWith(` `)?` `:``}${B}`:$;return(0,k.jsxs)(o,{title:`Needs you`,large:!0,onRefresh:g,label:`Waiting on you`,footer:P?(0,k.jsxs)(`div`,{className:O.undo,role:`status`,children:[(0,k.jsx)(`span`,{children:`Hidden on this phone. It stays on your Mac.`}),(0,k.jsx)(l,{variant:`plain`,onClick:()=>{N([P.id]),F(null)},"aria-label":`Undo hide: ${P.title}`,children:`Undo`})]}):void 0,children:[n===`offline`?(0,k.jsxs)(m,{children:[`This phone is offline. Showing what was waiting (`,y(e.updatedAt).toLowerCase(),`); actions are off until it reconnects.`]}):n===`unreachable`&&K?(0,k.jsxs)(m,{children:[`Can’t reach your Mac. Showing what was waiting (`,y(e.updatedAt).toLowerCase(),`); actions are off until it answers.`]}):null,!W&&t.actReason?(0,k.jsx)(m,{tone:`info`,children:t.actReason}):null,K?(0,k.jsx)(`div`,{className:s(f.chips,O.splits),role:`group`,"aria-label":`Filter`,children:le.map(e=>(0,k.jsxs)(`button`,{type:`button`,className:f.chip,"aria-pressed":M===e,onClick:()=>se(e),children:[T[e],` `,fe[e]]},e))}):null,ye,K&&Y.length>0&&!Z.vouched?(0,k.jsxs)(`p`,{className:O.note,children:[`Not everything answered: `,te(Z),`.`]}):null,K&&Y.length>0&&X.length>0?(0,k.jsxs)(`p`,{className:O.note,children:[X.length,` hidden on this phone.`,` `,(0,k.jsx)(`button`,{type:`button`,className:s(f.btn,f.plain),onClick:()=>N(X.map(e=>e.id)),children:`Show`})]}):null,(0,k.jsxs)(d,{open:I!==null,onClose:()=>L(null),title:`Answer the Leader`,footer:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(l,{variant:`primary`,block:!0,disabled:$.trim().length===0||G,onClick:_e,children:`Send answer`}),(0,k.jsx)(l,{variant:`plain`,block:!0,onClick:()=>L(null),children:`Cancel`})]}),children:[I?(0,k.jsx)(`p`,{className:f.consequence,children:ee(I)}):null,(0,k.jsxs)(`div`,{className:f.field,children:[(0,k.jsx)(`label`,{className:f.label,htmlFor:U,children:`Your answer`}),(0,k.jsx)(`textarea`,{id:U,className:f.textarea,value:be,onChange:e=>{V(``),ve(e.target.value)}})]}),(0,k.jsx)(x,{onInterim:V,onFinal:e=>ve(`${$}${$&&!$.endsWith(` `)?` `:``}${e}`)}),(0,k.jsx)(`p`,{className:f.faint,children:G?`Your Mac isn’t answering, so this can’t be sent yet. The words stay here.`:`Goes to the same Leader thread as Mind and Telegram.`})]})]})}export{he as NeedsYouScreen,P as SWIPE_COMMIT_FRACTION,J as consequenceLine,B as destructiveAction,oe as hideOnThisPhone,H as macOnlyRemoteAction,z as primaryAction,se as resetHiddenForTest,N as unhideOnThisPhone};
2
- //# sourceMappingURL=NeedsYouScreen-D13Q7iU8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NeedsYouScreen-D13Q7iU8.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mobile/screens/NeedsYouScreen.module.css","../../../../../../src/web-ui/routes/verse/mobile/screens/NeedsYouScreen.tsx"],"sourcesContent":["/*\n * routes/verse/mobile/screens/NeedsYouScreen.module.css — Needs-you cards.\n *\n * A card sits in a clipping frame (.swipe): while it is dragged, the frame\n * shows what letting go will do behind it, and nothing ever overflows the\n * page sideways. The drag itself is direct manipulation (the card follows\n * the finger); there is no animation, and under reduced motion no drag.\n */\n\n.splits {\n margin: 0 0 var(--space-4);\n}\n\n.list {\n display: grid;\n gap: var(--space-3);\n margin: 0 0 var(--space-6);\n padding: 0;\n list-style: none;\n}\n\n.swipe {\n position: relative;\n min-width: 0;\n overflow: hidden;\n border-radius: var(--radius-xl);\n}\n\n.hint {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n padding: 0 var(--space-5);\n background: var(--accent-500);\n color: var(--text-on-accent);\n font-weight: var(--font-weight-semibold);\n}\n\n.hint[data-side='left'] {\n justify-content: flex-end;\n background: var(--status-danger-solid);\n}\n\n.hint[data-side='hide'] {\n justify-content: flex-end;\n background: var(--bg-active);\n color: var(--text-primary);\n}\n\n.card {\n position: relative;\n display: grid;\n gap: var(--space-2);\n /* Vertical scrolling stays the browser's; a sideways drag is the card's. */\n touch-action: pan-y;\n}\n\n.card[data-dragging] {\n user-select: none;\n -webkit-user-select: none;\n}\n\n.head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.age {\n color: var(--text-tertiary);\n font-size: 0.8em;\n flex: none;\n}\n\n.title {\n margin: 0;\n font-size: 1.02em;\n font-weight: var(--font-weight-semibold);\n line-height: 1.3;\n}\n\n.meta {\n display: flex;\n flex-wrap: wrap;\n gap: 0 var(--space-3);\n margin: 0;\n color: var(--text-secondary);\n font-size: 0.82em;\n min-width: 0;\n}\n\n.expires {\n color: var(--status-warning-fg);\n font-weight: var(--font-weight-medium);\n}\n\n.detail {\n margin: 0;\n color: var(--text-secondary);\n font-size: 0.9em;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.consequence {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-lg);\n background: var(--bg-canvas);\n color: var(--text-secondary);\n font-size: 0.82em;\n}\n\n.note {\n margin: 0 var(--space-2) var(--space-4);\n color: var(--text-tertiary);\n font-size: 0.82em;\n}\n\n.undo {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-2) max(var(--space-4), env(safe-area-inset-right)) var(--space-2) max(var(--space-4), env(safe-area-inset-left));\n background: var(--bg-surface-raised);\n border-top: 1px solid var(--border-subtle);\n font-size: 0.9em;\n}\n\n.undo > span {\n flex: 1;\n min-width: 0;\n}\n","/**\n * routes/verse/mobile/screens/NeedsYouScreen.tsx — everything waiting on\n * Mason, one card each: approvals, fleet holds, Leader questions and veto\n * windows, failed chats, seats to sign in again.\n *\n * Reads the shell's ONE activity loop (useMobile().activity) — the same\n * GET /api/verse/activity the Mac's Needs-you drawer reads — minus what was\n * just acted on (resolved-store, shared with every list) and minus what was\n * hidden on this phone this session.\n *\n * Doing things:\n * - every action is the item's own (label, route, confirmation) run through\n * runNeedsYouAction — the same confirm, token, POST order the Mac uses,\n * drawn by MobileGuardSheet. Approve / reject / veto always confirm.\n * - a Leader question's Answer opens a sheet and posts to the question's\n * answer route (leader/thread-data.ts).\n * - swipe right starts the card's primary action, swipe left its veto /\n * reject (or hides it when it has none). A swipe only STARTS the action:\n * anything that confirms still confirms. Every swipe has a button twin,\n * and under reduced motion there is no swipe at all.\n * - \"Hide\" is local: in-memory for this session on this phone, never\n * stored, never sent. The item stays on the Mac.\n *\n * Honesty: \"All clear\" only when every producer feeding the split answered\n * (needs-you-model splitCoverage) and nothing is hidden here.\n */\nimport {\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport type { NeedsYouAction, NeedsYouActionKind, NeedsYouItem, NeedsYouKind, NeedsYouSeverity } from '../../../../../core/verse/workbench-types.js';\nimport { isRemoteMobileMode } from '../../../../data/remote-mode.js';\nimport { answerLeaderQuestion } from '../../leader/thread-data.js';\nimport { needsYouQuestionText, questionIdOfNeedsYouItem } from '../../leader/question-id.js';\nimport { runNeedsYouAction } from '../../shell/needs-you-actions.js';\nimport {\n describeSilence,\n itemsForSplit,\n needsYouRowView,\n SPLIT_LABEL,\n splitCounts,\n splitCoverage,\n until,\n} from '../../shell/needs-you-model.js';\nimport { markResolved, useResolvedIds } from '../../shell/resolved-store.js';\nimport type { NeedsYouSplit } from '../../verse-ui-store.js';\nimport { sinceText } from '../connectivity.js';\nimport { MicButton } from '../MicButton.js';\nimport { runMobileAction } from '../mobile-actions.js';\nimport { canShowActions, useMobile } from '../mobile-context.js';\nimport { showMobileToast } from '../mobile-toast.js';\nimport { BottomSheet } from '../sheet.js';\nimport { Button, cx, Screen, SkeletonList } from '../ui.js';\nimport { Badge, Banner, EmptyState, ErrorState, ui, type Tone } from '../ui-parts.js';\nimport styles from './NeedsYouScreen.module.css';\n\n// ---------------------------------------------------------------------------\n// Hidden on this phone (session memory only — never storage, never the server)\n// ---------------------------------------------------------------------------\n\nlet hidden: ReadonlySet<string> = new Set();\nconst hiddenListeners = new Set<() => void>();\n\nfunction setHidden(next: ReadonlySet<string>): void {\n hidden = next;\n for (const l of [...hiddenListeners]) l();\n}\n\nexport function hideOnThisPhone(id: string): void {\n setHidden(new Set(hidden).add(id));\n}\n\nexport function unhideOnThisPhone(ids: readonly string[]): void {\n const next = new Set(hidden);\n for (const id of ids) next.delete(id);\n setHidden(next);\n}\n\nexport function resetHiddenForTest(): void {\n setHidden(new Set());\n}\n\nfunction useHiddenIds(): ReadonlySet<string> {\n return useSyncExternalStore(\n (l) => {\n hiddenListeners.add(l);\n return () => hiddenListeners.delete(l);\n },\n () => hidden,\n () => hidden,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Pure helpers\n// ---------------------------------------------------------------------------\n\nconst SPLITS = Object.keys(SPLIT_LABEL) as NeedsYouSplit[];\n\n/** A swipe past this fraction of the card's width commits. */\nexport const SWIPE_COMMIT_FRACTION = 0.3;\n/** Movement before a touch counts as a horizontal drag rather than a tap or a scroll. */\nconst SWIPE_SLOP_PX = 10;\nconst UNDO_MS = 6_000;\n\n/** Swipe right / the card's lead button: the first non-destructive step, in this order. */\nconst PRIMARY_ORDER: readonly NeedsYouActionKind[] = ['approve', 'resume', 'renew', 'fix', 'done'];\n/** Swipe left: saying no. */\nconst DESTRUCTIVE_ORDER: readonly NeedsYouActionKind[] = ['veto', 'reject'];\n\nfunction firstOf(item: NeedsYouItem, order: readonly NeedsYouActionKind[]): NeedsYouAction | null {\n for (const kind of order) {\n const found = item.actions.find((a) => a.kind === kind);\n if (found) return found;\n }\n return null;\n}\n\nexport function primaryAction(item: NeedsYouItem): NeedsYouAction | null {\n return firstOf(item, PRIMARY_ORDER);\n}\n\nexport function destructiveAction(item: NeedsYouItem): NeedsYouAction | null {\n return firstOf(item, DESTRUCTIVE_ORDER);\n}\n\n/**\n * The gateway has a closed route policy. Keep the phone's action affordances\n * inside that policy so an activity producer cannot offer a button that is\n * guaranteed to fail remotely. The gateway still validates path, body, scope,\n * and fresh passkey at dispatch; this list only controls what the UI offers.\n */\nfunction remoteNeedsYouRequestSupported(action: NeedsYouAction): boolean {\n const request = action.request;\n if (!request) return true; // Opens a target or the Leader answer sheet locally.\n if (request.method !== 'POST') return false;\n const { path, body } = request;\n if (path === '/api/verse/activity/seen') return true;\n if (path === '/api/verse/fleet/live') return body['action'] === 'resume-repo';\n if (path === '/api/verse/leader') return body['action'] === 'veto' || body['action'] === 'dismiss';\n if (/^\\/api\\/inbox\\/[^/?#]+\\/(approve|reject)$/.test(path)) return true;\n if (/^\\/api\\/verse\\/leader\\/actions\\/[^/?#]+\\/approve$/.test(path)) return true;\n if (/^\\/api\\/verse\\/leader\\/questions\\/[^/?#]+\\/answer$/.test(path)) return true;\n if (/^\\/api\\/verse\\/(cloud|devin)\\/tasks\\/[^/?#]+\\/(land|close|update-branch|dismiss)$/.test(path)) return true;\n if (/^\\/api\\/verse\\/sessions\\/[^/?#]+\\/(turns|cancel|terminate)$/.test(path)) return true;\n if (/^\\/api\\/verse\\/queue\\/[^/?#]+$/.test(path)) return true;\n if (/^\\/api\\/verse\\/agents\\/ag_[a-z0-9]{8,32}\\/plan$/.test(path)) {\n return Object.keys(body).length === 1 && (body['action'] === 'approve' || body['action'] === 'discard');\n }\n if (/^\\/api\\/verse\\/queue\\/[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\/[0-9a-f]{12}\\/send$/.test(path)) {\n return Object.keys(body).length === 0;\n }\n return false;\n}\n\n/** Authority changes and gateway-denied routes require the Mac. */\nexport function macOnlyRemoteAction(item: NeedsYouItem, action: NeedsYouAction): boolean {\n return isRemoteMobileMode() && (item.kind === 'grant' || item.kind === 'kill'\n || action.request?.path.startsWith('/api/verse/authority') === true\n || !remoteNeedsYouRequestSupported(action));\n}\n\nconst KIND_NAME: Readonly<Record<NeedsYouKind, string>> = {\n approval: 'Approval',\n 'owner-lane-pr': 'Owner-lane PR',\n 'class-c': 'Leader ask',\n 'veto-window': 'Veto window',\n 'leader-question': 'Leader question',\n 'owner-hold': 'Owner hold',\n quarantine: 'Quarantined',\n revert: 'Reverted',\n grant: 'Grant',\n kill: 'Stopped',\n 'chat-failed': 'Chat failed',\n 'agent-plan': 'Agent plan',\n 'agent-spend': 'Agent spend',\n 'agent-ci': 'Agent checks',\n 'agent-setup': 'Agent setup',\n 'agent-waiting': 'Agent waiting',\n 'queue-held': 'Queue held',\n reconnect: 'Sign-in',\n repin: 'CLI pin',\n};\n\nconst SEVERITY_TONE: Readonly<Record<NeedsYouSeverity, Tone>> = { high: 'danger', warn: 'warning', info: 'info' };\n\nfunction clip(text: string, max: number): string {\n const flat = text.replace(/\\s+/g, ' ').trim();\n if (flat.length <= max) return flat;\n const cut = flat.slice(0, max - 1);\n const space = cut.lastIndexOf(' ');\n return `${(space > max * 0.6 ? cut.slice(0, space) : cut).replace(/[\\s,.;:–—-]+$/, '')}…`;\n}\n\n/** Specific words where the producer's own copy is not the clearest line for a card. */\nconst SPECIFIC: Readonly<Partial<Record<`${NeedsYouKind}/${NeedsYouActionKind}`, string>>> = {\n 'owner-lane-pr/approve': 'Merges the PR on GitHub. This can’t be undone from the phone.',\n 'veto-window/approve': 'Applies the Leader’s action now instead of when its veto window closes. You can still veto it afterwards.',\n 'veto-window/veto': 'Cancels the Leader’s action before it applies.',\n 'class-c/approve': 'Records your go-ahead for the Leader. Nothing applies until its next run, and the server re-checks your grant.',\n 'kill/resume': 'Clears Stop: autonomy resumes within what the current grant allows.',\n 'agent-plan/approve': 'Sends the approved plan to the agent, which can then edit its workspace.',\n 'agent-plan/reject': 'Discards this plan; the agent will wait for another instruction.',\n 'queue-held/resume': 'Sends the held message to the agent now.',\n};\n\nconst GENERIC: Readonly<Record<NeedsYouActionKind, string>> = {\n approve: 'Approves it on your Mac.',\n reject: 'Rejects it on your Mac; it is never applied.',\n veto: 'Cancels the Leader’s action.',\n done: 'Clears it from Needs you on your Mac too.',\n resume: 'Resumes it on your Mac.',\n renew: 'Renews it on your Mac.',\n fix: 'Runs the fix on your Mac.',\n};\n\n/** One short line: what the card's primary action WILL do. */\nexport function consequenceLine(item: NeedsYouItem, action: NeedsYouAction): string {\n if (item.kind === 'leader-question' && action.request === null) return 'Sends your answer to the Leader — the same thread as Mind and Telegram.';\n if (action.request === null) {\n if (item.target.kind === 'session') return 'Opens the chat on this phone.';\n if (item.target.kind === 'url') return 'Opens it in your browser.';\n return 'This step happens on your Mac.';\n }\n const specific = SPECIFIC[`${item.kind}/${action.kind}`];\n if (specific) return specific;\n if (action.confirm?.body) return clip(action.confirm.body, 180);\n return GENERIC[action.kind];\n}\n\nfunction isHttps(url: string): boolean {\n return /^https:\\/\\//i.test(url);\n}\n\n/** A button that opens the item where the phone can show it (a chat, a link); null when only the Mac can. */\nfunction openLabel(item: NeedsYouItem): string | null {\n if (item.target.kind === 'session') return 'Open chat';\n if (item.target.kind === 'url' && isHttps(item.target.url)) return /^https:\\/\\/github\\.com\\//i.test(item.target.url) ? 'Open on GitHub' : 'Open link';\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Reduced motion and the swipe\n// ---------------------------------------------------------------------------\n\nconst REDUCED_QUERY = '(prefers-reduced-motion: reduce)';\n\nfunction subscribeReduced(listener: () => void): () => void {\n if (typeof window.matchMedia !== 'function') return () => undefined;\n const mq = window.matchMedia(REDUCED_QUERY);\n mq.addEventListener?.('change', listener);\n return () => mq.removeEventListener?.('change', listener);\n}\n\nfunction readReduced(): boolean {\n if (typeof window.matchMedia !== 'function') return false;\n const forced = document.documentElement.dataset['motion'];\n if (forced === 'reduce') return true;\n if (forced === 'full') return false;\n return window.matchMedia(REDUCED_QUERY).matches;\n}\n\nfunction usePrefersReducedMotion(): boolean {\n return useSyncExternalStore(subscribeReduced, readReduced, () => false);\n}\n\ninterface Gesture {\n id: number | undefined;\n x: number;\n y: number;\n width: number;\n dragging: boolean;\n}\n\n/**\n * Horizontal drag on a card. Vertical movement first = a scroll: the gesture\n * is abandoned. Past SWIPE_COMMIT_FRACTION of the width on release = commit.\n * A drag that began on a button never also clicks it.\n */\nfunction useSwipe(enabled: { right: boolean; left: boolean }, onCommit: (dir: 'right' | 'left') => void) {\n const [dx, setDx] = useState(0);\n const gesture = useRef<Gesture | null>(null);\n const swallowClick = useRef(false);\n const any = enabled.right || enabled.left;\n\n const onPointerDown = (e: ReactPointerEvent<HTMLElement>) => {\n if (!any || (e.button !== undefined && e.button > 0)) return;\n swallowClick.current = false;\n gesture.current = { id: e.pointerId, x: e.clientX, y: e.clientY, width: e.currentTarget.offsetWidth || 320, dragging: false };\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLElement>) => {\n const g = gesture.current;\n if (!g || e.pointerId !== g.id) return;\n const mx = e.clientX - g.x;\n const my = e.clientY - g.y;\n if (!g.dragging) {\n if (Math.abs(my) > SWIPE_SLOP_PX && Math.abs(my) >= Math.abs(mx)) {\n gesture.current = null;\n return;\n }\n if (Math.abs(mx) < SWIPE_SLOP_PX) return;\n g.dragging = true;\n try {\n e.currentTarget.setPointerCapture?.(e.pointerId);\n } catch {\n /* capture is a nicety */\n }\n }\n // Follow only in a direction that does something.\n setDx(mx > 0 ? (enabled.right ? mx : 0) : enabled.left ? mx : 0);\n };\n\n const end = (e: ReactPointerEvent<HTMLElement>, commit: boolean) => {\n const g = gesture.current;\n gesture.current = null;\n setDx(0);\n if (!g || !g.dragging) return;\n swallowClick.current = true;\n const mx = e.clientX - g.x;\n if (!commit || Math.abs(mx) < g.width * SWIPE_COMMIT_FRACTION) return;\n if (mx > 0 && enabled.right) onCommit('right');\n else if (mx < 0 && enabled.left) onCommit('left');\n };\n\n const onClickCapture = (e: ReactMouseEvent<HTMLElement>) => {\n if (!swallowClick.current) return;\n swallowClick.current = false;\n e.preventDefault();\n e.stopPropagation();\n };\n\n return {\n dx,\n handlers: any\n ? {\n onPointerDown,\n onPointerMove,\n onPointerUp: (e: ReactPointerEvent<HTMLElement>) => end(e, true),\n onPointerCancel: (e: ReactPointerEvent<HTMLElement>) => end(e, false),\n onClickCapture,\n }\n : {},\n };\n}\n\n// ---------------------------------------------------------------------------\n// A card\n// ---------------------------------------------------------------------------\n\ninterface CardProps {\n item: NeedsYouItem;\n canAct: boolean;\n /** The Mac is not answering: Mac actions are off (Hide and Open still work). */\n offline: boolean;\n reduced: boolean;\n onAction: (item: NeedsYouItem, action: NeedsYouAction) => void;\n onOpen: (item: NeedsYouItem) => void;\n onHide: (item: NeedsYouItem) => void;\n}\n\nfunction NeedsCard({ item, canAct, offline, reduced, onAction, onOpen, onHide }: CardProps) {\n const titleId = useId();\n const row = needsYouRowView(item);\n const allowedActions = item.actions.filter((action) => !macOnlyRemoteAction(item, action));\n const macOnly = allowedActions.length !== item.actions.length;\n const primary = canAct ? firstOf({ ...item, actions: allowedActions }, PRIMARY_ORDER) : null;\n const destructive = canAct ? firstOf({ ...item, actions: allowedActions }, DESTRUCTIVE_ORDER) : null;\n const actionsLive = canAct && !offline;\n const rightAction = actionsLive ? primary : null;\n const leftAction = actionsLive ? destructive : null;\n const open = openLabel(item);\n // An action with no route already opens the target: no second Open button.\n const showOpen = open !== null && !allowedActions.some((a) => a.request === null && canAct);\n\n const { dx, handlers } = useSwipe({ right: !reduced && rightAction !== null, left: !reduced }, (dir) => {\n if (dir === 'right' && rightAction) onAction(item, rightAction);\n else if (dir === 'left') {\n if (leftAction) onAction(item, leftAction);\n else onHide(item);\n }\n });\n\n const hint = dx > 0 && rightAction ? { side: 'right', text: rightAction.label } : dx < 0 ? (leftAction ? { side: 'left', text: leftAction.label } : { side: 'hide', text: 'Hide' }) : null;\n const expires = item.expiresAt ? `${item.kind === 'veto-window' ? 'Applies' : 'Expires'} ${until(item.expiresAt)}` : null;\n\n return (\n <li className={styles.swipe}>\n {hint ? (\n <div className={styles.hint} data-side={hint.side} aria-hidden=\"true\">\n {hint.text}\n </div>\n ) : null}\n <article\n className={cx(ui.card, styles.card)}\n aria-labelledby={titleId}\n data-dragging={dx !== 0 ? '' : undefined}\n style={dx !== 0 ? { transform: `translateX(${dx}px)` } : undefined}\n {...handlers}\n >\n <div className={styles.head}>\n <Badge tone={SEVERITY_TONE[item.severity]}>{KIND_NAME[item.kind]}</Badge>\n <span className={styles.age} title={row.ageStamp}>{row.age}</span>\n </div>\n <h2 id={titleId} className={styles.title} title={row.fullTitle}>{row.title}</h2>\n {row.kindLabel || row.repo || row.run || expires ? (\n <p className={styles.meta}>\n {row.kindLabel ? <span>{row.kindLabel}</span> : null}\n {row.repo ? <span title={row.repoFull}>{row.repo}</span> : null}\n {row.run ? <span aria-label={row.run.statsSpoken}>{row.run.stats}</span> : null}\n {row.run ? <span title={row.run.sourceHint ?? undefined}>{row.run.source}</span> : null}\n {expires ? <span className={styles.expires}>{expires}</span> : null}\n </p>\n ) : null}\n {row.detail ? <p className={styles.detail}>{row.detail}</p> : null}\n {macOnly ? <p className={styles.consequence}>This action is available on your Mac.</p> : null}\n {primary ? <p className={styles.consequence}>{consequenceLine(item, primary)}</p> : null}\n <div className={ui.buttonRow}>\n {canAct\n ? allowedActions.map((action, i) => {\n const isPrimary = action === primary;\n const isNo = action.kind === 'veto' || action.kind === 'reject';\n return (\n <Button\n key={`${action.kind}-${i}`}\n variant={isPrimary ? 'primary' : isNo ? 'destructiveTinted' : 'secondary'}\n disabled={offline}\n aria-label={`${action.label}: ${row.title}`}\n onClick={() => onAction(item, action)}\n >\n {action.label}\n </Button>\n );\n })\n : null}\n {showOpen ? (\n <Button variant=\"secondary\" aria-label={`${open}: ${row.title}`} onClick={() => onOpen(item)}>\n {open}\n </Button>\n ) : null}\n <Button variant=\"plain\" aria-label={`Hide on this phone: ${row.title}`} onClick={() => onHide(item)}>\n Hide\n </Button>\n </div>\n </article>\n </li>\n );\n}\n\n// ---------------------------------------------------------------------------\n// The screen\n// ---------------------------------------------------------------------------\n\nexport function NeedsYouScreen() {\n const { activity, permissions, reachability, navigate, refreshActivity } = useMobile();\n const resolved = useResolvedIds();\n const hiddenIds = useHiddenIds();\n const reduced = usePrefersReducedMotion();\n const [split, setSplit] = useState<NeedsYouSplit>('all');\n const [undo, setUndo] = useState<{ id: string; title: string } | null>(null);\n const [answering, setAnswering] = useState<NeedsYouItem | null>(null);\n const [drafts, setDrafts] = useState<Readonly<Record<string, string>>>({});\n const [interim, setInterim] = useState('');\n const answerId = useId();\n\n const canAct = canShowActions(permissions);\n const offline = reachability === 'offline' || reachability === 'unreachable';\n const data = activity.data;\n const all = data?.needsYou ?? [];\n const waiting = all.filter((item) => !resolved.has(item.id) && !hiddenIds.has(item.id));\n const counts = splitCounts(waiting);\n const shown = itemsForSplit(waiting, split);\n const hiddenHere = itemsForSplit(all.filter((item) => hiddenIds.has(item.id) && !resolved.has(item.id)), split);\n const coverage = splitCoverage(data?.sources ?? null, split);\n\n // The undo offer lasts a few seconds; hiding itself lasts the session.\n useEffect(() => {\n if (!undo) return;\n const t = setTimeout(() => setUndo(null), UNDO_MS);\n return () => clearTimeout(t);\n }, [undo]);\n\n const openTarget = useCallback(\n (item: NeedsYouItem) => {\n const target = item.target;\n if (target.kind === 'session') {\n navigate({ screen: 'agent', id: target.sessionId, pane: 'transcript' });\n return;\n }\n if (target.kind === 'url') {\n if (isHttps(target.url)) window.open(target.url, '_blank', 'noopener');\n else showMobileToast('That link is not https, so it was not opened.', 'danger');\n return;\n }\n showMobileToast('Open this on your Mac — the phone has no screen for it yet.', 'neutral');\n },\n [navigate],\n );\n\n const onAction = useCallback(\n (item: NeedsYouItem, action: NeedsYouAction) => {\n if (macOnlyRemoteAction(item, action)) {\n showMobileToast('This action is available on your Mac.', 'neutral');\n return;\n }\n // A Leader question's Answer has no route of its own: the phone collects the words here.\n if (item.kind === 'leader-question' && action.request === null && questionIdOfNeedsYouItem(item.id)) {\n setInterim('');\n setAnswering(item);\n return;\n }\n runNeedsYouAction(item, action, { openTarget, toast: showMobileToast });\n },\n [openTarget],\n );\n\n const onHide = useCallback((item: NeedsYouItem) => {\n hideOnThisPhone(item.id);\n setUndo({ id: item.id, title: needsYouRowView(item).title });\n }, []);\n\n const sendAnswer = () => {\n const item = answering;\n const questionId = item ? questionIdOfNeedsYouItem(item.id) : null;\n const text = item ? (drafts[item.id] ?? '').trim() : '';\n if (!item || !questionId || !text) return;\n // Close first so the token sheet (if the hold lapsed) has the stage; a\n // failure reopens this sheet with the words still in it.\n setAnswering(null);\n runMobileAction({\n title: 'Answer the Leader',\n consequences: 'Sends your answer to the Leader.',\n confirmLabel: 'Send answer',\n confirm: false,\n run: async () => {\n try {\n await answerLeaderQuestion(questionId, text);\n } catch (err) {\n setAnswering(item);\n throw err;\n }\n },\n success: 'Answer sent to the Leader',\n onDone: () => {\n setDrafts((d) => {\n const next = { ...d };\n delete next[item.id];\n return next;\n });\n markResolved(item.id);\n void refreshActivity();\n },\n });\n };\n\n const draft = answering ? (drafts[answering.id] ?? '') : '';\n const setDraft = (value: string) => {\n if (answering) setDrafts((d) => ({ ...d, [answering.id]: value }));\n };\n\n let body;\n if (!data) {\n if (activity.status === 'idle' || activity.status === 'loading') {\n body = <SkeletonList rows={3} label=\"Loading what needs you\" />;\n } else if (activity.status === 'unavailable' && !activity.error) {\n body = <ErrorState title=\"Needs you isn’t available\" reason=\"Verse on your Mac does not serve Needs you in this build. Update Ashlr on the Mac.\" onRetry={() => void refreshActivity()} />;\n } else {\n body = <ErrorState title=\"Couldn’t load Needs you\" reason={activity.error ?? 'Your Mac did not answer.'} onRetry={() => void refreshActivity()} />;\n }\n } else if (shown.length === 0) {\n if (hiddenHere.length > 0) {\n body = (\n <EmptyState\n title=\"Nothing else waiting\"\n body={`${hiddenHere.length} hidden on this phone for now. ${hiddenHere.length === 1 ? 'It is' : 'They are'} still waiting on your Mac.`}\n action={<Button variant=\"tinted\" onClick={() => unhideOnThisPhone(hiddenHere.map((i) => i.id))}>Show hidden</Button>}\n />\n );\n } else if (coverage.vouched) {\n body = (\n <EmptyState\n title=\"All clear\"\n body={\n split === 'all'\n ? 'Nothing is waiting on you. Approvals, fleet holds, Leader questions, failed chats and seat sign-ins appear here.'\n : `Nothing waiting in ${SPLIT_LABEL[split]}.`\n }\n />\n );\n } else {\n body = <EmptyState title=\"Nothing from what answered\" body={`${describeSilence(coverage)}, so this can’t say all clear.`} />;\n }\n } else {\n body = (\n <ul className={styles.list} aria-label={`${SPLIT_LABEL[split]} waiting on you`}>\n {shown.map((item) => (\n <NeedsCard key={item.id} item={item} canAct={canAct} offline={offline} reduced={reduced} onAction={onAction} onOpen={openTarget} onHide={onHide} />\n ))}\n </ul>\n );\n }\n\n const answerText = interim ? `${draft}${draft && !draft.endsWith(' ') ? ' ' : ''}${interim}` : draft;\n\n return (\n <Screen\n title=\"Needs you\"\n large\n onRefresh={refreshActivity}\n label=\"Waiting on you\"\n footer={\n undo ? (\n <div className={styles.undo} role=\"status\">\n <span>Hidden on this phone. It stays on your Mac.</span>\n <Button\n variant=\"plain\"\n onClick={() => {\n unhideOnThisPhone([undo.id]);\n setUndo(null);\n }}\n aria-label={`Undo hide: ${undo.title}`}\n >\n Undo\n </Button>\n </div>\n ) : undefined\n }\n >\n {reachability === 'offline' ? (\n <Banner>This phone is offline. Showing what was waiting ({sinceText(activity.updatedAt).toLowerCase()}); actions are off until it reconnects.</Banner>\n ) : reachability === 'unreachable' && data ? (\n <Banner>Can’t reach your Mac. Showing what was waiting ({sinceText(activity.updatedAt).toLowerCase()}); actions are off until it answers.</Banner>\n ) : null}\n {!canAct && permissions.actReason ? <Banner tone=\"info\">{permissions.actReason}</Banner> : null}\n\n {data ? (\n <div className={cx(ui.chips, styles.splits)} role=\"group\" aria-label=\"Filter\">\n {SPLITS.map((s) => (\n <button key={s} type=\"button\" className={ui.chip} aria-pressed={split === s} onClick={() => setSplit(s)}>\n {SPLIT_LABEL[s]} {counts[s]}\n </button>\n ))}\n </div>\n ) : null}\n\n {body}\n\n {data && shown.length > 0 && !coverage.vouched ? <p className={styles.note}>Not everything answered: {describeSilence(coverage)}.</p> : null}\n {data && shown.length > 0 && hiddenHere.length > 0 ? (\n <p className={styles.note}>\n {hiddenHere.length} hidden on this phone.{' '}\n <button type=\"button\" className={cx(ui.btn, ui.plain)} onClick={() => unhideOnThisPhone(hiddenHere.map((i) => i.id))}>Show</button>\n </p>\n ) : null}\n\n <BottomSheet\n open={answering !== null}\n onClose={() => setAnswering(null)}\n title=\"Answer the Leader\"\n footer={(\n <>\n <Button variant=\"primary\" block disabled={draft.trim().length === 0 || offline} onClick={sendAnswer}>Send answer</Button>\n <Button variant=\"plain\" block onClick={() => setAnswering(null)}>Cancel</Button>\n </>\n )}\n >\n {answering ? <p className={ui.consequence}>{needsYouQuestionText(answering)}</p> : null}\n <div className={ui.field}>\n <label className={ui.label} htmlFor={answerId}>Your answer</label>\n <textarea\n id={answerId}\n className={ui.textarea}\n value={answerText}\n onChange={(e) => {\n setInterim('');\n setDraft(e.target.value);\n }}\n />\n </div>\n <MicButton onInterim={setInterim} onFinal={(phrase) => setDraft(`${draft}${draft && !draft.endsWith(' ') ? ' ' : ''}${phrase}`)} />\n <p className={ui.faint}>\n {offline ? 'Your Mac isn’t answering, so this can’t be sent yet. The words stay here.' : 'Goes to the same Leader thread as Mind and Telegram.'}\n </p>\n </BottomSheet>\n </Screen>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{W as r,l as i,o as a,u as o}from"./global-BWc2NPzv.js";import{I as s,V as ee,a as c,m as l}from"./VerseShared-_pMXKs8m.js";import{n as u}from"./verse-bootstrap-query-BR5ypA8b.js";import{a as te,f as ne,i as re,o as d,p as ie,r as f}from"./VerseMobileApp-BTGF5yuZ.js";import{T as p,a as m,d as h}from"./verse-model-CkF3q2IH.js";import{n as g,r as _}from"./seat-readiness-CvEmMBol.js";import{c as v,i as ae,n as oe,r as y,s as b,t as se}from"./ui-parts-2JLq2ZSq.js";import{n as x}from"./mobile-toast-C_UP13GQ.js";import{t as ce}from"./MicButton-92I_NsaT.js";import{t as le}from"./mobile-actions-CvGouAAH.js";var S=n(t(),1);function C(e){let t=new Map;for(let n of e){let e=Date.parse(n.updatedAt);Number.isFinite(e)&&e>(t.get(n.projectPath)??-1/0)&&t.set(n.projectPath,e)}return t}function ue(e,t,n=``){let r=C(t),i=n.trim().toLowerCase();return(i?e.filter(e=>e.name.toLowerCase().includes(i)||e.path.toLowerCase().includes(i)):[...e]).sort((e,t)=>{if(e.enrolled!==t.enrolled)return e.enrolled?-1:1;let n=r.get(e.path)??-1/0,i=r.get(t.path)??-1/0;return n===i?e.name.localeCompare(t.name):i-n})}function de(e,t){let n=C(t),r=null;for(let t of e){let e=n.get(t.path);e!==void 0&&(r===null||e>r.at)&&(r={path:t.path,at:e})}return r?.path??ue(e,t)[0]?.path??null}function fe(e){return h(e).flatMap(e=>e.seats)}function w(e,t,n=Date.now()){let r=p(e);if(r!==null)return r;let i=_(e,null,n);if(i!==null){let r=i.reason.replace(`${e.label} is `,``).replace(/ to use this seat\.$/,``).replace(/\.$/,``),a=g(e.id,t,null,n)[0],o=a===void 0?null:t.find(e=>e.id===a)?.label??null;return o===null?r:`${r} · try ${o}`}return m(e)===null?`no model this seat can run`:null}function pe(e,t=Date.now()){return fe(e).find(n=>w(n,e,t)===null)?.id??null}function me(e){return e.unavailableReason?`${e.label} — ${e.unavailableReason}`:e.label}function he({seats:e,seatIds:t,primaryModel:n,now:r=Date.now()}){let i=[];return t.forEach((t,a)=>{let o=e.find(e=>e.id===t);if(!o||w(o,e,r)!==null)return;let s=(a===0&&n?o.models.find(e=>e.id===n&&!e.unavailableReason):void 0)??m(o);s&&(i.some(e=>e.seatId===o.id)||i.push({seatId:o.id,seatLabel:o.label,model:s.id}))}),i}function ge(e){return e.projectPath?e.plan.length===0?`Choose a seat that can run.`:e.prompt.trim()?null:`Say what the agent should do.`:`Choose a repo.`}function T(e){return e.length<=1?e[0]??``:`${e.slice(0,-1).join(`, `)} and ${e[e.length-1]}`}function _e(e,t){return`Starts ${e.length} agents on ${T(e.map(e=>e.seatLabel))} in ${t}; each spends from its own seat.`}function ve(e){let t=e.filter(e=>e.error!==null),n=e.length-t.length,r=t.map(e=>`${e.target.seatLabel}: ${e.error}`).join(` `);return`Started ${n} of ${e.length} agents. ${r}`.trim()}var E={choice:`_choice_1cwf7_3`,check:`_check_1cwf7_8`,switchRow:`_switchRow_1cwf7_26`,switchTrack:`_switchTrack_1cwf7_31`,switchThumb:`_switchThumb_1cwf7_46`,reasons:`_reasons_1cwf7_61`,prompt:`_prompt_1cwf7_70`,startBar:`_startBar_1cwf7_76`,hint:`_hint_1cwf7_82`},D=e(),O=6;function k(e,t){return t.find(t=>t.path===e)?.name??e.split(/[\\/]/).filter(Boolean).at(-1)??e}async function ye(e,t,n){let r=null;try{let i=await c({projectPath:e,seatId:t.seatId,model:t.model});return r=i.id,await l(i.id,n),{target:t,sessionId:r,error:null}}catch(e){return{target:t,sessionId:r,error:s(e)}}}function A(){let{permissions:e,reachability:t,navigate:n}=ie(),s=ee(),c=s.request!==null,l=s.phase===`running`,p=i(u),m=o(u),h=p.data,g=(0,S.useMemo)(()=>h?.projects??[],[h]),_=(0,S.useMemo)(()=>h?.sessions??[],[h]),C=(0,S.useMemo)(()=>fe(h?.seats??[]),[h]),[T,O]=(0,S.useState)(null),[A,be]=(0,S.useState)(``),[j,xe]=(0,S.useState)(!1),[M,Se]=(0,S.useState)(!1),[Ce,N]=(0,S.useState)(null),[we,P]=(0,S.useState)(null),[F,I]=(0,S.useState)(``),[L,R]=(0,S.useState)(``),z=(0,S.useId)(),B=(0,S.useId)(),V=(0,S.useId)(),H=T??de(g,_),U=pe(C),W=Ce??(U?[U]:[]),G=C.find(e=>e.id===W[0]),K=he({seats:C,seatIds:W,primaryModel:we}),q=ge({projectPath:H,plan:K,prompt:F}),J=ne(e),Y=t===`offline`||t===`unreachable`,X=ue(g,_,A),Te=j||A.trim()?X:X.slice(0,6),Z=C.map(e=>({seat:e,reason:w(e,C)})).filter(e=>e.reason!==null),Ee=C.length-Z.length,De=L?`${F}${F&&!F.endsWith(` `)?` `:``}${L}`:F,Oe=e=>{if(!M){N([e]),e!==W[0]&&P(null);return}let t=W.includes(e)?W.filter(t=>t!==e):[...W,e];t[0]!==W[0]&&P(null),N(t)},ke=e=>{Se(e),!e&&W.length>1&&N(W.slice(0,1))},Ae=()=>{if(q||!H||c)return;let e=F.trim(),t=K,r=k(H,g),i=t.length>1,a=[];le({title:i?`Start ${t.length} agents?`:`Start agent`,consequences:_e(t,r),confirmLabel:i?`Start ${t.length} agents`:`Start agent`,confirm:i,run:async()=>{a=await Promise.all(t.map(t=>ye(H,t,e)));let n=a.filter(e=>e.error!==null);if(n.length===a.length&&a.every(e=>e.sessionId===null))throw Error(n.length===1?n[0].error:`No agent started. ${n.map(e=>`${e.target.seatLabel}: ${e.error}`).join(` `)}`)},onDone:()=>{let e=a.filter(e=>e.error!==null);if(a.length===1){let e=a[0];e.error&&x(`The chat opened but the prompt did not send: ${e.error}`,`danger`),e.sessionId&&n({screen:`agent`,id:e.sessionId,pane:`transcript`});return}if(e.length===0){x(`Started ${a.length} agents`,`success`),n({screen:`agents`});return}x(ve(a),`danger`),N(e.map(e=>e.target.seatId))}})},je=()=>r(u.key,()=>u.fetch(),!0),Q;Q=!h&&(p.status===`loading`||p.status===`idle`)?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(b,{title:`Repo`,flat:!0,children:(0,D.jsx)(te,{rows:3,label:`Loading repos`})}),(0,D.jsx)(b,{title:`Seat`,flat:!0,children:(0,D.jsx)(te,{rows:2,label:`Loading seats`})})]}):h?g.length===0?(0,D.jsx)(y,{title:`No repos yet`,body:(0,D.jsxs)(D.Fragment,{children:[`Enroll a repo on your Mac with `,(0,D.jsx)(`code`,{className:v.mono,children:`ashlr verse`}),` (or open one there once) and it shows here.`]})}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(b,{title:`Repo`,flat:!0,children:(0,D.jsxs)(`div`,{className:v.stack,children:[(0,D.jsxs)(`div`,{className:v.field,children:[(0,D.jsx)(`label`,{className:v.label,htmlFor:z,children:`Find a repo`}),(0,D.jsx)(`input`,{id:z,className:v.input,type:`search`,placeholder:`${g.length} repos`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,value:A,onChange:e=>be(e.target.value)})]}),(0,D.jsx)(`div`,{className:v.group,role:`radiogroup`,"aria-label":`Repo`,children:Te.length===0?(0,D.jsx)(`div`,{className:v.row,children:(0,D.jsxs)(`span`,{className:v.muted,children:[`No repo matches “`,A.trim(),`”.`]})}):Te.map(e=>{let t=e.path===H;return(0,D.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":t,className:d(v.row,E.choice),onClick:()=>O(e.path),children:[(0,D.jsxs)(`span`,{className:v.rowBody,children:[(0,D.jsx)(`span`,{className:v.rowTitle,children:e.name}),(0,D.jsx)(`span`,{className:d(v.rowSub,v.mono),children:e.path})]}),(0,D.jsxs)(`span`,{className:v.rowTrail,children:[e.enrolled?(0,D.jsx)(se,{tone:`info`,children:`Enrolled`}):null,(0,D.jsx)(`span`,{className:E.check,"data-on":t?``:void 0,"aria-hidden":`true`})]})]},e.path)})}),!j&&!A.trim()&&X.length>6?(0,D.jsxs)(f,{variant:`plain`,onClick:()=>xe(!0),children:[`Show all `,X.length,` repos`]}):null]})}),(0,D.jsx)(b,{title:M?`Seats`:`Seat`,flat:!0,footer:Ee===0?void 0:M?`The same prompt starts on each selected seat. The first one uses the model below; the rest use their default.`:void 0,children:(0,D.jsxs)(`div`,{className:v.stack,children:[(0,D.jsxs)(`button`,{type:`button`,role:`switch`,"aria-checked":M,className:d(v.row,v.card,E.switchRow),onClick:()=>ke(!M),children:[(0,D.jsxs)(`span`,{className:v.rowBody,children:[(0,D.jsx)(`span`,{className:v.rowTitle,children:`Spawn on several seats`}),(0,D.jsx)(`span`,{className:v.rowSub,children:`Start the same prompt on more than one seat at once.`})]}),(0,D.jsx)(`span`,{className:E.switchTrack,"data-on":M?``:void 0,"aria-hidden":`true`,children:(0,D.jsx)(`span`,{className:E.switchThumb})})]}),C.length===0||Ee===0?(0,D.jsx)(y,{title:`No seat can run right now`,body:Z.length>0?`Every seat is signed out, out of usage or unavailable — see why below.`:`Your Mac reported no seats. Connect Claude Code, Codex, Grok or a local model there.`}):(0,D.jsx)(`div`,{className:v.chips,role:`group`,"aria-label":M?`Seats`:`Seat`,children:C.map(e=>{let t=w(e,C)!==null;return(0,D.jsx)(`button`,{type:`button`,className:v.chip,"aria-pressed":W.includes(e.id),disabled:t,onClick:()=>Oe(e.id),children:e.label},e.id)})}),Z.length>0?(0,D.jsx)(`ul`,{className:E.reasons,"aria-label":`Seats that can’t run`,children:Z.map(({seat:e,reason:t})=>(0,D.jsxs)(`li`,{children:[(0,D.jsx)(`strong`,{children:e.label}),`: `,t]},e.id))}):null,G&&w(G,C)===null?(0,D.jsxs)(`div`,{className:v.field,children:[(0,D.jsx)(`label`,{className:v.label,htmlFor:B,children:M&&K.length>1?`Model on ${G.label}`:`Model`}),(0,D.jsx)(`select`,{id:B,className:v.select,value:K.find(e=>e.seatId===G.id)?.model??``,onChange:e=>P(e.target.value),children:G.models.map(e=>(0,D.jsx)(`option`,{value:e.id,disabled:!!e.unavailableReason,children:me(e)},e.id))})]}):null]})})]}):(0,D.jsx)(ae,{title:`Couldn’t load your repos and seats`,reason:a(p.error),onRetry:m});let Me=!!h&&g.length>0,Ne=K.length>1?`Start ${K.length} agents`:`Start agent`,$=J?Y?`Your Mac isn’t answering, so nothing can start. It will as soon as it does.`:q??(K.length>1?`Starts ${K.length} agents in ${k(H??``,g)}.`:null):e.actReason??`This device can’t start agents.`;return(0,D.jsxs)(re,{title:`New agent`,onBack:()=>n({screen:`agents`}),backLabel:`Agents`,onRefresh:je,label:`New agent`,children:[Q,Me?(0,D.jsx)(b,{title:`Prompt`,flat:!0,children:(0,D.jsxs)(`div`,{className:v.stack,children:[(0,D.jsx)(`label`,{htmlFor:V,className:`visually-hidden`,children:`What should the agent do?`}),(0,D.jsx)(`textarea`,{id:V,className:d(v.textarea,E.prompt),placeholder:`What should the agent do?`,value:De,onChange:e=>{R(``),I(e.target.value),e.target.style.height=`auto`,e.target.style.height=`${e.target.scrollHeight}px`}}),(0,D.jsx)(ce,{size:`large`,disabled:c,onInterim:R,onFinal:e=>I(t=>`${t}${t&&!t.endsWith(` `)?` `:``}${e}`)})]})}):null,Me?(0,D.jsxs)(`div`,{className:E.startBar,children:[Y&&J?(0,D.jsx)(oe,{tone:`warning`,children:`Offline — starting waits until your Mac answers.`}):null,J?(0,D.jsx)(f,{variant:`primary`,block:!0,disabled:!!q||Y||c,onClick:Ae,"aria-busy":c||void 0,children:l?`Starting…`:Ne}):null,$?(0,D.jsx)(`p`,{className:d(v.faint,E.hint),role:J?void 0:`note`,children:$}):null]}):null]})}export{A as NewAgentScreen,O as REPO_ROWS};
2
- //# sourceMappingURL=NewAgentScreen-BLtU1u-d.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NewAgentScreen-BLtU1u-d.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mobile/screens/new-agent-model.ts","../../../../../../src/web-ui/routes/verse/mobile/screens/NewAgentScreen.module.css","../../../../../../src/web-ui/routes/verse/mobile/screens/NewAgentScreen.tsx"],"sourcesContent":["/**\n * routes/verse/mobile/screens/new-agent-model.ts — the pure decisions behind\n * the phone's New agent screen: which repos lead the list, which seats can\n * take a turn (and why not), what each selected seat will run, and whether\n * Start may be pressed. No React, no fetch.\n *\n * Seat rules are the workbench's own (routes/verse/SeatSelector.tsx\n * `defaultSeatChoice` / `seatBlockedNote`), rebuilt here from the SAME pure\n * helpers — core/verse/seat-readiness.ts and verse-model.ts — because\n * importing SeatSelector.tsx would drag the desktop composer's stylesheet and\n * context model into this screen's chunk. A seat the engine would refuse is\n * never a default and cannot be chosen; its row says why and where to go.\n *\n * Remembering the last seat per repo (verse-ui-store `lastVerseSeat`) is\n * deliberately NOT used: that store lives in localStorage and pulls the\n * workbench shell, and the phone keeps nothing on the device. The last-used\n * repo is derived from the sessions the Mac already lists instead.\n */\nimport { rankSeatAlternatives, seatBlock } from '../../../../../core/verse/seat-readiness.js';\nimport type { VerseModelOption, VerseProject, VerseSeat, VerseSession } from '../../../../data/api-types.js';\nimport { firstRunnableModel, groupSeats, seatUnavailableReason } from '../../verse-model.js';\n\n// ---------------------------------------------------------------------------\n// Repos\n// ---------------------------------------------------------------------------\n\n/** Newest session activity per project path (ms since epoch). */\nfunction lastUsedByPath(sessions: readonly VerseSession[]): Map<string, number> {\n const out = new Map<string, number>();\n for (const s of sessions) {\n const t = Date.parse(s.updatedAt);\n if (!Number.isFinite(t)) continue;\n if (t > (out.get(s.projectPath) ?? -Infinity)) out.set(s.projectPath, t);\n }\n return out;\n}\n\n/**\n * The repo list as the picker shows it: filtered by `query` (name or path,\n * case-insensitive), enrolled repos first, then the most recently used, then\n * by name.\n */\nexport function orderProjects(projects: readonly VerseProject[], sessions: readonly VerseSession[], query = ''): VerseProject[] {\n const used = lastUsedByPath(sessions);\n const q = query.trim().toLowerCase();\n const matches = q ? projects.filter((p) => p.name.toLowerCase().includes(q) || p.path.toLowerCase().includes(q)) : [...projects];\n return matches.sort((a, b) => {\n if (a.enrolled !== b.enrolled) return a.enrolled ? -1 : 1;\n const ua = used.get(a.path) ?? -Infinity;\n const ub = used.get(b.path) ?? -Infinity;\n if (ua !== ub) return ub - ua;\n return a.name.localeCompare(b.name);\n });\n}\n\n/** The repo to preselect: the one used most recently, else the first in list order; null when there is none. */\nexport function defaultProjectPath(projects: readonly VerseProject[], sessions: readonly VerseSession[]): string | null {\n const used = lastUsedByPath(sessions);\n let best: { path: string; at: number } | null = null;\n for (const p of projects) {\n const at = used.get(p.path);\n if (at !== undefined && (best === null || at > best.at)) best = { path: p.path, at };\n }\n return best?.path ?? orderProjects(projects, sessions)[0]?.path ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// Seats\n// ---------------------------------------------------------------------------\n\n/** Seats in the workbench's current engine order: Claude, Codex, Devin, Grok, local. */\nexport function orderSeats(seats: readonly VerseSeat[]): VerseSeat[] {\n return groupSeats(seats).flatMap((g) => g.seats);\n}\n\n/**\n * Why `seat` cannot take a turn right now, as a short phrase (\"out of usage —\n * resets Fri 2:25 PM · try Grok\"), or null when it can. The same three\n * refusals the workbench picker makes: the seat's health says unavailable,\n * the engine would refuse it (signed out / out of usage), or none of its\n * models can run on its pinned CLI.\n */\nexport function seatBlockedReason(seat: VerseSeat, seats: readonly VerseSeat[], now: number = Date.now()): string | null {\n const unavailable = seatUnavailableReason(seat);\n if (unavailable !== null) return unavailable;\n const block = seatBlock(seat, null, now);\n if (block !== null) {\n const phrase = block.reason\n .replace(`${seat.label} is `, '')\n .replace(/ to use this seat\\.$/, '')\n .replace(/\\.$/, '');\n const best = rankSeatAlternatives(seat.id, seats, null, now)[0];\n const bestLabel = best === undefined ? null : seats.find((s) => s.id === best)?.label ?? null;\n return bestLabel === null ? phrase : `${phrase} · try ${bestLabel}`;\n }\n if (firstRunnableModel(seat) === null) return 'no model this seat can run';\n return null;\n}\n\n/** The first seat (in engine order) that can take a turn; null when none can. */\nexport function defaultSeatId(seats: readonly VerseSeat[], now: number = Date.now()): string | null {\n return orderSeats(seats).find((s) => seatBlockedReason(s, seats, now) === null)?.id ?? null;\n}\n\n/** The option's text in the model select: its label, and why it cannot run when it cannot. */\nexport function modelOptionText(model: VerseModelOption): string {\n return model.unavailableReason ? `${model.label} — ${model.unavailableReason}` : model.label;\n}\n\n// ---------------------------------------------------------------------------\n// The plan Start carries out\n// ---------------------------------------------------------------------------\n\nexport interface SpawnTarget {\n seatId: string;\n seatLabel: string;\n /** The model id to create the session with. */\n model: string;\n}\n\nexport interface SpawnInput {\n seats: readonly VerseSeat[];\n /** Selected seats in the order they were chosen; the first is the primary. */\n seatIds: readonly string[];\n /** The model chosen for the primary seat; null = its default runnable model. */\n primaryModel: string | null;\n now?: number;\n}\n\n/**\n * One target per selected seat that can run: the primary seat with the model\n * the operator chose (when that model can run), every other seat with its own\n * first runnable model. Blocked or unknown seats are dropped — they cannot be\n * selected, and a stale selection must not reach the server.\n */\nexport function spawnPlan({ seats, seatIds, primaryModel, now = Date.now() }: SpawnInput): SpawnTarget[] {\n const out: SpawnTarget[] = [];\n seatIds.forEach((id, index) => {\n const seat = seats.find((s) => s.id === id);\n if (!seat || seatBlockedReason(seat, seats, now) !== null) return;\n const chosen = index === 0 && primaryModel ? seat.models.find((m) => m.id === primaryModel && !m.unavailableReason) : undefined;\n const model = chosen ?? firstRunnableModel(seat);\n if (!model) return;\n if (out.some((t) => t.seatId === seat.id)) return;\n out.push({ seatId: seat.id, seatLabel: seat.label, model: model.id });\n });\n return out;\n}\n\n/** Why Start cannot be pressed yet, in the order the operator fills the form; null = ready. */\nexport function startBlocker(input: { projectPath: string | null; plan: readonly SpawnTarget[]; prompt: string }): string | null {\n if (!input.projectPath) return 'Choose a repo.';\n if (input.plan.length === 0) return 'Choose a seat that can run.';\n if (!input.prompt.trim()) return 'Say what the agent should do.';\n return null;\n}\n\n/** \"Claude\", \"Claude and Codex\", \"Claude, Codex and Grok\". */\nexport function joinNames(names: readonly string[]): string {\n if (names.length <= 1) return names[0] ?? '';\n return `${names.slice(0, -1).join(', ')} and ${names[names.length - 1]}`;\n}\n\n/** The confirmation's body for a multi-seat start. */\nexport function spawnConsequences(plan: readonly SpawnTarget[], repoName: string): string {\n return `Starts ${plan.length} agents on ${joinNames(plan.map((t) => t.seatLabel))} in ${repoName}; each spends from its own seat.`;\n}\n\nexport interface SpawnResult {\n target: SpawnTarget;\n /** The chat that was created (even when its first turn did not send); null when creation failed. */\n sessionId: string | null;\n /** Why this seat did not start, in the server's words; null on success. */\n error: string | null;\n}\n\n/** The toast after a start where some seats failed: which, and why. */\nexport function partialFailureText(results: readonly SpawnResult[]): string {\n const failed = results.filter((r) => r.error !== null);\n const started = results.length - failed.length;\n const why = failed.map((r) => `${r.target.seatLabel}: ${r.error}`).join(' ');\n return `Started ${started} of ${results.length} agents. ${why}`.trim();\n}\n","/* routes/verse/mobile/screens/NewAgentScreen.module.css — the repo radio rows, the several-seats switch, the prompt and the Start bar. */\n\n.choice[aria-checked='true'] {\n background: var(--accent-50);\n}\n\n/* A drawn check (no glyph: UI text stays inside the Ashlr Sans subset). */\n.check {\n display: inline-block;\n width: 1.2em;\n height: 1.2em;\n flex: none;\n}\n\n.check[data-on]::after {\n content: '';\n display: block;\n width: 0.35em;\n height: 0.7em;\n margin: 0.1em auto 0;\n border: solid var(--accent-600);\n border-width: 0 0.15em 0.15em 0;\n transform: rotate(45deg);\n}\n\n.switchRow {\n padding: var(--space-3) var(--space-4);\n cursor: pointer;\n}\n\n.switchTrack {\n flex: none;\n position: relative;\n width: 3.1rem;\n height: 1.9rem;\n border-radius: var(--radius-full);\n background: var(--bg-active);\n border: 1px solid var(--border-default);\n}\n\n.switchTrack[data-on] {\n background: var(--accent-500);\n border-color: var(--accent-500);\n}\n\n.switchThumb {\n position: absolute;\n top: 0.15rem;\n left: 0.15rem;\n width: 1.5rem;\n height: 1.5rem;\n border-radius: 50%;\n background: var(--bg-surface-raised);\n box-shadow: var(--shadow-toast);\n}\n\n.switchTrack[data-on] .switchThumb {\n transform: translateX(1.2rem);\n}\n\n.reasons {\n margin: 0;\n padding: 0 0 0 var(--space-5);\n display: grid;\n gap: var(--space-1);\n color: var(--text-secondary);\n font-size: 0.85em;\n}\n\n.prompt {\n min-height: 8rem;\n max-height: 20rem;\n resize: none;\n}\n\n.startBar {\n display: grid;\n gap: var(--space-2);\n margin-bottom: var(--space-4);\n}\n\n.hint {\n margin: 0;\n text-align: center;\n}\n","/**\n * routes/verse/mobile/screens/NewAgentScreen.tsx — spin up an agent from the\n * phone: pick a repo, a seat (or several), say what to do, Start.\n *\n * Reads the bootstrap the shell already has (seats, projects, sessions) —\n * the same cache key the workbench's New chat uses, so both pickers list the\n * same seats with the same refusals. Writes are the workbench's own helpers\n * (verse-queries.ts createVerseSession + sendVerseTurn), inside ONE guarded\n * action: a single agent starts without a confirmation sheet (it is what the\n * button says, and the chat can be stopped at once); several agents confirm\n * first, because each spends from its own seat.\n *\n * Nothing typed is lost to a failure: a start where some seats fail keeps the\n * prompt, leaves only the failed seats selected (so Start again retries just\n * those) and says which failed and why.\n */\nimport { useId, useMemo, useState } from 'react';\nimport type { VerseSeat } from '../../../../data/api-types.js';\nimport { readFailureReason } from '../../../../data/client.js';\nimport { useQuery, useRefetch } from '../../../../data/hooks.js';\nimport { refetchQuery } from '../../../../data/cache.js';\nimport { describeActionError, useGuardState } from '../../shell/guard-store.js';\nimport { verseBootstrapQuery } from '../../verse-bootstrap-query.js';\nimport { createVerseSession, sendVerseTurn } from '../../verse-queries.js';\nimport { MicButton } from '../MicButton.js';\nimport { runMobileAction } from '../mobile-actions.js';\nimport { canShowActions, useMobile } from '../mobile-context.js';\nimport { showMobileToast } from '../mobile-toast.js';\nimport { Button, cx, Screen, SkeletonList } from '../ui.js';\nimport { Badge, Banner, EmptyState, ErrorState, Section, ui } from '../ui-parts.js';\nimport {\n defaultProjectPath,\n defaultSeatId,\n modelOptionText,\n orderProjects,\n orderSeats,\n partialFailureText,\n seatBlockedReason,\n spawnConsequences,\n spawnPlan,\n startBlocker,\n type SpawnResult,\n type SpawnTarget,\n} from './new-agent-model.js';\nimport styles from './NewAgentScreen.module.css';\n\n/** Rows shown before \"Show all\" — enough for the repos a person actually uses. */\nexport const REPO_ROWS = 6;\n\nfunction projectLabel(path: string, projects: readonly { path: string; name: string }[]): string {\n return projects.find((p) => p.path === path)?.name ?? path.split(/[\\\\/]/).filter(Boolean).at(-1) ?? path;\n}\n\nasync function startOne(projectPath: string, target: SpawnTarget, prompt: string): Promise<SpawnResult> {\n let sessionId: string | null = null;\n try {\n const session = await createVerseSession({ projectPath, seatId: target.seatId, model: target.model });\n sessionId = session.id;\n await sendVerseTurn(session.id, prompt);\n return { target, sessionId, error: null };\n } catch (err) {\n return { target, sessionId, error: describeActionError(err) };\n }\n}\n\nexport function NewAgentScreen() {\n const { permissions, reachability, navigate } = useMobile();\n // Busy while any guarded action is open (confirming, unlocking, running): a\n // cancel or a failure closes it, so the button can never stay stuck.\n const guard = useGuardState();\n const busy = guard.request !== null;\n const running = guard.phase === 'running';\n const bootstrap = useQuery(verseBootstrapQuery);\n const retry = useRefetch(verseBootstrapQuery);\n const data = bootstrap.data;\n const projects = useMemo(() => data?.projects ?? [], [data]);\n const sessions = useMemo(() => data?.sessions ?? [], [data]);\n const seats = useMemo(() => orderSeats(data?.seats ?? []), [data]);\n\n // null = \"not touched yet\": the default follows the data until the operator chooses.\n const [projectChoice, setProjectChoice] = useState<string | null>(null);\n const [query, setQuery] = useState('');\n const [showAllRepos, setShowAllRepos] = useState(false);\n const [multi, setMulti] = useState(false);\n const [seatChoice, setSeatChoice] = useState<string[] | null>(null);\n const [modelChoice, setModelChoice] = useState<string | null>(null);\n const [prompt, setPrompt] = useState('');\n const [interim, setInterim] = useState('');\n\n const repoFilterId = useId();\n const modelId = useId();\n const promptId = useId();\n\n const projectPath = projectChoice ?? defaultProjectPath(projects, sessions);\n const fallbackSeat = defaultSeatId(seats);\n const seatIds = seatChoice ?? (fallbackSeat ? [fallbackSeat] : []);\n const primary: VerseSeat | undefined = seats.find((s) => s.id === seatIds[0]);\n const plan = spawnPlan({ seats, seatIds, primaryModel: modelChoice });\n const blocker = startBlocker({ projectPath, plan, prompt });\n const canAct = canShowActions(permissions);\n const offline = reachability === 'offline' || reachability === 'unreachable';\n const ordered = orderProjects(projects, sessions, query);\n const visibleRepos = showAllRepos || query.trim() ? ordered : ordered.slice(0, REPO_ROWS);\n const blockedSeats = seats\n .map((seat) => ({ seat, reason: seatBlockedReason(seat, seats) }))\n .filter((s): s is { seat: VerseSeat; reason: string } => s.reason !== null);\n const runnable = seats.length - blockedSeats.length;\n const shown = interim ? `${prompt}${prompt && !prompt.endsWith(' ') ? ' ' : ''}${interim}` : prompt;\n\n const toggleSeat = (id: string) => {\n if (!multi) {\n setSeatChoice([id]);\n if (id !== seatIds[0]) setModelChoice(null);\n return;\n }\n const next = seatIds.includes(id) ? seatIds.filter((s) => s !== id) : [...seatIds, id];\n if (next[0] !== seatIds[0]) setModelChoice(null);\n setSeatChoice(next);\n };\n\n const setMultiMode = (on: boolean) => {\n setMulti(on);\n // Back to one seat: keep the primary only.\n if (!on && seatIds.length > 1) setSeatChoice(seatIds.slice(0, 1));\n };\n\n const start = () => {\n if (blocker || !projectPath || busy) return;\n const text = prompt.trim();\n const targets = plan;\n const repoName = projectLabel(projectPath, projects);\n const many = targets.length > 1;\n let results: SpawnResult[] = [];\n runMobileAction({\n title: many ? `Start ${targets.length} agents?` : 'Start agent',\n consequences: spawnConsequences(targets, repoName),\n confirmLabel: many ? `Start ${targets.length} agents` : 'Start agent',\n confirm: many,\n run: async () => {\n results = await Promise.all(targets.map((t) => startOne(projectPath, t, text)));\n const failed = results.filter((r) => r.error !== null);\n // Nothing started at all: a failure, so the sheet (or toast) says why and nothing moves.\n if (failed.length === results.length && results.every((r) => r.sessionId === null)) {\n throw new Error(failed.length === 1 ? failed[0]!.error! : `No agent started. ${failed.map((r) => `${r.target.seatLabel}: ${r.error}`).join(' ')}`);\n }\n },\n onDone: () => {\n const failed = results.filter((r) => r.error !== null);\n if (results.length === 1) {\n const only = results[0]!;\n // The chat exists; its first turn did not send. Open it so the prompt can be sent from there.\n if (only.error) showMobileToast(`The chat opened but the prompt did not send: ${only.error}`, 'danger');\n if (only.sessionId) navigate({ screen: 'agent', id: only.sessionId, pane: 'transcript' });\n return;\n }\n if (failed.length === 0) {\n showMobileToast(`Started ${results.length} agents`, 'success');\n navigate({ screen: 'agents' });\n return;\n }\n // Partial: keep the words and leave only the seats that did not start selected.\n showMobileToast(partialFailureText(results), 'danger');\n setSeatChoice(failed.map((r) => r.target.seatId));\n },\n });\n };\n\n const refresh = () => refetchQuery(verseBootstrapQuery.key, () => verseBootstrapQuery.fetch(), true);\n\n let body;\n if (!data && (bootstrap.status === 'loading' || bootstrap.status === 'idle')) {\n body = (\n <>\n <Section title=\"Repo\" flat><SkeletonList rows={3} label=\"Loading repos\" /></Section>\n <Section title=\"Seat\" flat><SkeletonList rows={2} label=\"Loading seats\" /></Section>\n </>\n );\n } else if (!data) {\n body = <ErrorState title=\"Couldn’t load your repos and seats\" reason={readFailureReason(bootstrap.error)} onRetry={retry} />;\n } else if (projects.length === 0) {\n body = (\n <EmptyState\n title=\"No repos yet\"\n body={<>Enroll a repo on your Mac with <code className={ui.mono}>ashlr verse</code> (or open one there once) and it shows here.</>}\n />\n );\n } else {\n body = (\n <>\n <Section title=\"Repo\" flat>\n <div className={ui.stack}>\n <div className={ui.field}>\n <label className={ui.label} htmlFor={repoFilterId}>Find a repo</label>\n <input\n id={repoFilterId}\n className={ui.input}\n type=\"search\"\n placeholder={`${projects.length} repos`}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n />\n </div>\n <div className={ui.group} role=\"radiogroup\" aria-label=\"Repo\">\n {visibleRepos.length === 0 ? (\n <div className={ui.row}><span className={ui.muted}>No repo matches “{query.trim()}”.</span></div>\n ) : (\n visibleRepos.map((p) => {\n const selected = p.path === projectPath;\n return (\n <button\n key={p.path}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n className={cx(ui.row, styles.choice)}\n onClick={() => setProjectChoice(p.path)}\n >\n <span className={ui.rowBody}>\n <span className={ui.rowTitle}>{p.name}</span>\n <span className={cx(ui.rowSub, ui.mono)}>{p.path}</span>\n </span>\n <span className={ui.rowTrail}>\n {p.enrolled ? <Badge tone=\"info\">Enrolled</Badge> : null}\n <span className={styles.check} data-on={selected ? '' : undefined} aria-hidden=\"true\" />\n </span>\n </button>\n );\n })\n )}\n </div>\n {!showAllRepos && !query.trim() && ordered.length > REPO_ROWS ? (\n <Button variant=\"plain\" onClick={() => setShowAllRepos(true)}>Show all {ordered.length} repos</Button>\n ) : null}\n </div>\n </Section>\n\n <Section\n title={multi ? 'Seats' : 'Seat'}\n flat\n footer={runnable === 0 ? undefined : multi ? 'The same prompt starts on each selected seat. The first one uses the model below; the rest use their default.' : undefined}\n >\n <div className={ui.stack}>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={multi}\n className={cx(ui.row, ui.card, styles.switchRow)}\n onClick={() => setMultiMode(!multi)}\n >\n <span className={ui.rowBody}>\n <span className={ui.rowTitle}>Spawn on several seats</span>\n <span className={ui.rowSub}>Start the same prompt on more than one seat at once.</span>\n </span>\n <span className={styles.switchTrack} data-on={multi ? '' : undefined} aria-hidden=\"true\"><span className={styles.switchThumb} /></span>\n </button>\n {seats.length === 0 || runnable === 0 ? (\n <EmptyState\n title=\"No seat can run right now\"\n body={blockedSeats.length > 0 ? 'Every seat is signed out, out of usage or unavailable — see why below.' : 'Your Mac reported no seats. Connect Claude Code, Codex, Grok or a local model there.'}\n />\n ) : (\n <div className={ui.chips} role=\"group\" aria-label={multi ? 'Seats' : 'Seat'}>\n {seats.map((seat) => {\n const blocked = seatBlockedReason(seat, seats) !== null;\n return (\n <button\n key={seat.id}\n type=\"button\"\n className={ui.chip}\n aria-pressed={seatIds.includes(seat.id)}\n disabled={blocked}\n onClick={() => toggleSeat(seat.id)}\n >\n {seat.label}\n </button>\n );\n })}\n </div>\n )}\n {blockedSeats.length > 0 ? (\n <ul className={styles.reasons} aria-label=\"Seats that can’t run\">\n {blockedSeats.map(({ seat, reason }) => (\n <li key={seat.id}><strong>{seat.label}</strong>: {reason}</li>\n ))}\n </ul>\n ) : null}\n {primary && seatBlockedReason(primary, seats) === null ? (\n <div className={ui.field}>\n <label className={ui.label} htmlFor={modelId}>{multi && plan.length > 1 ? `Model on ${primary.label}` : 'Model'}</label>\n <select\n id={modelId}\n className={ui.select}\n value={plan.find((t) => t.seatId === primary.id)?.model ?? ''}\n onChange={(e) => setModelChoice(e.target.value)}\n >\n {primary.models.map((m) => (\n <option key={m.id} value={m.id} disabled={Boolean(m.unavailableReason)}>{modelOptionText(m)}</option>\n ))}\n </select>\n </div>\n ) : null}\n </div>\n </Section>\n </>\n );\n }\n\n const ready = Boolean(data) && projects.length > 0;\n const startLabel = plan.length > 1 ? `Start ${plan.length} agents` : 'Start agent';\n const hint = !canAct\n ? permissions.actReason ?? 'This device can’t start agents.'\n : offline\n ? 'Your Mac isn’t answering, so nothing can start. It will as soon as it does.'\n : blocker ?? (plan.length > 1 ? `Starts ${plan.length} agents in ${projectLabel(projectPath ?? '', projects)}.` : null);\n\n return (\n <Screen title=\"New agent\" onBack={() => navigate({ screen: 'agents' })} backLabel=\"Agents\" onRefresh={refresh} label=\"New agent\">\n {body}\n {ready ? (\n <Section title=\"Prompt\" flat>\n <div className={ui.stack}>\n <label htmlFor={promptId} className=\"visually-hidden\">What should the agent do?</label>\n <textarea\n id={promptId}\n className={cx(ui.textarea, styles.prompt)}\n placeholder=\"What should the agent do?\"\n value={shown}\n onChange={(e) => {\n setInterim('');\n setPrompt(e.target.value);\n e.target.style.height = 'auto';\n e.target.style.height = `${e.target.scrollHeight}px`;\n }}\n />\n <MicButton\n size=\"large\"\n disabled={busy}\n onInterim={setInterim}\n onFinal={(phrase) => setPrompt((p) => `${p}${p && !p.endsWith(' ') ? ' ' : ''}${phrase}`)}\n />\n </div>\n </Section>\n ) : null}\n {ready ? (\n <div className={styles.startBar}>\n {offline && canAct ? <Banner tone=\"warning\">Offline — starting waits until your Mac answers.</Banner> : null}\n {canAct ? (\n <Button variant=\"primary\" block disabled={Boolean(blocker) || offline || busy} onClick={start} aria-busy={busy || undefined}>\n {running ? 'Starting…' : startLabel}\n </Button>\n ) : null}\n {hint ? <p className={cx(ui.faint, styles.hint)} role={!canAct ? 'note' : undefined}>{hint}</p> : null}\n </div>\n ) : null}\n </Screen>\n );\n}\n"],"mappings":"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"}