@ashlr/hub 3.10.1 → 3.11.2
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 +151 -0
- package/README.md +343 -82
- package/dist/authority-surface.json +80 -15
- package/dist/build-identity.json +2 -2
- package/dist/cli/cloud.d.ts +39 -0
- package/dist/cli/cloud.js +448 -0
- package/dist/cli/cloud.js.map +1 -0
- package/dist/cli/completions.js +4 -0
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/help.js +2 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/cloud/backlog.d.ts +17 -0
- package/dist/core/cloud/backlog.js +177 -0
- package/dist/core/cloud/backlog.js.map +1 -0
- package/dist/core/cloud/budget.d.ts +19 -0
- package/dist/core/cloud/budget.js +99 -0
- package/dist/core/cloud/budget.js.map +1 -0
- package/dist/core/cloud/checkout.d.ts +41 -0
- package/dist/core/cloud/checkout.js +168 -0
- package/dist/core/cloud/checkout.js.map +1 -0
- package/dist/core/cloud/cloud-api.d.ts +86 -0
- package/dist/core/cloud/cloud-api.js +599 -0
- package/dist/core/cloud/cloud-api.js.map +1 -0
- package/dist/core/cloud/delivery-contract.d.ts +25 -0
- package/dist/core/cloud/delivery-contract.js +138 -0
- package/dist/core/cloud/delivery-contract.js.map +1 -0
- package/dist/core/cloud/improvement-backlog.d.ts +11 -0
- package/dist/core/cloud/improvement-backlog.js +26 -0
- package/dist/core/cloud/improvement-backlog.js.map +1 -0
- package/dist/core/cloud/launcher.d.ts +68 -0
- package/dist/core/cloud/launcher.js +312 -0
- package/dist/core/cloud/launcher.js.map +1 -0
- package/dist/core/cloud/service.d.ts +51 -0
- package/dist/core/cloud/service.js +215 -0
- package/dist/core/cloud/service.js.map +1 -0
- package/dist/core/cloud/store.d.ts +41 -0
- package/dist/core/cloud/store.js +278 -0
- package/dist/core/cloud/store.js.map +1 -0
- package/dist/core/cloud/tracker.d.ts +30 -0
- package/dist/core/cloud/tracker.js +152 -0
- package/dist/core/cloud/tracker.js.map +1 -0
- package/dist/core/cloud/types.d.ts +233 -0
- package/dist/core/cloud/types.js +73 -0
- package/dist/core/cloud/types.js.map +1 -0
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +5 -4
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +4 -3
- package/dist/core/universe/campaign.js +9 -1
- package/dist/core/universe/campaign.js.map +1 -1
- package/dist/core/universe/runner.d.ts +3 -0
- package/dist/core/universe/runner.js +7 -3
- package/dist/core/universe/runner.js.map +1 -1
- package/dist/core/verse/activity-api.d.ts +3 -1
- package/dist/core/verse/activity-api.js +16 -1
- package/dist/core/verse/activity-api.js.map +1 -1
- package/dist/core/verse/activity.d.ts +7 -0
- package/dist/core/verse/activity.js +23 -0
- package/dist/core/verse/activity.js.map +1 -1
- package/dist/core/verse/compaction-point.d.ts +55 -0
- package/dist/core/verse/compaction-point.js +75 -0
- package/dist/core/verse/compaction-point.js.map +1 -0
- package/dist/core/verse/context-math.d.ts +1 -38
- package/dist/core/verse/context-math.js +5 -59
- package/dist/core/verse/context-math.js.map +1 -1
- package/dist/core/verse/verse-api.d.ts +1 -1
- package/dist/core/verse/verse-api.js +2 -0
- package/dist/core/verse/verse-api.js.map +1 -1
- package/dist/core/vision/leader-cloud.d.ts +63 -0
- package/dist/core/vision/leader-cloud.js +134 -0
- package/dist/core/vision/leader-cloud.js.map +1 -0
- package/dist/core/vision/leader.d.ts +6 -0
- package/dist/core/vision/leader.js +12 -1
- package/dist/core/vision/leader.js.map +1 -1
- package/dist/core/web/public/next/assets/{ActionMenu-BBB7VYjz.js → ActionMenu-_DhtX2gO.js} +2 -2
- package/dist/core/web/public/next/assets/{ActionMenu-BBB7VYjz.js.map → ActionMenu-_DhtX2gO.js.map} +1 -1
- package/dist/core/web/public/next/assets/Advanced-CAAfaBke.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-CAAfaBke.js.map +1 -0
- package/dist/core/web/public/next/assets/App-BAywyjE8.js +7 -0
- package/dist/core/web/public/next/assets/{App-CbDCLAxn.js.map → App-BAywyjE8.js.map} +1 -1
- package/dist/core/web/public/next/assets/AppsSection-CUypKeog.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-CUypKeog.js.map +1 -0
- package/dist/core/web/public/next/assets/{AreaTrend-BgnK0wAy.js → AreaTrend-CblDqC8Q.js} +2 -2
- package/dist/core/web/public/next/assets/{AreaTrend-BgnK0wAy.js.map → AreaTrend-CblDqC8Q.js.map} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-D3d8lYO3.js +2 -0
- package/dist/core/web/public/next/assets/{AutonomySection-BF5UCsMv.js.map → AutonomySection-D3d8lYO3.js.map} +1 -1
- package/dist/core/web/public/next/assets/BranchBar-DU0jAV1E.js +2 -0
- package/dist/core/web/public/next/assets/{BranchBar-nfSb59Kv.js.map → BranchBar-DU0jAV1E.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BudgetControl-BESM12dO.js → BudgetControl-Mm1ZL4u6.js} +2 -2
- package/dist/core/web/public/next/assets/{BudgetControl-BESM12dO.js.map → BudgetControl-Mm1ZL4u6.js.map} +1 -1
- package/dist/core/web/public/next/assets/{BurnDown-D1AfskPT.js → BurnDown-C1fgcFqo.js} +2 -2
- package/dist/core/web/public/next/assets/{BurnDown-D1AfskPT.js.map → BurnDown-C1fgcFqo.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Button-Cr_qkQEc.js → Button-DqgLUZvd.js} +2 -2
- package/dist/core/web/public/next/assets/{Button-Cr_qkQEc.js.map → Button-DqgLUZvd.js.map} +1 -1
- package/dist/core/web/public/next/assets/CapacityStrip-nWFHvqFB.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-nWFHvqFB.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-DUZNpiVr.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-DUZNpiVr.js.map +1 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-2OW38o_C.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-2OW38o_C.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandPalette-C5w2o1-r.js +2 -0
- package/dist/core/web/public/next/assets/{CommandPalette-lLV-OR63.js.map → CommandPalette-C5w2o1-r.js.map} +1 -1
- package/dist/core/web/public/next/assets/CommandSection-Bx2knNqY.js +2 -0
- package/dist/core/web/public/next/assets/CommandSection-Bx2knNqY.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-B7ZwCQOX.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-B7ZwCQOX.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-Dx15x0Ho.css +1 -0
- package/dist/core/web/public/next/assets/Dialog-BpgcEW6b.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-BpgcEW6b.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-tQ8kFulD.css +1 -0
- package/dist/core/web/public/next/assets/{DiffPane-BVxhK-cy.js → DiffPane-DpqRUtCx.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffPane-BVxhK-cy.js.map → DiffPane-DpqRUtCx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-yCdw9J-Y.js → DiffViewer-CoV5-nUf.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-yCdw9J-Y.js.map → DiffViewer-CoV5-nUf.js.map} +1 -1
- package/dist/core/web/public/next/assets/DockHost-C0Pq7Jak.js +2 -0
- package/dist/core/web/public/next/assets/{DockHost-BZReKwos.js.map → DockHost-C0Pq7Jak.js.map} +1 -1
- package/dist/core/web/public/next/assets/{EmptyState-D1GDxVZy.js → EmptyState-DYW29ncw.js} +2 -2
- package/dist/core/web/public/next/assets/{EmptyState-D1GDxVZy.js.map → EmptyState-DYW29ncw.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Epistemic-DRp4dBfB.js → Epistemic-DVx6oHzp.js} +2 -2
- package/dist/core/web/public/next/assets/{Epistemic-DRp4dBfB.js.map → Epistemic-DVx6oHzp.js.map} +1 -1
- package/dist/core/web/public/next/assets/FleetSection-DSETviPK.js +3 -0
- package/dist/core/web/public/next/assets/FleetSection-DSETviPK.js.map +1 -0
- package/dist/core/web/public/next/assets/{Funnel-zvDj3He4.js → Funnel-DxiGqJrt.js} +2 -2
- package/dist/core/web/public/next/assets/{Funnel-zvDj3He4.js.map → Funnel-DxiGqJrt.js.map} +1 -1
- package/dist/core/web/public/next/assets/GearTray-C3I89sIt.js +2 -0
- package/dist/core/web/public/next/assets/{GearTray-CkviqjYr.js.map → GearTray-C3I89sIt.js.map} +1 -1
- package/dist/core/web/public/next/assets/{GrowthSection-Bg5sW0jI.js → GrowthSection-C3m2bPEz.js} +2 -2
- package/dist/core/web/public/next/assets/{GrowthSection-Bg5sW0jI.js.map → GrowthSection-C3m2bPEz.js.map} +1 -1
- package/dist/core/web/public/next/assets/HandoffDialog-Bjb96a0N.js +2 -0
- package/dist/core/web/public/next/assets/{HandoffDialog-DcPj1ri9.js.map → HandoffDialog-Bjb96a0N.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Input-Ci7TD96x.js → Input-ekTehVaH.js} +2 -2
- package/dist/core/web/public/next/assets/{Input-Ci7TD96x.js.map → Input-ekTehVaH.js.map} +1 -1
- package/dist/core/web/public/next/assets/LeaderCard-85VBbbaZ.js +2 -0
- package/dist/core/web/public/next/assets/{LeaderCard-BSFTlMRF.js.map → LeaderCard-85VBbbaZ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MatrixHeatmap-DojKZe9L.js → MatrixHeatmap-Bo8j0QPC.js} +2 -2
- package/dist/core/web/public/next/assets/{MatrixHeatmap-DojKZe9L.js.map → MatrixHeatmap-Bo8j0QPC.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-DvHFaVyp.js +2 -0
- package/dist/core/web/public/next/assets/{McpSection-CvcYu1X_.js.map → McpSection-DvHFaVyp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdown-BrLCrb73.js → MessageMarkdown-fsY_ltVa.js} +3 -3
- package/dist/core/web/public/next/assets/{MessageMarkdown-BrLCrb73.js.map → MessageMarkdown-fsY_ltVa.js.map} +1 -1
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CjmdBw2p.js → MessageMarkdownRenderer-DDdtu82l.js} +2 -2
- package/dist/core/web/public/next/assets/{MessageMarkdownRenderer-CjmdBw2p.js.map → MessageMarkdownRenderer-DDdtu82l.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Meter-DTHbmhQg.js → Meter-CeGDXdDM.js} +2 -2
- package/dist/core/web/public/next/assets/{Meter-DTHbmhQg.js.map → Meter-CeGDXdDM.js.map} +1 -1
- package/dist/core/web/public/next/assets/MindSection-CDVhHvXl.js +2 -0
- package/dist/core/web/public/next/assets/{MindSection-DcO9fmYe.js.map → MindSection-CDVhHvXl.js.map} +1 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-CrfJ0PdD.css +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DTQzEOHR.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DTQzEOHR.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-6AuN0BF3.js +2 -0
- package/dist/core/web/public/next/assets/{NeedsYouDrawer-hiTINupk.js.map → NeedsYouDrawer-6AuN0BF3.js.map} +1 -1
- package/dist/core/web/public/next/assets/{NeedsYouList-B4Z37Phx.js → NeedsYouList-ChnRmbSk.js} +2 -2
- package/dist/core/web/public/next/assets/{NeedsYouList-B4Z37Phx.js.map → NeedsYouList-ChnRmbSk.js.map} +1 -1
- package/dist/core/web/public/next/assets/NewChatDialog-B06E7sqg.js +3 -0
- package/dist/core/web/public/next/assets/{NewChatDialog-utSckh7C.js.map → NewChatDialog-B06E7sqg.js.map} +1 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-C2M3zov9.js +2 -0
- package/dist/core/web/public/next/assets/{OnboardingFlow-7N3YSUHN.js.map → OnboardingFlow-C2M3zov9.js.map} +1 -1
- package/dist/core/web/public/next/assets/PreviewPane-Bd6HsX1k.js +2 -0
- package/dist/core/web/public/next/assets/{PreviewPane-CqzkaAjG.js.map → PreviewPane-Bd6HsX1k.js.map} +1 -1
- package/dist/core/web/public/next/assets/ProviderLogo-Bz7KR5j3.js +2 -0
- package/dist/core/web/public/next/assets/ProviderLogo-Bz7KR5j3.js.map +1 -0
- package/dist/core/web/public/next/assets/RailStatus-CctCuuLy.js +2 -0
- package/dist/core/web/public/next/assets/{RailStatus-sZhApA8k.js.map → RailStatus-CctCuuLy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RefreshIndicator-C1uQIegT.js → RefreshIndicator-CKY5BGdD.js} +2 -2
- package/dist/core/web/public/next/assets/{RefreshIndicator-C1uQIegT.js.map → RefreshIndicator-CKY5BGdD.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-CM_8pJs6.css → ResourcePoolConsoleApp-BX9JLkT4.css} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-DXjjV6Sh.js → ResourcePoolConsoleApp-CspIsW_G.js} +5 -5
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-DXjjV6Sh.js.map → ResourcePoolConsoleApp-CspIsW_G.js.map} +1 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-B7fHZ6zX.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-B7fHZ6zX.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-uZEqC2EM.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-B7-N9n7-.js +2 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-B7-N9n7-.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-CSKIO_wZ.css +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-C_B11J0s.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-C_B11J0s.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-DdxhTdZ6.css +1 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-_juw4EXd.js +2 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-_juw4EXd.js.map +1 -0
- package/dist/core/web/public/next/assets/SeatSelector-D_YXvkPy.js +3 -0
- package/dist/core/web/public/next/assets/{SeatSelector-CT92PqM_.js.map → SeatSelector-D_YXvkPy.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Segmented-BMvq-FfD.js → Segmented-DnKP6rr7.js} +2 -2
- package/dist/core/web/public/next/assets/{Segmented-BMvq-FfD.js.map → Segmented-DnKP6rr7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Select-DkdeoSQn.js → Select-DlbUupTX.js} +2 -2
- package/dist/core/web/public/next/assets/{Select-DkdeoSQn.js.map → Select-DlbUupTX.js.map} +1 -1
- package/dist/core/web/public/next/assets/SessionGate-DnuTZACL.js +2 -0
- package/dist/core/web/public/next/assets/SessionGate-DnuTZACL.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionGate-DvMpXNpJ.css +1 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-C33-k-Q5.js +2 -0
- package/dist/core/web/public/next/assets/{SessionInsightChip-CwlakUYU.js.map → SessionInsightChip-C33-k-Q5.js.map} +1 -1
- package/dist/core/web/public/next/assets/{SessionSearch-DFByh2NZ.js → SessionSearch-DhhR9Csg.js} +2 -2
- package/dist/core/web/public/next/assets/{SessionSearch-DFByh2NZ.js.map → SessionSearch-DhhR9Csg.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-C0xQvCz3.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-C0xQvCz3.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-BvNYOYv5.js +2 -0
- package/dist/core/web/public/next/assets/{Sheet-C7APkGPt.js.map → Sheet-BvNYOYv5.js.map} +1 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-1nUBVO-Z.js +2 -0
- package/dist/core/web/public/next/assets/{ShortcutsOverlay-ZPyXUS_I.js.map → ShortcutsOverlay-1nUBVO-Z.js.map} +1 -1
- package/dist/core/web/public/next/assets/Sidebar-YrVvvBNM.js +3 -0
- package/dist/core/web/public/next/assets/{Sidebar-Chsgazmk.js.map → Sidebar-YrVvvBNM.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Slider-B0kjW7cd.js → Slider-B2c-dbQb.js} +2 -2
- package/dist/core/web/public/next/assets/{Slider-B0kjW7cd.js.map → Slider-B2c-dbQb.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StatusBadge-wv4e6f8b.js → StatusBadge-Q9YYkijx.js} +2 -2
- package/dist/core/web/public/next/assets/{StatusBadge-wv4e6f8b.js.map → StatusBadge-Q9YYkijx.js.map} +1 -1
- package/dist/core/web/public/next/assets/{StepBand-Db8WPw8J.js → StepBand-Ci-C0GUG.js} +2 -2
- package/dist/core/web/public/next/assets/{StepBand-Db8WPw8J.js.map → StepBand-Ci-C0GUG.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Surface-BkDrQ4t3.js → Surface-DBovMq4P.js} +2 -2
- package/dist/core/web/public/next/assets/{Surface-BkDrQ4t3.js.map → Surface-DBovMq4P.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Swimlane-Dcve56cP.js → Swimlane-Cdc4TqDe.js} +2 -2
- package/dist/core/web/public/next/assets/{Swimlane-Dcve56cP.js.map → Swimlane-Cdc4TqDe.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Switch-DamlpSMY.js → Switch-CUrvzO2k.js} +2 -2
- package/dist/core/web/public/next/assets/{Switch-DamlpSMY.js.map → Switch-CUrvzO2k.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Tag-Cs4tudBN.js → Tag-Bv8u6APt.js} +2 -2
- package/dist/core/web/public/next/assets/{Tag-Cs4tudBN.js.map → Tag-Bv8u6APt.js.map} +1 -1
- package/dist/core/web/public/next/assets/TerminalPane-BE4Xlqi5.js +7 -0
- package/dist/core/web/public/next/assets/{TerminalPane-BDkKFych.js.map → TerminalPane-BE4Xlqi5.js.map} +1 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BGwejf0m.js +2 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-BE72VyBL.js.map → UniverseConsoleApp-BGwejf0m.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-Dh7A-hLD.css → UniverseConsoleApp-DfuT-wFw.css} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-BbmYY2P4.js → UniverseView-CgKa-WXC.js} +4 -4
- package/dist/core/web/public/next/assets/{UniverseView-BbmYY2P4.js.map → UniverseView-CgKa-WXC.js.map} +1 -1
- package/dist/core/web/public/next/assets/UsageSection-CazsHm1f.js +2 -0
- package/dist/core/web/public/next/assets/UsageSection-CazsHm1f.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CTF3Shs0.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CTF3Shs0.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cxqr-3qc.css +1 -0
- package/dist/core/web/public/next/assets/Workspace-CgdyXiEV.js +10 -0
- package/dist/core/web/public/next/assets/Workspace-CgdyXiEV.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-Dwri2jFJ.css +1 -0
- package/dist/core/web/public/next/assets/actions-MtxBGS5B.js +2 -0
- package/dist/core/web/public/next/assets/{actions-BnjZy8a-.js.map → actions-MtxBGS5B.js.map} +1 -1
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-CDFvmsQV.js.map +1 -0
- package/dist/core/web/public/next/assets/budget-queries-CP7hgR-p.js +2 -0
- package/dist/core/web/public/next/assets/{budget-queries-Cp6vO7FH.js.map → budget-queries-CP7hgR-p.js.map} +1 -1
- package/dist/core/web/public/next/assets/{capacity-strip-model-9-Yb211u.js → capacity-strip-model-fHfu5cph.js} +2 -2
- package/dist/core/web/public/next/assets/{capacity-strip-model-9-Yb211u.js.map → capacity-strip-model-fHfu5cph.js.map} +1 -1
- package/dist/core/web/public/next/assets/{charts-BmbKhjqw.js → charts-Bis9WSiS.js} +2 -2
- package/dist/core/web/public/next/assets/{charts-BmbKhjqw.js.map → charts-Bis9WSiS.js.map} +1 -1
- package/dist/core/web/public/next/assets/cloud-C1KPNRHC.css +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-BsOepFz6.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-BsOepFz6.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud.module-DoFnr8ZH.js +2 -0
- package/dist/core/web/public/next/assets/cloud.module-DoFnr8ZH.js.map +1 -0
- package/dist/core/web/public/next/assets/{command-bus-DHJJLWh8.js → command-bus-CMvbYP5K.js} +2 -2
- package/dist/core/web/public/next/assets/{command-bus-DHJJLWh8.js.map → command-bus-CMvbYP5K.js.map} +1 -1
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-Bb_PxC5w.js.map +1 -0
- package/dist/core/web/public/next/assets/compaction-point-VL9oegWS.js +2 -0
- package/dist/core/web/public/next/assets/compaction-point-VL9oegWS.js.map +1 -0
- package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js → composer-keys-su0g1h9o.js} +2 -2
- package/dist/core/web/public/next/assets/{composer-keys-CYz4U4Bg.js.map → composer-keys-su0g1h9o.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-model-Ci3Ch9t5.js +2 -0
- package/dist/core/web/public/next/assets/{context-model-DeJ28uSZ.js.map → context-model-Ci3Ch9t5.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-model-CjiJTnf1.js +2 -0
- package/dist/core/web/public/next/assets/{context-model-BGznyHNQ.js.map → context-model-CjiJTnf1.js.map} +1 -1
- package/dist/core/web/public/next/assets/context-queries-BDXT6LQ3.js +2 -0
- package/dist/core/web/public/next/assets/{context-queries-_mEgy4eg.js.map → context-queries-BDXT6LQ3.js.map} +1 -1
- package/dist/core/web/public/next/assets/control-queries-Dv-h1Clu.js +2 -0
- package/dist/core/web/public/next/assets/{control-queries-C4TG8blN.js.map → control-queries-Dv-h1Clu.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-icons-BB7Fi6hT.js → dock-icons-t--Eugrd.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-icons-BB7Fi6hT.js.map → dock-icons-t--Eugrd.js.map} +1 -1
- package/dist/core/web/public/next/assets/{dock-store-CdHQRP8s.js → dock-store-qIu7kSQE.js} +2 -2
- package/dist/core/web/public/next/assets/{dock-store-CdHQRP8s.js.map → dock-store-qIu7kSQE.js.map} +1 -1
- package/dist/core/web/public/next/assets/{fleet-model-B4FKC7fH.js → fleet-model-IRbwfhkR.js} +2 -2
- package/dist/core/web/public/next/assets/{fleet-model-B4FKC7fH.js.map → fleet-model-IRbwfhkR.js.map} +1 -1
- package/dist/core/web/public/next/assets/fleet-queries-7FVNByX1.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-7FVNByX1.js.map +1 -0
- package/dist/core/web/public/next/assets/focus-trap-QqQxQdvH.js +2 -0
- package/dist/core/web/public/next/assets/focus-trap-QqQxQdvH.js.map +1 -0
- package/dist/core/web/public/next/assets/{format-lW58rL2y.js → format-CaMmVQCn.js} +2 -2
- package/dist/core/web/public/next/assets/{format-lW58rL2y.js.map → format-CaMmVQCn.js.map} +1 -1
- package/dist/core/web/public/next/assets/git-model-B4S_GUNA.js +5 -0
- package/dist/core/web/public/next/assets/{git-model-DaGw1SzS.js.map → git-model-B4S_GUNA.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-BkNl4e6E.js +2 -0
- package/dist/core/web/public/next/assets/global-BkNl4e6E.js.map +1 -0
- package/dist/core/web/public/next/assets/global-BlI2BYa1.css +1 -0
- package/dist/core/web/public/next/assets/guarded-action-DHiL8tY5.js +3 -0
- package/dist/core/web/public/next/assets/guarded-action-DHiL8tY5.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-runners-DmGEkM2P.js +2 -0
- package/dist/core/web/public/next/assets/guarded-runners-DmGEkM2P.js.map +1 -0
- package/dist/core/web/public/next/assets/icon-base-NtFmP2yB.js +2 -0
- package/dist/core/web/public/next/assets/icon-base-NtFmP2yB.js.map +1 -0
- package/dist/core/web/public/next/assets/icons-C5EFt_Ts.js +2 -0
- package/dist/core/web/public/next/assets/icons-C5EFt_Ts.js.map +1 -0
- package/dist/core/web/public/next/assets/{index-Dk8R-3a7.js → index-DbDw9UAs.js} +3 -3
- package/dist/core/web/public/next/assets/{index-Dk8R-3a7.js.map → index-DbDw9UAs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{live-model-44wEU6I8.js → live-model-DEwrl7_A.js} +2 -2
- package/dist/core/web/public/next/assets/{live-model-44wEU6I8.js.map → live-model-DEwrl7_A.js.map} +1 -1
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js +2 -0
- package/dist/core/web/public/next/assets/local-model-DFyjKX0b.js.map +1 -0
- package/dist/core/web/public/next/assets/{mind.module-BOABBdi_.js → mind.module-CLhqMQak.js} +2 -2
- package/dist/core/web/public/next/assets/{mind.module-BOABBdi_.js.map → mind.module-CLhqMQak.js.map} +1 -1
- package/dist/core/web/public/next/assets/mutations-Kvzsg-iK.js +2 -0
- package/dist/core/web/public/next/assets/{mutations-DjXM3IDg.js.map → mutations-Kvzsg-iK.js.map} +1 -1
- package/dist/core/web/public/next/assets/nav-C0IunEYF.js +2 -0
- package/dist/core/web/public/next/assets/nav-C0IunEYF.js.map +1 -0
- package/dist/core/web/public/next/assets/overnight-queries-C_AfcL7q.js +2 -0
- package/dist/core/web/public/next/assets/{overnight-queries-Be_eossf.js.map → overnight-queries-C_AfcL7q.js.map} +1 -1
- package/dist/core/web/public/next/assets/preloaded-CctOitLu.js +2 -0
- package/dist/core/web/public/next/assets/preloaded-CctOitLu.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-CbAGCNKt.js +1 -0
- package/dist/core/web/public/next/assets/{queries-CYEVCq5r.js → queries-THD05gHP.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-CYEVCq5r.js.map → queries-THD05gHP.js.map} +1 -1
- package/dist/core/web/public/next/assets/reasoning-pref-BVPu0SME.js +2 -0
- package/dist/core/web/public/next/assets/{reasoning-pref-a_ZP6GzU.js.map → reasoning-pref-BVPu0SME.js.map} +1 -1
- package/dist/core/web/public/next/assets/reveal-anchor-wCT5b4m3.js +2 -0
- package/dist/core/web/public/next/assets/reveal-anchor-wCT5b4m3.js.map +1 -0
- package/dist/core/web/public/next/assets/seat-subscription-CR_VylsK.js +2 -0
- package/dist/core/web/public/next/assets/{seat-subscription-CRigL-GE.js.map → seat-subscription-CR_VylsK.js.map} +1 -1
- package/dist/core/web/public/next/assets/{section-visibility-u7q-Q9AA.js → section-visibility-B0xXUQJ0.js} +2 -2
- package/dist/core/web/public/next/assets/{section-visibility-u7q-Q9AA.js.map → section-visibility-B0xXUQJ0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{sidebar-model-i4WRuQ6j.js → sidebar-model-C5wVXGpb.js} +2 -2
- package/dist/core/web/public/next/assets/{sidebar-model-i4WRuQ6j.js.map → sidebar-model-C5wVXGpb.js.map} +1 -1
- package/dist/core/web/public/next/assets/slots-DDd8cEoh.js +3 -0
- package/dist/core/web/public/next/assets/{slots-CV9ZuLQU.js.map → slots-DDd8cEoh.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-data-BFxAlefI.js +2 -0
- package/dist/core/web/public/next/assets/{surface-data-DLvmUX9z.js.map → surface-data-BFxAlefI.js.map} +1 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CHusyO9q.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CHusyO9q.js.map +1 -0
- package/dist/core/web/public/next/assets/{tasks-model-DWs5u9RO.js → tasks-model-DvkWveXs.js} +2 -2
- package/dist/core/web/public/next/assets/{tasks-model-DWs5u9RO.js.map → tasks-model-DvkWveXs.js.map} +1 -1
- package/dist/core/web/public/next/assets/{terminal-icons-Ct9cZsEK.js → terminal-icons-Dp6pJgV2.js} +2 -2
- package/dist/core/web/public/next/assets/{terminal-icons-Ct9cZsEK.js.map → terminal-icons-Dp6pJgV2.js.map} +1 -1
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js +2 -0
- package/dist/core/web/public/next/assets/types-D5XOdyw8.js.map +1 -0
- package/dist/core/web/public/next/assets/{usage-queries-CI_y9oWZ.js → usage-queries-CUTmnegA.js} +2 -2
- package/dist/core/web/public/next/assets/{usage-queries-CI_y9oWZ.js.map → usage-queries-CUTmnegA.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-guarded-action-UCX2u1t1.js +2 -0
- package/dist/core/web/public/next/assets/{use-guarded-action-DVCtLzSo.js.map → use-guarded-action-UCX2u1t1.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-ticker-C3LQ2IYs.js → use-ticker-OXAjob3y.js} +2 -2
- package/dist/core/web/public/next/assets/{use-ticker-C3LQ2IYs.js.map → use-ticker-OXAjob3y.js.map} +1 -1
- package/dist/core/web/public/next/assets/use-token-gate-CDDRAoKH.js +2 -0
- package/dist/core/web/public/next/assets/{use-token-gate-B5gOFkeH.js.map → use-token-gate-CDDRAoKH.js.map} +1 -1
- package/dist/core/web/public/next/assets/useChartWidth-BW6SwYIK.css +1 -0
- package/dist/core/web/public/next/assets/useChartWidth-D9M7kUw7.js +2 -0
- package/dist/core/web/public/next/assets/{useChartWidth-0APW0BR3.js.map → useChartWidth-D9M7kUw7.js.map} +1 -1
- package/dist/core/web/public/next/assets/{useSeatsRefresh-BN8bso-n.js → useSeatsRefresh-B2dCVcj9.js} +2 -2
- package/dist/core/web/public/next/assets/{useSeatsRefresh-BN8bso-n.js.map → useSeatsRefresh-B2dCVcj9.js.map} +1 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-BL3CljSI.js +2 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BL3CljSI.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-icons-DASWdYuE.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-DASWdYuE.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-BQ0Y2CSr.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-BQ0Y2CSr.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js +3 -0
- package/dist/core/web/public/next/assets/verse-store-b_Lek_c5.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-ui-store-D7YXi63q.js +3 -0
- package/dist/core/web/public/next/assets/{verse-ui-store-Dy4HuDBV.js.map → verse-ui-store-D7YXi63q.js.map} +1 -1
- package/dist/core/web/public/next/assets/{viewport-DDoJ_xVq.js → viewport-BYGH5EgA.js} +2 -2
- package/dist/core/web/public/next/assets/{viewport-DDoJ_xVq.js.map → viewport-BYGH5EgA.js.map} +1 -1
- package/dist/core/web/public/next/assets/{warmup-BsL2LdR-.js → warmup-AsqwWCUi.js} +3 -3
- package/dist/core/web/public/next/assets/{warmup-BsL2LdR-.js.map → warmup-AsqwWCUi.js.map} +1 -1
- package/dist/core/web/public/next/assets/{workspace-model-Dd3LmIym.js → workspace-model-CXorJr0G.js} +2 -2
- package/dist/core/web/public/next/assets/{workspace-model-Dd3LmIym.js.map → workspace-model-CXorJr0G.js.map} +1 -1
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +5 -2
- package/dist/cli/activation.d.ts +0 -41
- package/dist/cli/activation.js +0 -485
- package/dist/cli/activation.js.map +0 -1
- package/dist/core/fleet/generated-repair-resolution.d.ts +0 -36
- package/dist/core/fleet/generated-repair-resolution.js +0 -245
- package/dist/core/fleet/generated-repair-resolution.js.map +0 -1
- package/dist/core/local-runtime/llama/port.d.ts +0 -17
- package/dist/core/local-runtime/llama/port.js +0 -47
- package/dist/core/local-runtime/llama/port.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-host.d.ts +0 -54
- package/dist/core/local-runtime/llama/proxy-host.js +0 -159
- package/dist/core/local-runtime/llama/proxy-host.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-process.d.ts +0 -148
- package/dist/core/local-runtime/llama/proxy-process.js +0 -250
- package/dist/core/local-runtime/llama/proxy-process.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-record.d.ts +0 -40
- package/dist/core/local-runtime/llama/proxy-record.js +0 -133
- package/dist/core/local-runtime/llama/proxy-record.js.map +0 -1
- package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +0 -118
- package/dist/core/local-runtime/llama/proxy-supervisor.js +0 -511
- package/dist/core/local-runtime/llama/proxy-supervisor.js.map +0 -1
- package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-xVYFAeA8.js.map +0 -1
- package/dist/core/web/public/next/assets/App-CbDCLAxn.js +0 -7
- package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-B5HWJi9I.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-BF5UCsMv.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-nfSb59Kv.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-DqqYnLek.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-DqqYnLek.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DoqjyVoj.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-DoqjyVoj.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-lLV-OR63.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js +0 -2
- package/dist/core/web/public/next/assets/CommandSection-fiZ4DJpM.js.map +0 -1
- package/dist/core/web/public/next/assets/DockHost-BZReKwos.js +0 -2
- package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js +0 -3
- package/dist/core/web/public/next/assets/FleetSection-rPLy_NPo.js.map +0 -1
- package/dist/core/web/public/next/assets/GearTray-CkviqjYr.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-DcPj1ri9.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-BSFTlMRF.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-CvcYu1X_.js +0 -2
- package/dist/core/web/public/next/assets/MindSection-DcO9fmYe.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Cqn2uPV6.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Cqn2uPV6.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-Cum_DqQZ.css +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-hiTINupk.js +0 -2
- package/dist/core/web/public/next/assets/NewChatDialog-utSckh7C.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-7N3YSUHN.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-CqzkaAjG.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-sZhApA8k.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-6RMd_aZg.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-D1LZxQjN.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-D1LZxQjN.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-CT92PqM_.js +0 -3
- package/dist/core/web/public/next/assets/SessionInsightChip-CwlakUYU.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-DgSaHFK4.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-DgSaHFK4.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-C7APkGPt.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-ZPyXUS_I.js +0 -2
- package/dist/core/web/public/next/assets/Sidebar-Chsgazmk.js +0 -3
- package/dist/core/web/public/next/assets/TerminalPane-BDkKFych.js +0 -7
- package/dist/core/web/public/next/assets/UniverseConsoleApp-BE72VyBL.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-DsC5WmLk.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-CXJWDiEM.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-Dq_hREXs.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-BYW9dm90.css +0 -1
- package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js +0 -10
- package/dist/core/web/public/next/assets/Workspace-CKvVEPFq.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-BnjZy8a-.js +0 -2
- package/dist/core/web/public/next/assets/budget-queries-Cp6vO7FH.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-s3W6Z96D.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-BGznyHNQ.js +0 -2
- package/dist/core/web/public/next/assets/context-model-DeJ28uSZ.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-_mEgy4eg.js +0 -2
- package/dist/core/web/public/next/assets/control-queries-C4TG8blN.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-mnIwSpRp.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-mnIwSpRp.js.map +0 -1
- package/dist/core/web/public/next/assets/git-model-DaGw1SzS.js +0 -5
- package/dist/core/web/public/next/assets/global-DG1fmn4y.js +0 -2
- package/dist/core/web/public/next/assets/global-DG1fmn4y.js.map +0 -1
- package/dist/core/web/public/next/assets/global-_tOCFt9y.css +0 -1
- package/dist/core/web/public/next/assets/guarded-action--lguLXfz.js +0 -2
- package/dist/core/web/public/next/assets/guarded-action--lguLXfz.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-YPgbel-I.js +0 -2
- package/dist/core/web/public/next/assets/icons-YPgbel-I.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-DjXM3IDg.js +0 -2
- package/dist/core/web/public/next/assets/overnight-queries-Be_eossf.js +0 -2
- package/dist/core/web/public/next/assets/primitives-Dl3SEQvh.js +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-a_ZP6GzU.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-CRigL-GE.js +0 -2
- package/dist/core/web/public/next/assets/slots-CV9ZuLQU.js +0 -3
- package/dist/core/web/public/next/assets/surface-data-DLvmUX9z.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-Ct2JwXvL.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-DVCtLzSo.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-B5gOFkeH.js +0 -2
- package/dist/core/web/public/next/assets/useActivity-C3R1Sudh.js +0 -2
- package/dist/core/web/public/next/assets/useActivity-C3R1Sudh.js.map +0 -1
- package/dist/core/web/public/next/assets/useChartWidth-0APW0BR3.js +0 -2
- package/dist/core/web/public/next/assets/useChartWidth-BAtVgn2n.css +0 -1
- package/dist/core/web/public/next/assets/verse-model-yHPwjf-7.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-yHPwjf-7.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-queries-2PxoBISm.js +0 -2
- package/dist/core/web/public/next/assets/verse-queries-2PxoBISm.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-store-DHTuZpYa.js +0 -3
- package/dist/core/web/public/next/assets/verse-store-DHTuZpYa.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-ui-store-Dy4HuDBV.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._slot_ka933_6{gap:var(--space-1);box-sizing:border-box;width:100%;max-width:calc(var(--measure-read) + 2 * var(--space-6));padding:var(--space-2) var(--space-6) 0;flex-direction:column;flex-shrink:0;margin:0 auto;display:flex}._list_ka933_18{gap:var(--space-2);overscroll-behavior:contain;flex-direction:column;max-height:45vh;display:flex;overflow-y:auto}._notice_ka933_29{min-width:0;animation:_notice-in_ka933_1 var(--duration-base) var(--ease-decelerate)}._more_ka933_34{min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-sm);color:var(--text-secondary);font:inherit;font-size:var(--text-xs-size);cursor:pointer;background:0 0;border:0;align-self:flex-end}._more_ka933_34:hover{color:var(--text-primary);background:var(--bg-hover)}._more_ka933_34:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}@keyframes _notice-in_ka933_1{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._notice_ka933_29{animation:none}}:root[data-motion=reduce] ._notice_ka933_29{animation:none}@media (max-width:479.98px){._slot_ka933_6{padding:var(--space-2) var(--space-3) 0}}._tray_10ld6_5{align-items:center;gap:var(--space-1);min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-full);background:var(--bg-surface);color:var(--text-secondary);font:inherit;font-size:var(--text-xs-size);white-space:nowrap;cursor:pointer;transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);flex:none;display:inline-flex}._tray_10ld6_5:hover{color:var(--text-primary);background:var(--bg-hover);border-color:var(--border-default)}._tray_10ld6_5:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._tray_10ld6_5[aria-pressed=true]{border-color:var(--border-strong);color:var(--text-primary)}._ring_10ld6_27{border:1.5px dashed var(--status-running-solid);border-radius:var(--radius-full);width:10px;height:10px;animation:_tray-turn_10ld6_1 calc(var(--duration-pulse) * 3) linear infinite}._count_10ld6_34{font-family:var(--font-display);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums;color:var(--text-primary)}@keyframes _tray-turn_10ld6_1{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._ring_10ld6_27{animation:none}}:root[data-motion=reduce] ._ring_10ld6_27{animation:none}@media (max-width:479.98px){._word_10ld6_48{display:none}}._footer_hpc1p_15{gap:var(--space-2);flex-wrap:nowrap}._footerLeft_hpc1p_16,._footerRight_hpc1p_17{align-items:center;gap:var(--space-2);flex:none;display:flex}._footerLeft_hpc1p_16{flex:1 0 auto}._footerRight_hpc1p_17{justify-content:flex-end}._iconButton_hpc1p_21{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-base-size);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._iconButton_hpc1p_21:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._iconButton_hpc1p_21:active:not(:disabled){background:var(--bg-active)}._iconButton_hpc1p_21:disabled{opacity:.45;cursor:not-allowed}._iconButton_hpc1p_21[aria-disabled=true]{opacity:.55}._iconButtonDanger_hpc1p_37{color:var(--status-danger-fg)}._boxDragging_hpc1p_39{border-color:var(--accent-500);background:var(--accent-50,var(--bg-hover));border-style:dashed}._boxBypass_hpc1p_41{border-color:var(--status-danger-solid)}._boxBypass_hpc1p_41._boxBypass_hpc1p_41:has(>textarea:focus){border-color:var(--status-danger-solid);box-shadow:0 0 0 1px var(--status-danger-solid)}._composerCompact_hpc1p_46 ._footer_hpc1p_15,._composerCompact_hpc1p_46 ._footerLeft_hpc1p_16,._composerCompact_hpc1p_46 ._footerRight_hpc1p_17{gap:var(--space-1)}._controlWrap_hpc1p_51{flex:none;display:inline-flex;position:relative}._control_hpc1p_51{align-items:center;gap:var(--space-1);min-height:var(--control-h-sm);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);display:inline-flex}._control_hpc1p_51:hover:not(:disabled),._control_hpc1p_51[aria-expanded=true]{background:var(--bg-hover);color:var(--text-primary)}._control_hpc1p_51:active:not(:disabled){background:var(--bg-active)}._control_hpc1p_51:disabled{opacity:.55;cursor:not-allowed}._controlDanger_hpc1p_69,._controlDanger_hpc1p_69:hover:not(:disabled),._controlDanger_hpc1p_69[aria-expanded=true]{color:var(--status-danger-fg);background:var(--status-danger-bg)}._controlIconOnly_hpc1p_72{padding:0 var(--space-2)}._controlIcon_hpc1p_72{font-size:var(--text-xs-size);flex-shrink:0;line-height:1;display:inline-flex}._controlText_hpc1p_75{white-space:nowrap}._caret_hpc1p_76{opacity:.7;border-top:4px solid;border-left:3px solid #0000;border-right:3px solid #0000;flex-shrink:0;width:0;height:0}._controlStatic_hpc1p_87{min-height:var(--control-h-sm);padding:0 var(--space-2);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;flex:none;align-items:center;display:inline-flex}._menu_hpc1p_99{bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);min-width:240px;max-width:min(360px, calc(100vw - var(--space-8)));max-height:min(420px,60vh);padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);color:var(--text-primary);box-shadow:var(--shadow-menu,var(--shadow-md));flex-direction:column;gap:1px;display:flex;position:absolute;right:0;overflow-y:auto}._footerLeft_hpc1p_16 ._menu_hpc1p_99{left:0;right:auto}._menuWide_hpc1p_119{min-width:280px}._menuHeading_hpc1p_120{justify-content:space-between;align-items:center;gap:var(--space-2);margin:0 0 var(--space-1);padding:var(--space-2);border-bottom:1px solid var(--border-subtle);font-size:var(--text-xs-size);color:var(--text-tertiary);display:flex}._menuHeading_hpc1p_120 strong{color:var(--text-primary);font-weight:var(--font-weight-medium)}._menuKbd_hpc1p_132{font-family:var(--font-mono);font-size:var(--text-2xs-size);padding:0 var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-secondary)}._menuNote_hpc1p_140{margin:0 0 var(--space-1);padding:0 var(--space-2) var(--space-1);font-size:var(--text-xs-size);color:var(--text-tertiary)}._menuItem_hpc1p_146{align-items:flex-start;gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;color:var(--text-primary);cursor:pointer;outline:none;display:flex}._menuItem_hpc1p_146:hover,._menuItem_hpc1p_146:focus-visible,._menuItem_hpc1p_146:focus{background:var(--bg-hover)}._menuItem_hpc1p_146:focus-visible{box-shadow:inset 0 0 0 1px var(--accent-500)}._menuItem_hpc1p_146[aria-disabled=true]{cursor:not-allowed}._menuItem_hpc1p_146[aria-disabled=true] ._menuLabel_hpc1p_163{color:var(--text-tertiary)}._menuItem_hpc1p_146[aria-checked=true] ._menuLabel_hpc1p_163{font-weight:var(--font-weight-medium)}._menuItemDanger_hpc1p_165 ._menuLabel_hpc1p_163,._menuItemDanger_hpc1p_165 ._menuCheck_hpc1p_166{color:var(--status-danger-fg)}._menuItem_hpc1p_146[data-capacity=tight] ._menuDesc_hpc1p_167{color:var(--status-warning-fg)}._menuItem_hpc1p_146[data-capacity=blocked] ._menuDesc_hpc1p_167{color:var(--status-danger-fg)}._menuCheck_hpc1p_166{width:1.1em;color:var(--accent-600);font-size:var(--text-sm-size);line-height:var(--text-sm-line);text-align:center;flex-shrink:0}._menuText_hpc1p_177{flex-direction:column;gap:1px;min-width:0;display:flex}._menuLabel_hpc1p_163{font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._menuDesc_hpc1p_167{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-tertiary)}._menuSeparator_hpc1p_180{height:1px;margin:var(--space-1) 0;background:var(--border-subtle)}._controlList_hpc1p_183{padding-bottom:var(--space-3);flex-direction:column;gap:1px;display:flex}._controlList_hpc1p_183+._controlList_hpc1p_183{border-top:1px solid var(--border-subtle);padding-top:var(--space-2)}._controlList_hpc1p_183 ._menuHeading_hpc1p_120{font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;border-bottom:0;justify-content:flex-start;margin:0}._controlList_hpc1p_183 ._menuItem_hpc1p_146{min-height:var(--control-h);align-items:center}._engine-claude_hpc1p_198{--verse-engine:var(--engine-claude)}._engine-codex_hpc1p_199{--verse-engine:var(--engine-codex)}._engine-grok_hpc1p_200{--verse-engine:var(--engine-grok)}._engine-local_hpc1p_201{--verse-engine:var(--engine-local)}._seatChipWrap_hpc1p_202{flex:none;display:inline-flex;position:relative}._seatChip_hpc1p_202{align-items:center;gap:var(--space-2);min-height:var(--control-h-sm);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);display:inline-flex}._seatChip_hpc1p_202:hover:not(:disabled),._seatChip_hpc1p_202[aria-expanded=true]{background:var(--bg-hover);color:var(--text-primary)}._seatChip_hpc1p_202:disabled{opacity:.55;cursor:not-allowed}._seatChipCompact_hpc1p_218{gap:var(--space-1)}._seatChipText_hpc1p_219{white-space:nowrap}._monogram_hpc1p_220{width:var(--engine-marker-h,14px);height:var(--engine-marker-h,14px);border-radius:var(--radius-xs);border-left:2px solid var(--verse-engine,var(--text-tertiary));background:var(--bg-hover);color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-2xs-size);font-weight:var(--font-weight-semibold,600);flex-shrink:0;justify-content:center;align-items:center;line-height:1;display:inline-flex}._menuItem_hpc1p_146 ._monogram_hpc1p_220{margin-top:2px}._ring_hpc1p_238{flex-shrink:0}._ringTrack_hpc1p_239{stroke:var(--border-default)}._ringFill_hpc1p_240{stroke:var(--data-seq-5);transition:stroke-dasharray var(--duration-base) var(--ease-standard)}._ring_hpc1p_238[data-tone=tight] ._ringFill_hpc1p_240{stroke:var(--status-warning-solid)}._ring_hpc1p_238[data-tone=limit] ._ringFill_hpc1p_240{stroke:var(--status-danger-solid)}._ring_hpc1p_238[data-tone=unknown] ._ringTrack_hpc1p_239{stroke-dasharray:2 2}._seatTip_hpc1p_245{bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);width:max-content;max-width:min(320px, calc(100vw - var(--space-8)));padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);border:1px solid var(--border-default);background:var(--bg-surface-raised);color:var(--text-primary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);box-shadow:var(--shadow-menu,var(--shadow-md));pointer-events:none;position:absolute;right:0}._tip_hpc1p_262{text-align:left;flex-direction:column;gap:2px;max-width:320px;display:flex}._tip_hpc1p_262 strong{font-weight:var(--font-weight-medium)}._tipMuted_hpc1p_264{opacity:.75}._budgetDialog_hpc1p_266{width:min(640px, calc(100vw - var(--space-8)))}._contextRing_hpc1p_270{align-items:center;gap:var(--space-1);min-height:var(--control-h-sm);padding:0 var(--space-1);border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums;cursor:default;flex:none;display:inline-flex}._contextRing_hpc1p_270:focus-visible{outline:2px solid var(--accent-500);outline-offset:1px}._contextRing_hpc1p_270 circle{fill:none;stroke-width:2px}._contextFill_hpc1p_285{stroke:var(--data-seq-5);stroke-linecap:round;transition:stroke-dasharray var(--duration-base) var(--ease-standard)}._contextTick_hpc1p_290{stroke:var(--text-secondary);stroke-width:1.25px;stroke-linecap:round}._contextRing_hpc1p_270[data-tone=warn] ._contextFill_hpc1p_285{stroke:var(--status-warning-solid)}._contextRing_hpc1p_270[data-tone=warn]{color:var(--status-warning-fg)}._contextRing_hpc1p_270[data-tone=danger] ._contextFill_hpc1p_285,._contextRing_hpc1p_270[data-tone=over] ._contextFill_hpc1p_285{stroke:var(--status-danger-solid)}._contextRing_hpc1p_270[data-tone=danger],._contextRing_hpc1p_270[data-tone=over]{color:var(--status-danger-fg)}._contextRing_hpc1p_270[data-tone=unknown] ._ringTrack_hpc1p_239{stroke-dasharray:2 2}._contextRing_hpc1p_270[data-exact=false] ._contextFill_hpc1p_285{opacity:.55}._contextText_hpc1p_301{min-width:4ch}._sendKey_hpc1p_304{font-size:var(--text-2xs-size);opacity:.8;line-height:1}._queue_hpc1p_307{max-width:var(--measure-read);margin:0 auto var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--border-subtle);border-left:2px solid var(--status-running-solid);border-radius:var(--radius-sm);background:var(--bg-surface-raised)}._queueHeld_hpc1p_316{border-left-color:var(--status-warning-solid)}._queueHeading_hpc1p_317{margin:0 0 var(--space-1);font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary)}._queueHeld_hpc1p_316 ._queueHeading_hpc1p_317{color:var(--status-warning-fg)}._queueList_hpc1p_324{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._queueItem_hpc1p_325{align-items:center;gap:var(--space-2);min-width:0;display:flex}._queueIndex_hpc1p_326{width:1.4em;color:var(--text-tertiary);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0}._queueText_hpc1p_334{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--text-sm-size);color:var(--text-primary);flex:auto;overflow:hidden}._queueActions_hpc1p_343{align-items:center;gap:var(--space-1);flex-shrink:0;display:inline-flex}._queueButton_hpc1p_344{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-xs);color:var(--text-secondary);font-size:var(--text-xs-size)}._queueButton_hpc1p_344:hover:not(:disabled){border-color:var(--border-strong);color:var(--text-primary)}._queueButtonPrimary_hpc1p_353{border-color:var(--accent-600);color:var(--accent-700)}._queueButtonPrimary_hpc1p_353:hover:not(:disabled){background:var(--accent-600);border-color:var(--accent-600);color:var(--accent-contrast)}._queueRemove_hpc1p_355{width:var(--control-h-xs);height:var(--control-h-xs);border-radius:var(--radius-xs);color:var(--text-tertiary);justify-content:center;align-items:center;display:inline-flex}._queueRemove_hpc1p_355:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._chips_hpc1p_367{gap:var(--space-2);padding:var(--space-3) var(--space-3) 0;flex-wrap:wrap;margin:0;list-style:none;display:flex}._chip_hpc1p_367{align-items:center;gap:var(--space-2);max-width:240px;padding:var(--space-1) var(--space-1) var(--space-1) var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-surface);display:flex}._chip_hpc1p_367[data-status=error]{border-color:var(--status-danger-solid)}._chipThumb_hpc1p_379,._chipExt_hpc1p_380{border-radius:var(--radius-xs);object-fit:cover;flex-shrink:0;width:36px;height:36px}._chipExt_hpc1p_380{background:var(--bg-hover);color:var(--text-secondary);font-family:var(--font-display);font-size:var(--text-2xs-size);letter-spacing:var(--tracking-label,.06em);justify-content:center;align-items:center;display:inline-flex}._chipText_hpc1p_397{flex-direction:column;min-width:0;display:flex}._chipName_hpc1p_398{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs-size);color:var(--text-primary);overflow:hidden}._chipMeta_hpc1p_399{align-items:center;gap:var(--space-1);font-size:var(--text-2xs-size);color:var(--text-tertiary);display:inline-flex}._chip_hpc1p_367[data-status=error] ._chipMeta_hpc1p_399{color:var(--status-danger-fg);white-space:normal}._chipSpinner_hpc1p_401{border-radius:var(--radius-full);border:1.5px solid var(--border-default);border-top-color:var(--status-running-solid);width:8px;height:8px;animation:_composer-spin_hpc1p_1 var(--duration-pulse,1.6s) linear infinite}._chipRemove_hpc1p_409{width:var(--control-h-xs);height:var(--control-h-xs);border-radius:var(--radius-xs);color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}._chipRemove_hpc1p_409:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._suggest_hpc1p_422{left:var(--space-2);right:var(--space-2);bottom:calc(100% + var(--space-2));z-index:var(--z-dropdown);max-height:min(320px,50vh);padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);box-shadow:var(--shadow-menu,var(--shadow-md));position:absolute;overflow-y:auto}._suggestHeading_hpc1p_436{padding:var(--space-1) var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary);margin:0}._suggestList_hpc1p_446{margin:0;padding:0;list-style:none}._suggestItem_hpc1p_447{align-items:baseline;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-radius:var(--radius-xs);cursor:pointer;display:flex}._suggestItem_hpc1p_447[aria-selected=true]{background:var(--bg-hover);box-shadow:inset 2px 0 0 var(--accent-500)}._suggestItem_hpc1p_447[aria-disabled=true]{cursor:not-allowed}._suggestItem_hpc1p_447[aria-disabled=true] ._suggestPrimary_hpc1p_457{color:var(--text-tertiary)}._suggestPrimary_hpc1p_457{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-primary);overflow:hidden}._suggestSecondary_hpc1p_467{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--text-xs-size);color:var(--text-tertiary);flex-shrink:1;overflow:hidden}._suggestStatus_hpc1p_476{padding:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary);margin:0}._bypassList_hpc1p_479{margin:0 0 var(--space-4);padding-left:var(--space-4);color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line-relaxed,var(--text-sm-line))}._bypassList_hpc1p_479 kbd{font-family:var(--font-mono);font-size:var(--text-2xs-size);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);padding:0 3px}._bypassActions_hpc1p_493{justify-content:flex-end;gap:var(--space-2);display:flex}._sheetBackdrop_hpc1p_496{z-index:var(--z-dialog);background:var(--bg-overlay,#00000052);justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}._sheet_hpc1p_496{width:100%;max-height:75vh;padding:var(--space-3) var(--space-4) calc(var(--space-4) + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-default);border-radius:var(--radius-lg) var(--radius-lg) 0 0;background:var(--bg-surface-raised);color:var(--text-primary);animation:_composer-rise_hpc1p_1 var(--duration-slow,.22s) var(--ease-standard);overflow-y:auto}._sheetHeader_hpc1p_516{justify-content:space-between;align-items:center;gap:var(--space-2);display:flex}._sheetTitle_hpc1p_517{font-size:var(--text-base-size);font-weight:var(--font-weight-medium);margin:0}._sheetClose_hpc1p_518{min-height:var(--control-h);padding:0 var(--space-3);border-radius:var(--radius-sm);color:var(--accent-700);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._sheetNote_hpc1p_526{margin:var(--space-1) 0 var(--space-3);font-size:var(--text-xs-size);color:var(--text-tertiary)}._sheetBody_hpc1p_527{gap:var(--space-2);flex-direction:column;display:flex}@keyframes _composer-spin_hpc1p_1{to{transform:rotate(360deg)}}@keyframes _composer-rise_hpc1p_1{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._chipSpinner_hpc1p_401,:root:not([data-motion=full]) ._sheet_hpc1p_496{animation:none}:root:not([data-motion=full]) ._contextFill_hpc1p_285{transition:none}}:root[data-motion=reduce] ._chipSpinner_hpc1p_401,:root[data-motion=reduce] ._sheet_hpc1p_496{animation:none}._workspace_c3ra8_1{background:var(--bg-surface);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}._header_c3ra8_14{align-items:center;gap:var(--space-3);height:var(--strip-height);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);flex-wrap:nowrap;flex-shrink:0;display:flex;position:relative}._headerSpacer_c3ra8_14{flex:1 1 var(--space-4);min-width:var(--space-2)}._identity_c3ra8_41{flex-direction:column;flex:0 auto;justify-content:center;gap:1px;min-width:0;display:flex;overflow:hidden}._eyebrow_c3ra8_50{max-width:100%;color:var(--text-tertiary);font-size:var(--text-2xs-size,11px);line-height:1.2;font-weight:var(--font-weight-medium);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._eyebrowSkeleton_c3ra8_60{height:calc(var(--text-2xs-size,11px) * 1.2);border-radius:var(--radius-xs);width:9ch}._title_c3ra8_68,._titleStatic_c3ra8_69{min-width:0;max-width:100%;font-family:var(--font-display);font-size:var(--text-md-size);line-height:1.2;font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display,-.02em)}._titleStatic_c3ra8_69{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._titleStatic_c3ra8_69[data-state=empty]{color:var(--text-secondary)}._title_c3ra8_68{margin-left:calc(-1 * var(--space-2));max-width:calc(100% + var(--space-2))}._titleButton_c3ra8_94{max-width:100%;padding:2px var(--space-2);border-radius:var(--radius-xs);color:inherit;font:inherit;letter-spacing:inherit;text-align:left;text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}._titleButton_c3ra8_94:hover:not(:disabled){background:var(--bg-hover)}._titleButton_c3ra8_94:active:not(:disabled){background:var(--bg-active)}._titleButton_c3ra8_94:disabled{cursor:default}._titleInput_c3ra8_123{width:calc(100% + var(--space-2));max-width:48ch;padding:2px var(--space-2);margin-left:calc(-1 * var(--space-2));border:1px solid var(--accent-500);border-radius:var(--radius-xs);background:var(--bg-input);color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-md-size);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display,-.02em)}._titleSkeleton_c3ra8_141{height:calc(var(--text-md-size) * 1.2);border-radius:var(--radius-xs);width:22ch;max-width:40%}._seatPill_c3ra8_153{align-items:center;gap:var(--space-2);min-width:0;max-width:28ch;padding:0 var(--space-2);height:var(--control-h-xs);border-radius:var(--radius-xs);background:color-mix(in srgb, var(--verse-engine,var(--text-tertiary)) 10%, transparent);color:var(--text-secondary);font-size:var(--text-2xs-size,11px);flex:0 auto;display:inline-flex}._seatPill_c3ra8_153[data-seat-capacity]{max-width:40ch}._engineDot_c3ra8_174{border-radius:var(--radius-full);background:var(--verse-engine,var(--text-tertiary));flex-shrink:0;width:5px;height:5px}._seatText_c3ra8_157{text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);font-weight:var(--font-weight-medium);overflow:hidden}._seatPill_c3ra8_153[data-status=running] ._seatText_c3ra8_157{color:var(--status-running-fg)}._seatPill_c3ra8_153[data-status=error] ._seatText_c3ra8_157{color:var(--status-danger-fg)}._engine-claude_c3ra8_190{--verse-engine:var(--engine-claude,#c96442)}._engine-codex_c3ra8_191{--verse-engine:var(--engine-codex,#10a37f)}._engine-grok_c3ra8_192{--verse-engine:var(--engine-grok,#6b7280)}._engine-local_c3ra8_193{--verse-engine:var(--engine-local,#7c5cff)}._streamState_c3ra8_195{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary);flex-shrink:0}._actions_c3ra8_203{align-items:center;gap:var(--space-1);flex:none;display:flex}._actionDivider_c3ra8_212{width:1px;height:var(--space-4);margin:0 var(--space-1);background:var(--border-default);flex-shrink:0}._toggles_c3ra8_221{flex-shrink:0;align-items:center;gap:2px;display:flex}._ghost_c3ra8_228,._ghostIcon_c3ra8_229,._danger_c3ra8_230{border-radius:var(--radius-xs);color:var(--text-tertiary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);flex-shrink:0}._ghostIcon_c3ra8_229{width:var(--control-h-sm);height:var(--control-h-sm);justify-content:center;align-items:center;display:flex}._ghost_c3ra8_228{min-height:var(--control-h-xs);padding:0 var(--space-2)}._ghostIcon_c3ra8_229:hover:not(:disabled),._ghost_c3ra8_228:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}._ghostIcon_c3ra8_229:active:not(:disabled),._ghost_c3ra8_228:active:not(:disabled){background:var(--bg-active)}._ghostIcon_c3ra8_229:disabled,._ghost_c3ra8_228:disabled{opacity:.4;cursor:not-allowed}._ghostIcon_c3ra8_229[aria-pressed=true]{color:var(--text-primary);background:var(--bg-hover)}._ghostIcon_c3ra8_229[aria-pressed=true]:hover:not(:disabled){background:var(--bg-active)}._danger_c3ra8_230{min-height:var(--control-h-xs);padding:0 var(--space-2);color:var(--status-danger-fg)}._danger_c3ra8_230:hover:not(:disabled){background:var(--status-danger-bg)}._danger_c3ra8_230:active:not(:disabled){background:var(--status-danger-bg);border-color:var(--status-danger-solid)}._confirm_c3ra8_262{align-items:center;gap:var(--space-1);display:inline-flex}._confirmText_c3ra8_263{font-size:var(--text-xs-size);color:var(--text-secondary);white-space:nowrap;flex-shrink:0}._meter_c3ra8_274,._ring_c3ra8_275{--meter-color:var(--data-seq-5);--meter-text:var(--text-secondary);align-items:baseline;gap:var(--space-2);flex-shrink:0;display:inline-flex}._meter-warn_c3ra8_285{--meter-color:var(--status-warning-solid);--meter-text:var(--status-warning-fg)}._meter-danger_c3ra8_286{--meter-color:var(--status-danger-solid);--meter-text:var(--status-danger-fg)}._meter-unknown_c3ra8_287{--meter-color:var(--border-strong);--meter-text:var(--text-tertiary)}._meter-over_c3ra8_290{--meter-color:var(--status-danger-solid);--meter-text:var(--status-danger-fg)}._meterTrack_c3ra8_293{background:0 0;height:2px;position:absolute;bottom:-1px;left:0;right:0}._meterFill_c3ra8_301{background:var(--meter-color);height:100%;transition:width var(--duration-slow) var(--ease-decelerate), background var(--duration-base) var(--ease-standard)}._meterTick_c3ra8_310{background:var(--text-tertiary);border-radius:var(--radius-xs);pointer-events:none;width:2px;height:6px;margin-left:-1px;position:absolute;bottom:0}._meterInline_c3ra8_320 ._meterTrack_c3ra8_293{background:var(--meter-track);border-radius:var(--radius-full);width:64px;position:relative;overflow:hidden}._meterText_c3ra8_328{align-items:baseline;gap:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);display:inline-flex}._meterTokens_c3ra8_337,._meterCompact_c3ra8_338{white-space:nowrap}._meterPercent_c3ra8_342{text-align:right;min-width:4ch;color:var(--meter-text);font-weight:var(--font-weight-medium)}._modeWrap_c3ra8_348{flex-shrink:0;display:inline-flex;position:relative}._modeChip_c3ra8_349{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-full);color:var(--text-secondary);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);white-space:nowrap;transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);align-items:center;display:inline-flex}._modeChip_c3ra8_349:hover:not(:disabled){color:var(--text-primary);background:var(--bg-hover)}._modeChip_c3ra8_349:active:not(:disabled){background:var(--bg-active)}._modeChip_c3ra8_349:disabled{opacity:.4;cursor:not-allowed}._modeChip_c3ra8_349[data-mode=expansive]{border-color:var(--accent-500);color:var(--text-primary)}._modeMenu_c3ra8_366{top:calc(100% + var(--space-2));z-index:var(--z-dropdown);width:max-content;min-width:280px;max-width:min(380px, calc(100vw - var(--space-6)));padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);color:var(--text-primary);box-shadow:var(--shadow-menu,var(--shadow-md));flex-direction:column;gap:1px;display:flex;position:absolute;right:0}._modeMenuHeading_c3ra8_387{padding:var(--space-2) var(--space-2) var(--space-1);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._modeItem_c3ra8_393{width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;color:var(--text-primary);flex-direction:column;gap:1px;display:flex}._modeItem_c3ra8_393:hover:not(:disabled),._modeItem_c3ra8_393:focus-visible{background:var(--bg-hover)}._modeItem_c3ra8_393:active:not(:disabled){background:var(--bg-active)}._modeItem_c3ra8_393:disabled{opacity:.5;cursor:not-allowed}._modeItem_c3ra8_393[aria-checked=true]{box-shadow:inset 2px 0 0 var(--accent-500)}._modeItemPrimary_c3ra8_408{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._modeItemSecondary_c3ra8_409{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._modeMenuNote_c3ra8_410{padding:var(--space-1) var(--space-2);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._modeMenuWarn_c3ra8_418{margin:0 var(--space-1);padding:var(--space-1) var(--space-2);border-left:2px solid var(--status-warning-fg,var(--accent-500));color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._modeMenuError_c3ra8_426{padding:var(--space-1) var(--space-2) var(--space-2);color:var(--status-danger-fg);font-size:var(--text-xs-size)}._advice_c3ra8_436{gap:var(--space-2);box-sizing:border-box;width:100%;max-width:calc(var(--measure-read) + 2 * var(--space-6));padding:var(--space-3) var(--space-6) 0;flex-direction:column;flex-shrink:0;margin:0 auto;display:flex}._adviceNote_c3ra8_448{align-items:flex-start;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-left:2px solid var(--status-warning-solid);border-radius:var(--radius-xs);background:var(--status-warning-bg);display:flex}._adviceNote_c3ra8_448[data-level=urge]{border-left-color:var(--status-danger-solid);background:var(--status-danger-bg)}._adviceNote_c3ra8_448[data-kind=expansive]{border-left-color:var(--accent-500);background:var(--bg-hover)}._adviceNote_c3ra8_448[data-kind=compact]{border-left-color:var(--border-strong,var(--border-default));background:var(--bg-hover)}._compactForm_c3ra8_462{align-items:flex-start;gap:var(--space-3);flex:1;min-width:0;display:flex}._compactLabel_c3ra8_463{margin-top:var(--space-1);color:var(--text-secondary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium)}._compactInput_c3ra8_464{width:100%;min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:var(--text-xs-size)}._compactInput_c3ra8_464:focus-visible{outline:2px solid var(--accent-500);outline-offset:1px}._modeItemAction_c3ra8_476{margin-top:var(--space-1);border-top:1px solid var(--border-subtle);border-radius:0 0 var(--radius-xs) var(--radius-xs)}._adviceBody_c3ra8_477{gap:var(--space-1);flex-direction:column;flex:1;min-width:0;display:flex}._adviceTitle_c3ra8_478{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);color:var(--text-primary)}._adviceReasons_c3ra8_479{padding-left:var(--space-4);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4);margin:0;list-style:outside}._adviceFine_c3ra8_487{color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._adviceActions_c3ra8_488{align-items:flex-end;gap:var(--space-1);flex-direction:column;flex-shrink:0;display:flex}._adviceAction_c3ra8_488{min-height:var(--control-h-xs);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;transition:border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);align-items:center;display:inline-flex}._adviceAction_c3ra8_488:hover:not(:disabled){border-color:var(--accent-500)}._adviceAction_c3ra8_488:active:not(:disabled){background:var(--bg-active)}._adviceAction_c3ra8_488:disabled{opacity:.5;cursor:not-allowed}._adviceStatus_c3ra8_507{padding:var(--space-2) var(--space-3);border-left:2px solid var(--accent-500);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line,1.4)}._emptyState_c3ra8_516{justify-content:center;align-items:flex-start;gap:var(--space-3);max-width:52ch;padding:var(--space-8) var(--space-6);flex-direction:column;flex:1;margin:0 auto;display:flex}._emptyMark_c3ra8_527{color:var(--accent-500)}._emptyTitle_c3ra8_528{font-family:var(--font-display);font-size:var(--text-2xl-size);line-height:var(--text-2xl-line);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-display,-.02em)}._emptyBody_c3ra8_535{color:var(--text-secondary);font-size:var(--text-md-size);line-height:var(--text-md-line)}._emptyButton_c3ra8_536{align-items:center;gap:var(--space-2);min-height:var(--control-h);padding:0 var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);transition:border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);display:inline-flex}._emptyButton_c3ra8_536:hover{border-color:var(--accent-500)}._emptyButton_c3ra8_536:active{background:var(--bg-active)}._emptyButton_c3ra8_536 kbd{font-family:var(--font-mono);font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._emptyWarn_c3ra8_552{padding-left:var(--space-3);border-left:2px solid var(--status-warning-solid);color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._emptyWarn_c3ra8_552 code{font-size:var(--text-xs-size);color:var(--text-primary)}@media (max-width:1100px){._meterCompact_c3ra8_338{display:none}}@media (max-width:900px){._seatPill_c3ra8_153{max-width:20ch}._seatPill_c3ra8_153[data-seat-capacity]{max-width:28ch}}@media (max-width:760px){._meterTokens_c3ra8_337{display:none}._seatPill_c3ra8_153{max-width:14ch}._seatPill_c3ra8_153[data-seat-capacity]{max-width:22ch}}@media (max-width:620px){._seatPill_c3ra8_153{display:none}._header_c3ra8_14{gap:var(--space-2)}._advice_c3ra8_436{padding:var(--space-2) var(--space-3) 0}._adviceNote_c3ra8_448,._compactForm_c3ra8_462{flex-direction:column}._adviceActions_c3ra8_488{flex-direction:row;align-items:center}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._meterFill_c3ra8_301{transition:none}}._header_c3ra8_14{padding-left:max(var(--space-3), calc(var(--app-traffic-light-inset,0px) - var(--rail-width,56px) + var(--space-2)))}._ring_c3ra8_275{--meter-text:var(--text-secondary);align-items:center;gap:var(--space-1);min-height:var(--control-h-xs);padding:0 var(--space-1);border-radius:var(--radius-sm);cursor:default;flex-shrink:0;display:inline-flex}._ringSvg_c3ra8_640{flex:none;overflow:visible}._ringTrack_c3ra8_641{fill:none;stroke:var(--meter-track);stroke-width:2px}._ringFill_c3ra8_642{fill:none;stroke:var(--meter-color);stroke-width:2px;stroke-linecap:round;transition:stroke-dasharray var(--duration-base) var(--ease-standard)}._ringTick_c3ra8_649{stroke:var(--text-secondary);stroke-width:1.25px;stroke-linecap:round}._ringText_c3ra8_650{font-family:var(--font-display);font-size:var(--text-2xs-size);font-variant-numeric:tabular-nums;color:var(--meter-text)}._ring_c3ra8_275[data-exact=false] ._ringFill_c3ra8_642{opacity:.55}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._ringFill_c3ra8_642{transition:none}}._adviceStack_c3ra8_663{gap:var(--space-2);flex-direction:column;display:flex}._crumbSep_c3ra8_670{color:var(--text-tertiary)}._crumbBranch_c3ra8_671{font-family:var(--font-mono);font-size:var(--text-2xs-size);color:var(--text-secondary)}._engineTick_c3ra8_678{background:var(--verse-engine,var(--text-tertiary));border-radius:1px;flex-shrink:0;width:2px;height:12px}._monogram_c3ra8_685{font-family:var(--font-display);font-size:var(--text-2xs-size);font-weight:var(--font-weight-semibold);color:var(--text-secondary);flex-shrink:0;align-items:center;display:inline-flex}._modeError_c3ra8_694{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:28ch;font-size:var(--text-2xs-size);color:var(--status-danger-fg);flex-shrink:1;overflow:hidden}._queueHost_c3ra8_709{box-sizing:border-box;width:100%;padding:var(--space-2) var(--space-6) 0;flex-shrink:0}._queueHost_c3ra8_709:empty{display:none}._queueHost_c3ra8_709>*{margin-bottom:0}@media (max-width:900px){._queueHost_c3ra8_709{padding:var(--space-2) var(--space-4) 0}}._liveRow_c3ra8_722{align-items:center;gap:var(--space-3);box-sizing:border-box;width:100%;max-width:calc(var(--measure-read) + 2 * var(--space-6));padding:var(--space-2) var(--space-6) 0;flex-shrink:0;margin:0 auto;display:flex}._liveRow_c3ra8_722>:first-child{flex:1;min-width:0}._liveRow_c3ra8_722[data-running]>:first-child{padding-top:var(--space-1);border-top:1px solid var(--status-running-solid)}._liveSpacer_c3ra8_738{flex:1}._engineNotice_c3ra8_741{align-items:baseline;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-left:2px solid var(--status-warning-solid);border-radius:0 var(--radius-sm) var(--radius-sm) 0;background:var(--status-warning-bg);color:var(--text-primary);font-size:var(--text-sm-size);line-height:var(--text-sm-line);margin:0;display:flex}._engineNotice_c3ra8_741[data-kind=watchdog]{border-left-color:var(--status-running-solid);background:var(--status-running-bg)}._engineNoticeWord_c3ra8_755{font-weight:var(--font-weight-semibold);color:var(--status-warning-fg);flex-shrink:0}._engineNotice_c3ra8_741[data-kind=watchdog] ._engineNoticeWord_c3ra8_755{color:var(--status-running-fg)}@media (max-width:479.98px){._liveRow_c3ra8_722{padding:var(--space-2) var(--space-3) 0}._seatPill_c3ra8_153 ._seatText_c3ra8_157,._paneToggle_c3ra8_768{display:none}}._banner_tv0om_4{gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);font-size:var(--text-sm-size);border-left-width:3px;min-width:0;max-width:100%;display:grid}._banner_tv0om_4[data-tone=danger]{border-left-color:var(--status-danger-solid)}._banner_tv0om_4[data-tone=warning]{border-left-color:var(--status-warning-solid)}._banner_tv0om_4[data-tone=neutral]{border-left-color:var(--status-neutral-solid)}._head_tv0om_22{align-items:center;gap:var(--space-2);min-width:0;display:flex}._headline_tv0om_29{min-width:0;font-weight:var(--font-weight-medium);overflow-wrap:anywhere;flex:auto}._list_tv0om_36{gap:var(--space-2);margin:0;padding:0;list-style:none;display:grid}._row_tv0om_44{gap:var(--space-1);min-width:0;display:grid}._rowHead_tv0om_50{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}._dot_tv0om_57{background:var(--status-neutral-solid);border-radius:50%;flex:none;align-self:center;width:8px;height:8px}._row_tv0om_44[data-tone=danger] ._dot_tv0om_57{background:var(--status-danger-solid)}._row_tv0om_44[data-tone=warning] ._dot_tv0om_57{background:var(--status-warning-solid)}._row_tv0om_44[data-tone=success] ._dot_tv0om_57{background:var(--status-success-solid)}._label_tv0om_70{font-weight:var(--font-weight-medium)}._word_tv0om_72{color:var(--text-secondary)}._row_tv0om_44[data-tone=danger] ._word_tv0om_72{color:var(--status-danger-fg)}._row_tv0om_44[data-tone=warning] ._word_tv0om_72{color:var(--status-warning-fg)}._reset_tv0om_76{color:var(--text-tertiary);font-variant-numeric:tabular-nums}._detail_tv0om_81{color:var(--text-secondary);font-size:var(--text-xs-size);overflow-wrap:anywhere;margin:0}._actions_tv0om_88{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}._command_tv0om_95{min-width:0;padding:2px var(--space-1);border-radius:var(--radius-xs);background:var(--bg-code);font-size:var(--text-xs-size);overflow-wrap:anywhere;flex:16rem}._status_tv0om_105{color:var(--text-tertiary);font-size:var(--text-xs-size);margin:0}._status_tv0om_105[data-error=true]{color:var(--status-danger-fg)}._block_tv0om_114{gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--status-danger-solid);border-radius:var(--radius-sm);background:var(--status-danger-bg);color:var(--text-primary);font-size:var(--text-sm-size);min-width:0;display:grid}._blockReason_tv0om_126{font-weight:var(--font-weight-medium);overflow-wrap:anywhere;margin:0}._alternatives_tv0om_132{align-items:center;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}._alternativesLabel_tv0om_139{color:var(--text-secondary);font-size:var(--text-xs-size)}@media (max-width:480px){._banner_tv0om_4,._block_tv0om_114{padding:var(--space-2)}._command_tv0om_95{flex-basis:100%}}._group_12xsh_9{font-size:var(--text-sm-size)}._line_12xsh_13{align-items:center;gap:var(--space-2);width:100%;min-height:var(--density-row-sm);padding:0 var(--space-2) 0 var(--space-3);border:0;border-left:2px solid var(--border-subtle);color:var(--text-secondary);font:inherit;text-align:left;cursor:pointer;transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);background:0 0;display:flex}._line_12xsh_13:hover{color:var(--text-primary);background:var(--bg-hover)}._line_12xsh_13:active{background:var(--bg-active)}._line_12xsh_13:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._group_12xsh_9[data-failed]>._line_12xsh_13{border-left-color:var(--status-danger-solid)}._group_12xsh_9[data-running]:not([data-failed])>._line_12xsh_13{border-left-color:var(--status-running-solid)}._chevron_12xsh_37{opacity:.7;width:0;height:0;transition:transform var(--duration-fast) var(--ease-standard);border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:5px solid;flex:none;margin:0 3px 0 2px}._group_12xsh_9:not([data-view=collapsed])>._line_12xsh_13 ._chevron_12xsh_37{transform:rotate(90deg)}._work_12xsh_50{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}._state_12xsh_58{white-space:nowrap;font-size:var(--text-xs-size);flex:none;align-items:center;display:inline-flex}._state_12xsh_58:before{content:"·";margin-right:var(--space-2);color:var(--text-tertiary)}._failed_12xsh_70{color:var(--status-danger-fg);font-weight:var(--font-weight-medium)}._sep_12xsh_71{color:var(--text-tertiary);white-space:pre}._running_12xsh_72{align-items:center;gap:var(--space-1);color:var(--status-running-fg);display:inline-flex}._pulse_12xsh_78{border-radius:var(--radius-full);background:var(--status-running-solid);width:6px;height:6px;animation:_activity-pulse_12xsh_1 var(--duration-pulse) ease-in-out infinite}._time_12xsh_86{padding-left:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size);font-variant-numeric:tabular-nums;color:var(--text-tertiary);white-space:nowrap;flex:none;margin-left:auto}._line_12xsh_13:hover ._time_12xsh_86{color:var(--text-secondary)}._body_12xsh_98{gap:var(--space-2);margin-top:var(--space-2);padding-left:var(--space-3);border-left:2px solid var(--border-subtle);display:grid}._body_12xsh_98[hidden]{display:none}._list_12xsh_106{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._list_12xsh_106>li{min-width:0}._more_12xsh_116{min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-sm);color:var(--text-link);font:inherit;font-size:var(--text-xs-size);cursor:pointer;background:0 0;border:0;justify-self:start}._more_12xsh_116:hover{background:var(--bg-hover)}._more_12xsh_116:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}@keyframes _activity-pulse_12xsh_1{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._pulse_12xsh_78{animation:none}}:root[data-motion=reduce] ._pulse_12xsh_78{animation:none}@media (max-width:479.98px){._state_12xsh_58:before{display:none}}._rail_99z8l_7{top:var(--space-6);bottom:var(--space-6);right:var(--space-4);z-index:var(--z-sticky);flex-direction:column;align-items:center;width:22px;display:flex;position:absolute}._handoff_99z8l_20{margin-bottom:var(--space-1);color:var(--text-tertiary);font-size:var(--text-2xs-size);flex:none;line-height:1}._track_99z8l_28{flex:1;width:100%;min-height:0;position:relative}._tick_99z8l_36{border-radius:var(--radius-xs);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;width:100%;height:12px;padding:0;display:flex;position:absolute;left:0;transform:translateY(-50%)}._tick_99z8l_36:hover,._tick_99z8l_36:focus-visible{background:var(--bg-hover)}._tick_99z8l_36:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._bar_99z8l_55{border-radius:var(--radius-full);background:var(--border-strong);width:10px;height:2px;transition:width var(--duration-fast) var(--ease-standard)}._tick_99z8l_36:hover ._bar_99z8l_55,._tick_99z8l_36:focus-visible ._bar_99z8l_55{width:14px}._tick_99z8l_36[data-status=error] ._bar_99z8l_55{background:var(--status-danger-solid);height:3px}._tick_99z8l_36[data-status=running] ._bar_99z8l_55{background:var(--status-running-solid);height:3px;animation:_rail-pulse_99z8l_1 var(--duration-pulse) ease-in-out infinite}._tick_99z8l_36[data-status=stopped] ._bar_99z8l_55{background:var(--text-tertiary)}._markers_99z8l_72{pointer-events:none;gap:1px;display:inline-flex;position:absolute;left:-2px;transform:translate(-100%)}._marker_99z8l_72{color:var(--text-tertiary);font-size:var(--text-2xs-size);line-height:1}._marker_99z8l_72[data-marker=recovered]{color:var(--status-info-fg)}._card_99z8l_88{right:calc(100% + var(--space-2));gap:var(--space-1);width:max-content;max-width:min(320px,60vw);padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-surface-raised);box-shadow:var(--shadow-menu);pointer-events:none;display:grid;position:absolute;transform:translateY(-50%)}._cardMeta_99z8l_103{font-family:var(--font-display);font-size:var(--text-2xs-size);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-tertiary)}._cardTitle_99z8l_110{font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-primary);overflow-wrap:anywhere}@keyframes _rail-pulse_99z8l_1{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._tick_99z8l_36[data-status=running] ._bar_99z8l_55{animation:none}:root:not([data-motion=full]) ._bar_99z8l_55{transition:none}}:root[data-motion=reduce] ._tick_99z8l_36[data-status=running] ._bar_99z8l_55{animation:none}@media (max-width:767.98px){._rail_99z8l_7{display:none}}._markerIcon_99z8l_133{width:1em;height:1em;display:block}._diff_1x50e_30{--diff-add:color-mix(in srgb, var(--status-success-solid) 22%, var(--bg-code));--diff-del:color-mix(in srgb, var(--status-danger-solid) 22%, var(--bg-code));border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);overflow:hidden}._visuallyHidden_1x50e_46{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._diffMulti_1x50e_58{min-width:0}._diffHead_1x50e_60{align-items:center;gap:var(--space-3);min-height:var(--control-h-xs);padding:0 var(--space-2) 0 var(--space-3);border-bottom:1px solid var(--border-subtle);display:flex}._diffPath_1x50e_68{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-secondary);direction:rtl;flex:auto;overflow:hidden}._diffOldPath_1x50e_83{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-tertiary);direction:rtl;flex:0 auto;overflow:hidden}._diffOldPath_1x50e_83:after{content:" →";color:var(--text-tertiary)}._diffStatus_1x50e_101{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-secondary);flex:none}._diffStats_1x50e_110{gap:var(--space-2);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;flex:none;display:flex}._diffAdd_1x50e_118{color:var(--status-success-fg)}._diffDel_1x50e_119{color:var(--status-danger-fg)}._diffNotice_1x50e_121{padding:var(--space-2) var(--space-3);font-family:var(--font-mono);font-size:var(--text-xs-size);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text-secondary);margin:0}._diffEmpty_1x50e_130{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size)}._diffTable_1x50e_136{border-collapse:collapse;table-layout:fixed;width:100%;font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed)}._diffNo_1x50e_121{width:42px;min-width:42px;padding:0 var(--space-2);text-align:right;vertical-align:top;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;color:var(--text-secondary)}._diffMarker_1x50e_30{text-align:center;vertical-align:top;-webkit-user-select:none;user-select:none;width:14px;min-width:14px;color:var(--text-secondary)}._diffText_1x50e_159{padding:0 var(--space-2) 0 0;vertical-align:top;white-space:pre-wrap;overflow-wrap:anywhere}._diffCode_1x50e_179{font-family:inherit}._diffRow_add_1x50e_181{background:var(--diff-add)}._diffRow_del_1x50e_182{background:var(--diff-del)}._diffRow_context_1x50e_183{background:0 0}._diffHunkRow_1x50e_185>*{padding-top:var(--space-1);padding-bottom:var(--space-1);border-top:1px solid var(--border-subtle);background:var(--bg-canvas)}._diffHunkRow_1x50e_185:first-child>*{border-top:0}._diffHunkHead_1x50e_192{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-tertiary)}._diffMore_1x50e_200,._commandMore_1x50e_201,._activityMore_1x50e_202{width:100%;min-height:var(--control-h-xs);padding:0 var(--space-3);border-top:1px solid var(--border-subtle);color:var(--text-secondary);font-family:var(--font-ui);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);background:0 0;display:block}._diffMore_1x50e_200:hover,._commandMore_1x50e_201:hover,._activityMore_1x50e_202:hover{background:var(--bg-hover);color:var(--text-primary)}._diffUnanchored_1x50e_221{padding:var(--space-2) var(--space-3);border-top:1px solid var(--border-subtle);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);margin:0}._tok_plain_1x50e_232{color:var(--text-primary)}._tok_comment_1x50e_233{color:var(--text-tertiary);font-style:italic}._tok_string_1x50e_234{color:var(--status-success-fg)}._tok_number_1x50e_235{color:var(--status-warning-fg)}._tok_keyword_1x50e_236{color:var(--accent-600);font-weight:var(--font-weight-medium)}._command_1x50e_201{border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);overflow:hidden}._command_1x50e_201[data-failed=true]{border-left:2px solid var(--status-danger-solid)}._commandLine_1x50e_250{align-items:baseline;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-subtle);display:flex}._commandPrompt_1x50e_257{font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex:none}._commandText_1x50e_264{min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);color:var(--text-primary);white-space:pre-wrap;overflow-wrap:anywhere;flex:1}._commandStatus_1x50e_275{align-items:center;gap:var(--space-3);min-height:var(--control-h-xs);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);display:flex}._commandStatusText_1x50e_283{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;font-variant-numeric:tabular-nums;color:var(--text-secondary)}._commandStatusText_1x50e_283[data-tone=bad]{color:var(--status-danger-fg)}._commandStatusText_1x50e_283[data-tone=pending]{color:var(--status-warning-fg)}._commandMeta_1x50e_293{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._commandPre_1x50e_298{max-height:420px;padding:var(--space-3);font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:var(--text-xs-line-relaxed);white-space:pre;color:var(--text-primary);tab-size:8;margin:0;overflow:auto}._commandPending_1x50e_310{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size);margin:0}._activity_1x50e_202{margin-top:var(--space-4);border:1px solid var(--border-subtle);border-radius:var(--radius-md);overflow:hidden}._activityHead_1x50e_330{align-items:baseline;gap:var(--space-2);min-height:var(--control-h-xs);padding:var(--space-1) var(--space-3);border-bottom:1px solid var(--border-subtle);background:var(--bg-canvas);font-size:var(--text-xs-size);display:flex}._activityLabel_1x50e_340{font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums;color:var(--text-secondary)}._activityBreakdown_1x50e_345{color:var(--text-tertiary);margin-left:auto}._activityList_1x50e_350{margin:0;padding:0;list-style:none}._activityList_1x50e_350>li>span:not([role=tooltip]),._activityList_1x50e_350>li>span>span:not([role=tooltip]){width:100%;min-width:0;display:block}._activityRow_1x50e_363{grid-template-columns:2px calc(var(--space-3) + 7.5ch) minmax(0, 1fr) auto auto;align-items:center;gap:var(--space-2);width:100%;min-height:var(--density-row-sm);padding:0 var(--space-3) 0 0;text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;border:0;display:grid}._activityRow_1x50e_363:hover{background:var(--bg-hover)}._activityRow_1x50e_363:active{background:var(--bg-active)}._activityRule_1x50e_385{background:var(--border-default);align-self:stretch}._activityRow_1x50e_363[data-action=edit] ._activityRule_1x50e_385{background:var(--status-info-solid)}._activityRow_1x50e_363[data-action=create] ._activityRule_1x50e_385{background:var(--status-success-solid)}._activityRow_1x50e_363[data-action=delete] ._activityRule_1x50e_385,._activityRow_1x50e_363[data-failed=true] ._activityRule_1x50e_385{background:var(--status-danger-solid)}._activityVerb_1x50e_380{font-size:var(--text-xs-size);color:var(--text-tertiary);padding-left:var(--space-3);white-space:nowrap}._activityRow_1x50e_363[data-action=edit] ._activityVerb_1x50e_380,._activityRow_1x50e_363[data-action=create] ._activityVerb_1x50e_380,._activityRow_1x50e_363[data-action=delete] ._activityVerb_1x50e_380{color:var(--text-secondary)}._activityFailed_1x50e_384{font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--status-danger-fg);flex:none}._activityPath_1x50e_411{align-items:baseline;gap:var(--space-2);min-width:0;font-family:var(--font-mono);font-size:var(--text-xs-size);display:flex}._activityName_1x50e_419{color:var(--text-primary);white-space:nowrap}._activityDir_1x50e_420{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;color:var(--text-tertiary);font-size:var(--text-2xs-size,11px);direction:rtl;overflow:hidden}._activityTimes_1x50e_430,._activityDelta_1x50e_431{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);white-space:nowrap}._activityDelta_1x50e_431{gap:var(--space-2);display:flex}._activityAdd_1x50e_439{color:var(--status-success-fg)}._activityDel_1x50e_431{color:var(--status-danger-fg)}._nav_1x50e_446{z-index:1;align-items:center;gap:var(--space-2);min-height:var(--density-row,32px);padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);flex-shrink:0;display:flex;position:relative}._navSpacer_1x50e_457{flex:1}._navOutlineButton_1x50e_459{align-items:center;gap:var(--space-1);min-height:var(--control-h-xs);padding:0 var(--space-2);border-radius:var(--radius-xs);color:var(--text-secondary);cursor:pointer;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);background:0 0;border:0;display:inline-flex}._navOutlineButton_1x50e_459:hover{background:var(--bg-hover);color:var(--text-primary)}._navChevron_1x50e_473{transition:transform var(--duration-fast) var(--ease-standard);display:inline-flex}._navChevron_1x50e_473[data-open=true]{transform:rotate(90deg)}._navCount_1x50e_475{font-family:var(--font-display);font-size:var(--text-xs-size);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums}._navWord_1x50e_481{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase}._navSearch_1x50e_488{align-items:center;gap:var(--space-2);min-width:12ch;height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-input);transition:border-color var(--duration-fast) var(--ease-standard);flex:0 26ch;display:flex}._navSearch_1x50e_488:focus-within{border-color:var(--accent-500);box-shadow:var(--shadow-focus-ring)}._navSearchIcon_1x50e_512{color:var(--text-tertiary);display:inline-flex}._navSearch_1x50e_488 input{min-width:0;color:var(--text-primary);font-family:var(--font-ui);font-size:var(--text-xs-size);background:0 0;border:0;flex:1}._navSearch_1x50e_488 input::-webkit-search-cancel-button{display:none}._navSearch_1x50e_488 input:focus-visible{box-shadow:none;outline:none}._navMatches_1x50e_525{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-secondary);white-space:nowrap}._navStep_1x50e_532{gap:2px;display:inline-flex}._navStep_1x50e_532 button{min-width:var(--control-h-xs);min-height:var(--control-h-xs);border-radius:var(--radius-xs);color:var(--text-secondary);cursor:pointer;background:0 0;border:0;line-height:1}._navStep_1x50e_532 button:hover{background:var(--bg-hover);color:var(--text-primary)}._navError_1x50e_545{align-items:center;gap:var(--space-2);min-height:var(--control-h-xs);padding:0 var(--space-2);border:0;border-left:2px solid var(--status-danger-solid);border-radius:0 var(--radius-xs) var(--radius-xs) 0;color:var(--status-danger-fg);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-medium);white-space:nowrap;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;display:inline-flex}._navError_1x50e_545:hover{background:var(--status-danger-bg)}._navErrorGlyph_1x50e_563{font-family:var(--font-display);font-weight:var(--font-weight-semibold)}._outline_1x50e_568{top:calc(100% + 2px);left:var(--space-2);right:var(--space-2);max-width:var(--measure-read);max-height:min(60vh,520px);padding:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface-raised);box-shadow:var(--shadow-menu,var(--shadow-md));position:absolute;overflow-y:auto}._outlineEmpty_1x50e_582{padding:var(--space-3);color:var(--text-tertiary);font-size:var(--text-xs-size)}._outlineList_1x50e_587{margin:0;padding:0;list-style:none}._outlineRow_1x50e_588{gap:var(--space-2);width:100%;padding:var(--space-2);border-radius:var(--radius-xs);text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--ease-standard);background:0 0;border:0;grid-template-columns:3ch minmax(0,1fr) auto;display:grid}._outlineRow_1x50e_588:hover{background:var(--bg-hover)}._outlineIndex_1x50e_602{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-tertiary);padding-top:2px}._outlineBody_1x50e_609{gap:2px;min-width:0;display:grid}._outlineTitle_1x50e_610{font-size:var(--text-xs-size);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._outlineSnippet_1x50e_617{font-family:var(--font-mono);font-size:var(--text-xs-size);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._outlineMeta_1x50e_627{font-size:var(--text-2xs-size,11px);color:var(--text-tertiary)}._outlineStatus_1x50e_631{font-family:var(--font-display);font-size:var(--text-2xs-size,11px);font-weight:var(--font-weight-semibold);color:var(--text-tertiary)}._outlineRow_1x50e_588[data-status=error] ._outlineStatus_1x50e_631{color:var(--status-danger-fg)}._outlineRow_1x50e_588[data-status=running] ._outlineStatus_1x50e_631{color:var(--status-running-fg)}@media (max-width:900px){._navSearch_1x50e_488{flex-basis:14ch}._activityDir_1x50e_420{display:none}}._commandRun_1x50e_646{min-height:var(--control-h-xs);padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);color:var(--text-secondary);font:inherit;font-size:var(--text-2xs-size);white-space:nowrap;cursor:pointer;background:0 0;flex:none;align-self:center}._commandRun_1x50e_646:hover{color:var(--text-primary);background:var(--bg-hover);border-color:var(--border-default)}._commandRun_1x50e_646:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._thinking_lm3ty_11{color:var(--text-tertiary);font-size:var(--text-sm-size);line-height:var(--text-sm-line);min-width:0}._summary_lm3ty_18,._line_lm3ty_19{align-items:center;gap:var(--space-2);min-height:var(--control-h-xs);max-width:100%;padding-left:var(--space-3);border-left:2px solid #0000;display:inline-flex}._line_lm3ty_19{padding-left:calc(var(--space-3) + 10px + var(--space-2))}._summary_lm3ty_18{cursor:pointer;border-radius:var(--radius-xs);padding-right:var(--space-2);transition:color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);list-style:none}._summary_lm3ty_18::-webkit-details-marker{display:none}._summary_lm3ty_18:hover{color:var(--text-secondary);background:var(--bg-hover)}._chevron_lm3ty_40{opacity:.7;width:0;height:0;transition:transform var(--duration-fast) var(--ease-standard);border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:5px solid;flex:none;margin:0 3px 0 2px}._thinking_lm3ty_11[open] ._chevron_lm3ty_40{transform:rotate(90deg)}._glyph_lm3ty_55{border-radius:var(--radius-full);background:var(--status-running-solid);width:6px;height:6px;animation:_thinking-breathe_lm3ty_1 1.6s var(--ease-standard) infinite;flex:none}._label_lm3ty_64{font-family:var(--font-display);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}._kind_lm3ty_73,._hidden_lm3ty_74{font-size:var(--text-xs-size);color:var(--text-tertiary);white-space:nowrap}._kind_lm3ty_73{padding:0 var(--space-1);border:1px solid var(--border-subtle);border-radius:var(--radius-xs)}._body_lm3ty_85{margin-top:var(--space-2);padding-left:var(--space-4);border-left:2px solid var(--border-subtle);white-space:pre-wrap;overflow-wrap:anywhere;line-height:var(--text-sm-line-relaxed);color:var(--text-secondary);overscroll-behavior:contain;max-height:min(40vh,480px);overflow-y:auto}._thinking_lm3ty_11[data-streaming] ._body_lm3ty_85{border-left-color:var(--status-running-solid)}._body_lm3ty_85[data-window]{max-height:calc(3 * var(--text-sm-line-relaxed));cursor:pointer;overflow:hidden}._body_lm3ty_85[data-window][data-clipped]{-webkit-mask-image:linear-gradient(#0000 0,#000 1.2em);mask-image:linear-gradient(#0000 0,#000 1.2em)}@keyframes _thinking-breathe_lm3ty_1{50%{opacity:.35}}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._glyph_lm3ty_55{animation:none}:root:not([data-motion=full]) ._chevron_lm3ty_40{transition:none}}:root[data-motion=reduce] ._glyph_lm3ty_55{animation:none}:root[data-motion=reduce] ._chevron_lm3ty_40{transition:none}._chip_15tdd_8{align-items:center;gap:var(--space-1);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);font-weight:var(--font-weight-medium);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--status-unknown-fg);white-space:nowrap;flex:none;display:inline-flex}._chipGlyph_15tdd_22{font-family:var(--font-ui);font-size:var(--text-2xs-size);letter-spacing:0;line-height:1}._chip_15tdd_8[data-capacity=ready]{color:var(--status-success-fg)}._chip_15tdd_8[data-capacity=tight]{color:var(--status-warning-fg)}._chip_15tdd_8[data-capacity=blocked]{color:var(--status-danger-fg)}._chip_15tdd_8[data-capacity=unread]{color:var(--status-unknown-fg)}._window_15tdd_36,._windowLead_15tdd_37{flex-direction:column;gap:2px;min-width:0;display:flex}._windowLead_15tdd_37 ._windowLabel_15tdd_44,._windowLead_15tdd_37 ._pct_15tdd_45{color:var(--text-primary)}._windowLabel_15tdd_44{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-secondary);overflow:hidden}._pct_15tdd_45{font-variant-numeric:tabular-nums;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-secondary)}._flag_15tdd_61{font-family:var(--font-ui);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);font-weight:var(--font-weight-medium);color:var(--status-danger-fg);white-space:nowrap}._unknownHead_15tdd_70{justify-content:space-between;align-items:baseline;gap:var(--space-2);min-width:0;display:flex}._unknownValue_15tdd_77{font-family:var(--font-ui);font-style:italic;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--status-unknown-fg);flex:none}._unknownRule_15tdd_86{border:0;border-top:1px dashed var(--border-strong);width:100%;height:0;margin:3px 0 0}._reset_15tdd_94{text-overflow:ellipsis;font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary);margin:0;overflow:hidden}._note_15tdd_105{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}._noteHead_15tdd_111{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;min-width:0;display:flex}._plan_15tdd_118{padding:0 var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-xs);font-family:var(--font-display);font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);letter-spacing:var(--tracking-label,.06em);text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;flex:none}._noteSummary_15tdd_131{min-width:0;font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);flex:100%}._credits_15tdd_138{font-size:var(--text-2xs-size,11px);line-height:var(--text-2xs-line,14px);color:var(--text-tertiary);margin:0}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,n as t,s as n}from"./index-DbDw9UAs.js";import{t as r}from"./Dialog-BpgcEW6b.js";import{t as i}from"./MutationTokenDialog-DTQzEOHR.js";import{t as a}from"./Button-DqgLUZvd.js";import{n as o}from"./use-guarded-action-UCX2u1t1.js";var s=n(e(),1),c={lead:`_lead_w05r1_8`,bar:`_bar_w05r1_14`,barSpacer:`_barSpacer_w05r1_22`,barSecondary:`_barSecondary_w05r1_26`,switchWrap:`_switchWrap_w05r1_32`,barLabel:`_barLabel_w05r1_38`,pillLabel:`_pillLabel_w05r1_39`,switchOption:`_switchOption_w05r1_48`,touchMark:`_touchMark_w05r1_54`,pill:`_pill_w05r1_39`,chip:`_chip_w05r1_59`,linkButton:`_linkButton_w05r1_88`,moreLink:`_moreLink_w05r1_89`,dot:`_dot_w05r1_103`,verdict:`_verdict_w05r1_126`,verdictPart:`_verdictPart_w05r1_135`,verdictSep:`_verdictSep_w05r1_149`,since:`_since_w05r1_153`,sinceLead:`_sinceLead_w05r1_162`,sinceEmpty:`_sinceEmpty_w05r1_166`,sinceChip:`_sinceChip_w05r1_170`,actionNote:`_actionNote_w05r1_196`,actionError:`_actionError_w05r1_197`,kbd:`_kbd_w05r1_251`,muted:`_muted_w05r1_260`,mono:`_mono_w05r1_267`,num:`_num_w05r1_272`,confirmBody:`_confirmBody_w05r1_277`,confirmActions:`_confirmActions_w05r1_283`,needsList:`_needsList_w05r1_291`,needsRow:`_needsRow_w05r1_299`,sevDot:`_sevDot_w05r1_313`,needsText:`_needsText_w05r1_327`,needsKind:`_needsKind_w05r1_335`,needsTitle:`_needsTitle_w05r1_347`,needsDetail:`_needsDetail_w05r1_359`,needsMeta:`_needsMeta_w05r1_367`,needsRepo:`_needsRepo_w05r1_376`,needsActions:`_needsActions_w05r1_380`,allClear:`_allClear_w05r1_388`,allClearTitle:`_allClearTitle_w05r1_395`,allClearBody:`_allClearBody_w05r1_403`,memo:`_memo_w05r1_409`,memoRow:`_memoRow_w05r1_416`,memoText:`_memoText_w05r1_427`,delta:`_delta_w05r1_433`,dryRun:`_dryRun_w05r1_446`,actionList:`_actionList_w05r1_458`,actionRow:`_actionRow_w05r1_467`,actionSummary:`_actionSummary_w05r1_476`,classBadge:`_classBadge_w05r1_481`,actionText:`_actionText_w05r1_504`,actionWhy:`_actionWhy_w05r1_517`,actionState:`_actionState_w05r1_524`,statusWord:`_statusWord_w05r1_530`,vetoChip:`_vetoChip_w05r1_545`,ring:`_ring_w05r1_549`,ringTrack:`_ringTrack_w05r1_559`,ringFill:`_ringFill_w05r1_565`,ringText:`_ringText_w05r1_572`,kpis:`_kpis_w05r1_577`,burnGrid:`_burnGrid_w05r1_592`,burnStrip:`_burnStrip_w05r1_604`,burnItem:`_burnItem_w05r1_615`,freeSeat:`_freeSeat_w05r1_623`,freeHead:`_freeHead_w05r1_633`,freeTitle:`_freeTitle_w05r1_639`,freeValue:`_freeValue_w05r1_646`,freeBody:`_freeBody_w05r1_653`,scope:`_scope_w05r1_660`,scopeBlock:`_scopeBlock_w05r1_666`,scopeLead:`_scopeLead_w05r1_672`,scopeMeta:`_scopeMeta_w05r1_679`,scopeTable:`_scopeTable_w05r1_686`,scopeList:`_scopeList_w05r1_706`,ladder:`_ladder_w05r1_714`,ladderId:`_ladderId_w05r1_733`,sheetFooter:`_sheetFooter_w05r1_738`,sheetFootnote:`_sheetFootnote_w05r1_744`,sheetButtons:`_sheetButtons_w05r1_751`},l=t();function u({spec:e,onConfirm:t,onCancel:n}){let i=(0,s.useId)(),o=(0,s.useRef)(null),u=(0,s.useRef)(null);return(0,l.jsxs)(r,{open:e!==null,onClose:n,titleId:i,title:e?.title??``,initialFocusRef:e?.destructive?o:u,children:[(0,l.jsx)(`div`,{className:c.confirmBody,children:e?.body}),(0,l.jsxs)(`div`,{className:c.confirmActions,children:[(0,l.jsx)(a,{ref:o,variant:`ghost`,onClick:n,children:`Cancel`}),(0,l.jsx)(a,{ref:u,variant:e?.destructive?`danger`:`primary`,onClick:t,children:e?.confirmLabel??`Confirm`})]})]})}function d(){let e=o(),[t,n]=(0,s.useState)(null),{request:r}=e,a=(0,s.useCallback)((e,t,i={})=>{let a=()=>r(e,t,i.onDone);i.confirm?n({spec:i.confirm,run:a}):a()},[r]),c=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(u,{spec:t?.spec??null,onCancel:()=>n(null),onConfirm:()=>{let e=t;n(null),e?.run()}}),(0,l.jsx)(i,{open:e.tokenOpen,onClose:e.closeToken,reason:e.tokenReason,tokenHelp:`the mutation token ashlr verse printed`})]});return{act:a,busy:e.busy,error:e.error,clearError:e.clearError,readOnly:e.readOnly,dialogs:c}}function f({actions:e}){return e.readOnly?(0,l.jsx)(`p`,{className:c.actionNote,role:`status`,children:`Read-only session: this server was started without dispatch, so switching, stopping and vetoing are unavailable. Everything shown is live.`}):e.error?(0,l.jsxs)(`p`,{className:c.actionError,role:`alert`,children:[e.error,(0,l.jsx)(`button`,{type:`button`,className:c.linkButton,onClick:e.clearError,children:`Dismiss`})]}):null}export{d as n,c as r,f as t};
|
|
2
|
+
//# sourceMappingURL=actions-MtxBGS5B.js.map
|
package/dist/core/web/public/next/assets/{actions-BnjZy8a-.js.map → actions-MtxBGS5B.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-BnjZy8a-.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/command/command.module.css","../../../../../../src/web-ui/routes/verse/command/actions.tsx"],"sourcesContent":["/*\n * routes/verse/command/command.module.css — Command's cards and top bar\n * (unit C7). Tokens only: style-scan-310 bans raw hex colours and px font\n * sizes in this folder, and every colour here follows the theme.\n */\n\n/* ---- lead: top bar, verdict, since ------------------------------------ */\n.lead {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n\n.bar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-3);\n min-height: var(--control-h);\n}\n\n.barSpacer {\n flex: 1;\n}\n\n.barSecondary {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.switchWrap {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.barLabel,\n.pillLabel {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n.switchOption {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n}\n\n.touchMark {\n color: var(--text-tertiary);\n}\n\n.pill,\n.chip {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n color: var(--text-primary);\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n white-space: nowrap;\n}\n\nbutton.pill,\nbutton.chip {\n cursor: pointer;\n transition: background-color var(--duration-fast) var(--ease-standard);\n}\n\nbutton.pill:hover,\nbutton.chip:hover {\n background: var(--bg-hover);\n}\n\n.pill:focus-visible,\n.chip:focus-visible,\n.linkButton:focus-visible,\n.moreLink:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n}\n\n.chip[data-tone='warning'] {\n border-color: var(--status-warning-solid);\n}\n\n.chip[data-tone='danger'] {\n border-color: var(--status-danger-solid);\n color: var(--status-danger-fg);\n}\n\n.dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n flex: none;\n background: var(--status-neutral-solid);\n}\n\n.dot[data-tone='success'] {\n background: var(--status-success-solid);\n}\n.dot[data-tone='warning'] {\n background: var(--status-warning-solid);\n}\n.dot[data-tone='danger'] {\n background: var(--status-danger-solid);\n}\n.dot[data-tone='unknown'] {\n background: var(--chart-unknown-hatch);\n border: 1px solid var(--status-unknown-solid);\n}\n\n/* Verdict: 17/24, weight 500 (SPEC-310C §6). */\n.verdict {\n margin: 0;\n font-size: var(--text-lg-size);\n line-height: var(--text-lg-line);\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.verdictPart[data-tone='danger'] {\n color: var(--status-danger-fg);\n}\n.verdictPart[data-tone='warning'] {\n color: var(--status-warning-fg);\n}\n.verdictPart[data-tone='success'] {\n color: var(--status-success-fg);\n}\n.verdictPart[data-tone='unknown'] {\n color: var(--status-unknown-fg);\n font-style: italic;\n}\n\n.verdictSep {\n color: var(--text-tertiary);\n}\n\n.since {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.sinceLead {\n color: var(--text-tertiary);\n}\n\n.sinceEmpty {\n color: var(--text-tertiary);\n}\n\n.sinceChip {\n display: inline-flex;\n align-items: center;\n padding: 1px var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n font-variant-numeric: tabular-nums;\n}\n.sinceChip[data-tone='success'] {\n background: var(--status-success-bg);\n color: var(--status-success-fg);\n}\n.sinceChip[data-tone='danger'] {\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n.sinceChip[data-tone='warning'] {\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n}\n.sinceChip[data-tone='info'] {\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n}\n\n.actionNote,\n.actionError {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-md);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n\n.actionNote {\n background: var(--bg-hover);\n color: var(--text-secondary);\n}\n\n.actionError {\n display: flex;\n align-items: baseline;\n gap: var(--space-3);\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n\n/* ---- shared small controls ------------------------------------------- */\n.linkButton,\n.moreLink {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n padding: 0;\n border: 0;\n background: none;\n color: var(--text-link);\n font: inherit;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n text-decoration: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.linkButton:hover,\n.moreLink:hover {\n text-decoration: underline;\n}\n\n.moreLink {\n align-self: flex-start;\n}\n\n.moreLink:disabled {\n color: var(--text-disabled);\n cursor: default;\n text-decoration: none;\n}\n\n.kbd {\n padding: 0 var(--space-1);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n color: var(--text-tertiary);\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n}\n\n.muted {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.mono {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n}\n\n.num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.confirmBody {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n}\n\n.confirmActions {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n margin-top: var(--space-5);\n}\n\n/* ---- Needs you ------------------------------------------------------- */\n.needsList {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.needsRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--space-2) var(--space-3);\n padding: var(--space-2) 0;\n border-top: 1px solid var(--border-subtle);\n}\n\n.needsRow:first-child {\n border-top: 0;\n padding-top: 0;\n}\n\n.sevDot {\n width: 8px;\n height: 8px;\n margin-top: 6px;\n border-radius: var(--radius-full);\n background: var(--status-info-solid);\n}\n.sevDot[data-severity='warn'] {\n background: var(--status-warning-solid);\n}\n.sevDot[data-severity='high'] {\n background: var(--status-danger-solid);\n}\n\n.needsText {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n/* \"Patch · Claude run\" — the proposal kind and engine the wire title led with. */\n.needsKind {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-secondary);\n}\n\n/* Two lines at most, wrapped at word boundaries. The text already ends on a\n whole word (needs-you-model readableItemTitle); the full server title rides\n in `title`. */\n.needsTitle {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n overflow: hidden;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: break-word;\n}\n\n.needsDetail {\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n overflow-wrap: anywhere;\n}\n\n/* \"binshield · #81 · 38 days ago\". */\n.needsMeta {\n display: flex;\n flex-wrap: wrap;\n gap: 0 var(--space-1);\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.needsRepo {\n font-weight: var(--font-weight-medium);\n}\n\n.needsActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--space-2);\n}\n\n.allClear {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n padding: var(--space-4) 0;\n}\n\n.allClearTitle {\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.allClearBody {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n}\n\n/* ---- Leader ---------------------------------------------------------- */\n.memo {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n}\n\n.memoRow {\n display: grid;\n grid-template-columns: 96px minmax(0, 1fr);\n gap: var(--space-3);\n align-items: baseline;\n}\n\n.memoRow dd {\n margin: 0;\n}\n\n.memoText {\n color: var(--text-primary);\n font-size: var(--text-base-size);\n line-height: var(--text-base-line);\n}\n\n.delta {\n display: inline-block;\n margin-left: var(--space-2);\n padding: 0 var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.dryRun {\n font-family: var(--font-display); /* micro-labels follow the Display-font setting */\n padding: 0 var(--space-2);\n border: 1px dashed var(--border-strong);\n border-radius: var(--radius-full);\n color: var(--text-secondary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n}\n\n.actionList {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n border-top: 1px solid var(--border-subtle);\n}\n\n.actionRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--space-3);\n align-items: center;\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--border-subtle);\n}\n\n.actionRow[data-status='vetoed'] .actionSummary {\n text-decoration: line-through;\n color: var(--text-tertiary);\n}\n\n.classBadge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n color: var(--text-secondary);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n font-weight: var(--font-weight-semibold);\n}\n\n.classBadge[data-class='B'] {\n border-color: var(--status-warning-solid);\n color: var(--status-warning-fg);\n}\n\n.classBadge[data-class='C'] {\n border-style: dashed;\n}\n\n.actionText {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.actionSummary {\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: anywhere;\n}\n\n.actionWhy {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n overflow-wrap: anywhere;\n}\n\n.actionState {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.statusWord {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n white-space: nowrap;\n}\n\n.statusWord[data-status='escalated'] {\n color: var(--status-warning-fg);\n}\n\n.statusWord[data-status='failed'],\n.statusWord[data-status='refused'] {\n color: var(--status-danger-fg);\n}\n\n.vetoChip {\n border: 1px solid var(--border-default);\n}\n\n.ring {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n color: var(--status-warning-fg);\n font-size: var(--text-xs-size);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.ringTrack {\n fill: none;\n stroke: var(--border-subtle);\n stroke-width: 2.5;\n}\n\n.ringFill {\n fill: none;\n stroke: var(--status-warning-solid);\n stroke-width: 2.5;\n stroke-linecap: round;\n}\n\n.ringText {\n min-width: 4ch;\n}\n\n/* ---- KPIs and burn-downs --------------------------------------------- */\n.kpis {\n display: grid;\n grid-template-columns: repeat(5, minmax(0, 1fr));\n gap: var(--surface-gap);\n align-items: start;\n}\n\n[data-viewport='medium'] .kpis {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n[data-viewport='compact'] .kpis {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.burnGrid {\n display: grid;\n grid-template-columns: repeat(4, minmax(0, 1fr));\n gap: var(--surface-gap);\n align-items: start;\n}\n\n[data-viewport='medium'] .burnGrid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n/* 375: one card at a time, snapping — the next card peeks in at the edge. */\n.burnStrip {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 86%;\n gap: var(--space-3);\n overflow-x: auto;\n overscroll-behavior-x: contain;\n scroll-snap-type: x mandatory;\n padding-bottom: var(--space-1);\n}\n\n.burnStrip > .burnItem {\n scroll-snap-align: start;\n}\n\n.burnItem {\n min-width: 0;\n}\n\n.freeSeat {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--card-pad);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n}\n\n.freeHead {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.freeTitle {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.freeValue {\n font-size: var(--text-2xl-size);\n line-height: var(--text-2xl-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-secondary);\n}\n\n.freeBody {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n/* ---- Touch ID sheet -------------------------------------------------- */\n.scope {\n display: flex;\n flex-direction: column;\n gap: var(--space-5);\n}\n\n.scopeBlock {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.scopeLead {\n margin: 0;\n color: var(--text-primary);\n font-size: var(--text-base-size);\n line-height: var(--text-base-line);\n}\n\n.scopeMeta {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.scopeTable {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--text-xs-size);\n}\n\n.scopeTable th {\n padding: var(--space-1) var(--space-2) var(--space-1) 0;\n border-bottom: 1px solid var(--border-subtle);\n color: var(--text-tertiary);\n font-weight: var(--font-weight-medium);\n text-align: left;\n}\n\n.scopeTable td {\n padding: var(--space-1) var(--space-2) var(--space-1) 0;\n border-bottom: 1px solid var(--border-subtle);\n color: var(--text-primary);\n}\n\n.scopeList {\n margin: 0;\n padding-left: var(--space-4);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.ladder {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n counter-reset: rung;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-secondary);\n}\n\n.ladder li {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n gap: var(--space-2);\n}\n\n.ladderId {\n font-family: var(--font-mono);\n color: var(--text-primary);\n}\n\n.sheetFooter {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n\n.sheetFootnote {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.sheetButtons {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n}\n\n@media (prefers-reduced-motion: reduce) {\n button.pill,\n button.chip {\n transition: none;\n }\n}\n","/**\n * routes/verse/command/actions.tsx — how every write on the four surfaces\n * reaches the server (unit C7).\n *\n * Order is fixed and the same for a click, a key and the palette\n * (SPEC-310C §1 \"Guarded actions ask for confirmation, then the mutation\n * token\"):\n *\n * 1. a confirmation dialog, when the action asks for one (Stop, Veto,\n * Resume, every Needs-you approve / reject / veto);\n * 2. the mutation token, when none is held (useGuardedAction);\n * 3. the request, one at a time, with the server's own refusal sentence\n * shown on failure and read-only sessions explained, never errored.\n *\n * LOWERING needs no confirmation (SPEC-310B I1: \"lowering authority is\n * instant\") — callers simply omit `confirm` for the switch-down path.\n */\nimport { useCallback, useId, useRef, useState, type ReactNode } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Dialog } from '../../../components/primitives/Dialog.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { useGuardedAction } from '../autonomy/use-guarded-action.js';\nimport styles from './command.module.css';\n\nexport interface ConfirmSpec {\n title: string;\n body: ReactNode;\n confirmLabel: string;\n destructive?: boolean;\n}\n\nexport function ConfirmDialog({ spec, onConfirm, onCancel }: { spec: ConfirmSpec | null; onConfirm: () => void; onCancel: () => void }) {\n const titleId = useId();\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n return (\n <Dialog\n open={spec !== null}\n onClose={onCancel}\n titleId={titleId}\n title={spec?.title ?? ''}\n // A destructive confirm starts on Cancel, so a stray Enter never stops the fleet.\n initialFocusRef={spec?.destructive ? cancelRef : confirmRef}\n >\n <div className={styles.confirmBody}>{spec?.body}</div>\n <div className={styles.confirmActions}>\n <Button ref={cancelRef} variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button ref={confirmRef} variant={spec?.destructive ? 'danger' : 'primary'} onClick={onConfirm}>\n {spec?.confirmLabel ?? 'Confirm'}\n </Button>\n </div>\n </Dialog>\n );\n}\n\nexport interface SurfaceActions {\n /** Confirm (when asked), then token (when needed), then run `fn`. */\n act: <T>(fn: () => Promise<T>, reason: string, options?: { confirm?: ConfirmSpec; onDone?: (result: T) => void }) => void;\n busy: boolean;\n error: string | null;\n clearError: () => void;\n readOnly: boolean;\n /** Render once per surface. */\n dialogs: ReactNode;\n}\n\nexport function useSurfaceActions(): SurfaceActions {\n const guard = useGuardedAction();\n const [pending, setPending] = useState<{ spec: ConfirmSpec; run: () => void } | null>(null);\n const { request } = guard;\n\n const act = useCallback(\n <T,>(fn: () => Promise<T>, reason: string, options: { confirm?: ConfirmSpec; onDone?: (result: T) => void } = {}) => {\n const run = () => request(fn, reason, options.onDone);\n if (options.confirm) setPending({ spec: options.confirm, run });\n else run();\n },\n [request],\n );\n\n const dialogs = (\n <>\n <ConfirmDialog\n spec={pending?.spec ?? null}\n onCancel={() => setPending(null)}\n onConfirm={() => {\n const next = pending;\n setPending(null);\n next?.run();\n }}\n />\n <MutationTokenDialog open={guard.tokenOpen} onClose={guard.closeToken} reason={guard.tokenReason} tokenHelp=\"the mutation token ashlr verse printed\" />\n </>\n );\n\n return { act, busy: guard.busy, error: guard.error, clearError: guard.clearError, readOnly: guard.readOnly, dialogs };\n}\n\n/** The error / read-only line a surface shows under its top bar. */\nexport function ActionStatus({ actions }: { actions: Pick<SurfaceActions, 'error' | 'clearError' | 'readOnly'> }) {\n if (actions.readOnly) {\n return (\n <p className={styles.actionNote} role=\"status\">\n Read-only session: this server was started without dispatch, so switching, stopping and vetoing are unavailable. Everything shown is live.\n </p>\n );\n }\n if (!actions.error) return null;\n return (\n <p className={styles.actionError} role=\"alert\">\n {actions.error}\n <button type=\"button\" className={styles.linkButton} onClick={actions.clearError}>\n Dismiss\n </button>\n </p>\n );\n}\n"],"mappings":"gtFC+BA,SAAgB,EAAc,CAAE,OAAM,YAAW,YAAuF,CACtI,IAAM,GAAA,EAAU,EAAA,MAAA,CAAM,EAChB,GAAA,EAAY,EAAA,OAAA,CAA0B,IAAI,EAC1C,GAAA,EAAa,EAAA,OAAA,CAA0B,IAAI,EACjD,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,KAAM,IAAS,KACf,QAAS,EACA,UACT,MAAO,GAAM,OAAS,GAEtB,gBAAiB,GAAM,YAAc,EAAY,EANnD,SAAA,EAQE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAO,YAAc,SAAA,GAAM,IAAU,CAAA,GACrD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,eAAvB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,IAAK,EAAW,QAAQ,QAAQ,QAAS,EAAU,SAAA,QAEnD,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,IAAK,EAAY,QAAS,GAAM,YAAc,SAAW,UAAW,QAAS,EAClF,SAAA,GAAM,cAAgB,SACjB,CAAA,CACL,CACC,CAAA,CAAA,GAEZ,CAaA,SAAgB,GAAoC,CAClD,IAAM,EAAQ,EAAiB,EACzB,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAwD,IAAI,EACpF,CAAE,WAAY,EAEd,GAAA,EAAM,EAAA,YAAA,EACL,EAAsB,EAAgB,EAAmE,CAAC,IAAM,CACnH,IAAM,MAAY,EAAQ,EAAI,EAAQ,EAAQ,MAAM,EAChD,EAAQ,QAAS,EAAW,CAAE,KAAM,EAAQ,QAAS,KAAI,CAAC,EACzD,EAAI,CACX,EACA,CAAC,CAAO,CACV,EAEM,GACJ,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,GAAS,MAAQ,KACvB,aAAgB,EAAW,IAAI,EAC/B,cAAiB,CACf,IAAM,EAAO,EACb,EAAW,IAAI,EACf,GAAM,IAAI,CACZ,CACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,KAAM,EAAM,UAAW,QAAS,EAAM,WAAY,OAAQ,EAAM,YAAa,UAAU,wCAA0C,CAAA,CACtJ,CAAA,CAAA,EAGJ,MAAO,CAAE,MAAK,KAAM,EAAM,KAAM,MAAO,EAAM,MAAO,WAAY,EAAM,WAAY,SAAU,EAAM,SAAU,SAAQ,CACtH,CAGA,SAAgB,EAAa,CAAE,WAAmF,CAShH,OARI,EAAQ,UAER,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAO,WAAY,KAAK,SAAS,SAAA,4IAE5C,CAAA,EAGF,EAAQ,OAEX,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAW,EAAO,YAAa,KAAK,QAAvC,SAAA,CACG,EAAQ,OACT,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,WAAY,QAAS,EAAQ,WAAY,SAAA,SAEzE,CAAA,CACP,IAPsB,IAS7B"}
|
|
1
|
+
{"version":3,"file":"actions-MtxBGS5B.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/command/command.module.css","../../../../../../src/web-ui/routes/verse/command/actions.tsx"],"sourcesContent":["/*\n * routes/verse/command/command.module.css — Command's cards and top bar\n * (unit C7). Tokens only: style-scan-310 bans raw hex colours and px font\n * sizes in this folder, and every colour here follows the theme.\n */\n\n/* ---- lead: top bar, verdict, since ------------------------------------ */\n.lead {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n\n.bar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-3);\n min-height: var(--control-h);\n}\n\n.barSpacer {\n flex: 1;\n}\n\n.barSecondary {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n}\n\n.switchWrap {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.barLabel,\n.pillLabel {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-tertiary);\n}\n\n.switchOption {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n}\n\n.touchMark {\n color: var(--text-tertiary);\n}\n\n.pill,\n.chip {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-height: var(--control-h-sm);\n padding: 0 var(--space-3);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-full);\n background: var(--bg-surface);\n color: var(--text-primary);\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n white-space: nowrap;\n}\n\nbutton.pill,\nbutton.chip {\n cursor: pointer;\n transition: background-color var(--duration-fast) var(--ease-standard);\n}\n\nbutton.pill:hover,\nbutton.chip:hover {\n background: var(--bg-hover);\n}\n\n.pill:focus-visible,\n.chip:focus-visible,\n.linkButton:focus-visible,\n.moreLink:focus-visible {\n outline: 2px solid var(--border-focus);\n outline-offset: 2px;\n}\n\n.chip[data-tone='warning'] {\n border-color: var(--status-warning-solid);\n}\n\n.chip[data-tone='danger'] {\n border-color: var(--status-danger-solid);\n color: var(--status-danger-fg);\n}\n\n.dot {\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n flex: none;\n background: var(--status-neutral-solid);\n}\n\n.dot[data-tone='success'] {\n background: var(--status-success-solid);\n}\n.dot[data-tone='warning'] {\n background: var(--status-warning-solid);\n}\n.dot[data-tone='danger'] {\n background: var(--status-danger-solid);\n}\n.dot[data-tone='unknown'] {\n background: var(--chart-unknown-hatch);\n border: 1px solid var(--status-unknown-solid);\n}\n\n/* Verdict: 17/24, weight 500 (SPEC-310C §6). */\n.verdict {\n margin: 0;\n font-size: var(--text-lg-size);\n line-height: var(--text-lg-line);\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.verdictPart[data-tone='danger'] {\n color: var(--status-danger-fg);\n}\n.verdictPart[data-tone='warning'] {\n color: var(--status-warning-fg);\n}\n.verdictPart[data-tone='success'] {\n color: var(--status-success-fg);\n}\n.verdictPart[data-tone='unknown'] {\n color: var(--status-unknown-fg);\n font-style: italic;\n}\n\n.verdictSep {\n color: var(--text-tertiary);\n}\n\n.since {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.sinceLead {\n color: var(--text-tertiary);\n}\n\n.sinceEmpty {\n color: var(--text-tertiary);\n}\n\n.sinceChip {\n display: inline-flex;\n align-items: center;\n padding: 1px var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-neutral-bg);\n color: var(--status-neutral-fg);\n font-variant-numeric: tabular-nums;\n}\n.sinceChip[data-tone='success'] {\n background: var(--status-success-bg);\n color: var(--status-success-fg);\n}\n.sinceChip[data-tone='danger'] {\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n.sinceChip[data-tone='warning'] {\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n}\n.sinceChip[data-tone='info'] {\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n}\n\n.actionNote,\n.actionError {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-md);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n\n.actionNote {\n background: var(--bg-hover);\n color: var(--text-secondary);\n}\n\n.actionError {\n display: flex;\n align-items: baseline;\n gap: var(--space-3);\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n\n/* ---- shared small controls ------------------------------------------- */\n.linkButton,\n.moreLink {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n padding: 0;\n border: 0;\n background: none;\n color: var(--text-link);\n font: inherit;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n text-decoration: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.linkButton:hover,\n.moreLink:hover {\n text-decoration: underline;\n}\n\n.moreLink {\n align-self: flex-start;\n}\n\n.moreLink:disabled {\n color: var(--text-disabled);\n cursor: default;\n text-decoration: none;\n}\n\n.kbd {\n padding: 0 var(--space-1);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-xs);\n color: var(--text-tertiary);\n font-family: var(--font-mono);\n font-size: var(--text-2xs-size);\n}\n\n.muted {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.mono {\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n}\n\n.num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.confirmBody {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line-relaxed);\n}\n\n.confirmActions {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n margin-top: var(--space-5);\n}\n\n/* ---- Needs you ------------------------------------------------------- */\n.needsList {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.needsRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--space-2) var(--space-3);\n padding: var(--space-2) 0;\n border-top: 1px solid var(--border-subtle);\n}\n\n.needsRow:first-child {\n border-top: 0;\n padding-top: 0;\n}\n\n.sevDot {\n width: 8px;\n height: 8px;\n margin-top: 6px;\n border-radius: var(--radius-full);\n background: var(--status-info-solid);\n}\n.sevDot[data-severity='warn'] {\n background: var(--status-warning-solid);\n}\n.sevDot[data-severity='high'] {\n background: var(--status-danger-solid);\n}\n\n.needsText {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n/* \"Patch · Claude run\" — the proposal kind and engine the wire title led with. */\n.needsKind {\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n color: var(--text-secondary);\n}\n\n/* Two lines at most, wrapped at word boundaries. The text already ends on a\n whole word (needs-you-model readableItemTitle); the full server title rides\n in `title`. */\n.needsTitle {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n overflow: hidden;\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: break-word;\n}\n\n.needsDetail {\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n overflow-wrap: anywhere;\n}\n\n/* \"binshield · #81 · 38 days ago\". */\n.needsMeta {\n display: flex;\n flex-wrap: wrap;\n gap: 0 var(--space-1);\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.needsRepo {\n font-weight: var(--font-weight-medium);\n}\n\n.needsActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--space-2);\n}\n\n.allClear {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n padding: var(--space-4) 0;\n}\n\n.allClearTitle {\n font-family: var(--font-display);\n font-size: var(--text-md-size);\n line-height: var(--text-md-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.allClearBody {\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n}\n\n/* ---- Leader ---------------------------------------------------------- */\n.memo {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n}\n\n.memoRow {\n display: grid;\n grid-template-columns: 96px minmax(0, 1fr);\n gap: var(--space-3);\n align-items: baseline;\n}\n\n.memoRow dd {\n margin: 0;\n}\n\n.memoText {\n color: var(--text-primary);\n font-size: var(--text-base-size);\n line-height: var(--text-base-line);\n}\n\n.delta {\n display: inline-block;\n margin-left: var(--space-2);\n padding: 0 var(--space-2);\n border-radius: var(--radius-full);\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.dryRun {\n font-family: var(--font-display); /* micro-labels follow the Display-font setting */\n padding: 0 var(--space-2);\n border: 1px dashed var(--border-strong);\n border-radius: var(--radius-full);\n color: var(--text-secondary);\n font-size: var(--text-2xs-size);\n line-height: var(--text-xs-line);\n text-transform: uppercase;\n letter-spacing: var(--tracking-label);\n}\n\n.actionList {\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n list-style: none;\n border-top: 1px solid var(--border-subtle);\n}\n\n.actionRow {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n gap: var(--space-3);\n align-items: center;\n padding: var(--space-2) 0;\n border-bottom: 1px solid var(--border-subtle);\n}\n\n.actionRow[data-status='vetoed'] .actionSummary {\n text-decoration: line-through;\n color: var(--text-tertiary);\n}\n\n.classBadge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n color: var(--text-secondary);\n font-family: var(--font-display);\n font-size: var(--text-2xs-size);\n font-weight: var(--font-weight-semibold);\n}\n\n.classBadge[data-class='B'] {\n border-color: var(--status-warning-solid);\n color: var(--status-warning-fg);\n}\n\n.classBadge[data-class='C'] {\n border-style: dashed;\n}\n\n.actionText {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.actionSummary {\n color: var(--text-primary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n overflow-wrap: anywhere;\n}\n\n.actionWhy {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n overflow-wrap: anywhere;\n}\n\n.actionState {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.statusWord {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n white-space: nowrap;\n}\n\n.statusWord[data-status='escalated'] {\n color: var(--status-warning-fg);\n}\n\n.statusWord[data-status='failed'],\n.statusWord[data-status='refused'] {\n color: var(--status-danger-fg);\n}\n\n.vetoChip {\n border: 1px solid var(--border-default);\n}\n\n.ring {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n color: var(--status-warning-fg);\n font-size: var(--text-xs-size);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.ringTrack {\n fill: none;\n stroke: var(--border-subtle);\n stroke-width: 2.5;\n}\n\n.ringFill {\n fill: none;\n stroke: var(--status-warning-solid);\n stroke-width: 2.5;\n stroke-linecap: round;\n}\n\n.ringText {\n min-width: 4ch;\n}\n\n/* ---- KPIs and burn-downs --------------------------------------------- */\n.kpis {\n display: grid;\n grid-template-columns: repeat(5, minmax(0, 1fr));\n gap: var(--surface-gap);\n align-items: start;\n}\n\n[data-viewport='medium'] .kpis {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n[data-viewport='compact'] .kpis {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.burnGrid {\n display: grid;\n grid-template-columns: repeat(4, minmax(0, 1fr));\n gap: var(--surface-gap);\n align-items: start;\n}\n\n[data-viewport='medium'] .burnGrid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n/* 375: one card at a time, snapping — the next card peeks in at the edge. */\n.burnStrip {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 86%;\n gap: var(--space-3);\n overflow-x: auto;\n overscroll-behavior-x: contain;\n scroll-snap-type: x mandatory;\n padding-bottom: var(--space-1);\n}\n\n.burnStrip > .burnItem {\n scroll-snap-align: start;\n}\n\n.burnItem {\n min-width: 0;\n}\n\n.freeSeat {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--card-pad);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n background: var(--bg-surface);\n}\n\n.freeHead {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n}\n\n.freeTitle {\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-primary);\n}\n\n.freeValue {\n font-size: var(--text-2xl-size);\n line-height: var(--text-2xl-line);\n font-weight: var(--font-weight-semibold);\n color: var(--text-secondary);\n}\n\n.freeBody {\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n/* ---- Touch ID sheet -------------------------------------------------- */\n.scope {\n display: flex;\n flex-direction: column;\n gap: var(--space-5);\n}\n\n.scopeBlock {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n}\n\n.scopeLead {\n margin: 0;\n color: var(--text-primary);\n font-size: var(--text-base-size);\n line-height: var(--text-base-line);\n}\n\n.scopeMeta {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.scopeTable {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--text-xs-size);\n}\n\n.scopeTable th {\n padding: var(--space-1) var(--space-2) var(--space-1) 0;\n border-bottom: 1px solid var(--border-subtle);\n color: var(--text-tertiary);\n font-weight: var(--font-weight-medium);\n text-align: left;\n}\n\n.scopeTable td {\n padding: var(--space-1) var(--space-2) var(--space-1) 0;\n border-bottom: 1px solid var(--border-subtle);\n color: var(--text-primary);\n}\n\n.scopeList {\n margin: 0;\n padding-left: var(--space-4);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.ladder {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n counter-reset: rung;\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n color: var(--text-secondary);\n}\n\n.ladder li {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n gap: var(--space-2);\n}\n\n.ladderId {\n font-family: var(--font-mono);\n color: var(--text-primary);\n}\n\n.sheetFooter {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n\n.sheetFootnote {\n margin: 0;\n color: var(--text-tertiary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n}\n\n.sheetButtons {\n display: flex;\n justify-content: flex-end;\n gap: var(--space-2);\n}\n\n@media (prefers-reduced-motion: reduce) {\n button.pill,\n button.chip {\n transition: none;\n }\n}\n","/**\n * routes/verse/command/actions.tsx — how every write on the four surfaces\n * reaches the server (unit C7).\n *\n * Order is fixed and the same for a click, a key and the palette\n * (SPEC-310C §1 \"Guarded actions ask for confirmation, then the mutation\n * token\"):\n *\n * 1. a confirmation dialog, when the action asks for one (Stop, Veto,\n * Resume, every Needs-you approve / reject / veto);\n * 2. the mutation token, when none is held (useGuardedAction);\n * 3. the request, one at a time, with the server's own refusal sentence\n * shown on failure and read-only sessions explained, never errored.\n *\n * LOWERING needs no confirmation (SPEC-310B I1: \"lowering authority is\n * instant\") — callers simply omit `confirm` for the switch-down path.\n */\nimport { useCallback, useId, useRef, useState, type ReactNode } from 'react';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Dialog } from '../../../components/primitives/Dialog.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { useGuardedAction } from '../autonomy/use-guarded-action.js';\nimport styles from './command.module.css';\n\nexport interface ConfirmSpec {\n title: string;\n body: ReactNode;\n confirmLabel: string;\n destructive?: boolean;\n}\n\nexport function ConfirmDialog({ spec, onConfirm, onCancel }: { spec: ConfirmSpec | null; onConfirm: () => void; onCancel: () => void }) {\n const titleId = useId();\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n return (\n <Dialog\n open={spec !== null}\n onClose={onCancel}\n titleId={titleId}\n title={spec?.title ?? ''}\n // A destructive confirm starts on Cancel, so a stray Enter never stops the fleet.\n initialFocusRef={spec?.destructive ? cancelRef : confirmRef}\n >\n <div className={styles.confirmBody}>{spec?.body}</div>\n <div className={styles.confirmActions}>\n <Button ref={cancelRef} variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button ref={confirmRef} variant={spec?.destructive ? 'danger' : 'primary'} onClick={onConfirm}>\n {spec?.confirmLabel ?? 'Confirm'}\n </Button>\n </div>\n </Dialog>\n );\n}\n\nexport interface SurfaceActions {\n /** Confirm (when asked), then token (when needed), then run `fn`. */\n act: <T>(fn: () => Promise<T>, reason: string, options?: { confirm?: ConfirmSpec; onDone?: (result: T) => void }) => void;\n busy: boolean;\n error: string | null;\n clearError: () => void;\n readOnly: boolean;\n /** Render once per surface. */\n dialogs: ReactNode;\n}\n\nexport function useSurfaceActions(): SurfaceActions {\n const guard = useGuardedAction();\n const [pending, setPending] = useState<{ spec: ConfirmSpec; run: () => void } | null>(null);\n const { request } = guard;\n\n const act = useCallback(\n <T,>(fn: () => Promise<T>, reason: string, options: { confirm?: ConfirmSpec; onDone?: (result: T) => void } = {}) => {\n const run = () => request(fn, reason, options.onDone);\n if (options.confirm) setPending({ spec: options.confirm, run });\n else run();\n },\n [request],\n );\n\n const dialogs = (\n <>\n <ConfirmDialog\n spec={pending?.spec ?? null}\n onCancel={() => setPending(null)}\n onConfirm={() => {\n const next = pending;\n setPending(null);\n next?.run();\n }}\n />\n <MutationTokenDialog open={guard.tokenOpen} onClose={guard.closeToken} reason={guard.tokenReason} tokenHelp=\"the mutation token ashlr verse printed\" />\n </>\n );\n\n return { act, busy: guard.busy, error: guard.error, clearError: guard.clearError, readOnly: guard.readOnly, dialogs };\n}\n\n/** The error / read-only line a surface shows under its top bar. */\nexport function ActionStatus({ actions }: { actions: Pick<SurfaceActions, 'error' | 'clearError' | 'readOnly'> }) {\n if (actions.readOnly) {\n return (\n <p className={styles.actionNote} role=\"status\">\n Read-only session: this server was started without dispatch, so switching, stopping and vetoing are unavailable. Everything shown is live.\n </p>\n );\n }\n if (!actions.error) return null;\n return (\n <p className={styles.actionError} role=\"alert\">\n {actions.error}\n <button type=\"button\" className={styles.linkButton} onClick={actions.clearError}>\n Dismiss\n </button>\n </p>\n );\n}\n"],"mappings":"kvFC+BA,SAAgB,EAAc,CAAE,OAAM,YAAW,YAAuF,CACtI,IAAM,GAAA,EAAU,EAAA,MAAA,CAAM,EAChB,GAAA,EAAY,EAAA,OAAA,CAA0B,IAAI,EAC1C,GAAA,EAAa,EAAA,OAAA,CAA0B,IAAI,EACjD,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,KAAM,IAAS,KACf,QAAS,EACA,UACT,MAAO,GAAM,OAAS,GAEtB,gBAAiB,GAAM,YAAc,EAAY,EANnD,SAAA,EAQE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAO,YAAc,SAAA,GAAM,IAAU,CAAA,GACrD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAO,eAAvB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,IAAK,EAAW,QAAQ,QAAQ,QAAS,EAAU,SAAA,QAEnD,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,IAAK,EAAY,QAAS,GAAM,YAAc,SAAW,UAAW,QAAS,EAClF,SAAA,GAAM,cAAgB,SACjB,CAAA,CACL,CACC,CAAA,CAAA,GAEZ,CAaA,SAAgB,GAAoC,CAClD,IAAM,EAAQ,EAAiB,EACzB,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAwD,IAAI,EACpF,CAAE,WAAY,EAEd,GAAA,EAAM,EAAA,YAAA,EACL,EAAsB,EAAgB,EAAmE,CAAC,IAAM,CACnH,IAAM,MAAY,EAAQ,EAAI,EAAQ,EAAQ,MAAM,EAChD,EAAQ,QAAS,EAAW,CAAE,KAAM,EAAQ,QAAS,KAAI,CAAC,EACzD,EAAI,CACX,EACA,CAAC,CAAO,CACV,EAEM,GACJ,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,GAAS,MAAQ,KACvB,aAAgB,EAAW,IAAI,EAC/B,cAAiB,CACf,IAAM,EAAO,EACb,EAAW,IAAI,EACf,GAAM,IAAI,CACZ,CACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,KAAM,EAAM,UAAW,QAAS,EAAM,WAAY,OAAQ,EAAM,YAAa,UAAU,wCAA0C,CAAA,CACtJ,CAAA,CAAA,EAGJ,MAAO,CAAE,MAAK,KAAM,EAAM,KAAM,MAAO,EAAM,MAAO,WAAY,EAAM,WAAY,SAAU,EAAM,SAAU,SAAQ,CACtH,CAGA,SAAgB,EAAa,CAAE,WAAmF,CAShH,OARI,EAAQ,UAER,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAO,WAAY,KAAK,SAAS,SAAA,4IAE5C,CAAA,EAGF,EAAQ,OAEX,EAAA,EAAA,KAAA,CAAC,IAAD,CAAG,UAAW,EAAO,YAAa,KAAK,QAAvC,SAAA,CACG,EAAQ,OACT,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,WAAY,QAAS,EAAQ,WAAY,SAAA,SAEzE,CAAA,CACP,IAPsB,IAS7B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./workbench-types-DzN-5trg.js";var t={name:`name`,command:`command`,args:`args`,env:`env`,sourceRef:`sourceRef`},n={seatId:`seatId`,label:`label`,engine:`engine`,accountId:`accountId`,servers:`servers`,reason:`reason`,configFile:`configFile`,configFormat:`configFormat`,notes:`notes`},r={servers:`servers`,configured:`configured`,note:`note`},i={sampledAt:`sampledAt`,seats:`seats`,machine:`machine`,scope:`scope`,notes:`notes`},a={accountId:`accountId`,label:`label`,provider:`provider`,authentication:`authentication`,state:`state`,planType:`planType`,reason:`reason`,version:`version`,pinnedVersion:`pinnedVersion`,versionState:`versionState`,usageBlockedByPin:`usageBlockedByPin`,notes:`notes`},o={sampledAt:`sampledAt`,accounts:`accounts`,driftDetected:`driftDetected`,notes:`notes`},s={available:`available`,pinned:`pinned`,aliasRef:`aliasRef`,tenantRef:`tenantRef`,principalRef:`principalRef`,reason:`reason`};function c(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function l(e){return typeof e==`string`?e:null}function u(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function d(e){return e===!0}function f(e){let n=c(e);if(n===null)return null;let r=l(n[t.name]),i=l(n[t.command]);if(r===null||i===null)return null;let a=null,o=c(n[t.env]);if(o!==null){let e=Object.keys(o);if(e.length>0){a={};for(let t of e)a[t]=`<set>`}}return{name:r,command:i,args:u(n[t.args]),env:a,sourceRef:l(n[t.sourceRef])??`(unknown source)`}}function p(e){let t=c(e);if(t===null)return null;let r=l(t[n.seatId]);if(r===null)return null;let i=Array.isArray(t[n.servers])?t[n.servers].map(f).filter(e=>e!==null):[];return{seatId:r,label:l(t[n.label])??r,engine:l(t[n.engine])??`unknown`,accountId:l(t[n.accountId])??r,servers:i,reason:l(t[n.reason])??`unknown`,configFile:l(t[n.configFile]),configFormat:l(t[n.configFormat]),notes:u(t[n.notes])}}function m(e){let t=c(e);return t===null?null:{available:d(t[s.available]),pinned:d(t[s.pinned]),aliasRef:l(t[s.aliasRef]),tenantRef:l(t[s.tenantRef]),principalRef:l(t[s.principalRef]),reason:l(t[s.reason])??`unknown`}}function h(e){let t=c(e);if(t===null||!Array.isArray(t[i.seats]))return null;let n=c(t[i.machine]),a=n!==null&&Array.isArray(n[r.servers])?n[r.servers].map(f).filter(e=>e!==null):[];return{sampledAt:l(t[i.sampledAt]),seats:t[i.seats].map(p).filter(e=>e!==null),machine:{servers:a,configured:n===null?a.length>0:d(n[r.configured]),note:(n===null?null:l(n[r.note]))??``},scope:m(t[i.scope]),notes:u(t[i.notes])}}function g(e){let t=c(e);if(t===null)return null;let n=l(t[a.accountId]);return n===null?null:{accountId:n,label:l(t[a.label])??n,provider:l(t[a.provider])??`unknown`,authentication:l(t[a.authentication])??`unknown`,state:l(t[a.state])??`unknown`,planType:l(t[a.planType]),reason:l(t[a.reason])??`unknown`,version:l(t[a.version]),pinnedVersion:l(t[a.pinnedVersion]),versionState:l(t[a.versionState])??`unverified`,usageBlockedByPin:d(t[a.usageBlockedByPin]),notes:u(t[a.notes])}}function _(e){let t=c(e);if(t===null||!Array.isArray(t[o.accounts]))return null;let n=t[o.accounts].map(g).filter(e=>e!==null);return{sampledAt:l(t[o.sampledAt]),accounts:n,driftDetected:d(t[o.driftDetected])||n.some(e=>e.versionState===`drift`),notes:u(t[o.notes])}}var v={"mcp-seat-isolated-by-adapter":`Verse launches every turn on this seat with an empty MCP configuration, so it loads no MCP servers at all — whatever is configured elsewhere on this machine.`,"mcp-account-config-absent":`This account has no MCP configuration file of its own, so it starts with none.`,"mcp-account-config-not-json":`This account keeps its MCP servers in a TOML config that the provider CLI reads directly. Hub does not parse or rewrite it, so it cannot list what is in there.`,"mcp-account-config-read":`Read from this account's own private configuration.`,"mcp-account-config-unreadable":`This account's configuration could not be read, so nothing here is a reading.`,"mcp-account-profile-unresolved":`This account's private profile could not be located, so Hub cannot say what it would load.`},y={"mcp-scope-locus-unavailable":`Locus is not reachable on this machine, so writes are not attributable to a tenant.`,"mcp-scope-unpinned":`Locus is running but nothing is pinned, so there is no tenant to scope a write to.`,"mcp-scope-seal-unverified":`Locus reports a pin whose seal did not verify. Fix the pin before writing anything.`,"mcp-scope-expired":`The Locus pin has expired.`,"mcp-scope-pinned":`Writes are attributed to the pinned Locus tenant shown here.`};function b(e,t,n){return e[t]??n}var x={ok:`success`,warn:`warning`,error:`danger`,off:`off`,unknown:`neutral`};function S(e){return x[e]}var C=[`claude`,`codex`,`grok`,`local`];function w(e){return C.includes(e)?e:null}function T(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)||t}function E(e){if(!e)return[];let t=[],n=new Set,r=(e,r)=>{typeof e!=`string`||e.length===0||n.has(e)||(n.add(e),t.push({path:e,name:r??T(e)}))},i=[...e.sessions].sort((e,t)=>Date.parse(t.updatedAt)-Date.parse(e.updatedAt));for(let e of i)r(e.projectPath);for(let t of e.projects)r(t.path,t.name);return t}function D(e){let t=[];for(let n of e){if(n.engine!==`local`)continue;let e=n.models[0]?.id??(n.id.startsWith(`local:`)?n.id.slice(6):null);e&&!t.includes(e)&&t.push(e)}return t}function O(e,t){return t.via===`ollama`?e.ollamaLaunch?t.model?[...e.ollamaLaunch,`--model`,t.model]:[...e.ollamaLaunch]:null:e.actions.find(e=>e.kind===`launch`)?.command??null}var k=new Set([`spent`,`not-checked`,`unavailable`]);function A(e,t){if(e.kind===`local`)return[];let n=[],r=e.connection,i=e.signedOut||r!==null&&(r.connection===`signed-out`||r.connection===`expiring`||r.fixKind===`reauth`);i&&n.push({kind:`reconnect`,label:`Reconnect`,command:null,primary:!0});let a=!i&&t!=null&&k.has(t.kind);return a&&n.push({kind:`check-again`,label:`Check again`,command:null,primary:!0}),r!==null&&r.fixKind!==`reauth`&&r.fixKind!==`none`&&r.fixCommand!==null&&n.push({kind:`fix`,label:`Fix`,command:r.fixCommand,primary:!i&&!a}),n.push({kind:`edit-budget`,label:`Edit budget`,command:null,primary:!1}),n}function j(t){return t.seats.map(t=>{let n=w(t.engine),r=t.reason===`mcp-seat-isolated-by-adapter`,i=t.servers.length;return{seatId:t.seatId,label:t.label,engine:n,monogram:n?e[n]:t.label.slice(0,1).toUpperCase(),servers:t.servers,loads:i>0?`loads ${i} server${i===1?``:`s`}`:r?`loads none — isolated by Verse`:`loads none`,isolated:r,sentence:b(v,t.reason,`Hub cannot say what this seat would load.`),reason:t.reason,notes:t.notes}})}function M(e){let t=[{id:`hub`,label:`Hub gateway registry`,disabledReason:null}];for(let n of e?.seats??[]){if(n.seatId===`local`)continue;let e=n.configFormat===`toml`||n.reason===`mcp-account-config-not-json`;t.push({id:`account:${n.accountId}`,label:`${n.label} (${n.engine})`,disabledReason:e?`Keeps its MCP servers in TOML, which Hub does not rewrite.`:null})}return t}function N(e){let t=[],n=``,r=null,i=!1;for(let a of e){if(r){a===r?r=null:n+=a;continue}if(a===`"`||a===`'`){r=a,i=!0;continue}if(/\s/.test(a)){(i||n.length>0)&&t.push(n),n=``,i=!1;continue}n+=a}return(i||n.length>0)&&t.push(n),t}function P(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(e.length===0||e.startsWith(`#`))continue;let r=e.indexOf(`=`),i=r===-1?``:e.slice(0,r).trim();if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(i))return{ok:!1,error:`“${e.slice(0,40)}” is not KEY=value.`};t[i]=e.slice(r+1)}return{ok:!0,env:t}}export{D as a,P as c,f as d,_ as f,E as i,N as l,b as m,S as n,j as o,h as p,O as r,M as s,A as t,y as u};
|
|
2
|
+
//# sourceMappingURL=apps-model-CDFvmsQV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps-model-CDFvmsQV.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/mcp/mcp-contract.ts","../../../../../../src/web-ui/routes/verse/apps/apps-model.ts"],"sourcesContent":["/**\n * routes/verse/mcp/mcp-contract.ts — the wire seam for MCP management.\n *\n * Same posture as routes/verse/usage/usage-contract.ts, for the same two\n * reasons:\n *\n * 1. EVERY import from src/core here MUST be type-only. `core/verse/\n * mcp-seat-view.ts` pulls `node:fs` and `node:os`; a VALUE import of even\n * one constant drags that graph into the browser bundle and `vite build`\n * fails. Type-only imports are erased, so the seam guards below cost\n * nothing at runtime.\n * 2. Nothing is CAST. Every read goes through a structural narrower, so a\n * field rename in src/core degrades this panel to an honest \"unknown\"\n * instead of throwing at render time — and the `WIRE_*_KEYS` blocks make\n * that rename fail `npm run typecheck:web` here, at the seam, first.\n *\n * SECURITY: the server already redacts every env value to '<set>' via\n * `redactEnv` and publishes config files as home-relative refs. This module\n * is the client-side backstop on top of that: {@link narrowServer} FORCES\n * every env value to '<set>' whatever arrived, so a server that ever\n * regressed could not print a secret through this panel.\n *\n * Pure: no React, no I/O.\n */\nimport type {\n VerseMcpMachineRegistry,\n VerseMcpSeatView,\n VerseMcpServerView,\n VerseMcpSnapshot,\n} from '../../../../core/verse/mcp-seat-view.js';\nimport type { VerseMcpScope } from '../../../../core/verse/mcp-scope.js';\nimport type {\n VerseAccountCliHealth,\n VerseCliHealthSnapshot,\n} from '../../../../core/verse/mcp-cli-health.js';\n\n// ---------------------------------------------------------------------------\n// Seam contract — compile-time only, zero runtime cost.\n// ---------------------------------------------------------------------------\n\nconst WIRE_SERVER_KEYS = {\n name: 'name',\n command: 'command',\n args: 'args',\n env: 'env',\n sourceRef: 'sourceRef',\n} as const satisfies Record<string, keyof VerseMcpServerView>;\n\nconst WIRE_SEAT_KEYS = {\n seatId: 'seatId',\n label: 'label',\n engine: 'engine',\n accountId: 'accountId',\n servers: 'servers',\n reason: 'reason',\n configFile: 'configFile',\n configFormat: 'configFormat',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseMcpSeatView>;\n\nconst WIRE_MACHINE_KEYS = {\n servers: 'servers',\n configured: 'configured',\n note: 'note',\n} as const satisfies Record<string, keyof VerseMcpMachineRegistry>;\n\nconst WIRE_SNAPSHOT_KEYS = {\n sampledAt: 'sampledAt',\n seats: 'seats',\n machine: 'machine',\n scope: 'scope',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseMcpSnapshot>;\n\nconst WIRE_HEALTH_KEYS = {\n accountId: 'accountId',\n label: 'label',\n provider: 'provider',\n authentication: 'authentication',\n state: 'state',\n planType: 'planType',\n reason: 'reason',\n version: 'version',\n pinnedVersion: 'pinnedVersion',\n versionState: 'versionState',\n usageBlockedByPin: 'usageBlockedByPin',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseAccountCliHealth>;\n\nconst WIRE_HEALTH_SNAPSHOT_KEYS = {\n sampledAt: 'sampledAt',\n accounts: 'accounts',\n driftDetected: 'driftDetected',\n notes: 'notes',\n} as const satisfies Record<string, keyof VerseCliHealthSnapshot>;\n\nconst WIRE_SCOPE_KEYS = {\n available: 'available',\n pinned: 'pinned',\n aliasRef: 'aliasRef',\n tenantRef: 'tenantRef',\n principalRef: 'principalRef',\n reason: 'reason',\n} as const satisfies Record<string, keyof VerseMcpScope>;\n\n// ---------------------------------------------------------------------------\n// Display shapes\n// ---------------------------------------------------------------------------\n\nexport interface McpServer {\n name: string;\n command: string;\n args: string[];\n /** Keys only. Every value is '<set>' — forced here, not merely trusted. */\n env: Record<string, string> | null;\n sourceRef: string;\n}\n\nexport interface McpSeat {\n seatId: string;\n label: string;\n engine: string;\n accountId: string;\n servers: McpServer[];\n reason: string;\n configFile: string | null;\n configFormat: string | null;\n notes: string[];\n}\n\nexport interface McpScope {\n available: boolean;\n pinned: boolean;\n aliasRef: string | null;\n tenantRef: string | null;\n principalRef: string | null;\n reason: string;\n}\n\nexport interface McpSnapshot {\n sampledAt: string | null;\n seats: McpSeat[];\n machine: { servers: McpServer[]; configured: boolean; note: string };\n scope: McpScope | null;\n notes: string[];\n}\n\nexport interface CliHealthRow {\n accountId: string;\n label: string;\n provider: string;\n authentication: string;\n state: string;\n planType: string | null;\n reason: string;\n version: string | null;\n pinnedVersion: string | null;\n versionState: string;\n usageBlockedByPin: boolean;\n notes: string[];\n}\n\nexport interface CliHealthSnapshot {\n sampledAt: string | null;\n accounts: CliHealthRow[];\n driftDetected: boolean;\n notes: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Narrowers\n// ---------------------------------------------------------------------------\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction text(value: unknown): string | null {\n return typeof value === 'string' ? value : null;\n}\n\nfunction strings(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction flag(value: unknown): boolean {\n return value === true;\n}\n\n/**\n * Narrow one server, forcing every env value to '<set>'.\n *\n * The redaction is re-applied rather than trusted. The server already did it;\n * doing it again here means no future server bug can turn this panel into a\n * secret printer, and it costs one map over at most a handful of keys.\n */\nexport function narrowServer(raw: unknown): McpServer | null {\n const row = record(raw);\n if (row === null) return null;\n const name = text(row[WIRE_SERVER_KEYS.name]);\n const command = text(row[WIRE_SERVER_KEYS.command]);\n if (name === null || command === null) return null;\n\n let env: Record<string, string> | null = null;\n const rawEnv = record(row[WIRE_SERVER_KEYS.env]);\n if (rawEnv !== null) {\n const keys = Object.keys(rawEnv);\n if (keys.length > 0) {\n env = {};\n for (const key of keys) env[key] = '<set>';\n }\n }\n\n return {\n name,\n command,\n args: strings(row[WIRE_SERVER_KEYS.args]),\n env,\n sourceRef: text(row[WIRE_SERVER_KEYS.sourceRef]) ?? '(unknown source)',\n };\n}\n\nfunction narrowSeat(raw: unknown): McpSeat | null {\n const row = record(raw);\n if (row === null) return null;\n const seatId = text(row[WIRE_SEAT_KEYS.seatId]);\n if (seatId === null) return null;\n const servers = Array.isArray(row[WIRE_SEAT_KEYS.servers])\n ? (row[WIRE_SEAT_KEYS.servers] as unknown[]).map(narrowServer).filter((s): s is McpServer => s !== null)\n : [];\n return {\n seatId,\n label: text(row[WIRE_SEAT_KEYS.label]) ?? seatId,\n engine: text(row[WIRE_SEAT_KEYS.engine]) ?? 'unknown',\n accountId: text(row[WIRE_SEAT_KEYS.accountId]) ?? seatId,\n servers,\n reason: text(row[WIRE_SEAT_KEYS.reason]) ?? 'unknown',\n configFile: text(row[WIRE_SEAT_KEYS.configFile]),\n configFormat: text(row[WIRE_SEAT_KEYS.configFormat]),\n notes: strings(row[WIRE_SEAT_KEYS.notes]),\n };\n}\n\nfunction narrowScope(raw: unknown): McpScope | null {\n const row = record(raw);\n if (row === null) return null;\n return {\n available: flag(row[WIRE_SCOPE_KEYS.available]),\n pinned: flag(row[WIRE_SCOPE_KEYS.pinned]),\n aliasRef: text(row[WIRE_SCOPE_KEYS.aliasRef]),\n tenantRef: text(row[WIRE_SCOPE_KEYS.tenantRef]),\n principalRef: text(row[WIRE_SCOPE_KEYS.principalRef]),\n reason: text(row[WIRE_SCOPE_KEYS.reason]) ?? 'unknown',\n };\n}\n\n/** Narrow GET /api/verse/mcp. Null when the body is not this shape at all. */\nexport function projectMcpSnapshot(raw: unknown): McpSnapshot | null {\n const row = record(raw);\n if (row === null) return null;\n if (!Array.isArray(row[WIRE_SNAPSHOT_KEYS.seats])) return null;\n\n const machine = record(row[WIRE_SNAPSHOT_KEYS.machine]);\n const machineServers = machine !== null && Array.isArray(machine[WIRE_MACHINE_KEYS.servers])\n ? (machine[WIRE_MACHINE_KEYS.servers] as unknown[]).map(narrowServer).filter((s): s is McpServer => s !== null)\n : [];\n\n return {\n sampledAt: text(row[WIRE_SNAPSHOT_KEYS.sampledAt]),\n seats: (row[WIRE_SNAPSHOT_KEYS.seats] as unknown[])\n .map(narrowSeat)\n .filter((s): s is McpSeat => s !== null),\n machine: {\n servers: machineServers,\n configured: machine !== null ? flag(machine[WIRE_MACHINE_KEYS.configured]) : machineServers.length > 0,\n note: (machine !== null ? text(machine[WIRE_MACHINE_KEYS.note]) : null) ?? '',\n },\n scope: narrowScope(row[WIRE_SNAPSHOT_KEYS.scope]),\n notes: strings(row[WIRE_SNAPSHOT_KEYS.notes]),\n };\n}\n\nfunction narrowHealthRow(raw: unknown): CliHealthRow | null {\n const row = record(raw);\n if (row === null) return null;\n const accountId = text(row[WIRE_HEALTH_KEYS.accountId]);\n if (accountId === null) return null;\n return {\n accountId,\n label: text(row[WIRE_HEALTH_KEYS.label]) ?? accountId,\n provider: text(row[WIRE_HEALTH_KEYS.provider]) ?? 'unknown',\n authentication: text(row[WIRE_HEALTH_KEYS.authentication]) ?? 'unknown',\n state: text(row[WIRE_HEALTH_KEYS.state]) ?? 'unknown',\n planType: text(row[WIRE_HEALTH_KEYS.planType]),\n reason: text(row[WIRE_HEALTH_KEYS.reason]) ?? 'unknown',\n // A missing version stays NULL. It is never coerced to a string, because\n // \"no reading\" and \"some version\" are different facts.\n version: text(row[WIRE_HEALTH_KEYS.version]),\n pinnedVersion: text(row[WIRE_HEALTH_KEYS.pinnedVersion]),\n versionState: text(row[WIRE_HEALTH_KEYS.versionState]) ?? 'unverified',\n usageBlockedByPin: flag(row[WIRE_HEALTH_KEYS.usageBlockedByPin]),\n notes: strings(row[WIRE_HEALTH_KEYS.notes]),\n };\n}\n\n/** Narrow GET /api/verse/mcp/cli-health. */\nexport function projectCliHealth(raw: unknown): CliHealthSnapshot | null {\n const row = record(raw);\n if (row === null) return null;\n if (!Array.isArray(row[WIRE_HEALTH_SNAPSHOT_KEYS.accounts])) return null;\n const accounts = (row[WIRE_HEALTH_SNAPSHOT_KEYS.accounts] as unknown[])\n .map(narrowHealthRow)\n .filter((a): a is CliHealthRow => a !== null);\n return {\n sampledAt: text(row[WIRE_HEALTH_SNAPSHOT_KEYS.sampledAt]),\n accounts,\n // Derived locally as well as read, so a server that forgot the flag still\n // renders the banner rather than silently hiding a drift.\n driftDetected:\n flag(row[WIRE_HEALTH_SNAPSHOT_KEYS.driftDetected]) ||\n accounts.some((account) => account.versionState === 'drift'),\n notes: strings(row[WIRE_HEALTH_SNAPSHOT_KEYS.notes]),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Copy for the machine-readable reasons this surface renders\n// ---------------------------------------------------------------------------\n\n/**\n * Plain language for each seat reason. The CODE is still shown next to the\n * sentence — it is the thing to search for — but it is never the sentence.\n * Same split `usage/accounts-model.ts` uses for probe reasons.\n */\nexport const SEAT_REASON_COPY: Record<string, string> = {\n 'mcp-seat-isolated-by-adapter':\n 'Verse launches every turn on this seat with an empty MCP configuration, so it loads no MCP '\n + 'servers at all — whatever is configured elsewhere on this machine.',\n 'mcp-account-config-absent':\n 'This account has no MCP configuration file of its own, so it starts with none.',\n 'mcp-account-config-not-json':\n 'This account keeps its MCP servers in a TOML config that the provider CLI reads directly. '\n + 'Hub does not parse or rewrite it, so it cannot list what is in there.',\n 'mcp-account-config-read':\n 'Read from this account\\'s own private configuration.',\n 'mcp-account-config-unreadable':\n 'This account\\'s configuration could not be read, so nothing here is a reading.',\n 'mcp-account-profile-unresolved':\n 'This account\\'s private profile could not be located, so Hub cannot say what it would load.',\n};\n\nexport const SCOPE_REASON_COPY: Record<string, string> = {\n 'mcp-scope-locus-unavailable':\n 'Locus is not reachable on this machine, so writes are not attributable to a tenant.',\n 'mcp-scope-unpinned':\n 'Locus is running but nothing is pinned, so there is no tenant to scope a write to.',\n 'mcp-scope-seal-unverified':\n 'Locus reports a pin whose seal did not verify. Fix the pin before writing anything.',\n 'mcp-scope-expired': 'The Locus pin has expired.',\n 'mcp-scope-pinned': 'Writes are attributed to the pinned Locus tenant shown here.',\n};\n\n/** Prose for a code, or the caller's own sentence. NEVER the raw code alone. */\nexport function reasonSentence(\n copy: Record<string, string>,\n reason: string,\n fallback: string,\n): string {\n return copy[reason] ?? fallback;\n}\n","/**\n * routes/verse/apps/apps-model.ts — pure view-model for Apps & Accounts.\n *\n * The page has five groups (SPEC-310C §4), from three kinds of source:\n * ACCOUNTS the shared capacity rows (usage/capacity-strip-model.ts)\n * plus the actions each seat needs (Reconnect / Check again / Fix / Edit budget);\n * DESKTOP, TERMINAL AGENTS, LOCAL MODELS GET /api/verse/apps, as served;\n * MCP SERVERS GET /api/verse/mcp (what each seat would ACTUALLY load).\n * Everything that decides a word, a tone or whether a control is enabled\n * lives here, so it is unit-tested without a DOM.\n *\n * Pure: no React, no I/O.\n */\nimport type { VerseAppHealthState, VerseAppRow } from '../../../../core/verse/workbench-types.js';\nimport { ENGINE_MONOGRAM } from '../../../../core/verse/workbench-types.js';\nimport type { VerseBootstrap, VerseEngine, VerseSeat } from '../../../data/api-types.js';\nimport type { HealthTone } from '../health/health-model.js';\nimport type { McpSeat, McpServer, McpSnapshot } from '../mcp/mcp-contract.js';\nimport { reasonSentence, SEAT_REASON_COPY } from '../mcp/mcp-contract.js';\nimport type { AccountStatus, CapacityRow } from '../usage/capacity-strip-model.js';\n\n/** SPEC-310C §4 order. */\nexport const APPS_GROUP_ORDER = ['accounts', 'desktop', 'terminal-agents', 'local-models', 'mcp-servers'] as const;\nexport type AppsGroupId = (typeof APPS_GROUP_ORDER)[number];\n\nexport const APPS_GROUP_TITLE: Readonly<Record<AppsGroupId, string>> = {\n accounts: 'Accounts',\n desktop: 'Desktop',\n 'terminal-agents': 'Terminal agents',\n 'local-models': 'Local models',\n 'mcp-servers': 'MCP servers',\n};\n\nconst HEALTH_TONE: Readonly<Record<VerseAppHealthState, HealthTone | 'off'>> = {\n ok: 'success',\n warn: 'warning',\n error: 'danger',\n off: 'off',\n unknown: 'neutral',\n};\n\n/** A row's dot tone. `off` is its own quiet state (not installed, switched off) — never a fault. */\nexport function appHealthTone(state: VerseAppHealthState): HealthTone | 'off' {\n return HEALTH_TONE[state];\n}\n\nconst VERSE_ENGINES: readonly VerseEngine[] = ['claude', 'codex', 'grok', 'local'];\n\nexport function asEngine(value: string): VerseEngine | null {\n return (VERSE_ENGINES as readonly string[]).includes(value) ? (value as VerseEngine) : null;\n}\n\n// ---------------------------------------------------------------------------\n// Launch targets\n// ---------------------------------------------------------------------------\n\nexport interface LaunchProject {\n path: string;\n name: string;\n}\n\nfunction baseName(path: string): string {\n const trimmed = path.replace(/\\/+$/, '');\n const i = trimmed.lastIndexOf('/');\n return i === -1 ? trimmed : trimmed.slice(i + 1) || trimmed;\n}\n\n/**\n * Where a Launch may start, most relevant first: the folders of the most\n * recently used chats (the \"current project\"), then every discovered project.\n * The server re-checks each against the same two sources, so this list is a\n * convenience, never the gate.\n */\nexport function launchProjects(bootstrap: Pick<VerseBootstrap, 'sessions' | 'projects'> | undefined): LaunchProject[] {\n if (!bootstrap) return [];\n const out: LaunchProject[] = [];\n const seen = new Set<string>();\n const add = (path: string, name?: string) => {\n if (typeof path !== 'string' || path.length === 0 || seen.has(path)) return;\n seen.add(path);\n out.push({ path, name: name ?? baseName(path) });\n };\n const recent = [...bootstrap.sessions].sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt));\n for (const s of recent) add(s.projectPath);\n for (const p of bootstrap.projects) add(p.path, p.name);\n return out;\n}\n\n/** Ollama tags the local seats run — the model choices for `ollama launch <id> --model`. */\nexport function localModelTags(seats: readonly VerseSeat[]): string[] {\n const out: string[] = [];\n for (const seat of seats) {\n if (seat.engine !== 'local') continue;\n const tag = seat.models[0]?.id ?? (seat.id.startsWith('local:') ? seat.id.slice('local:'.length) : null);\n if (tag && !out.includes(tag)) out.push(tag);\n }\n return out;\n}\n\nexport type LaunchVia = 'native' | 'ollama';\n\nexport interface LaunchChoice {\n via: LaunchVia;\n model: string | null;\n}\n\n/** The argv a launch choice runs, as the operator would type it. */\nexport function launchCommand(row: VerseAppRow, choice: LaunchChoice): string[] | null {\n if (choice.via === 'ollama') {\n if (!row.ollamaLaunch) return null;\n return choice.model ? [...row.ollamaLaunch, '--model', choice.model] : [...row.ollamaLaunch];\n }\n return row.actions.find((a) => a.kind === 'launch')?.command ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// Accounts\n// ---------------------------------------------------------------------------\n\nexport type AccountActionKind = 'reconnect' | 'check-again' | 'fix' | 'edit-budget';\n\nexport interface AccountAction {\n kind: AccountActionKind;\n label: string;\n /** Fix only: the command the dialog shows. */\n command: string[] | null;\n /** Primary = the one thing this seat needs now. */\n primary: boolean;\n}\n\n/** Statuses a fresh health sweep can change on its own: offer \"Check again\" for them. */\nconst RECHECKABLE: ReadonlySet<AccountStatus['kind']> = new Set(['spent', 'not-checked', 'unavailable']);\n\n/**\n * What a seat row offers, the one it needs most first:\n * Reconnect signed out or sign-in expiring (the provider's own login, in Terminal);\n * Check again spent, not checked, or unavailable — a zero-cost health sweep\n * is what moves those (pass the row's SETTLED status, so the\n * button stays put while its own check runs);\n * Fix A2 has a command for what is wrong (a re-pin);\n * Edit budget every paid seat.\n * Local rows need none of these.\n */\nexport function accountActions(row: CapacityRow, status?: AccountStatus | null): AccountAction[] {\n if (row.kind === 'local') return [];\n const out: AccountAction[] = [];\n const c = row.connection;\n const needsLogin = row.signedOut\n || (c !== null && (c.connection === 'signed-out' || c.connection === 'expiring' || c.fixKind === 'reauth'));\n if (needsLogin) out.push({ kind: 'reconnect', label: 'Reconnect', command: null, primary: true });\n const recheck = !needsLogin && status != null && RECHECKABLE.has(status.kind);\n if (recheck) out.push({ kind: 'check-again', label: 'Check again', command: null, primary: true });\n if (c !== null && c.fixKind !== 'reauth' && c.fixKind !== 'none' && c.fixCommand !== null) {\n out.push({ kind: 'fix', label: 'Fix', command: c.fixCommand, primary: !needsLogin && !recheck });\n }\n out.push({ kind: 'edit-budget', label: 'Edit budget', command: null, primary: false });\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// MCP\n// ---------------------------------------------------------------------------\n\nexport interface McpSeatRow {\n seatId: string;\n label: string;\n engine: VerseEngine | null;\n monogram: string;\n servers: McpServer[];\n /** \"loads 2 servers\", \"loads none — isolated by Verse\". */\n loads: string;\n isolated: boolean;\n /** Plain language for the seat's reason; the code rides beside it. */\n sentence: string;\n reason: string;\n notes: string[];\n}\n\nexport function mcpSeatRows(snapshot: McpSnapshot): McpSeatRow[] {\n return snapshot.seats.map((seat: McpSeat) => {\n const engine = asEngine(seat.engine);\n const isolated = seat.reason === 'mcp-seat-isolated-by-adapter';\n const n = seat.servers.length;\n return {\n seatId: seat.seatId,\n label: seat.label,\n engine,\n monogram: engine ? ENGINE_MONOGRAM[engine] : seat.label.slice(0, 1).toUpperCase(),\n servers: seat.servers,\n loads: n > 0 ? `loads ${n} server${n === 1 ? '' : 's'}` : isolated ? 'loads none — isolated by Verse' : 'loads none',\n isolated,\n sentence: reasonSentence(SEAT_REASON_COPY, seat.reason, 'Hub cannot say what this seat would load.'),\n reason: seat.reason,\n notes: seat.notes,\n };\n });\n}\n\n/** Where an Add can write: the hub registry, and each account whose config is JSON. */\nexport interface McpTargetOption {\n id: string;\n label: string;\n /** Why this target cannot take a write, or null. */\n disabledReason: string | null;\n}\n\nexport function mcpTargets(snapshot: McpSnapshot | null): McpTargetOption[] {\n const out: McpTargetOption[] = [{ id: 'hub', label: 'Hub gateway registry', disabledReason: null }];\n for (const seat of snapshot?.seats ?? []) {\n if (seat.seatId === 'local') continue;\n // An isolated (Claude) account CAN be written — Claude Code in a terminal\n // reads it — and the form says a Verse chat on it still loads nothing.\n const toml = seat.configFormat === 'toml' || seat.reason === 'mcp-account-config-not-json';\n out.push({\n id: `account:${seat.accountId}`,\n label: `${seat.label} (${seat.engine})`,\n disabledReason: toml ? 'Keeps its MCP servers in TOML, which Hub does not rewrite.' : null,\n });\n }\n return out;\n}\n\n/** Split `a \"b c\" d` into argv the way a shell would, for the Add form's arguments field. */\nexport function splitArgs(text: string): string[] {\n const out: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | null = null;\n let has = false;\n for (const ch of text) {\n if (quote) {\n if (ch === quote) quote = null;\n else current += ch;\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n has = true;\n continue;\n }\n if (/\\s/.test(ch)) {\n if (has || current.length > 0) out.push(current);\n current = '';\n has = false;\n continue;\n }\n current += ch;\n }\n if (has || current.length > 0) out.push(current);\n return out;\n}\n\n/** `KEY=value` lines → an env object; the first bad line is reported, never guessed. */\nexport function parseEnvLines(text: string): { ok: true; env: Record<string, string> } | { ok: false; error: string } {\n const env: Record<string, string> = {};\n for (const raw of text.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (line.length === 0 || line.startsWith('#')) continue;\n const eq = line.indexOf('=');\n const key = eq === -1 ? '' : line.slice(0, eq).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) return { ok: false, error: `“${line.slice(0, 40)}” is not KEY=value.` };\n env[key] = line.slice(eq + 1);\n }\n return { ok: true, env };\n}\n"],"mappings":"kDAwCA,IAAM,EAAmB,CACvB,KAAM,OACN,QAAS,UACT,KAAM,OACN,IAAK,MACL,UAAW,WACb,EAEM,EAAiB,CACrB,OAAQ,SACR,MAAO,QACP,OAAQ,SACR,UAAW,YACX,QAAS,UACT,OAAQ,SACR,WAAY,aACZ,aAAc,eACd,MAAO,OACT,EAEM,EAAoB,CACxB,QAAS,UACT,WAAY,aACZ,KAAM,MACR,EAEM,EAAqB,CACzB,UAAW,YACX,MAAO,QACP,QAAS,UACT,MAAO,QACP,MAAO,OACT,EAEM,EAAmB,CACvB,UAAW,YACX,MAAO,QACP,SAAU,WACV,eAAgB,iBAChB,MAAO,QACP,SAAU,WACV,OAAQ,SACR,QAAS,UACT,cAAe,gBACf,aAAc,eACd,kBAAmB,oBACnB,MAAO,OACT,EAEM,EAA4B,CAChC,UAAW,YACX,SAAU,WACV,cAAe,gBACf,MAAO,OACT,EAEM,EAAkB,CACtB,UAAW,YACX,OAAQ,SACR,SAAU,WACV,UAAW,YACX,aAAc,eACd,OAAQ,QACV,EAsEA,SAAS,EAAO,EAAgD,CAC9D,OAAyB,OAAO,GAAU,UAAnC,GAA+C,CAAC,MAAM,QAAQ,CAAK,EACrE,EACD,IACN,CAEA,SAAS,EAAK,EAA+B,CAC3C,OAAO,OAAO,GAAU,SAAW,EAAQ,IAC7C,CAEA,SAAS,EAAQ,EAA0B,CACzC,OAAO,MAAM,QAAQ,CAAK,EAAI,EAAM,OAAQ,GAAyB,OAAO,GAAS,QAAQ,EAAI,CAAC,CACpG,CAEA,SAAS,EAAK,EAAyB,CACrC,OAAO,IAAU,EACnB,CASA,SAAgB,EAAa,EAAgC,CAC3D,IAAM,EAAM,EAAO,CAAG,EACtB,GAAI,IAAQ,KAAM,OAAO,KACzB,IAAM,EAAO,EAAK,EAAI,EAAiB,KAAK,EACtC,EAAU,EAAK,EAAI,EAAiB,QAAQ,EAClD,GAAI,IAAS,MAAQ,IAAY,KAAM,OAAO,KAE9C,IAAI,EAAqC,KACnC,EAAS,EAAO,EAAI,EAAiB,IAAI,EAC/C,GAAI,IAAW,KAAM,CACnB,IAAM,EAAO,OAAO,KAAK,CAAM,EAC/B,GAAI,EAAK,OAAS,EAAG,CACnB,EAAM,CAAC,EACP,IAAK,IAAM,KAAO,EAAM,EAAI,GAAO,OACrC,CACF,CAEA,MAAO,CACL,OACA,UACA,KAAM,EAAQ,EAAI,EAAiB,KAAK,EACxC,MACA,UAAW,EAAK,EAAI,EAAiB,UAAU,GAAK,kBACtD,CACF,CAEA,SAAS,EAAW,EAA8B,CAChD,IAAM,EAAM,EAAO,CAAG,EACtB,GAAI,IAAQ,KAAM,OAAO,KACzB,IAAM,EAAS,EAAK,EAAI,EAAe,OAAO,EAC9C,GAAI,IAAW,KAAM,OAAO,KAC5B,IAAM,EAAU,MAAM,QAAQ,EAAI,EAAe,QAAQ,EACpD,EAAI,EAAe,QAAQ,CAAe,IAAI,CAAY,CAAC,CAAC,OAAQ,GAAsB,IAAM,IAAI,EACrG,CAAC,EACL,MAAO,CACL,SACA,MAAO,EAAK,EAAI,EAAe,MAAM,GAAK,EAC1C,OAAQ,EAAK,EAAI,EAAe,OAAO,GAAK,UAC5C,UAAW,EAAK,EAAI,EAAe,UAAU,GAAK,EAClD,UACA,OAAQ,EAAK,EAAI,EAAe,OAAO,GAAK,UAC5C,WAAY,EAAK,EAAI,EAAe,WAAW,EAC/C,aAAc,EAAK,EAAI,EAAe,aAAa,EACnD,MAAO,EAAQ,EAAI,EAAe,MAAM,CAC1C,CACF,CAEA,SAAS,EAAY,EAA+B,CAClD,IAAM,EAAM,EAAO,CAAG,EAEtB,OADI,IAAQ,KAAa,KAClB,CACL,UAAW,EAAK,EAAI,EAAgB,UAAU,EAC9C,OAAQ,EAAK,EAAI,EAAgB,OAAO,EACxC,SAAU,EAAK,EAAI,EAAgB,SAAS,EAC5C,UAAW,EAAK,EAAI,EAAgB,UAAU,EAC9C,aAAc,EAAK,EAAI,EAAgB,aAAa,EACpD,OAAQ,EAAK,EAAI,EAAgB,OAAO,GAAK,SAC/C,CACF,CAGA,SAAgB,EAAmB,EAAkC,CACnE,IAAM,EAAM,EAAO,CAAG,EAEtB,GADI,IAAQ,MACR,CAAC,MAAM,QAAQ,EAAI,EAAmB,MAAM,EAAG,OAAO,KAE1D,IAAM,EAAU,EAAO,EAAI,EAAmB,QAAQ,EAChD,EAAiB,IAAY,MAAQ,MAAM,QAAQ,EAAQ,EAAkB,QAAQ,EACtF,EAAQ,EAAkB,QAAQ,CAAe,IAAI,CAAY,CAAC,CAAC,OAAQ,GAAsB,IAAM,IAAI,EAC5G,CAAC,EAEL,MAAO,CACL,UAAW,EAAK,EAAI,EAAmB,UAAU,EACjD,MAAQ,EAAI,EAAmB,MAAM,CAClC,IAAI,CAAU,CAAC,CACf,OAAQ,GAAoB,IAAM,IAAI,EACzC,QAAS,CACP,QAAS,EACT,WAAY,IAAY,KAAqD,EAAe,OAAS,EAAtE,EAAK,EAAQ,EAAkB,WAAW,EACzE,MAAO,IAAY,KAA+C,KAAxC,EAAK,EAAQ,EAAkB,KAAK,IAAa,EAC7E,EACA,MAAO,EAAY,EAAI,EAAmB,MAAM,EAChD,MAAO,EAAQ,EAAI,EAAmB,MAAM,CAC9C,CACF,CAEA,SAAS,EAAgB,EAAmC,CAC1D,IAAM,EAAM,EAAO,CAAG,EACtB,GAAI,IAAQ,KAAM,OAAO,KACzB,IAAM,EAAY,EAAK,EAAI,EAAiB,UAAU,EAEtD,OADI,IAAc,KAAa,KACxB,CACL,YACA,MAAO,EAAK,EAAI,EAAiB,MAAM,GAAK,EAC5C,SAAU,EAAK,EAAI,EAAiB,SAAS,GAAK,UAClD,eAAgB,EAAK,EAAI,EAAiB,eAAe,GAAK,UAC9D,MAAO,EAAK,EAAI,EAAiB,MAAM,GAAK,UAC5C,SAAU,EAAK,EAAI,EAAiB,SAAS,EAC7C,OAAQ,EAAK,EAAI,EAAiB,OAAO,GAAK,UAG9C,QAAS,EAAK,EAAI,EAAiB,QAAQ,EAC3C,cAAe,EAAK,EAAI,EAAiB,cAAc,EACvD,aAAc,EAAK,EAAI,EAAiB,aAAa,GAAK,aAC1D,kBAAmB,EAAK,EAAI,EAAiB,kBAAkB,EAC/D,MAAO,EAAQ,EAAI,EAAiB,MAAM,CAC5C,CACF,CAGA,SAAgB,EAAiB,EAAwC,CACvE,IAAM,EAAM,EAAO,CAAG,EAEtB,GADI,IAAQ,MACR,CAAC,MAAM,QAAQ,EAAI,EAA0B,SAAS,EAAG,OAAO,KACpE,IAAM,EAAY,EAAI,EAA0B,SAAS,CACtD,IAAI,CAAe,CAAC,CACpB,OAAQ,GAAyB,IAAM,IAAI,EAC9C,MAAO,CACL,UAAW,EAAK,EAAI,EAA0B,UAAU,EACxD,WAGA,cACE,EAAK,EAAI,EAA0B,cAAc,GACjD,EAAS,KAAM,GAAY,EAAQ,eAAiB,OAAO,EAC7D,MAAO,EAAQ,EAAI,EAA0B,MAAM,CACrD,CACF,CAWA,IAAa,EAA2C,CACtD,+BACE,gKAEF,4BACE,iFACF,8BACE,kKAEF,0BACE,sDACF,gCACE,gFACF,iCACE,4FACJ,EAEa,EAA4C,CACvD,8BACE,sFACF,qBACE,qFACF,4BACE,sFACF,oBAAqB,6BACrB,mBAAoB,8DACtB,EAGA,SAAgB,EACd,EACA,EACA,EACQ,CACR,OAAO,EAAK,IAAW,CACzB,CClVA,IAAM,EAAyE,CAC7E,GAAI,UACJ,KAAM,UACN,MAAO,SACP,IAAK,MACL,QAAS,SACX,EAGA,SAAgB,EAAc,EAAgD,CAC5E,OAAO,EAAY,EACrB,CAEA,IAAM,EAAwC,CAAC,SAAU,QAAS,OAAQ,OAAO,EAEjF,SAAgB,EAAS,EAAmC,CAC1D,OAAQ,EAAoC,SAAS,CAAK,EAAK,EAAwB,IACzF,CAWA,SAAS,EAAS,EAAsB,CACtC,IAAM,EAAU,EAAK,QAAQ,OAAQ,EAAE,EACjC,EAAI,EAAQ,YAAY,GAAG,EACjC,OAAO,IAAM,GAAK,EAAU,EAAQ,MAAM,EAAI,CAAC,GAAK,CACtD,CAQA,SAAgB,EAAe,EAAuF,CACpH,GAAI,CAAC,EAAW,MAAO,CAAC,EACxB,IAAM,EAAuB,CAAC,EACxB,EAAO,IAAI,IACX,GAAO,EAAc,IAAkB,CACvC,OAAO,GAAS,UAAY,EAAK,SAAW,GAAK,EAAK,IAAI,CAAI,IAClE,EAAK,IAAI,CAAI,EACb,EAAI,KAAK,CAAE,OAAM,KAAM,GAAQ,EAAS,CAAI,CAAE,CAAC,EACjD,EACM,EAAS,CAAC,GAAG,EAAU,QAAQ,CAAC,CAAC,MAAM,EAAG,IAAM,KAAK,MAAM,EAAE,SAAS,EAAI,KAAK,MAAM,EAAE,SAAS,CAAC,EACvG,IAAK,IAAM,KAAK,EAAQ,EAAI,EAAE,WAAW,EACzC,IAAK,IAAM,KAAK,EAAU,SAAU,EAAI,EAAE,KAAM,EAAE,IAAI,EACtD,OAAO,CACT,CAGA,SAAgB,EAAe,EAAuC,CACpE,IAAM,EAAgB,CAAC,EACvB,IAAK,IAAM,KAAQ,EAAO,CACxB,GAAI,EAAK,SAAW,QAAS,SAC7B,IAAM,EAAM,EAAK,OAAO,EAAE,EAAE,KAAO,EAAK,GAAG,WAAW,QAAQ,EAAI,EAAK,GAAG,MAAM,CAAe,EAAI,MAC/F,GAAO,CAAC,EAAI,SAAS,CAAG,GAAG,EAAI,KAAK,CAAG,CAC7C,CACA,OAAO,CACT,CAUA,SAAgB,EAAc,EAAkB,EAAuC,CAKrF,OAJI,EAAO,MAAQ,SACZ,EAAI,aACF,EAAO,MAAQ,CAAC,GAAG,EAAI,aAAc,UAAW,EAAO,KAAK,EAAI,CAAC,GAAG,EAAI,YAAY,EAD7D,KAGzB,EAAI,QAAQ,KAAM,GAAM,EAAE,OAAS,QAAQ,CAAC,EAAE,SAAW,IAClE,CAkBA,IAAM,EAAkD,IAAI,IAAI,CAAC,QAAS,cAAe,aAAa,CAAC,EAYvG,SAAgB,EAAe,EAAkB,EAAgD,CAC/F,GAAI,EAAI,OAAS,QAAS,MAAO,CAAC,EAClC,IAAM,EAAuB,CAAC,EACxB,EAAI,EAAI,WACR,EAAa,EAAI,WACjB,IAAM,OAAS,EAAE,aAAe,cAAgB,EAAE,aAAe,YAAc,EAAE,UAAY,UAC/F,GAAY,EAAI,KAAK,CAAE,KAAM,YAAa,MAAO,YAAa,QAAS,KAAM,QAAS,EAAK,CAAC,EAChG,IAAM,EAAU,CAAC,GAAc,GAAU,MAAQ,EAAY,IAAI,EAAO,IAAI,EAM5E,OALI,GAAS,EAAI,KAAK,CAAE,KAAM,cAAe,MAAO,cAAe,QAAS,KAAM,QAAS,EAAK,CAAC,EAC7F,IAAM,MAAQ,EAAE,UAAY,UAAY,EAAE,UAAY,QAAU,EAAE,aAAe,MACnF,EAAI,KAAK,CAAE,KAAM,MAAO,MAAO,MAAO,QAAS,EAAE,WAAY,QAAS,CAAC,GAAc,CAAC,CAAQ,CAAC,EAEjG,EAAI,KAAK,CAAE,KAAM,cAAe,MAAO,cAAe,QAAS,KAAM,QAAS,EAAM,CAAC,EAC9E,CACT,CAqBA,SAAgB,EAAY,EAAqC,CAC/D,OAAO,EAAS,MAAM,IAAK,GAAkB,CAC3C,IAAM,EAAS,EAAS,EAAK,MAAM,EAC7B,EAAW,EAAK,SAAW,+BAC3B,EAAI,EAAK,QAAQ,OACvB,MAAO,CACL,OAAQ,EAAK,OACb,MAAO,EAAK,MACZ,SACA,SAAU,EAAS,EAAgB,GAAU,EAAK,MAAM,MAAM,EAAG,CAAC,CAAC,CAAC,YAAY,EAChF,QAAS,EAAK,QACd,MAAO,EAAI,EAAI,SAAS,EAAE,SAAS,IAAM,EAAI,GAAK,MAAQ,EAAW,iCAAmC,aACxG,WACA,SAAU,EAAe,EAAkB,EAAK,OAAQ,2CAA2C,EACnG,OAAQ,EAAK,OACb,MAAO,EAAK,KACd,CACF,CAAC,CACH,CAUA,SAAgB,EAAW,EAAiD,CAC1E,IAAM,EAAyB,CAAC,CAAE,GAAI,MAAO,MAAO,uBAAwB,eAAgB,IAAK,CAAC,EAClG,IAAK,IAAM,KAAQ,GAAU,OAAS,CAAC,EAAG,CACxC,GAAI,EAAK,SAAW,QAAS,SAG7B,IAAM,EAAO,EAAK,eAAiB,QAAU,EAAK,SAAW,8BAC7D,EAAI,KAAK,CACP,GAAI,WAAW,EAAK,YACpB,MAAO,GAAG,EAAK,MAAM,IAAI,EAAK,OAAO,GACrC,eAAgB,EAAO,6DAA+D,IACxF,CAAC,CACH,CACA,OAAO,CACT,CAGA,SAAgB,EAAU,EAAwB,CAChD,IAAM,EAAgB,CAAC,EACnB,EAAU,GACV,EAA0B,KAC1B,EAAM,GACV,IAAK,IAAM,KAAM,EAAM,CACrB,GAAI,EAAO,CACL,IAAO,EAAO,EAAQ,KACrB,GAAW,EAChB,QACF,CACA,GAAI,IAAO,KAAO,IAAO,IAAK,CAC5B,EAAQ,EACR,EAAM,GACN,QACF,CACA,GAAI,KAAK,KAAK,CAAE,EAAG,EACb,GAAO,EAAQ,OAAS,IAAG,EAAI,KAAK,CAAO,EAC/C,EAAU,GACV,EAAM,GACN,QACF,CACA,GAAW,CACb,CAEA,OADI,GAAO,EAAQ,OAAS,IAAG,EAAI,KAAK,CAAO,EACxC,CACT,CAGA,SAAgB,EAAc,EAAwF,CACpH,IAAM,EAA8B,CAAC,EACrC,IAAK,IAAM,KAAO,EAAK,MAAM,OAAO,EAAG,CACrC,IAAM,EAAO,EAAI,KAAK,EACtB,GAAI,EAAK,SAAW,GAAK,EAAK,WAAW,GAAG,EAAG,SAC/C,IAAM,EAAK,EAAK,QAAQ,GAAG,EACrB,EAAM,IAAO,GAAK,GAAK,EAAK,MAAM,EAAG,CAAE,CAAC,CAAC,KAAK,EACpD,GAAI,CAAC,2BAA2B,KAAK,CAAG,EAAG,MAAO,CAAE,GAAI,GAAO,MAAO,IAAI,EAAK,MAAM,EAAG,EAAE,EAAE,oBAAqB,EACjH,EAAI,GAAO,EAAK,MAAM,EAAK,CAAC,CAC9B,CACA,MAAO,CAAE,GAAI,GAAM,KAAI,CACzB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{D as e,F as t,U as n,c as r,l as i}from"./global-BkNl4e6E.js";import{r as a}from"./VerseConsoleApp-CTF3Shs0.js";var o=`verse-budget`,s=`verse-budget-preview`,c=`/api/verse/budget`,l=`/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true`,u={key:o,fetch:e=>r(c,e)},d={key:s,fetch:e=>r(l,e)};async function f(r){let l=e();if(!l)throw new a;let u=await i(c,r,l);return t(),n(o),n(s),u}export{u as n,f as r,d as t};
|
|
2
|
+
//# sourceMappingURL=budget-queries-CP7hgR-p.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget-queries-
|
|
1
|
+
{"version":3,"file":"budget-queries-CP7hgR-p.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/budget/budget-queries.ts"],"sourcesContent":["/**\n * routes/verse/budget/budget-queries.ts — the reads and the one write behind\n * the Budget panel (core/routing/budget-api.ts).\n *\n * GET /api/verse/budget → BudgetView (policy + live headroom)\n * GET /api/verse/budget/preview → SeatDecision for \"the next medium\n * autonomous code task\"\n * POST /api/verse/budget → BudgetView after ONE change\n *\n * Nothing here spends: every route is a file read / pure computation on the\n * server. Writes pull the held mutation token (like verse-queries.ts), touch\n * the hold on success, and invalidate both keys so the headroom bars and the\n * \"next task goes to…\" line move together.\n */\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport type { BudgetUpdateRequest, SeatDecision } from '../../../../core/routing/types.js';\nimport { getMutationToken, touchMutationHold } from '../../../data/auth-store.js';\nimport { apiGet, apiPost } from '../../../data/client.js';\nimport { invalidate } from '../../../data/cache.js';\nimport type { QueryDef } from '../../../data/queries.js';\nimport { VerseMutationLockedError } from '../verse-queries.js';\n\nexport const BUDGET_KEY = 'verse-budget';\nexport const BUDGET_PREVIEW_KEY = 'verse-budget-preview';\nexport const BUDGET_PATH = '/api/verse/budget';\nexport const BUDGET_PREVIEW_PATH = '/api/verse/budget/preview?task=code&difficulty=medium&autonomous=true';\n\nexport const budgetQuery: QueryDef<BudgetView> = {\n key: BUDGET_KEY,\n fetch: (signal) => apiGet<BudgetView>(BUDGET_PATH, signal),\n};\n\nexport const budgetPreviewQuery: QueryDef<SeatDecision> = {\n key: BUDGET_PREVIEW_KEY,\n fetch: (signal) => apiGet<SeatDecision>(BUDGET_PREVIEW_PATH, signal),\n};\n\n/**\n * The per-seat patch as it goes on the wire. `null` clears an optional field\n * (the server's parser accepts it; the frozen contract's Partial<> cannot say\n * \"remove\" because JSON has no `undefined`).\n */\nexport interface BudgetSeatPatchWire {\n enabled?: boolean;\n reservePercent?: number;\n maxSessionWindowPercent?: number | null;\n dailyUsdCap?: number | null;\n}\n\n/** `BudgetUpdateRequest`, widened only by the `null`-clears rule above. */\nexport type BudgetUpdateWire = Extract<BudgetUpdateRequest, { mode: unknown }>\n | { seatId: string; policy: BudgetSeatPatchWire };\n\nexport async function updateBudget(update: BudgetUpdateWire): Promise<BudgetView> {\n const token = getMutationToken();\n if (!token) throw new VerseMutationLockedError();\n const view = await apiPost<BudgetView>(BUDGET_PATH, update, token);\n touchMutationHold();\n invalidate(BUDGET_KEY);\n invalidate(BUDGET_PREVIEW_KEY);\n return view;\n}\n"],"mappings":"uHAsBA,IAAa,EAAa,eACb,EAAqB,uBACrB,EAAc,oBACd,EAAsB,wEAEtB,EAAoC,CAC/C,IAAK,EACL,MAAQ,GAAW,EAAmB,EAAa,CAAM,CAC3D,EAEa,EAA6C,CACxD,IAAK,EACL,MAAQ,GAAW,EAAqB,EAAqB,CAAM,CACrE,EAkBA,eAAsB,EAAa,EAA+C,CAChF,IAAM,EAAQ,EAAiB,EAC/B,GAAI,CAAC,EAAO,MAAM,IAAI,EACtB,IAAM,EAAO,MAAM,EAAoB,EAAa,EAAQ,CAAK,EAIjE,OAHA,EAAkB,EAClB,EAAW,CAAU,EACrB,EAAW,CAAkB,EACtB,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./workbench-types-DzN-5trg.js";import{g as t,v as n,y as r}from"./format-lW58rL2y.js";import{r as i}from"./verse-model-yHPwjf-7.js";import{n as a,t as o}from"./seat-subscription-CRigL-GE.js";import{v as s}from"./context-model-DeJ28uSZ.js";Object.freeze({"all-in":Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:0}),codex:Object.freeze({enabled:!1,reservePercent:0}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),balanced:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:40,maxSessionWindowPercent:70}),codex:Object.freeze({enabled:!1,reservePercent:40,maxSessionWindowPercent:70}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),reserve:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:85,maxSessionWindowPercent:50}),codex:Object.freeze({enabled:!1,reservePercent:85,maxSessionWindowPercent:50}),grok:Object.freeze({enabled:!0,reservePercent:85}),local:Object.freeze({enabled:!0,reservePercent:0})})});var c=Object.freeze({"all-in":`Autonomy may use all available usage on every enabled seat.`,balanced:`Autonomy stops at each seat’s reserve, so you keep headroom for your own sessions.`,reserve:`Autonomy runs on free local models, plus only a small slice of paid seats.`}),l={eligible:`Eligible`,held:`Held back`,off:`Off`,unknown:`No reading`},u=[{value:`reserve`,label:`Reserve`,description:c.reserve},{value:`balanced`,label:`Balanced`,description:c.balanced},{value:`all-in`,label:`All-in`,description:c[`all-in`]}];function d(e,t){if(!t)return!1;let n=e=>u.findIndex(t=>t.value===e);return n(e)>n(t)}function f(e){return Math.round(e)}function p(e,t,n){return t.enabled?n?.eligibleForAutonomy?`eligible`:!e&&(n===null||n.sessionUsedPercent===null&&n.weeklyUsedPercent===null)?`unknown`:`held`:`off`}function m(e,n,r,i){if(n||i===null)return[];let a=[],o=100-r.reservePercent,s=i.weeklyUsedPercent!==null||e===`claude`||e===`grok`;if(s){let n=i.weeklyUsedPercent;a.push({kind:`weekly`,label:e===`grok`?`Billing period`:`Weekly`,usedPercent:n,ceilingPercent:o,binding:i.bindingWindow===`weekly`,description:n===null?`Weekly window: no reading.`:`Weekly window ${t(n)} used; autonomy stops at ${f(o)}%, ${f(r.reservePercent)}% kept for you.`})}if(i.sessionUsedPercent!==null||e===`claude`){let e=i.sessionUsedPercent,n=r.maxSessionWindowPercent??100,c=s?n:Math.min(n,o);a.push({kind:`session`,label:`5-hour`,usedPercent:e,ceilingPercent:c,binding:i.bindingWindow===`session`,description:e===null?`5-hour window: no reading.`:`5-hour window ${t(e)} used; ${c>=100?`no autonomy ceiling`:`autonomy stops at ${f(c)}%`}.`})}return a}function ee(e,t=Date.now()){let r=new Map(e.headroom.map(e=>[e.seatId,e]));return e.seatInfo.map(i=>{let a=e.effective[i.seatId]??{seatId:i.seatId,enabled:!1,reservePercent:100},o=r.get(i.seatId)??null,s=(o?.reasons??[]).map(e=>n(e,t).trim()).filter(e=>e.length>0);return{seatId:i.seatId,label:i.label,engine:i.engine,free:i.free,policy:a,headroom:o,status:p(i.free,a,o),why:s[0]??(i.free?`Local model — free.`:`No reading yet.`),more:s.slice(1),bars:m(i.engine,i.free,a,o),hasSessionCeiling:!i.free&&(i.engine===`claude`||i.engine===`codex`)}})}function te(e){let t=e.filter(e=>e.status===`eligible`).length,n=e.length;if(n===0)return{eligible:t,total:n,sentence:`No seats are known yet.`};let r=e.filter(e=>e.status===`eligible`&&!e.free).length,i=t-r,a=[];return r>0&&a.push(`${r} paid`),i>0&&a.push(`${i} local`),{eligible:t,total:n,sentence:t===0?`No seat can take autonomous work right now.`:`${t} of ${n} seats can take autonomous work (${a.join(`, `)}).`}}function h(e,t){let n=Date.parse(e);if(!Number.isFinite(n))return`unknown`;let r=Math.max(0,Math.round((t-n)/6e4));return r<1?`just now`:r<120?`${r} min ago`:`${Math.round(r/60)} h ago`}function g(e,t=0,n=100){return Number.isFinite(e)?Math.max(t,Math.min(n,Math.round(e))):t}var _={available:`ready`,credits:`ready`,tight:`tight`,exhausted:`blocked`,"signed-out":`blocked`,"probe-unsupported":`blocked`,unknown:`unread`};function v(e,t,n){return e===1?t:n}function y(e){let{ready:t,tight:n,blocked:r,unread:i,total:a,local:o}=e;if(a===0)return`No seats are reported at all. This is an empty roster, not a set of seats at zero.`;let s=o===null?``:o.reachable&&o.residentCount>0?` ${o.residentCount} local ${v(o.residentCount,`model is`,`models are`)} resident and answer with no load delay.`:o.reachable&&o.agenticCount>0?` No local model is resident, but ${o.agenticCount} installed ${v(o.agenticCount,`one can`,`ones can`)} drive a session after a load.`:o.reachable?` No local model is resident.`:` The local runtime did not answer, so local capacity is unknown.`,c=i===0?``:` ${i} ${v(i,`seat has`,`seats have`)} no reading at all — unread, not exhausted.`;return t>0?`${t} of ${a} ${v(a,`seat is`,`seats are`)} usable right now.${c}${s}`:n>0?`No seat is clear: ${n} ${v(n,`is`,`are`)} running tight and ${r} ${v(r,`is`,`are`)} blocked.${c}${s}`:r>0?`No cloud seat reports headroom — ${r} blocked.${c}${s}`:`No seat reported a usable window.${c}${s}`}function b(e){let t=e.binding;return{id:e.id,label:e.label,kind:`account`,color:e.color,cls:_[e.verdict.state],headline:e.verdict.headline,usedPct:t&&t.measured&&!t.limitReached?t.usedPct:null,measured:t!==null&&t.measured&&!t.limitReached}}function x(e){return{id:`local`,label:`Local`,kind:`local`,color:e.color,cls:_[e.verdict.state],headline:e.verdict.headline,usedPct:e.usedPct,measured:e.usedPct!==null}}function S(e,t){let n=[],r=[],i=new Set;for(let a of e)for(let e of a.windows){if(e.resetsAt!==null){let r=Date.parse(e.resetsAt);if(!Number.isNaN(r)){let i=r-t;n.push({seatLabel:a.label,windowLabel:e.label,atMs:r,inMs:i,overdue:i<=0});continue}}if(e.resetText!==null){let t=`${a.label}|${e.label}|${e.resetText}`;if(i.has(t))continue;i.add(t),r.push({seatLabel:a.label,windowLabel:e.label,text:e.resetText})}}return{instants:n,prose:r}}function C(e){let t=e.filter(e=>!e.overdue);return t.length>0?t.reduce((e,t)=>t.inMs<e.inMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function w(e,t){let n=e.filter(e=>e.atMs>t);return n.length>0?n.reduce((e,t)=>t.atMs<e.atMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function T(e,t){if(e===null&&t===null)return null;let n=e?.residentBytes??t?.residentBytes??null,r=e?.memoryBudgetBytes??t?.memoryBudgetBytes??null;return{reachable:t?.reachable??e?.verdict.state!==`unknown`,residentCount:e?.residentCount??t?.rows.filter(e=>e.resident).length??0,installedCount:e?.installedCount??t?.rows.length??0,agenticCount:t?.agenticCount??0,unknownToolCount:t?.unknownToolCount??0,residentBytes:n,memoryBudgetBytes:r,headroomBytes:n!==null&&r!==null?Math.max(0,r-n):null,freeMemoryBytes:t?.freeMemoryBytes??null,usedPct:e?.usedPct??t?.memoryUsedPct??null}}function E(e){let t=e.nowMs??Date.now(),n=e.cards.map(b);e.localCard&&n.push(x(e.localCard));let r=e=>n.filter(t=>t.cls===e).length,i=r(`ready`),a=r(`tight`),o=r(`blocked`),s=r(`unread`),{instants:c,prose:l}=S(e.cards.map(e=>({label:e.label,windows:e.allWindows})),t),u=T(e.localCard,e.localView);return{seats:n,ready:i,tight:a,blocked:o,unread:s,total:n.length,resets:c,nextReset:C(c),proseResets:l,local:u,headline:y({ready:i,tight:a,blocked:o,unread:s,total:n.length,local:u}),noCapacity:n.length>0&&i===0&&a===0&&s<n.length}}function D(e){if(!Number.isFinite(e))return`—`;if(e<=0)return`overdue`;let t=Math.floor(e/1e3),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60);return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${t}s`}var O={connected:`connected`,expiring:`sign-in expiring`,"signed-out":`signed out`,exhausted:`out of usage`,"binary-skew":`older CLI pinned`,unknown:`not checked`},k={connected:`success`,expiring:`warning`,"signed-out":`danger`,exhausted:`danger`,"binary-skew":`warning`,unknown:`neutral`},A={"signed-out":0,exhausted:1,expiring:2,"binary-skew":3,unknown:4,connected:5};function j(e,t=Date.now()){if(typeof e!=`string`)return null;let n=Date.parse(e);return!Number.isFinite(n)||n<=t?null:`usable again in ${D(n-t)}`}function M(e){return e.connection===`connected`?!1:e.connection!==`unknown`||e.reasons.length>0&&!e.reasons[0].includes(`has not reached this seat`)}function N(e,t=[],i=Date.now()){let s=new Map(t.map(e=>[e.id,e]));return e.filter(M).map(e=>{let t=s.get(e.seatId),c=e.connection===`exhausted`&&t!==void 0?o(a(t,i),e.resetAt):e.resetAt,l=r(c,i);return{report:e,label:t?.label??e.seatId,word:O[e.connection],tone:k[e.connection],detail:e.reasons[0]?n(e.reasons[0],i):null,reset:l===null?null:`resets ${l}`,usableAgain:e.connection===`exhausted`?j(c,i):null}}).sort((e,t)=>A[e.report.connection]-A[t.report.connection])}function P(e){return e.map(e=>/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)||e.startsWith(`~/`)&&/^[A-Za-z0-9_@%+=:,./~-]+$/.test(e)?e:e.startsWith(`~/`)?`~/'${e.slice(2).replaceAll(`'`,`'\\''`)}'`:`'${e.replaceAll(`'`,`'\\''`)}'`).join(` `)}function F(e){if(e.length===0)return`All seats are connected.`;let t=e.filter(e=>e.tone===`danger`).length;return t>0?t===1?`${e.find(e=>e.tone===`danger`).label} can't run turns right now.`:`${t} seats can't run turns right now.`:e.length===1?`${e[0].label} needs attention.`:`${e.length} seats need attention.`}var I={ready:`success`,tight:`warning`,blocked:`danger`,unread:`neutral`};function L(e){return I[e]}function R(e,t){return{id:e.id,label:e.label,usedPercent:e.usedPercent,limitReached:e.limitReached,resetText:e.resetText,resetsAt:e.resetsAt,binding:t}}function z(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))}function B(e){return e.limitReached||e.usedPercent!==null&&e.usedPercent>=100}function V(e,t){return e?{connection:e.connection,word:O[e.connection],tone:k[e.connection],reasons:H(e.reasons,t),fixKind:e.fix.kind,fixCommand:e.fix.command&&e.fix.command.length>0?[...e.fix.command]:null}:null}function H(e,t){return e.map(e=>n(e,t).trim()).filter(e=>e.length>0)}function U(e){if(!e||e.free)return null;let{policy:t}=e,n=Math.max(0,Math.min(100,Math.round(t.reservePercent))),r=t.enabled?n===0?`No reserve — autonomy may use all of it`:`Reserved for you ${n}%`:`Autonomy off — all yours`;return{percent:t.enabled?n:null,label:r,autonomy:e.status,autonomyWord:l[e.status],why:e.why}}function W(t,n,r,s){let c=a(t,s),l=[];c.binding&&l.push(R(c.binding,!0));for(let e of c.others){if(l.length>=3)break;l.push(R(e,!1))}let u=n.get(t.id),d=V(u,s),f=d!==null&&(d.connection===`signed-out`||d.connection===`exhausted`);return{seatId:t.id,label:t.label,engine:t.engine,monogram:e[t.engine],kind:c.kind,plan:c.plan,cls:f?`blocked`:c.cls,word:f?i.blocked:c.word,summary:f?d.reasons[0]??d.word:c.summary,connection:d,windows:l,credits:c.credits,reserve:U(r.get(t.id)),notes:[...c.notes],localCount:1,checkedAt:z(u?.checkedAt)?u.checkedAt:z(c.observedAt)?c.observedAt:null,resetAt:o(c,u?.resetAt),signedOut:d?.connection===`signed-out`||t.capacity?.usability===`signed-out`}}function ne(t,n,r){let i=t.map(e=>a(e,r)),o=i.filter(e=>e.cls===`ready`).length,s=i.filter(e=>e.cls===`blocked`).length,c=o>0?`ready`:s===i.length?`blocked`:`unread`,l=t.map(e=>n.get(e.id)).find(e=>e!==void 0),u=t.length;return{seatId:`local`,label:`Local models`,engine:`local`,monogram:e.local,kind:`local`,plan:null,cls:c,word:i.find(e=>e.cls===c)?.word??`no reading`,summary:c===`ready`?`${u} ${u===1?`model`:`models`} on this machine · free`:c===`blocked`?i[0]?.summary??`local runtime unavailable`:`readiness not reported`,connection:V(l,r),windows:[],credits:null,reserve:null,notes:[],localCount:u,checkedAt:z(l?.checkedAt)?l.checkedAt:i.map(e=>e.observedAt).filter(z).sort((e,t)=>Date.parse(t)-Date.parse(e))[0]??null,resetAt:null,signedOut:!1}}function G(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var K=e=>typeof e==`number`&&Number.isFinite(e)?e:null;function q(e){if(!G(e)||typeof e.seatId!=`string`)return null;let t=e.bindingWindow;return{seatId:e.seatId,sessionUsedPercent:K(e.sessionUsedPercent),weeklyUsedPercent:K(e.weeklyUsedPercent),bindingWindow:t===`session`||t===`weekly`?t:null,autonomyHeadroomPercent:K(e.autonomyHeadroomPercent),resetAt:typeof e.resetAt==`string`?e.resetAt:null,eligibleForAutonomy:e.eligibleForAutonomy===!0,reasons:Array.isArray(e.reasons)?e.reasons.filter(e=>typeof e==`string`):[]}}function J(e,t){if(!G(t)||typeof t.enabled!=`boolean`)return null;let n=t.reservePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r={seatId:e,enabled:t.enabled,reservePercent:n},i=t.maxSessionWindowPercent;return typeof i==`number`&&Number.isFinite(i)&&(r.maxSessionWindowPercent=i),r}function Y(e){if(!G(e)||!Array.isArray(e.seatInfo))return new Map;let t=G(e.effective)?e.effective:{},n={},r=[];for(let i of e.seatInfo){if(!G(i)||typeof i.seatId!=`string`)continue;let e=i.seatId,a=i.engine;if(a===`claude`||a===`codex`||a===`grok`||a===`local`){if(Object.prototype.hasOwnProperty.call(t,e)){let r=J(e,t[e]);if(r===null)continue;n[e]=r}r.push({seatId:e,label:typeof i.label==`string`?i.label:e,engine:a,free:i.free===!0})}}let i=Array.isArray(e.headroom)?e.headroom.map(q).filter(e=>e!==null):[],a={...e,seatInfo:r,effective:n,headroom:i};try{return new Map(ee(a).map(e=>[e.seatId,e]))}catch{return new Map}}function X(e){let t=new Map;if(!Array.isArray(e))return t;for(let n of e){if(!G(n)||typeof n.seatId!=`string`)continue;let e=n.connection;if(typeof e!=`string`||!Object.prototype.hasOwnProperty.call(O,e))continue;let r=G(n.fix)?n.fix:{},i=r.kind,a=Array.isArray(r.command)&&r.command.every(e=>typeof e==`string`)?r.command:void 0;t.set(n.seatId,{...n,reasons:Array.isArray(n.reasons)?n.reasons.filter(e=>typeof e==`string`):[],fix:{kind:i===`reauth`||i===`repin`||i===`wait`?i:`none`,...a?{command:a}:{}}})}return t}function Z(e,t={}){let n=X(t.health),r=Y(t.budget),i=Array.isArray(e)?e.filter(e=>G(e)&&typeof e.id==`string`):[],a=t.local??`collapse`,o=t.now??Date.now(),s=i;if(t.seatIds){let e=new Map(i.map(e=>[e.id,e]));s=t.seatIds.map(t=>e.get(t)).filter(e=>e!==void 0)}let c=[],l=[],u=-1;for(let e of s){if(e.engine===`local`){if(a===`hide`)continue;if(a===`collapse`){u===-1&&(u=c.length),l.push(e);continue}}c.push(W(e,n,r,o))}if(l.length>0){let e=l.length===1?W(l[0],n,r,o):ne(l,n,o);c.splice(u,0,e)}return c}function re(e){let t=e.filter(e=>e.kind===`subscription`),n=e.filter(e=>e.kind===`local`),r=t.filter(e=>e.cls===`ready`||e.cls===`tight`).length,i=t.filter(e=>e.cls===`unread`).length,a=[];return t.length===0?a.push(`No accounts connected`):a.push(`${r} of ${t.length} ${t.length===1?`account`:`accounts`} usable`),i>0&&a.push(`${i} not read yet`),n.some(e=>e.cls===`ready`)?a.push(`local models ready`):n.length>0&&a.push(`local models not ready`),a.join(` · `)}function ie(e){let t=null;for(let n of e){if(n.kind!==`subscription`)continue;let e=n.windows.find(e=>e.binding)??null,r;if(n.cls===`blocked`||e?.limitReached)r=300;else if(e?.usedPercent!=null)r=(n.cls===`tight`?100:0)+e.usedPercent;else continue;(t===null||r>t.score)&&(t={row:n,score:r})}return t?.row??null}function ae(e,t,n={}){return Z(e,{...n,seatIds:[t],local:`each`})[0]??null}function oe(e,n,r){let i=`${e.label} ${n.label}`,a=n.resetText===null?``:`, ${n.resetText}`;if(n.limitReached)return`${i}: limit reached${a}`;if(n.usedPercent===null)return`${i}: no reading${a}`;let o=r!==null&&r>0?`; ${r}% kept for you`:``;return`${i}: ${t(n.usedPercent)} used${o}${a}`}var se={usable:`success`,low:`warning`,spent:`danger`,"signed-out":`danger`,unavailable:`danger`,"not-checked":`neutral`,checking:`neutral`},Q={usable:0,low:1,checking:2,"not-checked":3,spent:4,unavailable:5,"signed-out":6};function ce(e,t){let n=s(e.checkedAt,t);if(n===null||e.checkedAt===null)return{checked:null,checkedTitle:null};let r=new Date(e.checkedAt);return{checked:`checked ${n}`,checkedTitle:`Last checked ${r.toLocaleString([],{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}`}}function $(e,t){let n=t.now??Date.now(),{checked:i,checkedTitle:a}=ce(e,n),o=(e,t,n,r={})=>({kind:e,label:t,detail:n,tone:se[e],usableAgain:null,checked:i,checkedTitle:a,coversConnection:!1,...r});if(t.checking)return o(`checking`,`Checking…`,null);if(e.kind===`local`)return e.cls===`ready`?o(`usable`,`Ready`,e.localCount>1?`${e.localCount} models on this machine · free`:`runs on this machine · free`):e.cls===`blocked`?o(`unavailable`,`Not running`,e.summary):t.healthRead?o(`not-checked`,`Not checked`,`readiness not reported yet`):o(`checking`,`Checking…`,null);let s=e.connection?.connection??null;if(e.signedOut)return o(`signed-out`,`Signed out`,`reconnect to use it`,{coversConnection:!0});let c=e.windows.find(e=>e.binding)??null;if(s===`exhausted`||e.cls===`blocked`&&c!==null&&B(c)){let t=r(e.resetAt,n),i=e.resetAt!==null&&Date.parse(e.resetAt)>n,a=(e.windows.find(e=>B(e)&&!z(e.resetsAt)&&e.resetText!==null)??null)?.resetText??(c!==null&&!z(c.resetsAt)?c.resetText:null);return o(`spent`,`Spent`,t===null?a??`reset time not reported`:i?`resets ${t}`:`was due to reset ${t}`,{usableAgain:j(e.resetAt,n),coversConnection:s===`exhausted`})}if(e.cls===`blocked`)return o(`unavailable`,`Unavailable`,e.summary);if(e.cls===`unread`)return t.healthRead?s===null||s===`unknown`?o(`not-checked`,`Not checked`,`no reading yet`):o(`usable`,`Connected`,`no usage reading yet`):o(`checking`,`Checking…`,null);let l=s===null||s===`unknown`?`Usable`:`Connected`;if(e.cls===`tight`){let t=c!==null&&B(c)&&e.credits!==null;return l===`Usable`?o(`low`,`Usable`,t?`on credits`:`running low`):o(`low`,l,t?`usable on credits`:`running low`)}return l===`Usable`?o(`usable`,`Usable now`,null):o(`usable`,`Connected`,`usable now`)}function le(e,t){let n=e.map((e,n)=>({row:e,index:n,rank:Q[$(e,{...t,checking:!1}).kind],local:+(e.kind===`local`)}));return n.sort((e,t)=>e.rank-t.rank||e.local-t.local||e.index-t.index),n.map(e=>e.row)}export{l as _,L as a,d as b,ie as c,N as d,P as f,u as g,w as h,ae as i,oe as l,D as m,Z as n,le as o,E as p,re as r,Y as s,$ as t,F as u,te as v,h as x,g as y};
|
|
2
|
-
//# sourceMappingURL=capacity-strip-model-
|
|
1
|
+
import{t as e}from"./workbench-types-DzN-5trg.js";import{r as t}from"./verse-model-BQ0Y2CSr.js";import{g as n,v as r,y as i}from"./format-CaMmVQCn.js";import{n as a,t as o}from"./seat-subscription-CR_VylsK.js";import{v as s}from"./context-model-Ci3Ch9t5.js";Object.freeze({"all-in":Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:0}),codex:Object.freeze({enabled:!1,reservePercent:0}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),balanced:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:40,maxSessionWindowPercent:70}),codex:Object.freeze({enabled:!1,reservePercent:40,maxSessionWindowPercent:70}),grok:Object.freeze({enabled:!0,reservePercent:0}),local:Object.freeze({enabled:!0,reservePercent:0})}),reserve:Object.freeze({claude:Object.freeze({enabled:!0,reservePercent:85,maxSessionWindowPercent:50}),codex:Object.freeze({enabled:!1,reservePercent:85,maxSessionWindowPercent:50}),grok:Object.freeze({enabled:!0,reservePercent:85}),local:Object.freeze({enabled:!0,reservePercent:0})})});var c=Object.freeze({"all-in":`Autonomy may use all available usage on every enabled seat.`,balanced:`Autonomy stops at each seat’s reserve, so you keep headroom for your own sessions.`,reserve:`Autonomy runs on free local models, plus only a small slice of paid seats.`}),l={eligible:`Eligible`,held:`Held back`,off:`Off`,unknown:`No reading`},u=[{value:`reserve`,label:`Reserve`,description:c.reserve},{value:`balanced`,label:`Balanced`,description:c.balanced},{value:`all-in`,label:`All-in`,description:c[`all-in`]}];function d(e,t){if(!t)return!1;let n=e=>u.findIndex(t=>t.value===e);return n(e)>n(t)}function f(e){return Math.round(e)}function p(e,t,n){return t.enabled?n?.eligibleForAutonomy?`eligible`:!e&&(n===null||n.sessionUsedPercent===null&&n.weeklyUsedPercent===null)?`unknown`:`held`:`off`}function m(e,t,r,i){if(t||i===null)return[];let a=[],o=100-r.reservePercent,s=i.weeklyUsedPercent!==null||e===`claude`||e===`grok`;if(s){let t=i.weeklyUsedPercent;a.push({kind:`weekly`,label:e===`grok`?`Billing period`:`Weekly`,usedPercent:t,ceilingPercent:o,binding:i.bindingWindow===`weekly`,description:t===null?`Weekly window: no reading.`:`Weekly window ${n(t)} used; autonomy stops at ${f(o)}%, ${f(r.reservePercent)}% kept for you.`})}if(i.sessionUsedPercent!==null||e===`claude`){let e=i.sessionUsedPercent,t=r.maxSessionWindowPercent??100,c=s?t:Math.min(t,o);a.push({kind:`session`,label:`5-hour`,usedPercent:e,ceilingPercent:c,binding:i.bindingWindow===`session`,description:e===null?`5-hour window: no reading.`:`5-hour window ${n(e)} used; ${c>=100?`no autonomy ceiling`:`autonomy stops at ${f(c)}%`}.`})}return a}function ee(e,t=Date.now()){let n=new Map(e.headroom.map(e=>[e.seatId,e]));return e.seatInfo.map(i=>{let a=e.effective[i.seatId]??{seatId:i.seatId,enabled:!1,reservePercent:100},o=n.get(i.seatId)??null,s=(o?.reasons??[]).map(e=>r(e,t).trim()).filter(e=>e.length>0);return{seatId:i.seatId,label:i.label,engine:i.engine,free:i.free,policy:a,headroom:o,status:p(i.free,a,o),why:s[0]??(i.free?`Local model — free.`:`No reading yet.`),more:s.slice(1),bars:m(i.engine,i.free,a,o),hasSessionCeiling:!i.free&&(i.engine===`claude`||i.engine===`codex`)}})}function te(e){let t=e.filter(e=>e.status===`eligible`).length,n=e.length;if(n===0)return{eligible:t,total:n,sentence:`No seats are known yet.`};let r=e.filter(e=>e.status===`eligible`&&!e.free).length,i=t-r,a=[];return r>0&&a.push(`${r} paid`),i>0&&a.push(`${i} local`),{eligible:t,total:n,sentence:t===0?`No seat can take autonomous work right now.`:`${t} of ${n} seats can take autonomous work (${a.join(`, `)}).`}}function h(e,t){let n=Date.parse(e);if(!Number.isFinite(n))return`unknown`;let r=Math.max(0,Math.round((t-n)/6e4));return r<1?`just now`:r<120?`${r} min ago`:`${Math.round(r/60)} h ago`}function g(e,t=0,n=100){return Number.isFinite(e)?Math.max(t,Math.min(n,Math.round(e))):t}var _={available:`ready`,credits:`ready`,tight:`tight`,exhausted:`blocked`,"signed-out":`blocked`,"probe-unsupported":`blocked`,unknown:`unread`};function v(e,t,n){return e===1?t:n}function y(e){let{ready:t,tight:n,blocked:r,unread:i,total:a,local:o}=e;if(a===0)return`No seats are reported at all. This is an empty roster, not a set of seats at zero.`;let s=o===null?``:o.reachable&&o.residentCount>0?` ${o.residentCount} local ${v(o.residentCount,`model is`,`models are`)} resident and answer with no load delay.`:o.reachable&&o.agenticCount>0?` No local model is resident, but ${o.agenticCount} installed ${v(o.agenticCount,`one can`,`ones can`)} drive a session after a load.`:o.reachable?` No local model is resident.`:` The local runtime did not answer, so local capacity is unknown.`,c=i===0?``:` ${i} ${v(i,`seat has`,`seats have`)} no reading at all — unread, not exhausted.`;return t>0?`${t} of ${a} ${v(a,`seat is`,`seats are`)} usable right now.${c}${s}`:n>0?`No seat is clear: ${n} ${v(n,`is`,`are`)} running tight and ${r} ${v(r,`is`,`are`)} blocked.${c}${s}`:r>0?`No cloud seat reports headroom — ${r} blocked.${c}${s}`:`No seat reported a usable window.${c}${s}`}function b(e){let t=e.binding;return{id:e.id,label:e.label,kind:`account`,color:e.color,cls:_[e.verdict.state],headline:e.verdict.headline,usedPct:t&&t.measured&&!t.limitReached?t.usedPct:null,measured:t!==null&&t.measured&&!t.limitReached}}function x(e){return{id:`local`,label:`Local`,kind:`local`,color:e.color,cls:_[e.verdict.state],headline:e.verdict.headline,usedPct:e.usedPct,measured:e.usedPct!==null}}function S(e,t){let n=[],r=[],i=new Set;for(let a of e)for(let e of a.windows){if(e.resetsAt!==null){let r=Date.parse(e.resetsAt);if(!Number.isNaN(r)){let i=r-t;n.push({seatLabel:a.label,windowLabel:e.label,atMs:r,inMs:i,overdue:i<=0});continue}}if(e.resetText!==null){let t=`${a.label}|${e.label}|${e.resetText}`;if(i.has(t))continue;i.add(t),r.push({seatLabel:a.label,windowLabel:e.label,text:e.resetText})}}return{instants:n,prose:r}}function C(e){let t=e.filter(e=>!e.overdue);return t.length>0?t.reduce((e,t)=>t.inMs<e.inMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function w(e,t){let n=e.filter(e=>e.atMs>t);return n.length>0?n.reduce((e,t)=>t.atMs<e.atMs?t:e):e.length===0?null:e.reduce((e,t)=>t.atMs>e.atMs?t:e)}function T(e,t){if(e===null&&t===null)return null;let n=e?.residentBytes??t?.residentBytes??null,r=e?.memoryBudgetBytes??t?.memoryBudgetBytes??null;return{reachable:t?.reachable??e?.verdict.state!==`unknown`,residentCount:e?.residentCount??t?.rows.filter(e=>e.resident).length??0,installedCount:e?.installedCount??t?.rows.length??0,agenticCount:t?.agenticCount??0,unknownToolCount:t?.unknownToolCount??0,residentBytes:n,memoryBudgetBytes:r,headroomBytes:n!==null&&r!==null?Math.max(0,r-n):null,freeMemoryBytes:t?.freeMemoryBytes??null,usedPct:e?.usedPct??t?.memoryUsedPct??null}}function E(e){let t=e.nowMs??Date.now(),n=e.cards.map(b);e.localCard&&n.push(x(e.localCard));let r=e=>n.filter(t=>t.cls===e).length,i=r(`ready`),a=r(`tight`),o=r(`blocked`),s=r(`unread`),{instants:c,prose:l}=S(e.cards.map(e=>({label:e.label,windows:e.allWindows})),t),u=T(e.localCard,e.localView);return{seats:n,ready:i,tight:a,blocked:o,unread:s,total:n.length,resets:c,nextReset:C(c),proseResets:l,local:u,headline:y({ready:i,tight:a,blocked:o,unread:s,total:n.length,local:u}),noCapacity:n.length>0&&i===0&&a===0&&s<n.length}}function D(e){if(!Number.isFinite(e))return`—`;if(e<=0)return`overdue`;let t=Math.floor(e/1e3),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60);return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${t}s`}var O={connected:`connected`,expiring:`sign-in expiring`,"signed-out":`signed out`,exhausted:`out of usage`,"binary-skew":`older CLI pinned`,unknown:`not checked`},k={connected:`success`,expiring:`warning`,"signed-out":`danger`,exhausted:`danger`,"binary-skew":`warning`,unknown:`neutral`},A={"signed-out":0,exhausted:1,expiring:2,"binary-skew":3,unknown:4,connected:5};function j(e,t=Date.now()){if(typeof e!=`string`)return null;let n=Date.parse(e);return!Number.isFinite(n)||n<=t?null:`usable again in ${D(n-t)}`}function M(e){return e.connection===`connected`?!1:e.connection!==`unknown`||e.reasons.length>0&&!e.reasons[0].includes(`has not reached this seat`)}function N(e,t=[],n=Date.now()){let s=new Map(t.map(e=>[e.id,e]));return e.filter(M).map(e=>{let t=s.get(e.seatId),c=e.connection===`exhausted`&&t!==void 0?o(a(t,n),e.resetAt):e.resetAt,l=i(c,n);return{report:e,label:t?.label??e.seatId,word:O[e.connection],tone:k[e.connection],detail:e.reasons[0]?r(e.reasons[0],n):null,reset:l===null?null:`resets ${l}`,usableAgain:e.connection===`exhausted`?j(c,n):null}}).sort((e,t)=>A[e.report.connection]-A[t.report.connection])}function P(e){return e.map(e=>/^[A-Za-z0-9_@%+=:,./-]+$/.test(e)||e.startsWith(`~/`)&&/^[A-Za-z0-9_@%+=:,./~-]+$/.test(e)?e:e.startsWith(`~/`)?`~/'${e.slice(2).replaceAll(`'`,`'\\''`)}'`:`'${e.replaceAll(`'`,`'\\''`)}'`).join(` `)}function F(e){if(e.length===0)return`All seats are connected.`;let t=e.filter(e=>e.tone===`danger`).length;return t>0?t===1?`${e.find(e=>e.tone===`danger`).label} can't run turns right now.`:`${t} seats can't run turns right now.`:e.length===1?`${e[0].label} needs attention.`:`${e.length} seats need attention.`}var I={ready:`success`,tight:`warning`,blocked:`danger`,unread:`neutral`};function L(e){return I[e]}function R(e,t){return{id:e.id,label:e.label,usedPercent:e.usedPercent,limitReached:e.limitReached,resetText:e.resetText,resetsAt:e.resetsAt,binding:t}}function z(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))}function B(e){return e.limitReached||e.usedPercent!==null&&e.usedPercent>=100}function V(e,t){return e?{connection:e.connection,word:O[e.connection],tone:k[e.connection],reasons:H(e.reasons,t),fixKind:e.fix.kind,fixCommand:e.fix.command&&e.fix.command.length>0?[...e.fix.command]:null}:null}function H(e,t){return e.map(e=>r(e,t).trim()).filter(e=>e.length>0)}function U(e){if(!e||e.free)return null;let{policy:t}=e,n=Math.max(0,Math.min(100,Math.round(t.reservePercent))),r=t.enabled?n===0?`No reserve — autonomy may use all of it`:`Reserved for you ${n}%`:`Autonomy off — all yours`;return{percent:t.enabled?n:null,label:r,autonomy:e.status,autonomyWord:l[e.status],why:e.why}}function W(n,r,i,s){let c=a(n,s),l=[];c.binding&&l.push(R(c.binding,!0));for(let e of c.others){if(l.length>=3)break;l.push(R(e,!1))}let u=r.get(n.id),d=V(u,s),f=d!==null&&(d.connection===`signed-out`||d.connection===`exhausted`);return{seatId:n.id,label:n.label,engine:n.engine,monogram:e[n.engine],kind:c.kind,plan:c.plan,cls:f?`blocked`:c.cls,word:f?t.blocked:c.word,summary:f?d.reasons[0]??d.word:c.summary,connection:d,windows:l,credits:c.credits,reserve:U(i.get(n.id)),notes:[...c.notes],localCount:1,checkedAt:z(u?.checkedAt)?u.checkedAt:z(c.observedAt)?c.observedAt:null,resetAt:o(c,u?.resetAt),signedOut:d?.connection===`signed-out`||n.capacity?.usability===`signed-out`}}function ne(t,n,r){let i=t.map(e=>a(e,r)),o=i.filter(e=>e.cls===`ready`).length,s=i.filter(e=>e.cls===`blocked`).length,c=o>0?`ready`:s===i.length?`blocked`:`unread`,l=t.map(e=>n.get(e.id)).find(e=>e!==void 0),u=t.length;return{seatId:`local`,label:`Local models`,engine:`local`,monogram:e.local,kind:`local`,plan:null,cls:c,word:i.find(e=>e.cls===c)?.word??`no reading`,summary:c===`ready`?`${u} ${u===1?`model`:`models`} on this machine · free`:c===`blocked`?i[0]?.summary??`local runtime unavailable`:`readiness not reported`,connection:V(l,r),windows:[],credits:null,reserve:null,notes:[],localCount:u,checkedAt:z(l?.checkedAt)?l.checkedAt:i.map(e=>e.observedAt).filter(z).sort((e,t)=>Date.parse(t)-Date.parse(e))[0]??null,resetAt:null,signedOut:!1}}function G(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var K=e=>typeof e==`number`&&Number.isFinite(e)?e:null;function q(e){if(!G(e)||typeof e.seatId!=`string`)return null;let t=e.bindingWindow;return{seatId:e.seatId,sessionUsedPercent:K(e.sessionUsedPercent),weeklyUsedPercent:K(e.weeklyUsedPercent),bindingWindow:t===`session`||t===`weekly`?t:null,autonomyHeadroomPercent:K(e.autonomyHeadroomPercent),resetAt:typeof e.resetAt==`string`?e.resetAt:null,eligibleForAutonomy:e.eligibleForAutonomy===!0,reasons:Array.isArray(e.reasons)?e.reasons.filter(e=>typeof e==`string`):[]}}function J(e,t){if(!G(t)||typeof t.enabled!=`boolean`)return null;let n=t.reservePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r={seatId:e,enabled:t.enabled,reservePercent:n},i=t.maxSessionWindowPercent;return typeof i==`number`&&Number.isFinite(i)&&(r.maxSessionWindowPercent=i),r}function Y(e){if(!G(e)||!Array.isArray(e.seatInfo))return new Map;let t=G(e.effective)?e.effective:{},n={},r=[];for(let i of e.seatInfo){if(!G(i)||typeof i.seatId!=`string`)continue;let e=i.seatId,a=i.engine;if(a===`claude`||a===`codex`||a===`grok`||a===`local`){if(Object.prototype.hasOwnProperty.call(t,e)){let r=J(e,t[e]);if(r===null)continue;n[e]=r}r.push({seatId:e,label:typeof i.label==`string`?i.label:e,engine:a,free:i.free===!0})}}let i=Array.isArray(e.headroom)?e.headroom.map(q).filter(e=>e!==null):[],a={...e,seatInfo:r,effective:n,headroom:i};try{return new Map(ee(a).map(e=>[e.seatId,e]))}catch{return new Map}}function X(e){let t=new Map;if(!Array.isArray(e))return t;for(let n of e){if(!G(n)||typeof n.seatId!=`string`)continue;let e=n.connection;if(typeof e!=`string`||!Object.prototype.hasOwnProperty.call(O,e))continue;let r=G(n.fix)?n.fix:{},i=r.kind,a=Array.isArray(r.command)&&r.command.every(e=>typeof e==`string`)?r.command:void 0;t.set(n.seatId,{...n,reasons:Array.isArray(n.reasons)?n.reasons.filter(e=>typeof e==`string`):[],fix:{kind:i===`reauth`||i===`repin`||i===`wait`?i:`none`,...a?{command:a}:{}}})}return t}function Z(e,t={}){let n=X(t.health),r=Y(t.budget),i=Array.isArray(e)?e.filter(e=>G(e)&&typeof e.id==`string`):[],a=t.local??`collapse`,o=t.now??Date.now(),s=i;if(t.seatIds){let e=new Map(i.map(e=>[e.id,e]));s=t.seatIds.map(t=>e.get(t)).filter(e=>e!==void 0)}let c=[],l=[],u=-1;for(let e of s){if(e.engine===`local`){if(a===`hide`)continue;if(a===`collapse`){u===-1&&(u=c.length),l.push(e);continue}}c.push(W(e,n,r,o))}if(l.length>0){let e=l.length===1?W(l[0],n,r,o):ne(l,n,o);c.splice(u,0,e)}return c}function re(e){let t=e.filter(e=>e.kind===`subscription`),n=e.filter(e=>e.kind===`local`),r=t.filter(e=>e.cls===`ready`||e.cls===`tight`).length,i=t.filter(e=>e.cls===`unread`).length,a=[];return t.length===0?a.push(`No accounts connected`):a.push(`${r} of ${t.length} ${t.length===1?`account`:`accounts`} usable`),i>0&&a.push(`${i} not read yet`),n.some(e=>e.cls===`ready`)?a.push(`local models ready`):n.length>0&&a.push(`local models not ready`),a.join(` · `)}function ie(e){let t=null;for(let n of e){if(n.kind!==`subscription`)continue;let e=n.windows.find(e=>e.binding)??null,r;if(n.cls===`blocked`||e?.limitReached)r=300;else if(e?.usedPercent!=null)r=(n.cls===`tight`?100:0)+e.usedPercent;else continue;(t===null||r>t.score)&&(t={row:n,score:r})}return t?.row??null}function ae(e,t,n={}){return Z(e,{...n,seatIds:[t],local:`each`})[0]??null}function oe(e,t,r){let i=`${e.label} ${t.label}`,a=t.resetText===null?``:`, ${t.resetText}`;if(t.limitReached)return`${i}: limit reached${a}`;if(t.usedPercent===null)return`${i}: no reading${a}`;let o=r!==null&&r>0?`; ${r}% kept for you`:``;return`${i}: ${n(t.usedPercent)} used${o}${a}`}var se={usable:`success`,low:`warning`,spent:`danger`,"signed-out":`danger`,unavailable:`danger`,"not-checked":`neutral`,checking:`neutral`},Q={usable:0,low:1,checking:2,"not-checked":3,spent:4,unavailable:5,"signed-out":6};function ce(e,t){let n=s(e.checkedAt,t);if(n===null||e.checkedAt===null)return{checked:null,checkedTitle:null};let r=new Date(e.checkedAt);return{checked:`checked ${n}`,checkedTitle:`Last checked ${r.toLocaleString([],{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}`}}function $(e,t){let n=t.now??Date.now(),{checked:r,checkedTitle:a}=ce(e,n),o=(e,t,n,i={})=>({kind:e,label:t,detail:n,tone:se[e],usableAgain:null,checked:r,checkedTitle:a,coversConnection:!1,...i});if(t.checking)return o(`checking`,`Checking…`,null);if(e.kind===`local`)return e.cls===`ready`?o(`usable`,`Ready`,e.localCount>1?`${e.localCount} models on this machine · free`:`runs on this machine · free`):e.cls===`blocked`?o(`unavailable`,`Not running`,e.summary):t.healthRead?o(`not-checked`,`Not checked`,`readiness not reported yet`):o(`checking`,`Checking…`,null);let s=e.connection?.connection??null;if(e.signedOut)return o(`signed-out`,`Signed out`,`reconnect to use it`,{coversConnection:!0});let c=e.windows.find(e=>e.binding)??null;if(s===`exhausted`||e.cls===`blocked`&&c!==null&&B(c)){let t=i(e.resetAt,n),r=e.resetAt!==null&&Date.parse(e.resetAt)>n,a=(e.windows.find(e=>B(e)&&!z(e.resetsAt)&&e.resetText!==null)??null)?.resetText??(c!==null&&!z(c.resetsAt)?c.resetText:null);return o(`spent`,`Spent`,t===null?a??`reset time not reported`:r?`resets ${t}`:`was due to reset ${t}`,{usableAgain:j(e.resetAt,n),coversConnection:s===`exhausted`})}if(e.cls===`blocked`)return o(`unavailable`,`Unavailable`,e.summary);if(e.cls===`unread`)return t.healthRead?s===null||s===`unknown`?o(`not-checked`,`Not checked`,`no reading yet`):o(`usable`,`Connected`,`no usage reading yet`):o(`checking`,`Checking…`,null);let l=s===null||s===`unknown`?`Usable`:`Connected`;if(e.cls===`tight`){let t=c!==null&&B(c)&&e.credits!==null;return l===`Usable`?o(`low`,`Usable`,t?`on credits`:`running low`):o(`low`,l,t?`usable on credits`:`running low`)}return l===`Usable`?o(`usable`,`Usable now`,null):o(`usable`,`Connected`,`usable now`)}function le(e,t){let n=e.map((e,n)=>({row:e,index:n,rank:Q[$(e,{...t,checking:!1}).kind],local:+(e.kind===`local`)}));return n.sort((e,t)=>e.rank-t.rank||e.local-t.local||e.index-t.index),n.map(e=>e.row)}export{l as _,L as a,d as b,ie as c,N as d,P as f,u as g,w as h,ae as i,oe as l,D as m,Z as n,le as o,E as p,re as r,Y as s,$ as t,F as u,te as v,h as x,g as y};
|
|
2
|
+
//# sourceMappingURL=capacity-strip-model-fHfu5cph.js.map
|