@ashlr/hub 3.13.0 → 3.14.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 (625) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/authority-surface.json +204 -124
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/authority.js +112 -18
  5. package/dist/cli/authority.js.map +1 -1
  6. package/dist/cli/comms.d.ts +33 -19
  7. package/dist/cli/comms.js +128 -151
  8. package/dist/cli/comms.js.map +1 -1
  9. package/dist/cli/completions.js +1 -1
  10. package/dist/cli/completions.js.map +1 -1
  11. package/dist/cli/daemon.js +29 -0
  12. package/dist/cli/daemon.js.map +1 -1
  13. package/dist/cli/director.d.ts +8 -12
  14. package/dist/cli/director.js +17 -52
  15. package/dist/cli/director.js.map +1 -1
  16. package/dist/cli/fleet.js +4 -1
  17. package/dist/cli/fleet.js.map +1 -1
  18. package/dist/cli/help.js +1 -0
  19. package/dist/cli/help.js.map +1 -1
  20. package/dist/cli/leader.d.ts +27 -3
  21. package/dist/cli/leader.js +253 -4
  22. package/dist/cli/leader.js.map +1 -1
  23. package/dist/core/authority/server-enforcement.d.ts +110 -0
  24. package/dist/core/authority/server-enforcement.js +260 -0
  25. package/dist/core/authority/server-enforcement.js.map +1 -0
  26. package/dist/core/authority/standing-grant.d.ts +24 -4
  27. package/dist/core/authority/standing-grant.js +19 -3
  28. package/dist/core/authority/standing-grant.js.map +1 -1
  29. package/dist/core/cloud/timeline.js +13 -7
  30. package/dist/core/cloud/timeline.js.map +1 -1
  31. package/dist/core/comms/change-digest.d.ts +130 -0
  32. package/dist/core/comms/change-digest.js +451 -0
  33. package/dist/core/comms/change-digest.js.map +1 -0
  34. package/dist/core/comms/director-prompt.d.ts +4 -5
  35. package/dist/core/comms/director-prompt.js +4 -71
  36. package/dist/core/comms/director-prompt.js.map +1 -1
  37. package/dist/core/comms/director.d.ts +24 -61
  38. package/dist/core/comms/director.js +29 -382
  39. package/dist/core/comms/director.js.map +1 -1
  40. package/dist/core/comms/dispatch.d.ts +37 -12
  41. package/dist/core/comms/dispatch.js +244 -177
  42. package/dist/core/comms/dispatch.js.map +1 -1
  43. package/dist/core/comms/elon-dialogue.d.ts +23 -15
  44. package/dist/core/comms/elon-dialogue.js +36 -307
  45. package/dist/core/comms/elon-dialogue.js.map +1 -1
  46. package/dist/core/comms/fleet-pulse.js +4 -7
  47. package/dist/core/comms/fleet-pulse.js.map +1 -1
  48. package/dist/core/comms/handlers.d.ts +10 -6
  49. package/dist/core/comms/handlers.js +14 -48
  50. package/dist/core/comms/handlers.js.map +1 -1
  51. package/dist/core/comms/migrations.d.ts +47 -0
  52. package/dist/core/comms/migrations.js +125 -0
  53. package/dist/core/comms/migrations.js.map +1 -0
  54. package/dist/core/comms/requests.d.ts +32 -5
  55. package/dist/core/comms/requests.js +101 -5
  56. package/dist/core/comms/requests.js.map +1 -1
  57. package/dist/core/comms/telegram-channel.d.ts +104 -0
  58. package/dist/core/comms/telegram-channel.js +622 -0
  59. package/dist/core/comms/telegram-channel.js.map +1 -0
  60. package/dist/core/comms/telegram-thread-map.d.ts +56 -0
  61. package/dist/core/comms/telegram-thread-map.js +144 -0
  62. package/dist/core/comms/telegram-thread-map.js.map +1 -0
  63. package/dist/core/daemon/capacity-publisher.d.ts +8 -1
  64. package/dist/core/daemon/capacity-publisher.js +40 -2
  65. package/dist/core/daemon/capacity-publisher.js.map +1 -1
  66. package/dist/core/daemon/loop.js +18 -4
  67. package/dist/core/daemon/loop.js.map +1 -1
  68. package/dist/core/daemon/tick-deadline.d.ts +44 -0
  69. package/dist/core/daemon/tick-deadline.js +83 -0
  70. package/dist/core/daemon/tick-deadline.js.map +1 -0
  71. package/dist/core/daemon/tick-hooks.d.ts +7 -0
  72. package/dist/core/daemon/tick-hooks.js.map +1 -1
  73. package/dist/core/daemon/tick-progress.d.ts +39 -0
  74. package/dist/core/daemon/tick-progress.js +194 -0
  75. package/dist/core/daemon/tick-progress.js.map +1 -0
  76. package/dist/core/dashboard.js +3 -1
  77. package/dist/core/dashboard.js.map +1 -1
  78. package/dist/core/fleet/fleet-merge-state.d.ts +6 -0
  79. package/dist/core/fleet/fleet-merge-state.js.map +1 -1
  80. package/dist/core/fleet/host-merge.d.ts +9 -0
  81. package/dist/core/fleet/host-merge.js +13 -2
  82. package/dist/core/fleet/host-merge.js.map +1 -1
  83. package/dist/core/fleet/merge-gates.d.ts +13 -0
  84. package/dist/core/fleet/merge-gates.js +14 -0
  85. package/dist/core/fleet/merge-gates.js.map +1 -1
  86. package/dist/core/fleet/mirrors.d.ts +162 -6
  87. package/dist/core/fleet/mirrors.js +1051 -49
  88. package/dist/core/fleet/mirrors.js.map +1 -1
  89. package/dist/core/fleet/standing-merge-pass.d.ts +8 -0
  90. package/dist/core/fleet/standing-merge-pass.js +72 -1
  91. package/dist/core/fleet/standing-merge-pass.js.map +1 -1
  92. package/dist/core/fleet/status.d.ts +17 -0
  93. package/dist/core/fleet/status.js +22 -0
  94. package/dist/core/fleet/status.js.map +1 -1
  95. package/dist/core/fleet/tick-hooks-live.d.ts +1 -1
  96. package/dist/core/fleet/tick-hooks-live.js +13 -3
  97. package/dist/core/fleet/tick-hooks-live.js.map +1 -1
  98. package/dist/core/git.d.ts +17 -0
  99. package/dist/core/git.js +124 -25
  100. package/dist/core/git.js.map +1 -1
  101. package/dist/core/goals/open-goals.d.ts +47 -0
  102. package/dist/core/goals/open-goals.js +33 -0
  103. package/dist/core/goals/open-goals.js.map +1 -0
  104. package/dist/core/inbox/merge.d.ts +5 -0
  105. package/dist/core/inbox/merge.js +58 -2
  106. package/dist/core/inbox/merge.js.map +1 -1
  107. package/dist/core/integrations/locus.d.ts +28 -0
  108. package/dist/core/integrations/locus.js +155 -30
  109. package/dist/core/integrations/locus.js.map +1 -1
  110. package/dist/core/integrations/telegram-format.d.ts +40 -0
  111. package/dist/core/integrations/telegram-format.js +123 -0
  112. package/dist/core/integrations/telegram-format.js.map +1 -0
  113. package/dist/core/integrations/telegram.d.ts +60 -4
  114. package/dist/core/integrations/telegram.js +161 -28
  115. package/dist/core/integrations/telegram.js.map +1 -1
  116. package/dist/core/mcp-registry.d.ts +12 -0
  117. package/dist/core/mcp-registry.js +70 -0
  118. package/dist/core/mcp-registry.js.map +1 -1
  119. package/dist/core/observability/rollup.d.ts +12 -10
  120. package/dist/core/observability/rollup.js +44 -17
  121. package/dist/core/observability/rollup.js.map +1 -1
  122. package/dist/core/resources/connection-monitor.d.ts +9 -0
  123. package/dist/core/resources/connection-monitor.js +19 -9
  124. package/dist/core/resources/connection-monitor.js.map +1 -1
  125. package/dist/core/resources/quota-refresh-lease.d.ts +17 -0
  126. package/dist/core/resources/quota-refresh-lease.js +34 -1
  127. package/dist/core/resources/quota-refresh-lease.js.map +1 -1
  128. package/dist/core/routing/budget-api.d.ts +7 -1
  129. package/dist/core/routing/budget-api.js +56 -2
  130. package/dist/core/routing/budget-api.js.map +1 -1
  131. package/dist/core/routing/readiness-types.d.ts +82 -0
  132. package/dist/core/routing/readiness-types.js +23 -0
  133. package/dist/core/routing/readiness-types.js.map +1 -0
  134. package/dist/core/routing/readiness.d.ts +103 -0
  135. package/dist/core/routing/readiness.js +480 -0
  136. package/dist/core/routing/readiness.js.map +1 -0
  137. package/dist/core/sandbox/confine.js +22 -1
  138. package/dist/core/sandbox/confine.js.map +1 -1
  139. package/dist/core/sandbox/policy.d.ts +23 -0
  140. package/dist/core/sandbox/policy.js +100 -0
  141. package/dist/core/sandbox/policy.js.map +1 -1
  142. package/dist/core/types.d.ts +13 -0
  143. package/dist/core/types.js.map +1 -1
  144. package/dist/core/universe/builtins/preparation/manifest.json +1 -1
  145. package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +1204 -939
  146. package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +1319 -1054
  147. package/dist/core/usage/frontier-usage.d.ts +20 -2
  148. package/dist/core/usage/frontier-usage.js +75 -17
  149. package/dist/core/usage/frontier-usage.js.map +1 -1
  150. package/dist/core/verse/accounts.d.ts +45 -0
  151. package/dist/core/verse/accounts.js +246 -17
  152. package/dist/core/verse/accounts.js.map +1 -1
  153. package/dist/core/verse/apps-api.js +23 -11
  154. package/dist/core/verse/apps-api.js.map +1 -1
  155. package/dist/core/verse/apps.d.ts +11 -9
  156. package/dist/core/verse/apps.js +2 -2
  157. package/dist/core/verse/apps.js.map +1 -1
  158. package/dist/core/verse/authority-api.d.ts +8 -2
  159. package/dist/core/verse/authority-api.js +40 -5
  160. package/dist/core/verse/authority-api.js.map +1 -1
  161. package/dist/core/verse/autonomy-ladder.d.ts +172 -0
  162. package/dist/core/verse/autonomy-ladder.js +251 -0
  163. package/dist/core/verse/autonomy-ladder.js.map +1 -0
  164. package/dist/core/verse/context-fit.js +7 -5
  165. package/dist/core/verse/context-fit.js.map +1 -1
  166. package/dist/core/verse/control-api.d.ts +23 -1
  167. package/dist/core/verse/control-api.js +117 -10
  168. package/dist/core/verse/control-api.js.map +1 -1
  169. package/dist/core/verse/fleet-live-api.js +13 -5
  170. package/dist/core/verse/fleet-live-api.js.map +1 -1
  171. package/dist/core/verse/folder-io.d.ts +50 -0
  172. package/dist/core/verse/folder-io.js +142 -0
  173. package/dist/core/verse/folder-io.js.map +1 -0
  174. package/dist/core/verse/git-api.js +5 -4
  175. package/dist/core/verse/git-api.js.map +1 -1
  176. package/dist/core/verse/git-ops.d.ts +10 -1
  177. package/dist/core/verse/git-ops.js +18 -2
  178. package/dist/core/verse/git-ops.js.map +1 -1
  179. package/dist/core/verse/github-api.d.ts +1 -1
  180. package/dist/core/verse/github-api.js +5 -4
  181. package/dist/core/verse/github-api.js.map +1 -1
  182. package/dist/core/verse/github-repo.js +118 -14
  183. package/dist/core/verse/github-repo.js.map +1 -1
  184. package/dist/core/verse/leader-api.d.ts +5 -4
  185. package/dist/core/verse/leader-api.js +237 -10
  186. package/dist/core/verse/leader-api.js.map +1 -1
  187. package/dist/core/verse/local-models.d.ts +10 -0
  188. package/dist/core/verse/local-models.js +10 -1
  189. package/dist/core/verse/local-models.js.map +1 -1
  190. package/dist/core/verse/login-path.d.ts +73 -0
  191. package/dist/core/verse/login-path.js +123 -14
  192. package/dist/core/verse/login-path.js.map +1 -1
  193. package/dist/core/verse/mcp-control-api.js +4 -4
  194. package/dist/core/verse/mcp-control-api.js.map +1 -1
  195. package/dist/core/verse/mcp-scope.d.ts +22 -0
  196. package/dist/core/verse/mcp-scope.js +41 -1
  197. package/dist/core/verse/mcp-scope.js.map +1 -1
  198. package/dist/core/verse/mcp-seat-view.d.ts +10 -0
  199. package/dist/core/verse/mcp-seat-view.js +30 -4
  200. package/dist/core/verse/mcp-seat-view.js.map +1 -1
  201. package/dist/core/verse/overnight-api.js +20 -2
  202. package/dist/core/verse/overnight-api.js.map +1 -1
  203. package/dist/core/verse/path-guard.d.ts +24 -0
  204. package/dist/core/verse/path-guard.js +91 -22
  205. package/dist/core/verse/path-guard.js.map +1 -1
  206. package/dist/core/verse/preview-api.js +22 -0
  207. package/dist/core/verse/preview-api.js.map +1 -1
  208. package/dist/core/verse/projects.d.ts +21 -0
  209. package/dist/core/verse/projects.js +82 -0
  210. package/dist/core/verse/projects.js.map +1 -1
  211. package/dist/core/verse/session-controls-api.js +5 -3
  212. package/dist/core/verse/session-controls-api.js.map +1 -1
  213. package/dist/core/verse/session-handoff.d.ts +26 -0
  214. package/dist/core/verse/session-handoff.js +90 -12
  215. package/dist/core/verse/session-handoff.js.map +1 -1
  216. package/dist/core/verse/terminal-api.js +7 -4
  217. package/dist/core/verse/terminal-api.js.map +1 -1
  218. package/dist/core/verse/terminal.js +9 -5
  219. package/dist/core/verse/terminal.js.map +1 -1
  220. package/dist/core/verse/verse-api.js +81 -27
  221. package/dist/core/verse/verse-api.js.map +1 -1
  222. package/dist/core/verse/workspaces.d.ts +51 -0
  223. package/dist/core/verse/workspaces.js +177 -47
  224. package/dist/core/verse/workspaces.js.map +1 -1
  225. package/dist/core/vision/leader-apply.d.ts +40 -0
  226. package/dist/core/vision/leader-apply.js +101 -30
  227. package/dist/core/vision/leader-apply.js.map +1 -1
  228. package/dist/core/vision/leader-cadence.d.ts +114 -0
  229. package/dist/core/vision/leader-cadence.js +127 -0
  230. package/dist/core/vision/leader-cadence.js.map +1 -0
  231. package/dist/core/vision/leader-goal-evidence.d.ts +25 -0
  232. package/dist/core/vision/leader-goal-evidence.js +36 -0
  233. package/dist/core/vision/leader-goal-evidence.js.map +1 -0
  234. package/dist/core/vision/leader-health.d.ts +53 -0
  235. package/dist/core/vision/leader-health.js +92 -0
  236. package/dist/core/vision/leader-health.js.map +1 -0
  237. package/dist/core/vision/leader-operator.d.ts +176 -0
  238. package/dist/core/vision/leader-operator.js +355 -0
  239. package/dist/core/vision/leader-operator.js.map +1 -0
  240. package/dist/core/vision/leader-run-chain.d.ts +41 -0
  241. package/dist/core/vision/leader-run-chain.js +54 -0
  242. package/dist/core/vision/leader-run-chain.js.map +1 -0
  243. package/dist/core/vision/leader-seat-plan.d.ts +68 -0
  244. package/dist/core/vision/leader-seat-plan.js +93 -0
  245. package/dist/core/vision/leader-seat-plan.js.map +1 -0
  246. package/dist/core/vision/leader-seat.d.ts +71 -5
  247. package/dist/core/vision/leader-seat.js +235 -33
  248. package/dist/core/vision/leader-seat.js.map +1 -1
  249. package/dist/core/vision/leader-thread-types.d.ts +104 -0
  250. package/dist/core/vision/leader-thread-types.js +9 -0
  251. package/dist/core/vision/leader-thread-types.js.map +1 -0
  252. package/dist/core/vision/leader-thread.d.ts +138 -0
  253. package/dist/core/vision/leader-thread.js +926 -0
  254. package/dist/core/vision/leader-thread.js.map +1 -0
  255. package/dist/core/vision/leader-types.d.ts +75 -1
  256. package/dist/core/vision/leader.d.ts +88 -18
  257. package/dist/core/vision/leader.js +269 -69
  258. package/dist/core/vision/leader.js.map +1 -1
  259. package/dist/core/web/public/next/assets/{ActionMenu-Dwjk6rUQ.js → ActionMenu-CIiX2X8w.js} +2 -2
  260. package/dist/core/web/public/next/assets/{ActionMenu-Dwjk6rUQ.js.map → ActionMenu-CIiX2X8w.js.map} +1 -1
  261. package/dist/core/web/public/next/assets/Advanced-DHsysoIL.js +2 -0
  262. package/dist/core/web/public/next/assets/{Advanced-cVYTAsfB.js.map → Advanced-DHsysoIL.js.map} +1 -1
  263. package/dist/core/web/public/next/assets/{App-IsaWDsdF.js → App-CMeAocmW.js} +5 -5
  264. package/dist/core/web/public/next/assets/{App-IsaWDsdF.js.map → App-CMeAocmW.js.map} +1 -1
  265. package/dist/core/web/public/next/assets/AppsSection-DISYnMnc.js +2 -0
  266. package/dist/core/web/public/next/assets/{AppsSection-DDqeSrty.js.map → AppsSection-DISYnMnc.js.map} +1 -1
  267. package/dist/core/web/public/next/assets/AreaTrend-DK2Y2TbZ.js +2 -0
  268. package/dist/core/web/public/next/assets/AreaTrend-DK2Y2TbZ.js.map +1 -0
  269. package/dist/core/web/public/next/assets/{AutonomyOffState-CpFYS3tQ.js → AutonomyOffState-CEPSZToP.js} +3 -3
  270. package/dist/core/web/public/next/assets/{AutonomyOffState-CpFYS3tQ.js.map → AutonomyOffState-CEPSZToP.js.map} +1 -1
  271. package/dist/core/web/public/next/assets/AutonomySection-DWc3ciAD.js +2 -0
  272. package/dist/core/web/public/next/assets/{AutonomySection-Dwn8UtOy.js.map → AutonomySection-DWc3ciAD.js.map} +1 -1
  273. package/dist/core/web/public/next/assets/AutonomyStatus-CYaHjJ9U.js +2 -0
  274. package/dist/core/web/public/next/assets/AutonomyStatus-CYaHjJ9U.js.map +1 -0
  275. package/dist/core/web/public/next/assets/{BranchBar-ISZ7xUCj.js → BranchBar-BxhdiIpx.js} +2 -2
  276. package/dist/core/web/public/next/assets/{BranchBar-ISZ7xUCj.js.map → BranchBar-BxhdiIpx.js.map} +1 -1
  277. package/dist/core/web/public/next/assets/{BudgetControl-BARVp-En.js → BudgetControl-C-0KhjRS.js} +2 -2
  278. package/dist/core/web/public/next/assets/{BudgetControl-BARVp-En.js.map → BudgetControl-C-0KhjRS.js.map} +1 -1
  279. package/dist/core/web/public/next/assets/{Button-DtE0rlWD.js → Button-D90dzI_o.js} +2 -2
  280. package/dist/core/web/public/next/assets/{Button-DtE0rlWD.js.map → Button-D90dzI_o.js.map} +1 -1
  281. package/dist/core/web/public/next/assets/{CapacityStrip-DKbKA_Aa.js → CapacityStrip-qKDBC65C.js} +2 -2
  282. package/dist/core/web/public/next/assets/{CapacityStrip-DKbKA_Aa.js.map → CapacityStrip-qKDBC65C.js.map} +1 -1
  283. package/dist/core/web/public/next/assets/ChartFrame-DY-GVUb3.js +2 -0
  284. package/dist/core/web/public/next/assets/ChartFrame-DY-GVUb3.js.map +1 -0
  285. package/dist/core/web/public/next/assets/ChartFrame-DyjmyV8N.css +1 -0
  286. package/dist/core/web/public/next/assets/ChatSection-DlT4QU6a.js +3 -0
  287. package/dist/core/web/public/next/assets/{ChatSection-C9myY4ei.js.map → ChatSection-DlT4QU6a.js.map} +1 -1
  288. package/dist/core/web/public/next/assets/{CloudBudgetForm-CvjK4Oh6.js → CloudBudgetForm-BrNun_Yu.js} +2 -2
  289. package/dist/core/web/public/next/assets/{CloudBudgetForm-CvjK4Oh6.js.map → CloudBudgetForm-BrNun_Yu.js.map} +1 -1
  290. package/dist/core/web/public/next/assets/CommandPalette-C5lDDKN0.js +2 -0
  291. package/dist/core/web/public/next/assets/CommandPalette-C5lDDKN0.js.map +1 -0
  292. package/dist/core/web/public/next/assets/CommandSection-B0xuU-yZ.css +1 -0
  293. package/dist/core/web/public/next/assets/CommandSection-DXFvPgKp.js +3 -0
  294. package/dist/core/web/public/next/assets/CommandSection-DXFvPgKp.js.map +1 -0
  295. package/dist/core/web/public/next/assets/{ConfirmDialog-CLUhzaBj.js → ConfirmDialog-BR4nZQ2D.js} +2 -2
  296. package/dist/core/web/public/next/assets/{ConfirmDialog-CLUhzaBj.js.map → ConfirmDialog-BR4nZQ2D.js.map} +1 -1
  297. package/dist/core/web/public/next/assets/{DeleteChatDialog-C_eDhV8b.js → DeleteChatDialog-BCfP12GH.js} +2 -2
  298. package/dist/core/web/public/next/assets/{DeleteChatDialog-C_eDhV8b.js.map → DeleteChatDialog-BCfP12GH.js.map} +1 -1
  299. package/dist/core/web/public/next/assets/{Dialog-BRd_B9OE.js → Dialog-D3msQlCj.js} +2 -2
  300. package/dist/core/web/public/next/assets/{Dialog-BRd_B9OE.js.map → Dialog-D3msQlCj.js.map} +1 -1
  301. package/dist/core/web/public/next/assets/{DiffPane-Cpr9soB2.js → DiffPane-Ix6hvXlY.js} +2 -2
  302. package/dist/core/web/public/next/assets/{DiffPane-Cpr9soB2.js.map → DiffPane-Ix6hvXlY.js.map} +1 -1
  303. package/dist/core/web/public/next/assets/{DiffViewer-CNwd0W3Q.js → DiffViewer-C4WKsCIe.js} +2 -2
  304. package/dist/core/web/public/next/assets/{DiffViewer-CNwd0W3Q.js.map → DiffViewer-C4WKsCIe.js.map} +1 -1
  305. package/dist/core/web/public/next/assets/DockHost-aWP7liri.js +2 -0
  306. package/dist/core/web/public/next/assets/{DockHost-BcEq2qaS.js.map → DockHost-aWP7liri.js.map} +1 -1
  307. package/dist/core/web/public/next/assets/{EmptyState-DsN1H6MC.js → EmptyState-D2IRy3Cg.js} +2 -2
  308. package/dist/core/web/public/next/assets/{EmptyState-DsN1H6MC.js.map → EmptyState-D2IRy3Cg.js.map} +1 -1
  309. package/dist/core/web/public/next/assets/{Epistemic-fycQTBRO.js → Epistemic-DMr18muX.js} +2 -2
  310. package/dist/core/web/public/next/assets/{Epistemic-fycQTBRO.js.map → Epistemic-DMr18muX.js.map} +1 -1
  311. package/dist/core/web/public/next/assets/{EvidenceTimeline-sCCAdnBK.js → EvidenceTimeline-DXmmz6Fi.js} +2 -2
  312. package/dist/core/web/public/next/assets/{EvidenceTimeline-sCCAdnBK.js.map → EvidenceTimeline-DXmmz6Fi.js.map} +1 -1
  313. package/dist/core/web/public/next/assets/FleetSection-BfplcwFU.js +3 -0
  314. package/dist/core/web/public/next/assets/FleetSection-BfplcwFU.js.map +1 -0
  315. package/dist/core/web/public/next/assets/Funnel-Dh2yVHws.js +2 -0
  316. package/dist/core/web/public/next/assets/Funnel-Dh2yVHws.js.map +1 -0
  317. package/dist/core/web/public/next/assets/{GearTray-CpDt0xwj.js → GearTray-Dt-ee32-.js} +2 -2
  318. package/dist/core/web/public/next/assets/{GearTray-CpDt0xwj.js.map → GearTray-Dt-ee32-.js.map} +1 -1
  319. package/dist/core/web/public/next/assets/GrowthSection-P9EUfGeA.js +2 -0
  320. package/dist/core/web/public/next/assets/{GrowthSection-BvZezOsX.js.map → GrowthSection-P9EUfGeA.js.map} +1 -1
  321. package/dist/core/web/public/next/assets/{HandoffDialog-B1G6gQyk.js → HandoffDialog-CLJQLe7M.js} +2 -2
  322. package/dist/core/web/public/next/assets/{HandoffDialog-B1G6gQyk.js.map → HandoffDialog-CLJQLe7M.js.map} +1 -1
  323. package/dist/core/web/public/next/assets/{Input-CI0yBHmn.js → Input-D_KRJA9V.js} +2 -2
  324. package/dist/core/web/public/next/assets/{Input-CI0yBHmn.js.map → Input-D_KRJA9V.js.map} +1 -1
  325. package/dist/core/web/public/next/assets/LeaderCard-D-7DlJuR.js +2 -0
  326. package/dist/core/web/public/next/assets/LeaderCard-D-7DlJuR.js.map +1 -0
  327. package/dist/core/web/public/next/assets/LeaderCard-DNsbLwY3.css +1 -0
  328. package/dist/core/web/public/next/assets/LeaderConversation-DGZjWI-E.js +2 -0
  329. package/dist/core/web/public/next/assets/LeaderConversation-DGZjWI-E.js.map +1 -0
  330. package/dist/core/web/public/next/assets/LeaderConversation-DPHUTq6W.css +1 -0
  331. package/dist/core/web/public/next/assets/MatrixHeatmap-C7BCG2d7.js +2 -0
  332. package/dist/core/web/public/next/assets/MatrixHeatmap-C7BCG2d7.js.map +1 -0
  333. package/dist/core/web/public/next/assets/McpSection-DGbRcyv8.js +2 -0
  334. package/dist/core/web/public/next/assets/{McpSection-nuXer4K-.js.map → McpSection-DGbRcyv8.js.map} +1 -1
  335. package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js → MessageMarkdown-DFvk06qG.js} +3 -3
  336. package/dist/core/web/public/next/assets/{MessageMarkdown-BCe4TsXk.js.map → MessageMarkdown-DFvk06qG.js.map} +1 -1
  337. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DL3LU5kL.js → MessageMarkdownRenderer-BAv4oEUf.js} +2 -2
  338. package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DL3LU5kL.js.map → MessageMarkdownRenderer-BAv4oEUf.js.map} +1 -1
  339. package/dist/core/web/public/next/assets/{Meter-b69LM0mU.js → Meter-CMj-VafN.js} +2 -2
  340. package/dist/core/web/public/next/assets/{Meter-b69LM0mU.js.map → Meter-CMj-VafN.js.map} +1 -1
  341. package/dist/core/web/public/next/assets/MindSection-C6kLPIjt.js +3 -0
  342. package/dist/core/web/public/next/assets/MindSection-C6kLPIjt.js.map +1 -0
  343. package/dist/core/web/public/next/assets/{MutationTokenDialog-Bm34BNVV.js → MutationTokenDialog-DbnO8aYi.js} +2 -2
  344. package/dist/core/web/public/next/assets/{MutationTokenDialog-Bm34BNVV.js.map → MutationTokenDialog-DbnO8aYi.js.map} +1 -1
  345. package/dist/core/web/public/next/assets/NeedsYouDrawer-crsiX-Nc.js +3 -0
  346. package/dist/core/web/public/next/assets/NeedsYouDrawer-crsiX-Nc.js.map +1 -0
  347. package/dist/core/web/public/next/assets/{NeedsYouList-D5Kk549g.js → NeedsYouList-CCsijdWt.js} +2 -2
  348. package/dist/core/web/public/next/assets/{NeedsYouList-D5Kk549g.js.map → NeedsYouList-CCsijdWt.js.map} +1 -1
  349. package/dist/core/web/public/next/assets/NewChatDialog-BlCHtOIr.js +3 -0
  350. package/dist/core/web/public/next/assets/{NewChatDialog-BqFTWgHU.js.map → NewChatDialog-BlCHtOIr.js.map} +1 -1
  351. package/dist/core/web/public/next/assets/{OnboardingFlow-DcDsguAM.js → OnboardingFlow-Cy9BA9eR.js} +3 -3
  352. package/dist/core/web/public/next/assets/{OnboardingFlow-DcDsguAM.js.map → OnboardingFlow-Cy9BA9eR.js.map} +1 -1
  353. package/dist/core/web/public/next/assets/OnboardingGate-BXpNFoLt.js +3 -0
  354. package/dist/core/web/public/next/assets/{OnboardingGate-BZafM1Vf.js.map → OnboardingGate-BXpNFoLt.js.map} +1 -1
  355. package/dist/core/web/public/next/assets/PreviewPane-COid5A0f.js +2 -0
  356. package/dist/core/web/public/next/assets/{PreviewPane-zT3gK9TD.js.map → PreviewPane-COid5A0f.js.map} +1 -1
  357. package/dist/core/web/public/next/assets/{ProviderLogo-AwHn2sKm.js → ProviderLogo-Cq-CYIwT.js} +2 -2
  358. package/dist/core/web/public/next/assets/{ProviderLogo-AwHn2sKm.js.map → ProviderLogo-Cq-CYIwT.js.map} +1 -1
  359. package/dist/core/web/public/next/assets/{RailStatus-xHrovWvI.js → RailStatus-Co5UB6We.js} +2 -2
  360. package/dist/core/web/public/next/assets/{RailStatus-xHrovWvI.js.map → RailStatus-Co5UB6We.js.map} +1 -1
  361. package/dist/core/web/public/next/assets/{RefreshIndicator-SEFZlMB2.js → RefreshIndicator-DO9ibnSq.js} +2 -2
  362. package/dist/core/web/public/next/assets/{RefreshIndicator-SEFZlMB2.js.map → RefreshIndicator-DO9ibnSq.js.map} +1 -1
  363. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Dr2WRgkq.js +7 -0
  364. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CAxPQ4sZ.js.map → ResourcePoolConsoleApp-Dr2WRgkq.js.map} +1 -1
  365. package/dist/core/web/public/next/assets/ResourcesChrome-CwMnbqI1.js +3 -0
  366. package/dist/core/web/public/next/assets/ResourcesChrome-CwMnbqI1.js.map +1 -0
  367. package/dist/core/web/public/next/assets/ResourcesDrawer-B_Xp_JNc.js +2 -0
  368. package/dist/core/web/public/next/assets/ResourcesDrawer-B_Xp_JNc.js.map +1 -0
  369. package/dist/core/web/public/next/assets/ResourcesDrawer-DrGoO8KG.css +1 -0
  370. package/dist/core/web/public/next/assets/{RouteErrorBoundary-C8WGiixc.js → RouteErrorBoundary-SkNhhUbt.js} +2 -2
  371. package/dist/core/web/public/next/assets/{RouteErrorBoundary-C8WGiixc.js.map → RouteErrorBoundary-SkNhhUbt.js.map} +1 -1
  372. package/dist/core/web/public/next/assets/{RunInCloudAction-1-IPLYhf.js → RunInCloudAction-BXPlZwJQ.js} +2 -2
  373. package/dist/core/web/public/next/assets/{RunInCloudAction-1-IPLYhf.js.map → RunInCloudAction-BXPlZwJQ.js.map} +1 -1
  374. package/dist/core/web/public/next/assets/{SeatSelector-DpwNiX8F.js → SeatSelector-J5R3zDkB.js} +3 -3
  375. package/dist/core/web/public/next/assets/{SeatSelector-DpwNiX8F.js.map → SeatSelector-J5R3zDkB.js.map} +1 -1
  376. package/dist/core/web/public/next/assets/{Segmented-Wt1ATod9.js → Segmented-CGh_-tBb.js} +2 -2
  377. package/dist/core/web/public/next/assets/{Segmented-Wt1ATod9.js.map → Segmented-CGh_-tBb.js.map} +1 -1
  378. package/dist/core/web/public/next/assets/{Select-By-V9lMc.js → Select-CWnmUzs3.js} +2 -2
  379. package/dist/core/web/public/next/assets/{Select-By-V9lMc.js.map → Select-CWnmUzs3.js.map} +1 -1
  380. package/dist/core/web/public/next/assets/{SessionGate-WROS02tK.js → SessionGate-sp4KsnUo.js} +2 -2
  381. package/dist/core/web/public/next/assets/{SessionGate-WROS02tK.js.map → SessionGate-sp4KsnUo.js.map} +1 -1
  382. package/dist/core/web/public/next/assets/{SessionInsightChip-DNUcruwp.js → SessionInsightChip-DLFAzdbi.js} +2 -2
  383. package/dist/core/web/public/next/assets/{SessionInsightChip-DNUcruwp.js.map → SessionInsightChip-DLFAzdbi.js.map} +1 -1
  384. package/dist/core/web/public/next/assets/{SessionSearch-UHtt7a8f.js → SessionSearch-DbFjwR1h.js} +2 -2
  385. package/dist/core/web/public/next/assets/{SessionSearch-UHtt7a8f.js.map → SessionSearch-DbFjwR1h.js.map} +1 -1
  386. package/dist/core/web/public/next/assets/{SettingsSection-Bf74l0Gj.js → SettingsSection-Ch23msJ5.js} +2 -2
  387. package/dist/core/web/public/next/assets/SettingsSection-Ch23msJ5.js.map +1 -0
  388. package/dist/core/web/public/next/assets/{SetupChecklist-CzpEcfOl.js → SetupChecklist-Bd76MBAR.js} +2 -2
  389. package/dist/core/web/public/next/assets/{SetupChecklist-CzpEcfOl.js.map → SetupChecklist-Bd76MBAR.js.map} +1 -1
  390. package/dist/core/web/public/next/assets/ShadowDecisions-C5RAY91f.js +3 -0
  391. package/dist/core/web/public/next/assets/ShadowDecisions-C5RAY91f.js.map +1 -0
  392. package/dist/core/web/public/next/assets/{Sheet-HkBOBMTT.js → Sheet-BZ2AG4Eo.js} +2 -2
  393. package/dist/core/web/public/next/assets/{Sheet-HkBOBMTT.js.map → Sheet-BZ2AG4Eo.js.map} +1 -1
  394. package/dist/core/web/public/next/assets/{ShortcutsOverlay-DiigiT8H.js → ShortcutsOverlay-C8n8y3zf.js} +2 -2
  395. package/dist/core/web/public/next/assets/{ShortcutsOverlay-DiigiT8H.js.map → ShortcutsOverlay-C8n8y3zf.js.map} +1 -1
  396. package/dist/core/web/public/next/assets/Sidebar-DN--cPYN.js +3 -0
  397. package/dist/core/web/public/next/assets/{Sidebar-C9YtBYVZ.js.map → Sidebar-DN--cPYN.js.map} +1 -1
  398. package/dist/core/web/public/next/assets/{Slider-DaEDws-b.js → Slider-KVoJLDD6.js} +2 -2
  399. package/dist/core/web/public/next/assets/{Slider-DaEDws-b.js.map → Slider-KVoJLDD6.js.map} +1 -1
  400. package/dist/core/web/public/next/assets/StatTile-C4KgjltA.js +2 -0
  401. package/dist/core/web/public/next/assets/StatTile-C4KgjltA.js.map +1 -0
  402. package/dist/core/web/public/next/assets/StatTile-CNCqDoPO.css +1 -0
  403. package/dist/core/web/public/next/assets/{StatusBadge-CXG3iNL4.js → StatusBadge-CXsYqmdU.js} +2 -2
  404. package/dist/core/web/public/next/assets/{StatusBadge-CXG3iNL4.js.map → StatusBadge-CXsYqmdU.js.map} +1 -1
  405. package/dist/core/web/public/next/assets/StepBand-BMtVOFpK.js +2 -0
  406. package/dist/core/web/public/next/assets/StepBand-BMtVOFpK.js.map +1 -0
  407. package/dist/core/web/public/next/assets/{Surface-5bNA08tK.js → Surface-BfDmQcKe.js} +2 -2
  408. package/dist/core/web/public/next/assets/{Surface-5bNA08tK.js.map → Surface-BfDmQcKe.js.map} +1 -1
  409. package/dist/core/web/public/next/assets/Swimlane-B9Exxekk.js +2 -0
  410. package/dist/core/web/public/next/assets/Swimlane-B9Exxekk.js.map +1 -0
  411. package/dist/core/web/public/next/assets/Swimlane-Bf4Rjoy9.css +1 -0
  412. package/dist/core/web/public/next/assets/{Switch-BmCzfFnu.js → Switch-9NtO_6Lj.js} +2 -2
  413. package/dist/core/web/public/next/assets/{Switch-BmCzfFnu.js.map → Switch-9NtO_6Lj.js.map} +1 -1
  414. package/dist/core/web/public/next/assets/{Tag-WSUIaMVy.js → Tag-DscCRFcN.js} +2 -2
  415. package/dist/core/web/public/next/assets/{Tag-WSUIaMVy.js.map → Tag-DscCRFcN.js.map} +1 -1
  416. package/dist/core/web/public/next/assets/{TerminalPane-BVFgYX6K.js → TerminalPane-B668-DJW.js} +5 -5
  417. package/dist/core/web/public/next/assets/{TerminalPane-BVFgYX6K.js.map → TerminalPane-B668-DJW.js.map} +1 -1
  418. package/dist/core/web/public/next/assets/UniverseConsoleApp-BUV_brY7.js +2 -0
  419. package/dist/core/web/public/next/assets/{UniverseConsoleApp-BpphLqoz.js.map → UniverseConsoleApp-BUV_brY7.js.map} +1 -1
  420. package/dist/core/web/public/next/assets/{UniverseView-DbpbSMwO.js → UniverseView-DG70zH0W.js} +4 -4
  421. package/dist/core/web/public/next/assets/{UniverseView-DbpbSMwO.js.map → UniverseView-DG70zH0W.js.map} +1 -1
  422. package/dist/core/web/public/next/assets/UsageSection-DY7uOTm1.js +3 -0
  423. package/dist/core/web/public/next/assets/UsageSection-DY7uOTm1.js.map +1 -0
  424. package/dist/core/web/public/next/assets/VerseConsoleApp-CWU6R3By.js +3 -0
  425. package/dist/core/web/public/next/assets/VerseConsoleApp-CWU6R3By.js.map +1 -0
  426. package/dist/core/web/public/next/assets/Workspace-D1nP9BhD.js +10 -0
  427. package/dist/core/web/public/next/assets/{Workspace-RXy0pqp6.js.map → Workspace-D1nP9BhD.js.map} +1 -1
  428. package/dist/core/web/public/next/assets/actions-CY-PjpGc.js +2 -0
  429. package/dist/core/web/public/next/assets/{actions-BZTidCXZ.js.map → actions-CY-PjpGc.js.map} +1 -1
  430. package/dist/core/web/public/next/assets/actions-DkWhhWIg.css +1 -0
  431. package/dist/core/web/public/next/assets/{apps-model-CHO133qt.js → apps-model-Du02KhAf.js} +2 -2
  432. package/dist/core/web/public/next/assets/{apps-model-CHO133qt.js.map → apps-model-Du02KhAf.js.map} +1 -1
  433. package/dist/core/web/public/next/assets/{authority-model-8NeAEwAF.js → authority-model-79SeuKlJ.js} +2 -2
  434. package/dist/core/web/public/next/assets/{authority-model-8NeAEwAF.js.map → authority-model-79SeuKlJ.js.map} +1 -1
  435. package/dist/core/web/public/next/assets/autonomy-ladder-BGWmZzP7.css +1 -0
  436. package/dist/core/web/public/next/assets/autonomy-ladder.module-ArDv4bkr.js +2 -0
  437. package/dist/core/web/public/next/assets/autonomy-ladder.module-ArDv4bkr.js.map +1 -0
  438. package/dist/core/web/public/next/assets/budget-queries-D8QV5XtH.js +2 -0
  439. package/dist/core/web/public/next/assets/{budget-queries-DFF-3ICg.js.map → budget-queries-D8QV5XtH.js.map} +1 -1
  440. package/dist/core/web/public/next/assets/{capacity-strip-model-5ViUgUlP.js → capacity-strip-model-BwZ1ZbkU.js} +2 -2
  441. package/dist/core/web/public/next/assets/{capacity-strip-model-5ViUgUlP.js.map → capacity-strip-model-BwZ1ZbkU.js.map} +1 -1
  442. package/dist/core/web/public/next/assets/charts-BZ50mZD_.js +2 -0
  443. package/dist/core/web/public/next/assets/charts-BZ50mZD_.js.map +1 -0
  444. package/dist/core/web/public/next/assets/charts-ClCB18la.css +1 -0
  445. package/dist/core/web/public/next/assets/{cloud-model-CfRydq8N.js → cloud-model-BDivRMqv.js} +2 -2
  446. package/dist/core/web/public/next/assets/{cloud-model-CfRydq8N.js.map → cloud-model-BDivRMqv.js.map} +1 -1
  447. package/dist/core/web/public/next/assets/{cloud-queries-DmptbjS8.js → cloud-queries-BPQQ5_pJ.js} +2 -2
  448. package/dist/core/web/public/next/assets/{cloud-queries-DmptbjS8.js.map → cloud-queries-BPQQ5_pJ.js.map} +1 -1
  449. package/dist/core/web/public/next/assets/{colors-BZ3a9wFf.js → colors-DvK0wMHH.js} +2 -2
  450. package/dist/core/web/public/next/assets/{colors-BZ3a9wFf.js.map → colors-DvK0wMHH.js.map} +1 -1
  451. package/dist/core/web/public/next/assets/{command-catalog-ffCAijVY.js → command-catalog-BIntSa9l.js} +2 -2
  452. package/dist/core/web/public/next/assets/command-catalog-BIntSa9l.js.map +1 -0
  453. package/dist/core/web/public/next/assets/{context-model-CDeyP0cA.js → context-model-Br8t9jgG.js} +2 -2
  454. package/dist/core/web/public/next/assets/{context-model-CDeyP0cA.js.map → context-model-Br8t9jgG.js.map} +1 -1
  455. package/dist/core/web/public/next/assets/{context-model-Bb15chFt.js → context-model-CokrgEUq.js} +3 -3
  456. package/dist/core/web/public/next/assets/{context-model-Bb15chFt.js.map → context-model-CokrgEUq.js.map} +1 -1
  457. package/dist/core/web/public/next/assets/context-queries-eL3caKVG.js +2 -0
  458. package/dist/core/web/public/next/assets/{context-queries-_9bFWb9v.js.map → context-queries-eL3caKVG.js.map} +1 -1
  459. package/dist/core/web/public/next/assets/{control-queries-CXtmZZH6.js → control-queries-B9K-wmcB.js} +2 -2
  460. package/dist/core/web/public/next/assets/{control-queries-CXtmZZH6.js.map → control-queries-B9K-wmcB.js.map} +1 -1
  461. package/dist/core/web/public/next/assets/{copy-setup-BIp0iaiZ.js → copy-setup-XMgCC5f8.js} +2 -2
  462. package/dist/core/web/public/next/assets/{copy-setup-BIp0iaiZ.js.map → copy-setup-XMgCC5f8.js.map} +1 -1
  463. package/dist/core/web/public/next/assets/{dock-icons-Cc43W7r4.js → dock-icons-BJ6ZqB2t.js} +2 -2
  464. package/dist/core/web/public/next/assets/{dock-icons-Cc43W7r4.js.map → dock-icons-BJ6ZqB2t.js.map} +1 -1
  465. package/dist/core/web/public/next/assets/{fleet-model-DOK8ZtEt.js → fleet-model-BvDR3gjp.js} +2 -2
  466. package/dist/core/web/public/next/assets/{fleet-model-DOK8ZtEt.js.map → fleet-model-BvDR3gjp.js.map} +1 -1
  467. package/dist/core/web/public/next/assets/{fleet-queries-BeEAqD6y.js → fleet-queries-W2UFVMZJ.js} +2 -2
  468. package/dist/core/web/public/next/assets/{fleet-queries-BeEAqD6y.js.map → fleet-queries-W2UFVMZJ.js.map} +1 -1
  469. package/dist/core/web/public/next/assets/{focus-trap-ChZ5EFfM.js → focus-trap-CtI1SlMX.js} +2 -2
  470. package/dist/core/web/public/next/assets/{focus-trap-ChZ5EFfM.js.map → focus-trap-CtI1SlMX.js.map} +1 -1
  471. package/dist/core/web/public/next/assets/{format-BmH2yWL6.js → format-CH4g_sl1.js} +2 -2
  472. package/dist/core/web/public/next/assets/{format-BmH2yWL6.js.map → format-CH4g_sl1.js.map} +1 -1
  473. package/dist/core/web/public/next/assets/{format-DKrNjdwD.js → format-D7nBg2bn.js} +2 -2
  474. package/dist/core/web/public/next/assets/{format-DKrNjdwD.js.map → format-D7nBg2bn.js.map} +1 -1
  475. package/dist/core/web/public/next/assets/{git-model-BFwAVbxF.js → git-model-Dnkd1TnK.js} +2 -2
  476. package/dist/core/web/public/next/assets/{git-model-BFwAVbxF.js.map → git-model-Dnkd1TnK.js.map} +1 -1
  477. package/dist/core/web/public/next/assets/global-CMNW_dqn.js +2 -0
  478. package/dist/core/web/public/next/assets/{global-y_exIyAP.js.map → global-CMNW_dqn.js.map} +1 -1
  479. package/dist/core/web/public/next/assets/guarded-runners-YeAc9wLQ.js +2 -0
  480. package/dist/core/web/public/next/assets/{guarded-runners-Cd4POBtI.js.map → guarded-runners-YeAc9wLQ.js.map} +1 -1
  481. package/dist/core/web/public/next/assets/{icons-CygCEFWs.js → icons-D1sYbCTQ.js} +2 -2
  482. package/dist/core/web/public/next/assets/{icons-CygCEFWs.js.map → icons-D1sYbCTQ.js.map} +1 -1
  483. package/dist/core/web/public/next/assets/{index-CyK31YRm.js → index-DZ-UQ7v8.js} +3 -3
  484. package/dist/core/web/public/next/assets/{index-CyK31YRm.js.map → index-DZ-UQ7v8.js.map} +1 -1
  485. package/dist/core/web/public/next/assets/leader-focus-BjeJv7CW.js +2 -0
  486. package/dist/core/web/public/next/assets/leader-focus-BjeJv7CW.js.map +1 -0
  487. package/dist/core/web/public/next/assets/leader-thread-types-CDb-VPPO.js +2 -0
  488. package/dist/core/web/public/next/assets/leader-thread-types-CDb-VPPO.js.map +1 -0
  489. package/dist/core/web/public/next/assets/{live-model-D7hilYFk.js → live-model-D_32RAOR.js} +2 -2
  490. package/dist/core/web/public/next/assets/{live-model-D7hilYFk.js.map → live-model-D_32RAOR.js.map} +1 -1
  491. package/dist/core/web/public/next/assets/{mind.module-B15k0Y9q.js → mind.module-7hA92hRg.js} +2 -2
  492. package/dist/core/web/public/next/assets/{mind.module-B15k0Y9q.js.map → mind.module-7hA92hRg.js.map} +1 -1
  493. package/dist/core/web/public/next/assets/mutations-DQPbFdRJ.js +2 -0
  494. package/dist/core/web/public/next/assets/{mutations-CWlxEMEm.js.map → mutations-DQPbFdRJ.js.map} +1 -1
  495. package/dist/core/web/public/next/assets/{nav-mimleI0R.js → nav-0dOYe2rJ.js} +2 -2
  496. package/dist/core/web/public/next/assets/{nav-mimleI0R.js.map → nav-0dOYe2rJ.js.map} +1 -1
  497. package/dist/core/web/public/next/assets/{overnight-queries-DJ4mZKSj.js → overnight-queries-C4wOnFtE.js} +2 -2
  498. package/dist/core/web/public/next/assets/{overnight-queries-DJ4mZKSj.js.map → overnight-queries-C4wOnFtE.js.map} +1 -1
  499. package/dist/core/web/public/next/assets/primitives-2A5Eq8FQ.js +1 -0
  500. package/dist/core/web/public/next/assets/{queries-Bw1McHTj.js → queries-BTXWdZzU.js} +2 -2
  501. package/dist/core/web/public/next/assets/{queries-Bw1McHTj.js.map → queries-BTXWdZzU.js.map} +1 -1
  502. package/dist/core/web/public/next/assets/{reasoning-pref-KkhI_5-j.js → reasoning-pref-Ca6lN6x_.js} +2 -2
  503. package/dist/core/web/public/next/assets/{reasoning-pref-KkhI_5-j.js.map → reasoning-pref-Ca6lN6x_.js.map} +1 -1
  504. package/dist/core/web/public/next/assets/{reveal-anchor-CCCx_kfT.js → reveal-anchor-DfNLgK_I.js} +2 -2
  505. package/dist/core/web/public/next/assets/{reveal-anchor-CCCx_kfT.js.map → reveal-anchor-DfNLgK_I.js.map} +1 -1
  506. package/dist/core/web/public/next/assets/seat-subscription-C5uPHBsN.js +2 -0
  507. package/dist/core/web/public/next/assets/{seat-subscription-BhUUz7VL.js.map → seat-subscription-C5uPHBsN.js.map} +1 -1
  508. package/dist/core/web/public/next/assets/{sidebar-model-Dcd437cf.js → sidebar-model-CLCdqwkR.js} +2 -2
  509. package/dist/core/web/public/next/assets/{sidebar-model-Dcd437cf.js.map → sidebar-model-CLCdqwkR.js.map} +1 -1
  510. package/dist/core/web/public/next/assets/{slots-BL_J5mmV.js → slots-C-qBeu-8.js} +3 -3
  511. package/dist/core/web/public/next/assets/{slots-BL_J5mmV.js.map → slots-C-qBeu-8.js.map} +1 -1
  512. package/dist/core/web/public/next/assets/{surface-data-C3UAQ4QX.js → surface-data-Dj71tdD-.js} +2 -2
  513. package/dist/core/web/public/next/assets/{surface-data-C3UAQ4QX.js.map → surface-data-Dj71tdD-.js.map} +1 -1
  514. package/dist/core/web/public/next/assets/surface-prefetch-B0WdJOJG.js +2 -0
  515. package/dist/core/web/public/next/assets/surface-prefetch-B0WdJOJG.js.map +1 -0
  516. package/dist/core/web/public/next/assets/{tasks-model-CzHvclVm.js → tasks-model-O8yR5YXp.js} +2 -2
  517. package/dist/core/web/public/next/assets/{tasks-model-CzHvclVm.js.map → tasks-model-O8yR5YXp.js.map} +1 -1
  518. package/dist/core/web/public/next/assets/{terminal-icons-BwgQTQP0.js → terminal-icons-CoRZq9iO.js} +2 -2
  519. package/dist/core/web/public/next/assets/{terminal-icons-BwgQTQP0.js.map → terminal-icons-CoRZq9iO.js.map} +1 -1
  520. package/dist/core/web/public/next/assets/thread-data-DQB_g66d.js +2 -0
  521. package/dist/core/web/public/next/assets/thread-data-DQB_g66d.js.map +1 -0
  522. package/dist/core/web/public/next/assets/{usage-queries-pXxvy54x.js → usage-queries-AdjEyEtn.js} +2 -2
  523. package/dist/core/web/public/next/assets/{usage-queries-pXxvy54x.js.map → usage-queries-AdjEyEtn.js.map} +1 -1
  524. package/dist/core/web/public/next/assets/{use-guarded-action-EgVWjM5c.js → use-guarded-action-CuuMHeDX.js} +2 -2
  525. package/dist/core/web/public/next/assets/{use-guarded-action-EgVWjM5c.js.map → use-guarded-action-CuuMHeDX.js.map} +1 -1
  526. package/dist/core/web/public/next/assets/{use-ticker-BoqFxRFG.js → use-ticker-BBcp02SZ.js} +2 -2
  527. package/dist/core/web/public/next/assets/{use-ticker-BoqFxRFG.js.map → use-ticker-BBcp02SZ.js.map} +1 -1
  528. package/dist/core/web/public/next/assets/{use-token-gate-DSNIIpI6.js → use-token-gate-CbXVYQYI.js} +2 -2
  529. package/dist/core/web/public/next/assets/{use-token-gate-DSNIIpI6.js.map → use-token-gate-CbXVYQYI.js.map} +1 -1
  530. package/dist/core/web/public/next/assets/{useOnboarding-Bk0VnkxQ.js → useOnboarding-C_Fpe_sH.js} +2 -2
  531. package/dist/core/web/public/next/assets/{useOnboarding-Bk0VnkxQ.js.map → useOnboarding-C_Fpe_sH.js.map} +1 -1
  532. package/dist/core/web/public/next/assets/{useSeatsRefresh-q7Id9RcW.js → useSeatsRefresh-Co1CnxLc.js} +2 -2
  533. package/dist/core/web/public/next/assets/{useSeatsRefresh-q7Id9RcW.js.map → useSeatsRefresh-Co1CnxLc.js.map} +1 -1
  534. package/dist/core/web/public/next/assets/{useVerseTranscript-CqH51rt9.js → useVerseTranscript-DgbigUlV.js} +2 -2
  535. package/dist/core/web/public/next/assets/{useVerseTranscript-CqH51rt9.js.map → useVerseTranscript-DgbigUlV.js.map} +1 -1
  536. package/dist/core/web/public/next/assets/{verse-icons-DsG1dOQx.js → verse-icons-S56hIiXS.js} +2 -2
  537. package/dist/core/web/public/next/assets/{verse-icons-DsG1dOQx.js.map → verse-icons-S56hIiXS.js.map} +1 -1
  538. package/dist/core/web/public/next/assets/verse-model-DAVevkNe.js +2 -0
  539. package/dist/core/web/public/next/assets/{verse-model-JTuvRBVK.js.map → verse-model-DAVevkNe.js.map} +1 -1
  540. package/dist/core/web/public/next/assets/{warmup-Bv1RumVq.js → warmup-B_RAtNZ_.js} +3 -3
  541. package/dist/core/web/public/next/assets/{warmup-Bv1RumVq.js.map → warmup-B_RAtNZ_.js.map} +1 -1
  542. package/dist/core/web/public/next/assets/{why-seat-model-Cau8qG6O.js → why-seat-model-M_r0wX3b.js} +2 -2
  543. package/dist/core/web/public/next/assets/{why-seat-model-Cau8qG6O.js.map → why-seat-model-M_r0wX3b.js.map} +1 -1
  544. package/dist/core/web/public/next/assets/{workspace-model-D-SLfads.js → workspace-model-dji5-Al3.js} +2 -2
  545. package/dist/core/web/public/next/assets/{workspace-model-D-SLfads.js.map → workspace-model-dji5-Al3.js.map} +1 -1
  546. package/dist/core/web/public/next/index.html +1 -1
  547. package/dist/core/web/read-projection-worker.js +2 -1
  548. package/dist/core/web/read-projection-worker.js.map +1 -1
  549. package/dist/core/web/read-projections.d.ts +3 -0
  550. package/dist/core/web/read-projections.js +2 -2
  551. package/dist/core/web/read-projections.js.map +1 -1
  552. package/dist/core/web/visibility.js +3 -4
  553. package/dist/core/web/visibility.js.map +1 -1
  554. package/dist/release-dependency-inventory.json +1 -1
  555. package/package.json +3 -2
  556. package/dist/core/web/public/next/assets/Advanced-cVYTAsfB.js +0 -2
  557. package/dist/core/web/public/next/assets/AppsSection-DDqeSrty.js +0 -2
  558. package/dist/core/web/public/next/assets/AreaTrend-C32rUaxm.js +0 -2
  559. package/dist/core/web/public/next/assets/AreaTrend-C32rUaxm.js.map +0 -1
  560. package/dist/core/web/public/next/assets/AutonomySection-Dwn8UtOy.js +0 -2
  561. package/dist/core/web/public/next/assets/ChartFrame-BVuBe6RP.css +0 -1
  562. package/dist/core/web/public/next/assets/ChartFrame-DK_BDXCt.js +0 -2
  563. package/dist/core/web/public/next/assets/ChartFrame-DK_BDXCt.js.map +0 -1
  564. package/dist/core/web/public/next/assets/ChatSection-C9myY4ei.js +0 -3
  565. package/dist/core/web/public/next/assets/CommandPalette-DzPsth0u.js +0 -2
  566. package/dist/core/web/public/next/assets/CommandPalette-DzPsth0u.js.map +0 -1
  567. package/dist/core/web/public/next/assets/CommandSection-Brp73iox.js +0 -3
  568. package/dist/core/web/public/next/assets/CommandSection-Brp73iox.js.map +0 -1
  569. package/dist/core/web/public/next/assets/CommandSection-CvAVd1w4.css +0 -1
  570. package/dist/core/web/public/next/assets/DockHost-BcEq2qaS.js +0 -2
  571. package/dist/core/web/public/next/assets/FleetSection-BG8iGraG.js +0 -3
  572. package/dist/core/web/public/next/assets/FleetSection-BG8iGraG.js.map +0 -1
  573. package/dist/core/web/public/next/assets/Funnel-B88_wpA4.js +0 -2
  574. package/dist/core/web/public/next/assets/Funnel-B88_wpA4.js.map +0 -1
  575. package/dist/core/web/public/next/assets/GrowthSection-BvZezOsX.js +0 -2
  576. package/dist/core/web/public/next/assets/LeaderCard-BxxiEg4e.js +0 -2
  577. package/dist/core/web/public/next/assets/LeaderCard-BxxiEg4e.js.map +0 -1
  578. package/dist/core/web/public/next/assets/MatrixHeatmap-iPFEU2Tv.js +0 -2
  579. package/dist/core/web/public/next/assets/MatrixHeatmap-iPFEU2Tv.js.map +0 -1
  580. package/dist/core/web/public/next/assets/McpSection-nuXer4K-.js +0 -2
  581. package/dist/core/web/public/next/assets/MindSection-Dc5v5rH3.js +0 -2
  582. package/dist/core/web/public/next/assets/MindSection-Dc5v5rH3.js.map +0 -1
  583. package/dist/core/web/public/next/assets/NeedsYouDrawer-N1cWJjpz.js +0 -3
  584. package/dist/core/web/public/next/assets/NeedsYouDrawer-N1cWJjpz.js.map +0 -1
  585. package/dist/core/web/public/next/assets/NewChatDialog-BqFTWgHU.js +0 -3
  586. package/dist/core/web/public/next/assets/OnboardingGate-BZafM1Vf.js +0 -3
  587. package/dist/core/web/public/next/assets/PreviewPane-zT3gK9TD.js +0 -2
  588. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CAxPQ4sZ.js +0 -7
  589. package/dist/core/web/public/next/assets/ResourcesChrome-BnhnEdJe.js +0 -3
  590. package/dist/core/web/public/next/assets/ResourcesChrome-BnhnEdJe.js.map +0 -1
  591. package/dist/core/web/public/next/assets/ResourcesDrawer-BAFGodny.js +0 -2
  592. package/dist/core/web/public/next/assets/ResourcesDrawer-BAFGodny.js.map +0 -1
  593. package/dist/core/web/public/next/assets/ResourcesDrawer-BCFJ2Uq8.css +0 -1
  594. package/dist/core/web/public/next/assets/SettingsSection-Bf74l0Gj.js.map +0 -1
  595. package/dist/core/web/public/next/assets/Sidebar-C9YtBYVZ.js +0 -3
  596. package/dist/core/web/public/next/assets/StatTile-BuLMsJMx.css +0 -1
  597. package/dist/core/web/public/next/assets/StatTile-CTX41O6y.js +0 -2
  598. package/dist/core/web/public/next/assets/StatTile-CTX41O6y.js.map +0 -1
  599. package/dist/core/web/public/next/assets/StepBand-jJTqYIdX.js +0 -2
  600. package/dist/core/web/public/next/assets/StepBand-jJTqYIdX.js.map +0 -1
  601. package/dist/core/web/public/next/assets/Swimlane-LrslsGxw.js +0 -2
  602. package/dist/core/web/public/next/assets/Swimlane-LrslsGxw.js.map +0 -1
  603. package/dist/core/web/public/next/assets/Swimlane-o6_Zsrnr.css +0 -1
  604. package/dist/core/web/public/next/assets/UniverseConsoleApp-BpphLqoz.js +0 -2
  605. package/dist/core/web/public/next/assets/UsageSection-CUlaKtws.js +0 -3
  606. package/dist/core/web/public/next/assets/UsageSection-CUlaKtws.js.map +0 -1
  607. package/dist/core/web/public/next/assets/VerseConsoleApp-DXDv1aOi.js +0 -3
  608. package/dist/core/web/public/next/assets/VerseConsoleApp-DXDv1aOi.js.map +0 -1
  609. package/dist/core/web/public/next/assets/Workspace-RXy0pqp6.js +0 -10
  610. package/dist/core/web/public/next/assets/actions-BZTidCXZ.js +0 -2
  611. package/dist/core/web/public/next/assets/actions-BmIf9avl.css +0 -1
  612. package/dist/core/web/public/next/assets/budget-queries-DFF-3ICg.js +0 -2
  613. package/dist/core/web/public/next/assets/charts-CzxWrZn7.js +0 -2
  614. package/dist/core/web/public/next/assets/charts-CzxWrZn7.js.map +0 -1
  615. package/dist/core/web/public/next/assets/charts-DhKTrQLw.css +0 -1
  616. package/dist/core/web/public/next/assets/command-catalog-ffCAijVY.js.map +0 -1
  617. package/dist/core/web/public/next/assets/context-queries-_9bFWb9v.js +0 -2
  618. package/dist/core/web/public/next/assets/global-y_exIyAP.js +0 -2
  619. package/dist/core/web/public/next/assets/guarded-runners-Cd4POBtI.js +0 -2
  620. package/dist/core/web/public/next/assets/mutations-CWlxEMEm.js +0 -2
  621. package/dist/core/web/public/next/assets/primitives-DMijqcu0.js +0 -1
  622. package/dist/core/web/public/next/assets/seat-subscription-BhUUz7VL.js +0 -2
  623. package/dist/core/web/public/next/assets/surface-prefetch-BXKjPsV5.js +0 -2
  624. package/dist/core/web/public/next/assets/surface-prefetch-BXKjPsV5.js.map +0 -1
  625. package/dist/core/web/public/next/assets/verse-model-JTuvRBVK.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomy-ladder.module-ArDv4bkr.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/command/ladder-model.ts","../../../../../../src/web-ui/routes/verse/command/ladder-queries.ts","../../../../../../src/web-ui/routes/verse/command/autonomy-ladder.module.css"],"sourcesContent":["/**\n * routes/verse/command/ladder-model.ts — the pure decisions behind the\n * active fleet's rollout: Command's Autonomy status and Fleet's Shadow\n * decisions (3.14).\n *\n * Sources (both additive on the existing authority routes,\n * core/verse/autonomy-ladder.ts):\n * GET /api/verse/authority `ladder` + `rollout`\n * GET /api/verse/authority/ledger?view=decisions ShadowDecisionsV1\n *\n * Every number here is the SERVER's (rollout.ts evaluates the criteria); the\n * page only draws them. A value the server did not send is unknown, never 0.\n * Framework-free; tested directly.\n */\nimport type { AuthorityStatusV1 } from '../../../../core/authority/types.js';\nimport type { CloudTaskV1 } from '../../../../core/cloud/types.js';\nimport type {\n AutonomyLadderMoveV1,\n AutonomyLadderStageV1,\n AutonomyLadderV1,\n ShadowDecisionOutcome,\n ShadowDecisionV1,\n ShadowDecisionsV1,\n} from '../../../../core/verse/autonomy-ladder.js';\nimport type { ChipTone } from './authority-model.js';\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\n/** Re-approve is offered once the grant has less than this left (the chip warns at 3 days; this card earlier). */\nexport const GRANT_WARN_MS = 7 * DAY;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nconst strings = (v: unknown): v is string[] => Array.isArray(v) && v.every((s) => typeof s === 'string');\n\nfunction isStage(v: unknown): v is AutonomyLadderStageV1 {\n return isRecord(v) && typeof v['id'] === 'string' && typeof v['index'] === 'number' && strings(v['merging']) && strings(v['proposing'])\n && isRecord(v['criteria']) && (v['counts'] === 'merges' || v['counts'] === 'would-merge digests');\n}\n\n/** The status's `ladder`, when this server sends one this client can read. */\nexport function narrowLadder(status: AuthorityStatusV1 | null): AutonomyLadderV1 | null {\n const raw = status ? (status as AuthorityStatusV1 & { ladder?: unknown }).ladder : null;\n if (!isRecord(raw) || raw['v'] !== 1 || !Array.isArray(raw['stages']) || !raw['stages'].every(isStage)) return null;\n return raw as unknown as AutonomyLadderV1;\n}\n\nfunction isDecision(v: unknown): v is ShadowDecisionV1 {\n return isRecord(v) && typeof v['proposalId'] === 'string' && typeof v['repo'] === 'string' && typeof v['outcome'] === 'string'\n && Array.isArray(v['gates']) && typeof v['why'] === 'string' && typeof v['at'] === 'string';\n}\n\n/** GET …/ledger?view=decisions, narrowed (a row this client cannot read is dropped, never guessed). */\nexport function narrowDecisions(raw: unknown): ShadowDecisionsV1 | null {\n if (!isRecord(raw) || raw['v'] !== 1 || !Array.isArray(raw['decisions']) || !Array.isArray(raw['moves'])) return null;\n return {\n ...(raw as unknown as ShadowDecisionsV1),\n decisions: raw['decisions'].filter(isDecision),\n moves: (raw['moves'] as unknown[]).filter((m): m is AutonomyLadderMoveV1 => isRecord(m) && typeof m['toStageId'] === 'string' && typeof m['at'] === 'string'),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Words\n// ---------------------------------------------------------------------------\n\n/** \"shadow\" → \"Shadow\"; \"2a\" stays \"2a\". */\nexport function stageLabel(id: string): string {\n return /^[a-z]/.test(id) ? id[0]!.toUpperCase() + id.slice(1) : id;\n}\n\n/** \"ashlrai/ashlrcode\" → \"ashlrcode\" (the owner is the same everywhere in a fleet). */\nexport function repoShort(repo: string): string {\n const i = repo.indexOf('/');\n return i >= 0 ? repo.slice(i + 1) : repo;\n}\n\nfunction list(repos: readonly string[]): string {\n return repos.map(repoShort).join(', ');\n}\n\n/** \"just now\", \"12 m ago\", \"3 h ago\", \"2 d ago\" — `now` injected so it tests without a clock. */\nexport function ago(iso: string, now: number): string {\n const t = Date.parse(iso);\n if (!Number.isFinite(t)) return 'at an unknown time';\n const ms = Math.max(0, now - t);\n if (ms < MINUTE) return 'just now';\n if (ms < HOUR) return `${Math.floor(ms / MINUTE)} m ago`;\n if (ms < DAY) return `${Math.floor(ms / HOUR)} h ago`;\n return `${Math.floor(ms / DAY)} d ago`;\n}\n\n/** Hours as the rollout reports them (one decimal), without a trailing \".0\". */\nfunction hours(n: number): string {\n return Number.isInteger(n) ? String(n) : n.toFixed(1);\n}\n\n// ---------------------------------------------------------------------------\n// The ladder\n// ---------------------------------------------------------------------------\n\nexport type RungState = 'done' | 'current' | 'next' | 'later';\n\nexport interface RungView {\n id: string;\n label: string;\n index: number;\n state: RungState;\n merging: string[];\n proposing: string[];\n /** \"Merging: ashlrcode, fleet-canary\" / \"Nothing merges — propose only\". */\n mergeLine: string;\n /** \"Proposing: binshield\"; null when every repo at the stage merges. */\n proposeLine: string | null;\n /** \"low risk · ≤ 4 files / 150 lines · ≤ 6 merges/repo/day\". */\n capLine: string;\n /** \"Leaves after 5 would-merge digests and 12 h\". */\n exitLine: string;\n /** The accessible name: everything the hover card says, in one sentence. */\n aria: string;\n}\n\nexport interface ProgressBar {\n key: 'evidence' | 'hours';\n label: string;\n value: number;\n max: number;\n /** \"2 / 5\" or \"3.5 h / 12 h\". */\n text: string;\n met: boolean;\n}\n\nexport interface LadderView {\n stageId: string;\n /** \"Shadow\". */\n stageName: string;\n /** \"1 of 8\". */\n position: string;\n rungs: RungView[];\n /** The two criteria every stage has; the rest (green %, watches) are in `otherUnmet`. */\n bars: ProgressBar[];\n nextStageName: string | null;\n /** Every criterion met: the daemon advances on its next tick. */\n met: boolean;\n /** Unmet criteria other than the two bars (\"1 post-merge watch still running\"). */\n otherUnmet: string[];\n /** One line on what the NEXT stage changes (\"2a lets ashlrcode, fleet-canary merge\"). */\n nextLine: string | null;\n}\n\nfunction rung(stage: AutonomyLadderStageV1, current: number): RungView {\n const state: RungState = stage.index < current ? 'done' : stage.index === current ? 'current' : stage.index === current + 1 ? 'next' : 'later';\n const mergeLine = stage.merging.length > 0 ? `Merging: ${list(stage.merging)}` : 'Nothing merges — propose only';\n const proposeLine = stage.proposing.length > 0 ? `Proposing: ${list(stage.proposing)}` : null;\n const capLine = `${stage.maxRisk} risk · ≤ ${stage.maxFiles} files / ${stage.maxLines} lines${stage.maxMergesPerRepoPerDay > 0 ? ` · ≤ ${stage.maxMergesPerRepoPerDay} merges/repo/day` : ''}`;\n const c = stage.criteria;\n const exit = [`${c.minMerges} ${c.minMerges === 1 ? stage.counts.replace(/s$/, '') : stage.counts}`, `${c.minHours} h`];\n if (c.minPostMergeGreenPct > 0) exit.push(`≥ ${c.minPostMergeGreenPct}% green`);\n const exitLine = `Leaves after ${exit.join(', ')}`;\n const label = stageLabel(stage.id);\n const where = state === 'current' ? ' (current)' : state === 'done' ? ' (passed)' : '';\n return {\n id: stage.id,\n label,\n index: stage.index,\n state,\n merging: stage.merging,\n proposing: stage.proposing,\n mergeLine,\n proposeLine,\n capLine,\n exitLine,\n aria: [`Stage ${stage.index + 1}, ${label}${where}`, mergeLine, proposeLine, capLine, exitLine].filter(Boolean).join('. ') + '.',\n };\n}\n\n/** Criteria the bars already show (rollout.ts words them \"3 of 5 …\" and \"6 h of 12 h\"). */\nconst BAR_UNMET = /^\\d+ of \\d+ (merges|would-merge digests)$|^\\d+ h of \\d+ h$/;\n\n/**\n * The ladder as Command draws it; null unless a grant is ACTIVE and the\n * server sent both its ladder and its rollout position (anything else is the\n * off-state's job, never a half-drawn ladder).\n */\nexport function ladderView(status: AuthorityStatusV1 | null): LadderView | null {\n if (!status || status.grant.state !== 'active') return null;\n const ladder = narrowLadder(status);\n const rollout = status.rollout;\n if (!ladder || !rollout || ladder.stages.length === 0) return null;\n const current = ladder.stages[rollout.stageIndex];\n if (!current || current.id !== rollout.stageId) return null;\n const c = rollout.criteria;\n const bars: ProgressBar[] = [\n {\n key: 'evidence',\n label: current.counts === 'merges' ? 'Merges' : 'Would-merge digests',\n value: rollout.merges,\n max: c.minMerges,\n text: `${rollout.merges} / ${c.minMerges}`,\n met: rollout.merges >= c.minMerges,\n },\n {\n key: 'hours',\n label: 'Hours in stage',\n value: Math.min(rollout.hoursInStage, c.minHours),\n max: c.minHours,\n text: `${hours(Math.floor(rollout.hoursInStage * 10) / 10)} h / ${c.minHours} h`,\n met: rollout.hoursInStage >= c.minHours,\n },\n ];\n const next = ladder.stages[rollout.stageIndex + 1] ?? null;\n const newlyMerging = next ? next.merging.filter((r) => !current.merging.includes(r)) : [];\n const nextLine = next\n ? newlyMerging.length > 0\n ? `${stageLabel(next.id)} lets ${list(newlyMerging)} merge`\n : `${stageLabel(next.id)}: ${next.maxRisk} risk, ≤ ${next.maxFiles} files / ${next.maxLines} lines`\n : null;\n return {\n stageId: rollout.stageId,\n stageName: stageLabel(rollout.stageId),\n position: `${rollout.stageIndex + 1} of ${rollout.stageCount}`,\n rungs: ladder.stages.map((s) => rung(s, rollout.stageIndex)),\n bars,\n nextStageName: rollout.nextStageId ? stageLabel(rollout.nextStageId) : null,\n met: rollout.met,\n otherUnmet: rollout.unmet.filter((u) => !BAR_UNMET.test(u)),\n nextLine,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Grant expiry\n// ---------------------------------------------------------------------------\n\nexport interface GrantExpiry {\n /** \"23 d left\" / \"4 d 6 h left\" / \"5 h left\". */\n text: string;\n tone: ChipTone;\n /** Under GRANT_WARN_MS: the card offers Re-approve. */\n warn: boolean;\n /** Absolute time, for the tooltip. */\n until: string;\n}\n\nexport function grantExpiry(status: AuthorityStatusV1 | null, now: number): GrantExpiry | null {\n if (!status || status.grant.state !== 'active' || !status.grant.expiresAt) return null;\n const at = Date.parse(status.grant.expiresAt);\n if (!Number.isFinite(at)) return null;\n const left = at - now;\n const d = Math.floor(left / DAY);\n const h = Math.floor((left - d * DAY) / HOUR);\n const text = left <= 0\n ? 'expired'\n : left >= 3 * DAY\n ? `${d} d left`\n : left >= DAY\n ? `${d} d ${h} h left`\n : left >= HOUR\n ? `${Math.floor(left / HOUR)} h left`\n : `${Math.max(1, Math.floor(left / MINUTE))} m left`;\n const tone: ChipTone = left < DAY ? 'danger' : left < GRANT_WARN_MS ? 'warning' : 'success';\n return {\n text,\n tone,\n warn: left < GRANT_WARN_MS,\n until: new Date(at).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }),\n };\n}\n\n// ---------------------------------------------------------------------------\n// What happened last\n// ---------------------------------------------------------------------------\n\nexport interface LastEvent {\n text: string;\n tone: ChipTone;\n at: string | null;\n}\n\nfunction moveText(m: AutonomyLadderMoveV1): LastEvent {\n if (m.move === 'regressed') {\n const why = m.breach ? `: ${m.breach.replace(/[.]$/, '')}` : '';\n return { text: `Dropped back to ${stageLabel(m.toStageId)}${m.fromStageId ? ` from ${stageLabel(m.fromStageId)}` : ''}${why}.`, tone: 'danger', at: m.at };\n }\n return { text: `Advanced to ${stageLabel(m.toStageId)}${m.fromStageId ? ` from ${stageLabel(m.fromStageId)}` : ''}.`, tone: 'success', at: m.at };\n}\n\nexport const OUTCOME_WORD: Readonly<Record<ShadowDecisionOutcome, string>> = {\n 'would-merge': 'Would merge',\n merged: 'Merged',\n refused: 'Refused',\n 'owner-lane': 'Owner lane',\n waiting: 'Waiting',\n 'in-progress': 'In the gates',\n};\n\nexport const OUTCOME_TONE: Readonly<Record<ShadowDecisionOutcome, ChipTone>> = {\n 'would-merge': 'success',\n merged: 'success',\n refused: 'danger',\n 'owner-lane': 'warning',\n waiting: 'neutral',\n 'in-progress': 'neutral',\n};\n\nfunction decisionText(d: ShadowDecisionV1): LastEvent {\n const what = d.prNumber !== null ? `${repoShort(d.repo)} #${d.prNumber}` : repoShort(d.repo);\n const tone = OUTCOME_TONE[d.outcome];\n switch (d.outcome) {\n case 'would-merge':\n return { text: `Would merge ${what} — every gate passed.`, tone, at: d.at };\n case 'merged':\n return { text: `Merged ${what}.`, tone, at: d.at };\n default:\n return { text: `${what}: ${d.why}`, tone, at: d.at };\n }\n}\n\n/**\n * The one line \"what happened last\": the newest of the ladder's last move\n * (from the status — always there when a move happened) and the decisions\n * view's newest decision / move. `decisions`: undefined while the first read\n * is in flight, null when it answered without a readable view.\n */\nexport function lastEvent(ladder: AutonomyLadderV1 | null, decisions: ShadowDecisionsV1 | null | undefined): LastEvent {\n const candidates: LastEvent[] = [];\n if (ladder?.lastMove) candidates.push(moveText(ladder.lastMove));\n if (decisions?.moves[0]) candidates.push(moveText(decisions.moves[0]));\n if (decisions?.decisions[0]) candidates.push(decisionText(decisions.decisions[0]));\n const dated = candidates.filter((c) => c.at !== null && Number.isFinite(Date.parse(c.at)));\n dated.sort((a, b) => Date.parse(b.at!) - Date.parse(a.at!));\n if (dated[0]) return dated[0];\n if (decisions) return { text: 'Nothing has reached the merge gates yet under this grant.', tone: 'neutral', at: null };\n if (decisions === null) return { text: 'The latest decision could not be read.', tone: 'unknown', at: null };\n return { text: 'Reading the latest decision…', tone: 'unknown', at: null };\n}\n\n// ---------------------------------------------------------------------------\n// Fleet: the decisions list\n// ---------------------------------------------------------------------------\n\n/** Regressions shown prominently above the list: the newest few, newest first. */\nexport function recentRegressions(decisions: ShadowDecisionsV1 | null, limit = 3): AutonomyLadderMoveV1[] {\n return (decisions?.moves ?? []).filter((m) => m.move === 'regressed').slice(0, limit);\n}\n\n/** \"+30 −4 · 2 files · low\" for a would-merge digest; null without one. */\nexport function sizeLine(d: ShadowDecisionV1): string | null {\n if (d.files === null && d.linesAdded === null) return null;\n const parts: string[] = [];\n if (d.linesAdded !== null || d.linesDeleted !== null) parts.push(`+${d.linesAdded ?? 0} −${d.linesDeleted ?? 0}`);\n if (d.files !== null) parts.push(`${d.files} file${d.files === 1 ? '' : 's'}`);\n if (d.risk) parts.push(`${d.risk} risk`);\n return parts.join(' · ');\n}\n\n/** GitHub URL of the fleet PR, when the repo is an owner/name slug and a PR exists. */\nexport function prUrl(d: Pick<ShadowDecisionV1, 'repo' | 'prNumber'>): string | null {\n if (d.prNumber === null || !/^[A-Za-z0-9-]+\\/[A-Za-z0-9._-]+$/.test(d.repo)) return null;\n return `https://github.com/${d.repo}/pull/${d.prNumber}`;\n}\n\n/**\n * The cloud task whose intake filed this proposal (3.13 cloud intake), so the\n * row can open that task's evidence timeline. Null when no task names it —\n * a proposal the fleet produced itself has no cloud timeline.\n */\nexport function cloudTaskFor(\n d: Pick<ShadowDecisionV1, 'proposalId' | 'repo'>,\n tasks: readonly Pick<CloudTaskV1, 'id' | 'title' | 'repo' | 'intake'>[] | null | undefined,\n): { id: string; title: string } | null {\n const hit = (tasks ?? []).find((t) => t.intake?.proposalId === d.proposalId && t.repo.toLowerCase() === d.repo.toLowerCase());\n return hit ? { id: hit.id, title: hit.title } : null;\n}\n\n/** Tone of a gate verdict chip. */\nexport function gateTone(verdict: string): ChipTone {\n if (verdict === 'pass') return 'success';\n if (verdict === 'refuse') return 'danger';\n if (verdict === 'owner-lane') return 'warning';\n return 'neutral';\n}\n","/**\n * routes/verse/command/ladder-queries.ts — the shadow-decisions read (3.14).\n *\n * GET /api/verse/authority/ledger?view=decisions&limit=40 ShadowDecisionsV1\n *\n * Optional like every surface read (surface-data.ts): a server without the\n * view answers 400/404, which is \"no decisions in this build\", one card's\n * designed state. The server caches the fold by ledger head, so Command's and\n * Fleet's polls (one shared cache key) cost a read only when the fleet wrote.\n *\n * LAZY ONLY: imported by AutonomyStatus and ShadowDecisions, both behind\n * React.lazy — never on the chat first-paint path.\n */\nimport { optionalQuery } from './surface-data.js';\nimport { narrowDecisions } from './ladder-model.js';\n\nexport const AUTHORITY_DECISIONS_PATH = '/api/verse/authority/ledger?view=decisions&limit=40';\n\nexport const DECISIONS_KEY = 'verse-authority-decisions';\n\n/** Decisions change once per fleet tick at most; half a minute keeps both surfaces current. */\nexport const DECISIONS_POLL_MS = 30_000;\n\nexport const decisionsQuery = optionalQuery(DECISIONS_KEY, AUTHORITY_DECISIONS_PATH, 'Shadow decisions', narrowDecisions);\n","/*\n * routes/verse/command/autonomy-ladder.module.css — Command's Autonomy status\n * and Fleet's Shadow decisions (3.14). Tokens only (style-scan-310): no raw\n * hex colours, no px font sizes.\n */\n\n/* ---- Command: the status panel ----------------------------------------- */\n.panel {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n padding: var(--space-3) var(--card-pad);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n min-width: 0;\n}\n\n.head {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2) var(--space-3);\n min-width: 0;\n}\n\n.micro {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-tertiary);\n flex: none;\n}\n\n.stage {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.position {\n font-weight: var(--font-weight-regular);\n color: var(--text-secondary);\n}\n\n.switchState {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n\n.held {\n color: var(--text-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.spacer {\n flex: 1;\n}\n\n.grant {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n font-variant-numeric: tabular-nums;\n}\n\n.grant[data-tone='warning'] {\n color: var(--status-warning-fg);\n}\n\n.grant[data-tone='danger'] {\n color: var(--status-danger-fg);\n}\n\n/* The ladder: eight equal rungs, one row; the current one filled. */\n.ladder {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: minmax(0, 1fr);\n gap: var(--space-1);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.rungItem {\n display: flex;\n min-width: 0;\n}\n\n.rung {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: var(--control-h-sm);\n padding: 0 var(--space-1);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: default;\n}\n\n.rung[data-state='done'] {\n background: var(--bg-hover);\n color: var(--text-secondary);\n}\n\n.rung[data-state='current'] {\n border-color: var(--accent-500);\n background: var(--bg-selected);\n color: var(--text-primary);\n font-weight: var(--font-weight-semibold);\n}\n\n.rung[data-state='next'] {\n border-style: dashed;\n border-color: var(--border-default);\n color: var(--text-secondary);\n}\n\n.rung:focus-visible,\n.linkButton:focus-visible,\n.decisionLink:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n}\n\n.rungTip {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-width: 320px;\n}\n\n.progress {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: var(--space-2) var(--space-5);\n}\n\n.meter {\n flex: 0 1 200px;\n min-width: 140px;\n}\n\n.next {\n flex: 1 1 240px;\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n\n.unmet {\n color: var(--text-tertiary);\n}\n\n.last {\n display: flex;\n align-items: baseline;\n gap: var(--space-3);\n margin: 0;\n padding-top: var(--space-2);\n border-top: 1px solid var(--border-subtle);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-primary);\n min-width: 0;\n}\n\n.lastText {\n flex: 1;\n min-width: 0;\n}\n\n.last[data-tone='danger'] .lastText {\n color: var(--status-danger-fg);\n}\n\n.when {\n color: var(--text-tertiary);\n white-space: nowrap;\n}\n\n.linkButton,\n.decisionLink {\n flex: none;\n padding: 0;\n border: 0;\n background: none;\n color: var(--text-link);\n font: inherit;\n font-size: var(--text-xs-size);\n cursor: pointer;\n white-space: nowrap;\n text-decoration: none;\n}\n\n.linkButton:hover,\n.decisionLink:hover {\n text-decoration: underline;\n}\n\n\n/* ---- Fleet: shadow decisions ------------------------------------------- */\n.stackGap {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n min-width: 0;\n}\n\n.regressions {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.regression {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--space-1) var(--space-3);\n padding: var(--space-2) var(--space-3);\n border: 1px solid var(--status-danger-solid);\n border-radius: var(--radius-md);\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n\n.regressionTitle {\n font-weight: var(--font-weight-semibold);\n}\n\n.decisions {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.decision {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: var(--space-1) var(--space-3);\n padding: var(--space-3) 0;\n border-top: 1px solid var(--border-subtle);\n min-width: 0;\n}\n\n.decision:first-child {\n border-top: 0;\n padding-top: 0;\n}\n\n.decisionHead {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--space-1) var(--space-2);\n min-width: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n\n.repo {\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.meta {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n font-variant-numeric: tabular-nums;\n}\n\n.mono {\n font-family: var(--font-mono);\n}\n\n.outcome {\n display: inline-flex;\n align-items: center;\n padding: 0 var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n white-space: nowrap;\n}\n\n.outcome[data-tone='success'],\n.gate[data-tone='success'] {\n background: var(--status-success-bg);\n color: var(--status-success-fg);\n}\n\n.outcome[data-tone='danger'],\n.gate[data-tone='danger'] {\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n\n.outcome[data-tone='warning'],\n.gate[data-tone='warning'] {\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n}\n\n.why {\n grid-column: 1 / -1;\n margin: 0;\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.gates {\n grid-column: 1 / -1;\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-1);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.gate {\n display: inline-flex;\n align-items: center;\n min-width: 2.5em;\n justify-content: center;\n padding: 0 var(--space-1);\n border-radius: var(--radius-sm);\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n}\n\n.gate[data-tone='absent'] {\n background: transparent;\n border: 1px dashed var(--border-subtle);\n color: var(--text-tertiary);\n}\n\n.links {\n display: inline-flex;\n align-items: baseline;\n gap: var(--space-3);\n}\n\n.muted {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n@media (max-width: 600px) {\n .ladder {\n grid-auto-flow: row;\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .last {\n flex-wrap: wrap;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{I as e,O as t,W as n,l as r,u as i}from"./global-CMNW_dqn.js";import{i as a}from"./VerseConsoleApp-CWU6R3By.js";var o=`verse-budget`,s=`verse-budget-preview`,c=`/api/verse/budget`,l=`/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true`,u={key:o,fetch:e=>r(c,e)},d={key:s,fetch:e=>r(l,e)};async function f(r){let l=t();if(!l)throw new a;let u=await i(c,r,l);return e(),n(o),n(s),u}export{u as n,f as r,d as t};
2
+ //# sourceMappingURL=budget-queries-D8QV5XtH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"budget-queries-DFF-3ICg.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/budget/budget-queries.ts"],"sourcesContent":["/**\n * routes/verse/budget/budget-queries.ts — the reads and the one write behind\n * the Budget panel (core/routing/budget-api.ts).\n *\n * GET /api/verse/budget → BudgetView (policy + live headroom)\n * GET /api/verse/budget/preview → SeatDecision for \"the next medium\n * autonomous code task\"\n * POST /api/verse/budget → BudgetView after ONE change\n *\n * Nothing here spends: every route is a file read / pure computation on the\n * server. Writes pull the held mutation token (like verse-queries.ts), touch\n * the hold on success, and invalidate both keys so the headroom bars and the\n * \"next task goes to…\" line move together.\n */\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport type { BudgetUpdateRequest, SeatDecision } from '../../../../core/routing/types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { apiGet, apiPost } from '../../../data/client.js';\nimport { invalidate } from '../../../data/cache.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { VerseMutationLockedError } from '../verse-queries.js';\n\nexport const BUDGET_KEY = 'verse-budget';\nexport const BUDGET_PREVIEW_KEY = 'verse-budget-preview';\nexport const BUDGET_PATH = '/api/verse/budget';\nexport const BUDGET_PREVIEW_PATH = '/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true';\n\nexport const budgetQuery: QueryDef<BudgetView> = {\n key: BUDGET_KEY,\n fetch: (signal) => apiGet<BudgetView>(BUDGET_PATH, signal),\n};\n\nexport const budgetPreviewQuery: QueryDef<SeatDecision> = {\n key: BUDGET_PREVIEW_KEY,\n fetch: (signal) => apiGet<SeatDecision>(BUDGET_PREVIEW_PATH, signal),\n};\n\n/**\n * The per-seat patch as it goes on the wire. `null` clears an optional field\n * (the server's parser accepts it; the frozen contract's Partial<> cannot say\n * \"remove\" because JSON has no `undefined`).\n */\nexport interface BudgetSeatPatchWire {\n enabled?: boolean;\n reservePercent?: number;\n maxSessionWindowPercent?: number | null;\n dailyUsdCap?: number | null;\n}\n\n/** `BudgetUpdateRequest`, widened only by the `null`-clears rule above. */\nexport type BudgetUpdateWire = Extract<BudgetUpdateRequest, { mode: unknown }>\n | { seatId: string; policy: BudgetSeatPatchWire };\n\nexport async function updateBudget(update: BudgetUpdateWire): Promise<BudgetView> {\n const token = getMutationToken();\n if (!token) throw new VerseMutationLockedError();\n const view = await apiPost<BudgetView>(BUDGET_PATH, update, token);\n touchMutationHold();\n invalidate(BUDGET_KEY);\n invalidate(BUDGET_PREVIEW_KEY);\n return view;\n}\n"],"mappings":"uHAsBA,IAAa,EAAa,eACb,EAAqB,uBACrB,EAAc,oBACd,EAAsB,wEAEtB,EAAoC,CAC/C,IAAK,EACL,MAAQ,GAAW,EAAmB,EAAa,CAAM,CAC3D,EAEa,EAA6C,CACxD,IAAK,EACL,MAAQ,GAAW,EAAqB,EAAqB,CAAM,CACrE,EAkBA,eAAsB,EAAa,EAA+C,CAChF,IAAM,EAAQ,EAAiB,EAC/B,GAAI,CAAC,EAAO,MAAM,IAAI,EACtB,IAAM,EAAO,MAAM,EAAoB,EAAa,EAAQ,CAAK,EAIjE,OAHA,EAAkB,EAClB,EAAW,CAAU,EACrB,EAAW,CAAkB,EACtB,CACT"}
1
+ {"version":3,"file":"budget-queries-D8QV5XtH.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/budget/budget-queries.ts"],"sourcesContent":["/**\n * routes/verse/budget/budget-queries.ts — the reads and the one write behind\n * the Budget panel (core/routing/budget-api.ts).\n *\n * GET /api/verse/budget → BudgetView (policy + live headroom)\n * GET /api/verse/budget/preview → SeatDecision for \"the next medium\n * autonomous code task\"\n * POST /api/verse/budget → BudgetView after ONE change\n *\n * Nothing here spends: every route is a file read / pure computation on the\n * server. Writes pull the held mutation token (like verse-queries.ts), touch\n * the hold on success, and invalidate both keys so the headroom bars and the\n * \"next task goes to…\" line move together.\n */\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport type { BudgetUpdateRequest, SeatDecision } from '../../../../core/routing/types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { apiGet, apiPost } from '../../../data/client.js';\nimport { invalidate } from '../../../data/cache.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { VerseMutationLockedError } from '../verse-queries.js';\n\nexport const BUDGET_KEY = 'verse-budget';\nexport const BUDGET_PREVIEW_KEY = 'verse-budget-preview';\nexport const BUDGET_PATH = '/api/verse/budget';\nexport const BUDGET_PREVIEW_PATH = '/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true';\n\nexport const budgetQuery: QueryDef<BudgetView> = {\n key: BUDGET_KEY,\n fetch: (signal) => apiGet<BudgetView>(BUDGET_PATH, signal),\n};\n\nexport const budgetPreviewQuery: QueryDef<SeatDecision> = {\n key: BUDGET_PREVIEW_KEY,\n fetch: (signal) => apiGet<SeatDecision>(BUDGET_PREVIEW_PATH, signal),\n};\n\n/**\n * The per-seat patch as it goes on the wire. `null` clears an optional field\n * (the server's parser accepts it; the frozen contract's Partial<> cannot say\n * \"remove\" because JSON has no `undefined`).\n */\nexport interface BudgetSeatPatchWire {\n enabled?: boolean;\n reservePercent?: number;\n maxSessionWindowPercent?: number | null;\n dailyUsdCap?: number | null;\n}\n\n/** `BudgetUpdateRequest`, widened only by the `null`-clears rule above. */\nexport type BudgetUpdateWire = Extract<BudgetUpdateRequest, { mode: unknown }>\n | { seatId: string; policy: BudgetSeatPatchWire };\n\nexport async function updateBudget(update: BudgetUpdateWire): Promise<BudgetView> {\n const token = getMutationToken();\n if (!token) throw new VerseMutationLockedError();\n const view = await apiPost<BudgetView>(BUDGET_PATH, update, token);\n touchMutationHold();\n invalidate(BUDGET_KEY);\n invalidate(BUDGET_PREVIEW_KEY);\n return view;\n}\n"],"mappings":"uHAsBA,IAAa,EAAa,eACb,EAAqB,uBACrB,EAAc,oBACd,EAAsB,wEAEtB,EAAoC,CAC/C,IAAK,EACL,MAAQ,GAAW,EAAmB,EAAa,CAAM,CAC3D,EAEa,EAA6C,CACxD,IAAK,EACL,MAAQ,GAAW,EAAqB,EAAqB,CAAM,CACrE,EAkBA,eAAsB,EAAa,EAA+C,CAChF,IAAM,EAAQ,EAAiB,EAC/B,GAAI,CAAC,EAAO,MAAM,IAAI,EACtB,IAAM,EAAO,MAAM,EAAoB,EAAa,EAAQ,CAAK,EAIjE,OAHA,EAAkB,EAClB,EAAW,CAAU,EACrB,EAAW,CAAkB,EACtB,CACT"}
@@ -1,2 +1,2 @@
1
- import{D as e,F as t,K as n,c as r,l as i}from"./global-y_exIyAP.js";import{Ht as a,i as o}from"./VerseConsoleApp-DXDv1aOi.js";import{r as s}from"./verse-model-JTuvRBVK.js";import{_ as c,b as l,y as u}from"./format-BmH2yWL6.js";import{n as d,t as f}from"./seat-subscription-BhUUz7VL.js";import{v as p}from"./context-model-Bb15chFt.js";var m=`verse-health`,h=`/api/verse/health`,g={key:m,fetch:e=>r(h,e)};function _(e,t){let n=!1;return()=>n?t():(n=!0,e())}async function v(n,r){let a=e();if(!a)throw new o;let s=await i(n,r,a);return t(),s}async function ee(){let e=await v(`${h}/refresh`,{});return await n(m,_(()=>Promise.resolve(e),()=>g.fetch()),!0),e}async function te(e){await v(`${h}/reconnect`,{seatId:e})}Object.freeze({"all-in":Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:0}),codex:Object.freeze({enabled:!1,reservePercent:0}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),balanced:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:40,maxSessionWindowPercent:70}),codex:Object.freeze({enabled:!1,reservePercent:40,maxSessionWindowPercent:70}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),reserve:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:85,maxSessionWindowPercent:50}),codex:Object.freeze({enabled:!1,reservePercent:85,maxSessionWindowPercent:50}),grok:Object.freeze({enabled:!0,reservePercent:85}),local:Object.freeze({enabled:!0,reservePercent:0})})});var y=Object.freeze({"all-in":`Autonomy may use all available usage on every enabled seat.`,balanced:`Autonomy stops at each seat’s reserve, so you keep headroom for your own sessions.`,reserve:`Autonomy runs on free local models, plus only a small slice of paid seats.`}),b={eligible:`Eligible`,held:`Held back`,off:`Off`,unknown:`No reading`},x=[{value:`reserve`,label:`Reserve`,description:y.reserve},{value:`balanced`,label:`Balanced`,description:y.balanced},{value:`all-in`,label:`All-in`,description:y[`all-in`]}];function S(e,t){if(!t)return!1;let n=e=>x.findIndex(t=>t.value===e);return n(e)>n(t)}function C(e){return Math.round(e)}function w(e,t,n){return t.enabled?n?.eligibleForAutonomy?`eligible`:!e&&(n===null||n.sessionUsedPercent===null&&n.weeklyUsedPercent===null)?`unknown`:`held`:`off`}function T(e,t,n,r){if(t||r===null)return[];let i=[],a=100-n.reservePercent,o=r.weeklyUsedPercent!==null||e===`claude`||e===`grok`;if(o){let t=r.weeklyUsedPercent;i.push({kind:`weekly`,label:e===`grok`?`Billing period`:`Weekly`,usedPercent:t,ceilingPercent:a,binding:r.bindingWindow===`weekly`,description:t===null?`Weekly window: no reading.`:`Weekly window ${c(t)} used; autonomy stops at ${C(a)}%, ${C(n.reservePercent)}% kept for you.`})}if(r.sessionUsedPercent!==null||e===`claude`){let e=r.sessionUsedPercent,t=n.maxSessionWindowPercent??100,s=o?t:Math.min(t,a);i.push({kind:`session`,label:`5-hour`,usedPercent:e,ceilingPercent:s,binding:r.bindingWindow===`session`,description:e===null?`5-hour window: no reading.`:`5-hour window ${c(e)} used; ${s>=100?`no autonomy ceiling`:`autonomy stops at ${C(s)}%`}.`})}return i}function E(e,t=Date.now()){let n=new Map(e.headroom.map(e=>[e.seatId,e]));return e.seatInfo.map(r=>{let i=e.effective[r.seatId]??{seatId:r.seatId,enabled:!1,reservePercent:100},a=n.get(r.seatId)??null,o=(a?.reasons??[]).map(e=>u(e,t).trim()).filter(e=>e.length>0);return{seatId:r.seatId,label:r.label,engine:r.engine,free:r.free,policy:i,headroom:a,status:w(r.free,i,a),why:o[0]??(r.free?`Local model — free.`:`No reading yet.`),more:o.slice(1),bars:T(r.engine,r.free,i,a),hasSessionCeiling:!r.free&&(r.engine===`claude`||r.engine===`codex`)}})}function D(e){let t=e.filter(e=>e.status===`eligible`).length,n=e.length;if(n===0)return{eligible:t,total:n,sentence:`No seats are known yet.`};let r=e.filter(e=>e.status===`eligible`&&!e.free).length,i=t-r,a=[];return r>0&&a.push(`${r} paid`),i>0&&a.push(`${i} local`),{eligible:t,total:n,sentence:t===0?`No seat can take autonomous work right now.`:`${t} of ${n} seats can take autonomous work (${a.join(`, `)}).`}}function O(e,t){let n=Date.parse(e);if(!Number.isFinite(n))return`unknown`;let r=Math.max(0,Math.round((t-n)/6e4));return r<1?`just now`:r<120?`${r} min ago`:`${Math.round(r/60)} h ago`}function ne(e,t=0,n=100){return Number.isFinite(e)?Math.max(t,Math.min(n,Math.round(e))):t}var k={available:`ready`,credits:`ready`,tight:`tight`,exhausted:`blocked`,"signed-out":`blocked`,"probe-unsupported":`blocked`,unknown:`unread`};function A(e,t,n){return e===1?t:n}function re(e){let{ready:t,tight:n,blocked:r,unread:i,total:a,local:o}=e;if(a===0)return`No seats found.`;let s=o===null?``:o.reachable&&o.residentCount>0?` ${o.residentCount} local ${A(o.residentCount,`model is`,`models are`)} resident and answer with no load delay.`:o.reachable&&o.agenticCount>0?` No local model is resident, but ${o.agenticCount} installed ${A(o.agenticCount,`one can`,`ones can`)} drive a session after a load.`:o.reachable?` No local model is resident.`:` The local runtime did not answer, so local capacity is unknown.`,c=i===0?``:` ${i} ${A(i,`seat has`,`seats have`)} no reading yet.`;return t>0?`${t} of ${a} ${A(a,`seat is`,`seats are`)} usable right now.${c}${s}`:n>0?`No seat is clear: ${n} ${A(n,`is`,`are`)} running tight and ${r} ${A(r,`is`,`are`)} blocked.${c}${s}`:r>0?`No cloud seat reports headroom — ${r} blocked.${c}${s}`:`No seat reported a usable window.${c}${s}`}function ie(e){let t=e.binding;return{id:e.id,label:e.label,kind:`account`,color:e.color,cls:k[e.verdict.state],headline:e.verdict.headline,usedPct:t&&t.measured&&!t.limitReached?t.usedPct:null,measured:t!==null&&t.measured&&!t.limitReached}}function ae(e){return{id:`local`,label:`Local`,kind:`local`,color:e.color,cls:k[e.verdict.state],headline:e.verdict.headline,usedPct:e.usedPct,measured:e.usedPct!==null}}function oe(e,t){let n=[],r=[],i=new Set;for(let a of e)for(let e of a.windows){if(e.resetsAt!==null){let r=Date.parse(e.resetsAt);if(!Number.isNaN(r)){let i=r-t;n.push({seatLabel:a.label,windowLabel:e.label,atMs:r,inMs:i,overdue:i<=0});continue}}if(e.resetText!==null){let t=`${a.label}|${e.label}|${e.resetText}`;if(i.has(t))continue;i.add(t),r.push({seatLabel:a.label,windowLabel:e.label,text:e.resetText})}}return{instants:n,prose:r}}function se(e){let t=e.filter(e=>!e.overdue);return t.length>0?t.reduce((e,t)=>t.inMs<e.inMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function ce(e,t){let n=e.filter(e=>e.atMs>t);return n.length>0?n.reduce((e,t)=>t.atMs<e.atMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function le(e,t){if(e===null&&t===null)return null;let n=e?.residentBytes??t?.residentBytes??null,r=e?.memoryBudgetBytes??t?.memoryBudgetBytes??null;return{reachable:t?.reachable??e?.verdict.state!==`unknown`,residentCount:e?.residentCount??t?.rows.filter(e=>e.resident).length??0,installedCount:e?.installedCount??t?.rows.length??0,agenticCount:t?.agenticCount??0,unknownToolCount:t?.unknownToolCount??0,residentBytes:n,memoryBudgetBytes:r,headroomBytes:n!==null&&r!==null?Math.max(0,r-n):null,freeMemoryBytes:t?.freeMemoryBytes??null,usedPct:e?.usedPct??t?.memoryUsedPct??null}}function j(e){let t=e.nowMs??Date.now(),n=e.cards.map(ie);e.localCard&&n.push(ae(e.localCard));let r=e=>n.filter(t=>t.cls===e).length,i=r(`ready`),a=r(`tight`),o=r(`blocked`),s=r(`unread`),{instants:c,prose:l}=oe(e.cards.map(e=>({label:e.label,windows:e.allWindows})),t),u=le(e.localCard,e.localView);return{seats:n,ready:i,tight:a,blocked:o,unread:s,total:n.length,resets:c,nextReset:se(c),proseResets:l,local:u,headline:re({ready:i,tight:a,blocked:o,unread:s,total:n.length,local:u}),noCapacity:n.length>0&&i===0&&a===0&&s<n.length}}function M(e){if(!Number.isFinite(e))return`—`;if(e<=0)return`overdue`;let t=Math.floor(e/1e3),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60);return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${t}s`}var N={connected:`connected`,expiring:`sign-in expiring`,"signed-out":`signed out`,exhausted:`out of usage`,"binary-skew":`older CLI pinned`,unknown:`not checked`},P={connected:`success`,expiring:`warning`,"signed-out":`danger`,exhausted:`danger`,"binary-skew":`warning`,unknown:`neutral`},F={"signed-out":0,exhausted:1,expiring:2,"binary-skew":3,unknown:4,connected:5};function I(e,t=Date.now()){if(typeof e!=`string`)return null;let n=Date.parse(e);return!Number.isFinite(n)||n<=t?null:`usable again in ${M(n-t)}`}function L(e){return e.connection===`connected`?!1:e.connection!==`unknown`||e.reasons.length>0&&!e.reasons[0].includes(`has not reached this seat`)}function R(e,t=[],n=Date.now()){let r=new Map(t.map(e=>[e.id,e]));return e.filter(L).map(e=>{let t=r.get(e.seatId),i=e.connection===`exhausted`&&t!==void 0?f(d(t,n),e.resetAt):e.resetAt,a=l(i,n);return{report:e,label:t?.label??e.seatId,word:N[e.connection],tone:P[e.connection],detail:e.reasons[0]?u(e.reasons[0],n):null,reset:a===null?null:`resets ${a}`,usableAgain:e.connection===`exhausted`?I(i,n):null}}).sort((e,t)=>F[e.report.connection]-F[t.report.connection])}function z(e){return e.map(e=>/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)||e.startsWith(`~/`)&&/^[A-Za-z0-9_@%+=:,./~-]+$/.test(e)?e:e.startsWith(`~/`)?`~/'${e.slice(2).replaceAll(`'`,`'\\''`)}'`:`'${e.replaceAll(`'`,`'\\''`)}'`).join(` `)}function B(e){if(e.length===0)return`All seats are connected.`;let t=e.filter(e=>e.tone===`danger`).length;return t>0?t===1?`${e.find(e=>e.tone===`danger`).label} can't run turns right now.`:`${t} seats can't run turns right now.`:e.length===1?`${e[0].label} needs attention.`:`${e.length} seats need attention.`}var V={ready:`success`,tight:`warning`,blocked:`danger`,unread:`neutral`};function H(e){return V[e]}function U(e,t){return{id:e.id,label:e.label,usedPercent:e.usedPercent,limitReached:e.limitReached,resetText:e.resetText,resetsAt:e.resetsAt,binding:t}}function W(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))}function G(e){return e.limitReached||e.usedPercent!==null&&e.usedPercent>=100}function K(e,t){return e?{connection:e.connection,word:N[e.connection],tone:P[e.connection],reasons:ue(e.reasons,t),fixKind:e.fix.kind,fixCommand:e.fix.command&&e.fix.command.length>0?[...e.fix.command]:null}:null}function ue(e,t){return e.map(e=>u(e,t).trim()).filter(e=>e.length>0)}function de(e){if(!e||e.free)return null;let{policy:t}=e,n=Math.max(0,Math.min(100,Math.round(t.reservePercent))),r=t.enabled?n===0?`No reserve — autonomy may use all of it`:`Reserved for you ${n}%`:`Autonomy off — all yours`;return{percent:t.enabled?n:null,label:r,autonomy:e.status,autonomyWord:b[e.status],why:e.why}}function q(e,t,n,r){let i=d(e,r),o=[];i.binding&&o.push(U(i.binding,!0));for(let e of i.others){if(o.length>=3)break;o.push(U(e,!1))}let c=t.get(e.id),l=K(c,r),u=l!==null&&(l.connection===`signed-out`||l.connection===`exhausted`);return{seatId:e.id,label:e.label,engine:e.engine,monogram:a[e.engine],kind:i.kind,plan:i.plan,cls:u?`blocked`:i.cls,word:u?s.blocked:i.word,summary:u?l.reasons[0]??l.word:i.summary,connection:l,windows:o,credits:i.credits,reserve:de(n.get(e.id)),notes:[...i.notes],localCount:1,checkedAt:W(c?.checkedAt)?c.checkedAt:W(i.observedAt)?i.observedAt:null,resetAt:f(i,c?.resetAt),signedOut:l?.connection===`signed-out`||e.capacity?.usability===`signed-out`,lastReading:e.health.state===`degraded`&&e.capacity?.usability===`unknown`&&o.length>0}}function fe(e,t,n){let r=e.map(e=>d(e,n)),i=r.filter(e=>e.cls===`ready`).length,o=r.filter(e=>e.cls===`blocked`).length,s=i>0?`ready`:o===r.length?`blocked`:`unread`,c=e.map(e=>t.get(e.id)).find(e=>e!==void 0),l=e.length;return{seatId:`local`,label:`Local models`,engine:`local`,monogram:a.local,kind:`local`,plan:null,cls:s,word:r.find(e=>e.cls===s)?.word??`no reading`,summary:s===`ready`?`${l} ${l===1?`model`:`models`} on this machine · free`:s===`blocked`?r[0]?.summary??`local runtime unavailable`:`readiness not reported`,connection:K(c,n),windows:[],credits:null,reserve:null,notes:[],localCount:l,checkedAt:W(c?.checkedAt)?c.checkedAt:r.map(e=>e.observedAt).filter(W).sort((e,t)=>Date.parse(t)-Date.parse(e))[0]??null,resetAt:null,signedOut:!1}}function J(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Y=e=>typeof e==`number`&&Number.isFinite(e)?e:null;function pe(e){if(!J(e)||typeof e.seatId!=`string`)return null;let t=e.bindingWindow;return{seatId:e.seatId,sessionUsedPercent:Y(e.sessionUsedPercent),weeklyUsedPercent:Y(e.weeklyUsedPercent),bindingWindow:t===`session`||t===`weekly`?t:null,autonomyHeadroomPercent:Y(e.autonomyHeadroomPercent),resetAt:typeof e.resetAt==`string`?e.resetAt:null,eligibleForAutonomy:e.eligibleForAutonomy===!0,reasons:Array.isArray(e.reasons)?e.reasons.filter(e=>typeof e==`string`):[]}}function me(e,t){if(!J(t)||typeof t.enabled!=`boolean`)return null;let n=t.reservePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r={seatId:e,enabled:t.enabled,reservePercent:n},i=t.maxSessionWindowPercent;return typeof i==`number`&&Number.isFinite(i)&&(r.maxSessionWindowPercent=i),r}function X(e){if(!J(e)||!Array.isArray(e.seatInfo))return new Map;let t=J(e.effective)?e.effective:{},n={},r=[];for(let i of e.seatInfo){if(!J(i)||typeof i.seatId!=`string`)continue;let e=i.seatId,a=i.engine;if(a===`claude`||a===`codex`||a===`grok`||a===`local`){if(Object.prototype.hasOwnProperty.call(t,e)){let r=me(e,t[e]);if(r===null)continue;n[e]=r}r.push({seatId:e,label:typeof i.label==`string`?i.label:e,engine:a,free:i.free===!0})}}let i=Array.isArray(e.headroom)?e.headroom.map(pe).filter(e=>e!==null):[],a={...e,seatInfo:r,effective:n,headroom:i};try{return new Map(E(a).map(e=>[e.seatId,e]))}catch{return new Map}}function he(e){let t=new Map;if(!Array.isArray(e))return t;for(let n of e){if(!J(n)||typeof n.seatId!=`string`)continue;let e=n.connection;if(typeof e!=`string`||!Object.prototype.hasOwnProperty.call(N,e))continue;let r=J(n.fix)?n.fix:{},i=r.kind,a=Array.isArray(r.command)&&r.command.every(e=>typeof e==`string`)?r.command:void 0;t.set(n.seatId,{...n,reasons:Array.isArray(n.reasons)?n.reasons.filter(e=>typeof e==`string`):[],fix:{kind:i===`reauth`||i===`repin`||i===`wait`?i:`none`,...a?{command:a}:{}}})}return t}function Z(e,t={}){let n=he(t.health),r=X(t.budget),i=Array.isArray(e)?e.filter(e=>J(e)&&typeof e.id==`string`):[],a=t.local??`collapse`,o=t.now??Date.now(),s=i;if(t.seatIds){let e=new Map(i.map(e=>[e.id,e]));s=t.seatIds.map(t=>e.get(t)).filter(e=>e!==void 0)}let c=[],l=[],u=-1;for(let e of s){if(e.engine===`local`){if(a===`hide`)continue;if(a===`collapse`){u===-1&&(u=c.length),l.push(e);continue}}c.push(q(e,n,r,o))}if(l.length>0){let e=l.length===1?q(l[0],n,r,o):fe(l,n,o);c.splice(u,0,e)}return c}function ge(e){let t=e.filter(e=>e.kind===`subscription`),n=e.filter(e=>e.kind===`local`),r=t.filter(e=>e.cls===`ready`||e.cls===`tight`).length,i=t.filter(e=>e.lastReading).length,a=t.filter(e=>e.cls===`unread`&&!e.lastReading).length,o=[];return t.length===0?o.push(`No accounts connected`):o.push(`${r} of ${t.length} ${t.length===1?`account`:`accounts`} usable`),i>0&&o.push(`${i} last ${i===1?`reading`:`readings`}`),a>0&&o.push(`${a} not read yet`),n.some(e=>e.cls===`ready`)?o.push(`local models ready`):n.length>0&&o.push(`local models not ready`),o.join(` · `)}function _e(e){let t=null;for(let n of e){if(n.kind!==`subscription`)continue;let e=n.windows.find(e=>e.binding)??null,r;if(n.cls===`blocked`||e?.limitReached)r=300;else if(e?.usedPercent!=null)r=(n.cls===`tight`?100:0)+e.usedPercent;else continue;(t===null||r>t.score)&&(t={row:n,score:r})}return t?.row??null}function Q(e,t,n={}){return Z(e,{...n,seatIds:[t],local:`each`})[0]??null}function ve(e,t,n){let r=`${e.label} ${t.label}`,i=t.resetText===null?``:`, ${t.resetText}`;if(t.limitReached)return`${r}: limit reached${i}`;if(t.usedPercent===null)return`${r}: no reading${i}`;let a=n!==null&&n>0?`; ${n}% kept for you`:``;return`${r}: ${c(t.usedPercent)} used${a}${i}`}var ye={usable:`success`,low:`warning`,spent:`danger`,"signed-out":`danger`,unavailable:`danger`,"not-checked":`neutral`,checking:`neutral`},be={usable:0,low:1,checking:2,"not-checked":3,spent:4,unavailable:5,"signed-out":6};function xe(e,t){let n=p(e.checkedAt,t);if(n===null||e.checkedAt===null)return{checked:null,checkedTitle:null};let r=new Date(e.checkedAt);return{checked:`checked ${n}`,checkedTitle:`Last checked ${r.toLocaleString([],{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}`}}function $(e,t){let n=t.now??Date.now(),{checked:r,checkedTitle:i}=xe(e,n),a=(e,t,n,a={})=>({kind:e,label:t,detail:n,tone:ye[e],usableAgain:null,checked:r,checkedTitle:i,coversConnection:!1,...a});if(t.checking)return a(`checking`,`Checking…`,null);if(e.kind===`local`)return e.cls===`ready`?a(`usable`,`Ready`,e.localCount>1?`${e.localCount} models on this machine · free`:`runs on this machine · free`):e.cls===`blocked`?a(`unavailable`,`Not running`,e.summary):t.healthRead?a(`not-checked`,`Not checked`,`readiness not reported yet`):a(`checking`,`Checking…`,null);let o=e.connection?.connection??null;if(e.signedOut)return a(`signed-out`,`Signed out`,`reconnect to use it`,{coversConnection:!0});if(e.lastReading)return a(`unavailable`,`Last reading`,`latest check failed · access unconfirmed`,{coversConnection:!0});let s=e.windows.find(e=>e.binding)??null;if(o===`exhausted`||e.cls===`blocked`&&s!==null&&G(s)){let t=l(e.resetAt,n),r=e.resetAt!==null&&Date.parse(e.resetAt)>n,i=(e.windows.find(e=>G(e)&&!W(e.resetsAt)&&e.resetText!==null)??null)?.resetText??(s!==null&&!W(s.resetsAt)?s.resetText:null);return a(`spent`,`Spent`,t===null?i??`reset time not reported`:r?`resets ${t}`:`was due to reset ${t}`,{usableAgain:I(e.resetAt,n),coversConnection:o===`exhausted`})}if(e.cls===`blocked`)return a(`unavailable`,`Unavailable`,e.summary);if(e.cls===`unread`)return t.healthRead?o===null||o===`unknown`?a(`not-checked`,`Not checked`,`no reading yet`):a(`usable`,`Connected`,`no usage reading yet`):a(`checking`,`Checking…`,null);let c=o===null||o===`unknown`?`Usable`:`Connected`;if(e.cls===`tight`){let t=s!==null&&G(s)&&e.credits!==null;return c===`Usable`?a(`low`,`Usable`,t?`on credits`:`running low`):a(`low`,c,t?`usable on credits`:`running low`)}return c===`Usable`?a(`usable`,`Usable now`,null):a(`usable`,`Connected`,`usable now`)}function Se(e,t){let n=e.map((e,n)=>({row:e,index:n,rank:be[$(e,{...t,checking:!1}).kind],local:+(e.kind===`local`)}));return n.sort((e,t)=>e.rank-t.rank||e.local-t.local||e.index-t.index),n.map(e=>e.row)}export{_ as C,g as E,m as S,ee as T,b as _,H as a,S as b,_e as c,R as d,z as f,x as g,ce as h,Q as i,ve as l,M as m,Z as n,Se as o,j as p,ge as r,X as s,$ as t,B as u,D as v,te as w,O as x,ne as y};
2
- //# sourceMappingURL=capacity-strip-model-5ViUgUlP.js.map
1
+ import{I as e,O as t,l as n,q as r,u as i}from"./global-CMNW_dqn.js";import{Ht as a,i as o}from"./VerseConsoleApp-CWU6R3By.js";import{r as s}from"./verse-model-DAVevkNe.js";import{_ as c,b as l,y as u}from"./format-CH4g_sl1.js";import{n as d,t as f}from"./seat-subscription-C5uPHBsN.js";import{v as p}from"./context-model-CokrgEUq.js";var m=`verse-health`,h=`/api/verse/health`,g={key:m,fetch:e=>n(h,e)};function _(e,t){let n=!1;return()=>n?t():(n=!0,e())}async function v(n,r){let a=t();if(!a)throw new o;let s=await i(n,r,a);return e(),s}async function ee(){let e=await v(`${h}/refresh`,{});return await r(m,_(()=>Promise.resolve(e),()=>g.fetch()),!0),e}async function te(e){await v(`${h}/reconnect`,{seatId:e})}Object.freeze({"all-in":Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:0}),codex:Object.freeze({enabled:!1,reservePercent:0}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),balanced:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:40,maxSessionWindowPercent:70}),codex:Object.freeze({enabled:!1,reservePercent:40,maxSessionWindowPercent:70}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),reserve:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:85,maxSessionWindowPercent:50}),codex:Object.freeze({enabled:!1,reservePercent:85,maxSessionWindowPercent:50}),grok:Object.freeze({enabled:!0,reservePercent:85}),local:Object.freeze({enabled:!0,reservePercent:0})})});var y=Object.freeze({"all-in":`Autonomy may use all available usage on every enabled seat.`,balanced:`Autonomy stops at each seat’s reserve, so you keep headroom for your own sessions.`,reserve:`Autonomy runs on free local models, plus only a small slice of paid seats.`}),b={eligible:`Eligible`,held:`Held back`,off:`Off`,unknown:`No reading`},x=[{value:`reserve`,label:`Reserve`,description:y.reserve},{value:`balanced`,label:`Balanced`,description:y.balanced},{value:`all-in`,label:`All-in`,description:y[`all-in`]}];function S(e,t){if(!t)return!1;let n=e=>x.findIndex(t=>t.value===e);return n(e)>n(t)}function C(e){return Math.round(e)}function w(e,t,n){return t.enabled?n?.eligibleForAutonomy?`eligible`:!e&&(n===null||n.sessionUsedPercent===null&&n.weeklyUsedPercent===null)?`unknown`:`held`:`off`}function T(e,t,n,r){if(t||r===null)return[];let i=[],a=100-n.reservePercent,o=r.weeklyUsedPercent!==null||e===`claude`||e===`grok`;if(o){let t=r.weeklyUsedPercent;i.push({kind:`weekly`,label:e===`grok`?`Billing period`:`Weekly`,usedPercent:t,ceilingPercent:a,binding:r.bindingWindow===`weekly`,description:t===null?`Weekly window: no reading.`:`Weekly window ${c(t)} used; autonomy stops at ${C(a)}%, ${C(n.reservePercent)}% kept for you.`})}if(r.sessionUsedPercent!==null||e===`claude`){let e=r.sessionUsedPercent,t=n.maxSessionWindowPercent??100,s=o?t:Math.min(t,a);i.push({kind:`session`,label:`5-hour`,usedPercent:e,ceilingPercent:s,binding:r.bindingWindow===`session`,description:e===null?`5-hour window: no reading.`:`5-hour window ${c(e)} used; ${s>=100?`no autonomy ceiling`:`autonomy stops at ${C(s)}%`}.`})}return i}function E(e,t=Date.now()){let n=new Map(e.headroom.map(e=>[e.seatId,e]));return e.seatInfo.map(r=>{let i=e.effective[r.seatId]??{seatId:r.seatId,enabled:!1,reservePercent:100},a=n.get(r.seatId)??null,o=(a?.reasons??[]).map(e=>u(e,t).trim()).filter(e=>e.length>0);return{seatId:r.seatId,label:r.label,engine:r.engine,free:r.free,policy:i,headroom:a,status:w(r.free,i,a),why:o[0]??(r.free?`Local model — free.`:`No reading yet.`),more:o.slice(1),bars:T(r.engine,r.free,i,a),hasSessionCeiling:!r.free&&(r.engine===`claude`||r.engine===`codex`)}})}function D(e){let t=e.filter(e=>e.status===`eligible`).length,n=e.length;if(n===0)return{eligible:t,total:n,sentence:`No seats are known yet.`};let r=e.filter(e=>e.status===`eligible`&&!e.free).length,i=t-r,a=[];return r>0&&a.push(`${r} paid`),i>0&&a.push(`${i} local`),{eligible:t,total:n,sentence:t===0?`No seat can take autonomous work right now.`:`${t} of ${n} seats can take autonomous work (${a.join(`, `)}).`}}function O(e,t){let n=Date.parse(e);if(!Number.isFinite(n))return`unknown`;let r=Math.max(0,Math.round((t-n)/6e4));return r<1?`just now`:r<120?`${r} min ago`:`${Math.round(r/60)} h ago`}function ne(e,t=0,n=100){return Number.isFinite(e)?Math.max(t,Math.min(n,Math.round(e))):t}var k={available:`ready`,credits:`ready`,tight:`tight`,exhausted:`blocked`,"signed-out":`blocked`,"probe-unsupported":`blocked`,unknown:`unread`};function A(e,t,n){return e===1?t:n}function re(e){let{ready:t,tight:n,blocked:r,unread:i,total:a,local:o}=e;if(a===0)return`No seats found.`;let s=o===null?``:o.reachable&&o.residentCount>0?` ${o.residentCount} local ${A(o.residentCount,`model is`,`models are`)} resident and answer with no load delay.`:o.reachable&&o.agenticCount>0?` No local model is resident, but ${o.agenticCount} installed ${A(o.agenticCount,`one can`,`ones can`)} drive a session after a load.`:o.reachable?` No local model is resident.`:` The local runtime did not answer, so local capacity is unknown.`,c=i===0?``:` ${i} ${A(i,`seat has`,`seats have`)} no reading yet.`;return t>0?`${t} of ${a} ${A(a,`seat is`,`seats are`)} usable right now.${c}${s}`:n>0?`No seat is clear: ${n} ${A(n,`is`,`are`)} running tight and ${r} ${A(r,`is`,`are`)} blocked.${c}${s}`:r>0?`No cloud seat reports headroom — ${r} blocked.${c}${s}`:`No seat reported a usable window.${c}${s}`}function ie(e){let t=e.binding;return{id:e.id,label:e.label,kind:`account`,color:e.color,cls:k[e.verdict.state],headline:e.verdict.headline,usedPct:t&&t.measured&&!t.limitReached?t.usedPct:null,measured:t!==null&&t.measured&&!t.limitReached}}function ae(e){return{id:`local`,label:`Local`,kind:`local`,color:e.color,cls:k[e.verdict.state],headline:e.verdict.headline,usedPct:e.usedPct,measured:e.usedPct!==null}}function oe(e,t){let n=[],r=[],i=new Set;for(let a of e)for(let e of a.windows){if(e.resetsAt!==null){let r=Date.parse(e.resetsAt);if(!Number.isNaN(r)){let i=r-t;n.push({seatLabel:a.label,windowLabel:e.label,atMs:r,inMs:i,overdue:i<=0});continue}}if(e.resetText!==null){let t=`${a.label}|${e.label}|${e.resetText}`;if(i.has(t))continue;i.add(t),r.push({seatLabel:a.label,windowLabel:e.label,text:e.resetText})}}return{instants:n,prose:r}}function se(e){let t=e.filter(e=>!e.overdue);return t.length>0?t.reduce((e,t)=>t.inMs<e.inMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function ce(e,t){let n=e.filter(e=>e.atMs>t);return n.length>0?n.reduce((e,t)=>t.atMs<e.atMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function le(e,t){if(e===null&&t===null)return null;let n=e?.residentBytes??t?.residentBytes??null,r=e?.memoryBudgetBytes??t?.memoryBudgetBytes??null;return{reachable:t?.reachable??e?.verdict.state!==`unknown`,residentCount:e?.residentCount??t?.rows.filter(e=>e.resident).length??0,installedCount:e?.installedCount??t?.rows.length??0,agenticCount:t?.agenticCount??0,unknownToolCount:t?.unknownToolCount??0,residentBytes:n,memoryBudgetBytes:r,headroomBytes:n!==null&&r!==null?Math.max(0,r-n):null,freeMemoryBytes:t?.freeMemoryBytes??null,usedPct:e?.usedPct??t?.memoryUsedPct??null}}function j(e){let t=e.nowMs??Date.now(),n=e.cards.map(ie);e.localCard&&n.push(ae(e.localCard));let r=e=>n.filter(t=>t.cls===e).length,i=r(`ready`),a=r(`tight`),o=r(`blocked`),s=r(`unread`),{instants:c,prose:l}=oe(e.cards.map(e=>({label:e.label,windows:e.allWindows})),t),u=le(e.localCard,e.localView);return{seats:n,ready:i,tight:a,blocked:o,unread:s,total:n.length,resets:c,nextReset:se(c),proseResets:l,local:u,headline:re({ready:i,tight:a,blocked:o,unread:s,total:n.length,local:u}),noCapacity:n.length>0&&i===0&&a===0&&s<n.length}}function M(e){if(!Number.isFinite(e))return`—`;if(e<=0)return`overdue`;let t=Math.floor(e/1e3),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60);return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${t}s`}var N={connected:`connected`,expiring:`sign-in expiring`,"signed-out":`signed out`,exhausted:`out of usage`,"binary-skew":`older CLI pinned`,unknown:`not checked`},P={connected:`success`,expiring:`warning`,"signed-out":`danger`,exhausted:`danger`,"binary-skew":`warning`,unknown:`neutral`},F={"signed-out":0,exhausted:1,expiring:2,"binary-skew":3,unknown:4,connected:5};function I(e,t=Date.now()){if(typeof e!=`string`)return null;let n=Date.parse(e);return!Number.isFinite(n)||n<=t?null:`usable again in ${M(n-t)}`}function L(e){return e.connection===`connected`?!1:e.connection!==`unknown`||e.reasons.length>0&&!e.reasons[0].includes(`has not reached this seat`)}function R(e,t=[],n=Date.now()){let r=new Map(t.map(e=>[e.id,e]));return e.filter(L).map(e=>{let t=r.get(e.seatId),i=e.connection===`exhausted`&&t!==void 0?f(d(t,n),e.resetAt):e.resetAt,a=l(i,n);return{report:e,label:t?.label??e.seatId,word:N[e.connection],tone:P[e.connection],detail:e.reasons[0]?u(e.reasons[0],n):null,reset:a===null?null:`resets ${a}`,usableAgain:e.connection===`exhausted`?I(i,n):null}}).sort((e,t)=>F[e.report.connection]-F[t.report.connection])}function z(e){return e.map(e=>/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)||e.startsWith(`~/`)&&/^[A-Za-z0-9_@%+=:,./~-]+$/.test(e)?e:e.startsWith(`~/`)?`~/'${e.slice(2).replaceAll(`'`,`'\\''`)}'`:`'${e.replaceAll(`'`,`'\\''`)}'`).join(` `)}function B(e){if(e.length===0)return`All seats are connected.`;let t=e.filter(e=>e.tone===`danger`).length;return t>0?t===1?`${e.find(e=>e.tone===`danger`).label} can't run turns right now.`:`${t} seats can't run turns right now.`:e.length===1?`${e[0].label} needs attention.`:`${e.length} seats need attention.`}var V={ready:`success`,tight:`warning`,blocked:`danger`,unread:`neutral`};function H(e){return V[e]}function U(e,t){return{id:e.id,label:e.label,usedPercent:e.usedPercent,limitReached:e.limitReached,resetText:e.resetText,resetsAt:e.resetsAt,binding:t}}function W(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))}function G(e){return e.limitReached||e.usedPercent!==null&&e.usedPercent>=100}function K(e,t){return e?{connection:e.connection,word:N[e.connection],tone:P[e.connection],reasons:ue(e.reasons,t),fixKind:e.fix.kind,fixCommand:e.fix.command&&e.fix.command.length>0?[...e.fix.command]:null}:null}function ue(e,t){return e.map(e=>u(e,t).trim()).filter(e=>e.length>0)}function de(e){if(!e||e.free)return null;let{policy:t}=e,n=Math.max(0,Math.min(100,Math.round(t.reservePercent))),r=t.enabled?n===0?`No reserve — autonomy may use all of it`:`Reserved for you ${n}%`:`Autonomy off — all yours`;return{percent:t.enabled?n:null,label:r,autonomy:e.status,autonomyWord:b[e.status],why:e.why}}function q(e,t,n,r){let i=d(e,r),o=[];i.binding&&o.push(U(i.binding,!0));for(let e of i.others){if(o.length>=3)break;o.push(U(e,!1))}let c=t.get(e.id),l=K(c,r),u=l!==null&&(l.connection===`signed-out`||l.connection===`exhausted`);return{seatId:e.id,label:e.label,engine:e.engine,monogram:a[e.engine],kind:i.kind,plan:i.plan,cls:u?`blocked`:i.cls,word:u?s.blocked:i.word,summary:u?l.reasons[0]??l.word:i.summary,connection:l,windows:o,credits:i.credits,reserve:de(n.get(e.id)),notes:[...i.notes],localCount:1,checkedAt:W(c?.checkedAt)?c.checkedAt:W(i.observedAt)?i.observedAt:null,resetAt:f(i,c?.resetAt),signedOut:l?.connection===`signed-out`||e.capacity?.usability===`signed-out`,lastReading:e.health.state===`degraded`&&e.capacity?.usability===`unknown`&&o.length>0}}function fe(e,t,n){let r=e.map(e=>d(e,n)),i=r.filter(e=>e.cls===`ready`).length,o=r.filter(e=>e.cls===`blocked`).length,s=i>0?`ready`:o===r.length?`blocked`:`unread`,c=e.map(e=>t.get(e.id)).find(e=>e!==void 0),l=e.length;return{seatId:`local`,label:`Local models`,engine:`local`,monogram:a.local,kind:`local`,plan:null,cls:s,word:r.find(e=>e.cls===s)?.word??`no reading`,summary:s===`ready`?`${l} ${l===1?`model`:`models`} on this machine · free`:s===`blocked`?r[0]?.summary??`local runtime unavailable`:`readiness not reported`,connection:K(c,n),windows:[],credits:null,reserve:null,notes:[],localCount:l,checkedAt:W(c?.checkedAt)?c.checkedAt:r.map(e=>e.observedAt).filter(W).sort((e,t)=>Date.parse(t)-Date.parse(e))[0]??null,resetAt:null,signedOut:!1}}function J(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Y=e=>typeof e==`number`&&Number.isFinite(e)?e:null;function pe(e){if(!J(e)||typeof e.seatId!=`string`)return null;let t=e.bindingWindow;return{seatId:e.seatId,sessionUsedPercent:Y(e.sessionUsedPercent),weeklyUsedPercent:Y(e.weeklyUsedPercent),bindingWindow:t===`session`||t===`weekly`?t:null,autonomyHeadroomPercent:Y(e.autonomyHeadroomPercent),resetAt:typeof e.resetAt==`string`?e.resetAt:null,eligibleForAutonomy:e.eligibleForAutonomy===!0,reasons:Array.isArray(e.reasons)?e.reasons.filter(e=>typeof e==`string`):[]}}function me(e,t){if(!J(t)||typeof t.enabled!=`boolean`)return null;let n=t.reservePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r={seatId:e,enabled:t.enabled,reservePercent:n},i=t.maxSessionWindowPercent;return typeof i==`number`&&Number.isFinite(i)&&(r.maxSessionWindowPercent=i),r}function X(e){if(!J(e)||!Array.isArray(e.seatInfo))return new Map;let t=J(e.effective)?e.effective:{},n={},r=[];for(let i of e.seatInfo){if(!J(i)||typeof i.seatId!=`string`)continue;let e=i.seatId,a=i.engine;if(a===`claude`||a===`codex`||a===`grok`||a===`local`){if(Object.prototype.hasOwnProperty.call(t,e)){let r=me(e,t[e]);if(r===null)continue;n[e]=r}r.push({seatId:e,label:typeof i.label==`string`?i.label:e,engine:a,free:i.free===!0})}}let i=Array.isArray(e.headroom)?e.headroom.map(pe).filter(e=>e!==null):[],a={...e,seatInfo:r,effective:n,headroom:i};try{return new Map(E(a).map(e=>[e.seatId,e]))}catch{return new Map}}function he(e){let t=new Map;if(!Array.isArray(e))return t;for(let n of e){if(!J(n)||typeof n.seatId!=`string`)continue;let e=n.connection;if(typeof e!=`string`||!Object.prototype.hasOwnProperty.call(N,e))continue;let r=J(n.fix)?n.fix:{},i=r.kind,a=Array.isArray(r.command)&&r.command.every(e=>typeof e==`string`)?r.command:void 0;t.set(n.seatId,{...n,reasons:Array.isArray(n.reasons)?n.reasons.filter(e=>typeof e==`string`):[],fix:{kind:i===`reauth`||i===`repin`||i===`wait`?i:`none`,...a?{command:a}:{}}})}return t}function Z(e,t={}){let n=he(t.health),r=X(t.budget),i=Array.isArray(e)?e.filter(e=>J(e)&&typeof e.id==`string`):[],a=t.local??`collapse`,o=t.now??Date.now(),s=i;if(t.seatIds){let e=new Map(i.map(e=>[e.id,e]));s=t.seatIds.map(t=>e.get(t)).filter(e=>e!==void 0)}let c=[],l=[],u=-1;for(let e of s){if(e.engine===`local`){if(a===`hide`)continue;if(a===`collapse`){u===-1&&(u=c.length),l.push(e);continue}}c.push(q(e,n,r,o))}if(l.length>0){let e=l.length===1?q(l[0],n,r,o):fe(l,n,o);c.splice(u,0,e)}return c}function ge(e){let t=e.filter(e=>e.kind===`subscription`),n=e.filter(e=>e.kind===`local`),r=t.filter(e=>e.cls===`ready`||e.cls===`tight`).length,i=t.filter(e=>e.lastReading).length,a=t.filter(e=>e.cls===`unread`&&!e.lastReading).length,o=[];return t.length===0?o.push(`No accounts connected`):o.push(`${r} of ${t.length} ${t.length===1?`account`:`accounts`} usable`),i>0&&o.push(`${i} last ${i===1?`reading`:`readings`}`),a>0&&o.push(`${a} not read yet`),n.some(e=>e.cls===`ready`)?o.push(`local models ready`):n.length>0&&o.push(`local models not ready`),o.join(` · `)}function _e(e){let t=null;for(let n of e){if(n.kind!==`subscription`)continue;let e=n.windows.find(e=>e.binding)??null,r;if(n.cls===`blocked`||e?.limitReached)r=300;else if(e?.usedPercent!=null)r=(n.cls===`tight`?100:0)+e.usedPercent;else continue;(t===null||r>t.score)&&(t={row:n,score:r})}return t?.row??null}function Q(e,t,n={}){return Z(e,{...n,seatIds:[t],local:`each`})[0]??null}function ve(e,t,n){let r=`${e.label} ${t.label}`,i=t.resetText===null?``:`, ${t.resetText}`;if(t.limitReached)return`${r}: limit reached${i}`;if(t.usedPercent===null)return`${r}: no reading${i}`;let a=n!==null&&n>0?`; ${n}% kept for you`:``;return`${r}: ${c(t.usedPercent)} used${a}${i}`}var ye={usable:`success`,low:`warning`,spent:`danger`,"signed-out":`danger`,unavailable:`danger`,"not-checked":`neutral`,checking:`neutral`},be={usable:0,low:1,checking:2,"not-checked":3,spent:4,unavailable:5,"signed-out":6};function xe(e,t){let n=p(e.checkedAt,t);if(n===null||e.checkedAt===null)return{checked:null,checkedTitle:null};let r=new Date(e.checkedAt);return{checked:`checked ${n}`,checkedTitle:`Last checked ${r.toLocaleString([],{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}`}}function $(e,t){let n=t.now??Date.now(),{checked:r,checkedTitle:i}=xe(e,n),a=(e,t,n,a={})=>({kind:e,label:t,detail:n,tone:ye[e],usableAgain:null,checked:r,checkedTitle:i,coversConnection:!1,...a});if(t.checking)return a(`checking`,`Checking…`,null);if(e.kind===`local`)return e.cls===`ready`?a(`usable`,`Ready`,e.localCount>1?`${e.localCount} models on this machine · free`:`runs on this machine · free`):e.cls===`blocked`?a(`unavailable`,`Not running`,e.summary):t.healthRead?a(`not-checked`,`Not checked`,`readiness not reported yet`):a(`checking`,`Checking…`,null);let o=e.connection?.connection??null;if(e.signedOut)return a(`signed-out`,`Signed out`,`reconnect to use it`,{coversConnection:!0});if(e.lastReading)return a(`unavailable`,`Last reading`,`latest check failed · access unconfirmed`,{coversConnection:!0});let s=e.windows.find(e=>e.binding)??null;if(o===`exhausted`||e.cls===`blocked`&&s!==null&&G(s)){let t=l(e.resetAt,n),r=e.resetAt!==null&&Date.parse(e.resetAt)>n,i=(e.windows.find(e=>G(e)&&!W(e.resetsAt)&&e.resetText!==null)??null)?.resetText??(s!==null&&!W(s.resetsAt)?s.resetText:null);return a(`spent`,`Spent`,t===null?i??`reset time not reported`:r?`resets ${t}`:`was due to reset ${t}`,{usableAgain:I(e.resetAt,n),coversConnection:o===`exhausted`})}if(e.cls===`blocked`)return a(`unavailable`,`Unavailable`,e.summary);if(e.cls===`unread`)return t.healthRead?o===null||o===`unknown`?a(`not-checked`,`Not checked`,`no reading yet`):a(`usable`,`Connected`,`no usage reading yet`):a(`checking`,`Checking…`,null);let c=o===null||o===`unknown`?`Usable`:`Connected`;if(e.cls===`tight`){let t=s!==null&&G(s)&&e.credits!==null;return c===`Usable`?a(`low`,`Usable`,t?`on credits`:`running low`):a(`low`,c,t?`usable on credits`:`running low`)}return c===`Usable`?a(`usable`,`Usable now`,null):a(`usable`,`Connected`,`usable now`)}function Se(e,t){let n=e.map((e,n)=>({row:e,index:n,rank:be[$(e,{...t,checking:!1}).kind],local:+(e.kind===`local`)}));return n.sort((e,t)=>e.rank-t.rank||e.local-t.local||e.index-t.index),n.map(e=>e.row)}export{_ as C,g as E,m as S,ee as T,b as _,H as a,S as b,_e as c,R as d,z as f,x as g,ce as h,Q as i,ve as l,M as m,Z as n,Se as o,j as p,ge as r,X as s,$ as t,B as u,D as v,te as w,O as x,ne as y};
2
+ //# sourceMappingURL=capacity-strip-model-BwZ1ZbkU.js.map