@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":"PlaybooksSection-D_uQ-NB3.js","names":[],"sources":["../../../../../../src/core/playbooks/parse.ts","../../../../../../src/web-ui/routes/verse/playbooks/command-workflow-paste.ts","../../../../../../src/web-ui/routes/verse/playbooks/PlaybooksView.tsx","../../../../../../src/web-ui/routes/verse/sections/PlaybooksSection.tsx"],"sourcesContent":["/**\n * Playbook markdown ⇄ structure — parsing, validation, canonical form.\n *\n * PURE and BROWSER-SAFE (the editor validates as you type): no I/O, no Node.\n *\n * Format:\n *\n * ---\n * id: fix-issue\n * name: Fix a reported bug\n * macro: !fix-bug\n * description: Reproduce, fix at the root, prove it with a test.\n * kinds: [fix]\n * repos: []\n * globs: []\n * auto: false\n * budget-usd: 5\n * budget-minutes: 60\n * done-when:\n * - A regression test fails before the fix and passes after it\n * ---\n * ## Outcome\n * …\n * ## Procedure\n * …\n *\n * A COMMAND WORKFLOW (`kind: command`, 3.15) has a smaller shape: the same\n * id / name / description, and one `## Command` section holding one fenced\n * code block — the shell command template with `{{param:default}}` holes\n * (command-template.ts). Outcome / Procedure are not required (nor allowed);\n * `auto: true` is refused (no lane ever resolves a command workflow); the\n * agent-only keys (kinds, repos, globs, budget, done-when) are dropped with\n * a warning.\n *\n * ---\n * id: new-branch\n * name: New branch from main\n * kind: command\n * ---\n * ## Command\n *\n * ```sh\n * git switch main && git pull && git switch -c {{branch}}\n * ```\n *\n * WHY a hand-rolled front-matter reader instead of YAML: the grammar is a\n * dozen flat keys, `yaml` is a dev dependency only, and a strict small reader\n * gives precise errors (\"line 4: unknown key\") instead of YAML's surprises\n * (`macro: !fix-bug` is a YAML tag; `no` is a boolean).\n *\n * The STORED form is always `serializePlaybook(parse(source))`, so two edits\n * that differ only in spacing or key order produce the same sha.\n */\nimport { TASK_KINDS, type TaskKind } from '../learn/retro/types.js';\nimport { commandFenceFor, extractCommandFence, parseCommandTemplate } from './command-template.js';\nimport {\n COMMAND_SECTION,\n PLAYBOOK_KINDS,\n PLAYBOOK_ID_PATTERN,\n PLAYBOOK_MACRO_PATTERN,\n PLAYBOOK_MAX_BYTES,\n PLAYBOOK_SECTIONS,\n REQUIRED_PLAYBOOK_SECTIONS,\n type PlaybookKind,\n type PlaybookMeta,\n type PlaybookParseResult,\n type PlaybookSectionName,\n type PlaybookSections,\n type PlaybookValidationIssue,\n} from './types.js';\n\nconst KNOWN_KEYS = new Set([\n 'id', 'name', 'macro', 'description', 'kind', 'kinds', 'repos', 'globs', 'auto', 'budget-usd', 'budget-minutes', 'done-when',\n]);\nconst LIST_KEYS = new Set(['kinds', 'repos', 'globs', 'done-when']);\n\nconst REPO_PATTERN = /^[A-Za-z0-9_.-]{1,100}\\/[A-Za-z0-9_.-]{1,100}$/;\nconst MAX_NAME = 80;\nconst MAX_DESCRIPTION = 200;\nconst MAX_LIST = 20;\nconst MAX_ITEM = 200;\n\nfunction utf8Length(s: string): number {\n // TextEncoder exists in browsers and Node alike.\n return new TextEncoder().encode(s).length;\n}\n\nfunction unquote(value: string): string {\n const v = value.trim();\n if (v.length >= 2 && ((v.startsWith('\"') && v.endsWith('\"')) || (v.startsWith(\"'\") && v.endsWith(\"'\")))) {\n return v.slice(1, -1);\n }\n return v;\n}\n\nfunction inlineList(value: string): string[] {\n const inner = value.trim().slice(1, -1).trim();\n if (!inner) return [];\n return inner.split(',').map(unquote).filter((s) => s.length > 0);\n}\n\ninterface RawFrontMatter {\n scalars: Map<string, string>;\n lists: Map<string, string[]>;\n}\n\nfunction readFrontMatter(lines: string[], errors: PlaybookValidationIssue[]): { raw: RawFrontMatter; bodyStart: number } | null {\n if (lines[0]?.trim() !== '---') {\n errors.push({ field: 'front-matter', message: 'A playbook starts with a `---` front-matter block.' });\n return null;\n }\n const end = lines.findIndex((l, i) => i > 0 && l.trim() === '---');\n if (end === -1) {\n errors.push({ field: 'front-matter', message: 'The front-matter block is not closed with `---`.' });\n return null;\n }\n const raw: RawFrontMatter = { scalars: new Map(), lists: new Map() };\n let openList: string | null = null;\n for (let i = 1; i < end; i += 1) {\n const line = lines[i]!;\n if (!line.trim() || line.trim().startsWith('#')) continue;\n const item = /^\\s+-\\s+(.*)$/.exec(line) ?? /^-\\s+(.*)$/.exec(line);\n if (item) {\n if (!openList) {\n errors.push({ field: 'front-matter', message: `Line ${i + 1}: a list item needs a key above it.` });\n continue;\n }\n raw.lists.get(openList)!.push(unquote(item[1]!));\n continue;\n }\n const kv = /^([A-Za-z][A-Za-z0-9-]*)\\s*:\\s*(.*)$/.exec(line);\n if (!kv) {\n errors.push({ field: 'front-matter', message: `Line ${i + 1}: expected \\`key: value\\`.` });\n continue;\n }\n const key = kv[1]!.toLowerCase();\n const value = kv[2]!.trim();\n openList = null;\n if (!KNOWN_KEYS.has(key)) {\n errors.push({ field: key, message: `Line ${i + 1}: unknown key \\`${key}\\`.` });\n continue;\n }\n if (raw.scalars.has(key) || raw.lists.has(key)) {\n errors.push({ field: key, message: `Line ${i + 1}: \\`${key}\\` appears twice.` });\n continue;\n }\n if (LIST_KEYS.has(key)) {\n if (value === '') {\n raw.lists.set(key, []);\n openList = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n raw.lists.set(key, inlineList(value));\n } else {\n raw.lists.set(key, [unquote(value)]);\n }\n } else {\n raw.scalars.set(key, unquote(value));\n }\n }\n return { raw, bodyStart: end + 1 };\n}\n\ntype SectionName = PlaybookSectionName | typeof COMMAND_SECTION;\n\nfunction canonicalSection(heading: string): SectionName | null {\n const h = heading.trim().replace(/:$/, '').toLowerCase();\n if (h === COMMAND_SECTION.toLowerCase()) return COMMAND_SECTION;\n return PLAYBOOK_SECTIONS.find((s) => s.toLowerCase() === h) ?? null;\n}\n\n/** A fence line: its character, run length, and whether nothing follows the run. */\nfunction fenceOf(line: string): { ch: string; len: number; bare: boolean } | null {\n const m = /^\\s*(`{3,}|~{3,})(.*)$/.exec(line);\n return m ? { ch: m[1]![0]!, len: m[1]!.length, bare: !m[2]!.trim() } : null;\n}\n\n/**\n * Every `## ` section by canonical name (`Command` included — the caller\n * decides per kind whether it belongs). A `##` inside a fenced block is\n * text. A fence closes only on the same character, at least as long, with\n * nothing after it (CommonMark), so a ```` block can quote a ``` one.\n */\nfunction readSections(lines: string[], start: number, errors: PlaybookValidationIssue[], warnings: PlaybookValidationIssue[]): Partial<Record<SectionName, string>> {\n const sections: Partial<Record<SectionName, string>> = {};\n let current: SectionName | null = null;\n let buf: string[] = [];\n const flush = () => {\n if (current) {\n const text = buf.join('\\n').replace(/^\\s*\\n/, '').trimEnd();\n if (text.trim()) sections[current] = text;\n }\n buf = [];\n };\n let preamble = false;\n let fence: { ch: string; len: number } | null = null;\n for (let i = start; i < lines.length; i += 1) {\n const line = lines[i]!;\n const f = fenceOf(line);\n let fenceLine = false;\n if (fence) {\n if (f && f.ch === fence.ch && f.len >= fence.len && f.bare) {\n fence = null;\n fenceLine = true;\n }\n } else if (f) {\n fence = { ch: f.ch, len: f.len };\n fenceLine = true;\n }\n const h2 = fence || fenceLine ? null : /^##\\s+(.+?)\\s*#*\\s*$/.exec(line);\n if (h2 && !/^###/.test(line)) {\n flush();\n const name = canonicalSection(h2[1]!);\n if (!name) {\n errors.push({ field: 'sections', message: `Unknown section “## ${h2[1]}”. Use: ${PLAYBOOK_SECTIONS.join(', ')}.` });\n current = null;\n continue;\n }\n if (sections[name] !== undefined) {\n errors.push({ field: name, message: `“## ${name}” appears twice.` });\n }\n current = name;\n continue;\n }\n if (current) buf.push(line);\n else if (line.trim() && !/^#\\s/.test(line)) preamble = true;\n }\n flush();\n if (preamble) warnings.push({ field: 'sections', message: 'Text before the first `##` section is ignored.' });\n return sections;\n}\n\nfunction numberOrNull(raw: string | undefined, field: string, max: number, errors: PlaybookValidationIssue[]): number | null {\n if (raw === undefined || raw === '' || raw === 'null') return null;\n const n = Number(raw);\n if (!Number.isFinite(n) || n <= 0 || n > max) {\n errors.push({ field, message: `\\`${field}\\` must be a number between 0 and ${max}.` });\n return null;\n }\n return Math.round(n * 100) / 100;\n}\n\nfunction cleanList(values: string[] | undefined, field: string, errors: PlaybookValidationIssue[]): string[] {\n const list = (values ?? []).map((s) => s.trim()).filter(Boolean);\n if (list.length > MAX_LIST) errors.push({ field, message: `\\`${field}\\` has more than ${MAX_LIST} entries.` });\n for (const v of list) {\n if (v.length > MAX_ITEM) errors.push({ field, message: `An entry in \\`${field}\\` is longer than ${MAX_ITEM} characters.` });\n }\n return [...new Set(list)].slice(0, MAX_LIST);\n}\n\n/** Parse and validate one playbook source. Never throws. */\nexport function parsePlaybook(source: string): PlaybookParseResult {\n const errors: PlaybookValidationIssue[] = [];\n const warnings: PlaybookValidationIssue[] = [];\n if (typeof source !== 'string' || !source.trim()) {\n return { ok: false, errors: [{ field: 'source', message: 'The playbook is empty.' }] };\n }\n if (utf8Length(source) > PLAYBOOK_MAX_BYTES) {\n return { ok: false, errors: [{ field: 'source', message: `A playbook is at most ${PLAYBOOK_MAX_BYTES / 1024} KiB.` }] };\n }\n const lines = source.replace(/\\r\\n?/g, '\\n').split('\\n');\n const fm = readFrontMatter(lines, errors);\n if (!fm) return { ok: false, errors };\n const { scalars, lists } = fm.raw;\n\n const id = (scalars.get('id') ?? '').trim();\n if (!PLAYBOOK_ID_PATTERN.test(id)) {\n errors.push({ field: 'id', message: '`id` is required: 2–48 lowercase letters, digits or dashes.' });\n }\n const name = (scalars.get('name') ?? '').trim();\n if (!name) errors.push({ field: 'name', message: '`name` is required.' });\n else if (name.length > MAX_NAME) errors.push({ field: 'name', message: `\\`name\\` is at most ${MAX_NAME} characters.` });\n const kindRaw = (scalars.get('kind') ?? '').trim().toLowerCase() || 'agent';\n if (!(PLAYBOOK_KINDS as readonly string[]).includes(kindRaw)) {\n errors.push({ field: 'kind', message: `\\`kind\\` is ${PLAYBOOK_KINDS.map((k) => `\\`${k}\\``).join(' or ')}.` });\n }\n const kind: PlaybookKind = kindRaw === 'command' ? 'command' : 'agent';\n const macroRaw = (scalars.get('macro') ?? '').trim();\n const macro = (macroRaw ? (macroRaw.startsWith('!') ? macroRaw : `!${macroRaw}`) : `!${id}`).toLowerCase();\n if (!PLAYBOOK_MACRO_PATTERN.test(macro)) {\n errors.push({ field: 'macro', message: '`macro` is `!` followed by 2–48 lowercase letters, digits or dashes.' });\n }\n const description = (scalars.get('description') ?? '').trim();\n if (description.length > MAX_DESCRIPTION) {\n errors.push({ field: 'description', message: `\\`description\\` is at most ${MAX_DESCRIPTION} characters.` });\n }\n const kinds = cleanList(lists.get('kinds'), 'kinds', errors).map((k) => k.toLowerCase());\n const badKind = kinds.find((k) => !(TASK_KINDS as readonly string[]).includes(k));\n if (badKind) errors.push({ field: 'kinds', message: `Unknown task kind \\`${badKind}\\`. Use: ${TASK_KINDS.join(', ')}.` });\n const repos = cleanList(lists.get('repos'), 'repos', errors);\n const badRepo = repos.find((r) => !REPO_PATTERN.test(r));\n if (badRepo) errors.push({ field: 'repos', message: `\\`${badRepo}\\` is not an \\`owner/name\\` repo.` });\n const globs = cleanList(lists.get('globs'), 'globs', errors).map((g) => g.replace(/^\\.\\//, ''));\n if (globs.some((g) => g.startsWith('/') || g.split('/').includes('..'))) {\n errors.push({ field: 'globs', message: 'Globs are repo-relative (no leading `/`, no `..`).' });\n }\n const autoRaw = (scalars.get('auto') ?? 'false').toLowerCase();\n if (autoRaw !== 'true' && autoRaw !== 'false') errors.push({ field: 'auto', message: '`auto` is `true` or `false`.' });\n const auto = autoRaw === 'true';\n const doneWhen = cleanList(lists.get('done-when'), 'done-when', errors);\n const budget = {\n usd: numberOrNull(scalars.get('budget-usd'), 'budget-usd', 1000, errors),\n minutes: numberOrNull(scalars.get('budget-minutes'), 'budget-minutes', 24 * 60, errors),\n };\n const found = readSections(lines, fm.bodyStart, errors, warnings);\n if (kind === 'command') {\n return finishCommandWorkflow({ id, name, macro, description, auto, kinds, repos, globs, doneWhen, budget }, found, errors, warnings);\n }\n\n if (auto && kinds.length === 0 && repos.length === 0) {\n errors.push({ field: 'auto', message: '`auto: true` needs `kinds` or `repos` — a playbook that matches every task is not a playbook.' });\n }\n if (found[COMMAND_SECTION] !== undefined) {\n errors.push({ field: 'sections', message: `“## ${COMMAND_SECTION}” belongs to a command workflow — add \\`kind: command\\` to the front matter.` });\n }\n const sections: PlaybookSections = {};\n for (const name of PLAYBOOK_SECTIONS) {\n const text = found[name];\n if (text !== undefined) sections[name] = text;\n }\n for (const required of REQUIRED_PLAYBOOK_SECTIONS) {\n if (!sections[required]) errors.push({ field: required, message: `“## ${required}” is required.` });\n }\n\n if (errors.length > 0) return { ok: false, errors };\n const meta: PlaybookMeta = {\n id,\n name,\n macro,\n description,\n appliesTo: { repos, globs },\n taskKinds: kinds as TaskKind[],\n doneWhen,\n budget,\n auto,\n kind: 'agent',\n };\n return { ok: true, meta, sections, warnings };\n}\n\ninterface CommonFrontMatter {\n id: string;\n name: string;\n macro: string;\n description: string;\n auto: boolean;\n kinds: string[];\n repos: string[];\n globs: string[];\n doneWhen: string[];\n budget: PlaybookMeta['budget'];\n}\n\n/**\n * The `kind: command` half of parsePlaybook: one `## Command` section with\n * one code block, a template that parses, never auto; agent-only keys are\n * dropped (with a warning) so the stored form round-trips exactly.\n */\nfunction finishCommandWorkflow(\n fm: CommonFrontMatter,\n found: Partial<Record<SectionName, string>>,\n errors: PlaybookValidationIssue[],\n warnings: PlaybookValidationIssue[],\n): PlaybookParseResult {\n if (fm.auto) {\n errors.push({ field: 'auto', message: 'A command workflow is never auto-matched — it is pasted into a terminal by hand. Remove `auto: true`.' });\n }\n const agentOnly = [\n fm.kinds.length ? 'kinds' : null, fm.repos.length ? 'repos' : null, fm.globs.length ? 'globs' : null,\n fm.doneWhen.length ? 'done-when' : null, fm.budget.usd !== null ? 'budget-usd' : null, fm.budget.minutes !== null ? 'budget-minutes' : null,\n ].filter((k): k is string => k !== null);\n if (agentOnly.length > 0) {\n warnings.push({\n field: 'kind',\n message: `${agentOnly.map((k) => `\\`${k}\\``).join(', ')} ${agentOnly.length === 1 ? 'does' : 'do'} not apply to a command workflow and will be dropped.`,\n });\n }\n const extra = PLAYBOOK_SECTIONS.filter((name) => found[name] !== undefined);\n if (extra.length > 0) {\n errors.push({ field: 'sections', message: `A command workflow has one section, “## ${COMMAND_SECTION}” — not ${extra.map((n) => `“## ${n}”`).join(', ')}.` });\n }\n const body = found[COMMAND_SECTION];\n let command: PlaybookMeta['command'];\n if (body === undefined) {\n errors.push({ field: COMMAND_SECTION, message: `“## ${COMMAND_SECTION}” is required: one fenced code block with the command.` });\n } else {\n const fence = extractCommandFence(body);\n if (!fence.ok) {\n errors.push({ field: COMMAND_SECTION, message: fence.error });\n } else {\n const template = parseCommandTemplate(fence.template);\n for (const message of template.errors) errors.push({ field: COMMAND_SECTION, message });\n command = { template: fence.template, params: template.params };\n }\n }\n if (errors.length > 0 || !command) return { ok: false, errors };\n const meta: PlaybookMeta = {\n id: fm.id,\n name: fm.name,\n macro: fm.macro,\n description: fm.description,\n appliesTo: { repos: [], globs: [] },\n taskKinds: [],\n doneWhen: [],\n budget: { usd: null, minutes: null },\n auto: false,\n kind: 'command',\n command,\n };\n return { ok: true, meta, sections: {}, warnings };\n}\n\nfunction listLines(key: string, values: readonly string[]): string[] {\n if (values.length === 0) return [`${key}: []`];\n return [`${key}:`, ...values.map((v) => ` - ${v}`)];\n}\n\n/** The canonical markdown for a playbook. Pure; `parse(serialize(x))` round-trips. */\nexport function serializePlaybook(meta: PlaybookMeta, sections: PlaybookSections): string {\n if (meta.kind === 'command' && meta.command) {\n // Only what a command workflow uses; the macro only when it is not the default.\n const fence = commandFenceFor(meta.command.template);\n const head = [\n '---',\n `id: ${meta.id}`,\n `name: ${meta.name}`,\n ...(meta.macro !== `!${meta.id}` ? [`macro: ${meta.macro}`] : []),\n ...(meta.description ? [`description: ${meta.description}`] : []),\n 'kind: command',\n '---',\n ];\n return `${head.join('\\n')}\\n\\n## ${COMMAND_SECTION}\\n\\n${fence}sh\\n${meta.command.template}\\n${fence}\\n`;\n }\n const fm = [\n '---',\n `id: ${meta.id}`,\n `name: ${meta.name}`,\n `macro: ${meta.macro}`,\n ...(meta.description ? [`description: ${meta.description}`] : []),\n `kinds: [${meta.taskKinds.join(', ')}]`,\n `repos: [${meta.appliesTo.repos.join(', ')}]`,\n // A glob like `src/{a,b}/**` carries commas: the block form keeps it whole.\n ...(meta.appliesTo.globs.some((g) => /[,[\\]]/.test(g))\n ? listLines('globs', meta.appliesTo.globs)\n : [`globs: [${meta.appliesTo.globs.join(', ')}]`]),\n `auto: ${meta.auto ? 'true' : 'false'}`,\n ...(meta.budget.usd !== null ? [`budget-usd: ${meta.budget.usd}`] : []),\n ...(meta.budget.minutes !== null ? [`budget-minutes: ${meta.budget.minutes}`] : []),\n ...listLines('done-when', meta.doneWhen),\n '---',\n ];\n const body: string[] = [];\n for (const name of PLAYBOOK_SECTIONS) {\n const text = sections[name];\n if (!text) continue;\n body.push(`## ${name}`, '', text.trim(), '');\n }\n return `${fm.join('\\n')}\\n\\n${body.join('\\n').trimEnd()}\\n`;\n}\n\n/** Parse then re-serialize. The form the store writes. */\nexport function canonicalizePlaybook(source: string): PlaybookParseResult & { source?: string } {\n const parsed = parsePlaybook(source);\n if (!parsed.ok) return parsed;\n return { ...parsed, source: serializePlaybook(parsed.meta, parsed.sections) };\n}\n\n/** A blank playbook for \"New playbook\" (with `kind: 'command'`, for \"New command workflow\"). Pure. */\nexport function playbookTemplate(id = 'my-playbook', kind: PlaybookKind = 'agent'): string {\n if (kind === 'command') {\n const template = 'git switch -c {{branch}} && git push -u {{remote:origin}} {{branch}}';\n return serializePlaybook(\n {\n id,\n name: 'New command workflow',\n macro: `!${id}`,\n description: 'What this command does, in one line. It is pasted into your terminal, never run.',\n appliesTo: { repos: [], globs: [] },\n taskKinds: [],\n doneWhen: [],\n budget: { usd: null, minutes: null },\n auto: false,\n kind: 'command',\n command: { template, params: parseCommandTemplate(template).params },\n },\n {},\n );\n }\n return serializePlaybook(\n {\n id,\n name: 'New playbook',\n macro: `!${id}`,\n description: 'What this playbook is for, in one line.',\n appliesTo: { repos: [], globs: [] },\n taskKinds: [],\n doneWhen: ['The project’s own test command passes'],\n budget: { usd: null, minutes: null },\n auto: false,\n },\n {\n Outcome: 'What is true when this is done.',\n Procedure: '1. First step.\\n2. Second step.',\n Specifications: '- Constraints the result must meet.',\n Advice: '- Tips that make this go well.',\n 'Forbidden actions': '- Do not weaken or skip tests.',\n 'Required from user': '- What the task description must include.',\n },\n );\n}\n","/**\n * routes/verse/playbooks/command-workflow-paste.ts — where a filled command\n * workflow goes from the Playbooks section: the open chat's Terminal pane,\n * PASTED at the prompt through the dock's one-shot request\n * (dock-store.ts `requestTerminal({ paste })`). The Terminal pane types it\n * (bracketed paste; a multi-line command without bracketed paste is copied\n * instead — TerminalLeaf.tsx) and never presses Enter: running it is the\n * operator's keystroke.\n *\n * The terminal panel's own menu mounts CommandWorkflowPicker with its own\n * `onPaste` (straight into the focused tab); this module is only the path\n * from the gear tray.\n */\nimport { openDockPane, requestTerminal } from '../dock/dock-store.js';\nimport { isSlotAvailable } from '../shell/slots.js';\nimport { setVerseSection } from '../verse-ui-store.js';\n\n/** Why a filled command cannot be pasted from here, or null when it can. Pure over its inputs. */\nexport function commandPasteUnavailableReason(input: { activeSessionId: string | null; terminalLanded?: boolean }): string | null {\n const landed = input.terminalLanded ?? isSlotAvailable('terminal-pane');\n if (!landed) return 'This build has no Verse terminal yet.';\n if (input.activeSessionId === null) return 'Open a chat first — the command is pasted into its terminal.';\n return null;\n}\n\n/**\n * Open the chat's Terminal pane and paste `text` at its prompt; bring Chat\n * forward. The request waits in the dock store until the pane serves it\n * (ChatSection clears requests only on a chat SWITCH, not its first mount).\n */\nexport function pasteIntoChatTerminal(text: string): void {\n // Never a trailing newline: a paste must not submit.\n const paste = text.replace(/[\\r\\n]+$/, '');\n if (!paste) return;\n openDockPane('terminal');\n requestTerminal({ paste });\n setVerseSection('chat');\n}\n","/**\n * routes/verse/playbooks/PlaybooksView.tsx — versioned playbooks (3.15).\n *\n * A library you open, not a surface you watch (so it lives in the gear\n * tray, beside the Repo wiki): the list on the left; on the right one\n * playbook as an engine reads it, its versions with what each version's\n * runs ended as (merged / refused / reverted / failed, from retros), and\n * \"Run…\" — which writes its `!macro` into the chat message so the operator\n * describes the task and picks where it runs: sent in the chat (any seat\n * expands it — session-engine.ts), Run in cloud, Run in Devin, ….\n *\n * Command workflows (`kind: command`) live here too, badged \"Command\": a\n * shell command with `{{param}}` holes. Their \"Use…\" opens a small form\n * (CommandWorkflowForm) and pastes the filled command into the open chat's\n * Terminal pane — pasted at the prompt, never run.\n *\n * Editing never rewrites: Save writes the next version (the server refuses\n * if someone saved in between). Viewing an older version and choosing\n * \"Edit from vN\" is how a version is restored — as a new one.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { parsePlaybook, playbookTemplate } from '../../../../core/playbooks/parse.js';\nimport { playbookKindOf, type PlaybookDetailResponse, type PlaybookKind, type PlaybookSummary, type PlaybookValidationIssue } from '../../../../core/playbooks/types.js';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { EmptyState } from '../../../components/primitives/EmptyState.js';\nimport { IconPlay, IconPlus } from '../../../components/primitives/icons.js';\nimport { SkeletonLine } from '../../../components/primitives/Skeleton.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { describeContextError, useTokenGate, type TokenGate } from '../context/use-token-gate.js';\nimport { renderMarkdown } from '../MessageMarkdownRenderer.js';\nimport { useVerseUi } from '../useVerseUi.js';\nimport { commandPasteUnavailableReason, pasteIntoChatTerminal } from './command-workflow-paste.js';\nimport { CommandWorkflowForm } from './CommandWorkflowForm.js';\nimport { putMacroInComposer } from './playbook-composer.js';\nimport { getPlaybookFocus, isPlaybookFocusLive, subscribePlaybookFocus, takePlaybookFocus } from './playbook-focus.js';\nimport { playbookDetailQuery, playbooksQuery, savePlaybookSource } from './playbooks-queries.js';\nimport styles from './Playbooks.module.css';\n\ntype Notice = { tone: 'neutral' | 'danger' | 'success'; text: string } | null;\ntype Editing = { mode: 'new'; kind: PlaybookKind } | { mode: 'edit'; id: string; baseVersion: number; source: string; from: number } | null;\n/** ⌘K hand-offs: \"Run playbook…\" (any playbook) or \"Run command workflow…\" (command workflows only). */\ntype PickMode = 'run' | 'workflows' | null;\n\nconst SELECTED_STORAGE_KEY = 'verse.playbooks.selected';\n\nfunction readStored(): string | null {\n try {\n return localStorage.getItem(SELECTED_STORAGE_KEY);\n } catch {\n return null;\n }\n}\n\nfunction writeStored(id: string): void {\n try {\n localStorage.setItem(SELECTED_STORAGE_KEY, id);\n } catch {\n // private mode / quota: the choice just is not remembered\n }\n}\n\n/** Case-insensitive filter over name, id, macro and description. Pure. */\nexport function filterPlaybooks(rows: readonly PlaybookSummary[], query: string): PlaybookSummary[] {\n const q = query.trim().toLowerCase().replace(/^!/, '');\n if (!q) return [...rows];\n return rows.filter((r) => [r.name, r.id, r.macro, r.description].some((s) => s.toLowerCase().includes(q)));\n}\n\nexport function PlaybooksView() {\n const list = useQuery(playbooksQuery, { freshMs: 30_000 });\n const refetchList = useRefetch(playbooksQuery);\n const gate = useTokenGate();\n const rows = useMemo(() => list.data?.value ?? [], [list.data]);\n const [chosen, setChosen] = useState<string | null>(() => readStored());\n const [filter, setFilter] = useState('');\n const [notice, setNotice] = useState<Notice>(null);\n const [editing, setEditing] = useState<Editing>(null);\n const [pickMode, setPickMode] = useState<PickMode>(null);\n const filterRef = useRef<HTMLInputElement>(null);\n\n const visible = useMemo(() => {\n const matching = filterPlaybooks(rows, filter);\n return pickMode === 'workflows' ? matching.filter((r) => playbookKindOf(r) === 'command') : matching;\n }, [rows, filter, pickMode]);\n const selected = (pickMode === 'workflows' ? visible.find((r) => r.id === chosen) ?? visible[0] : null)\n ?? rows.find((r) => r.id === chosen) ?? rows[0] ?? null;\n\n const choose = useCallback((id: string) => {\n setChosen(id);\n writeStored(id);\n setEditing(null);\n }, []);\n\n // ⌘K \"Run playbook…\": open in \"pick one to run\" mode, the filter focused.\n const focus = useSyncExternalStore(subscribePlaybookFocus, getPlaybookFocus, getPlaybookFocus);\n useEffect(() => {\n if (!focus) return;\n if (isPlaybookFocusLive(focus)) {\n setPickMode(focus.kind);\n setEditing(null);\n filterRef.current?.focus();\n }\n takePlaybookFocus(focus.seq);\n }, [focus]);\n\n const run = useCallback(async (macro: string) => {\n setNotice(null);\n const ok = await putMacroInComposer(macro);\n if (ok) setPickMode(null);\n else setNotice({ tone: 'neutral', text: `Open a chat first, then run ${macro} from its message box.` });\n }, []);\n\n const unavailable = list.data && !list.data.value ? list.data.reason : null;\n\n return (\n <section className={styles.section} aria-label=\"Playbooks\">\n <div className={styles.scroll}>\n <div className={styles.page}>\n <header className={styles.header}>\n <div className={styles.headerText}>\n <h2 className={styles.title}>Playbooks</h2>\n <p className={styles.lede}>\n Reusable, versioned task templates. Type <code>!macro</code> in any chat — Claude Code, Codex, Grok, local or Devin — or in a goal,\n Run in cloud or Run in Devin, and that run follows the playbook (a sent message shows which one). Every edit is a new version, and\n each version shows how its fleet, cloud and Devin runs ended.\n </p>\n </div>\n <div className={styles.actions}>\n <Button variant=\"subtle\" size=\"sm\" icon={<IconPlus size={14} />} onClick={() => { setEditing({ mode: 'new', kind: 'command' }); setNotice(null); }}>\n New command workflow\n </Button>\n <Button variant=\"subtle\" size=\"sm\" icon={<IconPlus size={14} />} onClick={() => { setEditing({ mode: 'new', kind: 'agent' }); setNotice(null); }}>\n New playbook\n </Button>\n </div>\n </header>\n\n {pickMode === 'run' ? (\n <p className={styles.banner} role=\"status\">\n Pick a playbook and choose <strong>Run…</strong>: its macro goes into your chat message, where you describe the task and choose where it runs.\n </p>\n ) : pickMode === 'workflows' ? (\n <p className={styles.banner} role=\"status\">\n Pick a command workflow and choose <strong>Use…</strong>: fill it in and it is pasted into your chat’s terminal — you press Enter.\n </p>\n ) : null}\n <p className={notice ? styles.banner : styles.visuallyHidden} data-tone={notice?.tone} role=\"status\" aria-live=\"polite\">{notice?.text ?? ''}</p>\n\n {list.data === undefined && !list.error ? (\n <div aria-busy=\"true\" aria-label=\"Loading playbooks\">\n <SkeletonLine width=\"40%\" />\n <SkeletonLine width=\"70%\" />\n </div>\n ) : list.error || unavailable ? (\n <p className={styles.banner} data-tone=\"danger\">{unavailable ?? describeContextError(list.error)}</p>\n ) : editing?.mode === 'new' ? (\n <PlaybookEditor\n key={`new:${editing.kind}`}\n initial={editing.kind === 'command' ? playbookTemplate('my-command', 'command') : playbookTemplate('my-playbook')}\n baseVersion={null}\n title={editing.kind === 'command' ? 'New command workflow' : 'New playbook'}\n gate={gate}\n onCancel={() => setEditing(null)}\n onSaved={(id, version) => {\n setEditing(null);\n refetchList();\n choose(id);\n setNotice({ tone: 'success', text: `Saved ${id}@v${version}.` });\n }}\n />\n ) : rows.length === 0 || !selected ? (\n <EmptyState title=\"No playbooks\" body=\"Create one with New playbook, or `ashlr playbook new <id>`.\" />\n ) : (\n <div className={styles.body}>\n <nav className={styles.list} aria-label=\"Playbooks\">\n <input\n ref={filterRef}\n className={styles.filter}\n type=\"search\"\n value={filter}\n placeholder=\"Filter playbooks\"\n aria-label=\"Filter playbooks\"\n onChange={(e) => setFilter(e.target.value)}\n />\n <ul>\n {visible.map((r) => (\n <li key={r.id}>\n <button type=\"button\" aria-current={selected.id === r.id ? 'page' : undefined} onClick={() => choose(r.id)}>\n <span className={styles.rowName}>{r.name}</span>\n <span className={styles.rowMeta}>\n {playbookKindOf(r) === 'command'\n ? <><span className={styles.kindBadge}>Command</span> · v{r.latest}</>\n : <><code>{r.macro}</code> · v{r.latest}{r.auto ? ' · auto' : ''}</>}\n {r.builtin ? ' · built-in' : ''}\n </span>\n </button>\n </li>\n ))}\n {visible.length === 0 ? (\n <li className={styles.meta}>\n {pickMode === 'workflows' && !filter.trim() ? 'No command workflows yet — create one with New command workflow.' : `No playbook matches “${filter}”.`}\n </li>\n ) : null}\n </ul>\n </nav>\n {editing?.mode === 'edit' && editing.id === selected.id ? (\n <PlaybookEditor\n key={`edit:${editing.id}:${editing.from}`}\n initial={editing.source}\n baseVersion={editing.baseVersion}\n title={editing.from === editing.baseVersion ? `Edit ${selected.name}` : `Edit ${selected.name} from v${editing.from}`}\n gate={gate}\n onCancel={() => setEditing(null)}\n onSaved={(id, version) => {\n setEditing(null);\n refetchList();\n setNotice({ tone: 'success', text: `Saved ${id}@v${version}.` });\n }}\n />\n ) : (\n <PlaybookPanel\n key={`${selected.id}:${selected.latest}`}\n summary={selected}\n onRun={(macro) => void run(macro)}\n onPasted={() => setPickMode(null)}\n onEdit={(source, from) => setEditing({ mode: 'edit', id: selected.id, baseVersion: selected.latest, source, from })}\n />\n )}\n </div>\n )}\n </div>\n </div>\n <MutationTokenDialog\n open={gate.dialog.open}\n reason={gate.dialog.reason}\n tokenLabel=\"Mutation token\"\n tokenHelp=\"the mutation token ashlr verse printed\"\n onClose={gate.dialog.onClose}\n onUnlocked={gate.dialog.onUnlocked}\n />\n </section>\n );\n}\n\n// ---------------------------------------------------------------------------\n// One playbook\n// ---------------------------------------------------------------------------\n\nfunction outcomeCell(n: number) {\n return n === 0 ? <span className={styles.zero}>0</span> : n;\n}\n\ninterface PanelProps {\n summary: PlaybookSummary;\n onRun: (macro: string) => void;\n onEdit: (source: string, from: number) => void;\n /** A command workflow was pasted into the chat's terminal. */\n onPasted: () => void;\n}\n\nfunction PlaybookPanel({ summary, onRun, onEdit, onPasted }: PanelProps) {\n const [version, setVersion] = useState<number | null>(null);\n const [using, setUsing] = useState(false);\n const { activeSessionId } = useVerseUi();\n const isCommand = playbookKindOf(summary) === 'command';\n const def = useMemo(() => playbookDetailQuery(summary.id, version), [summary.id, version]);\n const q = useQuery(def, { freshMs: 30_000 });\n const data: PlaybookDetailResponse | undefined = q.data;\n const html = useMemo(() => (data ? renderMarkdown(data.rendered) : ''), [data]);\n const shown = data?.playbook.version ?? summary.latest;\n const isLatest = shown === summary.latest;\n const macro = isLatest ? summary.macro : `${summary.macro}@v${shown}`;\n // The version on screen (an older one can be used too); the list row's until the detail arrives.\n const command = (data?.playbook.meta.kind === 'command' ? data.playbook.meta.command : undefined) ?? (isLatest ? summary.command : undefined);\n\n return (\n <article className={styles.detail} aria-label={summary.name}>\n <div className={styles.detailHead}>\n <div className={styles.detailTitle}>\n <h3>{summary.name}</h3>\n <p className={styles.meta}>\n {isCommand ? <span className={styles.kindBadge}>Command</span> : <code>{summary.macro}</code>}\n {' '}· {summary.id}@v{shown}{summary.auto ? ' · auto-matches' : ''}{summary.builtin ? ' · shipped with ashlr' : ''}\n </p>\n </div>\n <label className={styles.picker}>\n <span className={styles.visuallyHidden}>Version</span>\n <select aria-label=\"Version\" value={shown} onChange={(e) => setVersion(Number(e.target.value) === summary.latest ? null : Number(e.target.value))}>\n {[...(data?.versions ?? [{ version: summary.latest }])].reverse().map((v) => (\n <option key={v.version} value={v.version}>v{v.version}{v.version === summary.latest ? ' (latest)' : ''}</option>\n ))}\n </select>\n </label>\n {isCommand ? (\n <Button variant=\"primary\" size=\"sm\" icon={<IconPlay size={14} />} disabled={!command} aria-expanded={using} onClick={() => setUsing((u) => !u)}>\n Use…\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"sm\" icon={<IconPlay size={14} />} onClick={() => onRun(macro)}>Run…</Button>\n )}\n <Button variant=\"subtle\" size=\"sm\" disabled={!data} onClick={() => data && onEdit(data.playbook.source, shown)}>\n {isLatest ? 'Edit' : `Edit from v${shown}`}\n </Button>\n </div>\n {summary.description ? <p className={styles.description}>{summary.description}</p> : null}\n {isCommand && using && command ? (\n <CommandWorkflowForm\n key={`${summary.id}@${shown}`}\n name={summary.name}\n template={command.template}\n params={command.params}\n pasteDisabledReason={commandPasteUnavailableReason({ activeSessionId })}\n onCancel={() => setUsing(false)}\n onPaste={(text) => {\n pasteIntoChatTerminal(text);\n setUsing(false);\n onPasted();\n }}\n />\n ) : null}\n\n {data === undefined && !q.error ? (\n <div aria-busy=\"true\">\n <SkeletonLine width=\"40%\" />\n <SkeletonLine width=\"90%\" />\n </div>\n ) : q.error || !data ? (\n <p className={styles.banner} data-tone=\"danger\">{q.error ? describeContextError(q.error) : 'This playbook could not be read.'}</p>\n ) : isCommand ? (\n <>\n <h4 className={styles.subhead}>The command</h4>\n <div className={styles.markdown} aria-label=\"Rendered playbook\" dangerouslySetInnerHTML={{ __html: html }} />\n </>\n ) : (\n <>\n <table className={styles.outcomes} aria-label=\"Outcomes by version\">\n <thead>\n <tr>\n <th scope=\"col\">Version</th>\n <th scope=\"col\">Written</th>\n <th scope=\"col\">Merged</th>\n <th scope=\"col\">Refused</th>\n <th scope=\"col\">Reverted</th>\n <th scope=\"col\">Failed</th>\n <th scope=\"col\">Note</th>\n </tr>\n </thead>\n <tbody>\n {[...data.versions].reverse().map((v) => (\n <tr key={v.version} aria-current={v.version === shown ? 'true' : undefined}>\n <th scope=\"row\">v{v.version}</th>\n <td>{v.createdAt.slice(0, 10)}</td>\n <td>{outcomeCell(v.outcomes.merged)}</td>\n <td>{outcomeCell(v.outcomes.refused)}</td>\n <td>{outcomeCell(v.outcomes.reverted)}</td>\n <td>{outcomeCell(v.outcomes.failed)}</td>\n <td className={styles.note}>{v.note ?? ''}{v.author ? <span className={styles.meta}> — {v.author}</span> : null}</td>\n </tr>\n ))}\n </tbody>\n </table>\n <p className={styles.meta}>Counts come from retros of finished runs; a run still in flight counts nowhere yet.</p>\n <h4 className={styles.subhead}>As an engine reads it</h4>\n <div className={styles.markdown} aria-label=\"Rendered playbook\" dangerouslySetInnerHTML={{ __html: html }} />\n </>\n )}\n </article>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Editor (create, or the next version)\n// ---------------------------------------------------------------------------\n\ninterface EditorProps {\n initial: string;\n /** null = create. */\n baseVersion: number | null;\n title: string;\n gate: TokenGate;\n onCancel: () => void;\n onSaved: (id: string, version: number) => void;\n}\n\nfunction PlaybookEditor({ initial, baseVersion, title, gate, onCancel, onSaved }: EditorProps) {\n const [source, setSource] = useState(initial);\n const [note, setNote] = useState('');\n const [busy, setBusy] = useState(false);\n const [serverErrors, setServerErrors] = useState<PlaybookValidationIssue[] | null>(null);\n const [failure, setFailure] = useState<string | null>(null);\n const parsed = useMemo(() => parsePlaybook(source), [source]);\n const errors = serverErrors ?? (parsed.ok ? [] : parsed.errors);\n const commandKind = parsed.ok ? parsed.meta.kind === 'command' : /^kind:\\s*command\\s*$/m.test(source);\n const warnings = parsed.ok ? parsed.warnings : [];\n\n const save = async () => {\n setBusy(true);\n setFailure(null);\n setServerErrors(null);\n try {\n const res = await gate.run(baseVersion === null ? 'Create this playbook' : 'Save a new version of this playbook', () =>\n savePlaybookSource({ source, ...(baseVersion !== null ? { baseVersion } : {}), ...(note.trim() ? { note: note.trim() } : {}) }),\n );\n if (res === null) return;\n if (res.ok) onSaved(res.playbook.meta.id, res.playbook.version);\n else setServerErrors(res.errors);\n } catch (err) {\n setFailure(describeContextError(err));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <form className={styles.editor} aria-label={title} onSubmit={(e) => { e.preventDefault(); void save(); }}>\n <div className={styles.detailHead}>\n <div className={styles.detailTitle}>\n <h3>{title}</h3>\n <p className={styles.meta}>\n {baseVersion === null ? 'Saved as v1.' : `Saved as v${baseVersion + 1}; v${baseVersion} and earlier stay exactly as they were.`}\n {commandKind ? (\n <>\n {' '}One section, <code>## Command</code>, holding one code block; <code>{'{{name}}'}</code> and <code>{'{{name:default}}'}</code> become\n the form’s fields, each filled in as one quoted shell word.\n </>\n ) : ' Sections: Outcome, Procedure (required), Specifications, Advice, Forbidden actions, Required from user.'}\n </p>\n </div>\n </div>\n <textarea\n className={styles.source}\n value={source}\n spellCheck={false}\n aria-label=\"Playbook markdown\"\n aria-invalid={errors.length > 0}\n onChange={(e) => { setSource(e.target.value); setServerErrors(null); }}\n />\n {errors.length > 0 ? (\n <ul className={styles.errors} aria-label=\"Problems\">\n {errors.map((e, i) => <li key={`${e.field}:${i}`}>{e.message}</li>)}\n </ul>\n ) : warnings.length > 0 ? (\n <ul className={styles.warnings} aria-label=\"Warnings\">\n {warnings.map((w, i) => <li key={`${w.field}:${i}`}>{w.message}</li>)}\n </ul>\n ) : null}\n <label className={styles.noteField}>\n <span>What changed (optional)</span>\n <input type=\"text\" value={note} maxLength={200} onChange={(e) => setNote(e.target.value)} />\n </label>\n {failure ? <p className={styles.banner} data-tone=\"danger\" role=\"alert\">{failure}</p> : null}\n <div className={styles.actions}>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onCancel}>Cancel</Button>\n <Button type=\"submit\" variant=\"primary\" size=\"sm\" busy={busy} disabled={!parsed.ok}>\n {baseVersion === null ? 'Create' : `Save v${baseVersion + 1}`}\n </Button>\n </div>\n </form>\n );\n}\n","/**\n * routes/verse/sections/PlaybooksSection.tsx — the Playbooks tray section\n * (3.15). Takes no props, per the shell contract; its own lazy chunk (the\n * section glob in shell/section-modules.ts). Reached from the gear tray and\n * from ⌘K (\"Open Playbooks\", \"Run playbook…\").\n */\nimport { PlaybooksView } from '../playbooks/PlaybooksView.js';\n\nexport function PlaybooksSection() {\n return <PlaybooksView />;\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,i,t as a,w as o}from"./global-BWc2NPzv.js";import{i as s}from"./SkipToContent-C7UObcP2.js";import{mt as ee}from"./VerseConsoleApp-kFOEmnGC.js";import{M as c,N as te,Q as ne,Z as l,dt as u}from"./VerseShared-_pMXKs8m.js";import{t as re}from"./Segmented-CtwuFlbY.js";import{n as d,t as f}from"./Button-DP2ImS5n.js";import{T as p,l as ie,v as ae}from"./icons-U34oiN9M.js";import{t as m}from"./EmptyState-BEXDoNZd.js";import{t as h}from"./MessageMarkdown-Dkw4V24c.js";import{t as oe}from"./pane-chrome.module-D7o-fVd0.js";import{a as se,c as ce,d as le,i as ue,l as de,n as fe,o as pe,s as g,t as me}from"./terminal-icons-COMoAiDd.js";var _=n(t(),1),v=`/api/verse/preview/ticket`;function y(e){return new URLSearchParams(e).toString()}var b={targets:(e,t)=>i(`${ne}?${y({sessionId:e})}`,t),ticket:(e,t)=>i(`${v}?${y({sessionId:e,path:t})}`),text:async(e,t)=>{let n=`${l}?${y({sessionId:e,path:t})}`,i=await fetch(n,{credentials:`same-origin`,headers:{"x-ashlr-read-client":o()}});if(i.status===401)throw r(),new a(`Read session expired.`,401,n);if(!i.ok)throw new a(`GET ${n} failed (HTTP ${i.status}).`,i.status,n);return i.text()}};function x(e){return e.port||(e.protocol===`https:`?`443`:`80`)}function S(e,t){let n=e.trim();if(n.length===0||n.length>2048||/\s/.test(n))return{kind:`invalid`};let r=n;if(/^:?\d{2,5}$/.test(n))r=`http://localhost:${n.replace(`:`,``)}/`;else if(/^(?:localhost|127\.0\.0\.1)(?::\d{1,5})?(?:[/?#].*)?$/i.test(n))r=`http://${n}`;else if(!/^[a-z][a-z0-9+.-]*:/i.test(n)){if(!/^[\w-]+(?:\.[\w-]+)+(?::\d{1,5})?(?:[/?#].*)?$/.test(n))return{kind:`invalid`};r=`https://${n}`}let i;try{i=new URL(r)}catch{return{kind:`invalid`}}if(i.protocol!==`http:`&&i.protocol!==`https:`)return{kind:`invalid`};if(u(i.href)){let e=null;try{e=new URL(t)}catch{e=null}return e&&(e.hostname===`localhost`||e.hostname===`127.0.0.1`)&&x(e)===x(i)?{kind:`self`,url:i.href}:{kind:`loopback`,url:i.href}}return i.username||i.password?{kind:`invalid`}:{kind:`external`,url:i.href}}function C(e){try{let t=new URL(e),n=t.pathname===`/`?``:t.pathname;return`${t.host}${n}${t.search}`}catch{return e}}function w(e){return!Number.isFinite(e)||e<0?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(+(e<10240))} KB`:`${(e/1048576).toFixed(1)} MB`}var T={pane:`_pane_k6hui_8`,strip:`_strip_k6hui_19`,tabs:`_tabs_k6hui_28`,tab:`_tab_k6hui_28`,tabButton:`_tabButton_k6hui_60`,tabClose:`_tabClose_k6hui_78`,noticeClose:`_noticeClose_k6hui_79`,external:`_external_k6hui_80`,tabTitle:`_tabTitle_k6hui_85`,newTab:`_newTab_k6hui_118`,toolbar:`_toolbar_k6hui_126`,nav:`_nav_k6hui_128`,addressForm:`_addressForm_k6hui_134`,address:`_address_k6hui_134`,addressNote:`_addressNote_k6hui_177`,notice:`_notice_k6hui_79`,waiting:`_waiting_k6hui_179`,waitingText:`_waitingText_k6hui_201`,pulse:`_pulse_k6hui_208`,body:`_body_k6hui_234`,loading:`_loading_k6hui_243`,stage:`_stage_k6hui_250`,frame:`_frame_k6hui_262`,frameHint:`_frameHint_k6hui_278`,imageStage:`_imageStage_k6hui_291`,image:`_image_k6hui_291`,markdown:`_markdown_k6hui_308`,launcher:`_launcher_k6hui_316`,section:`_section_k6hui_322`,sectionTitle:`_sectionTitle_k6hui_328`,muted:`_muted_k6hui_339`,rows:`_rows_k6hui_347`,row:`_row_k6hui_347`,dot:`_dot_k6hui_364`,fileIcon:`_fileIcon_k6hui_376`,rowMain:`_rowMain_k6hui_378`,rowTitle:`_rowTitle_k6hui_385`,rowMeta:`_rowMeta_k6hui_395`,rowCommand:`_rowCommand_k6hui_405`},E=e(),he={api:b,origin:()=>window.location.origin,now:()=>Date.now()},ge=12e4,_e=2e3,ve=5e3,D=`ashlr.verse.preview.v1:`,O={"launch-json":`launch.json`,"package-json":`package.json`,listening:`running`},ye={html:`HTML`,md:`Markdown`,svg:`SVG`,image:`Image`,pdf:`PDF`},k=0,A=0,j=()=>`p${++A}`;function M(){k=0,A=0}function N(e){let t=e.toLowerCase().slice(e.lastIndexOf(`.`));return t===`.html`||t===`.htm`?`html`:t===`.md`||t===`.markdown`?`md`:t===`.svg`?`svg`:t===`.pdf`?`pdf`:[`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.avif`,`.bmp`,`.ico`].includes(t)?`image`:null}function P(e){return e.slice(e.lastIndexOf(`/`)+1)||e}function F(e){return e.kind===`launcher`?`New tab`:e.kind===`url`?C(e.history[e.index]??``):P(e.path)}function be(e){return e?.kind===`url`?e.history[e.index]??null:null}function xe(e,t){try{let n=localStorage.getItem(`${D}${e}`);if(!n)return null;let r=JSON.parse(n),i=[],a=null;return Array.isArray(r.tabs)&&r.tabs.slice(0,12).forEach((e,n)=>{if(!e||typeof e!=`object`)return;let o=e,s=j();if(o.url&&typeof o.url==`string`&&S(o.url,t).kind===`loopback`)i.push({id:s,kind:`url`,history:[o.url],index:0,reloadKey:0});else if(typeof o.path==`string`){let e=N(o.path);if(e)i.push({id:s,kind:`artifact`,path:o.path,artifactKind:e,reloadKey:0});else return}else return;r.active===n&&(a=s)}),{tabs:i,activeId:a??i.at(-1)?.id??null,device:r.device===`phone`?`phone`:`desktop`}}catch{return null}}function Se(e,t,n,r){try{let i=t.filter(e=>e.kind!==`launcher`);localStorage.setItem(`${D}${e}`,JSON.stringify({tabs:i.map(e=>e.kind===`url`?{url:e.history[e.index]}:e.kind===`artifact`?{path:e.path}:{}),active:i.findIndex(e=>e.id===n),device:r}))}catch{}}function I({sessionId:e,roots:t,request:n,onOpenTerminal:r,visible:i,deps:o}){let s=(0,_.useMemo)(()=>({...he,...o}),[o]),ne=te(),l=i&&ne,u=ee().compact,[m]=(0,_.useState)(()=>xe(e,s.origin())),[h,g]=(0,_.useState)(()=>m?.tabs??[]),[v,y]=(0,_.useState)(()=>m?.activeId??null),[b,x]=(0,_.useState)(()=>m?.device??`desktop`),[w,ge]=(0,_.useState)(e),[D,O]=(0,_.useState)(null),[ye,A]=(0,_.useState)(null),[M,P]=(0,_.useState)(``),[I,L]=(0,_.useState)(null),[R,z]=(0,_.useState)(null),[Ee,B]=(0,_.useState)(null),[V,H]=(0,_.useState)(()=>new Map),[De,Oe]=(0,_.useState)(()=>s.now()),U=(0,_.useRef)(!0),W=(0,_.useRef)(new Map),ke=(0,_.useRef)(null);if(w!==e){let t=xe(e,s.origin());ge(e),g(t?.tabs??[]),y(t?.activeId??null),O(null),z(null),B(null)}let G=h.find(e=>e.id===v)??null,K=be(G),q=!G||G.kind===`launcher`;(0,_.useEffect)(()=>(U.current=!0,()=>{U.current=!1}),[]),(0,_.useEffect)(()=>{w===e&&Se(e,h,v,b)},[w,e,h,v,b]),(0,_.useEffect)(()=>{P(G?.kind===`url`?G.history[G.index]??``:G?.kind===`artifact`?G.path:``),L(null)},[G]);let J=(0,_.useCallback)(async()=>{try{let t=await s.api.targets(e);return U.current?(O(t),A(null),t):null}catch(e){return U.current&&A(e instanceof a&&e.detail?e.detail:`Dev servers and files could not be listed.`),null}},[s.api,e]),Ae=(0,_.useRef)(null);(0,_.useEffect)(()=>{l&&Ae.current!==e&&(Ae.current=e,J())},[l,e,J]),c(()=>{J()},R?_e:ve,{enabled:i&&(R!==null||q)});let Y=(0,_.useCallback)((e,t={})=>{B(null);let n=h.find(e=>e.id===v);if(!t.newTab&&n?.kind===`launcher`){g(h.map(t=>t.id===n.id?{id:t.id,kind:`url`,history:[e],index:0,reloadKey:0}:t));return}let r=h.find(t=>t.kind===`url`&&t.history[t.index]===e);if(r&&!t.newTab){y(r.id);return}let i=j();g([...h,{id:i,kind:`url`,history:[e],index:0,reloadKey:0}]),y(i)},[h,v]),je=(0,_.useCallback)(e=>{if(!G||G.kind!==`url`){Y(e);return}g(t=>t.map(t=>{if(t.id!==G.id||t.kind!==`url`)return t;let n=[...t.history.slice(0,t.index+1),e].slice(-50);return{...t,history:n,index:n.length-1}}))},[G,Y]),X=(0,_.useCallback)((e,t)=>{B(null);let n=h.find(t=>t.kind===`artifact`&&t.path===e);if(n){y(n.id);return}let r=h.find(e=>e.id===v);if(r?.kind===`launcher`){g(h.map(n=>n.id===r.id?{id:n.id,kind:`artifact`,path:e,artifactKind:t,reloadKey:0}:n));return}let i=j();g([...h,{id:i,kind:`artifact`,path:e,artifactKind:t,reloadKey:0}]),y(i)},[h,v]),Me=()=>{let e=h.find(e=>e.kind===`launcher`);if(e)y(e.id);else{let e=j();g(t=>[...t,{id:e,kind:`launcher`}]),y(e)}J()},Ne=e=>{let t=h.findIndex(t=>t.id===e.id),n=h.filter(t=>t.id!==e.id);g(n),H(t=>{let n=new Map(t);for(let r of t.keys())r.startsWith(`${e.id}:`)&&n.delete(r);return n}),v===e.id&&y((n[t]??n[t-1]??null)?.id??null)},Pe=(e,t)=>{let n=-1;if(e.key===`ArrowRight`?n=(t+1)%h.length:e.key===`ArrowLeft`?n=(t-1+h.length)%h.length:e.key===`Home`?n=0:e.key===`End`&&(n=h.length-1),n<0)return;e.preventDefault();let r=h[n];y(r.id),W.current.get(r.id)?.focus()},Fe=(0,_.useCallback)(e=>{B(null),r({root:e.root,devServerId:e.id}),z({server:e,since:s.now()})},[s,r]),Z=(0,_.useCallback)(e=>{e.running?Y(e.url):Fe(e)},[Y,Fe]);(0,_.useEffect)(()=>{if(R&&D){if(D.devServers.find(e=>e.running&&(e.id===R.server.id||e.port===R.server.port))){z(null),Y(R.server.url);return}s.now()-R.since>12e4&&(z(null),B(`Nothing answered on port ${R.server.port} within 2 minutes. Check the terminal for errors.`))}},[D,R,Y,s,De]),(0,_.useEffect)(()=>{if(!R)return;let e=setInterval(()=>Oe(s.now()),1e3);return()=>clearInterval(e)},[R,s]);let Q=(0,_.useCallback)(async e=>{if(e.url){let t=S(e.url,s.origin());t.kind===`loopback`?Y(t.url):L(t);return}if(e.artifactPath){let t=D?.artifacts.find(t=>t.path===e.artifactPath)?.kind??N(e.artifactPath);t?X(e.artifactPath,t):B(`That file cannot be previewed.`);return}if(e.devServerId){let t=(await J()??D)?.devServers.find(t=>t.id===e.devServerId);t?Z(t):B(`That dev server is no longer listed for this chat.`)}},[s,X,Z,Y,J,D]);(0,_.useEffect)(()=>{!n||n.nonce<=k||(k=n.nonce,Q(n))},[n,Q]);let $=G?.kind===`artifact`?`${G.id}:${G.reloadKey}`:null;(0,_.useEffect)(()=>{if(!l||!G||G.kind!==`artifact`||!$||V.has($))return;let t=G,n=$;H(e=>new Map(e).set(n,{status:`loading`})),(t.artifactKind===`md`?s.api.text(e,t.path).then(e=>({status:`text`,text:e})):s.api.ticket(e,t.path).then(e=>({status:`frame`,src:e.url}))).then(e=>{U.current&&H(t=>new Map(t).set(n,e))},e=>{let t=e instanceof a&&e.status===404?`This file is no longer in the chat's folder.`:e instanceof a&&e.status===413?`This file is larger than 5 MB, too large to preview.`:`This file could not be loaded.`;U.current&&H(e=>new Map(e).set(n,{status:`error`,message:t}))})},[l,G,$,V,s.api,e]);let Ie=e=>{G&&G.kind===`url`&&g(t=>t.map(t=>t.id===G.id&&t.kind===`url`?{...t,index:Math.min(t.history.length-1,Math.max(0,t.index+e))}:t))},Le=()=>{if(G){if(G.kind===`launcher`){J();return}g(e=>e.map(e=>e.id===G.id&&e.kind!==`launcher`?{...e,reloadKey:e.reloadKey+1}:e))}},Re=e=>{e.preventDefault();let t=S(M,s.origin());if(t.kind===`loopback`){L(null),G?.kind===`url`?je(t.url):Y(t.url);return}L(t)},ze=e=>{e.key===`Escape`&&(e.preventDefault(),P(K??(G?.kind===`artifact`?G.path:``)),L(null),e.currentTarget.blur())},Be=G?.kind===`url`&&G.index>0,Ve=G?.kind===`url`&&G.index<G.history.length-1;return(0,E.jsxs)(`div`,{className:T.pane,"data-compact":u||void 0,children:[(0,E.jsxs)(`div`,{className:T.strip,children:[(0,E.jsx)(`div`,{className:T.tabs,role:`tablist`,"aria-label":`Previews`,children:h.map((e,t)=>{let n=e.id===v,r=F(e);return(0,E.jsxs)(`div`,{className:T.tab,"data-selected":n||void 0,role:`presentation`,children:[(0,E.jsxs)(`button`,{ref:t=>{t?W.current.set(e.id,t):W.current.delete(e.id)},type:`button`,role:`tab`,id:`preview-tab-${e.id}`,"aria-selected":n,"aria-controls":`preview-panel`,tabIndex:n?0:-1,className:T.tabButton,title:e.kind===`url`?e.history[e.index]:e.kind===`artifact`?e.path:`Choose what to preview`,onClick:()=>y(e.id),onKeyDown:e=>Pe(e,t),children:[e.kind===`artifact`?(0,E.jsx)(se,{size:12}):e.kind===`url`?(0,E.jsx)(le,{size:12}):(0,E.jsx)(ce,{size:12}),(0,E.jsx)(`span`,{className:T.tabTitle,children:r})]}),(0,E.jsx)(`button`,{type:`button`,className:T.tabClose,"aria-label":`Close preview ${r}`,title:`Close`,onClick:()=>Ne(e),children:(0,E.jsx)(p,{size:12})})]},e.id)})}),(0,E.jsx)(d,{variant:`ghost`,size:`sm`,icon:(0,E.jsx)(ae,{}),"aria-label":`New preview tab`,title:`New preview tab`,className:T.newTab,onClick:Me})]}),(0,E.jsxs)(`div`,{className:`${oe.header} ${T.toolbar}`,children:[(0,E.jsxs)(`div`,{className:T.nav,children:[(0,E.jsx)(d,{variant:`ghost`,size:`sm`,icon:(0,E.jsx)(me,{}),"aria-label":`Back`,title:`Back`,disabled:!Be,onClick:()=>Ie(-1)}),(0,E.jsx)(d,{variant:`ghost`,size:`sm`,icon:(0,E.jsx)(fe,{}),"aria-label":`Forward`,title:`Forward`,disabled:!Ve,onClick:()=>Ie(1)}),(0,E.jsx)(d,{variant:`ghost`,size:`sm`,icon:(0,E.jsx)(de,{}),"aria-label":q?`Refresh the list`:`Reload`,title:q?`Refresh the list`:`Reload`,disabled:!G&&q&&D===null,onClick:Le})]}),(0,E.jsx)(`form`,{className:T.addressForm,onSubmit:Re,role:`search`,"aria-label":`Preview address`,children:(0,E.jsx)(`input`,{ref:ke,className:T.address,value:M,onChange:e=>P(e.target.value),onKeyDown:ze,onFocus:e=>e.currentTarget.select(),placeholder:`localhost:5173`,"aria-label":`Address`,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,inputMode:`url`,readOnly:G?.kind===`artifact`})}),(0,E.jsxs)(`div`,{className:oe.actions,children:[u?null:(0,E.jsx)(re,{"aria-label":`Frame width`,size:`sm`,value:b,onChange:x,options:[{value:`desktop`,label:(0,E.jsx)(ue,{size:14}),ariaLabel:`Desktop width`},{value:`phone`,label:(0,E.jsx)(pe,{size:14}),ariaLabel:`375 px width`}]}),K?(0,E.jsx)(`a`,{className:T.external,href:K,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open in browser`,title:`Open in browser`,children:(0,E.jsx)(ie,{})}):(0,E.jsx)(`span`,{className:T.external,"data-placeholder":`true`,"aria-hidden":`true`})]})]}),I?(0,E.jsx)(Ce,{note:I,onDismiss:()=>L(null)}):null,R?(0,E.jsxs)(`div`,{className:T.waiting,role:`status`,children:[(0,E.jsx)(`span`,{className:T.pulse,"aria-hidden":`true`}),(0,E.jsxs)(`span`,{className:T.waitingText,children:[`Starting `,(0,E.jsx)(`code`,{children:R.server.command??R.server.label}),` — waiting for `,C(R.server.url),` · `,Math.max(0,Math.round((De-R.since)/1e3)),`s`]}),(0,E.jsx)(f,{size:`sm`,variant:`ghost`,onClick:()=>z(null),children:`Stop waiting`})]}):null,Ee?(0,E.jsxs)(`div`,{className:T.notice,role:`alert`,children:[(0,E.jsx)(`span`,{children:Ee}),(0,E.jsx)(`button`,{type:`button`,className:T.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:()=>B(null),children:(0,E.jsx)(p,{size:12})})]}):null,(0,E.jsx)(`div`,{className:T.body,id:`preview-panel`,role:`tabpanel`,"aria-labelledby":G?`preview-tab-${G.id}`:void 0,children:q?(0,E.jsx)(Te,{targets:D,error:ye,roots:t,onOpenServer:Z,onOpenArtifact:e=>X(e.path,e.kind),onRetry:()=>void J(),onOpenTerminal:()=>r(t[0]?{root:t[0]}:{}),waitingId:R?.server.id??null}):G?.kind===`url`?(0,E.jsxs)(`div`,{className:T.stage,"data-device":b,children:[(0,E.jsx)(`iframe`,{className:T.frame,src:G.history[G.index],title:`Preview of ${F(G)}`,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-downloads`,referrerPolicy:`no-referrer`},`${G.id}:${G.index}:${G.reloadKey}`),(0,E.jsxs)(`p`,{className:T.frameHint,children:[`Blank page? Some servers refuse to be framed.`,` `,(0,E.jsx)(`a`,{href:G.history[G.index],target:`_blank`,rel:`noopener noreferrer`,children:`Open in browser ↗`})]})]}):G?.kind===`artifact`?(0,E.jsx)(we,{tab:G,content:$?V.get($)??{status:`loading`}:{status:`loading`},device:b,onRetry:Le}):null})]})}function Ce({note:e,onDismiss:t}){return(0,E.jsxs)(`div`,{className:T.addressNote,role:`status`,children:[e.kind===`external`?(0,E.jsxs)(`span`,{children:[`Only local dev servers open here.`,` `,(0,E.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:`Open in browser ↗`})]}):e.kind===`self`?(0,E.jsx)(`span`,{children:`That address is Verse itself.`}):(0,E.jsxs)(`span`,{children:[`Enter a local address, like `,(0,E.jsx)(`code`,{children:`localhost:5173`}),`.`]}),(0,E.jsx)(`button`,{type:`button`,className:T.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:t,children:(0,E.jsx)(p,{size:12})})]})}function we({tab:e,content:t,device:n,onRetry:r}){return t.status===`loading`?(0,E.jsxs)(`div`,{className:T.loading,"aria-busy":`true`,children:[(0,E.jsx)(s,{width:`50%`}),(0,E.jsx)(s,{width:`80%`})]}):t.status===`error`?(0,E.jsx)(m,{compact:!0,tone:`error`,title:`Preview unavailable`,body:t.message,action:(0,E.jsx)(f,{size:`sm`,variant:`subtle`,onClick:r,children:`Try again`})}):t.status===`text`?(0,E.jsx)(`article`,{className:T.markdown,"aria-label":e.path,children:(0,E.jsx)(h,{text:t.text})}):e.artifactKind===`image`?(0,E.jsx)(`div`,{className:T.imageStage,children:(0,E.jsx)(`img`,{className:T.image,src:t.src,alt:P(e.path)})}):(0,E.jsx)(`div`,{className:T.stage,"data-device":e.artifactKind===`pdf`?`desktop`:n,children:(0,E.jsx)(`iframe`,{className:T.frame,src:t.src,title:`Preview of ${e.path}`,...e.artifactKind===`pdf`?{}:{sandbox:`allow-scripts`},referrerPolicy:`no-referrer`},t.src)})}function Te({targets:e,error:t,roots:n,onOpenServer:r,onOpenArtifact:i,onRetry:a,onOpenTerminal:o,waitingId:ee}){if(!e)return t?(0,E.jsx)(m,{compact:!0,tone:`error`,title:`Could not list what to preview`,body:t,action:(0,E.jsx)(f,{size:`sm`,variant:`subtle`,onClick:a,children:`Try again`})}):(0,E.jsxs)(`div`,{className:T.loading,"aria-busy":`true`,children:[(0,E.jsx)(s,{width:`35%`}),(0,E.jsx)(s,{width:`70%`}),(0,E.jsx)(s,{width:`60%`})]});let c=n.length>1;return e.devServers.length===0&&e.artifacts.length===0?(0,E.jsx)(m,{compact:!0,icon:(0,E.jsx)(ce,{size:20}),title:`Nothing to preview yet`,body:`Start a dev server in the terminal, or ask for an HTML report. Local servers and the files this chat writes show up here.`,action:(0,E.jsx)(f,{size:`sm`,variant:`subtle`,onClick:o,children:`Open a terminal`})}):(0,E.jsxs)(`div`,{className:T.launcher,children:[(0,E.jsxs)(`section`,{className:T.section,"aria-labelledby":`preview-servers-title`,children:[(0,E.jsx)(`h3`,{className:T.sectionTitle,id:`preview-servers-title`,children:`Dev servers`}),e.devServers.length===0?(0,E.jsxs)(`p`,{className:T.muted,children:[`No dev server found in this chat's folders. Add one to `,(0,E.jsx)(`code`,{children:`.claude/launch.json`}),`, or start it in the terminal.`]}):(0,E.jsx)(`ul`,{className:T.rows,children:e.devServers.map(e=>(0,E.jsxs)(`li`,{className:T.row,children:[(0,E.jsx)(`span`,{className:T.dot,"data-running":e.running||void 0,"aria-hidden":`true`}),(0,E.jsxs)(`span`,{className:T.rowMain,children:[(0,E.jsx)(`span`,{className:T.rowTitle,title:e.label,children:e.label}),(0,E.jsxs)(`span`,{className:T.rowMeta,title:`${C(e.url)} · ${e.running?`running`:`stopped`} · ${O[e.source]}${c?` · ${e.root}`:``}`,children:[C(e.url),` · `,e.running?`running`:`stopped`,` · `,O[e.source],c?` · ${P(e.root)}`:``]}),!e.running&&e.command&&e.command!==e.label?(0,E.jsx)(`code`,{className:T.rowCommand,title:e.command,children:e.command}):null]}),e.running?(0,E.jsx)(f,{size:`sm`,variant:`subtle`,onClick:()=>r(e),"aria-label":`Open ${e.label}`,children:`Open`}):(0,E.jsx)(f,{size:`sm`,variant:`subtle`,icon:(0,E.jsx)(g,{size:12}),busy:ee===e.id,onClick:()=>r(e),"aria-label":`Start ${e.label}`,title:`Runs ${e.command??e.label} in a terminal tab`,children:`Start`})]},e.id))})]}),(0,E.jsxs)(`section`,{className:T.section,"aria-labelledby":`preview-files-title`,children:[(0,E.jsx)(`h3`,{className:T.sectionTitle,id:`preview-files-title`,children:`This chat's files`}),e.artifacts.length===0?(0,E.jsx)(`p`,{className:T.muted,children:`Ask the chat for a report or a page: HTML, Markdown, SVG, images and PDFs it writes appear here.`}):(0,E.jsx)(`ul`,{className:T.rows,children:e.artifacts.map(e=>{let t=e.bytes>5242880;return(0,E.jsxs)(`li`,{className:T.row,children:[(0,E.jsx)(se,{size:14,className:T.fileIcon}),(0,E.jsxs)(`span`,{className:T.rowMain,children:[(0,E.jsx)(`span`,{className:T.rowTitle,title:e.path,children:e.path}),(0,E.jsxs)(`span`,{className:T.rowMeta,children:[ye[e.kind],` · `,w(e.bytes)]})]}),(0,E.jsx)(f,{size:`sm`,variant:`subtle`,disabled:t,title:t?`Larger than 5 MB`:void 0,onClick:()=>i(e),"aria-label":`Open ${e.path}`,children:`Open`})]},e.path)})})]})]})}export{ge as PREVIEW_START_TIMEOUT_MS,I as PreviewPane,M as resetPreviewPaneForTest};
2
- //# sourceMappingURL=PreviewPane-DubyNi8H.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PreviewPane-DubyNi8H.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/dock/preview/preview-client.ts","../../../../../../src/web-ui/routes/verse/dock/preview/PreviewPane.module.css","../../../../../../src/web-ui/routes/verse/dock/preview/PreviewPane.tsx"],"sourcesContent":["/**\n * dock/preview/preview-client.ts — the Preview pane's reads (unit C4) and the\n * address-bar rule.\n *\n * Every call is a header-authenticated GET. An artifact shown in an <iframe>\n * or <img> goes through a short-lived FRAME TICKET (preview.ts \"WHY\n * TICKETS\"): the element's own request cannot carry the read-client header.\n */\nimport type { VersePreviewArtifactKind, VersePreviewTargetsResponse } from '../../../../data/api-types.js';\nimport { getReadClientProof, reportSessionExpired } from '../../../../data/auth-store.js';\nimport { ApiError, apiGet } from '../../../../data/client.js';\nimport {\n VERSE_PREVIEW_RAW_PATH,\n VERSE_PREVIEW_TARGETS_PATH,\n isLoopbackPreviewUrl,\n} from '../../../../../core/verse/workbench-types.js';\n\nexport const VERSE_PREVIEW_TICKET_PATH = '/api/verse/preview/ticket';\n\nexport interface PreviewTicket {\n url: string;\n expiresAt: string;\n kind: VersePreviewArtifactKind;\n}\n\nexport interface PreviewApi {\n targets(sessionId: string, signal?: AbortSignal): Promise<VersePreviewTargetsResponse>;\n ticket(sessionId: string, path: string): Promise<PreviewTicket>;\n /** A markdown artifact's text (rendered by the pane, sanitised). */\n text(sessionId: string, path: string): Promise<string>;\n}\n\nfunction query(params: Record<string, string>): string {\n return new URLSearchParams(params).toString();\n}\n\nexport const previewApi: PreviewApi = {\n targets: (sessionId, signal) => apiGet<VersePreviewTargetsResponse>(`${VERSE_PREVIEW_TARGETS_PATH}?${query({ sessionId })}`, signal),\n ticket: (sessionId, path) => apiGet<PreviewTicket>(`${VERSE_PREVIEW_TICKET_PATH}?${query({ sessionId, path })}`),\n text: async (sessionId, path) => {\n const url = `${VERSE_PREVIEW_RAW_PATH}?${query({ sessionId, path })}`;\n const res = await fetch(url, { credentials: 'same-origin', headers: { 'x-ashlr-read-client': getReadClientProof() } });\n if (res.status === 401) {\n reportSessionExpired();\n throw new ApiError('Read session expired.', 401, url);\n }\n if (!res.ok) throw new ApiError(`GET ${url} failed (HTTP ${res.status}).`, res.status, url);\n return res.text();\n },\n};\n\n// ---------------------------------------------------------------------------\n// The address bar\n// ---------------------------------------------------------------------------\n\nexport type PreviewAddress =\n | { kind: 'loopback'; url: string }\n /** Not loopback http: offered as \"Open in browser ↗\", never framed. */\n | { kind: 'external'; url: string }\n /** Verse's own server: it refuses to be framed, and framing it would only confuse. */\n | { kind: 'self'; url: string }\n | { kind: 'invalid' };\n\nfunction portOf(url: URL): string {\n return url.port || (url.protocol === 'https:' ? '443' : '80');\n}\n\n/**\n * What the operator typed → where it goes. Shorthands: `5173` and `:5173`\n * are localhost ports; `localhost:3000/x` gets `http://`. A bare domain is an\n * EXTERNAL https page. Anything that is not http(s) (javascript:, file:,\n * data:) is invalid. `verseOrigin` is `window.location.origin`.\n */\nexport function parsePreviewAddress(input: string, verseOrigin: string): PreviewAddress {\n const raw = input.trim();\n if (raw.length === 0 || raw.length > 2048 || /\\s/.test(raw)) return { kind: 'invalid' };\n let candidate = raw;\n if (/^:?\\d{2,5}$/.test(raw)) candidate = `http://localhost:${raw.replace(':', '')}/`;\n else if (/^(?:localhost|127\\.0\\.0\\.1)(?::\\d{1,5})?(?:[/?#].*)?$/i.test(raw)) candidate = `http://${raw}`;\n else if (!/^[a-z][a-z0-9+.-]*:/i.test(raw)) {\n if (!/^[\\w-]+(?:\\.[\\w-]+)+(?::\\d{1,5})?(?:[/?#].*)?$/.test(raw)) return { kind: 'invalid' };\n candidate = `https://${raw}`;\n }\n let url: URL;\n try {\n url = new URL(candidate);\n } catch {\n return { kind: 'invalid' };\n }\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return { kind: 'invalid' };\n if (isLoopbackPreviewUrl(url.href)) {\n let verse: URL | null = null;\n try { verse = new URL(verseOrigin); } catch { verse = null; }\n const loopbackVerse = verse && (verse.hostname === 'localhost' || verse.hostname === '127.0.0.1');\n if (loopbackVerse && portOf(verse!) === portOf(url)) return { kind: 'self', url: url.href };\n return { kind: 'loopback', url: url.href };\n }\n if (url.username || url.password) return { kind: 'invalid' };\n return { kind: 'external', url: url.href };\n}\n\n/** \"localhost:5173/admin\" — the tab and history label for a loopback URL. */\nexport function shortUrl(href: string): string {\n try {\n const url = new URL(href);\n const path = url.pathname === '/' ? '' : url.pathname;\n return `${url.host}${path}${url.search}`;\n } catch {\n return href;\n }\n}\n\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return '—';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(bytes < 10 * 1024 ? 1 : 0)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n","/*\n * dock/preview/PreviewPane.module.css — the Preview pane (unit C4).\n * Tokens only (design/style-scan-310: no raw hex, no px font sizes). The\n * chrome (tab strip, toolbar) matches the Terminal pane so the two read as\n * one dock when split.\n */\n\n.pane {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--bg-canvas);\n color: var(--text-primary);\n}\n\n/* ---- tab strip ------------------------------------------------------------ */\n\n.strip {\n display: flex;\n align-items: stretch;\n flex: none;\n min-height: var(--control-h-sm);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n\n.tabs {\n display: flex;\n align-items: stretch;\n min-width: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.tabs::-webkit-scrollbar { display: none; }\n\n.tab {\n position: relative;\n display: flex;\n align-items: center;\n flex: none;\n max-width: 220px;\n border-right: 1px solid var(--border-subtle);\n color: var(--text-secondary);\n}\n.tab[data-selected] {\n color: var(--text-primary);\n background: var(--bg-canvas);\n}\n.tab[data-selected]::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: -1px;\n height: 2px;\n background: var(--accent-500);\n}\n\n.tabButton {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n height: 100%;\n padding: 0 var(--space-1) 0 var(--space-3);\n border: 0;\n background: transparent;\n color: inherit;\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n cursor: pointer;\n}\n.tabButton > svg { flex: none; color: var(--text-tertiary); }\n.tabButton:hover { color: var(--text-primary); }\n.tabButton:focus-visible,\n.tabClose:focus-visible,\n.noticeClose:focus-visible,\n.external:focus-visible {\n outline: none;\n box-shadow: var(--shadow-focus-ring);\n}\n\n.tabTitle {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.tabClose {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n /* One step under the xs control: 20px comfortable, 16px compact. A literal\n 20px stayed comfortable when Density went compact and outgrew the\n shrunken tab row (control-density.test.ts, DESIGN-V2 §2). */\n width: calc(var(--control-h-xs) - var(--space-1));\n height: calc(var(--control-h-xs) - var(--space-1));\n margin-right: var(--space-1);\n border: 0;\n border-radius: var(--radius-xs);\n background: transparent;\n color: var(--text-tertiary);\n cursor: pointer;\n opacity: 0;\n transition: opacity var(--duration-fast) var(--ease-standard);\n}\n.tab:hover .tabClose,\n.tab[data-selected] .tabClose,\n.tabClose:focus-visible { opacity: 1; }\n.tabClose:hover { background: var(--bg-hover); color: var(--text-primary); }\n@media (hover: none) {\n .tabClose { opacity: 1; }\n}\n\n.newTab { align-self: center; margin: 0 var(--space-1); }\n\n/* ---- toolbar -------------------------------------------------------------- */\n\n/* Height, padding, border and surface come from ../pane-chrome.module.css\n (the row every dock pane shares); the toolbar only lays out its parts. */\n/* Starts with icon buttons, so a smaller inset than a text title (and scoped\n under .pane so it outranks the shared padding regardless of CSS order). */\n.pane .toolbar { padding-left: var(--space-2); }\n\n.nav {\n display: flex;\n align-items: center;\n flex: none;\n}\n\n.addressForm {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.address {\n width: 100%;\n min-width: 0;\n height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: var(--bg-input);\n color: var(--text-primary);\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n.address::placeholder { color: var(--text-tertiary); }\n.address:focus {\n outline: none;\n border-color: var(--border-focus);\n box-shadow: var(--shadow-focus-ring);\n}\n.address[readonly] { color: var(--text-secondary); }\n\n.external {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--density-row-sm);\n height: var(--density-row-sm);\n border-radius: var(--radius-sm);\n color: var(--text-secondary);\n}\n.external:hover { background: var(--bg-hover); color: var(--text-primary); }\n/* No page to open elsewhere: the slot keeps its width, so the address bar does not jump. */\n.external[data-placeholder] { visibility: hidden; }\n\n/* ---- notices -------------------------------------------------------------- */\n\n.addressNote,\n.notice,\n.waiting {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n flex: none;\n padding: var(--space-2) var(--space-3);\n border-bottom: 1px solid var(--border-subtle);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n.addressNote { background: var(--status-info-bg); color: var(--status-info-fg); }\n.notice { background: var(--status-danger-bg); color: var(--status-danger-fg); }\n.waiting { background: var(--status-running-bg); color: var(--status-running-fg); }\n.addressNote > span,\n.notice > span { flex: 1; min-width: 0; }\n.addressNote a { color: inherit; font-weight: var(--font-weight-semibold); }\n.addressNote code,\n.waiting code {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n}\n\n.waitingText {\n flex: 1;\n min-width: 0;\n font-variant-numeric: tabular-nums;\n}\n\n/* The 1.6 s running pulse (DESIGN §13.5); stops under reduced motion. */\n.pulse {\n flex: none;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: var(--status-running-solid);\n animation: pulse var(--duration-pulse) ease-in-out infinite;\n}\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.35; }\n}\n\n.noticeClose {\n display: inline-flex;\n flex: none;\n padding: var(--space-1);\n border: 0;\n border-radius: var(--radius-xs);\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n/* ---- body ----------------------------------------------------------------- */\n\n.body {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n}\n\n.loading {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--card-pad);\n}\n\n.stage {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n flex: 1 1 auto;\n min-height: 0;\n}\n.stage[data-device='phone'] {\n align-items: center;\n padding: var(--space-3) 0;\n}\n\n.frame {\n flex: 1 1 auto;\n width: 100%;\n min-height: 0;\n border: 0;\n background: var(--bg-surface);\n}\n.stage[data-device='phone'] .frame {\n flex: 1 1 auto;\n width: 375px;\n max-width: 100%;\n border: 1px solid var(--border-default);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-md);\n}\n\n.frameHint {\n flex: none;\n margin: 0;\n padding: var(--space-1) var(--space-3);\n border-top: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n color: var(--text-tertiary);\n}\n.stage[data-device='phone'] .frameHint { align-self: stretch; margin-top: var(--space-3); }\n.frameHint a { color: var(--text-link); }\n\n.imageStage {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1 1 auto;\n min-height: 0;\n padding: var(--card-pad);\n background:\n repeating-conic-gradient(var(--bg-hover) 0 25%, transparent 0 50%) 0 0 / 16px 16px,\n var(--bg-surface);\n}\n.image {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n}\n\n.markdown {\n padding: var(--card-pad) var(--space-6);\n max-width: var(--measure-read);\n background: var(--bg-canvas);\n}\n\n/* ---- launcher ------------------------------------------------------------- */\n\n.launcher {\n display: flex;\n flex-direction: column;\n padding-bottom: var(--space-6);\n}\n\n.section { padding: var(--space-4) var(--card-pad) 0; }\n.section + .section {\n margin-top: var(--space-4);\n border-top: 1px solid var(--border-subtle);\n}\n\n.sectionTitle {\n margin: 0 0 var(--space-2);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n.muted {\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-tertiary);\n}\n.muted code { font-family: var(--font-mono); font-size: var(--text-xs-size); }\n\n.rows {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.row {\n display: flex;\n align-items: center;\n gap: var(--space-3);\n min-height: var(--density-row);\n padding: var(--space-2) 0;\n}\n.row + .row { border-top: 1px solid var(--border-subtle); }\n\n.dot {\n flex: none;\n width: 8px;\n height: 8px;\n border: 1.5px solid var(--text-tertiary);\n border-radius: var(--radius-full);\n}\n.dot[data-running] {\n border-color: var(--status-success-solid);\n background: var(--status-success-solid);\n}\n\n.fileIcon { flex: none; color: var(--text-tertiary); }\n\n.rowMain {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.rowTitle {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--font-mono);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-primary);\n}\n\n.rowMeta {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n}\n\n/* What Start will type (a launch.json row's label is only its name). */\n.rowCommand {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n\n/* ---- compact (375) -------------------------------------------------------- */\n\n.pane[data-compact] .toolbar { flex-wrap: wrap; }\n.pane[data-compact] .addressForm { order: 3; flex-basis: 100%; }\n.pane[data-compact] .section { padding-left: var(--space-3); padding-right: var(--space-3); }\n.pane[data-compact] .markdown { padding: var(--space-3); }\n.pane[data-compact] .tab { max-width: 150px; }\n\n@media (prefers-reduced-motion: reduce) {\n .pulse { animation: none; }\n .tabClose { transition: none; }\n}\n","/**\n * dock/preview/PreviewPane.tsx — the chat dock's Preview (unit C4; SPEC-310C\n * §3). Rendered by C2's Dock through C0's `preview-pane` slot.\n *\n * WHAT IT SHOWS, in tabs:\n * - a LOOPBACK dev server (http://localhost / 127.0.0.1 only) in an iframe,\n * with back / forward / reload, an address bar, and a Desktop / 375 frame;\n * anything else typed in the bar is offered as \"Open in browser ↗\";\n * - a file this chat WROTE — HTML, SVG, image, PDF through a short-lived\n * frame ticket and a CSP sandbox (an opaque origin: its own script runs,\n * Verse's cookies and API stay out of reach); Markdown rendered here,\n * sanitised, like a chat message.\n * An empty pane (or the + tab) is the launcher: the dev servers found in the\n * chat's folders — launch.json, package.json scripts, and anything already\n * listening inside them — and the chat's files. Start runs the server in a\n * TERMINAL tab (through the dock, never directly), then waits for its port\n * and opens it.\n *\n * WHAT THE FRAMES MAY DO. A dev server is a different origin (another port),\n * so `allow-same-origin` gives it ITS origin, never Verse's; the sandbox\n * still withholds top navigation, so a page can never navigate Verse away.\n * Verse's own address is refused outright. Back/forward walk the addresses\n * opened HERE: a cross-origin frame's own history is not readable.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState, type FormEvent, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport type { VersePreviewArtifact, VersePreviewArtifactKind, VersePreviewDevServer, VersePreviewTargetsResponse } from '../../../../data/api-types.js';\nimport { ApiError } from '../../../../data/client.js';\nimport { Button, IconButton } from '../../../../components/primitives/Button.js';\nimport { EmptyState } from '../../../../components/primitives/EmptyState.js';\nimport { Segmented } from '../../../../components/primitives/Segmented.js';\nimport { SkeletonLine } from '../../../../components/primitives/Skeleton.js';\nimport { IconExternalLink, IconPlus, IconX } from '../../../../components/primitives/icons.js';\nimport { MessageMarkdown } from '../../MessageMarkdown.js';\nimport { usePollWhileVisible, useSectionVisible } from '../../shell/section-visibility.js';\nimport type { PreviewOpenRequest, PreviewPaneProps } from '../../shell/slots.js';\nimport { useViewport } from '../../shell/viewport.js';\nimport {\n ArrowLeftGlyph,\n ArrowRightGlyph,\n DesktopGlyph,\n FileGlyph,\n PhoneGlyph,\n PlayGlyph,\n PreviewGlyph,\n ReloadGlyph,\n ServerGlyph,\n} from '../terminal/terminal-icons.js';\nimport { formatBytes, parsePreviewAddress, previewApi, shortUrl, type PreviewAddress, type PreviewApi } from './preview-client.js';\nimport chrome from '../pane-chrome.module.css';\nimport styles from './PreviewPane.module.css';\n\n// ---------------------------------------------------------------------------\n// Model\n// ---------------------------------------------------------------------------\n\nexport type PreviewTab =\n | { id: string; kind: 'launcher' }\n | { id: string; kind: 'url'; history: string[]; index: number; reloadKey: number }\n | { id: string; kind: 'artifact'; path: string; artifactKind: VersePreviewArtifactKind; reloadKey: number };\n\ntype Device = 'desktop' | 'phone';\n\ninterface Waiting {\n server: VersePreviewDevServer;\n since: number;\n}\n\ntype ArtifactContent =\n | { status: 'loading' }\n | { status: 'frame'; src: string }\n | { status: 'text'; text: string }\n | { status: 'error'; message: string };\n\nexport interface PreviewPaneDeps {\n api: PreviewApi;\n /** `window.location.origin`: Verse's own address, which is never framed. */\n origin: () => string;\n now: () => number;\n}\n\nconst DEFAULT_DEPS: PreviewPaneDeps = {\n api: previewApi,\n origin: () => window.location.origin,\n now: () => Date.now(),\n};\n\n/** How long Start waits for the server's port before saying so. */\nexport const PREVIEW_START_TIMEOUT_MS = 120_000;\nconst WAIT_POLL_MS = 2_000;\nconst LAUNCHER_POLL_MS = 5_000;\nconst STORAGE_PREFIX = 'ashlr.verse.preview.v1:';\nconst SOURCE_LABEL: Readonly<Record<VersePreviewDevServer['source'], string>> = {\n 'launch-json': 'launch.json',\n 'package-json': 'package.json',\n listening: 'running',\n};\nconst KIND_LABEL: Readonly<Record<VersePreviewArtifactKind, string>> = {\n html: 'HTML',\n md: 'Markdown',\n svg: 'SVG',\n image: 'Image',\n pdf: 'PDF',\n};\n\nlet lastHandledNonce = 0;\nlet idCounter = 0;\nconst nextId = (): string => `p${++idCounter}`;\n\n/** Test hygiene. */\nexport function resetPreviewPaneForTest(): void {\n lastHandledNonce = 0;\n idCounter = 0;\n}\n\nfunction kindFromPath(path: string): VersePreviewArtifactKind | null {\n const ext = path.toLowerCase().slice(path.lastIndexOf('.'));\n if (ext === '.html' || ext === '.htm') return 'html';\n if (ext === '.md' || ext === '.markdown') return 'md';\n if (ext === '.svg') return 'svg';\n if (ext === '.pdf') return 'pdf';\n if (['.png', '.jpg', '.jpeg', '.gif', '.webp', '.avif', '.bmp', '.ico'].includes(ext)) return 'image';\n return null;\n}\n\nfunction baseName(path: string): string {\n return path.slice(path.lastIndexOf('/') + 1) || path;\n}\n\nfunction tabLabel(tab: PreviewTab): string {\n if (tab.kind === 'launcher') return 'New tab';\n if (tab.kind === 'url') return shortUrl(tab.history[tab.index] ?? '');\n return baseName(tab.path);\n}\n\nfunction currentUrl(tab: PreviewTab | null): string | null {\n return tab?.kind === 'url' ? tab.history[tab.index] ?? null : null;\n}\n\n/** Tabs worth restoring after a reload (per viewer, per chat; never shared). */\nfunction loadTabs(sessionId: string, origin: string): { tabs: PreviewTab[]; activeId: string | null; device: Device } | null {\n try {\n const raw = localStorage.getItem(`${STORAGE_PREFIX}${sessionId}`);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as { tabs?: unknown; active?: unknown; device?: unknown };\n const tabs: PreviewTab[] = [];\n let activeId: string | null = null;\n if (Array.isArray(parsed.tabs)) {\n parsed.tabs.slice(0, 12).forEach((t: unknown, i: number) => {\n if (!t || typeof t !== 'object') return;\n const rec = t as Record<string, unknown>;\n const id = nextId();\n if (rec['url'] && typeof rec['url'] === 'string' && parsePreviewAddress(rec['url'], origin).kind === 'loopback') {\n tabs.push({ id, kind: 'url', history: [rec['url']], index: 0, reloadKey: 0 });\n } else if (typeof rec['path'] === 'string') {\n const kind = kindFromPath(rec['path']);\n if (kind) tabs.push({ id, kind: 'artifact', path: rec['path'], artifactKind: kind, reloadKey: 0 });\n else return;\n } else {\n return;\n }\n if (parsed.active === i) activeId = id;\n });\n }\n return { tabs, activeId: activeId ?? tabs.at(-1)?.id ?? null, device: parsed.device === 'phone' ? 'phone' : 'desktop' };\n } catch {\n return null;\n }\n}\n\nfunction saveTabs(sessionId: string, tabs: readonly PreviewTab[], activeId: string | null, device: Device): void {\n try {\n const kept = tabs.filter((t) => t.kind !== 'launcher');\n localStorage.setItem(`${STORAGE_PREFIX}${sessionId}`, JSON.stringify({\n tabs: kept.map((t) => (t.kind === 'url' ? { url: t.history[t.index] } : t.kind === 'artifact' ? { path: t.path } : {})),\n active: kept.findIndex((t) => t.id === activeId),\n device,\n }));\n } catch {\n /* storage unavailable: tabs last for this page only */\n }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function PreviewPane({ sessionId, roots, request, onOpenTerminal, visible, deps: depsOverride }: PreviewPaneProps & { deps?: Partial<PreviewPaneDeps> }) {\n const deps = useMemo<PreviewPaneDeps>(() => ({ ...DEFAULT_DEPS, ...depsOverride }), [depsOverride]);\n const sectionVisible = useSectionVisible();\n const shown = visible && sectionVisible;\n const compact = useViewport().compact;\n\n const [restored] = useState(() => loadTabs(sessionId, deps.origin()));\n const [tabs, setTabs] = useState<PreviewTab[]>(() => restored?.tabs ?? []);\n const [activeId, setActiveId] = useState<string | null>(() => restored?.activeId ?? null);\n const [device, setDevice] = useState<Device>(() => restored?.device ?? 'desktop');\n // The dock keeps this pane mounted across chats: another chat brings ITS\n // tabs. Reset during render (not in an effect) so the save below never\n // writes one chat's tabs under another chat's key.\n const [owner, setOwner] = useState(sessionId);\n const [targets, setTargets] = useState<VersePreviewTargetsResponse | null>(null);\n const [targetsError, setTargetsError] = useState<string | null>(null);\n const [address, setAddress] = useState('');\n const [addressNote, setAddressNote] = useState<PreviewAddress | null>(null);\n const [waiting, setWaiting] = useState<Waiting | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [content, setContent] = useState<ReadonlyMap<string, ArtifactContent>>(() => new Map());\n const [clock, setClock] = useState(() => deps.now());\n const mounted = useRef(true);\n const tabRefs = useRef(new Map<string, HTMLButtonElement>());\n const addressRef = useRef<HTMLInputElement>(null);\n\n if (owner !== sessionId) {\n const next = loadTabs(sessionId, deps.origin());\n setOwner(sessionId);\n setTabs(next?.tabs ?? []);\n setActiveId(next?.activeId ?? null);\n setTargets(null);\n setWaiting(null);\n setNotice(null);\n }\n\n const active = tabs.find((t) => t.id === activeId) ?? null;\n const url = currentUrl(active);\n const showLauncher = !active || active.kind === 'launcher';\n\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; };\n }, []);\n\n useEffect(() => {\n if (owner === sessionId) saveTabs(sessionId, tabs, activeId, device);\n }, [owner, sessionId, tabs, activeId, device]);\n\n // The address bar mirrors the tab shown.\n useEffect(() => {\n setAddress(active?.kind === 'url' ? (active.history[active.index] ?? '') : active?.kind === 'artifact' ? active.path : '');\n setAddressNote(null);\n }, [active]);\n\n // -------------------------------------------------------------------------\n // Targets\n // -------------------------------------------------------------------------\n\n const refreshTargets = useCallback(async (): Promise<VersePreviewTargetsResponse | null> => {\n try {\n const next = await deps.api.targets(sessionId);\n if (!mounted.current) return null;\n setTargets(next);\n setTargetsError(null);\n return next;\n } catch (err) {\n if (mounted.current) setTargetsError(err instanceof ApiError && err.detail ? err.detail : 'Dev servers and files could not be listed.');\n return null;\n }\n }, [deps.api, sessionId]);\n\n const fetchedFor = useRef<string | null>(null);\n useEffect(() => {\n if (!shown || fetchedFor.current === sessionId) return;\n fetchedFor.current = sessionId;\n void refreshTargets();\n }, [shown, sessionId, refreshTargets]);\n\n usePollWhileVisible(() => { void refreshTargets(); }, waiting ? WAIT_POLL_MS : LAUNCHER_POLL_MS, {\n enabled: visible && (waiting !== null || showLauncher),\n });\n\n // -------------------------------------------------------------------------\n // Tabs\n // -------------------------------------------------------------------------\n\n const openUrl = useCallback((href: string, opts: { newTab?: boolean } = {}) => {\n setNotice(null);\n const current = tabs.find((t) => t.id === activeId);\n // Reuse the launcher tab the operator is looking at; otherwise focus an\n // existing tab on that address, or open a new one.\n if (!opts.newTab && current?.kind === 'launcher') {\n setTabs(tabs.map((t) => (t.id === current.id ? { id: t.id, kind: 'url', history: [href], index: 0, reloadKey: 0 } : t)));\n return;\n }\n const existing = tabs.find((t) => t.kind === 'url' && t.history[t.index] === href);\n if (existing && !opts.newTab) {\n setActiveId(existing.id);\n return;\n }\n const id = nextId();\n setTabs([...tabs, { id, kind: 'url', history: [href], index: 0, reloadKey: 0 }]);\n setActiveId(id);\n }, [tabs, activeId]);\n\n const navigateActive = useCallback((href: string) => {\n if (!active || active.kind !== 'url') {\n openUrl(href);\n return;\n }\n setTabs((prev) => prev.map((t) => {\n if (t.id !== active.id || t.kind !== 'url') return t;\n const history = [...t.history.slice(0, t.index + 1), href].slice(-50);\n return { ...t, history, index: history.length - 1 };\n }));\n }, [active, openUrl]);\n\n const openArtifact = useCallback((path: string, kind: VersePreviewArtifactKind) => {\n setNotice(null);\n const existing = tabs.find((t) => t.kind === 'artifact' && t.path === path);\n if (existing) {\n setActiveId(existing.id);\n return;\n }\n const current = tabs.find((t) => t.id === activeId);\n if (current?.kind === 'launcher') {\n setTabs(tabs.map((t) => (t.id === current.id ? { id: t.id, kind: 'artifact', path, artifactKind: kind, reloadKey: 0 } : t)));\n return;\n }\n const id = nextId();\n setTabs([...tabs, { id, kind: 'artifact', path, artifactKind: kind, reloadKey: 0 }]);\n setActiveId(id);\n }, [tabs, activeId]);\n\n const newLauncherTab = () => {\n const existing = tabs.find((t) => t.kind === 'launcher');\n if (existing) {\n setActiveId(existing.id);\n } else {\n const id = nextId();\n setTabs((prev) => [...prev, { id, kind: 'launcher' }]);\n setActiveId(id);\n }\n void refreshTargets();\n };\n\n const closeTab = (tab: PreviewTab) => {\n const index = tabs.findIndex((t) => t.id === tab.id);\n const rest = tabs.filter((t) => t.id !== tab.id);\n setTabs(rest);\n setContent((prev) => { const next = new Map(prev); for (const key of prev.keys()) if (key.startsWith(`${tab.id}:`)) next.delete(key); return next; });\n if (activeId === tab.id) setActiveId((rest[index] ?? rest[index - 1] ?? null)?.id ?? null);\n };\n\n const onTabKeyDown = (event: ReactKeyboardEvent<HTMLButtonElement>, index: number) => {\n let next = -1;\n if (event.key === 'ArrowRight') next = (index + 1) % tabs.length;\n else if (event.key === 'ArrowLeft') next = (index - 1 + tabs.length) % tabs.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = tabs.length - 1;\n if (next < 0) return;\n event.preventDefault();\n const tab = tabs[next]!;\n setActiveId(tab.id);\n tabRefs.current.get(tab.id)?.focus();\n };\n\n // -------------------------------------------------------------------------\n // Dev servers: open, start, wait\n // -------------------------------------------------------------------------\n\n const startServer = useCallback((server: VersePreviewDevServer) => {\n setNotice(null);\n onOpenTerminal({ root: server.root, devServerId: server.id });\n setWaiting({ server, since: deps.now() });\n }, [deps, onOpenTerminal]);\n\n const openServer = useCallback((server: VersePreviewDevServer) => {\n if (server.running) openUrl(server.url);\n else startServer(server);\n }, [openUrl, startServer]);\n\n // Waiting for a started server: open it the moment its port answers.\n useEffect(() => {\n if (!waiting || !targets) return;\n const up = targets.devServers.find((s) => s.running && (s.id === waiting.server.id || s.port === waiting.server.port));\n if (up) {\n setWaiting(null);\n openUrl(waiting.server.url);\n return;\n }\n if (deps.now() - waiting.since > PREVIEW_START_TIMEOUT_MS) {\n setWaiting(null);\n setNotice(`Nothing answered on port ${waiting.server.port} within 2 minutes. Check the terminal for errors.`);\n }\n // `clock` ticks every second while waiting, so the timeout is noticed\n // even when a poll brings nothing new.\n }, [targets, waiting, openUrl, deps, clock]);\n\n // The elapsed-time label while waiting (display only; the poll is separate).\n useEffect(() => {\n if (!waiting) return;\n const id = setInterval(() => setClock(deps.now()), 1_000);\n return () => clearInterval(id);\n }, [waiting, deps]);\n\n // -------------------------------------------------------------------------\n // Requests from the dock\n // -------------------------------------------------------------------------\n\n const handleRequest = useCallback(async (req: PreviewOpenRequest) => {\n if (req.url) {\n const parsed = parsePreviewAddress(req.url, deps.origin());\n if (parsed.kind === 'loopback') openUrl(parsed.url);\n else setAddressNote(parsed);\n return;\n }\n if (req.artifactPath) {\n const listed = targets?.artifacts.find((a) => a.path === req.artifactPath);\n const kind = listed?.kind ?? kindFromPath(req.artifactPath);\n if (kind) openArtifact(req.artifactPath, kind);\n else setNotice('That file cannot be previewed.');\n return;\n }\n if (req.devServerId) {\n const list = (await refreshTargets()) ?? targets;\n const server = list?.devServers.find((s) => s.id === req.devServerId);\n if (server) openServer(server);\n else setNotice('That dev server is no longer listed for this chat.');\n }\n }, [deps, openArtifact, openServer, openUrl, refreshTargets, targets]);\n\n useEffect(() => {\n if (!request || request.nonce <= lastHandledNonce) return;\n lastHandledNonce = request.nonce;\n void handleRequest(request);\n }, [request, handleRequest]);\n\n // -------------------------------------------------------------------------\n // Artifact content (visible tab only)\n // -------------------------------------------------------------------------\n\n const contentKey = active?.kind === 'artifact' ? `${active.id}:${active.reloadKey}` : null;\n useEffect(() => {\n if (!shown || !active || active.kind !== 'artifact' || !contentKey || content.has(contentKey)) return;\n const tab = active;\n const key = contentKey;\n setContent((prev) => new Map(prev).set(key, { status: 'loading' }));\n const load = tab.artifactKind === 'md'\n ? deps.api.text(sessionId, tab.path).then((text): ArtifactContent => ({ status: 'text', text }))\n : deps.api.ticket(sessionId, tab.path).then((ticket): ArtifactContent => ({ status: 'frame', src: ticket.url }));\n load.then(\n (value) => { if (mounted.current) setContent((prev) => new Map(prev).set(key, value)); },\n (err: unknown) => {\n const message = err instanceof ApiError && err.status === 404\n ? 'This file is no longer in the chat\\'s folder.'\n : err instanceof ApiError && err.status === 413\n ? 'This file is larger than 5 MB, too large to preview.'\n : 'This file could not be loaded.';\n if (mounted.current) setContent((prev) => new Map(prev).set(key, { status: 'error', message }));\n },\n );\n }, [shown, active, contentKey, content, deps.api, sessionId]);\n\n // -------------------------------------------------------------------------\n // Toolbar\n // -------------------------------------------------------------------------\n\n const go = (delta: -1 | 1) => {\n if (!active || active.kind !== 'url') return;\n setTabs((prev) => prev.map((t) => (t.id === active.id && t.kind === 'url'\n ? { ...t, index: Math.min(t.history.length - 1, Math.max(0, t.index + delta)) }\n : t)));\n };\n\n const reload = () => {\n if (!active) return;\n if (active.kind === 'launcher') {\n void refreshTargets();\n return;\n }\n setTabs((prev) => prev.map((t) => (t.id === active.id && t.kind !== 'launcher' ? { ...t, reloadKey: t.reloadKey + 1 } : t)));\n };\n\n const submitAddress = (event: FormEvent) => {\n event.preventDefault();\n const parsed = parsePreviewAddress(address, deps.origin());\n if (parsed.kind === 'loopback') {\n setAddressNote(null);\n if (active?.kind === 'url') navigateActive(parsed.url);\n else openUrl(parsed.url);\n return;\n }\n setAddressNote(parsed);\n };\n\n const onAddressKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape') return;\n event.preventDefault();\n setAddress(url ?? (active?.kind === 'artifact' ? active.path : ''));\n setAddressNote(null);\n event.currentTarget.blur();\n };\n\n const canBack = active?.kind === 'url' && active.index > 0;\n const canForward = active?.kind === 'url' && active.index < active.history.length - 1;\n\n // -------------------------------------------------------------------------\n // Render\n // -------------------------------------------------------------------------\n\n return (\n <div className={styles.pane} data-compact={compact || undefined}>\n <div className={styles.strip}>\n <div className={styles.tabs} role=\"tablist\" aria-label=\"Previews\">\n {tabs.map((tab, index) => {\n const selected = tab.id === activeId;\n const label = tabLabel(tab);\n return (\n <div key={tab.id} className={styles.tab} data-selected={selected || undefined} role=\"presentation\">\n <button\n ref={(node) => { if (node) tabRefs.current.set(tab.id, node); else tabRefs.current.delete(tab.id); }}\n type=\"button\"\n role=\"tab\"\n id={`preview-tab-${tab.id}`}\n aria-selected={selected}\n aria-controls=\"preview-panel\"\n tabIndex={selected ? 0 : -1}\n className={styles.tabButton}\n title={tab.kind === 'url' ? tab.history[tab.index] : tab.kind === 'artifact' ? tab.path : 'Choose what to preview'}\n onClick={() => setActiveId(tab.id)}\n onKeyDown={(event) => onTabKeyDown(event, index)}\n >\n {tab.kind === 'artifact' ? <FileGlyph size={12} /> : tab.kind === 'url' ? <ServerGlyph size={12} /> : <PreviewGlyph size={12} />}\n <span className={styles.tabTitle}>{label}</span>\n </button>\n <button type=\"button\" className={styles.tabClose} aria-label={`Close preview ${label}`} title=\"Close\"\n onClick={() => closeTab(tab)}>\n <IconX size={12} />\n </button>\n </div>\n );\n })}\n </div>\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconPlus />} aria-label=\"New preview tab\" title=\"New preview tab\"\n className={styles.newTab} onClick={newLauncherTab} />\n </div>\n\n <div className={`${chrome.header} ${styles.toolbar}`}>\n <div className={styles.nav}>\n <IconButton variant=\"ghost\" size=\"sm\" icon={<ArrowLeftGlyph />} aria-label=\"Back\" title=\"Back\" disabled={!canBack} onClick={() => go(-1)} />\n <IconButton variant=\"ghost\" size=\"sm\" icon={<ArrowRightGlyph />} aria-label=\"Forward\" title=\"Forward\" disabled={!canForward} onClick={() => go(1)} />\n <IconButton variant=\"ghost\" size=\"sm\" icon={<ReloadGlyph />} aria-label={showLauncher ? 'Refresh the list' : 'Reload'}\n title={showLauncher ? 'Refresh the list' : 'Reload'}\n disabled={!active && showLauncher && targets === null} onClick={reload} />\n </div>\n <form className={styles.addressForm} onSubmit={submitAddress} role=\"search\" aria-label=\"Preview address\">\n <input\n ref={addressRef}\n className={styles.address}\n value={address}\n onChange={(event) => setAddress(event.target.value)}\n onKeyDown={onAddressKeyDown}\n onFocus={(event) => event.currentTarget.select()}\n placeholder=\"localhost:5173\"\n aria-label=\"Address\"\n spellCheck={false}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n inputMode=\"url\"\n readOnly={active?.kind === 'artifact'}\n />\n </form>\n <div className={chrome.actions}>\n {!compact ? (\n <Segmented<Device>\n aria-label=\"Frame width\"\n size=\"sm\"\n value={device}\n onChange={setDevice}\n options={[\n { value: 'desktop', label: <DesktopGlyph size={14} />, ariaLabel: 'Desktop width' },\n { value: 'phone', label: <PhoneGlyph size={14} />, ariaLabel: '375 px width' },\n ]}\n />\n ) : null}\n {url ? (\n <a className={styles.external} href={url} target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Open in browser\" title=\"Open in browser\">\n <IconExternalLink />\n </a>\n ) : (\n // Holds the link's place so the address bar keeps its width when a\n // page opens or closes (no link to offer for a file or the launcher).\n <span className={styles.external} data-placeholder=\"true\" aria-hidden=\"true\" />\n )}\n </div>\n </div>\n\n {addressNote ? <AddressNote note={addressNote} onDismiss={() => setAddressNote(null)} /> : null}\n\n {waiting ? (\n <div className={styles.waiting} role=\"status\">\n <span className={styles.pulse} aria-hidden=\"true\" />\n <span className={styles.waitingText}>\n Starting <code>{waiting.server.command ?? waiting.server.label}</code> — waiting for {shortUrl(waiting.server.url)}\n {' · '}\n {Math.max(0, Math.round((clock - waiting.since) / 1000))}s\n </span>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setWaiting(null)}>Stop waiting</Button>\n </div>\n ) : null}\n\n {notice ? (\n <div className={styles.notice} role=\"alert\">\n <span>{notice}</span>\n <button type=\"button\" className={styles.noticeClose} aria-label=\"Dismiss\" title=\"Dismiss\" onClick={() => setNotice(null)}><IconX size={12} /></button>\n </div>\n ) : null}\n\n <div className={styles.body} id=\"preview-panel\" role=\"tabpanel\" aria-labelledby={active ? `preview-tab-${active.id}` : undefined}>\n {showLauncher ? (\n <Launcher\n targets={targets}\n error={targetsError}\n roots={roots}\n onOpenServer={openServer}\n onOpenArtifact={(a) => openArtifact(a.path, a.kind)}\n onRetry={() => void refreshTargets()}\n onOpenTerminal={() => onOpenTerminal(roots[0] ? { root: roots[0] } : {})}\n waitingId={waiting?.server.id ?? null}\n />\n ) : active?.kind === 'url' ? (\n <div className={styles.stage} data-device={device}>\n <iframe\n key={`${active.id}:${active.index}:${active.reloadKey}`}\n className={styles.frame}\n src={active.history[active.index]}\n title={`Preview of ${tabLabel(active)}`}\n // A dev server is another origin: allow-same-origin is ITS origin.\n // No allow-top-navigation: it can never navigate Verse away.\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-downloads\"\n referrerPolicy=\"no-referrer\"\n />\n <p className={styles.frameHint}>\n Blank page? Some servers refuse to be framed.{' '}\n <a href={active.history[active.index]} target=\"_blank\" rel=\"noopener noreferrer\">Open in browser ↗</a>\n </p>\n </div>\n ) : active?.kind === 'artifact' ? (\n <ArtifactView tab={active} content={contentKey ? content.get(contentKey) ?? { status: 'loading' } : { status: 'loading' }} device={device}\n onRetry={reload} />\n ) : null}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Pieces\n// ---------------------------------------------------------------------------\n\nfunction AddressNote({ note, onDismiss }: { note: PreviewAddress; onDismiss: () => void }) {\n return (\n <div className={styles.addressNote} role=\"status\">\n {note.kind === 'external' ? (\n <span>\n Only local dev servers open here.{' '}\n <a href={note.url} target=\"_blank\" rel=\"noopener noreferrer\">Open in browser ↗</a>\n </span>\n ) : note.kind === 'self' ? (\n <span>That address is Verse itself.</span>\n ) : (\n <span>Enter a local address, like <code>localhost:5173</code>.</span>\n )}\n <button type=\"button\" className={styles.noticeClose} aria-label=\"Dismiss\" title=\"Dismiss\" onClick={onDismiss}><IconX size={12} /></button>\n </div>\n );\n}\n\nfunction ArtifactView({ tab, content, device, onRetry }: { tab: Extract<PreviewTab, { kind: 'artifact' }>; content: ArtifactContent; device: Device; onRetry: () => void }) {\n if (content.status === 'loading') {\n return <div className={styles.loading} aria-busy=\"true\"><SkeletonLine width=\"50%\" /><SkeletonLine width=\"80%\" /></div>;\n }\n if (content.status === 'error') {\n return <EmptyState compact tone=\"error\" title=\"Preview unavailable\" body={content.message}\n action={<Button size=\"sm\" variant=\"subtle\" onClick={onRetry}>Try again</Button>} />;\n }\n if (content.status === 'text') {\n return (\n <article className={styles.markdown} aria-label={tab.path}>\n <MessageMarkdown text={content.text} />\n </article>\n );\n }\n if (tab.artifactKind === 'image') {\n return (\n <div className={styles.imageStage}>\n <img className={styles.image} src={content.src} alt={baseName(tab.path)} />\n </div>\n );\n }\n return (\n <div className={styles.stage} data-device={tab.artifactKind === 'pdf' ? 'desktop' : device}>\n <iframe\n key={content.src}\n className={styles.frame}\n src={content.src}\n title={`Preview of ${tab.path}`}\n // HTML and SVG run in a sandbox with NO same-origin (the server's CSP\n // says the same): their own script works, Verse stays out of reach.\n // PDF viewers refuse to run sandboxed (see preview.ts PDF_CSP).\n {...(tab.artifactKind === 'pdf' ? {} : { sandbox: 'allow-scripts' })}\n referrerPolicy=\"no-referrer\"\n />\n </div>\n );\n}\n\nfunction Launcher({ targets, error, roots, onOpenServer, onOpenArtifact, onRetry, onOpenTerminal, waitingId }: {\n targets: VersePreviewTargetsResponse | null;\n error: string | null;\n roots: readonly string[];\n onOpenServer: (server: VersePreviewDevServer) => void;\n onOpenArtifact: (artifact: VersePreviewArtifact) => void;\n onRetry: () => void;\n /** Opens a terminal (below this pane) in the chat's first folder, to start a server by hand. */\n onOpenTerminal: () => void;\n waitingId: string | null;\n}) {\n if (!targets) {\n if (error) {\n return <EmptyState compact tone=\"error\" title=\"Could not list what to preview\" body={error}\n action={<Button size=\"sm\" variant=\"subtle\" onClick={onRetry}>Try again</Button>} />;\n }\n return <div className={styles.loading} aria-busy=\"true\"><SkeletonLine width=\"35%\" /><SkeletonLine width=\"70%\" /><SkeletonLine width=\"60%\" /></div>;\n }\n const multiRoot = roots.length > 1;\n if (targets.devServers.length === 0 && targets.artifacts.length === 0) {\n return (\n <EmptyState\n compact\n icon={<PreviewGlyph size={20} />}\n title=\"Nothing to preview yet\"\n body=\"Start a dev server in the terminal, or ask for an HTML report. Local servers and the files this chat writes show up here.\"\n action={<Button size=\"sm\" variant=\"subtle\" onClick={onOpenTerminal}>Open a terminal</Button>}\n />\n );\n }\n return (\n <div className={styles.launcher}>\n <section className={styles.section} aria-labelledby=\"preview-servers-title\">\n <h3 className={styles.sectionTitle} id=\"preview-servers-title\">Dev servers</h3>\n {targets.devServers.length === 0 ? (\n <p className={styles.muted}>No dev server found in this chat's folders. Add one to <code>.claude/launch.json</code>, or start it in the terminal.</p>\n ) : (\n <ul className={styles.rows}>\n {targets.devServers.map((server) => (\n <li key={server.id} className={styles.row}>\n <span className={styles.dot} data-running={server.running || undefined} aria-hidden=\"true\" />\n <span className={styles.rowMain}>\n <span className={styles.rowTitle} title={server.label}>{server.label}</span>\n <span className={styles.rowMeta}\n title={`${shortUrl(server.url)} · ${server.running ? 'running' : 'stopped'} · ${SOURCE_LABEL[server.source]}${multiRoot ? ` · ${server.root}` : ''}`}>\n {shortUrl(server.url)} · {server.running ? 'running' : 'stopped'} · {SOURCE_LABEL[server.source]}\n {multiRoot ? ` · ${baseName(server.root)}` : ''}\n </span>\n {/* What Start will type, before the click — a launch.json row's\n label is only its name. Skipped when the label already is it. */}\n {!server.running && server.command && server.command !== server.label ? (\n <code className={styles.rowCommand} title={server.command}>{server.command}</code>\n ) : null}\n </span>\n {server.running ? (\n <Button size=\"sm\" variant=\"subtle\" onClick={() => onOpenServer(server)} aria-label={`Open ${server.label}`}>Open</Button>\n ) : (\n <Button size=\"sm\" variant=\"subtle\" icon={<PlayGlyph size={12} />} busy={waitingId === server.id}\n onClick={() => onOpenServer(server)} aria-label={`Start ${server.label}`}\n title={`Runs ${server.command ?? server.label} in a terminal tab`}>\n Start\n </Button>\n )}\n </li>\n ))}\n </ul>\n )}\n </section>\n <section className={styles.section} aria-labelledby=\"preview-files-title\">\n <h3 className={styles.sectionTitle} id=\"preview-files-title\">This chat's files</h3>\n {targets.artifacts.length === 0 ? (\n <p className={styles.muted}>Ask the chat for a report or a page: HTML, Markdown, SVG, images and PDFs it writes appear here.</p>\n ) : (\n <ul className={styles.rows}>\n {targets.artifacts.map((artifact) => {\n const tooBig = artifact.bytes > 5 * 1024 * 1024;\n return (\n <li key={artifact.path} className={styles.row}>\n <FileGlyph size={14} className={styles.fileIcon} />\n <span className={styles.rowMain}>\n <span className={styles.rowTitle} title={artifact.path}>{artifact.path}</span>\n <span className={styles.rowMeta}>{KIND_LABEL[artifact.kind]} · {formatBytes(artifact.bytes)}</span>\n </span>\n <Button size=\"sm\" variant=\"subtle\" disabled={tooBig} title={tooBig ? 'Larger than 5 MB' : undefined}\n onClick={() => onOpenArtifact(artifact)} aria-label={`Open ${artifact.path}`}>\n Open\n </Button>\n </li>\n );\n })}\n </ul>\n )}\n </section>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{n as e}from"./index-BbDqdepe.js";var t=e(),n={claude:{name:`Anthropic Claude`,fill:`#D97757`,rule:`nonzero`,d:`M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z`},codex:{name:`OpenAI`,fill:null,rule:`evenodd`,d:`M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z`},grok:{name:`xAI Grok`,fill:null,rule:`evenodd`,d:`M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815`},local:{name:`Ollama`,fill:null,rule:`evenodd`,d:`M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z`},devin:{name:`Cognition Devin`,fill:null,rule:`evenodd`,d:`M5 2h14a3 3 0 013 3v14a3 3 0 01-3 3H5a3 3 0 01-3-3V5a3 3 0 013-3zm0 2a1 1 0 00-1 1v14a1 1 0 001 1h14a1 1 0 001-1V5a1 1 0 00-1-1H5zm3 3h4.5a5 5 0 010 10H8V7zm2 2v6h2.5a3 3 0 000-6H10z`}};function r({engine:e,size:r=16,className:i,style:a,title:o,x:s,y:c}){let l=n[e];return l?(0,t.jsx)(`svg`,{viewBox:`0 0 24 24`,x:s,y:c,width:r,height:r,className:i,style:{flex:`none`,...a},role:o?`img`:void 0,"aria-hidden":!o||void 0,"aria-label":o,focusable:`false`,"data-provider":e,children:(0,t.jsx)(`path`,{d:l.d,fill:l.fill??`currentColor`,fillRule:l.rule})}):null}export{r as t};
2
- //# sourceMappingURL=ProviderLogo-CWrojWjI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProviderLogo-CWrojWjI.js","names":[],"sources":["../../../../../../src/web-ui/components/primitives/ProviderLogo.tsx"],"sourcesContent":["/**\n * Provider marks for the engines Verse runs on — Claude (Anthropic),\n * Codex (OpenAI), Grok (xAI), local models (Ollama) and (3.15) Devin\n * (Cognition).\n *\n * Path data from @lobehub/icons (MIT, https://github.com/lobehub/lobe-icons),\n * inlined so the marks need no network and no runtime dependency. The marks\n * themselves are the owners' trademarks, used only to identify the provider\n * an account belongs to. Claude keeps its brand colour; the others draw in\n * currentColor so they follow the theme (light and dark) like any glyph.\n *\n * Decorative by default (aria-hidden): the provider NAME is always rendered\n * as text beside the mark. Pass `title` only where the mark stands alone.\n */\nimport type { CSSProperties } from 'react';\n\nexport type ProviderEngine = 'claude' | 'codex' | 'grok' | 'local' | 'devin';\n\ninterface Mark { d: string; fill: string | null; rule: 'evenodd' | 'nonzero'; name: string }\n\nconst MARKS: Readonly<Record<ProviderEngine, Mark>> = {\n claude: { name: 'Anthropic Claude', fill: \"#D97757\", rule: 'nonzero', d: \"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z\" },\n codex: { name: 'OpenAI', fill: null, rule: 'evenodd', d: \"M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z\" },\n grok: { name: 'xAI Grok', fill: null, rule: 'evenodd', d: \"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815\" },\n local: { name: 'Ollama', fill: null, rule: 'evenodd', d: \"M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z\" },\n // 3.15: no vendor path data is bundled for Devin, so this is a plain\n // geometric \"D\" in a rounded frame (currentColor, same 24px grid) — an\n // identifier, not Cognition's logo.\n devin: { name: 'Cognition Devin', fill: null, rule: 'evenodd', d: \"M5 2h14a3 3 0 013 3v14a3 3 0 01-3 3H5a3 3 0 01-3-3V5a3 3 0 013-3zm0 2a1 1 0 00-1 1v14a1 1 0 001 1h14a1 1 0 001-1V5a1 1 0 00-1-1H5zm3 3h4.5a5 5 0 010 10H8V7zm2 2v6h2.5a3 3 0 000-6H10z\" },\n};\n\nexport function providerName(engine: ProviderEngine): string {\n return MARKS[engine].name;\n}\n\nexport function ProviderLogo({ engine, size = 16, className, style, title, x, y }: {\n engine: ProviderEngine;\n size?: number;\n /** Position when nested inside an SVG chart (e.g. a lane label). */\n x?: number;\n y?: number;\n className?: string;\n style?: CSSProperties;\n /** Accessible name; omit when the provider's name is shown as text nearby. */\n title?: string;\n}) {\n const mark = MARKS[engine];\n if (!mark) return null;\n return (\n <svg\n viewBox=\"0 0 24 24\"\n x={x}\n y={y}\n width={size}\n height={size}\n className={className}\n style={{ flex: 'none', ...style }}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n aria-label={title}\n focusable=\"false\"\n data-provider={engine}\n >\n <path d={mark.d} fill={mark.fill ?? 'currentColor'} fillRule={mark.rule} />\n </svg>\n );\n}\n"],"mappings":"kDAoBM,EAAgD,CACpD,OAAQ,CAAE,KAAM,mBAAoB,KAAM,UAAW,KAAM,UAAW,EAAG,69CAA89C,EACviD,MAAO,CAAE,KAAM,SAAU,KAAM,KAAM,KAAM,UAAW,EAAG,+8CAAg9C,EACzgD,KAAM,CAAE,KAAM,WAAY,KAAM,KAAM,KAAM,UAAW,EAAG,8iBAA+iB,EACzmB,MAAO,CAAE,KAAM,SAAU,KAAM,KAAM,KAAM,UAAW,EAAG,khGAAmhG,EAI5kG,MAAO,CAAE,KAAM,kBAAmB,KAAM,KAAM,KAAM,UAAW,EAAG,wLAAyL,CAC7P,EAMA,SAAgB,EAAa,CAAE,SAAQ,OAAO,GAAI,YAAW,QAAO,QAAO,IAAG,KAU3E,CACD,IAAM,EAAO,EAAM,GAEnB,OADK,GAEH,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,QAAQ,YACL,IACA,IACH,MAAO,EACP,OAAQ,EACG,YACX,MAAO,CAAE,KAAM,OAAQ,GAAG,CAAM,EAChC,KAAM,EAAQ,MAAQ,IAAA,GACtB,cAAa,IAAQ,IAAA,GACrB,aAAY,EACZ,UAAU,QACV,gBAAe,EAEf,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAG,EAAK,EAAG,KAAM,EAAK,MAAQ,eAAgB,SAAU,EAAK,IAAO,CAAA,CACvE,CAAA,EAjBW,IAmBpB"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{E as r}from"./VerseShared-_pMXKs8m.js";import{i}from"./CapacityStrip-ChYPcr23.js";import{l as a,r as o}from"./capacity-strip-model-pdIEweaZ.js";var s=n(t(),1),c={count:`_count_16gc0_5`,dot:`_dot_16gc0_26`,pulse:`_pulse_16gc0_27`,autonomy:`_autonomy_16gc0_41`,ring:`_ring_16gc0_57`,ringTrack:`_ringTrack_16gc0_58`,ringFill:`_ringFill_16gc0_59`},l=e();function u(e){return e.stopped?`danger`:e.paused?`warning`:e.mode===`autonomous`?`success`:e.mode===`propose`?`info`:`neutral`}function d(e,t){if(!t)return null;switch(e){case`command`:{let e=t.counts.needsYou;return e>0?{kind:`count`,count:e,spoken:`, ${e} need${e===1?`s`:``} you`,tone:`warning`}:null}case`chat`:{let e=t.counts.running;if(e>0)return{kind:`pulse`,spoken:`, ${e} running`,tone:`running`};let n=t.counts.unread;return n>0?{kind:`dot`,spoken:`, ${n} unread`,tone:`info`}:null}case`fleet`:return t.autonomy?{kind:`autonomy`,spoken:`, ${t.autonomy.label}`,autonomy:t.autonomy,tone:u(t.autonomy)}:null;case`mind`:return t.mind?.unseen?{kind:`dot`,spoken:`, new memo`,tone:`info`}:null;default:return null}}function f({badge:e}){if(e.kind===`count`){let t=e.count??0;return(0,l.jsx)(`span`,{className:c.count,"data-tone":e.tone,"aria-hidden":`true`,"data-badge":`count`,children:t>99?`99+`:t})}if(e.kind===`autonomy`&&e.autonomy){let t=e.autonomy,n=t.stopped?`stopped`:t.paused?`paused`:t.mode;return(0,l.jsx)(`span`,{className:c.autonomy,"data-shape":n,"data-tone":e.tone,"aria-hidden":`true`,"data-badge":`autonomy`})}return(0,l.jsx)(`span`,{className:e.kind===`pulse`?c.pulse:c.dot,"data-tone":e.tone,"aria-hidden":`true`,"data-badge":e.kind})}function p(e){return e>=90?`critical`:e>=70?`tight`:`ok`}function m(e){if(!e)return null;let t=e.windows.find(e=>e.binding)??null,n=t?.limitReached===!0,r=e.cls===`blocked`||n?100:t?.usedPercent??null;return r===null?null:{seatId:e.seatId,label:e.label,windowLabel:t?.label??null,usedPercent:Math.max(0,Math.min(100,r)),limitReached:n,resetText:t?.resetText??null,word:e.word}}function h(e){let t=e.resetText?` · ${e.resetText}`:``;return e.limitReached?`${e.label}: ${e.windowLabel??`window`} limit reached${t}`:e.windowLabel===null?`${e.label}: ${e.word}`:`${e.label}: ${e.windowLabel} ${r(e.usedPercent)} used${t}`}function g(){let e=i({withBudget:!1});return(0,s.useMemo)(()=>m(a(o(e.seats,{health:e.health,local:`hide`}))),[e.seats,e.health])}var _=7,v=2*Math.PI*_;function y({badge:e}){let t=Math.max(0,Math.min(100,e.usedPercent)),n=p(t);return(0,l.jsxs)(`svg`,{className:c.ring,"data-tone":n,viewBox:`0 0 18 18`,width:18,height:18,"aria-hidden":`true`,focusable:`false`,children:[(0,l.jsx)(`circle`,{className:c.ringTrack,cx:`9`,cy:`9`,r:_}),(0,l.jsx)(`circle`,{className:c.ringFill,cx:`9`,cy:`9`,r:_,strokeDasharray:`${t/100*v} ${v}`,transform:`rotate(-90 9 9)`})]})}export{y as CapacityRing,f as RailBadgeMark,u as autonomyTone,p as capacityTone,h as describeRailCapacity,d as railBadgeFor,m as railCapacityFromRow,g as useRailCapacity};
2
- //# sourceMappingURL=RailStatus-xjOcjL0v.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RailStatus-xjOcjL0v.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/RailStatus.module.css","../../../../../../src/web-ui/routes/verse/shell/RailStatus.tsx"],"sourcesContent":["/* Rail badges: pinned to the icon's own 16px box (RailIcon), so they read the\n same in the 56px and the labelled rail. Shape carries meaning; colour\n confirms it. */\n\n.count {\n position: absolute;\n top: -6px;\n right: -9px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: var(--radius-full);\n /* The status pair, not solid + ink: the bg/fg tokens are the ones tuned\n for text contrast in BOTH themes (the solid flips nothing). */\n background: var(--status-warning-bg);\n box-shadow: 0 0 0 2px var(--bg-canvas), inset 0 0 0 1px var(--status-warning-solid);\n color: var(--status-warning-fg);\n font-family: var(--font-ui);\n font-size: var(--text-2xs-size);\n font-weight: var(--font-weight-semibold);\n line-height: 16px;\n text-align: center;\n font-variant-numeric: tabular-nums;\n}\n\n.dot,\n.pulse {\n position: absolute;\n top: -3px;\n right: -3px;\n width: 7px;\n height: 7px;\n border-radius: var(--radius-full);\n box-shadow: 0 0 0 2px var(--bg-canvas);\n background: var(--status-info-solid);\n}\n.pulse { background: var(--status-running-solid); animation: pulse var(--duration-pulse) ease-in-out infinite; }\n\n/* Autonomy: off = hollow ring, propose = half, autonomous = full,\n paused = a bar, stopped = a square. */\n.autonomy {\n position: absolute;\n top: -3px;\n right: -4px;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n box-shadow: 0 0 0 2px var(--bg-canvas);\n border: 1.5px solid var(--text-tertiary);\n background: transparent;\n}\n.autonomy[data-shape='propose'] { border-color: var(--status-info-solid); background: linear-gradient(90deg, var(--status-info-solid) 50%, transparent 50%); }\n.autonomy[data-shape='autonomous'] { border-color: var(--status-success-solid); background: var(--status-success-solid); }\n.autonomy[data-shape='paused'] { border-radius: 1px; border: 0; width: 8px; height: 3px; top: 0; background: var(--status-warning-solid); }\n.autonomy[data-shape='stopped'] { border-radius: 1px; border-color: var(--status-danger-solid); background: var(--status-danger-solid); }\n\n.ring { display: block; }\n.ringTrack { fill: none; stroke: var(--meter-track); stroke-width: 2.5; }\n.ringFill { fill: none; stroke: var(--data-seq-5); stroke-width: 2.5; stroke-linecap: round; }\n.ring[data-tone='tight'] .ringFill { stroke: var(--status-warning-solid); }\n.ring[data-tone='critical'] .ringFill { stroke: var(--status-danger-solid); }\n\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.55; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion='full']) .pulse { animation: none; }\n}\n:root[data-motion='reduce'] .pulse { animation: none; }\n","/**\n * routes/verse/shell/RailStatus.tsx — what the rail says without being\n * opened (unit C1; SPEC-310C §1 \"Rail badges\"):\n *\n * Command the Needs-you count\n * Chat a pulsing amber dot while chats run (the count rides the\n * accessible name); a quiet dot for unread replies\n * Fleet the autonomy state (off / propose / autonomous, paused, stopped)\n * Mind a dot when there is a memo the operator has not opened\n * foot a capacity ring for the scarcest seat — C6's `scarcestSeat`\n * over the shared capacity rows, so the ring and Apps & Accounts\n * can never describe the same seat two ways\n *\n * Every badge is a SHAPE plus words in the accessible name — never colour\n * alone — and an unknown state draws nothing at all: no dot is \"we do not\n * know\", never \"zero\" (the activity route may not be in this build yet).\n */\nimport { useMemo } from 'react';\nimport type {\n VerseActivityResponse,\n VerseAutonomyBadge,\n VerseCapacityBadge,\n} from '../../../../core/verse/workbench-types.js';\nimport { buildCapacityRows, scarcestSeat, type CapacityRow } from '../usage/capacity-strip-model.js';\nimport { useCapacityData } from '../usage/CapacityStrip.js';\nimport type { VerseSectionId } from '../verse-ui-store.js';\nimport styles from './RailStatus.module.css';\nimport { usedPercentText } from '../percent-text.js';\n\nexport interface RailBadge {\n /** Appended to the rail button's accessible name (\", 3 need you\"). */\n spoken: string;\n kind: 'count' | 'pulse' | 'dot' | 'autonomy';\n /** The visible count, for `count`. */\n count?: number;\n tone?: 'running' | 'info' | 'warning' | 'danger' | 'success' | 'neutral';\n autonomy?: VerseAutonomyBadge;\n}\n\nexport function autonomyTone(badge: VerseAutonomyBadge): NonNullable<RailBadge['tone']> {\n if (badge.stopped) return 'danger';\n if (badge.paused) return 'warning';\n if (badge.mode === 'autonomous') return 'success';\n if (badge.mode === 'propose') return 'info';\n return 'neutral';\n}\n\n/** The badge a rail item shows, or null (nothing to say, or not known). */\nexport function railBadgeFor(section: VerseSectionId, data: VerseActivityResponse | null): RailBadge | null {\n if (!data) return null;\n switch (section) {\n case 'command': {\n const n = data.counts.needsYou;\n return n > 0 ? { kind: 'count', count: n, spoken: `, ${n} need${n === 1 ? 's' : ''} you`, tone: 'warning' } : null;\n }\n case 'chat': {\n const running = data.counts.running;\n if (running > 0) return { kind: 'pulse', spoken: `, ${running} running`, tone: 'running' };\n const unread = data.counts.unread;\n return unread > 0 ? { kind: 'dot', spoken: `, ${unread} unread`, tone: 'info' } : null;\n }\n case 'fleet':\n return data.autonomy ? { kind: 'autonomy', spoken: `, ${data.autonomy.label}`, autonomy: data.autonomy, tone: autonomyTone(data.autonomy) } : null;\n case 'mind':\n return data.mind?.unseen ? { kind: 'dot', spoken: ', new memo', tone: 'info' } : null;\n default:\n return null;\n }\n}\n\nexport function RailBadgeMark({ badge }: { badge: RailBadge }) {\n if (badge.kind === 'count') {\n const n = badge.count ?? 0;\n return (\n <span className={styles.count} data-tone={badge.tone} aria-hidden=\"true\" data-badge=\"count\">\n {n > 99 ? '99+' : n}\n </span>\n );\n }\n if (badge.kind === 'autonomy' && badge.autonomy) {\n const a = badge.autonomy;\n const shape = a.stopped ? 'stopped' : a.paused ? 'paused' : a.mode;\n return <span className={styles.autonomy} data-shape={shape} data-tone={badge.tone} aria-hidden=\"true\" data-badge=\"autonomy\" />;\n }\n return <span className={badge.kind === 'pulse' ? styles.pulse : styles.dot} data-tone={badge.tone} aria-hidden=\"true\" data-badge={badge.kind} />;\n}\n\n// ---------------------------------------------------------------------------\n// Capacity ring\n// ---------------------------------------------------------------------------\n\nexport function capacityTone(usedPercent: number): 'ok' | 'tight' | 'critical' {\n if (usedPercent >= 90) return 'critical';\n if (usedPercent >= 70) return 'tight';\n return 'ok';\n}\n\n/**\n * What the rail foot shows for the scarcest seat: one CapacityRow (C6's\n * projection) reduced to a ring and a sentence. Built ONLY from a row that\n * `scarcestSeat` chose, so there is always a measured binding window or a\n * blocked seat behind it — never an invented percent.\n */\nexport interface RailCapacity {\n seatId: string;\n label: string;\n /** \"5-hour window\", \"weekly fable window\"; null when the seat is blocked with no window read. */\n windowLabel: string | null;\n /** 0–100 for the ring. A reached limit or a blocked seat fills it. */\n usedPercent: number;\n limitReached: boolean;\n /** Provider prose or a formatted instant; null when neither. */\n resetText: string | null;\n /** \"blocked\", \"tight\", … — C6's word for the class. */\n word: string;\n}\n\nexport function railCapacityFromRow(row: CapacityRow | null): RailCapacity | null {\n if (!row) return null;\n const binding = row.windows.find((w) => w.binding) ?? null;\n const limitReached = binding?.limitReached === true;\n // Blocked (signed out, out of usage) reads as a full ring whatever the last\n // window said: the engine will refuse a turn on it.\n const used = row.cls === 'blocked' || limitReached ? 100 : binding?.usedPercent ?? null;\n if (used === null) return null;\n return {\n seatId: row.seatId,\n label: row.label,\n windowLabel: binding?.label ?? null,\n usedPercent: Math.max(0, Math.min(100, used)),\n limitReached,\n resetText: binding?.resetText ?? null,\n word: row.word,\n };\n}\n\n/** \"Claude Max: weekly fable window 92% used · resets Sep 25\" — the tooltip and the accessible name. */\nexport function describeRailCapacity(c: RailCapacity): string {\n const reset = c.resetText ? ` · ${c.resetText}` : '';\n if (c.limitReached) return `${c.label}: ${c.windowLabel ?? 'window'} limit reached${reset}`;\n if (c.windowLabel === null) return `${c.label}: ${c.word}`;\n return `${c.label}: ${c.windowLabel} ${usedPercentText(c.usedPercent)} used${reset}`;\n}\n\n/**\n * The rail's scarcest seat, live. Reads the app-wide seat + health caches the\n * capacity strip uses (mounting it costs no extra request when Apps or Usage\n * is also mounted). Budget is NOT read: the reserve does not change which\n * seat is closest to running out, and the rail is on screen on every surface,\n * so it should not keep the 60 s budget poll alive by itself. Local seats are\n * left out — they have no quota to run out of.\n */\nexport function useRailCapacity(): RailCapacity | null {\n const data = useCapacityData({ withBudget: false });\n return useMemo(\n () => railCapacityFromRow(scarcestSeat(buildCapacityRows(data.seats, { health: data.health, local: 'hide' }))),\n [data.seats, data.health],\n );\n}\n\nconst R = 7;\nconst C = 2 * Math.PI * R;\n\nexport function CapacityRing({ badge }: { badge: Pick<VerseCapacityBadge, 'usedPercent'> }) {\n const used = Math.max(0, Math.min(100, badge.usedPercent));\n const tone = capacityTone(used);\n return (\n <svg className={styles.ring} data-tone={tone} viewBox=\"0 0 18 18\" width={18} height={18} aria-hidden=\"true\" focusable=\"false\">\n <circle className={styles.ringTrack} cx=\"9\" cy=\"9\" r={R} />\n <circle\n className={styles.ringFill}\n cx=\"9\"\n cy=\"9\"\n r={R}\n strokeDasharray={`${(used / 100) * C} ${C}`}\n transform=\"rotate(-90 9 9)\"\n />\n </svg>\n );\n}\n"],"mappings":"2ZCuCA,SAAgB,EAAa,EAA2D,CAKtF,OAJI,EAAM,QAAgB,SACtB,EAAM,OAAe,UACrB,EAAM,OAAS,aAAqB,UACpC,EAAM,OAAS,UAAkB,OAC9B,SACT,CAGA,SAAgB,EAAa,EAAyB,EAAsD,CAC1G,GAAI,CAAC,EAAM,OAAO,KAClB,OAAQ,EAAR,CACE,IAAK,UAAW,CACd,IAAM,EAAI,EAAK,OAAO,SACtB,OAAO,EAAI,EAAI,CAAE,KAAM,QAAS,MAAO,EAAG,OAAQ,KAAK,EAAE,OAAO,IAAM,EAAI,IAAM,GAAG,MAAO,KAAM,SAAU,EAAI,IAChH,CACA,IAAK,OAAQ,CACX,IAAM,EAAU,EAAK,OAAO,QAC5B,GAAI,EAAU,EAAG,MAAO,CAAE,KAAM,QAAS,OAAQ,KAAK,EAAQ,UAAW,KAAM,SAAU,EACzF,IAAM,EAAS,EAAK,OAAO,OAC3B,OAAO,EAAS,EAAI,CAAE,KAAM,MAAO,OAAQ,KAAK,EAAO,SAAU,KAAM,MAAO,EAAI,IACpF,CACA,IAAK,QACH,OAAO,EAAK,SAAW,CAAE,KAAM,WAAY,OAAQ,KAAK,EAAK,SAAS,QAAS,SAAU,EAAK,SAAU,KAAM,EAAa,EAAK,QAAQ,CAAE,EAAI,KAChJ,IAAK,OACH,OAAO,EAAK,MAAM,OAAS,CAAE,KAAM,MAAO,OAAQ,aAAc,KAAM,MAAO,EAAI,KACnF,QACE,OAAO,IACX,CACF,CAEA,SAAgB,EAAc,CAAE,SAA+B,CAC7D,GAAI,EAAM,OAAS,QAAS,CAC1B,IAAM,EAAI,EAAM,OAAS,EACzB,OACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,MAAO,YAAW,EAAM,KAAM,cAAY,OAAO,aAAW,QACjF,SAAA,EAAI,GAAK,MAAQ,CACd,CAAA,CAEV,CACA,GAAI,EAAM,OAAS,YAAc,EAAM,SAAU,CAC/C,IAAM,EAAI,EAAM,SACV,EAAQ,EAAE,QAAU,UAAY,EAAE,OAAS,SAAW,EAAE,KAC9D,OAAO,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,SAAU,aAAY,EAAO,YAAW,EAAM,KAAM,cAAY,OAAO,aAAW,UAAY,CAAA,CAC/H,CACA,OAAO,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAM,OAAS,QAAU,EAAO,MAAQ,EAAO,IAAK,YAAW,EAAM,KAAM,cAAY,OAAO,aAAY,EAAM,IAAO,CAAA,CACjJ,CAMA,SAAgB,EAAa,EAAkD,CAG7E,OAFI,GAAe,GAAW,WAC1B,GAAe,GAAW,QACvB,IACT,CAsBA,SAAgB,EAAoB,EAA8C,CAChF,GAAI,CAAC,EAAK,OAAO,KACjB,IAAM,EAAU,EAAI,QAAQ,KAAM,GAAM,EAAE,OAAO,GAAK,KAChD,EAAe,GAAS,eAAiB,GAGzC,EAAO,EAAI,MAAQ,WAAa,EAAe,IAAM,GAAS,aAAe,KAEnF,OADI,IAAS,KAAa,KACnB,CACL,OAAQ,EAAI,OACZ,MAAO,EAAI,MACX,YAAa,GAAS,OAAS,KAC/B,YAAa,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,CAAI,CAAC,EAC5C,eACA,UAAW,GAAS,WAAa,KACjC,KAAM,EAAI,IACZ,CACF,CAGA,SAAgB,EAAqB,EAAyB,CAC5D,IAAM,EAAQ,EAAE,UAAY,MAAM,EAAE,YAAc,GAGlD,OAFI,EAAE,aAAqB,GAAG,EAAE,MAAM,IAAI,EAAE,aAAe,SAAS,gBAAgB,IAChF,EAAE,cAAgB,KAAa,GAAG,EAAE,MAAM,IAAI,EAAE,OAC7C,GAAG,EAAE,MAAM,IAAI,EAAE,YAAY,GAAG,EAAgB,EAAE,WAAW,EAAE,OAAO,GAC/E,CAUA,SAAgB,GAAuC,CACrD,IAAM,EAAO,EAAgB,CAAE,WAAY,EAAM,CAAC,EAClD,OAAA,EAAO,EAAA,QAAA,KACC,EAAoB,EAAa,EAAkB,EAAK,MAAO,CAAE,OAAQ,EAAK,OAAQ,MAAO,MAAO,CAAC,CAAC,CAAC,EAC7G,CAAC,EAAK,MAAO,EAAK,MAAM,CAC1B,CACF,CAEA,IAAM,EAAI,EACJ,EAAI,EAAI,KAAK,GAAK,EAExB,SAAgB,EAAa,CAAE,SAA6D,CAC1F,IAAM,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,EAAM,WAAW,CAAC,EACnD,EAAO,EAAa,CAAI,EAC9B,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,KAAM,YAAW,EAAM,QAAQ,YAAY,MAAO,GAAI,OAAQ,GAAI,cAAY,OAAO,UAAU,QAAtH,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,UAAW,EAAO,UAAW,GAAG,IAAI,GAAG,IAAI,EAAG,CAAI,CAAA,GAC1D,EAAA,EAAA,IAAA,CAAC,SAAD,CACE,UAAW,EAAO,SAClB,GAAG,IACH,GAAG,IACH,EAAG,EACH,gBAAiB,GAAI,EAAO,IAAO,EAAE,GAAG,IACxC,UAAU,iBACX,CAAA,CACE,GAET"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{t as r}from"./EmptyState-BEXDoNZd.js";import{r as i}from"./ThinkingBlock-Db8qnuKz.js";import{t as a}from"./useVerseTranscript-B6wLDOv8.js";import{r as o,t as s}from"./stub-panes.module-aBfJsf41.js";var c=n(t(),1),l=e();function u(e){return e===null||!Number.isFinite(e)||e<=0?null:e<1e4?`${(e/1e3).toFixed(1)}s`:`${Math.round(e/1e3)}s`}function d({sessionId:e}){let t=a(e),n=(0,c.useMemo)(()=>o(t.items),[t.items]);return n.length===0?(0,l.jsx)(`div`,{className:s.pane,"aria-label":`Reasoning`,children:(0,l.jsx)(`section`,{className:s.section,children:(0,l.jsx)(r,{compact:!0,title:`No reasoning yet`,body:`When the model thinks before it answers, its reasoning streams here, turn by turn — so you can follow why without scrolling the answer away. Raise the effort in the composer for more of it.`})})}):(0,l.jsx)(`div`,{className:s.pane,"aria-label":`Reasoning`,children:(0,l.jsx)(`section`,{className:s.section,children:n.map(e=>(0,l.jsxs)(`article`,{className:s.turn,"aria-label":e.ask?`Reasoning for: ${e.ask}`:`Reasoning`,children:[e.ask?(0,l.jsx)(`p`,{className:s.ask,title:e.ask,children:e.ask}):null,e.blocks.map(e=>{let t=[u(e.durationMs),e.estimatedTokens===null?null:i(e.estimatedTokens)].filter(Boolean).join(` · `);return(0,l.jsxs)(`p`,{className:s.thought,children:[t?(0,l.jsx)(`span`,{className:s.thoughtMeta,children:t}):null,e.redacted?(0,l.jsx)(`em`,{children:`The model thought here; the provider withheld the text.`}):e.text]},e.key)})]},e.turnId))})})}export{d as ReasoningPane};
2
- //# sourceMappingURL=ReasoningPane-M7ZfvEc5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReasoningPane-M7ZfvEc5.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/panes/builtin/ReasoningPane.tsx"],"sourcesContent":["/**\n * routes/verse/panes/builtin/ReasoningPane.tsx — the first-party Reasoning\n * pane (a registry STUB): the chat's thinking, turn by turn, newest first,\n * beside the answer instead of folded into it. The Reasoning + Sources unit\n * replaces it by registering the id `reasoning` (../README.md).\n */\nimport { useMemo } from 'react';\nimport { EmptyState } from '../../../../components/primitives/EmptyState.js';\nimport { formatThinkingTokens } from '../../chat/ThinkingBlock.js';\nimport { useVerseTranscript } from '../../useVerseTranscript.js';\nimport type { PaneProps } from '../pane-registry.js';\nimport { reasoningByTurn } from './pane-models.js';\nimport styles from './stub-panes.module.css';\n\nfunction seconds(ms: number | null): string | null {\n if (ms === null || !Number.isFinite(ms) || ms <= 0) return null;\n return ms < 10_000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms / 1000)}s`;\n}\n\nexport function ReasoningPane({ sessionId }: PaneProps) {\n const transcript = useVerseTranscript(sessionId);\n const turns = useMemo(() => reasoningByTurn(transcript.items), [transcript.items]);\n if (turns.length === 0) {\n return (\n <div className={styles.pane} aria-label=\"Reasoning\">\n <section className={styles.section}>\n <EmptyState compact title=\"No reasoning yet\"\n body=\"When the model thinks before it answers, its reasoning streams here, turn by turn — so you can follow why without scrolling the answer away. Raise the effort in the composer for more of it.\" />\n </section>\n </div>\n );\n }\n return (\n <div className={styles.pane} aria-label=\"Reasoning\">\n <section className={styles.section}>\n {turns.map((turn) => (\n <article key={turn.turnId} className={styles.turn} aria-label={turn.ask ? `Reasoning for: ${turn.ask}` : 'Reasoning'}>\n {turn.ask ? <p className={styles.ask} title={turn.ask}>{turn.ask}</p> : null}\n {turn.blocks.map((block) => {\n const meta = [seconds(block.durationMs), block.estimatedTokens !== null ? formatThinkingTokens(block.estimatedTokens) : null]\n .filter(Boolean).join(' · ');\n return (\n <p key={block.key} className={styles.thought}>\n {meta ? <span className={styles.thoughtMeta}>{meta}</span> : null}\n {block.redacted ? <em>The model thought here; the provider withheld the text.</em> : block.text}\n </p>\n );\n })}\n </article>\n ))}\n </section>\n </div>\n );\n}\n"],"mappings":"wRAcA,SAAS,EAAQ,EAAkC,CAEjD,OADI,IAAO,MAAQ,CAAC,OAAO,SAAS,CAAE,GAAK,GAAM,EAAU,KACpD,EAAK,IAAS,IAAI,EAAK,IAAA,CAAM,QAAQ,CAAC,EAAE,GAAK,GAAG,KAAK,MAAM,EAAK,GAAI,EAAE,EAC/E,CAEA,SAAgB,EAAc,CAAE,aAAwB,CACtD,IAAM,EAAa,EAAmB,CAAS,EACzC,GAAA,EAAQ,EAAA,QAAA,KAAc,EAAgB,EAAW,KAAK,EAAG,CAAC,EAAW,KAAK,CAAC,EAWjF,OAVI,EAAM,SAAW,GAEjB,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAO,KAAM,aAAW,YACtC,UAAA,EAAA,EAAA,IAAA,CAAC,UAAD,CAAS,UAAW,EAAO,QACzB,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,QAAA,GAAQ,MAAM,mBACxB,KAAK,+LAAiM,CAAA,CACjM,CAAA,CACN,CAAA,GAIP,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAO,KAAM,aAAW,YACtC,UAAA,EAAA,EAAA,IAAA,CAAC,UAAD,CAAS,UAAW,EAAO,QACxB,SAAA,EAAM,IAAK,IACV,EAAA,EAAA,KAAA,CAAC,UAAD,CAA2B,UAAW,EAAO,KAAM,aAAY,EAAK,IAAM,kBAAkB,EAAK,MAAQ,YAAzG,SAAA,CACG,EAAK,KAAM,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAO,IAAK,MAAO,EAAK,IAAM,SAAA,EAAK,GAAO,CAAA,EAAI,KACvE,EAAK,OAAO,IAAK,GAAU,CAC1B,IAAM,EAAO,CAAC,EAAQ,EAAM,UAAU,EAAG,EAAM,kBAAoB,KAAqD,KAA9C,EAAqB,EAAM,eAAe,CAAQ,CAAC,CAC1H,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,EAC7B,OACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAmB,UAAW,EAAO,QAArC,SAAA,CACG,GAAO,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,YAAc,SAAA,CAAW,CAAA,EAAI,KAC5D,EAAM,UAAW,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAI,yDAA2D,CAAA,EAAI,EAAM,IAC1F,CAHK,EAAA,EAAM,GAGX,CAEP,CAAC,CACM,CAZK,EAAA,EAAK,MAYV,CACV,CACM,CAAA,CACN,CAAA,CAET"}
@@ -1,2 +0,0 @@
1
- import{n as e,s as t,u as n}from"./index-BbDqdepe.js";import{n as r,r as i,t as a}from"./SourcesPanel-CCSdY5Os.js";var o=n(t(),1),s=e(),c=[{id:`sources`,label:`Sources`},{id:`reasoning`,label:`Reasoning`}];function l({tab:e,onTab:t,onClose:n,turns:l,engine:u=null,session:d=null,openFile:f,jumpToTool:p,jumpToTurn:m}){let h=(0,o.useRef)(null);return(0,o.useEffect)(()=>{let e=document.activeElement instanceof HTMLElement?document.activeElement:null;return h.current?.querySelector(`[role="tab"][aria-selected="true"]`)?.focus(),()=>{e?.focus?.()}},[]),(0,o.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!e.defaultPrevented&&(e.preventDefault(),n())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[n]),(0,s.jsxs)(`aside`,{ref:h,className:i.sheet,"aria-label":`Reasoning and sources for this chat`,children:[(0,s.jsxs)(`header`,{className:i.sheetHead,children:[(0,s.jsx)(`div`,{role:`tablist`,"aria-label":`Show`,className:i.tabs,children:c.map(n=>(0,s.jsx)(`button`,{type:`button`,role:`tab`,id:`verse-rs-tab-${n.id}`,"aria-selected":e===n.id,"aria-controls":`verse-rs-panel-${n.id}`,tabIndex:e===n.id?0:-1,className:i.tab,onClick:()=>t(n.id),onKeyDown:n=>{if(n.key===`ArrowRight`||n.key===`ArrowLeft`){n.preventDefault();let r=c[(c.findIndex(t=>t.id===e)+(n.key===`ArrowRight`?1:c.length-1))%c.length];t(r.id),requestAnimationFrame(()=>document.getElementById(`verse-rs-tab-${r.id}`)?.focus())}},children:n.label},n.id))}),(0,s.jsx)(`button`,{type:`button`,className:i.close,onClick:n,"aria-label":`Close reasoning and sources`,children:`Close`})]}),(0,s.jsx)(`div`,{id:`verse-rs-panel-${e}`,role:`tabpanel`,"aria-labelledby":`verse-rs-tab-${e}`,className:i.sheetBody,children:e===`sources`?(0,s.jsx)(a,{turns:l,session:d,openFile:f,jumpToTool:p,jumpToTurn:m}):(0,s.jsx)(r,{turns:l,engine:u,jumpToTurn:m})})]})}export{l as ReasoningSheet};
2
- //# sourceMappingURL=ReasoningSheet-RLLj2oys.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReasoningSheet-RLLj2oys.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/reasoning/ReasoningSheet.tsx"],"sourcesContent":["/**\n * routes/verse/reasoning/ReasoningSheet.tsx — the Sources and Reasoning\n * panels, hosted by the transcript itself when there is no dock to open them\n * in (V3.15).\n *\n * In the chat, the transcript's Reasoning / Sources toggles open the dock\n * panes (reasoning.pane.tsx registers them for ⇧⌘Y / ⇧⌘S). A transcript\n * rendered where no dock handles those commands falls back to this sheet: a\n * panel over the right edge of the conversation, two tabs, Escape to close,\n * focus returned to the button that opened it. Lazy — nothing here loads\n * until it opens.\n */\nimport { useEffect, useRef } from 'react';\nimport type { VerseSession } from '../../../../core/verse/types.js';\nimport type { SourceActions } from '../chat/SourceList.js';\nimport type { TurnBlock } from '../chat/turn-model.js';\nimport { ReasoningPanel } from './ReasoningPanel.js';\nimport { SourcesPanel } from './SourcesPanel.js';\nimport styles from './reasoning.module.css';\n\nexport type ReasoningSheetTab = 'sources' | 'reasoning';\n\nexport interface ReasoningSheetProps extends SourceActions {\n tab: ReasoningSheetTab;\n onTab: (tab: ReasoningSheetTab) => void;\n onClose: () => void;\n turns: readonly TurnBlock[];\n engine?: string | null;\n session?: Pick<VerseSession, 'memoryEnabled' | 'projectPath'> | null;\n jumpToTurn: (turnKey: string) => void;\n}\n\nconst TABS: ReadonlyArray<{ id: ReasoningSheetTab; label: string }> = [\n { id: 'sources', label: 'Sources' },\n { id: 'reasoning', label: 'Reasoning' },\n];\n\nexport function ReasoningSheet({ tab, onTab, onClose, turns, engine = null, session = null, openFile, jumpToTool, jumpToTurn }: ReasoningSheetProps) {\n const root = useRef<HTMLElement>(null);\n\n useEffect(() => {\n const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n root.current?.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]')?.focus();\n // Mount/unmount only: the opener is whoever had focus when the sheet opened.\n return () => { opener?.focus?.(); };\n }, []);\n\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && !event.defaultPrevented) {\n event.preventDefault();\n onClose();\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n return (\n <aside ref={root} className={styles.sheet} aria-label=\"Reasoning and sources for this chat\">\n <header className={styles.sheetHead}>\n <div role=\"tablist\" aria-label=\"Show\" className={styles.tabs}>\n {TABS.map((t) => (\n <button key={t.id} type=\"button\" role=\"tab\" id={`verse-rs-tab-${t.id}`} aria-selected={tab === t.id}\n aria-controls={`verse-rs-panel-${t.id}`} tabIndex={tab === t.id ? 0 : -1} className={styles.tab}\n onClick={() => onTab(t.id)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n e.preventDefault();\n const next = TABS[(TABS.findIndex((x) => x.id === tab) + (e.key === 'ArrowRight' ? 1 : TABS.length - 1)) % TABS.length]!;\n onTab(next.id);\n requestAnimationFrame(() => document.getElementById(`verse-rs-tab-${next.id}`)?.focus());\n }\n }}>\n {t.label}\n </button>\n ))}\n </div>\n <button type=\"button\" className={styles.close} onClick={onClose} aria-label=\"Close reasoning and sources\">Close</button>\n </header>\n <div id={`verse-rs-panel-${tab}`} role=\"tabpanel\" aria-labelledby={`verse-rs-tab-${tab}`} className={styles.sheetBody}>\n {tab === 'sources'\n ? <SourcesPanel turns={turns} session={session} openFile={openFile} jumpToTool={jumpToTool} jumpToTurn={jumpToTurn} />\n : <ReasoningPanel turns={turns} engine={engine} jumpToTurn={jumpToTurn} />}\n </div>\n </aside>\n );\n}\n"],"mappings":"wIAgCM,EAAgE,CACpE,CAAE,GAAI,UAAW,MAAO,SAAU,EAClC,CAAE,GAAI,YAAa,MAAO,WAAY,CACxC,EAEA,SAAgB,EAAe,CAAE,MAAK,QAAO,UAAS,QAAO,SAAS,KAAM,UAAU,KAAM,WAAU,aAAY,cAAmC,CACnJ,IAAM,GAAA,EAAO,EAAA,OAAA,CAAoB,IAAI,EAoBrC,OAlBA,EAAA,EAAA,UAAA,KAAgB,CACd,IAAM,EAAS,SAAS,yBAAyB,YAAc,SAAS,cAAgB,KAGxF,OAFA,EAAK,SAAS,cAA2B,oCAAoC,CAAC,EAAE,MAAM,MAEzE,CAAE,GAAQ,QAAQ,CAAG,CACpC,EAAG,CAAC,CAAC,GAEL,EAAA,EAAA,UAAA,KAAgB,CACd,IAAM,EAAS,GAAyB,CAClC,EAAM,MAAQ,UAAY,CAAC,EAAM,mBACnC,EAAM,eAAe,EACrB,EAAQ,EAEZ,EAEA,OADA,SAAS,iBAAiB,UAAW,CAAK,MAC7B,SAAS,oBAAoB,UAAW,CAAK,CAC5D,EAAG,CAAC,CAAO,CAAC,GAGV,EAAA,EAAA,KAAA,CAAC,QAAD,CAAO,IAAK,EAAM,UAAW,EAAO,MAAO,aAAW,sCAAtD,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,SAAD,CAAQ,UAAW,EAAO,UAA1B,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,KAAK,UAAU,aAAW,OAAO,UAAW,EAAO,KACrD,SAAA,EAAK,IAAK,IACT,EAAA,EAAA,IAAA,CAAC,SAAD,CAAmB,KAAK,SAAS,KAAK,MAAM,GAAI,gBAAgB,EAAE,KAAM,gBAAe,IAAQ,EAAE,GAC/F,gBAAe,kBAAkB,EAAE,KAAM,SAAU,IAAQ,EAAE,GAAK,EAAI,GAAI,UAAW,EAAO,IAC5F,YAAe,EAAM,EAAE,EAAE,EACzB,UAAY,GAAM,CAChB,GAAI,EAAE,MAAQ,cAAgB,EAAE,MAAQ,YAAa,CACnD,EAAE,eAAe,EACjB,IAAM,EAAO,GAAM,EAAK,UAAW,GAAM,EAAE,KAAO,CAAG,GAAK,EAAE,MAAQ,aAAe,EAAI,EAAK,OAAS,IAAM,EAAK,QAChH,EAAM,EAAK,EAAE,EACb,0BAA4B,SAAS,eAAe,gBAAgB,EAAK,IAAI,CAAC,EAAE,MAAM,CAAC,CACzF,CACF,EACC,SAAA,EAAE,KACG,EAZK,EAAE,EAYP,CACT,CACE,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,MAAO,QAAS,EAAS,aAAW,8BAA8B,SAAA,OAAa,CAAA,CACjH,CACR,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,GAAI,kBAAkB,IAAO,KAAK,WAAW,kBAAiB,gBAAgB,IAAO,UAAW,EAAO,UACzG,SAAA,IAAQ,WACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,QAAgB,UAAmB,WAAsB,aAAwB,YAAa,CAAA,GACnH,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,QAAe,SAAoB,YAAa,CAAA,CACxE,CAAA,CACA,GAEX"}
@@ -1,2 +0,0 @@
1
- import{n as e}from"./index-BbDqdepe.js";var t={root:`_root_1lgxn_1`,spinner:`_spinner_1lgxn_9`,spin:`_spin_1lgxn_9`},n=e();function r({label:e=`Refreshing`}){return(0,n.jsxs)(`span`,{className:t.root,role:`status`,"aria-live":`polite`,children:[(0,n.jsx)(`span`,{className:t.spinner,"aria-hidden":`true`}),(0,n.jsx)(`span`,{className:`visually-hidden`,children:e})]})}export{r as t};
2
- //# sourceMappingURL=RefreshIndicator-CEMRNruu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RefreshIndicator-CEMRNruu.js","names":[],"sources":["../../../../../../src/web-ui/components/primitives/RefreshIndicator.module.css","../../../../../../src/web-ui/components/primitives/RefreshIndicator.tsx"],"sourcesContent":[".root {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n}\n\n.spinner {\n width: 12px;\n height: 12px;\n border-radius: var(--radius-full);\n border: 2px solid var(--border-strong);\n border-top-color: var(--accent-500);\n animation: spin 0.7s linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :root:not([data-motion=\"full\"]) .spinner {\n animation: none;\n border-top-color: var(--border-strong);\n }\n}\n\n:root[data-motion=\"reduce\"] .spinner {\n animation: none;\n border-top-color: var(--border-strong);\n}\n","/**\n * components/primitives/RefreshIndicator.tsx — the \"stale data, quietly\n * refreshing\" signal (foundation brief item 4: never blank the screen on\n * refresh). Pair with a QueryEntry's `status`:\n *\n * loading -> render a Skeleton instead of the view\n * refreshing -> render the view with data, plus <RefreshIndicator />\n * success -> render the view with data, no indicator\n * error -> render the view's error state\n */\nimport styles from './RefreshIndicator.module.css';\n\nexport function RefreshIndicator({ label = 'Refreshing' }: { label?: string }) {\n return (\n <span className={styles.root} role=\"status\" aria-live=\"polite\">\n <span className={styles.spinner} aria-hidden=\"true\" />\n <span className=\"visually-hidden\">{label}</span>\n </span>\n );\n}\n"],"mappings":"2HCYA,SAAgB,EAAiB,CAAE,QAAQ,cAAoC,CAC7E,OACE,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAW,EAAO,KAAM,KAAK,SAAS,YAAU,SAAtD,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,QAAS,cAAY,MAAQ,CAAA,GACrD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kBAAmB,SAAA,CAAY,CAAA,CAC3C,GAEV"}