@ashlr/hub 3.16.0 → 3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +2 -2
  3. package/dist/authority-surface.json +5 -5
  4. package/dist/build-identity.json +2 -2
  5. package/dist/core/daemon/loop.js +1 -0
  6. package/dist/core/daemon/loop.js.map +1 -1
  7. package/dist/core/daemon/tick-hooks.d.ts +2 -0
  8. package/dist/core/daemon/tick-hooks.js.map +1 -1
  9. package/dist/core/fleet/tick-hooks-live.d.ts +2 -1
  10. package/dist/core/fleet/tick-hooks-live.js +49 -7
  11. package/dist/core/fleet/tick-hooks-live.js.map +1 -1
  12. package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js +2 -0
  13. package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js.map +1 -0
  14. package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js +2 -0
  15. package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js.map +1 -0
  16. package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js +2 -0
  17. package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js.map +1 -0
  18. package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js +2 -0
  19. package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js.map +1 -0
  20. package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js +2 -0
  21. package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js.map +1 -0
  22. package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js +2 -0
  23. package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js.map +1 -0
  24. package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js +3 -0
  25. package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js.map +1 -0
  26. package/dist/core/web/public/next/assets/App-Uy6lDpKw.js +8 -0
  27. package/dist/core/web/public/next/assets/App-Uy6lDpKw.js.map +1 -0
  28. package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js +2 -0
  29. package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js.map +1 -0
  30. package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js +2 -0
  31. package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js.map +1 -0
  32. package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js +2 -0
  33. package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js.map +1 -0
  34. package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js +3 -0
  35. package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js.map +1 -0
  36. package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js +2 -0
  37. package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js.map +1 -0
  38. package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js +2 -0
  39. package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js.map +1 -0
  40. package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js +2 -0
  41. package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js.map +1 -0
  42. package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js +7 -0
  43. package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js.map +1 -0
  44. package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js +2 -0
  45. package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js.map +1 -0
  46. package/dist/core/web/public/next/assets/Button-CMR_Op-0.js +2 -0
  47. package/dist/core/web/public/next/assets/Button-CMR_Op-0.js.map +1 -0
  48. package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js +2 -0
  49. package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js.map +1 -0
  50. package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js +16 -0
  51. package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js.map +1 -0
  52. package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js +2 -0
  53. package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js.map +1 -0
  54. package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js +2 -0
  55. package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js.map +1 -0
  56. package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js +3 -0
  57. package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js.map +1 -0
  58. package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js +5 -0
  59. package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js.map +1 -0
  60. package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js +2 -0
  61. package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js.map +1 -0
  62. package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js +3 -0
  63. package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js.map +1 -0
  64. package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js +3 -0
  65. package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js.map +1 -0
  66. package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js +9 -0
  67. package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js.map +1 -0
  68. package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js +3 -0
  69. package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js.map +1 -0
  70. package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js +4 -0
  71. package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js.map +1 -0
  72. package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js +2 -0
  73. package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js.map +1 -0
  74. package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js +2 -0
  75. package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js.map +1 -0
  76. package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js +2 -0
  77. package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js.map +1 -0
  78. package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js +2 -0
  79. package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js.map +1 -0
  80. package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js +2 -0
  81. package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js.map +1 -0
  82. package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js +2 -0
  83. package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js.map +1 -0
  84. package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js +2 -0
  85. package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js.map +1 -0
  86. package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js +2 -0
  87. package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js.map +1 -0
  88. package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js +2 -0
  89. package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js.map +1 -0
  90. package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js +2 -0
  91. package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js.map +1 -0
  92. package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js +2 -0
  93. package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js.map +1 -0
  94. package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js +2 -0
  95. package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js.map +1 -0
  96. package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js +2 -0
  97. package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js.map +1 -0
  98. package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js +5 -0
  99. package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js.map +1 -0
  100. package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js +2 -0
  101. package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js.map +1 -0
  102. package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js +2 -0
  103. package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js.map +1 -0
  104. package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js +2 -0
  105. package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js.map +1 -0
  106. package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js +3 -0
  107. package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js.map +1 -0
  108. package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js +2 -0
  109. package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js.map +1 -0
  110. package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js +3 -0
  111. package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js.map +1 -0
  112. package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js +2 -0
  113. package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js.map +1 -0
  114. package/dist/core/web/public/next/assets/Input-CsSZI8QC.js +2 -0
  115. package/dist/core/web/public/next/assets/Input-CsSZI8QC.js.map +1 -0
  116. package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js +9 -0
  117. package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js.map +1 -0
  118. package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js +2 -0
  119. package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js.map +1 -0
  120. package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js +3 -0
  121. package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js.map +1 -0
  122. package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js +2 -0
  123. package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js.map +1 -0
  124. package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js +2 -0
  125. package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js.map +1 -0
  126. package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js +2 -0
  127. package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js.map +1 -0
  128. package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js +2 -0
  129. package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js.map +1 -0
  130. package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js +2 -0
  131. package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js.map +1 -0
  132. package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js +2 -0
  133. package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js.map +1 -0
  134. package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js +3 -0
  135. package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js.map +1 -0
  136. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js +72 -0
  137. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js.map +1 -0
  138. package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js +2 -0
  139. package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js.map +1 -0
  140. package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js +2 -0
  141. package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js.map +1 -0
  142. package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js +3 -0
  143. package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js.map +1 -0
  144. package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js +2 -0
  145. package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js.map +1 -0
  146. package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js +2 -0
  147. package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js.map +1 -0
  148. package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js +3 -0
  149. package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js.map +1 -0
  150. package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js +2 -0
  151. package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js.map +1 -0
  152. package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js +7 -0
  153. package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js.map +1 -0
  154. package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js +2 -0
  155. package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js.map +1 -0
  156. package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js +3 -0
  157. package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js.map +1 -0
  158. package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js +2 -0
  159. package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js.map +1 -0
  160. package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js +2 -0
  161. package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js.map +1 -0
  162. package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js +2 -0
  163. package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js.map +1 -0
  164. package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js +4 -0
  165. package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js.map +1 -0
  166. package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js +3 -0
  167. package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js.map +1 -0
  168. package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js +3 -0
  169. package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js.map +1 -0
  170. package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js +9 -0
  171. package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js.map +1 -0
  172. package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js +2 -0
  173. package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js.map +1 -0
  174. package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js +2 -0
  175. package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js.map +1 -0
  176. package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js +2 -0
  177. package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js.map +1 -0
  178. package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js +2 -0
  179. package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js.map +1 -0
  180. package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js +2 -0
  181. package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js.map +1 -0
  182. package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js +2 -0
  183. package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js.map +1 -0
  184. package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js +2 -0
  185. package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js.map +1 -0
  186. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js +7 -0
  187. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js.map +1 -0
  188. package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js +3 -0
  189. package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js.map +1 -0
  190. package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js +3 -0
  191. package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js.map +1 -0
  192. package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js +2 -0
  193. package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js.map +1 -0
  194. package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js +2 -0
  195. package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js.map +1 -0
  196. package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js +2 -0
  197. package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js.map +1 -0
  198. package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js +3 -0
  199. package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js.map +1 -0
  200. package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js +3 -0
  201. package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js.map +1 -0
  202. package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js +2 -0
  203. package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js.map +1 -0
  204. package/dist/core/web/public/next/assets/Select-DjQDkPJU.js +2 -0
  205. package/dist/core/web/public/next/assets/Select-DjQDkPJU.js.map +1 -0
  206. package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js +2 -0
  207. package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js.map +1 -0
  208. package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js +2 -0
  209. package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js.map +1 -0
  210. package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js +2 -0
  211. package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js.map +1 -0
  212. package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js +2 -0
  213. package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js.map +1 -0
  214. package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js +2 -0
  215. package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js.map +1 -0
  216. package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js +3 -0
  217. package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js.map +1 -0
  218. package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js +2 -0
  219. package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js.map +1 -0
  220. package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js +2 -0
  221. package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js.map +1 -0
  222. package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js +3 -0
  223. package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js.map +1 -0
  224. package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js +2 -0
  225. package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js.map +1 -0
  226. package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js +2 -0
  227. package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js.map +1 -0
  228. package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js +2 -0
  229. package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js.map +1 -0
  230. package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js +2 -0
  231. package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js.map +1 -0
  232. package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js +2 -0
  233. package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js.map +1 -0
  234. package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js +2 -0
  235. package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js.map +1 -0
  236. package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js +2 -0
  237. package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js.map +1 -0
  238. package/dist/core/web/public/next/assets/Surface-BEToBKC3.js +2 -0
  239. package/dist/core/web/public/next/assets/Surface-BEToBKC3.js.map +1 -0
  240. package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js +2 -0
  241. package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js.map +1 -0
  242. package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js +2 -0
  243. package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js.map +1 -0
  244. package/dist/core/web/public/next/assets/Tag-Chqolzxz.js +2 -0
  245. package/dist/core/web/public/next/assets/Tag-Chqolzxz.js.map +1 -0
  246. package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js +3 -0
  247. package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js.map +1 -0
  248. package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js +26 -0
  249. package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js.map +1 -0
  250. package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js +2 -0
  251. package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js.map +1 -0
  252. package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js +2 -0
  253. package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js.map +1 -0
  254. package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js +9 -0
  255. package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js.map +1 -0
  256. package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js +3 -0
  257. package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js.map +1 -0
  258. package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js +2 -0
  259. package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js.map +1 -0
  260. package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js +3 -0
  261. package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js.map +1 -0
  262. package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js +3 -0
  263. package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js.map +1 -0
  264. package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js +2 -0
  265. package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js.map +1 -0
  266. package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js +2 -0
  267. package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js.map +1 -0
  268. package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js +2 -0
  269. package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js.map +1 -0
  270. package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js +2 -0
  271. package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js.map +1 -0
  272. package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js +6 -0
  273. package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js.map +1 -0
  274. package/dist/core/web/public/next/assets/actions-BPyW8QC-.js +2 -0
  275. package/dist/core/web/public/next/assets/actions-BPyW8QC-.js.map +1 -0
  276. package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js +2 -0
  277. package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js.map +1 -0
  278. package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js +7 -0
  279. package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js.map +1 -0
  280. package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js +2 -0
  281. package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js.map +1 -0
  282. package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js +2 -0
  283. package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js.map +1 -0
  284. package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js +2 -0
  285. package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js.map +1 -0
  286. package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js +2 -0
  287. package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js.map +1 -0
  288. package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js +2 -0
  289. package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js.map +1 -0
  290. package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js +2 -0
  291. package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js.map +1 -0
  292. package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js +2 -0
  293. package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js.map +1 -0
  294. package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js +2 -0
  295. package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js.map +1 -0
  296. package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js +2 -0
  297. package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js.map +1 -0
  298. package/dist/core/web/public/next/assets/charts-Di0_Q980.js +2 -0
  299. package/dist/core/web/public/next/assets/charts-Di0_Q980.js.map +1 -0
  300. package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js +2 -0
  301. package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js.map +1 -0
  302. package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js +2 -0
  303. package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js.map +1 -0
  304. package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js +2 -0
  305. package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js.map +1 -0
  306. package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js +2 -0
  307. package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js.map +1 -0
  308. package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js +2 -0
  309. package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js.map +1 -0
  310. package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js +2 -0
  311. package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js.map +1 -0
  312. package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js +2 -0
  313. package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js.map +1 -0
  314. package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js +2 -0
  315. package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js.map +1 -0
  316. package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js +2 -0
  317. package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js.map +1 -0
  318. package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js +3 -0
  319. package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js.map +1 -0
  320. package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js +2 -0
  321. package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js.map +1 -0
  322. package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js +2 -0
  323. package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js.map +1 -0
  324. package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js +2 -0
  325. package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js.map +1 -0
  326. package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js +2 -0
  327. package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js.map +1 -0
  328. package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js +2 -0
  329. package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js.map +1 -0
  330. package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js +2 -0
  331. package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js.map +1 -0
  332. package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js +2 -0
  333. package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js.map +1 -0
  334. package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js +2 -0
  335. package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js.map +1 -0
  336. package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js +2 -0
  337. package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js.map +1 -0
  338. package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js +2 -0
  339. package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js.map +1 -0
  340. package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js +2 -0
  341. package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js.map +1 -0
  342. package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js +3 -0
  343. package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js.map +1 -0
  344. package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js +2 -0
  345. package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js.map +1 -0
  346. package/dist/core/web/public/next/assets/format-V6IiIMAL.js +2 -0
  347. package/dist/core/web/public/next/assets/format-V6IiIMAL.js.map +1 -0
  348. package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js +5 -0
  349. package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js.map +1 -0
  350. package/dist/core/web/public/next/assets/global-CYfRwH6t.js +3 -0
  351. package/dist/core/web/public/next/assets/global-CYfRwH6t.js.map +1 -0
  352. package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js +3 -0
  353. package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js.map +1 -0
  354. package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js +2 -0
  355. package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js.map +1 -0
  356. package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js +2 -0
  357. package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js.map +1 -0
  358. package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js +2 -0
  359. package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js.map +1 -0
  360. package/dist/core/web/public/next/assets/icons-BBm_Cy62.js +2 -0
  361. package/dist/core/web/public/next/assets/icons-BBm_Cy62.js.map +1 -0
  362. package/dist/core/web/public/next/assets/index-_izD07R9.js +11 -0
  363. package/dist/core/web/public/next/assets/index-_izD07R9.js.map +1 -0
  364. package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js +2 -0
  365. package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js.map +1 -0
  366. package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js +2 -0
  367. package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js.map +1 -0
  368. package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js +2 -0
  369. package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js.map +1 -0
  370. package/dist/core/web/public/next/assets/live-model-D97AfBFz.js +2 -0
  371. package/dist/core/web/public/next/assets/live-model-D97AfBFz.js.map +1 -0
  372. package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js +2 -0
  373. package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js.map +1 -0
  374. package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js +2 -0
  375. package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js.map +1 -0
  376. package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js +2 -0
  377. package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js.map +1 -0
  378. package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js +7 -0
  379. package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js.map +1 -0
  380. package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js +2 -0
  381. package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js.map +1 -0
  382. package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js +2 -0
  383. package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js.map +1 -0
  384. package/dist/core/web/public/next/assets/nav-DC0ynjdb.js +2 -0
  385. package/dist/core/web/public/next/assets/nav-DC0ynjdb.js.map +1 -0
  386. package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js +2 -0
  387. package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js.map +1 -0
  388. package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js +2 -0
  389. package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js.map +1 -0
  390. package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js +2 -0
  391. package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js.map +1 -0
  392. package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js +2 -0
  393. package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js.map +1 -0
  394. package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js +2 -0
  395. package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js.map +1 -0
  396. package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js +2 -0
  397. package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js.map +1 -0
  398. package/dist/core/web/public/next/assets/panes-DOXM13lF.js +3 -0
  399. package/dist/core/web/public/next/assets/panes-DOXM13lF.js.map +1 -0
  400. package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js +2 -0
  401. package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js.map +1 -0
  402. package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js +2 -0
  403. package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js.map +1 -0
  404. package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js +2 -0
  405. package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js.map +1 -0
  406. package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js +2 -0
  407. package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js.map +1 -0
  408. package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js +2 -0
  409. package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js.map +1 -0
  410. package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js +2 -0
  411. package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js.map +1 -0
  412. package/dist/core/web/public/next/assets/primitives-Bynv7bPl.js +1 -0
  413. package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js +2 -0
  414. package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js.map +1 -0
  415. package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js +2 -0
  416. package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js.map +1 -0
  417. package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js +2 -0
  418. package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js.map +1 -0
  419. package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js +3 -0
  420. package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js.map +1 -0
  421. package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js +2 -0
  422. package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js.map +1 -0
  423. package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js +2 -0
  424. package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js.map +1 -0
  425. package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js +2 -0
  426. package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js.map +1 -0
  427. package/dist/core/web/public/next/assets/rolldown-runtime-hePW80VL.js +1 -0
  428. package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js +2 -0
  429. package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js.map +1 -0
  430. package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js +2 -0
  431. package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js.map +1 -0
  432. package/dist/core/web/public/next/assets/sheet-BxZSmdad.js +2 -0
  433. package/dist/core/web/public/next/assets/sheet-BxZSmdad.js.map +1 -0
  434. package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js +2 -0
  435. package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js.map +1 -0
  436. package/dist/core/web/public/next/assets/slots-BJc3RJkV.js +3 -0
  437. package/dist/core/web/public/next/assets/slots-BJc3RJkV.js.map +1 -0
  438. package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js +4 -0
  439. package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js.map +1 -0
  440. package/dist/core/web/public/next/assets/sse-It4xa040.js +2 -0
  441. package/dist/core/web/public/next/assets/sse-It4xa040.js.map +1 -0
  442. package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js +2 -0
  443. package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js.map +1 -0
  444. package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js +2 -0
  445. package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js.map +1 -0
  446. package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js +2 -0
  447. package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js.map +1 -0
  448. package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js +2 -0
  449. package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js.map +1 -0
  450. package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js +2 -0
  451. package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js.map +1 -0
  452. package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js +6 -0
  453. package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js.map +1 -0
  454. package/dist/core/web/public/next/assets/thread-data-C8z55msn.js +2 -0
  455. package/dist/core/web/public/next/assets/thread-data-C8z55msn.js.map +1 -0
  456. package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js +2 -0
  457. package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js.map +1 -0
  458. package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js +2 -0
  459. package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js.map +1 -0
  460. package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js +2 -0
  461. package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js.map +1 -0
  462. package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js +2 -0
  463. package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js.map +1 -0
  464. package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js +2 -0
  465. package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js.map +1 -0
  466. package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js +2 -0
  467. package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js.map +1 -0
  468. package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js +2 -0
  469. package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js.map +1 -0
  470. package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js +2 -0
  471. package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js.map +1 -0
  472. package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js +2 -0
  473. package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js.map +1 -0
  474. package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js +2 -0
  475. package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js.map +1 -0
  476. package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js +2 -0
  477. package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js.map +1 -0
  478. package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js +2 -0
  479. package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js.map +1 -0
  480. package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js +2 -0
  481. package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js.map +1 -0
  482. package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js +2 -0
  483. package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js.map +1 -0
  484. package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js +2 -0
  485. package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js.map +1 -0
  486. package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js +3 -0
  487. package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js.map +1 -0
  488. package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js +2 -0
  489. package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js.map +1 -0
  490. package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js +2 -0
  491. package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js.map +1 -0
  492. package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js +2 -0
  493. package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js.map +1 -0
  494. package/dist/core/web/public/next/index.html +2 -1
  495. package/dist/core/web/remote-gateway-policy.js +5 -0
  496. package/dist/core/web/remote-gateway-policy.js.map +1 -1
  497. package/dist/core/web/static.d.ts +4 -3
  498. package/dist/core/web/static.js +8 -5
  499. package/dist/core/web/static.js.map +1 -1
  500. package/dist/release-dependency-inventory.json +1 -1
  501. package/node_modules/fast-uri/index.js +20 -5
  502. package/node_modules/fast-uri/lib/utils.js +8 -1
  503. package/node_modules/fast-uri/package.json +1 -1
  504. package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
  505. package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
  506. package/node_modules/ip-address/README.md +134 -134
  507. package/node_modules/ip-address/dist/address-error.d.ts +11 -0
  508. package/node_modules/ip-address/dist/address-error.js.map +1 -1
  509. package/node_modules/ip-address/dist/ipv4.d.ts +22 -6
  510. package/node_modules/ip-address/dist/ipv4.js +22 -6
  511. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  512. package/node_modules/ip-address/dist/ipv6.d.ts +26 -8
  513. package/node_modules/ip-address/dist/ipv6.js +46 -29
  514. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  515. package/node_modules/ip-address/dist/v6/constants.js +1 -0
  516. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  517. package/node_modules/ip-address/package.json +1 -1
  518. package/package.json +5 -4
  519. package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js +0 -2
  520. package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js.map +0 -1
  521. package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js +0 -2
  522. package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js.map +0 -1
  523. package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js +0 -2
  524. package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js.map +0 -1
  525. package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js +0 -2
  526. package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js.map +0 -1
  527. package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js +0 -2
  528. package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js.map +0 -1
  529. package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js +0 -2
  530. package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js.map +0 -1
  531. package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js +0 -3
  532. package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js.map +0 -1
  533. package/dist/core/web/public/next/assets/App-DebYuj1v.js +0 -8
  534. package/dist/core/web/public/next/assets/App-DebYuj1v.js.map +0 -1
  535. package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js +0 -2
  536. package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js.map +0 -1
  537. package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js +0 -2
  538. package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js.map +0 -1
  539. package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js +0 -2
  540. package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js.map +0 -1
  541. package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js +0 -3
  542. package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js.map +0 -1
  543. package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js +0 -2
  544. package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js.map +0 -1
  545. package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js +0 -2
  546. package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js.map +0 -1
  547. package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js +0 -2
  548. package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js.map +0 -1
  549. package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js +0 -7
  550. package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js.map +0 -1
  551. package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js +0 -2
  552. package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js.map +0 -1
  553. package/dist/core/web/public/next/assets/Button-DP2ImS5n.js +0 -2
  554. package/dist/core/web/public/next/assets/Button-DP2ImS5n.js.map +0 -1
  555. package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js +0 -2
  556. package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js.map +0 -1
  557. package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js +0 -16
  558. package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js.map +0 -1
  559. package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js +0 -2
  560. package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js.map +0 -1
  561. package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js +0 -2
  562. package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js.map +0 -1
  563. package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js +0 -3
  564. package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js.map +0 -1
  565. package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js +0 -5
  566. package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js.map +0 -1
  567. package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js +0 -2
  568. package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js.map +0 -1
  569. package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js +0 -3
  570. package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js.map +0 -1
  571. package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js +0 -3
  572. package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js.map +0 -1
  573. package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js +0 -9
  574. package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js.map +0 -1
  575. package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js +0 -3
  576. package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js.map +0 -1
  577. package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js +0 -4
  578. package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js.map +0 -1
  579. package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js +0 -2
  580. package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js.map +0 -1
  581. package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js +0 -2
  582. package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js.map +0 -1
  583. package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js +0 -2
  584. package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js.map +0 -1
  585. package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js +0 -2
  586. package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js.map +0 -1
  587. package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js +0 -2
  588. package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js.map +0 -1
  589. package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js +0 -2
  590. package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js.map +0 -1
  591. package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js +0 -2
  592. package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js.map +0 -1
  593. package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js +0 -2
  594. package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js.map +0 -1
  595. package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js +0 -2
  596. package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js.map +0 -1
  597. package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js +0 -2
  598. package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js.map +0 -1
  599. package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js +0 -2
  600. package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js.map +0 -1
  601. package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js +0 -2
  602. package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js.map +0 -1
  603. package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js +0 -2
  604. package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js.map +0 -1
  605. package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js +0 -5
  606. package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js.map +0 -1
  607. package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js +0 -2
  608. package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js.map +0 -1
  609. package/dist/core/web/public/next/assets/GearTray-Cc14h572.js +0 -2
  610. package/dist/core/web/public/next/assets/GearTray-Cc14h572.js.map +0 -1
  611. package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js +0 -2
  612. package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js.map +0 -1
  613. package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js +0 -3
  614. package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js.map +0 -1
  615. package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js +0 -2
  616. package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js.map +0 -1
  617. package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js +0 -3
  618. package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js.map +0 -1
  619. package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js +0 -2
  620. package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js.map +0 -1
  621. package/dist/core/web/public/next/assets/Input-BEF-ScuG.js +0 -2
  622. package/dist/core/web/public/next/assets/Input-BEF-ScuG.js.map +0 -1
  623. package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js +0 -9
  624. package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js.map +0 -1
  625. package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js +0 -2
  626. package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js.map +0 -1
  627. package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js +0 -3
  628. package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js.map +0 -1
  629. package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js +0 -2
  630. package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js.map +0 -1
  631. package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js +0 -2
  632. package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js.map +0 -1
  633. package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js +0 -2
  634. package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js.map +0 -1
  635. package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js +0 -2
  636. package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js.map +0 -1
  637. package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js +0 -2
  638. package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js.map +0 -1
  639. package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js +0 -2
  640. package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js.map +0 -1
  641. package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js +0 -3
  642. package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js.map +0 -1
  643. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js +0 -72
  644. package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js.map +0 -1
  645. package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js +0 -2
  646. package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js.map +0 -1
  647. package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js +0 -2
  648. package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js.map +0 -1
  649. package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js +0 -3
  650. package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js.map +0 -1
  651. package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js +0 -2
  652. package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js.map +0 -1
  653. package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js +0 -2
  654. package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js.map +0 -1
  655. package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js +0 -3
  656. package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js.map +0 -1
  657. package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js +0 -2
  658. package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js.map +0 -1
  659. package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js +0 -7
  660. package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js.map +0 -1
  661. package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js +0 -2
  662. package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js.map +0 -1
  663. package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js +0 -3
  664. package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js.map +0 -1
  665. package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js +0 -2
  666. package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js.map +0 -1
  667. package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js +0 -2
  668. package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js.map +0 -1
  669. package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js +0 -2
  670. package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js.map +0 -1
  671. package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js +0 -4
  672. package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js.map +0 -1
  673. package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js +0 -3
  674. package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js.map +0 -1
  675. package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js +0 -3
  676. package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js.map +0 -1
  677. package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js +0 -9
  678. package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js.map +0 -1
  679. package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js +0 -2
  680. package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js.map +0 -1
  681. package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js +0 -2
  682. package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js.map +0 -1
  683. package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js +0 -2
  684. package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js.map +0 -1
  685. package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js +0 -2
  686. package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js.map +0 -1
  687. package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js +0 -2
  688. package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js.map +0 -1
  689. package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js +0 -2
  690. package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js.map +0 -1
  691. package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js +0 -2
  692. package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js.map +0 -1
  693. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js +0 -7
  694. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js.map +0 -1
  695. package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js +0 -3
  696. package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js.map +0 -1
  697. package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js +0 -3
  698. package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js.map +0 -1
  699. package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js +0 -2
  700. package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js.map +0 -1
  701. package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js +0 -2
  702. package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js.map +0 -1
  703. package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js +0 -2
  704. package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js.map +0 -1
  705. package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js +0 -3
  706. package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js.map +0 -1
  707. package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js +0 -3
  708. package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js.map +0 -1
  709. package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js +0 -2
  710. package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js.map +0 -1
  711. package/dist/core/web/public/next/assets/Select-zXMdgblm.js +0 -2
  712. package/dist/core/web/public/next/assets/Select-zXMdgblm.js.map +0 -1
  713. package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js +0 -2
  714. package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js.map +0 -1
  715. package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js +0 -2
  716. package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js.map +0 -1
  717. package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js +0 -2
  718. package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js.map +0 -1
  719. package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js +0 -2
  720. package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js.map +0 -1
  721. package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js +0 -2
  722. package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js.map +0 -1
  723. package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js +0 -3
  724. package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js.map +0 -1
  725. package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js +0 -2
  726. package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js.map +0 -1
  727. package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js +0 -2
  728. package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js.map +0 -1
  729. package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js +0 -3
  730. package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js.map +0 -1
  731. package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js +0 -2
  732. package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js.map +0 -1
  733. package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js +0 -2
  734. package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js.map +0 -1
  735. package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js +0 -2
  736. package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js.map +0 -1
  737. package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js +0 -2
  738. package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js.map +0 -1
  739. package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js +0 -2
  740. package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js.map +0 -1
  741. package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js +0 -2
  742. package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js.map +0 -1
  743. package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js +0 -2
  744. package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js.map +0 -1
  745. package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js +0 -2
  746. package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js.map +0 -1
  747. package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js +0 -2
  748. package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js.map +0 -1
  749. package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js +0 -2
  750. package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js.map +0 -1
  751. package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js +0 -2
  752. package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js.map +0 -1
  753. package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js +0 -26
  754. package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js.map +0 -1
  755. package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js +0 -3
  756. package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js.map +0 -1
  757. package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js +0 -2
  758. package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js.map +0 -1
  759. package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js +0 -2
  760. package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js.map +0 -1
  761. package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js +0 -9
  762. package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js.map +0 -1
  763. package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js +0 -3
  764. package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js.map +0 -1
  765. package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js +0 -2
  766. package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js.map +0 -1
  767. package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js +0 -3
  768. package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js.map +0 -1
  769. package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js +0 -3
  770. package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js.map +0 -1
  771. package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js +0 -2
  772. package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js.map +0 -1
  773. package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js +0 -2
  774. package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js.map +0 -1
  775. package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js +0 -2
  776. package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js.map +0 -1
  777. package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js +0 -2
  778. package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js.map +0 -1
  779. package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js +0 -6
  780. package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js.map +0 -1
  781. package/dist/core/web/public/next/assets/actions-CyO4R-IO.js +0 -2
  782. package/dist/core/web/public/next/assets/actions-CyO4R-IO.js.map +0 -1
  783. package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js +0 -2
  784. package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js.map +0 -1
  785. package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js +0 -7
  786. package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js.map +0 -1
  787. package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js +0 -2
  788. package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js.map +0 -1
  789. package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js +0 -2
  790. package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js.map +0 -1
  791. package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js +0 -2
  792. package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js.map +0 -1
  793. package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js +0 -2
  794. package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js.map +0 -1
  795. package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js +0 -2
  796. package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js.map +0 -1
  797. package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js +0 -2
  798. package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js.map +0 -1
  799. package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js +0 -2
  800. package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js.map +0 -1
  801. package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js +0 -2
  802. package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js.map +0 -1
  803. package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js +0 -2
  804. package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js.map +0 -1
  805. package/dist/core/web/public/next/assets/charts-D3I0q4hG.js +0 -2
  806. package/dist/core/web/public/next/assets/charts-D3I0q4hG.js.map +0 -1
  807. package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js +0 -2
  808. package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js.map +0 -1
  809. package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js +0 -2
  810. package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js.map +0 -1
  811. package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js +0 -2
  812. package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js.map +0 -1
  813. package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js +0 -2
  814. package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js.map +0 -1
  815. package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js +0 -2
  816. package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js.map +0 -1
  817. package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js +0 -2
  818. package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js.map +0 -1
  819. package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js +0 -2
  820. package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js.map +0 -1
  821. package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js +0 -2
  822. package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js.map +0 -1
  823. package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js +0 -2
  824. package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js.map +0 -1
  825. package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js +0 -3
  826. package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js.map +0 -1
  827. package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js +0 -2
  828. package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js.map +0 -1
  829. package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js +0 -2
  830. package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js.map +0 -1
  831. package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js +0 -2
  832. package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js.map +0 -1
  833. package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js +0 -2
  834. package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js.map +0 -1
  835. package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js +0 -2
  836. package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js.map +0 -1
  837. package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js +0 -2
  838. package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js.map +0 -1
  839. package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js +0 -2
  840. package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js.map +0 -1
  841. package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js +0 -2
  842. package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js.map +0 -1
  843. package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js +0 -2
  844. package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js.map +0 -1
  845. package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js +0 -2
  846. package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js.map +0 -1
  847. package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js +0 -2
  848. package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js.map +0 -1
  849. package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js +0 -3
  850. package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js.map +0 -1
  851. package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js +0 -2
  852. package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js.map +0 -1
  853. package/dist/core/web/public/next/assets/format-CcEKjUou.js +0 -2
  854. package/dist/core/web/public/next/assets/format-CcEKjUou.js.map +0 -1
  855. package/dist/core/web/public/next/assets/git-model-DL3MwN93.js +0 -5
  856. package/dist/core/web/public/next/assets/git-model-DL3MwN93.js.map +0 -1
  857. package/dist/core/web/public/next/assets/global-BWc2NPzv.js +0 -3
  858. package/dist/core/web/public/next/assets/global-BWc2NPzv.js.map +0 -1
  859. package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js +0 -3
  860. package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js.map +0 -1
  861. package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js +0 -2
  862. package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js.map +0 -1
  863. package/dist/core/web/public/next/assets/headroom-CP99UxyV.js +0 -2
  864. package/dist/core/web/public/next/assets/headroom-CP99UxyV.js.map +0 -1
  865. package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js +0 -2
  866. package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js.map +0 -1
  867. package/dist/core/web/public/next/assets/icons-U34oiN9M.js +0 -2
  868. package/dist/core/web/public/next/assets/icons-U34oiN9M.js.map +0 -1
  869. package/dist/core/web/public/next/assets/index-BbDqdepe.js +0 -11
  870. package/dist/core/web/public/next/assets/index-BbDqdepe.js.map +0 -1
  871. package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js +0 -2
  872. package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js.map +0 -1
  873. package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js +0 -2
  874. package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js.map +0 -1
  875. package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js +0 -2
  876. package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js.map +0 -1
  877. package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js +0 -2
  878. package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js.map +0 -1
  879. package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js +0 -2
  880. package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js.map +0 -1
  881. package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js +0 -2
  882. package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js.map +0 -1
  883. package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js +0 -2
  884. package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js.map +0 -1
  885. package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js +0 -7
  886. package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js.map +0 -1
  887. package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js +0 -2
  888. package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js.map +0 -1
  889. package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js +0 -2
  890. package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js.map +0 -1
  891. package/dist/core/web/public/next/assets/nav-CM-mJcSq.js +0 -2
  892. package/dist/core/web/public/next/assets/nav-CM-mJcSq.js.map +0 -1
  893. package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js +0 -2
  894. package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js.map +0 -1
  895. package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js +0 -2
  896. package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js.map +0 -1
  897. package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js +0 -2
  898. package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js.map +0 -1
  899. package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js +0 -2
  900. package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js.map +0 -1
  901. package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js +0 -2
  902. package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js.map +0 -1
  903. package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js +0 -2
  904. package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js.map +0 -1
  905. package/dist/core/web/public/next/assets/panes-BjUzIDw6.js +0 -3
  906. package/dist/core/web/public/next/assets/panes-BjUzIDw6.js.map +0 -1
  907. package/dist/core/web/public/next/assets/path-display-HyxETV-f.js +0 -2
  908. package/dist/core/web/public/next/assets/path-display-HyxETV-f.js.map +0 -1
  909. package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js +0 -2
  910. package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js.map +0 -1
  911. package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js +0 -2
  912. package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js.map +0 -1
  913. package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js +0 -2
  914. package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js.map +0 -1
  915. package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js +0 -2
  916. package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js.map +0 -1
  917. package/dist/core/web/public/next/assets/primitives-BEXDE-HP.js +0 -1
  918. package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js +0 -2
  919. package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js.map +0 -1
  920. package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js +0 -2
  921. package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js.map +0 -1
  922. package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js +0 -2
  923. package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js.map +0 -1
  924. package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js +0 -3
  925. package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js.map +0 -1
  926. package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js +0 -2
  927. package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js.map +0 -1
  928. package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js +0 -2
  929. package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js.map +0 -1
  930. package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js +0 -2
  931. package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js.map +0 -1
  932. package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js +0 -2
  933. package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js.map +0 -1
  934. package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js +0 -2
  935. package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js.map +0 -1
  936. package/dist/core/web/public/next/assets/sheet-D0ciShoy.js +0 -2
  937. package/dist/core/web/public/next/assets/sheet-D0ciShoy.js.map +0 -1
  938. package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js +0 -2
  939. package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js.map +0 -1
  940. package/dist/core/web/public/next/assets/slots-m3L6Ints.js +0 -3
  941. package/dist/core/web/public/next/assets/slots-m3L6Ints.js.map +0 -1
  942. package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js +0 -4
  943. package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js.map +0 -1
  944. package/dist/core/web/public/next/assets/sse-CK65-Cun.js +0 -2
  945. package/dist/core/web/public/next/assets/sse-CK65-Cun.js.map +0 -1
  946. package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js +0 -2
  947. package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js.map +0 -1
  948. package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js +0 -2
  949. package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js.map +0 -1
  950. package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js +0 -2
  951. package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js.map +0 -1
  952. package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js +0 -2
  953. package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js.map +0 -1
  954. package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js +0 -2
  955. package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js.map +0 -1
  956. package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js +0 -6
  957. package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js.map +0 -1
  958. package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js +0 -2
  959. package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js.map +0 -1
  960. package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js +0 -2
  961. package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js.map +0 -1
  962. package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js +0 -2
  963. package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js.map +0 -1
  964. package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js +0 -2
  965. package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js.map +0 -1
  966. package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js +0 -2
  967. package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js.map +0 -1
  968. package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js +0 -2
  969. package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js.map +0 -1
  970. package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js +0 -2
  971. package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js.map +0 -1
  972. package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js +0 -2
  973. package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js.map +0 -1
  974. package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js +0 -2
  975. package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js.map +0 -1
  976. package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js +0 -2
  977. package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js.map +0 -1
  978. package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js +0 -2
  979. package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js.map +0 -1
  980. package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js +0 -2
  981. package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js.map +0 -1
  982. package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js +0 -2
  983. package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js.map +0 -1
  984. package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js +0 -2
  985. package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js.map +0 -1
  986. package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js +0 -2
  987. package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js.map +0 -1
  988. package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js +0 -2
  989. package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js.map +0 -1
  990. package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js +0 -3
  991. package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js.map +0 -1
  992. package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js +0 -2
  993. package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js.map +0 -1
  994. package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js +0 -2
  995. package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js.map +0 -1
  996. package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js +0 -2
  997. package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"LeaderCard-3P95vgVU.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/leader/leader-line.module.css","../../../../../../src/web-ui/routes/verse/leader/LeaderLine.tsx","../../../../../../src/web-ui/routes/verse/command/CountdownRing.tsx","../../../../../../src/web-ui/routes/verse/command/LeaderCard.tsx"],"sourcesContent":["/*\n * routes/verse/leader/leader-line.module.css — the Leader line at the foot of\n * Command's Leader card. Tokens only (style-scan-310).\n */\n.line {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin-top: var(--space-3);\n padding-top: var(--space-3);\n border-top: 1px solid var(--border-subtle);\n}\n\n.preview {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n margin: 0;\n min-width: 0;\n}\n\n.meta {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.text {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ask {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n width: 100%;\n min-height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n background: var(--bg-input);\n color: var(--text-tertiary);\n font: inherit;\n font-size: var(--text-sm-size);\n text-align: left;\n cursor: text;\n transition: border-color var(--duration-fast) var(--ease-standard);\n}\n\n.ask:hover {\n border-color: var(--border-strong);\n color: var(--text-secondary);\n}\n\n.ask:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n}\n\n.askText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.where {\n flex: none;\n color: var(--text-tertiary);\n font-size: var(--text-2xs-size);\n}\n","/**\n * routes/verse/leader/LeaderLine.tsx — the foot of Command's Leader card:\n * the Leader's latest message (one line, any channel) and a \"Message the\n * Leader…\" affordance that opens Mind's conversation with the composer\n * focused (leader-focus.ts).\n *\n * ┌ L Leader · Telegram · 12m ago ┐\n * │ Judge queue is clearing; raising Grok to 3 lanes at 14:20 unless… │\n * │ [ Message the Leader… ⌘4 ↵ ] │\n *\n * Reads the thread's first page from the shared cache (Mind reads the same\n * key), polls it at Command's calm pace, and hides the preview — never the\n * button — when the conversation route is absent or silent.\n */\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { requestLeaderFocus } from './leader-focus.js';\nimport { leaderThreadQuery } from './thread-data.js';\nimport { CHANNEL_LABEL, latestLeaderMessage, previewText } from './thread-model.js';\nimport styles from './leader-line.module.css';\n\nexport const LEADER_LINE_POLL_MS = 30_000;\n\nexport function LeaderLine() {\n const thread = useQuery(leaderThreadQuery, { freshMs: 15_000 });\n const refetch = useRefetch(leaderThreadQuery);\n usePollWhileVisible(refetch, LEADER_LINE_POLL_MS);\n const latest = latestLeaderMessage(thread.data?.value?.messages ?? []);\n return (\n <div className={styles.line}>\n {latest ? (\n <p className={styles.preview} aria-label=\"The Leader's latest message\">\n <span className={styles.meta}>\n Leader · {CHANNEL_LABEL[latest.channel]} · {formatRelative(latest.at)}\n </span>\n {/* Model text: one plain line (Markdown marks dropped), never HTML. */}\n <span className={styles.text} title={latest.text}>{previewText(latest.text)}</span>\n </p>\n ) : null}\n <button type=\"button\" className={styles.ask} onClick={() => requestLeaderFocus({ kind: 'composer' })}>\n <span className={styles.askText}>Message the Leader…</span>\n <span className={styles.where} aria-hidden=\"true\">opens Mind</span>\n </button>\n </div>\n );\n}\n","/**\n * routes/verse/command/CountdownRing.tsx — a class-B action's veto window as\n * a shrinking ring (r5/visual.md §2 Motion: \"Class-B veto: countdown ring\n * drawn as a conic stroke that shrinks once per second\").\n *\n * It ticks once a second even under reduced motion — a countdown is\n * information, not decoration (use-ticker.ts) — but it never animates\n * between ticks. The minutes are always written beside it, so the ring is\n * never the only carrier.\n */\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { countdownText, vetoWindowFraction } from '../mind/leader-model.js';\nimport type { LeaderAction } from '../../../../core/vision/leader-types.js';\nimport styles from './command.module.css';\n\nconst R = 8;\nconst C = 2 * Math.PI * R;\n\nexport function CountdownRing({ action }: { action: Pick<LeaderAction, 'status' | 'createdAt' | 'applyAfter' | 'summary'> }) {\n const now = useNow(1000);\n const fraction = vetoWindowFraction(action, now);\n if (fraction === null) return null;\n const text = countdownText(action.applyAfter, now);\n return (\n <span className={styles.ring} role=\"timer\" aria-label={`Applies in ${text} unless vetoed`}>\n <svg width={20} height={20} viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <circle cx={10} cy={10} r={R} className={styles.ringTrack} />\n <circle\n data-role=\"remaining\"\n cx={10}\n cy={10}\n r={R}\n className={styles.ringFill}\n strokeDasharray={`${(C * fraction).toFixed(2)} ${C.toFixed(2)}`}\n transform=\"rotate(-90 10 10)\"\n />\n </svg>\n <span className={styles.ringText}>{text}</span>\n </span>\n );\n}\n","/**\n * routes/verse/command/LeaderCard.tsx — the Leader's latest memo on Command\n * (span 7; SPEC-310B §6 \"Leader card: Bottleneck, The Move, a Veto chip on\n * each action, and countdown rings for class-B actions\"; unit C7).\n *\n * Every line is the Leader's own (untrusted model) text, rendered as plain\n * text — never markdown, never a link. Veto confirms, then asks for the\n * token; the server runs the action's recorded inverse, restoring the prior\n * state exactly. A dry-run memo (rollout shadow stage) says so in words.\n */\nimport type { LeaderAction, LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { asSentence, formatRelative } from '../autonomy/format.js';\nimport { STATUS_WORD, expectedDeltaText, isApprovable, isVetoable, memoActions } from '../mind/leader-model.js';\nimport { approveLeaderAction } from '../leader/thread-data.js';\nimport { LeaderLine } from '../leader/LeaderLine.js';\nimport { CountdownRing } from './CountdownRing.js';\nimport { anchorId, goToSection } from './nav.js';\nimport { postLeader, type OptionalRead } from './surface-data.js';\nimport { Card, CardNote, MicroLabel } from './Surface.js';\nimport type { ConfirmSpec, SurfaceActions } from './actions.js';\nimport styles from './command.module.css';\n\nexport function vetoConfirm(action: Pick<LeaderAction, 'summary' | 'status'>): ConfirmSpec {\n return {\n title: 'Veto this action?',\n body:\n action.status === 'scheduled'\n ? `“${action.summary}” will not apply. The Leader records the veto and learns from it.`\n : `“${action.summary}” is undone exactly as it was applied. The Leader records the veto and learns from it.`,\n confirmLabel: 'Veto',\n destructive: true,\n };\n}\n\nexport function approveConfirm(action: Pick<LeaderAction, 'summary' | 'status'>): ConfirmSpec {\n return {\n title: 'Approve this action?',\n body:\n action.status === 'scheduled'\n ? `“${action.summary}” applies now instead of waiting out its veto window. You can still veto it afterwards.`\n : `“${action.summary}” is outside the standing grant. Approving tells the Leader to go ahead; the server still checks it against your authority.`,\n confirmLabel: 'Approve',\n };\n}\n\nexport interface ActionRowProps {\n action: LeaderAction;\n actions: SurfaceActions;\n compact?: boolean;\n /** Offer Approve on a class-B action in its window or a class-C ask (the Leader conversation). */\n approve?: boolean;\n /** A shadow-stage memo's action: shown, never applied — nothing to approve or veto. */\n dryRun?: boolean;\n /** The row's anchor id (the action log's rows are jump targets; a copy in the conversation is not). */\n anchored?: boolean;\n}\n\nexport function ActionRow({ action, actions, compact = false, approve = false, dryRun = false, anchored = true }: ActionRowProps) {\n const vetoable = !dryRun && isVetoable(action);\n const approvable = approve && !dryRun && isApprovable(action);\n return (\n <li className={styles.actionRow} data-status={action.status} id={anchored ? anchorId(`action-${action.id}`) : undefined}>\n <span className={styles.classBadge} data-class={action.class} title={`Class ${action.class}`}>\n {action.class}\n </span>\n <span className={styles.actionText}>\n <span className={styles.actionSummary}>{action.summary}</span>\n {!compact ? <span className={styles.actionWhy}>{action.why}</span> : null}\n </span>\n <span className={styles.actionState}>\n {dryRun ? (\n <span className={styles.statusWord} data-status=\"dry-run\">Dry run</span>\n ) : action.status === 'scheduled' ? (\n <CountdownRing action={action} />\n ) : (\n <span className={styles.statusWord} data-status={action.status}>{STATUS_WORD[action.status]}</span>\n )}\n {approvable ? (\n <Button\n size=\"sm\"\n variant=\"subtle\"\n disabled={actions.busy || actions.readOnly}\n aria-label={`Approve: ${action.summary}`}\n onClick={() => actions.act(() => approveLeaderAction(action.id), `Approve “${action.summary}”`, { confirm: approveConfirm(action) })}\n >\n Approve\n </Button>\n ) : null}\n {vetoable ? (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className={styles.vetoChip}\n disabled={actions.busy || actions.readOnly}\n aria-label={`Veto: ${action.summary}`}\n onClick={() => actions.act(() => postLeader({ action: 'veto', actionId: action.id }), `Veto “${action.summary}”`, { confirm: vetoConfirm(action) })}\n >\n Veto\n </Button>\n ) : null}\n </span>\n </li>\n );\n}\n\nexport function LeaderCard({ read, loading, actions }: { read: OptionalRead<LeaderStateV1> | undefined; loading: boolean; actions: SurfaceActions }) {\n const state = read?.value ?? null;\n const memo = state?.latest ?? null;\n const list = memoActions(state);\n const delta = expectedDeltaText(memo?.move?.expectedDelta ?? null);\n const vetoable = list.some(isVetoable);\n return (\n <Card\n title=\"Leader\"\n caption={memo ? `Memo ${formatRelative(memo.at)}${memo.seatId ? ` · ${memo.seatId}` : ''}${state?.nextRunAt ? ` · next run ${new Date(state.nextRunAt).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}` : ''}` : undefined}\n actions={\n <>\n {memo?.dryRun ? <span className={styles.dryRun}>Dry run</span> : null}\n <button type=\"button\" className={styles.linkButton} onClick={() => goToSection('mind', null)} aria-keyshortcuts=\"Meta+4\">\n Open Mind <kbd className={styles.kbd}>⌘4</kbd>\n </button>\n </>\n }\n >\n {loading && !read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the Leader…</p>\n ) : !state ? (\n <CardNote tone=\"unknown\">{read?.reason ?? 'The Leader did not answer.'}</CardNote>\n ) : !memo ? (\n <CardNote>\n {/* The run's reason is server prose that may carry its own stop. */}\n {asSentence(`No memo yet${state.lastRun ? ` — last run ${formatRelative(state.lastRun.at)}: ${state.lastRun.reason ?? state.lastRun.outcome}` : ''}`)}\n {state.nextRunAt ? ` Next run ${new Date(state.nextRunAt).toLocaleString('en-US', { weekday: 'short', hour: 'numeric', minute: '2-digit' })}.` : ''}\n </CardNote>\n ) : (\n <>\n <dl className={styles.memo}>\n <div className={styles.memoRow}>\n <dt><MicroLabel>Bottleneck</MicroLabel></dt>\n <dd className={styles.memoText}>{memo.bottleneck?.statement ?? '—'}</dd>\n </div>\n <div className={styles.memoRow}>\n <dt><MicroLabel>The move</MicroLabel></dt>\n <dd className={styles.memoText}>\n {memo.move?.statement ?? '—'}\n {delta ? <span className={styles.delta}>{delta}</span> : null}\n </dd>\n </div>\n </dl>\n {list.length ? (\n <ul className={styles.actionList} aria-label=\"Leader actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={actions} />\n ))}\n </ul>\n ) : null}\n {memo.dryRun ? <p className={styles.muted}>Shadow stage: these actions are shown, never applied.</p> : null}\n {vetoable && !memo.dryRun ? (\n <button\n type=\"button\"\n className={styles.moreLink}\n disabled={actions.busy || actions.readOnly}\n onClick={() =>\n actions.act(() => postLeader({ action: 'veto-memo', memoId: memo.id }), 'Veto the whole memo', {\n confirm: {\n title: 'Veto the whole memo?',\n body: 'Every applied action is undone exactly and every scheduled one is cancelled. The Leader records the veto.',\n confirmLabel: 'Veto memo',\n destructive: true,\n },\n })\n }\n >\n Veto the whole memo\n </button>\n ) : null}\n </>\n )}\n <LeaderLine />\n </Card>\n );\n}\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/VoiceInput-B7yrGchr.js","assets/web-speech-q3gDv2ax.js","assets/palette-handoff-Bmq98lDl.js","assets/global-1SED_aTT.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/SkipToContent-c02H5dmz.css","assets/VerseConsoleApp-C5481fH5.css","assets/VoiceInput-Do-EiHxj.css"])))=>i.map(i=>d[i]);
