@ashlr/hub 3.11.3 → 3.11.5
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 +34 -0
- package/README.md +44 -18
- package/dist/authority-surface.json +72 -57
- package/dist/build-identity.json +2 -2
- package/dist/cli/authority.d.ts +39 -0
- package/dist/cli/authority.js +222 -55
- package/dist/cli/authority.js.map +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/verse.d.ts +3 -0
- package/dist/cli/verse.js +10 -0
- package/dist/cli/verse.js.map +1 -1
- package/dist/core/authority/types.d.ts +2 -2
- package/dist/core/cloud/cloud-api.js +1 -1
- package/dist/core/cloud/cloud-api.js.map +1 -1
- package/dist/core/cloud/delivery-contract.d.ts +1 -1
- package/dist/core/cloud/delivery-contract.js +25 -15
- package/dist/core/cloud/delivery-contract.js.map +1 -1
- package/dist/core/cloud/store.js +6 -0
- package/dist/core/cloud/store.js.map +1 -1
- package/dist/core/cloud/tracker.d.ts +2 -0
- package/dist/core/cloud/tracker.js +140 -37
- package/dist/core/cloud/tracker.js.map +1 -1
- package/dist/core/cloud/types.d.ts +9 -1
- package/dist/core/cloud/types.js.map +1 -1
- package/dist/core/comms/dispatch.d.ts +5 -0
- package/dist/core/comms/dispatch.js +12 -1
- package/dist/core/comms/dispatch.js.map +1 -1
- package/dist/core/comms/requests.d.ts +27 -1
- package/dist/core/comms/requests.js +50 -1
- package/dist/core/comms/requests.js.map +1 -1
- package/dist/core/daemon/loop.d.ts +14 -0
- package/dist/core/daemon/loop.js +35 -0
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/fabric/claude-usage.js +23 -1
- package/dist/core/fabric/claude-usage.js.map +1 -1
- package/dist/core/fleet/dispatch-router.d.ts +7 -0
- package/dist/core/fleet/dispatch-router.js +4 -1
- package/dist/core/fleet/dispatch-router.js.map +1 -1
- package/dist/core/fleet/tick-hooks-live.d.ts +5 -1
- package/dist/core/fleet/tick-hooks-live.js +10 -1
- package/dist/core/fleet/tick-hooks-live.js.map +1 -1
- package/dist/core/local-runtime/llama/config.d.ts +14 -0
- package/dist/core/local-runtime/llama/config.js +20 -2
- package/dist/core/local-runtime/llama/config.js.map +1 -1
- package/dist/core/local-runtime/llama/process.d.ts +19 -0
- package/dist/core/local-runtime/llama/process.js +67 -17
- package/dist/core/local-runtime/llama/process.js.map +1 -1
- package/dist/core/local-runtime/llama/supervisor.js +14 -3
- package/dist/core/local-runtime/llama/supervisor.js.map +1 -1
- package/dist/core/observability/rollup.d.ts +12 -0
- package/dist/core/observability/rollup.js +37 -2
- package/dist/core/observability/rollup.js.map +1 -1
- package/dist/core/observability/usage-source.js +49 -1
- package/dist/core/observability/usage-source.js.map +1 -1
- package/dist/core/resources/connection-monitor.js +47 -4
- package/dist/core/resources/connection-monitor.js.map +1 -1
- package/dist/core/resources/engineering-mission-store.d.ts +1 -1
- package/dist/core/routing/headroom.js +7 -2
- package/dist/core/routing/headroom.js.map +1 -1
- package/dist/core/routing/router.d.ts +48 -0
- package/dist/core/routing/router.js +129 -13
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/run/best-of-n.d.ts +7 -0
- package/dist/core/run/best-of-n.js +3 -0
- package/dist/core/run/best-of-n.js.map +1 -1
- package/dist/core/run/harness-dispatch.d.ts +147 -0
- package/dist/core/run/harness-dispatch.js +234 -0
- package/dist/core/run/harness-dispatch.js.map +1 -0
- package/dist/core/run/orchestrator.js +3 -0
- package/dist/core/run/orchestrator.js.map +1 -1
- package/dist/core/run/provider-client.d.ts +8 -0
- package/dist/core/run/provider-client.js +4 -0
- package/dist/core/run/provider-client.js.map +1 -1
- package/dist/core/run/sandboxed-engine.d.ts +8 -0
- package/dist/core/run/sandboxed-engine.js +60 -7
- package/dist/core/run/sandboxed-engine.js.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +181 -5
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +180 -4
- package/dist/core/universe/firm-demo.d.ts +1 -1
- package/dist/core/universe/firm-graph.d.ts +2 -2
- package/dist/core/util/scrub.js +16 -3
- package/dist/core/util/scrub.js.map +1 -1
- package/dist/core/verse/accounts.d.ts +9 -1
- package/dist/core/verse/accounts.js +52 -11
- package/dist/core/verse/accounts.js.map +1 -1
- package/dist/core/verse/apps-api.d.ts +12 -0
- package/dist/core/verse/apps-api.js +22 -4
- package/dist/core/verse/apps-api.js.map +1 -1
- package/dist/core/verse/apps.js +22 -12
- package/dist/core/verse/apps.js.map +1 -1
- package/dist/core/verse/local-models.js +3 -7
- package/dist/core/verse/local-models.js.map +1 -1
- package/dist/core/verse/model-display-name.d.ts +34 -0
- package/dist/core/verse/model-display-name.js +125 -0
- package/dist/core/verse/model-display-name.js.map +1 -0
- package/dist/core/verse/seats.d.ts +11 -2
- package/dist/core/verse/seats.js +42 -18
- package/dist/core/verse/seats.js.map +1 -1
- package/dist/core/verse/transient-events.d.ts +21 -0
- package/dist/core/verse/transient-events.js +12 -0
- package/dist/core/verse/transient-events.js.map +1 -0
- package/dist/core/verse/types.d.ts +6 -13
- package/dist/core/verse/types.js +5 -36
- package/dist/core/verse/types.js.map +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-DffwPklw.js +2 -0
- package/dist/core/web/public/next/assets/{ActionMenu-FxXeRbPx.js.map → ActionMenu-DffwPklw.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-CxzE6ekM.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-CxzE6ekM.js.map +1 -0
- package/dist/core/web/public/next/assets/App-DFlp-vdv.js +7 -0
- package/dist/core/web/public/next/assets/App-DFlp-vdv.js.map +1 -0
- package/dist/core/web/public/next/assets/AppsSection-Ct2O605-.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-Ct2O605-.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-o-GLl2Is.js +2 -0
- package/dist/core/web/public/next/assets/{AreaTrend-CDxrQU4b.js.map → AreaTrend-o-GLl2Is.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomyOffState-CXhXpsim.js +2 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-CXhXpsim.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-DmbE71vI.css +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-BTg7yVa1.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-DuQkHGD_.js.map → AutonomySection-BTg7yVa1.js.map} +1 -1
- package/dist/core/web/public/next/assets/BranchBar-BjPFtGsj.js +2 -0
- package/dist/core/web/public/next/assets/{BranchBar-CLsvOcyK.js.map → BranchBar-BjPFtGsj.js.map} +1 -1
- package/dist/core/web/public/next/assets/BudgetControl-ng6swoZp.js +2 -0
- package/dist/core/web/public/next/assets/{BudgetControl-TL3FeZ1D.js.map → BudgetControl-ng6swoZp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-HHXgoXGr.js → Button-OjVJSrFq.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-HHXgoXGr.js.map → Button-OjVJSrFq.js.map} +1 -1
- package/dist/core/web/public/next/assets/CapacityStrip-Bx4c3dxD.js +2 -0
- package/dist/core/web/public/next/assets/{CapacityStrip-qReu0RaF.js.map → CapacityStrip-Bx4c3dxD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useChartWidth-BW6SwYIK.css → ChartFrame-BVuBe6RP.css} +1 -1
- package/dist/core/web/public/next/assets/ChartFrame-B_w2Siqg.js +2 -0
- package/dist/core/web/public/next/assets/ChartFrame-B_w2Siqg.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-Bisj9R6E.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-Bisj9R6E.js.map +1 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-5Gf4iAok.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-5Gf4iAok.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandPalette-iTpk6I8r.js +2 -0
- package/dist/core/web/public/next/assets/CommandPalette-iTpk6I8r.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandSection-CvAVd1w4.css +1 -0
- package/dist/core/web/public/next/assets/CommandSection-D8ZihzvE.js +2 -0
- package/dist/core/web/public/next/assets/CommandSection-D8ZihzvE.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-_S9iE-cJ.js +2 -0
- package/dist/core/web/public/next/assets/{ConfirmDialog-DLrLKM0c.js.map → ConfirmDialog-_S9iE-cJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/DeleteChatDialog-KUYUygiA.js +2 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-KUYUygiA.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-BuIaG6HF.js +2 -0
- package/dist/core/web/public/next/assets/{Dialog-BS9Dxi3G.js.map → Dialog-BuIaG6HF.js.map} +1 -1
- package/dist/core/web/public/next/assets/DiffPane-De4IQt82.js +2 -0
- package/dist/core/web/public/next/assets/{DiffPane-TOmUf3b2.js.map → DiffPane-De4IQt82.js.map} +1 -1
- package/dist/core/web/public/next/assets/DiffViewer-B75t6Ile.js +2 -0
- package/dist/core/web/public/next/assets/{DiffViewer-BpH56302.js.map → DiffViewer-B75t6Ile.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-BPqyhtCP.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-BPqyhtCP.js.map +1 -0
- package/dist/core/web/public/next/assets/{EmptyState-BqR5YAmf.js → EmptyState-DXkT4vhW.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-BqR5YAmf.js.map → EmptyState-DXkT4vhW.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-dhvDTwAZ.js → Epistemic-CfqFe_aP.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-dhvDTwAZ.js.map → Epistemic-CfqFe_aP.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-B7f-XBiX.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-B7f-XBiX.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-pXYySwXQ.js +2 -0
- package/dist/core/web/public/next/assets/{Funnel-D2u7Wlzc.js.map → Funnel-pXYySwXQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/GearTray-gj6lT7ba.js +2 -0
- package/dist/core/web/public/next/assets/{GearTray-Cb2npoxM.js.map → GearTray-gj6lT7ba.js.map} +1 -1
- package/dist/core/web/public/next/assets/GrowthSection-D8e9m9Wy.js +2 -0
- package/dist/core/web/public/next/assets/{GrowthSection-C5aDPs8B.js.map → GrowthSection-D8e9m9Wy.js.map} +1 -1
- package/dist/core/web/public/next/assets/HandoffDialog-VfKxKhxF.js +2 -0
- package/dist/core/web/public/next/assets/{HandoffDialog-BF3AYg-X.js.map → HandoffDialog-VfKxKhxF.js.map} +1 -1
- package/dist/core/web/public/next/assets/Input-u1YR_Ogl.js +2 -0
- package/dist/core/web/public/next/assets/{Input-B5dmGLZx.js.map → Input-u1YR_Ogl.js.map} +1 -1
- package/dist/core/web/public/next/assets/LeaderCard-BDELBrnx.js +2 -0
- package/dist/core/web/public/next/assets/LeaderCard-BDELBrnx.js.map +1 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-NKLF2srR.js +2 -0
- package/dist/core/web/public/next/assets/{MatrixHeatmap-BgEUs2Eu.js.map → MatrixHeatmap-NKLF2srR.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-D1tDvlRa.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-DZkiOuoq.js.map → McpSection-D1tDvlRa.js.map} +1 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-DlfLEJxu.js +3 -0
- package/dist/core/web/public/next/assets/{MessageMarkdown-BauY8ZTY.js.map → MessageMarkdown-DlfLEJxu.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DLBNLfsn.js → MessageMarkdownRenderer-BYZzI115.js} +4 -4
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-DLBNLfsn.js.map → MessageMarkdownRenderer-BYZzI115.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-DNeocJnD.js → Meter-BSVhU43Q.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-DNeocJnD.js.map → Meter-BSVhU43Q.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-lqV2e_Sq.js +2 -0
- package/dist/core/web/public/next/assets/MindSection-lqV2e_Sq.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-CLGP72g6.js +2 -0
- package/dist/core/web/public/next/assets/{MutationTokenDialog-mxrw0Yvy.js.map → MutationTokenDialog-CLGP72g6.js.map} +1 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-D992XTOn.js +2 -0
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-CO-Balfp.js.map → NeedsYouDrawer-D992XTOn.js.map} +1 -1
- package/dist/core/web/public/next/assets/NeedsYouList-eBOlJr0b.js +2 -0
- package/dist/core/web/public/next/assets/{NeedsYouList-CzDZbzRD.js.map → NeedsYouList-eBOlJr0b.js.map} +1 -1
- package/dist/core/web/public/next/assets/NewChatDialog-DoYTH26M.js +3 -0
- package/dist/core/web/public/next/assets/NewChatDialog-DoYTH26M.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-D3yfITK1.js +2 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-D3yfITK1.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-HUNQGQuU.css +1 -0
- package/dist/core/web/public/next/assets/OnboardingGate-DrDEVBqw.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingGate-DrDEVBqw.js.map +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-ULN673zm.js +2 -0
- package/dist/core/web/public/next/assets/{PreviewPane-BS-CleCd.js.map → PreviewPane-ULN673zm.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ProviderLogo-C5mBg8i0.js → ProviderLogo-8WaUjTlN.js} +2 -2
- package/dist/core/web/public/next/assets/{ProviderLogo-C5mBg8i0.js.map → ProviderLogo-8WaUjTlN.js.map} +1 -1
- package/dist/core/web/public/next/assets/RailStatus-Ckw9nvYU.js +2 -0
- package/dist/core/web/public/next/assets/{RailStatus-cPRyOmrk.js.map → RailStatus-Ckw9nvYU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-CMwSCiz5.js → RefreshIndicator-DGubF4vR.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-CMwSCiz5.js.map → RefreshIndicator-DGubF4vR.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BFi1opsC.js → ResourcePoolConsoleApp-BahEaY4d.js} +4 -4
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-BFi1opsC.js.map → ResourcePoolConsoleApp-BahEaY4d.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-C2ZrA7la.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-C2ZrA7la.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-BC93fzwQ.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-BC93fzwQ.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-BCFJ2Uq8.css +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BvhHNpE_.js +2 -0
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-DYtwc2ja.js.map → RouteErrorBoundary-BvhHNpE_.js.map} +1 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-Dywfnw0C.js +2 -0
- package/dist/core/web/public/next/assets/{RunInCloudAction-BEGEEM8O.js.map → RunInCloudAction-Dywfnw0C.js.map} +1 -1
- package/dist/core/web/public/next/assets/SeatSelector-CH7hTgwy.js +3 -0
- package/dist/core/web/public/next/assets/{SeatSelector-CYHRR7Wp.js.map → SeatSelector-CH7hTgwy.js.map} +1 -1
- package/dist/core/web/public/next/assets/Segmented-Wynbg0F5.js +2 -0
- package/dist/core/web/public/next/assets/{Segmented-BE53BenI.js.map → Segmented-Wynbg0F5.js.map} +1 -1
- package/dist/core/web/public/next/assets/Select-DMyLCkId.js +2 -0
- package/dist/core/web/public/next/assets/{Select-BwSGkHCS.js.map → Select-DMyLCkId.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionGate-8RtQFWeZ.js +2 -0
- package/dist/core/web/public/next/assets/{SessionGate-e0dFJm9d.js.map → SessionGate-8RtQFWeZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionInsightChip-zBJbKv2L.js +2 -0
- package/dist/core/web/public/next/assets/{SessionInsightChip-CxlSyueJ.js.map → SessionInsightChip-zBJbKv2L.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionSearch-DfJIcxxM.js +2 -0
- package/dist/core/web/public/next/assets/{SessionSearch-_yp7S2TP.js.map → SessionSearch-DfJIcxxM.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-Da9RYyH5.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-Da9RYyH5.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-DhXyIDmq.js +2 -0
- package/dist/core/web/public/next/assets/{Sheet-DVP2Mgy6.js.map → Sheet-DhXyIDmq.js.map} +1 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-Bi5f-wUw.js +2 -0
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-BcIcoClX.js.map → ShortcutsOverlay-Bi5f-wUw.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-BuO3sViG.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-BuO3sViG.js.map +1 -0
- package/dist/core/web/public/next/assets/Slider-Bd9YFWEV.js +2 -0
- package/dist/core/web/public/next/assets/{Slider-BypUWjpH.js.map → Slider-Bd9YFWEV.js.map} +1 -1
- package/dist/core/web/public/next/assets/StatTile-DScTd3c-.js +2 -0
- package/dist/core/web/public/next/assets/StatTile-DScTd3c-.js.map +1 -0
- package/dist/core/web/public/next/assets/{StatusBadge-HCZp416_.js → StatusBadge-DQ1UtQAJ.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-HCZp416_.js.map → StatusBadge-DQ1UtQAJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/StepBand-BB3IJxhr.js +2 -0
- package/dist/core/web/public/next/assets/{StepBand-Duz1PUes.js.map → StepBand-BB3IJxhr.js.map} +1 -1
- package/dist/core/web/public/next/assets/Surface-DWMtQe3Q.js +2 -0
- package/dist/core/web/public/next/assets/Surface-DWMtQe3Q.js.map +1 -0
- package/dist/core/web/public/next/assets/Surface-e1z6GdZt.css +1 -0
- package/dist/core/web/public/next/assets/Swimlane-DcENqtdp.js +2 -0
- package/dist/core/web/public/next/assets/{Swimlane-DGcIcnNA.js.map → Swimlane-DcENqtdp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-iveI-8NY.js → Switch-CenChEYf.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-iveI-8NY.js.map → Switch-CenChEYf.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-DH15CUJp.js → Tag-D4k5E3u0.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-DH15CUJp.js.map → Tag-D4k5E3u0.js.map} +1 -1
- package/dist/core/web/public/next/assets/TerminalPane-DCQTukcE.js +7 -0
- package/dist/core/web/public/next/assets/TerminalPane-DCQTukcE.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-DsuWT0pi.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-C8yQ0AaR.js.map → UniverseConsoleApp-DsuWT0pi.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-_nPURPqe.js → UniverseView-DyI5ApsA.js} +3 -3
- package/dist/core/web/public/next/assets/{UniverseView-_nPURPqe.js.map → UniverseView-DyI5ApsA.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-Imr28nwK.js +3 -0
- package/dist/core/web/public/next/assets/UsageSection-Imr28nwK.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DeuBEvAO.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DeuBEvAO.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-CpxBO98E.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-CpxBO98E.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-BmIf9avl.css +1 -0
- package/dist/core/web/public/next/assets/actions-DE8NoWV_.js +2 -0
- package/dist/core/web/public/next/assets/actions-DE8NoWV_.js.map +1 -0
- package/dist/core/web/public/next/assets/apps-model-CFGCUu9p.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-CFGCUu9p.js.map +1 -0
- package/dist/core/web/public/next/assets/authority-model-CmnfJzmM.js +2 -0
- package/dist/core/web/public/next/assets/authority-model-CmnfJzmM.js.map +1 -0
- package/dist/core/web/public/next/assets/binding-left-DZpq5sLf.js +2 -0
- package/dist/core/web/public/next/assets/binding-left-DZpq5sLf.js.map +1 -0
- package/dist/core/web/public/next/assets/{budget-queries-V3wcJVK_.js → budget-queries-DjrPRFwl.js} +2 -2
- package/dist/core/web/public/next/assets/{budget-queries-V3wcJVK_.js.map → budget-queries-DjrPRFwl.js.map} +1 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-C7cdQnuK.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-C7cdQnuK.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-DUD_jprE.js +2 -0
- package/dist/core/web/public/next/assets/charts-DUD_jprE.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-DhKTrQLw.css +1 -0
- package/dist/core/web/public/next/assets/clipboard-DkZdqlxf.js +2 -0
- package/dist/core/web/public/next/assets/clipboard-DkZdqlxf.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-D-HXms6q.css +1 -0
- package/dist/core/web/public/next/assets/cloud-model-DoxBMDvx.js +2 -0
- package/dist/core/web/public/next/assets/cloud-model-DoxBMDvx.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-CTGvO-k-.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-CTGvO-k-.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud.module-DOP-N4Ch.js +2 -0
- package/dist/core/web/public/next/assets/cloud.module-DOP-N4Ch.js.map +1 -0
- package/dist/core/web/public/next/assets/command-catalog-CmrHNFzh.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-CmrHNFzh.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-2Owp2jYF.js +3 -0
- package/dist/core/web/public/next/assets/context-model-2Owp2jYF.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-9xywbXxX.js +2 -0
- package/dist/core/web/public/next/assets/context-model-9xywbXxX.js.map +1 -0
- package/dist/core/web/public/next/assets/{context-queries-CrPcHWTz.js → context-queries-wvcRnV-I.js} +2 -2
- package/dist/core/web/public/next/assets/{context-queries-CrPcHWTz.js.map → context-queries-wvcRnV-I.js.map} +1 -1
- package/dist/core/web/public/next/assets/{control-queries-CmgBgKV7.js → control-queries-DB6Kh7UN.js} +2 -2
- package/dist/core/web/public/next/assets/{control-queries-CmgBgKV7.js.map → control-queries-DB6Kh7UN.js.map} +1 -1
- package/dist/core/web/public/next/assets/copy-setup-CJQhFl-4.js +2 -0
- package/dist/core/web/public/next/assets/copy-setup-CJQhFl-4.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-BBUGl4tE.js +2 -0
- package/dist/core/web/public/next/assets/{dock-icons-CUh8dOxJ.js.map → dock-icons-BBUGl4tE.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-model-BRfRWkZl.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-BRfRWkZl.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-queries-tU6UEXN2.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-tU6UEXN2.js.map +1 -0
- package/dist/core/web/public/next/assets/{focus-trap-HtcoXeEq.js → focus-trap-BGOceFvj.js} +2 -2
- package/dist/core/web/public/next/assets/{focus-trap-HtcoXeEq.js.map → focus-trap-BGOceFvj.js.map} +1 -1
- package/dist/core/web/public/next/assets/format-DEAaVF6X.js +2 -0
- package/dist/core/web/public/next/assets/format-DEAaVF6X.js.map +1 -0
- package/dist/core/web/public/next/assets/{git-model-bk_RXh3y.js → git-model-53iRLInY.js} +2 -2
- package/dist/core/web/public/next/assets/{git-model-bk_RXh3y.js.map → git-model-53iRLInY.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-CXHHMz9o.js +2 -0
- package/dist/core/web/public/next/assets/{global-oEl9Qj8u.js.map → global-CXHHMz9o.js.map} +1 -1
- package/dist/core/web/public/next/assets/{guarded-runners-LHLXmXIk.js → guarded-runners-B8zFVBVZ.js} +2 -2
- package/dist/core/web/public/next/assets/{guarded-runners-LHLXmXIk.js.map → guarded-runners-B8zFVBVZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/icons-D4s-jlxX.js +2 -0
- package/dist/core/web/public/next/assets/icons-D4s-jlxX.js.map +1 -0
- package/dist/core/web/public/next/assets/{index-BVxOlseC.js → index-BG177cPN.js} +3 -3
- package/dist/core/web/public/next/assets/{index-BVxOlseC.js.map → index-BG177cPN.js.map} +1 -1
- package/dist/core/web/public/next/assets/live-model-CEf01wrW.js +2 -0
- package/dist/core/web/public/next/assets/live-model-CEf01wrW.js.map +1 -0
- package/dist/core/web/public/next/assets/local-model-C9xNi9fN.js +2 -0
- package/dist/core/web/public/next/assets/local-model-C9xNi9fN.js.map +1 -0
- package/dist/core/web/public/next/assets/mind.module-D_xk6HIQ.js +2 -0
- package/dist/core/web/public/next/assets/{mind.module-gTGAuJt1.js.map → mind.module-D_xk6HIQ.js.map} +1 -1
- package/dist/core/web/public/next/assets/mutations-CbTSofVH.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-C5S7okTW.js.map → mutations-CbTSofVH.js.map} +1 -1
- package/dist/core/web/public/next/assets/nav-CmZcbPFJ.js +2 -0
- package/dist/core/web/public/next/assets/{nav-NVtnuG7A.js.map → nav-CmZcbPFJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{overnight-queries-DGm3qL1b.js → overnight-queries-CR0b_j-V.js} +2 -2
- package/dist/core/web/public/next/assets/{overnight-queries-DGm3qL1b.js.map → overnight-queries-CR0b_j-V.js.map} +1 -1
- package/dist/core/web/public/next/assets/primitives-DNI-uJBd.js +1 -0
- package/dist/core/web/public/next/assets/{queries-CYisSAAB.js → queries-rvRsAGW2.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-CYisSAAB.js.map → queries-rvRsAGW2.js.map} +1 -1
- package/dist/core/web/public/next/assets/reasoning-pref-DMPQkujg.js +2 -0
- package/dist/core/web/public/next/assets/{reasoning-pref-BUcFF_5G.js.map → reasoning-pref-DMPQkujg.js.map} +1 -1
- package/dist/core/web/public/next/assets/{reveal-anchor-D-tV8xau.js → reveal-anchor-BKk2wZZZ.js} +2 -2
- package/dist/core/web/public/next/assets/{reveal-anchor-D-tV8xau.js.map → reveal-anchor-BKk2wZZZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/seat-subscription-CLn2ReSZ.js +2 -0
- package/dist/core/web/public/next/assets/{seat-subscription-B-f9ViU2.js.map → seat-subscription-CLn2ReSZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-DQ-FyBHW.js → sidebar-model-CjQLvdag.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-DQ-FyBHW.js.map → sidebar-model-CjQLvdag.js.map} +1 -1
- package/dist/core/web/public/next/assets/slots-DRxNosZg.js +3 -0
- package/dist/core/web/public/next/assets/{slots-BhP8b8tf.js.map → slots-DRxNosZg.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-data-DshUC_TU.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-DshUC_TU.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-DO8r4ttQ.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-DO8r4ttQ.js.map +1 -0
- package/dist/core/web/public/next/assets/{tasks-model-BKDNqmmt.js → tasks-model-BKPFZAmZ.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-BKDNqmmt.js.map → tasks-model-BKPFZAmZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-D2xe-aM1.js → terminal-icons-DoeQkP3y.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-D2xe-aM1.js.map → terminal-icons-DoeQkP3y.js.map} +1 -1
- package/dist/core/web/public/next/assets/transient-events-nTLhMBND.js +2 -0
- package/dist/core/web/public/next/assets/transient-events-nTLhMBND.js.map +1 -0
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -1
- package/dist/core/web/public/next/assets/{usage-queries-BZuAANlI.js → usage-queries-MnUeYzwp.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-BZuAANlI.js.map → usage-queries-MnUeYzwp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-Cf4MeNBa.js → use-guarded-action-P12MfNwU.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-Cf4MeNBa.js.map → use-guarded-action-P12MfNwU.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-D9yi49my.js → use-ticker-DIvAZ4Ey.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-D9yi49my.js.map → use-ticker-DIvAZ4Ey.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-token-gate-DqrSXdX6.js → use-token-gate-DfEja7Wr.js} +2 -2
- package/dist/core/web/public/next/assets/{use-token-gate-DqrSXdX6.js.map → use-token-gate-DfEja7Wr.js.map} +1 -1
- package/dist/core/web/public/next/assets/useOnboarding-CkOHadqC.js +2 -0
- package/dist/core/web/public/next/assets/useOnboarding-CkOHadqC.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-BDlbDlIU.js +2 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-BDlbDlIU.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BGtA55k2.js +2 -0
- package/dist/core/web/public/next/assets/{useVerseTranscript-CDYrrWOO.js.map → useVerseTranscript-BGtA55k2.js.map} +1 -1
- package/dist/core/web/public/next/assets/verse-icons-wOet9JZy.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-wOet9JZy.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-CSzzdyu2.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-CSzzdyu2.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-store-DNVRuiJL.js +2 -0
- package/dist/core/web/public/next/assets/verse-store-DNVRuiJL.js.map +1 -0
- package/dist/core/web/public/next/assets/warmup-CecO_Nk0.js +3 -0
- package/dist/core/web/public/next/assets/{warmup-HG5vYbsN.js.map → warmup-CecO_Nk0.js.map} +1 -1
- package/dist/core/web/public/next/assets/why-seat-model-D68ZA7G8.js +2 -0
- package/dist/core/web/public/next/assets/why-seat-model-D68ZA7G8.js.map +1 -0
- package/dist/core/web/public/next/assets/{workspace-model-CbhdPhei.js → workspace-model-BdIVybKr.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-CbhdPhei.js.map → workspace-model-BdIVybKr.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/docs/README.md +2 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-FxXeRbPx.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-D_eS4472.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-D_eS4472.js.map +0 -1
- package/dist/core/web/public/next/assets/App-Cj4zKbG3.js +0 -7
- package/dist/core/web/public/next/assets/App-Cj4zKbG3.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-Ddu_RCQE.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-Ddu_RCQE.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-CDxrQU4b.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-DuQkHGD_.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-CLsvOcyK.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-TL3FeZ1D.js +0 -2
- package/dist/core/web/public/next/assets/BurnDown-sFXkUGdB.js +0 -2
- package/dist/core/web/public/next/assets/BurnDown-sFXkUGdB.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-qReu0RaF.js +0 -2
- package/dist/core/web/public/next/assets/ChatSection-DZuZfTaC.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-DZuZfTaC.js.map +0 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJbiT1wi.js +0 -2
- package/dist/core/web/public/next/assets/CloudBudgetForm-DJbiT1wi.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-zYLFZRnj.js +0 -2
- package/dist/core/web/public/next/assets/CommandPalette-zYLFZRnj.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-rIeMK5Ch.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-rIeMK5Ch.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-DLrLKM0c.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-BS9Dxi3G.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-TOmUf3b2.js +0 -2
- package/dist/core/web/public/next/assets/DiffViewer-BpH56302.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-DzkzR-HD.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-DzkzR-HD.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-ViAb549H.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-ViAb549H.js.map +0 -1
- package/dist/core/web/public/next/assets/Funnel-D2u7Wlzc.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-Cb2npoxM.js +0 -2
- package/dist/core/web/public/next/assets/GrowthSection-C5aDPs8B.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-BF3AYg-X.js +0 -2
- package/dist/core/web/public/next/assets/Input-B5dmGLZx.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-DZrmjDbI.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-DZrmjDbI.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-BgEUs2Eu.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-DZkiOuoq.js +0 -2
- package/dist/core/web/public/next/assets/MessageMarkdown-BauY8ZTY.js +0 -3
- package/dist/core/web/public/next/assets/MindSection-BvJXFjyX.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-BvJXFjyX.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-mxrw0Yvy.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouDrawer-CO-Balfp.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouList-CzDZbzRD.js +0 -2
- package/dist/core/web/public/next/assets/NewChatDialog-B8eJjlFf.js +0 -3
- package/dist/core/web/public/next/assets/NewChatDialog-B8eJjlFf.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-Cij6KWat.js +0 -2
- package/dist/core/web/public/next/assets/OnboardingFlow-Cij6KWat.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-DSpPj8UE.css +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-BS-CleCd.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-cPRyOmrk.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesChrome-BJCauW_t.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-BJCauW_t.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-BDecg6nO.js +0 -2
- package/dist/core/web/public/next/assets/ResourcesDrawer-BDecg6nO.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-DYtwc2ja.js +0 -2
- package/dist/core/web/public/next/assets/RunInCloudAction-BEGEEM8O.js +0 -2
- package/dist/core/web/public/next/assets/SeatSelector-CYHRR7Wp.js +0 -3
- package/dist/core/web/public/next/assets/Segmented-BE53BenI.js +0 -2
- package/dist/core/web/public/next/assets/Select-BwSGkHCS.js +0 -2
- package/dist/core/web/public/next/assets/SessionGate-e0dFJm9d.js +0 -2
- package/dist/core/web/public/next/assets/SessionInsightChip-CxlSyueJ.js +0 -2
- package/dist/core/web/public/next/assets/SessionSearch-_yp7S2TP.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-wGnpWeGW.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-wGnpWeGW.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-DVP2Mgy6.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-BcIcoClX.js +0 -2
- package/dist/core/web/public/next/assets/Sidebar-DjQOqPbm.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-DjQOqPbm.js.map +0 -1
- package/dist/core/web/public/next/assets/Slider-BypUWjpH.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-Duz1PUes.js +0 -2
- package/dist/core/web/public/next/assets/Surface-B75lVfzm.js +0 -2
- package/dist/core/web/public/next/assets/Surface-B75lVfzm.js.map +0 -1
- package/dist/core/web/public/next/assets/Surface-DMca0gAe.css +0 -1
- package/dist/core/web/public/next/assets/Swimlane-DGcIcnNA.js +0 -2
- package/dist/core/web/public/next/assets/TerminalPane-MQT-veKZ.js +0 -7
- package/dist/core/web/public/next/assets/TerminalPane-MQT-veKZ.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-C8yQ0AaR.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-CqxRGJ40.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-CqxRGJ40.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-DTjDpGCd.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-DTjDpGCd.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-DfcFGzME.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-DfcFGzME.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-Ddfg2iLl.css +0 -1
- package/dist/core/web/public/next/assets/actions-tWevL9HV.js +0 -2
- package/dist/core/web/public/next/assets/actions-tWevL9HV.js.map +0 -1
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +0 -2
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-BDbmQ3e3.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-BDbmQ3e3.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-CfAjuKMv.js +0 -2
- package/dist/core/web/public/next/assets/charts-CfAjuKMv.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-uSX6xVYN.css +0 -1
- package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +0 -1
- package/dist/core/web/public/next/assets/cloud-queries-Br_r0UAz.js +0 -2
- package/dist/core/web/public/next/assets/cloud-queries-Br_r0UAz.js.map +0 -1
- package/dist/core/web/public/next/assets/cloud.module-ascz58c3.js +0 -2
- package/dist/core/web/public/next/assets/cloud.module-ascz58c3.js.map +0 -1
- package/dist/core/web/public/next/assets/command-bus-xYZoK9nQ.js +0 -2
- package/dist/core/web/public/next/assets/command-bus-xYZoK9nQ.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js.map +0 -1
- package/dist/core/web/public/next/assets/composer-keys-su0g1h9o.js +0 -2
- package/dist/core/web/public/next/assets/composer-keys-su0g1h9o.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-BC-HOmPo.js +0 -2
- package/dist/core/web/public/next/assets/context-model-BC-HOmPo.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-CIBmSugV.js +0 -2
- package/dist/core/web/public/next/assets/context-model-CIBmSugV.js.map +0 -1
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js +0 -2
- package/dist/core/web/public/next/assets/dark-since-DOMvtB_G.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-CUh8dOxJ.js +0 -2
- package/dist/core/web/public/next/assets/dock-store-B2vlxqPu.js +0 -2
- package/dist/core/web/public/next/assets/dock-store-B2vlxqPu.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-model-7i-FbzKI.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-7i-FbzKI.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-queries-DzGoqq8X.js +0 -2
- package/dist/core/web/public/next/assets/fleet-queries-DzGoqq8X.js.map +0 -1
- package/dist/core/web/public/next/assets/format-BkWdOQDL.js +0 -2
- package/dist/core/web/public/next/assets/format-BkWdOQDL.js.map +0 -1
- package/dist/core/web/public/next/assets/global-oEl9Qj8u.js +0 -2
- package/dist/core/web/public/next/assets/guarded-action-OzqcPjmh.js +0 -3
- package/dist/core/web/public/next/assets/guarded-action-OzqcPjmh.js.map +0 -1
- package/dist/core/web/public/next/assets/icon-base-DvM1eI5V.js +0 -2
- package/dist/core/web/public/next/assets/icon-base-DvM1eI5V.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-DEQa2rTx.js +0 -2
- package/dist/core/web/public/next/assets/icons-DEQa2rTx.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-bmsJgnYD.js +0 -2
- package/dist/core/web/public/next/assets/live-model-bmsJgnYD.js.map +0 -1
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +0 -2
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +0 -1
- package/dist/core/web/public/next/assets/mind.module-gTGAuJt1.js +0 -2
- package/dist/core/web/public/next/assets/mutations-C5S7okTW.js +0 -2
- package/dist/core/web/public/next/assets/nav-NVtnuG7A.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-Cwf9rsnZ.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-Cwf9rsnZ.js.map +0 -1
- package/dist/core/web/public/next/assets/primitives-DyCKYSBG.js +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-BUcFF_5G.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-B-f9ViU2.js +0 -2
- package/dist/core/web/public/next/assets/section-visibility-Yctxu-if.js +0 -2
- package/dist/core/web/public/next/assets/section-visibility-Yctxu-if.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-BhP8b8tf.js +0 -3
- package/dist/core/web/public/next/assets/surface-data-DTI7LjvH.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-DTI7LjvH.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-CdUEBFrl.js.map +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-owwodNVz.js +0 -2
- package/dist/core/web/public/next/assets/useChartWidth-owwodNVz.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatsRefresh-DgFy-Ph4.js +0 -2
- package/dist/core/web/public/next/assets/useSeatsRefresh-DgFy-Ph4.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-CDYrrWOO.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-F9VwX07_.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-F9VwX07_.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-DyCwZF-M.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-DyCwZF-M.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js +0 -3
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-62DxpVHS.js +0 -3
- package/dist/core/web/public/next/assets/verse-ui-store-62DxpVHS.js.map +0 -1
- package/dist/core/web/public/next/assets/viewport-nTubFCwf.js +0 -2
- package/dist/core/web/public/next/assets/viewport-nTubFCwf.js.map +0 -1
- package/dist/core/web/public/next/assets/warmup-HG5vYbsN.js +0 -3
- package/dist/core/web/public/next/assets/workbench-types-DzN-5trg.js +0 -2
- package/dist/core/web/public/next/assets/workbench-types-DzN-5trg.js.map +0 -1
- /package/dist/core/web/public/next/assets/{BurnDown-BuLMsJMx.css → StatTile-BuLMsJMx.css} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icons-DEQa2rTx.js","names":[],"sources":["../../../../../../src/web-ui/components/primitives/icons.tsx"],"sourcesContent":["/**\n * components/primitives/icons.tsx — the console's icon set.\n *\n * Hand-drawn inline SVG rather than an icon package: the design language\n * fixes one geometry (16px box, 1.5px stroke, round caps/joins, currentColor)\n * and the app ships zero runtime dependencies for presentation. Adding a\n * library here would import hundreds of icons drawn to someone else's stroke\n * weight for the six we actually need per section.\n *\n * Every icon is decorative by default (`aria-hidden`), because it sits next\n * to a label or inside a control that already has an accessible name. Pass\n * `title` ONLY when the icon is the sole carrier of meaning; it then becomes\n * `role=\"img\"` with an accessible name.\n */\nimport { Icon, type IconProps } from './icon-base.js';\n\n// The four glyphs the Verse rail draws at first paint live in icon-base.tsx\n// so the rail does not pull this whole set into the chat first-paint\n// critical JS; they are re-exported so this stays the one import site.\nexport { IconChat, IconGauge, IconInbox, IconSliders, type IconProps } from './icon-base.js';\n\n/** CPU — autonomy / the daemon loop. */\nexport const IconCpu = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"4.5\" y=\"4.5\" width=\"7\" height=\"7\" rx=\"1.5\" />\n <path d=\"M6.5 1.5v3M9.5 1.5v3M6.5 11.5v3M9.5 11.5v3M1.5 6.5h3M1.5 9.5h3M11.5 6.5h3M11.5 9.5h3\" />\n </Icon>\n);\n\nexport const IconCheck = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"m3 8.5 3.2 3.2L13 5\" />\n </Icon>\n);\n\nexport const IconCheckCircle = (p: IconProps) => (\n <Icon {...p}>\n <circle cx=\"8\" cy=\"8\" r=\"6\" />\n <path d=\"m5.2 8.2 1.9 1.9 3.7-4\" />\n </Icon>\n);\n\nexport const IconX = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"m4 4 8 8M12 4l-8 8\" />\n </Icon>\n);\n\nexport const IconPlay = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M5.5 3.4 12 8l-6.5 4.6V3.4Z\" />\n </Icon>\n);\n\nexport const IconStop = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.2\" />\n </Icon>\n);\n\nexport const IconPause = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M6 3.5v9M10 3.5v9\" />\n </Icon>\n);\n\n/** Alert — a warning that is paired with text, never used alone for state. */\nexport const IconAlert = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M8 2.6 14.2 13H1.8L8 2.6Z\" />\n <path d=\"M8 6.6v3\" />\n <circle cx=\"8\" cy=\"11.3\" r=\"0.75\" fill=\"currentColor\" stroke=\"none\" />\n </Icon>\n);\n\nexport const IconInfo = (p: IconProps) => (\n <Icon {...p}>\n <circle cx=\"8\" cy=\"8\" r=\"6\" />\n <path d=\"M8 7.4v3.4\" />\n <circle cx=\"8\" cy=\"5.4\" r=\"0.75\" fill=\"currentColor\" stroke=\"none\" />\n </Icon>\n);\n\nexport const IconPlus = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M8 3.2v9.6M3.2 8h9.6\" />\n </Icon>\n);\n\nexport const IconSearch = (p: IconProps) => (\n <Icon {...p}>\n <circle cx=\"7.2\" cy=\"7.2\" r=\"4.2\" />\n <path d=\"m10.4 10.4 3.1 3.1\" />\n </Icon>\n);\n\nexport const IconCopy = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8\" rx=\"1.5\" />\n <path d=\"M10.5 3.5a1.5 1.5 0 0 0-1.5-1.5H4A1.5 1.5 0 0 0 2.5 3.5v5A1.5 1.5 0 0 0 4 10\" />\n </Icon>\n);\n\nexport const IconChevronDown = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"m4 6.2 4 4 4-4\" />\n </Icon>\n);\n\nexport const IconChevronUp = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"m4 9.8 4-4 4 4\" />\n </Icon>\n);\n\nexport const IconChevronRight = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"m6.2 4 4 4-4 4\" />\n </Icon>\n);\n\nexport const IconChevronLeft = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"m9.8 4-4 4 4 4\" />\n </Icon>\n);\n\nexport const IconMic = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"6\" y=\"1.8\" width=\"4\" height=\"7.4\" rx=\"2\" />\n <path d=\"M3.6 7.6a4.4 4.4 0 0 0 8.8 0M8 11.9v2.3\" />\n </Icon>\n);\n\nexport const IconSend = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M14 2 7.2 8.8M14 2l-4.4 12-2.4-5.2L2 6.4 14 2Z\" />\n </Icon>\n);\n\nexport const IconTrash = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M2.8 4.2h10.4M6.4 4.2V2.8h3.2v1.4M4.2 4.2l.6 8.2a1.3 1.3 0 0 0 1.3 1.2h3.8a1.3 1.3 0 0 0 1.3-1.2l.6-8.2\" />\n </Icon>\n);\n\nexport const IconExternalLink = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M9.5 2.5H13.5v4M13.5 2.5 7.8 8.2\" />\n <path d=\"M12.5 9.6v2.9a1.5 1.5 0 0 1-1.5 1.5H3.5A1.5 1.5 0 0 1 2 12.5V5a1.5 1.5 0 0 1 1.5-1.5h2.9\" />\n </Icon>\n);\n\nexport const IconFolder = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M2 4.6A1.6 1.6 0 0 1 3.6 3h2.3l1.4 1.8h5.1A1.6 1.6 0 0 1 14 6.4v5A1.6 1.6 0 0 1 12.4 13H3.6A1.6 1.6 0 0 1 2 11.4V4.6Z\" />\n </Icon>\n);\n\nexport const IconRefresh = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M13.2 7.2a5.2 5.2 0 1 0-.7 3.5\" />\n <path d=\"M13.5 3.4v3.9h-3.9\" />\n </Icon>\n);\n\nexport const IconLock = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"3\" y=\"7\" width=\"10\" height=\"6.5\" rx=\"1.5\" />\n <path d=\"M5.5 7V5.2a2.5 2.5 0 0 1 5 0V7\" />\n </Icon>\n);\n\nexport const IconKey = (p: IconProps) => (\n <Icon {...p}>\n <circle cx=\"5.4\" cy=\"10.6\" r=\"2.6\" />\n <path d=\"m7.4 8.7 5.3-5.3M10.6 5.5l1.4 1.4M12.2 3.9l1.4 1.4\" />\n </Icon>\n);\n\nexport const IconSun = (p: IconProps) => (\n <Icon {...p}>\n <circle cx=\"8\" cy=\"8\" r=\"3.1\" />\n <path d=\"M8 1.5v1.6M8 12.9v1.6M1.5 8h1.6M12.9 8h1.6M3.4 3.4l1.1 1.1M11.5 11.5l1.1 1.1M12.6 3.4l-1.1 1.1M4.5 11.5l-1.1 1.1\" />\n </Icon>\n);\n\nexport const IconMoon = (p: IconProps) => (\n <Icon {...p}>\n <path d=\"M13 9.8A5.6 5.6 0 0 1 6.2 3a5.6 5.6 0 1 0 6.8 6.8Z\" />\n </Icon>\n);\n\nexport const IconMonitor = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"1.8\" y=\"2.8\" width=\"12.4\" height=\"8.4\" rx=\"1.5\" />\n <path d=\"M5.8 14h4.4M8 11.2V14\" />\n </Icon>\n);\n\nexport const IconDrag = (p: IconProps) => (\n <Icon {...p}>\n <circle cx=\"6\" cy=\"4\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"10\" cy=\"4\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"6\" cy=\"8\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"10\" cy=\"8\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"6\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"10\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n </Icon>\n);\n\nexport const IconKeyboard = (p: IconProps) => (\n <Icon {...p}>\n <rect x=\"1.5\" y=\"4\" width=\"13\" height=\"8\" rx=\"1.5\" />\n <path d=\"M4.2 6.6h.01M6.8 6.6h.01M9.4 6.6h.01M12 6.6h.01M4.2 9.4h.01M12 9.4h.01M6.4 9.4h3.2\" />\n </Icon>\n);\n"],"mappings":"yFAsBa,EAAW,IACtB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IAAI,GAAG,KAAO,CAAA,GACrD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,sFAAwF,CAAA,CAC5F,IAGK,EAAa,IACxB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,qBAAuB,CAAA,CAC3B,CAAA,EAGK,EAAmB,IAC9B,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,GAAG,IAAI,GAAG,IAAI,EAAE,GAAK,CAAA,GAC7B,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,wBAA0B,CAAA,CAC9B,IAGK,EAAS,IACpB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,oBAAsB,CAAA,CAC1B,CAAA,EAGK,EAAY,IACvB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,6BAA+B,CAAA,CACnC,CAAA,EAGK,EAAY,IACvB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,IAAI,EAAE,IAAI,MAAM,IAAI,OAAO,IAAI,GAAG,KAAO,CAAA,CAC7C,CAAA,EAUK,EAAa,IACxB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,2BAA6B,CAAA,GACrC,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,UAAY,CAAA,GACpB,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,GAAG,IAAI,GAAG,OAAO,EAAE,OAAO,KAAK,eAAe,OAAO,MAAQ,CAAA,CACjE,IAGK,EAAY,IACvB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,GAAG,IAAI,GAAG,IAAI,EAAE,GAAK,CAAA,GAC7B,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,YAAc,CAAA,GACtB,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,GAAG,IAAI,GAAG,MAAM,EAAE,OAAO,KAAK,eAAe,OAAO,MAAQ,CAAA,CAChE,IAGK,EAAY,IACvB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,sBAAwB,CAAA,CAC5B,CAAA,EAGK,EAAc,IACzB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,GAAG,MAAM,GAAG,MAAM,EAAE,KAAO,CAAA,GACnC,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,oBAAsB,CAAA,CAC1B,IAGK,EAAY,IACvB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,IAAI,OAAO,IAAI,GAAG,KAAO,CAAA,GACrD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,8EAAgF,CAAA,CACpF,IAGK,EAAmB,IAC9B,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,gBAAkB,CAAA,CACtB,CAAA,EASK,EAAoB,IAC/B,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,gBAAkB,CAAA,CACtB,CAAA,EAgBK,EAAY,IACvB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,gDAAkD,CAAA,CACtD,CAAA,EASK,EAAoB,IAC/B,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,kCAAoC,CAAA,GAC5C,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,0FAA4F,CAAA,CAChG,IASK,EAAe,IAC1B,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,gCAAkC,CAAA,GAC1C,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,oBAAsB,CAAA,CAC1B,IAGK,EAAY,IACvB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,IAAI,EAAE,IAAI,MAAM,KAAK,OAAO,MAAM,GAAG,KAAO,CAAA,GACpD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,gCAAkC,CAAA,CACtC,IAUK,EAAW,IACtB,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,GAAG,IAAI,GAAG,IAAI,EAAE,KAAO,CAAA,GAC/B,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,kHAAoH,CAAA,CACxH,IAGK,EAAY,IACvB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EACR,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,oDAAsD,CAAA,CAC1D,CAAA,EAGK,EAAe,IAC1B,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,OAAO,OAAO,MAAM,GAAG,KAAO,CAAA,GAC1D,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,uBAAyB,CAAA,CAC7B,IAcK,EAAgB,IAC3B,EAAA,EAAA,KAAA,CAAC,EAAD,CAAM,GAAI,EAAV,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,MAAM,EAAE,IAAI,MAAM,KAAK,OAAO,IAAI,GAAG,KAAO,CAAA,GACpD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,oFAAsF,CAAA,CAC1F"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as e,o as t}from"./colors-BZ3a9wFf.js";import{y as n}from"./format-BkWdOQDL.js";var r=new Set([`headroom`,`switched-off`,`signed-out`,`unreachable`,`spent`,`reserve`,`session-ceiling`,`unknown-usage`,`spend-cap`,`model-window`,`context`,`grant`,`lane`,`demoted`,`other`]);function i(e){let t=e.trim().replace(/[\s;,:]+$/,``);return t?/[.!?…]$/.test(t)?t:`${t}.`:``}function a(e){return e.map(i).filter(Boolean).join(` `)}function o(e){return e.length<=1?e[0]??``:`${e.slice(0,-1).join(`, `)} and ${e[e.length-1]}`}var s=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/,c=/\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:?\d{2})?(?![\w:])/g;function l(e,t=Date.now()){return e.replace(c,e=>n(e,t)??e)}function u(e){return typeof e==`string`&&s.test(e)&&Number.isFinite(Date.parse(e))}function d(e){return/^autonomy is switched off/i.test(e)?`switched-off`:/^signed out/i.test(e)?`signed-out`:/not reachable/i.test(e)?`unreachable`:/limits that model only/.test(e)?`model-window`:/ is spent — /.test(e)?`spent`:/is kept for you, so autonomy stops at/.test(e)?`reserve`:/used; autonomy stops at .* to protect your live session/.test(e)?`session-ceiling`:/unknown usage is not headroom|too stale to spend against|too uncertain to spend against/.test(e)?`unknown-usage`:/daily cap/.test(e)?`spend-cap`:/tokens of context/.test(e)?`context`:/is demoted/.test(e)?`demoted`:/\bgrant\b/i.test(e)?`grant`:/\blanes?\b|\bslots?\b|producer slice is held/i.test(e)?`lane`:`other`}var f=[[/(?<![\w-])grok-cli(?![\w-])/g,`Grok`],[/(?<![\w-])claude-cli(?![\w-])/g,`Claude`],[/(?<![\w-])codex(?![\w-])/g,`Codex`]];function p(e){let t=e.trim();t=t.replace(/^Codex lanes stay off until the Leader enables them\b/,`Codex stays off until the Leader turns it on`),t=t.replace(/\s*\(an? class-([A-Za-z])\s+action\)/g,(e,t)=>/^[ab]$/i.test(t)?` (you can veto it)`:``),t=t.replace(/\b(\d+)((?:\s+[A-Za-z-]+)*?)\s+([A-Za-z]+)\(s\)/g,(e,t,n,r)=>`${t}${n} ${r}${Number(t)===1?``:`s`}`),t=t.replace(/\b([A-Za-z]+)\(s\)/g,`$1s`);for(let[e,n]of f)t=t.replace(e,n);return t}function m(e){let t=e.trim(),n=/^([\s\S]*?) \(resets ([\s\S]+)\)\.?$/.exec(t),r=n?`${n[1]}.`:t,i=n?n[2].trim():null,a=u(i)?i:null,o=/ is demoted until (\S+): /.exec(r);return o&&u(o[1])&&(a=o[1],r=r.replace(` until ${o[1]}:`,`:`)),{kind:d(r),text:r,resetsAt:a,resetDescription:i!==null&&!u(i)?i:null}}function h(e){return Array.isArray(e.details)&&(e.details.length>0||e.reasons.length===0)?e.details.map(e=>r.has(e.kind)?e:{...e,kind:`other`}):e.reasons.map(m)}function g(e){return a(h(e).filter(e=>e.kind!==`headroom`).map(e=>e.kind===`lane`?p(e.text):e.text))}var _={"switched-off":`you switch autonomy on for this seat`,"signed-out":`you reconnect this account`,unreachable:`it is reachable again`,"unknown-usage":`a fresh usage reading arrives`,"spend-cap":`its daily spend cap resets`,grant:`the standing grant allows it`,lane:`its lane has a free slot`},v=new Set([`spent`,`reserve`,`session-ceiling`,`demoted`]);function y(e){return e.trim().replace(/^resets\s+/i,``)}function b(e){let t=[],n=[],r=null,i=!1,a=null;for(let o of h(e)){if(o.kind===`context`){a=`not for this task — it needs a larger context window than this seat has`;continue}let e=_[o.kind];if(e&&!t.includes(e)&&t.push(e),v.has(o.kind)){if(u(o.resetsAt))(r===null||Date.parse(o.resetsAt)>Date.parse(r))&&(r=o.resetsAt);else if(o.resetDescription){let e=y(o.resetDescription);n.includes(e)||n.push(e)}else i=!0}}return r===null&&n.length===0&&u(e.nextEligibleAt)&&(r=e.nextEligibleAt,i=!1),{conditions:t,at:r,prose:n,timeUnknown:i,never:a}}function x(e,t=Date.now()){if(e.never)return e.never;let r=[...e.at?[n(e.at,t)??e.at]:[],...e.prose],i=r.length>0?r.join(` and `):null,a=e.conditions.length>0?`when ${o(e.conditions)}`:null;return a&&i?`${a}, not before ${i}`:a||i||`unknown`}var S=/^Routed (?:autonomous )?[\w-]+-difficulty \w+ work to (.+?) \(([^()]+)\)(?: with (\d+)% of its (5-hour|weekly) window left for autonomy| (at no cost))?: ([\w-]+) mode prefers (.+?) first for this work(?:; held back [\s\S]*)?\.$/,C=/^(No seat (?:the grant lets produce )?can take [\s\S]*?) \([\s\S]*\)(?:; the earliest known reopening is \S+)?\.$/;function w(e){let t=e.trim(),n=S.exec(t);if(n){let[,e,,t,r,i,a,o]=n,s=t?` — ${t}% of its ${r} window left`:i?` — free, no usage window`:``;return s?`${e}${s}; ${a} mode prefers ${o} for this work.`:`${e} — ${a} mode prefers ${o} for this work.`}let r=C.exec(t);return r?`${r[1]}.`:t}function T(e){let t=i(e.summary??w(e.why)),n=e.exclusions.length;return n===0?t:`${t} ${n===1?`1 seat`:`${n} seats`} held back.`}var E={local:`local`,"grok-cli":`grok`,"claude-cli":`claude`,codex:`codex`},D={local:`Local`,"grok-cli":`Grok`,"claude-cli":`Claude`,codex:`Codex`};function O(e){return{name:D[e.lane],slots:e.slots===0?`off`:`${e.busy}/${e.slots}`}}function k(e){let t=e.capReason?.trim();return t?p(t):null}function A(e){let t=new Map;for(let n of e){let e=k(n);if(!e)continue;let r=t.get(e)??[];r.push(n.lane),t.set(e,r)}return[...t.entries()].map(([t,n])=>({lanes:n,all:n.length===e.length&&e.length>1,reason:t}))}function j(e){return e.phase===`queued`||e.phase===`parked`?e.phase:e.phase===`reverting`?`reverting`:e.outcome??e.phase}var M={producing:`running`,verifying:`running`,judging:`running`,landing:`running`,watching:`info`,reverting:`danger`,merged:`success`,proposed:`info`,"owner-lane":`warning`,refused:`warning`,failed:`danger`,reverted:`danger`,cancelled:`neutral`,queued:`neutral`,parked:`neutral`};function N(e){return M[e]??`unknown`}function P(e){let t=Date.parse(e.startedAt??e.phaseStartedAt??``);return Number.isFinite(t)?t:null}function F(e){if(!e.endedAt)return null;let t=Date.parse(e.endedAt);return Number.isFinite(t)?t:null}function I(e){return[e.repo.includes(`/`)?e.repo.split(`/`)[1]:e.repo,e.title,e.model,e.prNumber?`PR #${e.prNumber}`:null].filter(Boolean).join(` · `)}var L=[`local`,`grok-cli`,`claude-cli`,`codex`,`none`];function R(e,t,n,r={}){let i=r.includeParked??!0,a=new Map;for(let r of e){if(!i&&r.phase===`parked`)continue;let e=P(r);if(e===null||(F(r)??n)<t||e>n)continue;let o=r.lane??`none`;a.has(o)||a.set(o,[]),a.get(o).push(r)}let o=[];for(let e of L){let t=a.get(e);if(!t?.length)continue;t.sort((e,t)=>P(e)-P(t));let r=[],i=[];for(let e of t){let t=P(e),a=F(e)??n,o=r.findIndex(e=>e<=t);o===-1?(o=r.length,r.push(a),i.push([])):r[o]=a,i[o].push(e)}let s=e===`none`?`Unassigned`:D[e];i.forEach((t,n)=>{o.push({id:`${e}:${n}`,label:i.length>1?`${s} · ${n+1}`:s,...e===`none`?{}:{engine:E[e]},items:t.map(e=>({id:e.id,start:P(e),end:F(e),status:j(e),detail:I(e)}))})})}return o}function z(e,t){let n=e.filter(e=>e.phase===`parked`||e.hold!==null),r=n.map(e=>e.hold?.nextEligibleAt?Date.parse(e.hold.nextEligibleAt):NaN).filter(Number.isFinite),i=n.map(e=>P(e)??t),a=Math.min(t-36e5,...i),o=Math.min(t+1728e5,Math.max(t+72e5,...r)),s=0;return{lanes:n.map(e=>{let n=e.hold?.nextEligibleAt?Date.parse(e.hold.nextEligibleAt):NaN;Number.isFinite(n)||s++;let r=e.repo.includes(`/`)?e.repo.split(`/`)[1]:e.repo;return{id:e.id,label:`${r}: ${e.title}`,...e.lane?{engine:E[e.lane]}:{},items:[{id:e.id,start:P(e)??t,end:Number.isFinite(n)?n:null,status:e.hold?.kind===`split`?`split`:`parked`,outline:!0,detail:`${l(e.hold?.reason??`parked`,t)}${Number.isFinite(n)?``:` · release time unknown`}`}]}}),from:a,to:o,unknownRelease:s}}var B={G0:`Authority`,G1:`Protected paths`,G1b:`Tamper`,G2:`Scope`,G3:`Verify`,G4:`Claims`,G5:`Blast radius`,G6:`Judge`,G7:`GitHub checks`};function V(e){return!e||e.stages.length===0?[]:[{id:`entered`,label:`Proposals`,value:e.stages[0].entered},...e.stages.map(e=>({id:e.gate,label:`${e.gate} ${B[e.gate]??``}`.trim(),value:e.passed}))]}function H(n,r=5){if(!n)return{categories:[],segments:[],values:[],total:0};let i=new Map;for(let e of n.stages)for(let t of e.refusals){let e=i.get(t.code);i.set(t.code,{reason:e?.reason??t.reason,count:(e?.count??0)+t.count})}let a=[...i.entries()].sort((e,t)=>t[1].count-e[1].count||e[0].localeCompare(t[0])),o=a.slice(0,r).map(([e])=>e),s=a.length>r,c=[...o.map((t,n)=>({id:t,label:i.get(t).reason,color:e(n)})),...s?[{id:`__other`,label:`Other reasons`,color:t}]:[]],l=n.stages.filter(e=>e.refusals.length>0||e.entered!==e.passed);return{categories:l.map(e=>e.gate),segments:c,values:l.map(e=>{let t=o.map(t=>e.refusals.find(e=>e.code===t)?.count??0);return s&&t.push(e.refusals.filter(e=>!o.includes(e.code)).reduce((e,t)=>e+t.count,0)),t}),total:a.reduce((e,[,t])=>e+t.count,0)}}function U(e){if(!e)return null;let t=e.runs.filter(e=>e.seatDecision!==null);if(!t.length)return null;t.sort((e,t)=>(P(t)??0)-(P(e)??0));let n=t[0];return{decision:n.seatDecision,run:n}}export{l as _,A as a,U as c,N as d,i as f,g,b as h,O as i,z as l,x as m,D as n,k as o,T as p,V as r,R as s,E as t,H as u,m as v};
|
|
2
|
-
//# sourceMappingURL=live-model-bmsJgnYD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live-model-bmsJgnYD.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/fleet/why-seat-model.ts","../../../../../../src/web-ui/routes/verse/fleet/live-model.ts"],"sourcesContent":["/**\n * routes/verse/fleet/why-seat-model.ts — \"Why this seat\" in words (3.10.1).\n *\n * The card used to print the router's log sentence verbatim — one run-on with\n * every held-back seat's first reason in nested parentheses and a literal\n * \"…\" — and each HELD BACK entry as `reasons.join('; ')` (hence \".;\"), with\n * raw UTC instants and \"eligible again: unknown\" for seats whose reset was\n * known all along. Now:\n *\n * - the headline is one short sentence (`SeatDecision.summary`, or the\n * same words recovered from a 3.10.0 `why`) plus \"N seats held back.\";\n * - each held-back seat lists its reasons as prose sentences, without the\n * reset clauses — those move to \"eligible again\";\n * - \"eligible again\" is derived from the reasons AS DATA: every condition\n * that must change first (\"when you switch autonomy on for this seat\")\n * and the time every time-bound blocker has lifted, in the viewer's zone\n * (\"Fri 11:46 PM\") or, for Claude, the provider's own words verbatim.\n * \"unknown\" only when nothing says.\n *\n * Records written before 3.10.1 carry only sentences; `parseLegacyReason`\n * recovers the same data from them.\n *\n * Framework-free; tested directly.\n */\nimport type { SeatDecision, SeatExclusion, SeatReason, SeatReasonKind } from '../../../../core/routing/types.js';\nimport { describeResetAt } from '../../../../core/verse/seat-readiness.js';\n\nconst KINDS: ReadonlySet<string> = new Set<SeatReasonKind>([\n 'headroom', 'switched-off', 'signed-out', 'unreachable', 'spent', 'reserve', 'session-ceiling',\n 'unknown-usage', 'spend-cap', 'model-window', 'context', 'grant', 'lane', 'demoted', 'other',\n]);\n\n// ---------------------------------------------------------------------------\n// Sentences\n// ---------------------------------------------------------------------------\n\n/**\n * One sentence: trimmed and closed by exactly one full stop (a trailing \";\"\n * or \",\" is dropped). Never re-cased — a sentence may open on a seat id.\n */\nexport function asSentence(text: string): string {\n const t = text.trim().replace(/[\\s;,:]+$/, '');\n if (!t) return '';\n return /[.!?…]$/.test(t) ? t : `${t}.`;\n}\n\n/** Sentences as prose — \"A. B.\" — never \"A.; B\" and never \"A.. B\". */\nexport function joinSentences(texts: readonly string[]): string {\n return texts.map(asSentence).filter(Boolean).join(' ');\n}\n\n/** \"a\", \"a and b\", \"a, b and c\". */\nfunction listWords(words: readonly string[]): string {\n if (words.length <= 1) return words[0] ?? '';\n return `${words.slice(0, -1).join(', ')} and ${words[words.length - 1]}`;\n}\n\n// ---------------------------------------------------------------------------\n// Reasons as data\n// ---------------------------------------------------------------------------\n\nconst ISO_INSTANT = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nconst ISO_IN_TEXT = /\\b\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,9})?)?(?:Z|[+-]\\d{2}:?\\d{2})?(?![\\w:])/g;\n\n/**\n * Server prose with every ISO instant in it shown in the viewer's zone (\"the\n * earliest known reopening is Fri 2:25 PM\") — for sentences the server keeps\n * machine-exact for its logs, like a park hold's reason.\n */\nexport function localTimes(text: string, now: number = Date.now()): string {\n return text.replace(ISO_IN_TEXT, (iso) => describeResetAt(iso, now) ?? iso);\n}\n\nfunction isInstant(text: string | null | undefined): text is string {\n return typeof text === 'string' && ISO_INSTANT.test(text) && Number.isFinite(Date.parse(text));\n}\n\nfunction legacyKind(text: string): SeatReasonKind {\n if (/^autonomy is switched off/i.test(text)) return 'switched-off';\n if (/^signed out/i.test(text)) return 'signed-out';\n if (/not reachable/i.test(text)) return 'unreachable';\n if (/limits that model only/.test(text)) return 'model-window';\n if (/ is spent — /.test(text)) return 'spent';\n if (/is kept for you, so autonomy stops at/.test(text)) return 'reserve';\n if (/used; autonomy stops at .* to protect your live session/.test(text)) return 'session-ceiling';\n if (/unknown usage is not headroom|too stale to spend against|too uncertain to spend against/.test(text)) return 'unknown-usage';\n if (/daily cap/.test(text)) return 'spend-cap';\n if (/tokens of context/.test(text)) return 'context';\n if (/is demoted/.test(text)) return 'demoted';\n if (/\\bgrant\\b/i.test(text)) return 'grant';\n // A lane cap, as 3.10.0's router wrote it into exclusions: \"Codex lanes\n // stay off until…\", \"The Leader set 0 grok-cli lanes.\", \"The local runtime\n // serves 0 slot(s).\", \"…the Claude producer slice is held for your own\n // session.\" (3.10.1 sends these as `kind: 'lane'`.)\n if (/\\blanes?\\b|\\bslots?\\b|producer slice is held/i.test(text)) return 'lane';\n return 'other';\n}\n\n// ---------------------------------------------------------------------------\n// Lane cap reasons in operator words\n// ---------------------------------------------------------------------------\n\n/** Lane ids as the operator reads them — never inside a seat id (`codex-cmp`). */\nconst LANE_WORDS: ReadonlyArray<readonly [RegExp, string]> = [\n [/(?<![\\w-])grok-cli(?![\\w-])/g, 'Grok'],\n [/(?<![\\w-])claude-cli(?![\\w-])/g, 'Claude'],\n [/(?<![\\w-])codex(?![\\w-])/g, 'Codex'],\n];\n\n/**\n * A lane cap reason (the router's `capReason`, also a held-back seat's lane\n * reason) in plain words. The router words these for its log: \"The local\n * runtime serves 2 slot(s).\", \"A harness experiment is using 1 local\n * slot(s).\", \"Codex lanes stay off until the Leader enables them after the\n * usage reset (a class-B action).\", \"The Leader set 0 grok-cli lanes.\" The\n * operator reads \"2 slots\", \"1 local slot\", \"Codex stays off until the Leader\n * turns it on after the usage reset (you can veto it)\" and \"0 Grok lanes\".\n * Anything it does not recognise passes through unchanged.\n */\nexport function laneReasonText(reason: string): string {\n let text = reason.trim();\n text = text.replace(/^Codex lanes stay off until the Leader enables them\\b/, 'Codex stays off until the Leader turns it on');\n // A class-A/B Leader action waits out a veto window; class C does not.\n text = text.replace(/\\s*\\(an? class-([A-Za-z])\\s+action\\)/g, (_m, cls: string) => (/^[ab]$/i.test(cls) ? ' (you can veto it)' : ''));\n // \"2 slot(s)\" → \"2 slots\"; \"1 local slot(s)\" → \"1 local slot\".\n text = text.replace(/\\b(\\d+)((?:\\s+[A-Za-z-]+)*?)\\s+([A-Za-z]+)\\(s\\)/g, (_m, n: string, mid: string, word: string) => `${n}${mid} ${word}${Number(n) === 1 ? '' : 's'}`);\n text = text.replace(/\\b([A-Za-z]+)\\(s\\)/g, '$1s');\n for (const [re, word] of LANE_WORDS) text = text.replace(re, word);\n return text;\n}\n\n/**\n * A pre-3.10.1 reason sentence, back into data: the \" (resets …)\" clause the\n * server appended is split off (an instant → `resetsAt`, Claude's prose →\n * `resetDescription`), as is a demotion's \"until <instant>\".\n */\nexport function parseLegacyReason(sentence: string): SeatReason {\n const trimmed = sentence.trim();\n const clause = /^([\\s\\S]*?) \\(resets ([\\s\\S]+)\\)\\.?$/.exec(trimmed);\n let text = clause ? `${clause[1]}.` : trimmed;\n const reset = clause ? clause[2]!.trim() : null;\n let resetsAt: string | null = isInstant(reset) ? reset : null;\n const demoted = / is demoted until (\\S+): /.exec(text);\n if (demoted && isInstant(demoted[1])) {\n resetsAt = demoted[1];\n text = text.replace(` until ${demoted[1]}:`, ':');\n }\n return {\n kind: legacyKind(text),\n text,\n resetsAt,\n resetDescription: reset !== null && !isInstant(reset) ? reset : null,\n };\n}\n\n/** An exclusion's reasons as data: its 3.10.1 `details`, or its sentences parsed. */\nexport function exclusionReasons(x: SeatExclusion): SeatReason[] {\n if (Array.isArray(x.details) && (x.details.length > 0 || x.reasons.length === 0)) {\n // A newer server may add kinds; anything unrecognised reads as `other`.\n return x.details.map((r) => (KINDS.has(r.kind) ? r : { ...r, kind: 'other' as const }));\n }\n return x.reasons.map(parseLegacyReason);\n}\n\n/** The reasons a HELD BACK row prints: blockers and notes, never the \"N% left\" line; lane caps in plain words. */\nexport function heldBackText(x: SeatExclusion): string {\n return joinSentences(exclusionReasons(x).filter((r) => r.kind !== 'headroom').map((r) => (r.kind === 'lane' ? laneReasonText(r.text) : r.text)));\n}\n\n// ---------------------------------------------------------------------------\n// Eligible again\n// ---------------------------------------------------------------------------\n\n/** What must change before the seat can take this work again. */\nexport interface EligibleAgain {\n /** Conditions a person or the fleet must meet first, in words. */\n conditions: string[];\n /** The instant every time-bound blocker has lifted (the LATEST reset among them); null when none is known. */\n at: string | null;\n /** Provider reset wording with no instant (Claude), verbatim. */\n prose: string[];\n /** A time-bound blocker whose lift time nobody reported. */\n timeUnknown: boolean;\n /** Set when the seat can never take THIS work (it does not fit). */\n never: string | null;\n}\n\nconst CONDITION: Partial<Record<SeatReasonKind, string>> = {\n 'switched-off': 'you switch autonomy on for this seat',\n 'signed-out': 'you reconnect this account',\n unreachable: 'it is reachable again',\n 'unknown-usage': 'a fresh usage reading arrives',\n 'spend-cap': 'its daily spend cap resets',\n grant: 'the standing grant allows it',\n lane: 'its lane has a free slot',\n};\n\n/** Blockers that lift on their own at a time: a window reset, a demotion's end. */\nconst TIMED: ReadonlySet<SeatReasonKind> = new Set<SeatReasonKind>(['spent', 'reserve', 'session-ceiling', 'demoted']);\n\n/** Claude's wording, without the \"resets\" some sources lead with. */\nfunction resetWords(text: string): string {\n return text.trim().replace(/^resets\\s+/i, '');\n}\n\nexport function eligibleAgain(x: SeatExclusion): EligibleAgain {\n const conditions: string[] = [];\n const prose: string[] = [];\n let at: string | null = null;\n let timeUnknown = false;\n let never: string | null = null;\n for (const r of exclusionReasons(x)) {\n if (r.kind === 'context') {\n never = 'not for this task — it needs a larger context window than this seat has';\n continue;\n }\n const condition = CONDITION[r.kind];\n if (condition && !conditions.includes(condition)) conditions.push(condition);\n if (!TIMED.has(r.kind)) continue;\n // The seat is free only once EVERY time-bound blocker has lifted.\n if (isInstant(r.resetsAt)) {\n if (at === null || Date.parse(r.resetsAt) > Date.parse(at)) at = r.resetsAt;\n } else if (r.resetDescription) {\n const words = resetWords(r.resetDescription);\n if (!prose.includes(words)) prose.push(words);\n } else {\n timeUnknown = true;\n }\n }\n // The server's own estimate, when the reasons themselves carried no time.\n if (at === null && prose.length === 0 && isInstant(x.nextEligibleAt)) {\n at = x.nextEligibleAt;\n timeUnknown = false;\n }\n return { conditions, at, prose, timeUnknown, never };\n}\n\n/**\n * \"Fri 11:46 PM\"; \"when you switch autonomy on for this seat, not before Fri\n * 11:46 PM\"; \"Sep 25 at 6:59pm (America/New_York)\" (Claude's words); and\n * \"unknown\" only when nothing says.\n */\nexport function describeEligibleAgain(e: EligibleAgain, now: number = Date.now()): string {\n if (e.never) return e.never;\n const times = [...(e.at ? [describeResetAt(e.at, now) ?? e.at] : []), ...e.prose];\n const time = times.length > 0 ? times.join(' and ') : null;\n const when = e.conditions.length > 0 ? `when ${listWords(e.conditions)}` : null;\n if (when && time) return `${when}, not before ${time}`;\n if (when) return when;\n if (time) return time;\n return 'unknown';\n}\n\n// ---------------------------------------------------------------------------\n// Headline\n// ---------------------------------------------------------------------------\n\nconst ROUTED = /^Routed (?:autonomous )?[\\w-]+-difficulty \\w+ work to (.+?) \\(([^()]+)\\)(?: with (\\d+)% of its (5-hour|weekly) window left for autonomy| (at no cost))?: ([\\w-]+) mode prefers (.+?) first for this work(?:; held back [\\s\\S]*)?\\.$/;\nconst NOTHING = /^(No seat (?:the grant lets produce )?can take [\\s\\S]*?) \\([\\s\\S]*\\)(?:; the earliest known reopening is \\S+)?\\.$/;\n\n/**\n * The short headline recovered from a 3.10.0 `why` — the same words a 3.10.1\n * router writes as `summary` (\"Grok — 94% of its weekly window left; balanced\n * mode prefers Grok for this work.\"). Anything unrecognised is returned as is.\n */\nexport function legacySummary(why: string): string {\n const text = why.trim();\n const routed = ROUTED.exec(text);\n if (routed) {\n const [, label, , room, windowWord, free, mode, engine] = routed;\n const lead = room ? ` — ${room}% of its ${windowWord} window left` : free ? ' — free, no usage window' : '';\n return lead ? `${label}${lead}; ${mode} mode prefers ${engine} for this work.` : `${label} — ${mode} mode prefers ${engine} for this work.`;\n }\n const nothing = NOTHING.exec(text);\n if (nothing) return `${nothing[1]}.`;\n return text;\n}\n\n/** The card's one-line headline: the choice and why, then how many seats were held back. */\nexport function decisionSummary(d: SeatDecision): string {\n const lead = asSentence(d.summary ?? legacySummary(d.why));\n const n = d.exclusions.length;\n return n === 0 ? lead : `${lead} ${n === 1 ? '1 seat' : `${n} seats`} held back.`;\n}\n","/**\n * routes/verse/fleet/live-model.ts — FleetLiveSnapshotV1 → chart props\n * (unit C7; SPEC-310B §6 Fleet, SPEC-310C §5). Shared by Command's 12 h\n * swimlane and every Fleet card, so both make the same decisions:\n *\n * - rows are LANES × SLOTS: runs overlapping in one lane stack into\n * numbered slot rows (\"Grok · 2\"), so a bar never hides behind another;\n * - bar colour is STATUS (running amber, merged green, reverted red …);\n * the lane's ENGINE is the tick + monogram beside its label;\n * - queued and parked work draws as an outline (it holds a place; nothing\n * runs) — the Parked Gantt runs from \"parked since\" to `nextEligibleAt`,\n * and an unknown `nextEligibleAt` stays open-ended with \"unknown\" in words.\n *\n * Framework-free; tested directly.\n */\nimport type { FleetEngine, FleetGateFunnel, FleetLaneState, FleetLiveRun, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { SeatDecision } from '../../../../core/routing/types.js';\nimport type { ChartEngine, ChartTone } from '../../../components/charts/colors.js';\nimport { CHART_NEUTRAL, seriesColor } from '../../../components/charts/colors.js';\nimport type { SwimlaneLane } from '../../../components/charts/Swimlane.js';\nimport type { FunnelStage } from '../../../components/charts/Funnel.js';\nimport type { BarStackSegment } from '../../../components/charts/BarStack.js';\nimport { laneReasonText, localTimes } from './why-seat-model.js';\n\nexport const LANE_ENGINE: Readonly<Record<FleetEngine, ChartEngine>> = {\n local: 'local',\n 'grok-cli': 'grok',\n 'claude-cli': 'claude',\n codex: 'codex',\n};\n\nexport const LANE_LABEL: Readonly<Record<FleetEngine, string>> = {\n local: 'Local',\n 'grok-cli': 'Grok',\n 'claude-cli': 'Claude',\n codex: 'Codex',\n};\n\n/** A lane chip's words: \"Local · off\", \"Grok · 1/2\". The why is a separate line (`laneNotes`). */\nexport function laneChipText(lane: FleetLaneState): { name: string; slots: string } {\n return { name: LANE_LABEL[lane.lane], slots: lane.slots === 0 ? 'off' : `${lane.busy}/${lane.slots}` };\n}\n\nexport interface LaneNote {\n /** The lanes this reason applies to, in strip order. */\n lanes: FleetEngine[];\n /** True when every lane shares it — then it is said once, without names. */\n all: boolean;\n reason: string;\n}\n\n/** A lane's cap reason as the operator reads it (`laneReasonText`); null when it has none. */\nexport function laneReason(lane: FleetLaneState): string | null {\n const reason = lane.capReason?.trim();\n return reason ? laneReasonText(reason) : null;\n}\n\n/**\n * Each distinct lane cap reason ONCE, with the lanes it covers, in plain\n * words (the router's \"slot(s)\" and \"class-B action\" never reach the\n * operator). A dark fleet gives every lane the same sentence; 3.10.0\n * repeated it inside every chip and truncated it there.\n */\nexport function laneNotes(lanes: readonly FleetLaneState[]): LaneNote[] {\n const byReason = new Map<string, FleetEngine[]>();\n for (const lane of lanes) {\n const reason = laneReason(lane);\n if (!reason) continue;\n const list = byReason.get(reason) ?? [];\n list.push(lane.lane);\n byReason.set(reason, list);\n }\n return [...byReason.entries()].map(([reason, covered]) => ({\n lanes: covered,\n all: covered.length === lanes.length && lanes.length > 1,\n reason,\n }));\n}\n\n/** The word a bar is labelled with: the outcome once it ended, else the phase. */\nexport function runStatus(run: FleetLiveRun): string {\n if (run.phase === 'queued' || run.phase === 'parked') return run.phase;\n if (run.phase === 'reverting') return 'reverting';\n return run.outcome ?? run.phase;\n}\n\nconst TONES: Readonly<Record<string, ChartTone>> = {\n producing: 'running',\n verifying: 'running',\n judging: 'running',\n landing: 'running',\n watching: 'info',\n reverting: 'danger',\n merged: 'success',\n proposed: 'info',\n 'owner-lane': 'warning',\n refused: 'warning',\n failed: 'danger',\n reverted: 'danger',\n cancelled: 'neutral',\n queued: 'neutral',\n parked: 'neutral',\n};\n\nexport function runTone(status: string): ChartTone {\n return TONES[status] ?? 'unknown';\n}\n\nfunction startOf(run: FleetLiveRun): number | null {\n const t = Date.parse(run.startedAt ?? run.phaseStartedAt ?? '');\n return Number.isFinite(t) ? t : null;\n}\n\nfunction endOf(run: FleetLiveRun): number | null {\n if (!run.endedAt) return null;\n const t = Date.parse(run.endedAt);\n return Number.isFinite(t) ? t : null;\n}\n\nfunction runDetail(run: FleetLiveRun): string {\n const where = run.repo.includes('/') ? run.repo.split('/')[1] : run.repo;\n return [where, run.title, run.model, run.prNumber ? `PR #${run.prNumber}` : null].filter(Boolean).join(' · ');\n}\n\nconst LANE_ORDER: readonly (FleetEngine | 'none')[] = ['local', 'grok-cli', 'claude-cli', 'codex', 'none'];\n\n/**\n * Runs within [from, now] packed into lane × slot rows. `parkedAsGantt`\n * leaves parked runs out (the Fleet surface draws them in their own Gantt);\n * Command keeps them in, as outlines.\n */\nexport function laneRows(runs: readonly FleetLiveRun[], from: number, now: number, opts: { includeParked?: boolean } = {}): SwimlaneLane[] {\n const includeParked = opts.includeParked ?? true;\n const byLane = new Map<FleetEngine | 'none', FleetLiveRun[]>();\n for (const run of runs) {\n if (!includeParked && run.phase === 'parked') continue;\n const s = startOf(run);\n if (s === null) continue;\n const e = endOf(run) ?? now;\n if (e < from || s > now) continue;\n const key = run.lane ?? 'none';\n if (!byLane.has(key)) byLane.set(key, []);\n byLane.get(key)!.push(run);\n }\n const lanes: SwimlaneLane[] = [];\n for (const key of LANE_ORDER) {\n const list = byLane.get(key);\n if (!list?.length) continue;\n list.sort((a, b) => startOf(a)! - startOf(b)!);\n const slotEnds: number[] = [];\n const slotItems: FleetLiveRun[][] = [];\n for (const run of list) {\n const s = startOf(run)!;\n const e = endOf(run) ?? now;\n let slot = slotEnds.findIndex((end) => end <= s);\n if (slot === -1) {\n slot = slotEnds.length;\n slotEnds.push(e);\n slotItems.push([]);\n } else {\n slotEnds[slot] = e;\n }\n slotItems[slot]!.push(run);\n }\n const name = key === 'none' ? 'Unassigned' : LANE_LABEL[key];\n slotItems.forEach((items, i) => {\n lanes.push({\n id: `${key}:${i}`,\n label: slotItems.length > 1 ? `${name} · ${i + 1}` : name,\n ...(key === 'none' ? {} : { engine: LANE_ENGINE[key] }),\n items: items.map((run) => ({\n id: run.id,\n start: startOf(run)!,\n end: endOf(run),\n status: runStatus(run),\n detail: runDetail(run),\n })),\n });\n });\n }\n return lanes;\n}\n\nexport interface GanttRow {\n lanes: SwimlaneLane[];\n from: number;\n to: number;\n /** Rows whose release time is unknown (drawn open-ended). */\n unknownRelease: number;\n}\n\n/**\n * The Parked Gantt: one row per parked item, from when it parked to when its\n * seat should free up. The window always shows \"now\" plus the furthest known\n * release (capped at 48 h — a week-long wait still reads, it just runs off\n * the right edge and the table carries the exact time).\n */\nexport function parkedGantt(runs: readonly FleetLiveRun[], now: number): GanttRow {\n const parked = runs.filter((r) => r.phase === 'parked' || r.hold !== null);\n const releases = parked.map((r) => (r.hold?.nextEligibleAt ? Date.parse(r.hold.nextEligibleAt) : NaN)).filter(Number.isFinite);\n const starts = parked.map((r) => startOf(r) ?? now);\n const from = Math.min(now - 60 * 60_000, ...starts);\n const to = Math.min(now + 48 * 3_600_000, Math.max(now + 2 * 3_600_000, ...releases));\n let unknownRelease = 0;\n const lanes: SwimlaneLane[] = parked.map((r) => {\n const release = r.hold?.nextEligibleAt ? Date.parse(r.hold.nextEligibleAt) : NaN;\n if (!Number.isFinite(release)) unknownRelease++;\n const where = r.repo.includes('/') ? r.repo.split('/')[1] : r.repo;\n return {\n id: r.id,\n label: `${where}: ${r.title}`,\n ...(r.lane ? { engine: LANE_ENGINE[r.lane] } : {}),\n items: [{\n id: r.id,\n start: startOf(r) ?? now,\n end: Number.isFinite(release) ? release : null,\n status: r.hold?.kind === 'split' ? 'split' : 'parked',\n outline: true,\n detail: `${localTimes(r.hold?.reason ?? 'parked', now)}${Number.isFinite(release) ? '' : ' · release time unknown'}`,\n }],\n };\n });\n return { lanes, from, to, unknownRelease };\n}\n\n// ---------------------------------------------------------------------------\n// Gate funnel + refusal reasons\n// ---------------------------------------------------------------------------\n\n/** Gate names in operator words (the funnel's stage labels). */\nexport const GATE_LABEL: Readonly<Record<string, string>> = {\n G0: 'Authority',\n G1: 'Protected paths',\n G1b: 'Tamper',\n G2: 'Scope',\n G3: 'Verify',\n G4: 'Claims',\n G5: 'Blast radius',\n G6: 'Judge',\n G7: 'GitHub checks',\n};\n\n/** Entered G0, then how many passed each gate — a strictly narrowing pipeline. */\nexport function funnelStages(funnel: FleetGateFunnel | null): FunnelStage[] {\n if (!funnel || funnel.stages.length === 0) return [];\n return [\n { id: 'entered', label: 'Proposals', value: funnel.stages[0]!.entered },\n ...funnel.stages.map((s) => ({ id: s.gate, label: `${s.gate} ${GATE_LABEL[s.gate] ?? ''}`.trim(), value: s.passed })),\n ];\n}\n\nexport interface RefusalStack {\n categories: string[];\n segments: BarStackSegment[];\n values: (number | null)[][];\n total: number;\n}\n\n/**\n * Refusals per gate, stacked by reason. The top five reasons (by count over\n * the window) keep FIXED identity slots — a reason's colour never changes\n * when another is filtered out — and the rest fold into a neutral \"Other\".\n */\nexport function refusalStack(funnel: FleetGateFunnel | null, topN = 5): RefusalStack {\n if (!funnel) return { categories: [], segments: [], values: [], total: 0 };\n const totals = new Map<string, { reason: string; count: number }>();\n for (const s of funnel.stages) for (const r of s.refusals) {\n const prev = totals.get(r.code);\n totals.set(r.code, { reason: prev?.reason ?? r.reason, count: (prev?.count ?? 0) + r.count });\n }\n const ranked = [...totals.entries()].sort((a, b) => b[1].count - a[1].count || a[0].localeCompare(b[0]));\n const top = ranked.slice(0, topN).map(([code]) => code);\n const hasOther = ranked.length > topN;\n const segments: BarStackSegment[] = [\n ...top.map((code, i) => ({ id: code, label: totals.get(code)!.reason, color: seriesColor(i) })),\n ...(hasOther ? [{ id: '__other', label: 'Other reasons', color: CHART_NEUTRAL }] : []),\n ];\n const stages = funnel.stages.filter((s) => s.refusals.length > 0 || s.entered !== s.passed);\n return {\n categories: stages.map((s) => s.gate),\n segments,\n values: stages.map((s) => {\n const row = top.map((code) => s.refusals.find((r) => r.code === code)?.count ?? 0);\n if (hasOther) row.push(s.refusals.filter((r) => !top.includes(r.code)).reduce((n, r) => n + r.count, 0));\n return row;\n }),\n total: ranked.reduce((n, [, v]) => n + v.count, 0),\n };\n}\n\n/** The newest seat decision behind a live dispatch (\"why this seat\"). */\nexport function latestDecision(fleet: FleetLiveSnapshotV1 | null): { decision: SeatDecision; run: FleetLiveRun } | null {\n if (!fleet) return null;\n const withDecision = fleet.runs.filter((r) => r.seatDecision !== null);\n if (!withDecision.length) return null;\n withDecision.sort((a, b) => (startOf(b) ?? 0) - (startOf(a) ?? 0));\n const run = withDecision[0]!;\n return { decision: run.seatDecision!, run };\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function e(e){return e===null?`unknown`:e.includes(`tools`)?`supported`:`unsupported`}function t(t,n){return t===null?n!==null&&n.length===0?`unknown`:e(n):t?`supported`:`unsupported`}function n(e,n){let r=e.expiresAt?Date.parse(e.expiresAt):NaN,i=e.gpuPercent??(e.sizeBytes!==null&&e.sizeBytes>0&&e.sizeVramBytes!==null?Math.max(0,Math.min(100,e.sizeVramBytes/e.sizeBytes*100)):null);return{name:e.name,runtime:e.runtime,resident:e.loaded,placement:e.placement,memoryPct:e.loaded?e.memoryPercent:null,family:e.family,sizeBytes:e.sizeBytes,sizeVramBytes:e.sizeVramBytes,gpuPct:i,expiresInMs:e.loaded&&!Number.isNaN(r)?r-n:null,expiresAtMs:e.loaded&&!Number.isNaN(r)?r:null,parameterSize:e.parameterSize,quantization:e.quantization,nativeContext:e.nativeContext,configuredContext:e.configuredContext,contextTruncated:e.nativeContext!==null&&e.configuredContext!==null&&e.configuredContext<e.nativeContext,tools:t(e.supportsTools,e.capabilities)}}function r(e){let t=e.filter(e=>e.stale);if(t.length===0)return{stale:!1,staleForMs:null,runtimes:[]};let n=t.map(e=>e.staleForMs).filter(e=>e!==null);return{stale:!0,staleForMs:n.length===0?null:Math.max(...n),runtimes:t.map(e=>e.runtime)}}function i(e){if(e===null||!Number.isFinite(e)||e<0)return`an unreported interval`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;return r===0?`${n}m`:`${n}m ${r}s`}function a(e,t=Date.now()){if(!e)return null;let r=e.models.map(e=>n(e,t)).sort((e,t)=>Number(t.resident)-Number(e.resident)||e.name.localeCompare(t.name)),i=r.filter(e=>e.resident),a=i.some(e=>e.sizeBytes===null)?null:i.reduce((e,t)=>e+(t.sizeBytes??0),0),o=e.memoryBudgetBytes;return{reachable:e.reachable,reason:e.reason,rows:r,residentBytes:a,memoryBudgetBytes:o,memoryUsedPct:a!==null&&o!==null&&o>0?Math.max(0,Math.min(100,a/o*100)):null,freeMemoryBytes:e.freeMemoryBytes,runtimes:e.runtimes,notes:e.notes,agenticCount:r.filter(e=>e.tools===`supported`).length,nonAgenticCount:r.filter(e=>e.tools===`unsupported`).length,unknownToolCount:r.filter(e=>e.tools===`unknown`).length}}function o(e){if(e===null||!Number.isFinite(e))return`—`;let t=e/1024**3;if(t>=10)return`${t.toFixed(0)} GB`;if(t>=1)return`${t.toFixed(1)} GB`;let n=e/1024**2;return`${Math.round(n)} MB`}function s(e){if(e===null||!Number.isFinite(e))return`—`;if(e<=0)return`expired`;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}h ${r}m`:r>0?`${r}m ${i}s`:`${i}s`}function c(e){return e===null||!Number.isFinite(e)?`—`:e>=1024?`${Math.round(e/1024)}k`:String(e)}export{s as a,c as i,i as n,r as o,o as r,a as t};
|
|
2
|
-
//# sourceMappingURL=local-model-DFyjKX0b.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-model-DFyjKX0b.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/usage/local-model.ts"],"sourcesContent":["/**\n * routes/verse/usage/local-model.ts — local availability, projected for\n * display.\n *\n * \"Can I run this locally right now\" is a different question from \"is it\n * installed\", and the answer has four independent parts the old surface threw\n * away (docs/VERSE-TELEMETRY-V2.md, \"Local models\"):\n *\n * - RESIDENT vs INSTALLED — `/api/ps` vs `/api/tags`. Only a resident model\n * answers without a load delay.\n * - GPU/CPU SPLIT — `size_vram` against `size`. A model that spilled to CPU\n * is usable but slow, and that is a fact the operator should see, not\n * discover mid-turn.\n * - KEEP-ALIVE — `expires_at` is when residency ends. Rendered as a\n * countdown because it genuinely is one (unlike Claude's reset prose,\n * which is not a timestamp and must stay verbatim).\n * - TOOLS — a model whose `capabilities` lack `tools` CANNOT drive an\n * agentic session at all. That is a hard gate, so it is stated up front\n * rather than failing at turn time. `capabilities: null` means the list\n * was not reported, which is NOT the same as \"no tool support\" and is\n * rendered as unknown.\n *\n * Pure: no React, no I/O.\n */\nimport type { LocalModel, LocalModelsSnapshot, LocalRuntimeStatus } from './usage-contract.js';\n\nexport type ToolSupport = 'supported' | 'unsupported' | 'unknown';\n\nexport interface LocalModelRow {\n name: string;\n /** Which runtime reported it, so a flattened list stays attributable. */\n runtime: LocalModel['runtime'];\n resident: boolean;\n /**\n * Where the weights sit. `split` is the one that changes the answer: a model\n * that only half-fits the GPU is usable but slow, and an operator should see\n * that before picking the seat rather than discovering it mid-turn.\n */\n placement: LocalModel['placement'];\n /** Resident size against total machine memory (0–100), or null. */\n memoryPct: number | null;\n family: string | null;\n sizeBytes: number | null;\n sizeVramBytes: number | null;\n /** Share of resident bytes held in VRAM (0–100), or null when unreported. */\n gpuPct: number | null;\n /** ms until keep-alive expiry AT BUILD TIME; null when not resident or not reported. */\n expiresInMs: number | null;\n /**\n * Epoch ms of the keep-alive expiry — the durable fact. A rendered countdown\n * must derive from THIS against a live clock; `expiresInMs` is frozen into\n * the view model and would print the same number forever.\n */\n expiresAtMs: number | null;\n parameterSize: string | null;\n quantization: string | null;\n nativeContext: number | null;\n configuredContext: number | null;\n /** True when Ashlr runs this model at less than its native context. */\n contextTruncated: boolean;\n tools: ToolSupport;\n}\n\nexport function toolSupport(capabilities: string[] | null): ToolSupport {\n if (capabilities === null) return 'unknown';\n return capabilities.includes('tools') ? 'supported' : 'unsupported';\n}\n\n/**\n * The runtime's own `supportsTools` is AUTHORITATIVE and outranks the\n * capability array.\n *\n * The server sends `capabilities: []` when a runtime reported no capability\n * list at all, and reading that array alone renders \"no tools\" — a hard gate\n * that would wrongly tell the operator a model cannot drive an agentic\n * session. `supportsTools: null` is the honest \"the runtime did not say\".\n */\nexport function resolveToolSupport(\n supportsTools: boolean | null,\n capabilities: string[] | null,\n): ToolSupport {\n if (supportsTools !== null) return supportsTools ? 'supported' : 'unsupported';\n if (capabilities !== null && capabilities.length === 0) return 'unknown';\n return toolSupport(capabilities);\n}\n\nexport function buildLocalModelRow(model: LocalModel, now: number): LocalModelRow {\n const expiresMs = model.expiresAt ? Date.parse(model.expiresAt) : Number.NaN;\n // The runtime's own `gpuPercent` is authoritative — it knows how the layers\n // were actually placed. Recomputing from size/size_vram is the fallback for\n // a server that predates the field, never an override of it.\n const gpuPct =\n model.gpuPercent ??\n (model.sizeBytes !== null && model.sizeBytes > 0 && model.sizeVramBytes !== null\n ? Math.max(0, Math.min(100, (model.sizeVramBytes / model.sizeBytes) * 100))\n : null);\n\n return {\n name: model.name,\n runtime: model.runtime,\n resident: model.loaded,\n placement: model.placement,\n // Only a RESIDENT model occupies memory. `sizeBytes` for an unloaded model\n // is the on-disk size, so a machine-memory share computed from it would\n // report memory that is not in use.\n memoryPct: model.loaded ? model.memoryPercent : null,\n family: model.family,\n sizeBytes: model.sizeBytes,\n sizeVramBytes: model.sizeVramBytes,\n gpuPct,\n expiresInMs: model.loaded && !Number.isNaN(expiresMs) ? expiresMs - now : null,\n expiresAtMs: model.loaded && !Number.isNaN(expiresMs) ? expiresMs : null,\n parameterSize: model.parameterSize,\n quantization: model.quantization,\n nativeContext: model.nativeContext,\n configuredContext: model.configuredContext,\n contextTruncated:\n model.nativeContext !== null &&\n model.configuredContext !== null &&\n model.configuredContext < model.nativeContext,\n tools: resolveToolSupport(model.supportsTools, model.capabilities),\n };\n}\n\nexport interface LocalModelsView {\n reachable: boolean;\n reason: string | null;\n /** Resident first (they are the answer to \"right now\"), then by name. */\n rows: LocalModelRow[];\n residentBytes: number | null;\n memoryBudgetBytes: number | null;\n memoryUsedPct: number | null;\n /** The machine's own reported free memory, or null. */\n freeMemoryBytes: number | null;\n /** Per-runtime reachability and staleness, for the panel's banner. */\n runtimes: LocalRuntimeStatus[];\n /** The server's plain-language caveats for this snapshot. */\n notes: string[];\n /** Models that CAN drive an agentic session. */\n agenticCount: number;\n /** Models that explicitly cannot. Separate from `unknownToolCount`. */\n nonAgenticCount: number;\n /** Models whose runtime did not say — never counted as \"cannot\". */\n unknownToolCount: number;\n}\n\n/**\n * The staleness verdict for the whole local reading.\n *\n * A retained known-good report is the right server-side choice (a timeout is\n * \"no answer yet\", not \"the runtime is gone\"), but it obliges this surface to\n * say the numbers are N seconds old rather than presenting them as fresh.\n * The oldest retained report wins, because a panel is only as fresh as its\n * stalest input.\n */\nexport interface LocalStaleness {\n stale: boolean;\n /** Age of the OLDEST retained reading, in ms. Null when nothing is stale. */\n staleForMs: number | null;\n /** Which runtimes were served from a retained reading. */\n runtimes: LocalRuntimeStatus['runtime'][];\n}\n\nexport function localStaleness(runtimes: readonly LocalRuntimeStatus[]): LocalStaleness {\n const stale = runtimes.filter((r) => r.stale);\n if (stale.length === 0) return { stale: false, staleForMs: null, runtimes: [] };\n const ages = stale.map((r) => r.staleForMs).filter((ms): ms is number => ms !== null);\n return {\n stale: true,\n // A retained report with no reported age is still stale; the age is simply\n // unknown, and null says that rather than implying \"0ms old\".\n staleForMs: ages.length === 0 ? null : Math.max(...ages),\n runtimes: stale.map((r) => r.runtime),\n };\n}\n\n/** \"12s\" / \"4m 30s\" — how old a retained reading is, for a plain sentence. */\nexport function formatAge(ms: number | null): string {\n if (ms === null || !Number.isFinite(ms) || ms < 0) return 'an unreported interval';\n const total = Math.round(ms / 1000);\n if (total < 60) return `${total}s`;\n const m = Math.floor(total / 60);\n const s = total % 60;\n return s === 0 ? `${m}m` : `${m}m ${s}s`;\n}\n\nexport function buildLocalModelsView(\n snapshot: LocalModelsSnapshot | null,\n now: number = Date.now(),\n): LocalModelsView | null {\n if (!snapshot) return null;\n const rows = snapshot.models\n .map((m) => buildLocalModelRow(m, now))\n .sort((a, b) => Number(b.resident) - Number(a.resident) || a.name.localeCompare(b.name));\n\n const resident = rows.filter((r) => r.resident);\n // A resident model with no reported size makes the TOTAL unknown — summing\n // the rest would understate it, and understating a memory figure is exactly\n // the kind of quiet lie this surface refuses.\n const residentBytes = resident.some((r) => r.sizeBytes === null)\n ? null\n : resident.reduce((acc, r) => acc + (r.sizeBytes ?? 0), 0);\n\n const budget = snapshot.memoryBudgetBytes;\n return {\n reachable: snapshot.reachable,\n reason: snapshot.reason,\n rows,\n residentBytes,\n memoryBudgetBytes: budget,\n memoryUsedPct:\n residentBytes !== null && budget !== null && budget > 0\n ? Math.max(0, Math.min(100, (residentBytes / budget) * 100))\n : null,\n freeMemoryBytes: snapshot.freeMemoryBytes,\n runtimes: snapshot.runtimes,\n notes: snapshot.notes,\n // Three counts, not two: \"cannot drive a session\" and \"the runtime did not\n // say\" are different facts, and folding the second into the first would\n // turn an unanswered question into a hard gate.\n agenticCount: rows.filter((r) => r.tools === 'supported').length,\n nonAgenticCount: rows.filter((r) => r.tools === 'unsupported').length,\n unknownToolCount: rows.filter((r) => r.tools === 'unknown').length,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers local to this panel (chartFormat owns counts/currency;\n// bytes and countdowns are not in its vocabulary).\n// ---------------------------------------------------------------------------\n\n/** Binary-ish GB, matching how Ollama and Activity Monitor talk about models. */\nexport function formatBytes(bytes: number | null): string {\n if (bytes === null || !Number.isFinite(bytes)) return '—';\n const gb = bytes / 1024 ** 3;\n if (gb >= 10) return `${gb.toFixed(0)} GB`;\n if (gb >= 1) return `${gb.toFixed(1)} GB`;\n const mb = bytes / 1024 ** 2;\n return `${Math.round(mb)} MB`;\n}\n\n/** \"expires in 4m 12s\" material. Past-due reads as expired, never negative. */\nexport function formatCountdown(ms: number | null): string {\n if (ms === null || !Number.isFinite(ms)) return '—';\n if (ms <= 0) return 'expired';\n const total = Math.floor(ms / 1000);\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const s = total % 60;\n if (h > 0) return `${h}h ${m}m`;\n if (m > 0) return `${m}m ${s}s`;\n return `${s}s`;\n}\n\n/**\n * Context windows are powers of two and are quoted that way everywhere the\n * user will have seen them (262144 is \"256k\", not \"262k\"), so the divisor is\n * 1024 rather than 1000. Getting this wrong makes the UI disagree with the\n * model card the operator read five minutes ago.\n */\nexport function formatContext(tokens: number | null): string {\n if (tokens === null || !Number.isFinite(tokens)) return '—';\n if (tokens >= 1024) return `${Math.round(tokens / 1024)}k`;\n return String(tokens);\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{v as e}from"./colors-BZ3a9wFf.js";import{a as t}from"./workspace-model-CbhdPhei.js";import{t as n}from"./calendar-day-BxBYHfX1.js";function r(e){let t=e.trim().replace(/\\/g,`/`).replace(/\/+$/,``);return t=t.replace(/^\/private(?=\/(?:tmp|var)(?:\/|$))/,``),t=t.replace(/^(?:\/Users\/[^/]+|\/home\/[^/]+|[A-Za-z]:\/Users\/[^/]+)(?=\/|$)/,`~`),t||`/`}var i=[/^\/tmp(?:\/|$)/,/^\/var\/tmp(?:\/|$)/,/^\/var\/folders\/[^/]+\/[^/]+\/T(?:\/|$)/,/^[A-Za-z]:\/Windows\/Temp(?:\/|$)/i,/\/AppData\/Local\/Temp(?:\/|$)/i];function a(e){let t=r(e);return i.some(e=>e.test(t))}function o(e,t){let n=new Map,i=(e,t)=>{let i=r(e),a=t.trim();i!==`/`&&i!==`~`&&a&&!n.has(i)&&n.set(i,a)};for(let t of e??[])for(let e of t.roots)i(e.path,t.name);for(let e of t??[])i(e.path,e.name);return n}function s(e,t){let n=r(e),i=t.get(n);if(i!==void 0)return i;let a=null;for(let[e,r]of t)n.startsWith(`${e}/`)&&(!a||e.length>a.root.length)&&(a={root:e,name:r});return a?.name??null}function c(e,n=new Map){return{label:s(e,n)??t(e),full:e,scratch:a(e)}}var l=e=>e.length>14?`${e.slice(0,13)}…`:e;function u(e,t){let n=new Map(e.map(e=>[e,e.split(`/`).filter(Boolean).reverse()])),r=new Map;for(let i of e){let a=n.get(i),o=null,s=null;for(let r=0;r<a.length&&s===null;r++){let c=a[r];c!==t&&c!==`~`&&(o??=c,e.every(e=>e===i||n.get(e)[r]!==c)&&(s=c))}r.set(i,s??o)}return r}function d(e,t=new Map){let n=new Map;for(let t of[...new Set(e)].sort()){let e=r(t);n.set(e,[...n.get(e)??[],t])}let i=new Map;for(let[e,r]of n){let n=c(r[0],t).label;i.set(n,[...i.get(n)??[],e])}let o=new Map,s=new Map;for(let[e,t]of i){let n=t.length>1?u(t,e):null;for(let r of t){let t=n?.get(r)??null;o.set(r,t?`${e} (${l(t)})`:e),t&&l(t)!==t&&s.set(r,`${e} (${t})`)}}let d=new Map;for(let e of o.values())d.set(e,(d.get(e)??0)+1);let f=new Set,p=new Map;for(let e of[...o.keys()].sort()){let t=o.get(e),n=d.get(t)>1?s.get(e)??t:t,r=n;for(let e=2;f.has(r);e++)r=`${n} #${e}`;f.add(r),p.set(e,r)}let m=new Map;for(let[e,t]of n)for(let n of t)m.set(n,{label:p.get(e),full:n,scratch:a(n)});return m}var f=[`loop`,`struggle`,`verification-gap`,`uncertainty`,`backtrack`,`win`],p={loop:`Loops`,struggle:`Repeated failures`,"verification-gap":`Edits without tests`,uncertainty:`Uncertainty`,backtrack:`Backtracking`,win:`Wins`},m={claude:`Claude`,codex:`Codex`,grok:`Grok`,local:`Local`},h=[`claude`,`codex`,`grok`,`local`];function g(e){return h.includes(e)?e:null}function _(e){if(!e)return[];let t=new Map;for(let n of e.insights){if(!n.repo)continue;let e=r(n.repo),i=t.get(e)??{total:0,spellings:new Map};i.total+=n.count,i.spellings.set(n.repo,(i.spellings.get(n.repo)??0)+n.count),t.set(e,i)}let n=(e,t)=>t[1]-e[1]||e[0].localeCompare(t[0]);return[...t.values()].map(e=>[[...e.spellings.entries()].sort(n)[0][0],e.total]).sort(n).map(([e])=>e)}function v(e,t){return!!e&&(e===t||r(e)===r(t))}function y(e,t){let n=f.map(e=>({id:e,label:p[e]}));if(!e)return{rows:n,columns:[],values:[]};let r=[...new Set([...Object.keys(e.totals.byEngine),...e.insights.map(e=>e.engine).filter(e=>!!e)])].sort((e,t)=>{let n=h.indexOf(e),r=h.indexOf(t);return(n===-1?99:n)-(r===-1?99:r)||e.localeCompare(t)}),i=r.map(e=>{let t=g(e);return{id:e,label:m[e]??e,...t?{engine:t}:{}}}),a=e.insights.filter(e=>t===null||v(e.repo,t));return{rows:n,columns:i,values:f.map(t=>r.map(n=>{let r=(e.totals.byEngine[n]??0)>0,i=a.filter(e=>e.kind===t&&e.engine===n).reduce((e,t)=>e+t.count,0);return r||i>0?i:null}))}}function b(e,t=3){if(!e)return[];let n={high:0,warn:1,info:2};return e.insights.filter(e=>e.kind!==`win`).sort((e,t)=>n[e.severity]-n[t.severity]||Date.parse(t.lastAt)-Date.parse(e.lastAt)).slice(0,t)}function x(t){if(!t)return[];let r=e=>t.trends.map(t=>({x:n(t.day),y:t.steps===0?null:e(t)}));return[{id:`struggles`,label:`Struggles`,color:e(`warning`),points:r(e=>e.struggles)},{id:`wins`,label:`Wins`,color:e(`success`),points:r(e=>e.wins)}]}var S=new Set([`loop`,`struggle`]);function C(e,t){return e.evidence.some(e=>e.ref.startsWith(`session:${t}#`)||e.ref.startsWith(`verse:${t}:`))}function w(e,t){return!e||!t?[]:e.insights.filter(e=>S.has(e.kind)&&C(e,t)).sort((e,t)=>Date.parse(t.lastAt)-Date.parse(e.lastAt))}var T={stack:`_stack_1bdwr_5`,muted:`_muted_1bdwr_11`,link:`_link_1bdwr_17`,veto:`_veto_1bdwr_33`,chip:`_chip_1bdwr_34`,timeline:`_timeline_1bdwr_40`,memo:`_memo_1bdwr_48`,memoDay:`_memoDay_1bdwr_62`,mark:`_mark_1bdwr_69`,memoBody:`_memoBody_1bdwr_92`,memoMove:`_memoMove_1bdwr_99`,memoWhy:`_memoWhy_1bdwr_106`,memoMeta:`_memoMeta_1bdwr_113`,standards:`_standards_1bdwr_157`,standardRule:`_standardRule_1bdwr_172`,standardMeta:`_standardMeta_1bdwr_178`,insights:`_insights_1bdwr_184`,insight:`_insight_1bdwr_184`,insightKind:`_insightKind_1bdwr_213`,insightSeverity:`_insightSeverity_1bdwr_220`,insightTitle:`_insightTitle_1bdwr_233`,insightMeta:`_insightMeta_1bdwr_240`,insightPlace:`_insightPlace_1bdwr_248`,scratchTag:`_scratchTag_1bdwr_254`,log:`_log_1bdwr_266`,facet:`_facet_1bdwr_274`,chipWrap:`_chipWrap_1bdwr_294`,chipDot:`_chipDot_1bdwr_321`,chipMore:`_chipMore_1bdwr_332`,chipPanel:`_chipPanel_1bdwr_336`,chipList:`_chipList_1bdwr_352`};export{x as a,c,_ as i,d as l,p as n,w as o,y as r,b as s,T as t,o as u};
|
|
2
|
-
//# sourceMappingURL=mind.module-gTGAuJt1.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{D as e,F as t,U as n,W as r,l as i}from"./global-oEl9Qj8u.js";var a=class extends Error{constructor(){super(`No mutation token held for this session yet.`),this.name=`MissingMutationTokenError`}};async function o(n,r){let o=e();if(!o)throw new a;let s=await i(n,r,o);return t(),s}async function s(){await o(`/api/fleet/pause`,{}),n(`dashboard-snapshot`),n(`control-snapshot`),n(`fleet`),n(`fleet-activity`)}async function c(){await o(`/api/fleet/resume`,{}),n(`dashboard-snapshot`),n(`control-snapshot`),n(`fleet`),n(`fleet-activity`)}async function l(e){await o(`/api/inbox/${encodeURIComponent(e)}/approve`,{}),n(`inbox`),n(`dashboard-snapshot`),n(`proposal-detail-${e}`),r(`inbox-list:`)}async function u(e){await o(`/api/inbox/${encodeURIComponent(e)}/reject`,{}),n(`inbox`),n(`dashboard-snapshot`),n(`proposal-detail-${e}`),r(`inbox-list:`)}export{c as i,s as n,u as r,l as t};
|
|
2
|
-
//# sourceMappingURL=mutations-C5S7okTW.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{C as e,g as t,m as n}from"./verse-ui-store-62DxpVHS.js";function r(e=null){n(e?{focusId:e}:{})}function i(e){return`c7-anchor-${e.replace(/[^A-Za-z0-9_-]/g,`-`)}`}function a(e){let t=document.getElementById(i(e));t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`center`,behavior:`smooth`})}function o(t,n=null){e(t),n&&requestAnimationFrame(()=>{document.getElementById(i(n))?a(n):requestAnimationFrame(()=>a(n))})}function s(e){t(e)}export{r as i,o as n,s as r,i as t};
|
|
2
|
-
//# sourceMappingURL=nav-NVtnuG7A.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,s as n}from"./index-BVxOlseC.js";var r=n(e(),1),i=t();function a(e){let t=null,n=null,a=()=>(n??=e().then(e=>t=e,e=>{throw n=null,e}),n),o=(0,r.lazy)(()=>a().then(e=>({default:e})));function s(e){let[n]=(0,r.useState)(()=>t);return n?(0,i.jsx)(n,{...e}):(0,i.jsx)(o,{...e})}return typeof window<`u`&&a().catch(()=>void 0),{Slot:s,ready:a}}function o(e){let t=null,n=null,i=()=>(n??=e().then(e=>t=e,e=>{throw n=null,e}),n);function a(){let[e,n]=(0,r.useState)(()=>({current:t}));return(0,r.useEffect)(()=>{if(e.current)return;let t=!0;return i().then(e=>{t&&n({current:e})},()=>void 0),()=>{t=!1}},[e]),e.current}return typeof window<`u`&&i().catch(()=>void 0),{ready:i,useLoaded:a}}export{o as n,a as t};
|
|
2
|
-
//# sourceMappingURL=preloaded-Cwf9rsnZ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preloaded-Cwf9rsnZ.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/preloaded.tsx"],"sourcesContent":["/**\n * routes/verse/shell/preloaded.tsx — chunks that start downloading when the\n * module DECLARING them evaluates, and render synchronously once they are in.\n *\n * Moved out of sections/ChatSection.tsx so the shell (guarded-action.tsx)\n * can keep its dialogs off the chat first-paint path the same way the Chat\n * section keeps its workspace, chat list and dialogs off it. A preloaded\n * dialog that has landed mounts in the same render that opens it, exactly as\n * a static import would; one opened in the few milliseconds before its chunk\n * lands shows a moment later.\n */\nimport { lazy, useEffect, useState, type ComponentType } from 'react';\n\n/**\n * A component in its own chunk whose download starts the moment the module\n * declaring it evaluates — not when React first renders it — so it streams in\n * parallel with the chat's first paint instead of after it.\n *\n * WHY (SPEC-310A §1: chat first-paint critical JS ≤ 350 KB, measured by\n * scripts/check-first-paint-budget.mjs). React + react-dom alone are ~220 KB\n * of that; the chat list, the transcript, the composer and the markdown\n * renderer were another ~290 KB in this chunk. The section's frame (its\n * grid, the banners, every mutation and key handler) paints from this chunk;\n * the workspace and the chat list paint a beat later from theirs, over\n * skeletons in their own shape so nothing jumps.\n *\n * Once the module is in, every later mount renders it synchronously (no\n * Suspense flash when you come back to Chat). Which of the two a mount uses\n * is fixed for that mount's life: swapping the lazy wrapper for the loaded\n * component mid-life would remount the subtree and drop its state — the\n * composer's draft, the transcript's scroll.\n */\nexport function preloadedLazy<P extends object>(load: () => Promise<ComponentType<P>>): { Slot: ComponentType<P>; ready: () => Promise<ComponentType<P>> } {\n let loaded: ComponentType<P> | null = null;\n let pending: Promise<ComponentType<P>> | null = null;\n const ready = (): Promise<ComponentType<P>> => {\n // A failed download is not cached: the next mount (or retry) asks again.\n pending ??= load().then((c) => (loaded = c), (err: unknown) => { pending = null; throw err; });\n return pending;\n };\n const Lazy = lazy(() => ready().then((c) => ({ default: c })));\n function Slot(props: P) {\n const [Ready] = useState<ComponentType<P> | null>(() => loaded);\n return Ready ? <Ready {...props} /> : <Lazy {...props} />;\n }\n if (typeof window !== 'undefined') void ready().catch(() => undefined);\n return { Slot, ready };\n}\n\n/**\n * A module (not a component) on the same terms as preloadedLazy: fetched when\n * the declaring module evaluates, read synchronously once in. useLoaded() re-renders\n * its caller once, when it lands; a failed load leaves it null (the values it\n * would have computed stay empty) and is retried on the next mount.\n */\nexport function preloadedModule<M>(load: () => Promise<M>): { ready: () => Promise<M>; useLoaded: () => M | null } {\n let loaded: M | null = null;\n let pending: Promise<M> | null = null;\n const ready = (): Promise<M> => {\n pending ??= load().then((m) => (loaded = m), (err: unknown) => { pending = null; throw err; });\n return pending;\n };\n function useLoaded(): M | null {\n const [mod, setMod] = useState<{ current: M | null }>(() => ({ current: loaded }));\n useEffect(() => {\n if (mod.current) return undefined;\n let live = true;\n ready().then((m) => { if (live) setMod({ current: m }); }, () => undefined);\n return () => { live = false; };\n }, [mod]);\n return mod.current;\n }\n if (typeof window !== 'undefined') void ready().catch(() => undefined);\n return { ready, useLoaded };\n}\n"],"mappings":"2EAgCA,SAAgB,EAAgC,EAA2G,CACzJ,IAAI,EAAkC,KAClC,EAA4C,KAC1C,OAEJ,IAAY,EAAK,CAAC,CAAC,KAAM,GAAO,EAAS,EAAK,GAAiB,CAAkB,KAAhB,GAAU,KAAY,CAAK,CAAC,EACtF,GAEH,GAAA,EAAO,EAAA,KAAA,KAAW,EAAM,CAAC,CAAC,KAAM,IAAO,CAAE,QAAS,CAAE,EAAE,CAAC,EAC7D,SAAS,EAAK,EAAU,CACtB,GAAM,CAAC,IAAA,EAAS,EAAA,SAAA,KAAwC,CAAM,EAC9D,OAAO,GAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,GAAI,CAAQ,CAAA,GAAI,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,CAAQ,CAAA,CAC1D,CAEA,OADI,OAAO,OAAW,KAAa,EAAW,CAAC,CAAC,UAAY,IAAA,EAAS,EAC9D,CAAE,OAAM,OAAM,CACvB,CAQA,SAAgB,EAAmB,EAAgF,CACjH,IAAI,EAAmB,KACnB,EAA6B,KAC3B,OACJ,IAAY,EAAK,CAAC,CAAC,KAAM,GAAO,EAAS,EAAK,GAAiB,CAAkB,KAAhB,GAAU,KAAY,CAAK,CAAC,EACtF,GAET,SAAS,GAAsB,CAC7B,GAAM,CAAC,EAAK,IAAA,EAAU,EAAA,SAAA,MAAuC,CAAE,QAAS,CAAO,EAAE,EAOjF,OANA,EAAA,EAAA,UAAA,KAAgB,CACd,GAAI,EAAI,QAAS,OACjB,IAAI,EAAO,GAEX,OADA,EAAM,CAAC,CAAC,KAAM,GAAM,CAAM,GAAM,EAAO,CAAE,QAAS,CAAE,CAAC,CAAG,MAAS,IAAA,EAAS,MAC7D,CAAE,EAAO,EAAO,CAC/B,EAAG,CAAC,CAAG,CAAC,EACD,EAAI,OACb,CAEA,OADI,OAAO,OAAW,KAAa,EAAW,CAAC,CAAC,UAAY,IAAA,EAAS,EAC9D,CAAE,QAAO,WAAU,CAC5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./global-oEl9Qj8u.js";import"./focus-trap-HtcoXeEq.js";import"./Dialog-BS9Dxi3G.js";import"./Epistemic-dhvDTwAZ.js";import"./StatusBadge-HCZp416_.js";import"./RouteErrorBoundary-DYtwc2ja.js";import"./RefreshIndicator-CMwSCiz5.js";import"./VerseConsoleApp-DTjDpGCd.js";import"./Segmented-BE53BenI.js";import"./Tag-DH15CUJp.js";import"./Button-HHXgoXGr.js";import"./EmptyState-BqR5YAmf.js";import"./Meter-DNeocJnD.js";import"./Slider-BypUWjpH.js";import"./Switch-iveI-8NY.js";import"./Select-BwSGkHCS.js";import"./Input-B5dmGLZx.js";import"./Sheet-DVP2Mgy6.js";
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,s as t}from"./index-BVxOlseC.js";import{D as n,F as r,M as i,O as a,U as o,l as s,o as c}from"./global-oEl9Qj8u.js";import{c as l,h as u,m as d,p as f,u as p}from"./workbench-types-DzN-5trg.js";import{n as m,r as h}from"./VerseConsoleApp-DTjDpGCd.js";async function g(e){try{let t=await e.json();return{detail:typeof t.error==`string`&&t.error?t.error:null,code:typeof t.code==`string`&&t.code?t.code:null}}catch{return{detail:null,code:null}}}async function _(e,t){let n=await fetch(e,{method:`GET`,credentials:`same-origin`,headers:{"x-ashlr-read-client":a()},...t?{signal:t}:{}});if(n.status===401)throw i(),new c(`Read session expired.`,401,e);if(!n.ok){let{detail:t,code:r}=await g(n);throw new c(`GET ${e} failed (HTTP ${n.status})${t?`: ${t}`:``}.`,n.status,e,t,r)}return await n.json()}async function v(e,t,i){let a=n();if(!a)throw new h;let o=await s(e,t,a,i);return r(),o}var y=encodeURIComponent;function b(e,t){return _(`${d}/${y(e)}`,t)}async function x(e,t){let n=await v(`${d}/${y(e)}`,t);return t.model!==void 0&&o(m),n}function S(e){return _(u,e)}function C(e){return v(u,e)}function w(e,t,n){return v(`${l}/${y(e)}`,t,n)}function T(e,t){return v(`${l}/${y(e)}/${y(t)}/delete`,{})}function E(e,t){return _(`${f}/${y(e)}`,t)}function D(e,t,n={}){return v(`${f}/${y(e)}`,n.sendNow?{text:t,sendNow:!0}:{text:t})}function O(e,t){return v(`${f}/${y(e)}/${y(t)}/delete`,{})}function k(e,t){return v(`${f}/${y(e)}/${y(t)}/send`,{})}function A(e,t,n){let r=new URLSearchParams({sessionId:e,q:t});return _(`${p}?${r.toString()}`,n)}var j=t(e(),1),M=[`collapsed`,`expanded`,`hidden`],N={collapsed:`Collapsed`,expanded:`Expanded`,hidden:`Hidden`},P=`ashlr.verse.reasoning.v1`,F=`collapsed`;function I(e){return typeof e==`string`&&M.includes(e)}function L(){try{let e=localStorage.getItem(P);return I(e)?e:F}catch{return F}}var R=null,z=new Set;function B(){return R===null&&(R=L()),R}function V(e){if(I(e)&&e!==B()){R=e;try{localStorage.setItem(P,e)}catch{}for(let e of[...z])e()}}function H(e){return z.add(e),()=>z.delete(e)}function U(){return(0,j.useSyncExternalStore)(H,B,B)}export{T as a,E as c,A as d,k as f,w as h,U as i,b as l,x as m,N as n,D as o,C as p,V as r,S as s,M as t,O as u};
|
|
2
|
-
//# sourceMappingURL=reasoning-pref-BUcFF_5G.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as e,r as t,v as n,x as r}from"./verse-model-DyCwZF-M.js";import{g as i,y as a}from"./format-BkWdOQDL.js";var o={ready:`ready`,tight:`tight`,exhausted:`blocked`,"signed-out":`blocked`,unknown:`unread`};function s(e,t=Date.now()){let n=a(e,t);return n===null?null:`resets ${n}`}function c(e,t){let n=`${e}_`,i=t;for(;i.startsWith(n)&&i.length>n.length;)i=i.slice(n.length);return r(i)}function l(e,t,n){let r=t.resetDescription??(t.resetsAt===null?null:s(t.resetsAt,n));return{id:t.id,label:c(e,t.id),usedPercent:t.limitReached||!t.measured?null:t.usedPercent,limitReached:t.limitReached,resetText:r,resetsAt:t.resetsAt}}function u(e,t){let n=typeof e.usedPercent==`number`&&Number.isFinite(e.usedPercent)?Math.max(0,Math.min(100,e.usedPercent)):null,i=n!==null&&n>=100;return{id:e.id,label:r(e.id),usedPercent:i?null:n,limitReached:i,resetText:e.resetsAt===null?null:s(e.resetsAt,t),resetsAt:e.resetsAt}}function d(e){if(e===null)return{phrase:null,title:null};if(e.unlimited)return{phrase:`credits unlimited`,title:null};if(!e.hasCredits)return{phrase:null,title:null};if(e.balance===null)return{phrase:`credits available`,title:null};let t=Number.parseFloat(e.balance);return Number.isFinite(t)?{phrase:`${t.toFixed(2)} credits left`,title:e.balance}:{phrase:`credits available`,title:e.balance}}function f(n){let r=e(n),i=n.health.state===`ready`,a=r===null?i?`ready`:`unread`:`blocked`;return{kind:`local`,plan:null,cls:a,word:t[a],summary:r??(i?`runs on this machine`:`readiness not reported`),binding:null,others:[],credits:null,creditsTitle:null,notes:n.health.summary===null?[]:[n.health.summary],evidenceSource:null,observedAt:n.health.observedAt,extended:!1}}function p(r,i){let a=n(r),o=r.health.windows.map(e=>u(e,i)),s=o.find(e=>e.limitReached)??null,c=o.filter(e=>e.usedPercent!==null),l=c.length===0?null:c.reduce((e,t)=>(t.usedPercent??0)>(e.usedPercent??0)?t:e),d=s??l,f=e(r),p=f===null?a.cls:`blocked`;return{kind:`subscription`,plan:null,cls:p,word:t[p],summary:f??a.text,binding:d,others:d===null?o:o.filter(e=>e.id!==d.id),credits:null,creditsTitle:null,notes:[],evidenceSource:null,observedAt:r.health.observedAt,extended:!1}}function m(n,r=Date.now()){if(n.engine===`local`)return f(n);let a=n.capacity;if(a===void 0)return p(n,r);let s=a.windows.map(e=>l(n.engine,e,r)),c=a.binding,u=c===null?null:s.find(e=>e.id===c.id)??l(n.engine,c,r),m=u===null?s:s.filter(e=>e.id!==u.id),h=d(a.credits),g=e(n),_=g===null?o[a.usability]:`blocked`,v;return v=a.usability===`signed-out`?`signed out — reconnect this account`:g===null?u===null?`no capacity reading`:u.limitReached?a.usability===`tight`&&h.phrase!==null?`${u.label} limit reached · credits still spendable`:`${u.label} limit reached`:u.usedPercent===null?`no capacity reading`:`${i(u.usedPercent)} of ${u.label} used`:g,{kind:`subscription`,plan:a.planType,cls:_,word:t[_],summary:v,binding:u,others:m,credits:h.phrase,creditsTitle:h.title,notes:[...a.notes],evidenceSource:a.evidenceSource,observedAt:a.observedAt??n.health.observedAt,extended:!0}}function h(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))}function g(e){return e.limitReached||e.usedPercent!==null&&e.usedPercent>=100}function _(e,t){let n=h(t)?t:null,r=(e.binding===null?e.others:[e.binding,...e.others]).filter(g);if(r.length>0){if(r.some(e=>!h(e.resetsAt)))return null;let e=r.map(e=>e.resetsAt);return n!==null&&e.push(n),e.reduce((e,t)=>Date.parse(t)>Date.parse(e)?t:e)}return n===null?e.binding!==null&&h(e.binding.resetsAt)?e.binding.resetsAt:null:n}function v(e,t){let n=[e.label];return t.plan!==null&&n.push(t.plan),n.push(t.word),n.push(t.summary),t.credits!==null&&n.push(t.credits),t.binding?.resetText!=null&&n.push(t.binding.resetText),n.join(` · `)}function y(e){return e===`tight`||e===`blocked`}export{y as i,m as n,v as r,_ as t};
|
|
2
|
-
//# sourceMappingURL=seat-subscription-B-f9ViU2.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,s as n}from"./index-BVxOlseC.js";var r=n(e(),1),i=t(),a=(0,r.createContext)(!0);function o({visible:e,children:t}){let n=(0,r.useContext)(a);return(0,i.jsx)(a.Provider,{value:n&&e,children:t})}function s(){return(0,r.useContext)(a)}function c(){return typeof document>`u`||document.visibilityState!==`hidden`}function l(e){return typeof document>`u`?()=>{}:(document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e))}function u(){return(0,r.useSyncExternalStore)(l,c,()=>!0)}var d=2e3;function f(e,t,n={}){let i=s(),a=u(),o=i&&a,c=(n.enabled??!0)&&o,l=n.refreshOnShow??!0,f=Math.max(d,Number.isFinite(t)?t:d),p=(0,r.useRef)(e);p.current=e;let m=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=m.current;if(m.current=o,!c)return;e===!1&&l&&p.current();let t=setInterval(()=>p.current(),f);return()=>clearInterval(t)},[c,o,f,l])}export{s as i,o as n,f as r,d as t};
|
|
2
|
-
//# sourceMappingURL=section-visibility-Yctxu-if.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"section-visibility-Yctxu-if.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/section-visibility.tsx"],"sourcesContent":["/**\n * routes/verse/shell/section-visibility.tsx — \"is this surface on screen?\"\n * for the keep-alive shell (unit C0; SPEC-310C §1).\n *\n * 3.10 keeps the last three surfaces MOUNTED (hidden with `hidden` + `inert`)\n * so switching back is instant and keeps scroll, selection and filters. The\n * price is that a hidden surface's polls keep running: Fleet's live swimlane\n * polling every few seconds behind a chat the operator is reading. The shell\n * (C1) wraps each mounted surface in <SectionVisibilityProvider visible>, and\n * every surface polls through usePollWhileVisible — so a hidden surface, or a\n * hidden window, costs nothing.\n *\n * Outside any provider a section counts as visible: components rendered on\n * their own (tests, the legacy sections before C1 lands) behave as today.\n */\nimport { createContext, useContext, useEffect, useRef, useSyncExternalStore, type ReactNode } from 'react';\n\nconst SectionVisibleContext = createContext<boolean>(true);\n\nexport function SectionVisibilityProvider({ visible, children }: { visible: boolean; children: ReactNode }) {\n // A hidden surface nested in a visible one is hidden; a visible one nested\n // in a hidden one is hidden too.\n const parent = useContext(SectionVisibleContext);\n return <SectionVisibleContext.Provider value={parent && visible}>{children}</SectionVisibleContext.Provider>;\n}\n\n/** True while the surface this component lives in is the one on screen. */\nexport function useSectionVisible(): boolean {\n return useContext(SectionVisibleContext);\n}\n\nfunction documentVisible(): boolean {\n return typeof document === 'undefined' || document.visibilityState !== 'hidden';\n}\n\nfunction subscribeDocument(onChange: () => void): () => void {\n if (typeof document === 'undefined') return () => {};\n document.addEventListener('visibilitychange', onChange);\n return () => document.removeEventListener('visibilitychange', onChange);\n}\n\n/** True while the window itself is visible (not minimised, not a background tab). */\nexport function useDocumentVisible(): boolean {\n return useSyncExternalStore(subscribeDocument, documentVisible, () => true);\n}\n\n/**\n * The performance budget's floor (SPEC-310A §0: \"no new polling faster than\n * 2 s\"). Enforced here, in the one place surfaces poll from, rather than by\n * review.\n */\nexport const MIN_POLL_INTERVAL_MS = 2_000;\n\nexport interface PollOptions {\n /** Poll at all (e.g. only while a panel is expanded). Default true. */\n enabled?: boolean;\n /**\n * Tick once as soon as the surface becomes visible again, so data that went\n * stale while it was hidden is refreshed on sight instead of one interval\n * later. Default true. (The first mount is the caller's own fetch.)\n */\n refreshOnShow?: boolean;\n}\n\n/**\n * Run `tick` every `intervalMs` (at least MIN_POLL_INTERVAL_MS) while the\n * section AND the document are visible. The latest `tick` is always the one\n * called, so passing an inline closure does not restart the interval.\n */\nexport function usePollWhileVisible(tick: () => void, intervalMs: number, options: PollOptions = {}): void {\n const sectionVisible = useSectionVisible();\n const docVisible = useDocumentVisible();\n const visible = sectionVisible && docVisible;\n const active = (options.enabled ?? true) && visible;\n const refreshOnShow = options.refreshOnShow ?? true;\n const every = Math.max(MIN_POLL_INTERVAL_MS, Number.isFinite(intervalMs) ? intervalMs : MIN_POLL_INTERVAL_MS);\n\n const tickRef = useRef(tick);\n tickRef.current = tick;\n // VISIBILITY history, not activity: turning `enabled` on is the caller's\n // own decision (and it fetches for itself); coming back into view is not.\n const wasVisible = useRef<boolean | null>(null);\n\n useEffect(() => {\n const previouslyVisible = wasVisible.current;\n wasVisible.current = visible;\n if (!active) return;\n // Back in view after being hidden: catch up now rather than one interval late.\n if (previouslyVisible === false && refreshOnShow) tickRef.current();\n const id = setInterval(() => tickRef.current(), every);\n return () => clearInterval(id);\n }, [active, visible, every, refreshOnShow]);\n}\n"],"mappings":"2EAiBM,GAAA,EAAwB,EAAA,cAAA,CAAuB,EAAI,EAEzD,SAAgB,EAA0B,CAAE,UAAS,YAAuD,CAG1G,IAAM,GAAA,EAAS,EAAA,WAAA,CAAW,CAAqB,EAC/C,OAAO,EAAA,EAAA,IAAA,CAAC,EAAsB,SAAvB,CAAgC,MAAO,GAAU,EAAU,UAAyC,CAAA,CAC7G,CAGA,SAAgB,GAA6B,CAC3C,OAAA,EAAO,EAAA,WAAA,CAAW,CAAqB,CACzC,CAEA,SAAS,GAA2B,CAClC,OAAO,OAAO,SAAa,KAAe,SAAS,kBAAoB,QACzE,CAEA,SAAS,EAAkB,EAAkC,CAG3D,OAFI,OAAO,SAAa,QAA0B,CAAC,GACnD,SAAS,iBAAiB,mBAAoB,CAAQ,MACzC,SAAS,oBAAoB,mBAAoB,CAAQ,EACxE,CAGA,SAAgB,GAA8B,CAC5C,OAAA,EAAO,EAAA,qBAAA,CAAqB,EAAmB,MAAuB,EAAI,CAC5E,CAOA,IAAa,EAAuB,IAkBpC,SAAgB,EAAoB,EAAkB,EAAoB,EAAuB,CAAC,EAAS,CACzG,IAAM,EAAiB,EAAkB,EACnC,EAAa,EAAmB,EAChC,EAAU,GAAkB,EAC5B,GAAU,EAAQ,SAAW,KAAS,EACtC,EAAgB,EAAQ,eAAiB,GACzC,EAAQ,KAAK,IAAI,EAAsB,OAAO,SAAS,CAAU,EAAI,EAAa,CAAoB,EAEtG,GAAA,EAAU,EAAA,OAAA,CAAO,CAAI,EAC3B,EAAQ,QAAU,EAGlB,IAAM,GAAA,EAAa,EAAA,OAAA,CAAuB,IAAI,GAE9C,EAAA,EAAA,UAAA,KAAgB,CACd,IAAM,EAAoB,EAAW,QAErC,GADA,EAAW,QAAU,EACjB,CAAC,EAAQ,OAET,IAAsB,IAAS,GAAe,EAAQ,QAAQ,EAClE,IAAM,EAAK,gBAAkB,EAAQ,QAAQ,EAAG,CAAK,EACrD,UAAa,cAAc,CAAE,CAC/B,EAAG,CAAC,EAAQ,EAAS,EAAO,CAAa,CAAC,CAC5C"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PreviewPane-BS-CleCd.js","assets/index-BVxOlseC.js","assets/global-oEl9Qj8u.js","assets/global-BlI2BYa1.css","assets/workbench-types-DzN-5trg.js","assets/viewport-nTubFCwf.js","assets/section-visibility-Yctxu-if.js","assets/MessageMarkdown-BauY8ZTY.js","assets/MessageMarkdown-Cgh5f1-Q.css","assets/Segmented-BE53BenI.js","assets/Segmented-BnjHbKzH.css","assets/Button-HHXgoXGr.js","assets/Button-DrnKsvnQ.css","assets/icons-DEQa2rTx.js","assets/icon-base-DvM1eI5V.js","assets/EmptyState-BqR5YAmf.js","assets/EmptyState-B3YUPGaa.css","assets/terminal-icons-D2xe-aM1.js","assets/pane-chrome.module-D7o-fVd0.js","assets/pane-chrome-8JmEhHVD.css","assets/PreviewPane-DoMsJSG3.css","assets/TerminalPane-MQT-veKZ.js","assets/command-catalog-Bb_PxC5w.js","assets/verse-model-DyCwZF-M.js","assets/VerseConsoleApp-DTjDpGCd.js","assets/RouteErrorBoundary-DYtwc2ja.js","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/guarded-action-OzqcPjmh.js","assets/preloaded-Cwf9rsnZ.js","assets/verse-ui-store-62DxpVHS.js","assets/dock-store-B2vlxqPu.js","assets/composer-keys-su0g1h9o.js","assets/command-bus-xYZoK9nQ.js","assets/VerseConsoleApp-Cxqr-3qc.css","assets/compaction-point-VL9oegWS.js","assets/ActionMenu-FxXeRbPx.js","assets/ActionMenu-DPjsLU1g.css","assets/TerminalPane-BwfMbnJz.css","assets/BranchBar-CLsvOcyK.js","assets/Dialog-BS9Dxi3G.js","assets/focus-trap-HtcoXeEq.js","assets/Dialog-tQ8kFulD.css","assets/MutationTokenDialog-mxrw0Yvy.js","assets/MutationTokenDialog-CrfJ0PdD.css","assets/git-model-bk_RXh3y.js","assets/use-token-gate-DqrSXdX6.js","assets/format-BkWdOQDL.js","assets/format-DKrNjdwD.js","assets/BranchBar-BZNQ50YE.css","assets/DiffPane-TOmUf3b2.js","assets/highlight-CMCZK9jW.js","assets/line-diff-B5Eonif2.js","assets/DiffPane-BAvvbBsf.css","assets/SessionInsightChip-CxlSyueJ.js","assets/nav-NVtnuG7A.js","assets/surface-data-DTI7LjvH.js","assets/control-queries-CmgBgKV7.js","assets/mutations-C5S7okTW.js","assets/mind.module-gTGAuJt1.js","assets/colors-BZ3a9wFf.js","assets/workspace-model-CbhdPhei.js","assets/calendar-day-BxBYHfX1.js","assets/mind-B9PzLcl0.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e,n as t,s as n,t as r}from"./index-BVxOlseC.js";import{t as i}from"./Button-HHXgoXGr.js";import{t as a}from"./EmptyState-BqR5YAmf.js";var o=n(e(),1),s=t(),c={"branch-bar":{path:`git/BranchBar.tsx`,exportName:`BranchBar`,owner:`C5`,kind:`inline`,label:`Branch bar`},"diff-pane":{path:`git/DiffPane.tsx`,exportName:`DiffPane`,owner:`C5`,kind:`pane`,label:`Review`},"terminal-pane":{path:`dock/terminal/TerminalPane.tsx`,exportName:`TerminalPane`,owner:`C4`,kind:`pane`,label:`Terminal`},"preview-pane":{path:`dock/preview/PreviewPane.tsx`,exportName:`PreviewPane`,owner:`C4`,kind:`pane`,label:`Preview`},"session-insight-chip":{path:`mind/SessionInsightChip.tsx`,exportName:`SessionInsightChip`,owner:`C7`,kind:`inline`,label:`Insight`}};Object.keys(c);var l=Object.assign({"../dock/preview/PreviewPane.tsx":()=>r(()=>import(`./PreviewPane-BS-CleCd.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])),"../dock/terminal/TerminalPane.tsx":()=>r(()=>import(`./TerminalPane-MQT-veKZ.js`),__vite__mapDeps([21,1,2,3,22,4,5,6,23,24,25,26,27,28,29,30,31,32,14,33,34,11,12,35,36,13,15,16,17,18,19,37])),"../git/BranchBar.tsx":()=>r(()=>import(`./BranchBar-CLsvOcyK.js`),__vite__mapDeps([38,1,39,40,41,42,2,3,43,5,32,6,44,24,25,26,22,4,27,28,29,30,31,14,33,11,12,13,45,46,47,23,34,48])),"../git/DiffPane.tsx":()=>r(()=>import(`./DiffPane-TOmUf3b2.js`),__vite__mapDeps([49,1,2,3,50,9,10,44,24,25,26,22,4,27,28,5,29,30,31,32,6,14,33,11,12,51,13,15,16,18,19,52])),"../mind/SessionInsightChip.tsx":()=>r(()=>import(`./SessionInsightChip-CxlSyueJ.js`),__vite__mapDeps([53,1,2,3,46,47,24,25,26,22,4,27,28,5,29,30,31,32,6,14,33,23,34,54,55,56,57,58,59,60,61,62]))});function u(e,t){return t[`../${c[e].path}`]}function d(e,t=l){return u(e,t)!==void 0}function f(e,t=l){let n=u(e,t);if(!n)return null;let{exportName:r}=c[e];return(0,o.lazy)(async()=>{let t=(await n())[r];if(typeof t!=`function`&&(typeof t!=`object`||!t))throw Error(`${c[e].path} exports no ${r}`);return{default:t}})}var p=new Map;function m(e){return p.has(e)||p.set(e,f(e)),p.get(e)}var h=class extends o.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(e,t){console.error(`[verse] ${this.props.label} failed`,e,t.componentStack)}render(){return this.state.failed?this.props.kind===`inline`?null:(0,s.jsx)(g,{label:this.props.label,onRetry:this.props.onRetry}):this.props.children}};function g({label:e,onRetry:t}){return(0,s.jsx)(a,{compact:!0,tone:`error`,title:`${e} could not load`,body:`The rest of the chat still works.`,action:(0,s.jsx)(i,{variant:`subtle`,size:`sm`,onClick:t,children:`Try again`})})}function _({id:e,props:t,resolve:n=m,forget:r=e=>p.delete(e)}){let[i,a]=(0,o.useState)(0),l=n(e);if(!l)return null;let{kind:u,label:d}=c[e];return(0,s.jsx)(h,{kind:u,label:d,onRetry:()=>{r(e),a(e=>e+1)},children:(0,s.jsx)(o.Suspense,{fallback:null,children:(0,s.jsx)(l,{...t})})},i)}function v(e){return(0,s.jsx)(_,{id:`branch-bar`,props:e})}function y(e){return(0,s.jsx)(_,{id:`diff-pane`,props:e})}function b(e){return(0,s.jsx)(_,{id:`terminal-pane`,props:e})}function x(e){return(0,s.jsx)(_,{id:`preview-pane`,props:e})}function S(e){return(0,s.jsx)(_,{id:`session-insight-chip`,props:e})}export{b as a,S as i,y as n,d as o,x as r,v as t};
|
|
3
|
-
//# sourceMappingURL=slots-BhP8b8tf.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{D as e,F as t,U as n,c as r,l as i,o as a}from"./global-oEl9Qj8u.js";import{F as o}from"./VerseConsoleApp-DTjDpGCd.js";import{n as s}from"./control-queries-CmgBgKV7.js";var c=`/api/verse/authority`,l=`/api/verse/authority/draft`,u=`/api/verse/fleet/live`,d=`/api/verse/leader`,f=`/api/verse/learning`,p=`/api/verse/fleet/history?days=90`,m=`/api/reasoning/digest?days=30`,h=`/api/verse/budget/history?days=8`,g=Object.freeze({authority:`verse-authority`,authorityDraft:`verse-authority-draft`,fleetLive:`verse-fleet-live`,leader:`verse-leader`,learning:`verse-learning`,fleetHistory:`verse-fleet-history-90d`,reasoningDigest:`verse-reasoning-digest-30d`,seatHistory:`verse-seat-history-8d`});function _(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var v={authority(e){return _(e)&&e.v===1&&typeof e.switch==`string`&&_(e.grant)?e:null},draft(e){return _(e)&&_(e.payload)&&typeof e.digest==`string`?e:null},fleetLive(e){return _(e)&&e.v===1&&Array.isArray(e.runs)&&Array.isArray(e.repos)&&Array.isArray(e.lanes)&&_(e.summary)?e:null},leader(e){return _(e)&&e.v===1&&Array.isArray(e.timeline)&&Array.isArray(e.actions)&&_(e.hitRate)?e:null},learning(e){return _(e)&&e.v===1&&Array.isArray(e.versions)&&Array.isArray(e.experiments)?e:null},activity(e){return _(e)&&Array.isArray(e.needsYou)&&Array.isArray(e.running)&&_(e.sources)?e:null},fleetHistory(e){return _(e)&&Array.isArray(e.days)&&_(e.sources)&&_(e.funnel)?e:null},reasoningDigest(e){return _(e)&&Array.isArray(e.insights)&&Array.isArray(e.trends)&&_(e.totals)?e:null},seatHistory(e){return _(e)&&e.v===1&&Array.isArray(e.series)?e:null}};function y(e,t){return t instanceof a?t.status===404?`${e} is not in this build yet, so this card has no source.`:t.status===503?`${e} failed to load on the server.`:`${e} answered HTTP ${t.status}.`:`${e} could not be reached.`}function b(e,t,n,i){return{key:e,fetch:async e=>{try{let a=i(await r(t,e));return a===null?{value:null,available:!0,reason:`${n} answered in a shape this version does not recognise, so nothing is shown rather than guessed.`}:{value:a,available:!0,reason:null}}catch(e){if(e instanceof a&&e.status===401||e instanceof DOMException&&e.name===`AbortError`)throw e;return{value:null,available:!1,reason:y(n,e)}}}}}var x=b(g.authority,c,`The authority service`,v.authority),S=b(g.authorityDraft,l,`The grant draft`,v.draft),C=b(g.fleetLive,u,`The live fleet view`,v.fleetLive),w=b(g.leader,d,`The Leader`,v.leader),T=b(g.learning,f,`Self-improvement`,v.learning),E=b(g.fleetHistory,p,`Fleet history`,v.fleetHistory),D=b(g.reasoningDigest,m,`The reasoning digest`,v.reasoningDigest),O=b(g.seatHistory,h,`Seat history`,v.seatHistory);async function k(n,r){let a=e();if(!a)throw new s;let o=await i(n,r,a);return t(),o}async function A(e){let t=await k(c,e);return n(g.authority),n(g.fleetLive),o(),(e.action===`grant`||e.action===`re-approve`)&&n(g.authorityDraft),v.authority(t)}async function j(e){let t=await k(u,e);return n(g.fleetLive),o(),t}async function M(e){let t=await k(d,e);return n(g.leader),o(),t}async function N(e,t){if(!/^\/api\/[^\s\\]*$/.test(e)||e.startsWith(`//`)||e.includes(`..`))throw Error(`That action points outside this app, so it was not sent.`);let r=await k(e,t);return o(),n(g.fleetLive),n(g.leader),n(g.authority),r}export{w as a,j as c,D as d,O as f,C as i,M as l,x as n,T as o,E as r,A as s,S as t,N as u};
|
|
2
|
-
//# sourceMappingURL=surface-data-DTI7LjvH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"surface-data-DTI7LjvH.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/command/surface-data.ts"],"sourcesContent":["/**\n * routes/verse/command/surface-data.ts — every read and write behind the\n * four 3.10 surfaces (Command, Fleet, Growth, Mind), in one place (unit C7).\n *\n * GET /api/verse/authority AuthorityStatusV1 (B-U1)\n * GET /api/verse/authority/draft AuthorityGrantDraft (B-U1)\n * POST /api/verse/authority AuthorityActionRequest\n * GET /api/verse/fleet/live FleetLiveSnapshotV1 (B-U5)\n * POST /api/verse/fleet/live FleetLiveActionRequest\n * GET /api/verse/leader LeaderStateV1 (B-U8)\n * POST /api/verse/leader LeaderActionRequest\n * GET /api/verse/learning LearningStateV1 (B-U9)\n * GET /api/verse/activity VerseActivityResponse (C1 — read through\n * the shell's ONE useActivity poll, never a\n * second loop from here)\n * GET /api/verse/fleet/history FleetHistoryResponse (A8)\n * GET /api/reasoning/digest ReasoningDigest (A7)\n * GET /api/verse/budget BudgetView (A9 — budget-queries.ts)\n * GET /api/verse/budget/history CapacityHistoryResponse (3.10.1 — recorded\n * seat window history for the burn-downs)\n * GET /api/models per-model ROI (data/queries.ts)\n *\n * WHY every read is OPTIONAL: Track B's modules land in parallel with these\n * surfaces (SPEC-310BC-COORD), and C0's mount answers 404 for a family that\n * has not landed. A 404 is \"this card has no source yet\", never \"Command is\n * broken\" — so a read resolves to `{ value: null, available: false, reason }`\n * and the card renders a designed not-available state from `reason`. A body\n * this client cannot narrow is treated the same way (available, but nothing\n * shown rather than guessed). 401 and aborts still propagate: an expired\n * read session is the whole app's state, not one card's.\n *\n * Writes pull the held mutation token (VerseControlLockedError without one —\n * the surfaces route every write through useGuardedAction, which opens the\n * token dialog first) and invalidate exactly the keys they change.\n */\nimport { ApiError, apiGet, apiPost } from '../../../data/client.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { invalidate } from '../../../data/cache.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { VerseControlLockedError } from '../autonomy/control-queries.js';\nimport { refreshActivity } from '../shell/useActivity.js';\nimport type { OptionalFleetRead } from '../autonomy/fleet-contract.js';\nimport type {\n AuthorityActionRequest,\n AuthorityGrantDraft,\n AuthorityStatusV1,\n} from '../../../../core/authority/types.js';\nimport type { FleetLiveActionRequest, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { LeaderActionRequest, LeaderStateV1 } from '../../../../core/vision/leader-types.js';\nimport type { LearningStateV1 } from '../../../../core/learn/harness-types.js';\nimport type { VerseActivityResponse } from '../../../../core/verse/workbench-types.js';\nimport type { FleetHistoryResponse } from '../../../../core/verse/fleet-history-types.js';\nimport type { ReasoningDigest } from '../../../../core/reasoning/types.js';\nimport type { CapacityHistoryResponse } from '../../../../core/routing/capacity-history-types.js';\n\n/** A read that is allowed to be absent (the autonomy folder's shape, reused). */\nexport type OptionalRead<T> = OptionalFleetRead<T>;\n\nexport const AUTHORITY_PATH = '/api/verse/authority';\nexport const AUTHORITY_DRAFT_PATH = '/api/verse/authority/draft';\nexport const FLEET_LIVE_PATH = '/api/verse/fleet/live';\nexport const LEADER_PATH = '/api/verse/leader';\nexport const LEARNING_PATH = '/api/verse/learning';\nexport const FLEET_HISTORY_PATH = '/api/verse/fleet/history?days=90';\nexport const REASONING_DIGEST_PATH = '/api/reasoning/digest?days=30';\n/** Eight days: the whole weekly window plus the day before it opened. */\nexport const SEAT_HISTORY_PATH = '/api/verse/budget/history?days=8';\n\nexport const SURFACE_KEYS = Object.freeze({\n authority: 'verse-authority',\n authorityDraft: 'verse-authority-draft',\n fleetLive: 'verse-fleet-live',\n leader: 'verse-leader',\n learning: 'verse-learning',\n fleetHistory: 'verse-fleet-history-90d',\n reasoningDigest: 'verse-reasoning-digest-30d',\n seatHistory: 'verse-seat-history-8d',\n});\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Structural guards: just enough to know the body is the contract's shape\n * (version tag + the arrays the cards iterate), so a mismatched server can\n * never crash a render with `undefined.map`. Field-level honesty (null =\n * unknown) is the cards' job.\n */\nexport const narrow = {\n authority(raw: unknown): AuthorityStatusV1 | null {\n return isRecord(raw) && raw['v'] === 1 && typeof raw['switch'] === 'string' && isRecord(raw['grant']) ? (raw as unknown as AuthorityStatusV1) : null;\n },\n draft(raw: unknown): AuthorityGrantDraft | null {\n return isRecord(raw) && isRecord(raw['payload']) && typeof raw['digest'] === 'string' ? (raw as unknown as AuthorityGrantDraft) : null;\n },\n fleetLive(raw: unknown): FleetLiveSnapshotV1 | null {\n return isRecord(raw) && raw['v'] === 1 && Array.isArray(raw['runs']) && Array.isArray(raw['repos']) && Array.isArray(raw['lanes']) && isRecord(raw['summary'])\n ? (raw as unknown as FleetLiveSnapshotV1)\n : null;\n },\n leader(raw: unknown): LeaderStateV1 | null {\n return isRecord(raw) && raw['v'] === 1 && Array.isArray(raw['timeline']) && Array.isArray(raw['actions']) && isRecord(raw['hitRate'])\n ? (raw as unknown as LeaderStateV1)\n : null;\n },\n learning(raw: unknown): LearningStateV1 | null {\n return isRecord(raw) && raw['v'] === 1 && Array.isArray(raw['versions']) && Array.isArray(raw['experiments']) ? (raw as unknown as LearningStateV1) : null;\n },\n activity(raw: unknown): VerseActivityResponse | null {\n return isRecord(raw) && Array.isArray(raw['needsYou']) && Array.isArray(raw['running']) && isRecord(raw['sources']) ? (raw as unknown as VerseActivityResponse) : null;\n },\n fleetHistory(raw: unknown): FleetHistoryResponse | null {\n return isRecord(raw) && Array.isArray(raw['days']) && isRecord(raw['sources']) && isRecord(raw['funnel']) ? (raw as unknown as FleetHistoryResponse) : null;\n },\n reasoningDigest(raw: unknown): ReasoningDigest | null {\n return isRecord(raw) && Array.isArray(raw['insights']) && Array.isArray(raw['trends']) && isRecord(raw['totals']) ? (raw as unknown as ReasoningDigest) : null;\n },\n /** Series and points are re-checked one by one where they are merged (command-model mergeSeatHistory). */\n seatHistory(raw: unknown): CapacityHistoryResponse | null {\n return isRecord(raw) && raw['v'] === 1 && Array.isArray(raw['series']) ? (raw as unknown as CapacityHistoryResponse) : null;\n },\n};\n\n/** Operator words for a source that did not answer (never a path, never a trace). */\nfunction absence(what: string, err: unknown): string {\n if (err instanceof ApiError) {\n if (err.status === 404) return `${what} is not in this build yet, so this card has no source.`;\n if (err.status === 503) return `${what} failed to load on the server.`;\n return `${what} answered HTTP ${err.status}.`;\n }\n return `${what} could not be reached.`;\n}\n\n/** A QueryDef whose value is an OptionalRead: 404 / unreachable / unrecognised all resolve, never throw. */\nexport function optionalQuery<T>(key: string, path: string, what: string, guard: (raw: unknown) => T | null): QueryDef<OptionalRead<T>> {\n return {\n key,\n fetch: async (signal) => {\n try {\n const raw = await apiGet<unknown>(path, signal);\n const value = guard(raw);\n if (value === null) {\n return { value: null, available: true, reason: `${what} answered in a shape this version does not recognise, so nothing is shown rather than guessed.` };\n }\n return { value, available: true, reason: null };\n } catch (err) {\n if (err instanceof ApiError && err.status === 401) throw err;\n if (err instanceof DOMException && err.name === 'AbortError') throw err;\n return { value: null, available: false, reason: absence(what, err) };\n }\n },\n };\n}\n\nexport const authorityQuery = optionalQuery(SURFACE_KEYS.authority, AUTHORITY_PATH, 'The authority service', narrow.authority);\nexport const authorityDraftQuery = optionalQuery(SURFACE_KEYS.authorityDraft, AUTHORITY_DRAFT_PATH, 'The grant draft', narrow.draft);\nexport const fleetLiveQuery = optionalQuery(SURFACE_KEYS.fleetLive, FLEET_LIVE_PATH, 'The live fleet view', narrow.fleetLive);\nexport const leaderQuery = optionalQuery(SURFACE_KEYS.leader, LEADER_PATH, 'The Leader', narrow.leader);\nexport const learningQuery = optionalQuery(SURFACE_KEYS.learning, LEARNING_PATH, 'Self-improvement', narrow.learning);\nexport const fleetHistoryQuery = optionalQuery(SURFACE_KEYS.fleetHistory, FLEET_HISTORY_PATH, 'Fleet history', narrow.fleetHistory);\nexport const reasoningDigestQuery = optionalQuery(SURFACE_KEYS.reasoningDigest, REASONING_DIGEST_PATH, 'The reasoning digest', narrow.reasoningDigest);\n/** Optional like every surface read: a server without the route leaves the burn-downs on this page's own readings. */\nexport const seatHistoryQuery = optionalQuery(SURFACE_KEYS.seatHistory, SEAT_HISTORY_PATH, 'Seat history', narrow.seatHistory);\n\n// ---------------------------------------------------------------------------\n// Writes\n// ---------------------------------------------------------------------------\n\nasync function post<T>(path: string, body: unknown): Promise<T> {\n const token = getMutationToken();\n if (!token) throw new VerseControlLockedError();\n const result = await apiPost<T>(path, body, token);\n touchMutationHold();\n return result;\n}\n\n/**\n * One authority action. The server answers the new AuthorityStatusV1 for\n * every form; raising past the grant is its 409 `grant-required` (the page\n * opens the Touch ID sheet BEFORE ever sending that, but the server is the\n * authority — a stale page gets the refusal, not a raise).\n */\nexport async function postAuthority(action: AuthorityActionRequest): Promise<AuthorityStatusV1 | null> {\n const result = await post<unknown>(AUTHORITY_PATH, action);\n invalidate(SURFACE_KEYS.authority);\n invalidate(SURFACE_KEYS.fleetLive);\n void refreshActivity();\n if (action.action === 'grant' || action.action === 're-approve') invalidate(SURFACE_KEYS.authorityDraft);\n return narrow.authority(result);\n}\n\nexport async function postFleetLive(action: FleetLiveActionRequest): Promise<unknown> {\n const result = await post<unknown>(FLEET_LIVE_PATH, action);\n invalidate(SURFACE_KEYS.fleetLive);\n void refreshActivity();\n return result;\n}\n\nexport async function postLeader(action: LeaderActionRequest): Promise<unknown> {\n const result = await post<unknown>(LEADER_PATH, action);\n invalidate(SURFACE_KEYS.leader);\n void refreshActivity();\n return result;\n}\n\n/**\n * A Needs-you item's own action. `path` was validated by the producer\n * (isNeedsYouItem → isSafeApiRoute) and is re-checked here: the mutation\n * token must never be aimed anywhere but this origin's /api/.\n */\nexport async function postNeedsYouAction(path: string, body: Record<string, unknown>): Promise<unknown> {\n if (!/^\\/api\\/[^\\s\\\\]*$/.test(path) || path.startsWith('//') || path.includes('..')) {\n throw new Error('That action points outside this app, so it was not sent.');\n }\n const result = await post<unknown>(path, body);\n void refreshActivity();\n invalidate(SURFACE_KEYS.fleetLive);\n invalidate(SURFACE_KEYS.leader);\n invalidate(SURFACE_KEYS.authority);\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{V as e}from"./global-oEl9Qj8u.js";import{p as t}from"./queries-CYisSAAB.js";import{T as n,w as r,x as i}from"./VerseConsoleApp-DTjDpGCd.js";import{n as a,t as o}from"./budget-queries-V3wcJVK_.js";import{n as s}from"./cloud-queries-Br_r0UAz.js";import{r as c}from"./overnight-queries-DGm3qL1b.js";import{a as l,d as u,f as d,i as f,n as p,o as m,r as h}from"./surface-data-DTI7LjvH.js";var g={command:[p,f,l,m,h,a,d,s],fleet:[f,c,a,o],growth:[h,m,t(`30d`)],mind:[l,u,i,n],chat:[i,r,n]},_=6e4;async function v(t,n={}){let r=n.ensure??e;for(let e of g[t]??[])try{if(n.beforeEach&&!await n.beforeEach())return;await r(e.key,()=>e.fetch(),_)}catch{}}export{_ as PREFETCH_FRESH_MS,g as SURFACE_PREFETCH,v as prefetchSurfaceData};
|
|
2
|
-
//# sourceMappingURL=surface-prefetch-CdUEBFrl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"surface-prefetch-CdUEBFrl.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/surface-prefetch.ts"],"sourcesContent":["/**\n * routes/verse/shell/surface-prefetch.ts — the reads each rail surface opens\n * with, so the shell can warm them while the operator is still reading chat\n * (shell/warmup.ts, once the operator is idle after first paint). A first\n * visit to Command, Fleet, Growth or Mind then paints from the cache instead\n * of a skeleton; the surface's own useQuery still refreshes whatever is older\n * than it accepts.\n *\n * LAZY ONLY. shell/warmup.ts loads this module with import(): these query\n * defs pull in the surfaces' data modules, none of which may cost chat\n * first-paint bytes (VerseApp.first-paint.test.ts pins it). The QueryDefs\n * themselves are the surfaces' own — same keys, same fetchers — so a warmed\n * entry IS the entry the surface reads.\n *\n * Keep each list in step with its surface's useQuery calls:\n * surface-prefetch.test.ts renders Command, Growth and Mind and fails when\n * they read something this table does not warm.\n */\nimport { ensureQuery } from '../../../data/cache.js';\nimport { modelsQuery, type QueryDef } from '../../../data/queries.js';\nimport { overnightQuery } from '../autonomy/overnight-queries.js';\nimport { budgetPreviewQuery, budgetQuery } from '../budget/budget-queries.js';\nimport { cloudQuery } from '../cloud/cloud-queries.js';\nimport {\n authorityQuery,\n fleetHistoryQuery,\n fleetLiveQuery,\n leaderQuery,\n learningQuery,\n reasoningDigestQuery,\n seatHistoryQuery,\n} from '../command/surface-data.js';\nimport { verseBootstrapQuery, verseSessionsQuery, verseWorkspacesQuery } from '../verse-queries.js';\nimport type { VerseSectionId } from '../verse-ui-store.js';\n\ntype AnyQuery = QueryDef<unknown>;\n\n/** What each rail surface reads the moment it mounts. */\nexport const SURFACE_PREFETCH: Readonly<Partial<Record<VerseSectionId, readonly AnyQuery[]>>> = {\n // seatHistoryQuery: without it the first Command visit draws each seat's\n // burn-down from this page's own readings (\"since Verse opened\"), then\n // redraws once the recorded week lands — the reset-on-reload look 3.10.1\n // set out to remove.\n // cloudQuery (3.11): the Cloud card's overview — without it a first visit\n // paints \"Reading the cloud lane…\" under the burn-downs.\n command: [authorityQuery, fleetLiveQuery, leaderQuery, learningQuery, fleetHistoryQuery, budgetQuery, seatHistoryQuery, cloudQuery],\n fleet: [fleetLiveQuery, overnightQuery, budgetQuery, budgetPreviewQuery],\n growth: [fleetHistoryQuery, learningQuery, modelsQuery('30d')],\n mind: [leaderQuery, reasoningDigestQuery, verseBootstrapQuery, verseWorkspacesQuery],\n chat: [verseBootstrapQuery, verseSessionsQuery, verseWorkspacesQuery],\n};\n\n/**\n * A cached answer younger than this is left alone. The surfaces accept 10–60 s\n * old data on mount, so anything fresher than a minute is already as good as\n * a warm-up can make it.\n */\nexport const PREFETCH_FRESH_MS = 60_000;\n\ntype Ensure = (key: string, fetcher: () => Promise<unknown>, maxAgeMs: number) => Promise<void>;\n\nexport interface PrefetchOptions {\n /** The cache's mount path (a seam for tests). */\n ensure?: Ensure;\n /**\n * Awaited before EACH read (the warm-up's idle gate). Resolving false stops\n * the warm-up there — the gate was cancelled.\n */\n beforeEach?: () => Promise<boolean> | boolean;\n}\n\n/**\n * Warm one surface's reads through the shared cache (joins an in-flight read,\n * skips a fresh one, and goes through the cache's concurrency gate).\n *\n * ONE AT A TIME: each read is awaited before the next is even considered, so\n * the warm-up never holds more than one of the gate's slots, and the operator\n * (who gets the other three, and whose reads the next `beforeEach` waits out)\n * is never queued behind a burst of it.\n *\n * Never rejects: a read that fails leaves the surface to load it as it always did.\n */\nexport async function prefetchSurfaceData(id: VerseSectionId, options: PrefetchOptions = {}): Promise<void> {\n const ensure = options.ensure ?? ensureQuery;\n for (const def of SURFACE_PREFETCH[id] ?? []) {\n try {\n if (options.beforeEach && !(await options.beforeEach())) return;\n await ensure(def.key, () => def.fetch(), PREFETCH_FRESH_MS);\n } catch {\n // A warm-up read that fails (or cannot even start) is not worth surfacing.\n }\n }\n}\n"],"mappings":"wYAsCA,IAAa,EAAmF,CAO9F,QAAS,CAAC,EAAgB,EAAgB,EAAa,EAAe,EAAmB,EAAa,EAAkB,CAAU,EAClI,MAAO,CAAC,EAAgB,EAAgB,EAAa,CAAkB,EACvE,OAAQ,CAAC,EAAmB,EAAe,EAAY,KAAK,CAAC,EAC7D,KAAM,CAAC,EAAa,EAAsB,EAAqB,CAAoB,EACnF,KAAM,CAAC,EAAqB,EAAoB,CAAoB,CACtE,EAOa,EAAoB,IAyBjC,eAAsB,EAAoB,EAAoB,EAA2B,CAAC,EAAkB,CAC1G,IAAM,EAAS,EAAQ,QAAU,EACjC,IAAK,IAAM,KAAO,EAAiB,IAAO,CAAC,EACzC,GAAI,CACF,GAAI,EAAQ,YAAc,CAAE,MAAM,EAAQ,WAAW,EAAI,OACzD,MAAM,EAAO,EAAI,QAAW,EAAI,MAAM,EAAG,CAAiB,CAC5D,MAAQ,CAER,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,s as n}from"./index-BVxOlseC.js";import{d as r,f as i}from"./colors-BZ3a9wFf.js";import{a,c as o,n as s}from"./format-DKrNjdwD.js";import{t as c}from"./ProviderLogo-C5mBg8i0.js";var l=n(e(),1),u=t();function d(e,t,n=4,r={}){if(!Number.isFinite(e)||!Number.isFinite(t))return[0];if(t<e&&([e,t]=[t,e]),t===e){if(t===0)return[0,1];let i=Math.abs(t)*.5;return d(Math.min(0,e-i),t+i,n,r)}let i=(t-e)/Math.max(1,n),a=10**Math.floor(Math.log10(i)),o=i/a,s=(o<=1?1:o<=2?2:o<=2.5?a>=10?2.5:2:o<=5?5:10)*a;r.integer&&s<1&&(s=1),r.minStep!==void 0&&Number.isFinite(r.minStep)&&s<r.minStep&&(s=r.minStep);let c=Math.floor(e/s)*s,l=Math.ceil(t/s)*s,u=Math.round((l-c)/s),f=Math.max(0,-Math.floor(Math.log10(s))+1),p=[];for(let e=0;e<=u;e++)p.push(Number((c+e*s).toFixed(f))||0);return p}function f(e){return e.every(e=>Number.isInteger(e))}function p(e,t){return new Set(t).size===t.length&&e.every((e,n)=>{if(e===0)return!0;let r=/\d[\d,]*(?:\.\d+)?/.exec(t[n]??``);if(!r)return!0;let i=Number(r[0].replace(/,/g,``));if(!Number.isFinite(i)||i===0)return!1;let a=i/Math.abs(e),o=10**Math.round(Math.log10(a));return Math.abs(a/o-1)<1e-6})}function m(e,t,n={}){let r=Math.max(1,n.count??4),i=n.integer===!0,s=n.format,c=(n,r,i)=>{let c=d(e,t,n,{integer:r,minStep:i}),l=c.length>1?c[1]-c[0]:1;if(s)return{ticks:c,labels:c.map(e=>s(e)),step:l};let u=o(c,l);return{ticks:c,labels:c.map(e=>a(e,l,u)),step:l}},l=c(r,i);if(!n.format||p(l.ticks,l.labels)||!Number.isFinite(e)||!Number.isFinite(t)||!(l.step>0))return l;let u=(e,t)=>{for(let n=r;n>=1;n--){let r=c(n,e,t);if(p(r.ticks,r.labels))return r}return null},f=u(i);if(f)return f;let m=Math.max(Math.abs(e),Math.abs(t),1);for(let e=Math.floor(Math.log10(l.step))+1;10**e<=m*10;e++){let t=u(i,Number((10**e).toPrecision(1)));if(t)return t}return u(!0)??l}function h(e){let t=t=>{let n=e(t).trim();if(!n.endsWith(`%`))return null;let r=Number(n.slice(0,-1).replace(/[,\s+]/g,``));return Number.isFinite(r)?r:null};return t(50)===50?100:t(.5)===50?1:null}function g(e){return Number.isFinite(e)&&e>=9466848e5}function _(e){return e.some(g)}function v(e){return _(e)?g:Number.isFinite}var y=6e5;function ee(e,t,n,r=`center`){if(t<e&&([e,t]=[t,e]),t-e>=n)return[e,t];if(r===`end`)return[t-n,t];let i=(e+t)/2;return[i-n/2,i+n/2]}var b=12*.6;function x(e){return Number.isFinite(e)&&e>0?e:1}function S(e=1){return b*x(e)}function C(e,t=b){return e.length*t}var w=7;function T(e,t,n,r=1){let i=x(r),a=Math.max(0,...e.map(e=>e.length));return Math.min(n*i,Math.max(t,a*w*i+10))}function E(e,t,n){let r=n.gap??8,i=e.map((e,t)=>({s:e,i:t})).sort((e,t)=>t.s.priority-e.s.priority||e.i-t.i),a=[];for(let{s:e,i:o}of i){let i=e.variants[Math.min(t,e.variants.length-1)]??``;if(!i)continue;let s=C(i,n.charPx);if(s>n.max-n.min)continue;let c=e.anchor===`start`?e.x:e.anchor===`end`?e.x-s:e.x-s/2,l=e.x,u=e.anchor;c<n.min?(c=n.min,l=n.min,u=`start`):c+s>n.max&&(c=n.max-s,l=n.max,u=`end`);let d=c+s;a.some(e=>e.text===i||c<e.right+r&&e.left<d+r)||a.push({left:c,right:d,text:i,i:o,label:{key:e.key,text:i,x:l,anchor:u}})}return a.sort((e,t)=>e.i-t.i).map(e=>e.label)}function D(e,t){if(e.length===0)return[];let n=Math.max(1,...e.map(e=>e.variants.length)),r=new Set(e.filter(e=>e.required!==!1).map(e=>e.key)),i=[],a=-1;for(let o=0;o<n;o++){let n=E(e,o,t),s=n.filter(e=>r.has(e.key)).length;if(s>a&&(i=n,a=s),a===r.size)break}return i}function te(e,t,n,r){if(e.length===0)return new Map;if((e.length-1)*t>r-n+1e-9)return null;let i=e.map((e,t)=>({...e,i:t})).sort((e,t)=>e.y-t.y||e.i-t.i),a=e=>{let i=e.reduce((e,t)=>e+t.y,0)/e.length,a=(e.length-1)*t;return{members:e,top:O(i-a/2,n,r-a)}},o=i.map(e=>a([e]));for(let e=!0;e;){e=!1;for(let n=0;n+1<o.length;n++){let r=o[n],i=o[n+1];if(r.top+r.members.length*t>i.top+1e-9){o=[...o.slice(0,n),a([...r.members,...i.members]),...o.slice(n+2)],e=!0;break}}}let s=new Map;for(let e of o)e.members.forEach((n,r)=>s.set(n.key,e.top+r*t));return s}function ne(e,t,n,r){let i=t-e;return i===0?()=>(n+r)/2:t=>n+(t-e)/i*(r-n)}function re(e,t){if(e<=0)return[];if(t<=1)return[e-1];if(e<=t)return Array.from({length:e},(e,t)=>t);let n=Math.ceil((e-1)/(t-1)),r=[];for(let t=e-1;t>=0;t-=n)r.push(t);return r.reverse()}function O(e,t,n){return Math.min(n,Math.max(t,e))}function ie(e){let t=[],n=[];for(let r of e){if(r.y===null||!Number.isFinite(r.y)){n.length&&t.push(n),n=[];continue}n.push({x:r.x,y:r.y})}return n.length&&t.push(n),t}function k(e){return e.map((e,t)=>`${t===0?`M`:`L`}${j(e.x)},${j(e.y)}`).join(` `)}function A(e,t){if(e.length===0)return``;let n=[...t].reverse();return`${k(e)} ${n.map(e=>`L${j(e.x)},${j(e.y)}`).join(` `)} Z`}function j(e){return Math.round(e*10)/10}function M(e){let t=0,n=!1,r=0,i=[];return e.forEach((e,a)=>{if(e===null||!Number.isFinite(e)){n=!0;return}r++;let o=Math.max(0,e);o>0&&i.push({index:a,value:o,y0:t,y1:t+o}),t+=o}),{segments:i,total:t,incomplete:n,unknown:r===0&&e.length>0}}function N(e,t,n,r,i=4){if(r<=0||n<=0)return``;let a=Math.max(0,Math.min(i,n/2,r));return[`M${j(e)},${j(t+r)}`,`L${j(e)},${j(t+a)}`,`Q${j(e)},${j(t)} ${j(e+a)},${j(t)}`,`L${j(e+n-a)},${j(t)}`,`Q${j(e+n)},${j(t)} ${j(e+n)},${j(t+a)}`,`L${j(e+n)},${j(t+r)}`,`Z`].join(` `)}function P(e,t,n,r,i=4){if(r<=0||n<=0)return``;let a=Math.max(0,Math.min(i,r/2,n));return[`M${j(e)},${j(t)}`,`L${j(e+n-a)},${j(t)}`,`Q${j(e+n)},${j(t)} ${j(e+n)},${j(t+a)}`,`L${j(e+n)},${j(t+r-a)}`,`Q${j(e+n)},${j(t+r)} ${j(e+n-a)},${j(t+r)}`,`L${j(e)},${j(t+r)}`,`Z`].join(` `)}function F(e){let t=e[0]??null;return e.map((n,r)=>{let i=r>0?e[r-1]??null:null;return{value:n,ofFirst:n!==null&&t!==null&&t>0?n/t:null,ofPrevious:r>0&&n!==null&&i!==null&&i>0?n/i:null}})}var I=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function L(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;let t=Date.parse(`${e}T00:00:00Z`);return Number.isFinite(t)&&new Date(t).toISOString().slice(0,10)===e?t:null}function R(e,t=1){let n=new Map,r=1/0,i=-1/0;for(let t of e){let e=L(t.day);e===null||e<9466848e5||(n.set(t.day,t.value),r=Math.min(r,e),i=Math.max(i,e))}if(!Number.isFinite(r))return{cells:[],weeks:0,months:[]};let a=864e5,o=(new Date(r).getUTCDay()-t+7)%7,s=r-o*a,c=(new Date(i).getUTCDay()-t+7)%7,l=i+(6-c)*a,u=[],d=[],f=-1;for(let e=s,t=0;e<=l;e+=a,t++){let a=new Date(e).toISOString().slice(0,10),o=Math.floor(t/7),s=t%7,c=e<r||e>i;u.push({day:a,value:c?null:n.has(a)?n.get(a):null,week:o,weekday:s,outside:c});let l=new Date(e).getUTCMonth();!c&&l!==f&&(d.push({week:o,label:I[l]}),f=l)}return{cells:u,weeks:Math.floor((l-s)/a/7)+1,months:d}}function z(e,t,n=4){return e===null||!Number.isFinite(e)?null:e<=0||t<=0?0:O(Math.ceil(e/t*n),1,n)}function B(e,t,n={}){let r=t!==null&&Number.isFinite(t)?t:null,i=e.filter(e=>e.remaining!==null&&Number.isFinite(e.remaining)&&Number.isFinite(e.t)).sort((e,t)=>e.t-t.t),a=i.length?i[i.length-1]:null,o=i.slice(-(n.window??6));if(!a||o.length<2)return{slopePerMs:null,exhaustAt:null,reserveAt:null,remainingAtReset:null,from:a};let s=o.length,c=o.reduce((e,t)=>e+t.t,0)/s,l=o.reduce((e,t)=>e+t.remaining,0)/s,u=0,d=0;for(let e of o)u+=(e.t-c)*(e.remaining-l),d+=(e.t-c)**2;let f=d===0?0:u/d,p=e=>{if(a.remaining<=e)return a.t;if(f>=0||r===null)return null;let t=a.t+(e-a.remaining)/f;return t<=r?t:null},m=n.reserve??null;return{slopePerMs:f,exhaustAt:p(0),reserveAt:m===null?null:p(m),remainingAtReset:r===null?null:Math.max(0,a.remaining+f*Math.max(0,r-a.t)),from:a}}function V(e,t,n,r){return{x:e+n*Math.cos(r),y:t-n*Math.sin(r)}}function H(e,t,n,r,i){let a=O(r,0,1),o=O(i,0,1);if(o<=a)return``;let s=V(e,t,n,Math.PI*(1-a)),c=V(e,t,n,Math.PI*(1-o));return`M${j(s.x)},${j(s.y)} A${n},${n} 0 0 1 ${j(c.x)},${j(c.y)}`}function U(e,t,n){return e===null||!Number.isFinite(e)?`unknown`:e>=n?`danger`:e>=t?`warn`:`ok`}function W(e=typeof document>`u`?null:document.documentElement){return!e||typeof getComputedStyle!=`function`?1:x(Number.parseFloat(getComputedStyle(e).getPropertyValue(`--ui-text-scale`)))}var G=new Set,K=null,q=null;function J(){let e=W();if(e!==K){K=e;for(let e of G)e()}}function ae(){K=W();let e=document.documentElement,t=typeof MutationObserver>`u`?null:new MutationObserver(J);t?.observe(e,{attributes:!0,attributeFilter:[`data-ui-scale`,`style`]});let n=typeof requestAnimationFrame==`function`,r=0,i=()=>{if(!n)return J();cancelAnimationFrame(r),r=requestAnimationFrame(J)};return window.addEventListener(`resize`,i),()=>{t?.disconnect(),n&&cancelAnimationFrame(r),window.removeEventListener(`resize`,i)}}function oe(e){return G.add(e),G.size===1&&typeof document<`u`&&(q=ae()),()=>{G.delete(e),!(G.size>0)&&(q?.(),q=null,K=null)}}function se(){return K??W()}function ce(){return(0,l.useSyncExternalStore)(oe,se,()=>1)}var Y={table:`_table_x2yvy_1`,numeric:`_numeric_x2yvy_22`,empty:`_empty_x2yvy_27`};function le({caption:e,columns:t,rows:n,rowKey:r,emptyMessage:i=`No rows.`}){return(0,u.jsxs)(`table`,{className:Y.table,children:[(0,u.jsx)(`caption`,{className:`visually-hidden`,children:e}),(0,u.jsx)(`thead`,{children:(0,u.jsx)(`tr`,{children:t.map(e=>(0,u.jsx)(`th`,{scope:`col`,className:e.numeric?Y.numeric:void 0,children:e.label},e.key))})}),(0,u.jsxs)(`tbody`,{children:[n.length===0?(0,u.jsx)(`tr`,{children:(0,u.jsx)(`td`,{colSpan:Math.max(1,t.length),className:Y.empty,children:i})}):null,n.map((e,n)=>(0,u.jsx)(`tr`,{children:t.map(t=>(0,u.jsx)(`td`,{className:t.numeric?Y.numeric:void 0,children:t.render(e)},t.key))},r(e,n)))]})]})}var X={plotWrap:`_plotWrap_1cs0k_3`,svg:`_svg_1cs0k_9`,grid:`_grid_1cs0k_15`,axis:`_axis_1cs0k_21`,tick:`_tick_1cs0k_27`,label:`_label_1cs0k_34`,labelStrong:`_labelStrong_1cs0k_40`,line:`_line_1cs0k_47`,wash:`_wash_1cs0k_54`,reference:`_reference_1cs0k_59`,projection:`_projection_1cs0k_66`,marker:`_marker_1cs0k_73`,crosshair:`_crosshair_1cs0k_78`,hit:`_hit_1cs0k_84`,focusable:`_focusable_1cs0k_98`,track:`_track_1cs0k_108`,trackEmpty:`_trackEmpty_1cs0k_122`,noData:`_noData_1cs0k_126`,tooltip:`_tooltip_1cs0k_133`,tooltipTitle:`_tooltipTitle_1cs0k_148`,tooltipRow:`_tooltipRow_1cs0k_153`,tooltipKey:`_tooltipKey_1cs0k_159`,tooltipValue:`_tooltipValue_1cs0k_166`,tooltipMuted:`_tooltipMuted_1cs0k_173`,legend:`_legend_1cs0k_178`,legendItem:`_legendItem_1cs0k_189`,swatch:`_swatch_1cs0k_195`,swatchLine:`_swatchLine_1cs0k_202`,swatchEmpty:`_swatchEmpty_1cs0k_208`,note:`_note_1cs0k_216`,srOnly:`_srOnly_1cs0k_222`,animated:`_animated_1cs0k_235`,monogram:`_monogram_1cs0k_241`,unknownMark:`_unknownMark_1cs0k_251`,swatchHatch:`_swatchHatch_1cs0k_257`,halo:`_halo_1cs0k_268`};function ue({items:e,min:t=2}){return e.length<t?null:(0,u.jsx)(`ul`,{className:X.legend,children:e.map(e=>(0,u.jsxs)(`li`,{className:X.legendItem,children:[(0,u.jsx)(`span`,{"aria-hidden":`true`,className:e.kind===`line`?X.swatchLine:e.kind===`empty`?X.swatchEmpty:e.kind===`hatch`?X.swatchHatch:X.swatch,style:e.kind===`empty`||e.kind===`hatch`?void 0:{background:e.color}}),e.label]},e.label))})}function de({left:e,top:t,title:n,rows:r}){return(0,u.jsxs)(`div`,{className:X.tooltip,style:{left:e,top:t},role:`presentation`,children:[(0,u.jsx)(`div`,{className:X.tooltipTitle,children:n}),r.map(e=>(0,u.jsxs)(`div`,{className:X.tooltipRow,children:[e.color?(0,u.jsx)(`span`,{className:X.tooltipKey,style:{background:e.color},"aria-hidden":`true`}):null,(0,u.jsx)(`span`,{children:e.label}),e.value===null?(0,u.jsx)(`span`,{className:`${X.tooltipValue} ${X.tooltipMuted}`,children:`no data`}):(0,u.jsx)(`span`,{className:X.tooltipValue,children:e.value})]},e.key))]})}function fe(e,t,n=70){return Math.min(Math.max(e,Math.min(n,t/2)),Math.max(t-n,t/2))}function pe({id:e}){let{size:t,angle:n,strokeWidth:i,stroke:a}=r;return(0,u.jsx)(`pattern`,{id:e,width:t,height:t,patternUnits:`userSpaceOnUse`,patternTransform:`rotate(${n})`,children:(0,u.jsx)(`line`,{x1:0,y1:0,x2:0,y2:t,stroke:a,strokeWidth:i})})}function me({engine:e,x:t,y:n,height:r}){return(0,u.jsxs)(`g`,{"data-engine":e,"aria-hidden":`true`,children:[(0,u.jsx)(`rect`,{x:t,y:n,width:2,height:r,rx:1,fill:i(e)}),(0,u.jsx)(c,{engine:e,x:t+5,y:n+r/2-6,size:12,className:X.monogram})]})}function he(){return(0,u.jsxs)(`svg`,{width:16,height:16,viewBox:`0 0 16 16`,"aria-hidden":`true`,focusable:`false`,children:[(0,u.jsx)(`circle`,{cx:3.5,cy:8,r:1.4,fill:`currentColor`}),(0,u.jsx)(`circle`,{cx:8,cy:8,r:1.4,fill:`currentColor`}),(0,u.jsx)(`circle`,{cx:12.5,cy:8,r:1.4,fill:`currentColor`})]})}var Z={frame:`_frame_it6x9_1`,header:`_header_it6x9_11`,actions:`_actions_it6x9_20`,menuWrap:`_menuWrap_it6x9_28`,more:`_more_it6x9_34`,menu:`_menu_it6x9_28`,menuItem:`_menuItem_it6x9_75`,check:`_check_it6x9_97`,hint:`_hint_it6x9_102`,heading:`_heading_it6x9_112`,title:`_title_it6x9_119`,description:`_description_it6x9_125`,plot:`_plot_it6x9_130`,table:`_table_it6x9_136`,caveat:`_caveat_it6x9_141`,state:`_state_it6x9_151`,dark:`_dark_it6x9_159`,darkTitle:`_darkTitle_it6x9_166`,darkBody:`_darkBody_it6x9_172`,unknown:`_unknown_it6x9_178`};function ge(e){return s(e.slice(0,10))}function _e({status:e}){switch(e.kind){case`loading`:return(0,u.jsx)(`p`,{className:Z.state,"aria-busy":`true`,children:`Loading…`});case`empty`:return(0,u.jsx)(`p`,{className:Z.state,children:e.message??`Nothing happened in this window.`});case`dark`:return(0,u.jsxs)(`div`,{className:`${Z.state} ${Z.dark}`,children:[(0,u.jsxs)(`p`,{className:Z.darkTitle,children:[e.subject??`Fleet`,` dark since `,ge(e.since)]}),(0,u.jsx)(`p`,{className:Z.darkBody,children:e.detail??`No runs or proposals have been recorded since then.`})]});case`unknown`:return(0,u.jsxs)(`p`,{className:`${Z.state} ${Z.unknown}`,role:`note`,children:[`Unknown — `,e.reason??`the data source could not be read.`,` Nothing is shown rather than a guess.`]})}}function Q(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||e.isContentEditable}var $=[{view:`chart`,label:`Show as chart`,hint:null},{view:`table`,label:`Show as table`,hint:`T`}];function ve({title:e,view:t,onPick:n}){let[r,i]=(0,l.useState)(!1),[a,o]=(0,l.useState)(0),s=(0,l.useRef)(null),c=(0,l.useRef)(null),d=(0,l.useId)(),f=(0,l.useCallback)(e=>{i(!1),e&&s.current?.focus()},[]);(0,l.useEffect)(()=>{if(!r)return;let e=e=>{let t=e.target;t&&(c.current?.contains(t)||s.current?.contains(t))||i(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[r]),(0,l.useEffect)(()=>{r&&c.current?.querySelectorAll(`[role="menuitemradio"]`)[a]?.focus()},[r,a]);function p(e){o(e),i(!0)}function m(e){(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),p(e.key===`ArrowUp`?$.length-1:0))}function h(e){e.key===`ArrowDown`?(e.preventDefault(),o(e=>(e+1)%$.length)):e.key===`ArrowUp`?(e.preventDefault(),o(e=>(e-1+$.length)%$.length)):e.key===`Home`?(e.preventDefault(),o(0)):e.key===`End`?(e.preventDefault(),o($.length-1)):e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),f(!0)):e.key===`Tab`&&f(!1)}return(0,u.jsxs)(`span`,{className:Z.menuWrap,children:[(0,u.jsx)(`button`,{ref:s,type:`button`,className:Z.more,"aria-label":`${e}: view options`,"aria-haspopup":`menu`,"aria-expanded":r,"aria-controls":r?d:void 0,title:`View options (T toggles the table)`,onClick:()=>r?f(!1):p(Math.max(0,$.findIndex(e=>e.view===t))),onKeyDown:m,children:(0,u.jsx)(he,{})}),r?(0,u.jsx)(`div`,{ref:c,id:d,role:`menu`,"aria-label":`${e} view`,className:Z.menu,onKeyDown:h,children:$.map((e,r)=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":t===e.view,tabIndex:r===a?0:-1,className:Z.menuItem,onClick:()=>{n(e.view),f(!0)},children:[(0,u.jsx)(`span`,{className:Z.check,"aria-hidden":`true`,children:t===e.view?`✓`:``}),(0,u.jsx)(`span`,{children:e.label}),e.hint?(0,u.jsx)(`kbd`,{className:Z.hint,children:e.hint}):null]},e.view))}):null]})}function ye({title:e,description:t,caveat:n,status:r={kind:`ready`},defaultView:i=`chart`,hideToggle:a=!1,actions:o,children:s,table:c,footer:d}){let[f,p]=(0,l.useState)(i),m=(0,l.useId)(),h=r.kind===`ready`,g=h&&!a;function _(e){g&&!e.defaultPrevented&&(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.key.toLowerCase()!==`t`||Q(e.target)||(e.preventDefault(),p(e=>e===`chart`?`table`:`chart`)))}return(0,u.jsxs)(`figure`,{className:Z.frame,"aria-labelledby":m,"data-chart-card":``,"data-view":f,onKeyDown:_,children:[(0,u.jsxs)(`figcaption`,{className:Z.header,children:[(0,u.jsxs)(`span`,{className:Z.heading,children:[(0,u.jsx)(`span`,{id:m,className:Z.title,children:e}),t?(0,u.jsx)(`span`,{className:Z.description,children:t}):null]}),o||g?(0,u.jsxs)(`span`,{className:Z.actions,children:[o,g?(0,u.jsx)(ve,{title:e,view:f,onPick:p}):null]}):null]}),n?(0,u.jsx)(`p`,{className:Z.caveat,role:`note`,children:n}):null,h?f===`table`?(0,u.jsx)(`div`,{className:Z.table,children:c}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{className:Z.plot,children:s}),d]}):(0,u.jsx)(_e,{status:r})]})}function be(e,t,n=640){let[r,i]=(0,l.useState)(null),[a,o]=(0,l.useState)(null);return(0,l.useLayoutEffect)(()=>{e.current!==a&&o(e.current)}),(0,l.useLayoutEffect)(()=>{if(t!==void 0)return;let e=a;if(!e)return;let n=()=>{let t=Math.floor(e.getBoundingClientRect().width);t>0&&i(e=>e===t?e:t)};if(n(),typeof ResizeObserver>`u`)return;let r=0,o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=requestAnimationFrame(n)});return o.observe(e),()=>{cancelAnimationFrame(r),o.disconnect()}},[a,t]),Math.max(280,t??r??n)}export{V as A,_ as C,ne as D,k as E,M as F,re as I,T as L,P as M,N,d as O,ie as P,v as R,g as S,D as T,ee as _,me as a,U as b,X as c,y as d,f,te as g,R as h,de as i,B as j,h as k,le as l,m,ye as n,pe as o,A as p,ue as r,fe as s,be as t,ce as u,F as v,S as w,z as x,H as y};
|
|
2
|
-
//# sourceMappingURL=useChartWidth-owwodNVz.js.map
|