@ashlr/hub 3.10.1 → 3.11.0

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 (342) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +343 -82
  3. package/dist/authority-surface.json +69 -9
  4. package/dist/build-identity.json +2 -2
  5. package/dist/cli/cloud.d.ts +39 -0
  6. package/dist/cli/cloud.js +448 -0
  7. package/dist/cli/cloud.js.map +1 -0
  8. package/dist/cli/completions.js +4 -0
  9. package/dist/cli/completions.js.map +1 -1
  10. package/dist/cli/help.js +2 -0
  11. package/dist/cli/help.js.map +1 -1
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +10 -0
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/core/cloud/backlog.d.ts +17 -0
  16. package/dist/core/cloud/backlog.js +177 -0
  17. package/dist/core/cloud/backlog.js.map +1 -0
  18. package/dist/core/cloud/budget.d.ts +19 -0
  19. package/dist/core/cloud/budget.js +99 -0
  20. package/dist/core/cloud/budget.js.map +1 -0
  21. package/dist/core/cloud/checkout.d.ts +41 -0
  22. package/dist/core/cloud/checkout.js +168 -0
  23. package/dist/core/cloud/checkout.js.map +1 -0
  24. package/dist/core/cloud/cloud-api.d.ts +86 -0
  25. package/dist/core/cloud/cloud-api.js +599 -0
  26. package/dist/core/cloud/cloud-api.js.map +1 -0
  27. package/dist/core/cloud/delivery-contract.d.ts +25 -0
  28. package/dist/core/cloud/delivery-contract.js +138 -0
  29. package/dist/core/cloud/delivery-contract.js.map +1 -0
  30. package/dist/core/cloud/improvement-backlog.d.ts +11 -0
  31. package/dist/core/cloud/improvement-backlog.js +26 -0
  32. package/dist/core/cloud/improvement-backlog.js.map +1 -0
  33. package/dist/core/cloud/launcher.d.ts +68 -0
  34. package/dist/core/cloud/launcher.js +312 -0
  35. package/dist/core/cloud/launcher.js.map +1 -0
  36. package/dist/core/cloud/service.d.ts +51 -0
  37. package/dist/core/cloud/service.js +215 -0
  38. package/dist/core/cloud/service.js.map +1 -0
  39. package/dist/core/cloud/store.d.ts +41 -0
  40. package/dist/core/cloud/store.js +278 -0
  41. package/dist/core/cloud/store.js.map +1 -0
  42. package/dist/core/cloud/tracker.d.ts +30 -0
  43. package/dist/core/cloud/tracker.js +152 -0
  44. package/dist/core/cloud/tracker.js.map +1 -0
  45. package/dist/core/cloud/types.d.ts +233 -0
  46. package/dist/core/cloud/types.js +73 -0
  47. package/dist/core/cloud/types.js.map +1 -0
  48. package/dist/core/verse/activity-api.d.ts +3 -1
  49. package/dist/core/verse/activity-api.js +16 -1
  50. package/dist/core/verse/activity-api.js.map +1 -1
  51. package/dist/core/verse/activity.d.ts +7 -0
  52. package/dist/core/verse/activity.js +23 -0
  53. package/dist/core/verse/activity.js.map +1 -1
  54. package/dist/core/verse/verse-api.d.ts +1 -1
  55. package/dist/core/verse/verse-api.js +2 -0
  56. package/dist/core/verse/verse-api.js.map +1 -1
  57. package/dist/core/vision/leader-cloud.d.ts +63 -0
  58. package/dist/core/vision/leader-cloud.js +134 -0
  59. package/dist/core/vision/leader-cloud.js.map +1 -0
  60. package/dist/core/vision/leader.d.ts +6 -0
  61. package/dist/core/vision/leader.js +12 -1
  62. package/dist/core/vision/leader.js.map +1 -1
  63. package/dist/core/web/public/next/assets/{ActionMenu-BBB7VYjz.js → ActionMenu-CQvNJvHY.js} +2 -2
  64. package/dist/core/web/public/next/assets/{ActionMenu-BBB7VYjz.js.map → ActionMenu-CQvNJvHY.js.map} +1 -1
  65. package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js +2 -0
  66. package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js.map +1 -0
  67. package/dist/core/web/public/next/assets/{App-CbDCLAxn.js → App-CimXmK0L.js} +2 -2
  68. package/dist/core/web/public/next/assets/{App-CbDCLAxn.js.map → App-CimXmK0L.js.map} +1 -1
  69. package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js +2 -0
  70. package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js.map +1 -0
  71. package/dist/core/web/public/next/assets/{AreaTrend-BgnK0wAy.js → AreaTrend-LD9lCPkT.js} +2 -2
  72. package/dist/core/web/public/next/assets/{AreaTrend-BgnK0wAy.js.map → AreaTrend-LD9lCPkT.js.map} +1 -1
  73. package/dist/core/web/public/next/assets/AutonomySection-3V9pUyxm.js +2 -0
  74. package/dist/core/web/public/next/assets/{AutonomySection-BF5UCsMv.js.map → AutonomySection-3V9pUyxm.js.map} +1 -1
  75. package/dist/core/web/public/next/assets/{BranchBar-nfSb59Kv.js → BranchBar-U8UdpfEB.js} +2 -2
  76. package/dist/core/web/public/next/assets/{BranchBar-nfSb59Kv.js.map → BranchBar-U8UdpfEB.js.map} +1 -1
  77. package/dist/core/web/public/next/assets/{BudgetControl-BESM12dO.js → BudgetControl-DOTlMSmW.js} +2 -2
  78. package/dist/core/web/public/next/assets/{BudgetControl-BESM12dO.js.map → BudgetControl-DOTlMSmW.js.map} +1 -1
  79. package/dist/core/web/public/next/assets/{BurnDown-D1AfskPT.js → BurnDown-x4PWH9JF.js} +2 -2
  80. package/dist/core/web/public/next/assets/{BurnDown-D1AfskPT.js.map → BurnDown-x4PWH9JF.js.map} +1 -1
  81. package/dist/core/web/public/next/assets/{Button-Cr_qkQEc.js → Button-DYv_KKxr.js} +2 -2
  82. package/dist/core/web/public/next/assets/{Button-Cr_qkQEc.js.map → Button-DYv_KKxr.js.map} +1 -1
  83. package/dist/core/web/public/next/assets/{CapacityStrip-DqqYnLek.js → CapacityStrip-C667yQe8.js} +2 -2
  84. package/dist/core/web/public/next/assets/{CapacityStrip-DqqYnLek.js.map → CapacityStrip-C667yQe8.js.map} +1 -1
  85. package/dist/core/web/public/next/assets/{ChatSection-DoqjyVoj.js → ChatSection-CCcIPpOq.js} +3 -3
  86. package/dist/core/web/public/next/assets/{ChatSection-DoqjyVoj.js.map → ChatSection-CCcIPpOq.js.map} +1 -1
  87. package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js +2 -0
  88. package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js.map +1 -0
  89. package/dist/core/web/public/next/assets/{CommandPalette-lLV-OR63.js → CommandPalette-FiD4N8XD.js} +2 -2
  90. package/dist/core/web/public/next/assets/{CommandPalette-lLV-OR63.js.map → CommandPalette-FiD4N8XD.js.map} +1 -1
  91. package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js +2 -0
  92. package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js.map +1 -0
  93. package/dist/core/web/public/next/assets/{DiffPane-BVxhK-cy.js → DiffPane-DLJ3gGGK.js} +2 -2
  94. package/dist/core/web/public/next/assets/{DiffPane-BVxhK-cy.js.map → DiffPane-DLJ3gGGK.js.map} +1 -1
  95. package/dist/core/web/public/next/assets/{DiffViewer-yCdw9J-Y.js → DiffViewer-B7NWPjIO.js} +2 -2
  96. package/dist/core/web/public/next/assets/{DiffViewer-yCdw9J-Y.js.map → DiffViewer-B7NWPjIO.js.map} +1 -1
  97. package/dist/core/web/public/next/assets/{DockHost-BZReKwos.js → DockHost-DvR-hPhZ.js} +2 -2
  98. package/dist/core/web/public/next/assets/{DockHost-BZReKwos.js.map → DockHost-DvR-hPhZ.js.map} +1 -1
  99. package/dist/core/web/public/next/assets/{EmptyState-D1GDxVZy.js → EmptyState-DhNgDDrF.js} +2 -2
  100. package/dist/core/web/public/next/assets/{EmptyState-D1GDxVZy.js.map → EmptyState-DhNgDDrF.js.map} +1 -1
  101. package/dist/core/web/public/next/assets/{Epistemic-DRp4dBfB.js → Epistemic-uARPnx9x.js} +2 -2
  102. package/dist/core/web/public/next/assets/{Epistemic-DRp4dBfB.js.map → Epistemic-uARPnx9x.js.map} +1 -1
  103. package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js +3 -0
  104. package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js.map +1 -0
  105. package/dist/core/web/public/next/assets/{Funnel-zvDj3He4.js → Funnel-CL8uHONq.js} +2 -2
  106. package/dist/core/web/public/next/assets/{Funnel-zvDj3He4.js.map → Funnel-CL8uHONq.js.map} +1 -1
  107. package/dist/core/web/public/next/assets/{GearTray-CkviqjYr.js → GearTray-C7k4l_BW.js} +2 -2
  108. package/dist/core/web/public/next/assets/{GearTray-CkviqjYr.js.map → GearTray-C7k4l_BW.js.map} +1 -1
  109. package/dist/core/web/public/next/assets/{GrowthSection-Bg5sW0jI.js → GrowthSection-DwdNSGj8.js} +2 -2
  110. package/dist/core/web/public/next/assets/{GrowthSection-Bg5sW0jI.js.map → GrowthSection-DwdNSGj8.js.map} +1 -1
  111. package/dist/core/web/public/next/assets/{HandoffDialog-DcPj1ri9.js → HandoffDialog-FPVOqOMN.js} +2 -2
  112. package/dist/core/web/public/next/assets/{HandoffDialog-DcPj1ri9.js.map → HandoffDialog-FPVOqOMN.js.map} +1 -1
  113. package/dist/core/web/public/next/assets/{Input-Ci7TD96x.js → Input-B9-VLcHS.js} +2 -2
  114. package/dist/core/web/public/next/assets/{Input-Ci7TD96x.js.map → Input-B9-VLcHS.js.map} +1 -1
  115. package/dist/core/web/public/next/assets/{LeaderCard-BSFTlMRF.js → LeaderCard-4R0BhDzT.js} +2 -2
  116. package/dist/core/web/public/next/assets/{LeaderCard-BSFTlMRF.js.map → LeaderCard-4R0BhDzT.js.map} +1 -1
  117. package/dist/core/web/public/next/assets/{MatrixHeatmap-DojKZe9L.js → MatrixHeatmap-DiuushcS.js} +2 -2
  118. package/dist/core/web/public/next/assets/{MatrixHeatmap-DojKZe9L.js.map → MatrixHeatmap-DiuushcS.js.map} +1 -1
  119. package/dist/core/web/public/next/assets/McpSection-CJ__OJKl.js +2 -0
  120. package/dist/core/web/public/next/assets/{McpSection-CvcYu1X_.js.map → McpSection-CJ__OJKl.js.map} +1 -1
  121. package/dist/core/web/public/next/assets/{MessageMarkdown-BrLCrb73.js → MessageMarkdown-qWKyJvAQ.js} +3 -3
  122. package/dist/core/web/public/next/assets/{MessageMarkdown-BrLCrb73.js.map → MessageMarkdown-qWKyJvAQ.js.map} +1 -1
  123. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CjmdBw2p.js → MessageMarkdownRenderer-x05TrsrW.js} +2 -2
  124. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CjmdBw2p.js.map → MessageMarkdownRenderer-x05TrsrW.js.map} +1 -1
  125. package/dist/core/web/public/next/assets/{Meter-DTHbmhQg.js → Meter-D-hncpkO.js} +2 -2
  126. package/dist/core/web/public/next/assets/{Meter-DTHbmhQg.js.map → Meter-D-hncpkO.js.map} +1 -1
  127. package/dist/core/web/public/next/assets/{MindSection-DcO9fmYe.js → MindSection-BjXHkQPS.js} +2 -2
  128. package/dist/core/web/public/next/assets/{MindSection-DcO9fmYe.js.map → MindSection-BjXHkQPS.js.map} +1 -1
  129. package/dist/core/web/public/next/assets/{MutationTokenDialog-Cqn2uPV6.js → MutationTokenDialog-SkRxqV_I.js} +2 -2
  130. package/dist/core/web/public/next/assets/{MutationTokenDialog-Cqn2uPV6.js.map → MutationTokenDialog-SkRxqV_I.js.map} +1 -1
  131. package/dist/core/web/public/next/assets/{NeedsYouDrawer-hiTINupk.js → NeedsYouDrawer-rSd1ZHAR.js} +2 -2
  132. package/dist/core/web/public/next/assets/{NeedsYouDrawer-hiTINupk.js.map → NeedsYouDrawer-rSd1ZHAR.js.map} +1 -1
  133. package/dist/core/web/public/next/assets/{NeedsYouList-B4Z37Phx.js → NeedsYouList-CG-nB1tr.js} +2 -2
  134. package/dist/core/web/public/next/assets/{NeedsYouList-B4Z37Phx.js.map → NeedsYouList-CG-nB1tr.js.map} +1 -1
  135. package/dist/core/web/public/next/assets/{NewChatDialog-utSckh7C.js → NewChatDialog-BeDQ1eW3.js} +2 -2
  136. package/dist/core/web/public/next/assets/{NewChatDialog-utSckh7C.js.map → NewChatDialog-BeDQ1eW3.js.map} +1 -1
  137. package/dist/core/web/public/next/assets/{OnboardingFlow-7N3YSUHN.js → OnboardingFlow-CkTZtt-m.js} +2 -2
  138. package/dist/core/web/public/next/assets/{OnboardingFlow-7N3YSUHN.js.map → OnboardingFlow-CkTZtt-m.js.map} +1 -1
  139. package/dist/core/web/public/next/assets/{PreviewPane-CqzkaAjG.js → PreviewPane-kzbbSK4u.js} +2 -2
  140. package/dist/core/web/public/next/assets/{PreviewPane-CqzkaAjG.js.map → PreviewPane-kzbbSK4u.js.map} +1 -1
  141. package/dist/core/web/public/next/assets/RailStatus-D-t2gPae.js +2 -0
  142. package/dist/core/web/public/next/assets/{RailStatus-sZhApA8k.js.map → RailStatus-D-t2gPae.js.map} +1 -1
  143. package/dist/core/web/public/next/assets/{RefreshIndicator-C1uQIegT.js → RefreshIndicator-BLnr9IOM.js} +2 -2
  144. package/dist/core/web/public/next/assets/{RefreshIndicator-C1uQIegT.js.map → RefreshIndicator-BLnr9IOM.js.map} +1 -1
  145. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-DXjjV6Sh.js → ResourcePoolConsoleApp-BeG0gBif.js} +2 -2
  146. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-DXjjV6Sh.js.map → ResourcePoolConsoleApp-BeG0gBif.js.map} +1 -1
  147. package/dist/core/web/public/next/assets/ResourcesChrome-B3Z3O98t.css +1 -0
  148. package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js +3 -0
  149. package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js.map +1 -0
  150. package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +1 -0
  151. package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js +2 -0
  152. package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js.map +1 -0
  153. package/dist/core/web/public/next/assets/{RouteErrorBoundary-D1LZxQjN.js → RouteErrorBoundary-C5SxA2Dg.js} +2 -2
  154. package/dist/core/web/public/next/assets/{RouteErrorBoundary-D1LZxQjN.js.map → RouteErrorBoundary-C5SxA2Dg.js.map} +1 -1
  155. package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js +2 -0
  156. package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js.map +1 -0
  157. package/dist/core/web/public/next/assets/{SeatSelector-CT92PqM_.js → SeatSelector-DpvvbjNm.js} +2 -2
  158. package/dist/core/web/public/next/assets/{SeatSelector-CT92PqM_.js.map → SeatSelector-DpvvbjNm.js.map} +1 -1
  159. package/dist/core/web/public/next/assets/{Segmented-BMvq-FfD.js → Segmented-BL40udoO.js} +2 -2
  160. package/dist/core/web/public/next/assets/{Segmented-BMvq-FfD.js.map → Segmented-BL40udoO.js.map} +1 -1
  161. package/dist/core/web/public/next/assets/{Select-DkdeoSQn.js → Select-FWLnAw_j.js} +2 -2
  162. package/dist/core/web/public/next/assets/{Select-DkdeoSQn.js.map → Select-FWLnAw_j.js.map} +1 -1
  163. package/dist/core/web/public/next/assets/{SessionInsightChip-CwlakUYU.js → SessionInsightChip-CWye87Ju.js} +2 -2
  164. package/dist/core/web/public/next/assets/{SessionInsightChip-CwlakUYU.js.map → SessionInsightChip-CWye87Ju.js.map} +1 -1
  165. package/dist/core/web/public/next/assets/{SessionSearch-DFByh2NZ.js → SessionSearch-YvCHFUuN.js} +2 -2
  166. package/dist/core/web/public/next/assets/{SessionSearch-DFByh2NZ.js.map → SessionSearch-YvCHFUuN.js.map} +1 -1
  167. package/dist/core/web/public/next/assets/{SettingsSection-DgSaHFK4.js → SettingsSection-Dr18upeE.js} +2 -2
  168. package/dist/core/web/public/next/assets/{SettingsSection-DgSaHFK4.js.map → SettingsSection-Dr18upeE.js.map} +1 -1
  169. package/dist/core/web/public/next/assets/{Sheet-C7APkGPt.js → Sheet-DZKcQXQg.js} +2 -2
  170. package/dist/core/web/public/next/assets/{Sheet-C7APkGPt.js.map → Sheet-DZKcQXQg.js.map} +1 -1
  171. package/dist/core/web/public/next/assets/{ShortcutsOverlay-ZPyXUS_I.js → ShortcutsOverlay-BpDimdPq.js} +2 -2
  172. package/dist/core/web/public/next/assets/{ShortcutsOverlay-ZPyXUS_I.js.map → ShortcutsOverlay-BpDimdPq.js.map} +1 -1
  173. package/dist/core/web/public/next/assets/{Sidebar-Chsgazmk.js → Sidebar-BoBzBEFX.js} +3 -3
  174. package/dist/core/web/public/next/assets/{Sidebar-Chsgazmk.js.map → Sidebar-BoBzBEFX.js.map} +1 -1
  175. package/dist/core/web/public/next/assets/{Slider-B0kjW7cd.js → Slider-DUMo9HDD.js} +2 -2
  176. package/dist/core/web/public/next/assets/{Slider-B0kjW7cd.js.map → Slider-DUMo9HDD.js.map} +1 -1
  177. package/dist/core/web/public/next/assets/{StatusBadge-wv4e6f8b.js → StatusBadge-BwnBNFQr.js} +2 -2
  178. package/dist/core/web/public/next/assets/{StatusBadge-wv4e6f8b.js.map → StatusBadge-BwnBNFQr.js.map} +1 -1
  179. package/dist/core/web/public/next/assets/{StepBand-Db8WPw8J.js → StepBand-PDXMIlRk.js} +2 -2
  180. package/dist/core/web/public/next/assets/{StepBand-Db8WPw8J.js.map → StepBand-PDXMIlRk.js.map} +1 -1
  181. package/dist/core/web/public/next/assets/{Surface-BkDrQ4t3.js → Surface-B3TZVoER.js} +2 -2
  182. package/dist/core/web/public/next/assets/{Surface-BkDrQ4t3.js.map → Surface-B3TZVoER.js.map} +1 -1
  183. package/dist/core/web/public/next/assets/{Swimlane-Dcve56cP.js → Swimlane-DR4OgON_.js} +2 -2
  184. package/dist/core/web/public/next/assets/{Swimlane-Dcve56cP.js.map → Swimlane-DR4OgON_.js.map} +1 -1
  185. package/dist/core/web/public/next/assets/{Switch-DamlpSMY.js → Switch-CcR5Llk5.js} +2 -2
  186. package/dist/core/web/public/next/assets/{Switch-DamlpSMY.js.map → Switch-CcR5Llk5.js.map} +1 -1
  187. package/dist/core/web/public/next/assets/{Tag-Cs4tudBN.js → Tag-_-K1h7Hk.js} +2 -2
  188. package/dist/core/web/public/next/assets/{Tag-Cs4tudBN.js.map → Tag-_-K1h7Hk.js.map} +1 -1
  189. package/dist/core/web/public/next/assets/{TerminalPane-BDkKFych.js → TerminalPane-_1aH4ndN.js} +2 -2
  190. package/dist/core/web/public/next/assets/{TerminalPane-BDkKFych.js.map → TerminalPane-_1aH4ndN.js.map} +1 -1
  191. package/dist/core/web/public/next/assets/{UniverseConsoleApp-BE72VyBL.js → UniverseConsoleApp-BUsq-inZ.js} +2 -2
  192. package/dist/core/web/public/next/assets/{UniverseConsoleApp-BE72VyBL.js.map → UniverseConsoleApp-BUsq-inZ.js.map} +1 -1
  193. package/dist/core/web/public/next/assets/{UniverseView-BbmYY2P4.js → UniverseView-Dogy_dsB.js} +2 -2
  194. package/dist/core/web/public/next/assets/{UniverseView-BbmYY2P4.js.map → UniverseView-Dogy_dsB.js.map} +1 -1
  195. package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js +2 -0
  196. package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js.map +1 -0
  197. package/dist/core/web/public/next/assets/VerseConsoleApp-Cxqr-3qc.css +1 -0
  198. package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js +3 -0
  199. package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js.map +1 -0
  200. package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js +10 -0
  201. package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js.map +1 -0
  202. package/dist/core/web/public/next/assets/{actions-BnjZy8a-.js → actions-s2lfm_5k.js} +2 -2
  203. package/dist/core/web/public/next/assets/{actions-BnjZy8a-.js.map → actions-s2lfm_5k.js.map} +1 -1
  204. package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +2 -0
  205. package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +1 -0
  206. package/dist/core/web/public/next/assets/{budget-queries-Cp6vO7FH.js → budget-queries-wUshcovN.js} +2 -2
  207. package/dist/core/web/public/next/assets/{budget-queries-Cp6vO7FH.js.map → budget-queries-wUshcovN.js.map} +1 -1
  208. package/dist/core/web/public/next/assets/{capacity-strip-model-9-Yb211u.js → capacity-strip-model-Bj_9ztzs.js} +2 -2
  209. package/dist/core/web/public/next/assets/{capacity-strip-model-9-Yb211u.js.map → capacity-strip-model-Bj_9ztzs.js.map} +1 -1
  210. package/dist/core/web/public/next/assets/{charts-BmbKhjqw.js → charts-CMSgAUKn.js} +2 -2
  211. package/dist/core/web/public/next/assets/{charts-BmbKhjqw.js.map → charts-CMSgAUKn.js.map} +1 -1
  212. package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +1 -0
  213. package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js +2 -0
  214. package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js.map +1 -0
  215. package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js +2 -0
  216. package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js.map +1 -0
  217. package/dist/core/web/public/next/assets/{command-bus-DHJJLWh8.js → command-bus-DqimKCUY.js} +2 -2
  218. package/dist/core/web/public/next/assets/{command-bus-DHJJLWh8.js.map → command-bus-DqimKCUY.js.map} +1 -1
  219. package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js +2 -0
  220. package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js.map +1 -0
  221. package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js → composer-keys-DBRymxQn.js} +2 -2
  222. package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js.map → composer-keys-DBRymxQn.js.map} +1 -1
  223. package/dist/core/web/public/next/assets/{context-model-DeJ28uSZ.js → context-model-Dwd49-dp.js} +2 -2
  224. package/dist/core/web/public/next/assets/{context-model-DeJ28uSZ.js.map → context-model-Dwd49-dp.js.map} +1 -1
  225. package/dist/core/web/public/next/assets/{context-model-BGznyHNQ.js → context-model-MT17V86_.js} +2 -2
  226. package/dist/core/web/public/next/assets/{context-model-BGznyHNQ.js.map → context-model-MT17V86_.js.map} +1 -1
  227. package/dist/core/web/public/next/assets/{context-queries-_mEgy4eg.js → context-queries-xVKIeynP.js} +2 -2
  228. package/dist/core/web/public/next/assets/{context-queries-_mEgy4eg.js.map → context-queries-xVKIeynP.js.map} +1 -1
  229. package/dist/core/web/public/next/assets/{control-queries-C4TG8blN.js → control-queries-DOZR-D8G.js} +2 -2
  230. package/dist/core/web/public/next/assets/{control-queries-C4TG8blN.js.map → control-queries-DOZR-D8G.js.map} +1 -1
  231. package/dist/core/web/public/next/assets/{dock-icons-BB7Fi6hT.js → dock-icons-8EtARwUm.js} +2 -2
  232. package/dist/core/web/public/next/assets/{dock-icons-BB7Fi6hT.js.map → dock-icons-8EtARwUm.js.map} +1 -1
  233. package/dist/core/web/public/next/assets/dock-panes-UKS-mXhr.js +2 -0
  234. package/dist/core/web/public/next/assets/{dock-panes-mnIwSpRp.js.map → dock-panes-UKS-mXhr.js.map} +1 -1
  235. package/dist/core/web/public/next/assets/{dock-store-CdHQRP8s.js → dock-store-BA1cHOYA.js} +2 -2
  236. package/dist/core/web/public/next/assets/{dock-store-CdHQRP8s.js.map → dock-store-BA1cHOYA.js.map} +1 -1
  237. package/dist/core/web/public/next/assets/{fleet-model-B4FKC7fH.js → fleet-model-CNe8Wh-s.js} +2 -2
  238. package/dist/core/web/public/next/assets/{fleet-model-B4FKC7fH.js.map → fleet-model-CNe8Wh-s.js.map} +1 -1
  239. package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js +2 -0
  240. package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js.map +1 -0
  241. package/dist/core/web/public/next/assets/{format-lW58rL2y.js → format-B8DAVcn2.js} +2 -2
  242. package/dist/core/web/public/next/assets/{format-lW58rL2y.js.map → format-B8DAVcn2.js.map} +1 -1
  243. package/dist/core/web/public/next/assets/{git-model-DaGw1SzS.js → git-model-CivuBY_D.js} +2 -2
  244. package/dist/core/web/public/next/assets/{git-model-DaGw1SzS.js.map → git-model-CivuBY_D.js.map} +1 -1
  245. package/dist/core/web/public/next/assets/{global-DG1fmn4y.js → global-Di2PUgj4.js} +2 -2
  246. package/dist/core/web/public/next/assets/{global-DG1fmn4y.js.map → global-Di2PUgj4.js.map} +1 -1
  247. package/dist/core/web/public/next/assets/{guarded-action--lguLXfz.js → guarded-action-CvOHcqyH.js} +2 -2
  248. package/dist/core/web/public/next/assets/{guarded-action--lguLXfz.js.map → guarded-action-CvOHcqyH.js.map} +1 -1
  249. package/dist/core/web/public/next/assets/{icons-YPgbel-I.js → icons-B_yuAgdN.js} +2 -2
  250. package/dist/core/web/public/next/assets/{icons-YPgbel-I.js.map → icons-B_yuAgdN.js.map} +1 -1
  251. package/dist/core/web/public/next/assets/{index-Dk8R-3a7.js → index-oAAq8XJa.js} +3 -3
  252. package/dist/core/web/public/next/assets/{index-Dk8R-3a7.js.map → index-oAAq8XJa.js.map} +1 -1
  253. package/dist/core/web/public/next/assets/{live-model-44wEU6I8.js → live-model-DCw_IFRI.js} +2 -2
  254. package/dist/core/web/public/next/assets/{live-model-44wEU6I8.js.map → live-model-DCw_IFRI.js.map} +1 -1
  255. package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +2 -0
  256. package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +1 -0
  257. package/dist/core/web/public/next/assets/{mind.module-BOABBdi_.js → mind.module-vnuJcwvD.js} +2 -2
  258. package/dist/core/web/public/next/assets/{mind.module-BOABBdi_.js.map → mind.module-vnuJcwvD.js.map} +1 -1
  259. package/dist/core/web/public/next/assets/{mutations-DjXM3IDg.js → mutations-Dpsql5t7.js} +2 -2
  260. package/dist/core/web/public/next/assets/{mutations-DjXM3IDg.js.map → mutations-Dpsql5t7.js.map} +1 -1
  261. package/dist/core/web/public/next/assets/{overnight-queries-Be_eossf.js → overnight-queries-X-44Gsw5.js} +2 -2
  262. package/dist/core/web/public/next/assets/{overnight-queries-Be_eossf.js.map → overnight-queries-X-44Gsw5.js.map} +1 -1
  263. package/dist/core/web/public/next/assets/primitives-BDIcUvob.js +1 -0
  264. package/dist/core/web/public/next/assets/{queries-CYEVCq5r.js → queries-BA4rNGD-.js} +2 -2
  265. package/dist/core/web/public/next/assets/{queries-CYEVCq5r.js.map → queries-BA4rNGD-.js.map} +1 -1
  266. package/dist/core/web/public/next/assets/{reasoning-pref-a_ZP6GzU.js → reasoning-pref-B9-DJUXP.js} +2 -2
  267. package/dist/core/web/public/next/assets/{reasoning-pref-a_ZP6GzU.js.map → reasoning-pref-B9-DJUXP.js.map} +1 -1
  268. package/dist/core/web/public/next/assets/{seat-subscription-CRigL-GE.js → seat-subscription-CH6fW4fJ.js} +2 -2
  269. package/dist/core/web/public/next/assets/{seat-subscription-CRigL-GE.js.map → seat-subscription-CH6fW4fJ.js.map} +1 -1
  270. package/dist/core/web/public/next/assets/{section-visibility-u7q-Q9AA.js → section-visibility-qFqc_d4Z.js} +2 -2
  271. package/dist/core/web/public/next/assets/{section-visibility-u7q-Q9AA.js.map → section-visibility-qFqc_d4Z.js.map} +1 -1
  272. package/dist/core/web/public/next/assets/{sidebar-model-i4WRuQ6j.js → sidebar-model-M1GaQU5l.js} +2 -2
  273. package/dist/core/web/public/next/assets/{sidebar-model-i4WRuQ6j.js.map → sidebar-model-M1GaQU5l.js.map} +1 -1
  274. package/dist/core/web/public/next/assets/{slots-CV9ZuLQU.js → slots-Ds9ZIqUL.js} +3 -3
  275. package/dist/core/web/public/next/assets/{slots-CV9ZuLQU.js.map → slots-Ds9ZIqUL.js.map} +1 -1
  276. package/dist/core/web/public/next/assets/{surface-data-DLvmUX9z.js → surface-data-J52iIGMD.js} +2 -2
  277. package/dist/core/web/public/next/assets/{surface-data-DLvmUX9z.js.map → surface-data-J52iIGMD.js.map} +1 -1
  278. package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js +2 -0
  279. package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js.map +1 -0
  280. package/dist/core/web/public/next/assets/{tasks-model-DWs5u9RO.js → tasks-model-ent8f0jZ.js} +2 -2
  281. package/dist/core/web/public/next/assets/{tasks-model-DWs5u9RO.js.map → tasks-model-ent8f0jZ.js.map} +1 -1
  282. package/dist/core/web/public/next/assets/{terminal-icons-Ct9cZsEK.js → terminal-icons-DJTK7QpR.js} +2 -2
  283. package/dist/core/web/public/next/assets/{terminal-icons-Ct9cZsEK.js.map → terminal-icons-DJTK7QpR.js.map} +1 -1
  284. package/dist/core/web/public/next/assets/types-D5XOdyw8.js +2 -0
  285. package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -0
  286. package/dist/core/web/public/next/assets/{usage-queries-CI_y9oWZ.js → usage-queries-Bn8ccqyN.js} +2 -2
  287. package/dist/core/web/public/next/assets/{usage-queries-CI_y9oWZ.js.map → usage-queries-Bn8ccqyN.js.map} +1 -1
  288. package/dist/core/web/public/next/assets/{use-guarded-action-DVCtLzSo.js → use-guarded-action-C2HlSzkz.js} +2 -2
  289. package/dist/core/web/public/next/assets/{use-guarded-action-DVCtLzSo.js.map → use-guarded-action-C2HlSzkz.js.map} +1 -1
  290. package/dist/core/web/public/next/assets/{use-ticker-C3LQ2IYs.js → use-ticker-BNc1H4ZC.js} +2 -2
  291. package/dist/core/web/public/next/assets/{use-ticker-C3LQ2IYs.js.map → use-ticker-BNc1H4ZC.js.map} +1 -1
  292. package/dist/core/web/public/next/assets/{use-token-gate-B5gOFkeH.js → use-token-gate-B3IJL6bf.js} +2 -2
  293. package/dist/core/web/public/next/assets/{use-token-gate-B5gOFkeH.js.map → use-token-gate-B3IJL6bf.js.map} +1 -1
  294. package/dist/core/web/public/next/assets/{useActivity-C3R1Sudh.js → useActivity-Bk3XgXjL.js} +2 -2
  295. package/dist/core/web/public/next/assets/{useActivity-C3R1Sudh.js.map → useActivity-Bk3XgXjL.js.map} +1 -1
  296. package/dist/core/web/public/next/assets/{useChartWidth-0APW0BR3.js → useChartWidth-lZ9PrQn0.js} +2 -2
  297. package/dist/core/web/public/next/assets/{useChartWidth-0APW0BR3.js.map → useChartWidth-lZ9PrQn0.js.map} +1 -1
  298. package/dist/core/web/public/next/assets/{useSeatsRefresh-BN8bso-n.js → useSeatsRefresh-CG4jczeL.js} +2 -2
  299. package/dist/core/web/public/next/assets/{useSeatsRefresh-BN8bso-n.js.map → useSeatsRefresh-CG4jczeL.js.map} +1 -1
  300. package/dist/core/web/public/next/assets/{verse-model-yHPwjf-7.js → verse-model-D7NZQFAR.js} +2 -2
  301. package/dist/core/web/public/next/assets/{verse-model-yHPwjf-7.js.map → verse-model-D7NZQFAR.js.map} +1 -1
  302. package/dist/core/web/public/next/assets/{verse-queries-2PxoBISm.js → verse-queries-DvIJcn6Z.js} +2 -2
  303. package/dist/core/web/public/next/assets/{verse-queries-2PxoBISm.js.map → verse-queries-DvIJcn6Z.js.map} +1 -1
  304. package/dist/core/web/public/next/assets/{verse-store-DHTuZpYa.js → verse-store-DjBWj04q.js} +2 -2
  305. package/dist/core/web/public/next/assets/{verse-store-DHTuZpYa.js.map → verse-store-DjBWj04q.js.map} +1 -1
  306. package/dist/core/web/public/next/assets/verse-ui-store-zafyzXKD.js +3 -0
  307. package/dist/core/web/public/next/assets/{verse-ui-store-Dy4HuDBV.js.map → verse-ui-store-zafyzXKD.js.map} +1 -1
  308. package/dist/core/web/public/next/assets/{viewport-DDoJ_xVq.js → viewport-BEqGUoTA.js} +2 -2
  309. package/dist/core/web/public/next/assets/{viewport-DDoJ_xVq.js.map → viewport-BEqGUoTA.js.map} +1 -1
  310. package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js +3 -0
  311. package/dist/core/web/public/next/assets/{warmup-BsL2LdR-.js.map → warmup-BR6pxAKs.js.map} +1 -1
  312. package/dist/core/web/public/next/assets/{workspace-model-Dd3LmIym.js → workspace-model-D_tWD5Wt.js} +2 -2
  313. package/dist/core/web/public/next/assets/{workspace-model-Dd3LmIym.js.map → workspace-model-D_tWD5Wt.js.map} +1 -1
  314. package/dist/core/web/public/next/index.html +1 -1
  315. package/dist/release-dependency-inventory.json +1 -1
  316. package/package.json +1 -1
  317. package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js +0 -2
  318. package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js.map +0 -1
  319. package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js +0 -2
  320. package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js.map +0 -1
  321. package/dist/core/web/public/next/assets/AutonomySection-BF5UCsMv.js +0 -2
  322. package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js +0 -2
  323. package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js.map +0 -1
  324. package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js +0 -3
  325. package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js.map +0 -1
  326. package/dist/core/web/public/next/assets/McpSection-CvcYu1X_.js +0 -2
  327. package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js +0 -2
  328. package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js +0 -2
  329. package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js.map +0 -1
  330. package/dist/core/web/public/next/assets/VerseConsoleApp-CXJWDiEM.css +0 -1
  331. package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js +0 -3
  332. package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js.map +0 -1
  333. package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js +0 -10
  334. package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js.map +0 -1
  335. package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js +0 -2
  336. package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js.map +0 -1
  337. package/dist/core/web/public/next/assets/dock-panes-mnIwSpRp.js +0 -2
  338. package/dist/core/web/public/next/assets/primitives-Dl3SEQvh.js +0 -1
  339. package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js +0 -2
  340. package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js.map +0 -1
  341. package/dist/core/web/public/next/assets/verse-ui-store-Dy4HuDBV.js +0 -3
  342. package/dist/core/web/public/next/assets/warmup-BsL2LdR-.js +0 -3
