@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
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-_izD07R9.js";import{l as r}from"./global-CYfRwH6t.js";import{i,m as a}from"./VerseShared-CFE5B-IY.js";import{n as o}from"./verse-bootstrap-query-ANtL2OPN.js";import{a as s,f as c,i as l,o as u,p as d,r as f}from"./VerseMobileApp-CrCDQcw5.js";import{C as p,h as m}from"./verse-model-DAOz9LrY.js";import{n as h}from"./composer-queries-GxFt1UQm.js";import{t as g}from"./use-chat-activity-O8I0Ho0m.js";import{n as _,r as v}from"./useVerseSession-DeW1iFpw.js";import{t as y}from"./useVerseTranscript-CvUqjRmZ.js";import{d as b,i as x,l as S,n as C,r as w,t as T,u as E}from"./checkpoint-queries-6thqsAiE.js";import{c as D,i as O,n as k,r as A,t as j}from"./ui-parts-CcpmRBwj.js";import{t as ee}from"./MobileComposer-DbSZ2rxa.js";import{t as M}from"./mobile-actions-V26-lGbH.js";import{a as N,c as P,d as F,f as I,i as L,l as R,n as z,o as B,r as V,s as H,t as U,u as W}from"./agent-transcript-model-D-34Ll59.js";var G=e(n(),1),K={header:`_header_zklfu_13`,meta:`_meta_zklfu_24`,who:`_who_zklfu_34`,segmented:`_segmented_zklfu_38`,segment:`_segment_zklfu_38`,log:`_log_zklfu_66`,userRow:`_userRow_zklfu_73`,userBubble:`_userBubble_zklfu_79`,assistant:`_assistant_zklfu_89`,prose:`_prose_zklfu_95`,code:`_code_zklfu_101`,output:`_output_zklfu_102`,tool:`_tool_zklfu_120`,toolChip:`_toolChip_zklfu_126`,toolText:`_toolText_zklfu_153`,toolState:`_toolState_zklfu_161`,thinkingChip:`_thinkingChip_zklfu_167`,thinkingText:`_thinkingText_zklfu_172`,system:`_system_zklfu_182`,link:`_link_zklfu_197`,note:`_note_zklfu_204`,typing:`_typing_zklfu_210`,jumpWrap:`_jumpWrap_zklfu_219`,jump:`_jump_zklfu_219`,modeChip:`_modeChip_zklfu_232`,changes:`_changes_zklfu_238`,summary:`_summary_zklfu_243`,rootName:`_rootName_zklfu_250`,fileBlock:`_fileBlock_zklfu_260`,fileRow:`_fileRow_zklfu_269`,fileStatus:`_fileStatus_zklfu_274`,filePath:`_filePath_zklfu_290`,fileCounts:`_fileCounts_zklfu_298`,add:`_add_zklfu_305`,del:`_del_zklfu_309`,patch:`_patch_zklfu_313`,line:`_line_zklfu_324`},q=t(),J=`Stops the turn in progress. What it already changed stays on disk.`;function te(e){return/HTTP 404/.test(e)?{title:`Chat not found`,reason:`Your Mac has no chat with this id. It may have been deleted.`}:/HTTP \d+/.test(e)?{title:`Couldn’t open this chat`,reason:`Your Mac could not load this chat right now.`}:{title:`Couldn’t open this chat`,reason:e}}function Y({sessionId:e,pane:t}){let{permissions:n,reachability:_,navigate:y}=d(),[b,x]=(0,G.useState)(0),[S,C]=(0,G.useState)(0),w=v(e,b),T=r(o),[E,A]=(0,G.useState)(``),[N,P]=(0,G.useState)(`interject`),F=w.session,I=F?.status===`running`,L=c(n),R=_===`offline`||_===`unreachable`,z=T.data?.seats??[],B=F?.turnCount??null;(0,G.useEffect)(()=>{w.loaded&&B!==null&&g(e,B)},[e,w.loaded,B]);let V=(0,G.useCallback)(()=>y({screen:`agents`}),[y]),H=n=>{n!==t&&y({screen:`agent`,id:e,pane:n},{replace:!0})},U=()=>{M({title:`Stop this turn?`,consequences:J,confirmLabel:`Stop`,destructive:!0,run:()=>i(e),success:`Stopped`})},W=t=>{let n=I?N:`send`;M({title:n===`send`?`Send message`:n===`interject`?`Interject`:`Queue message`,consequences:n===`send`?`Sends this message to the agent, which starts a new turn.`:n===`interject`?`Stops the current turn and sends this next.`:`Sends this after the current turn finishes.`,confirmLabel:n===`send`?`Send`:n===`interject`?`Interject`:`Queue`,confirm:!1,run:()=>n===`send`?a(e,t):h(e,t,n===`interject`?{sendNow:!0}:{}),success:n===`queue`?`Queued for after this turn`:void 0,onDone:()=>A(e=>e.trim()===t?``:e)})},Y=()=>{t===`changes`?C(e=>e+1):x(e=>e+1)};if(w.loadError&&!F){let{title:e,reason:t}=te(w.loadError);return(0,q.jsxs)(l,{title:`Agent`,onBack:V,backLabel:`Agents`,children:[(0,q.jsx)(O,{title:e,reason:t,onRetry:()=>x(e=>e+1)}),(0,q.jsx)(f,{variant:`plain`,block:!0,onClick:V,children:`Back to Agents`})]})}if(!w.loaded||!F)return(0,q.jsx)(l,{title:`Agent`,onBack:V,backLabel:`Agents`,children:(0,q.jsx)(s,{rows:4,label:`Loading the conversation`})});let X=I?(0,q.jsx)(j,{tone:`running`,dot:!0,pulse:!0,children:`Working`}):F.status===`error`?(0,q.jsx)(j,{tone:`danger`,children:`Failed`}):(0,q.jsx)(j,{tone:`neutral`,children:`Idle`}),Z=[p(z,F),m(z,F)].filter(Boolean).join(` · `),Q=(0,q.jsxs)(`div`,{className:K.header,children:[(0,q.jsxs)(`div`,{className:K.meta,children:[(0,q.jsx)(`span`,{className:K.who,children:Z}),X]}),(0,q.jsxs)(`div`,{className:K.segmented,role:`group`,"aria-label":`View`,children:[(0,q.jsx)(`button`,{type:`button`,className:K.segment,"aria-pressed":t===`transcript`,onClick:()=>H(`transcript`),children:`Transcript`}),(0,q.jsx)(`button`,{type:`button`,className:K.segment,"aria-pressed":t===`changes`,onClick:()=>H(`changes`),children:`Changes`})]}),R?(0,q.jsx)(k,{tone:`warning`,children:_===`offline`?`You’re offline. Showing what was loaded; sending resumes when you reconnect.`:`Can’t reach your Mac. Showing what was loaded; sending resumes when it answers.`}):w.stream===`reconnecting`?(0,q.jsx)(k,{tone:`info`,children:`Reconnecting to the live stream…`}):null]}),$=R?`Sending is paused until your Mac is reachable.`:I?N===`interject`?`Interject stops the current turn and sends this next.`:`Queue sends this after the current turn finishes.`:n.act===`locked`?`Sending asks for the mutation token first.`:void 0,re=t===`transcript`?L?(0,q.jsx)(ee,{value:E,onChange:A,onSubmit:W,placeholder:I?`Tell it something now…`:`Message this agent…`,submitLabel:I?N===`interject`?`Interject`:`Queue`:`Send`,disabled:R,hint:$,label:`Message`,above:I?(0,q.jsxs)(`div`,{className:D.chips,role:`group`,"aria-label":`When to send`,children:[(0,q.jsx)(`button`,{type:`button`,className:u(D.chip,K.modeChip),"aria-pressed":N===`interject`,onClick:()=>P(`interject`),children:`Interject now`}),(0,q.jsx)(`button`,{type:`button`,className:u(D.chip,K.modeChip),"aria-pressed":N===`queue`,onClick:()=>P(`queue`),children:`Queue for after`})]}):void 0}):(0,q.jsx)(`div`,{className:D.composer,children:(0,q.jsx)(`p`,{className:D.composerHint,children:n.actReason??`This device can read this chat but not send to it.`})}):void 0,ie=I&&L?(0,q.jsx)(f,{variant:`destructiveTinted`,onClick:U,disabled:R,children:`Stop`}):null;return(0,q.jsx)(l,{title:F.title||`Untitled chat`,onBack:V,backLabel:`Agents`,trailing:ie,header:Q,footer:re,onRefresh:Y,label:t===`changes`?`Changes`:`Transcript`,children:t===`changes`?(0,q.jsx)(oe,{sessionId:e,version:`${F.status}:${F.turnCount}:${S}`}):(0,q.jsx)(ne,{sessionId:e,running:I,canAct:L})})}var X=48;function Z(e){return e?.parentElement??null}function Q(e){let[t,n]=(0,G.useState)(()=>Date.now());return(0,G.useEffect)(()=>{if(!e)return;n(Date.now());let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e]),t}function ne({sessionId:e,running:t,canAct:n}){let r=y(e),i=_(e),[a,o]=(0,G.useState)(60),[s,c]=(0,G.useState)(!1),l=(0,G.useRef)(null),d=(0,G.useRef)(!0),p=t||r.live,m=Q(p),h=(0,G.useMemo)(()=>F(r.items),[r.items]),g=(0,G.useMemo)(()=>I(h,a),[h,a]);(0,G.useEffect)(()=>{let e=Z(l.current);if(!e)return;let t=()=>{let t=e.scrollHeight-e.scrollTop-e.clientHeight<=X;d.current=t,t&&c(!1)};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)},[]);let v=h[h.length-1],b=`${h.length}:${v?.key??``}:${v&&`text`in v?v.text.length:0}:${v?.kind===`tool`?String(v.result!==null):``}:${p}`;return(0,G.useLayoutEffect)(()=>{let e=Z(l.current);e&&(d.current?e.scrollTop=e.scrollHeight:c(!0))},[b]),(0,q.jsxs)(`div`,{ref:l,className:K.log,role:`log`,"aria-label":`Conversation`,"aria-live":`off`,children:[g.hidden>0?(0,q.jsxs)(f,{variant:`tinted`,block:!0,onClick:()=>o(e=>e+60),children:[`Show earlier (`,g.hidden,`)`]}):null,h.length===0&&!p?(0,q.jsx)(A,{title:`No messages yet`,body:n?`Send the first message below.`:`Messages sent from your Mac show up here.`}):null,g.items.map(e=>(0,q.jsx)($,{item:e},e.key)),p?(0,q.jsxs)(`p`,{className:K.typing,role:`status`,children:[(0,q.jsx)(`span`,{className:u(D.dot,D.pulse),"aria-hidden":`true`}),(0,q.jsx)(`span`,{children:L(i,m)})]}):null,s?(0,q.jsx)(`div`,{className:K.jumpWrap,children:(0,q.jsx)(f,{variant:`primary`,className:K.jump,onClick:()=>{let e=Z(l.current);d.current=!0,c(!1),e&&(e.scrollTop=e.scrollHeight)},children:`Jump to latest`})}):null]})}function $({item:e}){switch(e.kind){case`user`:return(0,q.jsx)(`div`,{className:K.userRow,children:(0,q.jsx)(`div`,{className:K.userBubble,children:e.text})});case`assistant`:return(0,q.jsx)(`div`,{className:K.assistant,children:H(e.text).map((e,t)=>e.kind===`code`?(0,q.jsx)(`pre`,{className:K.code,"aria-label":e.lang?`${e.lang} code`:`Code`,children:e.text},t):(0,q.jsx)(`p`,{className:K.prose,children:e.text},t))});case`tool`:return(0,q.jsx)(re,{item:e});case`thinking`:return(0,q.jsx)(ie,{item:e});case`remote-pr`:{let t=N(e.url);return(0,q.jsx)(`p`,{className:K.system,"data-tone":`info`,children:t?(0,q.jsx)(`a`,{href:t,target:`_blank`,rel:`noopener noreferrer`,className:K.link,children:`Devin opened a pull request`}):`Devin opened a pull request`})}default:{let t=P(e);return t?(0,q.jsx)(`p`,{className:K.system,"data-tone":t.tone,children:t.text}):null}}}function re({item:e}){let[t,n]=(0,G.useState)(!1),r=W(e.name,e.input),i=e.result===null?`running`:e.result.isError?`error`:`ok`,a=i===`running`?`running`:i===`error`?`failed`:B(e.durationMs)??``,o=e.result?U(e.result.output):null;return(0,q.jsxs)(`div`,{className:K.tool,children:[(0,q.jsxs)(`button`,{type:`button`,className:K.toolChip,"data-state":i,"aria-expanded":t,onClick:()=>n(e=>!e),children:[(0,q.jsx)(`span`,{className:K.toolText,children:r}),a?(0,q.jsx)(`span`,{className:K.toolState,children:a}):null]}),t?o?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`pre`,{className:K.output,"data-error":i===`error`||void 0,children:o.text||`No output.`}),o.hidden>0?(0,q.jsxs)(`p`,{className:K.note,children:[o.hidden,` more `,o.hidden===1?`line`:`lines`,` — open this chat on your Mac for the full output.`]}):null]}):(0,q.jsx)(`p`,{className:K.note,children:`Still running — no output yet.`}):null]})}function ie({item:e}){let[t,n]=(0,G.useState)(!1);return(0,q.jsxs)(`div`,{className:K.tool,children:[(0,q.jsx)(`button`,{type:`button`,className:u(K.toolChip,K.thinkingChip),"aria-expanded":t,onClick:()=>n(e=>!e),children:(0,q.jsx)(`span`,{className:K.toolText,children:R(e)})}),t?(0,q.jsx)(`p`,{className:K.thinkingText,children:e.redacted||!e.text.trim()?`The model kept this reasoning private.`:e.text}):null]})}var ae=`VERSE_CHECKPOINT_UNAVAILABLE`;function oe({sessionId:e,version:t}){let[n,r]=(0,G.useState)({state:`loading`}),[i,a]=(0,G.useState)(0),[o,c]=(0,G.useState)(null);if((0,G.useEffect)(()=>{let t=new AbortController;return r(e=>e.state===`ready`?e:{state:`loading`}),(async()=>{let n=await T.list(e,t.signal),i=n.turns.find(b);if(!i){let e=n.turns.map(E).find(e=>e!==null)??null;t.signal.aborted||r({state:`empty`,reason:e});return}let a=i.roots.filter(e=>e.pre?.commit).map(e=>e.rootId),o=new Map(n.roots.map(e=>[e.rootId,e.name])),s=await Promise.all(a.map(n=>T.diff({chatId:e,turnId:i.turnId,rootId:n,mode:`since`},t.signal)));t.signal.aborted||r({state:`ready`,turnId:i.turnId,roots:s.map((e,t)=>({rootId:a[t],name:o.get(a[t])??`Repository`,diff:e}))})})().catch(e=>{t.signal.aborted||(w(e)===ae?r({state:`empty`,reason:null}):r({state:`error`,message:C(e)}))}),()=>t.abort()},[e,t,i]),n.state===`loading`)return(0,q.jsx)(s,{rows:3,label:`Loading changes`});if(n.state===`error`)return(0,q.jsx)(O,{title:`Couldn’t load the changes`,reason:n.message,onRetry:()=>a(e=>e+1)});if(n.state===`empty`)return(0,q.jsx)(A,{title:`No checkpoint for this chat yet`,body:n.reason??`Verse snapshots a git repository when a turn starts there; changes show up after the first one.`});let l=n.roots.flatMap(e=>e.diff.files),d=S(l),f=n.roots.length>1;return(0,q.jsxs)(`div`,{className:K.changes,children:[(0,q.jsx)(`p`,{className:K.summary,"aria-label":`Summary`,children:V(d)}),l.length===0?(0,q.jsx)(A,{title:`No changes on disk`,body:`Everything this chat changed has been undone, or it has not edited a file yet.`}):null,n.roots.map(t=>t.diff.files.length===0?null:(0,q.jsxs)(`section`,{className:D.section,"aria-label":t.name,children:[f?(0,q.jsx)(`h2`,{className:K.rootName,children:t.name}):null,(0,q.jsx)(`div`,{className:D.group,children:t.diff.files.map(r=>{let i=`${t.rootId}\u0000${r.path}`,a=o===i;return(0,q.jsxs)(`div`,{className:K.fileBlock,children:[(0,q.jsxs)(`button`,{type:`button`,className:u(D.row,K.fileRow),"aria-expanded":a,onClick:()=>c(a?null:i),children:[(0,q.jsx)(`span`,{className:K.fileStatus,"data-status":r.status,title:x[r.status],children:r.status}),(0,q.jsx)(`span`,{className:K.filePath,children:r.oldPath&&r.status===`R`?`${r.path} (was ${r.oldPath})`:r.path}),(0,q.jsx)(`span`,{className:K.fileCounts,children:r.binary?`binary`:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:K.add,children:[`+`,r.additions]}),` `,(0,q.jsxs)(`span`,{className:K.del,children:[`−`,r.deletions]})]})})]}),a?(0,q.jsx)(se,{sessionId:e,turnId:n.turnId,rootId:t.rootId,file:r}):null]},i)})})]},t.rootId)),(0,q.jsx)(`p`,{className:D.sectionFooter,children:`Read-only here. Review and undo on your Mac.`})]})}function se({sessionId:e,turnId:t,rootId:n,file:r}){let[i,a]=(0,G.useState)({state:`loading`});if((0,G.useEffect)(()=>{let i=new AbortController;return a({state:`loading`}),T.diff({chatId:e,turnId:t,rootId:n,mode:`since`,file:r.path},i.signal).then(e=>{i.signal.aborted||a({state:`ready`,diff:e})},e=>{i.signal.aborted||a({state:`error`,message:C(e)})}),()=>i.abort()},[e,t,n,r.path]),i.state===`loading`)return(0,q.jsx)(`p`,{className:K.note,role:`status`,children:`Loading the diff…`});if(i.state===`error`)return(0,q.jsx)(`p`,{className:K.note,role:`alert`,children:i.message});let o=i.diff.patch;return r.binary||o?.binary?(0,q.jsx)(`p`,{className:K.note,children:`Binary file — open it on your Mac to compare.`}):r.captured?!o||!o.text.trim()?(0,q.jsx)(`p`,{className:K.note,children:`No text changes.`}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:K.patch,"aria-label":`Diff of ${r.path}`,children:z(o.text).map((e,t)=>(0,q.jsx)(`div`,{className:K.line,"data-kind":e.kind,children:e.text||` `},t))}),o.truncated?(0,q.jsx)(`p`,{className:K.note,children:`This diff was cut short — see the whole change on your Mac.`}):null]}):(0,q.jsx)(`p`,{className:K.note,children:`Too large to snapshot, so there is no diff for it.`})}export{Y as AgentDetailScreen,J as STOP_CONSEQUENCES};
2
+ //# sourceMappingURL=AgentDetailScreen-DzqHmufO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentDetailScreen-DzqHmufO.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mobile/screens/AgentDetailScreen.module.css","../../../../../../src/web-ui/routes/verse/mobile/screens/AgentDetailScreen.tsx"],"sourcesContent":["/*\n * routes/verse/mobile/screens/AgentDetailScreen.module.css — one agent on a\n * phone: the header's seat line and Transcript | Changes switch, the compact\n * transcript (bubbles, one-line tool chips, system lines, the typing line,\n * \"Jump to latest\"), and the read-only diff.\n *\n * Nothing scrolls sideways: code, tool output and diff lines wrap\n * (pre-wrap + break-word). One-line chips clip with an ellipsis instead.\n */\n\n/* ---- header ---------------------------------------------------------------- */\n\n.header {\n flex: none;\n display: grid;\n gap: var(--space-2);\n padding: 0 max(var(--space-4), env(safe-area-inset-right)) var(--space-2) max(var(--space-4), env(safe-area-inset-left));\n}\n\n.header > * {\n margin: 0;\n}\n\n.meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n min-width: 0;\n color: var(--text-secondary);\n font-size: 0.85em;\n}\n\n.who {\n min-width: 0;\n}\n\n.segmented {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--space-1);\n padding: var(--space-1);\n border-radius: var(--radius-lg);\n background: var(--bg-surface-raised);\n border: 1px solid var(--border-subtle);\n}\n\n.segment {\n min-height: 2.75rem;\n border: 0;\n border-radius: var(--radius-md);\n background: transparent;\n color: var(--text-secondary);\n font-weight: var(--font-weight-medium);\n cursor: pointer;\n}\n\n.segment[aria-pressed='true'] {\n background: var(--bg-surface);\n color: var(--text-primary);\n box-shadow: 0 0 0 1px var(--border-default);\n}\n\n/* ---- transcript ------------------------------------------------------------- */\n\n.log {\n display: grid;\n gap: var(--space-3);\n padding-top: var(--space-3);\n min-width: 0;\n}\n\n.userRow {\n display: flex;\n justify-content: flex-end;\n min-width: 0;\n}\n\n.userBubble {\n max-width: 85%;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-xl);\n background: var(--accent-500);\n color: var(--text-on-accent);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.assistant {\n display: grid;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.prose {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.code,\n.output {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-md);\n background: var(--bg-code);\n border: 1px solid var(--border-subtle);\n font-family: var(--font-mono);\n font-size: 0.8em;\n line-height: 1.45;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: hidden;\n}\n\n.output[data-error] {\n border-color: var(--status-danger-solid);\n}\n\n.tool {\n display: grid;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.toolChip {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n justify-self: start;\n max-width: 100%;\n min-height: 2.75rem;\n padding: 0 var(--space-3);\n border-radius: var(--radius-full);\n border: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n color: var(--text-secondary);\n font-size: 0.85em;\n text-align: left;\n cursor: pointer;\n}\n\n.toolChip[data-state='error'] {\n border-color: var(--status-danger-solid);\n color: var(--status-danger-fg);\n}\n\n.toolChip[aria-expanded='true'] {\n border-color: var(--border-default);\n color: var(--text-primary);\n}\n\n.toolText {\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-family: var(--font-mono);\n}\n\n.toolState {\n flex: none;\n color: var(--text-tertiary);\n font-size: 0.9em;\n}\n\n.thinkingChip .toolText {\n font-family: inherit;\n font-style: italic;\n}\n\n.thinkingText {\n margin: 0;\n padding-left: var(--space-3);\n border-left: 2px solid var(--border-default);\n color: var(--text-secondary);\n font-size: 0.9em;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.system {\n margin: 0;\n text-align: center;\n color: var(--text-tertiary);\n font-size: 0.8em;\n}\n\n.system[data-tone='danger'] {\n color: var(--status-danger-fg);\n}\n\n.system[data-tone='info'] {\n color: var(--status-info-fg);\n}\n\n.link {\n display: inline-flex;\n align-items: center;\n min-height: 2.75rem;\n color: var(--text-link);\n}\n\n.note {\n margin: 0;\n color: var(--text-tertiary);\n font-size: 0.8em;\n}\n\n.typing {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n margin: 0;\n color: var(--status-running-fg);\n font-size: 0.85em;\n}\n\n.jumpWrap {\n position: sticky;\n bottom: var(--space-3);\n display: flex;\n justify-content: center;\n pointer-events: none;\n}\n\n.jump {\n pointer-events: auto;\n box-shadow: 0 0.25rem 0.75rem color-mix(in srgb, var(--text-primary) 18%, transparent);\n}\n\n.modeChip {\n flex: 1 1 0;\n}\n\n/* ---- changes --------------------------------------------------------------- */\n\n.changes {\n padding-top: var(--space-3);\n min-width: 0;\n}\n\n.summary {\n margin: 0 var(--space-2) var(--space-3);\n color: var(--text-secondary);\n font-weight: var(--font-weight-medium);\n font-variant-numeric: tabular-nums;\n}\n\n.rootName {\n font-family: var(--font-display);\n margin: 0 var(--space-2) var(--space-2);\n color: var(--text-secondary);\n font-size: 0.8em;\n font-weight: var(--font-weight-semibold);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n}\n\n.fileBlock {\n display: grid;\n min-width: 0;\n}\n\n.fileBlock + .fileBlock {\n border-top: 1px solid var(--border-subtle);\n}\n\n.fileRow {\n align-items: flex-start;\n cursor: pointer;\n}\n\n.fileStatus {\n flex: none;\n min-width: 1.6em;\n text-align: center;\n border-radius: var(--radius-sm);\n font-family: var(--font-mono);\n font-size: 0.8em;\n font-weight: var(--font-weight-semibold);\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n}\n\n.fileStatus[data-status='A'] { background: var(--status-success-bg); color: var(--status-success-fg); }\n.fileStatus[data-status='D'] { background: var(--status-danger-bg); color: var(--status-danger-fg); }\n.fileStatus[data-status='R'] { background: var(--status-info-bg); color: var(--status-info-fg); }\n\n.filePath {\n flex: 1;\n min-width: 0;\n font-family: var(--font-mono);\n font-size: 0.85em;\n word-break: break-word;\n}\n\n.fileCounts {\n flex: none;\n font-size: 0.8em;\n font-variant-numeric: tabular-nums;\n color: var(--text-tertiary);\n}\n\n.add {\n color: var(--status-success-fg);\n}\n\n.del {\n color: var(--status-danger-fg);\n}\n\n.patch {\n margin: 0 var(--space-3) var(--space-3);\n border-radius: var(--radius-md);\n border: 1px solid var(--border-subtle);\n background: var(--bg-code);\n overflow-x: hidden;\n font-family: var(--font-mono);\n font-size: 0.75em;\n line-height: 1.45;\n}\n\n.line {\n padding: 0 var(--space-2);\n white-space: pre-wrap;\n word-break: break-word;\n min-width: 0;\n}\n\n.line[data-kind='add'] {\n background: var(--status-success-bg);\n color: var(--status-success-fg);\n}\n\n.line[data-kind='del'] {\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n\n.line[data-kind='hunk'] {\n color: var(--text-tertiary);\n background: var(--status-neutral-bg);\n}\n\n.line[data-kind='meta'] {\n color: var(--text-tertiary);\n}\n\n.fileBlock > .note {\n margin: 0 var(--space-4) var(--space-3);\n}\n","/**\n * routes/verse/mobile/screens/AgentDetailScreen.tsx — one agent on the\n * phone: its live transcript, what it changed (read-only), and the three\n * things worth doing from a pocket — Send, Interject, Stop.\n *\n * Live data is the workbench's own store, so the phone and the Mac show the\n * same chat from the same events:\n * useVerseSession opens the chat (detail GET, then the resumed SSE stream)\n * useVerseTranscript the derived transcript (one rebuild per frame while streaming)\n * useVerseLive the running turn's progress / thinking / notices\n * checkpointClient the Changes pane (GET /api/verse/checkpoints*)\n *\n * Writes (every one through runMobileAction):\n * idle Send POST /sessions/:id/turns (no confirmation: a message)\n * running Interject POST /queue/:id { sendNow: true } (stops the turn, sends this next)\n * Queue POST /queue/:id (sends after the turn)\n * Stop POST /sessions/:id/cancel (confirmed)\n * A Devin chat stops the same way; ending the Devin session for good\n * (terminate) is deliberately not offered from the phone.\n *\n * The transcript is drawn compactly here rather than with Transcript.tsx /\n * MessageMarkdown (too heavy for this chunk): prose as pre-wrapped text,\n * ``` fences as code blocks, tool calls as one-line chips.\n */\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport type { VerseCheckpointDiffFile, VerseCheckpointDiffResponse } from '../../../../../core/verse/checkpoint-types.js';\nimport { useQuery } from '../../../../data/hooks.js';\nimport { STATUS_WORD, totals, turnCheckpointError, turnHasCheckpoint } from '../../changes/changes-model.js';\nimport { checkpointClient, describeCheckpointError, errorCode } from '../../changes/checkpoint-queries.js';\nimport { noteSessionSeen } from '../../chat/use-chat-activity.js';\nimport { enqueueFollowUp } from '../../composer/composer-queries.js';\nimport { useVerseLive, useVerseSession } from '../../useVerseSession.js';\nimport { useVerseTranscript } from '../../useVerseTranscript.js';\nimport { verseBootstrapQuery } from '../../verse-bootstrap-query.js';\nimport { modelLabel, seatLabel } from '../../verse-model.js';\nimport { cancelVerseTurn, sendVerseTurn } from '../../verse-queries.js';\nimport type { TranscriptItem } from '../../verse-transcript.js';\nimport { MobileComposer } from '../MobileComposer.js';\nimport { runMobileAction } from '../mobile-actions.js';\nimport { canShowActions, useMobile } from '../mobile-context.js';\nimport type { AgentPane } from '../mobile-router.js';\nimport { Button, Screen, SkeletonList, cx } from '../ui.js';\nimport { Badge, Banner, EmptyState, ErrorState, ui } from '../ui-parts.js';\nimport {\n clipLines,\n diffLines,\n diffSummary,\n liveStatusText,\n safeHttpsUrl,\n shortElapsed,\n splitFences,\n systemLine,\n thinkingLabel,\n toolSummary,\n TRANSCRIPT_WINDOW,\n visibleItems,\n windowItems,\n} from './agent-transcript-model.js';\nimport styles from './AgentDetailScreen.module.css';\n\nexport interface AgentDetailScreenProps {\n sessionId: string;\n pane: AgentPane;\n}\n\ntype SendMode = 'interject' | 'queue';\n\nexport const STOP_CONSEQUENCES = 'Stops the turn in progress. What it already changed stays on disk.';\n\n/** A load error in operator words: the store keeps the raw \"GET … failed (HTTP 404).\" sentence. */\nfunction describeLoadError(message: string): { title: string; reason: string } {\n if (/HTTP 404/.test(message)) return { title: 'Chat not found', reason: 'Your Mac has no chat with this id. It may have been deleted.' };\n if (/HTTP \\d+/.test(message)) return { title: 'Couldn’t open this chat', reason: 'Your Mac could not load this chat right now.' };\n return { title: 'Couldn’t open this chat', reason: message };\n}\n\nexport function AgentDetailScreen({ sessionId, pane }: AgentDetailScreenProps) {\n const { permissions, reachability, navigate } = useMobile();\n const [reload, setReload] = useState(0);\n const [changesReload, setChangesReload] = useState(0);\n const head = useVerseSession(sessionId, reload);\n const boot = useQuery(verseBootstrapQuery);\n const [draft, setDraft] = useState('');\n const [mode, setMode] = useState<SendMode>('interject');\n\n const session = head.session;\n const running = session?.status === 'running';\n const canAct = canShowActions(permissions);\n const disconnected = reachability === 'offline' || reachability === 'unreachable';\n const seats = boot.data?.seats ?? [];\n\n // Opening (and watching) a chat reads it: clear its unread count here and on the Mac.\n const turnCount = session?.turnCount ?? null;\n useEffect(() => {\n if (head.loaded && turnCount !== null) noteSessionSeen(sessionId, turnCount);\n }, [sessionId, head.loaded, turnCount]);\n\n const back = useCallback(() => navigate({ screen: 'agents' }), [navigate]);\n const showPane = (next: AgentPane) => {\n if (next !== pane) navigate({ screen: 'agent', id: sessionId, pane: next }, { replace: true });\n };\n\n const stop = () => {\n runMobileAction({\n title: 'Stop this turn?',\n consequences: STOP_CONSEQUENCES,\n confirmLabel: 'Stop',\n destructive: true,\n run: () => cancelVerseTurn(sessionId),\n success: 'Stopped',\n });\n };\n\n const submit = (text: string) => {\n const kind: 'send' | SendMode = running ? mode : 'send';\n runMobileAction({\n title: kind === 'send' ? 'Send message' : kind === 'interject' ? 'Interject' : 'Queue message',\n consequences:\n kind === 'send'\n ? 'Sends this message to the agent, which starts a new turn.'\n : kind === 'interject'\n ? 'Stops the current turn and sends this next.'\n : 'Sends this after the current turn finishes.',\n confirmLabel: kind === 'send' ? 'Send' : kind === 'interject' ? 'Interject' : 'Queue',\n confirm: false,\n run: () => (kind === 'send' ? sendVerseTurn(sessionId, text) : enqueueFollowUp(sessionId, text, kind === 'interject' ? { sendNow: true } : {})),\n success: kind === 'queue' ? 'Queued for after this turn' : undefined,\n // Clear only what was sent: words typed while it was in flight stay.\n onDone: () => setDraft((current) => (current.trim() === text ? '' : current)),\n });\n };\n\n const refresh = () => {\n if (pane === 'changes') setChangesReload((n) => n + 1);\n else setReload((n) => n + 1);\n };\n\n // ---- states before there is a chat to show --------------------------------\n\n if (head.loadError && !session) {\n const { title, reason } = describeLoadError(head.loadError);\n return (\n <Screen title=\"Agent\" onBack={back} backLabel=\"Agents\">\n <ErrorState title={title} reason={reason} onRetry={() => setReload((n) => n + 1)} />\n <Button variant=\"plain\" block onClick={back}>Back to Agents</Button>\n </Screen>\n );\n }\n if (!head.loaded || !session) {\n return (\n <Screen title=\"Agent\" onBack={back} backLabel=\"Agents\">\n <SkeletonList rows={4} label=\"Loading the conversation\" />\n </Screen>\n );\n }\n\n // ---- the chat ---------------------------------------------------------------\n\n const badge = running\n ? <Badge tone=\"running\" dot pulse>Working</Badge>\n : session.status === 'error'\n ? <Badge tone=\"danger\">Failed</Badge>\n : <Badge tone=\"neutral\">Idle</Badge>;\n const who = [seatLabel(seats, session), modelLabel(seats, session)].filter(Boolean).join(' · ');\n\n const header = (\n <div className={styles.header}>\n <div className={styles.meta}>\n <span className={styles.who}>{who}</span>\n {badge}\n </div>\n <div className={styles.segmented} role=\"group\" aria-label=\"View\">\n <button type=\"button\" className={styles.segment} aria-pressed={pane === 'transcript'} onClick={() => showPane('transcript')}>Transcript</button>\n <button type=\"button\" className={styles.segment} aria-pressed={pane === 'changes'} onClick={() => showPane('changes')}>Changes</button>\n </div>\n {disconnected ? (\n <Banner tone=\"warning\">\n {reachability === 'offline'\n ? 'You’re offline. Showing what was loaded; sending resumes when you reconnect.'\n : 'Can’t reach your Mac. Showing what was loaded; sending resumes when it answers.'}\n </Banner>\n ) : head.stream === 'reconnecting' ? (\n <Banner tone=\"info\">Reconnecting to the live stream…</Banner>\n ) : null}\n </div>\n );\n\n const hint = disconnected\n ? 'Sending is paused until your Mac is reachable.'\n : running\n ? mode === 'interject'\n ? 'Interject stops the current turn and sends this next.'\n : 'Queue sends this after the current turn finishes.'\n : permissions.act === 'locked'\n ? 'Sending asks for the mutation token first.'\n : undefined;\n\n const footer = pane !== 'transcript'\n ? undefined\n : canAct ? (\n <MobileComposer\n value={draft}\n onChange={setDraft}\n onSubmit={submit}\n placeholder={running ? 'Tell it something now…' : 'Message this agent…'}\n submitLabel={running ? (mode === 'interject' ? 'Interject' : 'Queue') : 'Send'}\n disabled={disconnected}\n hint={hint}\n label=\"Message\"\n above={running ? (\n <div className={ui.chips} role=\"group\" aria-label=\"When to send\">\n <button type=\"button\" className={cx(ui.chip, styles.modeChip)} aria-pressed={mode === 'interject'} onClick={() => setMode('interject')}>Interject now</button>\n <button type=\"button\" className={cx(ui.chip, styles.modeChip)} aria-pressed={mode === 'queue'} onClick={() => setMode('queue')}>Queue for after</button>\n </div>\n ) : undefined}\n />\n ) : (\n <div className={ui.composer}>\n <p className={ui.composerHint}>{permissions.actReason ?? 'This device can read this chat but not send to it.'}</p>\n </div>\n );\n\n const trailing = running && canAct ? (\n <Button variant=\"destructiveTinted\" onClick={stop} disabled={disconnected}>Stop</Button>\n ) : null;\n\n return (\n <Screen\n title={session.title || 'Untitled chat'}\n onBack={back}\n backLabel=\"Agents\"\n trailing={trailing}\n header={header}\n footer={footer}\n onRefresh={refresh}\n label={pane === 'changes' ? 'Changes' : 'Transcript'}\n >\n {pane === 'changes' ? (\n <ChangesPane sessionId={sessionId} version={`${session.status}:${session.turnCount}:${changesReload}`} />\n ) : (\n <TranscriptPane sessionId={sessionId} running={running} canAct={canAct} />\n )}\n </Screen>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Transcript\n// ---------------------------------------------------------------------------\n\n/** Within this many pixels of the end counts as \"at the bottom\" (following the stream). */\nconst STICK_PX = 48;\n\n/**\n * Screen renders its children straight into its scroller, so the pane's\n * parent IS the scroll container (ui.tsx Screen).\n */\nfunction scrollerOf(pane: HTMLElement | null): HTMLElement | null {\n return pane?.parentElement ?? null;\n}\n\n/** A clock that ticks once a second while `on` (the typing line's elapsed time). */\nfunction useNow(on: boolean): number {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n if (!on) return undefined;\n setNow(Date.now());\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, [on]);\n return now;\n}\n\nfunction TranscriptPane({ sessionId, running, canAct }: { sessionId: string; running: boolean; canAct: boolean }) {\n const transcript = useVerseTranscript(sessionId);\n const live = useVerseLive(sessionId);\n const [limit, setLimit] = useState(TRANSCRIPT_WINDOW);\n const [jump, setJump] = useState(false);\n const root = useRef<HTMLDivElement>(null);\n const stick = useRef(true);\n const streaming = running || transcript.live;\n const now = useNow(streaming);\n\n const all = useMemo(() => visibleItems(transcript.items), [transcript.items]);\n const shown = useMemo(() => windowItems(all, limit), [all, limit]);\n\n useEffect(() => {\n const el = scrollerOf(root.current);\n if (!el) return undefined;\n const onScroll = () => {\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= STICK_PX;\n stick.current = atBottom;\n if (atBottom) setJump(false);\n };\n el.addEventListener('scroll', onScroll, { passive: true });\n return () => el.removeEventListener('scroll', onScroll);\n }, []);\n\n // Follow new content while the operator is at the bottom; otherwise offer the pill.\n const last = all[all.length - 1];\n const signature = `${all.length}:${last?.key ?? ''}:${last && 'text' in last ? last.text.length : 0}:${last?.kind === 'tool' ? String(last.result !== null) : ''}:${streaming}`;\n useLayoutEffect(() => {\n const el = scrollerOf(root.current);\n if (!el) return;\n if (stick.current) el.scrollTop = el.scrollHeight;\n else setJump(true);\n }, [signature]);\n\n const toLatest = () => {\n const el = scrollerOf(root.current);\n stick.current = true;\n setJump(false);\n if (el) el.scrollTop = el.scrollHeight;\n };\n\n return (\n <div ref={root} className={styles.log} role=\"log\" aria-label=\"Conversation\" aria-live=\"off\">\n {shown.hidden > 0 ? (\n <Button variant=\"tinted\" block onClick={() => setLimit((n) => n + TRANSCRIPT_WINDOW)}>\n Show earlier ({shown.hidden})\n </Button>\n ) : null}\n {all.length === 0 && !streaming ? (\n <EmptyState title=\"No messages yet\" body={canAct ? 'Send the first message below.' : 'Messages sent from your Mac show up here.'} />\n ) : null}\n {shown.items.map((item) => <TranscriptEntry key={item.key} item={item} />)}\n {streaming ? (\n <p className={styles.typing} role=\"status\">\n <span className={cx(ui.dot, ui.pulse)} aria-hidden=\"true\" />\n <span>{liveStatusText(live, now)}</span>\n </p>\n ) : null}\n {jump ? (\n <div className={styles.jumpWrap}>\n <Button variant=\"primary\" className={styles.jump} onClick={toLatest}>Jump to latest</Button>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction TranscriptEntry({ item }: { item: TranscriptItem }) {\n switch (item.kind) {\n case 'user':\n return (\n <div className={styles.userRow}>\n <div className={styles.userBubble}>{item.text}</div>\n </div>\n );\n case 'assistant':\n return (\n <div className={styles.assistant}>\n {splitFences(item.text).map((seg, i) =>\n seg.kind === 'code' ? (\n <pre key={i} className={styles.code} aria-label={seg.lang ? `${seg.lang} code` : 'Code'}>{seg.text}</pre>\n ) : (\n <p key={i} className={styles.prose}>{seg.text}</p>\n ),\n )}\n </div>\n );\n case 'tool':\n return <ToolChip item={item} />;\n case 'thinking':\n return <ThinkingChip item={item} />;\n case 'remote-pr': {\n const href = safeHttpsUrl(item.url);\n return (\n <p className={styles.system} data-tone=\"info\">\n {href ? <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={styles.link}>Devin opened a pull request</a> : 'Devin opened a pull request'}\n </p>\n );\n }\n default: {\n const line = systemLine(item);\n return line ? <p className={styles.system} data-tone={line.tone}>{line.text}</p> : null;\n }\n }\n}\n\nfunction ToolChip({ item }: { item: Extract<TranscriptItem, { kind: 'tool' }> }) {\n const [open, setOpen] = useState(false);\n const summary = toolSummary(item.name, item.input);\n const state = item.result === null ? 'running' : item.result.isError ? 'error' : 'ok';\n const stateText = state === 'running' ? 'running' : state === 'error' ? 'failed' : shortElapsed(item.durationMs) ?? '';\n const output = item.result ? clipLines(item.result.output) : null;\n return (\n <div className={styles.tool}>\n <button type=\"button\" className={styles.toolChip} data-state={state} aria-expanded={open} onClick={() => setOpen((v) => !v)}>\n <span className={styles.toolText}>{summary}</span>\n {stateText ? <span className={styles.toolState}>{stateText}</span> : null}\n </button>\n {open ? (\n output ? (\n <>\n <pre className={styles.output} data-error={state === 'error' || undefined}>{output.text || 'No output.'}</pre>\n {output.hidden > 0 ? <p className={styles.note}>{output.hidden} more {output.hidden === 1 ? 'line' : 'lines'} — open this chat on your Mac for the full output.</p> : null}\n </>\n ) : (\n <p className={styles.note}>Still running — no output yet.</p>\n )\n ) : null}\n </div>\n );\n}\n\nfunction ThinkingChip({ item }: { item: Extract<TranscriptItem, { kind: 'thinking' }> }) {\n const [open, setOpen] = useState(false);\n return (\n <div className={styles.tool}>\n <button type=\"button\" className={cx(styles.toolChip, styles.thinkingChip)} aria-expanded={open} onClick={() => setOpen((v) => !v)}>\n <span className={styles.toolText}>{thinkingLabel(item)}</span>\n </button>\n {open ? (\n <p className={styles.thinkingText}>{item.redacted || !item.text.trim() ? 'The model kept this reasoning private.' : item.text}</p>\n ) : null}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Changes (read-only)\n// ---------------------------------------------------------------------------\n\ninterface RootDiff {\n rootId: string;\n name: string;\n diff: VerseCheckpointDiffResponse;\n}\n\ntype ChangesLoad =\n | { state: 'loading' }\n | { state: 'error'; message: string }\n | { state: 'empty'; reason: string | null }\n | { state: 'ready'; turnId: string; roots: RootDiff[] };\n\nconst NO_CHECKPOINT = 'VERSE_CHECKPOINT_UNAVAILABLE';\n\nfunction ChangesPane({ sessionId, version }: { sessionId: string; version: string }) {\n const [load, setLoad] = useState<ChangesLoad>({ state: 'loading' });\n const [retry, setRetry] = useState(0);\n const [open, setOpen] = useState<string | null>(null);\n\n useEffect(() => {\n const ctl = new AbortController();\n // Keep the last answer on screen while a refresh runs (no flash to a skeleton).\n setLoad((prev) => (prev.state === 'ready' ? prev : { state: 'loading' }));\n void (async () => {\n const list = await checkpointClient.list(sessionId, ctl.signal);\n // \"Everything this chat changed\": from the checkpoint before its FIRST\n // turn that has one, to the files on disk now.\n const first = list.turns.find(turnHasCheckpoint);\n if (!first) {\n const reason = list.turns.map(turnCheckpointError).find((r) => r !== null) ?? null;\n if (!ctl.signal.aborted) setLoad({ state: 'empty', reason });\n return;\n }\n const rootIds = first.roots.filter((r) => r.pre?.commit).map((r) => r.rootId);\n const names = new Map(list.roots.map((r) => [r.rootId, r.name]));\n const diffs = await Promise.all(\n rootIds.map((rootId) => checkpointClient.diff({ chatId: sessionId, turnId: first.turnId, rootId, mode: 'since' }, ctl.signal)),\n );\n if (ctl.signal.aborted) return;\n setLoad({\n state: 'ready',\n turnId: first.turnId,\n roots: diffs.map((diff, i) => ({ rootId: rootIds[i]!, name: names.get(rootIds[i]!) ?? 'Repository', diff })),\n });\n })().catch((err: unknown) => {\n if (ctl.signal.aborted) return;\n if (errorCode(err) === NO_CHECKPOINT) setLoad({ state: 'empty', reason: null });\n else setLoad({ state: 'error', message: describeCheckpointError(err) });\n });\n return () => ctl.abort();\n }, [sessionId, version, retry]);\n\n if (load.state === 'loading') return <SkeletonList rows={3} label=\"Loading changes\" />;\n if (load.state === 'error') return <ErrorState title=\"Couldn’t load the changes\" reason={load.message} onRetry={() => setRetry((n) => n + 1)} />;\n if (load.state === 'empty') {\n return <EmptyState title=\"No checkpoint for this chat yet\" body={load.reason ?? 'Verse snapshots a git repository when a turn starts there; changes show up after the first one.'} />;\n }\n\n const allFiles = load.roots.flatMap((r) => r.diff.files);\n const sum = totals(allFiles);\n const multi = load.roots.length > 1;\n return (\n <div className={styles.changes}>\n <p className={styles.summary} aria-label=\"Summary\">{diffSummary(sum)}</p>\n {allFiles.length === 0 ? <EmptyState title=\"No changes on disk\" body=\"Everything this chat changed has been undone, or it has not edited a file yet.\" /> : null}\n {load.roots.map((root) =>\n root.diff.files.length === 0 ? null : (\n <section key={root.rootId} className={ui.section} aria-label={root.name}>\n {multi ? <h2 className={styles.rootName}>{root.name}</h2> : null}\n <div className={ui.group}>\n {root.diff.files.map((file) => {\n const key = `${root.rootId}\\u0000${file.path}`;\n const expanded = open === key;\n return (\n <div key={key} className={styles.fileBlock}>\n <button type=\"button\" className={cx(ui.row, styles.fileRow)} aria-expanded={expanded} onClick={() => setOpen(expanded ? null : key)}>\n <span className={styles.fileStatus} data-status={file.status} title={STATUS_WORD[file.status]}>{file.status}</span>\n <span className={styles.filePath}>{file.oldPath && file.status === 'R' ? `${file.path} (was ${file.oldPath})` : file.path}</span>\n <span className={styles.fileCounts}>\n {file.binary ? 'binary' : <><span className={styles.add}>+{file.additions}</span> <span className={styles.del}>−{file.deletions}</span></>}\n </span>\n </button>\n {expanded ? <FilePatch sessionId={sessionId} turnId={load.turnId} rootId={root.rootId} file={file} /> : null}\n </div>\n );\n })}\n </div>\n </section>\n ),\n )}\n <p className={ui.sectionFooter}>Read-only here. Review and undo on your Mac.</p>\n </div>\n );\n}\n\ntype PatchLoad = { state: 'loading' } | { state: 'error'; message: string } | { state: 'ready'; diff: VerseCheckpointDiffResponse };\n\nfunction FilePatch({ sessionId, turnId, rootId, file }: { sessionId: string; turnId: string; rootId: string; file: VerseCheckpointDiffFile }) {\n const [load, setLoad] = useState<PatchLoad>({ state: 'loading' });\n useEffect(() => {\n const ctl = new AbortController();\n setLoad({ state: 'loading' });\n checkpointClient.diff({ chatId: sessionId, turnId, rootId, mode: 'since', file: file.path }, ctl.signal).then(\n (diff) => { if (!ctl.signal.aborted) setLoad({ state: 'ready', diff }); },\n (err: unknown) => { if (!ctl.signal.aborted) setLoad({ state: 'error', message: describeCheckpointError(err) }); },\n );\n return () => ctl.abort();\n }, [sessionId, turnId, rootId, file.path]);\n\n if (load.state === 'loading') return <p className={styles.note} role=\"status\">Loading the diff…</p>;\n if (load.state === 'error') return <p className={styles.note} role=\"alert\">{load.message}</p>;\n const patch = load.diff.patch;\n if (file.binary || patch?.binary) return <p className={styles.note}>Binary file — open it on your Mac to compare.</p>;\n if (!file.captured) return <p className={styles.note}>Too large to snapshot, so there is no diff for it.</p>;\n if (!patch || !patch.text.trim()) return <p className={styles.note}>No text changes.</p>;\n return (\n <>\n <div className={styles.patch} aria-label={`Diff of ${file.path}`}>\n {diffLines(patch.text).map((line, i) => (\n <div key={i} className={styles.line} data-kind={line.kind}>{line.text || ' '}</div>\n ))}\n </div>\n {patch.truncated ? <p className={styles.note}>This diff was cut short — see the whole change on your Mac.</p> : null}\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-_izD07R9.js";import{t as r}from"./MutationTokenDialog-T3r9EtHi.js";import{t as i}from"./Segmented-BECZDbsg.js";import{n as a,t as o}from"./use-token-gate-DgnO9fbv.js";import{t as s}from"./Sheet-Czuz3h6A.js";import{t as c}from"./Switch-mvc9lQcT.js";import{t as l}from"./agent-tools-client-Si2ncqwV.js";import{t as u}from"./AgentTools.module-CkjqeuMS.js";var d=e(n(),1),f=t(),p={off:`The agent cannot use Verse terminals.`,agent:`The agent opens its own terminal tabs (marked Agent) and runs commands there. You can watch, type to take over, and hand back.`,shared:`Also lets you share one of your own shells with the agent, per tab, from the terminal's More menu.`},m={off:`The agent cannot use the Browser pane.`,look:`Open pages, take screenshots, read text and the console — on localhost, or sites you allowed in the Browser pane.`,"act-localhost":`Also click, type and fill forms — on localhost pages only.`,"act-allowed":`Also click, type and fill forms on sites you allowed for this chat.`};function h({sessionId:e,open:t,onClose:n,api:h=l}){let g=(0,d.useId)(),_=a(),[v,y]=(0,d.useState)(null),[b,x]=(0,d.useState)(null),[S,C]=(0,d.useState)(!1),[w,T]=(0,d.useState)(``);(0,d.useEffect)(()=>{if(!t)return;let n=new AbortController;return h.state(e,n.signal).then(e=>{y(e),T(e.grant.computerApps.join(`, `)),x(null)},e=>{n.signal.aborted||x(o(e))}),()=>n.abort()},[h,t,e]);let E=(0,d.useCallback)(async t=>{C(!0);try{let n=await _.run(`Change what this chat's agent may do`,()=>h.setGrant({sessionId:e,...t}));n&&(y(n),x(null))}catch(e){x(o(e))}finally{C(!1)}},[h,_,e]),D=v?.grant??null,O=v?.seatLabel??`the agent`,k=v&&!v.support.supported?v.support.reason:null,A=S||v===null||k!==null,j=D?.browser===`act-localhost`||D?.browser===`act-allowed`;return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(s,{open:t,onClose:n,titleId:g,title:`Agent tools`,description:`What ${O} may do on this Mac in this chat, through Verse. Changes apply at once.`,footer:(0,f.jsx)(`p`,{className:u.footnote,children:`Everything starts off again when Verse restarts. Destructive commands always ask you first.`}),children:(0,f.jsxs)(`div`,{className:u.sheetBody,"aria-busy":v===null||S||void 0,children:[b?(0,f.jsx)(`p`,{className:u.error,role:`alert`,children:b}):null,k?(0,f.jsx)(`p`,{className:u.warning,role:`note`,children:k}):null,v&&!v.desktop?(0,f.jsx)(`p`,{className:u.warning,role:`note`,children:`Terminal and computer tools need the Ashlr desktop app; this Verse server has no built-in terminal.`}):null,v&&v.support.supported?(0,f.jsx)(`p`,{className:u.quiet,children:v.support.note}):null,(0,f.jsxs)(`section`,{className:u.group,"aria-labelledby":`${g}-terminal`,children:[(0,f.jsx)(`h3`,{id:`${g}-terminal`,className:u.groupTitle,children:`Terminal`}),(0,f.jsx)(i,{"aria-labelledby":`${g}-terminal`,size:`sm`,block:!0,value:D?.terminal??`off`,onChange:e=>void E({terminal:e}),options:[{value:`off`,label:`Off`,disabled:A},{value:`agent`,label:`Agent tabs`,disabled:A},{value:`shared`,label:`Share my shells`,disabled:A}]}),(0,f.jsx)(`p`,{className:u.quiet,children:p[D?.terminal??`off`]})]}),(0,f.jsxs)(`section`,{className:u.group,"aria-labelledby":`${g}-browser`,children:[(0,f.jsx)(`h3`,{id:`${g}-browser`,className:u.groupTitle,children:`Browser`}),(0,f.jsx)(i,{"aria-labelledby":`${g}-browser`,size:`sm`,block:!0,value:D?.browser??`off`,onChange:e=>void E({browser:e}),options:[{value:`off`,label:`Off`,disabled:A},{value:`look`,label:`Look`,disabled:A},{value:`act-localhost`,label:`Act: localhost`,disabled:A},{value:`act-allowed`,label:`Act: allowed sites`,disabled:A}]}),(0,f.jsx)(`p`,{className:u.quiet,children:m[D?.browser??`off`]}),j?(0,f.jsx)(c,{checked:D?.browserScript===!0,disabled:A,onChange:e=>void E({browserScript:e}),label:`Allow page scripts (run JavaScript in the page)`}):null]}),(0,f.jsxs)(`section`,{className:u.group,"aria-labelledby":`${g}-computer`,children:[(0,f.jsx)(`h3`,{id:`${g}-computer`,className:u.groupTitle,children:`Computer`}),(0,f.jsx)(i,{"aria-labelledby":`${g}-computer`,size:`sm`,block:!0,value:D?.computer??`off`,onChange:e=>void E({computer:e}),options:[{value:`off`,label:`Off`,disabled:A},{value:`apps`,label:`Listed apps`,disabled:A}]}),D?.computer===`apps`?(0,f.jsxs)(`form`,{className:u.apps,onSubmit:e=>{e.preventDefault(),E({computerApps:w.split(`,`).map(e=>e.trim()).filter(Boolean)})},children:[(0,f.jsx)(`label`,{className:u.quiet,htmlFor:`${g}-apps`,children:`Apps the agent may see and drive (comma-separated)`}),(0,f.jsxs)(`div`,{className:u.appsRow,children:[(0,f.jsx)(`input`,{id:`${g}-apps`,className:u.input,value:w,disabled:A,placeholder:`Simulator, Xcode`,onChange:e=>T(e.target.value)}),(0,f.jsx)(`button`,{type:`submit`,className:u.smallButton,disabled:A,children:`Save`})]})]}):(0,f.jsx)(`p`,{className:u.quiet,children:`The agent cannot see or drive other apps.`})]})]})}),(0,f.jsx)(r,{..._.dialog,tokenLabel:`Mutation token`,tokenHelp:`the mutation token ashlr verse printed`})]})}export{h as AgentToolsSheet};
2
+ //# sourceMappingURL=AgentToolsSheet-D00kLnIq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentToolsSheet-D00kLnIq.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/agent-tools/AgentToolsSheet.tsx"],"sourcesContent":["/**\n * routes/verse/agent-tools/AgentToolsSheet.tsx — the chat's \"Agent tools\"\n * sheet (3.15): what this chat's seat may do on this Mac through Verse's MCP\n * server (core/verse/verse-mcp*.ts).\n *\n * Terminal off / agent tabs / share my shells\n * Browser off / look / act on localhost / act on allowed sites (+ page scripts)\n * Computer off / listed apps\n *\n * Changes apply at once — a running turn loses a tool the moment it is\n * switched off. Nothing here is remembered across a Verse restart: the tools\n * start off again, like the Browser pane's agent access. Loaded lazily (the\n * chat's first paint never pays for it).\n */\nimport { useCallback, useEffect, useId, useState } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Segmented } from '../../../components/primitives/Segmented.js';\nimport { Sheet } from '../../../components/primitives/Sheet.js';\nimport { Switch } from '../../../components/primitives/Switch.js';\nimport type {\n VerseAgentBrowserMode,\n VerseAgentComputerMode,\n VerseAgentTerminalMode,\n VerseAgentToolsGrantRequest,\n VerseAgentToolsState,\n} from '../../../../core/verse/verse-mcp-types.js';\nimport { describeContextError, useTokenGate } from '../context/use-token-gate.js';\nimport { agentToolsApi, type AgentToolsApi } from './agent-tools-client.js';\nimport styles from './AgentTools.module.css';\n\nexport interface AgentToolsSheetProps {\n sessionId: string;\n open: boolean;\n onClose: () => void;\n api?: AgentToolsApi;\n}\n\nconst TERMINAL_HELP: Record<VerseAgentTerminalMode, string> = {\n off: 'The agent cannot use Verse terminals.',\n agent: 'The agent opens its own terminal tabs (marked Agent) and runs commands there. You can watch, type to take over, and hand back.',\n shared: 'Also lets you share one of your own shells with the agent, per tab, from the terminal\\'s More menu.',\n};\n\nconst BROWSER_HELP: Record<VerseAgentBrowserMode, string> = {\n off: 'The agent cannot use the Browser pane.',\n look: 'Open pages, take screenshots, read text and the console — on localhost, or sites you allowed in the Browser pane.',\n 'act-localhost': 'Also click, type and fill forms — on localhost pages only.',\n 'act-allowed': 'Also click, type and fill forms on sites you allowed for this chat.',\n};\n\nexport function AgentToolsSheet({ sessionId, open, onClose, api = agentToolsApi }: AgentToolsSheetProps) {\n const titleId = useId();\n const gate = useTokenGate();\n const [state, setState] = useState<VerseAgentToolsState | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n const [apps, setApps] = useState('');\n\n useEffect(() => {\n if (!open) return;\n const abort = new AbortController();\n api.state(sessionId, abort.signal).then(\n (next) => { setState(next); setApps(next.grant.computerApps.join(', ')); setError(null); },\n (err: unknown) => { if (!abort.signal.aborted) setError(describeContextError(err)); },\n );\n return () => abort.abort();\n }, [api, open, sessionId]);\n\n const change = useCallback(async (patch: Omit<VerseAgentToolsGrantRequest, 'sessionId'>) => {\n setBusy(true);\n try {\n const next = await gate.run('Change what this chat\\'s agent may do', () => api.setGrant({ sessionId, ...patch }));\n if (next) { setState(next); setError(null); }\n } catch (err) {\n setError(describeContextError(err));\n } finally {\n setBusy(false);\n }\n }, [api, gate, sessionId]);\n\n const grant = state?.grant ?? null;\n const seat = state?.seatLabel ?? 'the agent';\n const unsupported = state && !state.support.supported ? state.support.reason : null;\n const disabled = busy || state === null || unsupported !== null;\n const act = grant?.browser === 'act-localhost' || grant?.browser === 'act-allowed';\n\n return (\n <>\n <Sheet open={open} onClose={onClose} titleId={titleId} title=\"Agent tools\"\n description={`What ${seat} may do on this Mac in this chat, through Verse. Changes apply at once.`}\n footer={<p className={styles.footnote}>Everything starts off again when Verse restarts. Destructive commands always ask you first.</p>}>\n <div className={styles.sheetBody} aria-busy={state === null || busy || undefined}>\n {error ? <p className={styles.error} role=\"alert\">{error}</p> : null}\n {unsupported ? <p className={styles.warning} role=\"note\">{unsupported}</p> : null}\n {state && !state.desktop ? (\n <p className={styles.warning} role=\"note\">Terminal and computer tools need the Ashlr desktop app; this Verse server has no built-in terminal.</p>\n ) : null}\n {state && state.support.supported ? <p className={styles.quiet}>{state.support.note}</p> : null}\n\n <section className={styles.group} aria-labelledby={`${titleId}-terminal`}>\n <h3 id={`${titleId}-terminal`} className={styles.groupTitle}>Terminal</h3>\n <Segmented<VerseAgentTerminalMode>\n aria-labelledby={`${titleId}-terminal`}\n size=\"sm\"\n block\n value={grant?.terminal ?? 'off'}\n onChange={(terminal) => void change({ terminal })}\n options={[\n { value: 'off', label: 'Off', disabled },\n { value: 'agent', label: 'Agent tabs', disabled },\n { value: 'shared', label: 'Share my shells', disabled },\n ]}\n />\n <p className={styles.quiet}>{TERMINAL_HELP[grant?.terminal ?? 'off']}</p>\n </section>\n\n <section className={styles.group} aria-labelledby={`${titleId}-browser`}>\n <h3 id={`${titleId}-browser`} className={styles.groupTitle}>Browser</h3>\n <Segmented<VerseAgentBrowserMode>\n aria-labelledby={`${titleId}-browser`}\n size=\"sm\"\n block\n value={grant?.browser ?? 'off'}\n onChange={(browser) => void change({ browser })}\n options={[\n { value: 'off', label: 'Off', disabled },\n { value: 'look', label: 'Look', disabled },\n { value: 'act-localhost', label: 'Act: localhost', disabled },\n { value: 'act-allowed', label: 'Act: allowed sites', disabled },\n ]}\n />\n <p className={styles.quiet}>{BROWSER_HELP[grant?.browser ?? 'off']}</p>\n {act ? (\n <Switch checked={grant?.browserScript === true} disabled={disabled}\n onChange={(browserScript) => void change({ browserScript })}\n label=\"Allow page scripts (run JavaScript in the page)\" />\n ) : null}\n </section>\n\n <section className={styles.group} aria-labelledby={`${titleId}-computer`}>\n <h3 id={`${titleId}-computer`} className={styles.groupTitle}>Computer</h3>\n <Segmented<VerseAgentComputerMode>\n aria-labelledby={`${titleId}-computer`}\n size=\"sm\"\n block\n value={grant?.computer ?? 'off'}\n onChange={(computer) => void change({ computer })}\n options={[\n { value: 'off', label: 'Off', disabled },\n { value: 'apps', label: 'Listed apps', disabled },\n ]}\n />\n {grant?.computer === 'apps' ? (\n <form className={styles.apps} onSubmit={(event) => {\n event.preventDefault();\n void change({ computerApps: apps.split(',').map((a) => a.trim()).filter(Boolean) });\n }}>\n <label className={styles.quiet} htmlFor={`${titleId}-apps`}>Apps the agent may see and drive (comma-separated)</label>\n <div className={styles.appsRow}>\n <input id={`${titleId}-apps`} className={styles.input} value={apps} disabled={disabled}\n placeholder=\"Simulator, Xcode\" onChange={(event) => setApps(event.target.value)} />\n <button type=\"submit\" className={styles.smallButton} disabled={disabled}>Save</button>\n </div>\n </form>\n ) : (\n <p className={styles.quiet}>The agent cannot see or drive other apps.</p>\n )}\n </section>\n </div>\n </Sheet>\n <MutationTokenDialog {...gate.dialog} tokenLabel=\"Mutation token\" tokenHelp=\"the mutation token ashlr verse printed\" />\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-_izD07R9.js";import{t as r}from"./MutationTokenDialog-T3r9EtHi.js";import{j as i}from"./VerseShared-CFE5B-IY.js";import{n as a,t as o}from"./use-token-gate-DgnO9fbv.js";import{t as s}from"./agent-tools-client-Si2ncqwV.js";import{t as c}from"./AgentTools.module-CkjqeuMS.js";var l=e(n(),1),u=t(),d=2e3,f=1e4,p=5,m={ok:`done`,error:`failed`,denied:`denied`,pending:`running`};function h({sessionId:e,onOpenSheet:t,api:n=s,now:h=Date.now}){let g=a(),[_,v]=(0,l.useState)(!1),[y,b]=(0,l.useState)(`the agent`),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(null),[,T]=(0,l.useState)(0),E=(0,l.useCallback)(async()=>{try{let t=await n.state(e);v(t.scopes.length>0),b(t.seatLabel)}catch{}},[n,e]),D=(0,l.useCallback)(async()=>{try{S(await n.activity(e))}catch{}},[n,e]);(0,l.useEffect)(()=>{E()},[E]),i(()=>{E()},f),(0,l.useEffect)(()=>{_&&D()},[_,D]),i(()=>{D(),T(e=>e+1)},d,{enabled:_});let O=async(t,r)=>{try{await g.run(`Answer the agent's request`,()=>n.confirm(e,t,r).then(()=>!0))&&(S(e=>e&&{...e,pending:e.pending.filter(e=>e.id!==t)}),w(null))}catch(e){w(o(e))}D()},k=async e=>{try{await g.run(`Hand the terminal back to the agent`,()=>n.resume(e).then(()=>!0)),w(null)}catch(e){w(o(e))}D()},A=x?.pending??[],j=(x?.tabs??[]).filter(e=>e.takenOverAt!==null),M=(x?.actions??[]).slice(0,p);return!_&&A.length===0?(0,u.jsx)(r,{...g.dialog,tokenLabel:`Mutation token`,tokenHelp:`the mutation token ashlr verse printed`}):(0,u.jsxs)(`div`,{className:c.strip,"data-testid":`agent-tools-strip`,children:[C?(0,u.jsx)(`p`,{className:c.error,role:`alert`,children:C}):null,A.map(e=>{let t=Math.max(0,Math.round((Date.parse(e.expiresAt)-h())/1e3));return(0,u.jsxs)(`div`,{className:c.confirm,role:`alertdialog`,"aria-labelledby":`${e.id}-title`,"aria-describedby":`${e.id}-why`,children:[(0,u.jsxs)(`div`,{className:c.confirmText,children:[(0,u.jsxs)(`span`,{id:`${e.id}-title`,className:c.confirmTitle,children:[y,` wants to run`]}),(0,u.jsx)(`code`,{className:c.command,children:e.command}),(0,u.jsxs)(`span`,{id:`${e.id}-why`,className:c.quiet,children:[e.reason,` · `,t,`s left`]})]}),(0,u.jsxs)(`div`,{className:c.confirmActions,children:[(0,u.jsx)(`button`,{type:`button`,className:c.smallButton,onClick:()=>void O(e.id,`once`),children:`Allow once`}),e.rule.startsWith(`terminal-run-`)?null:(0,u.jsx)(`button`,{type:`button`,className:c.smallButton,onClick:()=>void O(e.id,`chat`),title:`Allow commands like this for the rest of this chat`,children:`Allow for chat`}),(0,u.jsx)(`button`,{type:`button`,className:`${c.smallButton} ${c.deny}`,onClick:()=>void O(e.id,`deny`),children:`Deny`})]})]},e.id)}),j.map(e=>(0,u.jsxs)(`div`,{className:c.takeover,role:`status`,children:[(0,u.jsxs)(`span`,{children:[`You took over terminal `,e.tabId,`. `,y,` is paused there.`]}),(0,u.jsx)(`button`,{type:`button`,className:c.smallButton,onClick:()=>void k(e.tabId),children:`Resume agent`})]},e.tabId)),_?(0,u.jsxs)(`div`,{className:c.actions,"aria-label":`${y}'s recent actions`,children:[(0,u.jsx)(`button`,{type:`button`,className:c.toolsChip,onClick:t,title:`Agent tools for this chat`,children:`Agent tools on`}),M.length===0?(0,u.jsx)(`span`,{className:c.quiet,children:`No actions yet.`}):null,M.map(e=>(0,u.jsxs)(`span`,{className:c.action,"data-outcome":e.outcome,title:`${e.tool} · ${e.at}`,children:[(0,u.jsx)(`span`,{className:c.actionTool,children:e.tool.replace(/^terminal_/,``).replace(/^browser_/,`browser `)}),(0,u.jsx)(`span`,{className:c.actionSummary,children:e.summary}),(0,u.jsx)(`span`,{className:c.actionOutcome,children:m[e.outcome]})]},e.id))]}):null,(0,u.jsx)(r,{...g.dialog,tokenLabel:`Mutation token`,tokenHelp:`the mutation token ashlr verse printed`})]})}export{h as AgentToolsStrip};
2
+ //# sourceMappingURL=AgentToolsStrip-CSus9Dr3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentToolsStrip-CSus9Dr3.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/agent-tools/AgentToolsStrip.tsx"],"sourcesContent":["/**\n * routes/verse/agent-tools/AgentToolsStrip.tsx — above the composer, while a\n * chat has agent tools on (3.15):\n *\n * - a destructive command waiting for you: the command, why it asks, the\n * seconds left, and [Allow once] [Allow for chat] [Deny] — no answer in\n * 120 s is a refusal the agent is told about;\n * - a terminal you took over (you typed in a tab the agent was driving):\n * [Resume agent] hands it back;\n * - the agent's recent actions, newest first.\n *\n * Polls the chat's activity every 2 s only while tools are on and the chat is\n * visible; renders nothing otherwise. Loaded lazily.\n */\nimport { useCallback, useEffect, useState } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport type { VerseAgentAction, VerseAgentToolsActivity, VerseMcpConfirmAnswer } from '../../../../core/verse/verse-mcp-types.js';\nimport { describeContextError, useTokenGate } from '../context/use-token-gate.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { agentToolsApi, type AgentToolsApi } from './agent-tools-client.js';\nimport styles from './AgentTools.module.css';\n\nexport const AGENT_TOOLS_ACTIVITY_POLL_MS = 2_000;\nexport const AGENT_TOOLS_STATE_POLL_MS = 10_000;\nconst SHOWN_ACTIONS = 5;\n\nexport interface AgentToolsStripProps {\n sessionId: string;\n /** Opens the Agent tools sheet. */\n onOpenSheet?: () => void;\n api?: AgentToolsApi;\n now?: () => number;\n}\n\nconst OUTCOME_WORD: Record<VerseAgentAction['outcome'], string> = { ok: 'done', error: 'failed', denied: 'denied', pending: 'running' };\n\nexport function AgentToolsStrip({ sessionId, onOpenSheet, api = agentToolsApi, now = Date.now }: AgentToolsStripProps) {\n const gate = useTokenGate();\n const [enabled, setEnabled] = useState(false);\n const [seat, setSeat] = useState('the agent');\n const [activity, setActivity] = useState<VerseAgentToolsActivity | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [, setTick] = useState(0);\n\n const loadState = useCallback(async () => {\n try {\n const state = await api.state(sessionId);\n setEnabled(state.scopes.length > 0);\n setSeat(state.seatLabel);\n } catch { /* the strip is optional: a failed read shows nothing */ }\n }, [api, sessionId]);\n\n const loadActivity = useCallback(async () => {\n try {\n setActivity(await api.activity(sessionId));\n } catch { /* keep the last answer */ }\n }, [api, sessionId]);\n\n useEffect(() => { void loadState(); }, [loadState]);\n usePollWhileVisible(() => { void loadState(); }, AGENT_TOOLS_STATE_POLL_MS);\n useEffect(() => { if (enabled) void loadActivity(); }, [enabled, loadActivity]);\n usePollWhileVisible(() => { void loadActivity(); setTick((t) => t + 1); }, AGENT_TOOLS_ACTIVITY_POLL_MS, { enabled });\n\n const answer = async (id: string, value: VerseMcpConfirmAnswer) => {\n try {\n const done = await gate.run('Answer the agent\\'s request', () => api.confirm(sessionId, id, value).then(() => true));\n if (done) {\n setActivity((prev) => (prev ? { ...prev, pending: prev.pending.filter((p) => p.id !== id) } : prev));\n setError(null);\n }\n } catch (err) {\n setError(describeContextError(err));\n }\n void loadActivity();\n };\n\n const resume = async (tabId: string) => {\n try {\n await gate.run('Hand the terminal back to the agent', () => api.resume(tabId).then(() => true));\n setError(null);\n } catch (err) {\n setError(describeContextError(err));\n }\n void loadActivity();\n };\n\n const pending = activity?.pending ?? [];\n const takenOver = (activity?.tabs ?? []).filter((t) => t.takenOverAt !== null);\n const actions = (activity?.actions ?? []).slice(0, SHOWN_ACTIONS);\n if (!enabled && pending.length === 0) return <MutationTokenDialog {...gate.dialog} tokenLabel=\"Mutation token\" tokenHelp=\"the mutation token ashlr verse printed\" />;\n\n return (\n <div className={styles.strip} data-testid=\"agent-tools-strip\">\n {error ? <p className={styles.error} role=\"alert\">{error}</p> : null}\n {pending.map((p) => {\n const left = Math.max(0, Math.round((Date.parse(p.expiresAt) - now()) / 1000));\n return (\n <div key={p.id} className={styles.confirm} role=\"alertdialog\" aria-labelledby={`${p.id}-title`} aria-describedby={`${p.id}-why`}>\n <div className={styles.confirmText}>\n <span id={`${p.id}-title`} className={styles.confirmTitle}>{seat} wants to run</span>\n <code className={styles.command}>{p.command}</code>\n <span id={`${p.id}-why`} className={styles.quiet}>{p.reason} · {left}s left</span>\n </div>\n <div className={styles.confirmActions}>\n <button type=\"button\" className={styles.smallButton} onClick={() => void answer(p.id, 'once')}>Allow once</button>\n {!p.rule.startsWith('terminal-run-') ? <button type=\"button\" className={styles.smallButton} onClick={() => void answer(p.id, 'chat')}\n title=\"Allow commands like this for the rest of this chat\">Allow for chat</button> : null}\n <button type=\"button\" className={`${styles.smallButton} ${styles.deny}`} onClick={() => void answer(p.id, 'deny')}>Deny</button>\n </div>\n </div>\n );\n })}\n {takenOver.map((t) => (\n <div key={t.tabId} className={styles.takeover} role=\"status\">\n <span>You took over terminal {t.tabId}. {seat} is paused there.</span>\n <button type=\"button\" className={styles.smallButton} onClick={() => void resume(t.tabId)}>Resume agent</button>\n </div>\n ))}\n {enabled ? (\n <div className={styles.actions} aria-label={`${seat}'s recent actions`}>\n <button type=\"button\" className={styles.toolsChip} onClick={onOpenSheet} title=\"Agent tools for this chat\">Agent tools on</button>\n {actions.length === 0 ? <span className={styles.quiet}>No actions yet.</span> : null}\n {actions.map((a) => (\n <span key={a.id} className={styles.action} data-outcome={a.outcome} title={`${a.tool} · ${a.at}`}>\n <span className={styles.actionTool}>{a.tool.replace(/^terminal_/, '').replace(/^browser_/, 'browser ')}</span>\n <span className={styles.actionSummary}>{a.summary}</span>\n <span className={styles.actionOutcome}>{OUTCOME_WORD[a.outcome]}</span>\n </span>\n ))}\n </div>\n ) : null}\n <MutationTokenDialog {...gate.dialog} tokenLabel=\"Mutation token\" tokenHelp=\"the mutation token ashlr verse printed\" />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-_izD07R9.js";import{W as r,l as i,o as a}from"./global-CYfRwH6t.js";import{S as o,b as s,w as c}from"./VerseShared-CFE5B-IY.js";import{n as l}from"./verse-bootstrap-query-ANtL2OPN.js";import{a as u,f as ee,i as te,o as d,p as f,r as p,u as ne}from"./VerseMobileApp-CrCDQcw5.js";import{C as m,b as h,h as g,u as _}from"./verse-model-DAOz9LrY.js";import{r as v}from"./sidebar-model-COzIPSiP.js";import{i as y,n as b}from"./use-chat-activity-O8I0Ho0m.js";import{c as x,i as S,n as C,o as w,r as T,t as E}from"./ui-parts-CcpmRBwj.js";import{o as D}from"./agent-transcript-model-D-34Ll59.js";var O=e(n(),1),k=[{id:`working`,label:`Working`,empty:`No agent is running right now.`},{id:`needs-you`,label:`Needs you`,empty:`No agent is waiting on you.`},{id:`review`,label:`Ready for review`,empty:`Nothing new to review.`},{id:`done`,label:`Done`,empty:`No finished agents yet.`}];function A(e){return e.status.kind===`running`?`working`:e.needsYou||e.status.kind===`failed`?`needs-you`:e.status.kind===`unread`?`review`:`done`}function j(e){let t=v({sessions:e.sessions,projects:e.projects,query:``,filter:`all`,activity:e.activity,meta:e.meta,localSeen:e.localSeen,selectedId:null}),n=new Map(k.map(e=>[e.id,[]]));for(let e of t.groups)for(let t of e.rows)t.archived||n.get(A(t)).push(t);let r=(e,t)=>t.session.updatedAt.localeCompare(e.session.updatedAt);return k.map(e=>({...e,rows:n.get(e.id).sort(r)}))}function M(e){let t={working:0,"needs-you":0,review:0,done:0};for(let n of e)t[n.id]=n.rows.length;return t}var N={chipCount:`_chipCount_qaw2j_3`,columnTitle:`_columnTitle_qaw2j_9`,who:`_who_qaw2j_19`,status:`_status_qaw2j_20`,failed:`_failed_qaw2j_29`},P=t(),F={working:`Working`,"needs-you":`Needs you`,review:`Review`,done:`Done`};function I(e){for(let t of k)if(e[t.id]>0)return t.id;return null}function L(e,t,n=Date.now()){let{status:r}=e;switch(r.kind){case`running`:{let i=t?.live??null,a=i?.tool?`Using ${i.tool}`:e.live?.text??`Working`,o=r.startedAt?Date.parse(r.startedAt):NaN,s=Number.isFinite(o)?D(n-o):null;return s?`${a} · ${s}`:a}case`failed`:return`Failed`;case`unread`:return`${r.newTurns} new ${r.newTurns===1?`turn`:`turns`}`;case`time`:{if(e.needsYou)return`Waiting on you`;let t=_(r.at,n);return t?t===`now`?`Just now`:/^\d+[mhd]$/.test(t)?`${t} ago`:t:`unknown`}}}function R(e,t){switch(t){case`working`:return{tone:`running`,label:`Working`,pulse:!0};case`needs-you`:return e.status.kind===`failed`?{tone:`danger`,label:`Failed`,pulse:!1}:{tone:`warning`,label:`Needs you`,pulse:!1};case`review`:return{tone:`info`,label:`New`,pulse:!1};case`done`:return{tone:`neutral`,label:`Done`,pulse:!1}}}function z(){return Promise.all([r(c.key,()=>c.fetch(),!0),r(s.key,()=>s.fetch(),!0),r(o.key,()=>o.fetch(),!0)])}function B(){let{permissions:e,reachability:t,navigate:n,refreshActivity:r}=f(),o=i(c),s=i(l),{activity:_,meta:v,localSeen:D}=b(),[A,B]=(0,O.useState)(null);(0,O.useEffect)(()=>y(),[]);let V=o.data??s.data?.sessions??null,H=s.data?.projects,U=s.data?.seats,W=(0,O.useMemo)(()=>V?j({sessions:V,projects:H??[],activity:_,meta:v,localSeen:D}):null,[V,H,_,v,D]),G=W?M(W):null,K=A??(G?I(G):null)??`working`,q=W?.find(e=>e.id===K)??null,J=(0,O.useMemo)(()=>new Map((_?.running??[]).map(e=>[e.sessionId,e])),[_]),Y=ee(e),X=t===`offline`||t===`unreachable`,re=G?G.working+G[`needs-you`]+G.review+G.done:0,Z=(0,O.useCallback)(()=>Promise.all([z(),r()]),[r]),ie=(0,O.useCallback)(()=>void Z().catch(()=>void 0),[Z]),Q=(0,O.useCallback)(()=>n({screen:`new`}),[n]),ae=Y?(0,P.jsxs)(p,{variant:`plain`,onClick:Q,disabled:X,"aria-label":`New agent`,children:[(0,P.jsx)(ne,{size:18}),(0,P.jsx)(`span`,{children:`New`})]}):null,$;return $=!V||!W||!G?o.status===`error`?(0,P.jsx)(S,{title:`Couldn’t load your agents`,reason:a(o.error),onRetry:ie}):(0,P.jsx)(u,{rows:4,label:`Loading agents`}):re===0?(0,P.jsx)(T,{title:`No agents yet`,body:`Chats you start here or on your Mac show up here, grouped by what they need from you.`,action:Y?(0,P.jsx)(p,{variant:`primary`,onClick:Q,disabled:X,children:`+ New agent`}):void 0}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:x.chips,role:`group`,"aria-label":`Show agents`,children:k.map(e=>(0,P.jsxs)(`button`,{type:`button`,className:x.chip,"aria-pressed":e.id===K,onClick:()=>B(e.id),children:[F[e.id],` `,(0,P.jsx)(`span`,{className:N.chipCount,children:G[e.id]})]},e.id))}),(0,P.jsx)(`h2`,{className:N.columnTitle,children:q?.label??``}),q&&q.rows.length>0?(0,P.jsx)(`div`,{className:x.group,children:q.rows.map(e=>{let t=e.session,r=R(e,q.id),i=[m(U??[],t),g(U??[],t),h(t.projectPath,H??[])].filter(Boolean).join(` · `);return(0,P.jsx)(w,{title:t.title||`Untitled chat`,subtitle:(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`span`,{className:N.who,children:i}),(0,P.jsx)(`span`,{className:d(N.status,e.status.kind===`failed`&&N.failed),children:L(e,J.get(t.id))})]}),trailing:(0,P.jsx)(E,{tone:r.tone,dot:r.tone===`running`,pulse:r.pulse,children:r.label}),onClick:()=>n({screen:`agent`,id:t.id,pane:`transcript`})},t.id)})}):(0,P.jsx)(T,{title:q?.empty??`Nothing here.`})]}),(0,P.jsxs)(te,{title:`Agents`,large:!0,trailing:ae,onRefresh:Z,label:`Agents`,children:[X?(0,P.jsx)(C,{tone:`warning`,children:t===`offline`?`You’re offline. This is the last list your phone saw; starting agents resumes when you reconnect.`:`Can’t reach your Mac. This is the last list your phone saw; starting agents resumes when it answers.`}):null,V&&o.status===`error`?(0,P.jsxs)(C,{tone:`warning`,children:[`Couldn’t refresh the list: `,a(o.error)]}):null,$]})}export{B as AgentsScreen,F as CHIP_LABEL,R as agentBadge,L as agentStatusLine,I as defaultColumn};
2
+ //# sourceMappingURL=AgentsScreen-WoR0oSLZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentsScreen-WoR0oSLZ.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/chat/agents-board-model.ts","../../../../../../src/web-ui/routes/verse/mobile/screens/AgentsScreen.module.css","../../../../../../src/web-ui/routes/verse/mobile/screens/AgentsScreen.tsx"],"sourcesContent":["/**\n * routes/verse/chat/agents-board-model.ts — every chat on a four-column\n * board: Working / Needs you / Ready for review / Done. Pure.\n *\n * Built ON the chat list's own row model (sidebar-model.ts buildSidebar), so\n * \"running\", \"needs you\", \"unread\" and \"failed\" mean exactly what the chat\n * list's dots mean — one definition, however many surfaces draw it (the\n * phone's Agents tab today; the workbench's Agents board can read the same\n * function):\n *\n * Working the chat is running a turn (engine status or activity)\n * Needs you a Needs-you item points at it, or its last turn failed\n * Ready for review finished turns the operator has not opened yet\n * Done everything else that is not archived\n *\n * A chat sits in exactly ONE column, checked in that order: a running chat\n * that also has a question for you is Working (it is still moving); its\n * question is in Needs you's own list regardless. Archived chats are left\n * out. Each column is newest first.\n */\nimport type { VerseProject, VerseSession } from '../../../data/api-types.js';\nimport type { VerseActivityResponse, VerseSessionMetaResponse } from '../../../../core/verse/workbench-types.js';\nimport { buildSidebar, type SidebarRow } from './sidebar-model.js';\n\nexport type AgentColumnId = 'working' | 'needs-you' | 'review' | 'done';\n\nexport const AGENT_COLUMNS: ReadonlyArray<{ id: AgentColumnId; label: string; empty: string }> = [\n { id: 'working', label: 'Working', empty: 'No agent is running right now.' },\n { id: 'needs-you', label: 'Needs you', empty: 'No agent is waiting on you.' },\n { id: 'review', label: 'Ready for review', empty: 'Nothing new to review.' },\n { id: 'done', label: 'Done', empty: 'No finished agents yet.' },\n];\n\nexport interface AgentColumn {\n id: AgentColumnId;\n label: string;\n empty: string;\n rows: SidebarRow[];\n}\n\nexport interface AgentsBoardInput {\n sessions: readonly VerseSession[];\n projects: readonly VerseProject[];\n activity: VerseActivityResponse | null;\n meta: VerseSessionMetaResponse | null;\n localSeen: ReadonlyMap<string, number>;\n}\n\nexport function columnOf(row: SidebarRow): AgentColumnId {\n if (row.status.kind === 'running') return 'working';\n if (row.needsYou || row.status.kind === 'failed') return 'needs-you';\n if (row.status.kind === 'unread') return 'review';\n return 'done';\n}\n\nexport function buildAgentsBoard(input: AgentsBoardInput): AgentColumn[] {\n const model = buildSidebar({\n sessions: input.sessions,\n projects: input.projects,\n query: '',\n filter: 'all',\n activity: input.activity,\n meta: input.meta,\n localSeen: input.localSeen,\n selectedId: null,\n });\n const byColumn = new Map<AgentColumnId, SidebarRow[]>(AGENT_COLUMNS.map((c) => [c.id, []]));\n for (const group of model.groups) {\n for (const row of group.rows) {\n if (row.archived) continue;\n byColumn.get(columnOf(row))!.push(row);\n }\n }\n const newest = (a: SidebarRow, b: SidebarRow) => b.session.updatedAt.localeCompare(a.session.updatedAt);\n return AGENT_COLUMNS.map((c) => ({ ...c, rows: byColumn.get(c.id)!.sort(newest) }));\n}\n\n/** Column counts, for a tab badge or a summary line. */\nexport function boardCounts(columns: readonly AgentColumn[]): Record<AgentColumnId, number> {\n const out: Record<AgentColumnId, number> = { working: 0, 'needs-you': 0, review: 0, done: 0 };\n for (const c of columns) out[c.id] = c.rows.length;\n return out;\n}\n","/* routes/verse/mobile/screens/AgentsScreen.module.css — the Agents tab's chip counts, column title and two-line rows. */\n\n.chipCount {\n margin-left: var(--space-1);\n color: var(--text-secondary);\n font-variant-numeric: tabular-nums;\n}\n\n.columnTitle {\n font-family: var(--font-display);\n margin: var(--space-5) var(--space-2) var(--space-2);\n color: var(--text-secondary);\n font-size: 0.8em;\n font-weight: var(--font-weight-semibold);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n}\n\n.who,\n.status {\n display: block;\n min-width: 0;\n}\n\n.status {\n color: var(--text-tertiary);\n}\n\n.failed {\n color: var(--status-danger-fg);\n}\n","/**\n * routes/verse/mobile/screens/AgentsScreen.tsx — the Agents tab: every chat,\n * grouped the way the operator acts on them — Working / Needs you / Ready\n * for review / Done — one column at a time behind a chip row.\n *\n * The grouping is the workbench's own (chat/agents-board-model.ts over the\n * chat list's row model), fed by the same reads the Mac's chat list uses:\n *\n * sessions GET /api/verse/sessions (verseSessionsQuery; the bootstrap's\n * copy until it answers), refreshed by the verse-sessions SSE\n * digest (openVerseListChannel)\n * activity useChatActivity() — who is running and what they are doing,\n * the Needs-you items, read state (polls every 5 s while visible)\n *\n * So a chat is \"Working\" here exactly when its dot pulses on the Mac.\n */\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { VerseActivityRunning } from '../../../../../core/verse/workbench-types.js';\nimport { refetchQuery } from '../../../../data/cache.js';\nimport { readFailureReason } from '../../../../data/client.js';\nimport { useQuery } from '../../../../data/hooks.js';\nimport { AGENT_COLUMNS, boardCounts, buildAgentsBoard, type AgentColumnId } from '../../chat/agents-board-model.js';\nimport type { SidebarRow } from '../../chat/sidebar-model.js';\nimport { useChatActivity } from '../../chat/use-chat-activity.js';\nimport { verseBootstrapQuery } from '../../verse-bootstrap-query.js';\nimport { openVerseListChannel } from '../../verse-events.js';\nimport { formatRelative, modelLabel, projectName, seatLabel } from '../../verse-model.js';\nimport { verseActivityQuery, verseSessionMetaQuery, verseSessionsQuery } from '../../verse-queries.js';\nimport { canShowActions, useMobile } from '../mobile-context.js';\nimport { PlusGlyph } from '../mobile-icons.js';\nimport { Button, Screen, SkeletonList, cx } from '../ui.js';\nimport { Badge, Banner, EmptyState, ErrorState, Row, ui, type Tone } from '../ui-parts.js';\nimport { shortElapsed } from './agent-transcript-model.js';\nimport styles from './AgentsScreen.module.css';\n\n/** The chip's short name (the board's own label is the long one). */\nexport const CHIP_LABEL: Readonly<Record<AgentColumnId, string>> = {\n working: 'Working',\n 'needs-you': 'Needs you',\n review: 'Review',\n done: 'Done',\n};\n\n/** The column shown when the operator has not picked one: the first with anything in it. */\nexport function defaultColumn(counts: Readonly<Record<AgentColumnId, number>>): AgentColumnId | null {\n for (const c of AGENT_COLUMNS) if (counts[c.id] > 0) return c.id;\n return null;\n}\n\n/**\n * The row's second line: what a running agent is doing and for how long,\n * \"Failed\", \"2 new turns\", or when it was last touched.\n */\nexport function agentStatusLine(row: SidebarRow, running: VerseActivityRunning | undefined, now: number = Date.now()): string {\n const { status } = row;\n switch (status.kind) {\n case 'running': {\n const live = running?.live ?? null;\n const doing = live?.tool ? `Using ${live.tool}` : row.live?.text ?? 'Working';\n const started = status.startedAt ? Date.parse(status.startedAt) : NaN;\n const span = Number.isFinite(started) ? shortElapsed(now - started) : null;\n return span ? `${doing} · ${span}` : doing;\n }\n case 'failed':\n return 'Failed';\n case 'unread':\n return `${status.newTurns} new ${status.newTurns === 1 ? 'turn' : 'turns'}`;\n case 'time': {\n if (row.needsYou) return 'Waiting on you';\n const rel = formatRelative(status.at, now);\n if (!rel) return 'unknown';\n if (rel === 'now') return 'Just now';\n return /^\\d+[mhd]$/.test(rel) ? `${rel} ago` : rel;\n }\n }\n}\n\nexport function agentBadge(row: SidebarRow, column: AgentColumnId): { tone: Tone; label: string; pulse: boolean } {\n switch (column) {\n case 'working':\n return { tone: 'running', label: 'Working', pulse: true };\n case 'needs-you':\n return row.status.kind === 'failed' ? { tone: 'danger', label: 'Failed', pulse: false } : { tone: 'warning', label: 'Needs you', pulse: false };\n case 'review':\n return { tone: 'info', label: 'New', pulse: false };\n case 'done':\n return { tone: 'neutral', label: 'Done', pulse: false };\n }\n}\n\n/** Pull-to-refresh: the list, activity and read state, forced fresh. */\nfunction refreshAgents(): Promise<unknown> {\n return Promise.all([\n refetchQuery(verseSessionsQuery.key, () => verseSessionsQuery.fetch(), true),\n refetchQuery(verseActivityQuery.key, () => verseActivityQuery.fetch(), true),\n refetchQuery(verseSessionMetaQuery.key, () => verseSessionMetaQuery.fetch(), true),\n ]);\n}\n\nexport function AgentsScreen() {\n const { permissions, reachability, navigate, refreshActivity } = useMobile();\n const sessionsQuery = useQuery(verseSessionsQuery);\n const boot = useQuery(verseBootstrapQuery);\n const { activity, meta, localSeen } = useChatActivity();\n const [picked, setPicked] = useState<AgentColumnId | null>(null);\n\n // The verse-sessions digest refreshes the list the moment a chat changes.\n useEffect(() => openVerseListChannel(), []);\n\n const sessions = sessionsQuery.data ?? boot.data?.sessions ?? null;\n const projects = boot.data?.projects;\n const seats = boot.data?.seats;\n const columns = useMemo(\n () => (sessions ? buildAgentsBoard({ sessions, projects: projects ?? [], activity, meta, localSeen }) : null),\n [sessions, projects, activity, meta, localSeen],\n );\n const counts = columns ? boardCounts(columns) : null;\n const selected = picked ?? (counts ? defaultColumn(counts) : null) ?? 'working';\n const column = columns?.find((c) => c.id === selected) ?? null;\n const runningById = useMemo(() => new Map((activity?.running ?? []).map((r) => [r.sessionId, r])), [activity]);\n\n const canAct = canShowActions(permissions);\n const disconnected = reachability === 'offline' || reachability === 'unreachable';\n const total = counts ? counts.working + counts['needs-you'] + counts.review + counts.done : 0;\n\n const refresh = useCallback(() => Promise.all([refreshAgents(), refreshActivity()]), [refreshActivity]);\n const retry = useCallback(() => void refresh().catch(() => undefined), [refresh]);\n const openNew = useCallback(() => navigate({ screen: 'new' }), [navigate]);\n\n const newButton = canAct ? (\n <Button variant=\"plain\" onClick={openNew} disabled={disconnected} aria-label=\"New agent\">\n <PlusGlyph size={18} />\n <span>New</span>\n </Button>\n ) : null;\n\n let body;\n if (!sessions || !columns || !counts) {\n body = sessionsQuery.status === 'error' ? (\n <ErrorState title=\"Couldn’t load your agents\" reason={readFailureReason(sessionsQuery.error)} onRetry={retry} />\n ) : (\n <SkeletonList rows={4} label=\"Loading agents\" />\n );\n } else if (total === 0) {\n body = (\n <EmptyState\n title=\"No agents yet\"\n body=\"Chats you start here or on your Mac show up here, grouped by what they need from you.\"\n action={canAct ? <Button variant=\"primary\" onClick={openNew} disabled={disconnected}>+ New agent</Button> : undefined}\n />\n );\n } else {\n body = (\n <>\n <div className={ui.chips} role=\"group\" aria-label=\"Show agents\">\n {AGENT_COLUMNS.map((c) => (\n <button\n key={c.id}\n type=\"button\"\n className={ui.chip}\n aria-pressed={c.id === selected}\n onClick={() => setPicked(c.id)}\n >\n {CHIP_LABEL[c.id]} <span className={styles.chipCount}>{counts[c.id]}</span>\n </button>\n ))}\n </div>\n <h2 className={styles.columnTitle}>{column?.label ?? ''}</h2>\n {column && column.rows.length > 0 ? (\n <div className={ui.group}>\n {column.rows.map((row) => {\n const s = row.session;\n const badge = agentBadge(row, column.id);\n const who = [seatLabel(seats ?? [], s), modelLabel(seats ?? [], s), projectName(s.projectPath, projects ?? [])].filter(Boolean).join(' · ');\n return (\n <Row\n key={s.id}\n title={s.title || 'Untitled chat'}\n subtitle={\n <>\n <span className={styles.who}>{who}</span>\n <span className={cx(styles.status, row.status.kind === 'failed' && styles.failed)}>{agentStatusLine(row, runningById.get(s.id))}</span>\n </>\n }\n trailing={<Badge tone={badge.tone} dot={badge.tone === 'running'} pulse={badge.pulse}>{badge.label}</Badge>}\n onClick={() => navigate({ screen: 'agent', id: s.id, pane: 'transcript' })}\n />\n );\n })}\n </div>\n ) : (\n <EmptyState title={column?.empty ?? 'Nothing here.'} />\n )}\n </>\n );\n }\n\n return (\n <Screen title=\"Agents\" large trailing={newButton} onRefresh={refresh} label=\"Agents\">\n {disconnected ? (\n <Banner tone=\"warning\">\n {reachability === 'offline'\n ? 'You’re offline. This is the last list your phone saw; starting agents resumes when you reconnect.'\n : 'Can’t reach your Mac. This is the last list your phone saw; starting agents resumes when it answers.'}\n </Banner>\n ) : null}\n {sessions && sessionsQuery.status === 'error' ? (\n <Banner tone=\"warning\">Couldn’t refresh the list: {readFailureReason(sessionsQuery.error)}</Banner>\n ) : null}\n {body}\n </Screen>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-_izD07R9.js";import{l as r,u as i}from"./global-CYfRwH6t.js";import{t as a}from"./Dialog-DI5D6Is2.js";import{t as o}from"./MutationTokenDialog-T3r9EtHi.js";import{A as s,K as c}from"./VerseConsoleApp-DO84Xscn.js";import{M as l,i as ee,j as u}from"./VerseShared-CFE5B-IY.js";import{n as d}from"./verse-bootstrap-query-ANtL2OPN.js";import{T as f,d as p,n as m}from"./verse-model-DAOz9LrY.js";import{t as h}from"./Segmented-BECZDbsg.js";import{n as g,t as _}from"./SeatSelector-DnpH5D_D.js";import{t as v}from"./Button-CMR_Op-0.js";import{n as te,t as y}from"./use-token-gate-DgnO9fbv.js";import{t as ne}from"./EmptyState-C3BUt2Ev.js";import{t as b}from"./Switch-mvc9lQcT.js";import{_ as x,a as S,c as C,d as w,f as T,g as E,h as re,i as ie,l as D,m as O,o as ae,p as k,r as A,s as j,t as M,u as N,v as P,y as F}from"./ChecksPanel-BGWgv8Zb.js";import{a as oe,i as I,n as L,r as R}from"./agents-focus-E_TBTTmZ.js";import{t as se}from"./Select-DjQDkPJU.js";import{t as z}from"./Input-CsSZI8QC.js";var B=e(n(),1),ce={repo:null,query:``,doneWithinMs:2592e5};function V(e,t,n){let r=t.query.trim().toLowerCase();return e.filter(e=>{if(t.repo&&e.repo!==t.repo||r&&![e.title,e.repo??``,e.branch??``,e.model??``,e.seatId??``,e.reasonText].some(e=>e.toLowerCase().includes(r)))return!1;if(e.column===`done`&&t.doneWithinMs!==null&&!e.pinned){let r=Date.parse(e.updatedAt);if(Number.isFinite(r)&&n-r>t.doneWithinMs)return!1}return!0})}function le(e){let t={working:[],"needs-you":[],review:[],done:[]};for(let n of e)t[n.column].push(n);return t}function ue(e){return[...new Set(e.map(e=>e.repo).filter(e=>!!e))].sort((e,t)=>e.localeCompare(t))}function H(e,t,n){let r=P.filter(t=>e[t].length>0);if(r.length===0)return null;if(!t||e[t.column].length===0)return{column:r[0],index:0};let i=e[t.column],a=Math.min(t.index,i.length-1);switch(n){case`up`:return{column:t.column,index:Math.max(0,a-1)};case`down`:return{column:t.column,index:Math.min(i.length-1,a+1)};case`first`:return{column:t.column,index:0};case`last`:return{column:t.column,index:i.length-1};case`left`:case`right`:{let i=r[r.indexOf(t.column)+(n===`left`?-1:1)];return i?{column:i,index:Math.min(a,e[i].length-1)}:{column:t.column,index:a}}}}function de(e,t){return t?e[t.column][t.index]??null:null}function fe(e,t){for(let n of P){let r=e[n].findIndex(e=>e.id===t);if(r>=0)return{column:n,index:r}}return null}function pe(e,t){return e.filter(e=>(!t||t.has(e.id))&&e.column!==`needs-you`&&e.unread&&e.sessionId).map(e=>e.id)}function U(e,t){if(!e)return null;let n=Date.parse(e);if(!Number.isFinite(n))return null;let r=Math.max(0,Math.round((t-n)/1e3));if(r<60)return`${r}s`;let i=Math.floor(r/60);if(i<60)return`${i}m ${String(r%60).padStart(2,`0`)}s`;let a=Math.floor(i/60);return a<24?`${a}h ${String(i%60).padStart(2,`0`)}m`:`${Math.floor(a/24)}d ${a%24}h`}function me(e,t){if(!e)return``;let n=Date.parse(e);if(!Number.isFinite(n))return``;let r=Math.max(0,Math.round((t-n)/1e3));if(r<45)return`just now`;let i=Math.round(r/60);if(i<60)return`${i}m ago`;let a=Math.round(i/60);return a<48?`${a}h ago`:`${Math.round(a/24)}d ago`}function W(e){return e>=100?`$${Math.round(e)}`:e>=10?`$${e.toFixed(1)}`:`$${e.toFixed(2)}`}function he(e){return e.usd===null?e.tokens>0?`${K(e.tokens)} tokens`:`—`:e.capUsd===null?W(e.usd):`${W(e.usd)} of ${W(e.capUsd)}`}function G(e){return e.fraction===null?`neutral`:e.fraction>=1?`danger`:e.fraction>=.8?`warning`:`neutral`}function K(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}function ge(e){let t=e.checks;if(!t)return null;if(!t.pr)return t.ci===`unknown`?null:t.dirty>0?`${t.dirty} uncommitted`:t.ahead>0?`${t.ahead} ahead`:null;let n=t.pr.state===`merged`?`merged`:t.pr.state===`closed`?`closed`:t.ci===`passing`?`green`:t.ci===`failing`?`red`:t.ci===`pending`?`running`:`no checks`;return`#${t.pr.number} ${n}`}function q(e){let t=[];for(let n of p(e))for(let e of n.seats){let n=f(e),r=e.models.find(e=>!(typeof e.unavailableReason==`string`&&e.unavailableReason.trim()));t.push({seatId:e.id,label:e.label,engine:e.engine,model:r?.id??null,modelLabel:r?.label??null,disabled:n??(r?null:`No model on this seat can run right now.`)})}return t}function J(e){if(!e.root)return{ok:!1,error:`Pick a repository.`};if(e.seats.length===0)return{ok:!1,error:`Pick at least one seat.`};if(e.seats.length>6)return{ok:!1,error:`At most 6 seats at once.`};if(e.seats.length>1&&!e.isolate)return{ok:!1,error:`Several seats on one task each need their own workspace.`};if(!e.prompt.trim())return{ok:!1,error:`Say what the agent should do.`};if(e.autoMerge&&!e.isolate)return{ok:!1,error:`Auto-merge needs the agent in its own workspace (its own branch).`};let t=e.capText.trim().replace(/^\$/,``),n=null;if(t){let e=Number(t);if(!Number.isFinite(e)||e<=0||e>1e4)return{ok:!1,error:`The spend cap is a dollar amount above 0.`};n=Math.round(e*100)/100}return{ok:!0,cap:n}}function Y(e){let t=(e.trim().split(`
2
+ `)[0]?.trim()??``).replace(/[#*`>_]/g,``).trim();return t?t.length<=60?t:`${t.slice(0,57).replace(/\s+\S*$/,``)}…`:`Agent`}var X=t();function _e({card:e,now:t,busy:n,onClose:r,onChanged:i,act:a,onOpenChat:o,onOpenTerminal:s,onStop:c}){let[l,ee]=(0,B.useState)(e.reason===`ci-failed`||e.reason===`pr-open`?`checks`:`overview`),[u,d]=(0,B.useState)(e.plan?.text??``),[f,p]=(0,B.useState)(e.spend.capUsd===null?``:String(e.spend.capUsd)),m=e.agentId;(0,B.useEffect)(()=>{d(e.plan?.text??``)},[e.plan?.text]),(0,B.useEffect)(()=>{p(e.spend.capUsd===null?``:String(e.spend.capUsd))},[e.spend.capUsd]);let g=()=>{if(!m)return;let e=f.trim().replace(/^\$/,``),t=e===``?null:Number(e);t!==null&&(!Number.isFinite(t)||t<=0)||a(`cap`,`Change this agent’s spend cap`,async()=>(await x(m,{spendCapUsd:t}),t===null?`Spend cap removed.`:`Spend cap set to ${W(t)}.`))},_=[...e.scripts].reverse().find(e=>e.kind===`setup`)??null,te=e.scripts.filter(e=>e.kind===`run`&&e.state===`running`);return(0,X.jsxs)(`aside`,{className:A.details,"aria-label":`Details: ${e.title}`,children:[(0,X.jsxs)(`header`,{className:A.detailsHead,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h3`,{className:A.detailsTitle,children:e.title}),(0,X.jsx)(`p`,{className:A.muted,children:e.reasonText})]}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:r,"aria-label":`Close details`,children:`Close`})]}),(0,X.jsxs)(`div`,{className:A.detailsActions,children:[e.sessionId?(0,X.jsx)(v,{size:`sm`,variant:`subtle`,onClick:o,children:`Open chat`}):null,e.status===`running`?(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:c,children:`Stop`}):null,e.reason===`failed`?(0,X.jsx)(v,{size:`sm`,variant:`ghost`,busy:n===`resolve:${e.id}`,onClick:()=>void a(`resolve:${e.id}`,`Resolve this failed turn`,async()=>(await w(e.id),`Resolved: it leaves Needs you.`)),children:`Resolve`}):null,m&&!e.archived?(0,X.jsx)(v,{size:`sm`,variant:`ghost`,busy:n===`archive`,onClick:()=>void a(`archive`,`Archive this agent (snapshot, then remove its worktree)`,async()=>(await ae(m),r(),`Archived. Its snapshot is kept — Restore brings it back.`)),children:`Archive`}):null,m&&e.restorable?(0,X.jsx)(v,{size:`sm`,variant:`subtle`,busy:n===`restore`,onClick:()=>void a(`restore`,`Restore this agent’s workspace`,async()=>(await T(m),`Restored.`)),children:`Restore`}):null]}),(0,X.jsx)(h,{"aria-label":`Detail view`,value:l,onChange:e=>ee(e),options:[{value:`overview`,label:`Overview`},{value:`checks`,label:`Checks`}]}),l===`checks`?(0,X.jsx)(M,{cardId:e.id,onChanged:i}):(0,X.jsxs)(`div`,{className:A.overview,children:[(0,X.jsxs)(`dl`,{className:A.facts,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Seat`}),(0,X.jsxs)(`dd`,{children:[e.seatId??`—`,e.model?` · ${e.model}`:``]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Where`}),(0,X.jsxs)(`dd`,{className:A.mono,children:[e.repo??`—`,e.branch?` · ${e.branch}`:``]})]}),e.workspacePath?(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Workspace`}),(0,X.jsx)(`dd`,{className:A.mono,children:e.workspacePath})]}):null,e.ports?(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Ports`}),(0,X.jsx)(`dd`,{children:e.ports.count>0?`${e.ports.base}–${e.ports.base+e.ports.count-1} (ASHLR_PORT)`:`ASHLR_PORT=${e.ports.base}`})]}):null,(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Spend`}),(0,X.jsxs)(`dd`,{children:[he(e.spend),` `,(0,X.jsx)(`span`,{className:A.muted,children:`(API list price)`})]})]}),e.startedAt?(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Running for`}),(0,X.jsx)(`dd`,{children:U(e.startedAt,t)})]}):null]}),e.plan&&e.plan.state===`awaiting-approval`&&m?(0,X.jsxs)(`section`,{className:A.planBox,"aria-label":`Plan for approval`,children:[(0,X.jsx)(`h4`,{className:A.smallHead,children:`Plan — edit, then approve`}),(0,X.jsx)(`textarea`,{className:A.textarea,rows:12,value:u,onChange:e=>d(e.target.value)}),(0,X.jsxs)(`div`,{className:A.formActions,children:[(0,X.jsx)(v,{size:`sm`,variant:`ghost`,busy:n===`plan:discard`,onClick:()=>void a(`plan:discard`,`Discard this plan`,async()=>(await C(m,`discard`),`Plan discarded. Nothing was changed.`)),children:`Discard`}),(0,X.jsx)(v,{size:`sm`,variant:`primary`,busy:n===`plan:approve`,onClick:()=>void a(`plan:approve`,`Approve the plan: the seat starts making the changes`,async()=>(await C(m,`approve`,u),`Approved — the agent is carrying it out.`)),children:`Approve and run`})]})]}):e.plan?(0,X.jsxs)(`p`,{className:A.hint,children:[`Plan first: `,e.plan.state===`drafting`?`the seat is writing a plan.`:e.plan.state===`approved`?`plan approved.`:`on.`]}):null,e.heldPrompt&&m?(0,X.jsxs)(`section`,{className:A.held,children:[(0,X.jsx)(`p`,{className:A.hint,children:`The first prompt is held until setup finishes.`}),(0,X.jsxs)(`div`,{className:A.formActions,children:[(0,X.jsx)(v,{size:`sm`,variant:`ghost`,busy:n===`setup`,onClick:()=>void a(`setup`,`Run setup again`,async()=>(await k(m,`setup`),`Setup started again.`)),children:`Rerun setup`}),(0,X.jsx)(v,{size:`sm`,variant:`subtle`,busy:n===`send`,onClick:()=>void a(`send`,`Send the held prompt now, without setup`,async()=>(await O(m),`Sent.`)),children:`Send anyway`})]})]}):null,m&&e.workspacePath?(0,X.jsxs)(`section`,{"aria-label":`Scripts`,children:[(0,X.jsx)(`h4`,{className:A.smallHead,children:`Workspace scripts`}),(0,X.jsxs)(`div`,{className:A.scriptButtons,children:[e.runScripts.map((e,t)=>(0,X.jsxs)(v,{size:`sm`,variant:`subtle`,busy:n===`run:${t}`,onClick:()=>void a(`run:${t}`,`Run “${e}” in this workspace`,async()=>{let n=await k(m,`run`,t);return n.run.via===`terminal`&&s(),`${e} started${n.run.via===`terminal`?` in a terminal tab`:``}.`}),children:[`Run `,e]},e)),e.runScripts.length===0?(0,X.jsx)(`span`,{className:A.muted,children:`No run scripts in .ashlr/verse/workspace.json.`}):null]}),te.map(e=>(0,X.jsxs)(`div`,{className:A.runRow,children:[(0,X.jsxs)(`span`,{children:[e.name,` — running`,e.via===`terminal`?` in a terminal tab`:``]}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>void a(`stop:${e.id}`,`Stop ${e.name}`,async()=>(await E(m,e.id),`${e.name} stopped.`)),children:`Stop`})]},e.id)),_?(0,X.jsx)(Z,{agentId:m,run:_,onOpenTerminal:s}):null]}):null,m?(0,X.jsxs)(`section`,{className:A.capBox,"aria-label":`Spend cap`,children:[(0,X.jsx)(z,{label:`Spend cap (USD at API list price)`,size:`sm`,value:f,onChange:e=>p(e.target.value),placeholder:`none`,inputMode:`decimal`,hint:`Warns at 80%; at 100% the agent stops and takes no more turns until you raise it.`}),(0,X.jsx)(v,{size:`sm`,variant:`subtle`,onClick:g,busy:n===`cap`,children:`Save cap`}),(0,X.jsx)(b,{checked:e.pinned,onChange:e=>void a(`pin`,e?`Pin this agent`:`Unpin this agent`,async()=>(await x(m,{pinned:e}),null)),label:`Pinned (never auto-archived)`})]}):null,e.loopNote?(0,X.jsx)(`p`,{className:A.loopNote,role:`status`,children:e.loopNote}):null]})]})}function Z({agentId:e,run:t,onOpenTerminal:n}){let[r,i]=(0,B.useState)(null);(0,B.useEffect)(()=>{if(t.via!==`process`)return;let n=new AbortController,r=()=>D(e,t.id,n.signal).then(e=>i(e.text),()=>void 0);r();let a=t.state===`running`?setInterval(r,2e3):null;return()=>{n.abort(),a&&clearInterval(a)}},[e,t.id,t.via,t.state]);let a=t.state===`running`?`running`:t.state===`ok`?`finished`:`failed${t.exitCode===null?``:` (exit ${t.exitCode})`}`;return(0,X.jsxs)(`div`,{className:A.setupLog,children:[(0,X.jsxs)(`div`,{className:A.runRow,children:[(0,X.jsxs)(`span`,{children:[`Setup `,a]}),t.via===`terminal`?(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:n,children:`Show terminal`}):null]}),t.via===`process`&&r?(0,X.jsx)(`pre`,{className:A.log,children:r.slice(-8e3)}):null]})}function Q(e){let t=e.config,n=[];return n.push(t.setup?`setup: ${t.setup.length>40?`${t.setup.slice(0,40)}…`:t.setup}`:`no setup script`),t.run.length>0&&n.push(`${t.run.length} run button${t.run.length===1?``:`s`} (${t.run.map(e=>e.name).join(`, `)})`),t.copy.length>0&&n.push(`copies ${t.copy.join(`, `)} if present`),n.push(t.ports>0?`${t.ports} ports`:`no ports`),`${e.source===`file`?`.ashlr/verse/workspace.json`:`No workspace.json (defaults)`}: ${n.join(` · `)}`}function ve({open:e,multi:t,projects:n,seats:r,initialRoot:i,busy:o,error:s,onClose:c,onSpawn:l}){let ee=(0,B.useId)(),u=(0,B.useId)(),d=(0,B.useRef)(null),f=(0,B.useMemo)(()=>[...n].sort((e,t)=>Number(t.enrolled)-Number(e.enrolled)||e.name.localeCompare(t.name)),[n]),p=(0,B.useMemo)(()=>q(r),[r]),[h,te]=(0,B.useState)(``),[y,ne]=(0,B.useState)(null),[x,S]=(0,B.useState)(new Set),[C,w]=(0,B.useState)(``),[T,E]=(0,B.useState)(``),[re,ie]=(0,B.useState)(!0),[D,O]=(0,B.useState)(!1),[ae,k]=(0,B.useState)(``),[j,M]=(0,B.useState)(!1),[P,F]=(0,B.useState)(!1),[oe,I]=(0,B.useState)(null),[L,R]=(0,B.useState)(null),ce=(0,B.useRef)({initialRoot:i,sorted:f,seats:r});ce.current={initialRoot:i,sorted:f,seats:r},(0,B.useEffect)(()=>{if(!e)return;let t=ce.current;te(t.initialRoot&&t.sorted.some(e=>e.path===t.initialRoot)?t.initialRoot:t.sorted[0]?.path??``);let n=g(t.seats);ne(n),S(new Set(n?[n.seatId]:[])),w(``),E(``),ie(!0),O(!1),k(``),M(!1),F(!1),I(null)},[e]),(0,B.useEffect)(()=>{if(!e||!h)return;let t=new AbortController;return R(null),N(h,t.signal).then(e=>R(e),()=>R(null)),()=>t.abort()},[e,h]);let V=(0,B.useMemo)(()=>t?p.filter(e=>x.has(e.seatId)&&e.model&&!e.disabled).map(e=>({seatId:e.seatId,model:e.model})):y?[y]:[],[t,y,p,x]),le=e=>{e?.preventDefault();let n={root:h,title:C,prompt:T,seats:V,isolate:t?!0:re,planFirst:D,capText:ae,autoFix:j,autoMerge:P},r=J(n);if(!r.ok){I(r.error);return}I(null);let i=C.trim()||Y(T),a=e=>p.find(t=>t.seatId===e)?.label??e;l(V.map(e=>({root:h,seatId:e.seatId,model:e.model,title:V.length>1?`${i} · ${a(e.seatId)}`:i,prompt:T,isolate:n.isolate,planFirst:D,spendCapUsd:r.cap,autoFix:j,autoMerge:P})))},ue=e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),le())},H=V.length;return(0,X.jsx)(a,{open:e,onClose:c,titleId:ee,title:t?`Same task on several seats`:`New agent`,description:t?`Each seat gets its own workspace and branch, and the same prompt. Compare what comes back.`:`A chat with its own git worktree and branch, the repo’s setup, and its own ports.`,initialFocusRef:d,widthClassName:A.dialogWidth,children:(0,X.jsxs)(`form`,{className:A.form,onSubmit:le,children:[(0,X.jsxs)(se,{label:`Repository`,value:h,onChange:e=>te(e.target.value),disabled:o,children:[f.length===0?(0,X.jsx)(`option`,{value:``,children:`No projects yet — open one in Chat first`}):null,f.map(e=>(0,X.jsx)(`option`,{value:e.path,children:e.name},e.path))]}),L?(0,X.jsxs)(`p`,{className:A.hint,children:[Q(L),L.warnings.length?` — ${L.warnings[0]}`:``]}):null,t?(0,X.jsxs)(`fieldset`,{className:A.seatList,disabled:o,children:[(0,X.jsxs)(`legend`,{children:[`Seats (`,H,` of at most `,6,`)`]}),p.map(e=>(0,X.jsxs)(`label`,{className:A.seatRow,"data-disabled":e.disabled?!0:void 0,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:x.has(e.seatId),disabled:!!e.disabled,onChange:t=>S(n=>{let r=new Set(n);return t.target.checked?r.add(e.seatId):r.delete(e.seatId),r})}),(0,X.jsx)(`span`,{children:e.label}),(0,X.jsxs)(`span`,{className:A.muted,children:[m[e.engine],e.modelLabel?` · ${e.modelLabel}`:``]}),e.disabled?(0,X.jsxs)(`span`,{className:A.muted,children:[` — `,e.disabled]}):null]},e.seatId))]}):(0,X.jsx)(_,{seats:r,value:y,onChange:ne,disabled:o,label:`Seat`}),(0,X.jsxs)(`div`,{className:A.field,children:[(0,X.jsxs)(`label`,{htmlFor:u,className:A.fieldLabel,children:[`What should `,H>1?`they`:`it`,` do?`]}),(0,X.jsx)(`textarea`,{id:u,ref:d,className:A.textarea,rows:5,value:T,onChange:e=>E(e.target.value),onKeyDown:ue,placeholder:`Fix the login redirect loop and add a test for it.`,disabled:o})]}),(0,X.jsx)(z,{label:`Title (optional)`,value:C,onChange:e=>w(e.target.value),placeholder:T?Y(T):`From the prompt`,disabled:o}),(0,X.jsxs)(`div`,{className:A.options,children:[t?null:(0,X.jsx)(b,{checked:re,onChange:ie,label:`Own workspace (worktree + branch)`,disabled:o}),(0,X.jsx)(b,{checked:D,onChange:O,label:`Plan first — approve before it edits`,disabled:o}),(0,X.jsx)(b,{checked:j,onChange:M,label:`Auto-fix CI`,disabled:o}),(0,X.jsx)(b,{checked:P,onChange:F,label:`Auto-merge when green`,disabled:o||!t&&!re}),(0,X.jsx)(z,{label:`Spend cap (USD, at API list price)`,value:ae,onChange:e=>k(e.target.value),placeholder:`none`,inputMode:`decimal`,size:`sm`,hint:`Warns at 80%, stops the agent at 100%.`,disabled:o})]}),P?(0,X.jsx)(`p`,{className:A.hint,children:`Auto-merge squash-merges only a green, mergeable PR that touches no protected path (CI, manifests, lockfiles); ashlr-hub itself only when the grant’s self-land policy allows. GitHub’s branch rules still apply.`}):null,oe||s?(0,X.jsx)(`p`,{className:A.formError,role:`alert`,children:oe??s}):null,(0,X.jsxs)(`div`,{className:A.formActions,children:[(0,X.jsx)(v,{variant:`ghost`,onClick:c,disabled:o,children:`Cancel`}),(0,X.jsx)(v,{variant:`primary`,type:`submit`,busy:o,disabled:H===0||!h,children:H>1?`Start ${H} agents`:`Start agent`})]}),(0,X.jsxs)(`p`,{className:A.keyHint,children:[`⌘ Return starts `,H>1?`them`:`it`,`.`]})]})})}var ye={ArrowUp:`up`,k:`up`,ArrowDown:`down`,j:`down`,ArrowLeft:`left`,h:`left`,ArrowRight:`right`,l:`right`,Home:`first`,End:`last`};function be(e,t){let[n,r]=(0,B.useState)(()=>Date.now());return(0,B.useEffect)(()=>{if(!t)return;let n=setInterval(()=>r(Date.now()),e);return()=>clearInterval(n)},[e,t]),n}function xe(){let e=r(S),t=i(S);u(t,ie);let n=r(d),a=be(1e3,l()),f=te(),[p,m]=(0,B.useState)(ce),[h,g]=(0,B.useState)(null),[_,b]=(0,B.useState)(new Set),[x,C]=(0,B.useState)(null),[T,E]=(0,B.useState)({open:!1,multi:!1}),[D,O]=(0,B.useState)(!1),[ae,k]=(0,B.useState)(null),[M,N]=(0,B.useState)(null),[F,U]=(0,B.useState)(null),me=(0,B.useRef)(null),W=(0,B.useMemo)(()=>e.data?.cards??[],[e.data]),he=Math.floor(a/6e4),G=(0,B.useMemo)(()=>V(W,p,he*6e4),[W,p,he]),K=(0,B.useMemo)(()=>le(G),[G]),ge=(0,B.useMemo)(()=>ue(W),[W]),q=h?fe(K,h):null,J=x?W.find(e=>e.id===x)??null:null,Y=(0,B.useSyncExternalStore)(I,L,L);(0,B.useEffect)(()=>{Y&&(R(Y)&&(Y.kind===`new`||Y.kind===`new-multi`?(k(null),E({open:!0,multi:Y.kind===`new-multi`})):Y.cardId&&(g(Y.cardId),C(Y.cardId))),oe(Y.seq))},[Y]);let Z=(0,B.useCallback)(async(e,n,r)=>{U(e),N(null);try{let e=await f.run(n,r);e&&N({tone:`neutral`,text:e}),t()}catch(e){N({tone:`danger`,text:y(e)})}finally{U(null)}},[f,t]),Q=(e,t,n)=>{if(t.length===0){N({tone:`neutral`,text:e===`read`?`Nothing unread outside Needs you.`:`Nothing selected.`});return}Z(`bulk:${e}`,`${n} (${t.length})`,async()=>{let r=await j(e,t),i=r.filter(e=>e.ok).length,a=r.filter(e=>e.skipped).length,o=r.filter(e=>!e.ok&&!e.skipped);return e===`archive`&&b(new Set),`${n}: ${i} done${a?`, ${a} in Needs you left as they are`:``}${o.length?`, ${o.length} failed (${o[0].error})`:``}.`})},xe=e=>{O(!0),k(null),f.run(e.length>1?`Start ${e.length} agents`:`Start an agent`,async()=>{let t=[],n=null,r=0;for(let i of e)try{let e=await re(i);n??=e.agent.id,r+=e.archivedForCap.length}catch(e){t.push(`${i.title}: ${y(e)}`)}return{first:n,errors:t,archived:r,total:e.length}}).then(e=>{if(O(!1),!e)return;if(t(),e.errors.length===e.total){k(e.errors.join(` `));return}E({open:!1,multi:!1}),e.first&&g(e.first);let n=e.total-e.errors.length;N({tone:e.errors.length?`danger`:`neutral`,text:`Started ${n} agent${n===1?``:`s`}.${e.archived?` Archived ${e.archived} idle workspace${e.archived===1?``:`s`} to stay under the cap (restorable).`:``}${e.errors.length?` ${e.errors.join(` `)}`:``}`})},e=>{O(!1),k(y(e))})},Ce=e=>{e.sessionId&&s(e.sessionId)},we=e=>{if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey||e.target.closest(`input, textarea, select, [contenteditable="true"]`))return;let t=ye[e.key];if(t){e.preventDefault();let n=H(K,q,t),r=de(K,n);r&&(g(r.id),me.current?.querySelector(`[data-card-id="${CSS.escape(r.id)}"]`)?.focus());return}let n=de(K,q);if(n)switch(e.key){case`Enter`:e.preventDefault(),Ce(n);break;case` `:e.preventDefault(),C(e=>e===n.id?null:n.id);break;case`x`:e.preventDefault(),b(e=>{let t=new Set(e);return t.has(n.id)?t.delete(n.id):t.add(n.id),t});break;case`e`:e.preventDefault(),n.column===`needs-you`?N({tone:`neutral`,text:`Needs you is not cleared by marking read — resolve it (r) or act on it.`}):Q(`read`,pe([n]),`Mark read`);break;case`r`:n.reason===`failed`&&(e.preventDefault(),Z(`resolve:${n.id}`,`Resolve this failed turn`,async()=>(await w(n.id),null)));break;case`s`:(n.status===`running`||n.status===`setup`)&&(e.preventDefault(),Q(`stop`,[n.id],`Stop`));break;case`Escape`:(x||_.size)&&(e.preventDefault(),C(null),b(new Set))}},$=[..._].filter(e=>W.some(t=>t.id===e)),Te=e.data?.counts,Ee=n.data?.projects??[],De=n.data?.seats??[];return(0,X.jsxs)(`section`,{className:A.section,"aria-label":`Agents`,children:[(0,X.jsxs)(`header`,{className:A.header,children:[(0,X.jsxs)(`div`,{className:A.headerText,children:[(0,X.jsx)(`h2`,{className:A.title,children:`Agents`}),(0,X.jsxs)(`p`,{className:A.lede,children:[Te?`${Te.working} working · ${Te[`needs-you`]} need you · ${Te.review} ready for review`:`Every chat and agent, by what it needs.`,e.data?` · ${e.data.liveWorkspaces} of ${e.data.cap} workspaces`:``]})]}),(0,X.jsxs)(`div`,{className:A.headerActions,children:[(0,X.jsxs)(se,{"aria-label":`Repository`,size:`sm`,value:p.repo??``,onChange:e=>m(t=>({...t,repo:e.target.value||null})),children:[(0,X.jsx)(`option`,{value:``,children:`All repos`}),ge.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))]}),(0,X.jsx)(z,{"aria-label":`Filter cards`,size:`sm`,placeholder:`Filter`,value:p.query,onChange:e=>m(t=>({...t,query:e.target.value}))}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>Q(`read`,pe(G),`Mark all read`),busy:F===`bulk:read`,title:`Needs you is never cleared by this`,children:`Mark all read`}),(0,X.jsx)(v,{size:`sm`,variant:`subtle`,onClick:()=>E({open:!0,multi:!0}),title:`⇧⌘N`,children:`Same task on N seats`}),(0,X.jsx)(v,{size:`sm`,variant:`primary`,onClick:()=>E({open:!0,multi:!1}),title:`⌘N`,children:`New agent`})]})]}),M?(0,X.jsx)(`p`,{className:A.banner,"data-tone":M.tone,role:`status`,children:M.text}):null,e.error&&!e.data?(0,X.jsx)(`p`,{className:A.banner,"data-tone":`danger`,role:`alert`,children:y(e.error)}):null,$.length>0?(0,X.jsxs)(`div`,{className:A.bulkBar,role:`toolbar`,"aria-label":`Selected cards`,children:[(0,X.jsxs)(`span`,{children:[$.length,` selected`]}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>Q(`read`,pe(G,new Set($)),`Mark read`),children:`Mark read`}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>Q(`stop`,$,`Stop`),children:`Stop`}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>Q(`pin`,$,`Pin`),children:`Pin`}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>Q(`unpin`,$,`Unpin`),children:`Unpin`}),(0,X.jsx)(v,{size:`sm`,variant:`danger`,onClick:()=>Q(`archive`,$,`Archive`),children:`Archive`}),(0,X.jsx)(v,{size:`sm`,variant:`ghost`,onClick:()=>b(new Set),children:`Clear`})]}):null,(0,X.jsxs)(`div`,{className:A.body,"data-details":J?`open`:void 0,children:[e.data&&W.length===0?(0,X.jsx)(ne,{title:`No agents yet`,body:`Start one with ⌘N: it gets its own worktree and branch, runs the repo’s setup, and shows up here while it works.`,action:(0,X.jsx)(v,{variant:`primary`,size:`sm`,onClick:()=>E({open:!0,multi:!1}),children:`New agent`})}):(0,X.jsx)(`div`,{className:A.board,ref:me,onKeyDown:we,"aria-label":`Agent board`,"aria-keyshortcuts":`ArrowLeft ArrowRight ArrowUp ArrowDown Enter Space x e r s`,children:P.map(e=>(0,X.jsx)(Se,{column:e,cards:K[e],now:a,cursorId:q?de(K,q)?.id??null:null,selected:_,onFocusCard:e=>g(e),onOpen:Ce,onDetails:e=>{g(e),C(t=>t===e?null:e)},onToggleSelect:e=>b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},e))}),J?(0,X.jsx)(_e,{card:J,now:a,onClose:()=>C(null),onChanged:t,act:Z,busy:F,onOpenChat:()=>Ce(J),onOpenTerminal:()=>{J.sessionId&&(s(J.sessionId),c(`terminal`,J.sessionId))},onStop:()=>{let e=J.sessionId;e&&Z(`stop`,`Stop this agent’s turn`,async()=>(await ee(e),null))}}):null]}),(0,X.jsx)(`p`,{className:A.keyHint,children:`←→↑↓ move · Enter open · Space details · x select · e mark read · r resolve · s stop · ⌘N new agent · ⇧⌘N same task on N seats`}),(0,X.jsx)(ve,{open:T.open,multi:T.multi,projects:Ee,seats:De,initialRoot:null,busy:D,error:ae,onClose:()=>{D||E({open:!1,multi:!1})},onSpawn:xe}),(0,X.jsx)(o,{...f.dialog,tokenLabel:`Mutation token`,tokenHelp:`the mutation token ashlr verse printed`})]})}function Se({column:e,cards:t,now:n,cursorId:r,selected:i,onFocusCard:a,onOpen:o,onDetails:s,onToggleSelect:c}){return(0,X.jsxs)(`section`,{className:A.column,"data-column":e,"aria-label":`${F[e]}, ${t.length}`,children:[(0,X.jsxs)(`h3`,{className:A.columnHead,children:[(0,X.jsx)(`span`,{children:F[e]}),(0,X.jsx)(`span`,{className:A.count,children:t.length})]}),(0,X.jsxs)(`ul`,{className:A.cardList,children:[t.map(e=>(0,X.jsx)(`li`,{children:(0,X.jsx)(Ce,{card:e,now:n,active:e.id===r,selected:i.has(e.id),onFocus:()=>a(e.id),onOpen:()=>o(e),onDetails:()=>s(e.id),onToggleSelect:()=>c(e.id)})},e.id)),t.length===0?(0,X.jsx)(`li`,{className:A.emptyColumn,children:e===`needs-you`?`Nothing is waiting on you.`:`—`}):null]})]})}function Ce({card:e,now:t,active:n,selected:r,onFocus:i,onOpen:a,onDetails:o,onToggleSelect:s}){let c=e.startedAt?U(e.startedAt,t):me(e.updatedAt,t),l=ge(e),ee=G(e.spend);return(0,X.jsxs)(`div`,{className:A.card,"data-card-id":e.id,"data-active":n||void 0,"data-selected":r||void 0,"data-column":e.column,"data-reason":e.reason,tabIndex:0,role:`button`,"aria-pressed":r,"aria-label":`${e.title}. ${e.reasonText}.${e.unread?` Unread.`:``}`,onFocus:i,onClick:e=>{e.shiftKey||e.metaKey?s():o()},onDoubleClick:a,children:[(0,X.jsxs)(`div`,{className:A.cardTop,children:[(0,X.jsx)(`input`,{type:`checkbox`,className:A.cardCheck,checked:r,"aria-label":`Select ${e.title}`,onClick:e=>e.stopPropagation(),onChange:s,tabIndex:-1}),e.unread?(0,X.jsx)(`span`,{className:A.unreadDot,"aria-hidden":`true`}):null,(0,X.jsx)(`span`,{className:A.cardTitle,children:e.title}),e.pinned?(0,X.jsx)(`span`,{className:A.pin,"aria-label":`Pinned`,children:`•`}):null]}),(0,X.jsxs)(`div`,{className:A.cardMeta,children:[e.engine?(0,X.jsxs)(`span`,{className:A.seatChip,"data-engine":e.engine,children:[m[e.engine],e.model?` · ${e.model}`:``]}):null,e.repo?(0,X.jsxs)(`span`,{className:A.muted,children:[e.repo,e.branch?` · ${e.branch}`:``]}):null]}),(0,X.jsx)(`div`,{className:A.cardReason,"data-reason":e.reason,children:e.reasonText}),(0,X.jsxs)(`div`,{className:A.cardStats,children:[c?(0,X.jsx)(`span`,{title:e.startedAt?`Running for`:`Last activity`,children:c}):null,(0,X.jsx)(`span`,{"data-tone":ee,title:`At API list price — an equivalent`,children:he(e.spend)}),l?(0,X.jsx)(`span`,{children:l}):null,e.autoFix?(0,X.jsx)(`span`,{className:A.flag,children:`auto-fix`}):null,e.autoMerge?(0,X.jsx)(`span`,{className:A.flag,children:`auto-merge`}):null]}),e.lastActivity?(0,X.jsx)(`div`,{className:A.cardLast,children:e.lastActivity}):null]})}function we(){return(0,X.jsx)(xe,{})}export{we as AgentsSection};
3
+ //# sourceMappingURL=AgentsSection-D5mKoOhH.js.map