2
- import{n as e,s as t,t as n,u as r}from"./index-BbDqdepe.js";import{T as i,l as a,n as o,u as s}from"./global-BWc2NPzv.js";import{t as c}from"./MutationTokenDialog-D522NXsm.js";import{M as l}from"./VerseShared-_pMXKs8m.js";import{T as u,n as d,v as f,x as p}from"./icons-U34oiN9M.js";import{t as m}from"./insert-text-BnF_Gm4r.js";import{t as h}from"./MessageMarkdown-Dkw4V24c.js";import{a as g}from"./nav-CM-mJcSq.js";import{r as _}from"./actions-CyO4R-IO.js";import{t as v}from"./use-ticker-PQ_oYxn5.js";import{t as y}from"./use-guarded-action-D4m4Mlzr.js";import{_ as b,a as x,c as ee,d as te,f as ne,h as re,i as ie,l as S,m as ae,n as oe,o as se,p as C,s as w,t as T,u as E,v as D}from"./thread-data-Dq7QugaD.js";import{a as ce,n as le,o as O,t as ue}from"./leader-focus-azN19kfO.js";import{c as de,i as fe}from"./leader-model-CYyfrzNf.js";import{t as k}from"./LeaderCard-3P95vgVU.js";var A=r(t(),1),j={panel:`_panel_y2ds1_9`,head:`_head_y2ds1_18`,heading:`_heading_y2ds1_27`,title:`_title_y2ds1_35`,caption:`_caption_y2ds1_43`,dormant:`_dormant_y2ds1_49`,dormantDot:`_dormantDot_y2ds1_63`,micro:`_micro_y2ds1_70`,muted:`_muted_y2ds1_79`,textButton:`_textButton_y2ds1_86`,iconButton:`_iconButton_y2ds1_113`,suggestion:`_suggestion_y2ds1_145`,send:`_send_y2ds1_146`,log:`_log_y2ds1_147`,directives:`_directives_y2ds1_153`,chips:`_chips_y2ds1_162`,directiveChip:`_directiveChip_y2ds1_169`,directiveText:`_directiveText_y2ds1_183`,pin:`_pin_y2ds1_190`,addDirective:`_addDirective_y2ds1_198`,directiveInput:`_directiveInput_y2ds1_206`,counter:`_counter_y2ds1_224`,logInner:`_logInner_y2ds1_245`,groupBody:`_groupBody_y2ds1_254`,group:`_group_y2ds1_254`,thinking:`_thinking_y2ds1_260`,masonItem:`_masonItem_y2ds1_264`,older:`_older_y2ds1_269`,placeholder:`_placeholder_y2ds1_274`,empty:`_empty_y2ds1_285`,emptyTitle:`_emptyTitle_y2ds1_295`,emptyBody:`_emptyBody_y2ds1_302`,suggestions:`_suggestions_y2ds1_310`,day:`_day_y2ds1_335`,system:`_system_y2ds1_355`,groupHead:`_groupHead_y2ds1_375`,avatar:`_avatar_y2ds1_388`,who:`_who_y2ds1_408`,time:`_time_y2ds1_413`,channel:`_channel_y2ds1_417`,entry:`_entry_y2ds1_450`,leaderText:`_leaderText_y2ds1_460`,prose:`_prose_y2ds1_467`,bubble:`_bubble_y2ds1_483`,replyTo:`_replyTo_y2ds1_505`,delivery:`_delivery_y2ds1_514`,failed:`_failed_y2ds1_524`,dots:`_dots_y2ds1_544`,"leader-dot":`_leader-dot_y2ds1_1`,memoCard:`_memoCard_y2ds1_584`,memoHead:`_memoHead_y2ds1_600`,memoFacts:`_memoFacts_y2ds1_610`,delta:`_delta_y2ds1_632`,memoActions:`_memoActions_y2ds1_647`,more:`_more_y2ds1_658`,question:`_question_y2ds1_669`,answered:`_answered_y2ds1_690`,answeredText:`_answeredText_y2ds1_706`,directiveNote:`_directiveNote_y2ds1_714`,directiveNoteText:`_directiveNoteText_y2ds1_726`,foot:`_foot_y2ds1_735`,composer:`_composer_y2ds1_740`,composerContext:`_composerContext_y2ds1_747`,composerContextText:`_composerContextText_y2ds1_756`,composerRow:`_composerRow_y2ds1_762`,composerBox:`_composerBox_y2ds1_785`,composerHint:`_composerHint_y2ds1_835`,key:`_key_y2ds1_857`},M=e(),N=300,P=.9;function pe({read:e,actions:t,adding:n,onAddingChange:r}){let[i,a]=(0,A.useState)(``),o=(0,A.useRef)(null);(0,A.useEffect)(()=>{n&&o.current?.focus()},[n]);let s=e?.value??null,c=t.busy||t.readOnly,l=i.trim().length,d=l>N,p=!d&&l>=Math.floor(N*P);function m(){let e=i.trim();!e||e.length>N||t.act(()=>T(e),`Adding a Leader directive requires the dispatch token.`,{onDone:()=>{a(``),r(!1)}})}function h(e){if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),a(``),r(!1);return}e.key===`Enter`&&!e.nativeEvent.isComposing&&(e.preventDefault(),e.stopPropagation(),m())}return(0,M.jsxs)(`div`,{className:j.directives,role:`group`,"aria-label":`Directives`,children:[(0,M.jsx)(`span`,{className:j.micro,children:`Directives`}),e?s===null?(0,M.jsx)(`span`,{className:j.muted,children:e.reason??`Directives did not answer.`}):s.length===0&&!n?(0,M.jsx)(`span`,{className:j.muted,children:`None standing — the Leader works from its own judgment.`}):(0,M.jsx)(`ul`,{className:j.chips,children:s.map(e=>(0,M.jsxs)(`li`,{className:j.directiveChip,title:[e.text,e.channel?`added from ${S[e.channel]}`:null].filter(Boolean).join(` — `),children:[(0,M.jsx)(`span`,{className:j.pin,"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:j.directiveText,children:e.text}),(0,M.jsx)(`button`,{type:`button`,className:j.iconButton,"aria-label":`Retire directive: ${e.text}`,disabled:c,onClick:()=>t.act(()=>w(e.id),`Retiring a Leader directive requires the dispatch token.`),children:(0,M.jsx)(u,{})})]},e.id))}):(0,M.jsx)(`span`,{className:j.muted,"aria-busy":`true`,children:`Reading…`}),n?(0,M.jsxs)(`span`,{className:j.addDirective,children:[(0,M.jsx)(`input`,{ref:o,className:j.directiveInput,"aria-label":`New directive`,placeholder:`e.g. No new goals until binshield ships`,value:i,"aria-invalid":d||void 0,"aria-describedby":`leader-directive-counter`,onChange:e=>a(e.target.value),onKeyDown:h,onBlur:()=>{i.trim()||r(!1)}}),(0,M.jsxs)(`span`,{id:`leader-directive-counter`,className:j.counter,"data-near":p?`true`:void 0,"data-over":d?`true`:void 0,"aria-live":`polite`,children:[l,`/`,N]}),(0,M.jsx)(`button`,{type:`button`,className:j.textButton,disabled:c||l===0||d,onClick:m,children:`Add`})]}):s===null?null:(0,M.jsxs)(`button`,{type:`button`,className:j.textButton,disabled:t.readOnly,onClick:()=>r(!0),children:[(0,M.jsx)(f,{}),` Add directive`]})]})}var me=(0,A.lazy)(()=>n(()=>import(`./VoiceInput-B7yrGchr.js`).then(e=>e.r),__vite__mapDeps([0,1,2,3,4,5,6,7])));function F(e,t){e.style.height=`auto`;let n=Number.parseFloat(getComputedStyle(e).lineHeight)||20,r=e.offsetHeight-e.clientHeight,i=n*t+r+16;e.style.height=`${Math.min(e.scrollHeight+r,i)}px`,e.style.overflowY=e.scrollHeight+r>i?`auto`:`hidden`}var he=(0,A.forwardRef)(function({value:e,onChange:t,onSend:n,label:r,placeholder:i,disabledReason:a=null,variant:o=`thread`,context:s=null,autoFocus:c=!1,maxLines:l=8},d){let f=(0,A.useRef)(null);(0,A.useImperativeHandle)(d,()=>({focus:()=>f.current?.focus({preventScroll:!1})}),[]),(0,A.useEffect)(()=>{f.current&&F(f.current,l)},[e,l]);let h=(0,A.useRef)(e);h.current=e;let g=(0,A.useRef)(t);g.current=t;let _=(0,A.useCallback)(e=>{let t=f.current,n=t!==null&&document.activeElement===t,r=m(h.current,e,n?t.selectionStart:null,n?t.selectionEnd:null);g.current(r.value),requestAnimationFrame(()=>f.current?.setSelectionRange(r.caret,r.caret))},[]),v=e.trim(),y=e.length>E,b=v.length>0&&!y&&a===null,x=(0,A.useCallback)(()=>{b&&n(v)},[b,n,v]);function ee(e){e.key!==`Enter`||e.shiftKey||e.altKey||e.nativeEvent.isComposing||e.keyCode===229||(e.preventDefault(),e.stopPropagation(),x())}let te=e.length>E*.9;return(0,M.jsxs)(`div`,{className:j.composer,"data-variant":o,"data-disabled":a===null?void 0:`true`,children:[s?(0,M.jsxs)(`div`,{className:j.composerContext,children:[(0,M.jsx)(`span`,{className:j.composerContextText,title:s.label,children:s.label}),(0,M.jsx)(`button`,{type:`button`,className:j.iconButton,"aria-label":`Stop answering this question`,onClick:s.onClear,children:(0,M.jsx)(u,{})})]}):null,(0,M.jsxs)(`div`,{className:j.composerRow,children:[(0,M.jsx)(`textarea`,{ref:f,className:j.composerBox,"aria-label":r,placeholder:a??i,value:e,rows:1,disabled:a!==null,autoFocus:c,onChange:e=>t(e.target.value),onKeyDown:ee,"aria-invalid":y||void 0}),(0,M.jsx)(A.Suspense,{fallback:null,children:(0,M.jsx)(me,{surface:`leader`,targetRef:f,disabled:a!==null,onInsert:_})}),(0,M.jsx)(`button`,{type:`button`,className:j.send,"aria-label":o===`answer`?`Send answer`:`Send to the Leader`,disabled:!b,onClick:x,children:(0,M.jsx)(p,{})})]}),o===`thread`?(0,M.jsxs)(`p`,{className:j.composerHint,children:[te?(0,M.jsxs)(`span`,{className:j.counter,"data-over":y?`true`:void 0,children:[e.length.toLocaleString(`en-US`),` / `,E.toLocaleString(`en-US`)]}):null,(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`kbd`,{className:j.key,children:`↵`}),` send · `,(0,M.jsx)(`kbd`,{className:j.key,children:`Shift`}),` `,(0,M.jsx)(`kbd`,{className:j.key,children:`↵`}),` new line`]})]}):null]})});function I({channel:e}){return(0,M.jsx)(`span`,{className:j.channel,"data-channel":e,title:`Sent via ${S[e]}`,children:S[e]})}function L(e){switch(e?.telegram){case`sent`:return{text:`Also sent to Telegram`,failed:!1};case`failed`:return{text:`Telegram: not delivered`,failed:!0};case`pending`:return{text:`Sending to Telegram…`,failed:!1};default:return null}}function R({message:e}){let t=L(e.delivery);return t?(0,M.jsx)(`span`,{className:j.delivery,"data-failed":t.failed?`true`:void 0,children:t.text}):null}function z(e,t){if(e.replyTo){let n=t.byId.get(e.replyTo);if(n)return n}if(e.questionId){for(let n of t.byId.values())if(n.kind===`question`&&n.questionId===e.questionId)return n}return null}function ge({message:e,ctx:t}){let{leader:n}=t,r=e.memoId??null,i=r&&n?.latest?.id===r?n.latest:null,a=r?n?.timeline.find(e=>e.id===r)??null:null,o=[];n&&(i?o=de(n):e.actionIds?o=e.actionIds.flatMap(e=>n.actions.find(t=>t.id===e)??[]):r&&(o=n.actions.filter(e=>e.memoId===r)));let s=i?.bottleneck?.statement??a?.bottleneck??null,c=i?.move?.statement??a?.move??null,l=fe(i?.move?.expectedDelta??a?.expectedDelta??null),u=i?.dryRun??!1,d=s!==null||c!==null||o.length>0;return(0,M.jsxs)(`article`,{className:j.memoCard,"aria-label":`Leader memo`,"data-dry-run":u?`true`:void 0,children:[(0,M.jsxs)(`header`,{className:j.memoHead,children:[(0,M.jsx)(`span`,{className:j.micro,children:`Memo`}),u?(0,M.jsx)(`span`,{className:_.dryRun,children:`Dry run`}):null,a?(0,M.jsx)(`button`,{type:`button`,className:j.textButton,onClick:()=>g(`memo-${a.id}`),children:`In the timeline`}):null]}),d?(0,M.jsxs)(`dl`,{className:j.memoFacts,children:[s?(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`dt`,{className:j.micro,children:`Bottleneck`}),(0,M.jsx)(`dd`,{children:s})]}):null,c?(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`dt`,{className:j.micro,children:`The move`}),(0,M.jsxs)(`dd`,{children:[c,l?(0,M.jsx)(`span`,{className:j.delta,children:l}):null]})]}):null]}):(0,M.jsx)(`div`,{className:j.prose,children:(0,M.jsx)(h,{text:e.text})}),o.length?(0,M.jsx)(`ul`,{className:`${_.actionList} ${j.memoActions}`,"aria-label":`Memo actions`,children:o.map(e=>(0,M.jsx)(k,{action:e,actions:t.actions,approve:!0,dryRun:u,anchored:!1},e.id))}):null,u?(0,M.jsx)(`p`,{className:j.muted,children:t.dormant?`Autonomy is off, so this memo is a dry run — its actions are shown, never applied.`:`Shadow stage — these actions are shown, never applied.`}):null,d&&e.text.trim()?(0,M.jsxs)(`details`,{className:j.more,children:[(0,M.jsx)(`summary`,{children:`The Leader’s note`}),(0,M.jsx)(`div`,{className:j.prose,children:(0,M.jsx)(h,{text:e.text})})]}):null]})}function _e({message:e,ctx:t}){let n=t.answered.get(e.id)??null,r=t.answering.has(e.questionId??e.id);return(0,M.jsxs)(`article`,{className:j.question,"aria-label":`Leader question`,"data-answered":n?`true`:void 0,"data-focused":t.focusQuestionId===e.id?`true`:void 0,"data-question-id":e.id,children:[(0,M.jsxs)(`span`,{className:j.micro,children:[`Question`,e.memoId?` · from the memo`:``]}),(0,M.jsx)(`div`,{className:j.prose,children:(0,M.jsx)(h,{text:e.text})}),n?(0,M.jsxs)(`p`,{className:j.answered,children:[(0,M.jsx)(d,{}),` Answered`,n.channel===`verse`?``:` on ${S[n.channel]}`,` · `,(0,M.jsx)(`span`,{className:j.answeredText,children:D(n.text,120)})]}):r?(0,M.jsx)(`p`,{className:j.muted,role:`status`,children:`Sending your answer…`}):(0,M.jsx)(he,{variant:`answer`,label:`Answer the Leader: ${D(e.text,80)}`,placeholder:`Answer the Leader…`,value:t.answerDraft(e.id),onChange:n=>t.setAnswerDraft(e.id,n),onSend:n=>t.onAnswer(e,n),disabledReason:t.sendDisabledReason,autoFocus:t.focusQuestionId===e.id,maxLines:6})]})}function B({message:e,ctx:t}){let n=t.leader&&e.actionIds?e.actionIds.flatMap(e=>t.leader.actions.find(t=>t.id===e)??[]):[];return(0,M.jsxs)(`div`,{className:j.leaderText,children:[(0,M.jsx)(`div`,{className:j.prose,children:(0,M.jsx)(h,{text:e.text})}),n.length?(0,M.jsx)(`ul`,{className:`${_.actionList} ${j.memoActions}`,"aria-label":`Actions`,children:n.map(e=>(0,M.jsx)(k,{action:e,actions:t.actions,approve:!0,compact:!0,anchored:!1},e.id))}):null]})}function V({message:e,ctx:t}){let n=e.kind===`answer`||e.replyTo?z(e,t):null;return(0,M.jsxs)(`div`,{className:j.masonItem,children:[n?(0,M.jsxs)(`span`,{className:j.replyTo,title:n.text,children:[`Re: `,D(n.text,90)]}):null,(0,M.jsx)(`p`,{className:j.bubble,children:e.text}),(0,M.jsx)(R,{message:e})]})}function H({pending:e,ctx:t}){return(0,M.jsxs)(`div`,{className:j.masonItem,"data-state":e.state,children:[(0,M.jsx)(`p`,{className:j.bubble,"data-state":e.state,children:e.text}),e.state===`sending`?(0,M.jsx)(`span`,{className:j.delivery,children:`Sending…`}):(0,M.jsxs)(`span`,{className:j.failed,role:`alert`,children:[`Not sent`,e.error?` — ${e.error.replace(/\.$/,``)}`:``,`.`,(0,M.jsx)(`button`,{type:`button`,className:j.textButton,onClick:()=>t.onRetry(e.clientId),disabled:t.sendDisabledReason!==null,children:`Retry`}),(0,M.jsx)(`button`,{type:`button`,className:j.textButton,onClick:()=>t.onDiscard(e.clientId),children:`Discard`})]})]})}function U({message:e}){return(0,M.jsxs)(`p`,{className:j.directiveNote,children:[(0,M.jsx)(`span`,{className:j.pin,"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:j.micro,children:`Directive`}),(0,M.jsx)(`span`,{className:j.directiveNoteText,children:e.text})]})}function W({entry:e,ctx:t}){if(e.type===`pending`)return(0,M.jsx)(H,{pending:e.pending,ctx:t});let n=e.message;switch(n.kind){case`memo`:return(0,M.jsx)(ge,{message:n,ctx:t});case`question`:return(0,M.jsx)(_e,{message:n,ctx:t});case`directive`:return(0,M.jsx)(U,{message:n});case`action`:return n.from===`leader`?(0,M.jsx)(B,{message:n,ctx:t}):(0,M.jsx)(V,{message:n,ctx:t});default:return n.from===`mason`?(0,M.jsx)(V,{message:n,ctx:t}):(0,M.jsxs)(`div`,{className:j.leaderText,children:[(0,M.jsx)(`div`,{className:j.prose,children:(0,M.jsx)(h,{text:n.text})}),(0,M.jsx)(R,{message:n})]})}}function ve({rows:e,ctx:t}){return(0,M.jsx)(M.Fragment,{children:e.map(e=>{if(e.type===`day`)return(0,M.jsx)(`div`,{className:j.day,role:`separator`,"aria-label":e.label,children:(0,M.jsx)(`span`,{children:e.label})},e.key);if(e.type===`system`)return(0,M.jsxs)(`p`,{className:j.system,"data-message-id":e.entry.message.id,children:[e.entry.message.text,` `,(0,M.jsx)(`time`,{dateTime:e.entry.message.at,children:C(e.entry.message.at)})]},e.key);let n=e.from===`leader`;return(0,M.jsxs)(`section`,{className:j.group,"data-from":e.from,"aria-label":`${n?`Leader`:`You`}, ${C(e.at)}`,children:[(0,M.jsxs)(`header`,{className:j.groupHead,children:[(0,M.jsx)(`span`,{className:j.avatar,"data-from":e.from,"aria-hidden":`true`,children:n?`L`:`M`}),(0,M.jsx)(`span`,{className:j.who,children:n?`Leader`:`You`}),(0,M.jsx)(I,{channel:e.channel}),(0,M.jsx)(`time`,{className:j.time,dateTime:e.at,title:new Date(e.at).toLocaleString(`en-US`),children:C(e.at)})]}),(0,M.jsx)(`div`,{className:j.groupBody,children:e.entries.map(e=>(0,M.jsx)(`div`,{className:j.entry,"data-message-id":e.type===`message`?e.message.id:void 0,"data-kind":e.type===`message`?e.message.kind:`pending`,children:(0,M.jsx)(W,{entry:e,ctx:t})},e.key))})]},e.key)})})}var ye=1e4,be=3e3,xe=3e4,Se=`Messaging the Leader requires the dispatch token.`,Ce=96,we=[`What is the bottleneck right now?`,`Why this move, and what would change your mind?`,`What would you do with more Claude budget?`];function Te(){let[e,t]=(0,A.useState)(!1),[n,r]=(0,A.useState)(``),a=(0,A.useRef)(null),o=(0,A.useCallback)((e,n)=>{if(i()){n();return}a.current=n,r(e),t(!0)},[]),s=(0,A.useCallback)(()=>{t(!1);let e=a.current;a.current=null,e&&i()&&e()},[]);return{run:o,dialog:(0,M.jsx)(c,{open:e,onClose:s,reason:n,tokenHelp:`the mutation token ashlr verse printed`})}}var Ee=0;function G({leader:e,actions:t,dormant:n}){let r=(0,A.useId)(),i=a(se,{freshMs:5e3}),c=s(se),u=a(x,{freshMs:3e4}),d=s(x),f=Te(),p=v(1e4),[m,h]=(0,A.useState)([]),[g,_]=(0,A.useState)(`idle`),[S,C]=(0,A.useState)([]),[w,T]=(0,A.useState)([]),[E,de]=(0,A.useState)(()=>new Set),[fe,k]=(0,A.useState)(``),[N,P]=(0,A.useState)(null),[me,F]=(0,A.useState)({}),[I,L]=(0,A.useState)(null),[R,z]=(0,A.useState)(!1),[ge,_e]=(0,A.useState)(!1),B=(0,A.useRef)(null),V=(0,A.useRef)(null),H=(0,A.useRef)(null),U=(0,A.useRef)(!0),W=(0,A.useRef)(!0),G=i.data,K=G?.value?.messages??null,q=(0,A.useMemo)(()=>b(K?[m,K]:[m],S,w),[m,K,S,w]),J=(0,A.useMemo)(()=>q.flatMap(e=>e.type===`message`?[e.message]:[]),[q]),De=(0,A.useMemo)(()=>new Map(J.map(e=>[e.id,e])),[J]),Oe=(0,A.useMemo)(()=>te(J),[J]),ke=(0,A.useMemo)(()=>re(q,p),[q,p]),Y=ne(q,E,p);l(c,Y?be:ye),l(d,xe),(0,A.useEffect)(()=>{if(!K||S.length===0)return;let e=new Set(K.map(e=>e.id));S.some(t=>e.has(t.id))&&C(t=>t.filter(t=>!e.has(t.id)))},[K,S]);let Ae=G!==void 0&&G.value===null,je=ge||t.readOnly?`Read-only session — this server runs without dispatch, so messages cannot be sent.`:Ae?`The conversation is not available on this server.`:null,X=(0,A.useCallback)(async e=>{try{let t=e.kind===`answer`&&e.questionId?await oe(e.questionId,e.text):await ee(e.text,e.replyTo);T(t=>t.filter(t=>t.clientId!==e.clientId)),t&&(C(e=>[...e,t.message,...t.reply?[t.reply]:[]]),t.reply||de(e=>new Set(e).add(t.message.id))),W.current=!0,c()}catch(t){t instanceof o&&_e(!0),T(n=>n.map(n=>n.clientId===e.clientId?{...n,state:`failed`,error:y(t)}:n))}},[c]),Z=(0,A.useCallback)((e,t)=>{f.run(Se,()=>{Ee+=1;let n={clientId:`local-${Ee}`,kind:t.kind,text:e,at:new Date().toISOString(),replyTo:t.replyTo,questionId:t.questionId,state:`sending`,error:null};t.onStart(),W.current=!0,T(e=>[...e,n]),X(n)})},[f,X]),Me=(0,A.useCallback)(e=>{let t=N?`> ${N.replace(/\n/g,` `)}\n\n${e}`:e;Z(t,{kind:`message`,replyTo:null,questionId:null,onStart:()=>{k(``),P(null)}})},[N,Z]),Ne=(0,A.useCallback)((e,t)=>{Z(t,{kind:`answer`,replyTo:e.id,questionId:e.questionId??e.id,onStart:()=>F(t=>({...t,[e.id]:``}))})},[Z]),Pe=(0,A.useCallback)(e=>{f.run(Se,()=>{let t=w.find(t=>t.clientId===e);if(!t)return;let n={...t,state:`sending`,error:null,at:new Date().toISOString()};W.current=!0,T(t=>t.map(t=>t.clientId===e?n:t)),X(n)})},[f,w,X]),Fe=(0,A.useCallback)(e=>T(t=>t.filter(t=>t.clientId!==e)),[]),Q=(0,A.useSyncExternalStore)(ce,ue,()=>null);(0,A.useEffect)(()=>{if(!Q)return;if(!le(Q)){O(Q.seq);return}if(Q.kind===`composer`){W.current=!0,B.current?.focus(),O(Q.seq);return}if(Q.kind===`directive`){z(!0),O(Q.seq);return}if(!G)return;let e=ae(J,Q);e?L(e.id):(P(Q.text??`the Leader’s question`),B.current?.focus()),O(Q.seq)},[Q,G,J]),(0,A.useEffect)(()=>{if(!I)return;let e=[...V.current?.querySelectorAll(`[data-question-id]`)??[]].find(e=>e.dataset.questionId===I);if(!e)return;e.scrollIntoView?.({block:`center`,behavior:`smooth`}),e.querySelector(`textarea`)?.focus({preventScroll:!0});let t=window.setTimeout(()=>L(null),2400);return()=>window.clearTimeout(t)},[I]);let Ie=(0,A.useCallback)(()=>{let e=V.current;e&&(U.current=e.scrollHeight-e.scrollTop-e.clientHeight<=Ce)},[]),Le=q.length?q[q.length-1].key:null;(0,A.useLayoutEffect)(()=>{let e=V.current;e&&((W.current||U.current)&&(e.scrollTop=e.scrollHeight),W.current=!1)},[Le,Y]),(0,A.useEffect)(()=>{let e=V.current,t=H.current;if(!e||!t||typeof ResizeObserver>`u`)return;let n=e.scrollHeight,r=new ResizeObserver(()=>{(e.scrollTop+e.clientHeight>=n-Ce||U.current)&&(e.scrollTop=e.scrollHeight,U.current=!0),n=e.scrollHeight});return r.observe(t),()=>r.disconnect()},[]);let $=J.length?J[0].id:null,Re=g!==`done`&&g!==`loading`&&(K?.length??0)>=50&&$!==null,ze=(0,A.useCallback)(async()=>{if(!$)return;let e=V.current,t=e?e.scrollHeight-e.scrollTop:0;_(`loading`);try{let n=await ie($);h(e=>[...n,...e]),_(n.length<50?`done`:`idle`),requestAnimationFrame(()=>{e&&(e.scrollTop=e.scrollHeight-t)})}catch{_(`error`)}},[$]),Be=(0,A.useMemo)(()=>new Set(w.filter(e=>e.kind===`answer`&&e.state===`sending`&&e.questionId).map(e=>e.questionId)),[w]),Ve={leader:e?.value??null,actions:t,answered:Oe,byId:De,answering:Be,focusQuestionId:I,answerDraft:e=>me[e]??``,setAnswerDraft:(e,t)=>F(n=>({...n,[e]:t})),onAnswer:Ne,onRetry:Pe,onDiscard:Fe,sendDisabledReason:je,dormant:n};return(0,M.jsxs)(`section`,{className:j.panel,"aria-labelledby":r,"data-testid":`leader-conversation`,children:[(0,M.jsxs)(`header`,{className:j.head,children:[(0,M.jsxs)(`span`,{className:j.heading,children:[(0,M.jsx)(`h3`,{id:r,className:j.title,children:`Leader`}),(0,M.jsx)(`span`,{className:j.caption,children:`One conversation across Verse, Telegram and the CLI`})]}),n?(0,M.jsxs)(`span`,{className:j.dormant,title:`The Leader still reads, answers and writes memos. With autonomy off, every memo is a dry run: its actions are shown, never applied.`,children:[(0,M.jsx)(`span`,{className:j.dormantDot,"aria-hidden":`true`}),`Autonomy off · memos are dry runs`]}):null]}),(0,M.jsx)(pe,{read:u.data,actions:t,adding:R,onAddingChange:z}),(0,M.jsx)(`div`,{ref:V,className:j.log,role:`log`,"aria-label":`Conversation with the Leader`,"aria-live":`polite`,"aria-relevant":`additions`,onScroll:Ie,tabIndex:0,children:(0,M.jsxs)(`div`,{ref:H,className:j.logInner,children:[Re||g===`error`||g===`loading`?(0,M.jsx)(`div`,{className:j.older,children:(0,M.jsx)(`button`,{type:`button`,className:j.textButton,onClick:()=>void ze(),disabled:g===`loading`,children:g===`loading`?`Loading earlier messages…`:g===`error`?`Earlier messages did not load — try again`:`Load earlier messages`})}):null,G?Ae&&q.length===0?(0,M.jsx)(`p`,{className:j.placeholder,"data-tone":`unknown`,children:G.reason??`The Leader conversation did not answer.`}):q.length===0?(0,M.jsxs)(`div`,{className:j.empty,children:[(0,M.jsx)(`p`,{className:j.emptyTitle,children:`No conversation yet`}),(0,M.jsx)(`p`,{className:j.emptyBody,children:`Ask the Leader why it made a move, what it would do next, or give it a standing directive. Replies here also reach Telegram when it is connected.`}),je===null?(0,M.jsx)(`div`,{className:j.suggestions,children:we.map(e=>(0,M.jsx)(`button`,{type:`button`,className:j.suggestion,onClick:()=>{k(e),B.current?.focus()},children:e},e))}):null]}):(0,M.jsx)(ve,{rows:ke,ctx:Ve}):(0,M.jsx)(`p`,{className:j.placeholder,"aria-busy":`true`,children:`Reading the conversation…`}),Y?(0,M.jsxs)(`p`,{className:j.thinking,role:`status`,children:[(0,M.jsxs)(`span`,{className:j.dots,"aria-hidden":`true`,children:[(0,M.jsx)(`span`,{}),(0,M.jsx)(`span`,{}),(0,M.jsx)(`span`,{})]}),`Leader is thinking…`]}):null]})}),(0,M.jsx)(`div`,{className:j.foot,children:(0,M.jsx)(he,{ref:B,label:`Message the Leader`,placeholder:`Message the Leader…`,value:fe,onChange:k,onSend:Me,disabledReason:je,context:N?{label:`Answering: ${D(N,120)}`,onClear:()=>P(null)}:null})}),f.dialog]})}export{xe as DIRECTIVES_POLL_MS,G as LeaderConversation,G as default,ye as THREAD_POLL_MS,be as THREAD_POLL_THINKING_MS};
3
- //# sourceMappingURL=LeaderConversation-DjZS2PrX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/leader/DirectivesStrip.tsx","../../../../../../src/web-ui/routes/verse/leader/LeaderComposer.tsx","../../../../../../src/web-ui/routes/verse/leader/ThreadItems.tsx","../../../../../../src/web-ui/routes/verse/leader/LeaderConversation.tsx"],"sourcesContent":["/**\n * routes/verse/leader/DirectivesStrip.tsx — Mason's standing instructions to\n * the Leader, pinned above the conversation as chips.\n *\n * DIRECTIVES [Ship binshield before new goals ×] [No spend raises at night ×] + Add directive\n *\n * × retires one (token, no confirmation: a directive can be added back in a\n * second, and retiring one only removes an instruction). \"+ Add directive\"\n * opens an inline box: Enter adds, Escape cancels. Both go through the\n * surface's actions (token prompt, read-only explanation, the server's own\n * refusal sentence on the Mind action line).\n *\n * The box counts against the server's own limit (OPERATOR_DIRECTIVE_MAX,\n * shared with leader-operator.ts): \"142/300\", amber near the limit, red and\n * Add disabled over it. No `maxLength` on the input — a paste that runs long\n * stays visible and editable instead of being silently cut.\n */\nimport { useEffect, useRef, useState, type KeyboardEvent } from 'react';\nimport { IconPlus, IconX } from '../../../components/primitives/icons.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { addLeaderDirective, retireLeaderDirective } from './thread-data.js';\nimport { CHANNEL_LABEL } from './thread-model.js';\nimport { OPERATOR_DIRECTIVE_MAX, type DirectiveChip } from './thread-types.js';\nimport styles from './leader.module.css';\n\n/** The server's limit (leader-thread-types.ts) — one number for both sides. */\nexport const DIRECTIVE_MAX = OPERATOR_DIRECTIVE_MAX;\n/** The counter turns to a warning at this share of the limit. */\nconst DIRECTIVE_NEAR = 0.9;\n\nexport interface DirectivesStripProps {\n read: OptionalRead<DirectiveChip[]> | undefined;\n actions: SurfaceActions;\n /** The inline add box is open (the panel opens it for ⌘K \"Add Leader directive…\"). */\n adding: boolean;\n onAddingChange: (adding: boolean) => void;\n}\n\nexport function DirectivesStrip({ read, actions, adding, onAddingChange }: DirectivesStripProps) {\n const [draft, setDraft] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (adding) inputRef.current?.focus();\n }, [adding]);\n\n const list = read?.value ?? null;\n const disabled = actions.busy || actions.readOnly;\n const length = draft.trim().length;\n const over = length > DIRECTIVE_MAX;\n const near = !over && length >= Math.floor(DIRECTIVE_MAX * DIRECTIVE_NEAR);\n\n function add() {\n const text = draft.trim();\n if (!text || text.length > DIRECTIVE_MAX) return;\n actions.act(() => addLeaderDirective(text), 'Adding a Leader directive requires the dispatch token.', {\n onDone: () => {\n setDraft('');\n onAddingChange(false);\n },\n });\n }\n\n function onKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setDraft('');\n onAddingChange(false);\n return;\n }\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n event.stopPropagation();\n add();\n }\n }\n\n return (\n <div className={styles.directives} role=\"group\" aria-label=\"Directives\">\n <span className={styles.micro}>Directives</span>\n {!read ? (\n <span className={styles.muted} aria-busy=\"true\">Reading…</span>\n ) : list === null ? (\n <span className={styles.muted}>{read.reason ?? 'Directives did not answer.'}</span>\n ) : list.length === 0 && !adding ? (\n <span className={styles.muted}>None standing — the Leader works from its own judgment.</span>\n ) : (\n <ul className={styles.chips}>\n {list.map((d) => (\n <li key={d.id} className={styles.directiveChip} title={[d.text, d.channel ? `added from ${CHANNEL_LABEL[d.channel]}` : null].filter(Boolean).join(' — ')}>\n <span className={styles.pin} aria-hidden=\"true\" />\n <span className={styles.directiveText}>{d.text}</span>\n <button\n type=\"button\"\n className={styles.iconButton}\n aria-label={`Retire directive: ${d.text}`}\n disabled={disabled}\n onClick={() => actions.act(() => retireLeaderDirective(d.id), 'Retiring a Leader directive requires the dispatch token.')}\n >\n <IconX />\n </button>\n </li>\n ))}\n </ul>\n )}\n {adding ? (\n <span className={styles.addDirective}>\n <input\n ref={inputRef}\n className={styles.directiveInput}\n aria-label=\"New directive\"\n placeholder=\"e.g. No new goals until binshield ships\"\n value={draft}\n aria-invalid={over || undefined}\n aria-describedby=\"leader-directive-counter\"\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKeyDown}\n onBlur={() => {\n // An empty box closes on blur; words typed stay until Escape or Add.\n if (!draft.trim()) onAddingChange(false);\n }}\n />\n <span\n id=\"leader-directive-counter\"\n className={styles.counter}\n data-near={near ? 'true' : undefined}\n data-over={over ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {length}/{DIRECTIVE_MAX}\n </span>\n <button type=\"button\" className={styles.textButton} disabled={disabled || length === 0 || over} onClick={add}>\n Add\n </button>\n </span>\n ) : list !== null ? (\n <button type=\"button\" className={styles.textButton} disabled={actions.readOnly} onClick={() => onAddingChange(true)}>\n <IconPlus /> Add directive\n </button>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/leader/LeaderComposer.tsx — the Leader conversation's input:\n * a growing text box and one Send button. Deliberately NOT the chat\n * composer (no seats, models, attachments or slash commands — the Leader\n * reads words).\n *\n * Enter sends · Shift+Enter is a new line · an IME composition is never\n * sent mid-word · an empty or whitespace box never sends.\n *\n * Also the inline answer box under a Leader question (`variant=\"answer\"`):\n * the same keys, one line to start.\n */\nimport { forwardRef, lazy, Suspense, useCallback, useEffect, useImperativeHandle, useRef, type KeyboardEvent } from 'react';\nimport { IconSend, IconX } from '../../../components/primitives/icons.js';\nimport { LEADER_MESSAGE_MAX } from './thread-model.js';\nimport { insertDictation } from '../voice/insert-text.js';\nimport styles from './leader.module.css';\n\nexport interface LeaderComposerHandle {\n focus: () => void;\n}\n\nexport interface LeaderComposerProps {\n value: string;\n onChange: (value: string) => void;\n /** Called with the trimmed text; the owner clears `value` when the send starts. */\n onSend: (text: string) => void;\n label: string;\n placeholder: string;\n /** Why sending is off right now (read-only session, route absent); null = on. */\n disabledReason?: string | null;\n variant?: 'thread' | 'answer';\n /** A line above the box (\"Answering: …\") with a way to drop it. */\n context?: { label: string; onClear: () => void } | null;\n autoFocus?: boolean;\n /** Grow up to this many lines before scrolling. */\n maxLines?: number;\n}\n\n// Dictation (voice/): lazy — none of it loads until a Leader box is on screen.\nconst VoiceInput = lazy(() => import('../voice/VoiceInput.js'));\n\n/** Grow the box to its content, up to `maxLines`. */\nfunction fit(el: HTMLTextAreaElement, maxLines: number): void {\n el.style.height = 'auto';\n const line = Number.parseFloat(getComputedStyle(el).lineHeight) || 20;\n const pad = el.offsetHeight - el.clientHeight;\n const max = line * maxLines + pad + 16;\n el.style.height = `${Math.min(el.scrollHeight + pad, max)}px`;\n el.style.overflowY = el.scrollHeight + pad > max ? 'auto' : 'hidden';\n}\n\nexport const LeaderComposer = forwardRef<LeaderComposerHandle, LeaderComposerProps>(function LeaderComposer(\n { value, onChange, onSend, label, placeholder, disabledReason = null, variant = 'thread', context = null, autoFocus = false, maxLines = 8 },\n ref,\n) {\n const boxRef = useRef<HTMLTextAreaElement>(null);\n useImperativeHandle(ref, () => ({ focus: () => boxRef.current?.focus({ preventScroll: false }) }), []);\n\n useEffect(() => {\n if (boxRef.current) fit(boxRef.current, maxLines);\n }, [value, maxLines]);\n\n // A FINAL dictated transcript lands at the caret (or the end).\n const valueRef = useRef(value);\n valueRef.current = value;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const insertDictated = useCallback((chunk: string) => {\n const node = boxRef.current;\n const focused = node !== null && document.activeElement === node;\n const next = insertDictation(valueRef.current, chunk, focused ? node.selectionStart : null, focused ? node.selectionEnd : null);\n onChangeRef.current(next.value);\n requestAnimationFrame(() => boxRef.current?.setSelectionRange(next.caret, next.caret));\n }, []);\n\n const trimmed = value.trim();\n const over = value.length > LEADER_MESSAGE_MAX;\n const canSend = trimmed.length > 0 && !over && disabledReason === null;\n\n const send = useCallback(() => {\n if (!canSend) return;\n onSend(trimmed);\n }, [canSend, onSend, trimmed]);\n\n function onKeyDown(event: KeyboardEvent<HTMLTextAreaElement>) {\n if (event.key !== 'Enter' || event.shiftKey || event.altKey) return;\n // Mid-composition (Japanese, Chinese, …) Enter picks a candidate, not \"send\".\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n event.preventDefault();\n // Keep the key from reaching a shell or drawer shortcut.\n event.stopPropagation();\n send();\n }\n\n const near = value.length > LEADER_MESSAGE_MAX * 0.9;\n return (\n <div className={styles.composer} data-variant={variant} data-disabled={disabledReason !== null ? 'true' : undefined}>\n {context ? (\n <div className={styles.composerContext}>\n <span className={styles.composerContextText} title={context.label}>{context.label}</span>\n <button type=\"button\" className={styles.iconButton} aria-label=\"Stop answering this question\" onClick={context.onClear}>\n <IconX />\n </button>\n </div>\n ) : null}\n <div className={styles.composerRow}>\n <textarea\n ref={boxRef}\n className={styles.composerBox}\n aria-label={label}\n placeholder={disabledReason ?? placeholder}\n value={value}\n rows={1}\n disabled={disabledReason !== null}\n // Only when the operator asked for this box (a Needs-you \"Answer\").\n autoFocus={autoFocus}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n aria-invalid={over || undefined}\n />\n <Suspense fallback={null}>\n <VoiceInput surface=\"leader\" targetRef={boxRef} disabled={disabledReason !== null} onInsert={insertDictated} />\n </Suspense>\n <button type=\"button\" className={styles.send} aria-label={variant === 'answer' ? 'Send answer' : 'Send to the Leader'} disabled={!canSend} onClick={send}>\n <IconSend />\n </button>\n </div>\n {variant === 'thread' ? (\n <p className={styles.composerHint}>\n {near ? (\n <span className={styles.counter} data-over={over ? 'true' : undefined}>\n {value.length.toLocaleString('en-US')} / {LEADER_MESSAGE_MAX.toLocaleString('en-US')}\n </span>\n ) : null}\n <span>\n <kbd className={styles.key}>↵</kbd> send · <kbd className={styles.key}>Shift</kbd> <kbd className={styles.key}>↵</kbd> new line\n </span>\n </p>\n ) : null}\n </div>\n );\n});\n","/**\n * routes/verse/leader/ThreadItems.tsx — how each kind of Leader-thread\n * message draws (grouping and order are thread-model.ts; state and sends\n * are LeaderConversation.tsx).\n *\n * message / update Leader: prose (sanitised Markdown), left\n * Mason: a quiet bubble (plain text), right\n * memo a card: bottleneck, the move (+ expected delta), the\n * actions with their class chip, veto countdown and\n * [Approve] [Veto]; a dry-run memo says so and offers none\n * question the question and, until answered, its answer box\n * answer Mason's bubble, headed by the question it answers\n * directive a pinned chip (\"Directive · …\")\n * action the Leader's note plus the actions it is about\n * system one centred quiet line\n * pending Mason's bubble while sending; on failure the reason,\n * Retry and Discard\n *\n * Memo and action fields are the Leader's own text: plain text, like the\n * rest of Mind. Conversational text goes through MessageMarkdown, the chat's\n * sanitising renderer (DOMPurify; links open in a new tab, no HTML survives).\n */\nimport type { LeaderAction, LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { IconCheck } from '../../../components/primitives/icons.js';\nimport { MessageMarkdown } from '../MessageMarkdown.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { ActionRow } from '../command/LeaderCard.js';\nimport { scrollToAnchor } from '../command/nav.js';\nimport commandStyles from '../command/command.module.css';\nimport { expectedDeltaText, memoActions } from '../mind/leader-model.js';\nimport { LeaderComposer } from './LeaderComposer.js';\nimport { CHANNEL_LABEL, clockTime, previewText, type PendingMessage, type ThreadEntry, type ThreadRow } from './thread-model.js';\nimport type { LeaderThreadChannel, LeaderThreadMessage } from './thread-types.js';\nimport styles from './leader.module.css';\n\nexport function ChannelBadge({ channel }: { channel: LeaderThreadChannel }) {\n return (\n <span className={styles.channel} data-channel={channel} title={`Sent via ${CHANNEL_LABEL[channel]}`}>\n {CHANNEL_LABEL[channel]}\n </span>\n );\n}\n\n/** \"Also sent to Telegram\" / \"Telegram: not delivered\" — only what the server reported. */\nexport function deliveryNote(delivery: LeaderThreadMessage['delivery']): { text: string; failed: boolean } | null {\n switch (delivery?.telegram) {\n case 'sent':\n return { text: 'Also sent to Telegram', failed: false };\n case 'failed':\n return { text: 'Telegram: not delivered', failed: true };\n case 'pending':\n return { text: 'Sending to Telegram…', failed: false };\n default:\n return null;\n }\n}\n\nfunction DeliveryNote({ message }: { message: LeaderThreadMessage }) {\n const note = deliveryNote(message.delivery);\n return note ? <span className={styles.delivery} data-failed={note.failed ? 'true' : undefined}>{note.text}</span> : null;\n}\n\nexport interface ThreadContext {\n leader: LeaderStateV1 | null;\n actions: SurfaceActions;\n /** question message id → its answer. */\n answered: ReadonlyMap<string, LeaderThreadMessage>;\n /** Every known message by id (an answer names its question). */\n byId: ReadonlyMap<string, LeaderThreadMessage>;\n /** Question ids with an answer in flight. */\n answering: ReadonlySet<string>;\n /** The question whose box should take focus (a Needs-you \"Answer\"). */\n focusQuestionId: string | null;\n answerDraft: (questionMessageId: string) => string;\n setAnswerDraft: (questionMessageId: string, text: string) => void;\n onAnswer: (question: LeaderThreadMessage, text: string) => void;\n onRetry: (clientId: string) => void;\n onDiscard: (clientId: string) => void;\n /** Why sending is off (read-only, route absent); null = on. */\n sendDisabledReason: string | null;\n /** Autonomy is off: memos are dry runs. */\n dormant: boolean;\n}\n\n/** The question an answer closes, by its id or the message it replies to. */\nfunction questionOf(m: LeaderThreadMessage, ctx: ThreadContext): LeaderThreadMessage | null {\n if (m.replyTo) {\n const q = ctx.byId.get(m.replyTo);\n if (q) return q;\n }\n if (m.questionId) {\n for (const q of ctx.byId.values()) if (q.kind === 'question' && q.questionId === m.questionId) return q;\n }\n return null;\n}\n\nfunction MemoCard({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const { leader } = ctx;\n const memoId = message.memoId ?? null;\n const memo = memoId && leader?.latest?.id === memoId ? leader.latest : null;\n const summary = memoId ? leader?.timeline.find((t) => t.id === memoId) ?? null : null;\n let list: LeaderAction[] = [];\n if (leader) {\n if (memo) list = memoActions(leader);\n else if (message.actionIds) list = message.actionIds.flatMap((id) => leader.actions.find((a) => a.id === id) ?? []);\n else if (memoId) list = leader.actions.filter((a) => a.memoId === memoId);\n }\n const bottleneck = memo?.bottleneck?.statement ?? summary?.bottleneck ?? null;\n const move = memo?.move?.statement ?? summary?.move ?? null;\n const delta = expectedDeltaText(memo?.move?.expectedDelta ?? summary?.expectedDelta ?? null);\n const dryRun = memo?.dryRun ?? false;\n const structured = bottleneck !== null || move !== null || list.length > 0;\n return (\n <article className={styles.memoCard} aria-label=\"Leader memo\" data-dry-run={dryRun ? 'true' : undefined}>\n <header className={styles.memoHead}>\n <span className={styles.micro}>Memo</span>\n {dryRun ? <span className={commandStyles.dryRun}>Dry run</span> : null}\n {summary ? (\n <button type=\"button\" className={styles.textButton} onClick={() => scrollToAnchor(`memo-${summary.id}`)}>\n In the timeline\n </button>\n ) : null}\n </header>\n {structured ? (\n <dl className={styles.memoFacts}>\n {bottleneck ? (\n <div>\n <dt className={styles.micro}>Bottleneck</dt>\n <dd>{bottleneck}</dd>\n </div>\n ) : null}\n {move ? (\n <div>\n <dt className={styles.micro}>The move</dt>\n <dd>\n {move}\n {delta ? <span className={styles.delta}>{delta}</span> : null}\n </dd>\n </div>\n ) : null}\n </dl>\n ) : (\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n )}\n {list.length ? (\n <ul className={`${commandStyles.actionList} ${styles.memoActions}`} aria-label=\"Memo actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={ctx.actions} approve dryRun={dryRun} anchored={false} />\n ))}\n </ul>\n ) : null}\n {dryRun ? (\n <p className={styles.muted}>\n {ctx.dormant ? 'Autonomy is off, so this memo is a dry run — its actions are shown, never applied.' : 'Shadow stage — these actions are shown, never applied.'}\n </p>\n ) : null}\n {structured && message.text.trim() ? (\n <details className={styles.more}>\n <summary>The Leader’s note</summary>\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n </details>\n ) : null}\n </article>\n );\n}\n\nfunction QuestionCard({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const answer = ctx.answered.get(message.id) ?? null;\n const sending = ctx.answering.has(message.questionId ?? message.id);\n return (\n <article className={styles.question} aria-label=\"Leader question\" data-answered={answer ? 'true' : undefined} data-focused={ctx.focusQuestionId === message.id ? 'true' : undefined} data-question-id={message.id}>\n <span className={styles.micro}>Question{message.memoId ? ' · from the memo' : ''}</span>\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n {answer ? (\n <p className={styles.answered}>\n <IconCheck /> Answered{answer.channel !== 'verse' ? ` on ${CHANNEL_LABEL[answer.channel]}` : ''} · <span className={styles.answeredText}>{previewText(answer.text, 120)}</span>\n </p>\n ) : sending ? (\n <p className={styles.muted} role=\"status\">Sending your answer…</p>\n ) : (\n <LeaderComposer\n variant=\"answer\"\n label={`Answer the Leader: ${previewText(message.text, 80)}`}\n placeholder=\"Answer the Leader…\"\n value={ctx.answerDraft(message.id)}\n onChange={(v) => ctx.setAnswerDraft(message.id, v)}\n onSend={(text) => ctx.onAnswer(message, text)}\n disabledReason={ctx.sendDisabledReason}\n autoFocus={ctx.focusQuestionId === message.id}\n maxLines={6}\n />\n )}\n </article>\n );\n}\n\nfunction ActionNote({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const list = ctx.leader && message.actionIds ? message.actionIds.flatMap((id) => ctx.leader!.actions.find((a) => a.id === id) ?? []) : [];\n return (\n <div className={styles.leaderText}>\n <div className={styles.prose}>\n <MessageMarkdown text={message.text} />\n </div>\n {list.length ? (\n <ul className={`${commandStyles.actionList} ${styles.memoActions}`} aria-label=\"Actions\">\n {list.map((a) => (\n <ActionRow key={a.id} action={a} actions={ctx.actions} approve compact anchored={false} />\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nfunction MasonBubble({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadContext }) {\n const question = message.kind === 'answer' || message.replyTo ? questionOf(message, ctx) : null;\n return (\n <div className={styles.masonItem}>\n {question ? <span className={styles.replyTo} title={question.text}>Re: {previewText(question.text, 90)}</span> : null}\n {/* Mason's words, possibly from Telegram: plain text, never HTML. */}\n <p className={styles.bubble}>{message.text}</p>\n <DeliveryNote message={message} />\n </div>\n );\n}\n\nfunction PendingBubble({ pending, ctx }: { pending: PendingMessage; ctx: ThreadContext }) {\n return (\n <div className={styles.masonItem} data-state={pending.state}>\n <p className={styles.bubble} data-state={pending.state}>{pending.text}</p>\n {pending.state === 'sending' ? (\n <span className={styles.delivery}>Sending…</span>\n ) : (\n <span className={styles.failed} role=\"alert\">\n Not sent{pending.error ? ` — ${pending.error.replace(/\\.$/, '')}` : ''}.\n <button type=\"button\" className={styles.textButton} onClick={() => ctx.onRetry(pending.clientId)} disabled={ctx.sendDisabledReason !== null}>\n Retry\n </button>\n <button type=\"button\" className={styles.textButton} onClick={() => ctx.onDiscard(pending.clientId)}>\n Discard\n </button>\n </span>\n )}\n </div>\n );\n}\n\nfunction DirectiveNote({ message }: { message: LeaderThreadMessage }) {\n return (\n <p className={styles.directiveNote}>\n <span className={styles.pin} aria-hidden=\"true\" />\n <span className={styles.micro}>Directive</span>\n <span className={styles.directiveNoteText}>{message.text}</span>\n </p>\n );\n}\n\nfunction EntryView({ entry, ctx }: { entry: ThreadEntry; ctx: ThreadContext }) {\n if (entry.type === 'pending') return <PendingBubble pending={entry.pending} ctx={ctx} />;\n const m = entry.message;\n switch (m.kind) {\n case 'memo':\n return <MemoCard message={m} ctx={ctx} />;\n case 'question':\n return <QuestionCard message={m} ctx={ctx} />;\n case 'directive':\n return <DirectiveNote message={m} />;\n case 'action':\n return m.from === 'leader' ? <ActionNote message={m} ctx={ctx} /> : <MasonBubble message={m} ctx={ctx} />;\n default:\n return m.from === 'mason' ? (\n <MasonBubble message={m} ctx={ctx} />\n ) : (\n <div className={styles.leaderText}>\n <div className={styles.prose}>\n <MessageMarkdown text={m.text} />\n </div>\n <DeliveryNote message={m} />\n </div>\n );\n }\n}\n\nexport function ThreadRows({ rows, ctx }: { rows: readonly ThreadRow[]; ctx: ThreadContext }) {\n return (\n <>\n {rows.map((row) => {\n if (row.type === 'day') {\n return (\n <div key={row.key} className={styles.day} role=\"separator\" aria-label={row.label}>\n <span>{row.label}</span>\n </div>\n );\n }\n if (row.type === 'system') {\n return (\n <p key={row.key} className={styles.system} data-message-id={row.entry.message.id}>\n {row.entry.message.text} <time dateTime={row.entry.message.at}>{clockTime(row.entry.message.at)}</time>\n </p>\n );\n }\n const leader = row.from === 'leader';\n return (\n <section key={row.key} className={styles.group} data-from={row.from} aria-label={`${leader ? 'Leader' : 'You'}, ${clockTime(row.at)}`}>\n <header className={styles.groupHead}>\n <span className={styles.avatar} data-from={row.from} aria-hidden=\"true\">{leader ? 'L' : 'M'}</span>\n <span className={styles.who}>{leader ? 'Leader' : 'You'}</span>\n <ChannelBadge channel={row.channel} />\n <time className={styles.time} dateTime={row.at} title={new Date(row.at).toLocaleString('en-US')}>\n {clockTime(row.at)}\n </time>\n </header>\n <div className={styles.groupBody}>\n {row.entries.map((e) => (\n <div key={e.key} className={styles.entry} data-message-id={e.type === 'message' ? e.message.id : undefined} data-kind={e.type === 'message' ? e.message.kind : 'pending'}>\n <EntryView entry={e} ctx={ctx} />\n </div>\n ))}\n </div>\n </section>\n );\n })}\n </>\n );\n}\n","/**\n * routes/verse/leader/LeaderConversation.tsx — talk to the Leader: the heart\n * of Mind (⌘4). Loaded lazily by MindSection (its own chunk: the chat's\n * first paint never pays for it).\n *\n * ┌ Leader ───────────────────── One thread · Verse, Telegram, CLI ─ ● Autonomy off ┐\n * │ DIRECTIVES [Ship binshield first ×] [+ Add directive] │\n * │ ─────────────────────────── Today ─────────────────────────── │\n * │ L Leader · Telegram · 9:14 AM │\n * │ ┌ MEMO ───────────────────────────────── Dry run ┐ │\n * │ │ BOTTLENECK Judge queue on grok-a… │ │\n * │ │ THE MOVE Raise Grok to 3 lanes +4 merges/day by Fri │\n * │ │ [B] Raise Grok to 3 lanes ◔ 18m [Approve] [Veto] │\n * │ ┌ QUESTION Should measurably stay at local enforcement…? │\n * │ │ [ Answer the Leader… ↑ ] │\n * │ You · Verse · 9:20 AM [ Yes, keep… ]│\n * │ ··· Leader is thinking… │\n * │ [ Message the Leader… ↑ ] │\n * └────────────────────────────────────────────────────────────────────────────────┘\n *\n * SENDING is optimistic: the words appear at once as a pending bubble; the\n * server's copy replaces it (thread-model mergeThread dedupes, even when a\n * poll lands before the POST returns); a failure keeps the words with the\n * server's reason, Retry and Discard. Every send needs the mutation token —\n * without one the token dialog opens FIRST and the draft stays in the box\n * until it is unlocked (cancelling loses nothing).\n *\n * \"Leader is thinking…\" shows while a send is in flight and, when the server\n * said it will reply later (reply: null), until the Leader's next message —\n * for at most AWAIT_REPLY_MS. Meanwhile the thread polls every 3 s instead\n * of 10 s. There is no Leader event stream to subscribe to (/api/events has\n * no leader topic), so polling while visible is the honest refresh.\n */\nimport { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport type { LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { hasMutationHold } from '../../../data/auth-store.js';\nimport { DispatchDisabledError } from '../../../data/client.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { describeControlError } from '../autonomy/use-guarded-action.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { DirectivesStrip } from './DirectivesStrip.js';\nimport { getLeaderFocus, isLeaderFocusLive, subscribeLeaderFocus, takeLeaderFocus } from './leader-focus.js';\nimport { LeaderComposer, type LeaderComposerHandle } from './LeaderComposer.js';\nimport { answerLeaderQuestion, fetchOlderThread, leaderDirectivesQuery, leaderThreadQuery, sendLeaderMessage, THREAD_PAGE_SIZE } from './thread-data.js';\nimport {\n answeredQuestions,\n awaitingReply,\n findQuestion,\n groupThread,\n mergeThread,\n previewText,\n type PendingMessage,\n} from './thread-model.js';\nimport { ThreadRows, type ThreadContext } from './ThreadItems.js';\nimport type { LeaderThreadMessage } from './thread-types.js';\nimport styles from './leader.module.css';\n\nexport const THREAD_POLL_MS = 10_000;\nexport const THREAD_POLL_THINKING_MS = 3_000;\nexport const DIRECTIVES_POLL_MS = 30_000;\n\nconst SEND_TOKEN_REASON = 'Messaging the Leader requires the dispatch token.';\n\n/** A thread scrolled within this of its end counts as \"at the end\" (new messages follow it down). */\nconst STICK_PX = 96;\n\nconst SUGGESTIONS = ['What is the bottleneck right now?', 'Why this move, and what would change your mind?', 'What would you do with more Claude budget?'];\n\nexport interface LeaderConversationProps {\n /** The Leader's state (Mind already reads it): memo cards and action rows come from here. */\n leader: OptionalRead<LeaderStateV1> | undefined;\n /** Mind's actions: Approve / Veto / directives share its confirm → token → error line. */\n actions: SurfaceActions;\n /** Autonomy is off: the Leader still talks, its memos are dry runs. */\n dormant: boolean;\n}\n\n/**\n * Token first, then the send — so a cancelled unlock never leaves a\n * phantom pending bubble, and the draft is still in the box.\n */\nfunction useTokenGate() {\n const [open, setOpen] = useState(false);\n const [reason, setReason] = useState('');\n const next = useRef<(() => void) | null>(null);\n const run = useCallback((why: string, fn: () => void) => {\n if (hasMutationHold()) {\n fn();\n return;\n }\n next.current = fn;\n setReason(why);\n setOpen(true);\n }, []);\n const close = useCallback(() => {\n setOpen(false);\n const fn = next.current;\n next.current = null;\n // Read live: the dialog closes synchronously after the token is set.\n if (fn && hasMutationHold()) fn();\n }, []);\n return { run, dialog: <MutationTokenDialog open={open} onClose={close} reason={reason} tokenHelp=\"the mutation token ashlr verse printed\" /> };\n}\n\nlet localSeq = 0;\n\nexport function LeaderConversation({ leader, actions, dormant }: LeaderConversationProps) {\n const titleId = useId();\n const thread = useQuery(leaderThreadQuery, { freshMs: 5_000 });\n const refetchThread = useRefetch(leaderThreadQuery);\n const directives = useQuery(leaderDirectivesQuery, { freshMs: 30_000 });\n const refetchDirectives = useRefetch(leaderDirectivesQuery);\n const gate = useTokenGate();\n // Day labels and the \"thinking\" time-out only: a coarse tick is plenty.\n const now = useNow(10_000);\n\n const [older, setOlder] = useState<LeaderThreadMessage[]>([]);\n const [olderState, setOlderState] = useState<'idle' | 'loading' | 'done' | 'error'>('idle');\n const [received, setReceived] = useState<LeaderThreadMessage[]>([]);\n const [pending, setPending] = useState<PendingMessage[]>([]);\n const [awaiting, setAwaiting] = useState<ReadonlySet<string>>(() => new Set());\n const [draft, setDraft] = useState('');\n /** A Needs-you question the thread has no message for: answered as a quoted message. */\n const [quote, setQuote] = useState<string | null>(null);\n const [answerDrafts, setAnswerDrafts] = useState<Record<string, string>>({});\n const [focusQuestionId, setFocusQuestionId] = useState<string | null>(null);\n const [addingDirective, setAddingDirective] = useState(false);\n const [readOnly, setReadOnly] = useState(false);\n\n const composerRef = useRef<LeaderComposerHandle>(null);\n const logRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const atEnd = useRef(true);\n const stick = useRef(true);\n\n const read = thread.data;\n const page = read?.value?.messages ?? null;\n const entries = useMemo(() => mergeThread(page ? [older, page] : [older], received, pending), [older, page, received, pending]);\n const messages = useMemo(() => entries.flatMap((e) => (e.type === 'message' ? [e.message] : [])), [entries]);\n const byId = useMemo(() => new Map(messages.map((m) => [m.id, m])), [messages]);\n const answered = useMemo(() => answeredQuestions(messages), [messages]);\n const rows = useMemo(() => groupThread(entries, now), [entries, now]);\n const thinking = awaitingReply(entries, awaiting, now);\n\n usePollWhileVisible(refetchThread, thinking ? THREAD_POLL_THINKING_MS : THREAD_POLL_MS);\n usePollWhileVisible(refetchDirectives, DIRECTIVES_POLL_MS);\n\n // A send's echo is dropped once a server read carries it.\n useEffect(() => {\n if (!page || received.length === 0) return;\n const onPage = new Set(page.map((m) => m.id));\n if (received.some((m) => onPage.has(m.id))) setReceived((r) => r.filter((m) => !onPage.has(m.id)));\n }, [page, received]);\n\n const unavailable = read !== undefined && read.value === null;\n const sendDisabledReason =\n readOnly || actions.readOnly\n ? 'Read-only session — this server runs without dispatch, so messages cannot be sent.'\n : unavailable\n ? 'The conversation is not available on this server.'\n : null;\n\n // ---- sending ------------------------------------------------------------\n\n const deliver = useCallback(\n async (p: PendingMessage) => {\n try {\n const result =\n p.kind === 'answer' && p.questionId ? await answerLeaderQuestion(p.questionId, p.text) : await sendLeaderMessage(p.text, p.replyTo);\n setPending((ps) => ps.filter((x) => x.clientId !== p.clientId));\n if (result) {\n setReceived((r) => [...r, result.message, ...(result.reply ? [result.reply] : [])]);\n if (!result.reply) setAwaiting((a) => new Set(a).add(result.message.id));\n }\n stick.current = true;\n refetchThread();\n } catch (err) {\n if (err instanceof DispatchDisabledError) setReadOnly(true);\n setPending((ps) => ps.map((x) => (x.clientId === p.clientId ? { ...x, state: 'failed', error: describeControlError(err) } : x)));\n }\n },\n [refetchThread],\n );\n\n const submit = useCallback(\n (text: string, opts: { kind: 'message' | 'answer'; replyTo: string | null; questionId: string | null; onStart: () => void }) => {\n gate.run(SEND_TOKEN_REASON, () => {\n localSeq += 1;\n const p: PendingMessage = {\n clientId: `local-${localSeq}`,\n kind: opts.kind,\n text,\n at: new Date().toISOString(),\n replyTo: opts.replyTo,\n questionId: opts.questionId,\n state: 'sending',\n error: null,\n };\n opts.onStart();\n stick.current = true;\n setPending((ps) => [...ps, p]);\n void deliver(p);\n });\n },\n [gate, deliver],\n );\n\n const sendDraft = useCallback(\n (text: string) => {\n // A question the thread has no message for is answered as a quoted message.\n const body = quote ? `> ${quote.replace(/\\n/g, ' ')}\\n\\n${text}` : text;\n submit(body, {\n kind: 'message',\n replyTo: null,\n questionId: null,\n onStart: () => {\n setDraft('');\n setQuote(null);\n },\n });\n },\n [quote, submit],\n );\n\n const onAnswer = useCallback(\n (question: LeaderThreadMessage, text: string) => {\n submit(text, {\n kind: 'answer',\n replyTo: question.id,\n questionId: question.questionId ?? question.id,\n onStart: () => setAnswerDrafts((d) => ({ ...d, [question.id]: '' })),\n });\n },\n [submit],\n );\n\n const onRetry = useCallback(\n (clientId: string) => {\n gate.run(SEND_TOKEN_REASON, () => {\n const found = pending.find((x) => x.clientId === clientId);\n if (!found) return;\n // Retried now: it moves to the end of the thread, where a new send would sit.\n const again: PendingMessage = { ...found, state: 'sending', error: null, at: new Date().toISOString() };\n stick.current = true;\n setPending((ps) => ps.map((x) => (x.clientId === clientId ? again : x)));\n void deliver(again);\n });\n },\n [gate, pending, deliver],\n );\n\n const onDiscard = useCallback((clientId: string) => setPending((ps) => ps.filter((x) => x.clientId !== clientId)), []);\n\n // ---- focus requests (⌘K, Command, Needs-you) ------------------------------\n\n const request = useSyncExternalStore(subscribeLeaderFocus, getLeaderFocus, () => null);\n useEffect(() => {\n if (!request) return;\n if (!isLeaderFocusLive(request)) {\n takeLeaderFocus(request.seq);\n return;\n }\n if (request.kind === 'composer') {\n stick.current = true;\n composerRef.current?.focus();\n takeLeaderFocus(request.seq);\n return;\n }\n if (request.kind === 'directive') {\n setAddingDirective(true);\n takeLeaderFocus(request.seq);\n return;\n }\n // A question: wait for the first read, then find it.\n if (!read) return;\n const q = findQuestion(messages, request);\n if (q) setFocusQuestionId(q.id);\n else {\n setQuote(request.text ?? 'the Leader’s question');\n composerRef.current?.focus();\n }\n takeLeaderFocus(request.seq);\n }, [request, read, messages]);\n\n // Reveal the asked-for question; focus its answer box when it has one.\n useEffect(() => {\n if (!focusQuestionId) return;\n // Matched by dataset, not a selector: ids are server strings.\n const host = [...(logRef.current?.querySelectorAll<HTMLElement>('[data-question-id]') ?? [])].find((el) => el.dataset['questionId'] === focusQuestionId);\n if (!host) return;\n host.scrollIntoView?.({ block: 'center', behavior: 'smooth' });\n const box = host.querySelector<HTMLTextAreaElement>('textarea');\n box?.focus({ preventScroll: true });\n const t = window.setTimeout(() => setFocusQuestionId(null), 2_400);\n return () => window.clearTimeout(t);\n }, [focusQuestionId]);\n\n // ---- scrolling ------------------------------------------------------------\n\n const onScroll = useCallback(() => {\n const el = logRef.current;\n if (!el) return;\n atEnd.current = el.scrollHeight - el.scrollTop - el.clientHeight <= STICK_PX;\n }, []);\n\n const lastKey = entries.length ? entries[entries.length - 1]!.key : null;\n useLayoutEffect(() => {\n const el = logRef.current;\n if (!el) return;\n // Follow the conversation down only when the operator is already at its end (or just sent).\n if (stick.current || atEnd.current) el.scrollTop = el.scrollHeight;\n stick.current = false;\n }, [lastKey, thinking]);\n\n // Content also grows WITHOUT a new message — the Markdown chunk lands, the\n // Leader's state turns a memo's text into its card, a font swaps in. An\n // operator at the end stays at the end through all of it.\n useEffect(() => {\n const el = logRef.current;\n const content = contentRef.current;\n if (!el || !content || typeof ResizeObserver === 'undefined') return;\n // Judged against the height BEFORE this growth: the scroll event for the\n // growth can land first and call the operator \"not at the end\" when they were.\n let before = el.scrollHeight;\n const ro = new ResizeObserver(() => {\n const wasAtEnd = el.scrollTop + el.clientHeight >= before - STICK_PX;\n if (wasAtEnd || atEnd.current) {\n el.scrollTop = el.scrollHeight;\n atEnd.current = true;\n }\n before = el.scrollHeight;\n });\n ro.observe(content);\n return () => ro.disconnect();\n }, []);\n\n // ---- older pages ----------------------------------------------------------\n\n const oldestId = messages.length ? messages[0]!.id : null;\n const canLoadOlder = olderState !== 'done' && olderState !== 'loading' && (page?.length ?? 0) >= THREAD_PAGE_SIZE && oldestId !== null;\n const loadOlder = useCallback(async () => {\n if (!oldestId) return;\n const el = logRef.current;\n const before = el ? el.scrollHeight - el.scrollTop : 0;\n setOlderState('loading');\n try {\n const got = await fetchOlderThread(oldestId);\n setOlder((o) => [...got, ...o]);\n setOlderState(got.length < THREAD_PAGE_SIZE ? 'done' : 'idle');\n // Keep the operator's place: the page grows above them.\n requestAnimationFrame(() => {\n if (el) el.scrollTop = el.scrollHeight - before;\n });\n } catch {\n setOlderState('error');\n }\n }, [oldestId]);\n\n // ---- render ---------------------------------------------------------------\n\n const answering = useMemo(\n () => new Set(pending.filter((p) => p.kind === 'answer' && p.state === 'sending' && p.questionId).map((p) => p.questionId!)),\n [pending],\n );\n const ctx: ThreadContext = {\n leader: leader?.value ?? null,\n actions,\n answered,\n byId,\n answering,\n focusQuestionId,\n answerDraft: (id) => answerDrafts[id] ?? '',\n setAnswerDraft: (id, text) => setAnswerDrafts((d) => ({ ...d, [id]: text })),\n onAnswer,\n onRetry,\n onDiscard,\n sendDisabledReason,\n dormant,\n };\n\n return (\n <section className={styles.panel} aria-labelledby={titleId} data-testid=\"leader-conversation\">\n <header className={styles.head}>\n <span className={styles.heading}>\n <h3 id={titleId} className={styles.title}>Leader</h3>\n <span className={styles.caption}>One conversation across Verse, Telegram and the CLI</span>\n </span>\n {dormant ? (\n <span className={styles.dormant} title=\"The Leader still reads, answers and writes memos. With autonomy off, every memo is a dry run: its actions are shown, never applied.\">\n <span className={styles.dormantDot} aria-hidden=\"true\" />\n Autonomy off · memos are dry runs\n </span>\n ) : null}\n </header>\n\n <DirectivesStrip read={directives.data} actions={actions} adding={addingDirective} onAddingChange={setAddingDirective} />\n\n <div ref={logRef} className={styles.log} role=\"log\" aria-label=\"Conversation with the Leader\" aria-live=\"polite\" aria-relevant=\"additions\" onScroll={onScroll} tabIndex={0}>\n <div ref={contentRef} className={styles.logInner}>\n {canLoadOlder || olderState === 'error' || olderState === 'loading' ? (\n <div className={styles.older}>\n <button type=\"button\" className={styles.textButton} onClick={() => void loadOlder()} disabled={olderState === 'loading'}>\n {olderState === 'loading' ? 'Loading earlier messages…' : olderState === 'error' ? 'Earlier messages did not load — try again' : 'Load earlier messages'}\n </button>\n </div>\n ) : null}\n {!read ? (\n <p className={styles.placeholder} aria-busy=\"true\">Reading the conversation…</p>\n ) : unavailable && entries.length === 0 ? (\n <p className={styles.placeholder} data-tone=\"unknown\">{read.reason ?? 'The Leader conversation did not answer.'}</p>\n ) : entries.length === 0 ? (\n <div className={styles.empty}>\n <p className={styles.emptyTitle}>No conversation yet</p>\n <p className={styles.emptyBody}>\n Ask the Leader why it made a move, what it would do next, or give it a standing directive. Replies here also reach Telegram when it is connected.\n </p>\n {sendDisabledReason === null ? (\n <div className={styles.suggestions}>\n {SUGGESTIONS.map((s) => (\n <button\n key={s}\n type=\"button\"\n className={styles.suggestion}\n onClick={() => {\n setDraft(s);\n composerRef.current?.focus();\n }}\n >\n {s}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n ) : (\n <ThreadRows rows={rows} ctx={ctx} />\n )}\n {thinking ? (\n <p className={styles.thinking} role=\"status\">\n <span className={styles.dots} aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n Leader is thinking…\n </p>\n ) : null}\n </div>\n </div>\n\n <div className={styles.foot}>\n <LeaderComposer\n ref={composerRef}\n label=\"Message the Leader\"\n placeholder=\"Message the Leader…\"\n value={draft}\n onChange={setDraft}\n onSend={sendDraft}\n disabledReason={sendDisabledReason}\n context={quote ? { label: `Answering: ${previewText(quote, 120)}`, onClear: () => setQuote(null) } : null}\n />\n </div>\n {gate.dialog}\n </section>\n );\n}\n\nexport default LeaderConversation;\n"],"file":"LeaderConversation-DjZS2PrX.js"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{W as r,l as i,o as a,u as o}from"./global-BWc2NPzv.js";import{M as s}from"./VerseShared-_pMXKs8m.js";import{a as c,f as l,i as u,o as d,p as ee,r as f}from"./VerseMobileApp-BTGF5yuZ.js";import{c as p}from"./surface-data-DoN8peNV.js";import{_ as te,a as m,c as ne,d as re,h as ie,i as ae,l as h,n as oe,o as g,p as _,r as se,s as ce,t as le,v}from"./thread-data-Dq7QugaD.js";import{a as y}from"./leader-model-CYyfrzNf.js";import{t as ue}from"./sheet-D0ciShoy.js";import{c as b,i as x,n as de,r as fe,t as pe}from"./ui-parts-2JLq2ZSq.js";import{n as me}from"./connectivity-Svn7iy2K.js";import{t as he}from"./MicButton-92I_NsaT.js";import{t as ge}from"./MobileComposer-BOFWmkku.js";import{t as S}from"./mobile-actions-CvGouAAH.js";var C=n(t(),1),w={directives:`_directives_owa70_12`,directivesToggle:`_directivesToggle_owa70_19`,count:`_count_owa70_38`,toggleWord:`_toggleWord_owa70_43`,directivesBody:`_directivesBody_owa70_49`,directiveList:`_directiveList_owa70_57`,directive:`_directive_owa70_12`,directiveText:`_directiveText_owa70_76`,older:`_older_owa70_86`,thread:`_thread_owa70_92`,day:`_day_owa70_98`,system:`_system_owa70_106`,group:`_group_owa70_115`,groupHead:`_groupHead_owa70_127`,who:`_who_owa70_136`,channel:`_channel_owa70_141`,bubble:`_bubble_owa70_145`,text:`_text_owa70_168`,replyTo:`_replyTo_owa70_175`,answered:`_answered_owa70_180`,delivery:`_delivery_owa70_186`,approvals:`_approvals_owa70_191`,approval:`_approval_owa70_191`,approvalText:`_approvalText_owa70_209`,quick:`_quick_owa70_218`,answering:`_answering_owa70_222`,answeringText:`_answeringText_owa70_231`},T=e(),_e=1e4,ve=3e4,E=[`Yes, go ahead`,`Hold off for now`,`What’s blocking?`,`Status update?`],D={question:{label:`Question`,tone:`warning`},memo:{label:`Memo`,tone:`info`},directive:{label:`Directive`,tone:`neutral`},update:{label:`Update`,tone:`neutral`},action:{label:`Action`,tone:`running`}},O=`Runs the Leader’s action now instead of waiting for its veto window to close. The server still checks it against your grant, and you can veto it afterwards.`;function k(e){return e?e.status===`scheduled`?`“${e.summary}” runs now instead of waiting out its veto window. You can still veto it afterwards.`:`“${e.summary}” is outside the standing grant. Approving tells the Leader to go ahead; the server still checks it against your authority.`:O}function A(e,t){return e.from!==`leader`||!e.actionIds?.length?[]:t?e.actionIds.flatMap(e=>{let n=t.find(t=>t.id===e);return n&&y(n)?[{id:e,action:n}]:[]}):e.kind===`action`?e.actionIds.map(e=>({id:e,action:null})):[]}function ye({chips:e,loading:t,reason:n,canAct:r,offline:i,onRetire:a,onAdd:o}){let[s,l]=(0,C.useState)(!1),u=(0,C.useId)(),d=e?String(e.length):`—`;return(0,T.jsxs)(`div`,{className:w.directives,children:[(0,T.jsxs)(`button`,{type:`button`,className:w.directivesToggle,"aria-expanded":s,"aria-controls":u,onClick:()=>l(e=>!e),children:[(0,T.jsxs)(`span`,{children:[`Directives `,(0,T.jsx)(`span`,{className:w.count,children:d})]}),(0,T.jsx)(`span`,{className:w.toggleWord,"aria-hidden":`true`,children:s?`Hide`:`Show`})]}),s?(0,T.jsxs)(`div`,{id:u,className:w.directivesBody,children:[t?(0,T.jsx)(c,{rows:2,label:`Loading directives`}):e===null?(0,T.jsx)(`p`,{className:b.faint,children:n??`Directives did not load.`}):e.length===0?(0,T.jsx)(`p`,{className:b.faint,children:`No standing directives. A directive steers every Leader run until you retire it.`}):(0,T.jsx)(`ul`,{className:w.directiveList,"aria-label":`Standing directives`,children:e.map(e=>(0,T.jsxs)(`li`,{className:w.directive,children:[(0,T.jsx)(`span`,{className:w.directiveText,children:e.text}),r?(0,T.jsx)(f,{variant:`plain`,disabled:i,"aria-label":`Retire directive: ${e.text}`,onClick:()=>a(e),children:`Retire`}):null]},e.id))}),r?(0,T.jsx)(f,{variant:`tinted`,block:!0,disabled:i,onClick:o,children:`Add directive`}):null]}):null]})}function j({message:e,ctx:t}){let n=D[e.kind],r=e.from===`mason`&&e.replyTo?t.byId.get(e.replyTo):void 0,i=e.from===`leader`&&e.kind===`question`,a=i?t.answered.get(e.id):void 0,o=A(e,t.leaderActions);return(0,T.jsxs)(`div`,{className:w.bubble,"data-from":e.from,"data-answering":t.answeringId===e.id?``:void 0,children:[n?(0,T.jsx)(pe,{tone:n.tone,children:n.label}):null,r?(0,T.jsxs)(`span`,{className:w.replyTo,children:[`Re: `,v(r.text,90)]}):null,(0,T.jsx)(`p`,{className:w.text,children:e.text}),i?a?(0,T.jsx)(`span`,{className:w.answered,children:`Answered`}):t.canAct?(0,T.jsx)(f,{variant:`tinted`,disabled:t.offline,"aria-label":`Answer: ${v(e.text,80)}`,onClick:()=>t.onAnswer(e),children:`Answer`}):null:null,t.canAct&&o.length>0?(0,T.jsx)(`ul`,{className:w.approvals,"aria-label":`Actions waiting`,children:o.map((e,n)=>(0,T.jsxs)(`li`,{className:w.approval,children:[e.action?(0,T.jsx)(`span`,{className:w.approvalText,children:e.action.summary}):null,(0,T.jsx)(f,{variant:`secondary`,disabled:t.offline,"aria-label":`Approve now: ${e.action?.summary??`action ${n+1}`}`,onClick:()=>t.onApprove(e),children:`Approve now`})]},e.id))}):null,e.delivery?.telegram===`failed`?(0,T.jsx)(`span`,{className:w.delivery,children:`Telegram didn’t get this one`}):null]})}function be(e){return(0,T.jsx)(`div`,{className:w.thread,children:e.rows.map(t=>{if(t.type===`day`)return(0,T.jsx)(`p`,{className:w.day,children:t.label},t.key);if(t.type===`system`)return(0,T.jsx)(`p`,{className:w.system,children:t.entry.message.text},t.key);let n=t.from===`leader`?`Leader`:`You`;return(0,T.jsxs)(`section`,{className:w.group,"data-from":t.from,"aria-label":`${n}, ${_(t.at)}`,children:[(0,T.jsxs)(`p`,{className:w.groupHead,children:[(0,T.jsx)(`span`,{className:w.who,children:n}),t.channel===`verse`?null:(0,T.jsxs)(`span`,{className:w.channel,children:[`via `,h[t.channel]]}),(0,T.jsx)(`time`,{dateTime:t.at,children:_(t.at)})]}),t.entries.map(t=>t.type===`message`?(0,T.jsx)(j,{message:t.message,ctx:e},t.key):null)]},t.key)})})}function M(){let{permissions:e,reachability:t}=ee(),n=i(g,{freshMs:5e3}),h=o(g),_=i(m,{freshMs:3e4}),y=o(m),pe=i(p,{freshMs:3e4}),D=o(p),O=(0,C.useCallback)(()=>{y(),D()},[y,D]);s(h,_e),s(O,ve);let[A,j]=(0,C.useState)([]),[M,N]=(0,C.useState)(`idle`),[P,F]=(0,C.useState)([]),[xe,I]=(0,C.useState)(``),[L,R]=(0,C.useState)(null),[Se,z]=(0,C.useState)(!1),[Ce,B]=(0,C.useState)(!1),[V,H]=(0,C.useState)(``),[we,U]=(0,C.useState)(``),W=(0,C.useId)(),Te=(0,C.useRef)(null),G=l(e),K=t===`offline`||t===`unreachable`,q=n.data,J=q?.value?.messages??null,Ee=q!==void 0&&q.value===null,Y=(0,C.useMemo)(()=>te(J?[A,J]:[A],P),[A,J,P]),X=(0,C.useMemo)(()=>Y.flatMap(e=>e.type===`message`?[e.message]:[]),[Y]),De=(0,C.useMemo)(()=>new Map(X.map(e=>[e.id,e])),[X]),Oe=(0,C.useMemo)(()=>re(X),[X]),ke=(0,C.useMemo)(()=>ie(Y),[Y]),Ae=pe.data?.value?.actions??null;(0,C.useEffect)(()=>{if(!J||P.length===0)return;let e=new Set(J.map(e=>e.id));P.some(t=>e.has(t.id))&&F(t=>t.filter(t=>!e.has(t.id)))},[J,P]);let je=Y.length?Y[Y.length-1].key:null;(0,C.useLayoutEffect)(()=>{je&&Te.current?.scrollIntoView?.({block:`end`})},[je]);let Z=(0,C.useCallback)(()=>r(g.key,()=>g.fetch(),!0),[]),Me=(0,C.useCallback)(()=>Promise.all([Z(),r(m.key,()=>m.fetch(),!0),r(p.key,()=>p.fetch(),!0)]),[Z]),Q=G?t===`offline`?`This phone is offline. Sending is off until it reconnects; your words stay here.`:t===`unreachable`?`Your Mac isn’t answering. Sending is off until it does; your words stay here.`:Ee?`The conversation is not available on your Mac.`:null:e.actReason??`This device can read the conversation but not send.`,Ne=e=>{let t=L;S({title:t?`Answer the Leader`:`Message the Leader`,consequences:`Sends your words to the Leader.`,confirmLabel:`Send`,confirm:!1,run:async()=>{z(!0);try{let n=t?await oe(t.questionId??t.id,e):await ne(e);n&&F(e=>[...e,n.message,...n.reply?[n.reply]:[]])}finally{z(!1)}},onDone:()=>{I(t=>t.trim()===e?``:t),t&&R(null),Z()}})},Pe=e=>{S({title:`Approve this action now?`,consequences:k(e.action),confirmLabel:`Approve now`,run:()=>se(e.id),success:`Approved — the Leader acts on it now`,onDone:()=>{Z(),r(p.key,()=>p.fetch(),!0)}})},Fe=e=>{S({title:`Retire this directive?`,consequences:`“${e.text}” stops steering the Leader from its next run. It stays in history, and you can add it again any time.`,confirmLabel:`Retire`,destructive:!0,run:()=>ce(e.id),success:`Directive retired`})},Ie=()=>{let e=V.trim();e&&(B(!1),S({title:`Add directive`,consequences:`The Leader follows this on every run until you retire it.`,confirmLabel:`Add directive`,confirm:!1,run:async()=>{try{await le(e)}catch(e){throw B(!0),e}},success:`Directive added — the Leader follows it from its next run`,onDone:()=>H(``)}))},$=X.length?X[0].id:null,Le=M!==`done`&&(J?.length??0)>=50&&$!==null,Re=async()=>{if($&&M!==`loading`){N(`loading`);try{let e=await ae($);j(t=>[...e,...t]),N(e.length<50?`done`:`idle`)}catch{N(`error`)}}},ze;ze=!q&&n.status===`error`?(0,T.jsx)(x,{title:`Couldn’t load the conversation`,reason:a(n.error),onRetry:()=>void Z()}):q?Ee&&Y.length===0?(0,T.jsx)(x,{title:`The conversation isn’t available`,reason:q.reason??`The Leader conversation did not answer.`,onRetry:()=>void Z()}):Y.length===0?(0,T.jsx)(fe,{title:`No conversation yet — say hello`,body:`Ask the Leader what it is doing or why, or give it a standing directive. This is the same thread as Mind on your Mac and Telegram.`}):(0,T.jsxs)(T.Fragment,{children:[Le||M===`error`?(0,T.jsx)(`div`,{className:w.older,children:(0,T.jsx)(f,{variant:`plain`,onClick:()=>void Re(),disabled:M===`loading`,children:M===`loading`?`Loading earlier…`:M===`error`?`Earlier messages didn’t load — try again`:`Load earlier`})}):null,(0,T.jsx)(be,{rows:ke,answered:Oe,byId:De,leaderActions:Ae,canAct:G,offline:K,answeringId:L?.id??null,onAnswer:e=>R(e),onApprove:Pe})]}):(0,T.jsx)(c,{rows:4,label:`Loading the conversation`});let Be=Q===null?(0,T.jsx)(`div`,{className:d(b.chips,w.quick),role:`group`,"aria-label":`Quick replies`,children:E.map(e=>(0,T.jsx)(`button`,{type:`button`,className:b.chip,onClick:()=>I(e),children:e},e))}):null,Ve=(0,T.jsxs)(T.Fragment,{children:[L?(0,T.jsxs)(`div`,{className:w.answering,children:[(0,T.jsxs)(`span`,{className:w.answeringText,children:[`Answering: `,v(L.text,100)]}),(0,T.jsx)(f,{variant:`plain`,onClick:()=>R(null),"aria-label":`Stop answering`,children:`Cancel`})]}):null,Be]}),He=we?`${V}${V&&!V.endsWith(` `)?` `:``}${we}`:V;return(0,T.jsxs)(u,{title:`Leader`,large:!0,label:`Conversation with the Leader`,onRefresh:Me,header:(0,T.jsx)(ye,{chips:_.data?.value??null,loading:_.data===void 0&&_.status!==`error`,reason:_.data?.reason??(_.error?a(_.error):null),canAct:G,offline:K,onRetire:Fe,onAdd:()=>{U(``),B(!0)}}),footer:(0,T.jsx)(ge,{label:L?`Answer the Leader`:`Message the Leader`,placeholder:L?`Answer the Leader…`:`Message the Leader…`,value:xe,onChange:I,onSubmit:Ne,disabled:Q!==null||Se,hint:Q??(L?`Your answer closes this question for the Leader.`:`Same thread as Mind and Telegram.`),above:Ve}),children:[t===`offline`?(0,T.jsxs)(de,{children:[`This phone is offline. Showing the last conversation (`,me(n.updatedAt).toLowerCase(),`).`]}):t===`unreachable`?(0,T.jsxs)(de,{children:[`Can’t reach your Mac. Showing the last conversation (`,me(n.updatedAt).toLowerCase(),`).`]}):null,ze,(0,T.jsx)(`div`,{ref:Te}),(0,T.jsxs)(ue,{open:Ce,onClose:()=>B(!1),title:`Add directive`,footer:(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(f,{variant:`primary`,block:!0,disabled:V.trim().length===0||K,onClick:Ie,children:`Add directive`}),(0,T.jsx)(f,{variant:`plain`,block:!0,onClick:()=>B(!1),children:`Cancel`})]}),children:[(0,T.jsx)(`p`,{className:b.consequence,children:`A standing instruction the Leader follows on every run until you retire it — “Ship binshield before new goals”, “No spend raises overnight”.`}),(0,T.jsxs)(`div`,{className:b.field,children:[(0,T.jsx)(`label`,{className:b.label,htmlFor:W,children:`Directive`}),(0,T.jsx)(`textarea`,{id:W,className:b.textarea,value:He,maxLength:300,"aria-describedby":`${W}-count`,onChange:e=>{U(``),H(e.target.value.slice(0,300))}}),(0,T.jsxs)(`span`,{id:`${W}-count`,className:b.faint,children:[V.length,`/`,300]})]}),(0,T.jsx)(he,{onInterim:U,onFinal:e=>H(`${V}${V&&!V.endsWith(` `)?` `:``}${e}`.slice(0,300))})]})]})}export{ve as LEADER_SLOW_POLL_MS,_e as LEADER_THREAD_POLL_MS,M as LeaderScreen,E as QUICK_REPLIES,k as approveConsequences};
2
- //# sourceMappingURL=LeaderScreen-Dw5jDfWv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LeaderScreen-Dw5jDfWv.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mobile/screens/LeaderScreen.module.css","../../../../../../src/web-ui/routes/verse/mobile/screens/LeaderScreen.tsx"],"sourcesContent":["/*\n * routes/verse/mobile/screens/LeaderScreen.module.css — the Leader thread as\n * chat bubbles (Mason right, the Leader left), the directives strip under\n * the top bar, and the composer's quick replies.\n *\n * Text is plain and wraps (pre-wrap, break-word): a long path or URL in a\n * message never widens the page.\n */\n\n/* ---- directives strip -------------------------------------------------- */\n\n.directives {\n flex: none;\n padding: 0 max(var(--space-4), env(safe-area-inset-right)) 0 max(var(--space-4), env(safe-area-inset-left));\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-canvas);\n}\n\n.directivesToggle {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n width: 100%;\n min-height: 2.75rem;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--text-secondary);\n font-family: var(--font-display);\n font-size: 0.85em;\n font-weight: var(--font-weight-semibold);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n cursor: pointer;\n}\n\n.count {\n margin-left: var(--space-1);\n color: var(--text-tertiary);\n}\n\n.toggleWord {\n color: var(--accent-600);\n text-transform: none;\n letter-spacing: normal;\n}\n\n.directivesBody {\n display: grid;\n gap: var(--space-2);\n max-height: 40dvh;\n overflow-y: auto;\n padding-bottom: var(--space-3);\n}\n\n.directiveList {\n display: grid;\n gap: var(--space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.directive {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n padding: 0 0 0 var(--space-3);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n border: 1px solid var(--border-subtle);\n}\n\n.directiveText {\n flex: 1;\n min-width: 0;\n font-size: 0.92em;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ---- thread ----------------------------------------------------------- */\n\n.older {\n display: flex;\n justify-content: center;\n margin: 0 0 var(--space-2);\n}\n\n.thread {\n display: grid;\n gap: var(--space-3);\n min-width: 0;\n}\n\n.day {\n margin: var(--space-2) 0 0;\n text-align: center;\n color: var(--text-tertiary);\n font-size: 0.78em;\n font-weight: var(--font-weight-semibold);\n}\n\n.system {\n margin: 0;\n text-align: center;\n color: var(--text-tertiary);\n font-size: 0.82em;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.group {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.group[data-from='mason'] {\n align-items: flex-end;\n}\n\n.groupHead {\n display: flex;\n flex-wrap: wrap;\n gap: 0 var(--space-2);\n margin: 0 var(--space-2);\n color: var(--text-tertiary);\n font-size: 0.78em;\n}\n\n.who {\n color: var(--text-secondary);\n font-weight: var(--font-weight-semibold);\n}\n\n.channel {\n color: var(--status-info-fg);\n}\n\n.bubble {\n display: grid;\n justify-items: start;\n gap: var(--space-2);\n max-width: 88%;\n min-width: 0;\n padding: var(--space-3) var(--space-4);\n border-radius: var(--radius-xl);\n background: var(--bg-surface);\n border: 1px solid var(--border-subtle);\n}\n\n.bubble[data-from='mason'] {\n background: var(--accent-50);\n border-color: transparent;\n color: var(--text-primary);\n}\n\n.bubble[data-answering] {\n outline: 2px solid var(--border-focus);\n outline-offset: 1px;\n}\n\n.text {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n line-height: 1.4;\n}\n\n.replyTo {\n color: var(--text-tertiary);\n font-size: 0.8em;\n}\n\n.answered {\n color: var(--status-success-fg);\n font-size: 0.82em;\n font-weight: var(--font-weight-semibold);\n}\n\n.delivery {\n color: var(--status-warning-fg);\n font-size: 0.78em;\n}\n\n.approvals {\n display: grid;\n gap: var(--space-2);\n width: 100%;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.approval {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.approvalText {\n flex: 1 1 10rem;\n min-width: 0;\n color: var(--text-secondary);\n font-size: 0.88em;\n}\n\n/* ---- composer extras ---------------------------------------------------- */\n\n.quick {\n min-width: 0;\n}\n\n.answering {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n padding-left: var(--space-3);\n border-left: 3px solid var(--accent-500);\n}\n\n.answeringText {\n flex: 1;\n min-width: 0;\n color: var(--text-secondary);\n font-size: 0.85em;\n}\n","/**\n * routes/verse/mobile/screens/LeaderScreen.tsx — the Leader conversation on\n * a phone: the SAME thread as Mind on the Mac and Telegram, the standing\n * directives, and a composer with quick replies.\n *\n * Reads and writes are the workbench's own (leader/thread-data.ts — same\n * cache keys, so the Mac's Mind and this screen never disagree); threading\n * and day separators are leader/thread-model.ts. The workbench's\n * LeaderConversation is not imported: its Markdown renderer, memo cards and\n * desktop dialogs would ride into this chunk.\n *\n * - Text is untrusted (model output, or words that came over Telegram): it\n * renders as plain text with its line breaks, never as HTML.\n * - The thread polls every 10 s while visible; directives and the Leader's\n * action states every 30 s.\n * - Every write goes through runMobileAction: sends and answers without a\n * confirmation (a message is cheap), Approve now and Retire WITH one.\n * A failed send keeps the words in the box.\n */\nimport { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport type { LeaderAction } from '../../../../../core/vision/leader-types.js';\nimport { refetchQuery } from '../../../../data/cache.js';\nimport { readFailureReason } from '../../../../data/client.js';\nimport { useQuery, useRefetch } from '../../../../data/hooks.js';\nimport { leaderQuery } from '../../command/surface-data.js';\nimport {\n addLeaderDirective,\n answerLeaderQuestion,\n approveLeaderAction,\n fetchOlderThread,\n leaderDirectivesQuery,\n leaderThreadQuery,\n retireLeaderDirective,\n sendLeaderMessage,\n THREAD_PAGE_SIZE,\n} from '../../leader/thread-data.js';\nimport { answeredQuestions, CHANNEL_LABEL, clockTime, groupThread, mergeThread, previewText, type ThreadRow } from '../../leader/thread-model.js';\nimport { OPERATOR_DIRECTIVE_MAX, type DirectiveChip, type LeaderThreadKind, type LeaderThreadMessage } from '../../leader/thread-types.js';\nimport { isApprovable } from '../../mind/leader-model.js';\nimport { usePollWhileVisible } from '../../shell/section-visibility.js';\nimport { sinceText } from '../connectivity.js';\nimport { MicButton } from '../MicButton.js';\nimport { MobileComposer } from '../MobileComposer.js';\nimport { runMobileAction } from '../mobile-actions.js';\nimport { canShowActions, useMobile } from '../mobile-context.js';\nimport { BottomSheet } from '../sheet.js';\nimport { Button, cx, Screen, SkeletonList } from '../ui.js';\nimport { Badge, Banner, EmptyState, ErrorState, ui, type Tone } from '../ui-parts.js';\nimport styles from './LeaderScreen.module.css';\n\nexport const LEADER_THREAD_POLL_MS = 10_000;\nexport const LEADER_SLOW_POLL_MS = 30_000;\n\n/** Tapping one fills the box; it never sends by itself. */\nexport const QUICK_REPLIES = ['Yes, go ahead', 'Hold off for now', 'What’s blocking?', 'Status update?'] as const;\n\nconst KIND_BADGE: Readonly<Partial<Record<LeaderThreadKind, { label: string; tone: Tone }>>> = {\n question: { label: 'Question', tone: 'warning' },\n memo: { label: 'Memo', tone: 'info' },\n directive: { label: 'Directive', tone: 'neutral' },\n update: { label: 'Update', tone: 'neutral' },\n action: { label: 'Action', tone: 'running' },\n};\n\nconst APPROVE_FALLBACK = 'Runs the Leader’s action now instead of waiting for its veto window to close. The server still checks it against your grant, and you can veto it afterwards.';\n\n/** What Approve now WILL do, in the action's own words when the Leader's state has them. */\nexport function approveConsequences(action: Pick<LeaderAction, 'summary' | 'status'> | null): string {\n if (!action) return APPROVE_FALLBACK;\n return action.status === 'scheduled'\n ? `“${action.summary}” runs now instead of waiting out its veto window. You can still veto it afterwards.`\n : `“${action.summary}” is outside the standing grant. Approving tells the Leader to go ahead; the server still checks it against your authority.`;\n}\n\n/** One approvable action a message offers; `action` is null when the Leader's state did not answer. */\ninterface Approvable {\n id: string;\n action: LeaderAction | null;\n}\n\nfunction approvablesOf(message: LeaderThreadMessage, actions: readonly LeaderAction[] | null): Approvable[] {\n if (message.from !== 'leader' || !message.actionIds?.length) return [];\n if (actions) {\n return message.actionIds.flatMap((id) => {\n const action = actions.find((a) => a.id === id);\n return action && isApprovable(action) ? [{ id, action }] : [];\n });\n }\n // Without the Leader's state only an action note offers it (a memo's\n // actions may long since have applied); the server refuses what is not pending.\n return message.kind === 'action' ? message.actionIds.map((id) => ({ id, action: null })) : [];\n}\n\n// ---------------------------------------------------------------------------\n// Directives\n// ---------------------------------------------------------------------------\n\ninterface DirectivesProps {\n chips: DirectiveChip[] | null;\n loading: boolean;\n reason: string | null;\n canAct: boolean;\n offline: boolean;\n onRetire: (chip: DirectiveChip) => void;\n onAdd: () => void;\n}\n\nfunction Directives({ chips, loading, reason, canAct, offline, onRetire, onAdd }: DirectivesProps) {\n const [open, setOpen] = useState(false);\n const bodyId = useId();\n const count = chips ? String(chips.length) : '—';\n return (\n <div className={styles.directives}>\n <button type=\"button\" className={styles.directivesToggle} aria-expanded={open} aria-controls={bodyId} onClick={() => setOpen((o) => !o)}>\n <span>\n Directives <span className={styles.count}>{count}</span>\n </span>\n <span className={styles.toggleWord} aria-hidden=\"true\">{open ? 'Hide' : 'Show'}</span>\n </button>\n {open ? (\n <div id={bodyId} className={styles.directivesBody}>\n {loading ? (\n <SkeletonList rows={2} label=\"Loading directives\" />\n ) : chips === null ? (\n <p className={ui.faint}>{reason ?? 'Directives did not load.'}</p>\n ) : chips.length === 0 ? (\n <p className={ui.faint}>No standing directives. A directive steers every Leader run until you retire it.</p>\n ) : (\n <ul className={styles.directiveList} aria-label=\"Standing directives\">\n {chips.map((chip) => (\n <li key={chip.id} className={styles.directive}>\n <span className={styles.directiveText}>{chip.text}</span>\n {canAct ? (\n <Button variant=\"plain\" disabled={offline} aria-label={`Retire directive: ${chip.text}`} onClick={() => onRetire(chip)}>\n Retire\n </Button>\n ) : null}\n </li>\n ))}\n </ul>\n )}\n {canAct ? (\n <Button variant=\"tinted\" block disabled={offline} onClick={onAdd}>\n Add directive\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// The thread\n// ---------------------------------------------------------------------------\n\ninterface ThreadProps {\n rows: ThreadRow[];\n answered: ReadonlyMap<string, LeaderThreadMessage>;\n byId: ReadonlyMap<string, LeaderThreadMessage>;\n leaderActions: readonly LeaderAction[] | null;\n canAct: boolean;\n offline: boolean;\n answeringId: string | null;\n onAnswer: (question: LeaderThreadMessage) => void;\n onApprove: (item: Approvable) => void;\n}\n\nfunction Bubble({ message, ctx }: { message: LeaderThreadMessage; ctx: ThreadProps }) {\n const badge = KIND_BADGE[message.kind];\n const question = message.from === 'mason' && message.replyTo ? ctx.byId.get(message.replyTo) : undefined;\n const isQuestion = message.from === 'leader' && message.kind === 'question';\n const answer = isQuestion ? ctx.answered.get(message.id) : undefined;\n const approvables = approvablesOf(message, ctx.leaderActions);\n return (\n <div className={styles.bubble} data-from={message.from} data-answering={ctx.answeringId === message.id ? '' : undefined}>\n {badge ? <Badge tone={badge.tone}>{badge.label}</Badge> : null}\n {question ? <span className={styles.replyTo}>Re: {previewText(question.text, 90)}</span> : null}\n {/* Untrusted text: plain, line breaks kept, never HTML. */}\n <p className={styles.text}>{message.text}</p>\n {isQuestion ? (\n answer ? (\n <span className={styles.answered}>Answered</span>\n ) : ctx.canAct ? (\n <Button variant=\"tinted\" disabled={ctx.offline} aria-label={`Answer: ${previewText(message.text, 80)}`} onClick={() => ctx.onAnswer(message)}>\n Answer\n </Button>\n ) : null\n ) : null}\n {ctx.canAct && approvables.length > 0 ? (\n <ul className={styles.approvals} aria-label=\"Actions waiting\">\n {approvables.map((item, i) => (\n <li key={item.id} className={styles.approval}>\n {item.action ? <span className={styles.approvalText}>{item.action.summary}</span> : null}\n <Button\n variant=\"secondary\"\n disabled={ctx.offline}\n aria-label={`Approve now: ${item.action?.summary ?? `action ${i + 1}`}`}\n onClick={() => ctx.onApprove(item)}\n >\n Approve now\n </Button>\n </li>\n ))}\n </ul>\n ) : null}\n {message.delivery?.telegram === 'failed' ? <span className={styles.delivery}>Telegram didn’t get this one</span> : null}\n </div>\n );\n}\n\nfunction Thread(props: ThreadProps) {\n return (\n <div className={styles.thread}>\n {props.rows.map((row) => {\n if (row.type === 'day') return <p key={row.key} className={styles.day}>{row.label}</p>;\n if (row.type === 'system') return <p key={row.key} className={styles.system}>{row.entry.message.text}</p>;\n const who = row.from === 'leader' ? 'Leader' : 'You';\n return (\n <section key={row.key} className={styles.group} data-from={row.from} aria-label={`${who}, ${clockTime(row.at)}`}>\n <p className={styles.groupHead}>\n <span className={styles.who}>{who}</span>\n {row.channel !== 'verse' ? <span className={styles.channel}>via {CHANNEL_LABEL[row.channel]}</span> : null}\n <time dateTime={row.at}>{clockTime(row.at)}</time>\n </p>\n {row.entries.map((entry) => (entry.type === 'message' ? <Bubble key={entry.key} message={entry.message} ctx={props} /> : null))}\n </section>\n );\n })}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// The screen\n// ---------------------------------------------------------------------------\n\nexport function LeaderScreen() {\n const { permissions, reachability } = useMobile();\n const thread = useQuery(leaderThreadQuery, { freshMs: 5_000 });\n const refetchThread = useRefetch(leaderThreadQuery);\n const directives = useQuery(leaderDirectivesQuery, { freshMs: 30_000 });\n const refetchDirectives = useRefetch(leaderDirectivesQuery);\n const leader = useQuery(leaderQuery, { freshMs: 30_000 });\n const refetchLeader = useRefetch(leaderQuery);\n const slowPoll = useCallback(() => {\n refetchDirectives();\n refetchLeader();\n }, [refetchDirectives, refetchLeader]);\n usePollWhileVisible(refetchThread, LEADER_THREAD_POLL_MS);\n usePollWhileVisible(slowPoll, LEADER_SLOW_POLL_MS);\n\n const [older, setOlder] = useState<LeaderThreadMessage[]>([]);\n const [olderState, setOlderState] = useState<'idle' | 'loading' | 'done' | 'error'>('idle');\n const [received, setReceived] = useState<LeaderThreadMessage[]>([]);\n const [draft, setDraft] = useState('');\n const [answering, setAnswering] = useState<LeaderThreadMessage | null>(null);\n const [sending, setSending] = useState(false);\n const [adding, setAdding] = useState(false);\n const [directiveDraft, setDirectiveDraft] = useState('');\n const [directiveInterim, setDirectiveInterim] = useState('');\n const directiveId = useId();\n const end = useRef<HTMLDivElement>(null);\n\n const canAct = canShowActions(permissions);\n const offline = reachability === 'offline' || reachability === 'unreachable';\n const read = thread.data;\n const page = read?.value?.messages ?? null;\n const unavailable = read !== undefined && read.value === null;\n\n const entries = useMemo(() => mergeThread(page ? [older, page] : [older], received), [older, page, received]);\n const messages = useMemo(() => entries.flatMap((e) => (e.type === 'message' ? [e.message] : [])), [entries]);\n const byId = useMemo(() => new Map(messages.map((m) => [m.id, m])), [messages]);\n const answered = useMemo(() => answeredQuestions(messages), [messages]);\n const rows = useMemo(() => groupThread(entries), [entries]);\n const leaderActions = leader.data?.value?.actions ?? null;\n\n // A send's echo is dropped once a server read carries it.\n useEffect(() => {\n if (!page || received.length === 0) return;\n const onPage = new Set(page.map((m) => m.id));\n if (received.some((m) => onPage.has(m.id))) setReceived((r) => r.filter((m) => !onPage.has(m.id)));\n }, [page, received]);\n\n // Follow the conversation to its newest message (not when older pages load above).\n const lastKey = entries.length ? entries[entries.length - 1]!.key : null;\n useLayoutEffect(() => {\n if (lastKey) end.current?.scrollIntoView?.({ block: 'end' });\n }, [lastKey]);\n\n const refreshThread = useCallback(() => refetchQuery(leaderThreadQuery.key, () => leaderThreadQuery.fetch(), true), []);\n const refreshAll = useCallback(\n () =>\n Promise.all([\n refreshThread(),\n refetchQuery(leaderDirectivesQuery.key, () => leaderDirectivesQuery.fetch(), true),\n refetchQuery(leaderQuery.key, () => leaderQuery.fetch(), true),\n ]),\n [refreshThread],\n );\n\n const disabledReason = !canAct\n ? (permissions.actReason ?? 'This device can read the conversation but not send.')\n : reachability === 'offline'\n ? 'This phone is offline. Sending is off until it reconnects; your words stay here.'\n : reachability === 'unreachable'\n ? 'Your Mac isn’t answering. Sending is off until it does; your words stay here.'\n : unavailable\n ? 'The conversation is not available on your Mac.'\n : null;\n\n // ---- writes ---------------------------------------------------------------\n\n const send = (text: string) => {\n const question = answering;\n runMobileAction({\n title: question ? 'Answer the Leader' : 'Message the Leader',\n consequences: 'Sends your words to the Leader.',\n confirmLabel: 'Send',\n confirm: false,\n run: async () => {\n setSending(true);\n try {\n const result = question ? await answerLeaderQuestion(question.questionId ?? question.id, text) : await sendLeaderMessage(text);\n if (result) setReceived((r) => [...r, result.message, ...(result.reply ? [result.reply] : [])]);\n } finally {\n setSending(false);\n }\n },\n onDone: () => {\n // Only what was sent is cleared: words typed meanwhile stay.\n setDraft((d) => (d.trim() === text ? '' : d));\n if (question) setAnswering(null);\n void refreshThread();\n },\n });\n };\n\n const approve = (item: Approvable) => {\n runMobileAction({\n title: 'Approve this action now?',\n consequences: approveConsequences(item.action),\n confirmLabel: 'Approve now',\n run: () => approveLeaderAction(item.id),\n success: 'Approved — the Leader acts on it now',\n onDone: () => {\n void refreshThread();\n void refetchQuery(leaderQuery.key, () => leaderQuery.fetch(), true);\n },\n });\n };\n\n const retire = (chip: DirectiveChip) => {\n runMobileAction({\n title: 'Retire this directive?',\n consequences: `“${chip.text}” stops steering the Leader from its next run. It stays in history, and you can add it again any time.`,\n confirmLabel: 'Retire',\n destructive: true,\n run: () => retireLeaderDirective(chip.id),\n success: 'Directive retired',\n });\n };\n\n const addDirective = () => {\n const text = directiveDraft.trim();\n if (!text) return;\n // Close first so the token sheet (if the hold lapsed) has the stage; a\n // failure reopens this sheet with the words still in it.\n setAdding(false);\n runMobileAction({\n title: 'Add directive',\n consequences: 'The Leader follows this on every run until you retire it.',\n confirmLabel: 'Add directive',\n confirm: false,\n run: async () => {\n try {\n await addLeaderDirective(text);\n } catch (err) {\n setAdding(true);\n throw err;\n }\n },\n success: 'Directive added — the Leader follows it from its next run',\n onDone: () => setDirectiveDraft(''),\n });\n };\n\n // ---- older pages ------------------------------------------------------------\n\n const oldestId = messages.length ? messages[0]!.id : null;\n const canLoadOlder = olderState !== 'done' && (page?.length ?? 0) >= THREAD_PAGE_SIZE && oldestId !== null;\n const loadOlder = async () => {\n if (!oldestId || olderState === 'loading') return;\n setOlderState('loading');\n try {\n const got = await fetchOlderThread(oldestId);\n setOlder((o) => [...got, ...o]);\n setOlderState(got.length < THREAD_PAGE_SIZE ? 'done' : 'idle');\n } catch {\n setOlderState('error');\n }\n };\n\n // ---- render -----------------------------------------------------------------\n\n let body;\n if (!read && thread.status === 'error') {\n body = <ErrorState title=\"Couldn’t load the conversation\" reason={readFailureReason(thread.error)} onRetry={() => void refreshThread()} />;\n } else if (!read) {\n body = <SkeletonList rows={4} label=\"Loading the conversation\" />;\n } else if (unavailable && entries.length === 0) {\n body = <ErrorState title=\"The conversation isn’t available\" reason={read.reason ?? 'The Leader conversation did not answer.'} onRetry={() => void refreshThread()} />;\n } else if (entries.length === 0) {\n body = (\n <EmptyState\n title=\"No conversation yet — say hello\"\n body=\"Ask the Leader what it is doing or why, or give it a standing directive. This is the same thread as Mind on your Mac and Telegram.\"\n />\n );\n } else {\n body = (\n <>\n {canLoadOlder || olderState === 'error' ? (\n <div className={styles.older}>\n <Button variant=\"plain\" onClick={() => void loadOlder()} disabled={olderState === 'loading'}>\n {olderState === 'loading' ? 'Loading earlier…' : olderState === 'error' ? 'Earlier messages didn’t load — try again' : 'Load earlier'}\n </Button>\n </div>\n ) : null}\n <Thread\n rows={rows}\n answered={answered}\n byId={byId}\n leaderActions={leaderActions}\n canAct={canAct}\n offline={offline}\n answeringId={answering?.id ?? null}\n onAnswer={(q) => setAnswering(q)}\n onApprove={approve}\n />\n </>\n );\n }\n\n const quickReplies = disabledReason === null ? (\n <div className={cx(ui.chips, styles.quick)} role=\"group\" aria-label=\"Quick replies\">\n {QUICK_REPLIES.map((reply) => (\n <button key={reply} type=\"button\" className={ui.chip} onClick={() => setDraft(reply)}>\n {reply}\n </button>\n ))}\n </div>\n ) : null;\n\n const above = (\n <>\n {answering ? (\n <div className={styles.answering}>\n <span className={styles.answeringText}>Answering: {previewText(answering.text, 100)}</span>\n <Button variant=\"plain\" onClick={() => setAnswering(null)} aria-label=\"Stop answering\">Cancel</Button>\n </div>\n ) : null}\n {quickReplies}\n </>\n );\n\n const directiveText = directiveInterim ? `${directiveDraft}${directiveDraft && !directiveDraft.endsWith(' ') ? ' ' : ''}${directiveInterim}` : directiveDraft;\n\n return (\n <Screen\n title=\"Leader\"\n large\n label=\"Conversation with the Leader\"\n onRefresh={refreshAll}\n header={(\n <Directives\n chips={directives.data?.value ?? null}\n loading={directives.data === undefined && directives.status !== 'error'}\n reason={directives.data?.reason ?? (directives.error ? readFailureReason(directives.error) : null)}\n canAct={canAct}\n offline={offline}\n onRetire={retire}\n onAdd={() => {\n setDirectiveInterim('');\n setAdding(true);\n }}\n />\n )}\n footer={(\n <MobileComposer\n label={answering ? 'Answer the Leader' : 'Message the Leader'}\n placeholder={answering ? 'Answer the Leader…' : 'Message the Leader…'}\n value={draft}\n onChange={setDraft}\n onSubmit={send}\n disabled={disabledReason !== null || sending}\n hint={disabledReason ?? (answering ? 'Your answer closes this question for the Leader.' : 'Same thread as Mind and Telegram.')}\n above={above}\n />\n )}\n >\n {reachability === 'offline' ? (\n <Banner>This phone is offline. Showing the last conversation ({sinceText(thread.updatedAt).toLowerCase()}).</Banner>\n ) : reachability === 'unreachable' ? (\n <Banner>Can’t reach your Mac. Showing the last conversation ({sinceText(thread.updatedAt).toLowerCase()}).</Banner>\n ) : null}\n {body}\n <div ref={end} />\n\n <BottomSheet\n open={adding}\n onClose={() => setAdding(false)}\n title=\"Add directive\"\n footer={(\n <>\n <Button variant=\"primary\" block disabled={directiveDraft.trim().length === 0 || offline} onClick={addDirective}>Add directive</Button>\n <Button variant=\"plain\" block onClick={() => setAdding(false)}>Cancel</Button>\n </>\n )}\n >\n <p className={ui.consequence}>A standing instruction the Leader follows on every run until you retire it — “Ship binshield before new goals”, “No spend raises overnight”.</p>\n <div className={ui.field}>\n <label className={ui.label} htmlFor={directiveId}>Directive</label>\n <textarea\n id={directiveId}\n className={ui.textarea}\n value={directiveText}\n maxLength={OPERATOR_DIRECTIVE_MAX}\n aria-describedby={`${directiveId}-count`}\n onChange={(e) => {\n setDirectiveInterim('');\n setDirectiveDraft(e.target.value.slice(0, OPERATOR_DIRECTIVE_MAX));\n }}\n />\n <span id={`${directiveId}-count`} className={ui.faint}>{directiveDraft.length}/{OPERATOR_DIRECTIVE_MAX}</span>\n </div>\n <MicButton\n onInterim={setDirectiveInterim}\n onFinal={(phrase) => setDirectiveDraft(`${directiveDraft}${directiveDraft && !directiveDraft.endsWith(' ') ? ' ' : ''}${phrase}`.slice(0, OPERATOR_DIRECTIVE_MAX))}\n />\n </BottomSheet>\n </Screen>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{C as r,M as i,V as a,a as o,l as s,u as c}from"./global-BWc2NPzv.js";import{n as l}from"./StatusBadge-CJbb9DhR.js";import{t as u}from"./MutationTokenDialog-D522NXsm.js";import{v as d}from"./colors-DvK0wMHH.js";import{n as f}from"./Funnel-rnPUaoN7.js";import{M as p}from"./VerseShared-_pMXKs8m.js";import{u as m}from"./format-CcEKjUou.js";import{n as h}from"./Tag-CMFqY2MP.js";import{t as g}from"./Button-DP2ImS5n.js";import{n as _}from"./control-queries-Clgsy_eH.js";import{u as v}from"./surface-data-DoN8peNV.js";import{n as y,t as b}from"./Surface-CV-NXGIM.js";import{n as x}from"./use-guarded-action-D4m4Mlzr.js";import{a as S,i as C,n as w,r as T,t as E}from"./types-0yEfFUjO.js";var D=n(t(),1),O=`verse-learning-lessons`;function k(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function A(e){if(!k(e)||e.v!==1||!Array.isArray(e.retros)||!Array.isArray(e.causes))return null;let t=e.knowledge;return!k(t)||!Array.isArray(t.pending)||!Array.isArray(t.approved)||!Array.isArray(e.playbook)?null:e}var j=v(O,C,`Lessons`,A);async function M(e,t){let n=r();if(!n)throw new _;let s=await o(e,t,n);return i(),a(O),s}function N(e){return M(T,e)}function P(e){return M(w,{id:e})}function F(){return M(S,{})}var I={merged:`Merged`,reverted:`Reverted`,closed:`Closed`,"gate-refused":`Refused`,"owner-laned":`Owner lane`,"verify-failed":`Verify failed`,failed:`Failed`,expired:`Expired`,vetoed:`Vetoed`},L={merged:`success`,reverted:`danger`,closed:`neutral`,"gate-refused":`warning`,"owner-laned":`neutral`,"verify-failed":`danger`,failed:`danger`,expired:`neutral`,vetoed:`warning`},R={fleet:`Fleet`,cloud:`Cloud`,leader:`Leader`},z=[`fleet`,`cloud`,`leader`];function B(e,t=8){let n=e.slice(0,t);return{categories:n.map(e=>e.label),values:n.map(e=>z.map(t=>e.bySource[t]??0))}}function V(e){let t=[e.repo??`Any repo`];return e.pathGlobs.length>0&&t.push(e.pathGlobs.join(`, `)),t.push(e.taskKinds.length>0?e.taskKinds.join(` / `):`any task`),t.join(` · `)}function H(e,t,n){let r=e.trim();if(r!==``&&!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(r))return null;let i=t.split(`,`).map(e=>e.trim()).filter(Boolean);if(i.some(e=>!/^[A-Za-z0-9_.*?{},/@+-]+$/.test(e)||e.includes(`..`)))return null;let a=n.split(/[,/ ]+/).map(e=>e.trim().toLowerCase()).filter(Boolean);return a.some(e=>!E.includes(e))?null:{repo:r===``?null:r,pathGlobs:i,taskKinds:a}}function U(e,t){let n=e=>e<1024?`${e} B`:`${(e/1024).toFixed(+(e<10240))} KB`;return`${n(e)} approved · each prompt gets at most ${n(t)}`}var W={panel:`_panel_14k4t_5`,head:`_head_14k4t_12`,title:`_title_14k4t_19`,spacer:`_spacer_14k4t_28`,meta:`_meta_14k4t_32`,grid:`_grid_14k4t_39`,wide:`_wide_14k4t_51`,narrow:`_narrow_14k4t_52`,list:`_list_14k4t_63`,retro:`_retro_14k4t_72`,retroHead:`_retroHead_14k4t_82`,retroAsked:`_retroAsked_14k4t_103`,retroBody:`_retroBody_14k4t_114`,bullets:`_bullets_14k4t_133`,prompt:`_prompt_14k4t_138`,note:`_note_14k4t_150`,noteText:`_noteText_14k4t_163`,actions:`_actions_14k4t_171`,editor:`_editor_14k4t_177`,scopeRow:`_scopeRow_14k4t_183`,field:`_field_14k4t_189`,label:`_label_14k4t_196`,input:`_input_14k4t_202`,textarea:`_textarea_14k4t_203`},G=e(),K=3e5,q=z.map((e,t)=>({id:e,label:R[e],color:d(t)}));function J({retro:e}){let[t,n]=(0,D.useState)(!1);return(0,G.jsxs)(`li`,{className:W.retro,children:[(0,G.jsxs)(`button`,{type:`button`,className:W.retroHead,"aria-expanded":t,onClick:()=>n(e=>!e),children:[(0,G.jsx)(l,{status:e.endKind,tone:L[e.endKind],children:I[e.endKind]}),(0,G.jsx)(`span`,{className:W.retroAsked,children:e.asked}),(0,G.jsxs)(`span`,{className:W.meta,children:[R[e.source],e.repo?` · ${e.repo}`:``,` · `,m(e.endedAt)]})]}),t?(0,G.jsxs)(`dl`,{className:W.retroBody,children:[(0,G.jsx)(`dt`,{children:`What happened`}),(0,G.jsx)(`dd`,{children:e.happened}),e.rootCause?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`dt`,{children:`Root cause`}),(0,G.jsxs)(`dd`,{children:[(0,G.jsx)(`strong`,{children:e.rootCause.label}),` — `,e.rootCause.detail,` `,(0,G.jsxs)(`span`,{className:W.meta,children:[`(from `,e.rootCause.evidence,`)`]})]})]}):null,e.doDifferently.length>0?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`dt`,{children:`Next time`}),(0,G.jsx)(`dd`,{children:(0,G.jsx)(`ul`,{className:W.bullets,children:e.doDifferently.map(e=>(0,G.jsx)(`li`,{children:e},e))})})]}):null,e.betterPrompt?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`dt`,{children:`A better prompt`}),(0,G.jsx)(`dd`,{children:(0,G.jsx)(`pre`,{className:W.prompt,children:e.betterPrompt})})]}):null,e.modelAssisted?(0,G.jsx)(`dd`,{className:W.meta,children:`Refined by a local / Grok model pass.`}):null]}):null]})}function Y({note:e,disabled:t,onApprove:n,onReject:r}){let[i,a]=(0,D.useState)(!1),[o,s]=(0,D.useState)(e.text),[c,l]=(0,D.useState)(e.scope.repo??``),[u,d]=(0,D.useState)(e.scope.pathGlobs.join(`, `)),[f,p]=(0,D.useState)(e.scope.taskKinds.join(`, `)),m=H(c,u,f),h=m!==null&&o.trim().length>=8;return(0,G.jsx)(`li`,{className:W.note,children:i?(0,G.jsxs)(`div`,{className:W.editor,children:[(0,G.jsxs)(`label`,{className:W.field,children:[(0,G.jsx)(`span`,{className:W.label,children:`Lesson`}),(0,G.jsx)(`textarea`,{className:W.textarea,value:o,rows:3,maxLength:600,onChange:e=>s(e.target.value)})]}),(0,G.jsxs)(`div`,{className:W.scopeRow,children:[(0,G.jsxs)(`label`,{className:W.field,children:[(0,G.jsx)(`span`,{className:W.label,children:`Repo (owner/name, blank = any)`}),(0,G.jsx)(`input`,{className:W.input,value:c,onChange:e=>l(e.target.value)})]}),(0,G.jsxs)(`label`,{className:W.field,children:[(0,G.jsx)(`span`,{className:W.label,children:`Paths (globs, comma-separated)`}),(0,G.jsx)(`input`,{className:W.input,value:u,onChange:e=>d(e.target.value)})]}),(0,G.jsxs)(`label`,{className:W.field,children:[(0,G.jsx)(`span`,{className:W.label,children:`Task kinds`}),(0,G.jsx)(`input`,{className:W.input,value:f,placeholder:`fix, tests, …`,onChange:e=>p(e.target.value)})]})]}),h?null:(0,G.jsx)(y,{tone:`danger`,children:`Check the scope: repo as owner/name, simple globs, known task kinds.`}),(0,G.jsxs)(`div`,{className:W.actions,children:[(0,G.jsx)(g,{size:`sm`,variant:`primary`,disabled:t||!h,onClick:()=>m&&n(e,{text:o.trim(),scope:m}),children:`Approve edited`}),(0,G.jsx)(g,{size:`sm`,variant:`ghost`,onClick:()=>a(!1),children:`Cancel`})]})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`p`,{className:W.noteText,children:e.text}),(0,G.jsxs)(`p`,{className:W.meta,children:[V(e.scope),e.seen>1?` · suggested ${e.seen}×`:``,` · from `,e.source]}),(0,G.jsxs)(`div`,{className:W.actions,children:[(0,G.jsx)(g,{size:`sm`,variant:`subtle`,disabled:t,onClick:()=>n(e),children:`Approve`}),(0,G.jsx)(g,{size:`sm`,variant:`ghost`,disabled:t,onClick:()=>a(!0),children:`Edit`}),(0,G.jsx)(g,{size:`sm`,variant:`ghost`,disabled:t,onClick:()=>r(e),children:`Reject`})]})]})})}function X(){let e=s(j,{freshMs:6e4}),t=c(j);p(t,K);let n=x(),[r,i]=(0,D.useState)(null),a=e.data?.value??null,o=(0,D.useMemo)(()=>B(a?.causes??[]),[a]),l=e.data?a?o.categories.length===0?{kind:`empty`,message:`No failed task ends in ${a.windowDays} days.`}:{kind:`ready`}:{kind:`unknown`,reason:e.data.reason??`Lessons did not answer.`}:{kind:`loading`},d=n.busy,_=(e,t)=>n.request(()=>N({id:e.id,decision:`approve`,...t?{text:t.text,scope:t.scope}:{}}),`Approve a lesson so future matching tasks are told about it`,()=>i(`Approved. Matching fleet and cloud tasks will be told about it.`)),v=e=>n.request(()=>N({id:e.id,decision:`reject`}),`Reject a suggested lesson`,()=>i(`Rejected. It will not be suggested again.`)),S=e=>n.request(()=>P(e.id),`File a fleet task that proposes this lesson for the repo’s AGENTS.md`,()=>i(`Queued a fleet task. The AGENTS.md change arrives as a proposal and passes every gate.`)),C=(0,G.jsx)(g,{size:`sm`,variant:`ghost`,disabled:d||n.readOnly,onClick:()=>n.request(F,`Scan finished tasks for new retros`,e=>i(`Swept: ${e.created} new retro(s), ${e.candidates} new suggestion(s).`)),children:`Sweep now`});return(0,G.jsxs)(`div`,{className:W.panel,"aria-label":`Lessons`,children:[(0,G.jsxs)(`header`,{className:W.head,children:[(0,G.jsx)(`h3`,{className:W.title,children:`Lessons`}),(0,G.jsx)(`span`,{className:W.meta,children:a?.sweptAt?`Last sweep ${m(a.sweptAt)}`:`Not swept yet`}),(0,G.jsx)(`span`,{className:W.spacer}),C]}),r?(0,G.jsx)(y,{children:r}):null,n.error?(0,G.jsx)(y,{tone:`danger`,children:n.error}):null,n.readOnly?(0,G.jsx)(y,{children:`This server runs without dispatch: lessons can be read, not decided.`}):null,(0,G.jsxs)(`div`,{className:W.grid,children:[(0,G.jsx)(`div`,{className:W.wide,children:(0,G.jsx)(f,{title:`Recurring failure causes · ${a?.windowDays??30}d`,description:`Why tasks ended without landing, by where they ran`,status:l,categories:o.categories,segments:q,values:o.values,height:200})}),(0,G.jsx)(`div`,{className:W.narrow,children:(0,G.jsx)(b,{title:`Suggested knowledge`,caption:a?`${a.knowledge.pending.length} waiting`:void 0,children:a?a.knowledge.pending.length===0?(0,G.jsx)(y,{children:`Nothing to review. Failed tasks suggest lessons here.`}):(0,G.jsx)(`ul`,{className:W.list,children:a.knowledge.pending.slice(0,8).map(e=>(0,G.jsx)(Y,{note:e,disabled:d||n.readOnly,onApprove:_,onReject:v},e.id))}):(0,G.jsx)(y,{tone:`unknown`,children:e.data?.reason??`Loading…`})})}),(0,G.jsx)(`div`,{className:W.wide,children:(0,G.jsx)(b,{title:`Recent retros`,caption:a?`${a.retros.length} shown`:void 0,children:a?a.retros.length===0?(0,G.jsx)(y,{children:`No finished tasks yet. Each merge, revert, close, refusal or veto leaves a retro here.`}):(0,G.jsx)(`ul`,{className:W.list,children:a.retros.slice(0,20).map(e=>(0,G.jsx)(J,{retro:e},e.id))}):(0,G.jsx)(y,{tone:`unknown`,children:e.data?.reason??`Loading…`})})}),(0,G.jsx)(`div`,{className:W.narrow,children:(0,G.jsx)(b,{title:`Approved knowledge`,caption:a?U(a.knowledge.approvedBytes,a.knowledge.capBytes):void 0,children:a?a.knowledge.approved.length===0&&a.playbook.length===0?(0,G.jsx)(y,{children:`No approved lessons yet.`}):(0,G.jsxs)(`ul`,{className:W.list,children:[a.knowledge.approved.map(e=>(0,G.jsxs)(`li`,{className:W.note,children:[(0,G.jsx)(`p`,{className:W.noteText,children:e.text}),(0,G.jsxs)(`p`,{className:W.meta,children:[V(e.scope),` · used `,e.hits,`×`,e.lastHitAt?`, last ${m(e.lastHitAt)}`:``,e.edited?` · edited`:``]}),e.scope.repo?(0,G.jsx)(`div`,{className:W.actions,children:e.agentsMdTaskId?(0,G.jsx)(h,{size:`sm`,children:`AGENTS.md proposal queued`}):(0,G.jsx)(g,{size:`sm`,variant:`ghost`,disabled:d||n.readOnly,onClick:()=>S(e),children:`Propose for AGENTS.md`})}):null]},e.id)),a.playbook.map(e=>(0,G.jsxs)(`li`,{className:W.note,children:[(0,G.jsx)(`p`,{className:W.noteText,children:e.text}),(0,G.jsxs)(`p`,{className:W.meta,children:[`Leader veto lesson`,e.hits>0?` · repeated ${e.hits}×`:``,` · read by the Leader`]})]},`${e.addedAt}:${e.text}`))]}):(0,G.jsx)(y,{tone:`unknown`,children:e.data?.reason??`Loading…`})})})]}),(0,G.jsx)(u,{open:n.tokenOpen,onClose:n.closeToken,reason:n.tokenReason,tokenHelp:`the mutation token ashlr verse printed`})]})}export{X as LessonsPanel};
2
- //# sourceMappingURL=LessonsPanel-Wy6TVWEv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LessonsPanel-Wy6TVWEv.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/growth/lessons-data.ts","../../../../../../src/web-ui/routes/verse/growth/lessons-model.ts","../../../../../../src/web-ui/routes/verse/growth/lessons.module.css","../../../../../../src/web-ui/routes/verse/growth/LessonsPanel.tsx"],"sourcesContent":["/**\n * routes/verse/growth/lessons-data.ts — the Lessons view's one read and its\n * writes (3.15; routes in core/verse/learning-api.ts).\n *\n * GET /api/verse/learning/lessons LessonsStateV1\n * POST /api/verse/learning/lessons/knowledge {id, decision, text?, scope?}\n * POST /api/verse/learning/lessons/agents-md {id}\n * POST /api/verse/learning/lessons/sweep {}\n *\n * The read is OPTIONAL like every surface read (an older server answers 404:\n * the card says so). Writes pull the held mutation token and are routed\n * through useGuardedAction by the panel, which opens the token dialog first.\n */\nimport { apiPost } from '../../../data/client.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { invalidate } from '../../../data/cache.js';\nimport { VerseControlLockedError } from '../autonomy/control-queries.js';\nimport { optionalQuery } from '../command/surface-data.js';\nimport {\n VERSE_LESSONS_AGENTS_MD_PATH,\n VERSE_LESSONS_KNOWLEDGE_PATH,\n VERSE_LESSONS_PATH,\n VERSE_LESSONS_SWEEP_PATH,\n type KnowledgeDecisionRequest,\n type LessonsStateV1,\n} from '../../../../core/learn/retro/types.js';\n\nexport const LESSONS_KEY = 'verse-learning-lessons';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/** Just enough shape to never crash a render on a mismatched server. */\nexport function narrowLessons(raw: unknown): LessonsStateV1 | null {\n if (!isRecord(raw) || raw['v'] !== 1 || !Array.isArray(raw['retros']) || !Array.isArray(raw['causes'])) return null;\n const k = raw['knowledge'];\n if (!isRecord(k) || !Array.isArray(k['pending']) || !Array.isArray(k['approved']) || !Array.isArray(raw['playbook'])) return null;\n return raw as unknown as LessonsStateV1;\n}\n\nexport const lessonsQuery = optionalQuery(LESSONS_KEY, VERSE_LESSONS_PATH, 'Lessons', narrowLessons);\n\nasync function post<T>(path: string, body: unknown): Promise<T> {\n const token = getMutationToken();\n if (!token) throw new VerseControlLockedError();\n const result = await apiPost<T>(path, body, token);\n touchMutationHold();\n invalidate(LESSONS_KEY);\n return result;\n}\n\nexport function decideKnowledgeNote(req: KnowledgeDecisionRequest): Promise<unknown> {\n return post(VERSE_LESSONS_KNOWLEDGE_PATH, req);\n}\n\nexport function proposeKnowledgeToAgentsMd(id: string): Promise<{ ok: true; taskId?: string }> {\n return post(VERSE_LESSONS_AGENTS_MD_PATH, { id });\n}\n\nexport function sweepLessons(): Promise<{ ok: true; created: number; candidates: number }> {\n return post(VERSE_LESSONS_SWEEP_PATH, {});\n}\n","/**\n * routes/verse/growth/lessons-model.ts — pure helpers for the Lessons view.\n */\nimport type {\n KnowledgeScope,\n LessonsCauseRow,\n RetroEndKind,\n RetroSource,\n TaskKind,\n} from '../../../../core/learn/retro/types.js';\nimport { TASK_KINDS } from '../../../../core/learn/retro/types.js';\n\nexport const END_KIND_LABEL: Readonly<Record<RetroEndKind, string>> = {\n merged: 'Merged',\n reverted: 'Reverted',\n closed: 'Closed',\n 'gate-refused': 'Refused',\n 'owner-laned': 'Owner lane',\n 'verify-failed': 'Verify failed',\n failed: 'Failed',\n expired: 'Expired',\n vetoed: 'Vetoed',\n};\n\nexport const END_KIND_TONE: Readonly<Record<RetroEndKind, 'success' | 'danger' | 'warning' | 'neutral'>> = {\n merged: 'success',\n reverted: 'danger',\n closed: 'neutral',\n 'gate-refused': 'warning',\n 'owner-laned': 'neutral',\n 'verify-failed': 'danger',\n failed: 'danger',\n expired: 'neutral',\n vetoed: 'warning',\n};\n\nexport const SOURCE_LABEL: Readonly<Record<RetroSource, string>> = { fleet: 'Fleet', cloud: 'Cloud', leader: 'Leader' };\nexport const SOURCES: readonly RetroSource[] = ['fleet', 'cloud', 'leader'];\n\n/** The causes chart: one category per cause, one stacked segment per source. */\nexport function causeChart(causes: readonly LessonsCauseRow[], max = 8): { categories: string[]; values: number[][] } {\n const rows = causes.slice(0, max);\n return {\n categories: rows.map((r) => r.label),\n values: rows.map((r) => SOURCES.map((s) => r.bySource[s] ?? 0)),\n };\n}\n\nexport function scopeLabel(scope: KnowledgeScope): string {\n const parts = [scope.repo ?? 'Any repo'];\n if (scope.pathGlobs.length > 0) parts.push(scope.pathGlobs.join(', '));\n parts.push(scope.taskKinds.length > 0 ? scope.taskKinds.join(' / ') : 'any task');\n return parts.join(' · ');\n}\n\n/** Parse the edit form back into a scope; null when a field is not valid. */\nexport function parseScopeForm(repo: string, globs: string, kinds: string): KnowledgeScope | null {\n const r = repo.trim();\n if (r !== '' && !/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/.test(r)) return null;\n const pathGlobs = globs.split(',').map((g) => g.trim()).filter(Boolean);\n if (pathGlobs.some((g) => !/^[A-Za-z0-9_.*?{},/@+-]+$/.test(g) || g.includes('..'))) return null;\n const taskKinds = kinds.split(/[,/ ]+/).map((k) => k.trim().toLowerCase()).filter(Boolean);\n if (taskKinds.some((k) => !(TASK_KINDS as readonly string[]).includes(k))) return null;\n return { repo: r === '' ? null : r, pathGlobs, taskKinds: taskKinds as TaskKind[] };\n}\n\n/** \"3 KB of 16 KB\" style budget line. */\nexport function budgetLine(bytes: number, cap: number): string {\n const kb = (n: number) => (n < 1024 ? `${n} B` : `${(n / 1024).toFixed(n < 10 * 1024 ? 1 : 0)} KB`);\n return `${kb(bytes)} approved · each prompt gets at most ${kb(cap)}`;\n}\n","/*\n * routes/verse/growth/lessons.module.css — Growth › Lessons (3.15).\n * Tokens only: style-scan-310 bans raw hex colours and px font sizes here.\n */\n.panel {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n min-width: 0;\n}\n\n.head {\n display: flex;\n align-items: baseline;\n gap: var(--space-3);\n flex-wrap: wrap;\n}\n\n.title {\n margin: 0;\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.spacer {\n flex: 1;\n}\n\n.meta {\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n color: var(--text-tertiary);\n margin: 0;\n}\n\n.grid {\n display: grid;\n grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);\n gap: var(--surface-gap, var(--space-4));\n}\n\n@media (max-width: 960px) {\n .grid {\n grid-template-columns: minmax(0, 1fr);\n }\n}\n\n.wide,\n.narrow {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.wide > *,\n.narrow > * {\n flex: 1 1 auto;\n}\n\n.list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.retro {\n border-top: 1px solid var(--border-subtle);\n padding-top: var(--space-2);\n}\n\n.retro:first-child {\n border-top: none;\n padding-top: 0;\n}\n\n.retroHead {\n display: flex;\n align-items: baseline;\n gap: var(--space-2);\n flex-wrap: wrap;\n width: 100%;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.retroHead:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n border-radius: var(--radius-sm);\n}\n\n.retroAsked {\n flex: 1 1 16rem;\n min-width: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.retroBody {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n gap: var(--space-1) var(--space-3);\n margin: var(--space-2) 0 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n color: var(--text-secondary);\n}\n\n.retroBody dt {\n color: var(--text-tertiary);\n}\n\n.retroBody dd {\n margin: 0;\n min-width: 0;\n}\n\n.bullets {\n margin: 0;\n padding-left: var(--space-4);\n}\n\n.prompt {\n margin: 0;\n padding: var(--space-2);\n border-radius: var(--radius-sm);\n background: var(--bg-code);\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n.note {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n border-top: 1px solid var(--border-subtle);\n padding-top: var(--space-2);\n}\n\n.note:first-child {\n border-top: none;\n padding-top: 0;\n}\n\n.noteText {\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n color: var(--text-primary);\n overflow-wrap: anywhere;\n}\n\n.actions {\n display: flex;\n gap: var(--space-2);\n flex-wrap: wrap;\n}\n\n.editor {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.scopeRow {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));\n gap: var(--space-2);\n}\n\n.field {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.label {\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n color: var(--text-tertiary);\n}\n\n.input,\n.textarea {\n width: 100%;\n box-sizing: border-box;\n padding: var(--space-1) var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-input);\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-sm-size);\n}\n\n.textarea {\n resize: vertical;\n}\n\n.input:focus-visible,\n.textarea:focus-visible {\n outline: none;\n border-color: var(--border-focus);\n}\n","/**\n * routes/verse/growth/LessonsPanel.tsx — Growth ⌘3 › Lessons (3.15).\n *\n * Every finished task leaves a retro; this is where they are read and where\n * their suggested knowledge is decided:\n *\n * Recurring causes (stacked by fleet / cloud / leader) | Suggested knowledge (approve / edit / reject)\n * Recent retros (what was asked, what happened, why, what next) | Approved knowledge (hits, AGENTS.md)\n *\n * Lazy-loaded by GrowthSection: nothing here is fetched until Growth opens.\n * Every write goes through useGuardedAction (the token dialog first); a\n * read-only server explains itself instead of failing.\n */\nimport { useMemo, useState } from 'react';\nimport { BarStack } from '../../../components/charts/BarStack.js';\nimport type { ChartStatus } from '../../../components/charts/ChartFrame.js';\nimport { seriesColor } from '../../../components/charts/colors.js';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { StatusBadge } from '../../../components/primitives/StatusBadge.js';\nimport { Tag } from '../../../components/primitives/Tag.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport { useGuardedAction } from '../autonomy/use-guarded-action.js';\nimport { Card, CardNote } from '../command/Surface.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport type { KnowledgeNoteV1, RetroSummary } from '../../../../core/learn/retro/types.js';\nimport { decideKnowledgeNote, lessonsQuery, proposeKnowledgeToAgentsMd, sweepLessons } from './lessons-data.js';\nimport {\n END_KIND_LABEL,\n END_KIND_TONE,\n SOURCES,\n SOURCE_LABEL,\n budgetLine,\n causeChart,\n parseScopeForm,\n scopeLabel,\n} from './lessons-model.js';\nimport styles from './lessons.module.css';\n\nexport const LESSONS_POLL_MS = 300_000;\n\nconst CAUSE_SEGMENTS = SOURCES.map((s, i) => ({ id: s, label: SOURCE_LABEL[s], color: seriesColor(i) }));\n\nfunction RetroRow({ retro }: { retro: RetroSummary }) {\n const [open, setOpen] = useState(false);\n return (\n <li className={styles.retro}>\n <button type=\"button\" className={styles.retroHead} aria-expanded={open} onClick={() => setOpen((o) => !o)}>\n <StatusBadge status={retro.endKind} tone={END_KIND_TONE[retro.endKind]}>{END_KIND_LABEL[retro.endKind]}</StatusBadge>\n <span className={styles.retroAsked}>{retro.asked}</span>\n <span className={styles.meta}>\n {SOURCE_LABEL[retro.source]}{retro.repo ? ` · ${retro.repo}` : ''} · {formatRelative(retro.endedAt)}\n </span>\n </button>\n {open ? (\n <dl className={styles.retroBody}>\n <dt>What happened</dt>\n <dd>{retro.happened}</dd>\n {retro.rootCause ? (\n <>\n <dt>Root cause</dt>\n <dd>\n <strong>{retro.rootCause.label}</strong> — {retro.rootCause.detail}{' '}\n <span className={styles.meta}>(from {retro.rootCause.evidence})</span>\n </dd>\n </>\n ) : null}\n {retro.doDifferently.length > 0 ? (\n <>\n <dt>Next time</dt>\n <dd>\n <ul className={styles.bullets}>\n {retro.doDifferently.map((d) => <li key={d}>{d}</li>)}\n </ul>\n </dd>\n </>\n ) : null}\n {retro.betterPrompt ? (\n <>\n <dt>A better prompt</dt>\n <dd><pre className={styles.prompt}>{retro.betterPrompt}</pre></dd>\n </>\n ) : null}\n {retro.modelAssisted ? <dd className={styles.meta}>Refined by a local / Grok model pass.</dd> : null}\n </dl>\n ) : null}\n </li>\n );\n}\n\ninterface NoteRowProps {\n note: KnowledgeNoteV1;\n disabled: boolean;\n onApprove: (note: KnowledgeNoteV1, edit?: { text: string; scope: KnowledgeNoteV1['scope'] }) => void;\n onReject: (note: KnowledgeNoteV1) => void;\n}\n\nfunction PendingNote({ note, disabled, onApprove, onReject }: NoteRowProps) {\n const [editing, setEditing] = useState(false);\n const [text, setText] = useState(note.text);\n const [repo, setRepo] = useState(note.scope.repo ?? '');\n const [globs, setGlobs] = useState(note.scope.pathGlobs.join(', '));\n const [kinds, setKinds] = useState(note.scope.taskKinds.join(', '));\n const scope = parseScopeForm(repo, globs, kinds);\n const valid = scope !== null && text.trim().length >= 8;\n return (\n <li className={styles.note}>\n {editing ? (\n <div className={styles.editor}>\n <label className={styles.field}>\n <span className={styles.label}>Lesson</span>\n <textarea className={styles.textarea} value={text} rows={3} maxLength={600} onChange={(e) => setText(e.target.value)} />\n </label>\n <div className={styles.scopeRow}>\n <label className={styles.field}>\n <span className={styles.label}>Repo (owner/name, blank = any)</span>\n <input className={styles.input} value={repo} onChange={(e) => setRepo(e.target.value)} />\n </label>\n <label className={styles.field}>\n <span className={styles.label}>Paths (globs, comma-separated)</span>\n <input className={styles.input} value={globs} onChange={(e) => setGlobs(e.target.value)} />\n </label>\n <label className={styles.field}>\n <span className={styles.label}>Task kinds</span>\n <input className={styles.input} value={kinds} placeholder=\"fix, tests, …\" onChange={(e) => setKinds(e.target.value)} />\n </label>\n </div>\n {!valid ? <CardNote tone=\"danger\">Check the scope: repo as owner/name, simple globs, known task kinds.</CardNote> : null}\n <div className={styles.actions}>\n <Button size=\"sm\" variant=\"primary\" disabled={disabled || !valid} onClick={() => scope && onApprove(note, { text: text.trim(), scope })}>\n Approve edited\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditing(false)}>Cancel</Button>\n </div>\n </div>\n ) : (\n <>\n <p className={styles.noteText}>{note.text}</p>\n <p className={styles.meta}>\n {scopeLabel(note.scope)}{note.seen > 1 ? ` · suggested ${note.seen}×` : ''} · from {note.source}\n </p>\n <div className={styles.actions}>\n <Button size=\"sm\" variant=\"subtle\" disabled={disabled} onClick={() => onApprove(note)}>Approve</Button>\n <Button size=\"sm\" variant=\"ghost\" disabled={disabled} onClick={() => setEditing(true)}>Edit</Button>\n <Button size=\"sm\" variant=\"ghost\" disabled={disabled} onClick={() => onReject(note)}>Reject</Button>\n </div>\n </>\n )}\n </li>\n );\n}\n\nexport function LessonsPanel() {\n const lessons = useQuery(lessonsQuery, { freshMs: 60_000 });\n const refetch = useRefetch(lessonsQuery);\n usePollWhileVisible(refetch, LESSONS_POLL_MS);\n const guard = useGuardedAction();\n const [notice, setNotice] = useState<string | null>(null);\n\n const state = lessons.data?.value ?? null;\n const chart = useMemo(() => causeChart(state?.causes ?? []), [state]);\n const causeStatus: ChartStatus = !lessons.data\n ? { kind: 'loading' }\n : !state\n ? { kind: 'unknown', reason: lessons.data.reason ?? 'Lessons did not answer.' }\n : chart.categories.length === 0\n ? { kind: 'empty', message: `No failed task ends in ${state.windowDays} days.` }\n : { kind: 'ready' };\n\n const busy = guard.busy;\n const approve = (note: KnowledgeNoteV1, edit?: { text: string; scope: KnowledgeNoteV1['scope'] }) =>\n guard.request(\n () => decideKnowledgeNote({ id: note.id, decision: 'approve', ...(edit ? { text: edit.text, scope: edit.scope } : {}) }),\n 'Approve a lesson so future matching tasks are told about it',\n () => setNotice('Approved. Matching fleet and cloud tasks will be told about it.'),\n );\n const reject = (note: KnowledgeNoteV1) =>\n guard.request(() => decideKnowledgeNote({ id: note.id, decision: 'reject' }), 'Reject a suggested lesson', () => setNotice('Rejected. It will not be suggested again.'));\n const agentsMd = (note: KnowledgeNoteV1) =>\n guard.request(\n () => proposeKnowledgeToAgentsMd(note.id),\n 'File a fleet task that proposes this lesson for the repo’s AGENTS.md',\n () => setNotice('Queued a fleet task. The AGENTS.md change arrives as a proposal and passes every gate.'),\n );\n const sweep = () =>\n guard.request(sweepLessons, 'Scan finished tasks for new retros', (r) => setNotice(`Swept: ${r.created} new retro(s), ${r.candidates} new suggestion(s).`));\n\n const sweepAction = (\n <Button size=\"sm\" variant=\"ghost\" disabled={busy || guard.readOnly} onClick={sweep}>Sweep now</Button>\n );\n\n return (\n <div className={styles.panel} aria-label=\"Lessons\">\n <header className={styles.head}>\n <h3 className={styles.title}>Lessons</h3>\n <span className={styles.meta}>\n {state?.sweptAt ? `Last sweep ${formatRelative(state.sweptAt)}` : 'Not swept yet'}\n </span>\n <span className={styles.spacer} />\n {sweepAction}\n </header>\n {notice ? <CardNote>{notice}</CardNote> : null}\n {guard.error ? <CardNote tone=\"danger\">{guard.error}</CardNote> : null}\n {guard.readOnly ? <CardNote>This server runs without dispatch: lessons can be read, not decided.</CardNote> : null}\n <div className={styles.grid}>\n <div className={styles.wide}>\n <BarStack\n title={`Recurring failure causes · ${state?.windowDays ?? 30}d`}\n description=\"Why tasks ended without landing, by where they ran\"\n status={causeStatus}\n categories={chart.categories}\n segments={CAUSE_SEGMENTS}\n values={chart.values}\n height={200}\n />\n </div>\n <div className={styles.narrow}>\n <Card title=\"Suggested knowledge\" caption={state ? `${state.knowledge.pending.length} waiting` : undefined}>\n {!state ? (\n <CardNote tone=\"unknown\">{lessons.data?.reason ?? 'Loading…'}</CardNote>\n ) : state.knowledge.pending.length === 0 ? (\n <CardNote>Nothing to review. Failed tasks suggest lessons here.</CardNote>\n ) : (\n <ul className={styles.list}>\n {state.knowledge.pending.slice(0, 8).map((n) => (\n <PendingNote key={n.id} note={n} disabled={busy || guard.readOnly} onApprove={approve} onReject={reject} />\n ))}\n </ul>\n )}\n </Card>\n </div>\n <div className={styles.wide}>\n <Card title=\"Recent retros\" caption={state ? `${state.retros.length} shown` : undefined}>\n {!state ? (\n <CardNote tone=\"unknown\">{lessons.data?.reason ?? 'Loading…'}</CardNote>\n ) : state.retros.length === 0 ? (\n <CardNote>No finished tasks yet. Each merge, revert, close, refusal or veto leaves a retro here.</CardNote>\n ) : (\n <ul className={styles.list}>\n {state.retros.slice(0, 20).map((r) => <RetroRow key={r.id} retro={r} />)}\n </ul>\n )}\n </Card>\n </div>\n <div className={styles.narrow}>\n <Card title=\"Approved knowledge\" caption={state ? budgetLine(state.knowledge.approvedBytes, state.knowledge.capBytes) : undefined}>\n {!state ? (\n <CardNote tone=\"unknown\">{lessons.data?.reason ?? 'Loading…'}</CardNote>\n ) : state.knowledge.approved.length === 0 && state.playbook.length === 0 ? (\n <CardNote>No approved lessons yet.</CardNote>\n ) : (\n <ul className={styles.list}>\n {state.knowledge.approved.map((n) => (\n <li key={n.id} className={styles.note}>\n <p className={styles.noteText}>{n.text}</p>\n <p className={styles.meta}>\n {scopeLabel(n.scope)} · used {n.hits}×{n.lastHitAt ? `, last ${formatRelative(n.lastHitAt)}` : ''}{n.edited ? ' · edited' : ''}\n </p>\n {n.scope.repo ? (\n <div className={styles.actions}>\n {n.agentsMdTaskId ? (\n <Tag size=\"sm\">AGENTS.md proposal queued</Tag>\n ) : (\n <Button size=\"sm\" variant=\"ghost\" disabled={busy || guard.readOnly} onClick={() => agentsMd(n)}>\n Propose for AGENTS.md\n </Button>\n )}\n </div>\n ) : null}\n </li>\n ))}\n {state.playbook.map((p) => (\n <li key={`${p.addedAt}:${p.text}`} className={styles.note}>\n <p className={styles.noteText}>{p.text}</p>\n <p className={styles.meta}>Leader veto lesson{p.hits > 0 ? ` · repeated ${p.hits}×` : ''} · read by the Leader</p>\n </li>\n ))}\n </ul>\n )}\n </Card>\n </div>\n </div>\n <MutationTokenDialog open={guard.tokenOpen} onClose={guard.closeToken} reason={guard.tokenReason} tokenHelp=\"the mutation token ashlr verse printed\" />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{O as r}from"./verse-model-CkF3q2IH.js";import{a as i,i as a}from"./path-display-HyxETV-f.js";var o=n(t(),1),s={live:`_live_ytrey_7`,line:`_line_ytrey_14`,pulse:`_pulse_ytrey_24`,"live-pulse":`_live-pulse_ytrey_1`,text:`_text_ytrey_34`,word:`_word_ytrey_43`,sep:`_sep_ytrey_44`,figure:`_figure_ytrey_45`,detail:`_detail_ytrey_49`,stop:`_stop_ytrey_58`,stopIcon:`_stopIcon_ytrey_75`,notice:`_notice_ytrey_82`,noticeWord:`_noticeWord_ytrey_94`,noticeText:`_noticeText_ytrey_96`},c=e();function l(e,t){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n.kind===`user`)break;if(n.kind===`tool`){if(n.result===null)return{phase:`tool`,detail:r(n.input)||n.name,path:a(n.input)};break}if(n.kind===`assistant`&&n.streaming)return{phase:`writing`,detail:null};if(n.kind===`assistant`||n.kind===`thinking`)break}return t.thinking?{phase:`thinking`,detail:null}:{phase:`waiting`,detail:null}}var u={thinking:`Thinking`,tool:`Running`,writing:`Writing`,waiting:`Waiting`},d={retry:`Retrying`,preflight:`Preflight`,watchdog:`Still running`};function f(e){if(!Number.isFinite(e)||e<0)return`0s`;let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}function p(e,t,n){let r=e.progress,i=t.phase===`tool`||t.phase===`writing`?t.phase:r?.phase??t.phase,a=r?r.elapsedMs+Math.max(0,n-r.receivedAt):e.startedAt===null?null:Math.max(0,n-e.startedAt),o=i===`tool`?t.detail??r?.tool??null:null,s=r?.tokPerSec??null,c=(i===`writing`||i===`thinking`)&&s!==null&&s>0?`${s>=10?Math.round(s):s.toFixed(1)} tok/s`:null;return{phase:i,word:u[i],elapsedMs:a,detail:o,rate:c}}var m=(0,o.memo)(function({live:e,derived:t,onStop:n,showNotice:r=!0}){let[a,l]=(0,o.useState)(()=>Date.now());(0,o.useEffect)(()=>{l(Date.now());let e=setInterval(()=>l(Date.now()),1e3);return()=>clearInterval(e)},[e.turnId]);let u=i(),m=p(e,t,a),h=m.phase===`tool`&&t.path?{...m,detail:u(t.path)}:m,g=h.detail?`${h.word}: ${h.detail}`:h.word,_=r?e.notice:null;return(0,c.jsxs)(`div`,{className:s.live,"data-phase":h.phase,children:[(0,c.jsxs)(`div`,{className:s.line,children:[(0,c.jsx)(`span`,{className:s.pulse,"aria-hidden":`true`}),(0,c.jsxs)(`span`,{className:s.text,"aria-hidden":`true`,children:[(0,c.jsx)(`span`,{className:s.word,children:h.word}),h.elapsedMs===null?null:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`span`,{className:s.sep,children:`·`}),(0,c.jsx)(`span`,{className:s.figure,children:f(h.elapsedMs)})]}),h.detail?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`span`,{className:s.sep,children:`·`}),(0,c.jsx)(`span`,{className:s.detail,title:t.path??h.detail,children:h.detail})]}):null,h.rate?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`span`,{className:s.sep,children:`·`}),(0,c.jsx)(`span`,{className:s.figure,children:h.rate})]}):null]}),(0,c.jsx)(`span`,{className:`visually-hidden`,role:`status`,children:g}),n?(0,c.jsxs)(`button`,{type:`button`,className:s.stop,onClick:n,"aria-label":`Stop this turn`,title:`Stop this turn (⌘.)`,children:[(0,c.jsx)(`span`,{className:s.stopIcon,"aria-hidden":`true`}),`Stop`]}):null]}),_?(0,c.jsxs)(`p`,{className:s.notice,"data-kind":_.kind,role:`status`,children:[(0,c.jsx)(`span`,{className:s.noticeWord,children:d[_.kind]}),(0,c.jsx)(`span`,{className:s.noticeText,children:_.message})]}):null]})}),h=new Set,g=null,_=Date.now();function v(e){return h.add(e),g===null&&(_=Date.now(),g=setInterval(()=>{_=Date.now();for(let e of[...h])e()},1e3)),()=>{h.delete(e),h.size===0&&g!==null&&(clearInterval(g),g=null)}}function y(){return _}var b=()=>()=>{},x=()=>0;function S(e=!0){let t=(0,o.useSyncExternalStore)(e?v:b,e?y:x,e?y:x);return Math.max(t,Date.now())}function C(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e!=`string`)return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function w({since:e,className:t,label:n}){let r=C(e),i=S(r!==null);if(r===null)return null;let a=f(Math.max(0,i-r));return(0,c.jsx)(`span`,{className:t,"data-live-timer":``,"aria-hidden":!n||void 0,"aria-label":n?`${n} ${a}`:void 0,role:n?`timer`:void 0,children:a})}export{m as n,l as r,w as t};
2
- //# sourceMappingURL=LiveTimer-c18lVIBC.js.map