@@ -1,2 +0,0 @@
1
- var e=`ashlr:command`,t={"open-settings":`section.settings`,"toggle-theme":`appearance.toggle-theme`,"open-needs-you":`needs-you.open`,"new-chat":`chat.new`,"focus-composer":`app.summon`},n=/^open-session:([A-Za-z0-9._-]{1,128})$/;function r(e){if(typeof e!=`string`)return null;if(Object.prototype.hasOwnProperty.call(t,e)){let n=e;return{kind:`command`,name:n,commandId:t[n]}}let r=n.exec(e);return r?{kind:`open-session`,sessionId:r[1]}:null}var i=[{id:`needs-you`,label:`Needs you`},{id:`chats`,label:`Chats`},{id:`actions`,label:`Actions`},{id:`go-to`,label:`Go to`},{id:`seats-apps`,label:`Seats & Apps`},{id:`projects`,label:`Projects`}],a={">":`actions`,"#":`chats`},o=[`Surfaces`,`Navigation`,`Chat`,`Dock`,`Composer`,`Needs you`,`Charts`,`App`],s={confirm:{title:`Stop every running chat?`,body:`Each running turn is cancelled. Queued follow-ups are held, not sent.`,confirmLabel:`Stop chats`,destructive:!0},token:!0},c={confirm:{title:`Stop the fleet?`,body:`Autonomous work halts within one tick and stays stopped until you resume it. Chats keep running.`,confirmLabel:`Stop fleet`,destructive:!0},token:!0},l=(e,t,n)=>({id:`surface.${t}`,title:`Go to ${n}`,scope:`global`,keys:[{key:String(e),mod:!0}],group:`go-to`,section:`Surfaces`,keywords:[n.toLowerCase()]}),u=[l(1,`command`,`Command`),l(2,`fleet`,`Fleet`),l(3,`growth`,`Growth`),l(4,`mind`,`Mind`),l(5,`chat`,`Chat`),{id:`section.settings`,title:`Open Settings`,scope:`global`,keys:[{key:`,`,mod:!0}],group:`go-to`,section:`Surfaces`,keywords:[`preferences`,`appearance`],native:{kind:`menu`,desktopCommand:`open-settings`,accelerator:`CmdOrCtrl+,`}},{id:`section.apps`,title:`Open Apps & Accounts`,scope:`global`,keys:[],group:`go-to`,section:`Surfaces`,keywords:[`mcp`,`accounts`,`seats`,`integrations`,`ollama`]},{id:`section.usage`,title:`Open Usage`,scope:`global`,keys:[],group:`go-to`,section:`Surfaces`,keywords:[`capacity`,`spend`,`limits`]},{id:`palette.open`,title:`Command palette`,scope:`global`,keys:[{key:`k`,mod:!0}],group:null,section:`Navigation`},{id:`needs-you.open`,title:`Open Needs you`,scope:`global`,keys:[{key:`j`,mod:!0}],group:`actions`,section:`Navigation`,keywords:[`approvals`,`inbox`,`triage`]},{id:`shortcuts.open`,title:`Keyboard shortcuts`,scope:`global`,keys:[{key:`/`,mod:!0}],group:`actions`,section:`Navigation`,keywords:[`keys`,`help`]},{id:`history.back`,title:`Back`,scope:`global`,keys:[{key:`[`,mod:!0}],group:null,section:`Navigation`,note:`through surfaces and chats`},{id:`history.forward`,title:`Forward`,scope:`global`,keys:[{key:`]`,mod:!0}],group:null,section:`Navigation`,note:`through surfaces and chats`},{id:`chat.recent-next`,title:`Next recent chat`,scope:`global`,keys:[{key:`tab`,ctrl:!0}],group:null,section:`Navigation`},{id:`chat.recent-prev`,title:`Previous recent chat`,scope:`global`,keys:[{key:`tab`,ctrl:!0,shift:!0}],group:null,section:`Navigation`},{id:`rail.toggle-labels`,title:`Show or hide rail labels`,scope:`global`,keys:[{key:`\\`,mod:!0,shift:!0}],group:`actions`,section:`Navigation`},{id:`chat.new`,title:`New chat`,scope:`global`,keys:[{key:`n`,mod:!0}],group:`actions`,section:`Chat`},{id:`chat.new-on`,title:`New chat on…`,scope:`global`,keys:[],group:`actions`,section:`Chat`,argument:{kind:`seat`,prompt:`Seat`},keywords:[`seat`,`account`,`engine`]},{id:`chat.sidebar`,title:`Show or hide the chat list`,scope:`chat`,keys:[{key:`b`,mod:!0}],group:`actions`,section:`Chat`},{id:`chat.find`,title:`Find in chat`,scope:`chat`,keys:[{key:`f`,mod:!0}],group:`actions`,section:`Chat`,keywords:[`search`]},{id:`chat.turn-prev`,title:`Previous turn`,scope:`chat`,keys:[{key:`arrowup`,alt:!0}],group:null,section:`Chat`},{id:`chat.turn-next`,title:`Next turn`,scope:`chat`,keys:[{key:`arrowdown`,alt:!0}],group:null,section:`Chat`},{id:`chats.stop-all`,title:`Stop running chats…`,scope:`global`,keys:[],group:`actions`,section:`Chat`,guard:s,keywords:[`cancel`,`halt`]},{id:`git.create-pr`,title:`Create pull request…`,scope:`chat`,keys:[],group:`actions`,section:`Chat`,keywords:[`pr`,`github`,`git`,`open pull request`]},{id:`git.merge-pr`,title:`Merge pull request…`,scope:`chat`,keys:[],group:`actions`,section:`Chat`,keywords:[`pr`,`github`,`git`,`land`,`ship`]},{id:`dock.toggle`,title:`Show or hide the dock`,scope:`chat`,keys:[{key:`\\`,mod:!0}],group:`actions`,section:`Dock`},{id:`dock.terminal`,title:`Terminal`,scope:`chat`,keys:[{key:"`",ctrl:!0}],group:`actions`,section:`Dock`,keywords:[`shell`,`console`]},{id:`dock.terminal-new`,title:`New terminal tab`,scope:`chat`,keys:[{key:"`",ctrl:!0,shift:!0}],group:`actions`,section:`Dock`},{id:`dock.preview`,title:`Preview`,scope:`chat`,keys:[{key:`b`,mod:!0,shift:!0}],group:`actions`,section:`Dock`,keywords:[`browser`,`dev server`]},{id:`dock.diff`,title:`Review changes`,scope:`chat`,keys:[{key:`d`,mod:!0,shift:!0}],group:`actions`,section:`Dock`,keywords:[`diff`,`git`]},{id:`composer.permission`,title:`Permission mode…`,scope:`chat`,keys:[{key:`m`,mod:!0,shift:!0}],group:`actions`,section:`Composer`,keywords:[`plan`,`bypass`,`auto`]},{id:`composer.model`,title:`Model…`,scope:`chat`,keys:[{key:`i`,mod:!0,shift:!0}],group:`actions`,section:`Composer`},{id:`composer.effort`,title:`Effort…`,scope:`chat`,keys:[{key:`e`,mod:!0,shift:!0}],group:`actions`,section:`Composer`,keywords:[`reasoning`,`thinking`]},{id:`composer.attach`,title:`Attach files…`,scope:`chat`,keys:[{key:`u`,mod:!0}],group:`actions`,section:`Composer`,keywords:[`upload`,`image`]},{id:`composer.send`,title:`Send`,scope:`composer`,keys:[{key:`enter`}],group:null,section:`Composer`,note:`queues while a turn runs (up to 3)`},{id:`composer.stop-and-send`,title:`Stop and send`,scope:`composer`,keys:[{key:`enter`,mod:!0,shift:!0}],group:null,section:`Composer`},{id:`composer.stop`,title:`Stop the running turn`,scope:`composer`,keys:[{key:`escape`}],group:null,section:`Composer`,note:`only from an empty composer with no overlay open`},{id:`drawer.next`,title:`Next item`,scope:`drawer`,keys:[{key:`j`}],group:null,section:`Needs you`},{id:`drawer.prev`,title:`Previous item`,scope:`drawer`,keys:[{key:`k`}],group:null,section:`Needs you`},{id:`drawer.open`,title:`Open item`,scope:`drawer`,keys:[{key:`enter`}],group:null,section:`Needs you`},{id:`drawer.approve`,title:`Approve`,scope:`drawer`,keys:[{key:`a`}],group:null,section:`Needs you`,note:`confirms, then asks for the token`},{id:`drawer.reject`,title:`Reject`,scope:`drawer`,keys:[{key:`r`}],group:null,section:`Needs you`,note:`confirms, then asks for the token`},{id:`drawer.veto`,title:`Veto`,scope:`drawer`,keys:[{key:`v`}],group:null,section:`Needs you`,note:`confirms, then asks for the token`},{id:`drawer.done`,title:`Mark done`,scope:`drawer`,keys:[{key:`e`}],group:null,section:`Needs you`},{id:`drawer.split-prev`,title:`Previous split`,scope:`drawer`,keys:[{key:`h`}],group:null,section:`Needs you`},{id:`drawer.split-next`,title:`Next split`,scope:`drawer`,keys:[{key:`l`}],group:null,section:`Needs you`},{id:`chart.table`,title:`Show as a table`,scope:`chart`,keys:[{key:`t`}],group:null,section:`Charts`,note:`when a chart card has focus`},{id:`appearance.toggle-theme`,title:`Toggle light / dark`,scope:`global`,keys:[{key:`l`,mod:!0,shift:!0}],group:`actions`,section:`App`,keywords:[`theme`,`dark mode`],native:{kind:`menu`,desktopCommand:`toggle-theme`,accelerator:`Shift+CmdOrCtrl+L`}},{id:`app.summon`,title:`Show Verse and focus the composer`,scope:`global`,keys:[{key:`space`,ctrl:!0,alt:!0}],group:null,section:`App`,note:`system-wide; turn on in Settings ▸ Desktop`,native:{kind:`global-hotkey`,accelerator:`Control+Alt+Space`}},{id:`fleet.stop`,title:`Stop the fleet…`,scope:`global`,keys:[],group:`actions`,section:`App`,guard:c,keywords:[`kill`,`halt`,`autonomy`]}],d=new Map(u.map(e=>[e.id,e]));function f(e){return d.get(e)??null}function p(e){return u.filter(t=>t.group===e)}function m(){let e=u.filter(e=>e.keys.length>0);return o.map(t=>({section:t,commands:e.filter(e=>e.section===t)})).filter(e=>e.commands.length>0)}function h(){if(typeof navigator>`u`)return`mac`;let e=navigator,t=e.userAgentData?.platform??e.platform??``;return/mac|iphone|ipad|ipod/i.test(t)?`mac`:`other`}var g={Backslash:`\\`,Backquote:"`",BracketLeft:`[`,BracketRight:`]`,Slash:`/`,Comma:`,`,Period:`.`,Semicolon:`;`,Quote:`'`,Minus:`-`,Equal:`=`,Space:`space`},_={" ":`space`,spacebar:`space`,esc:`escape`,return:`enter`,up:`arrowup`,down:`arrowdown`,left:`arrowleft`,right:`arrowright`};function v(e){let t=e.key??``;if(/^[a-z]$/i.test(t))return t.toLowerCase();let n=e.code??``;if(/^Digit[0-9]$/.test(n))return n.slice(5);if(g[n])return g[n];if(/^Key[A-Z]$/.test(n))return n.slice(3).toLowerCase();let r=t.toLowerCase();return _[r]??r}function y(e,t,n=h()){if(n===`mac`){if(!!t.mod!==e.metaKey||!!t.ctrl!==e.ctrlKey)return!1}else if(e.metaKey||!!(t.mod||t.ctrl)!==e.ctrlKey)return!1;return!!t.shift!==e.shiftKey||!!t.alt!==e.altKey?!1:v(e)===t.key}function b(e,t,n=h()){for(let r of t)for(let t of u)if(t.scope===r&&t.native?.kind!==`global-hotkey`&&t.keys.some(t=>y(e,t,n)))return t;return null}var x={enter:`↩`,escape:`Esc`,tab:`⇥`,space:`Space`,arrowup:`↑`,arrowdown:`↓`,arrowleft:`←`,arrowright:`→`,backspace:`⌫`},S={enter:`Enter`,escape:`Esc`,tab:`Tab`,space:`Space`,arrowup:`↑`,arrowdown:`↓`,arrowleft:`←`,arrowright:`→`,backspace:`Backspace`};function C(e,t=h()){let n=e.key.length===1?e.key.toUpperCase():(t===`mac`?x:S)[e.key]??e.key;return t===`mac`?`${e.ctrl?`⌃`:``}${e.alt?`⌥`:``}${e.shift?`⇧`:``}${e.mod?`⌘`:``}${n}`:[e.mod||e.ctrl?`Ctrl`:``,e.alt?`Alt`:``,e.shift?`Shift`:``,n].filter(Boolean).join(`+`)}export{h as a,C as c,r as d,m as f,y as i,b as l,a as n,v as o,e as r,f as s,i as t,p as u};
2
- //# sourceMappingURL=command-catalog-s3W6Z96D.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-catalog-s3W6Z96D.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/command-catalog.ts"],"sourcesContent":["/**\n * routes/verse/shell/command-catalog.ts — every workbench command and its\n * keys, in ONE table (unit C0; SPEC-310C §1).\n *\n * The ⌘K palette (C1), the shortcuts overlay (⌘/), the native menu bridge\n * (C8), the drawer and every surface's key handler read this table; the key\n * test reads it too, which is how \"no two commands share a key\" and \"no key\n * the native menu already owns\" stay true as units add commands. A key that\n * is not here does not exist.\n *\n * Pure data plus pure helpers — no React, no DOM beyond reading a\n * KeyboardEvent-shaped object — so the palette can import it without pulling\n * a surface into its chunk.\n *\n * Adding a command: one entry below (a change request to C0 when another\n * unit needs it). The handler lives with the unit that owns the behaviour and\n * dispatches on the command `id`.\n */\n\n// ===========================================================================\n// Scopes — where a key is live\n// ===========================================================================\n\n/**\n * global anywhere in the workbench (except inside the palette, which\n * owns every key while open, and native text editing keys)\n * chat the Chat surface has focus (transcript, sidebar, dock)\n * composer the composer's text box has focus\n * drawer the Needs-you drawer list has focus (bare letters are safe\n * there: nothing in it takes text)\n * chart a chart card has focus\n */\nexport const COMMAND_SCOPES = ['global', 'chat', 'composer', 'drawer', 'chart'] as const;\nexport type CommandScope = (typeof COMMAND_SCOPES)[number];\n\n/**\n * The scopes live AT THE SAME TIME as each scope (itself included). A key\n * must be unique across every such set — the key test checks exactly this —\n * while two scopes that are never live together (the drawer's bare `Enter`\n * and the composer's) may reuse a key.\n */\nexport const SCOPE_LAYERS: Readonly<Record<CommandScope, readonly CommandScope[]>> = {\n global: ['global'],\n chat: ['chat', 'global'],\n composer: ['composer', 'chat', 'global'],\n drawer: ['drawer', 'global'],\n chart: ['chart', 'global'],\n};\n\n// ===========================================================================\n// Keys\n// ===========================================================================\n\n/**\n * One key chord. `key` is the UNSHIFTED US-layout name: a lowercase letter or\n * digit, a punctuation character, or one of the named keys below. `mod` is ⌘\n * on macOS and Ctrl elsewhere (\"CmdOrCtrl\"); `ctrl` is the literal ⌃ key.\n */\nexport interface KeyChord {\n key: string;\n mod?: true;\n ctrl?: true;\n shift?: true;\n alt?: true;\n}\n\nexport const NAMED_KEYS = ['enter', 'escape', 'tab', 'space', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright', 'backspace'] as const;\n\n/**\n * Keys the page never binds, because macOS or the desktop shell answers them\n * first: the native menu's own accelerators live in app_menu.rs (the key test\n * parses that file), these are the system's.\n */\nexport const SYSTEM_RESERVED_CHORDS: readonly KeyChord[] = [\n { key: 'space', mod: true }, // Spotlight\n { key: 'space', ctrl: true }, // input sources\n { key: 'tab', mod: true }, // app switcher\n { key: 'tab', mod: true, shift: true },\n { key: '`', mod: true }, // cycle this app's windows\n { key: '3', mod: true, shift: true }, // screenshots\n { key: '4', mod: true, shift: true },\n { key: '5', mod: true, shift: true },\n];\n\n/**\n * How a key reaches the page when a native layer is involved.\n * menu the desktop menu owns the accelerator and forwards the\n * command (via `ashlr:desktop-command`); the page's own\n * handler only fires in a plain browser.\n * global-hotkey registered system-wide by the desktop app (C8); the page\n * never binds it — it is listed for the shortcuts overlay.\n */\nexport type NativeBinding =\n | { kind: 'menu'; desktopCommand: DesktopCommandName; accelerator: string }\n | { kind: 'global-hotkey'; accelerator: string };\n\n// ===========================================================================\n// The window event (units that are not on the command bus)\n// ===========================================================================\n\n/**\n * The window event the palette (C1) and the native menu bridge dispatch to\n * run a catalog command on a surface that listens for it instead of\n * registering on the command bus:\n * window.dispatchEvent(new CustomEvent(WORKBENCH_COMMAND_EVENT, { detail: { id } }))\n * The composer (C3) answers the `composer.*` ids it implements.\n *\n * It lives HERE, beside the ids it carries, so the shell (run-command.ts)\n * does not have to import a composer module to name its own event —\n * composer/composer-keys.ts re-exports it for its existing importers.\n */\nexport const WORKBENCH_COMMAND_EVENT = 'ashlr:command';\n\n// ===========================================================================\n// Desktop commands (C8 → page)\n// ===========================================================================\n\n/**\n * What the desktop shell may send the page (`ashlr:desktop-command`), and the\n * catalog command each one runs. C8 dispatches these from the menu bar, the\n * tray, a clicked notification (focus regained within 60 s) and the global\n * hotkey; C1 runs them. `open-session:<id>` carries a session id.\n */\nexport const DESKTOP_COMMAND_NAMES = ['open-settings', 'toggle-theme', 'open-needs-you', 'new-chat', 'focus-composer'] as const;\n// Its own literal list (not `keyof typeof DESKTOP_COMMANDS`): NativeBinding\n// names it, WORKBENCH_COMMANDS uses NativeBinding, and DESKTOP_COMMANDS is\n// typed by CommandId — deriving it from the map would make the types circular.\nexport type DesktopCommandName = (typeof DESKTOP_COMMAND_NAMES)[number];\n\nexport const DESKTOP_COMMANDS: Readonly<Record<DesktopCommandName, CommandId>> = {\n 'open-settings': 'section.settings',\n 'toggle-theme': 'appearance.toggle-theme',\n 'open-needs-you': 'needs-you.open',\n 'new-chat': 'chat.new',\n 'focus-composer': 'app.summon',\n};\n\n/** `open-session:<id>` — the notification for a finished or failed chat. */\nexport const OPEN_SESSION_COMMAND_RE = /^open-session:([A-Za-z0-9._-]{1,128})$/;\n\nexport type ParsedDesktopCommand =\n | { kind: 'command'; name: DesktopCommandName; commandId: CommandId }\n | { kind: 'open-session'; sessionId: string };\n\n/** Parse a raw desktop command string; null for anything unknown (never guessed). */\nexport function parseDesktopCommand(raw: unknown): ParsedDesktopCommand | null {\n if (typeof raw !== 'string') return null;\n if (Object.prototype.hasOwnProperty.call(DESKTOP_COMMANDS, raw)) {\n const name = raw as DesktopCommandName;\n return { kind: 'command', name, commandId: DESKTOP_COMMANDS[name] };\n }\n const session = OPEN_SESSION_COMMAND_RE.exec(raw);\n return session ? { kind: 'open-session', sessionId: session[1]! } : null;\n}\n\n// ===========================================================================\n// The palette\n// ===========================================================================\n\n/** Result groups, in the order the palette shows them (SPEC-310C §1). */\nexport const PALETTE_GROUPS = [\n { id: 'needs-you', label: 'Needs you' },\n { id: 'chats', label: 'Chats' },\n { id: 'actions', label: 'Actions' },\n { id: 'go-to', label: 'Go to' },\n { id: 'seats-apps', label: 'Seats & Apps' },\n { id: 'projects', label: 'Projects' },\n] as const;\nexport type PaletteGroupId = (typeof PALETTE_GROUPS)[number]['id'];\n\n/** A leading `>` limits results to actions; `#` to chats. */\nexport const PALETTE_PREFIXES: Readonly<Record<'>' | '#', PaletteGroupId>> = { '>': 'actions', '#': 'chats' };\n\n/** An empty query shows the last this-many actions run. */\nexport const PALETTE_RECENT_LIMIT = 5;\n\n/** The palette opens in under this (it lives in the shell chunk). */\nexport const PALETTE_OPEN_BUDGET_MS = 50;\n\n// ===========================================================================\n// Commands\n// ===========================================================================\n\nexport type CommandArgumentKind = 'seat' | 'project' | 'section' | 'session';\n\n/**\n * A guarded command asks for confirmation FIRST, then the mutation token\n * (the palette must never be a shortcut around the confirm step its regular\n * UI requires).\n */\nexport interface CommandGuard {\n confirm: { title: string; body: string; confirmLabel: string; destructive: boolean };\n token: boolean;\n}\n\n/** Sections of the shortcuts overlay (⌘/), in display order. */\nexport const SHORTCUT_SECTIONS = ['Surfaces', 'Navigation', 'Chat', 'Dock', 'Composer', 'Needs you', 'Charts', 'App'] as const;\nexport type ShortcutSection = (typeof SHORTCUT_SECTIONS)[number];\n\nexport interface WorkbenchCommand {\n id: string;\n /** Palette / overlay text: a verb phrase, operator language. */\n title: string;\n scope: CommandScope;\n /** Empty = reachable from the palette (or a button) only. */\n keys: readonly KeyChord[];\n /** Where the palette lists it; null = not a palette entry (drawer and chart keys). */\n group: 'actions' | 'go-to' | null;\n section: ShortcutSection;\n keywords?: readonly string[];\n /** Tab fills this argument (\"New chat on…\" → a seat). */\n argument?: { kind: CommandArgumentKind; prompt: string };\n guard?: CommandGuard;\n native?: NativeBinding;\n /** A qualifier the overlay prints under the title. */\n note?: string;\n}\n\nconst STOP_CHATS_GUARD: CommandGuard = {\n confirm: {\n title: 'Stop every running chat?',\n body: 'Each running turn is cancelled. Queued follow-ups are held, not sent.',\n confirmLabel: 'Stop chats',\n destructive: true,\n },\n token: true,\n};\n\nconst STOP_FLEET_GUARD: CommandGuard = {\n confirm: {\n title: 'Stop the fleet?',\n body: 'Autonomous work halts within one tick and stays stopped until you resume it. Chats keep running.',\n confirmLabel: 'Stop fleet',\n destructive: true,\n },\n token: true,\n};\n\nconst surface = (n: 1 | 2 | 3 | 4 | 5, id: string, name: string): WorkbenchCommand => ({\n id: `surface.${id}`,\n title: `Go to ${name}`,\n scope: 'global',\n keys: [{ key: String(n), mod: true }],\n group: 'go-to',\n section: 'Surfaces',\n keywords: [name.toLowerCase()],\n});\n\nexport const WORKBENCH_COMMANDS = [\n // ── Surfaces (⌘1 Command … ⌘5 Chat) and the gear tray ────────────────────\n surface(1, 'command', 'Command'),\n surface(2, 'fleet', 'Fleet'),\n surface(3, 'growth', 'Growth'),\n surface(4, 'mind', 'Mind'),\n surface(5, 'chat', 'Chat'),\n {\n id: 'section.settings',\n title: 'Open Settings',\n scope: 'global',\n keys: [{ key: ',', mod: true }],\n group: 'go-to',\n section: 'Surfaces',\n keywords: ['preferences', 'appearance'],\n native: { kind: 'menu', desktopCommand: 'open-settings', accelerator: 'CmdOrCtrl+,' },\n },\n { id: 'section.apps', title: 'Open Apps & Accounts', scope: 'global', keys: [], group: 'go-to', section: 'Surfaces', keywords: ['mcp', 'accounts', 'seats', 'integrations', 'ollama'] },\n { id: 'section.usage', title: 'Open Usage', scope: 'global', keys: [], group: 'go-to', section: 'Surfaces', keywords: ['capacity', 'spend', 'limits'] },\n\n // ── Navigation ───────────────────────────────────────────────────────────\n { id: 'palette.open', title: 'Command palette', scope: 'global', keys: [{ key: 'k', mod: true }], group: null, section: 'Navigation' },\n { id: 'needs-you.open', title: 'Open Needs you', scope: 'global', keys: [{ key: 'j', mod: true }], group: 'actions', section: 'Navigation', keywords: ['approvals', 'inbox', 'triage'] },\n { id: 'shortcuts.open', title: 'Keyboard shortcuts', scope: 'global', keys: [{ key: '/', mod: true }], group: 'actions', section: 'Navigation', keywords: ['keys', 'help'] },\n { id: 'history.back', title: 'Back', scope: 'global', keys: [{ key: '[', mod: true }], group: null, section: 'Navigation', note: 'through surfaces and chats' },\n { id: 'history.forward', title: 'Forward', scope: 'global', keys: [{ key: ']', mod: true }], group: null, section: 'Navigation', note: 'through surfaces and chats' },\n { id: 'chat.recent-next', title: 'Next recent chat', scope: 'global', keys: [{ key: 'tab', ctrl: true }], group: null, section: 'Navigation' },\n { id: 'chat.recent-prev', title: 'Previous recent chat', scope: 'global', keys: [{ key: 'tab', ctrl: true, shift: true }], group: null, section: 'Navigation' },\n { id: 'rail.toggle-labels', title: 'Show or hide rail labels', scope: 'global', keys: [{ key: '\\\\', mod: true, shift: true }], group: 'actions', section: 'Navigation' },\n\n // ── Chats ────────────────────────────────────────────────────────────────\n { id: 'chat.new', title: 'New chat', scope: 'global', keys: [{ key: 'n', mod: true }], group: 'actions', section: 'Chat' },\n {\n id: 'chat.new-on',\n title: 'New chat on…',\n scope: 'global',\n keys: [],\n group: 'actions',\n section: 'Chat',\n argument: { kind: 'seat', prompt: 'Seat' },\n keywords: ['seat', 'account', 'engine'],\n },\n { id: 'chat.sidebar', title: 'Show or hide the chat list', scope: 'chat', keys: [{ key: 'b', mod: true }], group: 'actions', section: 'Chat' },\n { id: 'chat.find', title: 'Find in chat', scope: 'chat', keys: [{ key: 'f', mod: true }], group: 'actions', section: 'Chat', keywords: ['search'] },\n { id: 'chat.turn-prev', title: 'Previous turn', scope: 'chat', keys: [{ key: 'arrowup', alt: true }], group: null, section: 'Chat' },\n { id: 'chat.turn-next', title: 'Next turn', scope: 'chat', keys: [{ key: 'arrowdown', alt: true }], group: null, section: 'Chat' },\n { id: 'chats.stop-all', title: 'Stop running chats…', scope: 'global', keys: [], group: 'actions', section: 'Chat', guard: STOP_CHATS_GUARD, keywords: ['cancel', 'halt'] },\n // ── Git (C5's BranchBar serves these) ─────────────────────────────────────\n // Palette-only and unguarded ON PURPOSE: each OPENS BranchBar's own dialog\n // (CreatePrDialog / MergeDialog), which carries the before-click disclosure,\n // and every write inside it still goes through the mutation-token gate —\n // so the palette is never a shortcut around a confirm step. No key: a\n // merge is never one keystroke away. Chat-scoped because the bar lives\n // above the composer; from another surface the shell switches to Chat and\n // parks the command until BranchBar registers (command-bus).\n { id: 'git.create-pr', title: 'Create pull request…', scope: 'chat', keys: [], group: 'actions', section: 'Chat', keywords: ['pr', 'github', 'git', 'open pull request'] },\n { id: 'git.merge-pr', title: 'Merge pull request…', scope: 'chat', keys: [], group: 'actions', section: 'Chat', keywords: ['pr', 'github', 'git', 'land', 'ship'] },\n\n // ── Dock (C2 container; panes from dock-catalog.ts) ───────────────────────\n { id: 'dock.toggle', title: 'Show or hide the dock', scope: 'chat', keys: [{ key: '\\\\', mod: true }], group: 'actions', section: 'Dock' },\n { id: 'dock.terminal', title: 'Terminal', scope: 'chat', keys: [{ key: '`', ctrl: true }], group: 'actions', section: 'Dock', keywords: ['shell', 'console'] },\n { id: 'dock.terminal-new', title: 'New terminal tab', scope: 'chat', keys: [{ key: '`', ctrl: true, shift: true }], group: 'actions', section: 'Dock' },\n { id: 'dock.preview', title: 'Preview', scope: 'chat', keys: [{ key: 'b', mod: true, shift: true }], group: 'actions', section: 'Dock', keywords: ['browser', 'dev server'] },\n { id: 'dock.diff', title: 'Review changes', scope: 'chat', keys: [{ key: 'd', mod: true, shift: true }], group: 'actions', section: 'Dock', keywords: ['diff', 'git'] },\n\n // ── Composer ─────────────────────────────────────────────────────────────\n { id: 'composer.permission', title: 'Permission mode…', scope: 'chat', keys: [{ key: 'm', mod: true, shift: true }], group: 'actions', section: 'Composer', keywords: ['plan', 'bypass', 'auto'] },\n { id: 'composer.model', title: 'Model…', scope: 'chat', keys: [{ key: 'i', mod: true, shift: true }], group: 'actions', section: 'Composer' },\n { id: 'composer.effort', title: 'Effort…', scope: 'chat', keys: [{ key: 'e', mod: true, shift: true }], group: 'actions', section: 'Composer', keywords: ['reasoning', 'thinking'] },\n { id: 'composer.attach', title: 'Attach files…', scope: 'chat', keys: [{ key: 'u', mod: true }], group: 'actions', section: 'Composer', keywords: ['upload', 'image'] },\n { id: 'composer.send', title: 'Send', scope: 'composer', keys: [{ key: 'enter' }], group: null, section: 'Composer', note: 'queues while a turn runs (up to 3)' },\n { id: 'composer.stop-and-send', title: 'Stop and send', scope: 'composer', keys: [{ key: 'enter', mod: true, shift: true }], group: null, section: 'Composer' },\n { id: 'composer.stop', title: 'Stop the running turn', scope: 'composer', keys: [{ key: 'escape' }], group: null, section: 'Composer', note: 'only from an empty composer with no overlay open' },\n\n // ── Needs-you drawer ─────────────────────────────────────────────────────\n { id: 'drawer.next', title: 'Next item', scope: 'drawer', keys: [{ key: 'j' }], group: null, section: 'Needs you' },\n { id: 'drawer.prev', title: 'Previous item', scope: 'drawer', keys: [{ key: 'k' }], group: null, section: 'Needs you' },\n { id: 'drawer.open', title: 'Open item', scope: 'drawer', keys: [{ key: 'enter' }], group: null, section: 'Needs you' },\n { id: 'drawer.approve', title: 'Approve', scope: 'drawer', keys: [{ key: 'a' }], group: null, section: 'Needs you', note: 'confirms, then asks for the token' },\n { id: 'drawer.reject', title: 'Reject', scope: 'drawer', keys: [{ key: 'r' }], group: null, section: 'Needs you', note: 'confirms, then asks for the token' },\n { id: 'drawer.veto', title: 'Veto', scope: 'drawer', keys: [{ key: 'v' }], group: null, section: 'Needs you', note: 'confirms, then asks for the token' },\n { id: 'drawer.done', title: 'Mark done', scope: 'drawer', keys: [{ key: 'e' }], group: null, section: 'Needs you' },\n { id: 'drawer.split-prev', title: 'Previous split', scope: 'drawer', keys: [{ key: 'h' }], group: null, section: 'Needs you' },\n { id: 'drawer.split-next', title: 'Next split', scope: 'drawer', keys: [{ key: 'l' }], group: null, section: 'Needs you' },\n\n // ── Charts ───────────────────────────────────────────────────────────────\n { id: 'chart.table', title: 'Show as a table', scope: 'chart', keys: [{ key: 't' }], group: null, section: 'Charts', note: 'when a chart card has focus' },\n\n // ── App ──────────────────────────────────────────────────────────────────\n {\n id: 'appearance.toggle-theme',\n title: 'Toggle light / dark',\n scope: 'global',\n keys: [{ key: 'l', mod: true, shift: true }],\n group: 'actions',\n section: 'App',\n keywords: ['theme', 'dark mode'],\n native: { kind: 'menu', desktopCommand: 'toggle-theme', accelerator: 'Shift+CmdOrCtrl+L' },\n },\n {\n id: 'app.summon',\n title: 'Show Verse and focus the composer',\n scope: 'global',\n keys: [{ key: 'space', ctrl: true, alt: true }],\n group: null,\n section: 'App',\n note: 'system-wide; turn on in Settings ▸ Desktop',\n native: { kind: 'global-hotkey', accelerator: 'Control+Alt+Space' },\n },\n { id: 'fleet.stop', title: 'Stop the fleet…', scope: 'global', keys: [], group: 'actions', section: 'App', guard: STOP_FLEET_GUARD, keywords: ['kill', 'halt', 'autonomy'] },\n] as const satisfies readonly WorkbenchCommand[];\n\nexport type CommandId = (typeof WORKBENCH_COMMANDS)[number]['id'];\n\nconst BY_ID: ReadonlyMap<string, WorkbenchCommand> = new Map(WORKBENCH_COMMANDS.map((c) => [c.id, c as WorkbenchCommand]));\n\nexport function findCommand(id: string): WorkbenchCommand | null {\n return BY_ID.get(id) ?? null;\n}\n\n/** Palette entries of one group, in catalog order. */\nexport function paletteCommands(group: 'actions' | 'go-to'): WorkbenchCommand[] {\n return (WORKBENCH_COMMANDS as readonly WorkbenchCommand[]).filter((c) => c.group === group);\n}\n\n/** The shortcuts overlay: every command with keys, grouped by section, in display order. */\nexport function shortcutSections(): Array<{ section: ShortcutSection; commands: WorkbenchCommand[] }> {\n const withKeys = (WORKBENCH_COMMANDS as readonly WorkbenchCommand[]).filter((c) => c.keys.length > 0);\n return SHORTCUT_SECTIONS.map((section) => ({ section, commands: withKeys.filter((c) => c.section === section) })).filter(\n (s) => s.commands.length > 0,\n );\n}\n\n// ===========================================================================\n// Matching and display\n// ===========================================================================\n\nexport type KeyPlatform = 'mac' | 'other';\n\n/** The platform the page runs on, for ⌘ vs Ctrl. */\nexport function detectKeyPlatform(): KeyPlatform {\n if (typeof navigator === 'undefined') return 'mac';\n const nav = navigator as Navigator & { userAgentData?: { platform?: string } };\n const platform = nav.userAgentData?.platform ?? nav.platform ?? '';\n return /mac|iphone|ipad|ipod/i.test(platform) ? 'mac' : 'other';\n}\n\n/** The part of a KeyboardEvent matching needs (so tests can pass plain objects). */\nexport interface KeyEventLike {\n key: string;\n code?: string;\n metaKey: boolean;\n ctrlKey: boolean;\n shiftKey: boolean;\n altKey: boolean;\n}\n\nconst CODE_CHARS: Readonly<Record<string, string>> = {\n Backslash: '\\\\',\n Backquote: '`',\n BracketLeft: '[',\n BracketRight: ']',\n Slash: '/',\n Comma: ',',\n Period: '.',\n Semicolon: ';',\n Quote: \"'\",\n Minus: '-',\n Equal: '=',\n Space: 'space',\n};\n\nconst KEY_ALIASES: Readonly<Record<string, string>> = {\n ' ': 'space',\n spacebar: 'space',\n esc: 'escape',\n return: 'enter',\n up: 'arrowup',\n down: 'arrowdown',\n left: 'arrowleft',\n right: 'arrowright',\n};\n\n/**\n * The event's key as a chord `key`. Letters come from `event.key` (so ⌘K is\n * ⌘K on any keyboard layout); digits and punctuation come from `event.code`\n * when it is known, because Shift and ⌥ change `event.key` (⇧\\ reads \"|\",\n * ⌥J reads \"∆\") while the chord names the unshifted key.\n */\nexport function eventKeyName(event: Pick<KeyEventLike, 'key' | 'code'>): string {\n const key = event.key ?? '';\n if (/^[a-z]$/i.test(key)) return key.toLowerCase();\n const code = event.code ?? '';\n if (/^Digit[0-9]$/.test(code)) return code.slice(5);\n if (CODE_CHARS[code]) return CODE_CHARS[code]!;\n if (/^Key[A-Z]$/.test(code)) return code.slice(3).toLowerCase();\n const lower = key.toLowerCase();\n return KEY_ALIASES[lower] ?? lower;\n}\n\n/**\n * Does `event` press `chord`? Modifiers must match EXACTLY (⌘K is not ⇧⌘K).\n * Off macOS, `mod` and `ctrl` are both the Ctrl key and ⌘/Win never matches.\n */\nexport function chordMatches(event: KeyEventLike, chord: KeyChord, platform: KeyPlatform = detectKeyPlatform()): boolean {\n if (platform === 'mac') {\n if (Boolean(chord.mod) !== event.metaKey) return false;\n if (Boolean(chord.ctrl) !== event.ctrlKey) return false;\n } else {\n if (event.metaKey) return false;\n if (Boolean(chord.mod || chord.ctrl) !== event.ctrlKey) return false;\n }\n if (Boolean(chord.shift) !== event.shiftKey) return false;\n if (Boolean(chord.alt) !== event.altKey) return false;\n return eventKeyName(event) === chord.key;\n}\n\n/**\n * The command a key press runs, given the scopes live right now (innermost\n * first, e.g. ['composer', 'chat', 'global']). Null when nothing is bound —\n * the caller must then leave the event alone.\n */\nexport function matchCommand(event: KeyEventLike, liveScopes: readonly CommandScope[], platform: KeyPlatform = detectKeyPlatform()): WorkbenchCommand | null {\n for (const scope of liveScopes) {\n for (const command of WORKBENCH_COMMANDS as readonly WorkbenchCommand[]) {\n if (command.scope !== scope) continue;\n // The page never handles a system-wide hotkey itself.\n if (command.native?.kind === 'global-hotkey') continue;\n if (command.keys.some((chord) => chordMatches(event, chord, platform))) return command;\n }\n }\n return null;\n}\n\n/** Stable identity for a chord (\"mod+shift+b\"), for de-duplication and tests. */\nexport function chordId(chord: KeyChord): string {\n return [chord.ctrl ? 'ctrl' : '', chord.alt ? 'alt' : '', chord.shift ? 'shift' : '', chord.mod ? 'mod' : '', chord.key].filter(Boolean).join('+');\n}\n\nconst MAC_KEY_GLYPHS: Readonly<Record<string, string>> = {\n enter: '↩',\n escape: 'Esc',\n tab: '⇥',\n space: 'Space',\n arrowup: '↑',\n arrowdown: '↓',\n arrowleft: '←',\n arrowright: '→',\n backspace: '⌫',\n};\n\nconst OTHER_KEY_NAMES: Readonly<Record<string, string>> = {\n enter: 'Enter',\n escape: 'Esc',\n tab: 'Tab',\n space: 'Space',\n arrowup: '↑',\n arrowdown: '↓',\n arrowleft: '←',\n arrowright: '→',\n backspace: 'Backspace',\n};\n\n/**\n * How a chord is printed. macOS uses Apple's modifier order (⌃ ⌥ ⇧ ⌘) with\n * no separators (\"⇧⌘B\", \"⌃`\", \"⌥↑\"); elsewhere \"Ctrl+Shift+B\".\n */\nexport function formatChord(chord: KeyChord, platform: KeyPlatform = detectKeyPlatform()): string {\n const key = chord.key.length === 1 ? chord.key.toUpperCase() : (platform === 'mac' ? MAC_KEY_GLYPHS : OTHER_KEY_NAMES)[chord.key] ?? chord.key;\n if (platform === 'mac') {\n return `${chord.ctrl ? '⌃' : ''}${chord.alt ? '⌥' : ''}${chord.shift ? '⇧' : ''}${chord.mod ? '⌘' : ''}${key}`;\n }\n const parts = [chord.mod || chord.ctrl ? 'Ctrl' : '', chord.alt ? 'Alt' : '', chord.shift ? 'Shift' : '', key].filter(Boolean);\n return parts.join('+');\n}\n\n/**\n * Tauri's accelerator string for a chord (\"Shift+CmdOrCtrl+L\") — what C8\n * writes in app_menu.rs, and what the key test compares against.\n */\nexport function chordAccelerator(chord: KeyChord): string {\n const TAURI_KEYS: Readonly<Record<string, string>> = {\n enter: 'Enter',\n escape: 'Escape',\n tab: 'Tab',\n space: 'Space',\n arrowup: 'Up',\n arrowdown: 'Down',\n arrowleft: 'Left',\n arrowright: 'Right',\n backspace: 'Backspace',\n };\n const key = TAURI_KEYS[chord.key] ?? (chord.key.length === 1 ? chord.key.toUpperCase() : chord.key);\n return [chord.shift ? 'Shift' : '', chord.ctrl ? 'Control' : '', chord.alt ? 'Alt' : '', chord.mod ? 'CmdOrCtrl' : '', key].filter(Boolean).join('+');\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{_ as e}from"./dock-store-CdHQRP8s.js";import{o as t}from"./slots-CV9ZuLQU.js";var n=Object.fromEntries(e.filter(e=>e.slot!==null).map(e=>[e.id,e.slot]));function r(e){let r=n[e];return r===void 0||t(r)}var i=Object.fromEntries(e.map(e=>[e.id,e.label]));export{r as n,i as t};
2
- //# sourceMappingURL=dock-panes-mnIwSpRp.js.map
@@ -1 +0,0 @@
1
- import"./global-DG1fmn4y.js";import"./MutationTokenDialog-Cqn2uPV6.js";import"./Epistemic-DRp4dBfB.js";import"./StatusBadge-wv4e6f8b.js";import"./RouteErrorBoundary-D1LZxQjN.js";import"./RefreshIndicator-C1uQIegT.js";import"./VerseConsoleApp-Dq_hREXs.js";import"./Segmented-BMvq-FfD.js";import"./Tag-Cs4tudBN.js";import"./Button-Cr_qkQEc.js";import"./EmptyState-D1GDxVZy.js";import"./Meter-DTHbmhQg.js";import"./Slider-B0kjW7cd.js";import"./Switch-DamlpSMY.js";import"./Select-DkdeoSQn.js";import"./Input-Ci7TD96x.js";import"./Sheet-C7APkGPt.js";
@@ -1,2 +0,0 @@
1
- import{rt as e}from"./global-DG1fmn4y.js";import{p as t}from"./queries-CYEVCq5r.js";import{T as n,w as r,x as i}from"./verse-queries-2PxoBISm.js";import{n as a,t as o}from"./budget-queries-Cp6vO7FH.js";import{r as s}from"./overnight-queries-Be_eossf.js";import{a as c,d as l,f as u,i as d,n as f,o as p,r as m}from"./surface-data-DLvmUX9z.js";var h={command:[f,d,c,p,m,a,u],fleet:[d,s,a,o],growth:[m,p,t(`30d`)],mind:[c,l,i,n],chat:[i,r,n]},g=6e4;async function _(t,n={}){let r=n.ensure??e;for(let e of h[t]??[])try{if(n.beforeEach&&!await n.beforeEach())return;await r(e.key,()=>e.fetch(),g)}catch{}}export{g as PREFETCH_FRESH_MS,h as SURFACE_PREFETCH,_ as prefetchSurfaceData};
2
- //# sourceMappingURL=surface-prefetch-Ct2JwXvL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surface-prefetch-Ct2JwXvL.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/surface-prefetch.ts"],"sourcesContent":["/**\n * routes/verse/shell/surface-prefetch.ts — the reads each rail surface opens\n * with, so the shell can warm them while the operator is still reading chat\n * (shell/warmup.ts, once the operator is idle after first paint). A first\n * visit to Command, Fleet, Growth or Mind then paints from the cache instead\n * of a skeleton; the surface's own useQuery still refreshes whatever is older\n * than it accepts.\n *\n * LAZY ONLY. shell/warmup.ts loads this module with import(): these query\n * defs pull in the surfaces' data modules, none of which may cost chat\n * first-paint bytes (VerseApp.first-paint.test.ts pins it). The QueryDefs\n * themselves are the surfaces' own — same keys, same fetchers — so a warmed\n * entry IS the entry the surface reads.\n *\n * Keep each list in step with its surface's useQuery calls:\n * surface-prefetch.test.ts renders Command, Growth and Mind and fails when\n * they read something this table does not warm.\n */\nimport { ensureQuery } from '../../../data/cache.js';\nimport { modelsQuery, type QueryDef } from '../../../data/queries.js';\nimport { overnightQuery } from '../autonomy/overnight-queries.js';\nimport { budgetPreviewQuery, budgetQuery } from '../budget/budget-queries.js';\nimport {\n authorityQuery,\n fleetHistoryQuery,\n fleetLiveQuery,\n leaderQuery,\n learningQuery,\n reasoningDigestQuery,\n seatHistoryQuery,\n} from '../command/surface-data.js';\nimport { verseBootstrapQuery, verseSessionsQuery, verseWorkspacesQuery } from '../verse-queries.js';\nimport type { VerseSectionId } from '../verse-ui-store.js';\n\ntype AnyQuery = QueryDef<unknown>;\n\n/** What each rail surface reads the moment it mounts. */\nexport const SURFACE_PREFETCH: Readonly<Partial<Record<VerseSectionId, readonly AnyQuery[]>>> = {\n // seatHistoryQuery: without it the first Command visit draws each seat's\n // burn-down from this page's own readings (\"since Verse opened\"), then\n // redraws once the recorded week lands — the reset-on-reload look 3.10.1\n // set out to remove.\n command: [authorityQuery, fleetLiveQuery, leaderQuery, learningQuery, fleetHistoryQuery, budgetQuery, seatHistoryQuery],\n fleet: [fleetLiveQuery, overnightQuery, budgetQuery, budgetPreviewQuery],\n growth: [fleetHistoryQuery, learningQuery, modelsQuery('30d')],\n mind: [leaderQuery, reasoningDigestQuery, verseBootstrapQuery, verseWorkspacesQuery],\n chat: [verseBootstrapQuery, verseSessionsQuery, verseWorkspacesQuery],\n};\n\n/**\n * A cached answer younger than this is left alone. The surfaces accept 10–60 s\n * old data on mount, so anything fresher than a minute is already as good as\n * a warm-up can make it.\n */\nexport const PREFETCH_FRESH_MS = 60_000;\n\ntype Ensure = (key: string, fetcher: () => Promise<unknown>, maxAgeMs: number) => Promise<void>;\n\nexport interface PrefetchOptions {\n /** The cache's mount path (a seam for tests). */\n ensure?: Ensure;\n /**\n * Awaited before EACH read (the warm-up's idle gate). Resolving false stops\n * the warm-up there — the gate was cancelled.\n */\n beforeEach?: () => Promise<boolean> | boolean;\n}\n\n/**\n * Warm one surface's reads through the shared cache (joins an in-flight read,\n * skips a fresh one, and goes through the cache's concurrency gate).\n *\n * ONE AT A TIME: each read is awaited before the next is even considered, so\n * the warm-up never holds more than one of the gate's slots, and the operator\n * (who gets the other three, and whose reads the next `beforeEach` waits out)\n * is never queued behind a burst of it.\n *\n * Never rejects: a read that fails leaves the surface to load it as it always did.\n */\nexport async function prefetchSurfaceData(id: VerseSectionId, options: PrefetchOptions = {}): Promise<void> {\n const ensure = options.ensure ?? ensureQuery;\n for (const def of SURFACE_PREFETCH[id] ?? []) {\n try {\n if (options.beforeEach && !(await options.beforeEach())) return;\n await ensure(def.key, () => def.fetch(), PREFETCH_FRESH_MS);\n } catch {\n // A warm-up read that fails (or cannot even start) is not worth surfacing.\n }\n }\n}\n"],"mappings":"uVAqCA,IAAa,EAAmF,CAK9F,QAAS,CAAC,EAAgB,EAAgB,EAAa,EAAe,EAAmB,EAAa,CAAgB,EACtH,MAAO,CAAC,EAAgB,EAAgB,EAAa,CAAkB,EACvE,OAAQ,CAAC,EAAmB,EAAe,EAAY,KAAK,CAAC,EAC7D,KAAM,CAAC,EAAa,EAAsB,EAAqB,CAAoB,EACnF,KAAM,CAAC,EAAqB,EAAoB,CAAoB,CACtE,EAOa,EAAoB,IAyBjC,eAAsB,EAAoB,EAAoB,EAA2B,CAAC,EAAkB,CAC1G,IAAM,EAAS,EAAQ,QAAU,EACjC,IAAK,IAAM,KAAO,EAAiB,IAAO,CAAC,EACzC,GAAI,CACF,GAAI,EAAQ,YAAc,CAAE,MAAM,EAAQ,WAAW,EAAI,OACzD,MAAM,EAAO,EAAI,QAAW,EAAI,MAAM,EAAG,CAAiB,CAC5D,MAAQ,CAER,CAEJ"}
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AppsSection-B5HWJi9I.js","assets/index-Dk8R-3a7.js","assets/global-DG1fmn4y.js","assets/global-_tOCFt9y.css","assets/MutationTokenDialog-Cqn2uPV6.js","assets/MutationTokenDialog-Cum_DqQZ.css","assets/workbench-types-DzN-5trg.js","assets/dock-store-CdHQRP8s.js","assets/viewport-DDoJ_xVq.js","assets/verse-queries-2PxoBISm.js","assets/section-visibility-u7q-Q9AA.js","assets/icons-YPgbel-I.js","assets/VerseConsoleApp-Dq_hREXs.js","assets/RouteErrorBoundary-D1LZxQjN.js","assets/RouteErrorBoundary-6RMd_aZg.css","assets/command-catalog-s3W6Z96D.js","assets/guarded-action--lguLXfz.js","assets/composer-keys-CYz4U4Bg.js","assets/command-bus-DHJJLWh8.js","assets/useActivity-C3R1Sudh.js","assets/VerseConsoleApp-CXJWDiEM.css","assets/CapacityStrip-DqqYnLek.js","assets/format-lW58rL2y.js","assets/format-DKrNjdwD.js","assets/verse-model-yHPwjf-7.js","assets/Tag-Cs4tudBN.js","assets/Tag-D0rAEciH.css","assets/budget-queries-Cp6vO7FH.js","assets/useSeatsRefresh-BN8bso-n.js","assets/capacity-strip-model-9-Yb211u.js","assets/seat-subscription-CRigL-GE.js","assets/context-model-DeJ28uSZ.js","assets/verse-store-DHTuZpYa.js","assets/CapacityStrip-Cc28CyWk.css","assets/Button-Cr_qkQEc.js","assets/Button-DrnKsvnQ.css","assets/use-token-gate-B5gOFkeH.js","assets/slots-CV9ZuLQU.js","assets/EmptyState-D1GDxVZy.js","assets/EmptyState-B3YUPGaa.css","assets/Switch-DamlpSMY.js","assets/Switch-CU044EaE.css","assets/BudgetControl-BESM12dO.js","assets/Segmented-BMvq-FfD.js","assets/Segmented-BnjHbKzH.css","assets/Slider-B0kjW7cd.js","assets/Slider-AgAdMFpo.css","assets/BudgetControl-CmG1JOWK.css","assets/Select-DkdeoSQn.js","assets/Select-DSu5ghId.css","assets/Input-Ci7TD96x.js","assets/Input-BQ3PR065.css","assets/Sheet-C7APkGPt.js","assets/Sheet-ChxlNivX.css","assets/AppsSection-D88QlDpG.css","assets/AutonomySection-BF5UCsMv.js","assets/Advanced-xVYFAeA8.js","assets/Epistemic-DRp4dBfB.js","assets/Epistemic-OaGnEJkn.css","assets/StatusBadge-wv4e6f8b.js","assets/StatusBadge-BVi0IBb9.css","assets/RefreshIndicator-C1uQIegT.js","assets/RefreshIndicator-CVv22U_j.css","assets/workspace-model-Dd3LmIym.js","assets/Meter-DTHbmhQg.js","assets/Meter-CYt9KpM0.css","assets/control-queries-C4TG8blN.js","assets/mutations-DjXM3IDg.js","assets/use-ticker-C3LQ2IYs.js","assets/fleet-model-B4FKC7fH.js","assets/overnight-queries-Be_eossf.js","assets/use-guarded-action-DVCtLzSo.js","assets/Advanced-Bywv_iYR.css","assets/ChatSection-DoqjyVoj.js","assets/ChatSection-C9obUsLL.css","assets/CommandSection-fiZ4DJpM.js","assets/useChartWidth-0APW0BR3.js","assets/colors-BZ3a9wFf.js","assets/useChartWidth-BAtVgn2n.css","assets/Swimlane-Dcve56cP.js","assets/Swimlane-o6_Zsrnr.css","assets/BurnDown-D1AfskPT.js","assets/BurnDown-BuLMsJMx.css","assets/surface-data-DLvmUX9z.js","assets/actions-BnjZy8a-.js","assets/actions-Ddfg2iLl.css","assets/dark-since-DOMvtB_G.js","assets/Surface-BkDrQ4t3.js","assets/Surface-DMca0gAe.css","assets/live-model-44wEU6I8.js","assets/LeaderCard-BSFTlMRF.js","assets/NeedsYouList-B4Z37Phx.js","assets/NeedsYouList-CruOt4JT.css","assets/FleetSection-rPLy_NPo.js","assets/Funnel-zvDj3He4.js","assets/FleetSection-CFiWeOEs.css","assets/GrowthSection-Bg5sW0jI.js","assets/queries-CYEVCq5r.js","assets/AreaTrend-BgnK0wAy.js","assets/StepBand-Db8WPw8J.js","assets/StepBand-Dz_9Kryb.css","assets/calendar-day-BxBYHfX1.js","assets/McpSection-CvcYu1X_.js","assets/MindSection-DcO9fmYe.js","assets/MatrixHeatmap-DojKZe9L.js","assets/MatrixHeatmap-Bmnvo1l1.css","assets/mind.module-BOABBdi_.js","assets/mind-B9PzLcl0.css","assets/SettingsSection-DgSaHFK4.js","assets/reasoning-pref-a_ZP6GzU.js","assets/primitives-Dl3SEQvh.js","assets/ShortcutsOverlay-ZPyXUS_I.js","assets/ShortcutsOverlay-QSjxmW0a.css","assets/SettingsSection-B8yD34ZM.css","assets/UsageSection-DsC5WmLk.js","assets/charts-BmbKhjqw.js","assets/charts-uSX6xVYN.css","assets/context-model-BGznyHNQ.js","assets/usage-queries-CI_y9oWZ.js","assets/UsageSection-DsB-Jqyl.css"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./index-Dk8R-3a7.js";import{r as t,x as n}from"./workbench-types-DzN-5trg.js";import{f as r,i,v as a,y as o}from"./dock-store-CdHQRP8s.js";Object.freeze({entries:Object.freeze([]),index:-1});function s(e,t){return!!e&&e.section===t.section&&(e.section!==`chat`||e.sessionId===t.sessionId)}function c(e,t){let n={section:t.section,sessionId:t.section===`chat`?t.sessionId:null},r=e.entries[e.index];if(s(r,n))return e;if(r&&r.section===`chat`&&r.sessionId===null&&n.section===`chat`){let t=[...e.entries.slice(0,e.index),n];return{entries:t,index:t.length-1}}let i=[...e.entries.slice(0,e.index+1),n].slice(-50);return{entries:i,index:i.length-1}}function l(e,t){let n=e.index+t,r=e.entries[n];return r?{history:{entries:e.entries,index:n},entry:r}:null}var u=1500;function d(e,t,n,r,i=u){let a=!t||r-t.at>i,o=a?e:t.order;if(o.length<2)return null;let s=((a?0:t.position)+n+o.length)%o.length;return{sessionId:o[s],cycle:{order:o,position:s,at:r}}}function f(e,t,n=10){return[t,...e.filter(e=>e!==t)].slice(0,n)}var p=Object.fromEntries(Object.entries(Object.assign({"../sections/AppsSection.tsx":()=>e(()=>import(`./AppsSection-B5HWJi9I.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54])),"../sections/AutonomySection.tsx":()=>e(()=>import(`./AutonomySection-BF5UCsMv.js`),__vite__mapDeps([55,1,56,2,3,4,5,57,58,59,60,13,14,61,62,9,6,12,15,16,8,17,18,10,19,11,20,43,44,22,23,24,63,64,65,48,49,66,67,68,69,70,71,72])),"../sections/ChatSection.tsx":()=>e(()=>import(`./ChatSection-DoqjyVoj.js`).then(e=>e.t),__vite__mapDeps([73,1,2,3,4,5,13,14,15,7,8,9,6,18,10,12,16,17,19,11,20,32,34,35,74])),"../sections/CommandSection.tsx":()=>e(()=>import(`./CommandSection-fiZ4DJpM.js`),__vite__mapDeps([75,1,2,3,61,62,76,77,23,78,79,80,81,82,15,8,9,6,10,19,11,12,13,4,5,14,16,17,18,20,43,44,22,24,25,26,27,34,35,42,29,30,31,32,36,45,46,40,41,47,68,83,66,67,52,53,84,71,85,86,87,88,89,90,91,92])),"../sections/FleetSection.tsx":()=>e(()=>import(`./FleetSection-rPLy_NPo.js`),__vite__mapDeps([93,1,2,3,61,62,79,76,77,23,78,80,94,8,10,11,12,13,4,5,14,15,6,16,9,17,18,19,20,22,24,25,26,27,34,35,68,70,66,67,83,84,71,85,86,87,88,89,95])),"../sections/GrowthSection.tsx":()=>e(()=>import(`./GrowthSection-Bg5sW0jI.js`),__vite__mapDeps([96,1,2,3,97,61,62,77,23,98,76,78,94,99,100,10,68,83,19,6,66,67,101,86,87,8,88])),"../sections/McpSection.tsx":()=>e(()=>import(`./McpSection-CvcYu1X_.js`),__vite__mapDeps([102,1,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54])),"../sections/MindSection.tsx":()=>e(()=>import(`./MindSection-DcO9fmYe.js`),__vite__mapDeps([103,1,2,3,61,62,98,76,77,23,78,104,105,8,9,6,10,12,13,4,5,14,15,16,17,18,19,11,20,22,24,83,66,67,106,63,101,107,84,34,35,71,85,87,88,90,68])),"../sections/SettingsSection.tsx":()=>e(()=>import(`./SettingsSection-DgSaHFK4.js`),__vite__mapDeps([108,1,2,3,4,5,59,60,13,14,15,11,12,6,16,8,9,17,18,10,19,20,43,44,32,25,26,31,22,23,24,34,35,109,36,64,65,45,46,40,41,48,49,50,51,110,57,58,61,62,38,39,52,53,111,112,113])),"../sections/UsageSection.tsx":()=>e(()=>import(`./UsageSection-DsC5WmLk.js`),__vite__mapDeps([114,1,2,3,57,58,59,60,97,76,77,23,78,115,79,80,81,82,98,94,99,100,104,105,116,9,6,32,22,12,13,4,5,14,15,16,8,17,18,10,19,11,20,24,117,21,25,26,27,28,29,30,31,33,69,101,118,119]))})).map(([e,t])=>[e.replace(/^\.\.\//,`./`),t]));function m(e,t=p){return t[`./sections/${e}.tsx`]}var h=[{id:`command`,label:`Command`,module:`CommandSection`,placement:`rail`,blurb:`What the fleet did, what needs you, and the autonomy switch — the morning read.`},{id:`fleet`,label:`Fleet`,module:`FleetSection`,fallbackModules:[`AutonomySection`],placement:`rail`,blurb:`Every lane live: what is building, what the gates refused, and why each seat was chosen.`},{id:`growth`,label:`Growth`,module:`GrowthSection`,placement:`rail`,blurb:`Is the fleet getting better? Merges, cost per merge and the experiments behind them.`},{id:`mind`,label:`Mind`,module:`MindSection`,placement:`rail`,blurb:`The Leader's memos, what came of each move, and what the reasoning shows.`},{id:`chat`,label:`Chat`,module:`ChatSection`,placement:`rail`,blurb:`Talk to a seat. Chats are grouped by project and resume where they stopped.`},{id:`settings`,label:`Settings`,module:`SettingsSection`,placement:`tray`,blurb:`Theme, chat, desktop and keyboard — and this tour again.`},{id:`apps`,label:`Apps & Accounts`,module:`AppsSection`,placement:`tray`,blurb:`Seats, terminal agents, local models and MCP servers in one list.`},{id:`usage`,label:`Usage`,module:`UsageSection`,placement:`tray`,blurb:`Which account you can actually use right now, and what it costs.`}],g=h.filter(e=>e.placement===`rail`);h.filter(e=>e.placement===`tray`);var _=new Set(h.map(e=>e.id));function v(e){return h.find(t=>t.id===e)}function y(e,t=e=>m(e)!==void 0){let n=v(e);for(let e of[n.module,...n.fallbackModules??[]])if(t(e))return e;return null}var b=[`all`,...t],x={min:240,max:360,def:264},S={min:260,max:480,def:320},C={section:`chat`,railExpanded:!1,sidebarWidth:x.def,sidebarCollapsed:!1,resourcesOpen:!0,resourcesWidth:S.def,recentActions:[],recentChats:[],mounted:[`chat`],overlay:null,needsYouSplit:`all`,needsYouFocus:null,history:{entries:[{section:`chat`,sessionId:null}],index:0},activeSessionId:null,command:null,announceChatMoved:!1};function w(e,t){let n=Number(e);return!Number.isFinite(n)||n<=0?t.def:Math.max(t.min,Math.min(t.max,Math.round(n)))}function ee(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`}function te(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,t,n){if(!Array.isArray(e))return[];let r=[];for(let i of e)if(typeof i==`string`&&n.test(i)&&!r.includes(i)&&r.push(i),r.length>=t)break;return r}function E(e){try{let t=localStorage.getItem(e);if(!t)return null;let n=JSON.parse(t);return te(n)?n:null}catch{return null}}var D=null,O=!1;function k(e={}){let t=e.now??Date.now(),r=e.landed??(e=>m(e)!==void 0),i=E(a),s=i?null:E(o),c=i??s??{},l=C.section,u=null,d=n(c.section);d&&_.has(d.section)&&(l=d.section,d.openNeedsYou&&!i&&(u=`needs-you`)),D=i&&typeof i.lastLaunchDay==`string`?i.lastLaunchDay:null,O=i?i.chatMovedAnnounced===!0:!1;let f=ee(t);return D!==f&&y(`command`,r)!==null&&(l=`command`),D=f,{...C,section:l,railExpanded:c.railExpanded===!0,sidebarWidth:w(c.sidebarWidth,x),sidebarCollapsed:c.sidebarCollapsed===!0,resourcesOpen:c.resourcesOpen!==!1,resourcesWidth:w(c.resourcesWidth,S),recentActions:T(c.recentActions,5,/^[a-z][a-z0-9.-]{0,63}$/),recentChats:T(c.recentChats,10,/^[\w.-]{1,200}$/),mounted:[l],overlay:u,history:{entries:[{section:l,sessionId:null}],index:0},announceChatMoved:s!==null&&!O}}var A=C,j=0,M=null,N=new Set;function P(e){let t={version:3,section:e.section,railExpanded:e.railExpanded,sidebarWidth:e.sidebarWidth,sidebarCollapsed:e.sidebarCollapsed,resourcesOpen:e.resourcesOpen,resourcesWidth:e.resourcesWidth,recentActions:[...e.recentActions],recentChats:[...e.recentChats],lastLaunchDay:D,chatMovedAnnounced:O,dock:i()};try{localStorage.setItem(a,JSON.stringify(t))}catch{}}var ne=[`section`,`railExpanded`,`sidebarWidth`,`sidebarCollapsed`,`resourcesOpen`,`resourcesWidth`,`recentActions`,`recentChats`];function F(e){let t={...A,...e};if(Object.keys(e).every(e=>Object.is(A[e],t[e])))return;let n=ne.some(e=>!Object.is(A[e],t[e]));A=t,n&&P(t);for(let e of[...N])e()}function I(){A=k(),P(A)}I();var L=``;r(()=>{let e=``;try{e=JSON.stringify(i())}catch{e=``}e!==L&&(L=e,P(A))});function R(e){return N.add(e),()=>N.delete(e)}function re(){return A}function ie(e,t){let n=t===`chat`||e.includes(`chat`),r=e.filter(e=>e!==`chat`&&e!==t),i=(t===`chat`?r:[t,...r]).slice(0,3),a=t===`chat`?[`chat`,...i]:i;return n&&!a.includes(`chat`)&&a.push(`chat`),a}function z(e,t){if(!_.has(e))return;let n=t.history?c(A.history,{section:e,sessionId:e===`chat`?A.activeSessionId:null}):A.history;F({section:e,mounted:ie(A.mounted,e),history:n})}var B=`ashlr:verse-anchor`;function V(e,t=null){if(z(e,{history:!0}),!t||typeof window>`u`)return;let n={section:e,anchor:t};window.dispatchEvent(new CustomEvent(B,{detail:n}))}function H(e){let t=l(A.history,e);if(!t)return!1;F({history:t.history}),z(t.entry.section,{history:!1});let n=t.entry.sessionId;return t.entry.section===`chat`&&n&&n!==A.activeSessionId&&(K(`open-session`,{sessionId:n},!1),F({activeSessionId:n,recentChats:f(A.recentChats,n)})),!0}function U(e){e!==A.activeSessionId&&F({activeSessionId:e,recentChats:e?f(A.recentChats,e):A.recentChats,history:e&&A.section===`chat`?c(A.history,{section:`chat`,sessionId:e}):A.history})}function W(e,t=Date.now()){let n=d(A.activeSessionId?f(A.recentChats,A.activeSessionId):[...A.recentChats],M,e,t);return n?(M=n.cycle,J(n.sessionId),n.sessionId):null}var G=`ashlr.verse.selected.v1`;function K(e,t,n){j+=1;let r={name:e,nonce:j,...t};n&&A.section!==`chat`&&z(`chat`,{history:!0}),F({command:r})}function q(e,t={}){K(e,t,!0)}function J(e){if(/^[\w.-]{1,200}$/.test(e)){if(!A.mounted.includes(`chat`))try{localStorage.setItem(G,e)}catch{}K(`open-session`,{sessionId:e},!0),U(e)}}function ae(){F({command:null})}function oe(e){F({overlay:e})}function se(){F({overlay:null,needsYouFocus:null})}function ce(e){F({overlay:A.overlay===e?null:e,needsYouFocus:null})}function le(e={}){F({overlay:`needs-you`,needsYouSplit:e.split??A.needsYouSplit,needsYouFocus:e.focusId??null})}function ue(e){b.includes(e)&&F({needsYouSplit:e})}function de(){F({railExpanded:!A.railExpanded})}function fe(e){F({sidebarCollapsed:e})}function Y(e){/^[a-z][a-z0-9.-]{0,63}$/.test(e)&&F({recentActions:[e,...A.recentActions.filter(t=>t!==e)].slice(0,5)})}function pe(){O=!0,A.announceChatMoved&&F({announceChatMoved:!1}),P(A)}var X=`ashlr.verse.seats.v1`,me=50,Z=null;function Q(){if(Z)return Z;let e={};try{let t=localStorage.getItem(X),n=t?JSON.parse(t):null;if(n&&typeof n==`object`&&!Array.isArray(n))for(let[t,r]of Object.entries(n)){if(!r||typeof r!=`object`||Array.isArray(r))continue;let{seatId:n,model:i}=r;typeof n==`string`&&n.length!==0&&typeof i==`string`&&i.length!==0&&(e[t]={seatId:n,model:i})}}catch{}return Z=e,e}function he(e){let t=Q();if(e){let n=t[e];if(n)return n}let n=Object.keys(t),r=n[n.length-1];return r?t[r]??null:null}function ge(e,t){if(!e||!t.seatId||!t.model)return;let n=Q();delete n[e],n[e]={seatId:t.seatId,model:t.model};let r=Object.keys(n);for(let e of r.slice(0,Math.max(0,r.length-me)))delete n[e];try{localStorage.setItem(X,JSON.stringify(n))}catch{}}var $=new Map,_e=50;function ve(e,t){if(!e||!t)return;let n=$.get(e)??new Set;n.add(t),$.delete(e),$.set(e,n);for(let e of[...$.keys()].slice(0,Math.max(0,$.size-_e)))$.delete(e)}function ye(e,t){return $.get(e)?.has(t)??!1}export{m as A,V as C,ce as D,R as E,de as O,ue as S,H as T,Y as _,pe as a,v as b,W as c,ye as d,y as f,J as g,oe as h,h as i,p as k,ve as l,le as m,g as n,ae as o,he as p,B as r,se as s,b as t,re as u,ge as v,fe as w,U as x,q as y};
3
- //# sourceMappingURL=verse-ui-store-Dy4HuDBV.js.map
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/surface-prefetch-Ct2JwXvL.js","assets/global-DG1fmn4y.js","assets/index-Dk8R-3a7.js","assets/global-_tOCFt9y.css","assets/queries-CYEVCq5r.js","assets/verse-queries-2PxoBISm.js","assets/workbench-types-DzN-5trg.js","assets/budget-queries-Cp6vO7FH.js","assets/overnight-queries-Be_eossf.js","assets/format-lW58rL2y.js","assets/format-DKrNjdwD.js","assets/VerseConsoleApp-Dq_hREXs.js","assets/RouteErrorBoundary-D1LZxQjN.js","assets/MutationTokenDialog-Cqn2uPV6.js","assets/MutationTokenDialog-Cum_DqQZ.css","assets/RouteErrorBoundary-6RMd_aZg.css","assets/command-catalog-s3W6Z96D.js","assets/guarded-action--lguLXfz.js","assets/viewport-DDoJ_xVq.js","assets/verse-ui-store-Dy4HuDBV.js","assets/dock-store-CdHQRP8s.js","assets/composer-keys-CYz4U4Bg.js","assets/command-bus-DHJJLWh8.js","assets/section-visibility-u7q-Q9AA.js","assets/useActivity-C3R1Sudh.js","assets/icons-YPgbel-I.js","assets/VerseConsoleApp-CXJWDiEM.css","assets/verse-model-yHPwjf-7.js","assets/control-queries-C4TG8blN.js","assets/mutations-DjXM3IDg.js","assets/surface-data-DLvmUX9z.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./index-Dk8R-3a7.js";import{n as t,u as n}from"./verse-ui-store-Dy4HuDBV.js";var r=[`pointerdown`,`keydown`,`wheel`,`touchstart`],i={capture:!0,passive:!0};function a(e={}){let t=e.win??window,n=e.doc??document,a=e.now??(()=>Date.now()),o=e.quietMs??2e3,s=Math.max(1,e.pollMs??250),c=e.busy??(()=>!1),l=e.timeoutMs??3e3,u=!1,d=a(),f=new Set,p=()=>{d=a()};for(let e of r)n.addEventListener(e,p,i);let m=()=>d+o-a(),h=()=>n.visibilityState!==`hidden`&&m()<=0&&!c();function g(){return u?Promise.resolve(!1):new Promise(e=>{let r=()=>void 0,i=()=>{r(),e(!1)},o=()=>{f.delete(i),e(!0)};f.add(i);let u=()=>{if(r=()=>void 0,n.visibilityState===`hidden`){let e=()=>{n.visibilityState!==`hidden`&&(n.removeEventListener(`visibilitychange`,e),d=a(),u())};n.addEventListener(`visibilitychange`,e),r=()=>n.removeEventListener(`visibilitychange`,e);return}let e=m();if(e>0||c()){let n=t.setTimeout(u,e>0?e:s);r=()=>t.clearTimeout(n);return}if(typeof t.requestIdleCallback==`function`){let e=t.requestIdleCallback(()=>h()?o():u(),{timeout:l});r=()=>t.cancelIdleCallback?.(e);return}o()};u()})}function _(e){return u?Promise.resolve(!1):new Promise(n=>{let r=0,i=()=>{t.clearTimeout(r),n(!1)};r=t.setTimeout(()=>{f.delete(i),n(!0)},e),f.add(i)})}function v(){if(!u){u=!0;for(let e of r)n.removeEventListener(e,p,i);for(let e of[...f])e();f.clear()}}return{wait:g,pause:_,cancel:v}}function o(e,t={}){let n=a(t),r=t.gapMs??400;return(async()=>{for(let[t,i]of e.entries()){if(t>0&&r>0&&!await n.pause(r)||!await n.wait())return;try{await i(n)}catch{}}n.cancel()})(),n.cancel}var s=()=>e(()=>import(`./surface-prefetch-Ct2JwXvL.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));function c(e,r={}){let i=e=>async()=>{await e()},a=t=>async r=>{if(n().mounted.includes(t))return;await e.loadSection(t);let{prefetchSurfaceData:i}=await s();await i(t,{beforeEach:()=>r.wait()})};return o([...e.overlays.map(i),...t.map(e=>a(e.id))],{busy:e.readsInFlight,...r})}export{c as warmUpAfterFirstPaint};
3
- //# sourceMappingURL=warmup-BsL2LdR-.js.map