@ashlr/hub 3.10.0 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +101 -0
- package/dist/authority-surface.json +43 -23
- package/dist/build-identity.json +2 -2
- package/dist/core/daemon/capacity-publisher.d.ts +19 -0
- package/dist/core/daemon/capacity-publisher.js +49 -2
- package/dist/core/daemon/capacity-publisher.js.map +1 -1
- package/dist/core/daemon/overnight-status.d.ts +13 -0
- package/dist/core/daemon/overnight-status.js +93 -8
- package/dist/core/daemon/overnight-status.js.map +1 -1
- package/dist/core/fleet/dispatch-router.js +26 -9
- package/dist/core/fleet/dispatch-router.js.map +1 -1
- package/dist/core/fleet/fleet-runtime-journal.js +12 -5
- package/dist/core/fleet/fleet-runtime-journal.js.map +1 -1
- package/dist/core/fleet/fleet-types.d.ts +13 -0
- package/dist/core/routing/budget-store.js +11 -5
- package/dist/core/routing/budget-store.js.map +1 -1
- package/dist/core/routing/capacity-history-api.d.ts +30 -0
- package/dist/core/routing/capacity-history-api.js +147 -0
- package/dist/core/routing/capacity-history-api.js.map +1 -0
- package/dist/core/routing/capacity-history-types.d.ts +63 -0
- package/dist/core/routing/capacity-history-types.js +18 -0
- package/dist/core/routing/capacity-history-types.js.map +1 -0
- package/dist/core/routing/capacity-history.d.ts +130 -0
- package/dist/core/routing/capacity-history.js +654 -0
- package/dist/core/routing/capacity-history.js.map +1 -0
- package/dist/core/routing/headroom.d.ts +5 -1
- package/dist/core/routing/headroom.js +82 -41
- package/dist/core/routing/headroom.js.map +1 -1
- package/dist/core/routing/router.d.ts +8 -1
- package/dist/core/routing/router.js +49 -16
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/routing/seat-reasons.d.ts +35 -0
- package/dist/core/routing/seat-reasons.js +48 -0
- package/dist/core/routing/seat-reasons.js.map +1 -0
- package/dist/core/routing/types.d.ts +37 -0
- package/dist/core/routing/types.js.map +1 -1
- package/dist/core/verse/fleet-history-types.d.ts +12 -4
- package/dist/core/verse/fleet-history-types.js +4 -2
- package/dist/core/verse/fleet-history-types.js.map +1 -1
- package/dist/core/verse/fleet-live-api.d.ts +14 -1
- package/dist/core/verse/fleet-live-api.js +31 -11
- package/dist/core/verse/fleet-live-api.js.map +1 -1
- package/dist/core/verse/preferences.d.ts +3 -1
- package/dist/core/verse/preferences.js +5 -2
- package/dist/core/verse/preferences.js.map +1 -1
- package/dist/core/verse/types.d.ts +5 -1
- package/dist/core/verse/types.js.map +1 -1
- package/dist/core/verse/verse-api.js +2 -1
- package/dist/core/verse/verse-api.js.map +1 -1
- package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js → ActionMenu-BBB7VYjz.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-DhbNne-M.js.map → ActionMenu-BBB7VYjz.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-Bywv_iYR.css +1 -0
- package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js.map +1 -0
- package/dist/core/web/public/next/assets/{App-DyBg1v_q.js → App-CbDCLAxn.js} +5 -5
- package/dist/core/web/public/next/assets/{App-DyBg1v_q.js.map → App-CbDCLAxn.js.map} +1 -1
- package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-BgnK0wAy.js +2 -0
- package/dist/core/web/public/next/assets/AreaTrend-BgnK0wAy.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-BF5UCsMv.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-CoMngwNB.js.map → AutonomySection-BF5UCsMv.js.map} +1 -1
- package/dist/core/web/public/next/assets/BranchBar-BZNQ50YE.css +1 -0
- package/dist/core/web/public/next/assets/BranchBar-nfSb59Kv.js +2 -0
- package/dist/core/web/public/next/assets/BranchBar-nfSb59Kv.js.map +1 -0
- package/dist/core/web/public/next/assets/BudgetControl-BESM12dO.js +2 -0
- package/dist/core/web/public/next/assets/BudgetControl-BESM12dO.js.map +1 -0
- package/dist/core/web/public/next/assets/BurnDown-D1AfskPT.js +2 -0
- package/dist/core/web/public/next/assets/BurnDown-D1AfskPT.js.map +1 -0
- package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js → Button-Cr_qkQEc.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-0-nNbv1h.js.map → Button-Cr_qkQEc.js.map} +1 -1
- package/dist/core/web/public/next/assets/CapacityStrip-Cc28CyWk.css +1 -0
- package/dist/core/web/public/next/assets/CapacityStrip-DqqYnLek.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-DqqYnLek.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-DoqjyVoj.js +3 -0
- package/dist/core/web/public/next/assets/{ChatSection-B9cdRKUh.js.map → ChatSection-DoqjyVoj.js.map} +1 -1
- package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js → CommandPalette-lLV-OR63.js} +2 -2
- package/dist/core/web/public/next/assets/{CommandPalette-GpeCSrPy.js.map → CommandPalette-lLV-OR63.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js +2 -0
- package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js.map +1 -0
- package/dist/core/web/public/next/assets/Composer-ByzxOJK6.css +1 -0
- package/dist/core/web/public/next/assets/Composer.module-C8U73KdQ.js +2 -0
- package/dist/core/web/public/next/assets/{Composer.module-DJMdrqNt.js.map → Composer.module-C8U73KdQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/DiffPane-BAvvbBsf.css +1 -0
- package/dist/core/web/public/next/assets/DiffPane-BVxhK-cy.js +2 -0
- package/dist/core/web/public/next/assets/DiffPane-BVxhK-cy.js.map +1 -0
- package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js → DiffViewer-yCdw9J-Y.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-tOGWk0CA.js.map → DiffViewer-yCdw9J-Y.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-B4RaYOET.css +1 -0
- package/dist/core/web/public/next/assets/DockHost-BZReKwos.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-BZReKwos.js.map +1 -0
- package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js → EmptyState-D1GDxVZy.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-DdJ4CxtO.js.map → EmptyState-D1GDxVZy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js → Epistemic-DRp4dBfB.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-BLjM5y_y.js.map → Epistemic-DRp4dBfB.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-CFiWeOEs.css +1 -0
- package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-zvDj3He4.js +2 -0
- package/dist/core/web/public/next/assets/Funnel-zvDj3He4.js.map +1 -0
- package/dist/core/web/public/next/assets/GearTray-CkviqjYr.js +2 -0
- package/dist/core/web/public/next/assets/GearTray-CkviqjYr.js.map +1 -0
- package/dist/core/web/public/next/assets/GrowthSection-Bg5sW0jI.js +2 -0
- package/dist/core/web/public/next/assets/GrowthSection-Bg5sW0jI.js.map +1 -0
- package/dist/core/web/public/next/assets/HandoffDialog-DcPj1ri9.js +2 -0
- package/dist/core/web/public/next/assets/HandoffDialog-DcPj1ri9.js.map +1 -0
- package/dist/core/web/public/next/assets/{Input-CTu0CycC.js → Input-Ci7TD96x.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-CTu0CycC.js.map → Input-Ci7TD96x.js.map} +1 -1
- package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js → LeaderCard-BSFTlMRF.js} +2 -2
- package/dist/core/web/public/next/assets/{LeaderCard-BuSDeATv.js.map → LeaderCard-BSFTlMRF.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-9dKgJ_pT.css → MatrixHeatmap-Bmnvo1l1.css} +1 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-DojKZe9L.js +2 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-DojKZe9L.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-CvcYu1X_.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-1UncWBpW.js.map → McpSection-CvcYu1X_.js.map} +1 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-BrLCrb73.js +3 -0
- package/dist/core/web/public/next/assets/{MessageMarkdown-C4pl9LI5.js.map → MessageMarkdown-BrLCrb73.js.map} +1 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-Cgh5f1-Q.css +1 -0
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js → MessageMarkdownRenderer-CjmdBw2p.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CZsF77ZM.js.map → MessageMarkdownRenderer-CjmdBw2p.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js → Meter-DTHbmhQg.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-C18ciKz4.js.map → Meter-DTHbmhQg.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-DcO9fmYe.js +2 -0
- package/dist/core/web/public/next/assets/MindSection-DcO9fmYe.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-Cqn2uPV6.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-Cqn2uPV6.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BpvidnM2.css +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-hiTINupk.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-hiTINupk.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-B4Z37Phx.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouList-B4Z37Phx.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CruOt4JT.css +1 -0
- package/dist/core/web/public/next/assets/NewChatDialog-utSckh7C.js +3 -0
- package/dist/core/web/public/next/assets/{NewChatDialog-B_BsS9pr.js.map → NewChatDialog-utSckh7C.js.map} +1 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-7N3YSUHN.js +2 -0
- package/dist/core/web/public/next/assets/{OnboardingFlow-CtCPpgoX.js.map → OnboardingFlow-7N3YSUHN.js.map} +1 -1
- package/dist/core/web/public/next/assets/PreviewPane-CqzkaAjG.js +2 -0
- package/dist/core/web/public/next/assets/PreviewPane-CqzkaAjG.js.map +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-DoMsJSG3.css +1 -0
- package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js +2 -0
- package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js.map +1 -0
- package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js → RefreshIndicator-C1uQIegT.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-CnhEovMZ.js.map → RefreshIndicator-C1uQIegT.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js → ResourcePoolConsoleApp-DXjjV6Sh.js} +4 -4
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-28gLwmwV.js.map → ResourcePoolConsoleApp-DXjjV6Sh.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js → RouteErrorBoundary-D1LZxQjN.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-AyUPCIb3.js.map → RouteErrorBoundary-D1LZxQjN.js.map} +1 -1
- package/dist/core/web/public/next/assets/SeatSelector-CT92PqM_.js +3 -0
- package/dist/core/web/public/next/assets/{SeatSelector-DaUO-zoK.js.map → SeatSelector-CT92PqM_.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js → Segmented-BMvq-FfD.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-B_8c_83S.js.map → Segmented-BMvq-FfD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js → Select-DkdeoSQn.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-Bl5g5Dt_.js.map → Select-DkdeoSQn.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js → SessionInsightChip-CwlakUYU.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionInsightChip-w0I21q0c.js.map → SessionInsightChip-CwlakUYU.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionSearch-DFByh2NZ.js +2 -0
- package/dist/core/web/public/next/assets/{SessionSearch-B5aQ0BCM.js.map → SessionSearch-DFByh2NZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-DgSaHFK4.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-DgSaHFK4.js.map +1 -0
- package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js → Sheet-C7APkGPt.js} +2 -2
- package/dist/core/web/public/next/assets/{Sheet-CVjk-cLI.js.map → Sheet-C7APkGPt.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js → ShortcutsOverlay-ZPyXUS_I.js} +2 -2
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BiBjnBcc.js.map → ShortcutsOverlay-ZPyXUS_I.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-BRc1vGDF.css +1 -0
- package/dist/core/web/public/next/assets/Sidebar-Chsgazmk.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-Chsgazmk.js.map +1 -0
- package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js → Slider-B0kjW7cd.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-BS9MU5ZV.js.map → Slider-B0kjW7cd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js → StatusBadge-wv4e6f8b.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-DAf-ArKE.js.map → StatusBadge-wv4e6f8b.js.map} +1 -1
- package/dist/core/web/public/next/assets/StepBand-Db8WPw8J.js +2 -0
- package/dist/core/web/public/next/assets/StepBand-Db8WPw8J.js.map +1 -0
- package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js → Surface-BkDrQ4t3.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-CiYOdNKQ.js.map → Surface-BkDrQ4t3.js.map} +1 -1
- package/dist/core/web/public/next/assets/Swimlane-Dcve56cP.js +2 -0
- package/dist/core/web/public/next/assets/Swimlane-Dcve56cP.js.map +1 -0
- package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js → Switch-DamlpSMY.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-BzRXtNPt.js.map → Switch-DamlpSMY.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js → Tag-Cs4tudBN.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-DEEbDz7T.js.map → Tag-Cs4tudBN.js.map} +1 -1
- package/dist/core/web/public/next/assets/TerminalPane-BDkKFych.js +7 -0
- package/dist/core/web/public/next/assets/TerminalPane-BDkKFych.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-BwfMbnJz.css +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BE72VyBL.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-DKqAf-eD.js.map → UniverseConsoleApp-BE72VyBL.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js → UniverseView-BbmYY2P4.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseView-D6081LQL.js.map → UniverseView-BbmYY2P4.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-DsB-Jqyl.css +1 -0
- package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js +2 -0
- package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CXJWDiEM.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-BYW9dm90.css +1 -0
- package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-BnjZy8a-.js +2 -0
- package/dist/core/web/public/next/assets/actions-BnjZy8a-.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +1 -0
- package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js → budget-queries-Cp6vO7FH.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-Dacv1VYP.js.map → budget-queries-Cp6vO7FH.js.map} +1 -1
- package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js +2 -0
- package/dist/core/web/public/next/assets/calendar-day-BxBYHfX1.js.map +1 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-9-Yb211u.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-9-Yb211u.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-BmbKhjqw.js +2 -0
- package/dist/core/web/public/next/assets/charts-BmbKhjqw.js.map +1 -0
- package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js +2 -0
- package/dist/core/web/public/next/assets/colors-BZ3a9wFf.js.map +1 -0
- package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js → command-bus-DHJJLWh8.js} +2 -2
- package/dist/core/web/public/next/assets/{command-bus-CpYuam1F.js.map → command-bus-DHJJLWh8.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-model-BGznyHNQ.js +2 -0
- package/dist/core/web/public/next/assets/context-model-BGznyHNQ.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-DeJ28uSZ.js +2 -0
- package/dist/core/web/public/next/assets/context-model-DeJ28uSZ.js.map +1 -0
- package/dist/core/web/public/next/assets/context-queries-_mEgy4eg.js +2 -0
- package/dist/core/web/public/next/assets/context-queries-_mEgy4eg.js.map +1 -0
- package/dist/core/web/public/next/assets/context.module-BijAfoJw.js +2 -0
- package/dist/core/web/public/next/assets/context.module-BijAfoJw.js.map +1 -0
- package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js → control-queries-C4TG8blN.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-BGjarMm9.js.map → control-queries-C4TG8blN.js.map} +1 -1
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +2 -0
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-BB7Fi6hT.js +2 -0
- package/dist/core/web/public/next/assets/dock-icons-BB7Fi6hT.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-panes-mnIwSpRp.js +2 -0
- package/dist/core/web/public/next/assets/{dock-panes-BNTLvX7G.js.map → dock-panes-mnIwSpRp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js → dock-store-CdHQRP8s.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-store-_E5h6TEq.js.map → dock-store-CdHQRP8s.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-model-B4FKC7fH.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-B4FKC7fH.js.map +1 -0
- package/dist/core/web/public/next/assets/format-DKrNjdwD.js +2 -0
- package/dist/core/web/public/next/assets/format-DKrNjdwD.js.map +1 -0
- package/dist/core/web/public/next/assets/format-lW58rL2y.js +2 -0
- package/dist/core/web/public/next/assets/format-lW58rL2y.js.map +1 -0
- package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js → git-model-DaGw1SzS.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-5v5xGobf.js.map → git-model-DaGw1SzS.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-DG1fmn4y.js +2 -0
- package/dist/core/web/public/next/assets/global-DG1fmn4y.js.map +1 -0
- package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js → guarded-action--lguLXfz.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-action-vOPc8v75.js.map → guarded-action--lguLXfz.js.map} +1 -1
- package/dist/core/web/public/next/assets/{icons-DWb24OA6.js → icons-YPgbel-I.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-DWb24OA6.js.map → icons-YPgbel-I.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-afDA8cwW.js → index-Dk8R-3a7.js} +3 -3
- package/dist/core/web/public/next/assets/{index-afDA8cwW.js.map → index-Dk8R-3a7.js.map} +1 -1
- package/dist/core/web/public/next/assets/live-model-44wEU6I8.js +2 -0
- package/dist/core/web/public/next/assets/live-model-44wEU6I8.js.map +1 -0
- package/dist/core/web/public/next/assets/mind-B9PzLcl0.css +1 -0
- package/dist/core/web/public/next/assets/mind.module-BOABBdi_.js +2 -0
- package/dist/core/web/public/next/assets/mind.module-BOABBdi_.js.map +1 -0
- package/dist/core/web/public/next/assets/mutations-DjXM3IDg.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-C6E10SPX.js.map → mutations-DjXM3IDg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js → overnight-queries-Be_eossf.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-CCGfiS-g.js.map → overnight-queries-Be_eossf.js.map} +1 -1
- package/dist/core/web/public/next/assets/pane-chrome-8JmEhHVD.css +1 -0
- package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js +2 -0
- package/dist/core/web/public/next/assets/pane-chrome.module-D7o-fVd0.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-Dl3SEQvh.js +1 -0
- package/dist/core/web/public/next/assets/{queries-BuYIEHst.js → queries-CYEVCq5r.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-BuYIEHst.js.map → queries-CYEVCq5r.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js → reasoning-pref-a_ZP6GzU.js} +2 -2
- package/dist/core/web/public/next/assets/{reasoning-pref-BVzGczV7.js.map → reasoning-pref-a_ZP6GzU.js.map} +1 -1
- package/dist/core/web/public/next/assets/seat-subscription-CRigL-GE.js +2 -0
- package/dist/core/web/public/next/assets/seat-subscription-CRigL-GE.js.map +1 -0
- package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js → section-visibility-u7q-Q9AA.js} +2 -2
- package/dist/core/web/public/next/assets/{section-visibility-CSrsTcwK.js.map → section-visibility-u7q-Q9AA.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js → sidebar-model-i4WRuQ6j.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-C8fyqSQY.js.map → sidebar-model-i4WRuQ6j.js.map} +1 -1
- package/dist/core/web/public/next/assets/slots-CV9ZuLQU.js +3 -0
- package/dist/core/web/public/next/assets/{slots-W8gkmdfE.js.map → slots-CV9ZuLQU.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-data-DLvmUX9z.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-DLvmUX9z.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js.map +1 -0
- package/dist/core/web/public/next/assets/tasks-model-DWs5u9RO.js +2 -0
- package/dist/core/web/public/next/assets/{tasks-model-CnYQzgxk.js.map → tasks-model-DWs5u9RO.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js → terminal-icons-Ct9cZsEK.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-CxUYaWX9.js.map → terminal-icons-Ct9cZsEK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js → tool-semantics-GX8ScuSH.js} +2 -2
- package/dist/core/web/public/next/assets/{tool-semantics-CTRuLF5j.js.map → tool-semantics-GX8ScuSH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js → turn-files-BPHQzYuH.js} +2 -2
- package/dist/core/web/public/next/assets/{turn-files-BvB5LLNw.js.map → turn-files-BPHQzYuH.js.map} +1 -1
- package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js → usage-queries-CI_y9oWZ.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-CQOpeE1H.js.map → usage-queries-CI_y9oWZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-guarded-action-DVCtLzSo.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-DVCtLzSo.js.map +1 -0
- package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js → use-ticker-C3LQ2IYs.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-hryPXnyp.js.map → use-ticker-C3LQ2IYs.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-token-gate-B5gOFkeH.js +2 -0
- package/dist/core/web/public/next/assets/use-token-gate-B5gOFkeH.js.map +1 -0
- package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js → useActivity-C3R1Sudh.js} +2 -2
- package/dist/core/web/public/next/assets/{useActivity-Cg_9-7nt.js.map → useActivity-C3R1Sudh.js.map} +1 -1
- package/dist/core/web/public/next/assets/useChartWidth-0APW0BR3.js +2 -0
- package/dist/core/web/public/next/assets/useChartWidth-0APW0BR3.js.map +1 -0
- package/dist/core/web/public/next/assets/useChartWidth-BAtVgn2n.css +1 -0
- package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js → useSeatsRefresh-BN8bso-n.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-4Ov9eT1F.js.map → useSeatsRefresh-BN8bso-n.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-model-yHPwjf-7.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-yHPwjf-7.js.map +1 -0
- package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js → verse-queries-2PxoBISm.js} +2 -2
- package/dist/core/web/public/next/assets/{verse-queries-BjQoOTwv.js.map → verse-queries-2PxoBISm.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-store-DHTuZpYa.js +3 -0
- package/dist/core/web/public/next/assets/verse-store-DHTuZpYa.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-ui-store-Dy4HuDBV.js +3 -0
- package/dist/core/web/public/next/assets/{verse-ui-store-KTTKfv-T.js.map → verse-ui-store-Dy4HuDBV.js.map} +1 -1
- package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js → viewport-DDoJ_xVq.js} +2 -2
- package/dist/core/web/public/next/assets/{viewport-ZB86jdES.js.map → viewport-DDoJ_xVq.js.map} +1 -1
- package/dist/core/web/public/next/assets/warmup-BsL2LdR-.js +3 -0
- package/dist/core/web/public/next/assets/warmup-BsL2LdR-.js.map +1 -0
- package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js → workspace-model-Dd3LmIym.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-4hq_Mv3N.js.map → workspace-model-Dd3LmIym.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-CHjxJt2z.css +0 -1
- package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-DM0DYibH.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-CXxbfPJQ.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-gUVXkfhf.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-CoMngwNB.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-C-NovaXr.js.map +0 -1
- package/dist/core/web/public/next/assets/BranchBar-C9BpPVLr.css +0 -1
- package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-P5lMxHvQ.js.map +0 -1
- package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js +0 -2
- package/dist/core/web/public/next/assets/BurnDown-4P1LDoCL.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-D6Yyg4a1.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-wgFP9MUA.css +0 -1
- package/dist/core/web/public/next/assets/ChatSection-B9cdRKUh.js +0 -3
- package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-BC0uXim_.js.map +0 -1
- package/dist/core/web/public/next/assets/Composer-CkcwbQhG.css +0 -1
- package/dist/core/web/public/next/assets/Composer.module-DJMdrqNt.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-5uLKa0au.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffPane-Csboxnn0.css +0 -1
- package/dist/core/web/public/next/assets/DockHost-BGnTgdIb.css +0 -1
- package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-CBV_6Ehi.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-DuJcQCGg.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-w9AjqfTR.css +0 -1
- package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js +0 -2
- package/dist/core/web/public/next/assets/Funnel-qX3Hlbce.js.map +0 -1
- package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-kVGP1coG.js.map +0 -1
- package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js +0 -2
- package/dist/core/web/public/next/assets/GrowthSection-CYxJ9MH5.js.map +0 -1
- package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-DHZo3Ev0.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js +0 -2
- package/dist/core/web/public/next/assets/MatrixHeatmap-B_JWCjZx.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-1UncWBpW.js +0 -2
- package/dist/core/web/public/next/assets/MessageMarkdown-C4pl9LI5.js +0 -3
- package/dist/core/web/public/next/assets/MessageMarkdown-Czcl3L_Q.css +0 -1
- package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-C3fCw_fD.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dn0tzCrh.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouDrawer-CuNYJCJ0.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-SkhvvdLb.css +0 -1
- package/dist/core/web/public/next/assets/NewChatDialog-B_BsS9pr.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-CtCPpgoX.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-Cx6RRwzM.js.map +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-WQJFjSXe.css +0 -1
- package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-BWs6xevj.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-DaUO-zoK.js +0 -3
- package/dist/core/web/public/next/assets/SessionSearch-B5aQ0BCM.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-CuESA30a.js.map +0 -1
- package/dist/core/web/public/next/assets/Sidebar-DfD8MNZt.css +0 -1
- package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-q11dtYZf.js.map +0 -1
- package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-B1W7rU70.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js +0 -2
- package/dist/core/web/public/next/assets/Swimlane-BR40WVcj.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js +0 -7
- package/dist/core/web/public/next/assets/TerminalPane-CPKUTD9K.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-CmE2QL-Q.css +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-DKqAf-eD.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-B6fR3cru.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-C0V221WL.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-bjARLPwN.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-DQXMVDf7.css +0 -1
- package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-DtJb5tiM.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-Bszsdpms.js +0 -2
- package/dist/core/web/public/next/assets/actions-Bszsdpms.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-Dug8YIf0.css +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-BR539Ci8.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-D4NaLaXA.js +0 -2
- package/dist/core/web/public/next/assets/charts-D4NaLaXA.js.map +0 -1
- package/dist/core/web/public/next/assets/colors-B-vHsX1S.js +0 -2
- package/dist/core/web/public/next/assets/colors-B-vHsX1S.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js +0 -2
- package/dist/core/web/public/next/assets/context-model-Bto3LZn2.js.map +0 -1
- package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-DVdSLrYy.js.map +0 -1
- package/dist/core/web/public/next/assets/context.module-B_k02HNU.js +0 -2
- package/dist/core/web/public/next/assets/context.module-B_k02HNU.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js +0 -2
- package/dist/core/web/public/next/assets/dock-icons-oG8d7mNZ.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-panes-BNTLvX7G.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +0 -1
- package/dist/core/web/public/next/assets/format-BNYWGJat.js +0 -2
- package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +0 -1
- package/dist/core/web/public/next/assets/global-DVgMguLr.js +0 -2
- package/dist/core/web/public/next/assets/global-DVgMguLr.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js +0 -2
- package/dist/core/web/public/next/assets/live-model-Dm6ITHvX.js.map +0 -1
- package/dist/core/web/public/next/assets/mind-B-lYfSUJ.css +0 -1
- package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js +0 -2
- package/dist/core/web/public/next/assets/mind.module-BzhAlg3e.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-C6E10SPX.js +0 -2
- package/dist/core/web/public/next/assets/primitives-DQvYikjm.js +0 -1
- package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-CrWOV4Qc.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-W8gkmdfE.js +0 -3
- package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-ZtCegYMQ.js.map +0 -1
- package/dist/core/web/public/next/assets/tasks-model-CnYQzgxk.js +0 -2
- package/dist/core/web/public/next/assets/types-Dypu22dp.js +0 -3
- package/dist/core/web/public/next/assets/types-Dypu22dp.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-CO_aAsed.js.map +0 -1
- package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-DYA2-ALC.js.map +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-B8E5mJgM.css +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js +0 -2
- package/dist/core/web/public/next/assets/useChartWidth-MEXvDxDL.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-E98kXngO.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-E98kXngO.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js +0 -2
- package/dist/core/web/public/next/assets/verse-store-BgKx_YGs.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-KTTKfv-T.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CapacityStrip-DqqYnLek.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/apps/Apps.module.css","../../../../../../src/web-ui/routes/verse/apps/MonogramTile.tsx","../../../../../../src/web-ui/routes/verse/usage/CapacityStrip.module.css","../../../../../../src/web-ui/routes/verse/usage/CapacityStrip.tsx"],"sourcesContent":["/*\n * Apps & Accounts (SPEC-310C §4) — grouped rows in the Ollama style, max\n * 880px. Tokens only (DESIGN.md §13; style-scan-310 enforces it): no raw\n * colour, no px font size. The row adapts to its container: at the compact\n * width (480, viewport.ts) the right-hand pill wraps under the description.\n */\n\n.section {\n display: flex;\n flex-direction: column;\n min-height: 0;\n height: 100%;\n background: var(--bg-canvas);\n}\n\n.scroll {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: var(--space-6) var(--space-4) var(--space-12);\n /* Desktop shell (desktop/README.md \"Desktop shell contract\"): this page has\n no 48px strip, so its title sits inside the OS title-bar band. Once the\n window is narrow enough that the 880px column stops centring (minWidth\n is 900), the column's left edge lands at rail + 16px — under the macOS\n traffic lights, which cover the top-left 92px of the WINDOW. Owe the same\n overlap every header strip owes (inset − rail, 36px on a 56px rail);\n the vars are absent in a browser and the expanded rail sits under the\n lights itself, so both floor to --space-4 and nothing moves there. The\n whole column shifts, not just the header, so the title stays aligned\n with the rows under it. */\n padding-left: max(var(--space-4), calc(var(--app-traffic-light-inset, 0px) - var(--rail-width, 56px)));\n}\n\n.page {\n container-type: inline-size;\n max-width: 880px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: var(--space-8);\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n justify-content: space-between;\n gap: var(--space-3) var(--space-4);\n}\n.headerText {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n.title {\n margin: 0;\n font-family: var(--font-display);\n font-size: var(--text-xl-size);\n line-height: var(--text-xl-line);\n letter-spacing: var(--tracking-display);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n.lede {\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n.headerMeta {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n}\n\n.banner {\n margin: 0;\n padding: var(--space-3) var(--space-4);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-md);\n background: var(--bg-surface);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n.banner[data-tone='danger'] {\n border-color: color-mix(in srgb, var(--status-danger-solid) 40%, var(--border-subtle));\n color: var(--status-danger-fg);\n}\n\n/* The Accounts group's own \"Checked … again\" line, under the strip. */\n.accountsNote {\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n.accountsNote[data-tone='danger'] {\n color: var(--status-danger-fg);\n}\n\n/* ── Groups ─────────────────────────────────────────────────────────── */\n\n.group {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n scroll-margin-top: var(--space-6);\n}\n.groupHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n min-height: var(--control-h-sm);\n}\n.groupTitle {\n margin: 0;\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n font-weight: var(--font-weight-semibold);\n color: var(--text-tertiary);\n}\n.groupTitle:focus {\n outline: none;\n}\n.groupTitle:focus-visible {\n box-shadow: var(--shadow-focus-ring);\n border-radius: var(--radius-xs);\n}\n.caveat {\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-secondary);\n}\n.caveat code,\n.inlineCode {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n background: var(--bg-code);\n padding: 0 var(--space-1);\n border-radius: var(--radius-xs);\n overflow-wrap: anywhere;\n}\n\n.card {\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n padding: 0 var(--card-pad);\n box-shadow: inset 0 1px 0 var(--hairline-lift);\n}\n\n.rows {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.row {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--space-3);\n padding: var(--space-3) 0;\n border-top: 1px solid var(--border-subtle);\n}\n.row:first-child {\n border-top: 0;\n}\n\n.rowMain {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n padding-top: var(--space-1);\n}\n.rowHead {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--space-1) var(--space-3);\n min-width: 0;\n}\n.rowName {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n.rowVersion {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n color: var(--text-tertiary);\n}\n.rowDesc,\n.rowDetail {\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-secondary);\n overflow-wrap: anywhere;\n}\n.rowDetail {\n color: var(--text-tertiary);\n}\n\n.rowAside {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding-top: var(--space-1);\n max-width: 26rem;\n}\n\n/* A health state is a WORD; the dot reinforces it (DESIGN §13.2). */\n.health {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n white-space: nowrap;\n}\n.healthDot {\n width: 7px;\n height: 7px;\n border-radius: var(--radius-full);\n background: var(--status-neutral-solid);\n flex: none;\n}\n.health[data-tone='success'] .healthDot { background: var(--status-success-solid); }\n.health[data-tone='warning'] { color: var(--status-warning-fg); }\n.health[data-tone='warning'] .healthDot { background: var(--status-warning-solid); }\n.health[data-tone='danger'] { color: var(--status-danger-fg); }\n.health[data-tone='danger'] .healthDot { background: var(--status-danger-solid); }\n.health[data-tone='off'] { color: var(--text-tertiary); }\n.health[data-tone='off'] .healthDot {\n background: transparent;\n border: 1px solid var(--border-strong);\n}\n.health[data-tone='neutral'] {\n font-style: italic;\n color: var(--status-unknown-fg);\n}\n.health[data-tone='neutral'] .healthDot {\n background: transparent;\n border: 1px dashed var(--status-unknown-solid);\n}\n\n.loadingLine {\n margin: 0;\n padding: var(--space-3) 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n/* ── Monogram tile (32px rows, 24px capacity rows) ───────────────────── */\n\n.tile {\n --tile-hue: var(--text-tertiary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: 32px;\n height: 32px;\n border-radius: var(--radius-md);\n font-family: var(--font-display);\n font-size: var(--text-sm-size);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n background: var(--bg-surface-raised);\n border: 1px solid var(--border-subtle);\n position: relative;\n overflow: hidden;\n}\n.tile[data-engine] {\n background: color-mix(in srgb, var(--tile-hue) 12%, var(--bg-surface));\n border-color: color-mix(in srgb, var(--tile-hue) 28%, var(--border-subtle));\n}\n/* The 2px identity tick. */\n.tile[data-engine]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--tile-hue);\n}\n.tile[data-size='sm'] {\n width: 24px;\n height: 24px;\n border-radius: var(--radius-sm);\n font-size: var(--text-xs-size);\n}\n\n/* ── Copy pill ───────────────────────────────────────────────────────── */\n\n.pillWrap {\n display: inline-flex;\n min-width: 0;\n max-width: 100%;\n}\n/*\n * A long command WRAPS rather than ellipsizing: the operator reads what they\n * are about to paste, and a command cut mid-word (\"node ~/.ashlr/nat…\") is\n * exactly the part they need. One line keeps the pill shape (the radius is\n * half the control height); two lines become a soft capsule.\n */\n.pill {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n max-width: 100%;\n min-height: var(--control-h-sm);\n padding: 2px var(--space-2) 2px var(--space-3);\n border: 1px solid var(--border-subtle);\n border-radius: calc(var(--control-h-sm) / 2);\n text-align: left;\n background: var(--bg-code);\n color: var(--text-primary);\n cursor: pointer;\n transition: border-color var(--duration-fast) var(--ease-standard);\n}\n.pill:hover {\n border-color: var(--border-strong);\n}\n.pill:focus-visible {\n outline: none;\n box-shadow: var(--shadow-focus-ring);\n}\n.pillText {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n white-space: normal;\n overflow-wrap: anywhere;\n min-width: 0;\n}\n.pillIcon {\n display: inline-flex;\n color: var(--text-tertiary);\n}\n.pill[data-state='copied'] .pillIcon {\n color: var(--status-success-fg);\n}\n.pill[data-state='failed'] {\n border-color: var(--status-danger-solid);\n}\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* ── Launch split button ─────────────────────────────────────────────── */\n\n.split {\n display: inline-flex;\n align-items: stretch;\n}\n.split > :first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.split > :last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n margin-left: -1px;\n}\n.disabledNote {\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n max-width: 18rem;\n text-align: right;\n}\n\n/* ── Dialog bodies ───────────────────────────────────────────────────── */\n\n.dialogBody {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n.dialogBody p {\n margin: 0;\n}\n.commandBlock {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n}\n.commandLabel {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n color: var(--text-tertiary);\n}\n.dialogActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--space-2);\n margin-top: var(--space-2);\n}\n.fieldset {\n border: 0;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n.legend {\n padding: 0;\n margin-bottom: var(--space-1);\n font-size: var(--text-xs-size);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n.radio {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-sm-size);\n color: var(--text-primary);\n}\n.radio input {\n accent-color: var(--accent-500);\n}\n.error {\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--status-danger-fg);\n}\n.textarea {\n width: 100%;\n min-height: 5rem;\n resize: vertical;\n padding: var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-input);\n color: var(--text-primary);\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n.textarea:focus-visible {\n outline: none;\n box-shadow: var(--shadow-focus-ring);\n}\n.fieldLabel {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n font-size: var(--text-xs-size);\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n}\n.hint {\n font-weight: var(--font-weight-regular);\n color: var(--text-tertiary);\n}\n.warnings {\n margin: 0;\n padding-left: var(--space-4);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--status-warning-fg);\n}\n\n/* ── MCP ─────────────────────────────────────────────────────────────── */\n\n.servers {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin-top: var(--space-2);\n}\n.reasonCode {\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n color: var(--text-tertiary);\n}\n\n.scopeLine {\n margin: 0;\n padding: 0 0 var(--space-3);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-tertiary);\n}\n\n/* ── Compact container (a 375 window, or a narrow pane) ──────────────── */\n@container (max-width: 480px) {\n .row {\n grid-template-columns: auto minmax(0, 1fr);\n }\n .rowAside {\n grid-column: 2;\n justify-content: flex-start;\n max-width: none;\n }\n .disabledNote {\n text-align: left;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pill {\n transition: none;\n }\n}\n","/**\n * routes/verse/apps/MonogramTile.tsx — the square letter tile every seat and\n * app row leads with (SPEC-310C §6: engines are a monogram and a 2px tick,\n * never a vendor logo — no brand impersonation, and one visual grammar for\n * the rail, the sidebar, Apps and the capacity strip).\n *\n * Engine-backed tiles take a 12% tint of the engine hue with an ink letter,\n * so the letter's contrast never depends on the hue; neutral tiles (Aider,\n * Goose, …) sit on the surface with a hairline. Decorative: the row's name\n * carries the meaning.\n */\nimport type { CSSProperties } from 'react';\nimport type { VerseEngine } from '../../../data/api-types.js';\nimport { engineColor } from '../../../components/primitives/Tag.js';\nimport styles from './Apps.module.css';\n\nexport function MonogramTile({\n monogram,\n engine,\n size = 'md',\n}: {\n monogram: string;\n engine: VerseEngine | null;\n /** md = 32px (Apps rows), sm = 24px (capacity rows). */\n size?: 'sm' | 'md';\n}) {\n const style = engine === null ? undefined : ({ '--tile-hue': engineColor(engine) } as CSSProperties);\n return (\n <span\n className={styles.tile}\n data-size={size}\n data-engine={engine ?? undefined}\n style={style}\n aria-hidden=\"true\"\n >\n {monogram.slice(0, 2)}\n </span>\n );\n}\n","/*\n * The shared capacity strip. Tokens only (DESIGN.md §13): no raw colour, no\n * px font size. It adapts to ITS container, not the window — the same strip\n * sits in an 880px Apps column and a 300px Resources panel — so the narrow\n * layout is a container query at the compact breakpoint (480, viewport.ts).\n */\n.strip {\n container-type: inline-size;\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n min-width: 0;\n}\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n}\n\n.headline {\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n}\n\n.empty {\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n color: var(--text-secondary);\n}\n\n.rows {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n.row {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--space-3);\n padding: var(--space-3) 0;\n border-top: 1px solid var(--border-subtle);\n}\n.row:first-child {\n border-top: 0;\n}\n.row[data-compact] {\n padding: var(--space-2) 0;\n gap: var(--space-2);\n align-items: center;\n}\n\n.main {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.head {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--space-1) var(--space-3);\n min-width: 0;\n}\n\n.nameWrap,\n.nameButton {\n display: inline-flex;\n align-items: baseline;\n gap: var(--space-2);\n min-width: 0;\n}\n.nameButton {\n padding: 0;\n border: 0;\n background: none;\n font: inherit;\n color: inherit;\n cursor: pointer;\n border-radius: var(--radius-xs);\n}\n.nameButton:hover .name {\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.nameButton:focus-visible {\n outline: none;\n box-shadow: var(--shadow-focus-ring);\n}\n.nameButton[aria-pressed='true'] .name {\n color: var(--text-link);\n}\n\n/* The seat name is often a control (Usage's toggle): it wraps, never cut mid-word. */\n.name {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n min-width: 0;\n overflow-wrap: anywhere;\n text-align: left;\n}\n\n.plan {\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n font-family: var(--font-display);\n color: var(--text-tertiary);\n}\n\n/* A state is a WORD; the dot only reinforces it. */\n.word {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n white-space: nowrap;\n}\n.dot {\n width: 7px;\n height: 7px;\n border-radius: var(--radius-full);\n background: var(--status-neutral-solid);\n flex: none;\n}\n.word[data-tone='success'] .dot { background: var(--status-success-solid); }\n.word[data-tone='warning'] { color: var(--status-warning-fg); }\n.word[data-tone='warning'] .dot { background: var(--status-warning-solid); }\n.word[data-tone='danger'] { color: var(--status-danger-fg); }\n.word[data-tone='danger'] .dot { background: var(--status-danger-solid); }\n.word[data-tone='neutral'] { font-style: italic; }\n.word[data-tone='neutral'] .dot {\n background: transparent;\n border: 1px solid var(--status-unknown-solid);\n}\n\n/*\n * Accounts mode: the row's status reads as a short sentence — a label in the\n * tone's colour, then the detail in secondary text. The detail may wrap (a\n * provider's reset prose can be long); the label never truncates.\n */\n.status {\n display: inline-flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 0 var(--space-1);\n min-width: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-secondary);\n}\n.status .dot {\n align-self: center;\n}\n.statusLabel {\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n white-space: nowrap;\n}\n.status[data-tone='success'] .dot { background: var(--status-success-solid); }\n.status[data-tone='success'] .statusLabel { color: var(--status-success-fg); }\n.status[data-tone='warning'] .dot { background: var(--status-warning-solid); }\n.status[data-tone='warning'] .statusLabel { color: var(--status-warning-fg); }\n.status[data-tone='danger'] .dot { background: var(--status-danger-solid); }\n.status[data-tone='danger'] .statusLabel { color: var(--status-danger-fg); }\n.status[data-tone='neutral'] .dot {\n background: transparent;\n border: 1px solid var(--status-unknown-solid);\n}\n.status[data-tone='neutral'] .statusLabel {\n color: var(--text-secondary);\n font-style: italic;\n}\n.statusDetail {\n overflow-wrap: anywhere;\n}\n\n.stamp {\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n color: var(--text-tertiary);\n font-variant-numeric: tabular-nums;\n}\n.usableAgain {\n color: var(--text-secondary);\n font-weight: var(--font-weight-medium);\n}\n\n.summary,\n.meta {\n margin: 0;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-secondary);\n overflow-wrap: anywhere;\n}\n.meta {\n color: var(--text-tertiary);\n}\n.autonomy {\n color: var(--text-secondary);\n font-weight: var(--font-weight-medium);\n}\n.autonomy[data-status='eligible'] { color: var(--status-success-fg); }\n.autonomy[data-status='unknown'] {\n font-style: italic;\n color: var(--status-unknown-fg);\n}\n\n.bars {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n margin-top: var(--space-1);\n}\n\n.bar {\n display: grid;\n grid-template-columns: minmax(4.5rem, 7.5rem) minmax(5rem, 1fr) minmax(2.75rem, auto) minmax(0, 12rem);\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n.bar[data-compact] {\n grid-template-columns: minmax(3.5rem, 5.5rem) minmax(3rem, 1fr) auto;\n}\n\n.barLabel {\n color: var(--text-tertiary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.bar[data-binding] .barLabel {\n color: var(--text-secondary);\n}\n\n/* used (solid) · room (track) · kept for you (hatched, past the tick). */\n.track {\n position: relative;\n display: block;\n height: 6px;\n border-radius: var(--radius-full);\n background: var(--meter-track);\n overflow: hidden;\n}\n.trackUnknown {\n display: block;\n height: 6px;\n border-radius: var(--radius-full);\n border: 1px dashed var(--border-strong);\n}\n.used {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n border-radius: var(--radius-full);\n background: var(--data-seq-5);\n transition: width var(--duration-base) var(--ease-standard);\n}\n.used[data-level='tight'] { background: var(--status-warning-solid); }\n.used[data-level='limit'] { background: var(--status-danger-solid); }\n.reserve {\n position: absolute;\n top: 0;\n bottom: 0;\n background: repeating-linear-gradient(\n 135deg,\n color-mix(in srgb, var(--text-tertiary) 34%, transparent) 0 2px,\n transparent 2px 5px\n );\n}\n.ceiling {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n margin-left: -1px;\n background: var(--text-secondary);\n}\n\n.value {\n font-variant-numeric: tabular-nums;\n color: var(--text-primary);\n white-space: nowrap;\n text-align: right;\n}\n.value[data-level='tight'] { color: var(--status-warning-fg); }\n.value[data-level='limit'] { color: var(--status-danger-fg); }\n.value[data-level='unknown'] {\n font-style: italic;\n color: var(--status-unknown-fg);\n}\n\n.reset {\n color: var(--text-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--space-1);\n}\n\n/* Narrow container (a side panel, or a 375 window): actions and resets wrap. */\n@container (max-width: 480px) {\n .row {\n grid-template-columns: auto minmax(0, 1fr);\n }\n .actions {\n grid-column: 2;\n justify-content: flex-start;\n }\n .bar {\n grid-template-columns: minmax(0, 1fr) auto;\n row-gap: var(--space-1);\n }\n .bar .track,\n .bar .trackUnknown {\n grid-column: 1 / -1;\n grid-row: 2;\n }\n .reset {\n grid-column: 1 / -1;\n grid-row: 3;\n white-space: normal;\n }\n .bar[data-compact] {\n grid-template-columns: minmax(3rem, auto) minmax(3rem, 1fr) auto;\n }\n .bar[data-compact] .track,\n .bar[data-compact] .trackUnknown {\n grid-column: auto;\n grid-row: auto;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .used {\n transition: none;\n }\n}\n","/**\n * routes/verse/usage/CapacityStrip.tsx — THE capacity view (SPEC-310C §4:\n * \"Resources, NewChatDialog and onboarding drop their own capacity views and\n * import usage/CapacityStrip instead\"). Apps & Accounts and Usage render it\n * too, so every surface answers \"how much of each seat is left\" the same way.\n *\n * [C] Claude Max · max ● connected [actions]\n * usable · 62% of 5-hour window used\n * 5-hour window ▇▇▇▇▇▇▇░░░░│▨▨▨ 62% resets 7pm\n * weekly window ▇▇▇░░░░░░░░│▨▨▨ 40% resets Thu\n * Reserved for you 40% · Autonomy: Eligible\n *\n * Each bar reads left to right: used (solid), what autonomy may still use\n * (track), and the band KEPT FOR YOU (hatched) past a tick at 100 − reserve —\n * so \"Reserved for you 40%\" is something you can see, not just read. The\n * reserve applies to the binding window; the other windows carry no tick.\n *\n * Honesty (docs/VERSE-TELEMETRY-V2.md), enforced by the model and kept here:\n * - no reading → a dashed track and the words \"no reading\", never a 0% bar;\n * - a flagged limit → \"limit reached\", never \"100%\";\n * - reset prose is printed verbatim, never turned into a countdown;\n * - every state is a WORD first; colour only reinforces it.\n *\n * Three entry points:\n * <CapacityStrip seats health? budget? …/> pure: props in, markup out;\n * <LiveCapacityStrip …/> reads the shared caches itself\n * (bootstrap seats, /health,\n * /budget) — drop-in for C1/C2;\n * useCapacityRows() the rows, for a custom layout\n * (the rail ring, the seat chip).\n */\nimport { useId, useMemo, useState, type CSSProperties, type ReactNode } from 'react';\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport type { SeatHealthReport } from '../../../../core/verse/health-types.js';\nimport type { VerseBootstrap, VerseSeat } from '../../../data/api-types.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { MonogramTile } from '../apps/MonogramTile.js';\nimport { budgetQuery } from '../budget/budget-queries.js';\nimport { useSeatHealth } from '../health/useSeatHealth.js';\nimport { usePollWhileVisible, useSectionVisible } from '../shell/section-visibility.js';\nimport { useSeatsRefresh } from '../useSeatsRefresh.js';\nimport { verseBootstrapQuery } from '../verse-queries.js';\nimport {\n accountStatus,\n buildCapacityRows,\n capacityHeadline,\n capacityTone,\n orderAccountRows,\n percentText,\n windowSentence,\n type AccountStatus,\n type CapacityInputs,\n type CapacityRow,\n type CapacityWindowRow,\n} from './capacity-strip-model.js';\nimport styles from './CapacityStrip.module.css';\n\n/** Above this share of a window the bar turns amber (the word \"tight\" rides with it). */\nconst TIGHT_AT = 90;\n\n/** How often an accounts strip re-reads the clock (\"usable again in 7h\", \"checked 2m ago\"). */\nexport const ACCOUNT_CLOCK_MS = 30_000;\n\n/**\n * Apps & Accounts mode: every row leads with a sentence-case status\n * (\"Connected · usable now\", \"Spent · resets Fri 11:46 PM\", \"Signed out ·\n * reconnect to use it\", \"Checking…\"), says when it was last checked and — for\n * a spent seat — when it is usable again, and usable rows come first.\n */\nexport interface CapacityAccountsMode {\n /** False until the health sweep has answered once. */\n healthRead: boolean;\n /** The seat whose check is running now (its row reads \"Checking…\"). */\n checkingSeatId?: string | null;\n /** Injected clock for tests; otherwise the strip ticks every ACCOUNT_CLOCK_MS while visible. */\n now?: number;\n}\n\nexport interface CapacityStripProps {\n seats: readonly VerseSeat[];\n health?: readonly SeatHealthReport[] | null;\n budget?: BudgetView | null;\n local?: CapacityInputs['local'];\n seatIds?: readonly string[];\n /** full: every window with resets and the reserve; compact: one line per seat (pickers, side panels). */\n density?: 'full' | 'compact';\n /** Show the one-sentence summary above the rows. Default true for full, false for compact. */\n headline?: boolean;\n /** Heading for assistive tech (visually hidden). */\n title?: string;\n /**\n * The id of a heading that already names this strip (Apps' \"Accounts\"\n * group). The strip then labels itself by it instead of adding a second,\n * hidden heading — two regions with one name is noise to a screen reader.\n */\n labelledBy?: string;\n /** Per-seat trailing controls (Apps passes Reconnect / Fix / Edit budget). */\n renderActions?: (row: CapacityRow) => ReactNode;\n /** Makes each seat name a toggle (Usage opens the account's detail). */\n onSelectSeat?: (seatId: string) => void;\n selectedSeatId?: string | null;\n /** Shown instead of rows when the roster is empty. */\n emptyText?: string;\n /** Apps & Accounts: a status per row, when it was checked, usable rows first. */\n accounts?: CapacityAccountsMode;\n}\n\nfunction pct(n: number): number {\n return Math.max(0, Math.min(100, Math.round(n)));\n}\n\nfunction WindowBar({\n row,\n w,\n reservePercent,\n compact,\n}: {\n row: CapacityRow;\n w: CapacityWindowRow;\n reservePercent: number | null;\n compact: boolean;\n}) {\n const sentence = windowSentence(row, w, w.binding ? reservePercent : null);\n const ceiling = w.binding && reservePercent !== null && reservePercent > 0 ? 100 - pct(reservePercent) : null;\n let track: ReactNode;\n let value: ReactNode;\n if (w.limitReached) {\n track = (\n <span className={styles.track} role=\"img\" aria-label={sentence}>\n <span className={styles.used} data-level=\"limit\" style={{ width: '100%' }} />\n </span>\n );\n value = <span className={styles.value} data-level=\"limit\">limit reached</span>;\n } else if (w.usedPercent === null) {\n // Absence drawn as absence. Never a 0% bar.\n track = <span className={styles.trackUnknown} role=\"img\" aria-label={sentence} />;\n value = <span className={styles.value} data-level=\"unknown\">no reading</span>;\n } else {\n const used = pct(w.usedPercent);\n const level = used >= TIGHT_AT ? 'tight' : 'ok';\n track = (\n <span className={styles.track} role=\"img\" aria-label={sentence}>\n {ceiling !== null ? (\n <span className={styles.reserve} style={{ left: `${ceiling}%`, width: `${100 - ceiling}%` } as CSSProperties} />\n ) : null}\n <span className={styles.used} data-level={level} style={{ width: `${used}%` }} />\n {ceiling !== null ? <span className={styles.ceiling} style={{ left: `${ceiling}%` }} /> : null}\n </span>\n );\n value = <span className={styles.value} data-level={level}>{percentText(w.usedPercent)}</span>;\n }\n return (\n <div className={styles.bar} data-binding={w.binding || undefined} data-compact={compact || undefined}>\n <span className={styles.barLabel} title={w.label}>{w.label.replace(/ window$/, '')}</span>\n {track}\n {value}\n {!compact && w.resetText !== null ? <span className={styles.reset} title={w.resetText}>{w.resetText}</span> : null}\n </div>\n );\n}\n\nfunction SeatName({ row, onSelect, selected }: { row: CapacityRow; onSelect: ((id: string) => void) | undefined; selected: boolean }) {\n const text = (\n <>\n <span className={styles.name}>{row.label}</span>\n {row.plan !== null ? <span className={styles.plan}>{row.plan}</span> : null}\n </>\n );\n // A control only when there is something for it to open.\n if (!onSelect) return <span className={styles.nameWrap}>{text}</span>;\n return (\n <button type=\"button\" className={styles.nameButton} aria-pressed={selected} onClick={() => onSelect(row.seatId)}>\n {text}\n </button>\n );\n}\n\nfunction StatusLine({ status }: { status: AccountStatus }) {\n return (\n <span className={styles.status} data-tone={status.tone} data-status={status.kind}>\n <span className={styles.dot} aria-hidden=\"true\" />\n <span className={styles.statusLabel}>{status.label}</span>\n {status.detail !== null ? <span className={styles.statusDetail}>{`· ${status.detail}`}</span> : null}\n </span>\n );\n}\n\n/** \"usable again in 7h 12m · checked 2m ago\" — the row's clock facts, when it has any. */\nfunction StampLine({ status }: { status: AccountStatus }) {\n if (status.usableAgain === null && status.checked === null) return null;\n return (\n <p className={styles.stamp}>\n {status.usableAgain !== null ? <span className={styles.usableAgain}>{status.usableAgain}</span> : null}\n {status.usableAgain !== null && status.checked !== null ? ' · ' : null}\n {status.checked !== null ? <span title={status.checkedTitle ?? undefined}>{status.checked}</span> : null}\n </p>\n );\n}\n\nfunction CapacityRowView({\n row,\n compact,\n renderActions,\n onSelectSeat,\n selected,\n status,\n}: {\n row: CapacityRow;\n compact: boolean;\n renderActions: CapacityStripProps['renderActions'];\n onSelectSeat: CapacityStripProps['onSelectSeat'];\n selected: boolean;\n status: AccountStatus | null;\n}) {\n const tone = capacityTone(row.cls);\n const binding = row.windows.find((w) => w.binding) ?? null;\n const windows = compact ? (binding ? [binding] : []) : row.windows;\n const actions = renderActions ? renderActions(row) : null;\n const reserve = row.reserve;\n return (\n <li className={styles.row} data-capacity={row.cls} data-compact={compact || undefined} data-status={status?.kind}>\n <MonogramTile monogram={row.monogram} engine={row.engine} size=\"sm\" />\n <div className={styles.main}>\n <div className={styles.head}>\n <SeatName row={row} onSelect={onSelectSeat} selected={selected} />\n {status !== null ? (\n <StatusLine status={status} />\n ) : (\n <span className={styles.word} data-tone={tone}>\n <span className={styles.dot} aria-hidden=\"true\" />\n {row.word}\n </span>\n )}\n {row.connection !== null && row.connection.connection !== 'connected' && row.connection.connection !== 'unknown'\n && !(status?.coversConnection ?? false) && !(status?.kind === 'signed-out') ? (\n <span className={styles.word} data-tone={row.connection.tone}>\n <span className={styles.dot} aria-hidden=\"true\" />\n {row.connection.word}\n </span>\n ) : null}\n </div>\n {!compact || windows.length === 0 ? <p className={styles.summary}>{row.summary}</p> : null}\n {status !== null && !compact ? <StampLine status={status} /> : null}\n {windows.length > 0 ? (\n <div className={styles.bars}>\n {windows.map((w) => (\n <WindowBar key={w.id} row={row} w={w} reservePercent={reserve?.percent ?? null} compact={compact} />\n ))}\n </div>\n ) : null}\n {!compact && (reserve !== null || row.credits !== null) ? (\n <p className={styles.meta}>\n {reserve !== null ? (\n <span title={reserve.why}>\n {reserve.label}\n {/* \"Autonomy off — all yours\" already says it; no second \"Off\". */}\n {reserve.autonomy === 'off' ? null : (\n <> · Autonomy: <span className={styles.autonomy} data-status={reserve.autonomy}>{reserve.autonomyWord}</span></>\n )}\n </span>\n ) : null}\n {reserve !== null && row.credits !== null ? ' · ' : null}\n {row.credits !== null ? <span>{row.credits}</span> : null}\n </p>\n ) : null}\n </div>\n {actions ? <div className={styles.actions}>{actions}</div> : null}\n </li>\n );\n}\n\nexport function CapacityStrip({\n seats,\n health,\n budget,\n local,\n seatIds,\n density = 'full',\n headline,\n title = 'Seat capacity',\n labelledBy,\n renderActions,\n onSelectSeat,\n selectedSeatId = null,\n emptyText = 'No seats yet. Connect an account or start Ollama — an empty roster, not seats at zero.',\n accounts,\n}: CapacityStripProps) {\n const headingId = useId();\n const [tick, setTick] = useState(() => Date.now());\n usePollWhileVisible(() => setTick(Date.now()), ACCOUNT_CLOCK_MS, { enabled: accounts !== undefined && accounts.now === undefined });\n const now = accounts?.now ?? tick;\n const healthRead = accounts?.healthRead ?? false;\n const accountsMode = accounts !== undefined;\n // Accounts mode words every window reset and reason against the SAME clock\n // as its status line (\"Spent · resets Sat 11:46 PM\"), so the two never\n // disagree about which day \"today\" is.\n const rowsNow = accountsMode ? now : undefined;\n const built = useMemo(\n () => buildCapacityRows(seats, {\n health: health ?? null,\n budget: budget ?? null,\n ...(local ? { local } : {}),\n ...(seatIds ? { seatIds } : {}),\n ...(rowsNow !== undefined ? { now: rowsNow } : {}),\n }),\n [seats, health, budget, local, seatIds, rowsNow],\n );\n const rows = useMemo(\n () => (accountsMode ? orderAccountRows(built, { healthRead, now }) : built),\n [built, accountsMode, healthRead, now],\n );\n const compact = density === 'compact';\n const showHeadline = headline ?? !compact;\n // Named by the caller's heading: a plain block inside the caller's region,\n // not a second region with the same name.\n const Wrapper = labelledBy ? 'div' : 'section';\n return (\n <Wrapper className={styles.strip} aria-labelledby={labelledBy ? undefined : headingId} data-density={density}>\n {labelledBy ? null : <h3 id={headingId} className={styles.visuallyHidden}>{title}</h3>}\n {showHeadline && rows.length > 0 ? <p className={styles.headline}>{capacityHeadline(rows)}</p> : null}\n {rows.length === 0 ? (\n <p className={styles.empty}>{emptyText}</p>\n ) : (\n <ul className={styles.rows} aria-label={labelledBy ? undefined : title} aria-labelledby={labelledBy}>\n {rows.map((row) => (\n <CapacityRowView\n key={row.seatId}\n row={row}\n compact={compact}\n renderActions={renderActions}\n onSelectSeat={onSelectSeat}\n selected={selectedSeatId === row.seatId}\n status={accounts\n ? accountStatus(row, { healthRead, now, checking: accounts.checkingSeatId === row.seatId })\n : null}\n />\n ))}\n </ul>\n )}\n </Wrapper>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Live data\n// ---------------------------------------------------------------------------\n\n/** Budget moves with the collector (30 s); a minute is plenty for a strip. */\nexport const CAPACITY_BUDGET_POLL_MS = 60_000;\n\nexport interface CapacityData {\n seats: readonly VerseSeat[];\n health: readonly SeatHealthReport[] | null;\n budget: BudgetView | null;\n /** True until the seat roster has been read once. */\n loading: boolean;\n}\n\n/**\n * The three shared reads behind the strip, kept live while the surface is on\n * screen: seats (the /seats poll merged into bootstrap), A2's health (30 s)\n * and A9's budget (60 s). Each is the app-wide cache entry — mounting this\n * twice costs no extra request.\n */\nexport function useCapacityData(opts: { withBudget?: boolean; withHealth?: boolean } = {}): CapacityData {\n const visible = useSectionVisible();\n const withBudget = opts.withBudget ?? true;\n const withHealth = opts.withHealth ?? true;\n const bootstrap = useQuery(verseBootstrapQuery);\n useSeatsRefresh(visible);\n const health = useSeatHealth(visible && withHealth);\n const budget = useQuery(budgetQuery);\n const refetchBudget = useRefetch(budgetQuery);\n usePollWhileVisible(refetchBudget, CAPACITY_BUDGET_POLL_MS, { enabled: withBudget });\n const data = bootstrap.data as VerseBootstrap | undefined;\n return {\n seats: data?.seats ?? [],\n health: withHealth ? (health.data?.seats ?? null) : null,\n budget: withBudget ? (budget.data ?? null) : null,\n loading: data === undefined && (bootstrap.status === 'loading' || bootstrap.status === 'idle'),\n };\n}\n\n/** The rows for a custom layout (the rail's capacity ring, the composer's seat chip). */\nexport function useCapacityRows(inputs: Omit<CapacityInputs, 'health' | 'budget'> = {}): CapacityRow[] {\n const data = useCapacityData();\n return useMemo(\n () => buildCapacityRows(data.seats, { health: data.health, budget: data.budget, ...inputs }),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- inputs is a small literal; its fields are the identity.\n [data.seats, data.health, data.budget, inputs.local, inputs.seatIds],\n );\n}\n\nexport interface LiveCapacityStripProps extends Omit<CapacityStripProps, 'seats' | 'health' | 'budget'> {\n /**\n * The roster, when the caller already holds it (the new-chat dialog, whose\n * seat list IS this roster and whose pre-fill works from its own props).\n * The strip then adds only health and budget, and never shows \"Reading\n * seats…\" over a roster that is already on screen.\n */\n seats?: readonly VerseSeat[];\n}\n\n/** Drop-in strip that reads its own data — what NewChatDialog and onboarding mount. */\nexport function LiveCapacityStrip({ seats: given, ...props }: LiveCapacityStripProps) {\n const data = useCapacityData();\n if (given === undefined && data.loading) {\n return <p className={styles.empty} aria-busy=\"true\">Reading seats…</p>;\n }\n return <CapacityStrip {...props} seats={given ?? data.seats} health={data.health} budget={data.budget} />;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DockHost-BZReKwos.js","assets/index-Dk8R-3a7.js","assets/global-DG1fmn4y.js","assets/global-_tOCFt9y.css","assets/MutationTokenDialog-Cqn2uPV6.js","assets/MutationTokenDialog-Cum_DqQZ.css","assets/command-catalog-s3W6Z96D.js","assets/workbench-types-DzN-5trg.js","assets/dock-store-CdHQRP8s.js","assets/viewport-DDoJ_xVq.js","assets/verse-store-DHTuZpYa.js","assets/format-lW58rL2y.js","assets/format-DKrNjdwD.js","assets/VerseConsoleApp-Dq_hREXs.js","assets/RouteErrorBoundary-D1LZxQjN.js","assets/RouteErrorBoundary-6RMd_aZg.css","assets/guarded-action--lguLXfz.js","assets/verse-ui-store-Dy4HuDBV.js","assets/verse-queries-2PxoBISm.js","assets/composer-keys-CYz4U4Bg.js","assets/command-bus-DHJJLWh8.js","assets/section-visibility-u7q-Q9AA.js","assets/useActivity-C3R1Sudh.js","assets/icons-YPgbel-I.js","assets/VerseConsoleApp-CXJWDiEM.css","assets/verse-model-yHPwjf-7.js","assets/context-queries-_mEgy4eg.js","assets/context-model-BGznyHNQ.js","assets/context-model-DeJ28uSZ.js","assets/workspace-model-Dd3LmIym.js","assets/ActionMenu-BBB7VYjz.js","assets/ActionMenu-DPjsLU1g.css","assets/tool-semantics-GX8ScuSH.js","assets/line-diff-B5Eonif2.js","assets/dock-icons-BB7Fi6hT.js","assets/dock-icons-1w9hA2-h.css","assets/tasks-model-DWs5u9RO.js","assets/sidebar-model-i4WRuQ6j.js","assets/use-token-gate-B5gOFkeH.js","assets/EmptyState-D1GDxVZy.js","assets/EmptyState-B3YUPGaa.css","assets/slots-CV9ZuLQU.js","assets/Button-Cr_qkQEc.js","assets/Button-DrnKsvnQ.css","assets/dock-panes-mnIwSpRp.js","assets/Switch-DamlpSMY.js","assets/Switch-CU044EaE.css","assets/context.module-BijAfoJw.js","assets/context-DiToyj6s.css","assets/DockHost-B4RaYOET.css","assets/NewChatDialog-utSckh7C.js","assets/Segmented-BMvq-FfD.js","assets/Segmented-BnjHbKzH.css","assets/git-model-DaGw1SzS.js","assets/SeatSelector-CT92PqM_.js","assets/seat-subscription-CRigL-GE.js","assets/Composer.module-C8U73KdQ.js","assets/Composer-ByzxOJK6.css","assets/CapacityStrip-DqqYnLek.js","assets/Tag-Cs4tudBN.js","assets/Tag-D0rAEciH.css","assets/budget-queries-Cp6vO7FH.js","assets/useSeatsRefresh-BN8bso-n.js","assets/capacity-strip-model-9-Yb211u.js","assets/CapacityStrip-Cc28CyWk.css","assets/folder-picker-C8zo3A56.js","assets/NewChatDialog-yyQpA9p_.css","assets/Workspace-CKvVEPFq.js","assets/highlight-CMCZK9jW.js","assets/DiffViewer-yCdw9J-Y.js","assets/DiffViewer-C8HHTnVE.css","assets/MessageMarkdown-BrLCrb73.js","assets/MessageMarkdown-Cgh5f1-Q.css","assets/reasoning-pref-a_ZP6GzU.js","assets/Meter-DTHbmhQg.js","assets/Meter-CYt9KpM0.css","assets/Workspace-BYW9dm90.css","assets/Sidebar-Chsgazmk.js","assets/RefreshIndicator-C1uQIegT.js","assets/RefreshIndicator-CVv22U_j.css","assets/Sidebar-BRc1vGDF.css","assets/turn-files-BPHQzYuH.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e,n as t,o as n,s as r,t as i}from"./index-Dk8R-3a7.js";import{E as a,I as o,O as s,T as c,a as l,c as u,g as d,h as f,m as p,p as ee,s as m}from"./global-DG1fmn4y.js";import{n as te,t as ne}from"./MutationTokenDialog-Cqn2uPV6.js";import{r as re}from"./RouteErrorBoundary-D1LZxQjN.js";import{l as ie}from"./command-catalog-s3W6Z96D.js";import{b as ae,g as oe,h as se,m as ce,p as le,s as ue,t as de,x as fe}from"./dock-store-CdHQRP8s.js";import{C as pe,o as me,p as he,v as ge,w as h,x as _e}from"./verse-ui-store-Dy4HuDBV.js";import{C as ve,S as g,T as ye,_ as be,a as xe,d as Se,f as Ce,i as we,l as Te,m as Ee,p as De,r as Oe,s as ke,u as _,w as Ae,x as je,y as v}from"./verse-queries-2PxoBISm.js";import{a as y}from"./command-bus-DHJJLWh8.js";import{i as Me,r as Ne}from"./section-visibility-u7q-Q9AA.js";import{m as Pe}from"./VerseConsoleApp-Dq_hREXs.js";import{_ as Fe,a as Ie,d as Le,f as Re,h as ze,i as Be,m as b,n as Ve,o as He,p as Ue,s as We,t as x,u as S}from"./verse-store-DHTuZpYa.js";import{t as Ge}from"./Button-Cr_qkQEc.js";var C=r(e(),1),w=new Map;function T(e,t){return w.set(e,t),()=>{w.get(e)===t&&w.delete(e)}}function E(e,t){let n=t.replace(/\s+$/,``);return e.trim()?`${e.replace(/\s+$/,``)}\n\n${n}`:n}function Ke(e=document){let t=e.querySelector(`textarea[aria-label="Message"]`);return t instanceof HTMLTextAreaElement?t:null}function qe(e,t){if(!t.trim())return!1;let n=w.get(e);if(n)return n(t),!0;let r=Ke();if(!r||r.disabled)return!1;let i=E(r.value,t),a=Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,`value`)?.set;a?a.call(r,i):r.value=i,r.dispatchEvent(new Event(`input`,{bubbles:!0})),r.focus();let o=r.value.length;try{r.setSelectionRange(o,o)}catch{}return!0}function Je(e){return`verse-session-roots:${e}`}var D={key:`verse-session-roots:none`,fetch:async()=>null};function Ye(e){return e?[e.projectPath,...(e.extraRoots??[]).filter(t=>t!==e.projectPath)]:[]}function Xe(e){let t=e?.id??null,n=(0,C.useMemo)(()=>t?{key:Je(t),fetch:e=>_(t,e)}:D,[t]),r=p(n),i=f(n),a=e?.turnCount??0,o=(0,C.useRef)({id:t,turns:a});(0,C.useEffect)(()=>{let e=o.current;o.current={id:t,turns:a},e.id===t&&e.turns!==a&&t&&i()},[t,a,i]);let s=r.data??null,c=s!==null&&Array.isArray(s.roots)?s:null,l=(0,C.useMemo)(()=>Ye(e),[e?.projectPath,e?.extraRoots]),u=(0,C.useMemo)(()=>{if(!c||c.roots.length===0)return l;let e=c.roots.filter(e=>e.primary).map(e=>e.path),t=c.roots.filter(e=>!e.primary).map(e=>e.path);return[...e,...t]},[c,l]),d=c?.roots.find(e=>e.primary)??c?.roots[0]??null;return{data:c,error:r.status===`error`?r.error?.message??`could not read this chat’s folders`:null,roots:u,branch:d?.git?.branch??null}}var Ze=new Set;function O(e){return Ze.add(e),()=>Ze.delete(e)}function Qe(e){let t=!1;for(let n of[...Ze])n(e)&&(t=!0);return t}var k=new Set;function $e(e){return k.add(e),()=>k.delete(e)}function et(){let e=!1;for(let t of[...k])t()&&(e=!0);return e}var A=new Set;function j(e){return A.add(e),()=>A.delete(e)}function tt(e){let t=!1;for(let n of[...A])n(e)&&(t=!0);return t}var M=t(),N=[`user-message`,`turn-started`,`text-delta`,`assistant-message`,`thinking`,`tool-use`,`tool-result`,`usage`,`turn-done`,`error`,`cancelled`,`compaction`,`context`,`thinking-delta`,`thinking-progress`,`progress`,`status`,`recovered`,`history-truncated`];function P(e){return Math.min(1e3*2**e,15e3)}var F=e=>e===null||typeof e==`number`&&Number.isFinite(e)&&e>=0;function nt(e){return e.type===`context`?typeof e.contextTokens==`number`&&Number.isFinite(e.contextTokens)&&e.contextTokens>=0&&typeof e.exact==`boolean`&&F(e.contextWindow)&&(e.autoCompactAt===void 0||F(e.autoCompactAt)):e.type!==`compaction`||(e.trigger===`auto`||e.trigger===`manual`)&&F(e.preTokens)&&F(e.postTokens)&&F(e.durationMs)}var I=e=>e===void 0||typeof e==`number`&&Number.isFinite(e)&&e>=0;function L(e){switch(e.type){case`thinking-delta`:return typeof e.text==`string`;case`thinking-progress`:return e.estimatedTokens!==void 0&&I(e.estimatedTokens);case`progress`:return(e.phase===`thinking`||e.phase===`tool`||e.phase===`writing`||e.phase===`waiting`)&&typeof e.elapsedMs==`number`&&Number.isFinite(e.elapsedMs)&&e.elapsedMs>=0&&(e.tool===void 0||typeof e.tool==`string`)&&I(e.outTokens)&&I(e.tokPerSec);case`status`:return(e.kind===`retry`||e.kind===`preflight`||e.kind===`watchdog`)&&typeof e.message==`string`;case`history-truncated`:return typeof e.droppedBefore==`number`&&Number.isFinite(e.droppedBefore);default:return!0}}function R(e){try{let t=JSON.parse(e);if(!t||typeof t!=`object`)return null;let n=t;return typeof n.seq!=`number`||typeof n.type!=`string`||!nt(t)||!L(t)?null:t}catch{return null}}var z=`verse-sessions`;function rt(e=!0){return`/api/events?${e?`topics=${z}&`:``}client=${encodeURIComponent(s())}`}var it=!1;function at(){let e=null,t=null,n=0,r=!1,i=!1,o=()=>{if(r||typeof EventSource>`u`||a().phase!==`authenticated`)return;let s=!it&&!i,c=new EventSource(rt(s),{withCredentials:!0}),l=!1;e=c,c.onopen=()=>{l=!0,n=0,i&&=(it=!0,!1)},c.addEventListener(`verse-sessions`,()=>Se()),c.onerror=()=>{if(c.close(),e===c&&(e=null),!(r||a().phase!==`authenticated`)){if(!l&&s){i=!0,o();return}i=!1,t=setTimeout(()=>{t=null,n+=1,o()},P(n))}}};return o(),()=>{r=!0,t&&clearTimeout(t),t=null,e?.close(),e=null}}var ot=9e4,st=250;function ct(e,t){let n=Number.isSafeInteger(t)&&t>0?`after=${t}&`:``;return`${ve(e,`/events`)}?${n}client=${encodeURIComponent(s())}`}function lt(e){return Math.min(1e3*2**e,15e3)}function ut(){return globalThis.IS_REACT_ACT_ENVIRONMENT===!0}var dt=e=>{let t=!1,n=()=>{t||(t=!0,r!==null&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(r),clearTimeout(i),e())},r=(typeof document>`u`||document.visibilityState!==`hidden`)&&typeof requestAnimationFrame==`function`?requestAnimationFrame(n):null,i=setTimeout(n,r===null?0:st);return()=>{t=!0,r!==null&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(r),clearTimeout(i)}};function ft(e){return ut()?(e(),null):dt(e)}var pt=class{sessionId;queue=[];cancel=null;scheduled=!1;constructor(e){this.sessionId=e}push(e){if(this.queue.push(e),this.scheduled)return;this.scheduled=!0;let t=ft(()=>this.flush());this.scheduled&&(this.cancel=t)}flush(){if(this.scheduled=!1,this.cancel?.(),this.cancel=null,this.queue.length===0)return;let e=this.queue;this.queue=[],x(this.sessionId,e).settled&&Se()}drop(){this.scheduled=!1,this.cancel?.(),this.cancel=null,this.queue=[]}},mt=!1,ht=0;function gt(e){let t=null,n=null,r=0,i=!1,o=!1,s=new pt(e),c=()=>{if(i||typeof EventSource>`u`||a().phase!==`authenticated`)return;b(e,r===0?`connecting`:`reconnecting`);let l=mt||o?0:He(e).lastSeq,u=new EventSource(ct(e,l),{withCredentials:!0}),d=!1;t=u,u.onopen=()=>{d=!0,r=0,o&&=(mt=!0,!1),b(e,`open`)};for(let e of N)u.addEventListener(e,e=>{if(t!==u)return;let n=R(e.data);n&&s.push(n)});u.onerror=f=>{if(!(typeof MessageEvent<`u`&&f instanceof MessageEvent)&&(s.flush(),!i)){if(typeof u.readyState==`number`&&u.readyState===ht){b(e,`reconnecting`);return}if(u.close(),t===u&&(t=null),b(e,`reconnecting`),a().phase===`authenticated`){if(!d&&l>0&&!o){o=!0,c();return}o=!1,n=setTimeout(()=>{n=null,r+=1,c()},lt(r))}}}},l=()=>{n&&clearTimeout(n),n=null,t?.close(),t=null};return c(),{close(){i||(i=!0,l(),s.flush(),s.drop(),b(e,`closed`))},restart(){i||(l(),s.flush(),r=0,c())}}}var B=new Map;function V(e){let t=B.get(e);t&&(B.delete(e),t.idleTimer&&clearTimeout(t.idleTimer),t.stream.close())}function _t(){let e=[...B.entries()].filter(([,e])=>e.refs===0).sort((e,t)=>e[1].releasedAt-t[1].releasedAt);for(;e.length>1;)V(e.shift()[0])}function H(e){let t=B.get(e);t?(t.refs+=1,t.idleTimer&&clearTimeout(t.idleTimer),t.idleTimer=null):(t={stream:gt(e),refs:1,idleTimer:null,releasedAt:0},B.set(e,t));let n=t,r=!1;return()=>{r||(r=!0,B.get(e)===n&&(--n.refs,!(n.refs>0)&&(n.releasedAt=Date.now(),n.idleTimer=setTimeout(()=>{B.get(e)===n&&n.refs===0&&V(e)},ot),_t())))}}function vt(){for(let e of[...B.keys()])V(e)}Fe(e=>{e.kind===`reset`?vt():V(e.sessionId)});function yt(e,t={}){let n=new AbortController,r=null,i=!1,a=()=>{i||r||(r=H(e))},o=He(e);return t.reload!==!0&&o.loaded&&o.loadError===null?a():(t.reload&&B.get(e)?.stream.restart(),Te(e,n.signal).then(t=>{n.signal.aborted||(S(e,t.session,t.events),a())}).catch(t=>{n.signal.aborted||Le(e,t instanceof Error?t.message:`Could not load this chat.`)})),()=>{i=!0,n.abort(),r?.(),r=null}}var U=()=>()=>{};function W(e){return(0,C.useCallback)(t=>e?ze(e,t):U(),[e])}function bt(e,t=0){let n=W(e),r=(0,C.useSyncExternalStore)(n,()=>Ie(e),()=>Ie(e)),i=(0,C.useRef)({sessionId:null,reload:t});return(0,C.useEffect)(()=>{let n=i.current;if(i.current={sessionId:e,reload:t},e)return yt(e,{reload:n.sessionId===e&&n.reload!==t})},[e,t]),r}function xt(e){let t=W(e);return(0,C.useSyncExternalStore)(t,()=>We(e),()=>We(e))}function St(e){let t=W(e);return(0,C.useSyncExternalStore)(t,()=>Be(e),()=>Be(e))}var Ct=5e3,G=new Map,wt=new Set;function K(e){return wt.add(e),()=>wt.delete(e)}function Tt(){return G}function Et(e,t){if(!((G.get(e)??-1)>=t)){G=new Map(G).set(e,t);for(let e of[...wt])e();Ce(e,t)}}function Dt(){return(0,C.useSyncExternalStore)(K,Tt,Tt)}function Ot(){let e=p(v,{freshMs:4500}),t=p(g),n=f(v),r=(0,C.useCallback)(()=>n(),[n]);Ne(r,Ct);let i=Dt();return{activity:e.data??null,meta:t.data??null,localSeen:i}}var q={sidebar:{min:220,max:420,def:264},resources:{min:240,max:520,def:320}},kt=1,At=`ashlr.verse.panels.v1`,jt=`ashlr.verse.ui.v2`,Mt={containerWidth:0,sidebarVisible:!0,resourcesVisible:!0};function J(e,t){let n=q[e],r=Number(t);return!Number.isFinite(r)||r<=0?n.def:Math.max(n.min,Math.min(n.max,Math.round(r)))}function Nt(e,t){let n=J(`sidebar`,e.sidebar),r=J(`resources`,e.resources);if(!Number.isFinite(t.containerWidth)||t.containerWidth<=0)return{sidebar:n,resources:r};let i=(t.sidebarVisible?kt:0)+(t.resourcesVisible?kt:0),a=t.containerWidth-480-i,o=(t.sidebarVisible?n:0)+(t.resourcesVisible?r:0)-a;if(o<=0)return{sidebar:n,resources:r};if(t.resourcesVisible){let e=Math.min(o,r-q.resources.min);r-=e,o-=e}if(o>0&&t.sidebarVisible){let e=Math.min(o,n-q.sidebar.min);n-=e}return{sidebar:n,resources:r}}function Pt(){return{sidebar:q.sidebar.def,resources:q.resources.def}}function Ft(e){if(e===null||e===``)return null;let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t,r=n.sidebar??n.sidebarWidth,i=n.resources??n.resourcesWidth;return r===void 0&&i===void 0?null:{sidebar:J(`sidebar`,r),resources:J(`resources`,i)}}function It(){try{return Ft(localStorage.getItem(At))||(Ft(localStorage.getItem(jt))??Pt())}catch{return Pt()}}function Lt(e){try{localStorage.setItem(At,JSON.stringify({sidebar:e.sidebar,resources:e.resources}))}catch{}}var Y=It(),X=Mt,Z={desired:Y,effective:Nt(Y,X)},Rt=new Set;function zt(e,t){return e.sidebar===t.sidebar&&e.resources===t.resources}function Bt(){let e=Nt(Y,X);if(!(zt(Z.desired,Y)&&zt(Z.effective,e))){Z={desired:Y,effective:e};for(let e of Rt)e()}}function Vt(e){return Rt.add(e),()=>{Rt.delete(e)}}function Ht(){return Z}function Ut(e){(X.containerWidth!==e.containerWidth||X.sidebarVisible!==e.sidebarVisible||X.resourcesVisible!==e.resourcesVisible)&&(X=e,Bt())}function Wt(e){zt(Y,e)||(Y=e,Lt(Y),Bt())}function Q(e,t){Wt({...Y,[e]:J(e,t)})}function Gt(e,t){Q(e,Z.effective[e]+t)}function Kt(e){Q(e,q[e].def)}function qt(){return(0,C.useSyncExternalStore)(Vt,Ht,Ht)}var Jt=`verseResizing`;function Yt(e){try{e?document.body.dataset[Jt]=`true`:delete document.body.dataset[Jt]}catch{}}function Xt({side:e,label:t,className:n}){let r=qt(),i=q[e],a=r.effective[e],o=(0,C.useRef)(null),[s,c]=(0,C.useState)(!1),l=(0,C.useCallback)(()=>{o.current&&(o.current=null,c(!1),Yt(!1))},[]),u=(0,C.useCallback)(e=>{if(e.button===0){e.preventDefault(),o.current={pointerId:e.pointerId,originX:e.clientX,startWidth:a},c(!0),Yt(!0);try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}},[a]);(0,C.useEffect)(()=>{if(!s)return;let t=t=>{let n=o.current;if(!n||t.pointerId!==n.pointerId)return;let r=t.clientX-n.originX;Q(e,e===`sidebar`?n.startWidth+r:n.startWidth-r)},n=e=>{let t=o.current;t&&e.pointerId!==t.pointerId||l()},r=t=>{let n=o.current;n&&t.key===`Escape`&&(Q(e,n.startWidth),l())},i=()=>l();return window.addEventListener(`pointermove`,t),window.addEventListener(`pointerup`,n),window.addEventListener(`pointercancel`,n),window.addEventListener(`keydown`,r),window.addEventListener(`blur`,i),()=>{window.removeEventListener(`pointermove`,t),window.removeEventListener(`pointerup`,n),window.removeEventListener(`pointercancel`,n),window.removeEventListener(`keydown`,r),window.removeEventListener(`blur`,i),Yt(!1)}},[s,e,l]);let d=(0,C.useCallback)(t=>{let n=t.shiftKey?64:16,r=e===`sidebar`?1:-1;switch(t.key){case`ArrowRight`:Gt(e,n*r);break;case`ArrowLeft`:Gt(e,-n*r);break;case`Home`:Q(e,i.min);break;case`End`:Q(e,i.max);break;case`Enter`:Kt(e);break;default:return}t.preventDefault()},[e,i.min,i.max]);return(0,M.jsx)(`div`,{className:n,"data-verse-resizer":e,"data-dragging":s?`true`:void 0,role:`separator`,"aria-orientation":`vertical`,"aria-label":t,"aria-valuemin":i.min,"aria-valuemax":i.max,"aria-valuenow":a,"aria-valuetext":`${a} pixels`,tabIndex:0,onPointerDown:u,onPointerUp:l,onPointerCancel:l,onLostPointerCapture:l,onKeyDown:d,onDoubleClick:()=>Kt(e)})}var $={chat:`_chat_14h0e_13`,main:`_main_14h0e_36`,banner:`_banner_14h0e_46`,bannerWarn:`_bannerWarn_14h0e_47`,resize:`_resize_14h0e_90`,scrim:`_scrim_14h0e_11`,dialogActions:`_dialogActions_14h0e_157`,sidebarSkeleton:`_sidebarSkeleton_14h0e_167`,workspaceSkeleton:`_workspaceSkeleton_14h0e_175`,skeletonHeader:`_skeletonHeader_14h0e_181`,skeletonBody:`_skeletonBody_14h0e_189`,skeletonComposer:`_skeletonComposer_14h0e_199`},Zt=n({ChatSection:()=>bn,describeChatError:()=>gn,preloadChatSurface:()=>dn}),Qt=(0,C.lazy)(()=>i(()=>import(`./DockHost-BZReKwos.js`).then(e=>({default:e.DockHost})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]))),$t=(0,C.lazy)(()=>i(()=>import(`./NewChatDialog-utSckh7C.js`).then(e=>({default:e.NewChatDialog})),__vite__mapDeps([50,1,2,3,4,5,18,7,51,52,10,25,13,14,15,6,16,9,17,8,19,20,21,22,23,24,26,11,12,53,27,54,55,56,57,58,59,60,61,62,63,28,64,29,65,66])));function en(e){let t=null,n=null,r=()=>(n??=e().then(e=>t=e,e=>{throw n=null,e}),n),i=(0,C.lazy)(()=>r().then(e=>({default:e})));function a(e){let[n]=(0,C.useState)(()=>t);return n?(0,M.jsx)(n,{...e}):(0,M.jsx)(i,{...e})}return typeof window<`u`&&r().catch(()=>void 0),{Slot:a,ready:r}}var tn=en(()=>i(()=>import(`./Workspace-CKvVEPFq.js`).then(e=>e.Workspace),__vite__mapDeps([67,1,2,3,4,5,68,69,70,6,7,9,8,17,18,19,23,13,14,15,16,20,21,22,24,71,72,10,11,12,25,26,55,56,57,61,62,63,28,42,43,30,31,32,33,34,35,36,37,73,38,41,39,40,44,74,75,76]))),nn=tn.Slot,rn=en(()=>i(()=>import(`./Sidebar-Chsgazmk.js`).then(e=>e.Sidebar),__vite__mapDeps([77,1,2,3,4,5,78,79,18,7,13,14,15,6,16,9,17,8,19,20,21,22,23,24,25,55,11,12,29,65,42,43,30,31,34,32,33,35,37,80]))),an=rn.Slot,on=un(()=>Promise.all([i(()=>import(`./tasks-model-DWs5u9RO.js`),__vite__mapDeps([36,25,1,2,3,13,14,4,5,15,6,7,16,9,17,8,18,19,20,21,22,23,24,32,33,37])),i(()=>import(`./turn-files-BPHQzYuH.js`),__vite__mapDeps([81,32,33]))]).then(([e,t])=>({otherRunningChats:e.otherRunningChats,lastTurnFiles:t.lastTurnFiles}))),sn=un(()=>i(()=>import(`./verse-model-yHPwjf-7.js`).then(e=>e.w).then(e=>({firstRunnableModel:e.firstRunnableModel,seatById:e.seatById})),__vite__mapDeps([25,1,2,3,13,14,4,5,15,6,7,16,9,17,8,18,19,20,21,22,23,24]))),cn=[],ln=[];function un(e){let t=null,n=null,r=()=>(n??=e().then(e=>t=e,e=>{throw n=null,e}),n);function i(){let[e,n]=(0,C.useState)(()=>({current:t}));return(0,C.useEffect)(()=>{if(e.current)return;let t=!0;return r().then(e=>{t&&n({current:e})},()=>void 0),()=>{t=!1}},[e]),e.current}return typeof window<`u`&&r().catch(()=>void 0),{ready:r,useLoaded:i}}function dn(){return Promise.all([tn.ready(),rn.ready(),on.ready(),sn.ready()])}function fn(){return(0,M.jsx)(`nav`,{className:$.sidebarSkeleton,"aria-busy":`true`,"aria-label":`Loading chat list`,children:[64,82,58,76,70].map(e=>(0,M.jsx)(l,{width:`${e}%`},e))})}function pn(){return(0,M.jsxs)(`div`,{className:$.workspaceSkeleton,role:`status`,"aria-label":`Loading chat`,children:[(0,M.jsx)(`div`,{className:$.skeletonHeader,children:(0,M.jsx)(l,{width:`32%`})}),(0,M.jsxs)(`div`,{className:$.skeletonBody,children:[(0,M.jsx)(l,{width:`72%`}),(0,M.jsx)(l,{width:`88%`}),(0,M.jsx)(l,{width:`64%`})]}),(0,M.jsx)(`div`,{className:$.skeletonComposer,children:(0,M.jsx)(l,{width:`100%`})})]})}var mn=`ashlr.verse.selected.v1`;function hn(){try{return localStorage.getItem(mn)}catch{return null}}function gn(e){return e instanceof u?"This server was started without dispatch — run `ashlr verse` to chat.":e instanceof m?e.code===`VERSE_MODEL_UNAVAILABLE`?`${(e.detail??`This chat's model cannot run on its seat.`).replace(/\.?$/,`.`)} Continue in a fresh chat on a model this seat can run, or re-pin the seat's CLI (\`ashlr resources profile repin\`).`:e.status===409&&(e.code===null||e.code===`VERSE_SESSION_BUSY`)?`A turn is already running in this chat. Stop it first.`:e.status===413?`That message is too large (64 KB max).`:e.status===401?`Mutation token was rejected. Unlock again with the token ashlr verse printed.`:e.detail??e.message:e instanceof Error?e.message:`Something went wrong.`}function _n(){let[e,t]=(0,C.useState)(()=>typeof window>`u`?1440:window.innerWidth||1440);return(0,C.useEffect)(()=>{let e=()=>t(window.innerWidth||1440);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),e}function vn(){requestAnimationFrame(()=>{document.querySelector(`textarea[aria-label="Message"]`)?.focus()})}function yn(e){return e instanceof Element&&e.closest(`[role="dialog"], [role="menu"], [role="listbox"], [aria-modal="true"]`)!==null}function bn(){let e=p(je),t=p(Ae),n=d(Ae),r=d(je),i=ee(),a=re(),s=Pe(),l=Me(),u=se(),f=Ot(),m=_n(),ve=(0,C.useId)(),[g,Se]=(0,C.useState)(hn),[Ce,Te]=(0,C.useState)(``),[_,v]=(0,C.useState)({open:!1}),[Ne,Fe]=(0,C.useState)(!1),[Ie,Le]=(0,C.useState)(null),[ze,Be]=(0,C.useState)(0),[b,He]=(0,C.useState)({open:!1,reason:``}),[We,x]=(0,C.useState)(null),[S,w]=(0,C.useState)(null),[T,E]=(0,C.useState)(!1),[Ke,Je]=(0,C.useState)(0),D=(0,C.useRef)(null),Ye=(0,C.useRef)(null),Ze=qt(),O=(0,C.useMemo)(()=>e.data?.seats??[],[e.data]),Qe=(0,C.useMemo)(()=>e.data?.projects??[],[e.data]),k=p(ye),$e=(0,C.useMemo)(()=>k.data?.workspaces??[],[k.data]),A=e.data?.dispatchEnabled??!0,j=bt(g,ze),N=Xe(j.session),P=(0,C.useMemo)(()=>{let n=t.data??e.data?.sessions??[];if(!j.session)return n;let r=j.session;return n.some(e=>e.id===r.id)?n.map(e=>e.id===r.id?r:e):[r,...n]},[t.data,e.data,j.session]),F=(0,C.useCallback)(e=>{Se(e);try{e?localStorage.setItem(mn,e):localStorage.removeItem(mn)}catch{}},[]);(0,C.useEffect)(()=>{g&&t.data&&!t.data.some(e=>e.id===g)&&!j.session&&F(null)},[g,t.data,j.session,F]),(0,C.useEffect)(()=>at(),[]);let nt=(0,C.useRef)(g);(0,C.useEffect)(()=>{_e(g),nt.current!==g&&(nt.current=g,de())},[g]);let I=j.session?.turnCount??null;(0,C.useEffect)(()=>{l&&g&&I!==null&&(typeof document>`u`||document.visibilityState!==`hidden`)&&Et(g,I)},[l,g,I]);let L=(0,C.useCallback)((e,t)=>i.hasHold?t():new Promise((n,r)=>{D.current={run:()=>{t().then(n,r)},cancel:()=>n(null)},He({open:!0,reason:e})}),[i.hasHold]),R=(0,C.useCallback)(e=>{e instanceof Oe||a.show(gn(e),`danger`)},[a]),z=(0,C.useCallback)((e={})=>{Le(null);let t=j.session,n=e.projectPath===void 0?t?.projectPath??null:e.projectPath,r=t&&n===t.projectPath?{seatId:t.seatId,model:t.model}:null,i=e.seat??r??he(n);v({open:!0,projectPath:n,seat:i})},[j.session]),rt=(0,C.useCallback)(async e=>{await L(`Starting a chat spawns an agent process for this project.`,async()=>{Fe(!0),Le(null);try{let t=await xe(e);ge(t.projectPath,{seatId:t.seatId,model:t.model}),Re(t.id,t),v({open:!1}),F(t.id),a.show(`Started “${t.title}”`,`success`)}catch(e){Le(gn(e))}finally{Fe(!1)}})},[L,F,a]),it=(0,C.useCallback)(async e=>{let t=g;return t?await L(`Sending a message runs the agent against this project.`,async()=>{Ue(t,`running`);try{let n=await Ee(t,e);return Re(t,n.session,n.turnId),!0}catch(e){return Ue(t,`idle`),R(e),!1}})===!0:!1},[g,L,R]),ot=(0,C.useCallback)((e=g)=>{e&&L(`Stopping the running turn.`,async()=>{try{await we(e)}catch(e){R(e)}})},[g,L,R]),st=(0,C.useCallback)(async(e,t)=>await L(`Renaming a chat.`,async()=>{try{let n=await De(e,t);return Re(e,n),!0}catch(e){return R(e),!1}})===!0,[L,R]),ct=(0,C.useCallback)(async e=>await L(`Deleting a chat removes its transcript from disk.`,async()=>{try{return await ke(e),Ve(e),o(e),e===g&&F(null),a.show(`Chat deleted.`,`neutral`),!0}catch(e){return R(e),!1}})===!0,[L,R,F,a,g]),lt=(0,C.useCallback)((e,t,n)=>{L(n,async()=>{try{await be(e,t)}catch(e){R(e)}})},[L,R]),ut=(0,C.useCallback)(e=>{let t=j.session;t&&(z({projectPath:t.projectPath,seat:e}),a.show(`Chats are bound to one seat — starting a new chat on the same project.`,`neutral`))},[j.session,z,a]),dt=(0,C.useCallback)(e=>{let t=P.find(t=>t.id===e)??null;t&&w(t)},[P]),ft=(0,C.useCallback)(e=>{e!==g&&F(e),x(e)},[g,F]),pt=(0,C.useCallback)(e=>{F(e),window.matchMedia?.(`(max-width: 760px)`)?.matches===!0&&h(!0)},[F]),mt=(0,C.useCallback)(()=>h(!s.sidebarCollapsed),[s.sidebarCollapsed]),ht=u.state.open&&(u.state.active===`terminal`||u.state.splitWith===`terminal`),gt=(0,C.useCallback)(()=>{ht?ce(`terminal`):ue({})},[ht]),B=(0,C.useCallback)(()=>ue({newTab:!0}),[]),V=(0,C.useRef)(0),_t=sn.useLoaded();(0,C.useEffect)(()=>{let e=s.command;if(e&&e.nonce!==V.current&&(e.name!==`new-chat`||_t)){switch(V.current=e.nonce,e.name){case`open-session`:e.sessionId&&F(e.sessionId);break;case`focus-composer`:vn();break;case`new-chat`:{let{seatById:t,firstRunnableModel:n}=_t,r=e.seatId?t(O,e.seatId):void 0,i=he(e.projectPath??null),a=r?i?.seatId===r.id?i.model:n(r)?.id:void 0;z({...e.projectPath===void 0?{}:{projectPath:e.projectPath},...r&&a?{seat:{seatId:r.id,model:a}}:{}});break}}me()}},[s.command,z,O,F,_t]);let H=new Map([[`chat.sidebar`,mt],[`chat.find`,()=>et()],[`chat.turn-prev`,()=>tt(-1)],[`chat.turn-next`,()=>tt(1)],[`dock.toggle`,le],[`dock.terminal`,gt],[`dock.terminal-new`,B],[`dock.preview`,()=>ce(`preview`)],[`dock.diff`,()=>ce(`diff`)]]);y(`chat.sidebar`,H.get(`chat.sidebar`)),y(`chat.find`,H.get(`chat.find`)),y(`chat.turn-prev`,H.get(`chat.turn-prev`)),y(`chat.turn-next`,H.get(`chat.turn-next`)),y(`dock.toggle`,H.get(`dock.toggle`)),y(`dock.terminal`,H.get(`dock.terminal`)),y(`dock.terminal-new`,H.get(`dock.terminal-new`)),y(`dock.preview`,H.get(`dock.preview`)),y(`dock.diff`,H.get(`dock.diff`));let vt=(0,C.useRef)(H);vt.current=H,(0,C.useEffect)(()=>{if(!l)return;let e=e=>{if(e.defaultPrevented||yn(e.target))return;let t=ie(e,[`chat`]);if(!t||t.scope!==`chat`||t.id===`chat.find`||t.id===`chat.turn-prev`||t.id===`chat.turn-next`)return;let n=vt.current.get(t.id);n&&(e.preventDefault(),n())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[l]);let yt=e.data?!e.data.dispatchEnabled:!1,U=s.sidebarCollapsed,W=fe(m),xt=u.state.open&&u.state.tabs.length>0,St=xt&&W===`column`,Ct=U?0:q.sidebar.min,G=St?Math.max(oe.minWidth,Math.min(ae(u.state.width,m),Ke>0?Ke-480-Ct:1/0)):0;(0,C.useEffect)(()=>{let e=Ye.current;if(!e)return;let t=()=>{Je(e.clientWidth),Ut({containerWidth:Math.max(0,e.clientWidth-G),sidebarVisible:!U,resourcesVisible:!1})};t();let n=typeof ResizeObserver==`function`?new ResizeObserver(t):null;return n?.observe(e),window.addEventListener(`resize`,t),()=>{n?.disconnect(),window.removeEventListener(`resize`,t)}},[U,G]);let wt={"--verse-sidebar-width":`${Ze.effective.sidebar}px`,"--verse-dock-width":`${G}px`},K=on.useLoaded(),Tt=(0,C.useMemo)(()=>K?K.otherRunningChats(P,f.activity,g):cn,[K,P,f.activity,g]),Dt=(0,C.useMemo)(()=>K?K.lastTurnFiles(j.events,N.roots):ln,[K,N.roots,j.events]),kt={setPinned:(e,t)=>lt(e,{pinned:t},t?`Pinning a chat.`:`Unpinning a chat.`),setArchived:(e,t)=>lt(e,{archived:t},t?`Archiving a chat.`:`Unarchiving a chat.`),rename:st,handoff:ft,requestDelete:dt,dispatchEnabled:A};return(0,M.jsxs)(`div`,{ref:Ye,className:$.chat,style:wt,"data-sidebar":U?`collapsed`:`open`,"data-dock":St?`open`:`closed`,children:[(0,M.jsx)(C.Suspense,{fallback:(0,M.jsx)(fn,{}),children:(0,M.jsx)(an,{sessions:P,sessionsStatus:t.status,sessionsError:t.error?.message??null,projects:Qe,seats:O,selectedId:g,query:Ce,onQuery:Te,onSelect:pt,onNew:()=>z(),onRetry:()=>{n(),r()},onCollapse:()=>h(!0),onDisconnect:()=>{c()},activity:f.activity,meta:f.meta,localSeen:f.localSeen,actions:kt})}),U?null:(0,M.jsx)(Xt,{side:`sidebar`,label:`Resize chat list`,className:$.resize}),(0,M.jsx)(`button`,{type:`button`,className:$.scrim,"aria-label":`Close chat list`,tabIndex:-1,onClick:()=>h(!0)}),(0,M.jsxs)(`div`,{className:$.main,children:[e.status===`error`&&!e.data?(0,M.jsxs)(`div`,{role:`alert`,className:$.banner,children:[(0,M.jsx)(`span`,{children:e.error?.message??`Could not load Verse.`}),(0,M.jsx)(`button`,{type:`button`,onClick:r,children:`Retry`})]}):yt?(0,M.jsxs)(`div`,{role:`status`,className:$.bannerWarn,children:[`Read-only: this server was started without dispatch. Run `,(0,M.jsx)(`code`,{children:`ashlr verse`}),` to send messages.`]}):null,(0,M.jsx)(C.Suspense,{fallback:(0,M.jsx)(pn,{}),children:(0,M.jsx)(nn,{view:j,seats:O,projects:Qe,dispatchEnabled:A,locked:!i.hasHold,hasAnySessions:P.length>0,onSend:it,onStop:()=>ot(),onRename:e=>g?st(g,e):Promise.resolve(!1),onRequestDelete:()=>{g&&dt(g)},onSeatChange:ut,onNew:()=>z(),onRetry:()=>Be(e=>e+1),sidebarCollapsed:U,onToggleSidebar:()=>h(!U),onOpenSession:F,handoffOpen:We!==null&&We===g,onHandoffOpenChange:e=>x(e?g:null),otherRunning:Tt})})]}),xt?(0,M.jsx)(C.Suspense,{fallback:null,children:(0,M.jsx)(Qt,{presentation:W,windowWidth:m,columnWidth:G,session:j.session,seats:O,events:j.events,roots:N.roots,rootsData:N.data,rootsError:N.error,turnFiles:Dt,otherRunning:Tt,dispatchEnabled:A,onOpenSession:F,onHandoff:e=>x(e),onOpenAccounts:()=>pe(`apps`),onSendToChat:e=>{(!g||!qe(g,e))&&a.show(`Open a chat to send this to it.`,`neutral`)},onAddToMessage:e=>{(!g||!qe(g,e))&&a.show(`Open a chat to add this to its message.`,`neutral`)}})}):null,_.open?(0,M.jsx)(C.Suspense,{fallback:null,children:(0,M.jsx)($t,{open:!0,onClose:()=>v({open:!1}),projects:Qe,seats:O,workspaces:$e,initialProjectPath:_.projectPath??null,initialSeat:_.seat??null,busy:Ne,error:Ie,onCreate:rt,runMutation:L})}):null,(0,M.jsx)(te,{open:S!==null,onClose:()=>{T||w(null)},titleId:ve,title:`Delete this chat?`,description:S?`“${S.title||`Untitled chat`}” and its transcript are removed from this machine. This cannot be undone.`:void 0,children:(0,M.jsxs)(`div`,{className:$.dialogActions,children:[(0,M.jsx)(Ge,{variant:`ghost`,onClick:()=>w(null),disabled:T,children:`Keep`}),(0,M.jsx)(Ge,{variant:`danger`,busy:T,onClick:async()=>{let e=S;if(e){E(!0);try{await ct(e.id)}finally{E(!1),w(null)}}},children:`Delete`})]})}),(0,M.jsx)(ne,{open:b.open,reason:b.reason,tokenLabel:`Mutation token`,tokenHelp:`the mutation token ashlr verse printed`,onClose:()=>{He({open:!1,reason:``});let e=D.current;e&&setTimeout(()=>{D.current===e&&(D.current=null,e.cancel())},0)},onUnlocked:()=>{let e=D.current;D.current=null,e?.run()}})]})}export{bn as ChatSection,O as a,Xe as c,gn as describeChatError,$e as i,E as l,St as n,j as o,dn as preloadChatSurface,xt as r,Qe as s,Zt as t,T as u};
|
|
3
|
+
//# sourceMappingURL=ChatSection-DoqjyVoj.js.map
|