@ashlr/hub 3.22.0 → 3.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +5 -5
- package/dist/authority-surface.json +16 -11
- package/dist/build-identity.json +2 -2
- package/dist/cli/verify-safety-sources.d.ts +4 -0
- package/dist/cli/verify-safety-sources.js +41 -0
- package/dist/cli/verify-safety-sources.js.map +1 -0
- package/dist/cli/verify-safety.js +16 -1
- package/dist/cli/verify-safety.js.map +1 -1
- package/dist/core/decide/needs-you.d.ts +3 -1
- package/dist/core/decide/needs-you.js +52 -28
- package/dist/core/decide/needs-you.js.map +1 -1
- package/dist/core/fleet/fleet-control-model.d.ts +2 -1
- package/dist/core/fleet/fleet-control-model.js +5 -0
- package/dist/core/fleet/fleet-control-model.js.map +1 -1
- package/dist/core/fleet/fleet-control-types.d.ts +11 -1
- package/dist/core/fleet/fleet-control.d.ts +4 -0
- package/dist/core/fleet/fleet-control.js +23 -1
- package/dist/core/fleet/fleet-control.js.map +1 -1
- package/dist/core/fleet/quota.js +1 -1
- package/dist/core/fleet/quota.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +4 -2
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +3 -1
- package/dist/core/web/public/next/assets/ActionMenu-Z14OhnFI.js +2 -0
- package/dist/core/web/public/next/assets/ActionMenu-Z14OhnFI.js.map +1 -0
- package/dist/core/web/public/next/assets/Advanced-fUyq-fpH.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-fUyq-fpH.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentDetailScreen-C8h--Nah.js +2 -0
- package/dist/core/web/public/next/assets/AgentDetailScreen-C8h--Nah.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentToolsSheet-BP3h-UbZ.js +2 -0
- package/dist/core/web/public/next/assets/AgentToolsSheet-BP3h-UbZ.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentToolsStrip--hf18knJ.js +2 -0
- package/dist/core/web/public/next/assets/AgentToolsStrip--hf18knJ.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentsScreen-BR-j0Fzd.js +2 -0
- package/dist/core/web/public/next/assets/AgentsScreen-BR-j0Fzd.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentsSection-OKKOuYed.js +3 -0
- package/dist/core/web/public/next/assets/AgentsSection-OKKOuYed.js.map +1 -0
- package/dist/core/web/public/next/assets/App-ttVrZYp5.js +8 -0
- package/dist/core/web/public/next/assets/App-ttVrZYp5.js.map +1 -0
- package/dist/core/web/public/next/assets/AppsSection-sqsXqENO.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-sqsXqENO.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-LVgaB49b.js +2 -0
- package/dist/core/web/public/next/assets/AreaTrend-LVgaB49b.js.map +1 -0
- package/dist/core/web/public/next/assets/AutomationsSection-BITmxjuB.js +2 -0
- package/dist/core/web/public/next/assets/AutomationsSection-BITmxjuB.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-nO9lIcCv.js +3 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-nO9lIcCv.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-DWYUPDP6.js +2 -0
- package/dist/core/web/public/next/assets/AutonomySection-DWYUPDP6.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-C4Yp1JTY.js +2 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-C4Yp1JTY.js.map +1 -0
- package/dist/core/web/public/next/assets/BranchBar-CkiZSNqB.js +2 -0
- package/dist/core/web/public/next/assets/BranchBar-CkiZSNqB.js.map +1 -0
- package/dist/core/web/public/next/assets/BrowserPanel-CECVGJBS.js +7 -0
- package/dist/core/web/public/next/assets/BrowserPanel-CECVGJBS.js.map +1 -0
- package/dist/core/web/public/next/assets/BudgetControl-De1TPzvX.js +2 -0
- package/dist/core/web/public/next/assets/BudgetControl-De1TPzvX.js.map +1 -0
- package/dist/core/web/public/next/assets/Button-CstSJwha.js +2 -0
- package/dist/core/web/public/next/assets/Button-CstSJwha.js.map +1 -0
- package/dist/core/web/public/next/assets/CapacityStrip-nIJcB_lA.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-nIJcB_lA.js.map +1 -0
- package/dist/core/web/public/next/assets/ChangesPaneHost-Bnj_NcRa.js +16 -0
- package/dist/core/web/public/next/assets/ChangesPaneHost-Bnj_NcRa.js.map +1 -0
- package/dist/core/web/public/next/assets/ChartFrame-Dljee9y6.js +2 -0
- package/dist/core/web/public/next/assets/ChartFrame-Dljee9y6.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatPanes-x_ySUIyR.js +2 -0
- package/dist/core/web/public/next/assets/ChatPanes-x_ySUIyR.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-CXJa8QOi.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-CXJa8QOi.js.map +1 -0
- package/dist/core/web/public/next/assets/ChecksPanel-D9r8koxq.js +5 -0
- package/dist/core/web/public/next/assets/ChecksPanel-D9r8koxq.js.map +1 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-D5ajpoMe.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-D5ajpoMe.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandPalette-ONyqYZzt.js +3 -0
- package/dist/core/web/public/next/assets/CommandPalette-ONyqYZzt.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandSection-DxNIibnI.js +3 -0
- package/dist/core/web/public/next/assets/CommandSection-DxNIibnI.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandWorkflowForm-Bz3PuZXH.js +9 -0
- package/dist/core/web/public/next/assets/CommandWorkflowForm-Bz3PuZXH.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-COVyeer0.js +3 -0
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-COVyeer0.js.map +1 -0
- package/dist/core/web/public/next/assets/CompareDialog-PVqv0Tx9.js +4 -0
- package/dist/core/web/public/next/assets/CompareDialog-PVqv0Tx9.js.map +1 -0
- package/dist/core/web/public/next/assets/ComputerControl-DkSIUrYm.js +2 -0
- package/dist/core/web/public/next/assets/ComputerControl-DkSIUrYm.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-CdCzzk0I.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-CdCzzk0I.js.map +1 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-BTzOgqho.js +2 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-BTzOgqho.js.map +1 -0
- package/dist/core/web/public/next/assets/DevinStopDialog-CGsDqfan.js +2 -0
- package/dist/core/web/public/next/assets/DevinStopDialog-CGsDqfan.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-DDHg9cuT.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-DDHg9cuT.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffPane-BR3HU7pC.js +2 -0
- package/dist/core/web/public/next/assets/DiffPane-BR3HU7pC.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-hJK75qko.js +2 -0
- package/dist/core/web/public/next/assets/DiffViewer-hJK75qko.js.map +1 -0
- package/dist/core/web/public/next/assets/DockHost-DhOosHbo.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-DhOosHbo.js.map +1 -0
- package/dist/core/web/public/next/assets/EmptyState-CGVr0VO2.js +2 -0
- package/dist/core/web/public/next/assets/EmptyState-CGVr0VO2.js.map +1 -0
- package/dist/core/web/public/next/assets/Epistemic-tp0ZNAKZ.js +2 -0
- package/dist/core/web/public/next/assets/Epistemic-tp0ZNAKZ.js.map +1 -0
- package/dist/core/web/public/next/assets/EvidenceTimeline-YmKIoxNx.js +2 -0
- package/dist/core/web/public/next/assets/EvidenceTimeline-YmKIoxNx.js.map +1 -0
- package/dist/core/web/public/next/assets/FilesPane-CoNjfkPP.js +2 -0
- package/dist/core/web/public/next/assets/FilesPane-CoNjfkPP.js.map +1 -0
- package/dist/core/web/public/next/assets/FleetScreen-CstwycnB.js +2 -0
- package/dist/core/web/public/next/assets/FleetScreen-CstwycnB.js.map +1 -0
- package/dist/core/web/public/next/assets/FleetSection-D0xk0s5J.js +5 -0
- package/dist/core/web/public/next/assets/FleetSection-D0xk0s5J.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-UPrk7fcy.js +2 -0
- package/dist/core/web/public/next/assets/Funnel-UPrk7fcy.js.map +1 -0
- package/dist/core/web/public/next/assets/GearTray-BSjga1J_.js +2 -0
- package/dist/core/web/public/next/assets/GearTray-BSjga1J_.js.map +1 -0
- package/dist/core/web/public/next/assets/GitDialogs-ekwzxl76.js +2 -0
- package/dist/core/web/public/next/assets/GitDialogs-ekwzxl76.js.map +1 -0
- package/dist/core/web/public/next/assets/GrowthSection-Dh-gnkgc.js +3 -0
- package/dist/core/web/public/next/assets/GrowthSection-Dh-gnkgc.js.map +1 -0
- package/dist/core/web/public/next/assets/HandoffDialog-BDiyA3u-.js +2 -0
- package/dist/core/web/public/next/assets/HandoffDialog-BDiyA3u-.js.map +1 -0
- package/dist/core/web/public/next/assets/HomeBody-Ce3HBIEb.js +3 -0
- package/dist/core/web/public/next/assets/HomeBody-Ce3HBIEb.js.map +1 -0
- package/dist/core/web/public/next/assets/HomeSeats-BFLCWCFp.js +2 -0
- package/dist/core/web/public/next/assets/HomeSeats-BFLCWCFp.js.map +1 -0
- package/dist/core/web/public/next/assets/Input-Cpn9uYj2.js +2 -0
- package/dist/core/web/public/next/assets/Input-Cpn9uYj2.js.map +1 -0
- package/dist/core/web/public/next/assets/LaunchDialog-CrPEf652.js +9 -0
- package/dist/core/web/public/next/assets/LaunchDialog-CrPEf652.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderCard-Dhq-w_Mf.js +2 -0
- package/dist/core/web/public/next/assets/LeaderCard-Dhq-w_Mf.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderConversation-CiWqhsoa.js +3 -0
- package/dist/core/web/public/next/assets/LeaderConversation-CiWqhsoa.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderScreen-Z5KPjxBV.js +2 -0
- package/dist/core/web/public/next/assets/LeaderScreen-Z5KPjxBV.js.map +1 -0
- package/dist/core/web/public/next/assets/LessonsPanel-B6XVKAPE.js +2 -0
- package/dist/core/web/public/next/assets/LessonsPanel-B6XVKAPE.js.map +1 -0
- package/dist/core/web/public/next/assets/LiveTimer-B8t2iX5h.js +2 -0
- package/dist/core/web/public/next/assets/LiveTimer-B8t2iX5h.js.map +1 -0
- package/dist/core/web/public/next/assets/LocalSeatBadge-HMxIrMiL.js +2 -0
- package/dist/core/web/public/next/assets/LocalSeatBadge-HMxIrMiL.js.map +1 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-BlFI5oao.js +2 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-BlFI5oao.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-snZNKexW.js +2 -0
- package/dist/core/web/public/next/assets/McpSection-snZNKexW.js.map +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-CS0mAtSs.js +3 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-CS0mAtSs.js.map +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-D5R-zr-W.js +72 -0
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-D5R-zr-W.js.map +1 -0
- package/dist/core/web/public/next/assets/Meter-VXI75VNe.js +2 -0
- package/dist/core/web/public/next/assets/Meter-VXI75VNe.js.map +1 -0
- package/dist/core/web/public/next/assets/MicButton-DORAXsUU.js +2 -0
- package/dist/core/web/public/next/assets/MicButton-DORAXsUU.js.map +1 -0
- package/dist/core/web/public/next/assets/MindSection-DZLHz29Q.js +3 -0
- package/dist/core/web/public/next/assets/MindSection-DZLHz29Q.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileComposer-B8nWsIJO.js +2 -0
- package/dist/core/web/public/next/assets/MobileComposer-B8nWsIJO.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileGuardSheet-BRwOfD9o.js +2 -0
- package/dist/core/web/public/next/assets/MobileGuardSheet-BRwOfD9o.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileRuntime-kMob_MjB.js +3 -0
- package/dist/core/web/public/next/assets/MobileRuntime-kMob_MjB.js.map +1 -0
- package/dist/core/web/public/next/assets/MoreScreen-92dC6Bj7.js +2 -0
- package/dist/core/web/public/next/assets/MoreScreen-92dC6Bj7.js.map +1 -0
- package/dist/core/web/public/next/assets/MultiModelBar-BhAUUQOq.js +7 -0
- package/dist/core/web/public/next/assets/MultiModelBar-BhAUUQOq.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DlY2VLVh.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DlY2VLVh.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BH0ffbht.js +3 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BH0ffbht.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CI_Dy-hi.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CI_Dy-hi.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouScreen-CvDiEphJ.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouScreen-CvDiEphJ.js.map +1 -0
- package/dist/core/web/public/next/assets/NewAgentScreen-BpTRKp9z.js +2 -0
- package/dist/core/web/public/next/assets/NewAgentScreen-BpTRKp9z.js.map +1 -0
- package/dist/core/web/public/next/assets/NewChatDialog-O1LwwBc4.js +4 -0
- package/dist/core/web/public/next/assets/NewChatDialog-O1LwwBc4.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-uMNBVHvK.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-uMNBVHvK.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingGate-sdzxSPZF.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingGate-sdzxSPZF.js.map +1 -0
- package/dist/core/web/public/next/assets/PlaybooksSection-CnWfwZv8.js +9 -0
- package/dist/core/web/public/next/assets/PlaybooksSection-CnWfwZv8.js.map +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-D1WaefIG.js +2 -0
- package/dist/core/web/public/next/assets/PreviewPane-D1WaefIG.js.map +1 -0
- package/dist/core/web/public/next/assets/ProviderLogo-g2YWCmNY.js +2 -0
- package/dist/core/web/public/next/assets/ProviderLogo-g2YWCmNY.js.map +1 -0
- package/dist/core/web/public/next/assets/RailStatus-OrvAuyzs.js +2 -0
- package/dist/core/web/public/next/assets/RailStatus-OrvAuyzs.js.map +1 -0
- package/dist/core/web/public/next/assets/ReasoningPane-BARDPl4-.js +2 -0
- package/dist/core/web/public/next/assets/ReasoningPane-BARDPl4-.js.map +1 -0
- package/dist/core/web/public/next/assets/ReasoningSheet-rPTXyt-b.js +2 -0
- package/dist/core/web/public/next/assets/ReasoningSheet-rPTXyt-b.js.map +1 -0
- package/dist/core/web/public/next/assets/RefreshIndicator-D96C9qiH.js +2 -0
- package/dist/core/web/public/next/assets/RefreshIndicator-D96C9qiH.js.map +1 -0
- package/dist/core/web/public/next/assets/RemoteMobileApp-DfDjiBTR.js +2 -0
- package/dist/core/web/public/next/assets/RemoteMobileApp-DfDjiBTR.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CcfULh_p.js +7 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CcfULh_p.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-DuEa7WOo.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-e9ifgnWf.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-e9ifgnWf.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DOv_mxpe.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DOv_mxpe.js.map +1 -0
- package/dist/core/web/public/next/assets/ReviewMenu-Ba3saQlX.js +2 -0
- package/dist/core/web/public/next/assets/ReviewMenu-Ba3saQlX.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BaJ1ZePy.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BaJ1ZePy.js.map +1 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-DRSX84Jy.js +2 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-DRSX84Jy.js.map +1 -0
- package/dist/core/web/public/next/assets/RunInDevinAction-BMji-YN2.js +2 -0
- package/dist/core/web/public/next/assets/RunInDevinAction-BMji-YN2.js.map +1 -0
- package/dist/core/web/public/next/assets/SchedulingEvidence-xxjV6HF_.js +2 -0
- package/dist/core/web/public/next/assets/SchedulingEvidence-xxjV6HF_.js.map +1 -0
- package/dist/core/web/public/next/assets/ScreenHost-Dv6z76Ta.js +3 -0
- package/dist/core/web/public/next/assets/ScreenHost-Dv6z76Ta.js.map +1 -0
- package/dist/core/web/public/next/assets/SeatSelector-YRNdNpP8.js +3 -0
- package/dist/core/web/public/next/assets/SeatSelector-YRNdNpP8.js.map +1 -0
- package/dist/core/web/public/next/assets/Segmented-BA8RmKYq.js +2 -0
- package/dist/core/web/public/next/assets/Segmented-BA8RmKYq.js.map +1 -0
- package/dist/core/web/public/next/assets/Select-B8GqZOX9.js +2 -0
- package/dist/core/web/public/next/assets/Select-B8GqZOX9.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionGate-CnASHl7g.js +2 -0
- package/dist/core/web/public/next/assets/SessionGate-CnASHl7g.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-DIKfih6i.js +2 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-DIKfih6i.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionSearch-K6lvMlji.js +2 -0
- package/dist/core/web/public/next/assets/SessionSearch-K6lvMlji.js.map +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-C-c3f_6J.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-C-c3f_6J.js.map +1 -0
- package/dist/core/web/public/next/assets/SetupChecklist-DAbAdrX4.js +2 -0
- package/dist/core/web/public/next/assets/SetupChecklist-DAbAdrX4.js.map +1 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-C41uRSw4.js +3 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-C41uRSw4.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-Bk64-Hlt.js +2 -0
- package/dist/core/web/public/next/assets/Sheet-Bk64-Hlt.js.map +1 -0
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CcP96zqy.js +2 -0
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CcP96zqy.js.map +1 -0
- package/dist/core/web/public/next/assets/Sidebar-sSNKd57n.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-sSNKd57n.js.map +1 -0
- package/dist/core/web/public/next/assets/SkipToContent-BynsXs9i.js +2 -0
- package/dist/core/web/public/next/assets/SkipToContent-BynsXs9i.js.map +1 -0
- package/dist/core/web/public/next/assets/Slider-DS5HrVzl.js +2 -0
- package/dist/core/web/public/next/assets/Slider-DS5HrVzl.js.map +1 -0
- package/dist/core/web/public/next/assets/SourcesPane-QffcyDfA.js +2 -0
- package/dist/core/web/public/next/assets/SourcesPane-QffcyDfA.js.map +1 -0
- package/dist/core/web/public/next/assets/SourcesPanel-DlttePk7.js +2 -0
- package/dist/core/web/public/next/assets/SourcesPanel-DlttePk7.js.map +1 -0
- package/dist/core/web/public/next/assets/StatTile-mYm1GPj7.js +2 -0
- package/dist/core/web/public/next/assets/StatTile-mYm1GPj7.js.map +1 -0
- package/dist/core/web/public/next/assets/StatusBadge-Yz7S3kZ2.js +2 -0
- package/dist/core/web/public/next/assets/StatusBadge-Yz7S3kZ2.js.map +1 -0
- package/dist/core/web/public/next/assets/StepBand-Bdkv7iGd.js +2 -0
- package/dist/core/web/public/next/assets/StepBand-Bdkv7iGd.js.map +1 -0
- package/dist/core/web/public/next/assets/Surface-DVOAKl2g.js +2 -0
- package/dist/core/web/public/next/assets/Surface-DVOAKl2g.js.map +1 -0
- package/dist/core/web/public/next/assets/Swimlane-CeMBD_FC.js +2 -0
- package/dist/core/web/public/next/assets/Swimlane-CeMBD_FC.js.map +1 -0
- package/dist/core/web/public/next/assets/Switch-Cqc_bSoh.js +2 -0
- package/dist/core/web/public/next/assets/Switch-Cqc_bSoh.js.map +1 -0
- package/dist/core/web/public/next/assets/Tag-BvOxSxYi.js +2 -0
- package/dist/core/web/public/next/assets/Tag-BvOxSxYi.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-D3f02aI4.js +3 -0
- package/dist/core/web/public/next/assets/TerminalPane-D3f02aI4.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-XZ5n3Pns.js +26 -0
- package/dist/core/web/public/next/assets/TerminalPane-XZ5n3Pns.js.map +1 -0
- package/dist/core/web/public/next/assets/ThinkingBlock-DZNlOGaV.js +2 -0
- package/dist/core/web/public/next/assets/ThinkingBlock-DZNlOGaV.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-CzBI6Upl.js +2 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-CzBI6Upl.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseView-Dsi3Kk8o.js +9 -0
- package/dist/core/web/public/next/assets/UniverseView-Dsi3Kk8o.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-rVvLat9z.js +3 -0
- package/dist/core/web/public/next/assets/UsageSection-rVvLat9z.js.map +1 -0
- package/dist/core/web/public/next/assets/UsePlaybookAction-B4XAzSeI.js +2 -0
- package/dist/core/web/public/next/assets/UsePlaybookAction-B4XAzSeI.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-BmckthwC.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DjPpZLo1.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DjPpZLo1.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseMobileApp-ePNuVERe.js +3 -0
- package/dist/core/web/public/next/assets/VerseMobileApp-ePNuVERe.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseShared-Bf-XTHCh.js +2 -0
- package/dist/core/web/public/next/assets/VerseShared-Bf-XTHCh.js.map +1 -0
- package/dist/core/web/public/next/assets/VoiceHud-BG5FV2h0.js +2 -0
- package/dist/core/web/public/next/assets/VoiceHud-BG5FV2h0.js.map +1 -0
- package/dist/core/web/public/next/assets/VoiceInput-k3vB_FxV.js +2 -0
- package/dist/core/web/public/next/assets/VoiceInput-k3vB_FxV.js.map +1 -0
- package/dist/core/web/public/next/assets/WikiSection-DeBKNqd6.js +2 -0
- package/dist/core/web/public/next/assets/WikiSection-DeBKNqd6.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-CvwS2-RN.js +6 -0
- package/dist/core/web/public/next/assets/Workspace-CvwS2-RN.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-Dg6UJTLn.js +2 -0
- package/dist/core/web/public/next/assets/actions-Dg6UJTLn.js.map +1 -0
- package/dist/core/web/public/next/assets/agent-tools-client-DmJq7zlr.js +2 -0
- package/dist/core/web/public/next/assets/agent-tools-client-DmJq7zlr.js.map +1 -0
- package/dist/core/web/public/next/assets/agents-focus-B1LKhUVg.js +2 -0
- package/dist/core/web/public/next/assets/agents-focus-B1LKhUVg.js.map +1 -0
- package/dist/core/web/public/next/assets/app-version-Cb1z8iCO.js +2 -0
- package/dist/core/web/public/next/assets/app-version-Cb1z8iCO.js.map +1 -0
- package/dist/core/web/public/next/assets/apps-model-_chbcQeN.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-_chbcQeN.js.map +1 -0
- package/dist/core/web/public/next/assets/ask-seat-O60AydbV.js +2 -0
- package/dist/core/web/public/next/assets/ask-seat-O60AydbV.js.map +1 -0
- package/dist/core/web/public/next/assets/authority-model-BeDDHF22.js +2 -0
- package/dist/core/web/public/next/assets/authority-model-BeDDHF22.js.map +1 -0
- package/dist/core/web/public/next/assets/automations-focus-BXaRZ8nX.js +2 -0
- package/dist/core/web/public/next/assets/automations-focus-BXaRZ8nX.js.map +1 -0
- package/dist/core/web/public/next/assets/budget-queries-Nvx0H2XE.js +2 -0
- package/dist/core/web/public/next/assets/budget-queries-Nvx0H2XE.js.map +1 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-CBMJ2U-w.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-CBMJ2U-w.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-DT9PYS49.js +2 -0
- package/dist/core/web/public/next/assets/charts-DT9PYS49.js.map +1 -0
- package/dist/core/web/public/next/assets/chat-pane-data-CfbpeAYX.js +2 -0
- package/dist/core/web/public/next/assets/chat-pane-data-CfbpeAYX.js.map +1 -0
- package/dist/core/web/public/next/assets/checkpoint-queries-BKD2evmX.js +2 -0
- package/dist/core/web/public/next/assets/checkpoint-queries-BKD2evmX.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-CsU54eNn.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-CsU54eNn.js.map +1 -0
- package/dist/core/web/public/next/assets/command-catalog-B0ApAGD0.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-B0ApAGD0.js.map +1 -0
- package/dist/core/web/public/next/assets/composer-queries-D1H4E0Ye.js +2 -0
- package/dist/core/web/public/next/assets/composer-queries-D1H4E0Ye.js.map +1 -0
- package/dist/core/web/public/next/assets/connectivity-xQ0Nh0j3.js +2 -0
- package/dist/core/web/public/next/assets/connectivity-xQ0Nh0j3.js.map +1 -0
- package/dist/core/web/public/next/assets/context-queries-bnI3P0Wt.js +2 -0
- package/dist/core/web/public/next/assets/context-queries-bnI3P0Wt.js.map +1 -0
- package/dist/core/web/public/next/assets/control-queries-BG53otwz.js +2 -0
- package/dist/core/web/public/next/assets/control-queries-BG53otwz.js.map +1 -0
- package/dist/core/web/public/next/assets/copy-setup-COMDnur3.js +2 -0
- package/dist/core/web/public/next/assets/copy-setup-COMDnur3.js.map +1 -0
- package/dist/core/web/public/next/assets/deep-link-CqOP-JEm.js +2 -0
- package/dist/core/web/public/next/assets/deep-link-CqOP-JEm.js.map +1 -0
- package/dist/core/web/public/next/assets/device-permissions-DpsJJcUW.js +2 -0
- package/dist/core/web/public/next/assets/device-permissions-DpsJJcUW.js.map +1 -0
- package/dist/core/web/public/next/assets/devin-queries-BSEOfLuZ.js +2 -0
- package/dist/core/web/public/next/assets/devin-queries-BSEOfLuZ.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-DK7QcBXJ.js +2 -0
- package/dist/core/web/public/next/assets/dock-icons-DK7QcBXJ.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-panes-DvQ6t4Nl.js +2 -0
- package/dist/core/web/public/next/assets/dock-panes-DvQ6t4Nl.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-control-queries-BL-Vlf85.js +2 -0
- package/dist/core/web/public/next/assets/fleet-control-queries-BL-Vlf85.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-queries-eacERnLm.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-eacERnLm.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-state-DfKcuo4A.js +3 -0
- package/dist/core/web/public/next/assets/fleet-state-DfKcuo4A.js.map +1 -0
- package/dist/core/web/public/next/assets/focus-trap-BZeH0rVB.js +2 -0
- package/dist/core/web/public/next/assets/focus-trap-BZeH0rVB.js.map +1 -0
- package/dist/core/web/public/next/assets/git-model-C1I4z_iQ.js +5 -0
- package/dist/core/web/public/next/assets/git-model-C1I4z_iQ.js.map +1 -0
- package/dist/core/web/public/next/assets/global-w7KDTTi0.js +3 -0
- package/dist/core/web/public/next/assets/global-w7KDTTi0.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-action-J9umcJgI.js +3 -0
- package/dist/core/web/public/next/assets/guarded-action-J9umcJgI.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-runners-Da5yA9Im.js +2 -0
- package/dist/core/web/public/next/assets/guarded-runners-Da5yA9Im.js.map +1 -0
- package/dist/core/web/public/next/assets/health-queries-D3HgrdU_.js +2 -0
- package/dist/core/web/public/next/assets/health-queries-D3HgrdU_.js.map +1 -0
- package/dist/core/web/public/next/assets/icons-C3G-y5j2.js +2 -0
- package/dist/core/web/public/next/assets/icons-C3G-y5j2.js.map +1 -0
- package/dist/core/web/public/next/assets/index-BC5Uslm5.js +11 -0
- package/dist/core/web/public/next/assets/index-BC5Uslm5.js.map +1 -0
- package/dist/core/web/public/next/assets/jev-queries-D6JNU-s6.js +2 -0
- package/dist/core/web/public/next/assets/jev-queries-D6JNU-s6.js.map +1 -0
- package/dist/core/web/public/next/assets/ladder-queries-BnYWjJoi.js +2 -0
- package/dist/core/web/public/next/assets/ladder-queries-BnYWjJoi.js.map +1 -0
- package/dist/core/web/public/next/assets/leader-focus-C6LVWgYI.js +2 -0
- package/dist/core/web/public/next/assets/leader-focus-C6LVWgYI.js.map +1 -0
- package/dist/core/web/public/next/assets/live-model-BPyZCTr1.js +2 -0
- package/dist/core/web/public/next/assets/live-model-BPyZCTr1.js.map +1 -0
- package/dist/core/web/public/next/assets/mobile-actions-avKNGddD.js +2 -0
- package/dist/core/web/public/next/assets/mobile-actions-avKNGddD.js.map +1 -0
- package/dist/core/web/public/next/assets/mobile-toast-BqSzGmw1.js +2 -0
- package/dist/core/web/public/next/assets/mobile-toast-BqSzGmw1.js.map +1 -0
- package/dist/core/web/public/next/assets/multimodel-flows-DOHsEKUG.js +7 -0
- package/dist/core/web/public/next/assets/multimodel-flows-DOHsEKUG.js.map +1 -0
- package/dist/core/web/public/next/assets/multimodel-queries-xmBBUT6n.js +2 -0
- package/dist/core/web/public/next/assets/multimodel-queries-xmBBUT6n.js.map +1 -0
- package/dist/core/web/public/next/assets/mutations-CdLi0erM.js +2 -0
- package/dist/core/web/public/next/assets/mutations-CdLi0erM.js.map +1 -0
- package/dist/core/web/public/next/assets/nav-CUXtg-Iw.js +2 -0
- package/dist/core/web/public/next/assets/nav-CUXtg-Iw.js.map +1 -0
- package/dist/core/web/public/next/assets/needs-you-actions-B2tjWO-0.js +2 -0
- package/dist/core/web/public/next/assets/needs-you-actions-B2tjWO-0.js.map +1 -0
- package/dist/core/web/public/next/assets/needs-you-model-DL9EEd2L.js +2 -0
- package/dist/core/web/public/next/assets/needs-you-model-DL9EEd2L.js.map +1 -0
- package/dist/core/web/public/next/assets/open-terminal-BfbxGoYQ.js +2 -0
- package/dist/core/web/public/next/assets/open-terminal-BfbxGoYQ.js.map +1 -0
- package/dist/core/web/public/next/assets/open-terminal-request-BT1UE0fz.js +2 -0
- package/dist/core/web/public/next/assets/open-terminal-request-BT1UE0fz.js.map +1 -0
- package/dist/core/web/public/next/assets/overnight-queries-cjjogTzn.js +2 -0
- package/dist/core/web/public/next/assets/overnight-queries-cjjogTzn.js.map +1 -0
- package/dist/core/web/public/next/assets/palette-handoff-XL2WWc9I.js +2 -0
- package/dist/core/web/public/next/assets/palette-handoff-XL2WWc9I.js.map +1 -0
- package/dist/core/web/public/next/assets/panes-5GU8cuI9.js +3 -0
- package/dist/core/web/public/next/assets/panes-5GU8cuI9.js.map +1 -0
- package/dist/core/web/public/next/assets/path-display-ZSzKoo8T.js +2 -0
- package/dist/core/web/public/next/assets/path-display-ZSzKoo8T.js.map +1 -0
- package/dist/core/web/public/next/assets/playbook-composer-D04tqOmU.js +2 -0
- package/dist/core/web/public/next/assets/playbook-composer-D04tqOmU.js.map +1 -0
- package/dist/core/web/public/next/assets/playbook-focus-DD1VIfkd.js +2 -0
- package/dist/core/web/public/next/assets/playbook-focus-DD1VIfkd.js.map +1 -0
- package/dist/core/web/public/next/assets/playbooks-queries-X7NGzpIn.js +2 -0
- package/dist/core/web/public/next/assets/playbooks-queries-X7NGzpIn.js.map +1 -0
- package/dist/core/web/public/next/assets/preloaded-6hKNGuRp.js +2 -0
- package/dist/core/web/public/next/assets/preloaded-6hKNGuRp.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-6nAFZkcg.js +1 -0
- package/dist/core/web/public/next/assets/pwa-BzXJXtDt.js +2 -0
- package/dist/core/web/public/next/assets/pwa-BzXJXtDt.js.map +1 -0
- package/dist/core/web/public/next/assets/queries-PgZlvFqO.js +2 -0
- package/dist/core/web/public/next/assets/queries-PgZlvFqO.js.map +1 -0
- package/dist/core/web/public/next/assets/reasoning-pref-BS0PSZ8d.js +2 -0
- package/dist/core/web/public/next/assets/reasoning-pref-BS0PSZ8d.js.map +1 -0
- package/dist/core/web/public/next/assets/remote-session-Bu-dtRcS.js +3 -0
- package/dist/core/web/public/next/assets/remote-session-Bu-dtRcS.js.map +1 -0
- package/dist/core/web/public/next/assets/resolved-store-UYN2k9My.js +2 -0
- package/dist/core/web/public/next/assets/resolved-store-UYN2k9My.js.map +1 -0
- package/dist/core/web/public/next/assets/resources-queries-XfQ8w9In.js +2 -0
- package/dist/core/web/public/next/assets/resources-queries-XfQ8w9In.js.map +1 -0
- package/dist/core/web/public/next/assets/reveal-anchor-3ZUTtB8Q.js +2 -0
- package/dist/core/web/public/next/assets/reveal-anchor-3ZUTtB8Q.js.map +1 -0
- package/dist/core/web/public/next/assets/sheet-DP8ByDWU.js +2 -0
- package/dist/core/web/public/next/assets/sheet-DP8ByDWU.js.map +1 -0
- package/dist/core/web/public/next/assets/slots-DWlj_c7i.js +3 -0
- package/dist/core/web/public/next/assets/slots-DWlj_c7i.js.map +1 -0
- package/dist/core/web/public/next/assets/sources-queries-Cjk1rpDU.js +4 -0
- package/dist/core/web/public/next/assets/sources-queries-Cjk1rpDU.js.map +1 -0
- package/dist/core/web/public/next/assets/sse-Z3U8XhDI.js +2 -0
- package/dist/core/web/public/next/assets/sse-Z3U8XhDI.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-data-hufdOfpz.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-hufdOfpz.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CFtP8imB.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CFtP8imB.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-client-CCSvMeEv.js +2 -0
- package/dist/core/web/public/next/assets/terminal-client-CCSvMeEv.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-icons-Dx6neM-J.js +2 -0
- package/dist/core/web/public/next/assets/terminal-icons-Dx6neM-J.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-view-BSieiQvi.js +6 -0
- package/dist/core/web/public/next/assets/terminal-view-BSieiQvi.js.map +1 -0
- package/dist/core/web/public/next/assets/thread-data-Cd2DZffn.js +2 -0
- package/dist/core/web/public/next/assets/thread-data-Cd2DZffn.js.map +1 -0
- package/dist/core/web/public/next/assets/ui-parts-wvov2ktB.js +2 -0
- package/dist/core/web/public/next/assets/ui-parts-wvov2ktB.js.map +1 -0
- package/dist/core/web/public/next/assets/usage-queries-nZjJ1aky.js +2 -0
- package/dist/core/web/public/next/assets/usage-queries-nZjJ1aky.js.map +1 -0
- package/dist/core/web/public/next/assets/use-chat-activity-_tBmEPPN.js +2 -0
- package/dist/core/web/public/next/assets/use-chat-activity-_tBmEPPN.js.map +1 -0
- package/dist/core/web/public/next/assets/use-guarded-action-DKKjhPKG.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-DKKjhPKG.js.map +1 -0
- package/dist/core/web/public/next/assets/use-ticker-w1c3SOqK.js +2 -0
- package/dist/core/web/public/next/assets/use-ticker-w1c3SOqK.js.map +1 -0
- package/dist/core/web/public/next/assets/use-token-gate-h5QAERLT.js +2 -0
- package/dist/core/web/public/next/assets/use-token-gate-h5QAERLT.js.map +1 -0
- package/dist/core/web/public/next/assets/useAutoSeat-Dpbn0XUv.js +2 -0
- package/dist/core/web/public/next/assets/useAutoSeat-Dpbn0XUv.js.map +1 -0
- package/dist/core/web/public/next/assets/useOnboarding-VoV1LcuJ.js +2 -0
- package/dist/core/web/public/next/assets/useOnboarding-VoV1LcuJ.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatHealth-DuSaKdIs.js +2 -0
- package/dist/core/web/public/next/assets/useSeatHealth-DuSaKdIs.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-DFaR1jSz.js +2 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-DFaR1jSz.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseSession-BOsgJzT5.js +2 -0
- package/dist/core/web/public/next/assets/useVerseSession-BOsgJzT5.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BN_fMz6x.js +2 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BN_fMz6x.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-bootstrap-query-B3vFD9XK.js +2 -0
- package/dist/core/web/public/next/assets/verse-bootstrap-query-B3vFD9XK.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-icons-vSkflmRB.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-vSkflmRB.js.map +1 -0
- package/dist/core/web/public/next/assets/warmup-D9MjYs5S.js +3 -0
- package/dist/core/web/public/next/assets/warmup-D9MjYs5S.js.map +1 -0
- package/dist/core/web/public/next/assets/wiki-focus-De8-E48Z.js +2 -0
- package/dist/core/web/public/next/assets/wiki-focus-De8-E48Z.js.map +1 -0
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-CebJFKYy.js +0 -2
- package/dist/core/web/public/next/assets/ActionMenu-CebJFKYy.js.map +0 -1
- package/dist/core/web/public/next/assets/Advanced-Dr9aVbXV.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-Dr9aVbXV.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentDetailScreen-DCVf81Vo.js +0 -2
- package/dist/core/web/public/next/assets/AgentDetailScreen-DCVf81Vo.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentToolsSheet-C3SbvEiV.js +0 -2
- package/dist/core/web/public/next/assets/AgentToolsSheet-C3SbvEiV.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentToolsStrip-CZNxj_Iv.js +0 -2
- package/dist/core/web/public/next/assets/AgentToolsStrip-CZNxj_Iv.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentsScreen-zLj4gzPR.js +0 -2
- package/dist/core/web/public/next/assets/AgentsScreen-zLj4gzPR.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentsSection-CIo_nRmi.js +0 -3
- package/dist/core/web/public/next/assets/AgentsSection-CIo_nRmi.js.map +0 -1
- package/dist/core/web/public/next/assets/App-CPKNuUdC.js +0 -8
- package/dist/core/web/public/next/assets/App-CPKNuUdC.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-D2F2CM-E.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-D2F2CM-E.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-DiZu8bjc.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-DiZu8bjc.js.map +0 -1
- package/dist/core/web/public/next/assets/AutomationsSection-B4rBNUyo.js +0 -2
- package/dist/core/web/public/next/assets/AutomationsSection-B4rBNUyo.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomyOffState-DEznxI-Q.js +0 -3
- package/dist/core/web/public/next/assets/AutonomyOffState-DEznxI-Q.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-Dq5n3gs7.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-Dq5n3gs7.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomyStatus-Uydy6-pZ.js +0 -2
- package/dist/core/web/public/next/assets/AutonomyStatus-Uydy6-pZ.js.map +0 -1
- package/dist/core/web/public/next/assets/BranchBar-BzUmUM_j.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-BzUmUM_j.js.map +0 -1
- package/dist/core/web/public/next/assets/BrowserPanel-C_VI6Awi.js +0 -7
- package/dist/core/web/public/next/assets/BrowserPanel-C_VI6Awi.js.map +0 -1
- package/dist/core/web/public/next/assets/BudgetControl-B23rNAuC.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-B23rNAuC.js.map +0 -1
- package/dist/core/web/public/next/assets/Button-DJY_Pu5B.js +0 -2
- package/dist/core/web/public/next/assets/Button-DJY_Pu5B.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-B5Yj2PhZ.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-B5Yj2PhZ.js.map +0 -1
- package/dist/core/web/public/next/assets/ChangesPaneHost-LsUonc7P.js +0 -16
- package/dist/core/web/public/next/assets/ChangesPaneHost-LsUonc7P.js.map +0 -1
- package/dist/core/web/public/next/assets/ChartFrame-CakjKkPx.js +0 -2
- package/dist/core/web/public/next/assets/ChartFrame-CakjKkPx.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatPanes-DgKskpXb.js +0 -2
- package/dist/core/web/public/next/assets/ChatPanes-DgKskpXb.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DXpzV1NW.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-DXpzV1NW.js.map +0 -1
- package/dist/core/web/public/next/assets/ChecksPanel-BeCJVOJC.js +0 -5
- package/dist/core/web/public/next/assets/ChecksPanel-BeCJVOJC.js.map +0 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-4SWIGJLs.js +0 -2
- package/dist/core/web/public/next/assets/CloudBudgetForm-4SWIGJLs.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-B4QaFGY5.js +0 -3
- package/dist/core/web/public/next/assets/CommandPalette-B4QaFGY5.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-8TFjYitt.js +0 -3
- package/dist/core/web/public/next/assets/CommandSection-8TFjYitt.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandWorkflowForm-B2ooVjof.js +0 -9
- package/dist/core/web/public/next/assets/CommandWorkflowForm-B2ooVjof.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-C09vJiUG.js +0 -3
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-C09vJiUG.js.map +0 -1
- package/dist/core/web/public/next/assets/CompareDialog-CaopnGI0.js +0 -4
- package/dist/core/web/public/next/assets/CompareDialog-CaopnGI0.js.map +0 -1
- package/dist/core/web/public/next/assets/ComputerControl-BflC6wd1.js +0 -2
- package/dist/core/web/public/next/assets/ComputerControl-BflC6wd1.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-CTeMFavv.js +0 -2
- package/dist/core/web/public/next/assets/ConfirmDialog-CTeMFavv.js.map +0 -1
- package/dist/core/web/public/next/assets/DeleteChatDialog-B2bUTuZ9.js +0 -2
- package/dist/core/web/public/next/assets/DeleteChatDialog-B2bUTuZ9.js.map +0 -1
- package/dist/core/web/public/next/assets/DevinStopDialog-DPP34cna.js +0 -2
- package/dist/core/web/public/next/assets/DevinStopDialog-DPP34cna.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-r4j4R4b6.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-r4j4R4b6.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffPane-CKnpzqaU.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-CKnpzqaU.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-BzQ7245p.js +0 -2
- package/dist/core/web/public/next/assets/DiffViewer-BzQ7245p.js.map +0 -1
- package/dist/core/web/public/next/assets/DockHost-BCZtC_lm.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-BCZtC_lm.js.map +0 -1
- package/dist/core/web/public/next/assets/EmptyState-Cwpga8L9.js +0 -2
- package/dist/core/web/public/next/assets/EmptyState-Cwpga8L9.js.map +0 -1
- package/dist/core/web/public/next/assets/Epistemic-BBwXv-C1.js +0 -2
- package/dist/core/web/public/next/assets/Epistemic-BBwXv-C1.js.map +0 -1
- package/dist/core/web/public/next/assets/EvidenceTimeline-hAENJQCa.js +0 -2
- package/dist/core/web/public/next/assets/EvidenceTimeline-hAENJQCa.js.map +0 -1
- package/dist/core/web/public/next/assets/FilesPane-CrPN5zlx.js +0 -2
- package/dist/core/web/public/next/assets/FilesPane-CrPN5zlx.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetScreen-Cz9HQ-st.js +0 -2
- package/dist/core/web/public/next/assets/FleetScreen-Cz9HQ-st.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-CmZKQ1rr.js +0 -5
- package/dist/core/web/public/next/assets/FleetSection-CmZKQ1rr.js.map +0 -1
- package/dist/core/web/public/next/assets/Funnel-Cfg55EZp.js +0 -2
- package/dist/core/web/public/next/assets/Funnel-Cfg55EZp.js.map +0 -1
- package/dist/core/web/public/next/assets/GearTray-D-Mhc8TJ.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-D-Mhc8TJ.js.map +0 -1
- package/dist/core/web/public/next/assets/GitDialogs-e-7RQEGv.js +0 -2
- package/dist/core/web/public/next/assets/GitDialogs-e-7RQEGv.js.map +0 -1
- package/dist/core/web/public/next/assets/GrowthSection-DsIrdTDd.js +0 -3
- package/dist/core/web/public/next/assets/GrowthSection-DsIrdTDd.js.map +0 -1
- package/dist/core/web/public/next/assets/HandoffDialog-1MB2fmT1.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-1MB2fmT1.js.map +0 -1
- package/dist/core/web/public/next/assets/HomeBody-n_t3A58_.js +0 -3
- package/dist/core/web/public/next/assets/HomeBody-n_t3A58_.js.map +0 -1
- package/dist/core/web/public/next/assets/HomeSeats-DA66aOWC.js +0 -2
- package/dist/core/web/public/next/assets/HomeSeats-DA66aOWC.js.map +0 -1
- package/dist/core/web/public/next/assets/Input-Bt6fp051.js +0 -2
- package/dist/core/web/public/next/assets/Input-Bt6fp051.js.map +0 -1
- package/dist/core/web/public/next/assets/LaunchDialog-BCd7XqCv.js +0 -9
- package/dist/core/web/public/next/assets/LaunchDialog-BCd7XqCv.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderCard-DFAFcyfZ.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-DFAFcyfZ.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderConversation-LSenfZzT.js +0 -3
- package/dist/core/web/public/next/assets/LeaderConversation-LSenfZzT.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderScreen-B2UxRWUm.js +0 -2
- package/dist/core/web/public/next/assets/LeaderScreen-B2UxRWUm.js.map +0 -1
- package/dist/core/web/public/next/assets/LessonsPanel-D86ZT0we.js +0 -2
- package/dist/core/web/public/next/assets/LessonsPanel-D86ZT0we.js.map +0 -1
- package/dist/core/web/public/next/assets/LiveTimer-AtG5hPwV.js +0 -2
- package/dist/core/web/public/next/assets/LiveTimer-AtG5hPwV.js.map +0 -1
- package/dist/core/web/public/next/assets/LocalSeatBadge-XfGRZCA3.js +0 -2
- package/dist/core/web/public/next/assets/LocalSeatBadge-XfGRZCA3.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-PSnyMJ2h.js +0 -2
- package/dist/core/web/public/next/assets/MatrixHeatmap-PSnyMJ2h.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-BG2FSkgH.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-BG2FSkgH.js.map +0 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-CQEqoMvf.js +0 -3
- package/dist/core/web/public/next/assets/MessageMarkdown-CQEqoMvf.js.map +0 -1
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DU-VLDhb.js +0 -72
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DU-VLDhb.js.map +0 -1
- package/dist/core/web/public/next/assets/Meter-BfaE-BjY.js +0 -2
- package/dist/core/web/public/next/assets/Meter-BfaE-BjY.js.map +0 -1
- package/dist/core/web/public/next/assets/MicButton-BbGB7y_9.js +0 -2
- package/dist/core/web/public/next/assets/MicButton-BbGB7y_9.js.map +0 -1
- package/dist/core/web/public/next/assets/MindSection-CX0VaHo1.js +0 -3
- package/dist/core/web/public/next/assets/MindSection-CX0VaHo1.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileComposer-CFeLWUCz.js +0 -2
- package/dist/core/web/public/next/assets/MobileComposer-CFeLWUCz.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileGuardSheet-cGW9RCTr.js +0 -2
- package/dist/core/web/public/next/assets/MobileGuardSheet-cGW9RCTr.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileRuntime-BWTZ_QLr.js +0 -3
- package/dist/core/web/public/next/assets/MobileRuntime-BWTZ_QLr.js.map +0 -1
- package/dist/core/web/public/next/assets/MoreScreen-BcHZhVrR.js +0 -2
- package/dist/core/web/public/next/assets/MoreScreen-BcHZhVrR.js.map +0 -1
- package/dist/core/web/public/next/assets/MultiModelBar-COxIRv7m.js +0 -7
- package/dist/core/web/public/next/assets/MultiModelBar-COxIRv7m.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dnf_rcnc.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dnf_rcnc.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-COrUlnd0.js +0 -3
- package/dist/core/web/public/next/assets/NeedsYouDrawer-COrUlnd0.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouList-AXzOe4EL.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouList-AXzOe4EL.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouScreen-HSXybHgd.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouScreen-HSXybHgd.js.map +0 -1
- package/dist/core/web/public/next/assets/NewAgentScreen-BI849ZsG.js +0 -2
- package/dist/core/web/public/next/assets/NewAgentScreen-BI849ZsG.js.map +0 -1
- package/dist/core/web/public/next/assets/NewChatDialog-BHoCnP6Q.js +0 -4
- package/dist/core/web/public/next/assets/NewChatDialog-BHoCnP6Q.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-BVljU2uy.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-BVljU2uy.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingGate-DlI4L7Ki.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingGate-DlI4L7Ki.js.map +0 -1
- package/dist/core/web/public/next/assets/PlaybooksSection-hhNpXnsR.js +0 -9
- package/dist/core/web/public/next/assets/PlaybooksSection-hhNpXnsR.js.map +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-BbXr63u2.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-BbXr63u2.js.map +0 -1
- package/dist/core/web/public/next/assets/ProviderLogo-BliSWEMw.js +0 -2
- package/dist/core/web/public/next/assets/ProviderLogo-BliSWEMw.js.map +0 -1
- package/dist/core/web/public/next/assets/RailStatus-SnrVxLnp.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-SnrVxLnp.js.map +0 -1
- package/dist/core/web/public/next/assets/ReasoningPane-C04_bOAi.js +0 -2
- package/dist/core/web/public/next/assets/ReasoningPane-C04_bOAi.js.map +0 -1
- package/dist/core/web/public/next/assets/ReasoningSheet-BvNFwtuX.js +0 -2
- package/dist/core/web/public/next/assets/ReasoningSheet-BvNFwtuX.js.map +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-BNptNJiV.js +0 -2
- package/dist/core/web/public/next/assets/RefreshIndicator-BNptNJiV.js.map +0 -1
- package/dist/core/web/public/next/assets/RemoteMobileApp-osaSEvnm.js +0 -2
- package/dist/core/web/public/next/assets/RemoteMobileApp-osaSEvnm.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-LO31zjUR.js +0 -7
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-LO31zjUR.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-ByZE532G.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-ByZE532G.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-p_VCkMZH.css +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-BH9uwNE8.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesDrawer-BH9uwNE8.js.map +0 -1
- package/dist/core/web/public/next/assets/ReviewMenu-B2A_YDPi.js +0 -2
- package/dist/core/web/public/next/assets/ReviewMenu-B2A_YDPi.js.map +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CVabFM97.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CVabFM97.js.map +0 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-BpNHE7m8.js +0 -2
- package/dist/core/web/public/next/assets/RunInCloudAction-BpNHE7m8.js.map +0 -1
- package/dist/core/web/public/next/assets/RunInDevinAction-Bkf5Gb3a.js +0 -2
- package/dist/core/web/public/next/assets/RunInDevinAction-Bkf5Gb3a.js.map +0 -1
- package/dist/core/web/public/next/assets/SchedulingEvidence-B08-qhhm.js +0 -2
- package/dist/core/web/public/next/assets/SchedulingEvidence-B08-qhhm.js.map +0 -1
- package/dist/core/web/public/next/assets/ScreenHost-BGSxFyWK.js +0 -3
- package/dist/core/web/public/next/assets/ScreenHost-BGSxFyWK.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-B4lRZl0K.js +0 -3
- package/dist/core/web/public/next/assets/SeatSelector-B4lRZl0K.js.map +0 -1
- package/dist/core/web/public/next/assets/Segmented-Dokzywy8.js +0 -2
- package/dist/core/web/public/next/assets/Segmented-Dokzywy8.js.map +0 -1
- package/dist/core/web/public/next/assets/Select-tf4lNvWD.js +0 -2
- package/dist/core/web/public/next/assets/Select-tf4lNvWD.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionGate-Bab2qO29.js +0 -2
- package/dist/core/web/public/next/assets/SessionGate-Bab2qO29.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionInsightChip-C-fj8h4A.js +0 -2
- package/dist/core/web/public/next/assets/SessionInsightChip-C-fj8h4A.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionSearch-CqjjwOW2.js +0 -2
- package/dist/core/web/public/next/assets/SessionSearch-CqjjwOW2.js.map +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-DfOsHzl6.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-DfOsHzl6.js.map +0 -1
- package/dist/core/web/public/next/assets/SetupChecklist-BsxCTcYY.js +0 -2
- package/dist/core/web/public/next/assets/SetupChecklist-BsxCTcYY.js.map +0 -1
- package/dist/core/web/public/next/assets/ShadowDecisions-B1ZPv7K-.js +0 -3
- package/dist/core/web/public/next/assets/ShadowDecisions-B1ZPv7K-.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-DLlZ00Lu.js +0 -2
- package/dist/core/web/public/next/assets/Sheet-DLlZ00Lu.js.map +0 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CDwQdpGV.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CDwQdpGV.js.map +0 -1
- package/dist/core/web/public/next/assets/Sidebar-H5WNri2S.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-H5WNri2S.js.map +0 -1
- package/dist/core/web/public/next/assets/SkipToContent-BjJE6yOo.js +0 -2
- package/dist/core/web/public/next/assets/SkipToContent-BjJE6yOo.js.map +0 -1
- package/dist/core/web/public/next/assets/Slider-C68TumXj.js +0 -2
- package/dist/core/web/public/next/assets/Slider-C68TumXj.js.map +0 -1
- package/dist/core/web/public/next/assets/SourcesPane-DHYs4YIg.js +0 -2
- package/dist/core/web/public/next/assets/SourcesPane-DHYs4YIg.js.map +0 -1
- package/dist/core/web/public/next/assets/SourcesPanel-DFyLfYBO.js +0 -2
- package/dist/core/web/public/next/assets/SourcesPanel-DFyLfYBO.js.map +0 -1
- package/dist/core/web/public/next/assets/StatTile-CTUuhOLS.js +0 -2
- package/dist/core/web/public/next/assets/StatTile-CTUuhOLS.js.map +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-DrVbi5dF.js +0 -2
- package/dist/core/web/public/next/assets/StatusBadge-DrVbi5dF.js.map +0 -1
- package/dist/core/web/public/next/assets/StepBand-CXDpnu2R.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-CXDpnu2R.js.map +0 -1
- package/dist/core/web/public/next/assets/Surface-DCL7uORg.js +0 -2
- package/dist/core/web/public/next/assets/Surface-DCL7uORg.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-BAEjfoVU.js +0 -2
- package/dist/core/web/public/next/assets/Swimlane-BAEjfoVU.js.map +0 -1
- package/dist/core/web/public/next/assets/Switch-Z7RmRjWE.js +0 -2
- package/dist/core/web/public/next/assets/Switch-Z7RmRjWE.js.map +0 -1
- package/dist/core/web/public/next/assets/Tag-Ciht3C94.js +0 -2
- package/dist/core/web/public/next/assets/Tag-Ciht3C94.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-BdIyhtzJ.js +0 -26
- package/dist/core/web/public/next/assets/TerminalPane-BdIyhtzJ.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-DJKT600N.js +0 -3
- package/dist/core/web/public/next/assets/TerminalPane-DJKT600N.js.map +0 -1
- package/dist/core/web/public/next/assets/ThinkingBlock-CHRZX_fJ.js +0 -2
- package/dist/core/web/public/next/assets/ThinkingBlock-CHRZX_fJ.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-QSoaY_Fk.js +0 -2
- package/dist/core/web/public/next/assets/UniverseConsoleApp-QSoaY_Fk.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseView-ZXAOJ0Rq.js +0 -9
- package/dist/core/web/public/next/assets/UniverseView-ZXAOJ0Rq.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-BEAa-W_q.js +0 -3
- package/dist/core/web/public/next/assets/UsageSection-BEAa-W_q.js.map +0 -1
- package/dist/core/web/public/next/assets/UsePlaybookAction-S7Yky_M8.js +0 -2
- package/dist/core/web/public/next/assets/UsePlaybookAction-S7Yky_M8.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cj6yPJo3.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cj6yPJo3.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-n6qr3lCF.css +0 -1
- package/dist/core/web/public/next/assets/VerseMobileApp-BRayqF_2.js +0 -3
- package/dist/core/web/public/next/assets/VerseMobileApp-BRayqF_2.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseShared-CH8mV5ew.js +0 -2
- package/dist/core/web/public/next/assets/VerseShared-CH8mV5ew.js.map +0 -1
- package/dist/core/web/public/next/assets/VoiceHud-CO4yGRlr.js +0 -2
- package/dist/core/web/public/next/assets/VoiceHud-CO4yGRlr.js.map +0 -1
- package/dist/core/web/public/next/assets/VoiceInput-fSLnbGJ4.js +0 -2
- package/dist/core/web/public/next/assets/VoiceInput-fSLnbGJ4.js.map +0 -1
- package/dist/core/web/public/next/assets/WikiSection-CN-HansV.js +0 -2
- package/dist/core/web/public/next/assets/WikiSection-CN-HansV.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-dufi6DmW.js +0 -6
- package/dist/core/web/public/next/assets/Workspace-dufi6DmW.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-gBplqbpY.js +0 -2
- package/dist/core/web/public/next/assets/actions-gBplqbpY.js.map +0 -1
- package/dist/core/web/public/next/assets/agent-tools-client-ClFut2J1.js +0 -2
- package/dist/core/web/public/next/assets/agent-tools-client-ClFut2J1.js.map +0 -1
- package/dist/core/web/public/next/assets/agents-focus-DjBz83BQ.js +0 -2
- package/dist/core/web/public/next/assets/agents-focus-DjBz83BQ.js.map +0 -1
- package/dist/core/web/public/next/assets/app-version-B0FcXqqB.js +0 -2
- package/dist/core/web/public/next/assets/app-version-B0FcXqqB.js.map +0 -1
- package/dist/core/web/public/next/assets/apps-model-C-SdWY0N.js +0 -2
- package/dist/core/web/public/next/assets/apps-model-C-SdWY0N.js.map +0 -1
- package/dist/core/web/public/next/assets/ask-seat-DhGxiGSd.js +0 -2
- package/dist/core/web/public/next/assets/ask-seat-DhGxiGSd.js.map +0 -1
- package/dist/core/web/public/next/assets/authority-model-CoXAS-Z6.js +0 -2
- package/dist/core/web/public/next/assets/authority-model-CoXAS-Z6.js.map +0 -1
- package/dist/core/web/public/next/assets/automations-focus-CeneF7lP.js +0 -2
- package/dist/core/web/public/next/assets/automations-focus-CeneF7lP.js.map +0 -1
- package/dist/core/web/public/next/assets/budget-queries-DCZevH2S.js +0 -2
- package/dist/core/web/public/next/assets/budget-queries-DCZevH2S.js.map +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-Wna9o0dS.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-Wna9o0dS.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-CzqC55eL.js +0 -2
- package/dist/core/web/public/next/assets/charts-CzqC55eL.js.map +0 -1
- package/dist/core/web/public/next/assets/chat-pane-data-BBA55Pw-.js +0 -2
- package/dist/core/web/public/next/assets/chat-pane-data-BBA55Pw-.js.map +0 -1
- package/dist/core/web/public/next/assets/checkpoint-queries-gP6Vh70H.js +0 -2
- package/dist/core/web/public/next/assets/checkpoint-queries-gP6Vh70H.js.map +0 -1
- package/dist/core/web/public/next/assets/cloud-queries-Bsqo7wye.js +0 -2
- package/dist/core/web/public/next/assets/cloud-queries-Bsqo7wye.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-Dnx-iMLX.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-Dnx-iMLX.js.map +0 -1
- package/dist/core/web/public/next/assets/composer-queries-DHGJlnFJ.js +0 -2
- package/dist/core/web/public/next/assets/composer-queries-DHGJlnFJ.js.map +0 -1
- package/dist/core/web/public/next/assets/connectivity-BViMMNcD.js +0 -2
- package/dist/core/web/public/next/assets/connectivity-BViMMNcD.js.map +0 -1
- package/dist/core/web/public/next/assets/context-queries-Bsl-w0q-.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-Bsl-w0q-.js.map +0 -1
- package/dist/core/web/public/next/assets/control-queries-CUNa6TAx.js +0 -2
- package/dist/core/web/public/next/assets/control-queries-CUNa6TAx.js.map +0 -1
- package/dist/core/web/public/next/assets/copy-setup-C2goNcTZ.js +0 -2
- package/dist/core/web/public/next/assets/copy-setup-C2goNcTZ.js.map +0 -1
- package/dist/core/web/public/next/assets/deep-link-Dg_zaqAl.js +0 -2
- package/dist/core/web/public/next/assets/deep-link-Dg_zaqAl.js.map +0 -1
- package/dist/core/web/public/next/assets/device-permissions-CEXY0Vor.js +0 -2
- package/dist/core/web/public/next/assets/device-permissions-CEXY0Vor.js.map +0 -1
- package/dist/core/web/public/next/assets/devin-queries-Cu_YYhw2.js +0 -2
- package/dist/core/web/public/next/assets/devin-queries-Cu_YYhw2.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-DGZoDN6N.js +0 -2
- package/dist/core/web/public/next/assets/dock-icons-DGZoDN6N.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-panes-BgSO9q_f.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-BgSO9q_f.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-control-queries-clsJWanE.js +0 -2
- package/dist/core/web/public/next/assets/fleet-control-queries-clsJWanE.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-queries-DX1AwHEt.js +0 -2
- package/dist/core/web/public/next/assets/fleet-queries-DX1AwHEt.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-state-EgNiSDxu.js +0 -3
- package/dist/core/web/public/next/assets/fleet-state-EgNiSDxu.js.map +0 -1
- package/dist/core/web/public/next/assets/focus-trap-B1vuEhZX.js +0 -2
- package/dist/core/web/public/next/assets/focus-trap-B1vuEhZX.js.map +0 -1
- package/dist/core/web/public/next/assets/git-model-Bu59fz1m.js +0 -5
- package/dist/core/web/public/next/assets/git-model-Bu59fz1m.js.map +0 -1
- package/dist/core/web/public/next/assets/global-BJ_kVFpD.js +0 -3
- package/dist/core/web/public/next/assets/global-BJ_kVFpD.js.map +0 -1
- package/dist/core/web/public/next/assets/guarded-action-CzvG7Qgc.js +0 -3
- package/dist/core/web/public/next/assets/guarded-action-CzvG7Qgc.js.map +0 -1
- package/dist/core/web/public/next/assets/guarded-runners-BPM0KdoQ.js +0 -2
- package/dist/core/web/public/next/assets/guarded-runners-BPM0KdoQ.js.map +0 -1
- package/dist/core/web/public/next/assets/health-queries-CMxSsJKS.js +0 -2
- package/dist/core/web/public/next/assets/health-queries-CMxSsJKS.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-MYfI6vZr.js +0 -2
- package/dist/core/web/public/next/assets/icons-MYfI6vZr.js.map +0 -1
- package/dist/core/web/public/next/assets/index-DOAOxiKl.js +0 -11
- package/dist/core/web/public/next/assets/index-DOAOxiKl.js.map +0 -1
- package/dist/core/web/public/next/assets/jev-queries-CS2A5uWe.js +0 -2
- package/dist/core/web/public/next/assets/jev-queries-CS2A5uWe.js.map +0 -1
- package/dist/core/web/public/next/assets/ladder-queries-CBoG3heV.js +0 -2
- package/dist/core/web/public/next/assets/ladder-queries-CBoG3heV.js.map +0 -1
- package/dist/core/web/public/next/assets/leader-focus-DDQlv0TB.js +0 -2
- package/dist/core/web/public/next/assets/leader-focus-DDQlv0TB.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-CCjYFk48.js +0 -2
- package/dist/core/web/public/next/assets/live-model-CCjYFk48.js.map +0 -1
- package/dist/core/web/public/next/assets/mobile-actions-XqB_h7a8.js +0 -2
- package/dist/core/web/public/next/assets/mobile-actions-XqB_h7a8.js.map +0 -1
- package/dist/core/web/public/next/assets/mobile-toast-eIrghd9o.js +0 -2
- package/dist/core/web/public/next/assets/mobile-toast-eIrghd9o.js.map +0 -1
- package/dist/core/web/public/next/assets/multimodel-flows-CzI-yHg5.js +0 -7
- package/dist/core/web/public/next/assets/multimodel-flows-CzI-yHg5.js.map +0 -1
- package/dist/core/web/public/next/assets/multimodel-queries-DxIT9AZY.js +0 -2
- package/dist/core/web/public/next/assets/multimodel-queries-DxIT9AZY.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-BlGALvmG.js +0 -2
- package/dist/core/web/public/next/assets/mutations-BlGALvmG.js.map +0 -1
- package/dist/core/web/public/next/assets/nav-ByibvQW1.js +0 -2
- package/dist/core/web/public/next/assets/nav-ByibvQW1.js.map +0 -1
- package/dist/core/web/public/next/assets/needs-you-actions-Dp5UxM3X.js +0 -2
- package/dist/core/web/public/next/assets/needs-you-actions-Dp5UxM3X.js.map +0 -1
- package/dist/core/web/public/next/assets/needs-you-model-DYsqHMqy.js +0 -2
- package/dist/core/web/public/next/assets/needs-you-model-DYsqHMqy.js.map +0 -1
- package/dist/core/web/public/next/assets/open-terminal-dOVyLFvn.js +0 -2
- package/dist/core/web/public/next/assets/open-terminal-dOVyLFvn.js.map +0 -1
- package/dist/core/web/public/next/assets/open-terminal-request-BIhvirIl.js +0 -2
- package/dist/core/web/public/next/assets/open-terminal-request-BIhvirIl.js.map +0 -1
- package/dist/core/web/public/next/assets/overnight-queries-KxqH6BRN.js +0 -2
- package/dist/core/web/public/next/assets/overnight-queries-KxqH6BRN.js.map +0 -1
- package/dist/core/web/public/next/assets/palette-handoff-69pw9oBv.js +0 -2
- package/dist/core/web/public/next/assets/palette-handoff-69pw9oBv.js.map +0 -1
- package/dist/core/web/public/next/assets/panes-CHt3427X.js +0 -3
- package/dist/core/web/public/next/assets/panes-CHt3427X.js.map +0 -1
- package/dist/core/web/public/next/assets/path-display-DuIZF5G3.js +0 -2
- package/dist/core/web/public/next/assets/path-display-DuIZF5G3.js.map +0 -1
- package/dist/core/web/public/next/assets/playbook-composer-DipWgX7t.js +0 -2
- package/dist/core/web/public/next/assets/playbook-composer-DipWgX7t.js.map +0 -1
- package/dist/core/web/public/next/assets/playbook-focus-EXJPMBBI.js +0 -2
- package/dist/core/web/public/next/assets/playbook-focus-EXJPMBBI.js.map +0 -1
- package/dist/core/web/public/next/assets/playbooks-queries-BlpGBpOV.js +0 -2
- package/dist/core/web/public/next/assets/playbooks-queries-BlpGBpOV.js.map +0 -1
- package/dist/core/web/public/next/assets/preloaded-TmpzuCEi.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-TmpzuCEi.js.map +0 -1
- package/dist/core/web/public/next/assets/primitives-CDKCUR2v.js +0 -1
- package/dist/core/web/public/next/assets/pwa-CTGMm-wR.js +0 -2
- package/dist/core/web/public/next/assets/pwa-CTGMm-wR.js.map +0 -1
- package/dist/core/web/public/next/assets/queries--mGK10fL.js +0 -2
- package/dist/core/web/public/next/assets/queries--mGK10fL.js.map +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-CWGL9MD2.js +0 -2
- package/dist/core/web/public/next/assets/reasoning-pref-CWGL9MD2.js.map +0 -1
- package/dist/core/web/public/next/assets/remote-session-I4RXlsas.js +0 -3
- package/dist/core/web/public/next/assets/remote-session-I4RXlsas.js.map +0 -1
- package/dist/core/web/public/next/assets/resolved-store-DwGn9hb_.js +0 -2
- package/dist/core/web/public/next/assets/resolved-store-DwGn9hb_.js.map +0 -1
- package/dist/core/web/public/next/assets/resources-queries-T6ER_hPN.js +0 -2
- package/dist/core/web/public/next/assets/resources-queries-T6ER_hPN.js.map +0 -1
- package/dist/core/web/public/next/assets/reveal-anchor-CHtvhrYm.js +0 -2
- package/dist/core/web/public/next/assets/reveal-anchor-CHtvhrYm.js.map +0 -1
- package/dist/core/web/public/next/assets/sheet-BlzGO1wo.js +0 -2
- package/dist/core/web/public/next/assets/sheet-BlzGO1wo.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-40edgV7X.js +0 -3
- package/dist/core/web/public/next/assets/slots-40edgV7X.js.map +0 -1
- package/dist/core/web/public/next/assets/sources-queries-BrM41X16.js +0 -4
- package/dist/core/web/public/next/assets/sources-queries-BrM41X16.js.map +0 -1
- package/dist/core/web/public/next/assets/sse-CAFwslNC.js +0 -2
- package/dist/core/web/public/next/assets/sse-CAFwslNC.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-data-D_oFOgkh.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-D_oFOgkh.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-wqfiATYQ.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-wqfiATYQ.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-client-iL4DagCN.js +0 -2
- package/dist/core/web/public/next/assets/terminal-client-iL4DagCN.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-icons-BakeOpKV.js +0 -2
- package/dist/core/web/public/next/assets/terminal-icons-BakeOpKV.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-view-D6AAh08q.js +0 -6
- package/dist/core/web/public/next/assets/terminal-view-D6AAh08q.js.map +0 -1
- package/dist/core/web/public/next/assets/thread-data-CSDZ514s.js +0 -2
- package/dist/core/web/public/next/assets/thread-data-CSDZ514s.js.map +0 -1
- package/dist/core/web/public/next/assets/ui-parts-DubQJIoq.js +0 -2
- package/dist/core/web/public/next/assets/ui-parts-DubQJIoq.js.map +0 -1
- package/dist/core/web/public/next/assets/usage-queries-BONqdout.js +0 -2
- package/dist/core/web/public/next/assets/usage-queries-BONqdout.js.map +0 -1
- package/dist/core/web/public/next/assets/use-chat-activity-BZjdPPNP.js +0 -2
- package/dist/core/web/public/next/assets/use-chat-activity-BZjdPPNP.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-xJ4rxyVo.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-xJ4rxyVo.js.map +0 -1
- package/dist/core/web/public/next/assets/use-ticker-Bsu0cMvl.js +0 -2
- package/dist/core/web/public/next/assets/use-ticker-Bsu0cMvl.js.map +0 -1
- package/dist/core/web/public/next/assets/use-token-gate-E-xzEAu6.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-E-xzEAu6.js.map +0 -1
- package/dist/core/web/public/next/assets/useAutoSeat-CXC9e4vx.js +0 -2
- package/dist/core/web/public/next/assets/useAutoSeat-CXC9e4vx.js.map +0 -1
- package/dist/core/web/public/next/assets/useOnboarding-Csw_AXrj.js +0 -2
- package/dist/core/web/public/next/assets/useOnboarding-Csw_AXrj.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatHealth-B6AXxre9.js +0 -2
- package/dist/core/web/public/next/assets/useSeatHealth-B6AXxre9.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatsRefresh-BIAa7Exn.js +0 -2
- package/dist/core/web/public/next/assets/useSeatsRefresh-BIAa7Exn.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseSession-BOyvOEDi.js +0 -2
- package/dist/core/web/public/next/assets/useVerseSession-BOyvOEDi.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-BOhcfdp7.js +0 -2
- package/dist/core/web/public/next/assets/useVerseTranscript-BOhcfdp7.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-bootstrap-query-D-fU89IT.js +0 -2
- package/dist/core/web/public/next/assets/verse-bootstrap-query-D-fU89IT.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-icons-UKbUG3gv.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-UKbUG3gv.js.map +0 -1
- package/dist/core/web/public/next/assets/warmup-CZ-IBU5L.js +0 -3
- package/dist/core/web/public/next/assets/warmup-CZ-IBU5L.js.map +0 -1
- package/dist/core/web/public/next/assets/wiki-focus-DhAvbMnX.js +0 -2
- package/dist/core/web/public/next/assets/wiki-focus-DhAvbMnX.js.map +0 -1
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ResourcesDrawer-BH9uwNE8.js","assets/focus-trap-B1vuEhZX.js","assets/MutationTokenDialog-Dnf_rcnc.js","assets/Dialog-r4j4R4b6.js","assets/Button-DJY_Pu5B.js","assets/icons-MYfI6vZr.js","assets/use-token-gate-E-xzEAu6.js","assets/cloud-model-CzKeuxfm.js","assets/surface-data-D_oFOgkh.js","assets/control-queries-CUNa6TAx.js","assets/mutations-BlGALvmG.js","assets/use-ticker-Bsu0cMvl.js","assets/fleet-queries-DX1AwHEt.js","assets/fleet-model-D4n8ErhA.js","assets/Input-Bt6fp051.js","assets/usage-queries-BONqdout.js","assets/clipboard-DkZdqlxf.js","assets/guarded-action-CzvG7Qgc.js","assets/preloaded-TmpzuCEi.js","assets/jev-queries-CS2A5uWe.js","assets/apps-model-C-SdWY0N.js","assets/SchedulingEvidence-B08-qhhm.js","assets/global-1SED_aTT.css","assets/Dialog-tQ8kFulD.css","assets/MutationTokenDialog-CrfJ0PdD.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/SkipToContent-c02H5dmz.css","assets/VerseConsoleApp-n6qr3lCF.css","assets/Tag-D0rAEciH.css","assets/CapacityStrip-Cc28CyWk.css","assets/Button-DrnKsvnQ.css","assets/Input-BQ3PR065.css","assets/SchedulingEvidence-ByBl15rD.css","assets/ResourcesDrawer-3jF3-8aw.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{n,s as r,t as i}from"./index-DOAOxiKl.js";import{l as a}from"./global-BJ_kVFpD.js";import{t as o}from"./ProviderLogo-BliSWEMw.js";import{t as s}from"./percent-text-CSk89zQF.js";import{Ct as c,Ht as l,St as u,_t as d,bt as f,d as p,f as m,m as h,vt as g,w as _,wt as v,yt as y}from"./VerseConsoleApp-Cj6yPJo3.js";import{j as ee}from"./VerseShared-CH8mV5ew.js";import{i as b,t as x}from"./CapacityStrip-B5Yj2PhZ.js";import{_ as S,r as C,t as w}from"./capacity-strip-model-Wna9o0dS.js";import{a as te}from"./command-catalog-Dnx-iMLX.js";import{n as ne,u as T}from"./devin-queries-Cu_YYhw2.js";import{a as E,m as D,n as O}from"./resources-queries-T6ER_hPN.js";import{t as k}from"./binding-left-DZpq5sLf.js";var A=t(r(),1),j={handle:`_handle_1pzoz_6`,dot:`_dot_1pzoz_47`,railDot:`_railDot_1pzoz_67`,dock:`_dock_1pzoz_84`},M=n();function N(){return(0,M.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,"aria-hidden":`true`,focusable:`false`,children:[(0,M.jsx)(`path`,{d:`M2.75 4h10.5M2.75 8h10.5M2.75 12h10.5`,opacity:`.35`}),(0,M.jsx)(`path`,{d:`M2.75 4h7M2.75 8h4M2.75 12h8.5`})]})}function P({summary:e,rail:t=!1}){if(!e||e.tone===`unknown`)return null;let n=(0,M.jsx)(`span`,{className:j.dot,"data-tone":e.tone,"data-resources-dot":e.tone,"aria-hidden":`true`});return t?(0,M.jsx)(`span`,{className:j.railDot,children:n}):n}function F(e){return e?`Resources — ${e.spoken}`:`Resources`}function I({summary:e,shortcut:t,onOpen:n,onWarm:r}){return(0,M.jsx)(v,{label:F(e),shortcut:t,placement:`left`,children:(0,M.jsxs)(`button`,{type:`button`,className:j.handle,"data-resources-handle":!0,"aria-label":F(e),"aria-haspopup":`dialog`,onClick:n,onPointerEnter:r,onFocus:r,children:[(0,M.jsx)(N,{}),(0,M.jsx)(P,{summary:e})]})})}var L=`https://developers.openai.com/community/students`,R=`2026-10-01`;function z(e,t){if(![`free`,`go`,`plus`,`pro`].includes(t??``)||typeof e!=`string`||e.length>64||!/^(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e))return null;let[n,r=``]=e.split(`.`),i=10n**BigInt(r.length),a=(BigInt(n+r)*4n+i/2n)/i;return`$${(a/100n).toString().replace(/\B(?=(\d{3})+(?!\d))/g,`,`)}.${(a%100n).toString().padStart(2,`0`)}`}var B={bar:`_bar_13kxv_5`,row:`_row_13kxv_15`,line:`_line_13kxv_40`,battery:`_battery_13kxv_41`,cell:`_cell_13kxv_42`,logo:`_logo_13kxv_44`,cloudLogo:`_cloudLogo_13kxv_45`,name:`_name_13kxv_58`,value:`_value_13kxv_67`,nub:`_nub_13kxv_109`,tip:`_tip_13kxv_133`,tipHead:`_tipHead_13kxv_134`,tipSummary:`_tipSummary_13kxv_135`,tipLine:`_tipLine_13kxv_136`,tipHint:`_tipHint_13kxv_137`},V={usable:`ok`,low:`low`,spent:`out`,"signed-out":`out`,unavailable:`unknown`,checking:`unknown`,"not-checked":`unknown`};function H(e,t){let n=[];for(let r of e){if(r.kind===`local`){n.push({key:`local`,engine:`local`,name:r.localCount>1?`Local models (${r.localCount})`:`Local model`,leftPercent:null,level:r.cls===`blocked`?`out`:r.cls===`unread`?`unknown`:`idle`,value:r.cls===`blocked`?`offline`:r.cls===`unread`?`not reported`:`ready`,summary:`${r.label}: ${r.summary}`,detail:[`No metered usage — runs on this Mac.`,...r.notes]});continue}let e=w(r,{healthRead:t.healthRead,now:t.now}),i=r.windows.length===0&&!r.signedOut?r.historicalUsage:null;if(i){let e=S(i);n.push({key:r.seatId,engine:r.engine,name:r.label,leftPercent:e,level:`unknown`,value:e===null?`last reading`:`${s(e)} last`,summary:`${r.label}: last known usage · current usage unconfirmed`,detail:[`Recorded ${new Date(i.observedAt).toLocaleString()}`,`Historical reading; current availability and resets are unconfirmed.`,...i.windows.map(e=>`${e.id}: ${e.limitReached?`limit was flagged`:e.usedPercent===null?`usage unknown`:`${s(e.usedPercent)} used`}${e.resetsAt?` · recorded reset ${new Date(e.resetsAt).toLocaleString()}`:``}`)]});continue}let a=V[e.kind]??`unknown`,o=k(r),c=r.engine===`codex`&&r.credits!==null&&!r.lastReading&&!r.signedOut?r.creditSpendControlReached===!0?`credits held`:`credits`:a===`out`?e.kind===`spent`?`spent`:e.label.toLowerCase():o===null?t.pendingSeatIds?.includes(r.seatId)?`reading…`:e.kind===`unavailable`?`unavailable`:`no usage`:`${s(o)} left${r.lastReading?` · last`:``}`,l=r.windows.map(e=>{let t=e.limitReached?`limit reached`:e.usedPercent===null?`no reading`:`${s(e.usedPercent)} used`,n=e.resetText?e.resetText.replace(/^resets\s+/i,``):``;return`${e.label.charAt(0).toUpperCase()}${e.label.slice(1)}: ${t}${n?` · resets ${n}`:``}`});r.credits!==null&&!r.lastReading&&!r.signedOut&&l.push(r.credits,`Credit units are independent of subscription usage; autonomous credit spending is not admitted.`),r.engine===`codex`&&r.creditState===`none`&&l.push(`Native provider reports no available credits.`);let u=r.creditState===`none`||r.credits!==null?z(r.creditBalance,r.plan):null;u!==null&&l.push(`Estimated credit value ${u} · personal-plan $0.04/credit reference; not attributed spend.`),r.windows.length===0&&l.push(`Usage is not reported by this resource.`),r.lastReading&&l.push(`Last known usage · latest check failed.`),r.reserve&&l.push(r.reserve.label),e.usableAgain&&l.push(`Usable again ${e.usableAgain}`),e.checked&&l.push(`Checked ${e.checked}`),n.push({key:r.seatId,engine:r.engine,name:r.label,leftPercent:r.windows.some(e=>e.binding&&e.limitReached)||e.kind===`spent`?0:o,level:o===null&&a===`ok`?`unknown`:a,value:c,summary:`${r.label}: ${e.label}${e.detail?` · ${e.detail}`:``}`,detail:l})}return n}function U({left:e,level:t,vertical:n}){let r=e===null?t===`idle`?100:0:Math.max(e>0?6:0,e);return(0,M.jsxs)(`span`,{className:B.battery,"data-level":t,"data-unknown":e===null&&t!==`idle`||void 0,"data-vertical":n||void 0,"aria-hidden":`true`,children:[(0,M.jsx)(`span`,{className:B.cell,style:{"--fill":`${r}%`}}),(0,M.jsx)(`span`,{className:B.nub})]})}function re({row:e}){return(0,M.jsxs)(`div`,{className:B.tip,children:[(0,M.jsxs)(`div`,{className:B.tipHead,children:[(0,M.jsx)(o,{engine:e.engine,size:14}),(0,M.jsx)(`strong`,{children:e.name})]}),(0,M.jsx)(`div`,{className:B.tipSummary,children:e.summary.slice(e.name.length+2)}),e.detail.map(e=>(0,M.jsx)(`div`,{className:B.tipLine,children:e},e)),(0,M.jsx)(`div`,{className:B.tipHint,children:`Click for Resources · ⌘.`})]})}function W({expanded:e}){let t=b(),n=a(O),[r,i]=(0,A.useState)(()=>Date.now());ee(()=>i(Date.now()),x);let s=(0,A.useMemo)(()=>t.loading?[]:H(C(t.seats,{health:t.health,budget:t.budget,local:`collapse`,now:r}),{healthRead:t.health!==null,now:r,pendingSeatIds:t.pendingSeatIds}),[t.loading,t.seats,t.health,t.budget,t.pendingSeatIds,r]),c=n.data?.credits??null,l=c&&c.totalUsd>0?c.remainingUsd/c.totalUsd*100:null,u=c?c.remainingUsd<=0?`out`:(l??0)<20?`low`:`ok`:`unknown`,d=a(ne).data?.value??null,f=d!==null&&d.status.enabled&&d.status.connected,p=d&&d.budget.acuBudgetTotal>0?d.budget.acuRemaining/d.budget.acuBudgetTotal*100:null,m=d?d.budget.paused||d.budget.acuRemaining<=0?`out`:(p??0)<20?`low`:`ok`:`unknown`;return s.length===0&&!c&&!f?null:(0,M.jsxs)(`div`,{className:B.bar,"data-expanded":e||void 0,role:`group`,"aria-label":`Resources at a glance`,"aria-busy":t.refreshing||void 0,children:[s.map(t=>(0,M.jsx)(v,{content:(0,M.jsx)(re,{row:t}),placement:`right`,children:(0,M.jsx)(`button`,{type:`button`,className:B.row,"data-level":t.level,"aria-label":`${t.summary}. Open Resources`,onClick:()=>y(),children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:B.line,children:[(0,M.jsx)(o,{engine:t.engine,size:14,className:B.logo}),(0,M.jsx)(`span`,{className:B.name,children:t.name})]}),(0,M.jsxs)(`span`,{className:B.line,children:[(0,M.jsx)(U,{left:t.leftPercent,level:t.level,vertical:!1}),(0,M.jsx)(`span`,{className:B.value,children:t.value})]})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(o,{engine:t.engine,size:14,className:B.logo}),(0,M.jsx)(U,{left:t.leftPercent,level:t.level,vertical:!0})]})})},t.key)),c?(0,M.jsx)(v,{content:(0,M.jsxs)(`div`,{className:B.tip,children:[(0,M.jsxs)(`div`,{className:B.tipHead,children:[(0,M.jsx)(o,{engine:`claude`,size:14}),(0,M.jsx)(`strong`,{children:`Cloud estimate`})]}),(0,M.jsxs)(`div`,{className:B.tipSummary,children:[E(c.remainingUsd),` of `,E(c.totalUsd),` left · estimate`]}),(0,M.jsxs)(`div`,{className:B.tipLine,children:[c.running,` running · `,c.sessionsToday,` today`]}),(0,M.jsx)(`div`,{className:B.tipHint,children:`Click for Resources · ⌘.`})]}),placement:`right`,children:(0,M.jsx)(`button`,{type:`button`,className:B.row,"data-level":u,"aria-label":`Cloud estimate: about ${E(c.remainingUsd)} of ${E(c.totalUsd)} left. Open Resources`,onClick:()=>y(),children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:B.line,children:[(0,M.jsx)(`span`,{className:B.cloudLogo,children:(0,M.jsx)(o,{engine:`claude`,size:14,className:B.logo})}),(0,M.jsx)(`span`,{className:B.name,children:`Cloud estimate`})]}),(0,M.jsxs)(`span`,{className:B.line,children:[(0,M.jsx)(U,{left:l,level:u,vertical:!1}),(0,M.jsxs)(`span`,{className:B.value,children:[E(c.remainingUsd),` est.`]})]})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:B.cloudLogo,children:(0,M.jsx)(o,{engine:`claude`,size:14,className:B.logo})}),(0,M.jsx)(U,{left:l,level:u,vertical:!0})]})})}):null,f&&d?(0,M.jsx)(v,{content:(0,M.jsxs)(`div`,{className:B.tip,children:[(0,M.jsxs)(`div`,{className:B.tipHead,children:[(0,M.jsx)(o,{engine:`devin`,size:14,className:B.logo}),(0,M.jsx)(`strong`,{children:`Devin`})]}),(0,M.jsxs)(`div`,{className:B.tipSummary,children:[T(d.budget.acuRemaining),` of `,T(d.budget.acuBudgetTotal),` left · tracked budget`,d.budget.paused?` · paused`:``]}),(0,M.jsxs)(`div`,{className:B.tipLine,children:[d.budget.running,` running · `,d.budget.sessionsToday,` today`]}),(0,M.jsx)(`div`,{className:B.tipHint,children:`Click for Resources · ⌘.`})]}),placement:`right`,children:(0,M.jsx)(`button`,{type:`button`,className:B.row,"data-level":m,"data-resource":`devin`,"aria-label":`Devin tracked budget: ${T(d.budget.acuRemaining)} of ${T(d.budget.acuBudgetTotal)} left. Open Resources`,onClick:()=>y(),children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:B.line,children:[(0,M.jsx)(o,{engine:`devin`,size:14,className:B.logo}),(0,M.jsx)(`span`,{className:B.name,children:`Devin`})]}),(0,M.jsxs)(`span`,{className:B.line,children:[(0,M.jsx)(U,{left:p,level:m,vertical:!1}),(0,M.jsxs)(`span`,{className:B.value,children:[T(d.budget.acuRemaining),` budget`]})]})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(o,{engine:`devin`,size:14,className:B.logo}),(0,M.jsx)(U,{left:p,level:m,vertical:!0})]})})}):null]})}function ie(){let e=b({withBudget:!1}),t=e.health!==null,n=(0,A.useMemo)(()=>e.loading?null:D(C(e.seats,{health:e.health,local:`hide`}),{healthRead:t}),[e.loading,e.seats,e.health,t]);return(0,A.useEffect)(()=>{u(n)},[n]),null}var ae=e({ResourcesBar:()=>W,ResourcesChrome:()=>Q,ResourcesRailButton:()=>$,preloadResourcesDrawer:()=>q,resourcesDocked:()=>Z,runResourcesCommand:()=>Y}),G=()=>i(()=>import(`./ResourcesDrawer-BH9uwNE8.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33])),K=(0,A.lazy)(()=>G().then(e=>({default:e.ResourcesDrawer})));function q(){return G()}var J=()=>{G().catch(()=>void 0)};function Y(e){if(g().open&&(e===`key`||e===`button`)){d();return}_(),y()}function X(){let e=te(`resources.toggle`)?.keys[0];return e?l(e):void 0}function Z(e,t){return e.open&&e.pinned&&!t}function Q({compact:e}){let t=c(),{overlay:n}=p(),r=Z(t,e);return(0,A.useEffect)(()=>h(`resources.toggle`,e=>Y(e.via)),[]),(0,A.useEffect)(()=>h(`resources.bar.toggle`,()=>f(!g().bar)),[]),(0,A.useEffect)(()=>{n!==null&&!Z(g(),e)&&d()},[n,e]),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(ie,{}),r?(0,M.jsx)(`div`,{className:j.dock,"data-resources-dock":!0,children:(0,M.jsx)(A.Suspense,{fallback:null,children:(0,M.jsx)(K,{mode:`docked`})})}):null,t.open&&!r?(0,M.jsx)(A.Suspense,{fallback:null,children:(0,M.jsx)(K,{mode:`overlay`,compact:e})}):null,t.open?null:(0,M.jsx)(I,{summary:t.summary,shortcut:X(),onWarm:J,onOpen:()=>m(`resources.toggle`,{via:`button`})})]})}function $({expanded:e,buttonClass:t,iconClass:n,labelClass:r}){let i=c(),a=F(i.summary);return(0,M.jsx)(v,{label:a,shortcut:X(),placement:`right`,disabled:e,children:(0,M.jsxs)(`button`,{type:`button`,className:t,"aria-label":a,"aria-expanded":i.open,"data-resources-rail":!0,onPointerEnter:J,onClick:()=>m(`resources.toggle`,{via:`button`}),children:[(0,M.jsxs)(`span`,{className:n,children:[(0,M.jsx)(N,{}),(0,M.jsx)(P,{summary:i.summary,rail:!0})]}),e?(0,M.jsx)(`span`,{className:r,children:`Resources`}):null]})})}export{W as ResourcesBar,Q as ResourcesChrome,$ as ResourcesRailButton,z as i,R as n,q as preloadResourcesDrawer,L as r,Z as resourcesDocked,Y as runResourcesCommand,ae as t};
|
|
3
|
-
//# sourceMappingURL=ResourcesChrome-ByZE532G.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/resources/ResourcesHandle.tsx","../../../../../../src/web-ui/routes/verse/resources/codex-credit-value.ts","../../../../../../src/web-ui/routes/verse/resources/ResourcesBar.tsx","../../../../../../src/web-ui/routes/verse/resources/resources-summary.tsx","../../../../../../src/web-ui/routes/verse/resources/ResourcesChrome.tsx"],"sourcesContent":["/**\n * routes/verse/resources/ResourcesHandle.tsx — the slim tab on the right edge\n * of every surface that opens the Resources drawer, its icon and its status\n * dot (unit 3.11 C6).\n *\n * Part of the ResourcesChrome chunk, fetched right after first paint (like the\n * rail's capacity ring). Until the summary has read there is no dot — \"not\n * known\" is never drawn as \"fine\". The dot is a shape plus words in the\n * accessible name, never colour alone.\n */\nimport { Tooltip } from '../../../components/primitives/Tooltip.js';\nimport type { ResourcesSummary } from './resources-model.js';\nimport styles from './ResourcesChrome.module.css';\n\n/** Three stacked capacity bars: accounts, compute, credits. 16px, 1.5px stroke, like the shared set. */\nexport function ResourcesIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M2.75 4h10.5M2.75 8h10.5M2.75 12h10.5\" opacity=\".35\" />\n <path d=\"M2.75 4h7M2.75 8h4M2.75 12h8.5\" />\n </svg>\n );\n}\n\n/** `rail`: pinned to the corner of a rail icon, like the rail's own badges. */\nexport function ResourcesDot({ summary, rail = false }: { summary: ResourcesSummary | null; rail?: boolean }) {\n if (!summary || summary.tone === 'unknown') return null;\n const dot = <span className={styles.dot} data-tone={summary.tone} data-resources-dot={summary.tone} aria-hidden=\"true\" />;\n return rail ? <span className={styles.railDot}>{dot}</span> : dot;\n}\n\n/** \"Resources — 2 usable · 1 spent\": the tooltip and the accessible name. */\nexport function resourcesLabel(summary: ResourcesSummary | null): string {\n return summary ? `Resources — ${summary.spoken}` : 'Resources';\n}\n\nexport function ResourcesHandle({ summary, shortcut, onOpen, onWarm }: { summary: ResourcesSummary | null; shortcut: string | undefined; onOpen: () => void; onWarm?: () => void }) {\n return (\n <Tooltip label={resourcesLabel(summary)} shortcut={shortcut} placement=\"left\">\n <button type=\"button\" className={styles.handle} data-resources-handle aria-label={resourcesLabel(summary)} aria-haspopup=\"dialog\" onClick={onOpen} onPointerEnter={onWarm} onFocus={onWarm}>\n <ResourcesIcon />\n <ResourcesDot summary={summary} />\n </button>\n </Tooltip>\n );\n}\n","/** Published personal-plan equivalence, not invoice pricing or actual attributed spend. */\nexport const CODEX_CREDIT_VALUE_SOURCE = 'https://developers.openai.com/community/students';\nexport const CODEX_CREDIT_VALUE_CHECKED = '2026-10-01';\nexport function estimatedCreditValue(balance: unknown, plan: string | null): string | null {\n if (!['free', 'go', 'plus', 'pro'].includes(plan ?? '') || typeof balance !== 'string' || balance.length > 64 ||\n !/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/.test(balance)) return null;\n const [whole, fraction = ''] = balance.split('.');\n const denominator = 10n ** BigInt(fraction.length);\n // 2500 credits = $100: four cents/credit, rounded only at the displayed cent.\n const cents = (BigInt(whole! + fraction) * 4n + denominator / 2n) / denominator;\n return `$${(cents / 100n).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}.${(cents % 100n).toString().padStart(2, '0')}`;\n}\n","/**\n * routes/verse/resources/ResourcesBar.tsx — the always-on resource bar in the\n * rail foot (3.11.1).\n *\n * One row per resource the operator runs on — each paid account (provider\n * mark + a battery showing how much of its binding window is LEFT), the local\n * models, and the cloud credits — so capacity is visible on every surface\n * without opening anything. Hover (or keyboard focus) shows the detail: every\n * window with its reset, the reserve kept for Mason, the account's state.\n * Clicking a row opens the Resources drawer. The whole bar can be switched\n * off (\"Hide resource bar\" in ⌘K or the drawer), which brings back the rail's\n * single capacity ring.\n *\n * Loaded with the Resources chrome chunk, never on the chat first-paint path.\n * It reads the same app-wide seat + health caches the rail already keeps warm\n * plus the budget view (useCapacityData, as the drawer does) and the\n * drawer's cloud read, so it adds no poll of its own for accounts.\n */\nimport { estimatedCreditValue } from './codex-credit-value.js';\nimport { useMemo, useState, type CSSProperties } from 'react';\nimport { ProviderLogo } from '../../../components/primitives/ProviderLogo.js';\nimport { Tooltip } from '../../../components/primitives/Tooltip.js';\nimport { useQuery } from '../../../data/hooks.js';\nimport { usedPercentText } from '../percent-text.js';\nimport { historicalLeftPercent } from './resource-usage-history.js';\nimport { ACCOUNT_CLOCK_MS, useCapacityData } from '../usage/CapacityStrip.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { bindingLeftPercent } from '../usage/binding-left.js';\nimport { accountStatus, buildCapacityRows, type AccountStatus, type CapacityRow } from '../usage/capacity-strip-model.js';\nimport { formatUsd } from './resources-model.js';\nimport { cloudCreditsQuery } from './resources-queries.js';\nimport { formatAcu } from '../devin/devin-model.js';\nimport { devinQuery } from '../devin/devin-queries.js';\nimport { openResources } from './resources-store.js';\nimport styles from './ResourcesBar.module.css';\n\ntype Level = 'ok' | 'low' | 'out' | 'idle' | 'unknown';\n\nexport interface BarRow {\n key: string;\n engine: 'claude' | 'codex' | 'grok' | 'local' | 'devin';\n name: string;\n /** 0–100 left in the binding window; null when there is no reading. */\n leftPercent: number | null;\n level: Level;\n /** Short value beside the battery in the labelled rail: \"72%\", \"spent\", \"ready\". */\n value: string;\n /** Spoken + hover summary. */\n summary: string;\n detail: string[];\n}\n\nconst LEVEL_OF_STATUS: Readonly<Record<AccountStatus['kind'], Level>> = {\n usable: 'ok',\n low: 'low',\n spent: 'out',\n 'signed-out': 'out',\n unavailable: 'unknown',\n checking: 'unknown',\n 'not-checked': 'unknown',\n};\n\n/** Pure: capacity rows → bar rows (exported for tests). */\nexport function barRows(rows: readonly CapacityRow[], opts: { healthRead: boolean; now: number; pendingSeatIds?: readonly string[] }): BarRow[] {\n const out: BarRow[] = [];\n for (const row of rows) {\n if (row.kind === 'local') {\n out.push({\n key: 'local',\n engine: 'local',\n name: row.localCount > 1 ? `Local models (${row.localCount})` : 'Local model',\n leftPercent: null,\n // An unread runtime is not \"ready\": the battery must say what the\n // hover summary does (\"readiness not reported\"), as Command's strip does.\n level: row.cls === 'blocked' ? 'out' : row.cls === 'unread' ? 'unknown' : 'idle',\n value: row.cls === 'blocked' ? 'offline' : row.cls === 'unread' ? 'not reported' : 'ready',\n summary: `${row.label}: ${row.summary}`,\n detail: ['No metered usage — runs on this Mac.', ...row.notes],\n });\n continue;\n }\n const status = accountStatus(row, { healthRead: opts.healthRead, now: opts.now });\n const history = row.windows.length === 0 && !row.signedOut ? row.historicalUsage : null;\n if (history) {\n const recordedLeft = historicalLeftPercent(history);\n out.push({ key: row.seatId, engine: row.engine, name: row.label, leftPercent: recordedLeft, level: 'unknown',\n value: recordedLeft === null ? 'last reading' : `${usedPercentText(recordedLeft)} last`,\n summary: `${row.label}: last known usage · current usage unconfirmed`,\n detail: [`Recorded ${new Date(history.observedAt).toLocaleString()}`, 'Historical reading; current availability and resets are unconfirmed.',\n ...history.windows.map(window => `${window.id}: ${window.limitReached ? 'limit was flagged' : window.usedPercent === null ? 'usage unknown' : `${usedPercentText(window.usedPercent)} used`}${window.resetsAt ? ` · recorded reset ${new Date(window.resetsAt).toLocaleString()}` : ''}`)],\n });\n continue;\n }\n const level = LEVEL_OF_STATUS[status.kind] ?? 'unknown';\n const left = bindingLeftPercent(row);\n const value = row.engine === 'codex' && row.credits !== null && !row.lastReading && !row.signedOut ? (row.creditSpendControlReached === true ? 'credits held' : 'credits') : level === 'out' ? (status.kind === 'spent' ? 'spent' : status.label.toLowerCase())\n : left === null ? (opts.pendingSeatIds?.includes(row.seatId) ? 'reading…' : status.kind === 'unavailable' ? 'unavailable' : 'no usage') : `${usedPercentText(left)} left${row.lastReading ? ' · last' : ''}`;\n const detail = row.windows.map((w) => {\n const used = w.limitReached ? 'limit reached' : w.usedPercent === null ? 'no reading' : `${usedPercentText(w.usedPercent)} used`;\n // The accounts model already words it \"resets Fri 2:25 PM\"; don't say it twice.\n const reset = w.resetText ? w.resetText.replace(/^resets\\s+/i, '') : '';\n return `${w.label.charAt(0).toUpperCase()}${w.label.slice(1)}: ${used}${reset ? ` · resets ${reset}` : ''}`;\n });\n if (row.credits !== null && !row.lastReading && !row.signedOut) detail.push(row.credits, 'Credit units are independent of subscription usage; autonomous credit spending is not admitted.');\n if (row.engine === 'codex' && row.creditState === 'none') detail.push('Native provider reports no available credits.');\n const creditValue = row.creditState === 'none' || row.credits !== null ? estimatedCreditValue(row.creditBalance, row.plan) : null;\n if (creditValue !== null) detail.push(`Estimated credit value ${creditValue} · personal-plan $0.04/credit reference; not attributed spend.`);\n if (row.windows.length === 0) detail.push('Usage is not reported by this resource.');\n if (row.lastReading) detail.push('Last known usage · latest check failed.');\n if (row.reserve) detail.push(row.reserve.label);\n if (status.usableAgain) detail.push(`Usable again ${status.usableAgain}`);\n if (status.checked) detail.push(`Checked ${status.checked}`);\n out.push({\n key: row.seatId,\n engine: row.engine,\n name: row.label,\n leftPercent: row.windows.some((w) => w.binding && w.limitReached) || status.kind === 'spent' ? 0 : left,\n level: left === null && level === 'ok' ? 'unknown' : level,\n value,\n summary: `${row.label}: ${status.label}${status.detail ? ` · ${status.detail}` : ''}`,\n detail,\n });\n }\n // Keep roster order: a new reading must never move the resource under a pointer.\n return out;\n}\n\nfunction Battery({ left, level, vertical }: { left: number | null; level: Level; vertical: boolean }) {\n const fill = left === null ? (level === 'idle' ? 100 : 0) : Math.max(left > 0 ? 6 : 0, left);\n return (\n <span className={styles.battery} data-level={level} data-unknown={left === null && level !== 'idle' || undefined} data-vertical={vertical || undefined} aria-hidden=\"true\">\n <span className={styles.cell} style={{ '--fill': `${fill}%` } as CSSProperties} />\n <span className={styles.nub} />\n </span>\n );\n}\n\nfunction RowTip({ row }: { row: BarRow }) {\n return (\n <div className={styles.tip}>\n <div className={styles.tipHead}>\n <ProviderLogo engine={row.engine} size={14} />\n <strong>{row.name}</strong>\n </div>\n <div className={styles.tipSummary}>{row.summary.slice(row.name.length + 2)}</div>\n {row.detail.map((line) => (\n <div key={line} className={styles.tipLine}>{line}</div>\n ))}\n <div className={styles.tipHint}>Click for Resources · ⌘.</div>\n </div>\n );\n}\n\nexport function ResourcesBar({ expanded }: { expanded: boolean }) {\n // With the budget view, like the drawer: for seats like Claude and Grok the\n // window readings arrive through it, so without it the batteries read empty.\n const data = useCapacityData();\n const cloudRead = useQuery(cloudCreditsQuery);\n const [now, setNow] = useState(() => Date.now());\n // One shared local clock expires display metadata; it makes no provider request.\n usePollWhileVisible(() => setNow(Date.now()), ACCOUNT_CLOCK_MS);\n const rows = useMemo(\n () => (data.loading ? [] : barRows(buildCapacityRows(data.seats, { health: data.health, budget: data.budget, local: 'collapse', now }), { healthRead: data.health !== null, now, pendingSeatIds: data.pendingSeatIds })),\n [data.loading, data.seats, data.health, data.budget, data.pendingSeatIds, now],\n );\n const cloud = cloudRead.data?.credits ?? null;\n const cloudLeft = cloud && cloud.totalUsd > 0 ? (cloud.remainingUsd / cloud.totalUsd) * 100 : null;\n const cloudLevel: Level = !cloud ? 'unknown' : cloud.remainingUsd <= 0 ? 'out' : (cloudLeft ?? 0) < 20 ? 'low' : 'ok';\n // 3.15: Devin joins the bar only once it is connected and turned on.\n const devinRead = useQuery(devinQuery);\n const devin = devinRead.data?.value ?? null;\n const devinShown = devin !== null && devin.status.enabled && devin.status.connected;\n const devinLeft = devin && devin.budget.acuBudgetTotal > 0 ? (devin.budget.acuRemaining / devin.budget.acuBudgetTotal) * 100 : null;\n const devinLevel: Level = !devin ? 'unknown' : devin.budget.paused || devin.budget.acuRemaining <= 0 ? 'out' : (devinLeft ?? 0) < 20 ? 'low' : 'ok';\n\n if (rows.length === 0 && !cloud && !devinShown) return null;\n return (\n <div className={styles.bar} data-expanded={expanded || undefined} role=\"group\" aria-label=\"Resources at a glance\" aria-busy={data.refreshing || undefined}>\n {rows.map((row) => (\n <Tooltip key={row.key} content={<RowTip row={row} />} placement=\"right\">\n <button\n type=\"button\"\n className={styles.row}\n data-level={row.level}\n aria-label={`${row.summary}. Open Resources`}\n onClick={() => openResources()}\n >\n {expanded ? (\n <>\n <span className={styles.line}>\n <ProviderLogo engine={row.engine} size={14} className={styles.logo} />\n <span className={styles.name}>{row.name}</span>\n </span>\n <span className={styles.line}>\n <Battery left={row.leftPercent} level={row.level} vertical={false} />\n <span className={styles.value}>{row.value}</span>\n </span>\n </>\n ) : (\n <>\n <ProviderLogo engine={row.engine} size={14} className={styles.logo} />\n <Battery left={row.leftPercent} level={row.level} vertical />\n </>\n )}\n </button>\n </Tooltip>\n ))}\n {cloud ? (\n <Tooltip\n content={\n <div className={styles.tip}>\n <div className={styles.tipHead}><ProviderLogo engine=\"claude\" size={14} /><strong>Cloud estimate</strong></div>\n <div className={styles.tipSummary}>{formatUsd(cloud.remainingUsd)} of {formatUsd(cloud.totalUsd)} left · estimate</div>\n <div className={styles.tipLine}>{cloud.running} running · {cloud.sessionsToday} today</div>\n <div className={styles.tipHint}>Click for Resources · ⌘.</div>\n </div>\n }\n placement=\"right\"\n >\n <button\n type=\"button\"\n className={styles.row}\n data-level={cloudLevel}\n aria-label={`Cloud estimate: about ${formatUsd(cloud.remainingUsd)} of ${formatUsd(cloud.totalUsd)} left. Open Resources`}\n onClick={() => openResources()}\n >\n {expanded ? (\n <>\n <span className={styles.line}>\n <span className={styles.cloudLogo}><ProviderLogo engine=\"claude\" size={14} className={styles.logo} /></span>\n <span className={styles.name}>Cloud estimate</span>\n </span>\n <span className={styles.line}>\n <Battery left={cloudLeft} level={cloudLevel} vertical={false} />\n <span className={styles.value}>{formatUsd(cloud.remainingUsd)} est.</span>\n </span>\n </>\n ) : (\n <>\n <span className={styles.cloudLogo}><ProviderLogo engine=\"claude\" size={14} className={styles.logo} /></span>\n <Battery left={cloudLeft} level={cloudLevel} vertical />\n </>\n )}\n </button>\n </Tooltip>\n ) : null}\n {devinShown && devin ? (\n <Tooltip\n content={\n <div className={styles.tip}>\n <div className={styles.tipHead}><ProviderLogo engine=\"devin\" size={14} className={styles.logo} /><strong>Devin</strong></div>\n <div className={styles.tipSummary}>{formatAcu(devin.budget.acuRemaining)} of {formatAcu(devin.budget.acuBudgetTotal)} left · tracked budget{devin.budget.paused ? ' · paused' : ''}</div>\n <div className={styles.tipLine}>{devin.budget.running} running · {devin.budget.sessionsToday} today</div>\n <div className={styles.tipHint}>Click for Resources · ⌘.</div>\n </div>\n }\n placement=\"right\"\n >\n <button\n type=\"button\"\n className={styles.row}\n data-level={devinLevel}\n data-resource=\"devin\"\n aria-label={`Devin tracked budget: ${formatAcu(devin.budget.acuRemaining)} of ${formatAcu(devin.budget.acuBudgetTotal)} left. Open Resources`}\n onClick={() => openResources()}\n >\n {expanded ? (\n <>\n <span className={styles.line}>\n <ProviderLogo engine=\"devin\" size={14} className={styles.logo} />\n <span className={styles.name}>Devin</span>\n </span>\n <span className={styles.line}>\n <Battery left={devinLeft} level={devinLevel} vertical={false} />\n <span className={styles.value}>{formatAcu(devin.budget.acuRemaining)} budget</span>\n </span>\n </>\n ) : (\n <>\n <ProviderLogo engine=\"devin\" size={14} className={styles.logo} />\n <Battery left={devinLeft} level={devinLevel} vertical />\n </>\n )}\n </button>\n </Tooltip>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/resources/resources-summary.tsx — the edge handle's dot,\n * loaded after first paint (unit 3.11 C6).\n *\n * Mounted by the shell once, renders nothing, and publishes one tone and one\n * sentence to resources-store for the handle and the rail button. It reads the\n * same app-wide seat + health caches as the rail's capacity ring\n * (useCapacityData, budget OFF), so it adds no request of its own and keeps\n * no poll alive that the rail does not already keep — the cheap summary the\n * handle needs, never the drawer's heavier reads.\n */\nimport { useEffect, useMemo } from 'react';\nimport { useCapacityData } from '../usage/CapacityStrip.js';\nimport { buildCapacityRows } from '../usage/capacity-strip-model.js';\nimport { summarizeResources } from './resources-model.js';\nimport { setResourcesSummary } from './resources-store.js';\n\nexport function ResourcesSummaryProbe() {\n const data = useCapacityData({ withBudget: false });\n const healthRead = data.health !== null;\n const summary = useMemo(\n () => (data.loading ? null : summarizeResources(buildCapacityRows(data.seats, { health: data.health, local: 'hide' }), { healthRead })),\n [data.loading, data.seats, data.health, healthRead],\n );\n useEffect(() => {\n setResourcesSummary(summary);\n }, [summary]);\n return null;\n}\n","/**\n * routes/verse/resources/ResourcesChrome.tsx — everything the Resources\n * drawer puts on every surface, as ONE chunk fetched right after first paint\n * (unit 3.11 C6):\n *\n * ResourcesChrome the edge tab on the right, the summary behind its\n * dot, the ⌘. / palette command, and the drawer itself\n * (overlay, or the docked column when pinned);\n * ResourcesRailButton the rail-foot button with the same dot.\n *\n * WHY A CHUNK. Chat first paint has ~3 KB of budget left (SPEC-310A §1;\n * `npm run check:first-paint`), and nothing here can draw anything useful\n * before the seat reads answer anyway. The shell keeps only the tiny store\n * static — it must know at first paint whether a pinned column takes a grid\n * track, so the surface never jumps — and mounts this module's two\n * components lazily, like the rail's capacity ring. The drawer body is a\n * further chunk still, mounted only while open (so it polls only while open)\n * and warmed on idle / on hover.\n */\nimport { Suspense, lazy, useEffect } from 'react';\nimport { Tooltip } from '../../../components/primitives/Tooltip.js';\nimport { findCommand, formatChord } from '../shell/command-catalog.js';\nimport { registerCommandHandler } from '../shell/command-bus.js';\nimport { executeCatalogCommand } from '../shell/run-command.js';\nimport { useVerseUi } from '../useVerseUi.js';\nimport { closeVerseOverlay } from '../verse-ui-store.js';\nimport { ResourcesDot, ResourcesHandle, ResourcesIcon, resourcesLabel } from './ResourcesHandle.js';\nimport { closeResources, getResourcesUi, openResources, setResourcesBar, useResourcesUi } from './resources-store.js';\nexport { ResourcesBar } from './ResourcesBar.js';\nimport { ResourcesSummaryProbe } from './resources-summary.js';\nimport styles from './ResourcesChrome.module.css';\n\nconst importDrawer = () => import('./ResourcesDrawer.js');\nconst ResourcesDrawer = lazy(() => importDrawer().then((m) => ({ default: m.ResourcesDrawer })));\n\n/** Fetch the drawer's chunk ahead of the first open (the shell's idle warm-up, a hover). */\nexport function preloadResourcesDrawer(): Promise<unknown> {\n return importDrawer();\n}\n\nconst warm = () => {\n void importDrawer().catch(() => undefined);\n};\n\n/** The key and the buttons toggle; the palette (\"Open Resources\") and the desktop menu open. */\nexport function runResourcesCommand(via: string | undefined): void {\n if (getResourcesUi().open && (via === 'key' || via === 'button')) {\n closeResources();\n return;\n }\n // One overlay at a time: the drawer replaces ⌘K / ⌘J / ⌘/.\n closeVerseOverlay();\n openResources();\n}\n\nfunction shortcutText(): string | undefined {\n const chord = findCommand('resources.toggle')?.keys[0];\n return chord ? formatChord(chord) : undefined;\n}\n\n/** Pinned docks beside the surface; a phone-width window has no room, so it floats there. */\nexport function resourcesDocked(state: { open: boolean; pinned: boolean }, compact: boolean): boolean {\n return state.open && state.pinned && !compact;\n}\n\nexport function ResourcesChrome({ compact }: { compact: boolean }) {\n const resources = useResourcesUi();\n const { overlay } = useVerseUi();\n const docked = resourcesDocked(resources, compact);\n\n useEffect(() => registerCommandHandler('resources.toggle', (inv) => runResourcesCommand(inv.via)), []);\n useEffect(() => registerCommandHandler('resources.bar.toggle', () => setResourcesBar(!getResourcesUi().bar)), []);\n // Another overlay (⌘K, ⌘J, ⌘/) replaces a FLOATING drawer; a pinned one stays docked.\n useEffect(() => {\n if (overlay !== null && !resourcesDocked(getResourcesUi(), compact)) closeResources();\n }, [overlay, compact]);\n\n return (\n <>\n <ResourcesSummaryProbe />\n {docked ? (\n <div className={styles.dock} data-resources-dock>\n <Suspense fallback={null}>\n <ResourcesDrawer mode=\"docked\" />\n </Suspense>\n </div>\n ) : null}\n {resources.open && !docked ? (\n <Suspense fallback={null}>\n <ResourcesDrawer mode=\"overlay\" compact={compact} />\n </Suspense>\n ) : null}\n {resources.open ? null : (\n <ResourcesHandle summary={resources.summary} shortcut={shortcutText()} onWarm={warm} onOpen={() => executeCatalogCommand('resources.toggle', { via: 'button' })} />\n )}\n </>\n );\n}\n\n/**\n * The rail-foot button. The shell passes its own rail classes so the button\n * is indistinguishable from its neighbours (no tooltip while the rail's\n * labelled mode already shows the name).\n */\nexport function ResourcesRailButton({ expanded, buttonClass, iconClass, labelClass }: {\n expanded: boolean;\n buttonClass: string | undefined;\n iconClass: string | undefined;\n labelClass: string | undefined;\n}) {\n const resources = useResourcesUi();\n const label = resourcesLabel(resources.summary);\n return (\n <Tooltip label={label} shortcut={shortcutText()} placement=\"right\" disabled={expanded}>\n <button\n type=\"button\"\n className={buttonClass}\n aria-label={label}\n aria-expanded={resources.open}\n data-resources-rail\n onPointerEnter={warm}\n onClick={() => executeCatalogCommand('resources.toggle', { via: 'button' })}\n >\n <span className={iconClass}>\n <ResourcesIcon />\n <ResourcesDot summary={resources.summary} rail />\n </span>\n {expanded ? <span className={labelClass}>Resources</span> : null}\n </button>\n </Tooltip>\n );\n}\n"],"file":"ResourcesChrome-ByZE532G.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
._handle_1pzoz_6{z-index:var(--z-sticky);justify-content:center;align-items:center;gap:var(--space-1);border:1px solid var(--border-default);border-radius:var(--radius-md) 0 0 var(--radius-md);background:var(--bg-surface);width:24px;height:64px;box-shadow:var(--shadow-sm);color:var(--text-secondary);cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard), background-color var(--duration-fast) var(--ease-standard);border-right:0;flex-direction:column;padding:0;display:flex;position:fixed;top:50%;right:0;transform:translate(4px,-50%)}._handle_1pzoz_6:hover,._handle_1pzoz_6:focus-visible{background:var(--bg-surface-raised);color:var(--text-primary);transform:translateY(-50%)}._handle_1pzoz_6:focus-visible{box-shadow:var(--shadow-focus-ring);outline:none}._dot_1pzoz_47{border-radius:var(--radius-full);width:7px;height:7px;box-shadow:0 0 0 2px var(--bg-surface);background:var(--status-success-solid);flex:none;display:block}._dot_1pzoz_47[data-tone=tight]{border:2px solid var(--status-warning-solid);background:0 0}._dot_1pzoz_47[data-tone=alert]{background:var(--status-danger-solid);border-radius:1px;transform:rotate(45deg)scale(.9)}._railDot_1pzoz_67{position:absolute;top:-3px;right:-3px}._railDot_1pzoz_67 ._dot_1pzoz_47{box-shadow:0 0 0 2px var(--bg-canvas)}@media (prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._handle_1pzoz_6{transition:none}}:root[data-motion=reduce] ._handle_1pzoz_6{transition:none}@media print{._handle_1pzoz_6{display:none}}._dock_1pzoz_84{background:var(--bg-surface);grid-area:1/3;min-width:0;min-height:0;display:flex}._bar_13kxv_5{padding:var(--space-1) 0;margin:var(--space-1) 0;border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);flex-direction:column;gap:2px;display:flex}._row_13kxv_15{width:calc(var(--control-h) + var(--space-1));border-radius:var(--radius-sm);min-height:26px;color:var(--text-secondary);transition:background var(--duration-fast) var(--ease-standard);justify-content:center;align-items:center;gap:6px;padding:3px 0;display:flex}._row_13kxv_15:hover{background:var(--bg-hover);color:var(--text-primary)}._row_13kxv_15:focus-visible{outline:2px solid var(--focus-ring,var(--accent-500));outline-offset:1px}._bar_13kxv_5:not([data-expanded]) ._row_13kxv_15{flex-direction:column;gap:3px}._bar_13kxv_5[data-expanded] ._row_13kxv_15{width:100%;padding:5px var(--space-2);flex-direction:column;align-items:stretch;gap:3px}._line_13kxv_40{align-items:center;gap:6px;min-width:0;display:flex}._bar_13kxv_5[data-expanded] ._battery_13kxv_41{flex:auto}._bar_13kxv_5[data-expanded] ._cell_13kxv_42{flex:auto;width:auto;min-width:40px}._logo_13kxv_44{flex:none}._cloudLogo_13kxv_45{display:inline-flex;position:relative}._cloudLogo_13kxv_45:after{content:"";background:var(--accent-500);width:6px;height:6px;box-shadow:0 0 0 1.5px var(--bg-surface);border-radius:50%;position:absolute;bottom:-2px;right:-3px}._name_13kxv_58{text-align:left;overflow-wrap:anywhere;min-width:0;line-height:1.25;font-size:var(--text-xs-size,12px);flex:auto}._value_13kxv_67{text-align:right;white-space:nowrap;font-size:var(--text-2xs-size,11px);font-variant-numeric:tabular-nums;color:var(--text-secondary);flex:none}._row_13kxv_15[data-level=out] ._value_13kxv_67{color:var(--status-danger-fg)}._row_13kxv_15[data-level=low] ._value_13kxv_67{color:var(--status-warning-fg)}._battery_13kxv_41{--level:var(--status-success-fg);flex:none;align-items:center;gap:1px;display:inline-flex}._battery_13kxv_41[data-level=low]{--level:var(--status-warning-fg)}._battery_13kxv_41[data-level=out]{--level:var(--status-danger-fg)}._battery_13kxv_41[data-level=unknown]{--level:var(--text-tertiary)}._battery_13kxv_41[data-level=idle]{--level:var(--status-success-fg)}._cell_13kxv_42{border:1px solid color-mix(in srgb, var(--level) 55%, var(--border-strong,var(--border-subtle)));background:var(--bg-surface);border-radius:3px;width:26px;height:9px;position:relative;overflow:hidden}._cell_13kxv_42:before{content:"";width:max(0px, calc(var(--fill,0%) - 2px));background:var(--level);transition:width var(--duration-medium,.24s) var(--ease-standard);border-radius:1.5px;position:absolute;inset:1px auto 1px 1px}._nub_13kxv_109{background:color-mix(in srgb, var(--level) 55%, var(--border-strong,var(--border-subtle)));border-radius:0 1px 1px 0;width:2px;height:4px}._battery_13kxv_41[data-level=idle] ._cell_13kxv_42:before{opacity:.55}._battery_13kxv_41[data-vertical]{flex-direction:column-reverse;gap:1px}._battery_13kxv_41[data-vertical] ._cell_13kxv_42{width:9px;height:16px}._battery_13kxv_41[data-vertical] ._cell_13kxv_42:before{width:auto;height:max(0px, calc(var(--fill,0%) - 2px));transition:height var(--duration-medium,.24s) var(--ease-standard);inset:auto 1px 1px}._battery_13kxv_41[data-vertical] ._nub_13kxv_109{border-radius:1px 1px 0 0;width:4px;height:2px}@media (prefers-reduced-motion:reduce){._cell_13kxv_42:before{transition:none}}._tip_13kxv_133{flex-direction:column;gap:3px;max-width:280px;display:flex}._tipHead_13kxv_134{align-items:center;gap:6px;display:flex}._tipSummary_13kxv_135{color:var(--text-primary)}._tipLine_13kxv_136{color:var(--text-secondary);font-size:var(--text-2xs-size,11px)}._tipHint_13kxv_137{color:var(--text-tertiary);font-size:var(--text-2xs-size,11px);margin-top:2px}._battery_13kxv_41[data-unknown] ._cell_13kxv_42{background:repeating-linear-gradient(135deg, transparent 0 3px, color-mix(in srgb, var(--text-tertiary) 18%, transparent) 3px 5px);border-style:dashed}._battery_13kxv_41[data-unknown] ._cell_13kxv_42:before{display:none}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EvidenceTimeline-hAENJQCa.js","assets/StatusBadge-DrVbi5dF.js","assets/Sheet-DLlZ00Lu.js","assets/global-1SED_aTT.css","assets/StatusBadge-BVi0IBb9.css","assets/Button-DrnKsvnQ.css","assets/Sheet-ChxlNivX.css","assets/EvidenceTimeline-PBDAiSuG.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,o as n,s as r,t as i}from"./index-DOAOxiKl.js";import{d as a,l as o,u as s}from"./global-BJ_kVFpD.js";import{t as c}from"./focus-trap-B1vuEhZX.js";import{t as l}from"./MutationTokenDialog-Dnf_rcnc.js";import{t as u}from"./percent-text-CSk89zQF.js";import{Ct as d,Ht as f,R as p,_t as m,bt as h,wt as g,xt as _}from"./VerseConsoleApp-Cj6yPJo3.js";import{R as v,j as y,z as ee}from"./VerseShared-CH8mV5ew.js";import{I as te,L as b,N as x,P as ne,R as re,o as S,z as ie}from"./verse-model-DAOz9LrY.js";import{y as C}from"./format-V6IiIMAL.js";import{a as w,i as ae,t as oe}from"./CapacityStrip-B5Yj2PhZ.js";import{n as se}from"./budget-queries-DCZevH2S.js";import{a as ce,i as le,r as ue}from"./health-queries-CMxSsJKS.js";import{t as de}from"./useSeatsRefresh-BIAa7Exn.js";import{i as fe,n as pe,r as me,t as T,u as E}from"./capacity-strip-model-Wna9o0dS.js";import{n as D,t as O}from"./Button-DJY_Pu5B.js";import{T as he,l as k,n as ge,s as _e,y as ve}from"./icons-MYfI6vZr.js";import{a as ye}from"./command-catalog-Dnx-iMLX.js";import{n as be,t as A}from"./use-token-gate-E-xzEAu6.js";import{a as xe,h as Se,r as Ce}from"./cloud-model-CzKeuxfm.js";import{u as we}from"./surface-data-D_oFOgkh.js";import{a as j,c as M,f as N,i as P,l as F,n as I,o as Te,p as Ee,s as L,t as De,u as R}from"./devin-queries-Cu_YYhw2.js";import{t as z}from"./use-ticker-Bsu0cMvl.js";import{a as B,i as Oe}from"./fleet-queries-DX1AwHEt.js";import{a as V,c as ke,d as H,f as U,i as Ae,l as je,n as W,o as Me,p as Ne,r as G,s as Pe,t as K,u as q}from"./resources-queries-T6ER_hPN.js";import{t as Fe}from"./local-model-C9xNi9fN.js";import{t as Ie}from"./Input-Bt6fp051.js";import{a as Le,s as Re}from"./usage-queries-BONqdout.js";import{t as ze}from"./clipboard-DkZdqlxf.js";import{i as Be,n as Ve,r as He}from"./ResourcesChrome-ByZE532G.js";import"./guarded-action-CzvG7Qgc.js";import{a as Ue,d as We,f as Ge,i as Ke,l as qe,n as Je,o as Ye,t as Xe,u as Ze}from"./jev-queries-CS2A5uWe.js";import{t as Qe}from"./apps-model-C-SdWY0N.js";import{n as $e,r as et}from"./SchedulingEvidence-B08-qhhm.js";var J=e(r(),1),tt=e(n(),1),Y={backdrop:`_backdrop_1aint_8`,fade:`_fade_1aint_1`,panel:`_panel_1aint_18`,slide:`_slide_1aint_1`,head:`_head_1aint_49`,headText:`_headText_1aint_60`,title:`_title_1aint_67`,headline:`_headline_1aint_76`,headActions:`_headActions_1aint_83`,body:`_body_1aint_92`,group:`_group_1aint_100`,groupTitle:`_groupTitle_1aint_102`,cards:`_cards_1aint_113`,card:`_card_1aint_113`,cardHead:`_cardHead_1aint_138`,cardName:`_cardName_1aint_145`,plan:`_plan_1aint_157`,groupBlurb:`_groupBlurb_1aint_165`,facts:`_facts_1aint_172`,tierChip:`_tierChip_1aint_190`,status:`_status_1aint_199`,statusDot:`_statusDot_1aint_214`,statusLabel:`_statusLabel_1aint_226`,statusDetail:`_statusDetail_1aint_231`,stamp:`_stamp_1aint_233`,subtle:`_subtle_1aint_234`,fine:`_fine_1aint_235`,reserveLine:`_reserveLine_1aint_236`,meters:`_meters_1aint_248`,meter:`_meter_1aint_248`,meterLabel:`_meterLabel_1aint_270`,meterTrack:`_meterTrack_1aint_277`,meterFill:`_meterFill_1aint_291`,meterReserve:`_meterReserve_1aint_300`,meterTick:`_meterTick_1aint_310`,meterValue:`_meterValue_1aint_318`,meterReset:`_meterReset_1aint_327`,cardActions:`_cardActions_1aint_335`,note:`_note_1aint_342`,pill:`_pill_1aint_350`,runtime:`_runtime_1aint_368`,runtimeHead:`_runtimeHead_1aint_377`,runtimeName:`_runtimeName_1aint_385`,models:`_models_1aint_387`,model:`_model_1aint_387`,modelName:`_modelName_1aint_407`,modelDetail:`_modelDetail_1aint_414`,modelFacts:`_modelFacts_1aint_420`,creditsHead:`_creditsHead_1aint_432`,creditsAmount:`_creditsAmount_1aint_440`,external:`_external_1aint_450`,devinWaitingList:`_devinWaitingList_1aint_468`,devinWaiting:`_devinWaiting_1aint_468`,devinReply:`_devinReply_1aint_486`,foot:`_foot_1aint_495`,linkButton:`_linkButton_1aint_502`,visuallyHidden:`_visuallyHidden_1aint_517`,readiness:`_readiness_1aint_534`,readyLine:`_readyLine_1aint_543`,readyKey:`_readyKey_1aint_559`,readyBody:`_readyBody_1aint_567`,readyHead:`_readyHead_1aint_568`,readyWord:`_readyWord_1aint_569`,readyDetail:`_readyDetail_1aint_571`,readyReading:`_readyReading_1aint_573`,fixBlock:`_fixBlock_1aint_580`,fixLabel:`_fixLabel_1aint_581`,fixCommand:`_fixCommand_1aint_583`,fixCode:`_fixCode_1aint_593`,fixCopy:`_fixCopy_1aint_606`,runtimes:`_runtimes_1aint_625`,runtimeRow:`_runtimeRow_1aint_634`,runtimeRowName:`_runtimeRowName_1aint_649`,runtimeRowDetail:`_runtimeRowDetail_1aint_650`,modelRuntime:`_modelRuntime_1aint_651`,usageDetails:`_usageDetails_1aint_668`,usageDetailBody:`_usageDetailBody_1aint_671`,schedulingEvidence:`_schedulingEvidence_1aint_672`},X=t(),nt={ok:`success`,warn:`warning`,blocked:`danger`,off:`neutral`};function rt(e){let{fleet:t}=e;return t.ready&&t.reservePercent!==null&&t.reservePercent>0?`${t.word} · reserve ${Math.round(t.reservePercent)}% kept for you`:t.word}function it(e){let{reading:t}=e;if(t.state===`live`||e.kind!==`subscription`)return null;let n=t.at?S(t.at):``,r=t.state===`last`&&n?`Last reading ${n}`:`No current reading`;return t.note?`${r} · ${t.note}`:r}function at({label:e,verdict:t,word:n}){let r=nt[t.tone],i=t.detail?`${e}: ${n} — ${t.detail}`:`${e}: ${n}`;return(0,X.jsxs)(`div`,{className:Y.readyLine,"data-tone":r,"data-ready":t.ready||void 0,title:i,children:[(0,X.jsx)(`span`,{className:Y.readyKey,children:e}),(0,X.jsxs)(`span`,{className:Y.readyBody,children:[(0,X.jsxs)(`span`,{className:Y.readyHead,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.readyWord,children:n})]}),t.detail?(0,X.jsx)(`span`,{className:Y.readyDetail,children:t.detail}):null]})]})}function ot({fix:e}){let[t,n]=(0,J.useState)(`idle`);(0,J.useEffect)(()=>{if(t===`idle`)return;let e=window.setTimeout(()=>n(`idle`),2e3);return()=>window.clearTimeout(e)},[t]);let r=e.command??``;return(0,X.jsxs)(`div`,{className:Y.fixBlock,children:[(0,X.jsxs)(`p`,{className:Y.fixLabel,children:[e.label,` — run in Terminal`]}),(0,X.jsxs)(`div`,{className:Y.fixCommand,children:[(0,X.jsx)(`code`,{className:Y.fixCode,title:r,children:r}),(0,X.jsxs)(`button`,{type:`button`,className:Y.fixCopy,"aria-label":t===`done`?`Copied`:`Copy command: ${e.label}`,onClick:()=>{ze(r).then(e=>n(e?`done`:`failed`))},children:[t===`done`?(0,X.jsx)(ge,{}):(0,X.jsx)(_e,{}),(0,X.jsx)(`span`,{children:t===`done`?`Copied`:t===`failed`?`Copy failed`:`Copy`})]})]})]})}function st(e){let t=[];for(let n of[e.chat.fix,e.fleet.fix])n&&(t.some(e=>e.kind===n.kind&&e.command===n.command&&e.seatId===n.seatId)||t.push(n));return t}function Z({row:e,onAction:t,busy:n=!1}){if(!e)return null;let r=it(e),i=st(e).filter(e=>e.kind===`command`||t!==void 0);return(0,X.jsxs)(`div`,{className:Y.readiness,"data-readiness":e.id,role:`group`,"aria-label":`${e.label}: readiness`,children:[(0,X.jsx)(at,{label:`Chat`,verdict:e.chat,word:e.chat.word}),(0,X.jsx)(at,{label:`Fleet`,verdict:e.fleet,word:rt(e)}),r===null?null:(0,X.jsx)(`p`,{className:Y.readyReading,title:r,children:r}),i.map(r=>r.kind===`command`?(0,X.jsx)(ot,{fix:r},`${r.kind}:${r.command??``}`):(0,X.jsx)(`div`,{className:Y.cardActions,children:(0,X.jsx)(O,{size:`sm`,variant:`primary`,busy:n,"aria-label":`${r.label}: ${e.label}`,onClick:()=>t?.(r,e),children:r.label})},`${r.kind}:${r.seatId??``}`))]})}function Q({facts:e,bases:t}){let n=q(e.models),r=[...new Set([e.basis,...t??[]])];return(0,X.jsxs)(`p`,{className:Y.facts,"data-resource-facts":!0,"data-tier":e.tier,children:[(0,X.jsx)(`span`,{className:Y.tierChip,"data-tier":e.tier,title:te[e.tier],children:b[e.tier]}),(0,X.jsx)(`span`,{title:`What one more turn costs`,children:r.map(e=>x[e]).join(` + `)}),n===null?null:(0,X.jsx)(`span`,{title:e.models.join(`, `),children:n}),e.reserve===null?null:(0,X.jsx)(`span`,{children:e.reserve})]})}var ct=20;function lt({credits:e,sessions:t}){return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`p`,{className:Y.status,"data-tone":`warning`,title:Se(e.remainingUsd),children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.statusLabel,children:Ce}),(0,X.jsxs)(`span`,{className:Y.subtle,children:[`· `,xe(e.remainingUsd)]}),(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`neutral`,title:e.estimateNote,children:`estimate`})]}),(0,X.jsx)(`p`,{className:Y.subtle,children:e.seatReason??ut}),(0,X.jsx)(`p`,{className:Y.subtle,children:t})]})}var ut=`The Claude seat isn't set up on this Mac.`;function dt({credits:e}){let t=e.remainingPercent,n=t<=0?`limit`:t<ct?`tight`:`ok`,r=`${V(e.remainingUsd)} of ${V(e.totalUsd)} left`,i=[`${e.running} running`,e.maxSessionsPerDay===null?`${e.sessionsToday} today`:`${e.sessionsToday} of ${e.maxSessionsPerDay} today`].join(` · `);if(!e.seatReady)return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(lt,{credits:e,sessions:i}),(0,X.jsx)(`p`,{className:Y.fine,children:e.estimateNote}),(0,X.jsx)(ft,{href:e.balanceUrl})]});let a=e.canLaunch?null:e.canLaunchReason;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`p`,{className:Y.creditsHead,children:[(0,X.jsx)(`span`,{className:Y.creditsAmount,children:r}),(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`neutral`,title:e.estimateNote,children:`estimate`})]}),(0,X.jsxs)(`div`,{className:Y.meter,"data-level":n,"data-single":!0,children:[(0,X.jsx)(`span`,{className:Y.meterTrack,role:`img`,"aria-label":`Cloud credits: an estimated ${V(e.remainingUsd)} of ${V(e.totalUsd)} left, ${u(t)}`,children:(0,X.jsx)(`span`,{className:Y.meterFill,"data-kind":`left`,style:{width:`${Math.round(t)}%`}})}),(0,X.jsxs)(`span`,{className:Y.meterValue,"aria-hidden":`true`,children:[u(t),` left`]})]}),(0,X.jsx)(`p`,{className:Y.subtle,children:i}),a===null?null:(0,X.jsxs)(`p`,{className:Y.status,"data-tone":`warning`,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{children:a})]}),(0,X.jsx)(`p`,{className:Y.fine,children:e.estimateNote}),(0,X.jsx)(ft,{href:e.balanceUrl})]})}function ft({href:e}){return(0,X.jsxs)(`a`,{className:Y.external,href:e,target:`_blank`,rel:`noopener noreferrer`,children:[`Real balance on claude.ai`,(0,X.jsx)(k,{}),(0,X.jsx)(`span`,{className:Y.visuallyHidden,children:` (opens in a new tab)`})]})}function pt({readiness:e=null,onReadinessAction:t,readinessBusy:n=!1,facts:r=null}={}){let i=o(W),a=s(W);y(a,K.cloud);let c=i.data===void 0&&i.status!==`error`,l=i.data?.available??!1,u=i.data?.credits??null;return(0,X.jsxs)(`li`,{className:Y.card,"data-resource":`cloud`,"data-cloud":c?`loading`:l?u?`ready`:`unrecognised`:`unavailable`,children:[(0,X.jsxs)(`div`,{className:Y.cardHead,children:[(0,X.jsx)(w,{monogram:`C`,engine:`claude`,size:`sm`}),(0,X.jsxs)(`h4`,{className:Y.cardName,children:[(0,X.jsx)(`span`,{children:`Claude cloud estimate`}),(0,X.jsx)(`span`,{className:Y.plan,children:`claude.ai`})]})]}),r===null?null:(0,X.jsx)(Q,{facts:r}),c?(0,X.jsx)(`p`,{className:Y.subtle,"aria-busy":`true`,children:`Reading cloud credits…`}):l?u===null?(0,X.jsx)(`p`,{className:Y.subtle,children:`Unrecognized response — update Ashlr.`}):(0,X.jsx)(dt,{credits:u}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`p`,{className:Y.status,"data-tone":`neutral`,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.statusLabel,children:`Cloud lane not available yet`})]}),(0,X.jsx)(`p`,{className:Y.fine,children:`Credits show here once this build has the cloud lane.`})]}),(0,X.jsx)(Z,{row:e,busy:n,...t?{onAction:t}:{}})]})}var mt=`/api/verse/resources/credit-pools`,ht=1048576,gt=/^[a-z0-9][a-z0-9_-]{0,79}$/;function _t(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&[Object.prototype,null].includes(Object.getPrototypeOf(e))}function vt(e,t){let n=Reflect.ownKeys(e);return n.length===t.length&&n.every(n=>typeof n==`string`&&t.includes(n)&&`value`in Object.getOwnPropertyDescriptor(e,n))}function yt(e){if(typeof e!=`string`)return!1;let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString()===e}function bt(e){return e===null||typeof e==`string`&&e.length<=64&&/^(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e)&&Number.isFinite(Number(e))}function xt(e){if(!Array.isArray(e)||e.length>ht/2)return!1;let t=Reflect.ownKeys(e);return t.length===e.length+1&&t.every(t=>t===`length`||typeof t==`string`&&/^(?:0|[1-9]\d*)$/.test(t)&&Number(t)<e.length&&`value`in Object.getOwnPropertyDescriptor(e,t))}function St(e,t){let n=[e.split(`.`),t.split(`.`)],r=Math.max(n[0][1]?.length??0,n[1][1]?.length??0),i=n.map(e=>BigInt(e[0]+(e[1]??``).padEnd(r,`0`)));return i[0]>i[1]}function Ct(e){try{if(!_t(e)||!vt(e,[`v`,`sourceState`,`rows`])||e.v!==1||typeof e.sourceState!=`string`||![`healthy`,`missing`,`unavailable`].includes(e.sourceState)||!xt(e.rows)||e.sourceState!==`healthy`&&e.rows.length!==0)return null;let t=new Set;for(let n of e.rows){if(!_t(n)||!vt(n,[`poolId`,`accountId`,`provider`,`kind`,`amount`,`total`,`unit`,`surface`,`capturedAt`,`expiresAt`,`expiryKind`,`source`,`identityState`,`evidenceState`,`expiryState`])||typeof n.poolId!=`string`||!gt.test(n.poolId)||typeof n.accountId!=`string`||!gt.test(n.accountId)||typeof n.provider!=`string`||![`claude`,`codex`,`grok`].includes(n.provider)||!bt(n.amount)||!bt(n.total)||!yt(n.capturedAt)||!(n.expiresAt===null||yt(n.expiresAt))||typeof n.expiryKind!=`string`||![`fixed`,`rolling-release`,`unknown`].includes(n.expiryKind)||n.expiryKind===`unknown`!=(n.expiresAt===null)||!_t(n.source)||!vt(n.source,[`kind`,`adapter`])||typeof n.identityState!=`string`||![`matched`,`unknown`,`mismatch`].includes(n.identityState)||typeof n.evidenceState!=`string`||![`recorded`,`current-native`,`stale-native`,`identity-unknown`,`identity-mismatch`].includes(n.evidenceState)||typeof n.expiryState!=`string`||![`upcoming`,`expired`,`unknown`].includes(n.expiryState)||n.expiryState===`unknown`!=(n.expiresAt===null)||n.amount!==null&&n.total!==null&&St(n.amount,n.total)||n.identityState!==`matched`&&(n.amount!==null||n.total!==null||n.evidenceState!==(n.identityState===`unknown`?`identity-unknown`:`identity-mismatch`)))return null;if(n.kind===`gifted-cloud`||n.kind===`purchased-usage`){if(n.provider!==`claude`||n.unit!==`USD`||n.source.kind!==`verified-manual`||n.source.adapter!==`claude-account-ui`||n.surface!==(n.kind===`gifted-cloud`?`cloud-session`:`over-plan-usage`)||n.expiryKind===`rolling-release`||n.identityState===`matched`&&n.evidenceState!==`recorded`)return null}else if(n.kind===`subscription-allowance`){let e=n.provider===`claude`?`claude-usage`:n.provider===`codex`?`codex-rate-limits`:`grok-usage`;if(n.unit!==`percent`||n.total!==null||n.amount!==null&&St(n.amount,`100`)||n.surface!==`subscription`||n.source.kind!==`native-metadata`||n.source.adapter!==e||n.identityState===`matched`&&![`current-native`,`stale-native`].includes(n.evidenceState))return null}else return null;let e=`${n.provider}:${n.accountId}:${n.poolId}`;if(t.has(e))return null;t.add(e)}return new TextEncoder().encode(JSON.stringify(e)).length>ht?null:e}catch{return null}}function wt(e,t){let n=e.kind===`gifted-cloud`?`Cloud gift`:e.kind===`purchased-usage`?`Purchased usage credits`:`Subscription window`,r=e.evidenceState!==`current-native`||e.expiresAt!==null&&Date.parse(e.expiresAt)<=t;return{title:n,amountText:e.identityState===`unknown`?`Balance hidden · account not verified`:e.identityState===`mismatch`?`Balance hidden · account changed`:e.amount===null?e.kind===`subscription-allowance`?`Usage unknown`:`Balance unknown`:e.unit===`USD`?`$${e.amount} last recorded`:`${e.amount}% used${r?` · last recorded`:``}`,capturedAt:e.capturedAt,expiresAt:e.expiresAt,sourceText:e.source.kind===`verified-manual`?`Verified account UI capture · historical reading`:r?`Native metadata · historical reading`:`Native metadata · last reading`,expiryText:e.expiresAt===null?`Expiry unknown`:Date.parse(e.expiresAt)<=t?`Recorded deadline has passed`:e.expiryKind===`rolling-release`?`Rolling release, not credit expiry`:e.kind===`subscription-allowance`?`Recorded subscription reset`:`Verified credit expiry`,scopeText:e.kind===`gifted-cloud`?`Claude cloud sessions only; excludes Projects and Routines.`:e.kind===`purchased-usage`?`Usage beyond your plan; separate from cloud gifts.`:`Subscription usage; separate from dollar credits.`}}var $={panel:`_panel_x4oe1_1`,body:`_body_x4oe1_5`,rows:`_rows_x4oe1_6`,heading:`_heading_x4oe1_8`,amount:`_amount_x4oe1_10`,note:`_note_x4oe1_11`};function Tt(e){if(!e||typeof e!=`object`||Array.isArray(e)||![Object.prototype,null].includes(Object.getPrototypeOf(e))||Reflect.ownKeys(e).length!==4||![`v`,`state`,`refreshedAt`,`pools`].every(t=>Object.hasOwn(e,t)&&`value`in Object.getOwnPropertyDescriptor(e,t)))return null;let t=e;return t.v!==1||typeof t.state!=`string`||![`warming`,`current`,`stale`,`unavailable`].includes(t.state)||t.refreshedAt!==null&&(typeof t.refreshedAt!=`string`||!Number.isFinite(Date.parse(t.refreshedAt))||new Date(t.refreshedAt).toISOString()!==t.refreshedAt)?null:t.pools===null?[`warming`,`unavailable`].includes(t.state)?e:null:[`current`,`stale`].includes(t.state)&&Ct(t.pools)!==null?e:null}var Et=we(`verse-credit-pools`,mt,`Recorded credit balances`,Tt);function Dt({accountNames:e}){let t=o(Et,{freshMs:15e3}),n=s(Et),[r]=(0,J.useState)(()=>Date.now()),i=z(2e3),a=t.data?.value;y(n,a?.state===`warming`&&i-r<3e4?2e3:15e3);let c=a?.pools;return c?(0,X.jsxs)(`div`,{className:$.body,children:[c.sourceState!==`healthy`||!c.rows.length?(0,X.jsx)(`p`,{className:$.note,children:c.sourceState===`unavailable`?`The credit balance record could not be read. Balances are unknown.`:`No verified credit balance records yet. Balances are unknown.`}):(0,X.jsx)(`ul`,{className:$.rows,children:c.rows.map(t=>{let n=wt(t,i);return(0,X.jsxs)(`li`,{children:[(0,X.jsxs)(`div`,{className:$.heading,children:[(0,X.jsx)(`strong`,{children:n.title}),(0,X.jsx)(`span`,{children:e.get(t.accountId)??t.accountId})]}),(0,X.jsx)(`p`,{className:$.amount,children:n.amountText}),t.total!==null&&t.identityState===`matched`?(0,X.jsxs)(`p`,{className:$.note,children:[`Recorded `,t.kind===`gifted-cloud`?`grant`:`total`,`: $`,t.total]}):null,(0,X.jsx)(`p`,{className:$.note,children:n.sourceText}),(0,X.jsxs)(`p`,{className:$.note,children:[`Captured `,(0,X.jsx)(`time`,{dateTime:n.capturedAt,title:n.capturedAt,children:new Date(n.capturedAt).toLocaleString()})]}),(0,X.jsxs)(`p`,{className:$.note,children:[n.expiryText,n.expiresAt?(0,X.jsxs)(X.Fragment,{children:[` · `,(0,X.jsx)(`time`,{dateTime:n.expiresAt,title:n.expiresAt,children:new Date(n.expiresAt).toLocaleString()})]}):null]}),(0,X.jsx)(`p`,{className:$.note,children:n.scopeText})]},`${t.provider}:${t.accountId}:${t.poolId}`)})}),a?.state===`stale`?(0,X.jsx)(`p`,{className:$.note,children:`Showing the last reading while it refreshes.`}):null,(0,X.jsx)(`p`,{className:$.note,children:`Subscription windows, cloud gifts and purchased credits are separate. Recorded balances do not establish current spendability.`}),(0,X.jsx)(O,{size:`sm`,variant:`ghost`,onClick:n,children:`Refresh balances`})]}):(0,X.jsx)(`p`,{className:$.note,children:t.data?.reason??(a?.state===`unavailable`?`Credit balance records are unavailable. Balances are unknown.`:`Reading recorded credit balances…`)})}function Ot({accountNames:e=new Map}){let[t,n]=(0,J.useState)(!1),r=(0,J.useId)();return(0,X.jsxs)(`details`,{className:$.panel,onToggle:e=>n(e.currentTarget.open),children:[(0,X.jsxs)(`summary`,{id:r,children:[`Credit balances `,(0,X.jsx)(`span`,{children:`gifts, purchased credits and plan windows`})]}),t?(0,X.jsx)(Dt,{accountNames:e}):null]})}var kt=(0,J.lazy)(()=>i(()=>import(`./EvidenceTimeline-hAENJQCa.js`),__vite__mapDeps([0,1,2,3,4,5,6,7])));function At({task:e}){let t=be(),[n,r]=(0,J.useState)(``),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(null),[c,u]=(0,J.useState)(!1),d=N(e.sessionUrl,`app.devin.ai`),f=async()=>{let i=n.trim();if(i){a(!0),s(null);try{if(await t.run(`Send this reply to the Devin session.`,()=>P(e.id,i))===null)return;r(``),s({tone:`success`,text:`Sent. Devin picks it up in the session.`})}catch(e){s({tone:`danger`,text:A(e)})}finally{a(!1)}}};return(0,X.jsxs)(`li`,{className:Y.devinWaiting,"data-devin-task":e.id,children:[(0,X.jsxs)(`p`,{className:Y.subtle,children:[(0,X.jsx)(`strong`,{children:e.title}),` — `,e.stateReason??`Devin is waiting for you.`,d?(0,X.jsxs)(X.Fragment,{children:[` `,(0,X.jsxs)(`a`,{className:Y.external,href:d,target:`_blank`,rel:`noopener noreferrer`,children:[`Open in Devin`,(0,X.jsx)(k,{}),(0,X.jsx)(`span`,{className:Y.visuallyHidden,children:` (opens in a new tab)`})]})]}):null,` `,(0,X.jsx)(O,{size:`sm`,variant:`ghost`,"aria-haspopup":`dialog`,"aria-label":`Evidence: ${e.title}`,onClick:()=>u(!0),children:`Evidence`})]}),(0,X.jsxs)(`form`,{className:Y.devinReply,onSubmit:e=>{e.preventDefault(),f()},children:[(0,X.jsx)(Ie,{"aria-label":`Reply to Devin: ${e.title}`,value:n,maxLength:4e3,placeholder:`Reply to Devin…`,onChange:e=>r(e.target.value)}),(0,X.jsx)(O,{size:`sm`,type:`submit`,busy:i,disabled:n.trim()===``,children:`Send`})]}),o?(0,X.jsxs)(`p`,{className:Y.status,"data-tone":o.tone,role:`status`,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{children:o.text})]}):null,(0,X.jsx)(l,{...t.dialog,tokenLabel:`Mutation token`,tokenHelp:`the mutation token ashlr verse printed`}),c?(0,X.jsx)(J.Suspense,{fallback:null,children:(0,X.jsx)(kt,{taskId:e.id,title:e.title,open:!0,onClose:()=>u(!1)})}):null]})}function jt({facts:e=null,bases:t}={}){let n=o(I),r=s(I);if(y(r,De),n.data===void 0&&n.status!==`error`)return(0,X.jsx)(`li`,{className:Y.card,"data-resource":`devin`,"data-devin":`loading`,children:(0,X.jsx)(`p`,{className:Y.subtle,"aria-busy":`true`,children:`Reading Devin…`})});if(!n.data?.available)return null;let i=n.data.value;if(!i)return(0,X.jsx)(`li`,{className:Y.card,"data-resource":`devin`,"data-devin":`unrecognised`,children:(0,X.jsx)(`p`,{className:Y.subtle,children:n.data.reason??`Unrecognized response — update Ashlr.`})});let{status:a,budget:c}=i,l=L(a),u=a.enabled&&a.connected,d=Te(c),f=c.acuBudgetTotal>0?Math.max(0,Math.min(100,c.acuRemaining/c.acuBudgetTotal*100)):0,p=Ee(i.tasks),m=i.cli&&i.cli.state!==`missing`?M(i.models):null;return(0,X.jsxs)(`li`,{className:Y.card,"data-resource":`devin`,"data-devin":a.state,children:[(0,X.jsxs)(`div`,{className:Y.cardHead,children:[(0,X.jsx)(w,{monogram:`Dv`,engine:`devin`,size:`sm`}),(0,X.jsxs)(`h4`,{className:Y.cardName,children:[(0,X.jsx)(`span`,{children:`Devin`}),(0,X.jsx)(`span`,{className:Y.plan,children:a.principalName??`Cognition`})]})]}),e===null?null:(0,X.jsx)(Q,{facts:{...e,reserve:u&&c.budget.reserveAcu>0?`${R(c.budget.reserveAcu)} kept for you`:e.reserve},...t?{bases:t}:{}}),(0,X.jsxs)(`p`,{className:Y.status,"data-tone":l.tone,title:a.reason,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.statusLabel,children:l.word})]}),(0,X.jsx)(`p`,{className:Y.subtle,children:a.reason}),u?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`p`,{className:Y.creditsHead,children:[(0,X.jsxs)(`span`,{className:Y.creditsAmount,children:[R(c.acuRemaining),` of `,R(c.acuBudgetTotal),` left`]}),(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`neutral`,title:`Your configured allowance minus tracked ACU usage; not a provider-reported remaining balance.`,children:`tracked budget`}),c.paused?(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`warning`,children:`paused`}):null]}),(0,X.jsxs)(`div`,{className:Y.meter,"data-level":d,"data-single":!0,children:[(0,X.jsx)(`span`,{className:Y.meterTrack,role:`img`,"aria-label":`Devin ACUs: ${R(c.acuUsed)} used of ${R(c.acuBudgetTotal)}, ${R(c.acuRemaining)} left`,children:(0,X.jsx)(`span`,{className:Y.meterFill,"data-kind":`left`,style:{width:`${Math.round(f)}%`}})}),(0,X.jsxs)(`span`,{className:Y.meterValue,"aria-hidden":`true`,children:[Math.round(f),`% left`]})]}),(0,X.jsxs)(`p`,{className:Y.subtle,children:[c.running,` running · `,c.sessionsToday,` today · `,R(c.acuToday),` today · about $`,c.estimatedUsdUsed,(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`neutral`,title:c.estimateNote,children:`estimate`})]}),c.canLaunch.ok?null:(0,X.jsxs)(`p`,{className:Y.status,"data-tone":`warning`,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{children:c.canLaunch.reason})]}),p.length>0?(0,X.jsx)(`ul`,{className:Y.devinWaitingList,"aria-label":`Devin sessions waiting for you`,children:p.map(e=>(0,X.jsx)(At,{task:e},e.id))}):null,(0,X.jsx)(`p`,{className:Y.fine,children:c.estimateNote}),(0,X.jsxs)(`a`,{className:Y.external,href:j,target:`_blank`,rel:`noopener noreferrer`,children:[`Real usage on app.devin.ai`,(0,X.jsx)(k,{}),(0,X.jsx)(`span`,{className:Y.visuallyHidden,children:` (opens in a new tab)`})]})]}):null,m?(0,X.jsxs)(`p`,{className:Y.subtle,"data-devin-models":i.models?.source??`unknown`,title:m.stale?`Not listed yet — the full list appears after the CLI is asked (in the background).`:void 0,children:[m.catalog,` · `,m.defaultLine]}):null,i.cli&&i.cli.state!==`missing`?(0,X.jsxs)(`p`,{className:Y.fine,"data-devin-cli":i.cli.state,children:[`Devin (CLI)`,i.cli.state===`logged-out`?(0,X.jsxs)(X.Fragment,{children:[` — logged out; run `,(0,X.jsx)(`code`,{children:`devin auth login`})]}):null,`: usage not reported by the CLI, so CLI chats are not counted here.`]}):null,(0,X.jsx)(Z,{row:F(a)})]})}function Mt(){let e=o(Je),t=s(Je);if(y(t,Xe),e.data===void 0&&e.status!==`error`)return(0,X.jsx)(`li`,{className:Y.card,"data-resource":`jev`,"data-jev":`loading`,children:(0,X.jsx)(`p`,{className:Y.subtle,"aria-busy":`true`,children:`Reading Jev…`})});if(!e.data?.available)return null;let n=e.data.value;if(!n)return(0,X.jsx)(`li`,{className:Y.card,"data-resource":`jev`,"data-jev":`unrecognised`,children:(0,X.jsx)(`p`,{className:Y.subtle,children:e.data.reason??`Unrecognized response — update Ashlr.`})});let{status:r}=n,i=Ze(r),a=r.enabled&&r.keyed,c=r.byKind.slice(0,4);return(0,X.jsxs)(`li`,{className:Y.card,"data-resource":`jev`,"data-jev":a?`on`:`off`,children:[(0,X.jsxs)(`div`,{className:Y.cardHead,children:[(0,X.jsx)(w,{monogram:`Jv`,engine:null,size:`sm`}),(0,X.jsxs)(`h4`,{className:Y.cardName,children:[(0,X.jsx)(`span`,{children:`Jev`}),(0,X.jsx)(`span`,{className:Y.plan,children:`TypeSafe AI`})]})]}),(0,X.jsxs)(`p`,{className:Y.status,"data-tone":i.tone,title:i.detail,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.statusLabel,children:i.word})]}),(0,X.jsx)(`p`,{className:Y.subtle,children:i.detail}),(0,X.jsx)(`p`,{className:Y.stamp,children:e.status===`error`?`Refresh unavailable · showing the last snapshot.`:We(n.generatedAt)}),a||r.decisionsToday>0?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`p`,{className:Y.subtle,"data-jev-today":!0,children:Ge(r)}),(0,X.jsxs)(`p`,{className:Y.subtle,children:[`avg confidence `,Ue(r.avgConfidenceToday),` · `,Ye(r.avgLatencyMsToday),(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`neutral`,title:Ke,children:`estimate`})]}),(0,X.jsxs)(`details`,{className:Y.usageDetails,children:[(0,X.jsx)(`summary`,{children:`Decision evidence`}),(0,X.jsx)(`div`,{className:Y.usageDetailBody,children:qe(r).map(e=>(0,X.jsx)(`p`,{children:e},e))})]}),c.length>0?(0,X.jsx)(`ul`,{className:Y.subtle,"aria-label":`Jev decisions today by kind`,children:c.map(e=>(0,X.jsxs)(`li`,{"data-jev-kind":e.kind,children:[e.kind,`: `,e.decisions,` · `,e.jev,` by Jev · conf `,Ue(e.avgConfidence)]},e.kind))}):null,(0,X.jsxs)(`p`,{className:Y.fine,children:[r.dailyCallBudget===null?`${r.callsToday} API call attempts today · no call-count preference`:`${r.callsToday} of ${r.dailyCallBudget} API call attempts today`,`. `,(0,X.jsx)(`code`,{children:`ashlr jev status`}),` for the full table.`]})]}):null]})}var Nt=90,Pt={"all-in":`all-in mode`,balanced:`balanced mode`,reserve:`reserve mode`};function Ft(e){return Math.max(0,Math.min(100,Math.round(e)))}function It({status:e}){let t=[e.detail,e.usableAgain].filter(e=>e!==null&&e.length>0),n=[e.label,...t].join(` · `);return(0,X.jsxs)(`p`,{className:Y.status,"data-tone":e.tone,"data-status":e.kind,title:n,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`span`,{className:Y.statusLabel,children:e.label}),t.map(e=>(0,X.jsx)(`span`,{className:Y.statusDetail,children:` · ${e}`},e))]})]})}function Lt({row:e,w:t,reservePercent:n}){let r=E(e,t,t.binding?n:null),i=t.binding&&n!==null&&n>0?100-Ft(n):null,a=t.label.replace(/ window$/,``),o,s,c=0;return t.limitReached?(o=`limit`,s=`limit reached`,c=100):t.usedPercent===null?(o=`unknown`,s=`no reading`):(c=Ft(t.usedPercent),o=c>=Nt?`tight`:`ok`,s=u(t.usedPercent)),(0,X.jsxs)(`div`,{className:Y.meter,"data-binding":t.binding||void 0,"data-level":o,children:[(0,X.jsx)(`span`,{className:Y.meterLabel,title:t.label,children:a.charAt(0).toUpperCase()+a.slice(1)}),(0,X.jsxs)(`span`,{className:Y.meterTrack,role:`img`,"aria-label":r,"data-unknown":o===`unknown`||void 0,children:[i===null?null:(0,X.jsx)(`span`,{className:Y.meterReserve,style:{left:`${i}%`,width:`${100-i}%`}}),o===`unknown`?null:(0,X.jsx)(`span`,{className:Y.meterFill,style:{width:`${c}%`}}),i===null?null:(0,X.jsx)(`span`,{className:Y.meterTick,style:{left:`${i}%`}})]}),(0,X.jsx)(`span`,{className:Y.meterValue,"aria-hidden":`true`,children:s}),t.resetText===null?null:(0,X.jsx)(`span`,{className:Y.meterReset,title:t.resetText,"aria-hidden":`true`,children:t.resetText})]})}function Rt({row:e,status:t,settled:n,mode:r,busy:i,onAction:a,readiness:o=null,facts:s=null,scheduling:c}){let l=Qe(e,n).filter(e=>e.kind!==`edit-budget`),d=e.reserve,f=e.windows.find(e=>e.binding)??e.windows[0]??null,p=e.windows.filter(e=>e!==f),m=d===null?null:d.percent!==null&&r!==null?`${d.label} · ${Pt[r]}`:d.label;return(0,X.jsxs)(`li`,{className:Y.card,"data-status":t.kind,"data-seat":e.seatId,"data-verse-anchor":`resources:${e.seatId}`,children:[(0,X.jsxs)(`div`,{className:Y.cardHead,children:[(0,X.jsx)(w,{monogram:e.monogram,engine:e.engine,size:`sm`}),(0,X.jsxs)(`h4`,{className:Y.cardName,children:[(0,X.jsx)(`span`,{title:e.label,children:e.label}),e.plan===null?null:(0,X.jsx)(`span`,{className:Y.plan,children:e.plan})]})]}),(0,X.jsx)(It,{status:t}),e.credits===null?null:(0,X.jsx)(`p`,{className:Y.subtle,children:e.credits}),t.checked===null?null:(0,X.jsx)(`p`,{className:Y.stamp,title:t.checkedTitle??void 0,children:t.checked}),e.windows.length>0?(0,X.jsx)(`div`,{className:Y.meters,children:f===null?null:(0,X.jsx)(Lt,{row:e,w:f,reservePercent:d?.percent??null})}):(0,X.jsx)(`p`,{className:Y.subtle,children:`Usage not reported by this resource.`}),e.lastReading?(0,X.jsx)(`p`,{className:Y.subtle,children:`Last known usage · latest check failed.`}):null,e.windows.length===0&&e.historicalUsage&&!e.signedOut?(0,X.jsxs)(`div`,{className:Y.fine,children:[(0,X.jsx)(`p`,{children:`Last known usage · current availability unconfirmed.`}),(0,X.jsxs)(`p`,{children:[`Recorded `,(0,X.jsx)(`time`,{dateTime:e.historicalUsage.observedAt,title:e.historicalUsage.observedAt,children:new Date(e.historicalUsage.observedAt).toLocaleString()})]}),e.historicalUsage.windows.map(e=>(0,X.jsxs)(`p`,{children:[e.id,`: `,e.limitReached?`limit was flagged`:e.usedPercent===null?`usage unknown`:`${u(e.usedPercent)} used`,e.resetsAt?(0,X.jsxs)(X.Fragment,{children:[` · recorded reset `,(0,X.jsx)(`time`,{dateTime:e.resetsAt,title:e.resetsAt,children:new Date(e.resetsAt).toLocaleString()})]}):null]},e.id))]}):null,(0,X.jsxs)(`details`,{className:Y.usageDetails,children:[(0,X.jsx)(`summary`,{tabIndex:0,"aria-label":`Usage details: ${e.label}`,children:`Usage details`}),(0,X.jsxs)(`div`,{className:Y.usageDetailBody,children:[s===null?null:(0,X.jsx)(Q,{facts:s}),c?(0,X.jsx)($e,{view:c}):null,p.length>0?(0,X.jsx)(`div`,{className:Y.meters,children:p.map(t=>(0,X.jsx)(Lt,{row:e,w:t,reservePercent:d?.percent??null},t.id))}):null,e.windows.length===0?(0,X.jsx)(`p`,{className:Y.subtle,children:`Connection status and usage are separate. No percentage has been supplied.`}):null,e.engine===`codex`&&e.creditState!==void 0&&e.creditState!==`unknown`?(0,X.jsxs)(`p`,{className:Y.subtle,children:[e.creditState===`none`?`Native provider reports no available credits. `:``,e.creditBalance!==null&&e.creditBalance!==void 0?`Native balance ${e.creditBalance} credit units. `:``,`Estimated credit value: `,Be(e.creditBalance,e.plan)??`unknown`,`.`,` `,`Personal-plan reference $0.04 per credit; not actual purchase price or attributed spend.`,` `,(0,X.jsx)(`a`,{href:He,target:`_blank`,rel:`noreferrer`,children:`Published reference`}),` checked `,Ve,`.`]}):null,e.notes.map(e=>(0,X.jsx)(`p`,{className:Y.subtle,children:e},e)),m!==null||e.credits!==null?(0,X.jsxs)(`p`,{className:Y.reserveLine,children:[m===null?null:(0,X.jsx)(`span`,{title:d?.why,children:m}),m!==null&&e.credits!==null?` · `:null,e.credits===null?null:(0,X.jsx)(`span`,{children:e.credits})]}):null]})]}),(0,X.jsx)(Z,{row:o}),l.length>0?(0,X.jsx)(`div`,{className:Y.cardActions,children:l.map(t=>(0,X.jsx)(O,{size:`sm`,variant:t.primary?`primary`:`ghost`,busy:i?.seatId===e.seatId&&i.kind===t.kind,"aria-label":`${t.kind===`fix`?`Fix in Apps`:t.label}: ${e.label}`,onClick:()=>a(e,t),children:t.kind===`fix`?`Fix in Apps`:t.label},t.kind))}):null]})}var zt=`Every local agent turn in flight is answered by this process. Stopping it ends those turns — nothing in flight is rolled back, and no local seat can take a new turn until it is running again.`,Bt={ollama:`Ollama`,lmstudio:`LM Studio`};function Vt({status:e,onOpenUsage:t,now:n,readiness:r=null,onReadinessAction:i,facts:a=null}){let c=o(Le),l=o(B),u=s(Le),d=s(B);y(u,K.local),y(d,K.runtime);let[f,p]=(0,J.useState)(null),[m,h]=(0,J.useState)(null),g=c.data?.available?Fe(Re(c.data.raw),n):null,_=c.data?.available?Pe(c.data.raw):[],v=U(l.data?.value??null),te=c.data===void 0&&c.status!==`error`,b=g?.rows??[],x=b.slice(0,6),ne=b.length-x.length,re=e=>{let t=e===`start`?`Start`:`Stop`;p(null),ee({title:`Stop the serving runtime?`,body:zt,confirmLabel:`Stop runtime`,destructive:!0,skipConfirm:e===`start`,token:!0,tokenReason:`${t===`Start`?`Starting`:`Stopping`} the serving runtime requires the dispatch token.`,run:async()=>{h(e);try{let t=await Oe(e);p({tone:`neutral`,text:(t.note?C(t.note):``)||(e===`start`?`Runtime starting.`:`Runtime stopped.`)})}finally{h(null)}},onError:e=>p({tone:`danger`,text:e})})};return(0,X.jsxs)(`li`,{className:Y.card,"data-resource":`local`,"data-status":e?.kind,children:[(0,X.jsxs)(`div`,{className:Y.cardHead,children:[(0,X.jsx)(w,{monogram:`L`,engine:`local`,size:`sm`}),(0,X.jsxs)(`h4`,{className:Y.cardName,children:[(0,X.jsx)(`span`,{children:`Local models`}),(0,X.jsx)(`span`,{className:Y.plan,children:`this machine`})]})]}),a?(0,X.jsx)(Q,{facts:a}):null,e===null?g!==null&&!g.reachable?(0,X.jsxs)(`p`,{className:Y.status,"data-tone":`neutral`,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.statusLabel,children:`No local runtime answering`})]}):null:(0,X.jsx)(It,{status:e}),(0,X.jsx)(Z,{row:r,...i?{onAction:i}:{}}),_.length>0?(0,X.jsx)(`ul`,{className:Y.runtimes,"aria-label":`Local runtimes`,children:_.map(e=>(0,X.jsxs)(`li`,{className:Y.runtimeRow,"data-tone":e.tone,"data-runtime":e.id,title:`${e.name}: ${e.word} — ${e.detail}`,children:[(0,X.jsx)(`span`,{className:Y.statusDot,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:Y.runtimeRowName,children:e.name}),(0,X.jsx)(`span`,{className:Y.runtimeRowDetail,children:`${e.word} · ${e.detail}`})]},e.id))}):null,v===null?null:(0,X.jsxs)(`div`,{className:Y.runtime,"data-runtime-state":v.state,children:[(0,X.jsxs)(`p`,{className:Y.runtimeHead,children:[(0,X.jsx)(`span`,{className:Y.runtimeName,children:v.name}),(0,X.jsx)(`span`,{className:Y.pill,"data-tone":v.tone,children:v.word})]}),v.detail===null?null:(0,X.jsx)(`p`,{className:Y.subtle,title:v.detail,children:v.detail}),v.canStart||v.canStop?(0,X.jsxs)(`div`,{className:Y.cardActions,children:[v.canStart?(0,X.jsx)(O,{size:`sm`,variant:`primary`,busy:m===`start`,"aria-label":`Start ${v.name}`,onClick:()=>re(`start`),children:`Start`}):null,v.canStop?(0,X.jsx)(O,{size:`sm`,variant:`subtle`,busy:m===`stop`,"aria-label":`Stop ${v.name}`,onClick:()=>re(`stop`),children:`Stop`}):null]}):v.managedElsewhere?(0,X.jsx)(`p`,{className:Y.subtle,children:`Started and stopped outside Verse.`}):null]}),te?(0,X.jsx)(`p`,{className:Y.subtle,"aria-busy":`true`,children:`Reading local models…`}):c.data?.available?g===null||b.length===0?(0,X.jsx)(`p`,{className:Y.subtle,children:g?.reachable?`No models installed.`:`Start Ollama or llama-server to use local models.`}):(0,X.jsx)(`ul`,{className:Y.models,"aria-label":`Local models`,children:x.map(e=>{let t=je(e);return(0,X.jsxs)(`li`,{className:Y.model,"data-resident":e.resident||void 0,children:[(0,X.jsxs)(`span`,{className:Y.modelName,title:e.name,children:[e.displayName,e.nameDetail?(0,X.jsxs)(`span`,{className:Y.modelDetail,children:[` `,e.nameDetail]}):null]}),(0,X.jsxs)(`span`,{className:Y.modelFacts,children:[e.runtime&&Bt[e.runtime]?(0,X.jsx)(`span`,{className:Y.modelRuntime,children:Bt[e.runtime]}):null,e.resident?(0,X.jsx)(`span`,{className:Y.pill,"data-tone":`success`,children:`Loaded`}):null,t===null?null:(0,X.jsx)(`span`,{title:e.contextTruncated?`Configured below the model’s native window`:void 0,children:t})]})]},`${e.runtime??`local`}:${e.name}`)})}):(0,X.jsx)(`p`,{className:Y.subtle,children:`Local model details are not available from this server yet.`}),ne>0?(0,X.jsx)(`button`,{type:`button`,className:Y.linkButton,onClick:t,children:`${ne} more in Usage`}):null,(0,X.jsx)(`p`,{className:f?Y.note:Y.visuallyHidden,"data-tone":f?.tone,role:`status`,"aria-live":`polite`,children:f?.text??``})]})}var Ht=`No accounts connected yet. Sign in to Claude Code, Codex, Devin or Grok in a terminal — they show up here within a minute.`;function Ut({pinned:e}){return(0,X.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:e?`currentColor`:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinejoin:`round`,strokeLinecap:`round`,"aria-hidden":`true`,focusable:`false`,children:[(0,X.jsx)(`path`,{d:`M6 2.5h4l-.5 4 2.25 2.25H4.25L6.5 6.5z`}),(0,X.jsx)(`path`,{d:`M8 8.75v4.75`,fill:`none`})]})}function Wt({mode:e,compact:t=!1,now:n}){let r=(0,J.useId)(),i=(0,J.useRef)(null),l=e===`overlay`,u=ae(),[d,h]=(0,J.useState)(()=>Date.now());y(()=>h(Date.now()),oe,{enabled:n===void 0});let x=n??d,S=u.health!==null,[C,w]=(0,J.useState)(null),[E,O]=(0,J.useState)(null),k=a(ce),ge=a(Le),_e=a(B),be=a(W),A=o(G),xe=s(G),Se=a(G),Ce=a(se),we=a(I);y(xe,K.readiness);let j=(0,J.useMemo)(()=>{let e=new Map;for(let t of A.data?.value?.resources??[])e.set(t.id,t);return e},[A.data]),M=(0,J.useMemo)(()=>me(u.seats,{health:u.health,budget:u.budget,now:x}),[u.seats,u.health,u.budget,x]),N=(0,J.useMemo)(()=>M.filter(e=>e.kind===`subscription`&&e.engine!==`devin`),[M]),P=(0,J.useMemo)(()=>M.filter(e=>e.engine===`devin`),[M]),F=M.find(e=>e.kind===`local`)??null,Te=u.budget?.mode??null,Ee=(0,J.useMemo)(()=>{let e=u.seats,t=[],n=e=>ne[e.basis];N.forEach((r,i)=>{let a=e.find(e=>e.id===r.seatId),o=a?Ne(a):{tier:ie(r.engine),basis:re(r.engine),models:[],reserve:null};t.push({kind:`account`,key:`account:${r.seatId}`,row:r,facts:o,tier:o.tier,index:i,statusRank:pe(T(r,{healthRead:S,now:x}).kind),marginal:n(o)})});let r=e.filter(e=>e.engine===`devin`),i=ke(r)??{tier:`elite`,basis:`credits`,models:[],reserve:null},a=P.length>0?Math.min(...P.map(e=>pe(T(e,{healthRead:S,now:x}).kind))):H(null);t.push({kind:`devin`,key:`devin`,facts:i,bases:Ae(r),tier:i.tier,statusRank:a,marginal:n(i),index:N.length});let o={tier:`elite`,basis:`credits`,models:[],reserve:null};t.push({kind:`cloud`,key:`cloud`,facts:o,tier:`elite`,marginal:n(o),index:N.length+1,statusRank:H(j.get(`cloud`)?.chat.ready??null)});let s={...ke(e.filter(e=>e.engine===`local`))??{tier:`free`,basis:`free`,models:[],reserve:null},models:[]};return t.push({kind:`local`,key:`local`,facts:s,tier:s.tier,marginal:0,index:N.length+2,statusRank:F?pe(T(F,{healthRead:S,now:x}).kind):H(null)}),Me(t).map(e=>({...e,entries:e.entries.sort((e,t)=>e.index-t.index)}))},[u.seats,N,P,F,j,S,x]),L=(0,J.useCallback)(()=>{m()},[]),De=(0,J.useCallback)(()=>{v()||document.querySelector(`[aria-modal="true"]:not([data-verse-overlay])`)||m()},[]);c({open:l,containerRef:i,onClose:De}),(0,J.useEffect)(()=>{if(l)return()=>{window.setTimeout(()=>{let e=document.activeElement;(e===null||e===document.body)&&document.querySelector(`[data-resources-handle]`)?.focus({preventScroll:!0})},0)}},[l]);let R=(e,t=null)=>{l&&m(),p(e,t)},z=(e,t)=>{if(O(null),t.kind===`fix`||t.kind===`edit-budget`){R(`apps`,`seat:${e.seatId}`);return}let n=t.kind===`reconnect`;ee({title:n?`Reconnect ${e.label}?`:`Check ${e.label} again?`,body:``,confirmLabel:t.label,destructive:!1,skipConfirm:!0,token:!0,tokenReason:n?`Open the sign-in for ${e.label} in Terminal`:`Check ${e.label} again (status commands only — nothing is spent)`,run:async()=>{w({seatId:e.seatId,kind:t.kind});try{n?await ue(e.seatId):await le()}finally{w(null)}},onDone:()=>{xe(),O({tone:`neutral`,text:n?`Opened the sign-in for ${e.label} in Terminal. Finish it there; this drawer picks it up.`:`Checked ${e.label} again.`})},onError:e=>O({tone:`danger`,text:e})})},Oe=e=>{if(e.kind===`command`||!e.seatId)return;let t=M.find(t=>t.seatId===e.seatId);t&&z(t,{kind:e.kind,label:e.label,command:null,primary:!0})},V=()=>{O(null),de(),Ce(),we(),k(),ge(),_e(),be(),Se(),h(Date.now())},U=ye(`resources.toggle`)?.keys[0],je=U?f(U):void 0,Pe=!t,q=e===`docked`,Fe=(0,X.jsxs)(`div`,{ref:i,className:Y.panel,"data-mode":e,"data-presentation":t?`full`:`side`,"data-verse-overlay":`resources`,...l?{role:`dialog`,"aria-modal":!0,"aria-labelledby":r,tabIndex:-1}:{role:`complementary`,"aria-labelledby":r},children:[(0,X.jsxs)(`header`,{className:Y.head,children:[(0,X.jsxs)(`div`,{className:Y.headText,children:[(0,X.jsx)(`h2`,{id:r,className:Y.title,children:`Resources`}),!u.loading&&M.length>0?(0,X.jsx)(`p`,{className:Y.headline,children:fe(M)}):null]}),(0,X.jsxs)(`div`,{className:Y.headActions,children:[(0,X.jsx)(g,{label:`Read everything again`,placement:`bottom`,children:(0,X.jsx)(D,{variant:`ghost`,size:`sm`,icon:(0,X.jsx)(ve,{}),"aria-label":`Read everything again`,onClick:V})}),Pe?(0,X.jsx)(g,{label:q?`Unpin — float over the page`:`Pin beside the page`,placement:`bottom`,children:(0,X.jsx)(D,{variant:`ghost`,size:`sm`,icon:(0,X.jsx)(Ut,{pinned:q}),"aria-label":q?`Unpin resources`:`Pin resources beside the page`,"aria-pressed":q,"data-resources-pin":!0,onClick:()=>_(!q)})}):null,(0,X.jsx)(g,{label:`Close resources`,shortcut:je,placement:`bottom`,children:(0,X.jsx)(D,{variant:`ghost`,size:`sm`,icon:(0,X.jsx)(he,{}),"aria-label":`Close resources`,onClick:L})})]})]}),(0,X.jsxs)(`div`,{className:Y.body,children:[u.refreshing?(0,X.jsx)(`p`,{className:Y.subtle,role:`status`,children:`Updating readings…`}):null,u.readFailed?(0,X.jsxs)(`p`,{className:Y.subtle,role:`status`,children:[`Refresh unavailable`,u.rosterUnavailable?`.`:` · showing last readings.`]}):null,u.loading?(0,X.jsx)(`p`,{className:Y.subtle,"aria-busy":`true`,children:`Reading accounts…`}):!u.rosterUnavailable&&N.length===0&&P.length===0?(0,X.jsx)(`p`,{className:Y.subtle,children:Ht}):null,(0,X.jsx)(Ot,{accountNames:new Map(u.seats.map(e=>[e.id,e.label]))}),Ee.map(e=>(0,X.jsxs)(`section`,{className:Y.group,"aria-labelledby":`${r}-${e.tier}`,"data-tier-section":e.tier,children:[(0,X.jsx)(`h3`,{id:`${r}-${e.tier}`,className:Y.groupTitle,children:b[e.tier]}),(0,X.jsx)(`p`,{className:Y.groupBlurb,children:te[e.tier]}),(0,X.jsx)(`ul`,{className:Y.cards,children:e.entries.map(e=>{switch(e.kind){case`account`:{let t=e.row;if(u.loading)return null;let n=T(t,{healthRead:S,now:x}),r=C?.seatId===t.seatId&&C.kind===`check-again`?T(t,{healthRead:S,now:x,checking:!0}):n;return(0,X.jsx)(Rt,{row:t,status:r,settled:n,mode:Te,busy:C,onAction:z,readiness:j.get(t.seatId)??null,facts:e.facts,scheduling:et(u.budget,t,x)},e.key)}case`devin`:return(0,X.jsx)(jt,{facts:e.facts,bases:e.bases},e.key);case`cloud`:return(0,X.jsx)(pt,{facts:e.facts,readiness:j.get(`cloud`)??null,onReadinessAction:Oe,readinessBusy:C!==null&&C.seatId===j.get(`cloud`)?.chat.fix?.seatId},e.key);case`local`:return(0,X.jsx)(Vt,{facts:e.facts,status:F?T(F,{healthRead:S,now:x}):null,onOpenUsage:()=>R(`usage`),now:x,readiness:j.get(`local`)??null},e.key);default:return null}})})]},e.tier)),(0,X.jsx)(`p`,{className:E?Y.note:Y.visuallyHidden,"data-tone":E?.tone,role:`status`,"aria-live":`polite`,children:E?.text??``}),(0,X.jsxs)(`section`,{className:Y.group,"aria-labelledby":`${r}-decisions`,children:[(0,X.jsx)(`h3`,{id:`${r}-decisions`,className:Y.groupTitle,children:`Decision layer`}),(0,X.jsx)(`ul`,{className:Y.cards,children:(0,X.jsx)(Mt,{})})]})]}),(0,X.jsxs)(`footer`,{className:Y.foot,children:[(0,X.jsx)(`button`,{type:`button`,className:Y.linkButton,onClick:()=>R(`apps`),children:`Apps & Accounts`}),(0,X.jsx)(`button`,{type:`button`,className:Y.linkButton,onClick:()=>R(`usage`),children:`Usage`}),(0,X.jsx)(Gt,{})]})]});return l?(0,tt.createPortal)((0,X.jsx)(`div`,{className:Y.backdrop,"data-presentation":t?`full`:`side`,onMouseDown:e=>e.target===e.currentTarget&&L(),children:Fe}),document.body):Fe}function Gt(){let{bar:e}=d();return(0,X.jsx)(`button`,{type:`button`,className:Y.linkButton,style:{marginLeft:`auto`},"aria-pressed":e,onClick:()=>h(!e),children:e?`Hide resource bar`:`Show resource bar`})}export{Ht as RESOURCES_EMPTY_TEXT,Wt as ResourcesDrawer};
|
|
3
|
-
//# sourceMappingURL=ResourcesDrawer-BH9uwNE8.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":";wlJA8BM,GAA2F,CAC/F,GAAI,UACJ,KAAM,UACN,QAAS,SACT,IAAK,SACP,EAGA,SAAgB,GAAU,EAAmC,CAC3D,GAAM,CAAE,SAAU,EAIlB,OAHI,EAAM,OAAS,EAAM,iBAAmB,MAAQ,EAAM,eAAiB,EAClE,GAAG,EAAM,KAAK,aAAa,KAAK,MAAM,EAAM,cAAc,EAAE,gBAE9D,EAAM,IACf,CAGA,SAAgB,GAAY,EAA0C,CACpE,GAAM,CAAE,WAAY,EACpB,GAAI,EAAQ,QAAU,QAAU,EAAI,OAAS,eAAgB,OAAO,KACpE,IAAM,EAAQ,EAAQ,GAAK,EAAY,EAAQ,EAAE,EAAI,GAC/C,EAAO,EAAQ,QAAU,QAAU,EAAQ,gBAAgB,IAAU,qBAC3E,OAAO,EAAQ,KAAO,GAAG,EAAK,KAAK,EAAQ,OAAS,CACtD,CAEA,SAAS,GAAK,CAAE,QAAO,UAAS,QAAoE,CAClG,IAAM,EAAO,GAAU,EAAQ,MACzB,EAAO,EAAQ,OAAS,GAAG,EAAM,IAAI,EAAK,KAAK,EAAQ,SAAW,GAAG,EAAM,IAAI,IACrF,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,UAAW,YAAW,EAAM,aAAY,EAAQ,OAAS,OAAW,MAAO,EAAlG,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,SAAW,UAAY,IAC/C,UAAC,OAAD,CAAM,UAAW,EAAO,UAAxB,WACE,UAAC,OAAD,CAAM,UAAW,EAAO,UAAxB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,UAAY,UAAW,EAC3C,CACL,KAAQ,QAAS,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,WAAQ,MAAa,GAAI,IAC7E,CACH,KAET,CAEA,SAAS,GAAW,CAAE,OAA8B,CAClD,GAAM,CAAC,EAAQ,MAAa,YAAqC,MAAM,GACvE,mBAAgB,CACd,GAAI,IAAW,OAAQ,OACvB,IAAM,EAAQ,OAAO,eAAiB,EAAU,MAAM,EAAG,GAAK,EAC9D,UAAa,OAAO,aAAa,CAAK,CACxC,EAAG,CAAC,CAAM,CAAC,EACX,IAAM,EAAO,EAAI,SAAW,GAC5B,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,SAArB,UAAgC,EAAI,MAAM,oBAAqB,CAC/D,cAAC,MAAD,CAAK,UAAW,EAAO,WAAvB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,QAAS,MAAO,EAAO,UAAW,IAC1D,UAAC,SAAD,CACE,KAAK,SACL,UAAW,EAAO,QAClB,aAAY,IAAW,OAAS,SAAW,iBAAiB,EAAI,QAChE,YAAe,CAAE,GAAc,CAAI,CAAC,CAAC,KAAM,GAAO,EAAU,EAAK,OAAS,QAAQ,CAAC,CAAG,EAJxF,UAMG,IAAW,QAAS,SAAC,GAAD,CAAY,IAAI,SAAC,GAAD,CAAW,IAChD,SAAC,OAAD,UAAO,IAAW,OAAS,SAAW,IAAW,SAAW,cAAgB,MAAa,EACnF,CACL,GACF,KAET,CAGA,SAAgB,GAAe,EAA2C,CACxE,IAAM,EAAsB,CAAC,EAC7B,IAAK,IAAM,IAAO,CAAC,EAAI,KAAK,IAAK,EAAI,MAAM,GAAG,EACvC,IACD,EAAI,KAAM,GAAM,EAAE,OAAS,EAAI,MAAQ,EAAE,UAAY,EAAI,SAAW,EAAE,SAAW,EAAI,MAAM,GAC/F,EAAI,KAAK,CAAG,GAEd,OAAO,CACT,CAaA,SAAgB,EAAe,CAAE,MAAK,WAAU,OAAO,IAA8B,CACnF,GAAI,CAAC,EAAK,OAAO,KACjB,IAAM,EAAU,GAAY,CAAG,EACzB,EAAQ,GAAe,CAAG,CAAC,CAAC,OAAQ,GAAQ,EAAI,OAAS,WAAa,IAAa,MAAS,EAClG,OACE,UAAC,MAAD,CAAK,UAAW,EAAO,UAAW,iBAAgB,EAAI,GAAI,KAAK,QAAQ,aAAY,GAAG,EAAI,MAAM,aAAhG,WACE,SAAC,GAAD,CAAM,MAAM,OAAO,QAAS,EAAI,KAAM,KAAM,EAAI,KAAK,IAAO,IAC5D,SAAC,GAAD,CAAM,MAAM,QAAQ,QAAS,EAAI,MAAO,KAAM,GAAU,CAAG,CAAI,GAC9D,IAAY,KAA0E,MAAnE,SAAC,IAAD,CAAG,UAAW,EAAO,aAAc,MAAO,EAAU,UAAW,GAClF,EAAM,IAAK,GACV,EAAI,OAAS,WACX,SAAC,GAAD,CAA0D,KAAM,EAA/C,GAAG,EAAI,KAAK,GAAG,EAAI,SAAW,IAAiB,GAEhE,SAAC,MAAD,CAA6C,UAAW,EAAO,YAC7D,mBAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,UAAgB,OAAM,aAAY,GAAG,EAAI,MAAM,IAAI,EAAI,QAAS,YAAe,IAAW,EAAK,CAAG,EACzH,WAAI,KACC,EACL,EAJK,GAAG,EAAI,KAAK,GAAG,EAAI,QAAU,IAIlC,CAET,CACG,GAET,CCzHA,SAAgB,EAAc,CAAE,QAAO,SAA6B,CAClE,IAAM,EAAS,EAAW,EAAM,MAAM,EAChC,EAAW,CAAC,GAAG,IAAI,IAAI,CAAC,EAAM,MAAO,GAAI,GAAS,CAAC,CAAE,CAAC,CAAC,EAC7D,OACE,UAAC,IAAD,CAAG,UAAW,EAAO,MAAO,yBAAoB,YAAW,EAAM,KAAjE,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,SAAU,YAAW,EAAM,KAAM,MAAO,GAAY,EAAM,MAAQ,WAAY,EAAM,KAAY,IACxH,SAAC,OAAD,CAAM,MAAM,2BAA4B,WAAS,IAAK,GAAM,EAAkB,EAAE,CAAC,CAAC,KAAK,KAAK,CAAQ,GACnG,IAAW,KAA+D,MAAxD,SAAC,OAAD,CAAM,MAAO,EAAM,OAAO,KAAK,IAAI,EAAI,UAAa,GACtE,EAAM,UAAY,KAAsC,MAA/B,SAAC,OAAD,UAAO,EAAM,OAAc,EACpD,GAEP,CCPA,IAAM,GAAS,GAOf,SAAS,GAAS,CAAE,UAAS,YAA6D,CACxF,OACE,iCACE,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,UAAU,MAAO,GAAa,EAAQ,YAAY,EAAzF,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,WAA4B,IAClE,UAAC,OAAD,CAAM,UAAW,EAAO,OAAxB,UAAgC,KAAG,GAAc,EAAQ,YAAY,CAAQ,KAC7E,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,MAAO,EAAQ,aAAc,mBAAc,EAC5F,KACH,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAQ,YAAc,EAAmB,IACvE,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,UAAY,EAC1C,GAEN,CAEA,IAAM,GAAkB,4CAExB,SAAS,GAAQ,CAAE,WAA0C,CAC3D,IAAM,EAAO,EAAQ,iBACf,EAAQ,GAAQ,EAAI,QAAU,EAAO,GAAS,QAAU,KACxD,EAAW,GAAG,EAAU,EAAQ,YAAY,EAAE,MAAM,EAAU,EAAQ,QAAQ,EAAE,OAChF,EAAW,CACf,GAAG,EAAQ,QAAQ,UACnB,EAAQ,oBAAsB,KAA0E,GAAG,EAAQ,cAAc,QAA5F,GAAG,EAAQ,cAAc,MAAM,EAAQ,kBAAkB,OAChG,CAAC,CAAC,KAAK,KAAK,EACZ,GAAI,CAAC,EAAQ,UACX,OACE,iCACE,SAAC,GAAD,CAAmB,UAAmB,UAAW,IACjD,SAAC,IAAD,CAAG,UAAW,EAAO,KAAO,WAAQ,YAAgB,IACpD,SAAC,GAAD,CAAa,KAAM,EAAQ,UAAa,EACxC,IAGN,IAAM,EAAW,EAAQ,UAAsC,KAA1B,EAAQ,gBAC7C,OACE,iCACE,UAAC,IAAD,CAAG,UAAW,EAAO,YAArB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,cAAgB,UAAe,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,MAAO,EAAQ,aAAc,mBAAc,EAC5F,KACH,UAAC,MAAD,CAAK,UAAW,EAAO,MAAO,aAAY,EAAO,iBAAjD,WACE,SAAC,OAAD,CACE,UAAW,EAAO,WAClB,KAAK,MACL,aAAY,+BAA+B,EAAU,EAAQ,YAAY,EAAE,MAAM,EAAU,EAAQ,QAAQ,EAAE,SAAS,EAAgB,CAAI,IAE1I,mBAAC,OAAD,CAAM,UAAW,EAAO,UAAW,YAAU,OAAO,MAAO,CAAE,MAAO,GAAG,KAAK,MAAM,CAAI,EAAE,EAAG,CAAI,EAC3F,IACN,UAAC,OAAD,CAAM,UAAW,EAAO,WAAY,cAAY,OAAhD,UAAwD,EAAgB,CAAI,EAAE,OAAW,CACtF,OACL,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,UAAY,GACzC,IAAY,KAET,MADF,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,UAAvC,WAAiD,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IAAC,SAAC,OAAD,UAAO,CAAc,EAAI,CAChI,IACJ,SAAC,IAAD,CAAG,UAAW,EAAO,KAAO,WAAQ,YAAgB,IACpD,SAAC,GAAD,CAAa,KAAM,EAAQ,UAAa,EACxC,GAEN,CAEA,SAAS,GAAY,CAAE,QAA0B,CAC/C,OACE,UAAC,IAAD,CAAG,UAAW,EAAO,SAAgB,OAAM,OAAO,SAAS,IAAI,sBAA/D,UAAqF,6BAEnF,SAAC,EAAD,CAAmB,IACnB,SAAC,OAAD,CAAM,UAAW,EAAO,eAAgB,gCAA2B,EAClE,GAEP,CAWA,SAAgB,GAAa,CAAE,YAAY,KAAM,oBAAmB,gBAAgB,GAAO,QAAQ,MAA4B,CAAC,EAAG,CACjI,IAAM,EAAO,EAAS,CAAiB,EACjC,EAAU,EAAW,CAAiB,EAC5C,EAAoB,EAAS,EAAkB,KAAK,EACpD,IAAM,EAAU,EAAK,OAAS,QAAa,EAAK,SAAW,QACrD,EAAY,EAAK,MAAM,WAAa,GACpC,EAAU,EAAK,MAAM,SAAW,KACtC,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,QAAQ,aAAY,EAAU,UAAa,EAA4B,EAAU,QAAU,eAApC,cAAjG,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,SAAC,EAAD,CAAc,SAAS,IAAI,OAAO,SAAS,KAAK,IAAM,IACtD,UAAC,KAAD,CAAI,UAAW,EAAO,SAAtB,WACE,SAAC,OAAD,UAAM,uBAA2B,IACjC,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,oBAAe,EAC3C,CACD,MACJ,IAAU,KAAyC,MAAlC,SAAC,EAAD,CAAsB,OAAQ,GAC/C,GACC,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,OAAO,iCAAyB,GACpE,EAQD,IAAY,MACd,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,gDAAwC,IAErE,SAAC,GAAD,CAAkB,SAAU,IAV5B,iCACE,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,UAAvC,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,YAAa,uCAAkC,EACtE,CACH,aAAC,IAAD,CAAG,UAAW,EAAO,KAAM,gEAAwD,EACnF,KAMJ,SAAC,EAAD,CAAgB,IAAK,EAAW,KAAM,EAAe,GAAK,EAAoB,CAAE,SAAU,CAAkB,EAAI,CAAC,CAAK,EACpH,GAER,CC3IA,IAAa,GAAoB,oCCP3B,GAAY,QACZ,GAAK,6BACX,SAAS,GAAO,EAAkD,CAChE,MAAO,CAAC,CAAC,GAAS,OAAO,GAAU,UAAY,CAAC,MAAM,QAAQ,CAAK,GAAK,CAAC,OAAO,UAAW,IAAI,CAAC,CAAC,SAAS,OAAO,eAAe,CAAK,CAAC,CACxI,CACA,SAAS,GAAM,EAAgC,EAAyB,CACtE,IAAM,EAAM,QAAQ,QAAQ,CAAK,EACjC,OAAO,EAAI,SAAW,EAAK,QAAU,EAAI,MAAM,GAAO,OAAO,GAAQ,UAAY,EAAK,SAAS,CAAG,GAAK,UAAW,OAAO,yBAAyB,EAAO,CAAG,CAAE,CAChK,CACA,SAAS,GAAI,EAAiC,CAC5C,GAAI,OAAO,GAAU,SAAU,MAAO,GACtC,IAAM,EAAK,KAAK,MAAM,CAAK,EAC3B,OAAO,OAAO,SAAS,CAAE,GAAK,IAAI,KAAK,CAAE,CAAC,CAAC,YAAY,IAAM,CAC/D,CACA,SAAS,GAAQ,EAAyB,CACxC,OAAO,IAAU,MAAQ,OAAO,GAAU,UAAY,EAAM,QAAU,IAAM,6BAA6B,KAAK,CAAK,GAAK,OAAO,SAAS,OAAO,CAAK,CAAC,CACvJ,CACA,SAAS,GAAM,EAAoC,CACjD,GAAI,CAAC,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,GAAY,EAAG,MAAO,GAClE,IAAM,EAAO,QAAQ,QAAQ,CAAK,EAClC,OAAO,EAAK,SAAW,EAAM,OAAS,GAAK,EAAK,MAAM,GAAO,IAAQ,UAAY,OAAO,GAAQ,UAAY,mBAAmB,KAAK,CAAG,GACrI,OAAO,CAAG,EAAI,EAAM,QAAU,UAAW,OAAO,yBAAyB,EAAO,CAAG,CAAE,CACzF,CAEA,SAAS,GAAQ,EAAW,EAAoB,CAC9C,IAAM,EAAQ,CAAC,EAAE,MAAM,GAAG,EAAG,EAAE,MAAM,GAAG,CAAC,EACnC,EAAQ,KAAK,IAAI,EAAM,EAAE,CAAE,EAAE,EAAE,QAAU,EAAG,EAAM,EAAE,CAAE,EAAE,EAAE,QAAU,CAAC,EACrE,EAAO,EAAM,IAAI,GAAO,OAAO,EAAI,IAAO,EAAI,IAAM,IAAI,OAAO,EAAO,GAAG,CAAC,CAAC,EACjF,OAAO,EAAK,GAAM,EAAK,EACzB,CAGA,SAAgB,GAAsB,EAAyC,CAC7E,GAAI,CACF,GAAI,CAAC,GAAO,CAAG,GAAK,CAAC,GAAM,EAAK,CAAC,IAAK,cAAe,MAAM,CAAC,GAAK,EAAI,IAAM,GACzE,OAAO,EAAI,aAAgB,UAAY,CAAC,CAAC,UAAW,UAAW,aAAa,CAAC,CAAC,SAAS,EAAI,WAAW,GAAK,CAAC,GAAM,EAAI,IAAI,GAC1H,EAAI,cAAgB,WAAa,EAAI,KAAK,SAAW,EAAG,OAAO,KACjE,IAAM,EAAO,IAAI,IACjB,IAAK,IAAM,KAAS,EAAI,KAAM,CAc5B,GAbI,CAAC,GAAO,CAAK,GAAK,CAAC,GAAM,EAAO,CAAC,SAAU,YAAa,WAAY,OAAQ,SAAU,QAAS,OAAQ,UAAW,aACpH,YAAa,aAAc,SAAU,gBAAiB,gBAAiB,aAAa,CAAC,GACrF,OAAO,EAAM,QAAW,UAAY,CAAC,GAAG,KAAK,EAAM,MAAM,GAAK,OAAO,EAAM,WAAc,UAAY,CAAC,GAAG,KAAK,EAAM,SAAS,GAC7H,OAAO,EAAM,UAAa,UAAY,CAAC,CAAC,SAAU,QAAS,MAAM,CAAC,CAAC,SAAS,EAAM,QAAQ,GAC1F,CAAC,GAAQ,EAAM,MAAM,GAAK,CAAC,GAAQ,EAAM,KAAK,GAAK,CAAC,GAAI,EAAM,UAAU,GAAK,EAAE,EAAM,YAAc,MAAQ,GAAI,EAAM,SAAS,IAC9H,OAAO,EAAM,YAAe,UAAY,CAAC,CAAC,QAAS,kBAAmB,SAAS,CAAC,CAAC,SAAS,EAAM,UAAU,GACzG,EAAM,aAAe,YAAgB,EAAM,YAAc,OAC1D,CAAC,GAAO,EAAM,MAAM,GAAK,CAAC,GAAM,EAAM,OAAQ,CAAC,OAAQ,SAAS,CAAC,GACjE,OAAO,EAAM,eAAkB,UAAY,CAAC,CAAC,UAAW,UAAW,UAAU,CAAC,CAAC,SAAS,EAAM,aAAa,GAC3G,OAAO,EAAM,eAAkB,UAAY,CAAC,CAAC,WAAY,iBAAkB,eAAgB,mBAAoB,mBAAmB,CAAC,CAAC,SAAS,EAAM,aAAa,GAChK,OAAO,EAAM,aAAgB,UAAY,CAAC,CAAC,WAAY,UAAW,SAAS,CAAC,CAAC,SAAS,EAAM,WAAW,GACtG,EAAM,cAAgB,YAAgB,EAAM,YAAc,OAC3D,EAAM,SAAW,MAAQ,EAAM,QAAU,MAAQ,GAAQ,EAAM,OAAkB,EAAM,KAAe,GACpG,EAAM,gBAAkB,YAAc,EAAM,SAAW,MAAQ,EAAM,QAAU,MACjF,EAAM,iBAAmB,EAAM,gBAAkB,UAAY,mBAAqB,sBAAuB,OAAO,KAClH,GAAI,EAAM,OAAS,gBAAkB,EAAM,OAAS,kBAC9C,MAAM,WAAa,UAAY,EAAM,OAAS,OAAS,EAAM,OAAO,OAAS,mBAAqB,EAAM,OAAO,UAAY,qBAC7H,EAAM,WAAa,EAAM,OAAS,eAAiB,gBAAkB,oBAAsB,EAAM,aAAe,mBAChH,EAAM,gBAAkB,WAAa,EAAM,gBAAkB,WAAY,OAAO,UAC7E,GAAI,EAAM,OAAS,yBAA0B,CAClD,IAAM,EAAU,EAAM,WAAa,SAAW,eAAiB,EAAM,WAAa,QAAU,oBAAsB,aAClH,GAAI,EAAM,OAAS,WAAa,EAAM,QAAU,MAAQ,EAAM,SAAW,MAAQ,GAAQ,EAAM,OAAkB,KAAK,GAAK,EAAM,UAAY,gBAC3I,EAAM,OAAO,OAAS,mBAAqB,EAAM,OAAO,UAAY,GACpE,EAAM,gBAAkB,WAAa,CAAC,CAAC,iBAAkB,cAAc,CAAC,CAAC,SAAS,EAAM,aAAa,EAAG,OAAO,IACnH,MAAO,OAAO,KACd,IAAM,EAAM,GAAG,EAAM,SAAS,GAAG,EAAM,UAAU,GAAG,EAAM,SAC1D,GAAI,EAAK,IAAI,CAAG,EAAG,OAAO,KAC1B,EAAK,IAAI,CAAG,CACd,CAEA,OADI,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK,UAAU,CAAG,CAAC,CAAC,CAAC,OAAS,GAAkB,KACtE,CACT,MAAQ,CAAE,OAAO,IAAM,CACzB,CAYA,SAAgB,GAAkB,EAAwB,EAAkC,CAC1F,IAAM,EAAQ,EAAI,OAAS,eAAiB,aAAe,EAAI,OAAS,kBAAoB,0BAA4B,sBAClH,EAAa,EAAI,gBAAkB,kBAAoB,EAAI,YAAc,MAAQ,KAAK,MAAM,EAAI,SAAS,GAAK,EAKpH,MAAO,CAAE,QAAO,WAJG,EAAI,gBAAkB,UAAY,wCACjD,EAAI,gBAAkB,WAAa,mCACjC,EAAI,SAAW,KAAO,EAAI,OAAS,yBAA2B,gBAAkB,kBAC9E,EAAI,OAAS,MAAQ,IAAI,EAAI,OAAO,gBAAkB,GAAG,EAAI,OAAO,QAAQ,EAAa,mBAAqB,KAC1F,WAAY,EAAI,WAAY,UAAW,EAAI,UACrE,WAAY,EAAI,OAAO,OAAS,kBAAoB,mDAAqD,EAAa,uCAAyC,iCAC/J,WAAY,EAAI,YAAc,KAAO,iBAAmB,KAAK,MAAM,EAAI,SAAS,GAAK,EAAQ,+BACzF,EAAI,aAAe,kBAAoB,qCAAuC,EAAI,OAAS,yBAA2B,8BAAgC,yBAC1J,UAAW,EAAI,OAAS,eAAiB,8DACrC,EAAI,OAAS,kBAAoB,qDAAuD,mDAAoD,CACpJ,qJCvFA,SAAgB,GAA0B,EAAsC,CAE9E,GADI,CAAC,GAAO,OAAO,GAAQ,UAAY,MAAM,QAAQ,CAAG,GACpD,CAAC,CAAC,OAAO,UAAW,IAAI,CAAC,CAAC,SAAS,OAAO,eAAe,CAAG,CAAC,GAC/D,QAAQ,QAAQ,CAAG,CAAC,CAAC,SAAW,GAAK,CAAC,CAAC,IAAK,QAAS,cAAe,OAAO,CAAC,CAAC,MAAM,GACjF,OAAO,OAAO,EAAK,CAAG,GAAK,UAAW,OAAO,yBAAyB,EAAK,CAAG,CAAE,EAAG,OAAO,KAC9F,IAAM,EAAM,EAKZ,OAJI,EAAI,IAAM,GAAK,OAAO,EAAI,OAAU,UAAY,CAAC,CAAC,UAAW,UAAW,QAAS,aAAa,CAAC,CAAC,SAAS,EAAI,KAAK,GACpH,EAAI,cAAgB,OAAS,OAAO,EAAI,aAAgB,UAAY,CAAC,OAAO,SAAS,KAAK,MAAM,EAAI,WAAW,CAAC,GAC9G,IAAI,KAAK,EAAI,WAAW,CAAC,CAAC,YAAY,IAAM,EAAI,aAAqB,KACrE,EAAI,QAAU,KAAa,CAAC,UAAW,aAAa,CAAC,CAAC,SAAS,EAAI,KAAK,EAAI,EAAyB,KAClG,CAAC,UAAW,OAAO,CAAC,CAAC,SAAS,EAAI,KAAK,GAAK,GAAsB,EAAI,KAAK,IAAM,KAAO,EAAyB,IAC1H,CACA,IAAM,GAAQ,GAAc,qBAAsB,GAAmB,2BAA4B,EAAyB,EAC1H,SAAS,GAAkB,CAAE,gBAA+D,CAC1F,IAAM,EAAU,EAAS,GAAO,CAAE,QAAS,IAAO,CAAC,EAC7C,EAAU,EAAW,EAAK,EAC1B,CAAC,MAAY,gBAAe,KAAK,IAAI,CAAC,EACtC,EAAM,EAAO,GAAK,EAClB,EAAQ,EAAQ,MAAM,MAC5B,EAAoB,EAAS,GAAO,QAAU,WAAa,EAAM,EAAW,IAAS,IAAQ,IAAM,EACnG,IAAM,EAAQ,GAAO,MAGrB,OAFK,GAEE,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,UACJ,EAAM,cAAgB,WAAa,CAAC,EAAM,KAAK,QAAS,SAAC,IAAD,CAAG,UAAW,EAAO,KAC3E,WAAM,cAAgB,cAAgB,qEACnC,+DAAmE,IAAI,SAAC,KAAD,CAAI,UAAW,EAAO,KAChG,WAAM,KAAK,IAAI,GAAO,CACrB,IAAM,EAAU,GAAkB,EAAK,CAAG,EAC1C,OAAO,UAAC,KAAD,YACL,UAAC,MAAD,CAAK,UAAW,EAAO,QAAvB,WAAgC,SAAC,SAAD,UAAS,EAAQ,KAAc,IAAC,SAAC,OAAD,UAAO,EAAa,IAAI,EAAI,SAAS,GAAK,EAAI,SAAgB,EAAM,KACpI,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAQ,UAAc,GACnD,EAAI,QAAU,MAAQ,EAAI,gBAAkB,WAAY,UAAC,IAAD,CAAG,UAAW,EAAO,KAArB,UAA2B,YAAU,EAAI,OAAS,eAAiB,QAAU,QAAQ,MAAI,EAAI,KAAS,CAAI,SACnK,SAAC,IAAD,CAAG,UAAW,EAAO,KAAO,WAAQ,UAAc,IAClD,UAAC,IAAD,CAAG,UAAW,EAAO,KAArB,UAA2B,aAAS,SAAC,OAAD,CAAM,SAAU,EAAQ,WAAY,MAAO,EAAQ,WAAa,aAAI,KAAK,EAAQ,UAAU,CAAC,CAAC,eAAe,CAAQ,EAAI,KAC5J,UAAC,IAAD,CAAG,UAAW,EAAO,KAArB,UAA4B,EAAQ,WAAY,EAAQ,WAAY,gCAAE,OAAG,SAAC,OAAD,CAAM,SAAU,EAAQ,UAAW,MAAO,EAAQ,UAAY,aAAI,KAAK,EAAQ,SAAS,CAAC,CAAC,eAAe,CAAQ,EAAG,IAAI,IAAQ,KACzM,SAAC,IAAD,CAAG,UAAW,EAAO,KAAO,WAAQ,SAAa,EAC/C,GARY,GAAG,EAAI,SAAS,GAAG,EAAI,UAAU,GAAG,EAAI,QAQpD,CACN,CAAC,CACC,GACH,GAAO,QAAU,SAAU,SAAC,IAAD,CAAG,UAAW,EAAO,KAAM,uDAA+C,GAAI,MAC1G,SAAC,IAAD,CAAG,UAAW,EAAO,KAAM,yIAAiI,IAC5J,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,QAAS,EAAS,2BAAwB,EACzE,KAtBc,SAAC,IAAD,CAAG,UAAW,EAAO,KAAO,WAAQ,MAAM,SAAW,GAAO,QAAU,cACrF,gEAAkE,oCAAwC,EAsBhH,CAEA,SAAgB,GAAY,CAAE,eAAe,IAAI,KAAyD,CACxG,GAAM,CAAC,EAAM,MAAW,YAAS,EAAK,EAChC,KAAU,SAAM,EACtB,OAAO,UAAC,UAAD,CAAS,UAAW,EAAO,MAAO,SAAU,GAAS,EAAQ,EAAM,cAAc,IAAI,EAArF,WACL,UAAC,UAAD,CAAS,GAAI,EAAb,UAAsB,oBAAgB,SAAC,OAAD,UAAM,2CAA+C,EAAU,CACpG,MAAO,SAAC,GAAD,CAAiC,cAAe,GAAI,IACrD,GACX,CC7BA,IAAM,MAAmB,kBAAW,OAAO,qEAA+B,EAE1E,SAAS,GAAM,CAAE,QAA+B,CAC9C,IAAM,EAAO,GAAa,EACpB,CAAC,EAAM,MAAW,YAAS,EAAE,EAC7B,CAAC,EAAM,MAAW,YAAS,EAAK,EAChC,CAAC,EAAM,MAAW,YAA8D,IAAI,EACpF,CAAC,EAAc,MAAmB,YAAS,EAAK,EAChD,EAAU,EAAc,EAAK,WAAY,cAAc,EACvD,EAAO,SAAY,CACvB,IAAM,EAAU,EAAK,KAAK,EACrB,KAEL,CADA,EAAQ,EAAI,EACZ,EAAQ,IAAI,EACZ,GAAI,CAEF,GAAI,MADe,EAAK,IAAI,4CAA+C,EAAiB,EAAK,GAAI,CAAO,CAAC,IAChG,KAAM,OACnB,EAAQ,EAAE,EACV,EAAQ,CAAE,KAAM,UAAW,KAAM,yCAA0C,CAAC,CAC9E,OAAS,EAAK,CACZ,EAAQ,CAAE,KAAM,SAAU,KAAM,EAAqB,CAAG,CAAE,CAAC,CAC7D,QAAU,CACR,EAAQ,EAAK,CACf,CAVY,CAWd,EACA,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,aAAc,kBAAiB,EAAK,GAA1D,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,OAArB,WACE,SAAC,SAAD,UAAS,EAAK,KAAc,GAAC,MAAI,EAAK,aAAe,4BACpD,GACC,gCACG,KACD,UAAC,IAAD,CAAG,UAAW,EAAO,SAAU,KAAM,EAAS,OAAO,SAAS,IAAI,sBAAlE,UAAwF,iBAEtF,SAAC,EAAD,CAAmB,IACnB,SAAC,OAAD,CAAM,UAAW,EAAO,eAAgB,gCAA2B,EAClE,CACH,MACA,KACH,KACD,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,gBAAc,SAAS,aAAY,aAAa,EAAK,QAAS,YAAe,EAAgB,EAAI,EAAG,mBAE9H,EACP,KACH,UAAC,OAAD,CAAM,UAAW,EAAO,WAAY,SAAW,GAAU,CAAE,EAAM,eAAe,EAAG,EAAU,CAAG,EAAhG,WACE,SAAC,GAAD,CAAO,aAAY,mBAAmB,EAAK,QAAS,MAAO,EAAM,UAAW,IAAM,YAAY,kBAAkB,SAAW,GAAU,EAAQ,EAAM,OAAO,KAAK,CAAI,IACnK,SAAC,EAAD,CAAQ,KAAK,KAAK,KAAK,SAAe,OAAM,SAAU,EAAK,KAAK,IAAM,GAAI,eAAY,EAClF,IACL,GAAO,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAW,EAAK,KAAM,KAAK,SAAxD,WAAiE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IAAC,SAAC,OAAD,UAAO,EAAK,IAAW,EAAI,CAAI,SAChK,SAAC,EAAD,CAAqB,GAAI,EAAK,OAAQ,WAAW,iBAAiB,UAAU,wCAA0C,GACrH,GACC,SAAC,WAAD,CAAU,SAAU,KAClB,mBAAC,GAAD,CAAkB,OAAQ,EAAK,GAAI,MAAO,EAAK,MAAO,QAAK,YAAe,EAAgB,EAAK,CAAI,EAC3F,GACR,IACF,GAER,CASA,SAAgB,GAAc,CAAE,QAAQ,KAAM,SAA8B,CAAC,EAAG,CAC9E,IAAM,EAAO,EAAS,CAAU,EAC1B,EAAU,EAAW,CAAU,EAErC,GADA,EAAoB,EAAS,EAAa,EACtC,EAAK,OAAS,QAAa,EAAK,SAAW,QAC7C,OACE,SAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,QAAQ,aAAW,UAC3D,mBAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,OAAO,yBAAiB,EAC7D,GAGR,GAAI,CAAC,EAAK,MAAM,UAAW,OAAO,KAClC,IAAM,EAAW,EAAK,KAAK,MAC3B,GAAI,CAAC,EACH,OACE,SAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,QAAQ,aAAW,eAC3D,mBAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAK,KAAK,QAAU,uCAA2C,EAC3F,GAGR,GAAM,CAAE,SAAQ,UAAW,EACrB,EAAO,EAAc,CAAM,EAC3B,EAAO,EAAO,SAAW,EAAO,UAChC,EAAQ,GAAS,CAAM,EACvB,EAAc,EAAO,eAAiB,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,IAAM,EAAO,aAAe,EAAO,eAAkB,GAAG,CAAC,EAAI,EAC5H,EAAU,GAAa,EAAS,KAAK,EACrC,EAAa,EAAS,KAAO,EAAS,IAAI,QAAU,UAAY,EAAiB,EAAS,MAAM,EAAI,KAC1G,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,QAAQ,aAAY,EAAO,MAArE,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,SAAC,EAAD,CAAc,SAAS,KAAK,OAAO,QAAQ,KAAK,IAAM,IACtD,UAAC,KAAD,CAAI,UAAW,EAAO,SAAtB,WACE,SAAC,OAAD,UAAM,OAAW,IACjB,SAAC,OAAD,CAAM,UAAW,EAAO,KAAO,WAAO,eAAiB,WAAkB,EACvE,CACD,MACJ,IAAU,KAKP,MAJF,SAAC,EAAD,CACE,MAAO,CAAE,GAAG,EAAO,QAAS,GAAQ,EAAO,OAAO,WAAa,EAAI,GAAG,EAAU,EAAO,OAAO,UAAU,EAAE,eAAiB,EAAM,OAAQ,EACzI,GAAK,EAAQ,CAAE,OAAM,EAAI,CAAC,CAC3B,IAEH,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAW,EAAK,KAAM,MAAO,EAAO,OAAjE,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,WAAK,IAAW,EACrD,KACH,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAO,MAAU,GAC9C,GACC,iCACE,UAAC,IAAD,CAAG,UAAW,EAAO,YAArB,WACE,UAAC,OAAD,CAAM,UAAW,EAAO,cAAxB,UAAwC,EAAU,EAAO,YAAY,EAAE,OAAK,EAAU,EAAO,cAAc,EAAE,OAAW,KACxH,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,MAAM,gGAAgG,yBAAoB,GAC3K,EAAO,QAAS,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,iBAAY,GAAI,IAClF,KACH,UAAC,MAAD,CAAK,UAAW,EAAO,MAAO,aAAY,EAAO,iBAAjD,WACE,SAAC,OAAD,CACE,UAAW,EAAO,WAClB,KAAK,MACL,aAAY,eAAe,EAAU,EAAO,OAAO,EAAE,WAAW,EAAU,EAAO,cAAc,EAAE,IAAI,EAAU,EAAO,YAAY,EAAE,OAEpI,mBAAC,OAAD,CAAM,UAAW,EAAO,UAAW,YAAU,OAAO,MAAO,CAAE,MAAO,GAAG,KAAK,MAAM,CAAW,EAAE,EAAG,CAAI,EAClG,IACN,UAAC,OAAD,CAAM,UAAW,EAAO,WAAY,cAAY,OAAhD,UAAwD,KAAK,MAAM,CAAW,EAAE,QAAY,CACzF,OACL,UAAC,IAAD,CAAG,UAAW,EAAO,OAArB,UACG,EAAO,QAAQ,cAAY,EAAO,cAAc,YAAU,EAAU,EAAO,QAAQ,EAAE,mBAAiB,EAAO,kBAC9G,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,MAAO,EAAO,aAAc,mBAAc,EAC3F,IACD,EAAO,UAAU,GAEf,MADF,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,UAAvC,WAAiD,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IAAC,SAAC,OAAD,UAAO,EAAO,UAAU,MAAa,EAAI,CAChJ,GACH,EAAQ,OAAS,GAChB,SAAC,KAAD,CAAI,UAAW,EAAO,iBAAkB,aAAW,iCAChD,WAAQ,IAAK,IAAS,SAAC,GAAD,CAA2B,MAAO,EAAtB,EAAK,EAAiB,CAAC,CACxD,GACF,MACJ,SAAC,IAAD,CAAG,UAAW,EAAO,KAAO,WAAO,YAAgB,IACnD,UAAC,IAAD,CAAG,UAAW,EAAO,SAAU,KAAM,EAAkB,OAAO,SAAS,IAAI,sBAA3E,UAAiG,8BAE/F,SAAC,EAAD,CAAmB,IACnB,SAAC,OAAD,CAAM,UAAW,EAAO,eAAgB,gCAA2B,EAClE,GACH,IACA,KACH,GAGC,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,oBAAmB,EAAS,QAAQ,QAAU,UACzE,MAAO,EAAW,MAAQ,qFAAuF,OADnH,UAEG,EAAW,QAAQ,MAAI,EAAW,WAClC,CACD,QACH,EAAS,KAAO,EAAS,IAAI,QAAU,WAGtC,UAAC,IAAD,CAAG,UAAW,EAAO,KAAM,iBAAgB,EAAS,IAAI,MAAxD,UAA+D,cACjD,EAAS,IAAI,QAAU,cAAe,gCAAE,uBAAmB,SAAC,OAAD,UAAM,kBAAsB,EAAG,IAAI,KAAK,qEAE9G,CACD,SACJ,SAAC,EAAD,CAAgB,IAAK,EAAkB,CAAM,CAAI,EAC/C,GAER,CC5LA,SAAgB,IAAc,CAC5B,IAAM,EAAO,EAAS,EAAQ,EACxB,EAAU,EAAW,EAAQ,EAEnC,GADA,EAAoB,EAAS,EAAW,EACpC,EAAK,OAAS,QAAa,EAAK,SAAW,QAC7C,OACE,SAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,MAAM,WAAS,UACvD,mBAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,OAAO,uBAAe,EAC3D,GAGR,GAAI,CAAC,EAAK,MAAM,UAAW,OAAO,KAClC,IAAM,EAAO,EAAK,KAAK,MACvB,GAAI,CAAC,EACH,OACE,SAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,MAAM,WAAS,eACvD,mBAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAK,KAAK,QAAU,uCAA2C,EAC3F,GAGR,GAAM,CAAE,UAAW,EACb,EAAO,GAAY,CAAM,EACzB,EAAS,EAAO,SAAW,EAAO,MAClC,EAAM,EAAO,OAAO,MAAM,EAAG,CAAC,EACpC,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,MAAM,WAAU,EAAS,KAAO,MAA1E,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,SAAC,EAAD,CAAc,SAAS,KAAK,OAAQ,KAAM,KAAK,IAAM,IACrD,UAAC,KAAD,CAAI,UAAW,EAAO,SAAtB,WACE,SAAC,OAAD,UAAM,KAAS,IACf,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,sBAAiB,EAC7C,CACD,OACL,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAW,EAAK,KAAM,MAAO,EAAK,OAA/D,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,WAAK,IAAW,EACrD,KACH,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAK,MAAU,IAC7C,SAAC,IAAD,CAAG,UAAW,EAAO,MAAQ,WAAK,SAAW,QAAU,mDAAqD,GAAgB,EAAK,WAAW,CAAK,GAChJ,GAAU,EAAO,eAAiB,GACjC,iCACE,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,oBAAgB,YAAa,CAAM,CAAK,IACrE,UAAC,IAAD,CAAG,UAAW,EAAO,OAArB,UAA6B,kBACX,GAAiB,EAAO,kBAAkB,EAAE,MAAI,GAAc,EAAO,iBAAiB,GACtG,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,MAAO,GAAmB,mBAAc,EACzF,KACH,UAAC,UAAD,CAAS,UAAW,EAAO,aAA3B,WACE,SAAC,UAAD,UAAS,mBAA0B,IACnC,SAAC,MAAD,CAAK,UAAW,EAAO,gBACpB,YAAiB,CAAM,CAAC,CAAC,IAAK,IAAS,SAAC,IAAD,UAAe,CAAQ,EAAf,CAAe,CAAC,CAC7D,EACE,IACR,EAAI,OAAS,GACZ,SAAC,KAAD,CAAI,UAAW,EAAO,OAAQ,aAAW,8BACtC,WAAI,IAAK,IACR,UAAC,KAAD,CAAiB,gBAAe,EAAE,KAAlC,UACG,EAAE,KAAK,KAAG,EAAE,UAAU,MAAI,EAAE,IAAI,kBAAgB,GAAiB,EAAE,aAAa,CAC/E,CAFK,IAAE,IAEP,CACL,CACC,GACF,MACJ,UAAC,IAAD,CAAG,UAAW,EAAO,KAArB,UAA4B,EAAO,kBAAoB,KACnD,GAAG,EAAO,WAAW,qDACrB,GAAG,EAAO,WAAW,MAAM,EAAO,gBAAgB,0BAA0B,MAAE,SAAC,OAAD,UAAM,kBAAsB,GAAC,sBAAuB,GACtI,IACA,IACF,GAER,CChDA,IAAM,GAAW,GAEX,GAAkD,CACtD,SAAU,cACV,SAAU,gBACV,QAAS,cACX,EAEA,SAAS,GAAM,EAAmB,CAChC,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CACjD,CAEA,SAAgB,GAAW,CAAE,UAAqC,CAChE,IAAM,EAAQ,CAAC,EAAO,OAAQ,EAAO,WAAW,CAAC,CAAC,OAAQ,GAAmB,IAAM,MAAQ,EAAE,OAAS,CAAC,EACjG,EAAO,CAAC,EAAO,MAAO,GAAG,CAAK,CAAC,CAAC,KAAK,KAAK,EAChD,OACE,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAW,EAAO,KAAM,cAAa,EAAO,KAAM,MAAO,EAAtF,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,UAAC,OAAD,YACE,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,WAAO,KAAY,GACxD,EAAM,IAAK,IACV,SAAC,OAAD,CAAc,UAAW,EAAO,aAAe,eAAM,GAAU,EAApD,CAAoD,CAChE,CACG,GACL,GAEP,CAEA,SAAS,GAAY,CAAE,MAAK,IAAG,kBAA6F,CAC1H,IAAM,EAAW,EAAe,EAAK,EAAG,EAAE,QAAU,EAAiB,IAAI,EACnE,EAAU,EAAE,SAAW,IAAmB,MAAQ,EAAiB,EAAI,IAAM,GAAM,CAAc,EAAI,KACrG,EAAQ,EAAE,MAAM,QAAQ,WAAY,EAAE,EACxC,EACA,EACA,EAAO,EAaX,OAZI,EAAE,cACJ,EAAQ,QACR,EAAQ,gBACR,EAAO,KACE,EAAE,cAAgB,MAC3B,EAAQ,UACR,EAAQ,eAER,EAAO,GAAM,EAAE,WAAW,EAC1B,EAAQ,GAAQ,GAAW,QAAU,KACrC,EAAQ,EAAgB,EAAE,WAAW,IAGrC,UAAC,MAAD,CAAK,UAAW,EAAO,MAAO,eAAc,EAAE,SAAW,OAAW,aAAY,EAAhF,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,WAAY,MAAO,EAAE,MAAQ,WAAM,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAM,MAAM,CAAC,CAAQ,IAC1G,UAAC,OAAD,CAAM,UAAW,EAAO,WAAY,KAAK,MAAM,aAAY,EAAU,eAAc,IAAU,WAAa,OAA1G,UACG,IAAY,KAA8G,MAAvG,SAAC,OAAD,CAAM,UAAW,EAAO,aAAc,MAAO,CAAE,KAAM,GAAG,EAAQ,GAAI,MAAO,GAAG,IAAM,EAAQ,EAAG,CAAI,GACtH,IAAU,UAAkF,MAAtE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,MAAO,CAAE,MAAO,GAAG,EAAK,EAAG,CAAI,GACxF,IAAY,KAA+E,MAAxE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,MAAO,CAAE,KAAM,GAAG,EAAQ,EAAG,CAAI,EACpF,KACN,SAAC,OAAD,CAAM,UAAW,EAAO,WAAY,cAAY,OAAQ,UAAY,GACnE,EAAE,YAAc,KAAyG,MAAlG,SAAC,OAAD,CAAM,UAAW,EAAO,WAAY,MAAO,EAAE,UAAW,cAAY,OAAQ,WAAE,SAAgB,EACnH,GAET,CAsBA,SAAgB,GAAa,CAAE,MAAK,SAAQ,UAAS,OAAM,OAAM,WAAU,YAAY,KAAM,QAAQ,KAAM,cAAiC,CAE1I,IAAM,EAAU,GAAe,EAAK,CAAO,CAAC,CAAC,OAAQ,GAAM,EAAE,OAAS,aAAa,EAC7E,EAAU,EAAI,QACd,EAAgB,EAAI,QAAQ,KAAM,GAAM,EAAE,OAAO,GAAK,EAAI,QAAQ,IAAM,KACxE,EAAe,EAAI,QAAQ,OAAQ,GAAM,IAAM,CAAa,EAC5D,EAAc,IAAY,KAAO,KAAO,EAAQ,UAAY,MAAQ,IAAS,KAAO,GAAG,EAAQ,MAAM,KAAK,GAAU,KAAU,EAAQ,MAC5I,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,KAAM,cAAa,EAAO,KAAM,YAAW,EAAI,OAAQ,oBAAmB,aAAa,EAAI,SAAjH,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,SAAC,EAAD,CAAc,SAAU,EAAI,SAAU,OAAQ,EAAI,OAAQ,KAAK,IAAM,IACrE,UAAC,KAAD,CAAI,UAAW,EAAO,SAAtB,WACE,SAAC,OAAD,CAAM,MAAO,EAAI,MAAQ,WAAI,KAAY,GACxC,EAAI,OAAS,KAAyD,MAAlD,SAAC,OAAD,CAAM,UAAW,EAAO,KAAO,WAAI,IAAW,EACjE,CACD,OACL,SAAC,GAAD,CAAoB,QAAS,GAC5B,EAAI,UAAY,KAAwD,MAAjD,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAI,OAAW,GACpE,EAAO,UAAY,KAEhB,MADF,SAAC,IAAD,CAAG,UAAW,EAAO,MAAO,MAAO,EAAO,cAAgB,OAAY,WAAO,OAAW,GAEzF,EAAI,QAAQ,OAAS,GACpB,SAAC,MAAD,CAAK,UAAW,EAAO,OACpB,aAAkB,KAA+F,MAAxF,SAAC,GAAD,CAAkB,MAAK,EAAG,EAAe,eAAgB,GAAS,SAAW,IAAO,EAC3G,IACH,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,+CAAuC,GACvE,EAAI,aAAc,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,kDAA0C,GAAI,KAC7F,EAAI,QAAQ,SAAW,GAAK,EAAI,iBAAmB,CAAC,EAAI,WAAY,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,WACnE,SAAC,IAAD,UAAG,sDAAuD,IAC1D,UAAC,IAAD,WAAG,aAAS,SAAC,OAAD,CAAM,SAAU,EAAI,gBAAgB,WAAY,MAAO,EAAI,gBAAgB,WAAa,aAAI,KAAK,EAAI,gBAAgB,UAAU,CAAC,CAAC,eAAe,CAAQ,EAAI,IACvK,EAAI,gBAAgB,QAAQ,IAAI,IAAU,UAAC,IAAD,WAAoB,EAAO,GAAG,KAAG,EAAO,aAAe,oBAAsB,EAAO,cAAgB,KAAO,gBAAkB,GAAG,EAAgB,EAAO,WAAW,EAAE,OAC5M,EAAO,UAAW,gCAAE,sBAAkB,SAAC,OAAD,CAAM,SAAU,EAAO,SAAU,MAAO,EAAO,SAAW,aAAI,KAAK,EAAO,QAAQ,CAAC,CAAC,eAAe,CAAQ,EAAG,IAAI,IAAQ,GADhH,EAAO,EACyG,CAAC,CACjK,CAAI,SACT,UAAC,UAAD,CAAS,UAAW,EAAO,aAA3B,WACE,SAAC,UAAD,CAAS,SAAU,EAAG,aAAY,kBAAkB,EAAI,QAAS,wBAAsB,IACvF,UAAC,MAAD,CAAK,UAAW,EAAO,gBAAvB,UACG,IAAU,KAAyC,MAAlC,SAAC,EAAD,CAAsB,OAAQ,GAC/C,GAAa,SAAC,GAAD,CAAoB,KAAM,CAAa,GAAI,KACxD,EAAa,OAAS,GAAI,SAAC,MAAD,CAAK,UAAW,EAAO,OAAS,WAAa,IAAK,IAAM,SAAC,GAAD,CAA6B,MAAQ,IAAG,eAAgB,GAAS,SAAW,IAAO,EAAjE,EAAE,EAA+D,CAAC,CAAO,GAAI,KACjL,EAAI,QAAQ,SAAW,GAAI,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,qFAA6E,GAAI,KACzI,EAAI,SAAW,SAAW,EAAI,cAAgB,QAAa,EAAI,cAAgB,WAAY,UAAC,IAAD,CAAG,UAAW,EAAO,OAArB,UACzF,EAAI,cAAgB,OAAS,iDAAmD,GAChF,EAAI,gBAAkB,MAAQ,EAAI,gBAAkB,OAAY,kBAAkB,EAAI,cAAc,iBAAmB,GAAG,2BAClG,GAAqB,EAAI,cAAe,EAAI,IAAI,GAAK,UAAU,IACvF,IAAI,2FACJ,KAAI,SAAC,IAAD,CAAG,KAAM,GAA2B,OAAO,SAAS,IAAI,aAAa,8BAAsB,GAAC,YAAU,GAA2B,GACrI,CAAI,QACN,EAAI,MAAM,IAAK,IAAS,SAAC,IAAD,CAAc,UAAW,EAAO,OAAS,UAAQ,EAAzC,CAAyC,CAAC,EAC1E,IAAgB,MAAQ,EAAI,UAAY,MACvC,UAAC,IAAD,CAAG,UAAW,EAAO,YAArB,UACG,IAAgB,KAAyD,MAAlD,SAAC,OAAD,CAAM,MAAO,GAAS,IAAM,UAAkB,GACrE,IAAgB,MAAQ,EAAI,UAAY,KAAO,MAAQ,KACvD,EAAI,UAAY,KAAoC,MAA7B,SAAC,OAAD,UAAO,EAAI,OAAc,EAChD,CACD,OACD,CACE,OACT,SAAC,EAAD,CAAgB,IAAK,CAAY,GAChC,EAAQ,OAAS,GAChB,SAAC,MAAD,CAAK,UAAW,EAAO,YACpB,WAAQ,IAAK,IACZ,SAAC,EAAD,CAEE,KAAK,KACL,QAAS,EAAO,QAAU,UAAY,QACtC,KAAM,GAAM,SAAW,EAAI,QAAU,EAAK,OAAS,EAAO,KAC1D,aAAY,GAAG,EAAO,OAAS,MAAQ,cAAgB,EAAO,MAAM,IAAI,EAAI,QAC5E,YAAe,EAAS,EAAK,CAAM,EAElC,WAAO,OAAS,MAAQ,cAAgB,EAAO,KAC1C,EARD,EAAO,IAQN,CACT,CACE,GACH,IACF,GAER,CC7JA,IAAM,GACJ,kMAEI,GAAkD,CAAE,OAAQ,SAAU,SAAU,WAAY,EAalG,SAAgB,GAAe,CAAE,SAAQ,cAAa,MAAK,YAAY,KAAM,oBAAmB,QAAQ,MAA6B,CACnI,IAAM,EAAS,EAAS,EAAqB,EACvC,EAAc,EAAS,CAAmB,EAC1C,EAAgB,EAAW,EAAqB,EAChD,EAAiB,EAAW,CAAmB,EACrD,EAAoB,EAAe,EAAkB,KAAK,EAC1D,EAAoB,EAAgB,EAAkB,OAAO,EAC7D,GAAM,CAAC,EAAM,MAAW,YAA8D,IAAI,EACpF,CAAC,EAAM,MAAW,YAAkC,IAAI,EAExD,EAAO,EAAO,MAAM,UAAY,GAAqB,GAAmB,EAAO,KAAK,GAAG,EAAG,CAAG,EAAI,KACjG,EAAW,EAAO,MAAM,UAAY,GAAkB,EAAO,KAAK,GAAG,EAAI,CAAC,EAC1E,EAAU,EAAY,EAAY,MAAM,OAAS,IAAI,EACrD,GAAgB,EAAO,OAAS,QAAa,EAAO,SAAW,QAC/D,EAAO,GAAM,MAAQ,CAAC,EACtB,EAAQ,EAAK,MAAM,GAAqB,EACxC,GAAO,EAAK,OAAS,EAAM,OAE3B,GAAO,GAA6B,CACxC,IAAM,EAAQ,IAAW,QAAU,QAAU,OAC7C,EAAQ,IAAI,EACZ,GAAe,CACb,MAAO,4BACP,KAAM,GACN,aAAc,eACd,YAAa,GACb,YAAa,IAAW,QACxB,MAAO,GACP,YAAa,GAAG,IAAU,QAAU,WAAa,WAAW,mDAC5D,IAAK,SAAY,CACf,EAAQ,CAAM,EACd,GAAI,CACF,IAAM,EAAS,MAAM,GAAiB,CAAM,EAC5C,EAAQ,CAAE,KAAM,UAAW,MAAO,EAAO,KAAO,EAAU,EAAO,IAAI,EAAI,MAAQ,IAAW,QAAU,oBAAsB,mBAAoB,CAAC,CACnJ,QAAU,CACR,EAAQ,IAAI,CACd,CACF,EACA,QAAU,GAAY,EAAQ,CAAE,KAAM,SAAU,KAAM,CAAQ,CAAC,CACjE,CAAC,CACH,EAEA,OACE,UAAC,KAAD,CAAI,UAAW,EAAO,KAAM,gBAAc,QAAQ,cAAa,GAAQ,KAAvE,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,SAAC,EAAD,CAAc,SAAS,IAAI,OAAO,QAAQ,KAAK,IAAM,IACrD,UAAC,KAAD,CAAI,UAAW,EAAO,SAAtB,WACE,SAAC,OAAD,UAAM,cAAkB,IACxB,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,uBAAkB,EAC9C,CACD,MACJ,GAAQ,SAAC,EAAD,CAAsB,OAAQ,GAAI,KAC1C,IAAW,KAER,IAAS,MAAQ,CAAC,EAAK,WACzB,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,UAAvC,WAAiD,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IAAC,SAAC,OAAD,CAAM,UAAW,EAAO,YAAa,qCAAgC,EAAI,CAChL,SAHF,SAAC,GAAD,CAAoB,QAAS,IAK/B,SAAC,EAAD,CAAgB,IAAK,EAAW,GAAK,EAAoB,CAAE,SAAU,CAAkB,EAAI,CAAC,CAAK,GAEhG,EAAS,OAAS,GACjB,SAAC,KAAD,CAAI,UAAW,EAAO,SAAU,aAAW,iBACxC,WAAS,IAAK,IACb,UAAC,KAAD,CAAkB,UAAW,EAAO,WAAY,YAAW,EAAK,KAAM,eAAc,EAAK,GAAI,MAAO,GAAG,EAAK,KAAK,IAAI,EAAK,KAAK,KAAK,EAAK,SAAzI,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,UAAW,cAAY,MAAQ,IACvD,SAAC,OAAD,CAAM,UAAW,EAAO,eAAiB,WAAK,IAAW,IACzD,SAAC,OAAD,CAAM,UAAW,EAAO,iBAAmB,YAAG,EAAK,KAAK,KAAK,EAAK,QAAe,EAC/E,CAJK,IAAK,EAIV,CACL,CACC,GACF,KAEH,IAAY,KAoBT,MAnBF,UAAC,MAAD,CAAK,UAAW,EAAO,QAAS,qBAAoB,EAAQ,MAA5D,WACE,UAAC,IAAD,CAAG,UAAW,EAAO,YAArB,WACE,SAAC,OAAD,CAAM,UAAW,EAAO,YAAc,WAAQ,IAAW,IACzD,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAW,EAAQ,KAAO,WAAQ,IAAW,EAC1E,IACF,EAAQ,SAAW,KAAkF,MAA3E,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,MAAO,EAAQ,OAAS,WAAQ,MAAU,GACjG,EAAQ,UAAY,EAAQ,SAC3B,UAAC,MAAD,CAAK,UAAW,EAAO,YAAvB,UACG,EAAQ,UACP,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,UAAU,KAAM,IAAS,QAAS,aAAY,SAAS,EAAQ,OAAQ,YAAe,GAAI,OAAO,EAAG,gBAAa,GACzI,KACH,EAAQ,SACP,SAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,SAAS,KAAM,IAAS,OAAQ,aAAY,QAAQ,EAAQ,OAAQ,YAAe,GAAI,MAAM,EAAG,eAAY,GACpI,IACD,CACH,KAAQ,kBACV,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,6CAAqC,GAChE,IACD,CACH,GAEH,IACC,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,OAAO,gCAAwB,GACnE,EAAO,MAAM,UAEd,IAAS,MAAQ,EAAK,SAAW,GACnC,SAAC,IAAD,CAAG,UAAW,EAAO,OAClB,YAAM,UAAY,uBAAyB,mDAC3C,IAEH,SAAC,KAAD,CAAI,UAAW,EAAO,OAAQ,aAAW,eACtC,WAAM,IAAK,GAAM,CAChB,IAAM,EAAU,GAAiB,CAAC,EAClC,OACE,UAAC,KAAD,CAA8C,UAAW,EAAO,MAAO,gBAAe,EAAE,UAAY,OAApG,WACE,UAAC,OAAD,CAAM,UAAW,EAAO,UAAW,MAAO,EAAE,KAA5C,UACG,EAAE,YACF,EAAE,YAAa,UAAC,OAAD,CAAM,UAAW,EAAO,YAAxB,UAAqC,IAAE,EAAE,UAAiB,CAAI,OAC1E,CACN,cAAC,OAAD,CAAM,UAAW,EAAO,WAAxB,UACG,EAAE,SAAW,GAAc,EAAE,UAAW,SAAC,OAAD,CAAM,UAAW,EAAO,aAAe,YAAc,EAAE,QAAe,GAAI,KAClH,EAAE,UAAW,SAAC,OAAD,CAAM,UAAW,EAAO,KAAM,YAAU,UAAU,iBAAY,GAAI,KAC/E,IAAY,KAAsH,MAA/G,SAAC,OAAD,CAAM,MAAO,EAAE,iBAAmB,6CAA+C,OAAY,UAAc,EAC3H,CACJ,GAVK,KAAG,EAAE,SAAW,QAAQ,GAAG,EAAE,MAUlC,CAER,CAAC,CACC,IAvBJ,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,sEAA8D,GAyB5F,GAAO,GACN,SAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,WAAY,QAAS,EAC1D,YAAG,GAAK,eACH,GACN,MACJ,SAAC,IAAD,CAAG,UAAW,EAAO,EAAO,KAAO,EAAO,eAAgB,YAAW,GAAM,KAAM,KAAK,SAAS,YAAU,SAAU,YAAM,MAAQ,EAAM,EACrI,GAER,CClHA,IAAa,GACX,6HAUF,SAAS,GAAQ,CAAE,UAA+B,CAChD,OACE,UAAC,MAAD,CAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAM,EAAS,eAAiB,OAAQ,OAAO,eAAe,YAAY,MAAM,eAAe,QAAQ,cAAc,QAAQ,cAAY,OAAO,UAAU,QAA1M,WACE,SAAC,OAAD,CAAM,EAAE,wCAA0C,IAClD,SAAC,OAAD,CAAM,EAAE,eAAe,KAAK,MAAQ,EACjC,GAET,CAYA,SAAgB,GAAgB,CAAE,OAAM,UAAU,GAAO,IAAK,GAAkC,CAC9F,IAAM,KAAU,SAAM,EAChB,KAAW,UAAuB,IAAI,EACtC,EAAU,IAAS,UACnB,EAAO,GAAgB,EACvB,CAAC,EAAM,MAAW,gBAAe,KAAK,IAAI,CAAC,EACjD,MAA0B,EAAQ,KAAK,IAAI,CAAC,EAAG,GAAkB,CAAE,QAAS,IAAa,MAAU,CAAC,EACpG,IAAM,EAAM,GAAY,EAClB,EAAa,EAAK,SAAW,KAC7B,CAAC,EAAM,MAAW,YAAiE,IAAI,EACvF,CAAC,EAAM,MAAW,YAAe,IAAI,EAErC,EAAgB,EAAW,EAAgB,EAC3C,GAAe,EAAW,EAAqB,EAC/C,GAAiB,EAAW,CAAmB,EAC/C,GAAe,EAAW,CAAiB,EAG3C,EAAgB,EAAS,CAAsB,EAC/C,GAAmB,EAAW,CAAsB,EACpD,GAAmB,EAAW,CAAsB,EACpD,GAAgB,EAAW,EAAW,EACtC,GAAe,EAAW,CAAU,EAC1C,EAAoB,GAAkB,EAAkB,SAAS,EACjE,IAAM,KAAgB,eAAc,CAClC,IAAM,EAAM,IAAI,IAChB,IAAK,IAAM,KAAK,EAAc,MAAM,OAAO,WAAa,CAAC,EAAG,EAAI,IAAI,EAAE,GAAI,CAAC,EAC3E,OAAO,CACT,EAAG,CAAC,EAAc,IAAI,CAAC,EAEjB,KAAO,eACL,GAAkB,EAAK,MAAO,CAAE,OAAQ,EAAK,OAAQ,OAAQ,EAAK,OAAQ,KAAI,CAAC,EACrF,CAAC,EAAK,MAAO,EAAK,OAAQ,EAAK,OAAQ,CAAG,CAC5C,EAGM,KAAO,eAAc,EAAK,OAAQ,GAAM,EAAE,OAAS,gBAAkB,EAAE,SAAW,OAAO,EAAG,CAAC,CAAI,CAAC,EAClG,KAAY,eAAc,EAAK,OAAQ,GAAM,EAAE,SAAW,OAAO,EAAG,CAAC,CAAI,CAAC,EAC1E,EAAW,EAAK,KAAM,GAAM,EAAE,OAAS,OAAO,GAAK,KACnD,GAAQ,EAAK,QAAQ,MAAQ,KAE7B,MAAW,eAAc,CAC7B,IAAM,EAAQ,EAAK,MACb,EAAyB,CAAC,EAC1B,EAAY,GAA6B,GAAgB,EAAM,OACrE,EAAK,SAAS,EAAK,IAAU,CAC3B,IAAM,EAAO,EAAM,KAAM,GAAM,EAAE,KAAO,EAAI,MAAM,EAC5C,EAA2B,EAC7B,GAAU,CAAI,EACd,CAAE,KAAM,GAAW,EAAI,MAAM,EAAG,MAAO,GAAY,EAAI,MAAM,EAAG,OAAQ,CAAC,EAAG,QAAS,IAAK,EAC9F,EAAQ,KAAK,CAAE,KAAM,UAAW,IAAK,WAAW,EAAI,SAAU,MAAK,QAAO,KAAM,EAAM,KAAM,QAC1F,WAAY,GAAkB,EAAc,EAAK,CAAE,aAAY,KAAI,CAAC,CAAC,CAAC,IAAI,EAAG,SAAU,EAAS,CAAK,CAAE,CAAC,CAC5G,CAAC,EACD,IAAM,EAAa,EAAM,OAAQ,GAAM,EAAE,SAAW,OAAO,EACrD,EAAa,GAAY,CAAU,GAAK,CAAE,KAAM,QAAyB,MAAO,UAAoB,OAAQ,CAAC,EAAG,QAAS,IAAK,EAC9H,EAAY,EAAU,OAAS,EACjC,KAAK,IAAI,GAAG,EAAU,IAAK,GAAM,GAAkB,EAAc,EAAG,CAAE,aAAY,KAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAC/F,EAAoB,IAAI,EAC5B,EAAQ,KAAK,CAAE,KAAM,QAAS,IAAK,QAAS,MAAO,EAAY,MAAO,GAAU,CAAU,EAAG,KAAM,EAAW,KAC5G,WAAY,EAAW,SAAU,EAAS,CAAU,EAAG,MAAO,EAAK,MAAO,CAAC,EAC7E,IAAM,EAAgC,CAAE,KAAM,QAAS,MAAO,UAAW,OAAQ,CAAC,EAAG,QAAS,IAAK,EACnG,EAAQ,KAAK,CAAE,KAAM,QAAS,IAAK,QAAS,MAAO,EAAY,KAAM,QAAS,SAAU,EAAS,CAAU,EAAG,MAAO,EAAK,OAAS,EACjI,WAAY,EAAoB,EAAc,IAAI,OAAO,CAAC,EAAE,KAAK,OAAS,IAAI,CAAE,CAAC,EAGnF,IAAM,EAAa,CAAE,GAAI,GAAY,EAAM,OAAQ,GAAM,EAAE,SAAW,OAAO,CAAC,GAAK,CAAE,KAAM,OAAwB,MAAO,OAAiB,OAAQ,CAAC,EAAG,QAAS,IAAK,EAAI,OAAQ,CAAC,CAAE,EAIpL,OAHA,EAAQ,KAAK,CAAE,KAAM,QAAS,IAAK,QAAS,MAAO,EAAY,KAAM,EAAW,KAAM,SAAU,EAAG,MAAO,EAAK,OAAS,EACtH,WAAY,EAAW,GAAkB,EAAc,EAAU,CAAE,aAAY,KAAI,CAAC,CAAC,CAAC,IAAI,EAAI,EAAoB,IAAI,CAAE,CAAC,EAEpH,GAAY,CAAO,CAAC,CAAC,IAAK,IAAa,CAAE,GAAG,EAAS,QAAS,EAAQ,QAAQ,MAAM,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,CAAE,EAAE,CAC3H,EAAG,CAAC,EAAK,MAAO,EAAM,EAAW,EAAU,EAAe,EAAY,CAAG,CAAC,EAGpE,KAAQ,mBAAkB,CAC9B,EAAe,CACjB,EAAG,CAAC,CAAC,EACC,MAAY,mBAAkB,CAI9B,EAAY,GAAK,SAAS,cAAc,+CAA+C,GAC3F,EAAe,CACjB,EAAG,CAAC,CAAC,EACL,EAAa,CAAE,KAAM,EAAS,aAAc,EAAU,QAAS,EAAU,CAAC,GAI1E,mBAAgB,CACT,KACL,UAAa,CACX,OAAO,eAAiB,CACtB,IAAM,EAAS,SAAS,eACpB,IAAW,MAAQ,IAAW,SAAS,OAAM,SAAS,cAA2B,yBAAyB,CAAC,EAAE,MAAM,CAAE,cAAe,EAAK,CAAC,CAChJ,EAAG,CAAC,CACN,CACF,EAAG,CAAC,CAAO,CAAC,EAEZ,IAAM,GAAM,EAAyB,EAAwB,OAAS,CAChE,GAAS,EAAe,EAC5B,EAAgB,EAAS,CAAM,CACjC,EAEM,GAAY,EAAkB,IAA0B,CAE5D,GADA,EAAQ,IAAI,EACR,EAAO,OAAS,OAAS,EAAO,OAAS,cAAe,CAC1D,EAAG,OAAQ,QAAQ,EAAI,QAAQ,EAC/B,MACF,CACA,IAAM,EAAY,EAAO,OAAS,YAClC,GAAe,CACb,MAAO,EAAY,aAAa,EAAI,MAAM,GAAK,SAAS,EAAI,MAAM,SAClE,KAAM,GACN,aAAc,EAAO,MACrB,YAAa,GACb,YAAa,GACb,MAAO,GACP,YAAa,EACT,wBAAwB,EAAI,MAAM,cAClC,SAAS,EAAI,MAAM,kDACvB,IAAK,SAAY,CACf,EAAQ,CAAE,OAAQ,EAAI,OAAQ,KAAM,EAAO,IAAK,CAAC,EACjD,GAAI,CACE,EAAW,MAAM,GAAc,EAAI,MAAM,EACxC,MAAM,GAAkB,CAC/B,QAAU,CACR,EAAQ,IAAI,CACd,CACF,EACA,WAAc,CACZ,GAAiB,EACjB,EAAQ,CACN,KAAM,UACN,KAAM,EACF,0BAA0B,EAAI,MAAM,yDACpC,WAAW,EAAI,MAAM,QAC3B,CAAC,CACH,EACA,QAAU,GAAY,EAAQ,CAAE,KAAM,SAAU,KAAM,CAAQ,CAAC,CACjE,CAAC,CACH,EAGM,GAAqB,GAAsB,CAC/C,GAAI,EAAI,OAAS,WAAa,CAAC,EAAI,OAAQ,OAC3C,IAAM,EAAS,EAAK,KAAM,GAAM,EAAE,SAAW,EAAI,MAAM,EAClD,GACL,EAAS,EAAQ,CAAE,KAAM,EAAI,KAAM,MAAO,EAAI,MAAO,QAAS,KAAM,QAAS,EAAK,CAAC,CACrF,EAEM,MAAmB,CACvB,EAAQ,IAAI,EACZ,GAAkB,EAClB,GAAc,EACd,GAAa,EACb,EAAc,EACd,GAAa,EACb,GAAe,EACf,GAAa,EACb,GAAiB,EACjB,EAAQ,KAAK,IAAI,CAAC,CACpB,EAEM,EAAQ,GAAY,kBAAkB,CAAC,EAAE,KAAK,GAC9C,GAAW,EAAQ,EAAY,CAAK,EAAI,OACxC,GAAS,CAAC,EACV,EAAS,IAAS,SAElB,IACJ,UAAC,MAAD,CACE,IAAK,EACL,UAAW,EAAO,MAClB,YAAW,EACX,oBAAmB,EAAU,OAAS,OACtC,qBAAmB,YACnB,GAAK,EACD,CAAE,KAAM,SAAU,aAAc,GAAM,kBAAmB,EAAS,SAAU,EAAG,EAC/E,CAAE,KAAM,gBAAiB,kBAAmB,CAAQ,EAR1D,WAUE,UAAC,SAAD,CAAQ,UAAW,EAAO,KAA1B,WACE,UAAC,MAAD,CAAK,UAAW,EAAO,SAAvB,WACE,SAAC,KAAD,CAAI,GAAI,EAAS,UAAW,EAAO,MAAO,oBAAa,GACtD,CAAC,EAAK,SAAW,EAAK,OAAS,GAAI,SAAC,IAAD,CAAG,UAAW,EAAO,SAAW,YAAiB,CAAI,CAAK,GAAI,IAC/F,CACL,cAAC,MAAD,CAAK,UAAW,EAAO,YAAvB,WACE,SAAC,EAAD,CAAS,MAAM,wBAAwB,UAAU,SAC/C,mBAAC,EAAD,CAAY,QAAQ,QAAQ,KAAK,KAAK,MAAM,SAAC,GAAD,CAAc,GAAG,aAAW,wBAAwB,QAAS,CAAa,EAC/G,GACR,IACC,SAAC,EAAD,CAAS,MAAO,EAAS,8BAAgC,sBAAuB,UAAU,SACxF,mBAAC,EAAD,CACE,QAAQ,QACR,KAAK,KACL,MAAM,SAAC,GAAD,CAAiB,QAAS,GAChC,aAAY,EAAS,kBAAoB,gCACzC,eAAc,EACd,wBACA,YAAe,EAAmB,CAAC,CAAM,CAC1C,EACM,GACP,MACJ,SAAC,EAAD,CAAS,MAAM,kBAA4B,YAAU,UAAU,SAC7D,mBAAC,EAAD,CAAY,QAAQ,QAAQ,KAAK,KAAK,MAAM,SAAC,GAAD,CAAQ,GAAG,aAAW,kBAAkB,QAAS,CAAQ,EAC9F,EACN,CACC,OAER,UAAC,MAAD,CAAK,UAAW,EAAO,KAAvB,UACG,EAAK,YAAa,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,KAAK,SAAS,6BAAqB,GAAI,KACtF,EAAK,YAAa,UAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,KAAK,SAAlC,UAA2C,sBAAoB,EAAK,kBAAoB,IAAM,2BAA+B,CAAI,QACnJ,EAAK,SACJ,SAAC,IAAD,CAAG,UAAW,EAAO,OAAQ,YAAU,OAAO,4BAAoB,GAChE,CAAC,EAAK,mBAAqB,EAAK,SAAW,GAAK,EAAU,SAAW,GACvE,SAAC,IAAD,CAAG,UAAW,EAAO,OAAS,WAAwB,GACpD,MACJ,SAAC,GAAD,CAAa,aAAc,IAAI,IAAI,EAAK,MAAM,IAAI,GAAQ,CAAC,EAAK,GAAI,EAAK,KAAK,CAAC,CAAC,CAAI,GACnF,GAAS,IAAK,IACb,UAAC,UAAD,CAA4B,UAAW,EAAO,MAAO,kBAAiB,GAAG,EAAQ,GAAG,EAAQ,OAAQ,oBAAmB,EAAQ,KAA/H,WACE,SAAC,KAAD,CAAI,GAAI,GAAG,EAAQ,GAAG,EAAQ,OAAQ,UAAW,EAAO,WAAa,WAAY,EAAQ,KAAU,IACnG,SAAC,IAAD,CAAG,UAAW,EAAO,WAAa,YAAY,EAAQ,KAAS,IAC/D,SAAC,KAAD,CAAI,UAAW,EAAO,MACnB,WAAQ,QAAQ,IAAK,GAAU,CAC9B,OAAQ,EAAM,KAAd,CACE,IAAK,UAAW,CACd,IAAM,EAAM,EAAM,IAClB,GAAI,EAAK,QAAS,OAAO,KACzB,IAAM,EAAU,EAAc,EAAK,CAAE,aAAY,KAAI,CAAC,EAEhD,EADW,GAAM,SAAW,EAAI,QAAU,EAAK,OAAS,cACpC,EAAc,EAAK,CAAE,aAAY,MAAK,SAAU,EAAK,CAAC,EAAI,EACpF,OACE,SAAC,GAAD,CAEO,MACG,SACC,UACT,KAAM,GACA,OACI,WACV,UAAW,EAAc,IAAI,EAAI,MAAM,GAAK,KAC5C,MAAO,EAAM,MACb,WAAY,GAAmB,EAAK,OAAQ,EAAK,CAAG,CACrD,EAVM,EAAM,GAUZ,CAEL,CACA,IAAK,QACH,OAAO,SAAC,GAAD,CAA+B,MAAO,EAAM,MAAO,MAAO,EAAM,KAAQ,EAApD,EAAM,GAA8C,EACjF,IAAK,QACH,OACE,SAAC,GAAD,CAEE,MAAO,EAAM,MACb,UAAW,EAAc,IAAI,OAAO,GAAK,KACtB,qBACnB,cAAe,IAAS,MAAQ,EAAK,SAAW,EAAc,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,MACvF,EALM,EAAM,GAKZ,EAEL,IAAK,QACH,OACE,SAAC,GAAD,CAEE,MAAO,EAAM,MACb,OAAQ,EAAW,EAAc,EAAU,CAAE,aAAY,KAAI,CAAC,EAAI,KAClE,gBAAmB,EAAG,OAAO,EACxB,MACL,UAAW,EAAc,IAAI,OAAO,GAAK,IAC1C,EANM,EAAM,GAMZ,EAEL,QACE,OAAO,IACX,CACF,CAAC,CACC,EACG,CAvDK,IAAQ,IAuDb,CACV,GACD,SAAC,IAAD,CAAG,UAAW,EAAO,EAAO,KAAO,EAAO,eAAgB,YAAW,GAAM,KAAM,KAAK,SAAS,YAAU,SAAU,YAAM,MAAQ,EAAM,IAEvI,UAAC,UAAD,CAAS,UAAW,EAAO,MAAO,kBAAiB,GAAG,EAAQ,YAA9D,WACE,SAAC,KAAD,CAAI,GAAI,GAAG,EAAQ,YAAa,UAAW,EAAO,WAAY,yBAAkB,IAChF,SAAC,KAAD,CAAI,UAAW,EAAO,MACpB,mBAAC,GAAD,CAAc,EACZ,EACG,GACN,KAEL,UAAC,SAAD,CAAQ,UAAW,EAAO,KAA1B,WACE,SAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,WAAY,YAAe,EAAG,MAAM,EAAG,0BAA2B,IAC1G,SAAC,SAAD,CAAQ,KAAK,SAAS,UAAW,EAAO,WAAY,YAAe,EAAG,OAAO,EAAG,gBAAa,IAC7F,SAAC,GAAD,CAAY,EACN,GACL,IAIP,OADK,GACL,EAAO,kBACL,SAAC,MAAD,CAAK,UAAW,EAAO,SAAU,oBAAmB,EAAU,OAAS,OAAQ,YAAc,GAAM,EAAE,SAAW,EAAE,eAAiB,EAAM,EACtI,WACE,GACL,SAAS,IACX,EANqB,EAOvB,CAGA,SAAS,IAAY,CACnB,GAAM,CAAE,OAAQ,EAAe,EAC/B,OACE,SAAC,SAAD,CACE,KAAK,SACL,UAAW,EAAO,WAClB,MAAO,CAAE,WAAY,MAAO,EAC5B,eAAc,EACd,YAAe,EAAgB,CAAC,CAAG,EAElC,WAAM,oBAAsB,mBACvB,EAEZ","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/resources/ReadinessLines.tsx","../../../../../../src/web-ui/routes/verse/resources/ResourceFacts.tsx","../../../../../../src/web-ui/routes/verse/resources/CloudCredits.tsx","../../../../../../src/core/verse/credit-pools-api-types.ts","../../../../../../src/web-ui/routes/verse/resources/credit-pool-model.ts","../../../../../../src/web-ui/routes/verse/resources/CreditPools.tsx","../../../../../../src/web-ui/routes/verse/resources/DevinResource.tsx","../../../../../../src/web-ui/routes/verse/resources/JevResource.tsx","../../../../../../src/web-ui/routes/verse/resources/ResourceCard.tsx","../../../../../../src/web-ui/routes/verse/resources/LocalResources.tsx","../../../../../../src/web-ui/routes/verse/resources/ResourcesDrawer.tsx"],"sourcesContent":["/**\n * routes/verse/resources/ReadinessLines.tsx — the two answers every resource\n * card in the drawer owes Mason (3.14):\n *\n * Chat ● Ready\n * Fleet ● Ready · reserve 40% kept for you\n * 63% of the weekly window is left for the fleet. Roles: judges, leads.\n * Last reading 4:56 PM · Polling is paused …\n * Set up the Claude seat — run in Terminal\n * [ ashlr resources profile prepare … ] [Copy]\n *\n * Every word comes from GET /api/verse/budget/readiness (core/routing/\n * readiness.ts), which asks the SAME gates the session engine and the fleet\n * daemon ask — this component only lays them out. The dot's SHAPE follows its\n * tone the way the drawer's status line does (disc ready, ring caveat,\n * diamond blocked, dashed off), so colour is never the only signal.\n */\nimport { useEffect, useState } from 'react';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { copyText } from '../../../components/primitives/clipboard.js';\nimport { IconCheck, IconCopy } from '../../../components/primitives/icons.js';\nimport type {\n ReadinessFix,\n ReadinessTone,\n ReadinessVerdict,\n ResourceReadinessRow,\n} from '../../../../core/routing/readiness-types.js';\nimport { formatClock } from '../verse-model.js';\nimport styles from './ResourcesDrawer.module.css';\n\nconst TONE_ATTR: Readonly<Record<ReadinessTone, 'success' | 'warning' | 'danger' | 'neutral'>> = {\n ok: 'success',\n warn: 'warning',\n blocked: 'danger',\n off: 'neutral',\n};\n\n/** \"Ready · reserve 40% kept for you\" when the fleet protects a share for Mason. */\nexport function fleetWord(row: ResourceReadinessRow): string {\n const { fleet } = row;\n if (fleet.ready && fleet.reservePercent !== null && fleet.reservePercent > 0) {\n return `${fleet.word} · reserve ${Math.round(fleet.reservePercent)}% kept for you`;\n }\n return fleet.word;\n}\n\n/** The reading caveat, or null when the reading is live. */\nexport function readingText(row: ResourceReadinessRow): string | null {\n const { reading } = row;\n if (reading.state === 'live' || row.kind !== 'subscription') return null;\n const clock = reading.at ? formatClock(reading.at) : '';\n const head = reading.state === 'last' && clock ? `Last reading ${clock}` : 'No current reading';\n return reading.note ? `${head} · ${reading.note}` : head;\n}\n\nfunction Line({ label, verdict, word }: { label: string; verdict: ReadinessVerdict; word: string }) {\n const tone = TONE_ATTR[verdict.tone];\n const full = verdict.detail ? `${label}: ${word} — ${verdict.detail}` : `${label}: ${word}`;\n return (\n <div className={styles.readyLine} data-tone={tone} data-ready={verdict.ready || undefined} title={full}>\n <span className={styles.readyKey}>{label}</span>\n <span className={styles.readyBody}>\n <span className={styles.readyHead}>\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span className={styles.readyWord}>{word}</span>\n </span>\n {verdict.detail ? <span className={styles.readyDetail}>{verdict.detail}</span> : null}\n </span>\n </div>\n );\n}\n\nfunction CommandFix({ fix }: { fix: ReadinessFix }) {\n const [copied, setCopied] = useState<'idle' | 'done' | 'failed'>('idle');\n useEffect(() => {\n if (copied === 'idle') return undefined;\n const timer = window.setTimeout(() => setCopied('idle'), 2_000);\n return () => window.clearTimeout(timer);\n }, [copied]);\n const line = fix.command ?? '';\n return (\n <div className={styles.fixBlock}>\n <p className={styles.fixLabel}>{fix.label} — run in Terminal</p>\n <div className={styles.fixCommand}>\n <code className={styles.fixCode} title={line}>{line}</code>\n <button\n type=\"button\"\n className={styles.fixCopy}\n aria-label={copied === 'done' ? 'Copied' : `Copy command: ${fix.label}`}\n onClick={() => { void copyText(line).then((ok) => setCopied(ok ? 'done' : 'failed')); }}\n >\n {copied === 'done' ? <IconCheck /> : <IconCopy />}\n <span>{copied === 'done' ? 'Copied' : copied === 'failed' ? 'Copy failed' : 'Copy'}</span>\n </button>\n </div>\n </div>\n );\n}\n\n/** Unique fixes across both verdicts, chat's first. */\nexport function readinessFixes(row: ResourceReadinessRow): ReadinessFix[] {\n const out: ReadinessFix[] = [];\n for (const fix of [row.chat.fix, row.fleet.fix]) {\n if (!fix) continue;\n if (out.some((f) => f.kind === fix.kind && f.command === fix.command && f.seatId === fix.seatId)) continue;\n out.push(fix);\n }\n return out;\n}\n\nexport interface ReadinessLinesProps {\n row: ResourceReadinessRow | null | undefined;\n /**\n * Renders reconnect / check-again fixes as buttons. Omit it on a card that\n * already offers those actions (the account cards do), so the drawer never\n * shows the same button twice.\n */\n onAction?: (fix: ReadinessFix, row: ResourceReadinessRow) => void;\n busy?: boolean;\n}\n\nexport function ReadinessLines({ row, onAction, busy = false }: ReadinessLinesProps) {\n if (!row) return null;\n const reading = readingText(row);\n const fixes = readinessFixes(row).filter((fix) => fix.kind === 'command' || onAction !== undefined);\n return (\n <div className={styles.readiness} data-readiness={row.id} role=\"group\" aria-label={`${row.label}: readiness`}>\n <Line label=\"Chat\" verdict={row.chat} word={row.chat.word} />\n <Line label=\"Fleet\" verdict={row.fleet} word={fleetWord(row)} />\n {reading !== null ? <p className={styles.readyReading} title={reading}>{reading}</p> : null}\n {fixes.map((fix) =>\n fix.kind === 'command' ? (\n <CommandFix key={`${fix.kind}:${fix.command ?? ''}`} fix={fix} />\n ) : (\n <div key={`${fix.kind}:${fix.seatId ?? ''}`} className={styles.cardActions}>\n <Button size=\"sm\" variant=\"primary\" busy={busy} aria-label={`${fix.label}: ${row.label}`} onClick={() => onAction?.(fix, row)}>\n {fix.label}\n </Button>\n </div>\n ),\n )}\n </div>\n );\n}\n","/**\n * routes/verse/resources/ResourceFacts.tsx — the facts row EVERY Resources\n * card carries, whatever the provider (3.15, \"equal partners\"):\n *\n * Elite · subscription · Opus 5.5, Sonnet 5 +2 more\n * Elite · credits · subscription · Devin, SWE, Opus · 10 ACUs kept for you\n * Fast · free · SWE\n *\n * Tier and cost basis come from routing/tiers.ts — the same table the seat\n * router and the Auto seat rank with — so the drawer can never call a seat\n * elite that routing treats as something else.\n */\nimport { COST_BASIS_LABELS, TIER_BLURBS, TIER_LABELS, type CostBasis } from '../../../../core/routing/tiers.js';\nimport { modelsLine, type ResourceFactsView } from './resources-model.js';\nimport styles from './ResourcesDrawer.module.css';\n\nexport interface ResourceFactsProps {\n facts: ResourceFactsView;\n /** Extra cost bases a multi-seat card spans (Devin: cloud credits + CLI plan). */\n bases?: readonly CostBasis[];\n}\n\nexport function ResourceFacts({ facts, bases }: ResourceFactsProps) {\n const models = modelsLine(facts.models);\n const allBases = [...new Set([facts.basis, ...(bases ?? [])])];\n return (\n <p className={styles.facts} data-resource-facts data-tier={facts.tier}>\n <span className={styles.tierChip} data-tier={facts.tier} title={TIER_BLURBS[facts.tier]}>{TIER_LABELS[facts.tier]}</span>\n <span title=\"What one more turn costs\">{allBases.map((b) => COST_BASIS_LABELS[b]).join(' + ')}</span>\n {models !== null ? <span title={facts.models.join(', ')}>{models}</span> : null}\n {facts.reserve !== null ? <span>{facts.reserve}</span> : null}\n </p>\n );\n}\n","/**\n * routes/verse/resources/CloudCredits.tsx — Claude cloud estimate in the\n * Resources drawer (unit 3.11 C6): estimated remaining of the total, the\n * sessions running now and launched today, and the link to the real balance\n * on claude.ai. The balance is not readable programmatically (core/cloud\n * types.ts), so every figure is labelled an ESTIMATE, with the server's own\n * note beside it.\n *\n * GET /api/verse/cloud lands with another unit; until it does, this card says\n * \"Cloud lane not available yet\" — a designed state, not an error.\n */\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { IconExternalLink } from '../../../components/primitives/icons.js';\nimport { MonogramTile } from '../apps/MonogramTile.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { usedPercentText } from '../percent-text.js';\nimport { approxCredits, CLOUD_NOT_SET_UP_WORD, notSetUpLine } from '../cloud/cloud-model.js';\nimport { formatUsd, type CloudCreditsView } from './resources-model.js';\nimport type { ReadinessFix, ResourceReadinessRow } from '../../../../core/routing/readiness-types.js';\nimport { cloudCreditsQuery, RESOURCES_POLL_MS } from './resources-queries.js';\nimport { ReadinessLines } from './ReadinessLines.js';\nimport { ResourceFacts } from './ResourceFacts.js';\nimport type { ResourceFactsView } from './resources-model.js';\nimport styles from './ResourcesDrawer.module.css';\n\n/** Below this share of the total left, the meter turns amber. */\nconst LOW_AT = 20;\n\n/**\n * The seat is missing, so nothing launches: the blocker is the state and the\n * credits a plain approximate figure — no \"left\" meter reading as headroom\n * (cloud/cloud-model.ts, \"Standing\").\n */\nfunction NotSetUp({ credits, sessions }: { credits: CloudCreditsView; sessions: string }) {\n return (\n <>\n <p className={styles.status} data-tone=\"warning\" title={notSetUpLine(credits.remainingUsd)}>\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span className={styles.statusLabel}>{CLOUD_NOT_SET_UP_WORD}</span>\n <span className={styles.subtle}>· {approxCredits(credits.remainingUsd)}</span>\n <span className={styles.pill} data-tone=\"neutral\" title={credits.estimateNote}>estimate</span>\n </p>\n <p className={styles.subtle}>{credits.seatReason ?? SEAT_NOT_SET_UP}</p>\n <p className={styles.subtle}>{sessions}</p>\n </>\n );\n}\n\nconst SEAT_NOT_SET_UP = \"The Claude seat isn't set up on this Mac.\";\n\nfunction Credits({ credits }: { credits: CloudCreditsView }) {\n const left = credits.remainingPercent;\n const level = left <= 0 ? 'limit' : left < LOW_AT ? 'tight' : 'ok';\n const headline = `${formatUsd(credits.remainingUsd)} of ${formatUsd(credits.totalUsd)} left`;\n const sessions = [\n `${credits.running} running`,\n credits.maxSessionsPerDay !== null ? `${credits.sessionsToday} of ${credits.maxSessionsPerDay} today` : `${credits.sessionsToday} today`,\n ].join(' · ');\n if (!credits.seatReady) {\n return (\n <>\n <NotSetUp credits={credits} sessions={sessions} />\n <p className={styles.fine}>{credits.estimateNote}</p>\n <BalanceLink href={credits.balanceUrl} />\n </>\n );\n }\n const blocker = !credits.canLaunch ? credits.canLaunchReason : null;\n return (\n <>\n <p className={styles.creditsHead}>\n <span className={styles.creditsAmount}>{headline}</span>\n <span className={styles.pill} data-tone=\"neutral\" title={credits.estimateNote}>estimate</span>\n </p>\n <div className={styles.meter} data-level={level} data-single>\n <span\n className={styles.meterTrack}\n role=\"img\"\n aria-label={`Cloud credits: an estimated ${formatUsd(credits.remainingUsd)} of ${formatUsd(credits.totalUsd)} left, ${usedPercentText(left)}`}\n >\n <span className={styles.meterFill} data-kind=\"left\" style={{ width: `${Math.round(left)}%` }} />\n </span>\n <span className={styles.meterValue} aria-hidden=\"true\">{usedPercentText(left)} left</span>\n </div>\n <p className={styles.subtle}>{sessions}</p>\n {blocker !== null ? (\n <p className={styles.status} data-tone=\"warning\"><span className={styles.statusDot} aria-hidden=\"true\" /><span>{blocker}</span></p>\n ) : null}\n <p className={styles.fine}>{credits.estimateNote}</p>\n <BalanceLink href={credits.balanceUrl} />\n </>\n );\n}\n\nfunction BalanceLink({ href }: { href: string }) {\n return (\n <a className={styles.external} href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n Real balance on claude.ai\n <IconExternalLink />\n <span className={styles.visuallyHidden}> (opens in a new tab)</span>\n </a>\n );\n}\n\nexport interface CloudCreditsProps {\n /** The `cloud` row of GET /api/verse/budget/readiness, when this server has it. */\n readiness?: ResourceReadinessRow | null;\n onReadinessAction?: (fix: ReadinessFix, row: ResourceReadinessRow) => void;\n readinessBusy?: boolean;\n /** 3.15: tier · cost basis · models — the facts row every card carries. */\n facts?: ResourceFactsView | null;\n}\n\nexport function CloudCredits({ readiness = null, onReadinessAction, readinessBusy = false, facts = null }: CloudCreditsProps = {}) {\n const read = useQuery(cloudCreditsQuery);\n const refetch = useRefetch(cloudCreditsQuery);\n usePollWhileVisible(refetch, RESOURCES_POLL_MS.cloud);\n const loading = read.data === undefined && read.status !== 'error';\n const available = read.data?.available ?? false;\n const credits = read.data?.credits ?? null;\n return (\n <li className={styles.card} data-resource=\"cloud\" data-cloud={loading ? 'loading' : !available ? 'unavailable' : credits ? 'ready' : 'unrecognised'}>\n <div className={styles.cardHead}>\n <MonogramTile monogram=\"C\" engine=\"claude\" size=\"sm\" />\n <h4 className={styles.cardName}>\n <span>Claude cloud estimate</span>\n <span className={styles.plan}>claude.ai</span>\n </h4>\n </div>\n {facts !== null ? <ResourceFacts facts={facts} /> : null}\n {loading ? (\n <p className={styles.subtle} aria-busy=\"true\">Reading cloud credits…</p>\n ) : !available ? (\n <>\n <p className={styles.status} data-tone=\"neutral\">\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span className={styles.statusLabel}>Cloud lane not available yet</span>\n </p>\n <p className={styles.fine}>Credits show here once this build has the cloud lane.</p>\n </>\n ) : credits === null ? (\n <p className={styles.subtle}>Unrecognized response — update Ashlr.</p>\n ) : (\n <Credits credits={credits} />\n )}\n <ReadinessLines row={readiness} busy={readinessBusy} {...(onReadinessAction ? { onAction: onReadinessAction } : {})} />\n </li>\n );\n}\n","import type { CreditPoolReadView } from '../resources/credit-pool-types.js';\n\n/** Account-bound recorded evidence only; this read cannot spend or refresh providers. */\nexport interface CreditPoolsRead {\n v: 1;\n state: 'warming' | 'current' | 'stale' | 'unavailable';\n refreshedAt: string | null;\n pools: CreditPoolReadView | null;\n}\nexport const CREDIT_POOLS_PATH = '/api/verse/resources/credit-pools';\n","import type { CreditPoolReadView, CreditPoolRowView } from '../../../../core/resources/credit-pool-types.js';\n\nconst MAX_BYTES = 1024 * 1024;\nconst ID = /^[a-z0-9][a-z0-9_-]{0,79}$/;\nfunction object(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value) && [Object.prototype, null].includes(Object.getPrototypeOf(value));\n}\nfunction exact(value: Record<string, unknown>, keys: string[]): boolean {\n const own = Reflect.ownKeys(value);\n return own.length === keys.length && own.every(key => typeof key === 'string' && keys.includes(key) && 'value' in Object.getOwnPropertyDescriptor(value, key)!);\n}\nfunction iso(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n const at = Date.parse(value);\n return Number.isFinite(at) && new Date(at).toISOString() === value;\n}\nfunction decimal(value: unknown): boolean {\n return value === null || typeof value === 'string' && value.length <= 64 && /^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/.test(value) && Number.isFinite(Number(value));\n}\nfunction dense(value: unknown): value is unknown[] {\n if (!Array.isArray(value) || value.length > MAX_BYTES / 2) return false;\n const keys = Reflect.ownKeys(value);\n return keys.length === value.length + 1 && keys.every(key => key === 'length' || typeof key === 'string' && /^(?:0|[1-9]\\d*)$/.test(key) &&\n Number(key) < value.length && 'value' in Object.getOwnPropertyDescriptor(value, key)!);\n}\n\nfunction greater(a: string, b: string): boolean {\n const parts = [a.split('.'), b.split('.')];\n const scale = Math.max(parts[0]![1]?.length ?? 0, parts[1]![1]?.length ?? 0);\n const ints = parts.map(row => BigInt(row[0]! + (row[1] ?? '').padEnd(scale, '0')));\n return ints[0]! > ints[1]!;\n}\n\n/** Incompatible or identity-leaking shapes are unavailable, never a zero wallet. */\nexport function narrowCreditPoolsRead(raw: unknown): CreditPoolReadView | null {\n try {\n if (!object(raw) || !exact(raw, ['v', 'sourceState', 'rows']) || raw.v !== 1 ||\n typeof raw.sourceState !== 'string' || !['healthy', 'missing', 'unavailable'].includes(raw.sourceState) || !dense(raw.rows) ||\n raw.sourceState !== 'healthy' && raw.rows.length !== 0) return null;\n const seen = new Set<string>();\n for (const value of raw.rows) {\n if (!object(value) || !exact(value, ['poolId', 'accountId', 'provider', 'kind', 'amount', 'total', 'unit', 'surface', 'capturedAt',\n 'expiresAt', 'expiryKind', 'source', 'identityState', 'evidenceState', 'expiryState']) ||\n typeof value.poolId !== 'string' || !ID.test(value.poolId) || typeof value.accountId !== 'string' || !ID.test(value.accountId) ||\n typeof value.provider !== 'string' || !['claude', 'codex', 'grok'].includes(value.provider) ||\n !decimal(value.amount) || !decimal(value.total) || !iso(value.capturedAt) || !(value.expiresAt === null || iso(value.expiresAt)) ||\n typeof value.expiryKind !== 'string' || !['fixed', 'rolling-release', 'unknown'].includes(value.expiryKind) ||\n (value.expiryKind === 'unknown') !== (value.expiresAt === null) ||\n !object(value.source) || !exact(value.source, ['kind', 'adapter']) ||\n typeof value.identityState !== 'string' || !['matched', 'unknown', 'mismatch'].includes(value.identityState) ||\n typeof value.evidenceState !== 'string' || !['recorded', 'current-native', 'stale-native', 'identity-unknown', 'identity-mismatch'].includes(value.evidenceState) ||\n typeof value.expiryState !== 'string' || !['upcoming', 'expired', 'unknown'].includes(value.expiryState) ||\n (value.expiryState === 'unknown') !== (value.expiresAt === null) ||\n value.amount !== null && value.total !== null && greater(value.amount as string, value.total as string)) return null;\n if (value.identityState !== 'matched' && (value.amount !== null || value.total !== null ||\n value.evidenceState !== (value.identityState === 'unknown' ? 'identity-unknown' : 'identity-mismatch'))) return null;\n if (value.kind === 'gifted-cloud' || value.kind === 'purchased-usage') {\n if (value.provider !== 'claude' || value.unit !== 'USD' || value.source.kind !== 'verified-manual' || value.source.adapter !== 'claude-account-ui' ||\n value.surface !== (value.kind === 'gifted-cloud' ? 'cloud-session' : 'over-plan-usage') || value.expiryKind === 'rolling-release' ||\n value.identityState === 'matched' && value.evidenceState !== 'recorded') return null;\n } else if (value.kind === 'subscription-allowance') {\n const adapter = value.provider === 'claude' ? 'claude-usage' : value.provider === 'codex' ? 'codex-rate-limits' : 'grok-usage';\n if (value.unit !== 'percent' || value.total !== null || value.amount !== null && greater(value.amount as string, '100') || value.surface !== 'subscription' ||\n value.source.kind !== 'native-metadata' || value.source.adapter !== adapter ||\n value.identityState === 'matched' && !['current-native', 'stale-native'].includes(value.evidenceState)) return null;\n } else return null;\n const key = `${value.provider}:${value.accountId}:${value.poolId}`;\n if (seen.has(key)) return null;\n seen.add(key);\n }\n if (new TextEncoder().encode(JSON.stringify(raw)).length > MAX_BYTES) return null;\n return raw as unknown as CreditPoolReadView;\n } catch { return null; }\n}\n\nexport interface CreditPoolDisplay {\n title: string;\n amountText: string;\n sourceText: string;\n capturedAt: string;\n expiryText: string;\n expiresAt: string | null;\n scopeText: string;\n}\n/** Display only: no dollar conversion, allowance inference, admission or spend-down priority. */\nexport function creditPoolDisplay(row: CreditPoolRowView, nowMs: number): CreditPoolDisplay {\n const title = row.kind === 'gifted-cloud' ? 'Cloud gift' : row.kind === 'purchased-usage' ? 'Purchased usage credits' : 'Subscription window';\n const historical = row.evidenceState !== 'current-native' || row.expiresAt !== null && Date.parse(row.expiresAt) <= nowMs;\n const amountText = row.identityState === 'unknown' ? 'Balance hidden · account not verified'\n : row.identityState === 'mismatch' ? 'Balance hidden · account changed'\n : row.amount === null ? row.kind === 'subscription-allowance' ? 'Usage unknown' : 'Balance unknown'\n : row.unit === 'USD' ? `$${row.amount} last recorded` : `${row.amount}% used${historical ? ' · last recorded' : ''}`;\n return { title, amountText, capturedAt: row.capturedAt, expiresAt: row.expiresAt,\n sourceText: row.source.kind === 'verified-manual' ? 'Verified account UI capture · historical reading' : historical ? 'Native metadata · historical reading' : 'Native metadata · last reading',\n expiryText: row.expiresAt === null ? 'Expiry unknown' : Date.parse(row.expiresAt) <= nowMs ? 'Recorded deadline has passed'\n : row.expiryKind === 'rolling-release' ? 'Rolling release, not credit expiry' : row.kind === 'subscription-allowance' ? 'Recorded subscription reset' : 'Verified credit expiry',\n scopeText: row.kind === 'gifted-cloud' ? 'Claude cloud sessions only; excludes Projects and Routines.'\n : row.kind === 'purchased-usage' ? 'Usage beyond your plan; separate from cloud gifts.' : 'Subscription usage; separate from dollar credits.' };\n}\n","import { useId, useState } from 'react';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { optionalQuery } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { CREDIT_POOLS_PATH, type CreditPoolsRead } from '../../../../core/verse/credit-pools-api-types.js';\nimport { creditPoolDisplay, narrowCreditPoolsRead } from './credit-pool-model.js';\nimport styles from './credit-pools.module.css';\n\n/** A read cannot promote captured balances into current native availability. */\nexport function narrowCreditPoolsEnvelope(raw: unknown): CreditPoolsRead | null {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n if (![Object.prototype, null].includes(Object.getPrototypeOf(raw)) ||\n Reflect.ownKeys(raw).length !== 4 || !['v', 'state', 'refreshedAt', 'pools'].every(key =>\n Object.hasOwn(raw, key) && 'value' in Object.getOwnPropertyDescriptor(raw, key)!)) return null;\n const row = raw as Record<string, unknown>;\n if (row.v !== 1 || typeof row.state !== 'string' || !['warming', 'current', 'stale', 'unavailable'].includes(row.state) ||\n row.refreshedAt !== null && (typeof row.refreshedAt !== 'string' || !Number.isFinite(Date.parse(row.refreshedAt)) ||\n new Date(row.refreshedAt).toISOString() !== row.refreshedAt)) return null;\n if (row.pools === null) return ['warming', 'unavailable'].includes(row.state) ? raw as CreditPoolsRead : null;\n return ['current', 'stale'].includes(row.state) && narrowCreditPoolsRead(row.pools) !== null ? raw as CreditPoolsRead : null;\n}\nconst query = optionalQuery('verse-credit-pools', CREDIT_POOLS_PATH, 'Recorded credit balances', narrowCreditPoolsEnvelope);\nfunction CreditPoolReading({ accountNames }: { accountNames: ReadonlyMap<string, string> }) {\n const reading = useQuery(query, { freshMs: 15_000 });\n const refetch = useRefetch(query);\n const [openedAt] = useState(() => Date.now());\n const now = useNow(2_000);\n const value = reading.data?.value;\n usePollWhileVisible(refetch, value?.state === 'warming' && now - openedAt < 30_000 ? 2_000 : 15_000);\n const pools = value?.pools;\n if (!pools) return <p className={styles.note}>{reading.data?.reason ?? (value?.state === 'unavailable'\n ? 'Credit balance records are unavailable. Balances are unknown.' : 'Reading recorded credit balances…')}</p>;\n return <div className={styles.body}>\n {pools.sourceState !== 'healthy' || !pools.rows.length ? <p className={styles.note}>\n {pools.sourceState === 'unavailable' ? 'The credit balance record could not be read. Balances are unknown.'\n : 'No verified credit balance records yet. Balances are unknown.'}</p> : <ul className={styles.rows}>\n {pools.rows.map(row => {\n const display = creditPoolDisplay(row, now);\n return <li key={`${row.provider}:${row.accountId}:${row.poolId}`}>\n <div className={styles.heading}><strong>{display.title}</strong><span>{accountNames.get(row.accountId) ?? row.accountId}</span></div>\n <p className={styles.amount}>{display.amountText}</p>\n {row.total !== null && row.identityState === 'matched' ? <p className={styles.note}>Recorded {row.kind === 'gifted-cloud' ? 'grant' : 'total'}: ${row.total}</p> : null}\n <p className={styles.note}>{display.sourceText}</p>\n <p className={styles.note}>Captured <time dateTime={display.capturedAt} title={display.capturedAt}>{new Date(display.capturedAt).toLocaleString()}</time></p>\n <p className={styles.note}>{display.expiryText}{display.expiresAt ? <> · <time dateTime={display.expiresAt} title={display.expiresAt}>{new Date(display.expiresAt).toLocaleString()}</time></> : null}</p>\n <p className={styles.note}>{display.scopeText}</p>\n </li>;\n })}\n </ul>}\n {value?.state === 'stale' ? <p className={styles.note}>Showing the last reading while it refreshes.</p> : null}\n <p className={styles.note}>Subscription windows, cloud gifts and purchased credits are separate. Recorded balances do not establish current spendability.</p>\n <Button size=\"sm\" variant=\"ghost\" onClick={refetch}>Refresh balances</Button>\n </div>;\n}\n/** The resource drawer and this disclosure must both be open before any read. */\nexport function CreditPools({ accountNames = new Map() }: { accountNames?: ReadonlyMap<string, string> }) {\n const [open, setOpen] = useState(false);\n const titleId = useId();\n return <details className={styles.panel} onToggle={event => setOpen(event.currentTarget.open)}>\n <summary id={titleId}>Credit balances <span>gifts, purchased credits and plan windows</span></summary>\n {open ? <CreditPoolReading accountNames={accountNames} /> : null}\n </details>;\n}\n","/**\n * routes/verse/resources/DevinResource.tsx — Devin in the Resources drawer\n * (⌘.) (3.15): connection status, ACUs used against the budget, sessions\n * running today, a reply box for sessions waiting on Mason, and the same\n * Chat / Fleet readiness lines every resource shows (the verdicts come from\n * the server, core/devin/service.ts devinStatus).\n *\n * ACUs are Devin's own readings; dollars are an estimate and say so. A\n * server without the lane (404) renders nothing — the drawer simply has no\n * Devin card, never a false \"not connected\". Setting up happens in a\n * terminal (`ashlr devin connect`, hidden input): the page never takes a key.\n *\n * A waiting session's row also opens its Evidence (the same timeline sheet\n * cloud tasks use, cloud/EvidenceTimeline.tsx): session status, ACUs against\n * its cap, messages Verse sent, and its PR onward once there is one.\n */\nimport { lazy, Suspense, useState } from 'react';\nimport type { DevinTaskV1 } from '../../../../core/devin/types.js';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { IconExternalLink } from '../../../components/primitives/icons.js';\nimport { Input } from '../../../components/primitives/Input.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { MonogramTile } from '../apps/MonogramTile.js';\nimport { describeContextError, useTokenGate } from '../context/use-token-gate.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { acuLevel, devinHeadline, devinModelsLines, devinReadinessRow, DEVIN_USAGE_LINK, formatAcu, safeDevinHref, waitingTasks } from '../devin/devin-model.js';\nimport { DEVIN_POLL_MS, devinQuery, messageDevinTask } from '../devin/devin-queries.js';\nimport { ReadinessLines } from './ReadinessLines.js';\nimport { ResourceFacts } from './ResourceFacts.js';\nimport type { ResourceFactsView } from './resources-model.js';\nimport type { CostBasis } from '../../../../core/routing/tiers.js';\nimport styles from './ResourcesDrawer.module.css';\n\n/** The evidence sheet is its own chunk, fetched the first time a row's Evidence opens. */\nconst EvidenceTimeline = lazy(() => import('../cloud/EvidenceTimeline.js'));\n\nfunction Reply({ task }: { task: DevinTaskV1 }) {\n const gate = useTokenGate();\n const [text, setText] = useState('');\n const [busy, setBusy] = useState(false);\n const [note, setNote] = useState<{ tone: 'success' | 'danger'; text: string } | null>(null);\n const [evidenceOpen, setEvidenceOpen] = useState(false);\n const session = safeDevinHref(task.sessionUrl, 'app.devin.ai');\n const send = async () => {\n const message = text.trim();\n if (!message) return;\n setBusy(true);\n setNote(null);\n try {\n const done = await gate.run('Send this reply to the Devin session.', () => messageDevinTask(task.id, message));\n if (done === null) return;\n setText('');\n setNote({ tone: 'success', text: 'Sent. Devin picks it up in the session.' });\n } catch (err) {\n setNote({ tone: 'danger', text: describeContextError(err) });\n } finally {\n setBusy(false);\n }\n };\n return (\n <li className={styles.devinWaiting} data-devin-task={task.id}>\n <p className={styles.subtle}>\n <strong>{task.title}</strong> — {task.stateReason ?? 'Devin is waiting for you.'}\n {session ? (\n <>\n {' '}\n <a className={styles.external} href={session} target=\"_blank\" rel=\"noopener noreferrer\">\n Open in Devin\n <IconExternalLink />\n <span className={styles.visuallyHidden}> (opens in a new tab)</span>\n </a>\n </>\n ) : null}\n {' '}\n <Button size=\"sm\" variant=\"ghost\" aria-haspopup=\"dialog\" aria-label={`Evidence: ${task.title}`} onClick={() => setEvidenceOpen(true)}>\n Evidence\n </Button>\n </p>\n <form className={styles.devinReply} onSubmit={(event) => { event.preventDefault(); void send(); }}>\n <Input aria-label={`Reply to Devin: ${task.title}`} value={text} maxLength={4000} placeholder=\"Reply to Devin…\" onChange={(event) => setText(event.target.value)} />\n <Button size=\"sm\" type=\"submit\" busy={busy} disabled={text.trim() === ''}>Send</Button>\n </form>\n {note ? <p className={styles.status} data-tone={note.tone} role=\"status\"><span className={styles.statusDot} aria-hidden=\"true\" /><span>{note.text}</span></p> : null}\n <MutationTokenDialog {...gate.dialog} tokenLabel=\"Mutation token\" tokenHelp=\"the mutation token ashlr verse printed\" />\n {evidenceOpen ? (\n <Suspense fallback={null}>\n <EvidenceTimeline taskId={task.id} title={task.title} open onClose={() => setEvidenceOpen(false)} />\n </Suspense>\n ) : null}\n </li>\n );\n}\n\nexport interface DevinResourceProps {\n /** 3.15: tier · cost basis · models — the facts row every card carries (the drawer builds it from the Devin seats). */\n facts?: ResourceFactsView | null;\n /** Every cost basis the Devin seats span (cloud ACU credits, the CLI's plan). */\n bases?: readonly CostBasis[];\n}\n\nexport function DevinResource({ facts = null, bases }: DevinResourceProps = {}) {\n const read = useQuery(devinQuery);\n const refetch = useRefetch(devinQuery);\n usePollWhileVisible(refetch, DEVIN_POLL_MS);\n if (read.data === undefined && read.status !== 'error') {\n return (\n <li className={styles.card} data-resource=\"devin\" data-devin=\"loading\">\n <p className={styles.subtle} aria-busy=\"true\">Reading Devin…</p>\n </li>\n );\n }\n if (!read.data?.available) return null;\n const overview = read.data.value;\n if (!overview) {\n return (\n <li className={styles.card} data-resource=\"devin\" data-devin=\"unrecognised\">\n <p className={styles.subtle}>{read.data.reason ?? 'Unrecognized response — update Ashlr.'}</p>\n </li>\n );\n }\n const { status, budget } = overview;\n const head = devinHeadline(status);\n const live = status.enabled && status.connected;\n const level = acuLevel(budget);\n const leftPercent = budget.acuBudgetTotal > 0 ? Math.max(0, Math.min(100, (budget.acuRemaining / budget.acuBudgetTotal) * 100)) : 0;\n const waiting = waitingTasks(overview.tasks);\n const modelLines = overview.cli && overview.cli.state !== 'missing' ? devinModelsLines(overview.models) : null;\n return (\n <li className={styles.card} data-resource=\"devin\" data-devin={status.state}>\n <div className={styles.cardHead}>\n <MonogramTile monogram=\"Dv\" engine=\"devin\" size=\"sm\" />\n <h4 className={styles.cardName}>\n <span>Devin</span>\n <span className={styles.plan}>{status.principalName ?? 'Cognition'}</span>\n </h4>\n </div>\n {facts !== null ? (\n <ResourceFacts\n facts={{ ...facts, reserve: live && budget.budget.reserveAcu > 0 ? `${formatAcu(budget.budget.reserveAcu)} kept for you` : facts.reserve }}\n {...(bases ? { bases } : {})}\n />\n ) : null}\n <p className={styles.status} data-tone={head.tone} title={status.reason}>\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span className={styles.statusLabel}>{head.word}</span>\n </p>\n <p className={styles.subtle}>{status.reason}</p>\n {live ? (\n <>\n <p className={styles.creditsHead}>\n <span className={styles.creditsAmount}>{formatAcu(budget.acuRemaining)} of {formatAcu(budget.acuBudgetTotal)} left</span>\n <span className={styles.pill} data-tone=\"neutral\" title=\"Your configured allowance minus tracked ACU usage; not a provider-reported remaining balance.\">tracked budget</span>\n {budget.paused ? <span className={styles.pill} data-tone=\"warning\">paused</span> : null}\n </p>\n <div className={styles.meter} data-level={level} data-single>\n <span\n className={styles.meterTrack}\n role=\"img\"\n aria-label={`Devin ACUs: ${formatAcu(budget.acuUsed)} used of ${formatAcu(budget.acuBudgetTotal)}, ${formatAcu(budget.acuRemaining)} left`}\n >\n <span className={styles.meterFill} data-kind=\"left\" style={{ width: `${Math.round(leftPercent)}%` }} />\n </span>\n <span className={styles.meterValue} aria-hidden=\"true\">{Math.round(leftPercent)}% left</span>\n </div>\n <p className={styles.subtle}>\n {budget.running} running · {budget.sessionsToday} today · {formatAcu(budget.acuToday)} today · about ${budget.estimatedUsdUsed}\n <span className={styles.pill} data-tone=\"neutral\" title={budget.estimateNote}>estimate</span>\n </p>\n {!budget.canLaunch.ok ? (\n <p className={styles.status} data-tone=\"warning\"><span className={styles.statusDot} aria-hidden=\"true\" /><span>{budget.canLaunch.reason}</span></p>\n ) : null}\n {waiting.length > 0 ? (\n <ul className={styles.devinWaitingList} aria-label=\"Devin sessions waiting for you\">\n {waiting.map((task) => <Reply key={task.id} task={task} />)}\n </ul>\n ) : null}\n <p className={styles.fine}>{budget.estimateNote}</p>\n <a className={styles.external} href={DEVIN_USAGE_LINK} target=\"_blank\" rel=\"noopener noreferrer\">\n Real usage on app.devin.ai\n <IconExternalLink />\n <span className={styles.visuallyHidden}> (opens in a new tab)</span>\n </a>\n </>\n ) : null}\n {modelLines ? (\n // 3.15: the CLI's own catalog (`devin models list`), summarised; the\n // default is what a new Devin (CLI) chat starts on (devin.defaultModel).\n <p className={styles.subtle} data-devin-models={overview.models?.source ?? 'unknown'}\n title={modelLines.stale ? 'Not listed yet — the full list appears after the CLI is asked (in the background).' : undefined}>\n {modelLines.catalog} · {modelLines.defaultLine}\n </p>\n ) : null}\n {overview.cli && overview.cli.state !== 'missing' ? (\n // The CLI reports no ACU / usage numbers, so its chats are not in the\n // budget above — say that instead of implying they are counted.\n <p className={styles.fine} data-devin-cli={overview.cli.state}>\n Devin (CLI){overview.cli.state === 'logged-out' ? <> — logged out; run <code>devin auth login</code></> : null}: usage not reported by the CLI,\n so CLI chats are not counted here.\n </p>\n ) : null}\n <ReadinessLines row={devinReadinessRow(status)} />\n </li>\n );\n}\n","/**\n * routes/verse/resources/JevResource.tsx — Jev (TypeSafe AI's System One\n * decision model) in the Resources drawer (⌘.) (3.15).\n *\n * Shows whether the decision layer is on, today's decisions / API attempts /\n * fallback rate, average confidence, estimated cost and latency. A server\n * without the route (404) renders nothing. Setting up happens in a terminal\n * (the key lives in ~/.ashlr/secrets/typesafe.env): the page never takes one.\n */\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { MonogramTile } from '../apps/MonogramTile.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { formatConfidence, formatLatency, JEV_ESTIMATE_NOTE, jevEvidenceLines, jevHeadline, jevSnapshotLine, jevTodayLine } from '../jev/jev-model.js';\nimport { JEV_POLL_MS, jevQuery } from '../jev/jev-queries.js';\nimport styles from './ResourcesDrawer.module.css';\n\nexport function JevResource() {\n const read = useQuery(jevQuery);\n const refetch = useRefetch(jevQuery);\n usePollWhileVisible(refetch, JEV_POLL_MS);\n if (read.data === undefined && read.status !== 'error') {\n return (\n <li className={styles.card} data-resource=\"jev\" data-jev=\"loading\">\n <p className={styles.subtle} aria-busy=\"true\">Reading Jev…</p>\n </li>\n );\n }\n if (!read.data?.available) return null;\n const body = read.data.value;\n if (!body) {\n return (\n <li className={styles.card} data-resource=\"jev\" data-jev=\"unrecognised\">\n <p className={styles.subtle}>{read.data.reason ?? 'Unrecognized response — update Ashlr.'}</p>\n </li>\n );\n }\n const { status } = body;\n const head = jevHeadline(status);\n const active = status.enabled && status.keyed;\n const top = status.byKind.slice(0, 4);\n return (\n <li className={styles.card} data-resource=\"jev\" data-jev={active ? 'on' : 'off'}>\n <div className={styles.cardHead}>\n <MonogramTile monogram=\"Jv\" engine={null} size=\"sm\" />\n <h4 className={styles.cardName}>\n <span>Jev</span>\n <span className={styles.plan}>TypeSafe AI</span>\n </h4>\n </div>\n <p className={styles.status} data-tone={head.tone} title={head.detail}>\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span className={styles.statusLabel}>{head.word}</span>\n </p>\n <p className={styles.subtle}>{head.detail}</p>\n <p className={styles.stamp}>{read.status === 'error' ? 'Refresh unavailable · showing the last snapshot.' : jevSnapshotLine(body.generatedAt)}</p>\n {active || status.decisionsToday > 0 ? (\n <>\n <p className={styles.subtle} data-jev-today>{jevTodayLine(status)}</p>\n <p className={styles.subtle}>\n avg confidence {formatConfidence(status.avgConfidenceToday)} · {formatLatency(status.avgLatencyMsToday)}\n <span className={styles.pill} data-tone=\"neutral\" title={JEV_ESTIMATE_NOTE}>estimate</span>\n </p>\n <details className={styles.usageDetails}>\n <summary>Decision evidence</summary>\n <div className={styles.usageDetailBody}>\n {jevEvidenceLines(status).map((line) => <p key={line}>{line}</p>)}\n </div>\n </details>\n {top.length > 0 ? (\n <ul className={styles.subtle} aria-label=\"Jev decisions today by kind\">\n {top.map((k) => (\n <li key={k.kind} data-jev-kind={k.kind}>\n {k.kind}: {k.decisions} · {k.jev} by Jev · conf {formatConfidence(k.avgConfidence)}\n </li>\n ))}\n </ul>\n ) : null}\n <p className={styles.fine}>{status.dailyCallBudget === null\n ? `${status.callsToday} API call attempts today · no call-count preference`\n : `${status.callsToday} of ${status.dailyCallBudget} API call attempts today`}. <code>ashlr jev status</code> for the full table.</p>\n </>\n ) : null}\n </li>\n );\n}\n","/**\n * routes/verse/resources/ResourceCard.tsx — one paid account in the Resources\n * drawer (unit 3.11 C6):\n *\n * [C] Claude Max · max\n * ● Spent · resets Sat 11:46 PM · usable again in 1d 7h\n * checked 2m ago\n * 5-hour ▇▇▇▇▇▇▇▇▇▇▇▇│▨▨ limit reached\n * resets Sat 11:46 PM\n * Weekly ▇▇▇▇░░░░░░░░ 40%\n * Reserved for you 40% · balanced mode\n * [Check again]\n *\n * Every word comes from the shared capacity projection — `accountStatus` for\n * the status line, the row's windows for the meters (resets already worded by\n * `describeResetAt`), `usedPercentText` for every percent, `accountActions`\n * for what the account needs — so this card and Apps & Accounts can never\n * disagree about one seat. Text wraps at word boundaries; anything long also\n * carries its full text as a tooltip.\n */\nimport { estimatedCreditValue, CODEX_CREDIT_VALUE_SOURCE, CODEX_CREDIT_VALUE_CHECKED } from './codex-credit-value.js';\nimport type { BudgetMode } from '../../../../core/routing/types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { accountActions, type AccountAction } from '../apps/apps-model.js';\nimport { MonogramTile } from '../apps/MonogramTile.js';\nimport { usedPercentText } from '../percent-text.js';\nimport { windowSentence, type AccountStatus, type CapacityRow, type CapacityWindowRow } from '../usage/capacity-strip-model.js';\nimport type { ResourceReadinessRow } from '../../../../core/routing/readiness-types.js';\nimport { ReadinessLines } from './ReadinessLines.js';\nimport { ResourceFacts } from './ResourceFacts.js';\nimport type { ResourceFactsView } from './resources-model.js';\nimport { SchedulingEvidence } from './SchedulingEvidence.js';\nimport type { SchedulingEvidenceView } from './scheduling-model.js';\nimport styles from './ResourcesDrawer.module.css';\n\n/** Above this share of a window the meter turns amber (the capacity strip's own line). */\nconst TIGHT_AT = 90;\n\nconst MODE_WORD: Readonly<Record<BudgetMode, string>> = {\n 'all-in': 'all-in mode',\n balanced: 'balanced mode',\n reserve: 'reserve mode',\n};\n\nfunction clamp(n: number): number {\n return Math.max(0, Math.min(100, Math.round(n)));\n}\n\nexport function StatusLine({ status }: { status: AccountStatus }) {\n const parts = [status.detail, status.usableAgain].filter((p): p is string => p !== null && p.length > 0);\n const full = [status.label, ...parts].join(' · ');\n return (\n <p className={styles.status} data-tone={status.tone} data-status={status.kind} title={full}>\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span>\n <span className={styles.statusLabel}>{status.label}</span>\n {parts.map((p) => (\n <span key={p} className={styles.statusDetail}>{` · ${p}`}</span>\n ))}\n </span>\n </p>\n );\n}\n\nfunction WindowMeter({ row, w, reservePercent }: { row: CapacityRow; w: CapacityWindowRow; reservePercent: number | null }) {\n const sentence = windowSentence(row, w, w.binding ? reservePercent : null);\n const ceiling = w.binding && reservePercent !== null && reservePercent > 0 ? 100 - clamp(reservePercent) : null;\n const label = w.label.replace(/ window$/, '');\n let level: 'ok' | 'tight' | 'limit' | 'unknown';\n let value: string;\n let used = 0;\n if (w.limitReached) {\n level = 'limit';\n value = 'limit reached';\n used = 100;\n } else if (w.usedPercent === null) {\n level = 'unknown';\n value = 'no reading';\n } else {\n used = clamp(w.usedPercent);\n level = used >= TIGHT_AT ? 'tight' : 'ok';\n value = usedPercentText(w.usedPercent);\n }\n return (\n <div className={styles.meter} data-binding={w.binding || undefined} data-level={level}>\n <span className={styles.meterLabel} title={w.label}>{label.charAt(0).toUpperCase() + label.slice(1)}</span>\n <span className={styles.meterTrack} role=\"img\" aria-label={sentence} data-unknown={level === 'unknown' || undefined}>\n {ceiling !== null ? <span className={styles.meterReserve} style={{ left: `${ceiling}%`, width: `${100 - ceiling}%` }} /> : null}\n {level !== 'unknown' ? <span className={styles.meterFill} style={{ width: `${used}%` }} /> : null}\n {ceiling !== null ? <span className={styles.meterTick} style={{ left: `${ceiling}%` }} /> : null}\n </span>\n <span className={styles.meterValue} aria-hidden=\"true\">{value}</span>\n {w.resetText !== null ? <span className={styles.meterReset} title={w.resetText} aria-hidden=\"true\">{w.resetText}</span> : null}\n </div>\n );\n}\n\nexport interface ResourceCardProps {\n row: CapacityRow;\n /** Worded against the drawer's clock, with any running check applied. */\n status: AccountStatus;\n /** The status with no check applied, so a button does not vanish while its own check runs. */\n settled: AccountStatus;\n mode: BudgetMode | null;\n busy: { seatId: string; kind: AccountAction['kind'] } | null;\n onAction: (row: CapacityRow, action: AccountAction) => void;\n /**\n * This account's row of GET /api/verse/budget/readiness (3.14). Its\n * reconnect / check-again fixes are NOT repeated here — `accountActions`\n * already offers them below — only a literal command is.\n */\n readiness?: ResourceReadinessRow | null;\n /** 3.15: tier · cost basis · models — the facts row every card carries. */\n facts?: ResourceFactsView | null;\n scheduling?: SchedulingEvidenceView;\n}\n\nexport function ResourceCard({ row, status, settled, mode, busy, onAction, readiness = null, facts = null, scheduling }: ResourceCardProps) {\n // Budget editing lives in Apps & Accounts; the drawer offers what the seat needs now.\n const actions = accountActions(row, settled).filter((a) => a.kind !== 'edit-budget');\n const reserve = row.reserve;\n const primaryWindow = row.windows.find((w) => w.binding) ?? row.windows[0] ?? null;\n const otherWindows = row.windows.filter((w) => w !== primaryWindow);\n const reserveText = reserve === null ? null : reserve.percent !== null && mode !== null ? `${reserve.label} · ${MODE_WORD[mode]}` : reserve.label;\n return (\n <li className={styles.card} data-status={status.kind} data-seat={row.seatId} data-verse-anchor={`resources:${row.seatId}`}>\n <div className={styles.cardHead}>\n <MonogramTile monogram={row.monogram} engine={row.engine} size=\"sm\" />\n <h4 className={styles.cardName}>\n <span title={row.label}>{row.label}</span>\n {row.plan !== null ? <span className={styles.plan}>{row.plan}</span> : null}\n </h4>\n </div>\n <StatusLine status={status} />\n {row.credits !== null ? <p className={styles.subtle}>{row.credits}</p> : null}\n {status.checked !== null ? (\n <p className={styles.stamp} title={status.checkedTitle ?? undefined}>{status.checked}</p>\n ) : null}\n {row.windows.length > 0 ? (\n <div className={styles.meters}>\n {primaryWindow !== null ? <WindowMeter row={row} w={primaryWindow} reservePercent={reserve?.percent ?? null} /> : null}\n </div>\n ) : <p className={styles.subtle}>Usage not reported by this resource.</p>}\n {row.lastReading ? <p className={styles.subtle}>Last known usage · latest check failed.</p> : null}\n {row.windows.length === 0 && row.historicalUsage && !row.signedOut ? <div className={styles.fine}>\n <p>Last known usage · current availability unconfirmed.</p>\n <p>Recorded <time dateTime={row.historicalUsage.observedAt} title={row.historicalUsage.observedAt}>{new Date(row.historicalUsage.observedAt).toLocaleString()}</time></p>\n {row.historicalUsage.windows.map(window => <p key={window.id}>{window.id}: {window.limitReached ? 'limit was flagged' : window.usedPercent === null ? 'usage unknown' : `${usedPercentText(window.usedPercent)} used`}\n {window.resetsAt ? <> · recorded reset <time dateTime={window.resetsAt} title={window.resetsAt}>{new Date(window.resetsAt).toLocaleString()}</time></> : null}</p>)}\n </div> : null}\n <details className={styles.usageDetails}>\n <summary tabIndex={0} aria-label={`Usage details: ${row.label}`}>Usage details</summary>\n <div className={styles.usageDetailBody}>\n {facts !== null ? <ResourceFacts facts={facts} /> : null}\n {scheduling ? <SchedulingEvidence view={scheduling} /> : null}\n {otherWindows.length > 0 ? <div className={styles.meters}>{otherWindows.map((w) => <WindowMeter key={w.id} row={row} w={w} reservePercent={reserve?.percent ?? null} />)}</div> : null}\n {row.windows.length === 0 ? <p className={styles.subtle}>Connection status and usage are separate. No percentage has been supplied.</p> : null}\n {row.engine === 'codex' && row.creditState !== undefined && row.creditState !== 'unknown' ? <p className={styles.subtle}>\n {row.creditState === 'none' ? 'Native provider reports no available credits. ' : ''}\n {row.creditBalance !== null && row.creditBalance !== undefined ? `Native balance ${row.creditBalance} credit units. ` : ''}\n Estimated credit value: {estimatedCreditValue(row.creditBalance, row.plan) ?? 'unknown'}.\n {' '}Personal-plan reference $0.04 per credit; not actual purchase price or attributed spend.\n {' '}<a href={CODEX_CREDIT_VALUE_SOURCE} target=\"_blank\" rel=\"noreferrer\">Published reference</a> checked {CODEX_CREDIT_VALUE_CHECKED}.\n </p> : null}\n {row.notes.map((note) => <p key={note} className={styles.subtle}>{note}</p>)}\n {reserveText !== null || row.credits !== null ? (\n <p className={styles.reserveLine}>\n {reserveText !== null ? <span title={reserve?.why}>{reserveText}</span> : null}\n {reserveText !== null && row.credits !== null ? ' · ' : null}\n {row.credits !== null ? <span>{row.credits}</span> : null}\n </p>\n ) : null}\n </div>\n </details>\n <ReadinessLines row={readiness} />\n {actions.length > 0 ? (\n <div className={styles.cardActions}>\n {actions.map((action) => (\n <Button\n key={action.kind}\n size=\"sm\"\n variant={action.primary ? 'primary' : 'ghost'}\n busy={busy?.seatId === row.seatId && busy.kind === action.kind}\n aria-label={`${action.kind === 'fix' ? 'Fix in Apps' : action.label}: ${row.label}`}\n onClick={() => onAction(row, action)}\n >\n {action.kind === 'fix' ? 'Fix in Apps' : action.label}\n </Button>\n ))}\n </div>\n ) : null}\n </li>\n );\n}\n","/**\n * routes/verse/resources/LocalResources.tsx — local compute in the Resources\n * drawer (unit 3.11 C6): the local seat's readiness (the shared capacity\n * projection's word), the serving runtime (llama-server / Ollama: state,\n * loaded model, per-agent context, slots) with Start / Stop when THIS server\n * supervises it, and the installed models with the context each one really\n * runs at.\n *\n * Reads are the owners' own QueryDefs — `/api/verse/local-models`\n * (usage-queries, with its burst retry) and `/api/verse/runtime`\n * (autonomy/fleet-queries) — polled only while the drawer is mounted, which\n * is only while it is open. Start / Stop go through the shell's guard (Stop\n * confirms first, both ask for the token), with the same words as the Fleet\n * runtime panel.\n */\nimport { useState } from 'react';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { runRuntimeAction, servingRuntimeQuery } from '../autonomy/fleet-queries.js';\nimport { MonogramTile } from '../apps/MonogramTile.js';\nimport { tidyProse } from '../autonomy/format.js';\nimport { requestGuarded } from '../shell/guarded-action.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport type { AccountStatus } from '../usage/capacity-strip-model.js';\nimport { buildLocalModelsView } from '../usage/local-model.js';\nimport { projectLocalModels } from '../usage/usage-contract.js';\nimport { verseLocalModelsQuery } from '../usage/usage-queries.js';\nimport type { ReadinessFix, ResourceReadinessRow } from '../../../../core/routing/readiness-types.js';\nimport { LOCAL_MODELS_SHOWN, localRuntimeLines, modelContextText, runtimeView } from './resources-model.js';\nimport { RESOURCES_POLL_MS } from './resources-queries.js';\nimport { ReadinessLines } from './ReadinessLines.js';\nimport { ResourceFacts } from './ResourceFacts.js';\nimport type { ResourceFactsView } from './resources-model.js';\nimport { StatusLine } from './ResourceCard.js';\nimport styles from './ResourcesDrawer.module.css';\n\nconst STOP_BODY =\n 'Every local agent turn in flight is answered by this process. Stopping it ends those turns — nothing in flight is rolled back, and no local seat can take a new turn until it is running again.';\n\nconst RUNTIME_LABEL: Readonly<Record<string, string>> = { ollama: 'Ollama', lmstudio: 'LM Studio' };\n\nexport interface LocalResourcesProps {\n status: AccountStatus | null;\n onOpenUsage: () => void;\n now: number;\n /** The `local` row of GET /api/verse/budget/readiness, when this server has it. */\n readiness?: ResourceReadinessRow | null;\n onReadinessAction?: (fix: ReadinessFix, row: ResourceReadinessRow) => void;\n /** 3.15: tier · cost basis — the facts row every card carries (its models are listed below). */\n facts?: ResourceFactsView | null;\n}\n\nexport function LocalResources({ status, onOpenUsage, now, readiness = null, onReadinessAction, facts = null }: LocalResourcesProps) {\n const models = useQuery(verseLocalModelsQuery);\n const runtimeRead = useQuery(servingRuntimeQuery);\n const refetchModels = useRefetch(verseLocalModelsQuery);\n const refetchRuntime = useRefetch(servingRuntimeQuery);\n usePollWhileVisible(refetchModels, RESOURCES_POLL_MS.local);\n usePollWhileVisible(refetchRuntime, RESOURCES_POLL_MS.runtime);\n const [note, setNote] = useState<{ tone: 'neutral' | 'danger'; text: string } | null>(null);\n const [busy, setBusy] = useState<'start' | 'stop' | null>(null);\n\n const view = models.data?.available ? buildLocalModelsView(projectLocalModels(models.data.raw), now) : null;\n const runtimes = models.data?.available ? localRuntimeLines(models.data.raw) : [];\n const runtime = runtimeView(runtimeRead.data?.value ?? null);\n const modelsLoading = models.data === undefined && models.status !== 'error';\n const rows = view?.rows ?? [];\n const shown = rows.slice(0, LOCAL_MODELS_SHOWN);\n const more = rows.length - shown.length;\n\n const act = (action: 'start' | 'stop') => {\n const label = action === 'start' ? 'Start' : 'Stop';\n setNote(null);\n requestGuarded({\n title: 'Stop the serving runtime?',\n body: STOP_BODY,\n confirmLabel: 'Stop runtime',\n destructive: true,\n skipConfirm: action === 'start',\n token: true,\n tokenReason: `${label === 'Start' ? 'Starting' : 'Stopping'} the serving runtime requires the dispatch token.`,\n run: async () => {\n setBusy(action);\n try {\n const result = await runRuntimeAction(action);\n setNote({ tone: 'neutral', text: (result.note ? tidyProse(result.note) : '') || (action === 'start' ? 'Runtime starting.' : 'Runtime stopped.') });\n } finally {\n setBusy(null);\n }\n },\n onError: (message) => setNote({ tone: 'danger', text: message }),\n });\n };\n\n return (\n <li className={styles.card} data-resource=\"local\" data-status={status?.kind}>\n <div className={styles.cardHead}>\n <MonogramTile monogram=\"L\" engine=\"local\" size=\"sm\" />\n <h4 className={styles.cardName}>\n <span>Local models</span>\n <span className={styles.plan}>this machine</span>\n </h4>\n </div>\n {facts ? <ResourceFacts facts={facts} /> : null}\n {status !== null ? (\n <StatusLine status={status} />\n ) : view !== null && !view.reachable ? (\n <p className={styles.status} data-tone=\"neutral\"><span className={styles.statusDot} aria-hidden=\"true\" /><span className={styles.statusLabel}>No local runtime answering</span></p>\n ) : null}\n\n <ReadinessLines row={readiness} {...(onReadinessAction ? { onAction: onReadinessAction } : {})} />\n\n {runtimes.length > 0 ? (\n <ul className={styles.runtimes} aria-label=\"Local runtimes\">\n {runtimes.map((line) => (\n <li key={line.id} className={styles.runtimeRow} data-tone={line.tone} data-runtime={line.id} title={`${line.name}: ${line.word} — ${line.detail}`}>\n <span className={styles.statusDot} aria-hidden=\"true\" />\n <span className={styles.runtimeRowName}>{line.name}</span>\n <span className={styles.runtimeRowDetail}>{`${line.word} · ${line.detail}`}</span>\n </li>\n ))}\n </ul>\n ) : null}\n\n {runtime !== null ? (\n <div className={styles.runtime} data-runtime-state={runtime.state}>\n <p className={styles.runtimeHead}>\n <span className={styles.runtimeName}>{runtime.name}</span>\n <span className={styles.pill} data-tone={runtime.tone}>{runtime.word}</span>\n </p>\n {runtime.detail !== null ? <p className={styles.subtle} title={runtime.detail}>{runtime.detail}</p> : null}\n {runtime.canStart || runtime.canStop ? (\n <div className={styles.cardActions}>\n {runtime.canStart ? (\n <Button size=\"sm\" variant=\"primary\" busy={busy === 'start'} aria-label={`Start ${runtime.name}`} onClick={() => act('start')}>Start</Button>\n ) : null}\n {runtime.canStop ? (\n <Button size=\"sm\" variant=\"subtle\" busy={busy === 'stop'} aria-label={`Stop ${runtime.name}`} onClick={() => act('stop')}>Stop</Button>\n ) : null}\n </div>\n ) : runtime.managedElsewhere ? (\n <p className={styles.subtle}>Started and stopped outside Verse.</p>\n ) : null}\n </div>\n ) : null}\n\n {modelsLoading ? (\n <p className={styles.subtle} aria-busy=\"true\">Reading local models…</p>\n ) : !models.data?.available ? (\n <p className={styles.subtle}>Local model details are not available from this server yet.</p>\n ) : view === null || rows.length === 0 ? (\n <p className={styles.subtle}>\n {view?.reachable ? 'No models installed.' : 'Start Ollama or llama-server to use local models.'}\n </p>\n ) : (\n <ul className={styles.models} aria-label=\"Local models\">\n {shown.map((m) => {\n const context = modelContextText(m);\n return (\n <li key={`${m.runtime ?? 'local'}:${m.name}`} className={styles.model} data-resident={m.resident || undefined}>\n <span className={styles.modelName} title={m.name}>\n {m.displayName}\n {m.nameDetail ? <span className={styles.modelDetail}> {m.nameDetail}</span> : null}\n </span>\n <span className={styles.modelFacts}>\n {m.runtime && RUNTIME_LABEL[m.runtime] ? <span className={styles.modelRuntime}>{RUNTIME_LABEL[m.runtime]}</span> : null}\n {m.resident ? <span className={styles.pill} data-tone=\"success\">Loaded</span> : null}\n {context !== null ? <span title={m.contextTruncated ? 'Configured below the model’s native window' : undefined}>{context}</span> : null}\n </span>\n </li>\n );\n })}\n </ul>\n )}\n {more > 0 ? (\n <button type=\"button\" className={styles.linkButton} onClick={onOpenUsage}>\n {`${more} more in Usage`}\n </button>\n ) : null}\n <p className={note ? styles.note : styles.visuallyHidden} data-tone={note?.tone} role=\"status\" aria-live=\"polite\">{note?.text ?? ''}</p>\n </li>\n );\n}\n","/**\n * routes/verse/resources/ResourcesDrawer.tsx — RESOURCES: every account,\n * local runtime and cloud credit the operator can spend, on every surface\n * (unit 3.11 C6). A lazy chunk: the shell mounts it only while open.\n *\n * overlay ~360px from the right edge over the surface. Esc, a click\n * outside or ⌘. closes it; focus is trapped inside and returned\n * to whatever opened it.\n * docked PINNED: a right-hand column beside the surface (the shell gives\n * it a grid track, so the surface shrinks rather than hides).\n * Not modal — no trap, no backdrop, Esc is the surface's.\n *\n * 3.15 — ONE TIER MODEL, ONE CARD ANATOMY. Cards are grouped by tier\n * (routing/tiers.ts), never by provider or by when a provider was added:\n *\n * Elite Claude Code, every Codex account, Devin (cloud + CLI),\n * Claude cloud credits — and the local runtime when it runs\n * the elite Qwen 3.8 27B\n * Fast Grok\n * Free · local the local runtime otherwise\n * Decision layer Jev (it routes; it is not a seat)\n *\n * Inside a tier: stable roster order, so refreshes never move an account. Every card carries the same rows: facts\n * (tier · cost basis · models · reserve), status, usage against its window\n * or budget, and the Chat / Fleet readiness lines with their fixing command.\n *\n * Data is the app-wide caches (useCapacityData: bootstrap seats, /health,\n * /budget) plus the owners' local and cloud reads — nothing polls unless the\n * drawer is open, because nothing here is mounted unless it is.\n *\n * Writes go through the shell's guard (confirm where the regular UI confirms,\n * then the mutation token): Reconnect opens the provider's own sign-in in\n * Terminal, Check again is the zero-cost health sweep.\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconButton } from '../../../components/primitives/Button.js';\nimport { useFocusTrap } from '../../../components/primitives/focus-trap.js';\nimport { IconRefresh, IconX } from '../../../components/primitives/icons.js';\nimport { Tooltip } from '../../../components/primitives/Tooltip.js';\nimport { useQuery, useRefetch, useRefresh } from '../../../data/hooks.js';\nimport type { ReadinessFix, ResourceReadinessRow } from '../../../../core/routing/readiness-types.js';\nimport type { AccountAction } from '../apps/apps-model.js';\nimport { servingRuntimeQuery } from '../autonomy/fleet-queries.js';\nimport { reconnectSeat, refreshSeatHealth, verseHealthQuery } from '../health/health-queries.js';\nimport { findCommand, formatChord } from '../shell/command-catalog.js';\nimport { isGuardOpen, requestGuarded } from '../shell/guarded-action.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { ACCOUNT_CLOCK_MS, useCapacityData } from '../usage/CapacityStrip.js';\nimport { accountStatus, accountStatusRank, buildCapacityRows, capacityHeadline, type CapacityRow } from '../usage/capacity-strip-model.js';\nimport { COST_BASIS_RANK, costBasisOf, engineTier, TIER_BLURBS, TIER_LABELS, type ResourceTier } from '../../../../core/routing/tiers.js';\nimport { refreshSeats } from '../useSeatsRefresh.js';\nimport { budgetQuery } from '../budget/budget-queries.js';\nimport { devinQuery } from '../devin/devin-queries.js';\nimport { verseLocalModelsQuery } from '../usage/usage-queries.js';\nimport { setVerseSection, type VerseSectionId } from '../verse-ui-store.js';\nimport { CloudCredits } from './CloudCredits.js';\nimport { CreditPools } from './CreditPools.js';\nimport { DevinResource } from './DevinResource.js';\nimport { JevResource } from './JevResource.js';\nimport { LocalResources } from './LocalResources.js';\nimport { ResourceCard } from './ResourceCard.js';\nimport { schedulingEvidence } from './scheduling-model.js';\nimport { cloudCreditsQuery, resourceReadinessQuery, RESOURCES_POLL_MS } from './resources-queries.js';\nimport { costBases, groupByTier, mergedFacts, readinessStatusRank, seatFacts, type ResourceFactsView, type TierEntry } from './resources-model.js';\nimport { closeResources, setResourcesBar, setResourcesPinned, useResourcesUi } from './resources-store.js';\nimport styles from './ResourcesDrawer.module.css';\n\nexport const RESOURCES_EMPTY_TEXT =\n 'No accounts connected yet. Sign in to Claude Code, Codex, Devin or Grok in a terminal — they show up here within a minute.';\n\n/** One card in a tier section. */\ntype DrawerEntry = TierEntry & (\n | { kind: 'account'; row: CapacityRow; facts: ResourceFactsView }\n | { kind: 'devin'; facts: ResourceFactsView; bases: ReturnType<typeof costBases> }\n | { kind: 'cloud'; facts: ResourceFactsView }\n | { kind: 'local'; facts: ResourceFactsView }\n);\n\nfunction PinIcon({ pinned }: { pinned: boolean }) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill={pinned ? 'currentColor' : 'none'} stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" strokeLinecap=\"round\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M6 2.5h4l-.5 4 2.25 2.25H4.25L6.5 6.5z\" />\n <path d=\"M8 8.75v4.75\" fill=\"none\" />\n </svg>\n );\n}\n\ntype Note = { tone: 'neutral' | 'danger'; text: string } | null;\n\nexport interface ResourcesDrawerProps {\n mode: 'overlay' | 'docked';\n /** Phone-width window: the overlay takes the whole screen and cannot be pinned. */\n compact?: boolean;\n /** Injected clock for tests; otherwise the drawer re-reads the clock every ACCOUNT_CLOCK_MS. */\n now?: number;\n}\n\nexport function ResourcesDrawer({ mode, compact = false, now: fixedNow }: ResourcesDrawerProps) {\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n const overlay = mode === 'overlay';\n const data = useCapacityData();\n const [tick, setTick] = useState(() => Date.now());\n usePollWhileVisible(() => setTick(Date.now()), ACCOUNT_CLOCK_MS, { enabled: fixedNow === undefined });\n const now = fixedNow ?? tick;\n const healthRead = data.health !== null;\n const [busy, setBusy] = useState<{ seatId: string; kind: AccountAction['kind'] } | null>(null);\n const [note, setNote] = useState<Note>(null);\n\n const refetchHealth = useRefresh(verseHealthQuery);\n const refetchLocal = useRefresh(verseLocalModelsQuery);\n const refetchRuntime = useRefresh(servingRuntimeQuery);\n const refetchCloud = useRefresh(cloudCreditsQuery);\n // 3.14: \"ready for chat?\" / \"ready for the fleet?\" per resource. An older\n // server has no route; every card then simply omits the two lines.\n const readinessRead = useQuery(resourceReadinessQuery);\n const refetchReadiness = useRefetch(resourceReadinessQuery);\n const refreshReadiness = useRefresh(resourceReadinessQuery);\n const refreshBudget = useRefresh(budgetQuery);\n const refreshDevin = useRefresh(devinQuery);\n usePollWhileVisible(refetchReadiness, RESOURCES_POLL_MS.readiness);\n const readinessById = useMemo(() => {\n const map = new Map<string, ResourceReadinessRow>();\n for (const r of readinessRead.data?.value?.resources ?? []) map.set(r.id, r);\n return map;\n }, [readinessRead.data]);\n\n const rows = useMemo(\n () => buildCapacityRows(data.seats, { health: data.health, budget: data.budget, now }),\n [data.seats, data.health, data.budget, now],\n );\n // Devin's two chat seats are ONE provider card (DevinResource), not two\n // generic account cards; every other paid seat is a generic card.\n const paid = useMemo(() => rows.filter((r) => r.kind === 'subscription' && r.engine !== 'devin'), [rows]);\n const devinRows = useMemo(() => rows.filter((r) => r.engine === 'devin'), [rows]);\n const localRow = rows.find((r) => r.kind === 'local') ?? null;\n const mode_ = data.budget?.mode ?? null;\n\n const sections = useMemo(() => {\n const seats = data.seats;\n const entries: DrawerEntry[] = [];\n const marginal = (facts: ResourceFactsView) => COST_BASIS_RANK[facts.basis];\n paid.forEach((row, index) => {\n const seat = seats.find((s) => s.id === row.seatId);\n const facts: ResourceFactsView = seat\n ? seatFacts(seat)\n : { tier: engineTier(row.engine), basis: costBasisOf(row.engine), models: [], reserve: null };\n entries.push({ kind: 'account', key: `account:${row.seatId}`, row, facts, tier: facts.tier, index,\n statusRank: accountStatusRank(accountStatus(row, { healthRead, now }).kind), marginal: marginal(facts) });\n });\n const devinSeats = seats.filter((s) => s.engine === 'devin');\n const devinFacts = mergedFacts(devinSeats) ?? { tier: 'elite' as ResourceTier, basis: 'credits' as const, models: [], reserve: null };\n const devinRank = devinRows.length > 0\n ? Math.min(...devinRows.map((r) => accountStatusRank(accountStatus(r, { healthRead, now }).kind)))\n : readinessStatusRank(null);\n entries.push({ kind: 'devin', key: 'devin', facts: devinFacts, bases: costBases(devinSeats), tier: devinFacts.tier,\n statusRank: devinRank, marginal: marginal(devinFacts), index: paid.length });\n const cloudFacts: ResourceFactsView = { tier: 'elite', basis: 'credits', models: [], reserve: null };\n entries.push({ kind: 'cloud', key: 'cloud', facts: cloudFacts, tier: 'elite', marginal: marginal(cloudFacts), index: paid.length + 1,\n statusRank: readinessStatusRank(readinessById.get('cloud')?.chat.ready ?? null) });\n // The local card lists its own models; its tier is the best local seat's\n // (the elite Qwen 3.8 27B puts it in Elite, anything else in Free).\n const localFacts = { ...(mergedFacts(seats.filter((s) => s.engine === 'local')) ?? { tier: 'free' as ResourceTier, basis: 'free' as const, models: [], reserve: null }), models: [] };\n entries.push({ kind: 'local', key: 'local', facts: localFacts, tier: localFacts.tier, marginal: 0, index: paid.length + 2,\n statusRank: localRow ? accountStatusRank(accountStatus(localRow, { healthRead, now }).kind) : readinessStatusRank(null) });\n // Stable within each tier: refreshed readiness never reorders a card.\n return groupByTier(entries).map((section) => ({ ...section, entries: section.entries.sort((a, b) => a.index - b.index) }));\n }, [data.seats, paid, devinRows, localRow, readinessById, healthRead, now]);\n\n // ── close: Esc (overlay), outside click, the close button, ⌘. ─────────\n const close = useCallback(() => {\n closeResources();\n }, []);\n const trapClose = useCallback(() => {\n // Esc in a dialog opened FROM the drawer (a confirmation, the token\n // prompt) belongs to that dialog: every trap hears Escape, and this one\n // registered first.\n if (isGuardOpen() || document.querySelector('[aria-modal=\"true\"]:not([data-verse-overlay])')) return;\n closeResources();\n }, []);\n useFocusTrap({ open: overlay, containerRef: panelRef, onClose: trapClose });\n // Focus goes back to whatever opened the drawer (the trap does that). When\n // that is gone — the palette that ran \"Open Resources\" unmounts — it lands\n // on the edge handle rather than on <body>.\n useEffect(() => {\n if (!overlay) return undefined;\n return () => {\n window.setTimeout(() => {\n const active = document.activeElement;\n if (active === null || active === document.body) document.querySelector<HTMLElement>('[data-resources-handle]')?.focus({ preventScroll: true });\n }, 0);\n };\n }, [overlay]);\n\n const go = (section: VerseSectionId, anchor: string | null = null) => {\n if (overlay) closeResources();\n setVerseSection(section, anchor);\n };\n\n const onAction = (row: CapacityRow, action: AccountAction) => {\n setNote(null);\n if (action.kind === 'fix' || action.kind === 'edit-budget') {\n go('apps', `seat:${row.seatId}`);\n return;\n }\n const reconnect = action.kind === 'reconnect';\n requestGuarded({\n title: reconnect ? `Reconnect ${row.label}?` : `Check ${row.label} again?`,\n body: '',\n confirmLabel: action.label,\n destructive: false,\n skipConfirm: true,\n token: true,\n tokenReason: reconnect\n ? `Open the sign-in for ${row.label} in Terminal`\n : `Check ${row.label} again (status commands only — nothing is spent)`,\n run: async () => {\n setBusy({ seatId: row.seatId, kind: action.kind });\n try {\n if (reconnect) await reconnectSeat(row.seatId);\n else await refreshSeatHealth();\n } finally {\n setBusy(null);\n }\n },\n onDone: () => {\n refetchReadiness();\n setNote({\n tone: 'neutral',\n text: reconnect\n ? `Opened the sign-in for ${row.label} in Terminal. Finish it there; this drawer picks it up.`\n : `Checked ${row.label} again.`,\n });\n },\n onError: (message) => setNote({ tone: 'danger', text: message }),\n });\n };\n\n /** A readiness fix that is a Verse action (the cloud card's Reconnect): the same guarded flow as a card button. */\n const onReadinessAction = (fix: ReadinessFix) => {\n if (fix.kind === 'command' || !fix.seatId) return;\n const target = rows.find((r) => r.seatId === fix.seatId);\n if (!target) return;\n onAction(target, { kind: fix.kind, label: fix.label, command: null, primary: true });\n };\n\n const refreshAll = () => {\n setNote(null);\n void refreshSeats();\n refreshBudget();\n refreshDevin();\n refetchHealth();\n refetchLocal();\n refetchRuntime();\n refetchCloud();\n refreshReadiness();\n setTick(Date.now());\n };\n\n const chord = findCommand('resources.toggle')?.keys[0];\n const shortcut = chord ? formatChord(chord) : undefined;\n const canPin = !compact;\n const pinned = mode === 'docked';\n\n const panel = (\n <div\n ref={panelRef}\n className={styles.panel}\n data-mode={mode}\n data-presentation={compact ? 'full' : 'side'}\n data-verse-overlay=\"resources\"\n {...(overlay\n ? { role: 'dialog', 'aria-modal': true, 'aria-labelledby': titleId, tabIndex: -1 }\n : { role: 'complementary', 'aria-labelledby': titleId })}\n >\n <header className={styles.head}>\n <div className={styles.headText}>\n <h2 id={titleId} className={styles.title}>Resources</h2>\n {!data.loading && rows.length > 0 ? <p className={styles.headline}>{capacityHeadline(rows)}</p> : null}\n </div>\n <div className={styles.headActions}>\n <Tooltip label=\"Read everything again\" placement=\"bottom\">\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconRefresh />} aria-label=\"Read everything again\" onClick={refreshAll} />\n </Tooltip>\n {canPin ? (\n <Tooltip label={pinned ? 'Unpin — float over the page' : 'Pin beside the page'} placement=\"bottom\">\n <IconButton\n variant=\"ghost\"\n size=\"sm\"\n icon={<PinIcon pinned={pinned} />}\n aria-label={pinned ? 'Unpin resources' : 'Pin resources beside the page'}\n aria-pressed={pinned}\n data-resources-pin\n onClick={() => setResourcesPinned(!pinned)}\n />\n </Tooltip>\n ) : null}\n <Tooltip label=\"Close resources\" shortcut={shortcut} placement=\"bottom\">\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconX />} aria-label=\"Close resources\" onClick={close} />\n </Tooltip>\n </div>\n </header>\n\n <div className={styles.body}>\n {data.refreshing ? <p className={styles.subtle} role=\"status\">Updating readings…</p> : null}\n {data.readFailed ? <p className={styles.subtle} role=\"status\">Refresh unavailable{data.rosterUnavailable ? '.' : ' · showing last readings.'}</p> : null}\n {data.loading ? (\n <p className={styles.subtle} aria-busy=\"true\">Reading accounts…</p>\n ) : !data.rosterUnavailable && paid.length === 0 && devinRows.length === 0 ? (\n <p className={styles.subtle}>{RESOURCES_EMPTY_TEXT}</p>\n ) : null}\n <CreditPools accountNames={new Map(data.seats.map(seat => [seat.id, seat.label]))} />\n {sections.map((section) => (\n <section key={section.tier} className={styles.group} aria-labelledby={`${titleId}-${section.tier}`} data-tier-section={section.tier}>\n <h3 id={`${titleId}-${section.tier}`} className={styles.groupTitle}>{TIER_LABELS[section.tier]}</h3>\n <p className={styles.groupBlurb}>{TIER_BLURBS[section.tier]}</p>\n <ul className={styles.cards}>\n {section.entries.map((entry) => {\n switch (entry.kind) {\n case 'account': {\n const row = entry.row;\n if (data.loading) return null;\n const settled = accountStatus(row, { healthRead, now });\n const checking = busy?.seatId === row.seatId && busy.kind === 'check-again';\n const status = checking ? accountStatus(row, { healthRead, now, checking: true }) : settled;\n return (\n <ResourceCard\n key={entry.key}\n row={row}\n status={status}\n settled={settled}\n mode={mode_}\n busy={busy}\n onAction={onAction}\n readiness={readinessById.get(row.seatId) ?? null}\n facts={entry.facts}\n scheduling={schedulingEvidence(data.budget, row, now)}\n />\n );\n }\n case 'devin':\n return <DevinResource key={entry.key} facts={entry.facts} bases={entry.bases} />;\n case 'cloud':\n return (\n <CloudCredits\n key={entry.key}\n facts={entry.facts}\n readiness={readinessById.get('cloud') ?? null}\n onReadinessAction={onReadinessAction}\n readinessBusy={busy !== null && busy.seatId === readinessById.get('cloud')?.chat.fix?.seatId}\n />\n );\n case 'local':\n return (\n <LocalResources\n key={entry.key}\n facts={entry.facts}\n status={localRow ? accountStatus(localRow, { healthRead, now }) : null}\n onOpenUsage={() => go('usage')}\n now={now}\n readiness={readinessById.get('local') ?? null}\n />\n );\n default:\n return null;\n }\n })}\n </ul>\n </section>\n ))}\n <p className={note ? styles.note : styles.visuallyHidden} data-tone={note?.tone} role=\"status\" aria-live=\"polite\">{note?.text ?? ''}</p>\n\n <section className={styles.group} aria-labelledby={`${titleId}-decisions`}>\n <h3 id={`${titleId}-decisions`} className={styles.groupTitle}>Decision layer</h3>\n <ul className={styles.cards}>\n <JevResource />\n </ul>\n </section>\n </div>\n\n <footer className={styles.foot}>\n <button type=\"button\" className={styles.linkButton} onClick={() => go('apps')}>Apps & Accounts</button>\n <button type=\"button\" className={styles.linkButton} onClick={() => go('usage')}>Usage</button>\n <BarToggle />\n </footer>\n </div>\n );\n\n if (!overlay) return panel;\n return createPortal(\n <div className={styles.backdrop} data-presentation={compact ? 'full' : 'side'} onMouseDown={(e) => e.target === e.currentTarget && close()}>\n {panel}\n </div>,\n document.body,\n );\n}\n\n/** Footer switch for the always-on resource bar in the rail (3.11.1). */\nfunction BarToggle() {\n const { bar } = useResourcesUi();\n return (\n <button\n type=\"button\"\n className={styles.linkButton}\n style={{ marginLeft: 'auto' }}\n aria-pressed={bar}\n onClick={() => setResourcesBar(!bar)}\n >\n {bar ? 'Hide resource bar' : 'Show resource bar'}\n </button>\n );\n}\n"],"file":"ResourcesDrawer-BH9uwNE8.js"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-DOAOxiKl.js";import{E as r,R as i,f as a,n as o,z as s}from"./VerseConsoleApp-Cj6yPJo3.js";import{n as c,t as l}from"./ActionMenu-CebJFKYy.js";var u=e(n(),1),d=t();function f(){let e=r(),t=o(e.section);if(t)return t;for(let t=e.history.index;t>=0;t--){let n=e.history.entries[t]?.section,r=n?o(n):null;if(r)return r}return`with-me`}function p({anchor:e,onClose:t}){(0,u.useLayoutEffect)(()=>{window.matchMedia?.(`(max-width: 760px)`)?.matches===!0&&s(!0)},[]);let n=f(),o=r().activeSessionId!==null,p=e=>()=>{a(e,{via:`menu`})},m=n===`with-me`?[{id:`changes`,label:`Chat changes`,onSelect:p(`dock.diff`),disabled:!o,reason:`Open a chat to review its changes.`},{id:`sources`,label:`Chat sources`,onSelect:p(`dock.sources`),disabled:!o,reason:`Open a chat to review its sources.`},{id:`usage`,label:`Usage`,onSelect:p(`section.usage`)}]:[{id:`agents`,label:`Review agents`,onSelect:p(`surface.agents`)},{id:`needs-you`,label:`Needs you`,onSelect:p(`needs-you.open`)},{id:`decisions`,label:`Fleet decisions`,description:`Recorded decisions when available; otherwise view Fleet status.`,onSelect:()=>i(`fleet`,`shadow-decisions`)}];return m.push({id:`wiki`,label:`Module map`,separated:!0,onSelect:p(`section.wiki`)}),(0,d.jsx)(l,{label:`Review work`,items:m,anchor:c(e),returnFocus:e,onClose:t})}export{p as ReviewMenu,p as default,f as currentReviewMode};
|
|
2
|
-
//# sourceMappingURL=ReviewMenu-B2A_YDPi.js.map
|