@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,5 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ShadowDecisions-B1ZPv7K-.js","assets/ladder-queries-CBoG3heV.js","assets/autonomy-ladder.module-DDhzYLrs.js","assets/global-1SED_aTT.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/SkipToContent-c02H5dmz.css","assets/VerseConsoleApp-n6qr3lCF.css","assets/Surface-e1z6GdZt.css","assets/autonomy-ladder-BGWmZzP7.css","assets/Advanced-Dr9aVbXV.js","assets/Epistemic-BBwXv-C1.js","assets/StatusBadge-DrVbi5dF.js","assets/ConfirmDialog-CTeMFavv.js","assets/workspace-model-C-q_I8xN.js","assets/fleet-model-D4n8ErhA.js","assets/fleet-queries-DX1AwHEt.js","assets/Epistemic-OaGnEJkn.css","assets/StatusBadge-BVi0IBb9.css","assets/Dialog-tQ8kFulD.css","assets/MutationTokenDialog-CrfJ0PdD.css","assets/ConfirmDialog-Dx15x0Ho.css","assets/RefreshIndicator-CVv22U_j.css","assets/Segmented-BnjHbKzH.css","assets/Button-DrnKsvnQ.css","assets/Meter-CYt9KpM0.css","assets/Select-DSu5ghId.css","assets/Advanced-ByqYPbn-.css","assets/AutonomyStatus-Uydy6-pZ.js","assets/AutonomyOffState-CmSSTHVe.css","assets/Sheet-ChxlNivX.css","assets/Tag-D0rAEciH.css","assets/Switch-CU044EaE.css","assets/Slider-AgAdMFpo.css","assets/BudgetControl-CmG1JOWK.css","assets/actions-BbbnyQzG.css","assets/live-model-DF4kekhO.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n,t as r}from"./index-DOAOxiKl.js";import{l as i,u as a}from"./global-BJ_kVFpD.js";import{t as o}from"./RefreshIndicator-BNptNJiV.js";import{n as s,t as c}from"./Swimlane-BAEjfoVU.js";import{n as l,t as u}from"./Funnel-Cfg55EZp.js";import{Bt as d,Ht as f,f as p,g as m,gt as h,zt as g}from"./VerseConsoleApp-Cj6yPJo3.js";import{j as _}from"./VerseShared-CH8mV5ew.js";import{n as v,u as y,v as b}from"./format-V6IiIMAL.js";import{t as x}from"./Tag-Ciht3C94.js";import{n as S,t as C}from"./budget-queries-DCZevH2S.js";import{t as w}from"./Button-DJY_Pu5B.js";import{C as T,_ as E,a as ee,g as te,p as ne,y as D}from"./icons-MYfI6vZr.js";import"./command-catalog-Dnx-iMLX.js";import{t as re}from"./Meter-BfaE-BjY.js";import{c as ie,n as ae,o as oe,r as se,s as O,t as k}from"./AutonomyOffState-DEznxI-Q.js";import{p as A}from"./cloud-model-CzKeuxfm.js";import{n as j,r as M}from"./cloud-queries-Bsqo7wye.js";import{t as ce}from"./cloud.module-DOP-N4Ch.js";import{a as le,f as ue,s as de,u as fe}from"./surface-data-D_oFOgkh.js";import{t as N}from"./nav-ByibvQW1.js";import{_ as pe,a as me,c as he,d as ge,f as _e,g as ve,i as ye,l as be,n as xe,o as Se,p as P,r as Ce,s as we,t as Te,u as Ee,v as De}from"./live-model-CCjYFk48.js";import{a as Oe,i as F,n as I,r as L,t as R}from"./Surface-DCL7uORg.js";import{n as ke,t as Ae}from"./actions-gBplqbpY.js";import{t as je}from"./Select-tf4lNvWD.js";import{t as Me}from"./use-ticker-Bsu0cMvl.js";import{a as Ne,r as Pe}from"./overnight-queries-KxqH6BRN.js";import{t as Fe}from"./Input-Bt6fp051.js";import{t as Ie}from"./SchedulingEvidence-B08-qhhm.js";import{a as Le,i as z,n as Re,r as ze,t as Be}from"./fleet-control-queries-clsJWanE.js";import{i as Ve,n as He,r as Ue,t as We}from"./why-seat-model-Bn6O26JJ.js";var B=e(n(),1);function Ge(){if(typeof window>`u`)return null;let e=window.__ASHLR_DESKTOP__?.fleet;return e&&typeof e.send==`function`&&e.version>=1?e:null}function V(e){let t=Ge();return t?e===void 0||!Array.isArray(t.ops)||t.ops.includes(e):!1}var Ke=new Set([`done`,`failed`,`cancelled`]);function qe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&typeof t.op==`string`&&typeof t.phase==`string`&&typeof t.message==`string`}var Je=0;function Ye(e,t={}){let n=Ge();if(!n)return Promise.reject(Error(`This needs the Ashlr desktop app.`));Je+=1;let r=`fleet-${Date.now().toString(36)}-${Je}`;return new Promise((i,a)=>{let o=null,s=e=>{let n=e.detail;qe(n)&&n.id===r&&(t.onProgress?.(n),Ke.has(n.phase)&&(window.removeEventListener(`ashlr:fleet`,s),o&&clearTimeout(o),i(n)))};window.addEventListener(`ashlr:fleet`,s),o=setTimeout(()=>{window.removeEventListener(`ashlr:fleet`,s),i({id:r,op:e,phase:`failed`,message:`The desktop app did not answer in time. Check the Fleet tab again in a moment.`})},t.timeoutMs??(e===`custody-install`?15e5:3e5)),n.send(t.checkout?{id:r,op:e,checkout:t.checkout}:{id:r,op:e})||(window.removeEventListener(`ashlr:fleet`,s),o&&clearTimeout(o),a(Error(`The desktop app refused that request.`)))})}var H=t(),Xe=5e3,Ze={title:`Start the fleet?`,body:`Start clears Stop, resumes dispatch and, if autonomy is switched Off, turns it to Autonomous — only within your signed grant. If the daemon is not running, the desktop app asks you to confirm starting it.`,confirmLabel:`Start fleet`,destructive:!1},Qe={running:`running`,idle:`ok`,paused:`warning`,stopped:`danger`,blocked:`danger`,off:`muted`},$e={running:`Running`,idle:`Idle`,paused:`Paused`,stopped:`Stopped`,blocked:`Blocked`,off:`Off`};function et(e){let t=g(e);return t?f(t,d()):null}function U(e){return e===null?`$—`:e>=100?`$${Math.round(e)}`:`$${e.toFixed(2)}`}function tt(e){return e.kind===`resident-start`?`resident-start`:e.kind===`resident-restart`?`resident-restart`:e.kind===`install-custody`?`custody-install`:null}function nt({actions:e,grantFlow:t,darkSince:n=null,setupShownBelow:r=!1}){let o=i(Re,{freshMs:4e3}),s=a(Re);_(s,Xe);let[c,l]=(0,B.useState)([]),[u,d]=(0,B.useState)(null),[f,p]=(0,B.useState)(null),h=o.data?.value??null;function g(e){l(e.did),p(e.needs),s(),e.needs&&b(e.needs,e.state)}function v(e,t){if(!V(e))return;d({op:e,event:null});let n=t=>d(n=>({op:e,event:t,...t.command??n?.command?{command:t.command??n?.command}:{}}));Ye(e,{...t?{checkout:t}:{},onProgress:n}).then(e=>{n(e),e.phase===`done`&&p(null)}).catch(t=>d({op:e,event:{id:``,op:e,phase:`failed`,message:t instanceof Error?t.message:String(t)}})).finally(()=>s())}async function b(e,n=h){if(e.kind===`grant`||e.kind===`re-approve`){t.open(e.kind,e.kind===`re-approve`?`The fleet needs the grant renewed before it can run.`:`The fleet needs a standing grant before it can run.`,`autonomous`);return}if(e.kind===`start`){x();return}if(e.kind===`resume`){C();return}let r=tt(e);if(r&&V(r)){if(r===`custody-install`){let e=n?.custody.hubCheckout;if(!e)return;v(r,e)}else v(r)}}function x(){e.act(()=>z({action:`start`}),`Start the fleet`,{confirm:Ze,onDone:g})}function S(){e.act(()=>z({action:`pause`}),`Pause the fleet`,{onDone:g})}function C(){e.act(()=>z({action:`resume`}),`Resume the fleet`,{onDone:g})}function ee(){e.act(()=>z({action:`stop`}),`Stop the fleet`,{confirm:pe(),onDone:g})}function ie(){v(`resident-restart`)}function ae(){v(`resident-stop`)}function se(){let e=h?.grant.state===`active`||h?.grant.state===`paused`||h?.grant.state===`expired`;t.open(e?`re-approve`:`grant`,`Choose what the fleet may do, check the difference, then sign it with Touch ID.`,null,{edit:!0})}let O=h?.controls;if(m(`fleet.start`,()=>{(O?.start.enabled??!0)&&x()}),m(`fleet.pause`,()=>{O?.pause.enabled&&S()}),m(`fleet.resume`,()=>{O?.resume.enabled&&C()}),m(`fleet.halt`,()=>ee()),m(`fleet.restart-daemon`,()=>ie()),m(`fleet.edit-grant`,()=>se()),m(`fleet.install-custody`,()=>{let e=h?.custody.hubCheckout;e&&V(`custody-install`)&&v(`custody-install`,e)}),!h)return(0,H.jsx)(`section`,{className:P.control,"aria-label":`Fleet control`,"data-state":`unknown`,children:o.status===`loading`&&!o.data?(0,H.jsx)(`p`,{className:P.muted,"aria-busy":`true`,children:`Reading the fleet…`}):(0,H.jsx)(I,{tone:`unknown`,children:o.data?.reason??`The fleet controls could not be read.`})});let k=h.blocker,A=V(),j=e.busy||(u!==null&&u.event!==null?![`done`,`failed`,`cancelled`].includes(u.event.phase):u!==null),M=h.grant,ce=M.stageId?`${M.stageId}${M.stageIndex!==null&&M.stageCount?` (${M.stageIndex+1}/${M.stageCount})`:``}`:null,le=h.daemon.service===`running`||h.daemon.liveness===`alive`?`Running${h.daemon.pid?` · pid ${h.daemon.pid}`:``}${h.daemon.lastTickAt?` · ticked ${y(h.daemon.lastTickAt)}`:``}`:h.daemon.service===`absent`?`Not installed`:`Not running`;return(0,H.jsxs)(`section`,{className:P.control,"aria-label":`Fleet control`,"data-state":h.state,children:[(0,H.jsxs)(`div`,{className:P.head,children:[(0,H.jsxs)(`p`,{className:P.headline,role:`status`,"aria-live":`polite`,children:[(0,H.jsx)(`span`,{className:P.dot,"data-tone":Qe[h.state],"aria-hidden":`true`}),(0,H.jsx)(`span`,{className:P.stateWord,children:$e[h.state]}),(0,H.jsx)(`span`,{children:h.headline.replace(/^[A-Z][a-z]+ · /u,``)})]}),(0,H.jsxs)(`div`,{className:P.buttons,role:`group`,"aria-label":`Fleet controls`,children:[h.paused?(0,H.jsx)(W,{label:`Resume`,icon:(0,H.jsx)(E,{}),keyId:`fleet.resume`,availability:h.controls.resume,onClick:C,busy:e.busy,readOnly:e.readOnly}):(0,H.jsx)(W,{label:`Start`,icon:(0,H.jsx)(E,{}),keyId:`fleet.start`,availability:h.controls.start,onClick:x,busy:e.busy,readOnly:e.readOnly,primary:!0}),h.paused?null:(0,H.jsx)(W,{label:`Pause`,icon:(0,H.jsx)(te,{}),keyId:`fleet.pause`,availability:h.controls.pause,onClick:S,busy:e.busy,readOnly:e.readOnly}),(0,H.jsx)(W,{label:`Stop`,icon:(0,H.jsx)(T,{}),keyId:`fleet.halt`,availability:h.controls.stop,onClick:ee,busy:e.busy,readOnly:e.readOnly,danger:!0})]})]}),n&&h.state!==`running`&&h.state!==`idle`?(0,H.jsxs)(`p`,{className:P.muted,children:[`Fleet dark since `,oe(n)]}):null,k?(0,H.jsx)(rt,{reason:k.reason,action:k.action,nativeCapable:A,hubCheckout:h.custody.hubCheckout,busy:j,onTake:()=>void b(k.action),setupShownBelow:r}):f&&f.kind!==`grant`&&f.kind!==`re-approve`?(0,H.jsx)(rt,{reason:`one step left`,action:f,nativeCapable:A,hubCheckout:h.custody.hubCheckout,busy:j,onTake:()=>void b(f)}):null,c.length>0?(0,H.jsxs)(`p`,{className:P.did,role:`status`,children:[c.join(` `),(0,H.jsx)(`button`,{type:`button`,className:P.link,onClick:()=>l([]),children:`Dismiss`})]}):null,u?(0,H.jsx)(at,{progress:u,onDismiss:()=>d(null)}):null,(0,H.jsxs)(`dl`,{className:P.facts,children:[(0,H.jsxs)(`div`,{className:P.fact,children:[(0,H.jsx)(`dt`,{children:(0,H.jsx)(F,{children:`Agents`})}),(0,H.jsx)(`dd`,{className:P.factValue,children:h.agents.working===null?`unknown`:h.agents.working===0?`none working`:`${h.agents.working} working`})]}),(0,H.jsxs)(`div`,{className:P.fact,children:[(0,H.jsx)(`dt`,{children:(0,H.jsx)(F,{children:`Grant`})}),(0,H.jsxs)(`dd`,{className:P.factValue,children:[M.state===`active`?`#${M.seq??`?`} · ${M.repos.length} repo${M.repos.length===1?``:`s`} · ${M.daysLeft??`?`} d left${ce?` · ${ce}`:``}`:M.state===`none`?`none signed`:M.state,(0,H.jsxs)(`span`,{className:P.factSub,children:[M.engines.length?M.engines.join(`, `):`no engines`,` · switch `,M.effectiveSwitch]}),(0,H.jsxs)(`button`,{type:`button`,className:P.link,onClick:se,disabled:e.readOnly,children:[(0,H.jsx)(ne,{width:12,height:12,"aria-hidden":`true`}),` Edit scope`]})]})]}),(0,H.jsxs)(`div`,{className:P.fact,children:[(0,H.jsx)(`dt`,{children:(0,H.jsx)(F,{children:`Spend today`})}),(0,H.jsxs)(`dd`,{className:P.factValue,children:[(0,H.jsx)(re,{value:h.spend.todayUsd,max:h.spend.capUsd,variant:`line`,"aria-label":`Spend today against the daily cap`,valueText:`${U(h.spend.todayUsd)} of ${U(h.spend.capUsd)}`}),(0,H.jsxs)(`span`,{className:P.factSub,children:[U(h.spend.todayUsd),` of `,U(h.spend.capUsd),` cap`,h.spend.exhausted?` · spent`:``]})]})]}),(0,H.jsxs)(`div`,{className:P.fact,children:[(0,H.jsx)(`dt`,{children:(0,H.jsx)(F,{children:`Daemon`})}),(0,H.jsxs)(`dd`,{className:P.factValue,children:[le,h.daemon.plist===`drifted`?(0,H.jsx)(`span`,{className:P.factSub,children:`plist is older than your config`}):null,A?(0,H.jsx)(`span`,{className:P.inlineButtons,children:h.daemon.service===`running`||h.daemon.liveness===`alive`?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(w,{size:`sm`,variant:`ghost`,icon:(0,H.jsx)(D,{}),onClick:ie,disabled:j,children:`Restart`}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:ae,disabled:j,children:`Stop daemon`})]}):null}):null]})]}),(0,H.jsxs)(`div`,{className:P.fact,children:[(0,H.jsx)(`dt`,{children:(0,H.jsx)(F,{children:`Custody`})}),(0,H.jsxs)(`dd`,{className:P.factValue,children:[h.custody.installed===!0?`Installed${h.custody.keyInitialized===!0?` · key ready`:h.custody.keyInitialized===!1?` · no key yet`:``}`:h.custody.installed===!1?`Not installed`:`unknown`,(0,H.jsx)(`span`,{className:P.factSub,children:`Signs grants with Touch ID; holds the GitHub App key`}),A&&h.custody.hubCheckout?(0,H.jsx)(`span`,{className:P.inlineButtons,children:(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:()=>v(`custody-install`,h.custody.hubCheckout),disabled:j,children:h.custody.installed===!0?`Reinstall / upgrade`:`Install`})}):null]})]})]})]})}function W({label:e,icon:t,keyId:n,availability:r,onClick:i,busy:a,readOnly:o,primary:s,danger:c}){let l=et(n),u=!r.enabled||o;return(0,H.jsxs)(w,{size:`sm`,variant:c?`danger`:s&&r.enabled?`primary`:`subtle`,icon:t,onClick:i,disabled:u,busy:a&&!u,title:o?`Read-only session`:`${r.hint}${l?` (${l})`:``}`,"aria-keyshortcuts":l??void 0,children:[e,l?(0,H.jsx)(`kbd`,{className:P.kbd,children:l}):null]})}function rt({reason:e,action:t,nativeCapable:n,hubCheckout:r,busy:i,onTake:a,setupShownBelow:o=!1}){let s=tt(t),c=s!==null,l=c&&n&&(s!==`custody-install`||r!==null),u=t.kind!==`wait`&&t.kind!==`setup`&&(!c||l),d=t.kind===`install-custody`&&r?`cd ${r} && ${t.command}`:t.command;return(0,H.jsxs)(`div`,{className:P.blocker,role:`alert`,children:[(0,H.jsx)(`p`,{className:P.blockerReason,children:(0,H.jsxs)(`strong`,{children:[e.charAt(0).toUpperCase(),e.slice(1),`.`]})}),u?(0,H.jsx)(w,{size:`sm`,variant:`primary`,onClick:a,busy:i,children:t.label}):null,t.kind===`setup`&&o?(0,H.jsx)(`span`,{className:P.muted,children:`The setup checklist below names each remaining step.`}):!u&&d?(0,H.jsxs)(`span`,{className:P.blockerCommand,children:[(0,H.jsx)(`span`,{className:P.muted,children:c&&!n?`Open the Ashlr desktop app to do this with a click, or run:`:t.kind===`setup`?`Finish the remaining setup steps (GitHub App, trust root, Claude token):`:`Run:`}),(0,H.jsx)(ae,{command:d})]}):null,t.kind===`install-custody`&&n&&!r?(0,H.jsx)(`span`,{className:P.muted,children:`Enroll your ashlr-hub checkout first — the helper is built from its tools/custody sources.`}):null]})}var it={confirming:`Waiting for you in the dialog`,running:`Running`,done:`Done`,failed:`Did not finish`,cancelled:`Cancelled`};function at({progress:e,onDismiss:t}){let n=e.event,r=n!==null&&(n.phase===`done`||n.phase===`failed`||n.phase===`cancelled`);return(0,H.jsxs)(`div`,{className:P.progress,"data-phase":n?.phase??`confirming`,role:`status`,"aria-live":`polite`,children:[(0,H.jsxs)(`p`,{className:P.progressLine,children:[(0,H.jsx)(`strong`,{children:n?it[n.phase]:`Asking the desktop app…`}),n?` — ${n.message}`:``,r?(0,H.jsx)(`button`,{type:`button`,className:P.link,onClick:t,children:`Dismiss`}):null]}),e.command?(0,H.jsx)(`code`,{className:P.command,children:e.command}):null,n?.output?(0,H.jsxs)(`details`,{className:P.output,open:n.phase===`failed`,children:[(0,H.jsxs)(`summary`,{children:[`Output`,n.exitCode===void 0?``:` (exit ${n.exitCode})`]}),(0,H.jsx)(`pre`,{children:n.output})]}):null]})}var ot=3e3,st=15e3;function ct(e){return e?e.runs.filter(e=>e.phase===`producing`&&e.endedAt===null&&e.outcome===null&&!e.id.startsWith(`task:`)&&!e.id.startsWith(`held:`)):[]}function lt({live:e,actions:t,now:n}){let r=i(ze,{freshMs:1e4}),o=a(ze);_(o,st);let s=r.data?.value??null,c=ct(e);return(0,H.jsxs)(R,{title:`Steer the fleet`,caption:`Stop or redirect a run, reorder the queue, retarget goals, tell the Leader`,children:[(0,H.jsxs)(F,{children:[`Working now (`,c.length,`)`]}),c.length===0?(0,H.jsx)(`p`,{className:P.muted,children:`No run is in flight.`}):(0,H.jsx)(`ul`,{className:P.list,children:c.map(e=>(0,H.jsx)(ut,{run:e,actions:t,now:n,onChanged:o},e.id))}),(0,H.jsx)(`p`,{className:P.sectionLabel,children:(0,H.jsxs)(F,{children:[`Queue (`,s?.tasks.length??0,`)`]})}),s===null?(0,H.jsx)(I,{tone:`unknown`,children:r.data?.reason??`Reading the queue…`}):s.tasks.length===0?(0,H.jsx)(`p`,{className:P.muted,children:`Nothing queued. The Leader and the backlog scan add work on every tick.`}):(0,H.jsx)(`ul`,{className:P.list,children:s.tasks.map(e=>(0,H.jsx)(ft,{task:e,repos:s.targets.repos,actions:t,onChanged:o},e.id))}),s&&s.goals.length>0?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`p`,{className:P.sectionLabel,children:(0,H.jsxs)(F,{children:[`Goals (`,s.goals.length,`)`]})}),(0,H.jsx)(`ul`,{className:P.list,children:s.goals.map(e=>(0,H.jsx)(pt,{goal:e,paths:s.targets.paths,actions:t,onChanged:o},e.id))})]}):null,(0,H.jsx)(`p`,{className:P.sectionLabel,children:(0,H.jsx)(F,{children:`Tell the Leader`})}),(0,H.jsx)(mt,{actions:t})]})}function ut({run:e,actions:t,now:n,onChanged:r}){let[i,a]=(0,B.useState)(null),[o,s]=(0,B.useState)(``),c=(0,B.useId)(),l=!!e.taskId||/^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9._-]+$/u.test(e.repo),u=e.startedAt?Date.parse(e.startedAt):NaN,d=Number.isFinite(u)?Math.max(0,Math.round((n-u)/6e4)):null;function f(){t.act(()=>z({action:`stop-run`,runId:e.id,...e.taskId?{taskId:e.taskId}:{}}),`Stop this run`,{confirm:{title:`Stop this run?`,body:`"${e.title}" on ${b(e.repo)} halts within a few seconds. Nothing it has not filed is kept; its task goes back to the queue.`,confirmLabel:`Stop run`,destructive:!0},onDone:r})}function p(){let n=o.trim();n&&t.act(()=>z(e.taskId?{action:`interject`,runId:e.id,taskId:e.taskId,note:n}:{action:`interject`,runId:e.id,repo:e.repo,title:e.title,note:n}),`Interject on this run`,{onDone:()=>{s(``),a(null),r()}})}return(0,H.jsxs)(`li`,{className:P.row,children:[(0,H.jsxs)(`div`,{className:P.rowHead,children:[(0,H.jsxs)(`p`,{className:P.rowTitle,children:[e.title,(0,H.jsxs)(`span`,{className:P.rowMeta,children:[` `,`· `,b(e.repo),` · `,e.engine??e.lane??`engine ?`,` · `,e.phase,d===null?``:` · ${d} min`]})]}),(0,H.jsxs)(`span`,{className:P.rowControls,children:[(0,H.jsx)(w,{size:`sm`,variant:`ghost`,"aria-expanded":i===`log`,onClick:()=>a(i===`log`?null:`log`),children:`Log`}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,"aria-expanded":i===`interject`,onClick:()=>a(i===`interject`?null:`interject`),disabled:t.readOnly||!l,title:l?void 0:`This run has no queue task or GitHub repo to requeue on — use Stop.`,children:`Interject`}),(0,H.jsx)(w,{size:`sm`,variant:`danger`,icon:(0,H.jsx)(T,{}),onClick:f,disabled:t.readOnly,children:`Stop`})]})]}),i===`log`?(0,H.jsx)(dt,{runId:e.id}):null,i===`interject`?(0,H.jsxs)(`div`,{className:P.interject,children:[(0,H.jsx)(`label`,{className:P.muted,htmlFor:c,children:`Fleet engines run headless, so this stops the run and queues it again with your note in its brief.`}),(0,H.jsx)(`textarea`,{id:c,className:P.textarea,value:o,maxLength:1e3,onChange:e=>s(e.target.value),placeholder:`e.g. Use the existing fixture helper; do not touch the CLI.`}),(0,H.jsx)(`span`,{className:P.rowControls,children:(0,H.jsx)(w,{size:`sm`,variant:`primary`,onClick:p,disabled:!o.trim()||t.readOnly,busy:t.busy,children:`Stop and requeue with note`})})]}):null]})}function dt({runId:e}){let[t,n]=(0,B.useState)(null),[r,i]=(0,B.useState)(null);return(0,B.useEffect)(()=>{let t=!1,r=new AbortController,a=()=>{Be(e,r.signal).then(e=>{t||(n(e),i(null))},e=>{!t&&!(e instanceof DOMException&&e.name===`AbortError`)&&i(`The run log could not be read.`)})};a();let o=setInterval(a,ot);return()=>{t=!0,r.abort(),clearInterval(o)}},[e]),r?(0,H.jsx)(I,{tone:`unknown`,children:r}):t?(0,H.jsxs)(`div`,{children:[t.stopRequestedAt?(0,H.jsxs)(`p`,{className:P.muted,children:[`Stop requested `,y(t.stopRequestedAt),`.`]}):null,t.available?(0,H.jsxs)(`pre`,{className:P.log,"aria-label":`Run log`,"aria-live":`off`,children:[t.truncated?`…
|
|
3
|
-
`:``,t.lines.map(e=>`${e.kind===`model-delta`?``:`[${e.kind}] `}${e.text}`).join(`
|
|
4
|
-
`)||`(no output yet)`]}):(0,H.jsx)(I,{tone:`unknown`,children:t.reason??`No log for this run.`})]}):(0,H.jsx)(`p`,{className:P.muted,"aria-busy":`true`,children:`Reading the log…`})}function ft({task:e,repos:t,actions:n,onChanged:r}){let i=t.some(t=>t.toLowerCase()===e.repo.toLowerCase())?t:[e.repo,...t];return(0,H.jsx)(`li`,{className:P.row,children:(0,H.jsxs)(`div`,{className:P.rowHead,children:[(0,H.jsxs)(`p`,{className:P.rowTitle,children:[e.title,(0,H.jsxs)(`span`,{className:P.rowMeta,children:[` · `,e.status,` · `,e.source,` · updated `,y(e.updatedAt)]})]}),(0,H.jsxs)(`span`,{className:P.rowControls,children:[(0,H.jsx)(je,{size:`sm`,"aria-label":`Priority of ${e.title}`,value:String(e.value),disabled:n.readOnly,onChange:t=>{let i=Number(t.target.value);n.act(()=>z({action:`task-edit`,taskId:e.id,value:i}),`Reprioritize the task`,{onDone:r})},children:[5,4,3,2,1].map(e=>(0,H.jsx)(`option`,{value:e,children:e===5?`Priority 5 (highest)`:e===1?`Priority 1 (lowest)`:`Priority ${e}`},e))}),(0,H.jsx)(je,{size:`sm`,"aria-label":`Repo for ${e.title}`,value:e.repo,disabled:n.readOnly||e.status===`dispatched`,onChange:t=>{let i=t.target.value;n.act(()=>z({action:`task-edit`,taskId:e.id,repo:i}),`Retarget the task`,{onDone:r})},children:i.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,disabled:n.readOnly||e.status===`dispatched`,onClick:()=>n.act(()=>z({action:`task-cancel`,taskId:e.id}),`Cancel the task`,{confirm:{title:`Cancel this task?`,body:`"${e.title}" leaves the queue.`,confirmLabel:`Cancel task`,destructive:!0},onDone:r}),children:`Cancel`})]})]})})}function pt({goal:e,paths:t,actions:n,onChanged:r}){let i=e.project&&!t.includes(e.project)?[e.project,...t]:t;return(0,H.jsx)(`li`,{className:P.row,children:(0,H.jsxs)(`div`,{className:P.rowHead,children:[(0,H.jsxs)(`p`,{className:P.rowTitle,children:[e.objective,(0,H.jsxs)(`span`,{className:P.rowMeta,children:[` · `,e.status,e.missionBound?` · bound to a signed mission`:``]})]}),(0,H.jsx)(`span`,{className:P.rowControls,children:(0,H.jsxs)(je,{size:`sm`,"aria-label":`Target repo for ${e.objective}`,value:e.project??``,disabled:n.readOnly||e.missionBound,onChange:t=>{let i=t.target.value;i&&n.act(()=>z({action:`goal-retarget`,goalId:e.id,project:i}),`Retarget the goal`,{onDone:r})},children:[e.project===null?(0,H.jsx)(`option`,{value:``,children:`No repo (planning only)`}):null,i.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))]})})]})})}function mt({actions:e}){let[t,n]=(0,B.useState)(``),[r,i]=(0,B.useState)(!1);function a(){let r=t.trim();r&&e.act(()=>Le(r),`Add a Leader directive`,{onDone:()=>{n(``),i(!0)}})}return(0,H.jsxs)(`form`,{className:P.directive,onSubmit:e=>{e.preventDefault(),a()},children:[(0,H.jsx)(Fe,{size:`sm`,label:`Directive`,value:t,maxLength:300,disabled:e.readOnly,onChange:e=>{n(e.target.value),i(!1)},placeholder:`e.g. Prioritise test coverage in ashlrcode this week`,hint:r?`Added. The Leader reads it on its next run; it never widens the grant.`:`A standing instruction for the Leader. It never widens the grant.`}),(0,H.jsx)(w,{type:`submit`,size:`sm`,variant:`subtle`,disabled:!t.trim()||e.readOnly,children:`Add directive`})]})}function ht({classes:e={}}){let t=i(M,{freshMs:15e3}),n=a(M);_(n,j);let r=t.data?.value??null;if(!r)return null;let o=A(r.tasks),s=`Claude Code cloud sessions Verse launched that have not delivered a PR yet. ${r.budget.sessionsToday} of ${r.budget.budget.maxSessionsPerDay} sessions used today.`;return(0,H.jsxs)(`li`,{className:`${e.lane??``} ${ce.laneChip}`,"data-active":o>0||void 0,title:s,"aria-label":`Cloud: ${o} running`,children:[(0,H.jsx)(`span`,{className:e.name,children:`Cloud`}),(0,H.jsx)(`span`,{className:e.sep,"aria-hidden":`true`,children:` · `}),(0,H.jsxs)(`span`,{className:e.slots,children:[o,` running`]})]})}var G={stack:`_stack_1iuan_5`,muted:`_muted_1iuan_11`,link:`_link_1iuan_18`,disclosure:`_disclosure_1iuan_34`,num:`_num_1iuan_39`,lanes:`_lanes_1iuan_45`,lane:`_lane_1iuan_45`,laneName:`_laneName_1iuan_72`,laneSlots:`_laneSlots_1iuan_77`,laneSep:`_laneSep_1iuan_83`,laneStrip:`_laneStrip_1iuan_88`,laneNotes:`_laneNotes_1iuan_94`,laneNoteLanes:`_laneNoteLanes_1iuan_107`,decision:`_decision_1iuan_113`,decisionLead:`_decisionLead_1iuan_119`,mode:`_mode_1iuan_129`,decisionWhy:`_decisionWhy_1iuan_142`,candidates:`_candidates_1iuan_149`,exclusions:`_exclusions_1iuan_150`,excluded:`_excluded_1iuan_170`,excludedWhy:`_excludedWhy_1iuan_175`,excludedWhen:`_excludedWhen_1iuan_179`,overnight:`_overnight_1iuan_184`,overnightLead:`_overnightLead_1iuan_190`,facts:`_facts_1iuan_196`,discarded:`_discarded_1iuan_219`,discardTitle:`_discardTitle_1iuan_234`,discardWhy:`_discardWhy_1iuan_238`,tableWrap:`_tableWrap_1iuan_243`,table:`_table_1iuan_243`,repoName:`_repoName_1iuan_276`,actionCell:`_actionCell_1iuan_283`,stage:`_stage_1iuan_287`,stageNote:`_stageNote_1iuan_309`,green:`_green_1iuan_314`,greenValue:`_greenValue_1iuan_320`,holds:`_holds_1iuan_325`,hold:`_hold_1iuan_325`,repoCards:`_repoCards_1iuan_347`,repoCard:`_repoCard_1iuan_347`,repoCardHead:`_repoCardHead_1iuan_365`,advanced:`_advanced_1iuan_373`,chevron:`_chevron_1iuan_399`,disclosureNote:`_disclosureNote_1iuan_407`,taskActions:`_taskActions_1iuan_417`},gt=36e5;function K(e,t,n){if(!e)return{kind:`loading`};let r=e.value;return r?r.state===`dark`&&!n?ie(r):n?{kind:`ready`}:{kind:`empty`,message:t}:{kind:`unknown`,reason:e.reason??`the live fleet view did not answer.`}}function _t({lane:e}){let t=ye(e);return(0,H.jsxs)(`li`,{className:G.lane,"data-off":e.slots===0||void 0,title:Se(e)??void 0,children:[(0,H.jsx)(x,{engine:Te[e.lane]}),(0,H.jsx)(`span`,{className:G.laneName,children:t.name}),(0,H.jsx)(`span`,{className:G.laneSep,"aria-hidden":`true`,children:` · `}),(0,H.jsx)(`span`,{className:G.laneSlots,children:t.slots})]})}function vt({live:e}){if(!e||e.lanes.length===0)return null;let t=me(e.lanes);return(0,H.jsxs)(`div`,{className:G.laneStrip,children:[(0,H.jsxs)(`ul`,{className:G.lanes,"aria-label":`Lanes: busy of slots`,children:[e.lanes.map(e=>(0,H.jsx)(_t,{lane:e},e.lane)),(0,H.jsx)(ht,{classes:{lane:G.lane,name:G.laneName,sep:G.laneSep,slots:G.laneSlots}})]}),t.length>0?(0,H.jsx)(`ul`,{className:G.laneNotes,"aria-label":`Why lanes are limited`,children:t.map(e=>(0,H.jsxs)(`li`,{children:[e.all?null:(0,H.jsxs)(`span`,{className:G.laneNoteLanes,children:[e.lanes.map(e=>xe[e]).join(`, `),`: `]}),v(e.reason)]},e.lanes.join(`,`)))}):null]})}function yt({read:e,now:t,hours:n}){let r=e?.value??null,i=t-n*gt,a=r?we(r.runs,i,t,{includeParked:!1}):[];return(0,H.jsx)(c,{title:`Live fleet`,description:`Lanes × slots, last ${n} h · bars coloured by phase or outcome · outlines are queued`,status:K(e,`Nothing ran in the last ${n} hours.`,a.length>0),lanes:a,from:i,to:t,now:t,toneOf:_e})}function bt({read:e}){let t=(e?.value??null)?.funnel??null,n=Ce(t),r=ge(t),i=t?`${new Date(t.from).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})} – ${new Date(t.to).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})}`:void 0;return(0,H.jsxs)(`div`,{className:G.stack,children:[(0,H.jsx)(u,{title:`Gate funnel`,description:i?`Proposals through G0–G7, ${i}`:`Proposals through the merge gates G0–G7`,status:K(e,`No proposal reached the gates in this window.`,n.length>0),stages:n}),(0,H.jsx)(l,{title:`Refusals by gate`,description:r.total?`${r.total} refusals · top reasons keep their colour`:`Why proposals stopped`,status:K(e,`Nothing was refused in this window.`,r.total>0),categories:r.categories,segments:r.segments,values:r.values,height:180})]})}function xt(e,t){let n=e?.seatInfo.find(e=>e.seatId===t);return{label:n?.label??t,engine:n?.engine??null}}function St({decision:e,view:t,now:n}){let r=e.seatId?xt(t,e.seatId):null;return(0,H.jsxs)(`div`,{className:G.decision,children:[(0,H.jsxs)(`p`,{className:G.decisionLead,children:[r?(0,H.jsxs)(H.Fragment,{children:[r.engine?(0,H.jsx)(x,{engine:r.engine}):null,(0,H.jsx)(`strong`,{children:r.label})]}):(0,H.jsx)(`strong`,{children:`No seat`}),(0,H.jsx)(`span`,{className:G.mode,children:e.mode})]}),(0,H.jsx)(`p`,{className:G.decisionWhy,children:We(e)}),e.candidates.length>1?(0,H.jsxs)(`div`,{children:[(0,H.jsx)(F,{children:`Then`}),(0,H.jsx)(`ol`,{className:G.candidates,children:e.candidates.slice(+!!e.seatId).map(e=>(0,H.jsx)(`li`,{children:xt(t,e).label},e))})]}):null,e.exclusions.length?(0,H.jsxs)(`div`,{children:[(0,H.jsx)(F,{children:`Held back`}),(0,H.jsx)(`ul`,{className:G.exclusions,"aria-label":`Held back seats`,children:e.exclusions.map(e=>(0,H.jsxs)(`li`,{children:[(0,H.jsx)(`span`,{className:G.excluded,children:xt(t,e.seatId).label}),(0,H.jsx)(`span`,{className:G.excludedWhy,children:Ve(e)}),(0,H.jsxs)(`span`,{className:G.excludedWhen,children:[`eligible again: `,He(Ue(e),n)]})]},e.seatId))})]}):null]})}function Ct({read:e,preview:t,view:n,now:r}){let i=he(e?.value??null);return(0,H.jsx)(R,{title:`Why this seat`,caption:i?`Latest dispatch: ${i.run.title} (${y(i.run.phaseStartedAt??i.run.startedAt)})`:t?`The next medium autonomous task would go to…`:void 0,children:i?(0,H.jsx)(St,{decision:i.decision,view:n,now:r}):t?(0,H.jsx)(St,{decision:t,view:n,now:r}):(0,H.jsx)(I,{tone:`unknown`,children:`No routing decision yet. The router preview didn't answer.`})})}function wt({read:e,now:t}){let n=e?.value??null,r=n?Ee(n.runs,t):{lanes:[],from:t-gt,to:t+2*gt,unknownRelease:0};return(0,H.jsx)(c,{title:`Parked`,description:`Waiting for a seat to free up — each bar ends when it should`,caveat:r.unknownRelease?`${r.unknownRelease} item${r.unknownRelease===1?` has`:`s have`} no known release time; ${r.unknownRelease===1?`it runs`:`they run`} to the right edge.`:void 0,status:K(e,`Nothing is parked.`,r.lanes.length>0),lanes:r.lanes,from:r.from,to:r.to,now:t,toneOf:_e,formatTick:e=>new Date(e).toLocaleString(`en-US`,{weekday:`short`,hour:`numeric`})})}function Tt({read:e,onOpenAdvanced:t,dark:n=!1}){let r=e?.value??null,i=r?.run??null;return(0,H.jsx)(R,{title:`Overnight`,caption:r?r.armed?`Armed`:`Not armed`:void 0,actions:(0,H.jsx)(`button`,{type:`button`,className:G.link,onClick:t,children:`Arm or stop in Advanced`}),children:e?r?!r.armed&&!i?(0,H.jsx)(I,{children:n?`Nothing armed.`:`Nothing armed. The fleet runs on its normal schedule.`}):(0,H.jsxs)(`div`,{className:G.overnight,children:[i?.stopRule?(0,H.jsx)(`p`,{className:G.overnightLead,children:Ne(i.stopRule)}):null,(0,H.jsxs)(`dl`,{className:G.facts,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Started`}),(0,H.jsx)(`dd`,{children:i?.startedAt?y(i.startedAt):`—`})]}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Iterations`}),(0,H.jsx)(`dd`,{children:i?.iterationsDone??`—`})]}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Merged`}),(0,H.jsx)(`dd`,{children:i?i.merged.length:`—`})]}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Discarded`}),(0,H.jsx)(`dd`,{children:i?i.discarded.length:`—`})]})]}),i?.activity?(0,H.jsxs)(`p`,{className:G.muted,children:[`Now: `,i.activity]}):null,i&&i.discarded.length?(0,H.jsx)(`ul`,{className:G.discarded,"aria-label":`Discarded work`,children:i.discarded.slice(0,3).map(e=>(0,H.jsxs)(`li`,{children:[(0,H.jsx)(`span`,{className:G.discardTitle,children:e.title}),(0,H.jsx)(`span`,{className:G.discardWhy,children:e.reason})]},e.id))}):null]}):(0,H.jsx)(I,{tone:`unknown`,children:e.reason??`The overnight lane did not answer.`}):(0,H.jsx)(`p`,{className:G.muted,"aria-busy":`true`,children:`Reading the overnight lane…`})})}var Et={quarantine:`Quarantined`,"owner-hold":`On hold (you)`,"leader-pause":`Paused by Leader`,cooldown:`Cooling down`};function Dt(e,t){let n=e.until?Date.parse(e.until):NaN,r=Number.isFinite(n)?Math.max(0,n-t):null,i=r===null?`until resumed`:r<36e5?`${Math.ceil(r/6e4)}m left`:`${Math.round(r/36e5)}h left`;return`${Et[e.kind]} · ${i}`}function Ot(e){return e.includes(`/`)?e.split(`/`)[1]:e}function kt({row:e}){return e.stage===null?(0,H.jsx)(`span`,{className:G.stage,"data-stage":`none`,children:`Not in grant`}):(0,H.jsxs)(`span`,{className:G.stage,"data-stage":e.stage,children:[e.stage===`merge`?`Merge`:`Propose`,e.enforcement===`local`?(0,H.jsx)(`span`,{className:G.stageNote,children:` · local checks`}):null]})}function At({row:e,actions:t}){let n=t.busy||t.readOnly;return e.holds.length?(0,H.jsx)(w,{size:`sm`,variant:`subtle`,disabled:n,"aria-label":`Resume ${e.repo}`,onClick:()=>t.act(()=>ue({action:`resume-repo`,repo:e.repo}),`Resume ${e.repo}`,{confirm:{title:`Resume ${Ot(e.repo)}?`,body:`Clears ${e.holds.map(e=>Et[e.kind].toLowerCase()).join(` and `)}. New fleet work can start there on the next tick.`,confirmLabel:`Resume`}}),children:`Resume`}):e.stage===null?null:(0,H.jsx)(w,{size:`sm`,variant:`ghost`,disabled:n,"aria-label":`Pause ${e.repo}`,onClick:()=>t.act(()=>ue({action:`pause-repo`,repo:e.repo,reason:`Paused by Mason from the Fleet surface`}),`Pause ${e.repo}`,{confirm:{title:`Pause ${Ot(e.repo)}?`,body:`No new fleet work starts there until you resume it. Runs already in flight finish and are watched as usual.`,confirmLabel:`Pause repo`,destructive:!0}}),children:`Pause`})}function jt({row:e}){return(0,H.jsxs)(`span`,{className:G.green,children:[(0,H.jsx)(`span`,{className:G.greenValue,children:e.greenPct7d===null?`—`:`${Math.round(e.greenPct7d)}%`}),(0,H.jsx)(s,{points:e.greenTrend,width:64,height:18,ariaLabel:`${e.repo} post-merge green, 14 days`,describe:e=>`${Math.round(e)}%`})]})}function Mt({row:e,now:t}){return e.holds.length?(0,H.jsx)(`span`,{className:G.holds,children:e.holds.map(e=>(0,H.jsx)(`span`,{className:G.hold,"data-kind":e.kind,title:e.reason,children:Dt(e,t)},e.kind))}):(0,H.jsx)(`span`,{className:G.muted,children:`—`})}function Nt(e){if(e===void 0)return null;if(e===null)return`Fleet mirrors: unknown — the enrollment registry could not be read.`;if(e.count===0)return`Fleet mirrors: none yet — the fleet clones a repo the first time it works on it.`;let t=e.repos.slice(0,6).join(`, `),n=e.repos.length>6?` and ${e.repos.length-6} more`:``;return`Fleet mirrors: ${e.count} working ${e.count===1?`copy`:`copies`}${t?` (${t}${n})`:``} — the fleet's own clones of the repos above.`}var Pt=e=>e.mergesToday===null?`—`:`${e.mergesToday}${e.maxMergesPerDay===null?``:` / ${e.maxMergesPerDay}`}`;function Ft({read:e,actions:t,now:n,compact:r}){let i=e?.value??null,a=i?.repos??[];return(0,H.jsxs)(R,{title:`Repositories`,caption:i?`${a.length} enrolled · stage is what the grant and rollout allow right now`:void 0,children:[e?i?a.length===0?(0,H.jsx)(I,{children:`No repositories are enrolled.`}):r?(0,H.jsx)(`ul`,{className:G.repoCards,children:a.map(e=>(0,H.jsxs)(`li`,{className:G.repoCard,id:N(`repo-${e.repo}`),children:[(0,H.jsxs)(`div`,{className:G.repoCardHead,children:[(0,H.jsx)(`span`,{className:G.repoName,children:e.repo}),(0,H.jsx)(At,{row:e,actions:t})]}),(0,H.jsxs)(`dl`,{className:G.facts,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Stage`}),(0,H.jsx)(`dd`,{children:(0,H.jsx)(kt,{row:e})})]}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Last merge`}),(0,H.jsx)(`dd`,{children:e.lastMergeAt?y(e.lastMergeAt):`—`})]}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Today`}),(0,H.jsx)(`dd`,{children:Pt(e)})]}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:`Green 7d`}),(0,H.jsx)(`dd`,{children:(0,H.jsx)(jt,{row:e})})]})]}),(0,H.jsx)(Mt,{row:e,now:n})]},e.repo))}):(0,H.jsx)(`div`,{className:G.tableWrap,children:(0,H.jsxs)(`table`,{className:G.table,children:[(0,H.jsx)(`caption`,{className:`visually-hidden`,children:`Enrolled repositories`}),(0,H.jsx)(`thead`,{children:(0,H.jsxs)(`tr`,{children:[(0,H.jsx)(`th`,{scope:`col`,children:`Repository`}),(0,H.jsx)(`th`,{scope:`col`,children:`Stage`}),(0,H.jsx)(`th`,{scope:`col`,children:`Last merge`}),(0,H.jsx)(`th`,{scope:`col`,className:G.num,children:`Today`}),(0,H.jsx)(`th`,{scope:`col`,children:`Post-merge green · 14d`}),(0,H.jsx)(`th`,{scope:`col`,className:G.num,children:`Open PRs`}),(0,H.jsx)(`th`,{scope:`col`,children:`Holds`}),(0,H.jsx)(`th`,{scope:`col`,children:(0,H.jsx)(`span`,{className:`visually-hidden`,children:`Action`})})]})}),(0,H.jsx)(`tbody`,{children:a.map(e=>(0,H.jsxs)(`tr`,{id:N(`repo-${e.repo}`),"data-held":e.holds.length>0||void 0,children:[(0,H.jsx)(`th`,{scope:`row`,className:G.repoName,children:e.repo}),(0,H.jsx)(`td`,{children:(0,H.jsx)(kt,{row:e})}),(0,H.jsx)(`td`,{children:e.lastMergeAt?y(e.lastMergeAt):`—`}),(0,H.jsx)(`td`,{className:G.num,children:Pt(e)}),(0,H.jsx)(`td`,{children:(0,H.jsx)(jt,{row:e})}),(0,H.jsx)(`td`,{className:G.num,children:e.openFleetPrs??`—`}),(0,H.jsx)(`td`,{children:(0,H.jsx)(Mt,{row:e,now:n})}),(0,H.jsx)(`td`,{className:G.actionCell,children:(0,H.jsx)(At,{row:e,actions:t})})]},e.repo))})]})}):(0,H.jsx)(I,{tone:`unknown`,children:e.reason??`The live fleet view did not answer.`}):(0,H.jsx)(`p`,{className:G.muted,"aria-busy":`true`,children:`Reading repositories…`}),i&&Nt(i.mirrors)?(0,H.jsx)(`p`,{className:G.muted,children:Nt(i.mirrors)}):null]})}var It=`/api/verse/fleet/live/feedback`,Lt=`${It}/cases/`,q={"producer-succeeded":`Produced proposal`,failed:`Failed`,cancelled:`Cancelled`,refused:`Held`,"empty-diff":`No changes`,disabled:`Disabled`,unknown:`Unclassified`},Rt=Object.keys(q),zt=/^h:(?:[a-f0-9]{16}:){3}[a-f0-9]{16}$/;function J(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Y(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 J(e)&&Rt.every(t=>Number.isSafeInteger(e[t])&&e[t]>=0)}function Vt(e){if(!J(e)||e.v!==1||![`warming`,`current`,`stale`,`unavailable`].includes(String(e.state))||e.refreshedAt!==null&&!Y(e.refreshedAt))return null;if(e.feedback===null)return[`warming`,`unavailable`].includes(String(e.state))?e:null;let t=e.feedback;if(!J(t)||t.schemaVersion!==1||![`missing`,`healthy`,`degraded`].includes(String(t.sourceState))||typeof t.complete!=`boolean`||!J(t.window)||!Y(t.window.since)||!Y(t.window.through)||t.observedThrough!==null&&!Y(t.observedThrough)||!Bt(t.observedCounts)||t.counts!==null&&!Bt(t.counts)||t.complete!==(t.counts!==null)||t.complete!==(t.sourceState===`healthy`)||!Array.isArray(t.cases)||typeof t.digest!=`string`||!zt.test(t.digest)||!J(t.coverage))return null;let n=t.coverage;return Date.parse(t.window.since)>Date.parse(t.window.through)||![`missing`,`healthy`,`degraded`,`unavailable`].includes(String(n.proposalSource))||![`legacyRows`,`invalidAttempts`,`conflictingAttempts`,`duplicateRows`,`invalidTimestamps`].every(e=>Number.isSafeInteger(n[e])&&n[e]>=0)||!t.cases.every(e=>J(e)&&typeof e.caseId==`string`&&zt.test(e.caseId)&&Y(e.endedAt)&&typeof e.outcome==`string`&&Object.hasOwn(q,e.outcome)&&(e.failureKind===null||[`engine`,`sandbox`,`capture`].includes(String(e.failureKind)))&&typeof e.proposalRecorded==`boolean`)?null:e}var X={panel:`_panel_zrf67_1`,cases:`_cases_zrf67_7`,body:`_body_zrf67_10`,note:`_note_zrf67_11`,counts:`_counts_zrf67_12`,bar:`_bar_zrf67_14`,actions:`_actions_zrf67_19`},Ht=/^h:(?:[a-f0-9]{16}:){3}[a-f0-9]{16}$/,Ut={produced:`Execution recorded`,verified:`Verification`,"pr-opened":`Pull request opened`,merged:`Merged`,"post-merge":`After merge`,reverted:`Reverted`},Wt={"dispatch-final":`Completed attempt`,"proposal-verification":`Proposal verification record`,"authority-ledger":`Recorded fleet action`,"authenticated-host":`Confirmed GitHub merge`,"authenticated-local":`Confirmed local merge`},Gt={recorded:`Recorded`,passed:`Passed`,failed:`Failed`,unbound:`Not bound to this change`,"host-merged":`GitHub merge recorded`,"local-merged":`Local merge recorded`,green:`Green result recorded`,red:`Red result recorded`,reverted:`Revert recorded`};function Z(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&[Object.prototype,null].includes(Object.getPrototypeOf(e))&&Reflect.ownKeys(e).every(t=>typeof t==`string`&&`value`in Object.getOwnPropertyDescriptor(e,t))}function Kt(e){return typeof e==`string`&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString()===e}function Q(e,t){return typeof e==`string`&&t.includes(e)}function qt(e){if(typeof e!=`string`)return!1;if(/^\/(?:inbox|work\/runs)\/[A-Za-z0-9][A-Za-z0-9_.-]{0,159}$/.test(e))return!0;let t=/^https:\/\/github\.com\/([A-Za-z0-9][A-Za-z0-9-]*)\/([A-Za-z0-9][A-Za-z0-9_.-]*)\/pull\/([1-9][0-9]*)$/.exec(e);return!!t&&Number.isSafeInteger(Number(t[3]))}function Jt(e,t){try{if(!Ht.test(t)||!Z(e)||e.v!==1||!Q(e.state,[`warming`,`current`,`stale`,`unavailable`])||e.refreshedAt!==null&&!Kt(e.refreshedAt))return null;if(e.detail===null)return Q(e.state,[`warming`,`unavailable`])?e:null;let n=e.detail;if(!Z(n)||n.schemaVersion!==1||n.caseId!==t||typeof n.digest!=`string`||!Ht.test(n.digest)||!Kt(n.endedAt)||typeof n.outcome!=`string`||!Object.hasOwn(q,n.outcome)||n.shipping!==`not-recorded`||!Z(n.coverage)||!Array.isArray(n.timeline)||!Q(e.state,[`current`,`stale`]))return null;let r=n.coverage;if(!Q(r.dispatch,[`healthy`,`degraded`,`missing`])||!Q(r.proposals,[`healthy`,`degraded`,`missing`])||!Q(r.ledger,[`healthy`,`missing`,`broken`,`unavailable`])||![`invalidRecords`,`conflictingRecords`].every(e=>Number.isSafeInteger(r[e])&&r[e]>=0))return null;for(let e=0;e<n.timeline.length;e++){if(!Object.hasOwn(n.timeline,e))return null;let t=n.timeline[e];if(!Z(t)||typeof t.stage!=`string`||!Object.hasOwn(Ut,t.stage)||typeof t.result!=`string`||!Object.hasOwn(Gt,t.result)||typeof t.basis!=`string`||!Object.hasOwn(Wt,t.basis)||t.at!==null&&!Kt(t.at)||t.href!==void 0&&!qt(t.href)||t.ci!==void 0&&!Q(t.ci,[`green`,`red`,`none`,`unknown`])||t.suite!==void 0&&!Q(t.suite,[`pass`,`fail`,`not-run`])||!(t.stage===`produced`?t.result===`recorded`&&t.basis===`dispatch-final`:t.stage===`verified`?Q(t.result,[`passed`,`failed`,`unbound`])&&t.basis===`proposal-verification`:t.stage===`pr-opened`?t.result===`recorded`&&t.basis===`authority-ledger`:t.stage===`merged`?t.result===`host-merged`&&Q(t.basis,[`authenticated-host`,`authority-ledger`])||t.result===`local-merged`&&t.basis===`authenticated-local`:t.stage===`post-merge`?Q(t.result,[`green`,`red`])&&t.basis===`authority-ledger`:t.result===`reverted`&&t.basis===`authority-ledger`)||t.stage!==`post-merge`&&(t.ci!==void 0||t.suite!==void 0)||t.stage===`verified`&&t.result!==`unbound`&&t.at===null)return null}return e}catch{return null}}var $={panel:`_panel_1f9bw_1`,note:`_note_1f9bw_2`,timeline:`_timeline_1f9bw_3`,heading:`_heading_1f9bw_7`};function Yt({caseId:e}){let t=(0,B.useMemo)(()=>fe(`verse-execution-case:${e}`,`${Lt}${encodeURIComponent(e)}`,`Recorded execution details`,t=>Jt(t,e)),[e]),n=i(t,{freshMs:15e3}),r=a(t),[o]=(0,B.useState)(()=>Date.now()),s=Me(2e3),c=n.data?.value;_(r,c?.state===`warming`&&s-o<3e4?2e3:15e3);let l=c?.detail;if(!l)return(0,H.jsx)(`p`,{className:$.note,children:n.data?.reason??(c?.state===`unavailable`?`Recorded details are unavailable. Missing evidence does not mean no work shipped.`:`Reading recorded execution details…`)});let u=l.coverage.dispatch!==`healthy`||l.coverage.proposals!==`healthy`||l.coverage.ledger!==`healthy`||l.coverage.invalidRecords>0||l.coverage.conflictingRecords>0;return(0,H.jsxs)(`section`,{className:$.panel,"aria-label":`Selected execution timeline`,children:[(0,H.jsxs)(`p`,{className:$.note,children:[u?`Partial evidence. Unrecorded stages remain unknown.`:`Stages supported by recorded evidence.`,c?.state===`stale`?` Showing the last reading while it refreshes.`:``]}),(0,H.jsx)(`ol`,{className:$.timeline,children:l.timeline.map((e,t)=>(0,H.jsxs)(`li`,{"data-result":e.result,children:[(0,H.jsxs)(`div`,{className:$.heading,children:[(0,H.jsx)(`strong`,{children:Ut[e.stage]}),(0,H.jsx)(`span`,{children:Gt[e.result]})]}),(0,H.jsxs)(`p`,{className:$.note,children:[Wt[e.basis],` · `,e.at?(0,H.jsx)(`time`,{dateTime:e.at,title:e.at,children:y(e.at)}):`Time unknown`]}),e.ci!==void 0||e.suite!==void 0?(0,H.jsxs)(`p`,{className:$.note,children:[e.ci===void 0?``:`CI: ${e.ci===`none`?`none recorded`:e.ci}`,e.ci!==void 0&&e.suite!==void 0?` · `:``,e.suite===void 0?``:`Local verification: ${e.suite===`not-run`?`not run`:e.suite}`]}):null,e.href?(0,H.jsx)(`a`,{href:e.href,...e.href.startsWith(`https:`)?{target:`_blank`,rel:`noopener noreferrer`}:{},children:e.href.startsWith(`https:`)?`Open GitHub pull request`:e.href.startsWith(`/inbox/`)?`Open proposal`:`Open run`}):null]},t))}),l.timeline.length?null:(0,H.jsx)(`p`,{className:$.note,children:`No timeline entries could be confirmed.`}),(0,H.jsx)(`p`,{className:$.note,children:`Release and deployment are not recorded here. A merge or green check alone does not establish production status.`}),c?.refreshedAt?(0,H.jsxs)(`p`,{className:$.note,children:[`Last reading `,(0,H.jsx)(`time`,{dateTime:c.refreshedAt,title:c.refreshedAt,children:y(c.refreshedAt)})]}):null,(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:r,children:`Refresh details`})]})}var Xt=fe(`verse-execution-feedback`,It,`Recorded execution outcomes`,Vt);function Zt(){let e=i(Xt,{freshMs:15e3}),t=a(Xt),[n]=(0,B.useState)(()=>Date.now()),[r,o]=(0,B.useState)(!1),[s,c]=(0,B.useState)(null),l=Me(2e3),u=e.data?.value;_(t,u?.state===`warming`&&l-n<3e4?2e3:15e3);let d=u?.feedback;if(!u)return(0,H.jsx)(`p`,{className:X.note,children:e.data?.reason??`Reading recorded outcomes…`});if(!d)return(0,H.jsx)(`p`,{className:X.note,children:u.state===`warming`?`Reading recorded outcomes…`:`Recorded execution evidence is unavailable.`});let f=d.counts!==null,m=d.counts??d.observedCounts,h=Math.max(1,...Object.values(m));return(0,H.jsxs)(`div`,{className:X.body,children:[(0,H.jsxs)(`p`,{className:X.note,children:[d.sourceState===`missing`?`No readable execution history. Totals are unknown.`:f?`Recorded outcomes in the last seven days.`:`Partial history. These are observed counts; full totals are unknown.`,u.state===`stale`?` Showing the last reading while it refreshes.`:``]}),d.sourceState===`missing`?null:(0,H.jsx)(`dl`,{className:X.counts,"aria-label":f?`Recorded execution totals`:`Observed execution counts, incomplete history`,children:Object.keys(q).map(e=>(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`dt`,{children:q[e]}),(0,H.jsxs)(`dd`,{children:[f?``:`≥ `,m[e],(0,H.jsx)(`span`,{className:X.bar,"aria-hidden":`true`,"data-outcome":e,style:{width:`${m[e]/h*100}%`}})]})]},e))}),d.sourceState===`missing`?null:(0,H.jsx)(`p`,{className:X.note,children:`Bars compare recorded counts; they are not success rates.`}),u.refreshedAt?(0,H.jsxs)(`p`,{className:X.note,title:u.refreshedAt,children:[`Last reading `,y(u.refreshedAt)]}):null,(0,H.jsx)(`p`,{className:X.note,children:`Produced proposals are counted separately from verification and shipping. Opening this view starts no agent or model call.`}),d.coverage.proposalSource===`degraded`||d.coverage.proposalSource===`unavailable`?(0,H.jsx)(`p`,{className:X.note,children:`Proposal history is incomplete; an unrecorded proposal is not evidence that none exists.`}):null,d.cases.length?(0,H.jsxs)(`details`,{className:X.cases,open:r,onToggle:e=>o(e.currentTarget.open),children:[(0,H.jsxs)(`summary`,{children:[`Inspect `,d.cases.length,` recorded outcomes`]}),r?(0,H.jsx)(H.Fragment,{children:(0,H.jsx)(`ul`,{children:d.cases.map(e=>(0,H.jsxs)(`li`,{children:[(0,H.jsxs)(`span`,{children:[q[e.outcome],e.failureKind?` · ${e.failureKind}`:``]}),(0,H.jsxs)(`span`,{children:[y(e.endedAt),e.proposalRecorded?` · proposal recorded`:``]}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,"aria-expanded":s===e.caseId,onClick:()=>c(s===e.caseId?null:e.caseId),children:s===e.caseId?`Hide timeline`:`View timeline`}),s===e.caseId?(0,H.jsx)(Yt,{caseId:e.caseId},e.caseId):null]},e.caseId))})}):null]}):null,(0,H.jsxs)(`div`,{className:X.actions,children:[(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:t,children:`Refresh`}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:()=>p(`surface.growth`,{via:`button`}),children:`Open lessons`})]})]})}function Qt(){let[e,t]=(0,B.useState)(!1);return(0,H.jsxs)(`details`,{className:X.panel,onToggle:e=>t(e.currentTarget.open),children:[(0,H.jsxs)(`summary`,{children:[`Execution feedback `,(0,H.jsx)(`span`,{children:`outcomes and learning evidence`})]}),e?(0,H.jsx)(Zt,{}):null]})}var $t=5e3,en=3e4,tn=(0,B.lazy)(()=>r(()=>import(`./ShadowDecisions-B1ZPv7K-.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),nn=(0,B.lazy)(()=>r(()=>import(`./Advanced-Dr9aVbXV.js`).then(e=>e.t).then(e=>({default:()=>(0,H.jsx)(e.FleetAdvanced,{embedded:!0})})),__vite__mapDeps([9,10,11,12,13,14,15,3,16,17,18,19,20,21,5,4,6,22,23,24,25,26]))),rn=(0,B.lazy)(()=>r(()=>import(`./AutonomyStatus-Uydy6-pZ.js`),__vite__mapDeps([27,1,2,3,4,5,6,23,24,28,22,29,18,19,30,31,32,33,7,34,35,8])));function an(){let{compact:e}=h(),t=i(de),n=i(Pe),r=i(S,{freshMs:15e3}),s=i(C,{freshMs:15e3}),c=a(de),l=a(Pe),u=a(C),d=a(S);_(c,$t),_(()=>{l(),u(),d()},en);let f=Me(15e3),m=ke(),g=De(m),[v,y]=(0,B.useState)(!1),b=(0,B.useId)(),x=t.data?.value??null,T=se(),E=i(le,{freshMs:3e4}).data?.value??null,te=E?.grant.state??null,ne=te!==null&&te!==`none`,D=T!=null&&x!==null&&be(x);function re(){y(!0),requestAnimationFrame(()=>document.getElementById(b)?.scrollIntoView?.({block:`start`,behavior:`smooth`}))}return(0,H.jsxs)(Oe,{title:`Fleet`,actions:t.status===`refreshing`?(0,H.jsx)(o,{}):null,lead:(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`div`,{className:G.taskActions,role:`group`,"aria-label":`Delegate and guide work`,children:[(0,H.jsx)(w,{size:`sm`,variant:`primary`,onClick:()=>p(`agents.new`,{via:`button`}),children:`Delegate a task`}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:()=>p(`surface.agents`,{via:`button`}),children:`Review agents`}),(0,H.jsx)(w,{size:`sm`,variant:`ghost`,onClick:()=>p(`surface.mind`,{via:`button`}),children:`Standing instructions`})]}),(0,H.jsx)(`p`,{className:G.muted,children:`Delegate a task in its own workspace, or give the Leader standing instructions for fleet planning.`}),(0,H.jsx)(Ae,{actions:m}),(0,H.jsxs)(`div`,{id:N(`fleet-control`),children:[(0,H.jsx)(`span`,{id:N(`authority-grant`)}),(0,H.jsx)(nt,{actions:m,grantFlow:g,darkSince:O(x),setupShownBelow:T?.kind===`setup`})]}),T&&T.kind===`setup`?(0,H.jsx)(k,{state:T,here:`fleet`}):null,(0,H.jsx)(vt,{live:x})]}),children:[E&&E.grant.state===`active`?(0,H.jsx)(L,{span:12,children:(0,H.jsx)(`div`,{id:N(`autonomy`),children:(0,H.jsx)(B.Suspense,{fallback:(0,H.jsx)(`p`,{className:G.muted,"aria-busy":`true`,children:`Loading the rollout ladder…`}),children:(0,H.jsx)(rn,{status:E,now:f,onReapprove:e=>g.open(`re-approve`,e),blocked:ve({status:E,reason:null,readOnly:m.readOnly,busy:m.busy})})})})}):null,(0,H.jsxs)(L,{span:12,children:[(0,H.jsx)(lt,{live:x,actions:m,now:f}),(0,H.jsx)(Ie,{budget:r.data??null,now:f}),(0,H.jsx)(Qt,{})]}),D?null:(0,H.jsx)(L,{span:12,children:(0,H.jsx)(yt,{read:t.data,now:f,hours:e?6:12})}),ne?(0,H.jsx)(L,{span:12,children:(0,H.jsx)(B.Suspense,{fallback:(0,H.jsx)(`p`,{className:G.muted,"aria-busy":`true`,children:`Loading shadow decisions…`}),children:(0,H.jsx)(tn,{now:f})})}):null,D?null:(0,H.jsx)(L,{span:7,children:(0,H.jsx)(bt,{read:t.data})}),(0,H.jsx)(L,{span:D?6:5,children:(0,H.jsx)(Ct,{read:t.data,preview:s.data??null,view:r.data??null,now:f})}),D?null:(0,H.jsx)(L,{span:7,children:(0,H.jsx)(wt,{read:t.data,now:f})}),(0,H.jsx)(L,{span:D?6:5,children:(0,H.jsx)(Tt,{read:n.data,onOpenAdvanced:re,dark:x?.state===`dark`})}),(0,H.jsx)(L,{span:12,children:(0,H.jsx)(Ft,{read:t.data,actions:m,now:f,compact:e})}),(0,H.jsx)(L,{span:12,children:(0,H.jsxs)(`div`,{className:G.advanced,children:[(0,H.jsxs)(`button`,{type:`button`,className:G.disclosure,"aria-expanded":v,"aria-controls":b,onClick:()=>y(e=>!e),children:[(0,H.jsx)(ee,{className:G.chevron,width:14,height:14,"aria-hidden":`true`}),`Advanced`,(0,H.jsx)(`span`,{className:G.disclosureNote,children:`daemon, overnight, local runtime, caps, scope, activity, safety, goals`})]}),(0,H.jsx)(`div`,{id:b,hidden:!v,children:v?(0,H.jsx)(B.Suspense,{fallback:(0,H.jsx)(`p`,{className:G.muted,"aria-busy":`true`,children:`Loading the advanced panels…`}),children:(0,H.jsx)(nn,{})}):null})]})}),g.sheet,m.dialogs]})}export{$t as FLEET_POLL_MS,en as FLEET_SLOW_POLL_MS,an as FleetSection};
|
|
5
|
-
//# sourceMappingURL=FleetSection-CmZKQ1rr.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/fleet/native-fleet.ts","../../../../../../src/web-ui/routes/verse/fleet/FleetControl.tsx","../../../../../../src/web-ui/routes/verse/fleet/SteerPanel.tsx","../../../../../../src/web-ui/routes/verse/cloud/CloudLaneChip.tsx","../../../../../../src/web-ui/routes/verse/fleet/FleetCards.tsx","../../../../../../src/web-ui/routes/verse/fleet/RepoTable.tsx","../../../../../../src/core/verse/execution-feedback-api-types.ts","../../../../../../src/web-ui/routes/verse/fleet/execution-feedback-model.ts","../../../../../../src/web-ui/routes/verse/fleet/execution-case-model.ts","../../../../../../src/web-ui/routes/verse/fleet/ExecutionCaseDetails.tsx","../../../../../../src/web-ui/routes/verse/fleet/ExecutionFeedback.tsx","../../../../../../src/web-ui/routes/verse/sections/FleetSection.tsx"],"sourcesContent":["/**\n * routes/verse/fleet/native-fleet.ts — the page side of the desktop app's\n * fleet operations (shell contract item 8, desktop/src-tauri/src/fleet_ops.rs).\n *\n * `window.__ASHLR_DESKTOP__.fleet.send({ id, op })` asks native to start /\n * restart / stop the resident daemon or install the custody helper. Native\n * confirms every raise in a NATIVE dialog this page cannot answer, runs the\n * operator's own `ashlr` CLI (or macOS's admin prompt for custody), and\n * reports progress as `ashlr:fleet` window events. In a plain browser (no\n * desktop shell, or an older one) `nativeFleetAvailable()` is false and the\n * Fleet tab shows the Terminal command instead.\n */\n\nexport type NativeFleetOp = 'resident-start' | 'resident-restart' | 'resident-stop' | 'custody-install';\nexport type NativeFleetPhase = 'confirming' | 'running' | 'done' | 'failed' | 'cancelled';\n\nexport interface NativeFleetEvent {\n id: string;\n op: NativeFleetOp;\n phase: NativeFleetPhase;\n message: string;\n command?: string;\n exitCode?: number;\n output?: string;\n}\n\ninterface FleetBridge {\n version: number;\n ops?: readonly string[];\n send: (msg: { id: string; op: NativeFleetOp; checkout?: string }) => boolean;\n}\n\nfunction bridge(): FleetBridge | null {\n if (typeof window === 'undefined') return null;\n const desktop = (window as unknown as { __ASHLR_DESKTOP__?: { fleet?: FleetBridge } }).__ASHLR_DESKTOP__;\n const fleet = desktop?.fleet;\n return fleet && typeof fleet.send === 'function' && fleet.version >= 1 ? fleet : null;\n}\n\n/** The desktop app can run `op` natively. */\nexport function nativeFleetAvailable(op?: NativeFleetOp): boolean {\n const b = bridge();\n if (!b) return false;\n return op === undefined || !Array.isArray(b.ops) || b.ops.includes(op);\n}\n\nconst TERMINAL: ReadonlySet<NativeFleetPhase> = new Set(['done', 'failed', 'cancelled']);\n\nfunction isFleetEvent(value: unknown): value is NativeFleetEvent {\n if (!value || typeof value !== 'object') return false;\n const v = value as Record<string, unknown>;\n return typeof v['id'] === 'string' && typeof v['op'] === 'string' && typeof v['phase'] === 'string' && typeof v['message'] === 'string';\n}\n\nlet counter = 0;\n\n/**\n * Run one native op. `onProgress` sees every event (confirming, running, …);\n * the promise resolves with the terminal one. Rejects only when the bridge is\n * missing or refused the message. A run with no answer in `timeoutMs`\n * resolves as failed (native keeps the op; the page just stops waiting).\n */\nexport function runNativeFleetOp(\n op: NativeFleetOp,\n opts: { checkout?: string; onProgress?: (event: NativeFleetEvent) => void; timeoutMs?: number } = {},\n): Promise<NativeFleetEvent> {\n const b = bridge();\n if (!b) return Promise.reject(new Error('This needs the Ashlr desktop app.'));\n counter += 1;\n const id = `fleet-${Date.now().toString(36)}-${counter}`;\n return new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const onEvent = (event: Event) => {\n const detail = (event as CustomEvent).detail;\n if (!isFleetEvent(detail) || detail.id !== id) return;\n opts.onProgress?.(detail);\n if (TERMINAL.has(detail.phase)) {\n window.removeEventListener('ashlr:fleet', onEvent);\n if (timer) clearTimeout(timer);\n resolve(detail);\n }\n };\n window.addEventListener('ashlr:fleet', onEvent);\n timer = setTimeout(() => {\n window.removeEventListener('ashlr:fleet', onEvent);\n resolve({ id, op, phase: 'failed', message: 'The desktop app did not answer in time. Check the Fleet tab again in a moment.' });\n }, opts.timeoutMs ?? (op === 'custody-install' ? 25 * 60_000 : 5 * 60_000));\n const sent = b.send(opts.checkout ? { id, op, checkout: opts.checkout } : { id, op });\n if (!sent) {\n window.removeEventListener('ashlr:fleet', onEvent);\n if (timer) clearTimeout(timer);\n reject(new Error('The desktop app refused that request.'));\n }\n });\n}\n","/**\n * routes/verse/fleet/FleetControl.tsx — the ONE place to operate the fleet\n * (3.15). The Fleet tab's header:\n *\n * ● Running · 3 agents working · stage shadow [Start ⌘⌥S] [Pause ⌘⌥P] [Stop ⌘⌥.]\n * Blocked: <one reason> [one button]\n * Agents 3 working | Grant #2 · 14 repos · 28 d · shadow 1/8 [Edit] | Spend $1.20 of $20 | Daemon running · ticked 1 m ago [Restart]\n *\n * Every control posts to /api/verse/fleet/control and renders the state the\n * server READ BACK afterwards — never an optimistic flip. Start confirms\n * first; Stop confirms with the catalog's Stop copy; Pause and Resume are\n * instant. What only Mason can do comes back as the single next action:\n * the Touch ID grant sheet, or a native step in the desktop app (resident\n * daemon start / restart, custody install) behind a native confirm dialog.\n * In a browser without the desktop shell those show the Terminal command.\n *\n * ⌘K and the keys (command-keys.ts fleet.*) run the same handlers.\n */\nimport { useState, type ReactNode } from 'react';\nimport type { FleetControlActionResultV1, FleetControlStateV1, FleetNextAction } from '../../../../core/fleet/fleet-control-types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { Meter } from '../../../components/primitives/Meter.js';\nimport { IconLock, IconPause, IconPlay, IconRefresh, IconStop } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { CopyCommand } from '../autonomy/AutonomyOffState.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport { stopConfirm, type GrantFlow } from '../command/AutonomyBar.js';\nimport type { ConfirmSpec, SurfaceActions } from '../command/actions.js';\nimport { CardNote, MicroLabel } from '../command/Surface.js';\nimport { useCommandHandler } from '../shell/command-bus.js';\nimport { detectKeyPlatform, formatChord } from '../shell/command-catalog.js';\nimport { commandChord } from '../shell/command-keys.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { darkSinceLabel } from './dark-since.js';\nimport { fleetControlQuery, postFleetControl } from './fleet-control-queries.js';\nimport { nativeFleetAvailable, runNativeFleetOp, type NativeFleetEvent, type NativeFleetOp } from './native-fleet.js';\nimport styles from './fleet-control.module.css';\n\nexport const FLEET_CONTROL_POLL_MS = 5_000;\n\nconst START_CONFIRM: ConfirmSpec = {\n title: 'Start the fleet?',\n body: 'Start clears Stop, resumes dispatch and, if autonomy is switched Off, turns it to Autonomous — only within your signed grant. If the daemon is not running, the desktop app asks you to confirm starting it.',\n confirmLabel: 'Start fleet',\n destructive: false,\n};\n\nconst STATE_TONE: Record<FleetControlStateV1['state'], string> = {\n running: 'running',\n idle: 'ok',\n paused: 'warning',\n stopped: 'danger',\n blocked: 'danger',\n off: 'muted',\n};\n\nconst STATE_WORD: Record<FleetControlStateV1['state'], string> = {\n running: 'Running',\n idle: 'Idle',\n paused: 'Paused',\n stopped: 'Stopped',\n blocked: 'Blocked',\n off: 'Off',\n};\n\nfunction keyHint(id: string): string | null {\n const chord = commandChord(id);\n return chord ? formatChord(chord, detectKeyPlatform()) : null;\n}\n\nfunction money(n: number | null): string {\n if (n === null) return '$—';\n return n >= 100 ? `$${Math.round(n)}` : `$${n.toFixed(2)}`;\n}\n\n/** The native op a next action maps to, if any. */\nfunction nativeOpFor(action: FleetNextAction): NativeFleetOp | null {\n if (action.kind === 'resident-start') return 'resident-start';\n if (action.kind === 'resident-restart') return 'resident-restart';\n if (action.kind === 'install-custody') return 'custody-install';\n return null;\n}\n\ninterface Progress {\n op: NativeFleetOp;\n event: NativeFleetEvent | null;\n /** The exact command native named (kept across events: the last may omit it). */\n command?: string;\n}\n\nexport interface FleetControlProps {\n actions: SurfaceActions;\n grantFlow: GrantFlow;\n /** THE dark-since instant (fleet/dark-since.ts fleetDarkSince); null unless the fleet is dark. */\n darkSince?: string | null;\n /** The setup checklist is shown under the control (FleetSection): the blocker names no command. */\n setupShownBelow?: boolean;\n}\n\nexport function FleetControl({ actions, grantFlow, darkSince = null, setupShownBelow = false }: FleetControlProps) {\n const read = useQuery(fleetControlQuery, { freshMs: 4_000 });\n const refetch = useRefetch(fleetControlQuery);\n usePollWhileVisible(refetch, FLEET_CONTROL_POLL_MS);\n const [did, setDid] = useState<string[]>([]);\n const [progress, setProgress] = useState<Progress | null>(null);\n const [needs, setNeeds] = useState<FleetNextAction | null>(null);\n const state = read.data?.value ?? null;\n\n function afterAction(result: FleetControlActionResultV1): void {\n setDid(result.did);\n setNeeds(result.needs);\n refetch();\n if (result.needs) void take(result.needs, result.state);\n }\n\n function runNative(op: NativeFleetOp, checkout?: string): void {\n if (!nativeFleetAvailable(op)) return;\n setProgress({ op, event: null });\n const track = (event: NativeFleetEvent) => setProgress((prev) => ({ op, event, ...(event.command ?? prev?.command ? { command: event.command ?? prev?.command } : {}) }));\n void runNativeFleetOp(op, { ...(checkout ? { checkout } : {}), onProgress: track })\n .then((event) => {\n track(event);\n if (event.phase === 'done') setNeeds(null);\n })\n .catch((error: unknown) => setProgress({ op, event: { id: '', op, phase: 'failed', message: error instanceof Error ? error.message : String(error) } }))\n .finally(() => refetch());\n }\n\n /** Do the single next thing Mason was asked to do. */\n async function take(action: FleetNextAction, current: FleetControlStateV1 | null = state): Promise<void> {\n if (action.kind === 'grant' || action.kind === 're-approve') {\n grantFlow.open(action.kind, action.kind === 're-approve' ? 'The fleet needs the grant renewed before it can run.' : 'The fleet needs a standing grant before it can run.', 'autonomous');\n return;\n }\n if (action.kind === 'start') {\n start();\n return;\n }\n if (action.kind === 'resume') {\n resume();\n return;\n }\n const op = nativeOpFor(action);\n if (op && nativeFleetAvailable(op)) {\n if (op === 'custody-install') {\n const checkout = current?.custody.hubCheckout;\n if (!checkout) return;\n runNative(op, checkout);\n } else runNative(op);\n }\n }\n\n function start(): void {\n actions.act(() => postFleetControl({ action: 'start' }), 'Start the fleet', { confirm: START_CONFIRM, onDone: afterAction });\n }\n function pause(): void {\n actions.act(() => postFleetControl({ action: 'pause' }), 'Pause the fleet', { onDone: afterAction });\n }\n function resume(): void {\n actions.act(() => postFleetControl({ action: 'resume' }), 'Resume the fleet', { onDone: afterAction });\n }\n function stop(): void {\n actions.act(() => postFleetControl({ action: 'stop' }), 'Stop the fleet', { confirm: stopConfirm(), onDone: afterAction });\n }\n function restartDaemon(): void {\n runNative('resident-restart');\n }\n function stopDaemon(): void {\n // The desktop app asks in its own native dialog (lowering: no token).\n runNative('resident-stop');\n }\n function editGrant(): void {\n const active = state?.grant.state === 'active' || state?.grant.state === 'paused' || state?.grant.state === 'expired';\n grantFlow.open(active ? 're-approve' : 'grant', 'Choose what the fleet may do, check the difference, then sign it with Touch ID.', null, { edit: true });\n }\n\n const controls = state?.controls;\n useCommandHandler('fleet.start', () => {\n if (controls?.start.enabled ?? true) start();\n });\n useCommandHandler('fleet.pause', () => {\n if (controls?.pause.enabled) pause();\n });\n useCommandHandler('fleet.resume', () => {\n if (controls?.resume.enabled) resume();\n });\n useCommandHandler('fleet.halt', () => stop());\n useCommandHandler('fleet.restart-daemon', () => restartDaemon());\n useCommandHandler('fleet.edit-grant', () => editGrant());\n useCommandHandler('fleet.install-custody', () => {\n const checkout = state?.custody.hubCheckout;\n if (checkout && nativeFleetAvailable('custody-install')) runNative('custody-install', checkout);\n });\n\n if (!state) {\n // The same region while it loads, so the page (and a screen reader) keeps its place.\n return (\n <section className={styles.control} aria-label=\"Fleet control\" data-state=\"unknown\">\n {read.status === 'loading' && !read.data ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the fleet…</p>\n ) : (\n <CardNote tone=\"unknown\">{read.data?.reason ?? 'The fleet controls could not be read.'}</CardNote>\n )}\n </section>\n );\n }\n\n const blocker = state.blocker;\n const nativeCapable = nativeFleetAvailable();\n const busy = actions.busy || (progress !== null && progress.event !== null ? !['done', 'failed', 'cancelled'].includes(progress.event.phase) : progress !== null);\n const g = state.grant;\n const stage = g.stageId ? `${g.stageId}${g.stageIndex !== null && g.stageCount ? ` (${g.stageIndex + 1}/${g.stageCount})` : ''}` : null;\n const daemonLine = state.daemon.service === 'running' || state.daemon.liveness === 'alive'\n ? `Running${state.daemon.pid ? ` · pid ${state.daemon.pid}` : ''}${state.daemon.lastTickAt ? ` · ticked ${formatRelative(state.daemon.lastTickAt)}` : ''}`\n : state.daemon.service === 'absent' ? 'Not installed' : 'Not running';\n\n return (\n <section className={styles.control} aria-label=\"Fleet control\" data-state={state.state}>\n <div className={styles.head}>\n <p className={styles.headline} role=\"status\" aria-live=\"polite\">\n <span className={styles.dot} data-tone={STATE_TONE[state.state]} aria-hidden=\"true\" />\n <span className={styles.stateWord}>{STATE_WORD[state.state]}</span>\n <span>{state.headline.replace(/^[A-Z][a-z]+ · /u, '')}</span>\n </p>\n <div className={styles.buttons} role=\"group\" aria-label=\"Fleet controls\">\n {state.paused ? (\n <ControlButton label=\"Resume\" icon={<IconPlay />} keyId=\"fleet.resume\" availability={state.controls.resume} onClick={resume} busy={actions.busy} readOnly={actions.readOnly} />\n ) : (\n <ControlButton label=\"Start\" icon={<IconPlay />} keyId=\"fleet.start\" availability={state.controls.start} onClick={start} busy={actions.busy} readOnly={actions.readOnly} primary />\n )}\n {state.paused ? null : (\n <ControlButton label=\"Pause\" icon={<IconPause />} keyId=\"fleet.pause\" availability={state.controls.pause} onClick={pause} busy={actions.busy} readOnly={actions.readOnly} />\n )}\n <ControlButton label=\"Stop\" icon={<IconStop />} keyId=\"fleet.halt\" availability={state.controls.stop} onClick={stop} busy={actions.busy} readOnly={actions.readOnly} danger />\n </div>\n </div>\n\n {darkSince && state.state !== 'running' && state.state !== 'idle' ? (\n <p className={styles.muted}>Fleet dark since {darkSinceLabel(darkSince)}</p>\n ) : null}\n\n {blocker ? (\n <BlockerRow\n reason={blocker.reason}\n action={blocker.action}\n nativeCapable={nativeCapable}\n hubCheckout={state.custody.hubCheckout}\n busy={busy}\n onTake={() => void take(blocker.action)}\n setupShownBelow={setupShownBelow}\n />\n ) : needs && needs.kind !== 'grant' && needs.kind !== 're-approve' ? (\n <BlockerRow reason=\"one step left\" action={needs} nativeCapable={nativeCapable} hubCheckout={state.custody.hubCheckout} busy={busy} onTake={() => void take(needs)} />\n ) : null}\n\n {did.length > 0 ? (\n <p className={styles.did} role=\"status\">\n {did.join(' ')}\n <button type=\"button\" className={styles.link} onClick={() => setDid([])}>\n Dismiss\n </button>\n </p>\n ) : null}\n\n {progress ? <NativeProgress progress={progress} onDismiss={() => setProgress(null)} /> : null}\n\n <dl className={styles.facts}>\n <div className={styles.fact}>\n <dt><MicroLabel>Agents</MicroLabel></dt>\n <dd className={styles.factValue}>{state.agents.working === null ? 'unknown' : state.agents.working === 0 ? 'none working' : `${state.agents.working} working`}</dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Grant</MicroLabel></dt>\n <dd className={styles.factValue}>\n {g.state === 'active'\n ? `#${g.seq ?? '?'} · ${g.repos.length} repo${g.repos.length === 1 ? '' : 's'} · ${g.daysLeft ?? '?'} d left${stage ? ` · ${stage}` : ''}`\n : g.state === 'none' ? 'none signed' : g.state}\n <span className={styles.factSub}>{g.engines.length ? g.engines.join(', ') : 'no engines'} · switch {g.effectiveSwitch}</span>\n <button type=\"button\" className={styles.link} onClick={editGrant} disabled={actions.readOnly}>\n <IconLock width={12} height={12} aria-hidden=\"true\" /> Edit scope\n </button>\n </dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Spend today</MicroLabel></dt>\n <dd className={styles.factValue}>\n <Meter\n value={state.spend.todayUsd}\n max={state.spend.capUsd}\n variant=\"line\"\n aria-label=\"Spend today against the daily cap\"\n valueText={`${money(state.spend.todayUsd)} of ${money(state.spend.capUsd)}`}\n />\n <span className={styles.factSub}>{money(state.spend.todayUsd)} of {money(state.spend.capUsd)} cap{state.spend.exhausted ? ' · spent' : ''}</span>\n </dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Daemon</MicroLabel></dt>\n <dd className={styles.factValue}>\n {daemonLine}\n {state.daemon.plist === 'drifted' ? <span className={styles.factSub}>plist is older than your config</span> : null}\n {nativeCapable ? (\n <span className={styles.inlineButtons}>\n {state.daemon.service === 'running' || state.daemon.liveness === 'alive' ? (\n <>\n <Button size=\"sm\" variant=\"ghost\" icon={<IconRefresh />} onClick={restartDaemon} disabled={busy}>\n Restart\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={stopDaemon} disabled={busy}>\n Stop daemon\n </Button>\n </>\n ) : null}\n </span>\n ) : null}\n </dd>\n </div>\n <div className={styles.fact}>\n <dt><MicroLabel>Custody</MicroLabel></dt>\n <dd className={styles.factValue}>\n {state.custody.installed === true\n ? `Installed${state.custody.keyInitialized === true ? ' · key ready' : state.custody.keyInitialized === false ? ' · no key yet' : ''}`\n : state.custody.installed === false ? 'Not installed' : 'unknown'}\n <span className={styles.factSub}>Signs grants with Touch ID; holds the GitHub App key</span>\n {nativeCapable && state.custody.hubCheckout ? (\n <span className={styles.inlineButtons}>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => runNative('custody-install', state.custody.hubCheckout!)} disabled={busy}>\n {state.custody.installed === true ? 'Reinstall / upgrade' : 'Install'}\n </Button>\n </span>\n ) : null}\n </dd>\n </div>\n </dl>\n </section>\n );\n}\n\nfunction ControlButton({\n label,\n icon,\n keyId,\n availability,\n onClick,\n busy,\n readOnly,\n primary,\n danger,\n}: {\n label: string;\n icon: ReactNode;\n keyId: string;\n availability: { enabled: boolean; hint: string };\n onClick: () => void;\n busy: boolean;\n readOnly: boolean;\n primary?: boolean;\n danger?: boolean;\n}) {\n const key = keyHint(keyId);\n const disabled = !availability.enabled || readOnly;\n return (\n <Button\n size=\"sm\"\n variant={danger ? 'danger' : primary && availability.enabled ? 'primary' : 'subtle'}\n icon={icon}\n onClick={onClick}\n disabled={disabled}\n busy={busy && !disabled}\n title={readOnly ? 'Read-only session' : `${availability.hint}${key ? ` (${key})` : ''}`}\n aria-keyshortcuts={key ?? undefined}\n >\n {label}\n {key ? <kbd className={styles.kbd}>{key}</kbd> : null}\n </Button>\n );\n}\n\nfunction BlockerRow({\n reason,\n action,\n nativeCapable,\n hubCheckout,\n busy,\n onTake,\n setupShownBelow = false,\n}: {\n reason: string;\n action: FleetNextAction;\n nativeCapable: boolean;\n hubCheckout: string | null;\n busy: boolean;\n onTake: () => void;\n setupShownBelow?: boolean;\n}) {\n const op = nativeOpFor(action);\n const needsNative = op !== null;\n const canNative = needsNative && nativeCapable && (op !== 'custody-install' || hubCheckout !== null);\n const clickable = action.kind !== 'wait' && action.kind !== 'setup' && (!needsNative || canNative);\n const command = action.kind === 'install-custody' && hubCheckout ? `cd ${hubCheckout} && ${action.command}` : action.command;\n return (\n <div className={styles.blocker} role=\"alert\">\n <p className={styles.blockerReason}>\n <strong>{reason.charAt(0).toUpperCase()}{reason.slice(1)}.</strong>\n </p>\n {clickable ? (\n <Button size=\"sm\" variant=\"primary\" onClick={onTake} busy={busy}>\n {action.label}\n </Button>\n ) : null}\n {action.kind === 'setup' && setupShownBelow ? (\n <span className={styles.muted}>The setup checklist below names each remaining step.</span>\n ) : !clickable && command ? (\n <span className={styles.blockerCommand}>\n <span className={styles.muted}>\n {needsNative && !nativeCapable ? 'Open the Ashlr desktop app to do this with a click, or run:' : action.kind === 'setup' ? 'Finish the remaining setup steps (GitHub App, trust root, Claude token):' : 'Run:'}\n </span>\n <CopyCommand command={command} />\n </span>\n ) : null}\n {action.kind === 'install-custody' && nativeCapable && !hubCheckout ? (\n <span className={styles.muted}>Enroll your ashlr-hub checkout first — the helper is built from its tools/custody sources.</span>\n ) : null}\n </div>\n );\n}\n\nconst PHASE_WORD: Record<NativeFleetEvent['phase'], string> = {\n confirming: 'Waiting for you in the dialog',\n running: 'Running',\n done: 'Done',\n failed: 'Did not finish',\n cancelled: 'Cancelled',\n};\n\nfunction NativeProgress({ progress, onDismiss }: { progress: Progress; onDismiss: () => void }) {\n const event = progress.event;\n const terminal = event !== null && (event.phase === 'done' || event.phase === 'failed' || event.phase === 'cancelled');\n return (\n <div className={styles.progress} data-phase={event?.phase ?? 'confirming'} role=\"status\" aria-live=\"polite\">\n <p className={styles.progressLine}>\n <strong>{event ? PHASE_WORD[event.phase] : 'Asking the desktop app…'}</strong>\n {event ? ` — ${event.message}` : ''}\n {terminal ? (\n <button type=\"button\" className={styles.link} onClick={onDismiss}>\n Dismiss\n </button>\n ) : null}\n </p>\n {progress.command ? <code className={styles.command}>{progress.command}</code> : null}\n {event?.output ? (\n <details className={styles.output} open={event.phase === 'failed'}>\n <summary>Output{event.exitCode !== undefined ? ` (exit ${event.exitCode})` : ''}</summary>\n <pre>{event.output}</pre>\n </details>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/fleet/SteerPanel.tsx — edit and interject (3.15, the Fleet\n * control surface).\n *\n * Working now per run: Log (live tail), Interject, Stop\n * Queue per task: priority 1–5, retarget to a granted repo, cancel\n * Goals per goal: the enrolled repo it targets\n * Tell the Leader one line → a standing directive\n *\n * Interject is honest about the engines: fleet runs are headless CLI agents\n * with no live input channel, so a note always STOPS the run and puts it back\n * in the queue with the note appended to its brief (the server answers\n * `mode: 'stop-and-requeue'`). A run with no queue task behind it (a scanned\n * backlog item) gets a follow-up task carrying the note instead.\n *\n * Every write goes through the surface's guarded action (token first) and\n * the lists are re-read from the server afterwards.\n */\nimport { useEffect, useId, useState } from 'react';\nimport type { FleetLiveRun, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { FleetControlQueueV1, FleetRunLogV1 } from '../../../../core/fleet/fleet-control-types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { Input } from '../../../components/primitives/Input.js';\nimport { Select } from '../../../components/primitives/Select.js';\nimport { IconStop } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { formatRelative, repoDisplayName } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { fetchRunLog, fleetQueueQuery, postFleetControl, postLeaderDirective } from './fleet-control-queries.js';\nimport styles from './fleet-control.module.css';\n\nconst LOG_POLL_MS = 3_000;\nconst QUEUE_POLL_MS = 15_000;\n\n/**\n * Agents producing right now: a dispatch that started and has not ended. Later\n * phases (verifying, judging, landing, watching) belong to a filed proposal,\n * not a live agent — the gates handle those, and Stop halts them.\n */\nexport function workingRuns(live: FleetLiveSnapshotV1 | null): FleetLiveRun[] {\n if (!live) return [];\n return live.runs.filter((run) =>\n run.phase === 'producing'\n && run.endedAt === null\n && run.outcome === null\n && !run.id.startsWith('task:')\n && !run.id.startsWith('held:'));\n}\n\nexport interface SteerPanelProps {\n live: FleetLiveSnapshotV1 | null;\n actions: SurfaceActions;\n now: number;\n}\n\nexport function SteerPanel({ live, actions, now }: SteerPanelProps) {\n const queue = useQuery(fleetQueueQuery, { freshMs: 10_000 });\n const refetchQueue = useRefetch(fleetQueueQuery);\n usePollWhileVisible(refetchQueue, QUEUE_POLL_MS);\n const q = queue.data?.value ?? null;\n const runs = workingRuns(live);\n\n return (\n <Card title=\"Steer the fleet\" caption=\"Stop or redirect a run, reorder the queue, retarget goals, tell the Leader\">\n <MicroLabel>Working now ({runs.length})</MicroLabel>\n {runs.length === 0 ? (\n <p className={styles.muted}>No run is in flight.</p>\n ) : (\n <ul className={styles.list}>\n {runs.map((run) => (\n <RunRow key={run.id} run={run} actions={actions} now={now} onChanged={refetchQueue} />\n ))}\n </ul>\n )}\n\n <p className={styles.sectionLabel}><MicroLabel>Queue ({q?.tasks.length ?? 0})</MicroLabel></p>\n {q === null ? (\n <CardNote tone=\"unknown\">{queue.data?.reason ?? 'Reading the queue…'}</CardNote>\n ) : q.tasks.length === 0 ? (\n <p className={styles.muted}>Nothing queued. The Leader and the backlog scan add work on every tick.</p>\n ) : (\n <ul className={styles.list}>\n {q.tasks.map((task) => (\n <TaskRow key={task.id} task={task} repos={q.targets.repos} actions={actions} onChanged={refetchQueue} />\n ))}\n </ul>\n )}\n\n {q && q.goals.length > 0 ? (\n <>\n <p className={styles.sectionLabel}><MicroLabel>Goals ({q.goals.length})</MicroLabel></p>\n <ul className={styles.list}>\n {q.goals.map((goal) => (\n <GoalRow key={goal.id} goal={goal} paths={q.targets.paths} actions={actions} onChanged={refetchQueue} />\n ))}\n </ul>\n </>\n ) : null}\n\n <p className={styles.sectionLabel}><MicroLabel>Tell the Leader</MicroLabel></p>\n <DirectiveForm actions={actions} />\n </Card>\n );\n}\n\nfunction RunRow({ run, actions, now, onChanged }: { run: FleetLiveRun; actions: SurfaceActions; now: number; onChanged: () => void }) {\n const [open, setOpen] = useState<'log' | 'interject' | null>(null);\n const [note, setNote] = useState('');\n const noteId = useId();\n // A follow-up needs a GitHub repo to queue on when there is no task behind the run.\n const canInterject = Boolean(run.taskId) || /^[A-Za-z0-9][A-Za-z0-9-]*\\/[A-Za-z0-9._-]+$/u.test(run.repo);\n const started = run.startedAt ? Date.parse(run.startedAt) : NaN;\n const minutes = Number.isFinite(started) ? Math.max(0, Math.round((now - started) / 60_000)) : null;\n\n function stopRun(): void {\n actions.act(\n () => postFleetControl({ action: 'stop-run', runId: run.id, ...(run.taskId ? { taskId: run.taskId } : {}) }),\n 'Stop this run',\n {\n confirm: { title: 'Stop this run?', body: `\"${run.title}\" on ${repoDisplayName(run.repo)} halts within a few seconds. Nothing it has not filed is kept; its task goes back to the queue.`, confirmLabel: 'Stop run', destructive: true },\n onDone: onChanged,\n },\n );\n }\n\n function interject(): void {\n const text = note.trim();\n if (!text) return;\n actions.act(\n () => postFleetControl(run.taskId\n ? { action: 'interject', runId: run.id, taskId: run.taskId, note: text }\n : { action: 'interject', runId: run.id, repo: run.repo, title: run.title, note: text }),\n 'Interject on this run',\n {\n onDone: () => {\n setNote('');\n setOpen(null);\n onChanged();\n },\n },\n );\n }\n\n return (\n <li className={styles.row}>\n <div className={styles.rowHead}>\n <p className={styles.rowTitle}>\n {run.title}\n <span className={styles.rowMeta}>\n {' '}· {repoDisplayName(run.repo)} · {run.engine ?? run.lane ?? 'engine ?'} · {run.phase}{minutes !== null ? ` · ${minutes} min` : ''}\n </span>\n </p>\n <span className={styles.rowControls}>\n <Button size=\"sm\" variant=\"ghost\" aria-expanded={open === 'log'} onClick={() => setOpen(open === 'log' ? null : 'log')}>\n Log\n </Button>\n <Button size=\"sm\" variant=\"ghost\" aria-expanded={open === 'interject'} onClick={() => setOpen(open === 'interject' ? null : 'interject')} disabled={actions.readOnly || !canInterject} title={canInterject ? undefined : 'This run has no queue task or GitHub repo to requeue on — use Stop.'}>\n Interject\n </Button>\n <Button size=\"sm\" variant=\"danger\" icon={<IconStop />} onClick={stopRun} disabled={actions.readOnly}>\n Stop\n </Button>\n </span>\n </div>\n {open === 'log' ? <RunLog runId={run.id} /> : null}\n {open === 'interject' ? (\n <div className={styles.interject}>\n <label className={styles.muted} htmlFor={noteId}>\n Fleet engines run headless, so this stops the run and queues it again with your note in its brief.\n </label>\n <textarea\n id={noteId}\n className={styles.textarea}\n value={note}\n maxLength={1000}\n onChange={(e) => setNote(e.target.value)}\n placeholder=\"e.g. Use the existing fixture helper; do not touch the CLI.\"\n />\n <span className={styles.rowControls}>\n <Button size=\"sm\" variant=\"primary\" onClick={interject} disabled={!note.trim() || actions.readOnly} busy={actions.busy}>\n Stop and requeue with note\n </Button>\n </span>\n </div>\n ) : null}\n </li>\n );\n}\n\nfunction RunLog({ runId }: { runId: string }) {\n const [log, setLog] = useState<FleetRunLogV1 | null>(null);\n const [error, setError] = useState<string | null>(null);\n useEffect(() => {\n let cancelled = false;\n const controller = new AbortController();\n const load = () => {\n fetchRunLog(runId, controller.signal).then(\n (next) => { if (!cancelled) { setLog(next); setError(null); } },\n (err: unknown) => { if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) setError('The run log could not be read.'); },\n );\n };\n load();\n const timer = setInterval(load, LOG_POLL_MS);\n return () => {\n cancelled = true;\n controller.abort();\n clearInterval(timer);\n };\n }, [runId]);\n if (error) return <CardNote tone=\"unknown\">{error}</CardNote>;\n if (!log) return <p className={styles.muted} aria-busy=\"true\">Reading the log…</p>;\n return (\n <div>\n {log.stopRequestedAt ? <p className={styles.muted}>Stop requested {formatRelative(log.stopRequestedAt)}.</p> : null}\n {log.available ? (\n <pre className={styles.log} aria-label=\"Run log\" aria-live=\"off\">\n {log.truncated ? '…\\n' : ''}\n {log.lines.map((line) => `${line.kind === 'model-delta' ? '' : `[${line.kind}] `}${line.text}`).join('\\n') || '(no output yet)'}\n </pre>\n ) : (\n <CardNote tone=\"unknown\">{log.reason ?? 'No log for this run.'}</CardNote>\n )}\n </div>\n );\n}\n\ntype QueueTask = FleetControlQueueV1['tasks'][number];\n\nfunction TaskRow({ task, repos, actions, onChanged }: { task: QueueTask; repos: string[]; actions: SurfaceActions; onChanged: () => void }) {\n const choices = repos.some((r) => r.toLowerCase() === task.repo.toLowerCase()) ? repos : [task.repo, ...repos];\n return (\n <li className={styles.row}>\n <div className={styles.rowHead}>\n <p className={styles.rowTitle}>\n {task.title}\n <span className={styles.rowMeta}> · {task.status} · {task.source} · updated {formatRelative(task.updatedAt)}</span>\n </p>\n <span className={styles.rowControls}>\n <Select\n size=\"sm\"\n aria-label={`Priority of ${task.title}`}\n value={String(task.value)}\n disabled={actions.readOnly}\n onChange={(e) => {\n const value = Number(e.target.value);\n actions.act(() => postFleetControl({ action: 'task-edit', taskId: task.id, value }), 'Reprioritize the task', { onDone: onChanged });\n }}\n >\n {[5, 4, 3, 2, 1].map((v) => (\n <option key={v} value={v}>\n {v === 5 ? 'Priority 5 (highest)' : v === 1 ? 'Priority 1 (lowest)' : `Priority ${v}`}\n </option>\n ))}\n </Select>\n <Select\n size=\"sm\"\n aria-label={`Repo for ${task.title}`}\n value={task.repo}\n disabled={actions.readOnly || task.status === 'dispatched'}\n onChange={(e) => {\n const repo = e.target.value;\n actions.act(() => postFleetControl({ action: 'task-edit', taskId: task.id, repo }), 'Retarget the task', { onDone: onChanged });\n }}\n >\n {choices.map((repo) => (\n <option key={repo} value={repo}>\n {repo}\n </option>\n ))}\n </Select>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={actions.readOnly || task.status === 'dispatched'}\n onClick={() => actions.act(() => postFleetControl({ action: 'task-cancel', taskId: task.id }), 'Cancel the task', {\n confirm: { title: 'Cancel this task?', body: `\"${task.title}\" leaves the queue.`, confirmLabel: 'Cancel task', destructive: true },\n onDone: onChanged,\n })}\n >\n Cancel\n </Button>\n </span>\n </div>\n </li>\n );\n}\n\ntype QueueGoal = FleetControlQueueV1['goals'][number];\n\nfunction GoalRow({ goal, paths, actions, onChanged }: { goal: QueueGoal; paths: string[]; actions: SurfaceActions; onChanged: () => void }) {\n const choices = goal.project && !paths.includes(goal.project) ? [goal.project, ...paths] : paths;\n return (\n <li className={styles.row}>\n <div className={styles.rowHead}>\n <p className={styles.rowTitle}>\n {goal.objective}\n <span className={styles.rowMeta}> · {goal.status}{goal.missionBound ? ' · bound to a signed mission' : ''}</span>\n </p>\n <span className={styles.rowControls}>\n <Select\n size=\"sm\"\n aria-label={`Target repo for ${goal.objective}`}\n value={goal.project ?? ''}\n disabled={actions.readOnly || goal.missionBound}\n onChange={(e) => {\n const project = e.target.value;\n if (!project) return;\n actions.act(() => postFleetControl({ action: 'goal-retarget', goalId: goal.id, project }), 'Retarget the goal', { onDone: onChanged });\n }}\n >\n {goal.project === null ? <option value=\"\">No repo (planning only)</option> : null}\n {choices.map((path) => (\n <option key={path} value={path}>\n {path}\n </option>\n ))}\n </Select>\n </span>\n </div>\n </li>\n );\n}\n\nfunction DirectiveForm({ actions }: { actions: SurfaceActions }) {\n const [text, setText] = useState('');\n const [sent, setSent] = useState(false);\n function submit(): void {\n const value = text.trim();\n if (!value) return;\n actions.act(() => postLeaderDirective(value), 'Add a Leader directive', {\n onDone: () => {\n setText('');\n setSent(true);\n },\n });\n }\n return (\n <form\n className={styles.directive}\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n <Input\n size=\"sm\"\n label=\"Directive\"\n value={text}\n maxLength={300}\n disabled={actions.readOnly}\n onChange={(e) => {\n setText(e.target.value);\n setSent(false);\n }}\n placeholder=\"e.g. Prioritise test coverage in ashlrcode this week\"\n hint={sent ? 'Added. The Leader reads it on its next run; it never widens the grant.' : 'A standing instruction for the Leader. It never widens the grant.'}\n />\n <Button type=\"submit\" size=\"sm\" variant=\"subtle\" disabled={!text.trim() || actions.readOnly}>\n Add directive\n </Button>\n </form>\n );\n}\n","/**\n * routes/verse/cloud/CloudLaneChip.tsx — \"Cloud · N running\" at the end of\n * Fleet's lanes row (3.11 unit C3; mounted by fleet/FleetCards.tsx\n * LanesStrip). Styled by the lanes row's own classes, which it passes in,\n * so it reads as one more lane.\n *\n * N counts tasks queued, launching or running — sessions Verse started that\n * have not delivered a PR yet. A server without the cloud lane renders no\n * chip at all: the lanes row is not the place to say \"not in this build\".\n */\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { inFlightCount } from './cloud-model.js';\nimport { CLOUD_POLL_MS, cloudQuery } from './cloud-queries.js';\nimport styles from './cloud.module.css';\n\nexport interface CloudLaneChipClasses {\n lane?: string;\n name?: string;\n sep?: string;\n slots?: string;\n}\n\nexport function CloudLaneChip({ classes = {} }: { classes?: CloudLaneChipClasses }) {\n const read = useQuery(cloudQuery, { freshMs: 15_000 });\n const refetch = useRefetch(cloudQuery);\n usePollWhileVisible(refetch, CLOUD_POLL_MS);\n const overview = read.data?.value ?? null;\n if (!overview) return null;\n const running = inFlightCount(overview.tasks);\n const title = `Claude Code cloud sessions Verse launched that have not delivered a PR yet. ${overview.budget.sessionsToday} of ${overview.budget.budget.maxSessionsPerDay} sessions used today.`;\n return (\n <li className={`${classes.lane ?? ''} ${styles.laneChip}`} data-active={running > 0 || undefined} title={title} aria-label={`Cloud: ${running} running`}>\n <span className={classes.name}>Cloud</span>\n <span className={classes.sep} aria-hidden=\"true\">\n {' · '}\n </span>\n <span className={classes.slots}>{running} running</span>\n </li>\n );\n}\n","/**\n * routes/verse/fleet/FleetCards.tsx — the Fleet surface's cards (SPEC-310B §6,\n * SPEC-310C §5; unit C7): lanes, the live swimlane, the gate funnel with its\n * refusal reasons, \"why this seat\", the parked Gantt and Overnight.\n *\n * Every card takes an OptionalRead and draws the designed state for each way\n * a source can be missing (not landed, unrecognised, dark) — never empty axes.\n */\nimport type { FleetLaneState, FleetLiveSnapshotV1 } from '../../../../core/fleet/fleet-types.js';\nimport type { SeatDecision } from '../../../../core/routing/types.js';\nimport type { BudgetView } from '../../../../core/routing/policy.js';\nimport { BarStack } from '../../../components/charts/BarStack.js';\nimport type { ChartStatus } from '../../../components/charts/ChartFrame.js';\nimport { Funnel } from '../../../components/charts/Funnel.js';\nimport { Swimlane } from '../../../components/charts/Swimlane.js';\nimport { EngineMarker } from '../../../components/primitives/Tag.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport type { OptionalFleetRead } from '../autonomy/fleet-contract.js';\nimport type { OvernightStatus } from '../autonomy/overnight-contract.js';\nimport { describeStopRule } from '../autonomy/overnight-model.js';\nimport { CloudLaneChip } from '../cloud/CloudLaneChip.js';\nimport { Card, CardNote, MicroLabel } from '../command/Surface.js';\nimport type { OptionalRead } from '../command/surface-data.js';\nimport { fleetDarkStatus } from './dark-since.js';\nimport { LANE_ENGINE, LANE_LABEL, funnelStages, laneChipText, laneNotes, laneReason, laneRows, latestDecision, parkedGantt, refusalStack, runTone } from './live-model.js';\nimport { asSentence, decisionSummary, describeEligibleAgain, eligibleAgain, heldBackText } from './why-seat-model.js';\nimport styles from './fleet.module.css';\n\nconst HOUR = 3_600_000;\n\n/**\n * The shared \"is there a fleet to draw at all\" decision for every chart card.\n * Dark reads THE dark-since instant (`fleetDarkStatus`), as the viewer's local\n * day — the same day Command's verdict line names — and no day at all when\n * the server does not know one.\n */\nexport function fleetStatus(read: OptionalRead<FleetLiveSnapshotV1> | undefined, empty: string, hasData: boolean): ChartStatus {\n if (!read) return { kind: 'loading' };\n const live = read.value;\n if (!live) return { kind: 'unknown', reason: read.reason ?? 'the live fleet view did not answer.' };\n if (live.state === 'dark' && !hasData) return fleetDarkStatus(live);\n return hasData ? { kind: 'ready' } : { kind: 'empty', message: empty };\n}\n\n// ---------------------------------------------------------------------------\n// Lanes strip + live swimlane\n// ---------------------------------------------------------------------------\n\n/** \"Local · off\" — the chip is the lane and its slots; its why is one line below the strip (and its title). */\nfunction LaneChip({ lane }: { lane: FleetLaneState }) {\n const text = laneChipText(lane);\n return (\n <li className={styles.lane} data-off={lane.slots === 0 || undefined} title={laneReason(lane) ?? undefined}>\n <EngineMarker engine={LANE_ENGINE[lane.lane]} />\n <span className={styles.laneName}>{text.name}</span>\n <span className={styles.laneSep} aria-hidden=\"true\">\n {' · '}\n </span>\n <span className={styles.laneSlots}>{text.slots}</span>\n </li>\n );\n}\n\nexport function LanesStrip({ live }: { live: FleetLiveSnapshotV1 | null }) {\n if (!live || live.lanes.length === 0) return null;\n const notes = laneNotes(live.lanes);\n return (\n <div className={styles.laneStrip}>\n <ul className={styles.lanes} aria-label=\"Lanes: busy of slots\">\n {live.lanes.map((l) => (\n <LaneChip key={l.lane} lane={l} />\n ))}\n <CloudLaneChip classes={{ lane: styles.lane, name: styles.laneName, sep: styles.laneSep, slots: styles.laneSlots }} />\n </ul>\n {notes.length > 0 ? (\n <ul className={styles.laneNotes} aria-label=\"Why lanes are limited\">\n {notes.map((n) => (\n <li key={n.lanes.join(',')}>\n {n.all ? null : <span className={styles.laneNoteLanes}>{n.lanes.map((l) => LANE_LABEL[l]).join(', ')}: </span>}\n {asSentence(n.reason)}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nexport function LiveSwimlane({ read, now, hours }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; now: number; hours: number }) {\n const live = read?.value ?? null;\n const from = now - hours * HOUR;\n const lanes = live ? laneRows(live.runs, from, now, { includeParked: false }) : [];\n return (\n <Swimlane\n title=\"Live fleet\"\n description={`Lanes × slots, last ${hours} h · bars coloured by phase or outcome · outlines are queued`}\n status={fleetStatus(read, `Nothing ran in the last ${hours} hours.`, lanes.length > 0)}\n lanes={lanes}\n from={from}\n to={now}\n now={now}\n toneOf={runTone}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Gate funnel + refusal reasons\n// ---------------------------------------------------------------------------\n\nexport function GateFunnelCards({ read }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined }) {\n const live = read?.value ?? null;\n const funnel = live?.funnel ?? null;\n const stages = funnelStages(funnel);\n const refusals = refusalStack(funnel);\n const window = funnel ? `${new Date(funnel.from).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${new Date(funnel.to).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}` : undefined;\n return (\n <div className={styles.stack}>\n <Funnel\n title=\"Gate funnel\"\n description={window ? `Proposals through G0–G7, ${window}` : 'Proposals through the merge gates G0–G7'}\n status={fleetStatus(read, 'No proposal reached the gates in this window.', stages.length > 0)}\n stages={stages}\n />\n <BarStack\n title=\"Refusals by gate\"\n description={refusals.total ? `${refusals.total} refusals · top reasons keep their colour` : 'Why proposals stopped'}\n status={fleetStatus(read, 'Nothing was refused in this window.', refusals.total > 0)}\n categories={refusals.categories}\n segments={refusals.segments}\n values={refusals.values}\n height={180}\n />\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Why this seat\n// ---------------------------------------------------------------------------\n\nfunction seatLabel(view: BudgetView | null, seatId: string): { label: string; engine: 'claude' | 'codex' | 'grok' | 'local' | null } {\n const info = view?.seatInfo.find((s) => s.seatId === seatId);\n return { label: info?.label ?? seatId, engine: info?.engine ?? null };\n}\n\nexport function DecisionView({ decision, view, now }: { decision: SeatDecision; view: BudgetView | null; now?: number }) {\n const chosen = decision.seatId ? seatLabel(view, decision.seatId) : null;\n return (\n <div className={styles.decision}>\n <p className={styles.decisionLead}>\n {chosen ? (\n <>\n {chosen.engine ? <EngineMarker engine={chosen.engine} /> : null}\n <strong>{chosen.label}</strong>\n </>\n ) : (\n <strong>No seat</strong>\n )}\n <span className={styles.mode}>{decision.mode}</span>\n </p>\n <p className={styles.decisionWhy}>{decisionSummary(decision)}</p>\n {decision.candidates.length > 1 ? (\n <div>\n <MicroLabel>Then</MicroLabel>\n <ol className={styles.candidates}>\n {decision.candidates.slice(decision.seatId ? 1 : 0).map((id) => (\n <li key={id}>{seatLabel(view, id).label}</li>\n ))}\n </ol>\n </div>\n ) : null}\n {decision.exclusions.length ? (\n <div>\n <MicroLabel>Held back</MicroLabel>\n <ul className={styles.exclusions} aria-label=\"Held back seats\">\n {decision.exclusions.map((x) => (\n <li key={x.seatId}>\n <span className={styles.excluded}>{seatLabel(view, x.seatId).label}</span>\n <span className={styles.excludedWhy}>{heldBackText(x)}</span>\n <span className={styles.excludedWhen}>eligible again: {describeEligibleAgain(eligibleAgain(x), now)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function WhySeatCard({ read, preview, view, now }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; preview: SeatDecision | null; view: BudgetView | null; now?: number }) {\n const latest = latestDecision(read?.value ?? null);\n return (\n <Card\n title=\"Why this seat\"\n caption={latest ? `Latest dispatch: ${latest.run.title} (${formatRelative(latest.run.phaseStartedAt ?? latest.run.startedAt)})` : preview ? 'The next medium autonomous task would go to…' : undefined}\n >\n {latest ? (\n <DecisionView decision={latest.decision} view={view} now={now} />\n ) : preview ? (\n <DecisionView decision={preview} view={view} now={now} />\n ) : (\n <CardNote tone=\"unknown\">No routing decision yet. The router preview didn't answer.</CardNote>\n )}\n </Card>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Parked Gantt\n// ---------------------------------------------------------------------------\n\nexport function ParkedCard({ read, now }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; now: number }) {\n const live = read?.value ?? null;\n const gantt = live ? parkedGantt(live.runs, now) : { lanes: [], from: now - HOUR, to: now + 2 * HOUR, unknownRelease: 0 };\n return (\n <Swimlane\n title=\"Parked\"\n description=\"Waiting for a seat to free up — each bar ends when it should\"\n caveat={gantt.unknownRelease ? `${gantt.unknownRelease} item${gantt.unknownRelease === 1 ? ' has' : 's have'} no known release time; ${gantt.unknownRelease === 1 ? 'it runs' : 'they run'} to the right edge.` : undefined}\n status={fleetStatus(read, 'Nothing is parked.', gantt.lanes.length > 0)}\n lanes={gantt.lanes}\n from={gantt.from}\n to={gantt.to}\n now={now}\n toneOf={runTone}\n formatTick={(ms) => new Date(ms).toLocaleString('en-US', { weekday: 'short', hour: 'numeric' })}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Overnight\n// ---------------------------------------------------------------------------\n\nexport function OvernightCard({ read, onOpenAdvanced, dark = false }: { read: OptionalFleetRead<OvernightStatus> | undefined; onOpenAdvanced: () => void; /** The fleet is dark: it has no \"normal schedule\" to run on. */ dark?: boolean }) {\n const status = read?.value ?? null;\n const run = status?.run ?? null;\n return (\n <Card\n title=\"Overnight\"\n caption={status ? (status.armed ? 'Armed' : 'Not armed') : undefined}\n actions={\n <button type=\"button\" className={styles.link} onClick={onOpenAdvanced}>\n Arm or stop in Advanced\n </button>\n }\n >\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading the overnight lane…</p>\n ) : !status ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The overnight lane did not answer.'}</CardNote>\n ) : !status.armed && !run ? (\n <CardNote>{dark ? 'Nothing armed.' : 'Nothing armed. The fleet runs on its normal schedule.'}</CardNote>\n ) : (\n <div className={styles.overnight}>\n {run?.stopRule ? <p className={styles.overnightLead}>{describeStopRule(run.stopRule)}</p> : null}\n <dl className={styles.facts}>\n <div>\n <dt>Started</dt>\n <dd>{run?.startedAt ? formatRelative(run.startedAt) : '—'}</dd>\n </div>\n <div>\n <dt>Iterations</dt>\n <dd>{run?.iterationsDone ?? '—'}</dd>\n </div>\n <div>\n <dt>Merged</dt>\n <dd>{run ? run.merged.length : '—'}</dd>\n </div>\n <div>\n <dt>Discarded</dt>\n <dd>{run ? run.discarded.length : '—'}</dd>\n </div>\n </dl>\n {run?.activity ? <p className={styles.muted}>Now: {run.activity}</p> : null}\n {run && run.discarded.length ? (\n <ul className={styles.discarded} aria-label=\"Discarded work\">\n {run.discarded.slice(0, 3).map((d) => (\n <li key={d.id}>\n <span className={styles.discardTitle}>{d.title}</span>\n <span className={styles.discardWhy}>{d.reason}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n )}\n </Card>\n );\n}\n","/**\n * routes/verse/fleet/RepoTable.tsx — one row per enrolled repo (SPEC-310C §5\n * Fleet \"Repo table: stage, last merge, green% sparkline, holds,\n * pause/resume\"; unit C7).\n *\n * Pause sets an owner-hold as Mason; Resume clears every active hold (or the\n * one a Needs-you item names). Both confirm first — a pause stops new work\n * in a repo, a resume can lift a quarantine early — then take the token.\n * At 375 px the table becomes one card per repo (a 7-column table does not\n * fit a phone, and a horizontal scroll hides the action).\n */\nimport type { FleetLiveSnapshotV1, FleetMirrorSummary, FleetRepoRow, RepoHold } from '../../../../core/fleet/fleet-types.js';\nimport { Sparkline } from '../../../components/charts/Sparkline.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { formatRelative } from '../autonomy/format.js';\nimport type { SurfaceActions } from '../command/actions.js';\nimport { anchorId } from '../command/nav.js';\nimport { Card, CardNote } from '../command/Surface.js';\nimport { postFleetLive, type OptionalRead } from '../command/surface-data.js';\nimport styles from './fleet.module.css';\n\nconst HOLD_WORD: Record<RepoHold['kind'], string> = {\n quarantine: 'Quarantined',\n 'owner-hold': 'On hold (you)',\n 'leader-pause': 'Paused by Leader',\n cooldown: 'Cooling down',\n};\n\nexport function holdText(hold: RepoHold, now: number): string {\n const until = hold.until ? Date.parse(hold.until) : NaN;\n const left = Number.isFinite(until) ? Math.max(0, until - now) : null;\n const tail = left === null ? 'until resumed' : left < 3_600_000 ? `${Math.ceil(left / 60_000)}m left` : `${Math.round(left / 3_600_000)}h left`;\n return `${HOLD_WORD[hold.kind]} · ${tail}`;\n}\n\nfunction shortRepo(repo: string): string {\n return repo.includes('/') ? repo.split('/')[1]! : repo;\n}\n\nfunction StageBadge({ row }: { row: FleetRepoRow }) {\n if (row.stage === null) return <span className={styles.stage} data-stage=\"none\">Not in grant</span>;\n return (\n <span className={styles.stage} data-stage={row.stage}>\n {row.stage === 'merge' ? 'Merge' : 'Propose'}\n {row.enforcement === 'local' ? <span className={styles.stageNote}> · local checks</span> : null}\n </span>\n );\n}\n\nfunction RepoAction({ row, actions }: { row: FleetRepoRow; actions: SurfaceActions }) {\n const disabled = actions.busy || actions.readOnly;\n if (row.holds.length) {\n return (\n <Button\n size=\"sm\"\n variant=\"subtle\"\n disabled={disabled}\n aria-label={`Resume ${row.repo}`}\n onClick={() =>\n actions.act(() => postFleetLive({ action: 'resume-repo', repo: row.repo }), `Resume ${row.repo}`, {\n confirm: {\n title: `Resume ${shortRepo(row.repo)}?`,\n body: `Clears ${row.holds.map((h) => HOLD_WORD[h.kind].toLowerCase()).join(' and ')}. New fleet work can start there on the next tick.`,\n confirmLabel: 'Resume',\n },\n })\n }\n >\n Resume\n </Button>\n );\n }\n if (row.stage === null) return null;\n return (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={disabled}\n aria-label={`Pause ${row.repo}`}\n onClick={() =>\n actions.act(() => postFleetLive({ action: 'pause-repo', repo: row.repo, reason: 'Paused by Mason from the Fleet surface' }), `Pause ${row.repo}`, {\n confirm: {\n title: `Pause ${shortRepo(row.repo)}?`,\n body: 'No new fleet work starts there until you resume it. Runs already in flight finish and are watched as usual.',\n confirmLabel: 'Pause repo',\n destructive: true,\n },\n })\n }\n >\n Pause\n </Button>\n );\n}\n\nfunction GreenCell({ row }: { row: FleetRepoRow }) {\n return (\n <span className={styles.green}>\n <span className={styles.greenValue}>{row.greenPct7d === null ? '—' : `${Math.round(row.greenPct7d)}%`}</span>\n <Sparkline points={row.greenTrend} width={64} height={18} ariaLabel={`${row.repo} post-merge green, 14 days`} describe={(v) => `${Math.round(v)}%`} />\n </span>\n );\n}\n\nfunction Holds({ row, now }: { row: FleetRepoRow; now: number }) {\n if (!row.holds.length) return <span className={styles.muted}>—</span>;\n return (\n <span className={styles.holds}>\n {row.holds.map((h) => (\n <span key={h.kind} className={styles.hold} data-kind={h.kind} title={h.reason}>\n {holdText(h, now)}\n </span>\n ))}\n </span>\n );\n}\n\n/**\n * The fleet's own mirror clones, apart from the repo rows. WHY separate: a\n * mirror is the fleet's working copy of a repo already listed above, so\n * counting it as a row double-counts the repo (and its pause would not pause\n * the real one). `undefined` = an older server that does not report mirrors\n * (say nothing); `null` = the enrollment registry could not be read (say so —\n * unknown is never \"none\").\n */\nexport function mirrorsText(mirrors: FleetMirrorSummary | null | undefined): string | null {\n if (mirrors === undefined) return null;\n if (mirrors === null) return 'Fleet mirrors: unknown — the enrollment registry could not be read.';\n if (mirrors.count === 0) return 'Fleet mirrors: none yet — the fleet clones a repo the first time it works on it.';\n const shown = mirrors.repos.slice(0, 6).join(', ');\n const more = mirrors.repos.length > 6 ? ` and ${mirrors.repos.length - 6} more` : '';\n return `Fleet mirrors: ${mirrors.count} working ${mirrors.count === 1 ? 'copy' : 'copies'}${shown ? ` (${shown}${more})` : ''} — the fleet's own clones of the repos above.`;\n}\n\nconst today = (row: FleetRepoRow) => (row.mergesToday === null ? '—' : `${row.mergesToday}${row.maxMergesPerDay !== null ? ` / ${row.maxMergesPerDay}` : ''}`);\n\nexport function RepoTable({ read, actions, now, compact }: { read: OptionalRead<FleetLiveSnapshotV1> | undefined; actions: SurfaceActions; now: number; compact: boolean }) {\n const live = read?.value ?? null;\n const rows = live?.repos ?? [];\n return (\n <Card title=\"Repositories\" caption={live ? `${rows.length} enrolled · stage is what the grant and rollout allow right now` : undefined}>\n {!read ? (\n <p className={styles.muted} aria-busy=\"true\">Reading repositories…</p>\n ) : !live ? (\n <CardNote tone=\"unknown\">{read.reason ?? 'The live fleet view did not answer.'}</CardNote>\n ) : rows.length === 0 ? (\n <CardNote>No repositories are enrolled.</CardNote>\n ) : compact ? (\n <ul className={styles.repoCards}>\n {rows.map((row) => (\n <li key={row.repo} className={styles.repoCard} id={anchorId(`repo-${row.repo}`)}>\n <div className={styles.repoCardHead}>\n <span className={styles.repoName}>{row.repo}</span>\n <RepoAction row={row} actions={actions} />\n </div>\n <dl className={styles.facts}>\n <div><dt>Stage</dt><dd><StageBadge row={row} /></dd></div>\n <div><dt>Last merge</dt><dd>{row.lastMergeAt ? formatRelative(row.lastMergeAt) : '—'}</dd></div>\n <div><dt>Today</dt><dd>{today(row)}</dd></div>\n <div><dt>Green 7d</dt><dd><GreenCell row={row} /></dd></div>\n </dl>\n <Holds row={row} now={now} />\n </li>\n ))}\n </ul>\n ) : (\n <div className={styles.tableWrap}>\n <table className={styles.table}>\n <caption className=\"visually-hidden\">Enrolled repositories</caption>\n <thead>\n <tr>\n <th scope=\"col\">Repository</th>\n <th scope=\"col\">Stage</th>\n <th scope=\"col\">Last merge</th>\n <th scope=\"col\" className={styles.num}>Today</th>\n <th scope=\"col\">Post-merge green · 14d</th>\n <th scope=\"col\" className={styles.num}>Open PRs</th>\n <th scope=\"col\">Holds</th>\n <th scope=\"col\"><span className=\"visually-hidden\">Action</span></th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.repo} id={anchorId(`repo-${row.repo}`)} data-held={row.holds.length > 0 || undefined}>\n <th scope=\"row\" className={styles.repoName}>{row.repo}</th>\n <td><StageBadge row={row} /></td>\n <td>{row.lastMergeAt ? formatRelative(row.lastMergeAt) : '—'}</td>\n <td className={styles.num}>{today(row)}</td>\n <td><GreenCell row={row} /></td>\n <td className={styles.num}>{row.openFleetPrs ?? '—'}</td>\n <td><Holds row={row} now={now} /></td>\n <td className={styles.actionCell}><RepoAction row={row} actions={actions} /></td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n {live && mirrorsText(live.mirrors) ? <p className={styles.muted}>{mirrorsText(live.mirrors)}</p> : null}\n </Card>\n );\n}\n","import type { ExecutionFeedbackCaseDetail } from '../fleet/execution-feedback-case-types.js';\nimport type { ExecutionFeedbackView } from '../fleet/execution-feedback-types.js';\n\n/** Recorded outcomes only. Reading this surface cannot launch or repair work. */\nexport interface ExecutionFeedbackRead {\n v: 1;\n state: 'warming' | 'current' | 'stale' | 'unavailable';\n refreshedAt: string | null;\n feedback: ExecutionFeedbackView | null;\n}\n\nexport const EXECUTION_FEEDBACK_PATH = '/api/verse/fleet/live/feedback';\n\n/** Detail stays lazy and independently qualified from aggregate totals. */\nexport interface ExecutionFeedbackCaseRead {\n v: 1;\n state: 'warming' | 'current' | 'stale' | 'unavailable';\n refreshedAt: string | null;\n detail: ExecutionFeedbackCaseDetail | null;\n}\nexport const EXECUTION_FEEDBACK_CASE_PATH = `${EXECUTION_FEEDBACK_PATH}/cases/`;\n","import type { ExecutionFeedbackRead } from '../../../../core/verse/execution-feedback-api-types.js';\nimport type { ExecutionFeedbackOutcome } from '../../../../core/fleet/execution-feedback-types.js';\n\nexport const OUTCOME_LABELS: Record<ExecutionFeedbackOutcome, string> = {\n 'producer-succeeded': 'Produced proposal', failed: 'Failed', cancelled: 'Cancelled',\n refused: 'Held', 'empty-diff': 'No changes', disabled: 'Disabled', unknown: 'Unclassified',\n};\nconst outcomes = Object.keys(OUTCOME_LABELS);\nconst hash = /^h:(?:[a-f0-9]{16}:){3}[a-f0-9]{16}$/;\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\nfunction timestamp(value: unknown): boolean {\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 counts(value: unknown): boolean {\n return record(value) && outcomes.every((key) => Number.isSafeInteger(value[key]) && (value[key] as number) >= 0);\n}\n\n/** Refuse an incompatible server response before rendering counts or cases. */\nexport function narrowExecutionFeedbackRead(raw: unknown): ExecutionFeedbackRead | null {\n if (!record(raw) || raw.v !== 1 || !['warming', 'current', 'stale', 'unavailable'].includes(String(raw.state)) ||\n raw.refreshedAt !== null && !timestamp(raw.refreshedAt)) return null;\n if (raw.feedback === null) {\n return ['warming', 'unavailable'].includes(String(raw.state)) ? raw as unknown as ExecutionFeedbackRead : null;\n }\n const value = raw.feedback;\n if (!record(value) || value.schemaVersion !== 1 || !['missing', 'healthy', 'degraded'].includes(String(value.sourceState)) ||\n typeof value.complete !== 'boolean' || !record(value.window) || !timestamp(value.window.since) || !timestamp(value.window.through) ||\n value.observedThrough !== null && !timestamp(value.observedThrough) || !counts(value.observedCounts) ||\n value.counts !== null && !counts(value.counts) || value.complete !== (value.counts !== null) ||\n value.complete !== (value.sourceState === 'healthy') ||\n !Array.isArray(value.cases) || typeof value.digest !== 'string' || !hash.test(value.digest) || !record(value.coverage)) return null;\n const coverage = value.coverage;\n if (Date.parse(value.window.since as string) > Date.parse(value.window.through as string) ||\n !['missing', 'healthy', 'degraded', 'unavailable'].includes(String(coverage.proposalSource)) ||\n !['legacyRows', 'invalidAttempts', 'conflictingAttempts', 'duplicateRows', 'invalidTimestamps'].every((key) =>\n Number.isSafeInteger(coverage[key]) && (coverage[key] as number) >= 0)) return null;\n if (!value.cases.every((row) => record(row) && typeof row.caseId === 'string' && hash.test(row.caseId) && timestamp(row.endedAt) &&\n typeof row.outcome === 'string' && Object.hasOwn(OUTCOME_LABELS, row.outcome) &&\n (row.failureKind === null || ['engine', 'sandbox', 'capture'].includes(String(row.failureKind))) && typeof row.proposalRecorded === 'boolean')) return null;\n return raw as unknown as ExecutionFeedbackRead;\n}\n","import type { ExecutionFeedbackCaseRead } from '../../../../core/verse/execution-feedback-api-types.js';\nimport type { ExecutionCaseStage, ExecutionCaseTimelineEntry } from '../../../../core/fleet/execution-feedback-case-types.js';\nimport { OUTCOME_LABELS } from './execution-feedback-model.js';\n\nexport const EXECUTION_CASE_ID = /^h:(?:[a-f0-9]{16}:){3}[a-f0-9]{16}$/;\nexport const CASE_STAGE_LABELS: Record<ExecutionCaseStage, string> = {\n produced: 'Execution recorded', verified: 'Verification', 'pr-opened': 'Pull request opened',\n merged: 'Merged', 'post-merge': 'After merge', reverted: 'Reverted',\n};\nexport const CASE_BASIS_LABELS: Record<ExecutionCaseTimelineEntry['basis'], string> = {\n 'dispatch-final': 'Completed attempt', 'proposal-verification': 'Proposal verification record',\n 'authority-ledger': 'Recorded fleet action', 'authenticated-host': 'Confirmed GitHub merge',\n 'authenticated-local': 'Confirmed local merge',\n};\nexport const CASE_RESULT_LABELS: Record<ExecutionCaseTimelineEntry['result'], string> = {\n recorded: 'Recorded', passed: 'Passed', failed: 'Failed', unbound: 'Not bound to this change',\n 'host-merged': 'GitHub merge recorded', 'local-merged': 'Local merge recorded',\n green: 'Green result recorded', red: 'Red result recorded', reverted: 'Revert recorded',\n};\nfunction record(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value) &&\n [Object.prototype, null].includes(Object.getPrototypeOf(value)) && Reflect.ownKeys(value).every(key =>\n typeof key === 'string' && 'value' in Object.getOwnPropertyDescriptor(value, key)!);\n}\nfunction instant(value: unknown): boolean {\n return typeof value === 'string' && Number.isFinite(Date.parse(value)) && new Date(value).toISOString() === value;\n}\nfunction member(value: unknown, options: readonly string[]): value is string { return typeof value === 'string' && options.includes(value); }\n/** Fixed recorded links only; no credentials, redirect host, query or arbitrary browser URL. */\nexport function safeExecutionCaseHref(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n if (/^\\/(?:inbox|work\\/runs)\\/[A-Za-z0-9][A-Za-z0-9_.-]{0,159}$/.test(value)) return true;\n const match = /^https:\\/\\/github\\.com\\/([A-Za-z0-9][A-Za-z0-9-]*)\\/([A-Za-z0-9][A-Za-z0-9_.-]*)\\/pull\\/([1-9][0-9]*)$/.exec(value);\n return !!match && Number.isSafeInteger(Number(match[3]));\n}\n/** The response must match the selected case, including when requests finish out of order. */\nexport function narrowExecutionCaseRead(raw: unknown, selectedCaseId: string): ExecutionFeedbackCaseRead | null {\n try {\n if (!EXECUTION_CASE_ID.test(selectedCaseId) || !record(raw) || raw.v !== 1 ||\n !member(raw.state, ['warming', 'current', 'stale', 'unavailable']) || raw.refreshedAt !== null && !instant(raw.refreshedAt)) return null;\n if (raw.detail === null) return member(raw.state, ['warming', 'unavailable']) ? raw as unknown as ExecutionFeedbackCaseRead : null;\n const d = raw.detail;\n if (!record(d) || d.schemaVersion !== 1 || d.caseId !== selectedCaseId || typeof d.digest !== 'string' ||\n !EXECUTION_CASE_ID.test(d.digest) || !instant(d.endedAt) || typeof d.outcome !== 'string' ||\n !Object.hasOwn(OUTCOME_LABELS, d.outcome) || d.shipping !== 'not-recorded' || !record(d.coverage) ||\n !Array.isArray(d.timeline) || !member(raw.state, ['current', 'stale'])) return null;\n const c = d.coverage;\n if (!member(c.dispatch, ['healthy', 'degraded', 'missing']) || !member(c.proposals, ['healthy', 'degraded', 'missing']) ||\n !member(c.ledger, ['healthy', 'missing', 'broken', 'unavailable']) ||\n !['invalidRecords', 'conflictingRecords'].every(k => Number.isSafeInteger(c[k]) && (c[k] as number) >= 0)) return null;\n for (let index = 0; index < d.timeline.length; index++) {\n if (!Object.hasOwn(d.timeline, index)) return null;\n const row = d.timeline[index];\n if (!record(row) || typeof row.stage !== 'string' || !Object.hasOwn(CASE_STAGE_LABELS, row.stage) ||\n typeof row.result !== 'string' || !Object.hasOwn(CASE_RESULT_LABELS, row.result) ||\n typeof row.basis !== 'string' || !Object.hasOwn(CASE_BASIS_LABELS, row.basis) ||\n row.at !== null && !instant(row.at) || row.href !== undefined && !safeExecutionCaseHref(row.href) ||\n row.ci !== undefined && !member(row.ci, ['green', 'red', 'none', 'unknown']) ||\n row.suite !== undefined && !member(row.suite, ['pass', 'fail', 'not-run'])) return null;\n const supported = row.stage === 'produced' ? row.result === 'recorded' && row.basis === 'dispatch-final'\n : row.stage === 'verified' ? member(row.result, ['passed', 'failed', 'unbound']) && row.basis === 'proposal-verification'\n : row.stage === 'pr-opened' ? row.result === 'recorded' && row.basis === 'authority-ledger'\n : row.stage === 'merged' ? row.result === 'host-merged' && member(row.basis, ['authenticated-host', 'authority-ledger']) ||\n row.result === 'local-merged' && row.basis === 'authenticated-local'\n : row.stage === 'post-merge' ? member(row.result, ['green', 'red']) && row.basis === 'authority-ledger'\n : row.result === 'reverted' && row.basis === 'authority-ledger';\n if (!supported || row.stage !== 'post-merge' && (row.ci !== undefined || row.suite !== undefined) ||\n row.stage === 'verified' && row.result !== 'unbound' && row.at === null) return null;\n }\n return raw as unknown as ExecutionFeedbackCaseRead;\n } catch { return null; }\n}\n","import { useMemo, 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 { formatRelative } from '../autonomy/format.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { EXECUTION_FEEDBACK_CASE_PATH } from '../../../../core/verse/execution-feedback-api-types.js';\nimport { CASE_BASIS_LABELS, CASE_RESULT_LABELS, CASE_STAGE_LABELS, narrowExecutionCaseRead } from './execution-case-model.js';\nimport styles from './execution-case.module.css';\n\n/** Mounted only for the outcome the user selects; does not fetch every case. */\nexport function ExecutionCaseDetails({ caseId }: { caseId: string }) {\n const query = useMemo(() => optionalQuery(`verse-execution-case:${caseId}`,\n `${EXECUTION_FEEDBACK_CASE_PATH}${encodeURIComponent(caseId)}`, 'Recorded execution details',\n raw => narrowExecutionCaseRead(raw, caseId)), [caseId]);\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 detail = value?.detail;\n if (!detail) return <p className={styles.note}>{reading.data?.reason ?? (value?.state === 'unavailable'\n ? 'Recorded details are unavailable. Missing evidence does not mean no work shipped.' : 'Reading recorded execution details…')}</p>;\n const partial = detail.coverage.dispatch !== 'healthy' || detail.coverage.proposals !== 'healthy' ||\n detail.coverage.ledger !== 'healthy' || detail.coverage.invalidRecords > 0 || detail.coverage.conflictingRecords > 0;\n return <section className={styles.panel} aria-label=\"Selected execution timeline\">\n <p className={styles.note}>{partial ? 'Partial evidence. Unrecorded stages remain unknown.' : 'Stages supported by recorded evidence.'}\n {value?.state === 'stale' ? ' Showing the last reading while it refreshes.' : ''}</p>\n <ol className={styles.timeline}>\n {detail.timeline.map((row, index) => <li key={index} data-result={row.result}>\n <div className={styles.heading}><strong>{CASE_STAGE_LABELS[row.stage]}</strong><span>{CASE_RESULT_LABELS[row.result]}</span></div>\n <p className={styles.note}>{CASE_BASIS_LABELS[row.basis]} · {row.at ? <time dateTime={row.at} title={row.at}>{formatRelative(row.at)}</time> : 'Time unknown'}</p>\n {row.ci !== undefined || row.suite !== undefined ? <p className={styles.note}>\n {row.ci === undefined ? '' : `CI: ${row.ci === 'none' ? 'none recorded' : row.ci}`}\n {row.ci !== undefined && row.suite !== undefined ? ' · ' : ''}\n {row.suite === undefined ? '' : `Local verification: ${row.suite === 'not-run' ? 'not run' : row.suite}`}\n </p> : null}\n {row.href ? <a href={row.href} {...(row.href.startsWith('https:') ? { target: '_blank', rel: 'noopener noreferrer' } : {})}>\n {row.href.startsWith('https:') ? 'Open GitHub pull request' : row.href.startsWith('/inbox/') ? 'Open proposal' : 'Open run'}</a> : null}\n </li>)}\n </ol>\n {!detail.timeline.length ? <p className={styles.note}>No timeline entries could be confirmed.</p> : null}\n <p className={styles.note}>Release and deployment are not recorded here. A merge or green check alone does not establish production status.</p>\n {value?.refreshedAt ? <p className={styles.note}>Last reading <time dateTime={value.refreshedAt} title={value.refreshedAt}>{formatRelative(value.refreshedAt)}</time></p> : null}\n <Button size=\"sm\" variant=\"ghost\" onClick={refetch}>Refresh details</Button>\n </section>;\n}\n","import { 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 { formatRelative } from '../autonomy/format.js';\nimport { executeCatalogCommand } from '../shell/run-command.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { EXECUTION_FEEDBACK_PATH } from '../../../../core/verse/execution-feedback-api-types.js';\nimport { narrowExecutionFeedbackRead, OUTCOME_LABELS } from './execution-feedback-model.js';\nimport type { ExecutionFeedbackOutcome } from '../../../../core/fleet/execution-feedback-types.js';\nimport styles from './execution-feedback.module.css';\nimport { ExecutionCaseDetails } from './ExecutionCaseDetails.js';\n\nconst feedbackQuery = optionalQuery('verse-execution-feedback', EXECUTION_FEEDBACK_PATH, 'Recorded execution outcomes', narrowExecutionFeedbackRead);\n\nfunction FeedbackReading() {\n const reading = useQuery(feedbackQuery, { freshMs: 15_000 });\n const refetch = useRefetch(feedbackQuery);\n const [openedAt] = useState(() => Date.now());\n const [inspectOpen, setInspectOpen] = useState(false);\n const [selectedCase, setSelectedCase] = useState<string | null>(null);\n const now = useNow(2_000);\n const value = reading.data?.value;\n // Catch a completed cold worker promptly, then return to the normal cadence.\n // The shared visibility hook pauses both hidden surfaces and hidden windows.\n usePollWhileVisible(refetch, value?.state === 'warming' && now - openedAt < 30_000 ? 2_000 : 15_000);\n const feedback = value?.feedback;\n if (!value) return <p className={styles.note}>{reading.data?.reason ?? 'Reading recorded outcomes…'}</p>;\n if (!feedback) return <p className={styles.note}>{value.state === 'warming' ? 'Reading recorded outcomes…' : 'Recorded execution evidence is unavailable.'}</p>;\n const known = feedback.counts !== null;\n const measured = feedback.counts ?? feedback.observedCounts;\n const largest = Math.max(1, ...Object.values(measured));\n return (\n <div className={styles.body}>\n <p className={styles.note}>\n {feedback.sourceState === 'missing' ? 'No readable execution history. Totals are unknown.' : known ? 'Recorded outcomes in the last seven days.' : 'Partial history. These are observed counts; full totals are unknown.'}\n {value.state === 'stale' ? ' Showing the last reading while it refreshes.' : ''}\n </p>\n {feedback.sourceState !== 'missing' ? <dl className={styles.counts} aria-label={known ? 'Recorded execution totals' : 'Observed execution counts, incomplete history'}>\n {(Object.keys(OUTCOME_LABELS) as ExecutionFeedbackOutcome[]).map((outcome) => (\n <div key={outcome}>\n <dt>{OUTCOME_LABELS[outcome]}</dt>\n <dd>{known ? '' : '≥ '}{measured[outcome]}\n <span className={styles.bar} aria-hidden=\"true\" data-outcome={outcome}\n style={{ width: `${measured[outcome] / largest * 100}%` }} />\n </dd>\n </div>\n ))}\n </dl> : null}\n {feedback.sourceState !== 'missing' ? <p className={styles.note}>Bars compare recorded counts; they are not success rates.</p> : null}\n {value.refreshedAt ? <p className={styles.note} title={value.refreshedAt}>Last reading {formatRelative(value.refreshedAt)}</p> : null}\n <p className={styles.note}>Produced proposals are counted separately from verification and shipping. Opening this view starts no agent or model call.</p>\n {feedback.coverage.proposalSource === 'degraded' || feedback.coverage.proposalSource === 'unavailable'\n ? <p className={styles.note}>Proposal history is incomplete; an unrecorded proposal is not evidence that none exists.</p> : null}\n {feedback.cases.length ? <details className={styles.cases} open={inspectOpen} onToggle={(event) => setInspectOpen(event.currentTarget.open)}>\n <summary>Inspect {feedback.cases.length} recorded outcomes</summary>\n {inspectOpen ? <><ul>{feedback.cases.map((row) => <li key={row.caseId}>\n <span>{OUTCOME_LABELS[row.outcome]}{row.failureKind ? ` · ${row.failureKind}` : ''}</span>\n <span>{formatRelative(row.endedAt)}{row.proposalRecorded ? ' · proposal recorded' : ''}</span>\n <Button size=\"sm\" variant=\"ghost\" aria-expanded={selectedCase === row.caseId}\n onClick={() => setSelectedCase(selectedCase === row.caseId ? null : row.caseId)}>\n {selectedCase === row.caseId ? 'Hide timeline' : 'View timeline'}\n </Button>\n {selectedCase === row.caseId ? <ExecutionCaseDetails key={row.caseId} caseId={row.caseId} /> : null}\n </li>)}</ul></> : null}\n </details> : null}\n <div className={styles.actions}>\n <Button size=\"sm\" variant=\"ghost\" onClick={refetch}>Refresh</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => executeCatalogCommand('surface.growth', { via: 'button' })}>Open lessons</Button>\n </div>\n </div>\n );\n}\n\n/** Mount the query only when opened; leave chats, drafts and routing untouched. */\nexport function ExecutionFeedback() {\n const [open, setOpen] = useState(false);\n return <details className={styles.panel} onToggle={(event) => setOpen(event.currentTarget.open)}>\n <summary>Execution feedback <span>outcomes and learning evidence</span></summary>\n {open ? <FeedbackReading /> : null}\n </details>;\n}\n","/**\n * routes/verse/sections/FleetSection.tsx — ⌘2 Fleet (SPEC-310B §6,\n * SPEC-310C §5; unit C7). THE place to operate the fleet (3.15): what it is\n * doing and the one thing in its way, Start / Pause / Resume / Stop, the grant\n * (and editing it), steering runs and the queue — then what is running where,\n * why that seat, what is waiting, and per-repo control.\n *\n * Fleet control: one sentence, one blocker, the controls, the facts (lead)\n * Rollout ladder (while a grant is active) (12)\n * Steer: working runs (log / interject / stop), queue, goals, Leader (12)\n * Live swimlane by lane × phase (12)\n * Shadow decisions: G0–G7 per proposal, ladder regressions (12)\n * Gate funnel + refusal reasons (7) | Why this seat (5)\n * Parked Gantt (7) | Overnight (5)\n * Repo table: stage, last merge, green% sparkline, holds, pause/resume (12)\n * ▸ Advanced — the eleven legacy Autonomy panels, fetched only when opened\n *\n * At 375 px: one column in that order; the repo table becomes cards.\n * The live view polls every 5 s while Fleet is the visible surface.\n *\n * Autonomy off: the shared AutonomyOffState sits under the lanes, and when\n * the fleet has nothing to draw (no runs, no gate traffic) the three chart\n * cards are left out instead of each repeating \"Fleet dark since …\".\n */\nimport { Suspense, lazy, useId, useState } from 'react';\nimport { RefreshIndicator } from '../../../components/primitives/RefreshIndicator.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { IconChevronRight } from '../../../components/primitives/icons.js';\nimport { useQuery, useRefetch } from '../../../data/hooks.js';\nimport { AutonomyOffState, useAutonomyOff } from '../autonomy/AutonomyOffState.js';\nimport { overnightQuery } from '../autonomy/overnight-queries.js';\nimport { useNow } from '../autonomy/use-ticker.js';\nimport { budgetPreviewQuery, budgetQuery } from '../budget/budget-queries.js';\nimport { ActionStatus, useSurfaceActions } from '../command/actions.js';\nimport { paletteBlock, useGrantFlow } from '../command/AutonomyBar.js';\nimport { anchorId } from '../command/nav.js';\nimport { FleetControl } from '../fleet/FleetControl.js';\nimport { SteerPanel } from '../fleet/SteerPanel.js';\nimport { Cell, Surface } from '../command/Surface.js';\nimport { authorityQuery, fleetLiveQuery } from '../command/surface-data.js';\nimport { usePollWhileVisible } from '../shell/section-visibility.js';\nimport { useViewport } from '../shell/viewport.js';\nimport { executeCatalogCommand } from '../shell/run-command.js';\nimport { GateFunnelCards, LanesStrip, LiveSwimlane, OvernightCard, ParkedCard, WhySeatCard } from '../fleet/FleetCards.js';\nimport { RepoTable } from '../fleet/RepoTable.js';\nimport { FleetScheduling } from '../resources/SchedulingEvidence.js';\nimport { ExecutionFeedback } from '../fleet/ExecutionFeedback.js';\nimport { nothingToDraw } from '../fleet/live-model.js';\nimport { fleetDarkSince } from '../fleet/dark-since.js';\nimport styles from '../fleet/fleet.module.css';\n\nexport const FLEET_POLL_MS = 5_000;\nexport const FLEET_SLOW_POLL_MS = 30_000;\n\n// The legacy cockpit is ~74 KB of panels: its own chunk, loaded on open.\n// Shadow decisions (3.14): the gates' verdicts per proposal and ladder\n// regressions — its own chunk, loaded once a grant has ever been signed.\nconst ShadowDecisions = lazy(() => import('../fleet/ShadowDecisions.js'));\n\nconst FleetAdvanced = lazy(() => import('../fleet/Advanced.js').then((m) => ({ default: () => <m.FleetAdvanced embedded /> })));\n// The rollout ladder (3.14) lives here since 3.15 — Command links to it.\nconst AutonomyStatus = lazy(() => import('../command/AutonomyStatus.js'));\n\nexport function FleetSection() {\n const { compact } = useViewport();\n const fleet = useQuery(fleetLiveQuery);\n const overnight = useQuery(overnightQuery);\n const budget = useQuery(budgetQuery, { freshMs: 15_000 });\n const preview = useQuery(budgetPreviewQuery, { freshMs: 15_000 });\n const refetchFleet = useRefetch(fleetLiveQuery);\n const refetchOvernight = useRefetch(overnightQuery);\n const refetchPreview = useRefetch(budgetPreviewQuery);\n const refetchBudget = useRefetch(budgetQuery);\n usePollWhileVisible(refetchFleet, FLEET_POLL_MS);\n usePollWhileVisible(() => {\n refetchOvernight();\n refetchPreview();\n refetchBudget();\n }, FLEET_SLOW_POLL_MS);\n\n const now = useNow(15_000);\n const actions = useSurfaceActions();\n // One Touch ID sheet for Start's grant step, the blocker and \"Edit scope\".\n const grantFlow = useGrantFlow(actions);\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const advancedId = useId();\n const live = fleet.data?.value ?? null;\n const off = useAutonomyOff();\n // Same cache entry as the off-state's read (no extra request).\n const authority = useQuery(authorityQuery, { freshMs: 30_000 });\n const auth = authority.data?.value ?? null;\n const grantState = auth?.grant.state ?? null;\n // A grant (active, or lapsed with history) means the ledger has decisions to show.\n const showDecisions = grantState !== null && grantState !== 'none';\n // Collapse only what would be empty: a fleet stopped an hour ago still\n // draws its last runs.\n const collapse = off != null && live !== null && nothingToDraw(live);\n\n function openAdvanced(): void {\n setAdvancedOpen(true);\n requestAnimationFrame(() => document.getElementById(advancedId)?.scrollIntoView?.({ block: 'start', behavior: 'smooth' }));\n }\n\n return (\n <Surface\n title=\"Fleet\"\n actions={fleet.status === 'refreshing' ? <RefreshIndicator /> : null}\n lead={\n <>\n <div className={styles.taskActions} role=\"group\" aria-label=\"Delegate and guide work\">\n <Button size=\"sm\" variant=\"primary\" onClick={() => executeCatalogCommand('agents.new', { via: 'button' })}>Delegate a task</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => executeCatalogCommand('surface.agents', { via: 'button' })}>Review agents</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => executeCatalogCommand('surface.mind', { via: 'button' })}>Standing instructions</Button>\n </div>\n <p className={styles.muted}>Delegate a task in its own workspace, or give the Leader standing instructions for fleet planning.</p>\n <ActionStatus actions={actions} />\n <div id={anchorId('fleet-control')}>\n <span id={anchorId('authority-grant')} />\n <FleetControl actions={actions} grantFlow={grantFlow} darkSince={fleetDarkSince(live)} setupShownBelow={off?.kind === 'setup'} />\n </div>\n {/* The one-time setup checklist (the only step list left); every other\n off state is FleetControl's single blocker + button. */}\n {off && off.kind === 'setup' ? <AutonomyOffState state={off} here=\"fleet\" /> : null}\n <LanesStrip live={live} />\n </>\n }\n >\n {auth && auth.grant.state === 'active' ? (\n // Needs-you's rollout and Stop items, and ⌘K \"Autonomy status\", point here.\n <Cell span={12}>\n <div id={anchorId('autonomy')}>\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading the rollout ladder…</p>}>\n <AutonomyStatus\n status={auth}\n now={now}\n onReapprove={(why) => grantFlow.open('re-approve', why)}\n blocked={paletteBlock({ status: auth, reason: null, readOnly: actions.readOnly, busy: actions.busy })}\n />\n </Suspense>\n </div>\n </Cell>\n ) : null}\n <Cell span={12}>\n <SteerPanel live={live} actions={actions} now={now} />\n <FleetScheduling budget={budget.data ?? null} now={now} />\n <ExecutionFeedback />\n </Cell>\n {collapse ? null : (\n <Cell span={12}>\n <LiveSwimlane read={fleet.data} now={now} hours={compact ? 6 : 12} />\n </Cell>\n )}\n {showDecisions ? (\n <Cell span={12}>\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading shadow decisions…</p>}>\n <ShadowDecisions now={now} />\n </Suspense>\n </Cell>\n ) : null}\n {collapse ? null : (\n <Cell span={7}>\n <GateFunnelCards read={fleet.data} />\n </Cell>\n )}\n <Cell span={collapse ? 6 : 5}>\n <WhySeatCard read={fleet.data} preview={preview.data ?? null} view={budget.data ?? null} now={now} />\n </Cell>\n {collapse ? null : (\n <Cell span={7}>\n <ParkedCard read={fleet.data} now={now} />\n </Cell>\n )}\n <Cell span={collapse ? 6 : 5}>\n <OvernightCard read={overnight.data} onOpenAdvanced={openAdvanced} dark={live?.state === 'dark'} />\n </Cell>\n <Cell span={12}>\n <RepoTable read={fleet.data} actions={actions} now={now} compact={compact} />\n </Cell>\n <Cell span={12}>\n <div className={styles.advanced}>\n <button\n type=\"button\"\n className={styles.disclosure}\n aria-expanded={advancedOpen}\n aria-controls={advancedId}\n onClick={() => setAdvancedOpen((o) => !o)}\n >\n <IconChevronRight className={styles.chevron} width={14} height={14} aria-hidden=\"true\" />\n Advanced\n <span className={styles.disclosureNote}>daemon, overnight, local runtime, caps, scope, activity, safety, goals</span>\n </button>\n <div id={advancedId} hidden={!advancedOpen}>\n {advancedOpen ? (\n <Suspense fallback={<p className={styles.muted} aria-busy=\"true\">Loading the advanced panels…</p>}>\n <FleetAdvanced />\n </Suspense>\n ) : null}\n </div>\n </div>\n </Cell>\n {grantFlow.sheet}\n {actions.dialogs}\n </Surface>\n );\n}\n"],"file":"FleetSection-CmZKQ1rr.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{D as r,H as i,L as a,M as o,N as s,O as c,P as l,S as u,V as d,W as f,a as ee,c as te,i as ne,n as p,p as re,r as ie,s as m,t as ae,u as h,y as oe,z as g}from"./ChartFrame-CakjKkPx.js";import{c as _,m as v}from"./colors-DvK0wMHH.js";import{i as y,r as b,t as se}from"./format-D7nBg2bn.js";var x=e(n(),1),S=t(),C=14,w=26,T=8,E=24,D=2;function O({title:e,description:t,caveat:n,status:r,categories:re,categoryTitles:_,segments:O,values:k,normalize:A=!1,height:j=200,width:ce,formatValue:M,formatTooltip:le,ariaLabel:ue}){let de=M??se,N=le??M??b,fe=ee(),pe=(0,x.useRef)(null),P=ne(pe,ce),F=ie(),[I,L]=(0,x.useState)(null),R=(0,x.useId)(),z=v((0,x.useId)()),B=O.map(e=>e.color),V=re.map((e,t)=>{let n=k[t]??O.map(()=>null);return{label:e,title:_?.[t]||e,values:n,stack:o(n)}}),me=V.some(e=>!e.stack.unknown),he=Math.max(0,...V.map(e=>e.stack.total)),ge=V.some(e=>e.stack.incomplete),_e=r??(V.length===0||me&&he===0&&!ge?{kind:`empty`}:me?{kind:`ready`}:{kind:`unknown`}),ve=V.flatMap(e=>e.values.filter(e=>e!==null&&Number.isFinite(e))),H=A?{ticks:[0,.25,.5,.75,1],labels:[0,.25,.5,.75,1].map(e=>y(e))}:te(0,he,{count:4,integer:m(ve),format:M}),U=H.ticks,ye=U[U.length-1],W=l(H.labels,28,60,F),G=Math.max(40,P-W-T),K=j-C-w,q=V.length?G/V.length:G,J=Math.max(2,Math.min(E,q*.66)),Y=u(0,ye,C+K,C),X=e=>W+q*e+(q-J)/2,be=Math.max(0,...V.map(e=>e.label.length))*oe(F)+12,xe=s(V.length,Math.max(2,Math.floor(G/Math.max(64*F,be)))),Z=e=>t=>`${t.stack.incomplete&&!t.stack.unknown?`≥ `:``}${t.stack.unknown?`—`:e(t.stack.total)}`,Se=Z(de),Ce=Z(N);function we(e){if(V.length===0)return;let t=I??V.length-1,n=e.key===`ArrowLeft`?t-1:e.key===`ArrowRight`?t+1:e.key===`Home`?0:e.key===`End`?V.length-1:null;n!==null&&(e.preventDefault(),L(Math.max(0,Math.min(V.length-1,n))))}let Q=V.reduce((e,t)=>!t.stack.unknown&&(!e||t.stack.total>e.stack.total)?t:e,null),Te=ue??`${e}: ${V.length} columns of ${O.map(e=>e.label).join(`, `)}.`+(Q?` Highest: ${Q.title} with ${Se(Q)}.`:``),Ee=[{key:`label`,label:`Category`,render:e=>e.title},...O.map((e,t)=>({key:e.id,label:e.label,numeric:!0,render:e=>e.values[t]===null||e.values[t]===void 0?`—`:de(e.values[t])})),{key:`__total`,label:`Total`,numeric:!0,render:Se}],$=I===null?void 0:V[I];return(0,S.jsx)(ae,{title:e,description:t,caveat:n,status:_e,skeleton:`bars`,skeletonHeight:j,table:(0,S.jsx)(p,{caption:e,columns:Ee,rows:V,rowKey:(e,t)=>`${t}:${e.label}`}),footer:(0,S.jsx)(a,{items:[...O.map((e,t)=>({label:e.label,color:B[t]})),...V.some(e=>e.stack.unknown)?[{label:`no data`,kind:`hatch`}]:[]]}),children:(0,S.jsxs)(`div`,{ref:pe,className:`${f.plotWrap} ${f.focusable}`,"data-motion":fe,tabIndex:0,role:`group`,"aria-label":`${e}. Use the left and right arrow keys to read each column.`,"aria-describedby":R,onFocus:()=>L(e=>e??(V.length?V.length-1:null)),onBlur:()=>L(null),onKeyDown:we,children:[(0,S.jsxs)(`svg`,{className:f.svg,width:P,height:j,viewBox:`0 0 ${P} ${j}`,role:`img`,"aria-label":Te,children:[(0,S.jsx)(`defs`,{children:(0,S.jsx)(d,{id:z})}),I===null?null:(0,S.jsx)(`rect`,{"data-role":`hover-band`,className:f.hoverBand,x:W+q*I+1,y:C,width:Math.max(0,q-2),height:K,rx:4}),U.map((e,t)=>(0,S.jsxs)(`g`,{children:[(0,S.jsx)(`line`,{className:f.grid,x1:W,x2:W+G,y1:h(Y(e)),y2:h(Y(e))}),(0,S.jsx)(`text`,{className:f.tick,x:W-6,y:Y(e),dy:`0.32em`,textAnchor:`end`,children:H.labels[t]})]},e)),V.map((e,t)=>{let n=X(t),r=A&&e.stack.total||1;if(e.stack.unknown)return(0,S.jsx)(`rect`,{"data-unknown":`true`,className:f.unknownMark,fill:`url(#${z})`,x:n+.5,y:C+K-12.5,width:Math.max(1,J-1),height:12,rx:2},t);let i=e.stack.segments[e.stack.segments.length-1];return(0,S.jsxs)(`g`,{"data-column":t,className:f.rise,style:{"--chart-i":t},opacity:I!==null&&I!==t?.55:1,children:[e.stack.segments.map(e=>{let t=Y(e.y1/r),a=Y(e.y0/r),o=e===i,s=Math.max(0,a-t-(o?0:D)),l=o?t:t+D;return o?(0,S.jsx)(`path`,{d:c(n,l,J,s),fill:B[e.index],"data-segment":O[e.index].id},e.index):(0,S.jsx)(`rect`,{x:n,y:l,width:J,height:s,fill:B[e.index],"data-segment":O[e.index].id},e.index)}),e.stack.incomplete?(0,S.jsx)(`rect`,{"data-incomplete":`true`,className:f.noData,x:n,y:Y(e.stack.total/r)-8,width:J,height:6,rx:2}):null]},t)}),(0,S.jsx)(`line`,{className:f.axis,x1:W,x2:W+G,y1:h(C+K),y2:h(C+K)}),xe.map(e=>(0,S.jsx)(`text`,{className:f.tick,x:X(e)+J/2,y:j-8,textAnchor:`middle`,children:V[e].label},e)),V.map((e,t)=>(0,S.jsx)(`rect`,{className:f.hit,x:W+q*t,y:C,width:q,height:K,onPointerEnter:()=>L(t),onPointerLeave:()=>L(e=>e===t?null:e)},`hit${t}`))]}),(0,S.jsx)(`span`,{id:R,className:f.srOnly,"aria-live":`polite`,children:$?`${$.title}: ${O.map((e,t)=>`${e.label} ${$.values[t]===null?`no data`:N($.values[t])}`).join(`, `)}; total ${Ce($)}`:``}),$&&I!==null?(0,S.jsx)(g,{left:i(X(I)+J/2,P),top:$.stack.unknown?C+K-12:Y(A?1:$.stack.total),title:$.title,rows:[...O.map((e,t)=>({key:e.id,label:e.label,value:$.values[t]===null||$.values[t]===void 0?null:N($.values[t]),color:B[t]})),{key:`__t`,label:`Total`,value:$.stack.unknown?null:Ce($),total:!0}]}):null]})})}var k=20,A=480;function j(e,t){return t===0?``:e.ofPrevious===null?`— of previous`:`${y(e.ofPrevious,+(e.ofPrevious<.1&&e.ofPrevious>0))} of previous`}function ce({title:e,description:t,caveat:n,status:i,stages:a,width:o,color:s=_,formatValue:c=se,ariaLabel:l}){let u=(0,x.useRef)(null),d=ne(u,o),te=ee(),ie=re(a.map(e=>e.value)),m=a.map((e,t)=>({...ie[t],stage:e})),h=a[0]?.value??null,oe=i??(a.length===0||h===null?a.length===0?{kind:`empty`}:{kind:`unknown`,reason:`the first stage (${a[0].label}) is unknown`}:h===0?{kind:`empty`,message:`No ${a[0].label.toLowerCase()} in this window.`}:{kind:`ready`}),g=Math.max(0,...a.map(e=>e.value!==null&&Number.isFinite(e.value)?e.value:0)),v=d<A,b=v?0:Math.min(170,Math.round(d*.28)),C=v?150:180,w=Math.max(40,d-b-C),T=v?42:34,E=m.length*T+4,D=l??`${e}: `+m.map((e,t)=>`${e.stage.label} ${e.value===null?`unknown`:c(e.value)}${t>0?` (${j(e,t)})`:``}`).join(`, `)+`.`;return(0,S.jsx)(ae,{title:e,description:t,caveat:n,status:oe,skeleton:`funnel`,table:(0,S.jsx)(p,{caption:e,columns:[{key:`stage`,label:`Stage`,render:e=>e.stage.label},{key:`value`,label:`Count`,numeric:!0,render:e=>e.value===null?`—`:c(e.value)},{key:`prev`,label:`Of previous`,numeric:!0,render:e=>e.ofPrevious===null?`—`:y(e.ofPrevious,1)},{key:`first`,label:`Of first`,numeric:!0,render:e=>e.ofFirst===null?`—`:y(e.ofFirst,1)}],rows:m,rowKey:e=>e.stage.id}),children:(0,S.jsx)(`div`,{ref:u,className:f.plotWrap,"data-motion":te,children:(0,S.jsx)(`svg`,{className:f.svg,width:d,height:E,viewBox:`0 0 ${d} ${E}`,role:`img`,"aria-label":D,children:m.map((e,t)=>{let n=t*T+(v?18:7),i=e.value===null||!(e.value>0)||g<=0?0:Math.max(3,e.value/g*w),a=n+k/2;return(0,S.jsxs)(`g`,{"data-stage":e.stage.id,children:[(0,S.jsx)(`text`,{className:f.label,x:v?0:b-10,y:v?n-5:a,dy:v?void 0:`0.32em`,textAnchor:v?`start`:`end`,children:e.stage.label}),(0,S.jsx)(`rect`,{"data-role":`track`,className:f.trackEmpty,x:b,y:n,width:w,height:k,rx:4}),e.value===null?(0,S.jsx)(`rect`,{"data-unknown":`true`,className:f.noData,x:b,y:n,width:Math.min(w,48),height:k,rx:4}):i>0?(0,S.jsx)(`path`,{"data-role":`bar`,className:f.grow,style:{"--chart-i":t},d:r(b,n,i,k),fill:s}):null,(0,S.jsxs)(`text`,{className:f.labelStrong,x:b+w+10,y:a,dy:`0.32em`,children:[e.value===null?`unknown`:c(e.value),t>0?(0,S.jsx)(`tspan`,{className:f.tick,dx:8,children:j(e,t)}):null]})]},e.stage.id)})})})})}export{O as n,ce as t};
|
|
2
|
-
//# sourceMappingURL=Funnel-Cfg55EZp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Funnel-Cfg55EZp.js","names":[],"sources":["../../../../../../src/web-ui/components/charts/BarStack.tsx","../../../../../../src/web-ui/components/charts/Funnel.tsx"],"sourcesContent":["/**\n * components/charts/BarStack.tsx — stacked columns over ordered categories\n * (usually days): e.g. runs per day split into done / failed / aborted.\n *\n * Marks follow the kit spec: columns ≤ 24 px, a 4 px rounded data end on the\n * top segment only, square on the baseline, a 2 px surface gap between\n * segments. `normalize` shows each column as 100% (composition, not volume).\n *\n * Honesty: a null segment is UNKNOWN. A column with every segment null draws\n * a dashed \"no data\" placeholder; a column with some nulls stacks what is\n * known and marks the total as a lower bound (hollow cap + \"≥\" in the\n * tooltip and table). Nothing unknown ever renders as a zero-height bar.\n *\n * V3.10: every segment names its colour. The old fallback — categorical slot\n * by INDEX — meant an engine chart silently painted Claude in whatever ink\n * slot 0 held; engine charts must pass engineColor(), status charts\n * toneColor(), identity charts seriesColor(slot) with a slot fixed per entity\n * (SPEC-310C §6). An all-unknown column is drawn with the unknown hatch.\n *\n * Polish (verse-visual-quality): columns rise from the baseline once on\n * mount, staggered left to right (static under reduced motion — motion.ts);\n * the hovered / focused column gets a soft slot band behind it while the\n * others dim; gridlines snap to the pixel grid; the tooltip prints exact\n * values (formatExact unless the caller formats them) with the total set\n * apart; loading holds a column-shaped skeleton.\n */\nimport { useId, useRef, useState, type CSSProperties, type KeyboardEvent } from 'react';\nimport { hatchPatternId } from './colors.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { ChartLegend, ChartTooltip, HatchPattern, clampTooltipLeft } from './ChartParts.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { allIntegers, axisTicks, crisp, labelCharPx, linearScale, roundedTopBar, stackColumn, thinIndexes, tickGutter, type StackedColumn } from './chart-math.js';\nimport { formatCompact, formatExact, formatPercent } from './format.js';\nimport { useChartMotion } from './motion.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useTextScale } from './useTextScale.js';\nimport plot from './plot.module.css';\n\nexport interface BarStackSegment {\n id: string;\n label: string;\n /**\n * Required (V3.10): seriesColor(fixedSlot) for identity, toneColor(...) for\n * status, engineColor(...) for engines. Never picked by index.\n */\n color: string;\n}\n\nexport interface BarStackProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n /** Category labels in display order (e.g. formatted days). */\n categories: string[];\n /**\n * Optional full name per category, parallel to `categories`. The x-axis has\n * ~64 px per label, so callers shorten names there (Growth cuts\n * `grok-4.7-fast-reasoning` to `grok-4.7-fast…`); the tooltip, table,\n * screen-reader text and summary have room, and are where a reader goes to\n * learn WHICH category it is — so they use this title. A missing or empty\n * entry falls back to the category label.\n */\n categoryTitles?: ReadonlyArray<string | undefined>;\n segments: BarStackSegment[];\n /** values[categoryIndex][segmentIndex]; null = unknown. */\n values: ReadonlyArray<ReadonlyArray<number | null>>;\n normalize?: boolean;\n height?: number;\n width?: number;\n formatValue?: (v: number) => string;\n /** Tooltip value format. Default: `formatValue` when given, else formatExact (\"12,934\", not \"13K\"). */\n formatTooltip?: (v: number) => string;\n ariaLabel?: string;\n}\n\nconst PAD_T = 14;\nconst PAD_B = 26;\nconst PAD_R = 8;\nconst BAR_MAX = 24;\nconst GAP = 2;\n\ninterface Row {\n /** The short axis label. */\n label: string;\n /** The full name for tooltip, table and screen readers (`label` when none given). */\n title: string;\n values: ReadonlyArray<number | null>;\n stack: StackedColumn;\n}\n\nexport function BarStack({\n title,\n description,\n caveat,\n status,\n categories,\n categoryTitles,\n segments,\n values,\n normalize = false,\n height = 200,\n width: fixedWidth,\n formatValue: formatValueProp,\n formatTooltip: formatTooltipProp,\n ariaLabel,\n}: BarStackProps) {\n const formatValue = formatValueProp ?? formatCompact;\n const formatTip = formatTooltipProp ?? formatValueProp ?? formatExact;\n const motion = useChartMotion();\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const textScale = useTextScale();\n const [active, setActive] = useState<number | null>(null);\n const liveId = useId();\n const hatchId = hatchPatternId(useId());\n const colors = segments.map((s) => s.color);\n\n const rows: Row[] = categories.map((label, i) => {\n const vals = values[i] ?? segments.map(() => null);\n return { label, title: categoryTitles?.[i] || label, values: vals, stack: stackColumn(vals) };\n });\n const anyKnown = rows.some((r) => !r.stack.unknown);\n const maxTotal = Math.max(0, ...rows.map((r) => r.stack.total));\n const anyIncomplete = rows.some((r) => r.stack.incomplete);\n // A window of known zeros is a designed empty state, not empty axes.\n const resolvedStatus: ChartStatus = status ?? (\n rows.length === 0 || (anyKnown && maxTotal === 0 && !anyIncomplete)\n ? { kind: 'empty' }\n : anyKnown ? { kind: 'ready' } : { kind: 'unknown' }\n );\n\n // Counts (every known value whole) get whole-number ticks: a column of 1\n // run is scaled 0 / 1, never 0 / 0.3 / 0.5 / 0.8 / 1.\n const knownValues = rows.flatMap((r) => r.values.filter((v): v is number => v !== null && Number.isFinite(v)));\n const yAxis = normalize\n ? { ticks: [0, 0.25, 0.5, 0.75, 1], labels: [0, 0.25, 0.5, 0.75, 1].map((v) => formatPercent(v)) }\n : axisTicks(0, maxTotal, { count: 4, integer: allIntegers(knownValues), format: formatValueProp });\n const ticks = yAxis.ticks;\n const top = ticks[ticks.length - 1]!;\n const padL = tickGutter(yAxis.labels, 28, 60, textScale);\n const plotW = Math.max(40, width - padL - PAD_R);\n const plotH = height - PAD_T - PAD_B;\n const slot = rows.length ? plotW / rows.length : plotW;\n const barW = Math.max(2, Math.min(BAR_MAX, slot * 0.66));\n const ys = linearScale(0, top, PAD_T + plotH, PAD_T);\n const xOf = (i: number) => padL + slot * i + (slot - barW) / 2;\n // A category label gets 64 px at 12 px text (more at a larger Display\n // size), or its own estimated width plus air when the labels are longer\n // (\"wk to Sep 18\"): thinned to what fits, never printed over each other.\n const widestLabel = Math.max(0, ...rows.map((r) => r.label.length)) * labelCharPx(textScale) + 12;\n const labelIdx = thinIndexes(rows.length, Math.max(2, Math.floor(plotW / Math.max(64 * textScale, widestLabel))));\n\n const fmtTotalWith = (fmt: (v: number) => string) => (r: Row) =>\n `${r.stack.incomplete && !r.stack.unknown ? '≥ ' : ''}${r.stack.unknown ? '—' : fmt(r.stack.total)}`;\n const fmtTotal = fmtTotalWith(formatValue);\n const fmtTotalExact = fmtTotalWith(formatTip);\n\n function onKey(e: KeyboardEvent<HTMLDivElement>): void {\n if (rows.length === 0) return;\n const cur = active ?? rows.length - 1;\n const next = e.key === 'ArrowLeft' ? cur - 1 : e.key === 'ArrowRight' ? cur + 1 : e.key === 'Home' ? 0 : e.key === 'End' ? rows.length - 1 : null;\n if (next === null) return;\n e.preventDefault();\n setActive(Math.max(0, Math.min(rows.length - 1, next)));\n }\n\n const busiest = rows.reduce<Row | null>((best, r) => (!r.stack.unknown && (!best || r.stack.total > best.stack.total) ? r : best), null);\n const summary = ariaLabel ?? `${title}: ${rows.length} columns of ${segments.map((s) => s.label).join(', ')}.` +\n (busiest ? ` Highest: ${busiest.title} with ${fmtTotal(busiest)}.` : '');\n\n const columns: TableColumn<Row>[] = [\n { key: 'label', label: 'Category', render: (r) => r.title },\n ...segments.map((s, i) => ({\n key: s.id,\n label: s.label,\n numeric: true,\n render: (r: Row) => (r.values[i] === null || r.values[i] === undefined ? '—' : formatValue(r.values[i]!)),\n })),\n { key: '__total', label: 'Total', numeric: true, render: fmtTotal },\n ];\n\n const activeRow = active !== null ? rows[active] : undefined;\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n skeleton=\"bars\"\n skeletonHeight={height}\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(r, i) => `${i}:${r.label}`} />}\n footer={\n <ChartLegend\n items={[\n ...segments.map((s, i) => ({ label: s.label, color: colors[i] })),\n ...(rows.some((r) => r.stack.unknown) ? [{ label: 'no data', kind: 'hatch' as const }] : []),\n ]}\n />\n }\n >\n <div\n ref={wrapRef}\n className={`${plot.plotWrap} ${plot.focusable}`}\n data-motion={motion}\n tabIndex={0}\n role=\"group\"\n aria-label={`${title}. Use the left and right arrow keys to read each column.`}\n aria-describedby={liveId}\n onFocus={() => setActive((a) => a ?? (rows.length ? rows.length - 1 : null))}\n onBlur={() => setActive(null)}\n onKeyDown={onKey}\n >\n <svg className={plot.svg} width={width} height={height} viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label={summary}>\n <defs>\n <HatchPattern id={hatchId} />\n </defs>\n {active !== null ? (\n <rect data-role=\"hover-band\" className={plot.hoverBand} x={padL + slot * active + 1} y={PAD_T} width={Math.max(0, slot - 2)} height={plotH} rx={4} />\n ) : null}\n {ticks.map((t, i) => (\n <g key={t}>\n <line className={plot.grid} x1={padL} x2={padL + plotW} y1={crisp(ys(t))} y2={crisp(ys(t))} />\n <text className={plot.tick} x={padL - 6} y={ys(t)} dy=\"0.32em\" textAnchor=\"end\">{yAxis.labels[i]}</text>\n </g>\n ))}\n {rows.map((r, i) => {\n const x = xOf(i);\n const scaleTotal = normalize ? r.stack.total || 1 : 1;\n if (r.stack.unknown) {\n return (\n <rect\n key={i}\n data-unknown=\"true\"\n className={plot.unknownMark}\n fill={`url(#${hatchId})`}\n x={x + 0.5}\n y={PAD_T + plotH - 12.5}\n width={Math.max(1, barW - 1)}\n height={12}\n rx={2}\n />\n );\n }\n const last = r.stack.segments[r.stack.segments.length - 1];\n return (\n <g\n key={i}\n data-column={i}\n className={plot.rise}\n style={{ '--chart-i': i } as CSSProperties}\n opacity={active !== null && active !== i ? 0.55 : 1}\n >\n {r.stack.segments.map((seg) => {\n const y1 = ys(seg.y1 / scaleTotal);\n const y0 = ys(seg.y0 / scaleTotal);\n const isTop = seg === last;\n // 2 px surface gap above every segment but the top one.\n const h = Math.max(0, y0 - y1 - (isTop ? 0 : GAP));\n const y = isTop ? y1 : y1 + GAP;\n return isTop ? (\n <path key={seg.index} d={roundedTopBar(x, y, barW, h)} fill={colors[seg.index]} data-segment={segments[seg.index]!.id} />\n ) : (\n <rect key={seg.index} x={x} y={y} width={barW} height={h} fill={colors[seg.index]} data-segment={segments[seg.index]!.id} />\n );\n })}\n {r.stack.incomplete ? (\n <rect data-incomplete=\"true\" className={plot.noData} x={x} y={ys(r.stack.total / scaleTotal) - 8} width={barW} height={6} rx={2} />\n ) : null}\n </g>\n );\n })}\n <line className={plot.axis} x1={padL} x2={padL + plotW} y1={crisp(PAD_T + plotH)} y2={crisp(PAD_T + plotH)} />\n {labelIdx.map((i) => (\n <text key={i} className={plot.tick} x={xOf(i) + barW / 2} y={height - 8} textAnchor=\"middle\">{rows[i]!.label}</text>\n ))}\n {rows.map((_, i) => (\n <rect\n key={`hit${i}`}\n className={plot.hit}\n x={padL + slot * i}\n y={PAD_T}\n width={slot}\n height={plotH}\n onPointerEnter={() => setActive(i)}\n onPointerLeave={() => setActive((a) => (a === i ? null : a))}\n />\n ))}\n </svg>\n <span id={liveId} className={plot.srOnly} aria-live=\"polite\">\n {activeRow\n ? `${activeRow.title}: ${segments.map((s, i) => `${s.label} ${activeRow.values[i] === null ? 'no data' : formatTip(activeRow.values[i]!)}`).join(', ')}; total ${fmtTotalExact(activeRow)}`\n : ''}\n </span>\n {activeRow && active !== null ? (\n <ChartTooltip\n left={clampTooltipLeft(xOf(active) + barW / 2, width)}\n top={activeRow.stack.unknown ? PAD_T + plotH - 12 : ys(normalize ? 1 : activeRow.stack.total)}\n title={activeRow.title}\n rows={[\n ...segments.map((s, i) => ({\n key: s.id,\n label: s.label,\n value: activeRow.values[i] === null || activeRow.values[i] === undefined ? null : formatTip(activeRow.values[i]!),\n color: colors[i],\n })),\n { key: '__t', label: 'Total', value: activeRow.stack.unknown ? null : fmtTotalExact(activeRow), total: true },\n ]}\n />\n ) : null}\n </div>\n </ChartFrame>\n );\n}\n","/**\n * components/charts/Funnel.tsx — an ordered pipeline (filed → verified →\n * passed → judged ship → merged). One series, so ONE hue for every bar (no\n * value ramp on stages); each bar's length is its share of the first stage,\n * and the step-to-step conversion is written out in words beside it. A zero\n * stage is an empty neutral track (never a full pale bar that reads 100%).\n *\n * Honesty: an unknown stage (null) draws a dashed placeholder and \"unknown\",\n * and the conversions on either side of it are \"—\", never a guessed rate.\n * Works at 375 px: below 480 px the stage label moves above its bar.\n *\n * Polish (verse-visual-quality): each stage's bar grows from its start edge\n * once on mount, top stage first (static under reduced motion — motion.ts).\n */\nimport { useRef, type CSSProperties } from 'react';\nimport { CHART_SEQUENTIAL } from './colors.js';\nimport { ChartFrame, type ChartStatus } from './ChartFrame.js';\nimport { TableView, type TableColumn } from './TableView.js';\nimport { funnelSteps, roundedRightBar, type FunnelStep } from './chart-math.js';\nimport { formatCompact, formatPercent } from './format.js';\nimport { useChartWidth } from './useChartWidth.js';\nimport { useChartMotion } from './motion.js';\nimport plot from './plot.module.css';\n\nexport interface FunnelStage {\n id: string;\n label: string;\n value: number | null;\n}\n\nexport interface FunnelProps {\n title: string;\n description?: string;\n caveat?: string;\n status?: ChartStatus;\n stages: FunnelStage[];\n width?: number;\n color?: string;\n formatValue?: (v: number) => string;\n ariaLabel?: string;\n}\n\nconst BAR_H = 20;\nconst NARROW = 480;\n\ninterface Row extends FunnelStep {\n stage: FunnelStage;\n}\n\nfunction conversionText(step: FunnelStep, index: number): string {\n if (index === 0) return '';\n return step.ofPrevious === null ? '— of previous' : `${formatPercent(step.ofPrevious, step.ofPrevious < 0.1 && step.ofPrevious > 0 ? 1 : 0)} of previous`;\n}\n\nexport function Funnel({\n title,\n description,\n caveat,\n status,\n stages,\n width: fixedWidth,\n color = CHART_SEQUENTIAL,\n formatValue = formatCompact,\n ariaLabel,\n}: FunnelProps) {\n const wrapRef = useRef<HTMLDivElement>(null);\n const width = useChartWidth(wrapRef, fixedWidth);\n const motion = useChartMotion();\n const steps = funnelSteps(stages.map((s) => s.value));\n const rows: Row[] = stages.map((stage, i) => ({ ...steps[i]!, stage }));\n const first = stages[0]?.value ?? null;\n const resolvedStatus: ChartStatus = status ?? (\n stages.length === 0 || first === null\n ? (stages.length === 0 ? { kind: 'empty' } : { kind: 'unknown', reason: `the first stage (${stages[0]!.label}) is unknown` })\n : first === 0 ? { kind: 'empty', message: `No ${stages[0]!.label.toLowerCase()} in this window.` } : { kind: 'ready' }\n );\n\n // Bar length is a share of the widest stage — the first, in any real\n // funnel; the max only guards a later stage that out-counts it (it would\n // overflow the track). When that is 0 every bar is 0: an all-zero window\n // is a row of EMPTY tracks, never full bars that read as 100%.\n const scaleMax = Math.max(0, ...stages.map((s) => (s.value !== null && Number.isFinite(s.value) ? s.value : 0)));\n\n const narrow = width < NARROW;\n const labelW = narrow ? 0 : Math.min(170, Math.round(width * 0.28));\n const valueW = narrow ? 150 : 180;\n const plotW = Math.max(40, width - labelW - valueW);\n const rowH = narrow ? BAR_H + 22 : BAR_H + 14;\n const height = rows.length * rowH + 4;\n\n const summary = ariaLabel ?? `${title}: ` + rows\n .map((r, i) => `${r.stage.label} ${r.value === null ? 'unknown' : formatValue(r.value)}${i > 0 ? ` (${conversionText(r, i)})` : ''}`)\n .join(', ') + '.';\n\n const columns: TableColumn<Row>[] = [\n { key: 'stage', label: 'Stage', render: (r) => r.stage.label },\n { key: 'value', label: 'Count', numeric: true, render: (r) => (r.value === null ? '—' : formatValue(r.value)) },\n { key: 'prev', label: 'Of previous', numeric: true, render: (r) => (r.ofPrevious === null ? '—' : formatPercent(r.ofPrevious, 1)) },\n { key: 'first', label: 'Of first', numeric: true, render: (r) => (r.ofFirst === null ? '—' : formatPercent(r.ofFirst, 1)) },\n ];\n\n return (\n <ChartFrame\n title={title}\n description={description}\n caveat={caveat}\n status={resolvedStatus}\n skeleton=\"funnel\"\n table={<TableView caption={title} columns={columns} rows={rows} rowKey={(r) => r.stage.id} />}\n >\n <div ref={wrapRef} className={plot.plotWrap} data-motion={motion}>\n <svg className={plot.svg} width={width} height={height} viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label={summary}>\n {rows.map((r, i) => {\n const y = i * rowH + (narrow ? 18 : 7);\n const barW = r.value === null || !(r.value > 0) || scaleMax <= 0 ? 0 : Math.max(3, (r.value / scaleMax) * plotW);\n const textY = y + BAR_H / 2;\n return (\n <g key={r.stage.id} data-stage={r.stage.id}>\n <text className={plot.label} x={narrow ? 0 : labelW - 10} y={narrow ? y - 5 : textY} dy={narrow ? undefined : '0.32em'} textAnchor={narrow ? 'start' : 'end'}>\n {r.stage.label}\n </text>\n {/* The track is the neutral empty-meter gray (plot.module.css\n .trackEmpty), not the pale azure chart track: at 0 it must\n read as empty, and it must be SEEN — it is what every\n bar's length is a share of. */}\n <rect data-role=\"track\" className={plot.trackEmpty} x={labelW} y={y} width={plotW} height={BAR_H} rx={4} />\n {r.value === null ? (\n <rect data-unknown=\"true\" className={plot.noData} x={labelW} y={y} width={Math.min(plotW, 48)} height={BAR_H} rx={4} />\n ) : barW > 0 ? (\n <path data-role=\"bar\" className={plot.grow} style={{ '--chart-i': i } as CSSProperties} d={roundedRightBar(labelW, y, barW, BAR_H)} fill={color} />\n ) : null}\n <text className={plot.labelStrong} x={labelW + plotW + 10} y={textY} dy=\"0.32em\">\n {r.value === null ? 'unknown' : formatValue(r.value)}\n {i > 0 ? <tspan className={plot.tick} dx={8}>{conversionText(r, i)}</tspan> : null}\n </text>\n </g>\n );\n })}\n </svg>\n </div>\n </ChartFrame>\n );\n}\n"],"mappings":"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"}
|