@ashlr/hub 3.10.1 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/README.md +343 -82
- package/dist/authority-surface.json +69 -9
- package/dist/build-identity.json +2 -2
- package/dist/cli/cloud.d.ts +39 -0
- package/dist/cli/cloud.js +448 -0
- package/dist/cli/cloud.js.map +1 -0
- package/dist/cli/completions.js +4 -0
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/help.js +2 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/cloud/backlog.d.ts +17 -0
- package/dist/core/cloud/backlog.js +177 -0
- package/dist/core/cloud/backlog.js.map +1 -0
- package/dist/core/cloud/budget.d.ts +19 -0
- package/dist/core/cloud/budget.js +99 -0
- package/dist/core/cloud/budget.js.map +1 -0
- package/dist/core/cloud/checkout.d.ts +41 -0
- package/dist/core/cloud/checkout.js +168 -0
- package/dist/core/cloud/checkout.js.map +1 -0
- package/dist/core/cloud/cloud-api.d.ts +86 -0
- package/dist/core/cloud/cloud-api.js +599 -0
- package/dist/core/cloud/cloud-api.js.map +1 -0
- package/dist/core/cloud/delivery-contract.d.ts +25 -0
- package/dist/core/cloud/delivery-contract.js +138 -0
- package/dist/core/cloud/delivery-contract.js.map +1 -0
- package/dist/core/cloud/improvement-backlog.d.ts +11 -0
- package/dist/core/cloud/improvement-backlog.js +26 -0
- package/dist/core/cloud/improvement-backlog.js.map +1 -0
- package/dist/core/cloud/launcher.d.ts +68 -0
- package/dist/core/cloud/launcher.js +312 -0
- package/dist/core/cloud/launcher.js.map +1 -0
- package/dist/core/cloud/service.d.ts +51 -0
- package/dist/core/cloud/service.js +215 -0
- package/dist/core/cloud/service.js.map +1 -0
- package/dist/core/cloud/store.d.ts +41 -0
- package/dist/core/cloud/store.js +278 -0
- package/dist/core/cloud/store.js.map +1 -0
- package/dist/core/cloud/tracker.d.ts +30 -0
- package/dist/core/cloud/tracker.js +152 -0
- package/dist/core/cloud/tracker.js.map +1 -0
- package/dist/core/cloud/types.d.ts +233 -0
- package/dist/core/cloud/types.js +73 -0
- package/dist/core/cloud/types.js.map +1 -0
- package/dist/core/verse/activity-api.d.ts +3 -1
- package/dist/core/verse/activity-api.js +16 -1
- package/dist/core/verse/activity-api.js.map +1 -1
- package/dist/core/verse/activity.d.ts +7 -0
- package/dist/core/verse/activity.js +23 -0
- package/dist/core/verse/activity.js.map +1 -1
- package/dist/core/verse/verse-api.d.ts +1 -1
- package/dist/core/verse/verse-api.js +2 -0
- package/dist/core/verse/verse-api.js.map +1 -1
- package/dist/core/vision/leader-cloud.d.ts +63 -0
- package/dist/core/vision/leader-cloud.js +134 -0
- package/dist/core/vision/leader-cloud.js.map +1 -0
- package/dist/core/vision/leader.d.ts +6 -0
- package/dist/core/vision/leader.js +12 -1
- package/dist/core/vision/leader.js.map +1 -1
- package/dist/core/web/public/next/assets/{ActionMenu-BBB7VYjz.js → ActionMenu-CQvNJvHY.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-BBB7VYjz.js.map → ActionMenu-CQvNJvHY.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-DEM93sKI.js.map +1 -0
- package/dist/core/web/public/next/assets/{App-CbDCLAxn.js → App-CimXmK0L.js} +2 -2
- package/dist/core/web/public/next/assets/{App-CbDCLAxn.js.map → App-CimXmK0L.js.map} +1 -1
- package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-D6U-dSj6.js.map +1 -0
- package/dist/core/web/public/next/assets/{AreaTrend-BgnK0wAy.js → AreaTrend-LD9lCPkT.js} +2 -2
- package/dist/core/web/public/next/assets/{AreaTrend-BgnK0wAy.js.map → AreaTrend-LD9lCPkT.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-3V9pUyxm.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-BF5UCsMv.js.map → AutonomySection-3V9pUyxm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BranchBar-nfSb59Kv.js → BranchBar-U8UdpfEB.js} +2 -2
- package/dist/core/web/public/next/assets/{BranchBar-nfSb59Kv.js.map → BranchBar-U8UdpfEB.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BudgetControl-BESM12dO.js → BudgetControl-DOTlMSmW.js} +2 -2
- package/dist/core/web/public/next/assets/{BudgetControl-BESM12dO.js.map → BudgetControl-DOTlMSmW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BurnDown-D1AfskPT.js → BurnDown-x4PWH9JF.js} +2 -2
- package/dist/core/web/public/next/assets/{BurnDown-D1AfskPT.js.map → BurnDown-x4PWH9JF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-Cr_qkQEc.js → Button-DYv_KKxr.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-Cr_qkQEc.js.map → Button-DYv_KKxr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CapacityStrip-DqqYnLek.js → CapacityStrip-C667yQe8.js} +2 -2
- package/dist/core/web/public/next/assets/{CapacityStrip-DqqYnLek.js.map → CapacityStrip-C667yQe8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ChatSection-DoqjyVoj.js → ChatSection-CCcIPpOq.js} +3 -3
- package/dist/core/web/public/next/assets/{ChatSection-DoqjyVoj.js.map → ChatSection-CCcIPpOq.js.map} +1 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJeJvBEu.js.map +1 -0
- package/dist/core/web/public/next/assets/{CommandPalette-lLV-OR63.js → CommandPalette-FiD4N8XD.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandPalette-lLV-OR63.js.map → CommandPalette-FiD4N8XD.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js +2 -0
- package/dist/core/web/public/next/assets/CommandSection-DN8KwH-X.js.map +1 -0
- package/dist/core/web/public/next/assets/{DiffPane-BVxhK-cy.js → DiffPane-DLJ3gGGK.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffPane-BVxhK-cy.js.map → DiffPane-DLJ3gGGK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-yCdw9J-Y.js → DiffViewer-B7NWPjIO.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-yCdw9J-Y.js.map → DiffViewer-B7NWPjIO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DockHost-BZReKwos.js → DockHost-DvR-hPhZ.js} +2 -2
- package/dist/core/web/public/next/assets/{DockHost-BZReKwos.js.map → DockHost-DvR-hPhZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EmptyState-D1GDxVZy.js → EmptyState-DhNgDDrF.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-D1GDxVZy.js.map → EmptyState-DhNgDDrF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-DRp4dBfB.js → Epistemic-uARPnx9x.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-DRp4dBfB.js.map → Epistemic-uARPnx9x.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-D_zRBCub.js.map +1 -0
- package/dist/core/web/public/next/assets/{Funnel-zvDj3He4.js → Funnel-CL8uHONq.js} +2 -2
- package/dist/core/web/public/next/assets/{Funnel-zvDj3He4.js.map → Funnel-CL8uHONq.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GearTray-CkviqjYr.js → GearTray-C7k4l_BW.js} +2 -2
- package/dist/core/web/public/next/assets/{GearTray-CkviqjYr.js.map → GearTray-C7k4l_BW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GrowthSection-Bg5sW0jI.js → GrowthSection-DwdNSGj8.js} +2 -2
- package/dist/core/web/public/next/assets/{GrowthSection-Bg5sW0jI.js.map → GrowthSection-DwdNSGj8.js.map} +1 -1
- package/dist/core/web/public/next/assets/{HandoffDialog-DcPj1ri9.js → HandoffDialog-FPVOqOMN.js} +2 -2
- package/dist/core/web/public/next/assets/{HandoffDialog-DcPj1ri9.js.map → HandoffDialog-FPVOqOMN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Input-Ci7TD96x.js → Input-B9-VLcHS.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-Ci7TD96x.js.map → Input-B9-VLcHS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{LeaderCard-BSFTlMRF.js → LeaderCard-4R0BhDzT.js} +2 -2
- package/dist/core/web/public/next/assets/{LeaderCard-BSFTlMRF.js.map → LeaderCard-4R0BhDzT.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-DojKZe9L.js → MatrixHeatmap-DiuushcS.js} +2 -2
- package/dist/core/web/public/next/assets/{MatrixHeatmap-DojKZe9L.js.map → MatrixHeatmap-DiuushcS.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-CJ__OJKl.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-CvcYu1X_.js.map → McpSection-CJ__OJKl.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdown-BrLCrb73.js → MessageMarkdown-qWKyJvAQ.js} +3 -3
- package/dist/core/web/public/next/assets/{MessageMarkdown-BrLCrb73.js.map → MessageMarkdown-qWKyJvAQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CjmdBw2p.js → MessageMarkdownRenderer-x05TrsrW.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CjmdBw2p.js.map → MessageMarkdownRenderer-x05TrsrW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-DTHbmhQg.js → Meter-D-hncpkO.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-DTHbmhQg.js.map → Meter-D-hncpkO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MindSection-DcO9fmYe.js → MindSection-BjXHkQPS.js} +2 -2
- package/dist/core/web/public/next/assets/{MindSection-DcO9fmYe.js.map → MindSection-BjXHkQPS.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MutationTokenDialog-Cqn2uPV6.js → MutationTokenDialog-SkRxqV_I.js} +2 -2
- package/dist/core/web/public/next/assets/{MutationTokenDialog-Cqn2uPV6.js.map → MutationTokenDialog-SkRxqV_I.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-hiTINupk.js → NeedsYouDrawer-rSd1ZHAR.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-hiTINupk.js.map → NeedsYouDrawer-rSd1ZHAR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouList-B4Z37Phx.js → NeedsYouList-CG-nB1tr.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouList-B4Z37Phx.js.map → NeedsYouList-CG-nB1tr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NewChatDialog-utSckh7C.js → NewChatDialog-BeDQ1eW3.js} +2 -2
- package/dist/core/web/public/next/assets/{NewChatDialog-utSckh7C.js.map → NewChatDialog-BeDQ1eW3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{OnboardingFlow-7N3YSUHN.js → OnboardingFlow-CkTZtt-m.js} +2 -2
- package/dist/core/web/public/next/assets/{OnboardingFlow-7N3YSUHN.js.map → OnboardingFlow-CkTZtt-m.js.map} +1 -1
- package/dist/core/web/public/next/assets/{PreviewPane-CqzkaAjG.js → PreviewPane-kzbbSK4u.js} +2 -2
- package/dist/core/web/public/next/assets/{PreviewPane-CqzkaAjG.js.map → PreviewPane-kzbbSK4u.js.map} +1 -1
- package/dist/core/web/public/next/assets/RailStatus-D-t2gPae.js +2 -0
- package/dist/core/web/public/next/assets/{RailStatus-sZhApA8k.js.map → RailStatus-D-t2gPae.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-C1uQIegT.js → RefreshIndicator-BLnr9IOM.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-C1uQIegT.js.map → RefreshIndicator-BLnr9IOM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-DXjjV6Sh.js → ResourcePoolConsoleApp-BeG0gBif.js} +2 -2
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-DXjjV6Sh.js.map → ResourcePoolConsoleApp-BeG0gBif.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-B3Z3O98t.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-BzV6bkIa.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-o4ILHdep.js.map +1 -0
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-D1LZxQjN.js → RouteErrorBoundary-C5SxA2Dg.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-D1LZxQjN.js.map → RouteErrorBoundary-C5SxA2Dg.js.map} +1 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js +2 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-C3LBp7C4.js.map +1 -0
- package/dist/core/web/public/next/assets/{SeatSelector-CT92PqM_.js → SeatSelector-DpvvbjNm.js} +2 -2
- package/dist/core/web/public/next/assets/{SeatSelector-CT92PqM_.js.map → SeatSelector-DpvvbjNm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-BMvq-FfD.js → Segmented-BL40udoO.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-BMvq-FfD.js.map → Segmented-BL40udoO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-DkdeoSQn.js → Select-FWLnAw_j.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-DkdeoSQn.js.map → Select-FWLnAw_j.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionInsightChip-CwlakUYU.js → SessionInsightChip-CWye87Ju.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionInsightChip-CwlakUYU.js.map → SessionInsightChip-CWye87Ju.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionSearch-DFByh2NZ.js → SessionSearch-YvCHFUuN.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionSearch-DFByh2NZ.js.map → SessionSearch-YvCHFUuN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SettingsSection-DgSaHFK4.js → SettingsSection-Dr18upeE.js} +2 -2
- package/dist/core/web/public/next/assets/{SettingsSection-DgSaHFK4.js.map → SettingsSection-Dr18upeE.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Sheet-C7APkGPt.js → Sheet-DZKcQXQg.js} +2 -2
- package/dist/core/web/public/next/assets/{Sheet-C7APkGPt.js.map → Sheet-DZKcQXQg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-ZPyXUS_I.js → ShortcutsOverlay-BpDimdPq.js} +2 -2
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-ZPyXUS_I.js.map → ShortcutsOverlay-BpDimdPq.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Sidebar-Chsgazmk.js → Sidebar-BoBzBEFX.js} +3 -3
- package/dist/core/web/public/next/assets/{Sidebar-Chsgazmk.js.map → Sidebar-BoBzBEFX.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Slider-B0kjW7cd.js → Slider-DUMo9HDD.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-B0kjW7cd.js.map → Slider-DUMo9HDD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-wv4e6f8b.js → StatusBadge-BwnBNFQr.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-wv4e6f8b.js.map → StatusBadge-BwnBNFQr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StepBand-Db8WPw8J.js → StepBand-PDXMIlRk.js} +2 -2
- package/dist/core/web/public/next/assets/{StepBand-Db8WPw8J.js.map → StepBand-PDXMIlRk.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Surface-BkDrQ4t3.js → Surface-B3TZVoER.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-BkDrQ4t3.js.map → Surface-B3TZVoER.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Swimlane-Dcve56cP.js → Swimlane-DR4OgON_.js} +2 -2
- package/dist/core/web/public/next/assets/{Swimlane-Dcve56cP.js.map → Swimlane-DR4OgON_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-DamlpSMY.js → Switch-CcR5Llk5.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-DamlpSMY.js.map → Switch-CcR5Llk5.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-Cs4tudBN.js → Tag-_-K1h7Hk.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-Cs4tudBN.js.map → Tag-_-K1h7Hk.js.map} +1 -1
- package/dist/core/web/public/next/assets/{TerminalPane-BDkKFych.js → TerminalPane-_1aH4ndN.js} +2 -2
- package/dist/core/web/public/next/assets/{TerminalPane-BDkKFych.js.map → TerminalPane-_1aH4ndN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BE72VyBL.js → UniverseConsoleApp-BUsq-inZ.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BE72VyBL.js.map → UniverseConsoleApp-BUsq-inZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-BbmYY2P4.js → UniverseView-Dogy_dsB.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseView-BbmYY2P4.js.map → UniverseView-Dogy_dsB.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js +2 -0
- package/dist/core/web/public/next/assets/UsageSection-DiX_dTyo.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cxqr-3qc.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-WVeyJnW7.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-BbxZHwQd.js.map +1 -0
- package/dist/core/web/public/next/assets/{actions-BnjZy8a-.js → actions-s2lfm_5k.js} +2 -2
- package/dist/core/web/public/next/assets/{actions-BnjZy8a-.js.map → actions-s2lfm_5k.js.map} +1 -1
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +1 -0
- package/dist/core/web/public/next/assets/{budget-queries-Cp6vO7FH.js → budget-queries-wUshcovN.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-Cp6vO7FH.js.map → budget-queries-wUshcovN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{capacity-strip-model-9-Yb211u.js → capacity-strip-model-Bj_9ztzs.js} +2 -2
- package/dist/core/web/public/next/assets/{capacity-strip-model-9-Yb211u.js.map → capacity-strip-model-Bj_9ztzs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{charts-BmbKhjqw.js → charts-CMSgAUKn.js} +2 -2
- package/dist/core/web/public/next/assets/{charts-BmbKhjqw.js.map → charts-CMSgAUKn.js.map} +1 -1
- package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-CnV1yaNG.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js +2 -0
- package/dist/core/web/public/next/assets/cloud.module-CiwatLj3.js.map +1 -0
- package/dist/core/web/public/next/assets/{command-bus-DHJJLWh8.js → command-bus-DqimKCUY.js} +2 -2
- package/dist/core/web/public/next/assets/{command-bus-DHJJLWh8.js.map → command-bus-DqimKCUY.js.map} +1 -1
- package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-BdtDH93o.js.map +1 -0
- package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js → composer-keys-DBRymxQn.js} +2 -2
- package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js.map → composer-keys-DBRymxQn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-DeJ28uSZ.js → context-model-Dwd49-dp.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-DeJ28uSZ.js.map → context-model-Dwd49-dp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-model-BGznyHNQ.js → context-model-MT17V86_.js} +2 -2
- package/dist/core/web/public/next/assets/{context-model-BGznyHNQ.js.map → context-model-MT17V86_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{context-queries-_mEgy4eg.js → context-queries-xVKIeynP.js} +2 -2
- package/dist/core/web/public/next/assets/{context-queries-_mEgy4eg.js.map → context-queries-xVKIeynP.js.map} +1 -1
- package/dist/core/web/public/next/assets/{control-queries-C4TG8blN.js → control-queries-DOZR-D8G.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-C4TG8blN.js.map → control-queries-DOZR-D8G.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-icons-BB7Fi6hT.js → dock-icons-8EtARwUm.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-icons-BB7Fi6hT.js.map → dock-icons-8EtARwUm.js.map} +1 -1
- package/dist/core/web/public/next/assets/dock-panes-UKS-mXhr.js +2 -0
- package/dist/core/web/public/next/assets/{dock-panes-mnIwSpRp.js.map → dock-panes-UKS-mXhr.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-store-CdHQRP8s.js → dock-store-BA1cHOYA.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-store-CdHQRP8s.js.map → dock-store-BA1cHOYA.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-model-B4FKC7fH.js → fleet-model-CNe8Wh-s.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-model-B4FKC7fH.js.map → fleet-model-CNe8Wh-s.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-BSdRlUwJ.js.map +1 -0
- package/dist/core/web/public/next/assets/{format-lW58rL2y.js → format-B8DAVcn2.js} +2 -2
- package/dist/core/web/public/next/assets/{format-lW58rL2y.js.map → format-B8DAVcn2.js.map} +1 -1
- package/dist/core/web/public/next/assets/{git-model-DaGw1SzS.js → git-model-CivuBY_D.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-DaGw1SzS.js.map → git-model-CivuBY_D.js.map} +1 -1
- package/dist/core/web/public/next/assets/{global-DG1fmn4y.js → global-Di2PUgj4.js} +2 -2
- package/dist/core/web/public/next/assets/{global-DG1fmn4y.js.map → global-Di2PUgj4.js.map} +1 -1
- package/dist/core/web/public/next/assets/{guarded-action--lguLXfz.js → guarded-action-CvOHcqyH.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-action--lguLXfz.js.map → guarded-action-CvOHcqyH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icons-YPgbel-I.js → icons-B_yuAgdN.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-YPgbel-I.js.map → icons-B_yuAgdN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-Dk8R-3a7.js → index-oAAq8XJa.js} +3 -3
- package/dist/core/web/public/next/assets/{index-Dk8R-3a7.js.map → index-oAAq8XJa.js.map} +1 -1
- package/dist/core/web/public/next/assets/{live-model-44wEU6I8.js → live-model-DCw_IFRI.js} +2 -2
- package/dist/core/web/public/next/assets/{live-model-44wEU6I8.js.map → live-model-DCw_IFRI.js.map} +1 -1
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +2 -0
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +1 -0
- package/dist/core/web/public/next/assets/{mind.module-BOABBdi_.js → mind.module-vnuJcwvD.js} +2 -2
- package/dist/core/web/public/next/assets/{mind.module-BOABBdi_.js.map → mind.module-vnuJcwvD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{mutations-DjXM3IDg.js → mutations-Dpsql5t7.js} +2 -2
- package/dist/core/web/public/next/assets/{mutations-DjXM3IDg.js.map → mutations-Dpsql5t7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-Be_eossf.js → overnight-queries-X-44Gsw5.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-Be_eossf.js.map → overnight-queries-X-44Gsw5.js.map} +1 -1
- package/dist/core/web/public/next/assets/primitives-BDIcUvob.js +1 -0
- package/dist/core/web/public/next/assets/{queries-CYEVCq5r.js → queries-BA4rNGD-.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-CYEVCq5r.js.map → queries-BA4rNGD-.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reasoning-pref-a_ZP6GzU.js → reasoning-pref-B9-DJUXP.js} +2 -2
- package/dist/core/web/public/next/assets/{reasoning-pref-a_ZP6GzU.js.map → reasoning-pref-B9-DJUXP.js.map} +1 -1
- package/dist/core/web/public/next/assets/{seat-subscription-CRigL-GE.js → seat-subscription-CH6fW4fJ.js} +2 -2
- package/dist/core/web/public/next/assets/{seat-subscription-CRigL-GE.js.map → seat-subscription-CH6fW4fJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{section-visibility-u7q-Q9AA.js → section-visibility-qFqc_d4Z.js} +2 -2
- package/dist/core/web/public/next/assets/{section-visibility-u7q-Q9AA.js.map → section-visibility-qFqc_d4Z.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-i4WRuQ6j.js → sidebar-model-M1GaQU5l.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-i4WRuQ6j.js.map → sidebar-model-M1GaQU5l.js.map} +1 -1
- package/dist/core/web/public/next/assets/{slots-CV9ZuLQU.js → slots-Ds9ZIqUL.js} +3 -3
- package/dist/core/web/public/next/assets/{slots-CV9ZuLQU.js.map → slots-Ds9ZIqUL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{surface-data-DLvmUX9z.js → surface-data-J52iIGMD.js} +2 -2
- package/dist/core/web/public/next/assets/{surface-data-DLvmUX9z.js.map → surface-data-J52iIGMD.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CgZ-LEJK.js.map +1 -0
- package/dist/core/web/public/next/assets/{tasks-model-DWs5u9RO.js → tasks-model-ent8f0jZ.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-DWs5u9RO.js.map → tasks-model-ent8f0jZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-Ct9cZsEK.js → terminal-icons-DJTK7QpR.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-Ct9cZsEK.js.map → terminal-icons-DJTK7QpR.js.map} +1 -1
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js +2 -0
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -0
- package/dist/core/web/public/next/assets/{usage-queries-CI_y9oWZ.js → usage-queries-Bn8ccqyN.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-CI_y9oWZ.js.map → usage-queries-Bn8ccqyN.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-DVCtLzSo.js → use-guarded-action-C2HlSzkz.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-DVCtLzSo.js.map → use-guarded-action-C2HlSzkz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-C3LQ2IYs.js → use-ticker-BNc1H4ZC.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-C3LQ2IYs.js.map → use-ticker-BNc1H4ZC.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-token-gate-B5gOFkeH.js → use-token-gate-B3IJL6bf.js} +2 -2
- package/dist/core/web/public/next/assets/{use-token-gate-B5gOFkeH.js.map → use-token-gate-B3IJL6bf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useActivity-C3R1Sudh.js → useActivity-Bk3XgXjL.js} +2 -2
- package/dist/core/web/public/next/assets/{useActivity-C3R1Sudh.js.map → useActivity-Bk3XgXjL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useChartWidth-0APW0BR3.js → useChartWidth-lZ9PrQn0.js} +2 -2
- package/dist/core/web/public/next/assets/{useChartWidth-0APW0BR3.js.map → useChartWidth-lZ9PrQn0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useSeatsRefresh-BN8bso-n.js → useSeatsRefresh-CG4jczeL.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-BN8bso-n.js.map → useSeatsRefresh-CG4jczeL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-model-yHPwjf-7.js → verse-model-D7NZQFAR.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-model-yHPwjf-7.js.map → verse-model-D7NZQFAR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-queries-2PxoBISm.js → verse-queries-DvIJcn6Z.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-queries-2PxoBISm.js.map → verse-queries-DvIJcn6Z.js.map} +1 -1
- package/dist/core/web/public/next/assets/{verse-store-DHTuZpYa.js → verse-store-DjBWj04q.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-store-DHTuZpYa.js.map → verse-store-DjBWj04q.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-ui-store-zafyzXKD.js +3 -0
- package/dist/core/web/public/next/assets/{verse-ui-store-Dy4HuDBV.js.map → verse-ui-store-zafyzXKD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{viewport-DDoJ_xVq.js → viewport-BEqGUoTA.js} +2 -2
- package/dist/core/web/public/next/assets/{viewport-DDoJ_xVq.js.map → viewport-BEqGUoTA.js.map} +1 -1
- package/dist/core/web/public/next/assets/warmup-BR6pxAKs.js +3 -0
- package/dist/core/web/public/next/assets/{warmup-BsL2LdR-.js.map → warmup-BR6pxAKs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{workspace-model-Dd3LmIym.js → workspace-model-D_tWD5Wt.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-Dd3LmIym.js.map → workspace-model-D_tWD5Wt.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-BF5UCsMv.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-CvcYu1X_.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-CXJWDiEM.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-panes-mnIwSpRp.js +0 -2
- package/dist/core/web/public/next/assets/primitives-Dl3SEQvh.js +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-Dy4HuDBV.js +0 -3
- package/dist/core/web/public/next/assets/warmup-BsL2LdR-.js +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/fleet/FleetCards.tsx","../../../../../../src/web-ui/routes/verse/fleet/RepoTable.tsx","../../../../../../src/web-ui/routes/verse/sections/FleetSection.tsx"],"sourcesContent":["/**\n * routes/verse/fleet/FleetCards.tsx — the Fleet surface's cards (SPEC-310B §6,\n * SPEC-310C §5; unit C7): lanes, the live swimlane, the gate funnel with its\n * refusal reasons, \"why this seat\", the parked Gantt and Overnight.\n *\n * Every card takes an OptionalRead and draws the designed state for each way\n * a source can be missing (not landed, unrecognised, dark) — never empty axes.\n */\nimport type { FleetLaneState, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { SeatDecision } from '../../../../core/routing/types.js';\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport { BarStack } from '../../../components/charts/BarStack.js';\nimport type { ChartStatus } from '../../../components/charts/ChartFrame.js';\nimport { Funnel } from '../../../components/charts/Funnel.js';\nimport { Swimlane } from '../../../components/charts/Swimlane.js';\nimport { EngineMarker } from '../../../components/primitives/Tag.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport type { OptionalFleetRead } from '../autonomy/fleet-contract.js';\nimport type { OvernightStatus } from '../autonomy/overnight-contract.js';\nimport { describeStopRule } from '../autonomy/overnight-model.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { fleetDarkStatus } from './dark-since.js';\nimport { LANE_ENGINE, LANE_LABEL, funnelStages, laneChipText, laneNotes, laneReason, laneRows, latestDecision, parkedGantt, refusalStack, runTone } from './live-model.js';\nimport { asSentence, decisionSummary, describeEligibleAgain, eligibleAgain, heldBackText } from './why-seat-model.js';\nimport styles from './fleet.module.css';\n\nconst HOUR = 3_600_000;\n\n/**\n * The shared \"is there a fleet to draw at all\" decision for every chart card.\n * Dark reads THE dark-since instant (`fleetDarkStatus`), as the viewer's local\n * day — the same day Command's verdict line names — and no day at all when\n * the server does not know one.\n */\nexport function fleetStatus(read: OptionalRead<FleetLiveSnapshotV1> | undefined, empty: string, hasData: boolean): ChartStatus {\n if (!read) return { kind: 'loading' };\n const live = read.value;\n if (!live) return { kind: 'unknown', reason: read.reason ?? 'the live fleet view did not answer.' };\n if (live.state === 'dark' && !hasData) return fleetDarkStatus(live);\n return hasData ? { kind: 'ready' } : { kind: 'empty', message: empty };\n}\n\n// ---------------------------------------------------------------------------\n// Lanes strip + live swimlane\n// ---------------------------------------------------------------------------\n\n/** \"Local · off\" — the chip is the lane and its slots; its why is one line below the strip (and its title). */\nfunction LaneChip({ lane }: { lane: FleetLaneState }) {\n const text = laneChipText(lane);\n return (\n <li className={styles.lane} data-off={lane.slots === 0 || undefined} title={laneReason(lane) ?? undefined}>\n <EngineMarker engine={LANE_ENGINE[lane.lane]} />\n <span className={styles.laneName}>{text.name}</span>\n <span className={styles.laneSep} aria-hidden=\"true\">\n {' · '}\n </span>\n <span className={styles.laneSlots}>{text.slots}</span>\n </li>\n );\n}\n\nexport function LanesStrip({ live }: { live: FleetLiveSnapshotV1 | null }) {\n if (!live || live.lanes.length === 0) return null;\n const notes = laneNotes(live.lanes);\n return (\n <div className={styles.laneStrip}>\n <ul className={styles.lanes} aria-label=\"Lanes: busy of slots\">\n {live.lanes.map((l) => (\n <LaneChip key={l.lane} lane={l} />\n ))}\n </ul>\n {notes.length > 0 ? (\n <ul className={styles.laneNotes} aria-label=\"Why lanes are limited\">\n {notes.map((n) => (\n <li key={n.lanes.join(',')}>\n {n.all ? null : <span className={styles.laneNoteLanes}>{n.lanes.map((l) => LANE_LABEL[l]).join(', ')}: </span>}\n {asSentence(n.reason)}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nexport function LiveSwimlane({ read, now, hours }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; now: number; hours: number }) {\n const live = read?.value ?? null;\n const from = now - hours * HOUR;\n const lanes = live ? laneRows(live.runs, from, now, { includeParked: false }) : [];\n return (\n <Swimlane\n title=\"Live fleet\"\n description={`Lanes × slots, last ${hours} h · bars coloured by phase or outcome · outlines are queued`}\n status={fleetStatus(read, `Nothing ran in the last ${hours} hours.`, lanes.length > 0)}\n lanes={lanes}\n from={from}\n to={now}\n now={now}\n toneOf={runTone}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Gate funnel + refusal reasons\n// ---------------------------------------------------------------------------\n\nexport function GateFunnelCards({ read }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined }) {\n const live = read?.value ?? null;\n const funnel = live?.funnel ?? null;\n const stages = funnelStages(funnel);\n const refusals = refusalStack(funnel);\n const window = funnel ? `${new Date(funnel.from).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${new Date(funnel.to).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}` : undefined;\n return (\n <div className={styles.stack}>\n <Funnel\n title=\"Gate funnel\"\n description={window ? `Proposals through G0–G7, ${window}` : 'Proposals through the merge gates G0–G7'}\n status={fleetStatus(read, 'No proposal reached the gates in this window.', stages.length > 0)}\n stages={stages}\n />\n <BarStack\n title=\"Refusals by gate\"\n description={refusals.total ? `${refusals.total} refusals · top reasons keep their colour` : 'Why proposals stopped'}\n status={fleetStatus(read, 'Nothing was refused in this window.', refusals.total > 0)}\n categories={refusals.categories}\n segments={refusals.segments}\n values={refusals.values}\n height={180}\n />\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Why this seat\n// ---------------------------------------------------------------------------\n\nfunction seatLabel(view: BudgetView | null, seatId: string): { label: string; engine: 'claude' | 'codex' | 'grok' | 'local' | null } {\n const info = view?.seatInfo.find((s) => s.seatId === seatId);\n return { label: info?.label ?? seatId, engine: info?.engine ?? null };\n}\n\nexport function DecisionView({ decision, view, now }: { decision: SeatDecision; view: BudgetView | null; now?: number }) {\n const chosen = decision.seatId ? seatLabel(view, decision.seatId) : null;\n return (\n <div className={styles.decision}>\n <p className={styles.decisionLead}>\n {chosen ? (\n <>\n {chosen.engine ? <EngineMarker engine={chosen.engine} /> : null}\n <strong>{chosen.label}</strong>\n </>\n ) : (\n <strong>No seat</strong>\n )}\n <span className={styles.mode}>{decision.mode}</span>\n </p>\n <p className={styles.decisionWhy}>{decisionSummary(decision)}</p>\n {decision.candidates.length > 1 ? (\n <div>\n <MicroLabel>Then</MicroLabel>\n <ol className={styles.candidates}>\n {decision.candidates.slice(decision.seatId ? 1 : 0).map((id) => (\n <li key={id}>{seatLabel(view, id).label}</li>\n ))}\n </ol>\n </div>\n ) : null}\n {decision.exclusions.length ? (\n <div>\n <MicroLabel>Held back</MicroLabel>\n <ul className={styles.exclusions} aria-label=\"Held back seats\">\n {decision.exclusions.map((x) => (\n <li key={x.seatId}>\n <span className={styles.excluded}>{seatLabel(view, x.seatId).label}</span>\n <span className={styles.excludedWhy}>{heldBackText(x)}</span>\n <span className={styles.excludedWhen}>eligible again: {describeEligibleAgain(eligibleAgain(x), now)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function WhySeatCard({ read, preview, view, now }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; preview: SeatDecision | null; view: BudgetView | null; now?: number }) {\n const latest = latestDecision(read?.value ?? null);\n return (\n <Card\n title=\"Why this seat\"\n caption={latest ? `Latest dispatch: ${latest.run.title} (${formatRelative(latest.run.phaseStartedAt ?? latest.run.startedAt)})` : preview ? 'The next medium autonomous task would go to…' : undefined}\n >\n {latest ? (\n <DecisionView decision={latest.decision} view={view} now={now} />\n ) : preview ? (\n <DecisionView decision={preview} view={view} now={now} />\n ) : (\n <CardNote tone=\"unknown\">No routing decision to show — nothing was dispatched, and the router preview did not answer.</CardNote>\n )}\n </Card>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Parked Gantt\n// ---------------------------------------------------------------------------\n\nexport function ParkedCard({ read, now }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; now: number }) {\n const live = read?.value ?? null;\n const gantt = live ? parkedGantt(live.runs, now) : { lanes: [], from: now - HOUR, to: now + 2 * HOUR, unknownRelease: 0 };\n return (\n <Swimlane\n title=\"Parked\"\n description=\"Waiting for a seat to free up — each bar ends when it should\"\n caveat={gantt.unknownRelease ? `${gantt.unknownRelease} item${gantt.unknownRelease === 1 ? ' has' : 's have'} no known release time; ${gantt.unknownRelease === 1 ? 'it runs' : 'they run'} to the right edge.` : undefined}\n status={fleetStatus(read, 'Nothing is parked.', gantt.lanes.length > 0)}\n lanes={gantt.lanes}\n from={gantt.from}\n to={gantt.to}\n now={now}\n toneOf={runTone}\n formatTick={(ms) => new Date(ms).toLocaleString('en-US', { weekday: 'short', hour: 'numeric' })}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Overnight\n// ---------------------------------------------------------------------------\n\nexport function OvernightCard({ read, onOpenAdvanced }: { read: OptionalFleetRead<OvernightStatus> | undefined; onOpenAdvanced: () => void }) {\n const status = read?.value ?? null;\n const run = status?.run ?? null;\n return (\n <Card\n title=\"Overnight\"\n caption={status ? (status.armed ? 'Armed' : 'Not armed') : undefined}\n actions={\n <button type=\"button\" className={styles.link} onClick={onOpenAdvanced}>\n Arm or stop in Advanced\n </button>\n }\n >\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the overnight lane…</p>\n ) : !status ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The overnight lane did not answer.'}</CardNote>\n ) : !status.armed && !run ? (\n <CardNote>Nothing armed. The fleet runs on its normal schedule; arm an unattended run from Advanced when you walk away.</CardNote>\n ) : (\n <div className={styles.overnight}>\n {run?.stopRule ? <p className={styles.overnightLead}>{describeStopRule(run.stopRule)}</p> : null}\n <dl className={styles.facts}>\n <div>\n <dt>Started</dt>\n <dd>{run?.startedAt ? formatRelative(run.startedAt) : '—'}</dd>\n </div>\n <div>\n <dt>Iterations</dt>\n <dd>{run?.iterationsDone ?? '—'}</dd>\n </div>\n <div>\n <dt>Merged</dt>\n <dd>{run ? run.merged.length : '—'}</dd>\n </div>\n <div>\n <dt>Discarded</dt>\n <dd>{run ? run.discarded.length : '—'}</dd>\n </div>\n </dl>\n {run?.activity ? <p className={styles.muted}>Now: {run.activity}</p> : null}\n {run && run.discarded.length ? (\n <ul className={styles.discarded} aria-label=\"Discarded work\">\n {run.discarded.slice(0, 3).map((d) => (\n <li key={d.id}>\n <span className={styles.discardTitle}>{d.title}</span>\n <span className={styles.discardWhy}>{d.reason}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n )}\n </Card>\n );\n}\n","/**\n * routes/verse/fleet/RepoTable.tsx — one row per enrolled repo (SPEC-310C §5\n * Fleet \"Repo table: stage, last merge, green% sparkline, holds,\n * pause/resume\"; unit C7).\n *\n * Pause sets an owner-hold as Mason; Resume clears every active hold (or the\n * one a Needs-you item names). Both confirm first — a pause stops new work\n * in a repo, a resume can lift a quarantine early — then take the token.\n * At 375 px the table becomes one card per repo (a 7-column table does not\n * fit a phone, and a horizontal scroll hides the action).\n */\nimport type { FleetLiveSnapshotV1, FleetMirrorSummary, FleetRepoRow, RepoHold } from '../../../../core/fleet/fleet-types.js';\nimport { Sparkline } from '../../../components/charts/Sparkline.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, CardNote } from '../command/Surface.js';\nimport { postFleetLive, type OptionalRead } from '../command/surface-data.js';\nimport styles from './fleet.module.css';\n\nconst HOLD_WORD: Record<RepoHold['kind'], string> = {\n quarantine: 'Quarantined',\n 'owner-hold': 'On hold (you)',\n 'leader-pause': 'Paused by Leader',\n cooldown: 'Cooling down',\n};\n\nexport function holdText(hold: RepoHold, now: number): string {\n const until = hold.until ? Date.parse(hold.until) : NaN;\n const left = Number.isFinite(until) ? Math.max(0, until - now) : null;\n const tail = left === null ? 'until resumed' : left < 3_600_000 ? `${Math.ceil(left / 60_000)}m left` : `${Math.round(left / 3_600_000)}h left`;\n return `${HOLD_WORD[hold.kind]} · ${tail}`;\n}\n\nfunction shortRepo(repo: string): string {\n return repo.includes('/') ? repo.split('/')[1]! : repo;\n}\n\nfunction StageBadge({ row }: { row: FleetRepoRow }) {\n if (row.stage === null) return <span className={styles.stage} data-stage=\"none\">Not in grant</span>;\n return (\n <span className={styles.stage} data-stage={row.stage}>\n {row.stage === 'merge' ? 'Merge' : 'Propose'}\n {row.enforcement === 'local' ? <span className={styles.stageNote}> · local checks</span> : null}\n </span>\n );\n}\n\nfunction RepoAction({ row, actions }: { row: FleetRepoRow; actions: SurfaceActions }) {\n const disabled = actions.busy || actions.readOnly;\n if (row.holds.length) {\n return (\n <Button\n size=\"sm\"\n variant=\"subtle\"\n disabled={disabled}\n aria-label={`Resume ${row.repo}`}\n onClick={() =>\n actions.act(() => postFleetLive({ action: 'resume-repo', repo: row.repo }), `Resume ${row.repo}`, {\n confirm: {\n title: `Resume ${shortRepo(row.repo)}?`,\n body: `Clears ${row.holds.map((h) => HOLD_WORD[h.kind].toLowerCase()).join(' and ')}. New fleet work can start there on the next tick.`,\n confirmLabel: 'Resume',\n },\n })\n }\n >\n Resume\n </Button>\n );\n }\n if (row.stage === null) return null;\n return (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled}\n aria-label={`Pause ${row.repo}`}\n onClick={() =>\n actions.act(() => postFleetLive({ action: 'pause-repo', repo: row.repo, reason: 'Paused by Mason from the Fleet surface' }), `Pause ${row.repo}`, {\n confirm: {\n title: `Pause ${shortRepo(row.repo)}?`,\n body: 'No new fleet work starts there until you resume it. Runs already in flight finish and are watched as usual.',\n confirmLabel: 'Pause repo',\n destructive: true,\n },\n })\n }\n >\n Pause\n </Button>\n );\n}\n\nfunction GreenCell({ row }: { row: FleetRepoRow }) {\n return (\n <span className={styles.green}>\n <span className={styles.greenValue}>{row.greenPct7d === null ? '—' : `${Math.round(row.greenPct7d)}%`}</span>\n <Sparkline points={row.greenTrend} width={64} height={18} ariaLabel={`${row.repo} post-merge green, 14 days`} describe={(v) => `${Math.round(v)}%`} />\n </span>\n );\n}\n\nfunction Holds({ row, now }: { row: FleetRepoRow; now: number }) {\n if (!row.holds.length) return <span className={styles.muted}>—</span>;\n return (\n <span className={styles.holds}>\n {row.holds.map((h) => (\n <span key={h.kind} className={styles.hold} data-kind={h.kind} title={h.reason}>\n {holdText(h, now)}\n </span>\n ))}\n </span>\n );\n}\n\n/**\n * The fleet's own mirror clones, apart from the repo rows. WHY separate: a\n * mirror is the fleet's working copy of a repo already listed above, so\n * counting it as a row double-counts the repo (and its pause would not pause\n * the real one). `undefined` = an older server that does not report mirrors\n * (say nothing); `null` = the enrollment registry could not be read (say so —\n * unknown is never \"none\").\n */\nexport function mirrorsText(mirrors: FleetMirrorSummary | null | undefined): string | null {\n if (mirrors === undefined) return null;\n if (mirrors === null) return 'Fleet mirrors: unknown — the enrollment registry could not be read.';\n if (mirrors.count === 0) return 'Fleet mirrors: none yet — the fleet clones a repo the first time it works on it.';\n const shown = mirrors.repos.slice(0, 6).join(', ');\n const more = mirrors.repos.length > 6 ? ` and ${mirrors.repos.length - 6} more` : '';\n return `Fleet mirrors: ${mirrors.count} working ${mirrors.count === 1 ? 'copy' : 'copies'}${shown ? ` (${shown}${more})` : ''} — the fleet's own clones of the repos above, not repos of their own.`;\n}\n\nconst today = (row: FleetRepoRow) => (row.mergesToday === null ? '—' : `${row.mergesToday}${row.maxMergesPerDay !== null ? ` / ${row.maxMergesPerDay}` : ''}`);\n\nexport function RepoTable({ read, actions, now, compact }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; actions: SurfaceActions; now: number; compact: boolean }) {\n const live = read?.value ?? null;\n const rows = live?.repos ?? [];\n return (\n <Card title=\"Repositories\" caption={live ? `${rows.length} enrolled · stage is what the grant and rollout allow right now` : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading repositories…</p>\n ) : !live ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The live fleet view did not answer.'}</CardNote>\n ) : rows.length === 0 ? (\n <CardNote>No repositories are enrolled.</CardNote>\n ) : compact ? (\n <ul className={styles.repoCards}>\n {rows.map((row) => (\n <li key={row.repo} className={styles.repoCard} id={anchorId(`repo-${row.repo}`)}>\n <div className={styles.repoCardHead}>\n <span className={styles.repoName}>{row.repo}</span>\n <RepoAction row={row} actions={actions} />\n </div>\n <dl className={styles.facts}>\n <div><dt>Stage</dt><dd><StageBadge row={row} /></dd></div>\n <div><dt>Last merge</dt><dd>{row.lastMergeAt ? formatRelative(row.lastMergeAt) : '—'}</dd></div>\n <div><dt>Today</dt><dd>{today(row)}</dd></div>\n <div><dt>Green 7d</dt><dd><GreenCell row={row} /></dd></div>\n </dl>\n <Holds row={row} now={now} />\n </li>\n ))}\n </ul>\n ) : (\n <div className={styles.tableWrap}>\n <table className={styles.table}>\n <caption className=\"visually-hidden\">Enrolled repositories</caption>\n <thead>\n <tr>\n <th scope=\"col\">Repository</th>\n <th scope=\"col\">Stage</th>\n <th scope=\"col\">Last merge</th>\n <th scope=\"col\" className={styles.num}>Today</th>\n <th scope=\"col\">Post-merge green · 14d</th>\n <th scope=\"col\" className={styles.num}>Open PRs</th>\n <th scope=\"col\">Holds</th>\n <th scope=\"col\"><span className=\"visually-hidden\">Action</span></th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.repo} id={anchorId(`repo-${row.repo}`)} data-held={row.holds.length > 0 || undefined}>\n <th scope=\"row\" className={styles.repoName}>{row.repo}</th>\n <td><StageBadge row={row} /></td>\n <td>{row.lastMergeAt ? formatRelative(row.lastMergeAt) : '—'}</td>\n <td className={styles.num}>{today(row)}</td>\n <td><GreenCell row={row} /></td>\n <td className={styles.num}>{row.openFleetPrs ?? '—'}</td>\n <td><Holds row={row} now={now} /></td>\n <td className={styles.actionCell}><RepoAction row={row} actions={actions} /></td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n {live && mirrorsText(live.mirrors) ? <p className={styles.muted}>{mirrorsText(live.mirrors)}</p> : null}\n </Card>\n );\n}\n","/**\n * routes/verse/sections/FleetSection.tsx — ⌘2 Fleet (SPEC-310B §6,\n * SPEC-310C §5; unit C7). What is running where, why that seat, what is\n * waiting, and per-repo control.\n *\n * Live swimlane by lane × phase (12)\n * Gate funnel + refusal reasons (7) | Why this seat (5)\n * Parked Gantt (7) | Overnight (5)\n * Repo table: stage, last merge, green% sparkline, holds, pause/resume (12)\n * ▸ Advanced — the eleven legacy Autonomy panels, fetched only when opened\n *\n * At 375 px: one column in that order; the repo table becomes cards.\n * The live view polls every 5 s while Fleet is the visible surface.\n */\nimport { Suspense, lazy, useId, useState } from 'react';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { IconChevronRight } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { overnightQuery } from '../autonomy/overnight-queries.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { budgetPreviewQuery, budgetQuery } from '../budget/budget-queries.js';\nimport { ActionStatus, useSurfaceActions } from '../command/actions.js';\nimport { Cell, Surface } from '../command/Surface.js';\nimport { fleetLiveQuery } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useViewport } from '../shell/viewport.js';\nimport { GateFunnelCards, LanesStrip, LiveSwimlane, OvernightCard, ParkedCard, WhySeatCard } from '../fleet/FleetCards.js';\nimport { RepoTable } from '../fleet/RepoTable.js';\nimport styles from '../fleet/fleet.module.css';\n\nexport const FLEET_POLL_MS = 5_000;\nexport const FLEET_SLOW_POLL_MS = 30_000;\n\n// The legacy cockpit is ~74 KB of panels: its own chunk, loaded on open.\nconst FleetAdvanced = lazy(() => import('../fleet/Advanced.js').then((m) => ({ default: () => <m.FleetAdvanced embedded /> })));\n\nexport function FleetSection() {\n const { compact } = useViewport();\n const fleet = useQuery(fleetLiveQuery);\n const overnight = useQuery(overnightQuery);\n const budget = useQuery(budgetQuery, { freshMs: 15_000 });\n const preview = useQuery(budgetPreviewQuery, { freshMs: 15_000 });\n const refetchFleet = useRefetch(fleetLiveQuery);\n const refetchOvernight = useRefetch(overnightQuery);\n const refetchPreview = useRefetch(budgetPreviewQuery);\n usePollWhileVisible(refetchFleet, FLEET_POLL_MS);\n usePollWhileVisible(() => {\n refetchOvernight();\n refetchPreview();\n }, FLEET_SLOW_POLL_MS);\n\n const now = useNow(15_000);\n const actions = useSurfaceActions();\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const advancedId = useId();\n const live = fleet.data?.value ?? null;\n\n function openAdvanced(): void {\n setAdvancedOpen(true);\n requestAnimationFrame(() => document.getElementById(advancedId)?.scrollIntoView?.({ block: 'start', behavior: 'smooth' }));\n }\n\n return (\n <Surface\n title=\"Fleet\"\n actions={fleet.status === 'refreshing' ? <RefreshIndicator /> : null}\n lead={\n <>\n <ActionStatus actions={actions} />\n <LanesStrip live={live} />\n </>\n }\n >\n <Cell span={12}>\n <LiveSwimlane read={fleet.data} now={now} hours={compact ? 6 : 12} />\n </Cell>\n <Cell span={7}>\n <GateFunnelCards read={fleet.data} />\n </Cell>\n <Cell span={5}>\n <WhySeatCard read={fleet.data} preview={preview.data ?? null} view={budget.data ?? null} now={now} />\n </Cell>\n <Cell span={7}>\n <ParkedCard read={fleet.data} now={now} />\n </Cell>\n <Cell span={5}>\n <OvernightCard read={overnight.data} onOpenAdvanced={openAdvanced} />\n </Cell>\n <Cell span={12}>\n <RepoTable read={fleet.data} actions={actions} now={now} compact={compact} />\n </Cell>\n <Cell span={12}>\n <div className={styles.advanced}>\n <button\n type=\"button\"\n className={styles.disclosure}\n aria-expanded={advancedOpen}\n aria-controls={advancedId}\n onClick={() => setAdvancedOpen((o) => !o)}\n >\n <IconChevronRight className={styles.chevron} width={14} height={14} aria-hidden=\"true\" />\n Advanced\n <span className={styles.disclosureNote}>daemon, overnight, local runtime, caps, scope, activity, safety, goals</span>\n </button>\n <div id={advancedId} hidden={!advancedOpen}>\n {advancedOpen ? (\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading the advanced panels…</p>}>\n <FleetAdvanced />\n </Suspense>\n ) : null}\n </div>\n </div>\n </Cell>\n {actions.dialogs}\n </Surface>\n );\n}\n"],"file":"FleetSection-rPLy_NPo.js"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,s as n}from"./index-Dk8R-3a7.js";import{t as r}from"./VerseConsoleApp-Dq_hREXs.js";import{r as i}from"./CapacityStrip-DqqYnLek.js";import{c as a,n as o}from"./capacity-strip-model-9-Yb211u.js";var s=n(e(),1),c={count:`_count_16gc0_5`,dot:`_dot_16gc0_26`,pulse:`_pulse_16gc0_27`,autonomy:`_autonomy_16gc0_41`,ring:`_ring_16gc0_57`,ringTrack:`_ringTrack_16gc0_58`,ringFill:`_ringFill_16gc0_59`},l=t();function u(e){return e.stopped?`danger`:e.paused?`warning`:e.mode===`autonomous`?`success`:e.mode===`propose`?`info`:`neutral`}function d(e,t){if(!t)return null;switch(e){case`command`:{let e=t.counts.needsYou;return e>0?{kind:`count`,count:e,spoken:`, ${e} need${e===1?`s`:``} you`,tone:`warning`}:null}case`chat`:{let e=t.counts.running;if(e>0)return{kind:`pulse`,spoken:`, ${e} running`,tone:`running`};let n=t.counts.unread;return n>0?{kind:`dot`,spoken:`, ${n} unread`,tone:`info`}:null}case`fleet`:return t.autonomy?{kind:`autonomy`,spoken:`, ${t.autonomy.label}`,autonomy:t.autonomy,tone:u(t.autonomy)}:null;case`mind`:return t.mind?.unseen?{kind:`dot`,spoken:`, new memo`,tone:`info`}:null;default:return null}}function f({badge:e}){if(e.kind===`count`){let t=e.count??0;return(0,l.jsx)(`span`,{className:c.count,"data-tone":e.tone,"aria-hidden":`true`,"data-badge":`count`,children:t>99?`99+`:t})}if(e.kind===`autonomy`&&e.autonomy){let t=e.autonomy,n=t.stopped?`stopped`:t.paused?`paused`:t.mode;return(0,l.jsx)(`span`,{className:c.autonomy,"data-shape":n,"data-tone":e.tone,"aria-hidden":`true`,"data-badge":`autonomy`})}return(0,l.jsx)(`span`,{className:e.kind===`pulse`?c.pulse:c.dot,"data-tone":e.tone,"aria-hidden":`true`,"data-badge":e.kind})}function p(e){return e>=90?`critical`:e>=70?`tight`:`ok`}function m(e){if(!e)return null;let t=e.windows.find(e=>e.binding)??null,n=t?.limitReached===!0,r=e.cls===`blocked`||n?100:t?.usedPercent??null;return r===null?null:{seatId:e.seatId,label:e.label,windowLabel:t?.label??null,usedPercent:Math.max(0,Math.min(100,r)),limitReached:n,resetText:t?.resetText??null,word:e.word}}function h(e){let t=e.resetText?` · ${e.resetText}`:``;return e.limitReached?`${e.label}: ${e.windowLabel??`window`} limit reached${t}`:e.windowLabel===null?`${e.label}: ${e.word}`:`${e.label}: ${e.windowLabel} ${r(e.usedPercent)} used${t}`}function g(){let e=i({withBudget:!1});return(0,s.useMemo)(()=>m(a(o(e.seats,{health:e.health,local:`hide`}))),[e.seats,e.health])}var _=7,v=2*Math.PI*_;function y({badge:e}){let t=Math.max(0,Math.min(100,e.usedPercent)),n=p(t);return(0,l.jsxs)(`svg`,{className:c.ring,"data-tone":n,viewBox:`0 0 18 18`,width:18,height:18,"aria-hidden":`true`,focusable:`false`,children:[(0,l.jsx)(`circle`,{className:c.ringTrack,cx:`9`,cy:`9`,r:_}),(0,l.jsx)(`circle`,{className:c.ringFill,cx:`9`,cy:`9`,r:_,strokeDasharray:`${t/100*v} ${v}`,transform:`rotate(-90 9 9)`})]})}export{y as CapacityRing,f as RailBadgeMark,u as autonomyTone,p as capacityTone,h as describeRailCapacity,d as railBadgeFor,m as railCapacityFromRow,g as useRailCapacity};
|
|
2
|
-
//# sourceMappingURL=RailStatus-sZhApA8k.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,s as n}from"./index-Dk8R-3a7.js";import{a as r,g as i,h as a,i as o,m as s,s as c}from"./global-DG1fmn4y.js";import{t as l}from"./Epistemic-DRp4dBfB.js";import{n as u}from"./StatusBadge-wv4e6f8b.js";import{r as ee}from"./queries-CYEVCq5r.js";import{l as d}from"./useChartWidth-0APW0BR3.js";import{i as f,n as p,r as m,t as h}from"./charts-BmbKhjqw.js";import{_ as g}from"./colors-BZ3a9wFf.js";import{n as _,o as v,r as te,s as y,t as b}from"./format-DKrNjdwD.js";import{n as x}from"./BurnDown-D1AfskPT.js";import{x as ne}from"./verse-queries-2PxoBISm.js";import{r as S}from"./verse-store-DHTuZpYa.js";import{f as re,g as C,m as ie,p as w,y as T}from"./format-lW58rL2y.js";import{n as E}from"./verse-model-yHPwjf-7.js";import{S as ae,d as D}from"./context-model-BGznyHNQ.js";import{r as oe,t as se}from"./CapacityStrip-DqqYnLek.js";import{h as O,m as ce,p as le}from"./capacity-strip-model-9-Yb211u.js";import{v as k}from"./context-model-DeJ28uSZ.js";import{f as A}from"./fleet-model-B4FKC7fH.js";import{t as j}from"./calendar-day-BxBYHfX1.js";import{a as ue,c as de,i as fe,n as pe,o as me,r as he,s as ge,t as _e}from"./usage-queries-CI_y9oWZ.js";var M=n(e(),1),N={claude:`var(--engine-claude, #c96442)`,codex:`var(--engine-codex, #10a37f)`,grok:`var(--engine-grok, #6b7280)`,local:`var(--engine-local, #7c5cff)`},ve={claude:`Claude publishes no local utilization signal, so there is no window percentage to read. Ashlr deliberately never throttles this seat on a guess.`,grok:`Grok is absent from the per-engine usage snapshot, so this fallback roster has no window data for it. Its real state comes from the per-account probe.`},ye=`The only figure available is derived from the dispatch ledger against a configured cap, not from the subscription itself. It is shown under Dispatch limits.`,be=`Local models have no subscription and no quota window — only whether the runtime is up.`,P={"account-observation":`from this account’s observed windows`,"subscription-tracker":`from the subscription tracker`};function F(e){return{sourceState:`unknown`,complete:!1,reason:e}}function I(e){return e>=90?`danger`:e>=80?`warn`:`ok`}function L(e){return Number.isFinite(e)?Math.max(0,Math.min(100,e)):0}function xe(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function R(e,t,n){return{kind:`measured`,source:e,scope:t,windows:n}}function Se(e){return{kind:`unknown`,reason:ve[e]??`No subscription window reading is reported for this engine.`}}function Ce(e){let{engine:t,seat:n,subscription:r,frontier:i,engineSeatCount:a=1}=e;if(t===`local`)return{kind:`not-applicable`,reason:be};let o=(n?.health.windows??[]).filter(e=>typeof e.usedPercent==`number`&&Number.isFinite(e.usedPercent));if(o.length>0)return R(`account-observation`,`account`,o.map(e=>{let t=L(e.usedPercent),n=e.resetsAt?Date.parse(e.resetsAt):NaN;return{id:e.id,label:e.id,usedPct:t,resetsAt:Number.isNaN(n)?null:Math.round(n/1e3),tone:I(t)}}));if(r&&r.hasData&&r.windows.length>0)return R(`subscription-tracker`,a>1?`engine`:`account`,r.windows.map((e,t)=>{let n=L(e.usedPercent);return{id:`${e.label}-${t}`,label:e.label,usedPct:n,resetsAt:xe(e.resetsAt),tone:I(n)}}));if(r&&!r.hasData)return Se(t);if(i&&i.subscriptionWindow.state!==`unknown`){if(i.limit===void 0){let e=L(i.subscriptionWindow.usedPct);return R(`subscription-tracker`,a>1?`engine`:`account`,[{id:i.subscriptionWindow.windowLabel??`window`,label:i.subscriptionWindow.windowLabel??`window`,usedPct:e,resetsAt:xe(i.subscriptionWindow.resetsAt),tone:I(e)}])}return{kind:`unknown`,reason:ye}}return Se(t)}function we(e){if(!e)return null;let t=(e.byProvider??[]).map(e=>({provider:e.provider,tier:e.tier,tokens:e.tokens,costUsd:e.costUsd,sharePct:e.sharePct})),n=(e,n)=>t.filter(t=>t.tier===e).reduce((e,t)=>e+(t[n]||0),0);return{window:e.window,totalTokens:e.totalTokens,totalCostUsd:e.totalCostUsd,localSavingsUsd:e.localSavingsUsd,localTokens:n(`local`,`tokens`),cloudTokens:n(`cloud`,`tokens`),localCostUsd:n(`local`,`costUsd`),cloudCostUsd:n(`cloud`,`costUsd`),byProvider:[...t].sort((e,t)=>t.tokens-e.tokens),empty:t.length===0&&e.totalTokens===0}}function Te(e,t){let n=[],r=new Set;for(let t of e??[]){let e=`${t.backend}:${t.window}`;r.add(e);let i=t.max>0?L(t.used/t.max*100):null;n.push({id:e,backend:t.backend,window:t.window,max:t.max,used:t.used,standing:t.standing,usedPct:i,configuredOnly:!1})}for(let e of t??[]){let t=`${e.engine}:${e.window}`;r.has(t)||(r.add(t),n.push({id:t,backend:e.engine,window:e.window,max:e.max,used:null,standing:`unknown`,usedPct:null,configuredOnly:!0}))}return n.sort((e,t)=>e.backend.localeCompare(t.backend)||e.window.localeCompare(t.window))}var Ee=`No per-day series is available: the sources this view reads carry aggregate spend only, not a dated history.`;function De(e){if(!e)return{available:!1,reason:Ee};if(e.sourceQuality?.sourceState!==`healthy`)return{available:!1,reason:`No per-day series: the daemon ledger is ${e.sourceQuality?.sourceState??`unavailable`}${e.sourceQuality?.reason?` (${e.sourceQuality.reason})`:``}.`};let t=e.ticks;if(!t||t.length===0)return{available:!1,reason:Ee};let n=new Map;for(let e of t){let t=Date.parse(e.ts);if(Number.isNaN(t))continue;let r=ie(new Date(t));n.set(r,(n.get(r)??0)+(Number.isFinite(e.spentUsd)?e.spentUsd:0))}if(n.size<2)return{available:!1,reason:`No per-day series: only ${n.size} day${n.size===1?``:`s`} of daemon ticks is retained, which is not a trend.`};let r=[...n.keys()].sort(),i=r[0],a=r[r.length-1],o=[],s=j(a);for(let e=new Date(j(i));e.getTime()<=s;e=new Date(e.getFullYear(),e.getMonth(),e.getDate()+1)){let t=ie(e);o.push({day:t,usd:n.has(t)?n.get(t):null})}return{available:!0,days:o,tickCount:t.length,caveat:`From the last ${t.length} recorded daemon ticks. The tick ledger is capped and records the autonomous loop only — interactive chat turns are not in it, and a gap is a day with no retained tick, not a measured zero.`}}var z={available:!1,reason:null,dailyBudgetUsd:null,subscriptionMaxPercent:null,todaySpentUsd:null,todaySpentDate:null,foundryLimits:[]};function B(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function V(e,t){if(!e)return null;for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t}return null}function Oe(e,t=null){let n=B(e);if(!n)return{...z,reason:t};let r=B(n.caps)??n,i=B(n.daemon),a=B(n.spend),o=[],s=r.foundryLimits;if(Array.isArray(s))for(let e of s){let t=B(e);if(!t)continue;let n=typeof t.engine==`string`?t.engine:null,r=V(t,[`max`]);n!==null&&r!==null&&o.push({engine:n,window:typeof t.window==`string`?t.window:`1d`,max:r})}return{available:!0,reason:t,dailyBudgetUsd:V(r,[`dailyBudgetUsd`]),subscriptionMaxPercent:V(r,[`subscriptionMaxPercent`]),todaySpentUsd:a?V(a,[`todayUsd`]):V(n,[`todaySpentUsd`,`todaySpendUsd`,`spendTodayUsd`])??V(i,[`todaySpentUsd`]),todaySpentDate:a&&typeof a.todayDate==`string`?a.todayDate:null,foundryLimits:o}}function ke(e){return{...z,reason:e}}var H={section:`_section_trwms_11`,header:`_header_trwms_20`,headerTitle:`_headerTitle_trwms_33`,headerMeta:`_headerMeta_trwms_41`,ghostButton:`_ghostButton_trwms_50`,scroll:`_scroll_trwms_67`,panel:`_panel_trwms_75`,panelHead:`_panelHead_trwms_83`,panelTitle:`_panelTitle_trwms_95`,panelNote:`_panelNote_trwms_104`,muted:`_muted_trwms_111`,noteList:`_noteList_trwms_124`,num:`_num_trwms_135`,tiles:`_tiles_trwms_142`,cards:`_cards_trwms_150`,card:`_card_trwms_150`,cardHead:`_cardHead_trwms_177`,cardLabel:`_cardLabel_trwms_187`,cardMeta:`_cardMeta_trwms_198`,cardFigures:`_cardFigures_trwms_208`,figure:`_figure_trwms_217`,figureLabel:`_figureLabel_trwms_224`,figureValue:`_figureValue_trwms_232`,windows:`_windows_trwms_241`,windowHead:`_windowHead_trwms_248`,windowPct:`_windowPct_trwms_258`,windowReset:`_windowReset_trwms_264`,track:`_track_trwms_277`,fill:`_fill_trwms_285`,unknownRule:`_unknownRule_trwms_313`,signalRow:`_signalRow_trwms_320`,reason:`_reason_trwms_327`,sourceLine:`_sourceLine_trwms_335`,split:`_split_trwms_350`,splitRow:`_splitRow_trwms_357`,splitBar:`_splitBar_trwms_366`,splitFill:`_splitFill_trwms_373`,limitList:`_limitList_trwms_379`,limitRow:`_limitRow_trwms_384`,limitName:`_limitName_trwms_397`,limitWindow:`_limitWindow_trwms_406`,limitValue:`_limitValue_trwms_411`,verdictDetail:`_verdictDetail_trwms_427`,bindingLabel:`_bindingLabel_trwms_435`,windowBlock:`_windowBlock_trwms_445`,windowBlockLead:`_windowBlockLead_trwms_454`,windowFlag:`_windowFlag_trwms_467`,creditsRow:`_creditsRow_trwms_475`,actionBlock:`_actionBlock_trwms_490`,command:`_command_trwms_496`,commandInline:`_commandInline_trwms_497`,negative:`_negative_trwms_512`,segmented:`_segmented_trwms_518`,segment:`_segment_trwms_518`,charts:`_charts_trwms_560`,tableScroll:`_tableScroll_trwms_572`,stateBlock:`_stateBlock_trwms_580`,stateTitle:`_stateTitle_trwms_588`,stateBody:`_stateBody_trwms_597`,stateActions:`_stateActions_trwms_603`,skeletonGrid:`_skeletonGrid_trwms_607`,capacity:`_capacity_trwms_662`,capacityHeadline:`_capacityHeadline_trwms_667`,chips:`_chips_trwms_682`,chip:`_chip_trwms_682`,chipLabel:`_chipLabel_trwms_729`,chipState:`_chipState_trwms_739`,chipPct:`_chipPct_trwms_759`,capacityFacts:`_capacityFacts_trwms_765`,capacityFact:`_capacityFact_trwms_765`,capacityMuted:`_capacityMuted_trwms_779`,proseResets:`_proseResets_trwms_785`,visuallyHidden:`_visuallyHidden_trwms_789`,cardTrigger:`_cardTrigger_trwms_809`,cardChevron:`_cardChevron_trwms_825`,detail:`_detail_trwms_850`,detailHead:`_detailHead_trwms_858`,detailTitle:`_detailTitle_trwms_865`,detailGrid:`_detailGrid_trwms_873`,detailColumn:`_detailColumn_trwms_880`,evidenceList:`_evidenceList_trwms_884`,evidenceRow:`_evidenceRow_trwms_891`,evidenceValue:`_evidenceValue_trwms_898`,figureTile:`_figureTile_trwms_909`,figureBig:`_figureBig_trwms_920`,figureCaption:`_figureCaption_trwms_928`,panelActions:`_panelActions_trwms_936`,placement:`_placement_trwms_949`,placementBar:`_placementBar_trwms_956`,placementGpu:`_placementGpu_trwms_966`,placementCpu:`_placementCpu_trwms_967`,placementText:`_placementText_trwms_973`,staleNotice:`_staleNotice_trwms_986`,staleFlag:`_staleFlag_trwms_1000`},U=t();function W({view:e,ariaPrefix:t,prominent:n=!1}){let r=`${t} ${e.label}`;if(e.limitReached)return(0,U.jsxs)(`div`,{className:n?H.windowBlockLead:H.windowBlock,children:[(0,U.jsxs)(`div`,{className:H.windowHead,children:[(0,U.jsx)(`span`,{children:e.label}),(0,U.jsx)(`span`,{className:H.windowFlag,children:`limit reached`})]}),(0,U.jsx)(`div`,{className:H.track,"data-tone":`danger`,role:`img`,"aria-label":`${r}: the provider flagged this window as rate-limited, so no percentage is shown`,children:(0,U.jsx)(`div`,{className:H.fill,style:{width:`100%`}})}),e.resetText?(0,U.jsx)(`p`,{className:H.windowReset,children:e.resetText}):null]});if(e.usedPct===null)return(0,U.jsxs)(`div`,{className:n?H.windowBlockLead:H.windowBlock,children:[(0,U.jsxs)(`div`,{className:H.windowHead,children:[(0,U.jsx)(`span`,{children:e.label}),(0,U.jsx)(l,{quality:F(`No percentage was reported for this window.`),label:r,children:null})]}),(0,U.jsx)(`hr`,{className:H.unknownRule,"aria-hidden":`true`})]});let i=Math.round(e.usedPct);return(0,U.jsxs)(`div`,{className:n?H.windowBlockLead:H.windowBlock,children:[(0,U.jsxs)(`div`,{className:H.windowHead,children:[(0,U.jsx)(`span`,{children:e.label}),(0,U.jsx)(`span`,{className:H.windowPct,children:C(e.usedPct)})]}),(0,U.jsx)(`div`,{className:H.track,"data-tone":e.tone,role:`meter`,"aria-label":`${r} used`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":i,"aria-valuetext":`${C(e.usedPct)} used${e.resetText?`, ${e.resetText}`:``}`,children:(0,U.jsx)(`div`,{className:H.fill,style:{width:`${i}%`}})}),e.resetText?(0,U.jsx)(`p`,{className:H.windowReset,children:e.resetText}):null]})}var Ae={available:`success`,credits:`success`,tight:`warning`,exhausted:`danger`,"signed-out":`warning`,"probe-unsupported":`warning`,unknown:`unknown`};function G({credits:e}){if(!e)return null;let t=e.unlimited?`unlimited`:e.balance===null?null:e.balanceValue===null?e.balance:e.balanceValue.toLocaleString(`en-US`,{maximumFractionDigits:2});return(0,U.jsxs)(`div`,{className:H.creditsRow,children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:`Credits`}),(0,U.jsx)(`span`,{className:H.num,title:e.balance??void 0,children:t??`not reported`}),(0,U.jsx)(`p`,{className:H.reason,children:`Credits are a separate pool from the window above — a fully used window does not stop a spendable balance from being spent. The provider gives a bare number, not a currency, so it is shown as reported.`})]})}function je({card:e,onOpen:t,expanded:n=!1,triggerId:r,detailId:i}){let a={"--engine-color":e.color},o=e.verdict.state===`signed-out`,s=t!==void 0&&e.hasDetail,c=(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.cardLabel,children:e.label}),(0,U.jsx)(u,{status:e.verdict.state,tone:Ae[e.verdict.state],children:e.verdict.headline})]});return(0,U.jsxs)(`article`,{className:H.card,style:a,"aria-label":`${e.label} usage`,"data-selected":n?`true`:void 0,children:[s?(0,U.jsxs)(`button`,{type:`button`,id:r,className:`${H.cardHead} ${H.cardTrigger}`,"aria-expanded":n,...i?{"aria-controls":i}:{},onClick:()=>t(e.id),children:[c,(0,U.jsx)(`span`,{className:H.cardChevron,"aria-hidden":`true`,children:n?`−`:`+`})]}):(0,U.jsx)(`div`,{className:H.cardHead,children:c}),(0,U.jsxs)(`div`,{className:H.cardMeta,children:[(0,U.jsx)(`span`,{children:E[e.engine]}),(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,U.jsx)(`span`,{children:e.plan?`${e.plan} plan`:`plan not reported`})]}),(0,U.jsx)(`p`,{className:H.verdictDetail,children:e.verdict.detail}),e.verdict.code?(0,U.jsxs)(`p`,{className:H.sourceLine,children:[`Probe reason `,(0,U.jsx)(`code`,{className:H.commandInline,children:e.verdict.code})]}):null,e.binding?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.bindingLabel,children:`Binding constraint`}),(0,U.jsx)(W,{view:e.binding,ariaPrefix:e.label,prominent:!0})]}):null,e.others.length>0?(0,U.jsx)(`div`,{className:H.windows,children:e.others.map(t=>(0,U.jsx)(W,{view:t,ariaPrefix:e.label},t.id))}):null,(0,U.jsx)(G,{credits:e.credits}),o?(0,U.jsx)(`div`,{className:H.actionBlock,children:e.reconnectCommand?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:`Reconnect`}),(0,U.jsx)(`code`,{className:H.command,children:e.reconnectCommand})]}):(0,U.jsxs)(`p`,{className:H.reason,children:[`Sign this account back in through its own provider CLI under its pinned profile. Ashlr does not print that invocation here, because the pinned-profile launcher path is never allowed onto a surface. `,(0,U.jsx)(`code`,{className:H.commandInline,children:`ashlr resources`}),` `,`shows the connection state once it is back.`]})}):null,e.sourceNote?(0,U.jsx)(`p`,{className:H.sourceLine,children:e.sourceNote}):null]})}var Me={available:`success`,credits:`success`,tight:`warning`,exhausted:`danger`,"signed-out":`warning`,"probe-unsupported":`warning`,unknown:`unknown`},Ne=`No per-account history is retained by any source this view reads: the accounts route is a point-in-time snapshot and the usage series carries no per-account breakdown. A trend is not drawn from one reading.`;function Pe(e,t){return e===null?`The source behind this card reports no health verdict at all.`:e===`unknown`?t===`claude`?`Health reads unknown, which is how this provider always reads — the probe has no health channel for it. It is not a fault.`:`Health reads unknown: the monitor took no verdict on this account.`:`Monitor health: ${e}.`}function K({label:e,children:t}){return(0,U.jsxs)(`div`,{className:H.evidenceRow,children:[(0,U.jsx)(`dt`,{className:H.figureLabel,children:e}),(0,U.jsx)(`dd`,{className:H.evidenceValue,children:t})]})}function Fe({card:e,onClose:t,headingId:n}){let{evidence:r}=e,i=e.credits,a=(0,M.useRef)(null);return(0,M.useEffect)(()=>{a.current?.focus()},[e.id]),(0,U.jsxs)(`section`,{className:H.detail,"aria-labelledby":n,children:[(0,U.jsxs)(`div`,{className:H.detailHead,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h4`,{id:n,ref:a,tabIndex:-1,className:H.detailTitle,children:e.label}),(0,U.jsxs)(`div`,{className:H.cardMeta,children:[(0,U.jsx)(`span`,{children:E[e.engine]}),(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,U.jsx)(`span`,{children:e.plan?`${e.plan} plan`:`plan not reported`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,U.jsx)(u,{status:e.verdict.state,tone:Me[e.verdict.state],children:e.verdict.headline})]})]}),(0,U.jsx)(`button`,{type:`button`,className:H.ghostButton,onClick:t,children:`Close`})]}),(0,U.jsx)(`p`,{className:H.verdictDetail,children:e.verdict.detail}),(0,U.jsxs)(`div`,{className:H.detailGrid,children:[(0,U.jsxs)(`div`,{className:H.detailColumn,children:[(0,U.jsxs)(`span`,{className:H.figureLabel,children:[`All windows (`,e.allWindows.length,`)`]}),e.allWindows.length===0?(0,U.jsx)(`p`,{className:H.reason,children:`This account reported no windows at all. That is an absent reading, not a set of windows at zero.`}):(0,U.jsx)(`div`,{className:H.windows,children:e.allWindows.map((t,n)=>(0,U.jsx)(W,{view:t,ariaPrefix:e.label,prominent:n===0},t.id))}),e.allWindows.some(e=>!e.measured)?(0,U.jsx)(`p`,{className:H.reason,children:`At least one window above carries a provider FLAG rather than a measurement, so no percentage is printed for it. A flagged limit and a measured 100% are different facts.`}):null]}),(0,U.jsxs)(`div`,{className:H.detailColumn,children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:`Probe evidence`}),(0,U.jsxs)(`dl`,{className:H.evidenceList,children:[(0,U.jsx)(K,{label:`Connection`,children:r.state}),(0,U.jsx)(K,{label:`Authentication`,children:r.authentication}),(0,U.jsx)(K,{label:`Health`,children:Pe(r.health,e.engine)}),(0,U.jsx)(K,{label:`Observed`,children:r.observedAt===null?(0,U.jsx)(`span`,{className:H.capacityMuted,children:`no observation timestamp was reported`}):(0,U.jsx)(`span`,{className:H.num,title:new Date(r.observedAt).toLocaleString(),children:k(r.observedAt)??new Date(r.observedAt).toLocaleString()})}),(0,U.jsx)(K,{label:`Probe reason`,children:r.reasonCode===null?(0,U.jsx)(`span`,{className:H.capacityMuted,children:`none reported`}):(0,U.jsx)(`code`,{className:H.commandInline,children:r.reasonCode})}),r.unsupported?(0,U.jsxs)(K,{label:`Version pin`,children:[(0,U.jsx)(`code`,{className:H.commandInline,children:r.unsupported.code}),r.unsupported.pinnedVersion?(0,U.jsxs)(U.Fragment,{children:[` `,`pinned to `,(0,U.jsx)(`span`,{className:H.num,children:r.unsupported.pinnedVersion}),`. A one-line constant bump, not an outage.`]}):null]}):null]}),i?(0,U.jsxs)(`div`,{className:H.creditsRow,children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:`Credits`}),(0,U.jsx)(`span`,{className:H.num,title:i.balance??void 0,children:i.unlimited?`unlimited`:i.balanceValue===null?i.balance??`not reported`:i.balanceValue.toLocaleString(`en-US`,{maximumFractionDigits:2})}),(0,U.jsx)(`p`,{className:H.reason,children:`A separate pool from every window above. The provider gives a bare number, not a currency, so it is shown as reported.`})]}):null,r.notes.length>0?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:`Provider notes`}),(0,U.jsx)(`ul`,{className:H.noteList,children:r.notes.map(e=>(0,U.jsx)(`li`,{className:H.capacityMuted,children:e},e))})]}):null]})]}),(0,U.jsx)(`p`,{className:H.sourceLine,children:Ne})]})}function Ie(e){return e===null?`unknown`:e.includes(`tools`)?`supported`:`unsupported`}function Le(e,t){return e===null?t!==null&&t.length===0?`unknown`:Ie(t):e?`supported`:`unsupported`}function Re(e,t){let n=e.expiresAt?Date.parse(e.expiresAt):NaN,r=e.gpuPercent??(e.sizeBytes!==null&&e.sizeBytes>0&&e.sizeVramBytes!==null?Math.max(0,Math.min(100,e.sizeVramBytes/e.sizeBytes*100)):null);return{name:e.name,runtime:e.runtime,resident:e.loaded,placement:e.placement,memoryPct:e.loaded?e.memoryPercent:null,family:e.family,sizeBytes:e.sizeBytes,sizeVramBytes:e.sizeVramBytes,gpuPct:r,expiresInMs:e.loaded&&!Number.isNaN(n)?n-t:null,expiresAtMs:e.loaded&&!Number.isNaN(n)?n:null,parameterSize:e.parameterSize,quantization:e.quantization,nativeContext:e.nativeContext,configuredContext:e.configuredContext,contextTruncated:e.nativeContext!==null&&e.configuredContext!==null&&e.configuredContext<e.nativeContext,tools:Le(e.supportsTools,e.capabilities)}}function ze(e){let t=e.filter(e=>e.stale);if(t.length===0)return{stale:!1,staleForMs:null,runtimes:[]};let n=t.map(e=>e.staleForMs).filter(e=>e!==null);return{stale:!0,staleForMs:n.length===0?null:Math.max(...n),runtimes:t.map(e=>e.runtime)}}function Be(e){if(e===null||!Number.isFinite(e)||e<0)return`an unreported interval`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;return r===0?`${n}m`:`${n}m ${r}s`}function Ve(e,t=Date.now()){if(!e)return null;let n=e.models.map(e=>Re(e,t)).sort((e,t)=>Number(t.resident)-Number(e.resident)||e.name.localeCompare(t.name)),r=n.filter(e=>e.resident),i=r.some(e=>e.sizeBytes===null)?null:r.reduce((e,t)=>e+(t.sizeBytes??0),0),a=e.memoryBudgetBytes;return{reachable:e.reachable,reason:e.reason,rows:n,residentBytes:i,memoryBudgetBytes:a,memoryUsedPct:i!==null&&a!==null&&a>0?Math.max(0,Math.min(100,i/a*100)):null,freeMemoryBytes:e.freeMemoryBytes,runtimes:e.runtimes,notes:e.notes,agenticCount:n.filter(e=>e.tools===`supported`).length,nonAgenticCount:n.filter(e=>e.tools===`unsupported`).length,unknownToolCount:n.filter(e=>e.tools===`unknown`).length}}function q(e){if(e===null||!Number.isFinite(e))return`—`;let t=e/1024**3;if(t>=10)return`${t.toFixed(0)} GB`;if(t>=1)return`${t.toFixed(1)} GB`;let n=e/1024**2;return`${Math.round(n)} MB`}function He(e){if(e===null||!Number.isFinite(e))return`—`;if(e<=0)return`expired`;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}h ${r}m`:r>0?`${r}m ${i}s`:`${i}s`}function J(e){return e===null||!Number.isFinite(e)?`—`:e>=1024?`${Math.round(e/1024)}k`:String(e)}function Ue(e,t=3e4){let[n,r]=(0,M.useState)(()=>Date.now());return(0,M.useEffect)(()=>{if(!e)return;let n=setInterval(()=>r(Date.now()),t);return()=>clearInterval(n)},[e,t]),n}function We({overview:e}){let t=Ue(e.resets.length>0),n=(0,M.useMemo)(()=>O(e.resets,t),[e.resets,t]),r=n===null?0:n.atMs-t,i=r<=0,a=e.local;return(0,U.jsxs)(`section`,{className:H.capacity,"aria-label":`Resets and local headroom`,children:[(0,U.jsxs)(`dl`,{className:H.capacityFacts,children:[(0,U.jsxs)(`div`,{className:H.capacityFact,children:[(0,U.jsx)(`dt`,{className:H.figureLabel,children:`Nearest reset`}),(0,U.jsx)(`dd`,{children:n===null?(0,U.jsx)(`span`,{className:H.capacityMuted,children:`No seat reported a dated reset. That is an absent timestamp, not "never".`}):i?(0,U.jsxs)(`span`,{className:H.capacityMuted,children:[(0,U.jsx)(`span`,{className:H.num,children:n.seatLabel}),` · `,n.windowLabel,` was due to reset `,T(new Date(n.atMs).toISOString(),t),` — this reading predates the rollover.`]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.num,children:ce(r)}),` `,(0,U.jsxs)(`span`,{className:H.capacityMuted,children:[`· `,n.seatLabel,` `,n.windowLabel,`, resets`,` `,T(new Date(n.atMs).toISOString(),t)]})]})})]}),(0,U.jsxs)(`div`,{className:H.capacityFact,children:[(0,U.jsx)(`dt`,{className:H.figureLabel,children:`Local headroom`}),(0,U.jsx)(`dd`,{children:a===null?(0,U.jsx)(`span`,{className:H.capacityMuted,children:`No local source answered.`}):a.reachable?a.headroomBytes===null?(0,U.jsx)(`span`,{className:H.capacityMuted,children:`Either the resident total or the machine budget was not reported, so headroom cannot be computed.`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.num,children:q(a.headroomBytes)}),` `,(0,U.jsxs)(`span`,{className:H.capacityMuted,children:[`free of `,q(a.memoryBudgetBytes),` · `,a.residentCount,` resident,`,` `,a.installedCount,` installed`]})]}):(0,U.jsx)(`span`,{className:H.capacityMuted,children:`The local runtime did not answer this probe, so headroom is unknown — not zero, and not full.`})})]}),(0,U.jsxs)(`div`,{className:H.capacityFact,children:[(0,U.jsx)(`dt`,{className:H.figureLabel,children:`Agentic locally`}),(0,U.jsx)(`dd`,{children:a===null||!a.reachable?(0,U.jsx)(`span`,{className:H.capacityMuted,children:`unknown`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:H.num,children:a.agenticCount}),` `,(0,U.jsxs)(`span`,{className:H.capacityMuted,children:[`of `,a.installedCount,` installed models can drive a session`,a.unknownToolCount>0?`; ${a.unknownToolCount} did not report a capability list`:``]})]})})]})]}),e.proseResets.length>0?(0,U.jsxs)(`div`,{className:H.proseResets,children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:`Resets reported as text`}),(0,U.jsx)(`ul`,{className:H.noteList,children:e.proseResets.map(e=>(0,U.jsxs)(`li`,{className:H.capacityMuted,children:[e.seatLabel,` · `,e.windowLabel,` — `,e.text]},`${e.seatLabel}-${e.windowLabel}-${e.text}`))}),(0,U.jsx)(`p`,{className:H.capacityMuted,children:`These providers publish a sentence rather than a timestamp, so it is shown exactly as given and never turned into a countdown.`})]}):null]})}function Ge(e){let t=e.fullest;if(t===null)return`—`;let n=`${t.exact?``:`≤`}${S(t.tokens)}`;if(t.window===null)return n;let r=t.tokens/t.window*100;return`${n} / ${S(t.window)} · ${r<=100?C(r):te(r/100)}`}var Ke=[{key:`seat`,label:`Seat`,render:e=>(0,U.jsxs)(U.Fragment,{children:[e.label,(0,U.jsxs)(`span`,{className:H.limitWindow,children:[` · ${E[e.engine]}`,e.retired?` · no longer connected`:``]})]})},{key:`chats`,label:`Chats`,numeric:!0,render:e=>b(e.sessions)},{key:`turns`,label:`Turns`,numeric:!0,render:e=>b(e.turns)},{key:`prompt`,label:`Prompt tokens`,numeric:!0,render:e=>S(e.promptTokens)},{key:`hit`,label:`Cache hit`,numeric:!0,render:e=>e.cacheHitRatio===null?e.promptTokens>0?`none reported`:`—`:D(e.cacheHitRatio)},{key:`compactions`,label:`Compactions`,numeric:!0,render:e=>b(e.compactions)},{key:`expansive`,label:`Expansive chats`,numeric:!0,render:e=>b(e.expansiveSessions)},{key:`fullest`,label:`Fullest context`,numeric:!0,render:e=>Ge(e)}];function qe({rows:e,unavailableReason:t}){return(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-efficiency`,children:[(0,U.jsxs)(`div`,{className:H.panelHead,children:[(0,U.jsx)(`h3`,{id:`verse-usage-efficiency`,className:H.panelTitle,children:`Context efficiency`}),(0,U.jsx)(`p`,{className:H.panelNote,children:`Per seat, across every chat on this machine. Cache hit is the share of prompt tokens served from the provider's cache — the higher it is, the less each turn re-reads at full price. Compactions are the CLI summarizing a context that outgrew its budget.`})]}),t===null?e.length===0?(0,U.jsx)(`p`,{className:H.muted,children:`No chats yet, so there is nothing to measure — this is an empty history, not a seat at 0%. Start a chat on any seat and its context use shows up here.`}):(0,U.jsx)(`div`,{className:H.tableScroll,children:(0,U.jsx)(d,{caption:`Context efficiency per seat: chats, turns, prompt tokens, cache-hit ratio, compactions, expansive chats and the fullest context`,columns:Ke,rows:[...e],rowKey:e=>e.seatId})}):(0,U.jsx)(`p`,{className:H.muted,children:t}),(0,U.jsx)(`p`,{className:H.sourceLine,children:`Computed in this browser from each chat's recorded totals — no extra request, no spend. “None reported” means the provider reported no cache activity, not a 0% hit rate; a figure marked ≤ is an upper bound. Compactions are counted from Verse 3.9 on; earlier ones were not recorded.`})]})}function Je(e){switch(e){case`ok`:return`success`;case`warn`:return`warning`;case`over`:return`danger`;case`unlimited`:return`neutral`;default:return`unknown`}}function Ye({rows:e,capsNote:t}){return(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-limits`,children:[(0,U.jsxs)(`div`,{className:H.panelHead,children:[(0,U.jsx)(`h3`,{id:`verse-usage-limits`,className:H.panelTitle,children:`Dispatch limits`}),(0,U.jsx)(`p`,{className:H.panelNote,children:`Calls recorded in the dispatch ledger against each configured foundry cap. This is not subscription utilization.`})]}),t?(0,U.jsx)(`p`,{className:H.muted,children:t}):null,e.length===0?(0,U.jsx)(`p`,{className:H.muted,children:`No foundry limits are configured, so dispatches are uncapped on this machine. Nothing here is being throttled.`}):(0,U.jsx)(`div`,{className:H.limitList,children:e.map(e=>(0,U.jsxs)(`div`,{className:H.limitRow,children:[(0,U.jsxs)(`span`,{className:H.limitName,children:[e.backend,(0,U.jsxs)(`span`,{className:H.limitWindow,children:[`per `,e.window]}),(0,U.jsx)(u,{status:e.standing,tone:Je(e.standing),children:e.standing===`unknown`?`no reading`:e.standing})]}),e.usedPct===null?(0,U.jsx)(`hr`,{className:H.unknownRule,"aria-hidden":`true`}):(0,U.jsx)(`div`,{className:H.track,"data-tone":e.usedPct>=100?`danger`:e.usedPct>=80?`warn`:`ok`,role:`meter`,"aria-label":`${e.backend} dispatches against its ${e.window} cap`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(e.usedPct),children:(0,U.jsx)(`div`,{className:H.fill,style:{width:`${Math.round(e.usedPct)}%`}})}),(0,U.jsx)(`span`,{className:H.limitValue,children:e.used===null?`configured ${b(e.max)}`:`${b(e.used)} / ${b(e.max)}`})]},e.id))})]})}var Xe=`Cost is ESTIMATED from a static price table in this repo, not billed. It will not match a provider invoice.`,Ze=`Codex reports cacheRead and cacheWrite as a hardcoded 0 upstream, so any window containing Codex traffic understates cache activity — its cache economics are not comparable to Claude’s.`,Qe=`A flat heuristic of $3 per 1M local tokens, not a quote and not a measured price.`,$e=`Fewer than two days in this window carry a rollup row, which is not a trend.`,et=`The daily rollup carries no per-engine or local/cloud columns, and the only tier split available is a single aggregate with no dates on it. Apportioning the daily totals by that aggregate’s ratio would invent a shape nobody measured, so no per-day split is drawn — the aggregate below is the real figure.`;function tt(e,t){return e.reduce((e,n)=>e+(t(n)===null?0:1),0)}function Y(e,t){return e.map(e=>({x:j(e.day),y:t(e)}))}function nt(e){return e.reduce((e,t)=>({tokensIn:e.tokensIn+t.tokensIn,tokensOut:e.tokensOut+t.tokensOut,estCostUsd:e.estCostUsd+t.estCostUsd,sessions:e.sessions+t.sessions,dayCount:e.dayCount+1}),{tokensIn:0,tokensOut:0,estCostUsd:0,sessions:0,dayCount:0})}function rt(e){return e?e.days.length<2?{available:!1,reason:$e}:{available:!0,days:e.days,series:[{id:`tokensIn`,label:`Tokens in`,points:Y(e.days,e=>e.tokensIn)},{id:`tokensOut`,label:`Tokens out`,points:Y(e.days,e=>e.tokensOut)}]}:{available:!1,reason:`No usage series has been loaded.`}}function it(e){return e?e.days.length<2?{available:!1,reason:$e}:{available:!0,days:e.days,series:[{id:`estCostUsd`,label:`Estimated spend`,points:Y(e.days,e=>e.estCostUsd)}]}:{available:!1,reason:`No usage series has been loaded.`}}function at(e){if(!e)return{available:!1,reason:`No usage series has been loaded.`};let t=tt(e.days,e=>e.cacheHitRate);return t===0?{available:!1,reason:`No day in this window reported a cache hit rate, so there is nothing to plot. This is an absent signal, not a 0% hit rate.`}:t<2?{available:!1,reason:`Only ${t} day in this window reported a cache hit rate, which is not a trend.`}:{available:!0,days:e.days,series:[{id:`cacheHitRate`,label:`Cache hit rate`,points:Y(e.days,e=>e.cacheHitRate)}]}}function ot(e){return e?tt(e.days,e=>e.cacheRead)+tt(e.days,e=>e.cacheWrite)===0?{available:!1,reason:`No day in this window reported cache read or write tokens, so there is nothing to plot. This is an absent signal, not zero cache activity.`}:e.days.length<2?{available:!1,reason:$e}:{available:!0,days:e.days,series:[{id:`cacheRead`,label:`Cache read`,points:Y(e.days,e=>e.cacheRead)},{id:`cacheWrite`,label:`Cache write`,points:Y(e.days,e=>e.cacheWrite)}]}:{available:!1,reason:`No usage series has been loaded.`}}function st(e){if(e.length===0)return{tokensInPerDay:null,tokensOutPerDay:null,estCostUsdPerDay:null,peakCostDay:null};let t=nt(e),n=e.reduce((e,t)=>t.estCostUsd>e.estCostUsd?t:e);return{tokensInPerDay:t.tokensIn/e.length,tokensOutPerDay:t.tokensOut/e.length,estCostUsdPerDay:t.estCostUsd/e.length,peakCostDay:{day:n.day,usd:n.estCostUsd}}}function X(e,t){if(!(!e||e.days.length<2))return e.days.map(t)}var Z={"7d":`Last 7 days`,"30d":`Last 30 days`},ct=g(0),lt=g(1),ut=[{key:`provider`,label:`Provider`,render:e=>e.provider},{key:`tier`,label:`Tier`,render:e=>e.tier},{key:`tokens`,label:`Tokens`,numeric:!0,render:e=>b(e.tokens)},{key:`cost`,label:`Cost`,numeric:!0,render:e=>y(e.costUsd)},{key:`share`,label:`Share`,numeric:!0,render:e=>C(e.sharePct)}];function dt({label:e,tokens:t,total:n,color:r}){let i=n>0?t/n*100:0,a=Math.round(i);return(0,U.jsxs)(`div`,{className:H.splitRow,children:[(0,U.jsx)(`span`,{children:e}),(0,U.jsx)(`div`,{className:H.splitBar,role:`meter`,"aria-label":`${e} share of tokens`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,U.jsx)(`div`,{className:H.splitFill,style:{width:`${a}%`,"--split-color":r}})}),(0,U.jsxs)(`span`,{className:H.num,children:[b(t),` · `,C(i)]})]})}function ft({split:e,savingsNote:t}){let n=e.localTokens+e.cloudTokens,r=e.byProvider.map(e=>({label:e.provider,value:e.tokens}));return(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-split`,children:[(0,U.jsx)(`div`,{className:H.panelHead,children:(0,U.jsxs)(`h3`,{id:`verse-usage-split`,className:H.panelTitle,children:[`Local vs cloud · `,e.window]})}),(0,U.jsxs)(`div`,{className:H.tiles,children:[(0,U.jsx)(x,{label:`Not spent (ran locally)`,value:(0,U.jsx)(`span`,{className:H.num,children:y(e.localSavingsUsd)}),caption:`Estimated cloud list price of the ${e.window} local tokens. ${t??`A heuristic, not a quote.`}`}),(0,U.jsx)(x,{label:`Estimated cloud spend · ${e.window}`,value:(0,U.jsx)(`span`,{className:H.num,children:y(e.cloudCostUsd)}),caption:Xe}),(0,U.jsx)(x,{label:`Tokens · ${e.window}`,value:(0,U.jsx)(`span`,{className:H.num,children:b(e.totalTokens)}),caption:`Local and cloud combined`})]}),e.empty?(0,U.jsx)(`p`,{className:H.muted,style:{marginTop:`var(--space-4)`},children:`No provider activity recorded in this window. Choose a longer window, or run a chat turn and it appears here.`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:H.split,style:{marginTop:`var(--space-4)`},children:[(0,U.jsx)(dt,{label:`Local`,tokens:e.localTokens,total:n,color:ct}),(0,U.jsx)(dt,{label:`Cloud`,tokens:e.cloudTokens,total:n,color:lt})]}),(0,U.jsx)(m,{items:[{label:`Local`,color:ct,kind:`swatch`},{label:`Cloud`,color:lt,kind:`swatch`}]}),(0,U.jsx)(f,{title:`Tokens by provider`,description:`Share of the ${e.window} window`,empty:r.length===0,emptyMessage:`No provider rows in this window.`,table:(0,U.jsx)(d,{caption:`Tokens and cost by provider`,columns:ut,rows:e.byProvider,rowKey:e=>e.provider}),children:(0,U.jsx)(h,{data:r,orientation:`horizontal`,height:Math.max(120,r.length*34),formatValue:e=>b(e),ariaLabel:`Tokens by provider over the ${e.window} window`})})]})]})}var pt={available:`success`,credits:`success`,tight:`warning`,exhausted:`danger`,"signed-out":`warning`,"probe-unsupported":`warning`,unknown:`unknown`},mt=g(0),ht=g(5);function gt(e,t=5e3){let[n,r]=(0,M.useState)(()=>Date.now());return(0,M.useEffect)(()=>{if(!e)return;let n=setInterval(()=>r(Date.now()),t);return()=>clearInterval(n)},[e,t]),n}function _t({row:e}){let t=e.resident?e.expiresAtMs:null,n=gt(t!==null);return t===null?`—`:He(t-n)}function vt({row:e}){return e.tools===`unknown`?(0,U.jsx)(l,{quality:F(`The runtime did not report a capability list for this model.`),label:`${e.name} tool support`,children:null}):e.tools===`supported`?(0,U.jsx)(u,{status:`agentic`,tone:`success`,children:`tools`}):(0,U.jsx)(u,{status:`no-tools`,tone:`danger`,children:`no tools`})}function yt({row:e}){if(e.sizeBytes===null)return(0,U.jsx)(`span`,{children:`—`});let t=e.resident?`Resident size reported by the runtime.`:`On-disk size; this model is not resident, so it is using no memory.`;return(0,U.jsxs)(`span`,{title:t,children:[q(e.sizeBytes),e.resident&&e.memoryPct!==null?` · ${C(e.memoryPct)} of machine`:``]})}function bt({row:e}){if(!e.resident)return(0,U.jsx)(`span`,{className:H.capacityMuted,children:`not resident`});if(e.gpuPct===null)return(0,U.jsx)(l,{quality:F(`The runtime reported no VRAM split for this resident model.`),label:`${e.name} placement`,children:null});let t=Math.round(e.gpuPct);return(0,U.jsxs)(`span`,{className:H.placement,children:[(0,U.jsxs)(`span`,{className:H.placementBar,role:`img`,"aria-label":`${e.name}: ${C(e.gpuPct)} of resident bytes on GPU, ${C(100-e.gpuPct)} on CPU`,children:[(0,U.jsx)(`span`,{className:H.placementGpu,style:{width:`${t}%`,"--split-color":mt}}),(0,U.jsx)(`span`,{className:H.placementCpu,style:{width:`${100-t}%`,"--split-color":ht}})]}),(0,U.jsx)(`span`,{className:H.placementText,children:e.placement===`unknown`?`${C(e.gpuPct)} GPU`:`${e.placement} · ${C(e.gpuPct)} GPU`})]})}function xt({row:e}){return e.nativeContext===null&&e.configuredContext===null?(0,U.jsx)(`span`,{children:`—`}):e.contextTruncated?(0,U.jsx)(`span`,{title:`Native context is ${J(e.nativeContext)}; Ashlr runs this seat at ${J(e.configuredContext)}.`,children:`${J(e.configuredContext)} of ${J(e.nativeContext)}`}):(0,U.jsx)(`span`,{children:J(e.nativeContext??e.configuredContext)})}var St=[{key:`name`,label:`Model`,render:e=>e.name},{key:`state`,label:`State`,render:e=>e.resident?(0,U.jsx)(u,{status:`resident`,tone:`success`,children:`resident`}):(0,U.jsx)(u,{status:`installed`,tone:`neutral`,children:`installed`})},{key:`tools`,label:`Agentic`,render:e=>(0,U.jsx)(vt,{row:e})},{key:`size`,label:`Size`,numeric:!0,render:e=>(0,U.jsx)(yt,{row:e})},{key:`placement`,label:`Placement`,render:e=>(0,U.jsx)(bt,{row:e})},{key:`params`,label:`Params`,numeric:!0,render:e=>e.parameterSize??`—`},{key:`quant`,label:`Quant`,render:e=>e.quantization??`—`},{key:`context`,label:`Context`,numeric:!0,render:e=>(0,U.jsx)(xt,{row:e})},{key:`keepalive`,label:`Keep-alive`,numeric:!0,render:e=>(0,U.jsx)(_t,{row:e})}];function Ct({staleness:e}){return e.stale?(0,U.jsxs)(`p`,{className:H.staleNotice,role:`status`,children:[(0,U.jsx)(`span`,{className:H.staleFlag,children:`last known-good`}),` Every local figure below is the last known-good reading from `,Be(e.staleForMs),` ago`,e.runtimes.length>0?` (${e.runtimes.join(`, `)})`:``,`, not a fresh probe: the runtime did not answer in time and the server kept the previous report rather than erasing it.`]}):null}function wt({card:e,staleness:t}){let n={"--engine-color":e.color},r=e.usedPct===null?null:Math.round(e.usedPct),i=e.usedPct===null?null:C(e.usedPct);return(0,U.jsxs)(`article`,{className:H.card,style:n,"aria-label":`Local usage`,children:[(0,U.jsxs)(`div`,{className:H.cardHead,children:[(0,U.jsx)(`span`,{className:H.cardLabel,children:`Local`}),(0,U.jsx)(u,{status:e.verdict.state,tone:pt[e.verdict.state],children:e.verdict.headline})]}),(0,U.jsxs)(`div`,{className:H.cardMeta,children:[(0,U.jsx)(`span`,{children:`Ollama`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,U.jsx)(`span`,{children:`no subscription, no quota, no bill`})]}),t?.stale?(0,U.jsx)(Ct,{staleness:t}):null,(0,U.jsx)(`p`,{className:H.verdictDetail,children:e.verdict.detail}),e.verdict.code?(0,U.jsxs)(`p`,{className:H.sourceLine,children:[`Probe reason `,(0,U.jsx)(`code`,{className:H.commandInline,children:e.verdict.code})]}):null,(0,U.jsx)(`span`,{className:H.bindingLabel,children:`Memory budget`}),r===null?(0,U.jsxs)(`div`,{className:H.windowBlockLead,children:[(0,U.jsxs)(`div`,{className:H.windowHead,children:[(0,U.jsx)(`span`,{children:`Resident against machine memory`}),(0,U.jsx)(l,{quality:F(`Either the resident size or the machine memory budget was not reported, so no share can be computed.`),label:`local memory budget`,children:null})]}),(0,U.jsx)(`hr`,{className:H.unknownRule,"aria-hidden":`true`})]}):(0,U.jsxs)(`div`,{className:H.windowBlockLead,children:[(0,U.jsxs)(`div`,{className:H.windowHead,children:[(0,U.jsx)(`span`,{children:`Resident against machine memory`}),(0,U.jsx)(`span`,{className:H.windowPct,children:i})]}),(0,U.jsx)(`div`,{className:H.track,"data-tone":e.tone,role:`meter`,"aria-label":`Local resident models against machine memory budget`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r,"aria-valuetext":`${q(e.residentBytes)} of ${q(e.memoryBudgetBytes)} resident`,children:(0,U.jsx)(`div`,{className:H.fill,style:{width:`${r}%`}})}),(0,U.jsxs)(`p`,{className:H.windowReset,children:[q(e.residentBytes),` of `,q(e.memoryBudgetBytes)]})]}),(0,U.jsxs)(`p`,{className:H.sourceLine,children:[e.residentCount,` resident · `,e.installedCount,` installed`]})]})}function Tt({serving:e}){if(e===void 0)return(0,U.jsx)(`p`,{className:H.sourceLine,children:`Residency is not concurrency. How many local agents can run at once is decided by the serving runtime, not by these models — a resident model can still be served to one agent at a time. The serving runtime and its real slot count are in Autonomy.`});let t=A(e);return(0,U.jsxs)(`p`,{className:H.sourceLine,children:[(0,U.jsxs)(`strong`,{children:[t.headline,`.`]}),` `,t.detail]})}function Et({view:e,serving:t}){let[n,r]=(0,M.useState)(!1),i=(0,M.useMemo)(()=>ze(e?.runtimes??[]),[e]),a=(0,M.useMemo)(()=>n?(e?.rows??[]).filter(e=>e.tools!==`unsupported`):e?.rows??[],[e,n]),o=(0,M.useMemo)(()=>a.filter(e=>e.resident&&e.sizeBytes!==null),[a]);return(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-local`,children:[(0,U.jsxs)(`div`,{className:H.panelHead,children:[(0,U.jsx)(`h3`,{id:`verse-usage-local`,className:H.panelTitle,children:`Local availability`}),(0,U.jsx)(`p`,{className:H.panelNote,children:`Resident models answer immediately. A model without tool support cannot drive an agentic session at all, however much memory is free.`})]}),(0,U.jsx)(Tt,{serving:t}),(0,U.jsx)(Ct,{staleness:i}),e===null?(0,U.jsxs)(`p`,{className:H.muted,children:[`No local-model source answered, so neither resident nor installed models can be listed. This is a missing source, not an empty machine. Start Ollama (`,(0,U.jsx)(`code`,{className:H.commandInline,children:`ollama serve`}),`) or llama-server, and this fills in on the next check.`]}):e.reachable?e.rows.length===0?(0,U.jsx)(`p`,{className:H.muted,children:`The local runtime answered and reports no installed models. Pull one to give Ashlr a local seat.`}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:H.tiles,children:[(0,U.jsx)(Q,{label:`Resident now`,value:String(e.rows.filter(e=>e.resident).length),caption:e.residentBytes===null?`At least one resident model reported no size, so the total is withheld rather than understated.`:`${q(e.residentBytes)} in memory`}),(0,U.jsx)(Q,{label:`Installed`,value:String(e.rows.length),caption:`On disk; the first turn on one of these pays a load`}),(0,U.jsx)(Q,{label:`Can drive a session`,value:String(e.agenticCount),caption:e.unknownToolCount>0?`${e.nonAgenticCount} cannot; ${e.unknownToolCount} did not report a capability list`:`${e.nonAgenticCount} cannot drive one`}),(0,U.jsx)(Q,{label:`Machine memory`,value:e.memoryBudgetBytes===null?`unknown`:q(e.memoryBudgetBytes),caption:e.freeMemoryBytes===null?`The machine reported no free-memory figure.`:`${q(e.freeMemoryBytes)} reported free by the OS`})]}),(0,U.jsxs)(`div`,{className:H.panelActions,children:[(0,U.jsx)(`button`,{type:`button`,className:H.segment,"aria-pressed":n,onClick:()=>r(e=>!e),children:`Hide models that cannot drive a session`}),e.nonAgenticCount>0?(0,U.jsxs)(`span`,{className:H.capacityMuted,children:[e.nonAgenticCount,` of `,e.rows.length,` installed models cannot drive an agentic session.`]}):null]}),(0,U.jsx)(`div`,{className:H.tableScroll,children:(0,U.jsx)(d,{caption:`Local models: residency, tool support, size, placement, parameters, quantization, context and keep-alive`,columns:St,rows:a,rowKey:e=>`${e.runtime??`runtime`}:${e.name}`})}),(0,U.jsx)(`div`,{className:H.charts,children:(0,U.jsx)(f,{title:`Resident memory by model`,description:`What is actually in memory right now`,caveat:`Only models the runtime reports as resident WITH a size appear here. An installed model occupies no memory and is not a bar at zero.`,empty:o.length===0,emptyMessage:`Nothing is resident, so there is no memory in use to chart. That is an idle machine, not a zero reading.`,table:(0,U.jsx)(d,{caption:`Resident size per model`,columns:[{key:`name`,label:`Model`,render:e=>e.name},{key:`size`,label:`Resident`,numeric:!0,render:e=>q(e.sizeBytes)}],rows:o,rowKey:e=>e.name}),children:(0,U.jsx)(h,{data:o.map(e=>({label:e.name,value:e.sizeBytes})),orientation:`horizontal`,height:Math.max(120,o.length*34),formatValue:e=>q(e),ariaLabel:`Resident memory by local model`})})}),e.runtimes.length>0?(0,U.jsx)(`ul`,{className:H.noteList,children:e.runtimes.map(e=>(0,U.jsxs)(`li`,{className:H.capacityMuted,children:[e.runtime,`:`,` `,e.reachable?`${e.modelCount} model${e.modelCount===1?``:`s`} reported`:`did not answer`,e.stale?` · retained reading, ${Be(e.staleForMs)} old`:``,e.reason?` · `:``,e.reason?(0,U.jsx)(`code`,{className:H.commandInline,children:e.reason}):null]},e.runtime))}):null,e.notes.length>0?(0,U.jsx)(`ul`,{className:H.noteList,children:e.notes.map(e=>(0,U.jsx)(`li`,{className:H.capacityMuted,children:e},e))}):null,(0,U.jsxs)(`p`,{className:H.sourceLine,children:[`Sizes and the GPU share come from the runtime's own resident report; a model with no reported VRAM split shows no placement bar rather than being drawn as fully on GPU.`,` `,b(e.rows.length),` models installed.`]})]}):(0,U.jsxs)(`p`,{className:H.muted,children:[`No local runtime answered this probe, so nothing about local models can be read. That is an unanswered probe, not a report that no models are installed. Start Ollama (`,(0,U.jsx)(`code`,{className:H.commandInline,children:`ollama serve`}),`) or llama-server, then check again.`,e.reason?(0,U.jsxs)(U.Fragment,{children:[` `,`Probe reason `,(0,U.jsx)(`code`,{className:H.commandInline,children:e.reason}),`.`]}):null]})]})}function Q({label:e,value:t,caption:n}){return(0,U.jsxs)(`div`,{className:H.figureTile,children:[(0,U.jsx)(`span`,{className:H.figureLabel,children:e}),(0,U.jsx)(`span`,{className:H.figureBig,children:t}),(0,U.jsx)(`span`,{className:H.figureCaption,children:n})]})}var Dt=[`7d`,`30d`],Ot=[{key:`day`,label:`Day`,render:e=>_(e.day)},{key:`in`,label:`Tokens in`,numeric:!0,render:e=>b(e.tokensIn)},{key:`out`,label:`Tokens out`,numeric:!0,render:e=>b(e.tokensOut)},{key:`sessions`,label:`Sessions`,numeric:!0,render:e=>b(e.sessions)}],kt=[{key:`day`,label:`Day`,render:e=>_(e.day)},{key:`cost`,label:`Estimated spend`,numeric:!0,render:e=>y(e.estCostUsd)}],At=[{key:`day`,label:`Day`,render:e=>_(e.day)},{key:`read`,label:`Cache read`,numeric:!0,render:e=>e.cacheRead===null?`not reported`:b(e.cacheRead)},{key:`write`,label:`Cache write`,numeric:!0,render:e=>e.cacheWrite===null?`not reported`:b(e.cacheWrite)}],jt=[{key:`day`,label:`Day`,render:e=>_(e.day)},{key:`rate`,label:`Cache hit rate`,numeric:!0,render:e=>e.cacheHitRate===null?`not reported`:re(e.cacheHitRate)},{key:`read`,label:`Cache read`,numeric:!0,render:e=>e.cacheRead===null?`not reported`:b(e.cacheRead)}];function Mt({series:e,window:t,onWindowChange:n,unavailableReason:r,loading:i}){let a=e?nt(e.days):null,o=e?st(e.days):null,s=rt(e),c=it(e),l=at(e),u=ot(e);return(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-series`,children:[(0,U.jsxs)(`div`,{className:H.panelHead,children:[(0,U.jsx)(`h3`,{id:`verse-usage-series`,className:H.panelTitle,children:`Token output and spend`}),(0,U.jsx)(`div`,{className:H.segmented,role:`group`,"aria-label":`Series window`,children:Dt.map(e=>(0,U.jsx)(`button`,{type:`button`,className:H.segment,"aria-pressed":e===t,onClick:()=>n(e),children:e},e))})]}),r?(0,U.jsxs)(`p`,{className:H.muted,children:[r,` No token or spend series can be drawn, and none is invented in its place.`]}):i&&e===null?(0,U.jsxs)(`p`,{className:H.muted,"aria-busy":`true`,children:[`Loading the `,Z[t].toLowerCase(),` rollup…`]}):e===null||e.days.length===0?(0,U.jsxs)(`p`,{className:H.muted,children:[`The rollup for `,Z[t].toLowerCase(),` came back with no days in it. That is an empty window, not a zero.`]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:H.tiles,children:[(0,U.jsx)(x,{label:`Tokens in · ${t}`,value:(0,U.jsx)(`span`,{className:H.num,children:b(a?.tokensIn??0)}),caption:`Across ${a?.dayCount??0} recorded days`,trend:X(e,e=>e.tokensIn),trendLabel:`Tokens in per day`}),(0,U.jsx)(x,{label:`Tokens out · ${t}`,value:(0,U.jsx)(`span`,{className:H.num,children:b(a?.tokensOut??0)}),caption:`What the models actually produced`,trend:X(e,e=>e.tokensOut),trendLabel:`Tokens out per day`}),(0,U.jsx)(x,{label:`Estimated spend · ${t}`,value:(0,U.jsx)(`span`,{className:H.num,children:y(a?.estCostUsd??0)}),caption:`Estimated from a static price table — not billed`,trend:X(e,e=>e.estCostUsd),trendLabel:`Estimated spend per day`}),(0,U.jsx)(x,{label:`Sessions · ${t}`,value:(0,U.jsx)(`span`,{className:H.num,children:b(a?.sessions??0)}),caption:`Rollup rows, not billed calls`,trend:X(e,e=>e.sessions),trendLabel:`Sessions per day`}),(0,U.jsx)(x,{label:`Estimated spend per active day`,value:(0,U.jsx)(`span`,{className:H.num,children:o?.estCostUsdPerDay===null||o===null?`unknown`:y(o.estCostUsdPerDay)}),caption:`Across the ${a?.dayCount??0} days that carry a rollup row — not the ${t} calendar span`}),(0,U.jsx)(x,{label:`Heaviest day`,value:(0,U.jsx)(`span`,{className:H.num,children:o?.peakCostDay?y(o.peakCostDay.usd):`unknown`}),caption:o?.peakCostDay?`${_(o.peakCostDay.day)} — estimated, not billed`:`No day in this window carries a cost row.`})]}),(0,U.jsxs)(`div`,{className:H.charts,children:[(0,U.jsx)(f,{title:`Tokens per day`,description:Z[t],empty:!s.available,emptyMessage:s.available?``:s.reason,table:(0,U.jsx)(d,{caption:`Tokens in and out per day`,columns:Ot,rows:e.days,rowKey:e=>e.day}),children:s.available?(0,U.jsx)(p,{series:s.series,formatX:e=>v(e),formatY:e=>b(e),ariaLabel:`Tokens in and out per day over ${Z[t].toLowerCase()}`}):null}),(0,U.jsx)(f,{title:`Estimated spend per day`,description:Z[t],caveat:Xe,empty:!c.available,emptyMessage:c.available?``:c.reason,table:(0,U.jsx)(d,{caption:`Estimated spend per day`,columns:kt,rows:e.days,rowKey:e=>e.day}),children:c.available?(0,U.jsx)(p,{series:c.series,area:!0,formatX:e=>v(e),formatY:e=>y(e),ariaLabel:`Estimated spend per day over ${Z[t].toLowerCase()}`}):null}),(0,U.jsx)(f,{title:`Cache hit rate`,description:Z[t],caveat:Ze,empty:!l.available,emptyMessage:l.available?``:l.reason,table:l.available?(0,U.jsx)(d,{caption:`Cache hit rate per day`,columns:jt,rows:e.days,rowKey:e=>e.day}):void 0,children:l.available?(0,U.jsx)(p,{series:l.series,formatX:e=>v(e),formatY:e=>te(e),ariaLabel:`Cache hit rate per day over ${Z[t].toLowerCase()}`}):null}),(0,U.jsx)(f,{title:`Cache read and write tokens`,description:Z[t],caveat:Ze,empty:!u.available,emptyMessage:u.available?``:u.reason,table:u.available?(0,U.jsx)(d,{caption:`Cache read and write tokens per day`,columns:At,rows:e.days,rowKey:e=>e.day}):void 0,children:u.available?(0,U.jsx)(p,{series:u.series,formatX:e=>v(e),formatY:e=>b(e),ariaLabel:`Cache read and write tokens per day over ${Z[t].toLowerCase()}`}):null}),(0,U.jsx)(f,{title:`Local vs cloud per day`,description:Z[t],empty:!0,emptyMessage:et,children:null})]}),e.caveats.length>0?(0,U.jsx)(`ul`,{className:H.noteList,children:e.caveats.map(e=>(0,U.jsx)(`li`,{className:H.capacityMuted,children:e},e))}):null]})]})}var Nt=[{key:`day`,label:`Day`,render:e=>_(e.day)},{key:`usd`,label:`Spend`,numeric:!0,render:e=>e.usd===null?`no tick retained`:y(e.usd)}];function Pt({series:e,todaySpentUsd:t,todaySpentDate:n,dailyBudgetUsd:r,showSeries:i=!0}){let a=n!==null&&!w(n),o=a?null:t,s=a?`Nothing recorded today — the last ledger day is ${_(n)}`:r===null?`Configured daily budget unavailable`:r===0?`Daily budget is 0 — the loop is stopped`:`of a ${y(r)} daily budget`;return(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-spend`,children:[(0,U.jsx)(`div`,{className:H.panelHead,children:(0,U.jsx)(`h3`,{id:`verse-usage-spend`,className:H.panelTitle,children:`Spend`})}),(0,U.jsx)(`div`,{className:H.tiles,children:(0,U.jsx)(x,{label:`Spend today`,value:(0,U.jsx)(`span`,{className:H.num,children:o===null?`unknown`:y(o)}),caption:s})}),i?(0,U.jsx)(`div`,{style:{marginTop:`var(--space-4)`},children:e.available?(0,U.jsx)(f,{title:`Spend per day`,description:`Autonomous loop, from the daemon tick ledger`,caveat:e.caveat,table:(0,U.jsx)(d,{caption:`Spend per day from the daemon tick ledger`,columns:Nt,rows:e.days,rowKey:e=>e.day}),children:(0,U.jsx)(p,{series:[{id:`spend`,label:`Spend`,points:e.days.map(e=>({x:j(e.day),y:e.usd}))}],area:!0,formatX:e=>v(e),formatY:e=>y(e),ariaLabel:`Autonomous loop spend per day`})}):(0,U.jsx)(f,{title:`Spend per day`,empty:!0,emptyMessage:e.reason,children:null})}):(0,U.jsx)(`p`,{className:H.sourceLine,children:`Per-day spend is charted above from the full usage rollup. The daemon tick ledger is not drawn again here.`})]})}var Ft={five_hour:`Session · rolling 5h`,seven_day:`Week · all models`,seven_day_sonnet:`Week · Sonnet`,seven_day_opus:`Week · Opus`,seven_day_fable:`Week · Fable`,codex:`Week · Codex`,primary:`Primary window`,secondary:`Secondary window`};function It(e){if(e.label)return e.label;let t=Ft[e.id];if(t)return t;let n=/^seven_day_(.+)$/.exec(e.id);return n?`Week · ${n[1]}`:e.id}function Lt(e,t){let n=T(e,t);return n===null?null:`resets ${n}`}function Rt(e,t=Date.now()){let n=e.resetDescription??Lt(e.resetsAt,t);return{id:e.id,label:It(e),usedPct:e.limitReached?null:e.usedPercent,tone:e.limitReached?`danger`:e.usedPercent===null?`ok`:I(e.usedPercent),resetText:n,resetsAt:e.resetsAt,limitReached:e.limitReached,measured:e.measured}}function zt(e){let t=e.windows,n=t.find(e=>e.limitReached);if(n)return n;let r=t.filter(e=>e.usedPercent!==null),i=r.length===0?null:r.reduce((e,t)=>(t.usedPercent??0)>(e.usedPercent??0)?t:e),a=e.binding;if(a){let e=t.find(e=>e.id===a.id)??null;if(e&&(a.limitReached||e.limitReached||i===null||(a.usedPercent??-1)>=(i.usedPercent??-1)))return e}return i}var Bt={"connection-monitor-stopped":"Native polling stopped after a metadata sample could not confirm its process cleanup, so these readings are frozen and no new ones are being taken. Restarting `ashlr verse` begins a new collection generation.","collector-unavailable":`This server is not collecting native metadata, so nothing here is a live reading.`,"collector-not-running":`No account collector is running in this server, so these cards fall back to whatever shared evidence exists.`,"collector-owned":"Another collector (`ashlr resource-console`) owns the exclusive metadata lease, so Verse is reading its shared evidence rather than probing.","collector-start-failed":`The metadata collectors could not be started in this server, so no probe has run.`,"connection-polling-paused":`Native polling is paused because no client has asked for account data recently; it resumes on the next request.`,"connection-not-checked":`No probe has run for this account yet in this server.`,"connection-probe-unavailable":`The probe for this account did not return a usable result, so there is no measurement to show.`,"accounts-pool-unavailable":`This accounts root has no readable pool or bindings, so there is nothing to probe.`,"accounts-collection-not-configured":`Native account collection is not configured for this accounts root.`,"usage-version-unsupported":`The usage probe is pinned to a specific provider build and failed closed on the installed one. That is a version pin, not an outage.`,"usage-account-changed":`The account behind this profile changed between two reads, so the reading was discarded rather than attributed to the wrong account.`,"probe-account-unavailable":`The pinned profile answered but carries no usable account identity — it is not authenticated.`,"probe-account-unsupported":`The pinned profile is authenticated by a method this probe does not accept, so no reading was taken.`,"probe-account-changed":`The account behind this pinned profile changed mid-probe, so the reading was discarded.`,"probe-account-hint-mismatch":`The pinned profile is signed in as a different account than this seat expects.`,"probe-native-unavailable":`The provider CLI for this pinned profile could not be run, so no reading was taken.`,"probe-native-exit-failed":`The provider CLI for this pinned profile exited without a usable result.`,"probe-provider-error":`The provider CLI returned an error instead of account metadata.`,"probe-protocol-unsupported":`The installed provider CLI does not speak the metadata protocol this probe requires.`,"probe-quota-invalid":`The provider returned a quota shape this probe does not recognise, so nothing was accepted as a reading.`,"probe-timed-out":`The metadata probe for this account timed out before it returned anything.`};function Vt(e,t){return e===null?t:Bt[e]??t}var Ht={available:0,credits:1,tight:2,exhausted:3,"signed-out":4,"probe-unsupported":5,unknown:6},Ut=80,Wt=100;function Gt(e){return e?e.unlimited?!0:e.hasCredits?e.balanceValue!==null&&e.balanceValue>0:!1:!1}function Kt(e){return e.unlimited?`credits are unlimited on this plan`:`a credit balance of ${e.balance??`an unreported amount`} is still spendable`}function qt(e,t){if(e.authentication===`signed-out`||e.state===`signed-out`)return{state:`signed-out`,headline:`Signed out`,detail:Vt(e.reason,`The probe reached this account’s pinned profile but it is not authenticated, so there is nothing to measure.`),code:e.reason};if(e.unsupported)return{state:`probe-unsupported`,headline:`Probe version-pinned`,detail:`The usage probe failed closed with ${e.unsupported.code}${e.unsupported.pinnedVersion?`; it is pinned to ${e.unsupported.pinnedVersion}`:``}. This is a version pin, not an outage — no window can be read until the pin is bumped.`,code:e.unsupported.code};let n=Gt(e.credits);if(t===null||t.usedPercent===null&&!t.limitReached)return n&&e.credits?{state:`credits`,headline:`Usable on credits`,detail:`No window reading reached this surface, but ${Kt(e.credits)}.`,code:e.reason}:{state:`unknown`,headline:`No reading`,detail:Vt(e.reason,`No window percentage reached this surface for this account, so nothing here is a measurement.`),code:e.reason};let r=t.usedPercent,i=t.limitReached||r!==null&&r>=Wt,a=It(t);return i?n&&e.credits?{state:`credits`,headline:`Usable on credits`,detail:`${a} is ${t.limitReached?`reported as limit reached`:`fully used`}, but ${Kt(e.credits)} — credits are independent of the window, so this account is not blocked.`,code:null}:{state:`exhausted`,headline:t.limitReached?`Limit reached`:`Window exhausted`,detail:t.limitReached?`The provider flagged ${a} as rate-limited. That flag is a denial, not a measurement, so no percentage is shown.`:`${a} is at ${C(r)} — it is the binding constraint on this account.`,code:null}:r>=Ut?{state:`tight`,headline:`Running tight`,detail:`${a} is the binding constraint at ${C(r)}.`,code:null}:{state:`available`,headline:`Usable now`,detail:`${a} is the binding constraint at ${C(r)}.`,code:null}}function Jt(e,t=null){let n=zt(e),r=qt(e,n),i=e.provider,a=e.windows.filter(e=>e.id!==n?.id).map(e=>Rt(e)),o=n?Rt(n):null,s={state:e.state,authentication:e.authentication,health:e.health,reasonCode:e.reason,observedAt:e.observedAt,notes:e.notes,unsupported:e.unsupported};return{id:e.id,label:e.label,engine:i,color:N[i],plan:e.planType,verdict:r,allWindows:o?[o,...a]:a,evidence:s,hasDetail:e.windows.length>0||e.notes.length>0||e.credits!==null||e.reason!==null,binding:o,others:a,credits:e.credits,reconnectCommand:e.reconnectCommand,observedAt:e.observedAt,rank:Ht[r.state],sourceNote:t}}function Yt(e){if(!e)return[];let t=new Set;for(let n of e.accounts)for(let e of n.notes)t.add(e);return[...t]}function Xt(e){return e?e.accounts.map(e=>Jt(e)).sort((e,t)=>e.rank-t.rank||e.label.localeCompare(t.label)):[]}function Zt(e){if(!e)return null;let t=e.models.filter(e=>e.loaded),n=e.reachable?t.length===0?0:t.some(e=>e.sizeBytes===null)?null:t.reduce((e,t)=>e+(t.sizeBytes??0),0):null,r=e.memoryBudgetBytes,i=n!==null&&r!==null&&r>0?Math.max(0,Math.min(100,n/r*100)):null,a=e.reachable?t.length>0?{state:`available`,headline:`Resident now`,detail:`${t.length} model${t.length===1?``:`s`} already in memory — no load delay, no quota, no bill.`,code:null}:e.models.length>0?{state:`tight`,headline:`Installed, not loaded`,detail:`${e.models.length} model${e.models.length===1?` is`:`s are`} installed but nothing is resident, so the first turn pays a load.`,code:null}:{state:`unknown`,headline:`No models installed`,detail:`The runtime is reachable but reports no installed models.`,code:null}:{state:`unknown`,headline:`Runtime unreachable`,detail:`No local runtime answered, so neither resident nor installed models can be listed. This is an unanswered probe, not a report that the machine is empty.`,code:e.reason};return{residentCount:t.length,installedCount:e.models.length,residentBytes:n,memoryBudgetBytes:r,usedPct:i,tone:i===null?`ok`:I(i),verdict:a,color:N.local,rank:Ht[a.state]}}var Qt=`Per-account probes are unavailable on this server, so these cards are derived from the seat roster and the per-engine snapshots.`;function $t(e){let{seat:t,control:n,frontier:r,engineSeatCount:i}=e;if(t.engine===`local`)return null;let a=n?.subscriptionUsage?.find(e=>String(e.engine)===t.engine),o=r?.engines.find(e=>String(e.engine)===t.engine),s=Ce({engine:t.engine,seat:t,subscription:a,frontier:o,engineSeatCount:i}),c=s.kind===`measured`?s.windows.map(e=>({id:e.id,label:e.label,usedPercent:e.usedPct,resetsAt:e.resetsAt===null?null:new Date(e.resetsAt*1e3).toISOString(),resetDescription:null,limitReached:!1,measured:!0})):[];return{account:{id:t.id,label:t.label,provider:t.engine,state:s.kind===`measured`?`observed`:`unavailable`,authentication:`unknown`,health:null,planType:a?.plan??null,observedAt:t.health.observedAt,windows:c,binding:null,credits:null,reason:s.kind===`measured`?null:s.reason,unsupported:null,reconnectCommand:null,notes:[]},sourceNote:s.kind===`measured`?`${P[s.source]}${s.scope===`engine`?` · engine-wide, shared by every account on this engine`:``}`:null}}function en(e){let t=e.bootstrap?.seats??[],n=new Map;for(let e of t)n.set(e.engine,(n.get(e.engine)??0)+1);return t.map(t=>$t({seat:t,control:e.control,frontier:e.frontier,engineSeatCount:n.get(t.engine)??1})).filter(e=>e!==null).map(e=>Jt(e.account,e.sourceNote)).sort((e,t)=>e.rank-t.rank||e.label.localeCompare(t.label))}function $(e){return e instanceof c&&e.status===401}function tn({title:e,body:t,action:n}){return(0,U.jsxs)(`div`,{className:H.stateBlock,role:`status`,children:[(0,U.jsx)(`p`,{className:H.stateTitle,children:e}),(0,U.jsx)(`p`,{className:H.stateBody,children:t}),n?(0,U.jsx)(`div`,{className:H.stateActions,children:n}):null]})}var nn=3e4,rn={gridColumn:`1 / -1`};function an(e,t){(0,M.useEffect)(()=>{let n=null,r=()=>{n!==null&&clearInterval(n),n=null},i=()=>{let i=typeof document>`u`||document.visibilityState===`visible`;i&&n===null?n=setInterval(e,t):i||r()};return i(),document.addEventListener(`visibilitychange`,i),()=>{document.removeEventListener(`visibilitychange`,i),r()}},[e,t])}function on(){let[e,t]=(0,M.useState)(`7d`),[n,c]=(0,M.useState)(null),l=s(he),u=s(ue),d=s(pe(e)),f=s(_e),p=s(ee),m=s(fe),h=s(ne),g=i(he),_=i(ue),v=i(pe(e)),y=i(_e),b=i(ee),S=i(fe),re=i(ne),C=a(he),ie=a(ue);an(C,nn),an(ie,nn);let w=()=>{g(),_(),v(),y(),b(),S(),re()},T=(0,M.useMemo)(()=>l.data?.available?me(l.data.raw):null,[l.data]),E=(0,M.useMemo)(()=>u.data?.available?ge(u.data.raw):null,[u.data]),D=(0,M.useMemo)(()=>d.data?.available?de(d.data.raw,e):null,[d.data,e]),O=(0,M.useMemo)(()=>m.data?m.data.available?Oe(m.data.raw,m.data.reason):ke(m.data.reason??`Configured caps unavailable.`):ke(`Configured caps not loaded yet.`),[m.data]),ce=T===null,k=(0,M.useMemo)(()=>T?Xt(T):en({bootstrap:h.data,control:p.data,frontier:f.data}),[T,h.data,p.data,f.data]),A=(0,M.useMemo)(()=>Ve(E),[E]),j=(0,M.useMemo)(()=>Zt(E),[E]),N=(0,M.useMemo)(()=>Yt(T),[T]),ve=(0,M.useMemo)(()=>{let e=k.map(e=>({key:e.id,rank:e.rank,label:e.label,kind:`account`,card:e}));return j&&e.push({key:`local`,rank:j.rank,label:`Local`,kind:`local`,card:j}),e.sort((e,t)=>e.rank-t.rank||e.label.localeCompare(t.label))},[k,j]),ye=(0,M.useMemo)(()=>le({cards:k,localCard:j,localView:A}),[k,j,A]),be=(0,M.useMemo)(()=>ze(A?.runtimes??[]),[A]),P=oe(),F=(0,M.useMemo)(()=>new Set(k.map(e=>e.id)),[k]),I=(0,M.useMemo)(()=>new Map(P.seats.map(e=>[e.id,e.accountId])),[P.seats]),L=(0,M.useMemo)(()=>{if(n===null)return null;for(let[e,t]of I)if(t===n)return e;return null},[I,n]),xe=(0,M.useCallback)(e=>{let t=I.get(e)??e;F.has(t)&&c(e=>e===t?null:t)},[I,F]),R=e=>{c(t=>t===e?null:e)},Se=(0,M.useCallback)(()=>{let e=n;c(null),e!==null&&typeof document<`u`&&document.getElementById(`verse-account-trigger-${e}`)?.focus()},[n]),Ce=(0,M.useMemo)(()=>ae(h.data?.sessions??[],h.data?.seats??[]),[h.data]),Ee=h.data?null:h.status===`error`?`The chat list could not be read${h.error?.message?` (${h.error.message})`:``}, so efficiency cannot be computed.`:`Reading the chat list…`,z=(0,M.useMemo)(()=>we(p.data?.usage),[p.data]),B=(0,M.useMemo)(()=>Te(p.data?.limits,O.foundryLimits),[p.data,O.foundryLimits]),V=(0,M.useMemo)(()=>De(p.data?.daemonObservation),[p.data]),W=O.available?O.todaySpentUsd:p.data?.daemon.todaySpentUsd??null,Ae=O.available?O.todaySpentDate:null,G=$(l.error)||$(u.error)||$(d.error)||$(f.error)||$(p.error)||$(h.error),Me=!G&&f.status===`error`&&p.status===`error`&&f.data===void 0&&p.data===void 0,Ne=!G&&!Me&&l.data===void 0&&f.data===void 0&&p.data===void 0&&(l.status===`loading`||l.status===`idle`||f.status===`loading`||p.status===`loading`||f.status===`idle`||p.status===`idle`),Pe=l.status===`refreshing`||f.status===`refreshing`||p.status===`refreshing`,K=T?.sampledAt??f.data?.generatedAt??p.data?.ts??null;return(0,U.jsxs)(`section`,{className:H.section,"aria-label":`Usage`,children:[(0,U.jsxs)(`header`,{className:H.header,"data-app-region":`drag`,children:[(0,U.jsx)(`h2`,{className:H.headerTitle,children:`Usage`}),(0,U.jsxs)(`div`,{className:H.headerMeta,children:[K?(0,U.jsxs)(`span`,{children:[Pe?`refreshing · `:``,`as of `,new Date(K).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})]}):null,(0,U.jsx)(`button`,{type:`button`,className:H.ghostButton,onClick:w,children:`Refresh`})]})]}),(0,U.jsx)(`div`,{className:H.scroll,children:G?(0,U.jsx)(tn,{title:`Read session expired`,body:`Usage data needs an authenticated read session. Unlock the console with the read token ashlr verse printed, then refresh.`,action:(0,U.jsx)(`button`,{type:`button`,className:H.ghostButton,onClick:w,children:`Try again`})}):Me?(0,U.jsx)(tn,{title:`Usage sources unreachable`,body:`Neither /api/usage nor /api/control answered. ${p.error?.message??f.error?.message??``}`.trim(),action:(0,U.jsx)(`button`,{type:`button`,className:H.ghostButton,onClick:w,children:`Retry`})}):Ne?(0,U.jsxs)(`div`,{"aria-busy":`true`,children:[(0,U.jsx)(r,{width:`30%`}),(0,U.jsx)(`div`,{className:H.skeletonGrid,style:{marginTop:`var(--space-4)`},children:(0,U.jsx)(o,{count:5})})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(se,{seats:P.seats,health:P.health,budget:P.budget,selectedSeatId:L,onSelectSeat:xe}),(0,U.jsx)(We,{overview:ye}),(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-accounts`,children:[(0,U.jsxs)(`div`,{className:H.panelHead,children:[(0,U.jsx)(`h3`,{id:`verse-usage-accounts`,className:H.panelTitle,children:`Accounts`}),(0,U.jsx)(`p`,{className:H.panelNote,children:`Ordered by what you can use right now. Each card leads with its binding constraint — the window with the highest used percent, because that is what blocks work.`})]}),ce&&l.data&&!l.data.available?(0,U.jsxs)(`p`,{className:H.muted,children:[l.data.reason,` `,Qt]}):null,T?.collectorNote?(0,U.jsx)(`p`,{className:H.muted,children:T.collectorNote}):null,N.length>0?(0,U.jsx)(`ul`,{className:H.noteList,children:N.map(e=>(0,U.jsx)(`li`,{className:H.muted,children:e},e))}):null,k.length===0&&j===null?(0,U.jsx)(`p`,{className:H.muted,children:`No accounts and no local runtime were reported. Connect an account or start Ollama, then refresh — this is an empty roster, not a set of accounts at zero.`}):(0,U.jsx)(U.Fragment,{children:(0,U.jsx)(`div`,{className:H.cards,children:ve.map(e=>{if(e.kind!==`account`)return(0,U.jsx)(wt,{card:e.card,staleness:be},e.key);let t=n===e.key;return(0,U.jsxs)(M.Fragment,{children:[(0,U.jsx)(je,{card:e.card,onOpen:R,expanded:t,triggerId:`verse-account-trigger-${e.key}`,detailId:`verse-account-detail-${e.key}`}),t?(0,U.jsx)(`div`,{id:`verse-account-detail-${e.key}`,style:rn,children:(0,U.jsx)(Fe,{card:e.card,headingId:`verse-account-heading-${e.key}`,onClose:Se})}):null]},e.key)})})})]}),(0,U.jsx)(Et,{view:A}),(0,U.jsx)(Mt,{series:D,window:e,onWindowChange:t,unavailableReason:d.data&&!d.data.available?d.data.reason:null,loading:d.status===`loading`||d.status===`idle`}),(0,U.jsx)(qe,{rows:Ce,unavailableReason:Ee}),z?(0,U.jsx)(ft,{split:z,savingsNote:Qe}):(0,U.jsxs)(`section`,{className:H.panel,"aria-labelledby":`verse-usage-split-missing`,children:[(0,U.jsx)(`div`,{className:H.panelHead,children:(0,U.jsx)(`h3`,{id:`verse-usage-split-missing`,className:H.panelTitle,children:`Local vs cloud`})}),(0,U.jsx)(`div`,{className:H.tiles,children:(0,U.jsx)(x,{label:`Not spent (ran locally)`,value:(0,U.jsx)(`span`,{className:H.num,children:`unknown`}),caption:`/api/control did not answer, so the split is unavailable`})})]}),(0,U.jsx)(Ye,{rows:B,capsNote:O.available?null:O.reason}),(0,U.jsx)(Pt,{series:V,todaySpentUsd:W,todaySpentDate:Ae,dailyBudgetUsd:O.dailyBudgetUsd,showSeries:D===null}),O.available&&O.subscriptionMaxPercent!==null?(0,U.jsxs)(`p`,{className:H.muted,children:[`Subscription throttle threshold is`,` `,(0,U.jsx)(`span`,{className:H.num,children:te(O.subscriptionMaxPercent/100)}),`. It only applies to engines that publish a real window reading — no seat is ever throttled on a guess.`]}):null]})})]})}export{on as UsageSection};
|
|
2
|
-
//# sourceMappingURL=UsageSection-DsC5WmLk.js.map
|