@ashlr/hub 3.16.0 → 3.16.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 +28 -0
- package/README.md +2 -2
- package/dist/authority-surface.json +5 -5
- package/dist/build-identity.json +2 -2
- package/dist/core/daemon/loop.js +1 -0
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/daemon/tick-hooks.d.ts +2 -0
- package/dist/core/daemon/tick-hooks.js.map +1 -1
- package/dist/core/fleet/tick-hooks-live.d.ts +2 -1
- package/dist/core/fleet/tick-hooks-live.js +49 -7
- package/dist/core/fleet/tick-hooks-live.js.map +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js +2 -0
- package/dist/core/web/public/next/assets/ActionMenu-Bv-kQxD4.js.map +1 -0
- package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-Be7Frv-G.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js +2 -0
- package/dist/core/web/public/next/assets/AgentDetailScreen-DzqHmufO.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js +2 -0
- package/dist/core/web/public/next/assets/AgentToolsSheet-D00kLnIq.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js +2 -0
- package/dist/core/web/public/next/assets/AgentToolsStrip-CSus9Dr3.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js +2 -0
- package/dist/core/web/public/next/assets/AgentsScreen-WoR0oSLZ.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js +3 -0
- package/dist/core/web/public/next/assets/AgentsSection-D5mKoOhH.js.map +1 -0
- package/dist/core/web/public/next/assets/App-Uy6lDpKw.js +8 -0
- package/dist/core/web/public/next/assets/App-Uy6lDpKw.js.map +1 -0
- package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-Cfhmc4r3.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js +2 -0
- package/dist/core/web/public/next/assets/AreaTrend-Bz3ETKPk.js.map +1 -0
- package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js +2 -0
- package/dist/core/web/public/next/assets/AutomationsSection-D4K8db0o.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js +3 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-DUiNMgr8.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js +2 -0
- package/dist/core/web/public/next/assets/AutonomySection-wxRZ7vSw.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js +2 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-B-PCVnFO.js.map +1 -0
- package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js +2 -0
- package/dist/core/web/public/next/assets/BranchBar-Bs4r_Vh6.js.map +1 -0
- package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js +7 -0
- package/dist/core/web/public/next/assets/BrowserPanel-BMQcviI1.js.map +1 -0
- package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js +2 -0
- package/dist/core/web/public/next/assets/BudgetControl-A4TEONtT.js.map +1 -0
- package/dist/core/web/public/next/assets/Button-CMR_Op-0.js +2 -0
- package/dist/core/web/public/next/assets/Button-CMR_Op-0.js.map +1 -0
- package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-B-2NDrA5.js.map +1 -0
- package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js +16 -0
- package/dist/core/web/public/next/assets/ChangesPaneHost-CS5qGjwM.js.map +1 -0
- package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js +2 -0
- package/dist/core/web/public/next/assets/ChartFrame-sZTnZkVd.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js +2 -0
- package/dist/core/web/public/next/assets/ChatPanes-CicgTVpN.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-Cc6sudpF.js.map +1 -0
- package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js +5 -0
- package/dist/core/web/public/next/assets/ChecksPanel-BGWgv8Zb.js.map +1 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-CqsidwfU.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js +3 -0
- package/dist/core/web/public/next/assets/CommandPalette-rwEZ20MN.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js +3 -0
- package/dist/core/web/public/next/assets/CommandSection-C2CLkVXN.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js +9 -0
- package/dist/core/web/public/next/assets/CommandWorkflowForm-DAbPIdI3.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js +3 -0
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-fqHtzYXX.js.map +1 -0
- package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js +4 -0
- package/dist/core/web/public/next/assets/CompareDialog-Cwfpaa8I.js.map +1 -0
- package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js +2 -0
- package/dist/core/web/public/next/assets/ComputerControl-DU0cuVSY.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-B_wCnbcC.js.map +1 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js +2 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-CxMh53yX.js.map +1 -0
- package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js +2 -0
- package/dist/core/web/public/next/assets/DevinStopDialog-D9Bziccz.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-DI5D6Is2.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js +2 -0
- package/dist/core/web/public/next/assets/DiffPane-Buo19Bqr.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js +2 -0
- package/dist/core/web/public/next/assets/DiffViewer-dO0RQoqA.js.map +1 -0
- package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-KJUHjoiG.js.map +1 -0
- package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js +2 -0
- package/dist/core/web/public/next/assets/EmptyState-C3BUt2Ev.js.map +1 -0
- package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js +2 -0
- package/dist/core/web/public/next/assets/Epistemic-DlG2QqKJ.js.map +1 -0
- package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js +2 -0
- package/dist/core/web/public/next/assets/EvidenceTimeline-D1GB9F-f.js.map +1 -0
- package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js +2 -0
- package/dist/core/web/public/next/assets/FilesPane-icSP5vPt.js.map +1 -0
- package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js +2 -0
- package/dist/core/web/public/next/assets/FleetScreen-V_X8SeD3.js.map +1 -0
- package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js +5 -0
- package/dist/core/web/public/next/assets/FleetSection-xyhfpRJy.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js +2 -0
- package/dist/core/web/public/next/assets/Funnel-BlzQ5FOU.js.map +1 -0
- package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js +2 -0
- package/dist/core/web/public/next/assets/GearTray-Dvu-ee-h.js.map +1 -0
- package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js +2 -0
- package/dist/core/web/public/next/assets/GitDialogs-o0eCEqAN.js.map +1 -0
- package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js +3 -0
- package/dist/core/web/public/next/assets/GrowthSection-CyqJOzob.js.map +1 -0
- package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js +2 -0
- package/dist/core/web/public/next/assets/HandoffDialog-0uTNyK99.js.map +1 -0
- package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js +3 -0
- package/dist/core/web/public/next/assets/HomeBody-DJjN3GTV.js.map +1 -0
- package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js +2 -0
- package/dist/core/web/public/next/assets/HomeSeats-IJvjh9iH.js.map +1 -0
- package/dist/core/web/public/next/assets/Input-CsSZI8QC.js +2 -0
- package/dist/core/web/public/next/assets/Input-CsSZI8QC.js.map +1 -0
- package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js +9 -0
- package/dist/core/web/public/next/assets/LaunchDialog-DReYqlI0.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js +2 -0
- package/dist/core/web/public/next/assets/LeaderCard-82indlOE.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js +3 -0
- package/dist/core/web/public/next/assets/LeaderConversation-8hDF6Gh3.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js +2 -0
- package/dist/core/web/public/next/assets/LeaderScreen-BxPiwHcT.js.map +1 -0
- package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js +2 -0
- package/dist/core/web/public/next/assets/LessonsPanel-BG558qil.js.map +1 -0
- package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js +2 -0
- package/dist/core/web/public/next/assets/LiveTimer-DUgUBr49.js.map +1 -0
- package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js +2 -0
- package/dist/core/web/public/next/assets/LocalSeatBadge-D6U4Q2P3.js.map +1 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js +2 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-Brn70z84.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js +2 -0
- package/dist/core/web/public/next/assets/McpSection-Dz8Ga2Rg.js.map +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js +3 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-CQfYQaXB.js.map +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js +72 -0
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DPaNQMj8.js.map +1 -0
- package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js +2 -0
- package/dist/core/web/public/next/assets/Meter-TnD7Ris6.js.map +1 -0
- package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js +2 -0
- package/dist/core/web/public/next/assets/MicButton-Dc9g2Z_E.js.map +1 -0
- package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js +3 -0
- package/dist/core/web/public/next/assets/MindSection-DGpYq8c7.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js +2 -0
- package/dist/core/web/public/next/assets/MobileComposer-DbSZ2rxa.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js +2 -0
- package/dist/core/web/public/next/assets/MobileGuardSheet-qQJev_w3.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js +3 -0
- package/dist/core/web/public/next/assets/MobileRuntime-BEnY4Uvs.js.map +1 -0
- package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js +2 -0
- package/dist/core/web/public/next/assets/MoreScreen-CG0E5S8G.js.map +1 -0
- package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js +7 -0
- package/dist/core/web/public/next/assets/MultiModelBar-DgMyP8IC.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-T3r9EtHi.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js +3 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BDAcTlK8.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouList-BFubkjzF.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouScreen-B3Dk15T_.js.map +1 -0
- package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js +2 -0
- package/dist/core/web/public/next/assets/NewAgentScreen-zf1bqGYC.js.map +1 -0
- package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js +4 -0
- package/dist/core/web/public/next/assets/NewChatDialog-el95cRTF.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-Bi8gZOuz.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingGate-CRexmMn5.js.map +1 -0
- package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js +9 -0
- package/dist/core/web/public/next/assets/PlaybooksSection-R2_wyVpQ.js.map +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js +2 -0
- package/dist/core/web/public/next/assets/PreviewPane-Djw_GJ20.js.map +1 -0
- package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js +2 -0
- package/dist/core/web/public/next/assets/ProviderLogo-DIfJXNWf.js.map +1 -0
- package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js +2 -0
- package/dist/core/web/public/next/assets/RailStatus-B3eI2AaD.js.map +1 -0
- package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js +2 -0
- package/dist/core/web/public/next/assets/ReasoningPane-ExT8XgQB.js.map +1 -0
- package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js +2 -0
- package/dist/core/web/public/next/assets/ReasoningSheet-YF4OS4lM.js.map +1 -0
- package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js +2 -0
- package/dist/core/web/public/next/assets/RefreshIndicator-BJoefKSa.js.map +1 -0
- package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js +2 -0
- package/dist/core/web/public/next/assets/RemoteMobileApp-C2SflRkm.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js +7 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-FkAdn3Sv.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-CFHrLqmA.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DtnZgDr_.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-DTz5-ndE.js.map +1 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js +2 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-DvoDMV54.js.map +1 -0
- package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js +2 -0
- package/dist/core/web/public/next/assets/RunInDevinAction-BwCkFxLX.js.map +1 -0
- package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js +3 -0
- package/dist/core/web/public/next/assets/ScreenHost-jdgnt5U2.js.map +1 -0
- package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js +3 -0
- package/dist/core/web/public/next/assets/SeatSelector-DnpH5D_D.js.map +1 -0
- package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js +2 -0
- package/dist/core/web/public/next/assets/Segmented-BECZDbsg.js.map +1 -0
- package/dist/core/web/public/next/assets/Select-DjQDkPJU.js +2 -0
- package/dist/core/web/public/next/assets/Select-DjQDkPJU.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js +2 -0
- package/dist/core/web/public/next/assets/SessionGate-CWuI8dDR.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js +2 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-DRsIQu29.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js +2 -0
- package/dist/core/web/public/next/assets/SessionSearch-Bya3EXJl.js.map +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-CXjiHNQb.js.map +1 -0
- package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js +2 -0
- package/dist/core/web/public/next/assets/SetupChecklist-YUMOJNbk.js.map +1 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js +3 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-BP2WgGMi.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js +2 -0
- package/dist/core/web/public/next/assets/Sheet-Czuz3h6A.js.map +1 -0
- package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js +2 -0
- package/dist/core/web/public/next/assets/ShortcutsOverlay-D_ICte5N.js.map +1 -0
- package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-CcI1_B9Y.js.map +1 -0
- package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js +2 -0
- package/dist/core/web/public/next/assets/SkipToContent-B0GAKhYQ.js.map +1 -0
- package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js +2 -0
- package/dist/core/web/public/next/assets/Slider-Dzv55CNY.js.map +1 -0
- package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js +2 -0
- package/dist/core/web/public/next/assets/SourcesPane-rxRCi7cL.js.map +1 -0
- package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js +2 -0
- package/dist/core/web/public/next/assets/SourcesPanel-LyMp7aLt.js.map +1 -0
- package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js +2 -0
- package/dist/core/web/public/next/assets/StatTile-1_HPOflX.js.map +1 -0
- package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js +2 -0
- package/dist/core/web/public/next/assets/StatusBadge-zR7YgIa8.js.map +1 -0
- package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js +2 -0
- package/dist/core/web/public/next/assets/StepBand-BGX2RpFV.js.map +1 -0
- package/dist/core/web/public/next/assets/Surface-BEToBKC3.js +2 -0
- package/dist/core/web/public/next/assets/Surface-BEToBKC3.js.map +1 -0
- package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js +2 -0
- package/dist/core/web/public/next/assets/Swimlane-DAf7u5p3.js.map +1 -0
- package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js +2 -0
- package/dist/core/web/public/next/assets/Switch-mvc9lQcT.js.map +1 -0
- package/dist/core/web/public/next/assets/Tag-Chqolzxz.js +2 -0
- package/dist/core/web/public/next/assets/Tag-Chqolzxz.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js +3 -0
- package/dist/core/web/public/next/assets/TerminalPane-4wn3AxS0.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js +26 -0
- package/dist/core/web/public/next/assets/TerminalPane-D7-O0ssr.js.map +1 -0
- package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js +2 -0
- package/dist/core/web/public/next/assets/ThinkingBlock-gWESdTxs.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js +2 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-XqJvgt7b.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js +9 -0
- package/dist/core/web/public/next/assets/UniverseView-D0j9HVku.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js +3 -0
- package/dist/core/web/public/next/assets/UsageSection-DnSPo4Ua.js.map +1 -0
- package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js +2 -0
- package/dist/core/web/public/next/assets/UsePlaybookAction-71M3gO7g.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DO84Xscn.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js +3 -0
- package/dist/core/web/public/next/assets/VerseMobileApp-CrCDQcw5.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js +2 -0
- package/dist/core/web/public/next/assets/VerseShared-CFE5B-IY.js.map +1 -0
- package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js +2 -0
- package/dist/core/web/public/next/assets/VoiceHud-CumHX7If.js.map +1 -0
- package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js +2 -0
- package/dist/core/web/public/next/assets/VoiceInput-CWTVwTwV.js.map +1 -0
- package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js +2 -0
- package/dist/core/web/public/next/assets/WikiSection-BIGSx4z-.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js +6 -0
- package/dist/core/web/public/next/assets/Workspace-5sa9Xggd.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-BPyW8QC-.js +2 -0
- package/dist/core/web/public/next/assets/actions-BPyW8QC-.js.map +1 -0
- package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js +2 -0
- package/dist/core/web/public/next/assets/agent-tools-client-Si2ncqwV.js.map +1 -0
- package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js +7 -0
- package/dist/core/web/public/next/assets/agent-transcript-model-D-34Ll59.js.map +1 -0
- package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js +2 -0
- package/dist/core/web/public/next/assets/agents-focus-E_TBTTmZ.js.map +1 -0
- package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js +2 -0
- package/dist/core/web/public/next/assets/app-version-y5sfMXiE.js.map +1 -0
- package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-BnjwUIUH.js.map +1 -0
- package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js +2 -0
- package/dist/core/web/public/next/assets/ask-seat-CWE-jY2D.js.map +1 -0
- package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js +2 -0
- package/dist/core/web/public/next/assets/authority-model-DVMxkDV4.js.map +1 -0
- package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js +2 -0
- package/dist/core/web/public/next/assets/automations-focus-B-lklYid.js.map +1 -0
- package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js +2 -0
- package/dist/core/web/public/next/assets/budget-model-Bwv4MZSa.js.map +1 -0
- package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js +2 -0
- package/dist/core/web/public/next/assets/budget-queries-t-Bdoly3.js.map +1 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-CJ5F-CtB.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-Di0_Q980.js +2 -0
- package/dist/core/web/public/next/assets/charts-Di0_Q980.js.map +1 -0
- package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js +2 -0
- package/dist/core/web/public/next/assets/chat-pane-data-5MDEsLff.js.map +1 -0
- package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js +2 -0
- package/dist/core/web/public/next/assets/checkpoint-queries-6thqsAiE.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js +2 -0
- package/dist/core/web/public/next/assets/cloud-model-CzKeuxfm.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-DrR_QeUK.js.map +1 -0
- package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-COH2G2xv.js.map +1 -0
- package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js +2 -0
- package/dist/core/web/public/next/assets/composer-queries-GxFt1UQm.js.map +1 -0
- package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js +2 -0
- package/dist/core/web/public/next/assets/composer-state-DTAoie2b.js.map +1 -0
- package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js +2 -0
- package/dist/core/web/public/next/assets/connectivity-zM4_O-XZ.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js +2 -0
- package/dist/core/web/public/next/assets/context-model-CKXUZd0O.js.map +1 -0
- package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js +3 -0
- package/dist/core/web/public/next/assets/context-model-DYkDKK6C.js.map +1 -0
- package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js +2 -0
- package/dist/core/web/public/next/assets/context-queries-D0Aydl5L.js.map +1 -0
- package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js +2 -0
- package/dist/core/web/public/next/assets/control-queries-C5uQTzJi.js.map +1 -0
- package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js +2 -0
- package/dist/core/web/public/next/assets/copy-setup-IHGsNfkz.js.map +1 -0
- package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js +2 -0
- package/dist/core/web/public/next/assets/deep-link-DgTIAuc2.js.map +1 -0
- package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js +2 -0
- package/dist/core/web/public/next/assets/device-permissions-BplZgouU.js.map +1 -0
- package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js +2 -0
- package/dist/core/web/public/next/assets/devin-queries-Bltl6Jz2.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js +2 -0
- package/dist/core/web/public/next/assets/dock-icons-DPXFt10d.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js +2 -0
- package/dist/core/web/public/next/assets/dock-panes-DNSv-1Tq.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js +2 -0
- package/dist/core/web/public/next/assets/fleet-control-queries-DZEa-aFz.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-D4n8ErhA.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-BO1MHMFz.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js +3 -0
- package/dist/core/web/public/next/assets/fleet-state-yM0mV9_P.js.map +1 -0
- package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js +2 -0
- package/dist/core/web/public/next/assets/focus-trap-C2rynI8q.js.map +1 -0
- package/dist/core/web/public/next/assets/format-V6IiIMAL.js +2 -0
- package/dist/core/web/public/next/assets/format-V6IiIMAL.js.map +1 -0
- package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js +5 -0
- package/dist/core/web/public/next/assets/git-model-rVA0Jd0g.js.map +1 -0
- package/dist/core/web/public/next/assets/global-CYfRwH6t.js +3 -0
- package/dist/core/web/public/next/assets/global-CYfRwH6t.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js +3 -0
- package/dist/core/web/public/next/assets/guarded-action-A9ZsIE8S.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js +2 -0
- package/dist/core/web/public/next/assets/guarded-runners-xMakDn92.js.map +1 -0
- package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js +2 -0
- package/dist/core/web/public/next/assets/headroom-C4dyfw7P.js.map +1 -0
- package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js +2 -0
- package/dist/core/web/public/next/assets/health-queries-BHoSyIcL.js.map +1 -0
- package/dist/core/web/public/next/assets/icons-BBm_Cy62.js +2 -0
- package/dist/core/web/public/next/assets/icons-BBm_Cy62.js.map +1 -0
- package/dist/core/web/public/next/assets/index-_izD07R9.js +11 -0
- package/dist/core/web/public/next/assets/index-_izD07R9.js.map +1 -0
- package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js +2 -0
- package/dist/core/web/public/next/assets/jev-queries-D-AMM0sw.js.map +1 -0
- package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js +2 -0
- package/dist/core/web/public/next/assets/ladder-queries-BIpJVqxu.js.map +1 -0
- package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js +2 -0
- package/dist/core/web/public/next/assets/leader-focus-Dh4gXTSi.js.map +1 -0
- package/dist/core/web/public/next/assets/live-model-D97AfBFz.js +2 -0
- package/dist/core/web/public/next/assets/live-model-D97AfBFz.js.map +1 -0
- package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js +2 -0
- package/dist/core/web/public/next/assets/mind.module-rVKz51LB.js.map +1 -0
- package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js +2 -0
- package/dist/core/web/public/next/assets/mobile-actions-V26-lGbH.js.map +1 -0
- package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js +2 -0
- package/dist/core/web/public/next/assets/mobile-toast-9-WQbWQu.js.map +1 -0
- package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js +7 -0
- package/dist/core/web/public/next/assets/multimodel-flows-D309YXSk.js.map +1 -0
- package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js +2 -0
- package/dist/core/web/public/next/assets/multimodel-queries-BuslyWtq.js.map +1 -0
- package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js +2 -0
- package/dist/core/web/public/next/assets/mutations-B9AZoqNR.js.map +1 -0
- package/dist/core/web/public/next/assets/nav-DC0ynjdb.js +2 -0
- package/dist/core/web/public/next/assets/nav-DC0ynjdb.js.map +1 -0
- package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js +2 -0
- package/dist/core/web/public/next/assets/needs-you-actions-BOHN9fg7.js.map +1 -0
- package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js +2 -0
- package/dist/core/web/public/next/assets/needs-you-model-ChGg3r5r.js.map +1 -0
- package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js +2 -0
- package/dist/core/web/public/next/assets/open-terminal-5F1FNUEB.js.map +1 -0
- package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js +2 -0
- package/dist/core/web/public/next/assets/open-terminal-request-SjPIZmAt.js.map +1 -0
- package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js +2 -0
- package/dist/core/web/public/next/assets/overnight-queries-Dc46kMfg.js.map +1 -0
- package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js +2 -0
- package/dist/core/web/public/next/assets/palette-handoff-xkWF9v2M.js.map +1 -0
- package/dist/core/web/public/next/assets/panes-DOXM13lF.js +3 -0
- package/dist/core/web/public/next/assets/panes-DOXM13lF.js.map +1 -0
- package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js +2 -0
- package/dist/core/web/public/next/assets/path-display-C6BmdnBS.js.map +1 -0
- package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js +2 -0
- package/dist/core/web/public/next/assets/percent-text-CSk89zQF.js.map +1 -0
- package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js +2 -0
- package/dist/core/web/public/next/assets/playbook-composer-Bz-fFxXW.js.map +1 -0
- package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js +2 -0
- package/dist/core/web/public/next/assets/playbook-focus-BXu0yrHF.js.map +1 -0
- package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js +2 -0
- package/dist/core/web/public/next/assets/playbooks-queries-Cpnl3avl.js.map +1 -0
- package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js +2 -0
- package/dist/core/web/public/next/assets/preloaded-E_jepvvg.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-Bynv7bPl.js +1 -0
- package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js +2 -0
- package/dist/core/web/public/next/assets/pwa-D2lyCiGV.js.map +1 -0
- package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js +2 -0
- package/dist/core/web/public/next/assets/queries-C0Bs3TOo.js.map +1 -0
- package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js +2 -0
- package/dist/core/web/public/next/assets/reasoning-pref-DDPtfTM3.js.map +1 -0
- package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js +3 -0
- package/dist/core/web/public/next/assets/remote-session-Dj27m1xb.js.map +1 -0
- package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js +2 -0
- package/dist/core/web/public/next/assets/resolved-store-B2iJa5C2.js.map +1 -0
- package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js +2 -0
- package/dist/core/web/public/next/assets/resources-queries-pVRhOTEt.js.map +1 -0
- package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js +2 -0
- package/dist/core/web/public/next/assets/reveal-anchor-BAMmxMeu.js.map +1 -0
- package/dist/core/web/public/next/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js +2 -0
- package/dist/core/web/public/next/assets/seat-readiness-a5B9iqP-.js.map +1 -0
- package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js +2 -0
- package/dist/core/web/public/next/assets/seat-subscription-Cut6eC-8.js.map +1 -0
- package/dist/core/web/public/next/assets/sheet-BxZSmdad.js +2 -0
- package/dist/core/web/public/next/assets/sheet-BxZSmdad.js.map +1 -0
- package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js +2 -0
- package/dist/core/web/public/next/assets/sidebar-model-COzIPSiP.js.map +1 -0
- package/dist/core/web/public/next/assets/slots-BJc3RJkV.js +3 -0
- package/dist/core/web/public/next/assets/slots-BJc3RJkV.js.map +1 -0
- package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js +4 -0
- package/dist/core/web/public/next/assets/sources-queries-DCKiXNAt.js.map +1 -0
- package/dist/core/web/public/next/assets/sse-It4xa040.js +2 -0
- package/dist/core/web/public/next/assets/sse-It4xa040.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-NFl_uS--.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-jMaLNI6z.js.map +1 -0
- package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js +2 -0
- package/dist/core/web/public/next/assets/tasks-model-CbmPgWL8.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js +2 -0
- package/dist/core/web/public/next/assets/terminal-client-DTXAf2-x.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js +2 -0
- package/dist/core/web/public/next/assets/terminal-icons-qBCOwqu-.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js +6 -0
- package/dist/core/web/public/next/assets/terminal-view-CksH3CsK.js.map +1 -0
- package/dist/core/web/public/next/assets/thread-data-C8z55msn.js +2 -0
- package/dist/core/web/public/next/assets/thread-data-C8z55msn.js.map +1 -0
- package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js +2 -0
- package/dist/core/web/public/next/assets/ui-parts-CcpmRBwj.js.map +1 -0
- package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js +2 -0
- package/dist/core/web/public/next/assets/usage-queries-BxrTLCaJ.js.map +1 -0
- package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js +2 -0
- package/dist/core/web/public/next/assets/use-chat-activity-O8I0Ho0m.js.map +1 -0
- package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-BZ6Bye9l.js.map +1 -0
- package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js +2 -0
- package/dist/core/web/public/next/assets/use-ticker-CUsNALmP.js.map +1 -0
- package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js +2 -0
- package/dist/core/web/public/next/assets/use-token-gate-DgnO9fbv.js.map +1 -0
- package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js +2 -0
- package/dist/core/web/public/next/assets/useAutoSeat-CIEXM-Q5.js.map +1 -0
- package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js +2 -0
- package/dist/core/web/public/next/assets/useOnboarding-BAmRBxkI.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js +2 -0
- package/dist/core/web/public/next/assets/useSeatHealth-DPkSSddF.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js +2 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-CpsRhfmt.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js +2 -0
- package/dist/core/web/public/next/assets/useVerseSession-DeW1iFpw.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js +2 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-CvUqjRmZ.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js +2 -0
- package/dist/core/web/public/next/assets/verse-bootstrap-query-ANtL2OPN.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-C92Qt7rh.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-DAOz9LrY.js.map +1 -0
- package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js +3 -0
- package/dist/core/web/public/next/assets/warmup-B2DWWeeC.js.map +1 -0
- package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js +2 -0
- package/dist/core/web/public/next/assets/why-seat-model-Bn6O26JJ.js.map +1 -0
- package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js +2 -0
- package/dist/core/web/public/next/assets/wiki-focus-CwC-yoT9.js.map +1 -0
- package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js +2 -0
- package/dist/core/web/public/next/assets/workspace-model-C-q_I8xN.js.map +1 -0
- package/dist/core/web/public/next/index.html +2 -1
- package/dist/core/web/remote-gateway-policy.js +5 -0
- package/dist/core/web/remote-gateway-policy.js.map +1 -1
- package/dist/core/web/static.d.ts +4 -3
- package/dist/core/web/static.js +8 -5
- package/dist/core/web/static.js.map +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/node_modules/fast-uri/index.js +20 -5
- package/node_modules/fast-uri/lib/utils.js +8 -1
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
- package/node_modules/ip-address/README.md +134 -134
- package/node_modules/ip-address/dist/address-error.d.ts +11 -0
- package/node_modules/ip-address/dist/address-error.js.map +1 -1
- package/node_modules/ip-address/dist/ipv4.d.ts +22 -6
- package/node_modules/ip-address/dist/ipv4.js +22 -6
- package/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/ip-address/dist/ipv6.d.ts +26 -8
- package/node_modules/ip-address/dist/ipv6.js +46 -29
- package/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/ip-address/dist/v6/constants.js +1 -0
- package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/package.json +5 -4
- package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js +0 -2
- package/dist/core/web/public/next/assets/ActionMenu-Bia8Re6u.js.map +0 -1
- package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-C1LtnA8c.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js +0 -2
- package/dist/core/web/public/next/assets/AgentDetailScreen-DuoXrbol.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js +0 -2
- package/dist/core/web/public/next/assets/AgentToolsSheet-Bdfk4SF-.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js +0 -2
- package/dist/core/web/public/next/assets/AgentToolsStrip-BN1otiqC.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js +0 -2
- package/dist/core/web/public/next/assets/AgentsScreen-BxHFaI48.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js +0 -3
- package/dist/core/web/public/next/assets/AgentsSection-mYIA8Lyk.js.map +0 -1
- package/dist/core/web/public/next/assets/App-DebYuj1v.js +0 -8
- package/dist/core/web/public/next/assets/App-DebYuj1v.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-W30duGQA.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-ZnnIjBGU.js.map +0 -1
- package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js +0 -2
- package/dist/core/web/public/next/assets/AutomationsSection-B4N0V-vz.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js +0 -3
- package/dist/core/web/public/next/assets/AutonomyOffState-C9S_FXc0.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-oMQfNEQN.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js +0 -2
- package/dist/core/web/public/next/assets/AutonomyStatus-CdHOyhrV.js.map +0 -1
- package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-Bo5b8-hr.js.map +0 -1
- package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js +0 -7
- package/dist/core/web/public/next/assets/BrowserPanel-D02omBK0.js.map +0 -1
- package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-BtPTi8qI.js.map +0 -1
- package/dist/core/web/public/next/assets/Button-DP2ImS5n.js +0 -2
- package/dist/core/web/public/next/assets/Button-DP2ImS5n.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-ChYPcr23.js.map +0 -1
- package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js +0 -16
- package/dist/core/web/public/next/assets/ChangesPaneHost-C53_94Kn.js.map +0 -1
- package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js +0 -2
- package/dist/core/web/public/next/assets/ChartFrame-CtFLETWA.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js +0 -2
- package/dist/core/web/public/next/assets/ChatPanes-CyAK9VAi.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-DV9smoPe.js.map +0 -1
- package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js +0 -5
- package/dist/core/web/public/next/assets/ChecksPanel-B6T2sjc_.js.map +0 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js +0 -2
- package/dist/core/web/public/next/assets/CloudBudgetForm-D8RbdAC7.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js +0 -3
- package/dist/core/web/public/next/assets/CommandPalette-C04gGTES.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js +0 -3
- package/dist/core/web/public/next/assets/CommandSection-Be8VFAEU.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js +0 -9
- package/dist/core/web/public/next/assets/CommandWorkflowForm-D5A7c2PE.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js +0 -3
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-CGrRWfzQ.js.map +0 -1
- package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js +0 -4
- package/dist/core/web/public/next/assets/CompareDialog-C2ryiEtF.js.map +0 -1
- package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js +0 -2
- package/dist/core/web/public/next/assets/ComputerControl-C4oW7Zim.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js +0 -2
- package/dist/core/web/public/next/assets/ConfirmDialog-J8CszPmj.js.map +0 -1
- package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js +0 -2
- package/dist/core/web/public/next/assets/DeleteChatDialog-BT5y9cR2.js.map +0 -1
- package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js +0 -2
- package/dist/core/web/public/next/assets/DevinStopDialog-CADdSqha.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-BYIKNPcH.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-D_CC9a5x.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js +0 -2
- package/dist/core/web/public/next/assets/DiffViewer-DjtLl7ro.js.map +0 -1
- package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-BHbosAjM.js.map +0 -1
- package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js +0 -2
- package/dist/core/web/public/next/assets/EmptyState-BEXDoNZd.js.map +0 -1
- package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js +0 -2
- package/dist/core/web/public/next/assets/Epistemic-BPBAmLNh.js.map +0 -1
- package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js +0 -2
- package/dist/core/web/public/next/assets/EvidenceTimeline-D2nuo6Oo.js.map +0 -1
- package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js +0 -2
- package/dist/core/web/public/next/assets/FilesPane-BQBcWyxr.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js +0 -2
- package/dist/core/web/public/next/assets/FleetScreen-YXDuVwKd.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js +0 -5
- package/dist/core/web/public/next/assets/FleetSection-D2M7u9zG.js.map +0 -1
- package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js +0 -2
- package/dist/core/web/public/next/assets/Funnel-rnPUaoN7.js.map +0 -1
- package/dist/core/web/public/next/assets/GearTray-Cc14h572.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-Cc14h572.js.map +0 -1
- package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js +0 -2
- package/dist/core/web/public/next/assets/GitDialogs-BSTlyNJR.js.map +0 -1
- package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js +0 -3
- package/dist/core/web/public/next/assets/GrowthSection-BK63EJn9.js.map +0 -1
- package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-DD4M-C7v.js.map +0 -1
- package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js +0 -3
- package/dist/core/web/public/next/assets/HomeBody-OEhTpkk9.js.map +0 -1
- package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js +0 -2
- package/dist/core/web/public/next/assets/HomeSeats-CJCxRUlD.js.map +0 -1
- package/dist/core/web/public/next/assets/Input-BEF-ScuG.js +0 -2
- package/dist/core/web/public/next/assets/Input-BEF-ScuG.js.map +0 -1
- package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js +0 -9
- package/dist/core/web/public/next/assets/LaunchDialog-CERI717u.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-3P95vgVU.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js +0 -3
- package/dist/core/web/public/next/assets/LeaderConversation-DjZS2PrX.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js +0 -2
- package/dist/core/web/public/next/assets/LeaderScreen-Dw5jDfWv.js.map +0 -1
- package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js +0 -2
- package/dist/core/web/public/next/assets/LessonsPanel-Wy6TVWEv.js.map +0 -1
- package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js +0 -2
- package/dist/core/web/public/next/assets/LiveTimer-c18lVIBC.js.map +0 -1
- package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js +0 -2
- package/dist/core/web/public/next/assets/LocalSeatBadge-BfUUuXE5.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js +0 -2
- package/dist/core/web/public/next/assets/MatrixHeatmap-DTOumwCS.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-D9eJislZ.js.map +0 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js +0 -3
- package/dist/core/web/public/next/assets/MessageMarkdown-Dkw4V24c.js.map +0 -1
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js +0 -72
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-VOSfkJpd.js.map +0 -1
- package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js +0 -2
- package/dist/core/web/public/next/assets/Meter-dMqKBaVV.js.map +0 -1
- package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js +0 -2
- package/dist/core/web/public/next/assets/MicButton-92I_NsaT.js.map +0 -1
- package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js +0 -3
- package/dist/core/web/public/next/assets/MindSection-CaGckJiR.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js +0 -2
- package/dist/core/web/public/next/assets/MobileComposer-BOFWmkku.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js +0 -2
- package/dist/core/web/public/next/assets/MobileGuardSheet-CY3Iulte.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js +0 -3
- package/dist/core/web/public/next/assets/MobileRuntime-C-GtV4jT.js.map +0 -1
- package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js +0 -2
- package/dist/core/web/public/next/assets/MoreScreen-BaH8iEnb.js.map +0 -1
- package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js +0 -7
- package/dist/core/web/public/next/assets/MultiModelBar-7DHuXGht.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-D522NXsm.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js +0 -3
- package/dist/core/web/public/next/assets/NeedsYouDrawer-6ud1RHOU.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouList-E-yy-xKE.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouScreen-D13Q7iU8.js.map +0 -1
- package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js +0 -2
- package/dist/core/web/public/next/assets/NewAgentScreen-BLtU1u-d.js.map +0 -1
- package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js +0 -4
- package/dist/core/web/public/next/assets/NewChatDialog-BL15LCaj.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-7LRC7FlX.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingGate-DRlv8QZ5.js.map +0 -1
- package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js +0 -9
- package/dist/core/web/public/next/assets/PlaybooksSection-D_uQ-NB3.js.map +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-DubyNi8H.js.map +0 -1
- package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js +0 -2
- package/dist/core/web/public/next/assets/ProviderLogo-CWrojWjI.js.map +0 -1
- package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-xjOcjL0v.js.map +0 -1
- package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js +0 -2
- package/dist/core/web/public/next/assets/ReasoningPane-M7ZfvEc5.js.map +0 -1
- package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js +0 -2
- package/dist/core/web/public/next/assets/ReasoningSheet-RLLj2oys.js.map +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js +0 -2
- package/dist/core/web/public/next/assets/RefreshIndicator-CEMRNruu.js.map +0 -1
- package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js +0 -2
- package/dist/core/web/public/next/assets/RemoteMobileApp-BcXsVw0z.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js +0 -7
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-BC_Q_i0I.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-CPcTYvZR.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesDrawer-C6VzGCSv.js.map +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-Cc9GsjZz.js.map +0 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js +0 -2
- package/dist/core/web/public/next/assets/RunInCloudAction-P_hDsqjX.js.map +0 -1
- package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js +0 -2
- package/dist/core/web/public/next/assets/RunInDevinAction-CfNpQCP3.js.map +0 -1
- package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js +0 -3
- package/dist/core/web/public/next/assets/ScreenHost-BBYihlNQ.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js +0 -3
- package/dist/core/web/public/next/assets/SeatSelector-DSd_pxg2.js.map +0 -1
- package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js +0 -2
- package/dist/core/web/public/next/assets/Segmented-CtwuFlbY.js.map +0 -1
- package/dist/core/web/public/next/assets/Select-zXMdgblm.js +0 -2
- package/dist/core/web/public/next/assets/Select-zXMdgblm.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js +0 -2
- package/dist/core/web/public/next/assets/SessionGate-88QiSoXo.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js +0 -2
- package/dist/core/web/public/next/assets/SessionInsightChip-CaPvisvI.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js +0 -2
- package/dist/core/web/public/next/assets/SessionSearch-Ch3veGxY.js.map +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-DLSYZEFc.js.map +0 -1
- package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js +0 -2
- package/dist/core/web/public/next/assets/SetupChecklist-DFAVVLpJ.js.map +0 -1
- package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js +0 -3
- package/dist/core/web/public/next/assets/ShadowDecisions-Gtrbo4US.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js +0 -2
- package/dist/core/web/public/next/assets/Sheet-D72WH4mP.js.map +0 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-DKetDlCR.js.map +0 -1
- package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-CqOJle0q.js.map +0 -1
- package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js +0 -2
- package/dist/core/web/public/next/assets/SkipToContent-C7UObcP2.js.map +0 -1
- package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js +0 -2
- package/dist/core/web/public/next/assets/Slider-Bi5q-21C.js.map +0 -1
- package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js +0 -2
- package/dist/core/web/public/next/assets/SourcesPane-D7Raaor0.js.map +0 -1
- package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js +0 -2
- package/dist/core/web/public/next/assets/SourcesPanel-CCSdY5Os.js.map +0 -1
- package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js +0 -2
- package/dist/core/web/public/next/assets/StatTile-BS_dzInS.js.map +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js +0 -2
- package/dist/core/web/public/next/assets/StatusBadge-CJbb9DhR.js.map +0 -1
- package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-Bfj1YYTl.js.map +0 -1
- package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js +0 -2
- package/dist/core/web/public/next/assets/Surface-CV-NXGIM.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js +0 -2
- package/dist/core/web/public/next/assets/Swimlane-DbUp4tjD.js.map +0 -1
- package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js +0 -2
- package/dist/core/web/public/next/assets/Switch-BtEo9Cku.js.map +0 -1
- package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js +0 -2
- package/dist/core/web/public/next/assets/Tag-CMFqY2MP.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js +0 -26
- package/dist/core/web/public/next/assets/TerminalPane-BCjlhc3t.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js +0 -3
- package/dist/core/web/public/next/assets/TerminalPane-DIwGSCA9.js.map +0 -1
- package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js +0 -2
- package/dist/core/web/public/next/assets/ThinkingBlock-Db8qnuKz.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js +0 -2
- package/dist/core/web/public/next/assets/UniverseConsoleApp-ksreONXM.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js +0 -9
- package/dist/core/web/public/next/assets/UniverseView-CfT9Dsl7.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js +0 -3
- package/dist/core/web/public/next/assets/UsageSection-DypcdQys.js.map +0 -1
- package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js +0 -2
- package/dist/core/web/public/next/assets/UsePlaybookAction-Bxwqrpwe.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-kFOEmnGC.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js +0 -3
- package/dist/core/web/public/next/assets/VerseMobileApp-BTGF5yuZ.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js +0 -2
- package/dist/core/web/public/next/assets/VerseShared-_pMXKs8m.js.map +0 -1
- package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js +0 -2
- package/dist/core/web/public/next/assets/VoiceHud-B_hiHfnQ.js.map +0 -1
- package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js +0 -2
- package/dist/core/web/public/next/assets/VoiceInput-B7yrGchr.js.map +0 -1
- package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js +0 -2
- package/dist/core/web/public/next/assets/WikiSection-BXu4aZyr.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js +0 -6
- package/dist/core/web/public/next/assets/Workspace-BYT3iuNM.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-CyO4R-IO.js +0 -2
- package/dist/core/web/public/next/assets/actions-CyO4R-IO.js.map +0 -1
- package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js +0 -2
- package/dist/core/web/public/next/assets/agent-tools-client-FgVNokGh.js.map +0 -1
- package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js +0 -7
- package/dist/core/web/public/next/assets/agent-transcript-model-CRa_I3eR.js.map +0 -1
- package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js +0 -2
- package/dist/core/web/public/next/assets/agents-focus-D2hd-RNJ.js.map +0 -1
- package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js +0 -2
- package/dist/core/web/public/next/assets/app-version-DDlXX8-W.js.map +0 -1
- package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js +0 -2
- package/dist/core/web/public/next/assets/apps-model-DLQgiczq.js.map +0 -1
- package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js +0 -2
- package/dist/core/web/public/next/assets/ask-seat-zMpqJABI.js.map +0 -1
- package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js +0 -2
- package/dist/core/web/public/next/assets/authority-model-BvLFgPaX.js.map +0 -1
- package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js +0 -2
- package/dist/core/web/public/next/assets/automations-focus-zqI9oIl8.js.map +0 -1
- package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js +0 -2
- package/dist/core/web/public/next/assets/budget-model-CKd0d1Cj.js.map +0 -1
- package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js +0 -2
- package/dist/core/web/public/next/assets/budget-queries-q7mCG9Ek.js.map +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-pdIEweaZ.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-D3I0q4hG.js +0 -2
- package/dist/core/web/public/next/assets/charts-D3I0q4hG.js.map +0 -1
- package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js +0 -2
- package/dist/core/web/public/next/assets/chat-pane-data-DIDV7uIU.js.map +0 -1
- package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js +0 -2
- package/dist/core/web/public/next/assets/checkpoint-queries-DjrDEsN-.js.map +0 -1
- package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js +0 -2
- package/dist/core/web/public/next/assets/cloud-model-DuboHWPT.js.map +0 -1
- package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js +0 -2
- package/dist/core/web/public/next/assets/cloud-queries-DQF1a_R-.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-BzHSIzIS.js.map +0 -1
- package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js +0 -2
- package/dist/core/web/public/next/assets/composer-queries-BEYuD6Qr.js.map +0 -1
- package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js +0 -2
- package/dist/core/web/public/next/assets/composer-state-B4KVc2ZZ.js.map +0 -1
- package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js +0 -2
- package/dist/core/web/public/next/assets/connectivity-Svn7iy2K.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js +0 -2
- package/dist/core/web/public/next/assets/context-model-C9EIuPJ_.js.map +0 -1
- package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js +0 -3
- package/dist/core/web/public/next/assets/context-model-DU3OPiBC.js.map +0 -1
- package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-Cgb_XvRv.js.map +0 -1
- package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js +0 -2
- package/dist/core/web/public/next/assets/control-queries-Clgsy_eH.js.map +0 -1
- package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js +0 -2
- package/dist/core/web/public/next/assets/copy-setup-C-hDt9sS.js.map +0 -1
- package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js +0 -2
- package/dist/core/web/public/next/assets/deep-link-Cgvchdy7.js.map +0 -1
- package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js +0 -2
- package/dist/core/web/public/next/assets/device-permissions-JmqkyrDw.js.map +0 -1
- package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js +0 -2
- package/dist/core/web/public/next/assets/devin-queries-DKgeD4_S.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js +0 -2
- package/dist/core/web/public/next/assets/dock-icons-CRHjXBWm.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-C98u13Bi.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js +0 -2
- package/dist/core/web/public/next/assets/fleet-control-queries-BLoc5Gza.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-CPTadBFK.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js +0 -2
- package/dist/core/web/public/next/assets/fleet-queries-69WuY-dt.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js +0 -3
- package/dist/core/web/public/next/assets/fleet-state-CCdBRK-m.js.map +0 -1
- package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js +0 -2
- package/dist/core/web/public/next/assets/focus-trap-C8MiYlLZ.js.map +0 -1
- package/dist/core/web/public/next/assets/format-CcEKjUou.js +0 -2
- package/dist/core/web/public/next/assets/format-CcEKjUou.js.map +0 -1
- package/dist/core/web/public/next/assets/git-model-DL3MwN93.js +0 -5
- package/dist/core/web/public/next/assets/git-model-DL3MwN93.js.map +0 -1
- package/dist/core/web/public/next/assets/global-BWc2NPzv.js +0 -3
- package/dist/core/web/public/next/assets/global-BWc2NPzv.js.map +0 -1
- package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js +0 -3
- package/dist/core/web/public/next/assets/guarded-action-BK2_U5ho.js.map +0 -1
- package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js +0 -2
- package/dist/core/web/public/next/assets/guarded-runners-Q0UkoY3H.js.map +0 -1
- package/dist/core/web/public/next/assets/headroom-CP99UxyV.js +0 -2
- package/dist/core/web/public/next/assets/headroom-CP99UxyV.js.map +0 -1
- package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js +0 -2
- package/dist/core/web/public/next/assets/health-queries-D8TwNTDQ.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-U34oiN9M.js +0 -2
- package/dist/core/web/public/next/assets/icons-U34oiN9M.js.map +0 -1
- package/dist/core/web/public/next/assets/index-BbDqdepe.js +0 -11
- package/dist/core/web/public/next/assets/index-BbDqdepe.js.map +0 -1
- package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js +0 -2
- package/dist/core/web/public/next/assets/jev-queries-CiQDnM5r.js.map +0 -1
- package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js +0 -2
- package/dist/core/web/public/next/assets/ladder-queries-Cf64JB04.js.map +0 -1
- package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js +0 -2
- package/dist/core/web/public/next/assets/leader-focus-azN19kfO.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js +0 -2
- package/dist/core/web/public/next/assets/live-model-DHX_2gOu.js.map +0 -1
- package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js +0 -2
- package/dist/core/web/public/next/assets/mind.module-BJpuH2JT.js.map +0 -1
- package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js +0 -2
- package/dist/core/web/public/next/assets/mobile-actions-CvGouAAH.js.map +0 -1
- package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js +0 -2
- package/dist/core/web/public/next/assets/mobile-toast-C_UP13GQ.js.map +0 -1
- package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js +0 -7
- package/dist/core/web/public/next/assets/multimodel-flows-C377w9oZ.js.map +0 -1
- package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js +0 -2
- package/dist/core/web/public/next/assets/multimodel-queries-_Y1QXAqq.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js +0 -2
- package/dist/core/web/public/next/assets/mutations-DL4u2kRQ.js.map +0 -1
- package/dist/core/web/public/next/assets/nav-CM-mJcSq.js +0 -2
- package/dist/core/web/public/next/assets/nav-CM-mJcSq.js.map +0 -1
- package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js +0 -2
- package/dist/core/web/public/next/assets/needs-you-actions-DF2zEltF.js.map +0 -1
- package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js +0 -2
- package/dist/core/web/public/next/assets/needs-you-model-DqmU5YOe.js.map +0 -1
- package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js +0 -2
- package/dist/core/web/public/next/assets/open-terminal-BAnwAOoA.js.map +0 -1
- package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js +0 -2
- package/dist/core/web/public/next/assets/open-terminal-request-f5_ItEpF.js.map +0 -1
- package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js +0 -2
- package/dist/core/web/public/next/assets/overnight-queries-BP6viiM5.js.map +0 -1
- package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js +0 -2
- package/dist/core/web/public/next/assets/palette-handoff-Bmq98lDl.js.map +0 -1
- package/dist/core/web/public/next/assets/panes-BjUzIDw6.js +0 -3
- package/dist/core/web/public/next/assets/panes-BjUzIDw6.js.map +0 -1
- package/dist/core/web/public/next/assets/path-display-HyxETV-f.js +0 -2
- package/dist/core/web/public/next/assets/path-display-HyxETV-f.js.map +0 -1
- package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js +0 -2
- package/dist/core/web/public/next/assets/playbook-composer-DwuBBP4I.js.map +0 -1
- package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js +0 -2
- package/dist/core/web/public/next/assets/playbook-focus-B9xzeUMw.js.map +0 -1
- package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js +0 -2
- package/dist/core/web/public/next/assets/playbooks-queries-C8j1Aswo.js.map +0 -1
- package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-CLDUOHXJ.js.map +0 -1
- package/dist/core/web/public/next/assets/primitives-BEXDE-HP.js +0 -1
- package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js +0 -2
- package/dist/core/web/public/next/assets/pwa-lVT_VRkK.js.map +0 -1
- package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js +0 -2
- package/dist/core/web/public/next/assets/queries-T7ZUVqyA.js.map +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js +0 -2
- package/dist/core/web/public/next/assets/reasoning-pref-CWEri5xB.js.map +0 -1
- package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js +0 -3
- package/dist/core/web/public/next/assets/remote-session-BPULIfdG.js.map +0 -1
- package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js +0 -2
- package/dist/core/web/public/next/assets/resolved-store-Ba-W6Uhy.js.map +0 -1
- package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js +0 -2
- package/dist/core/web/public/next/assets/resources-queries-CKyXyaDY.js.map +0 -1
- package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js +0 -2
- package/dist/core/web/public/next/assets/reveal-anchor-Djk1vGLl.js.map +0 -1
- package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js +0 -2
- package/dist/core/web/public/next/assets/seat-readiness-CvEmMBol.js.map +0 -1
- package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js +0 -2
- package/dist/core/web/public/next/assets/seat-subscription-BClqZwau.js.map +0 -1
- package/dist/core/web/public/next/assets/sheet-D0ciShoy.js +0 -2
- package/dist/core/web/public/next/assets/sheet-D0ciShoy.js.map +0 -1
- package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js +0 -2
- package/dist/core/web/public/next/assets/sidebar-model-BZ9Wh1lR.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-m3L6Ints.js +0 -3
- package/dist/core/web/public/next/assets/slots-m3L6Ints.js.map +0 -1
- package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js +0 -4
- package/dist/core/web/public/next/assets/sources-queries-DeIlxb3A.js.map +0 -1
- package/dist/core/web/public/next/assets/sse-CK65-Cun.js +0 -2
- package/dist/core/web/public/next/assets/sse-CK65-Cun.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-DoN8peNV.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-CVNIptSl.js.map +0 -1
- package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js +0 -2
- package/dist/core/web/public/next/assets/tasks-model-BueAhEAf.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js +0 -2
- package/dist/core/web/public/next/assets/terminal-client-DO0eRhRi.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js +0 -2
- package/dist/core/web/public/next/assets/terminal-icons-COMoAiDd.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js +0 -6
- package/dist/core/web/public/next/assets/terminal-view-DkVXx7Xk.js.map +0 -1
- package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js +0 -2
- package/dist/core/web/public/next/assets/thread-data-Dq7QugaD.js.map +0 -1
- package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js +0 -2
- package/dist/core/web/public/next/assets/ui-parts-2JLq2ZSq.js.map +0 -1
- package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js +0 -2
- package/dist/core/web/public/next/assets/usage-queries-CDKUE4e0.js.map +0 -1
- package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js +0 -2
- package/dist/core/web/public/next/assets/use-chat-activity-BaNWmI2A.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-D4m4Mlzr.js.map +0 -1
- package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js +0 -2
- package/dist/core/web/public/next/assets/use-ticker-PQ_oYxn5.js.map +0 -1
- package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-_JPjMD5z.js.map +0 -1
- package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js +0 -2
- package/dist/core/web/public/next/assets/useAutoSeat-CkyqgwX9.js.map +0 -1
- package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js +0 -2
- package/dist/core/web/public/next/assets/useOnboarding-3r8T1GBP.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js +0 -2
- package/dist/core/web/public/next/assets/useSeatHealth-C08b9zut.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js +0 -2
- package/dist/core/web/public/next/assets/useSeatsRefresh-BGsdylUl.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js +0 -2
- package/dist/core/web/public/next/assets/useVerseSession-0MnfpcHg.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js +0 -2
- package/dist/core/web/public/next/assets/useVerseTranscript-B6wLDOv8.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js +0 -2
- package/dist/core/web/public/next/assets/verse-bootstrap-query-BR5ypA8b.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-BQxBZk9k.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-CkF3q2IH.js.map +0 -1
- package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js +0 -3
- package/dist/core/web/public/next/assets/warmup-CqTK8yIn.js.map +0 -1
- package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js +0 -2
- package/dist/core/web/public/next/assets/why-seat-model-Dh4-Ty9n.js.map +0 -1
- package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js +0 -2
- package/dist/core/web/public/next/assets/wiki-focus-CisQb_pM.js.map +0 -1
- package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js +0 -2
- package/dist/core/web/public/next/assets/workspace-model-DRGckE8q.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verse-model-DAOz9LrY.js","names":[],"sources":["../../../../../../src/core/verse/context-math.ts","../../../../../../src/core/routing/tiers.ts","../../../../../../src/web-ui/routes/verse/verse-readouts.ts","../../../../../../src/web-ui/routes/verse/verse-model.ts"],"sourcesContent":["/**\n * Ashlr Verse — context arithmetic shared by the server and the browser.\n *\n * PURE and BROWSER-SAFE: no node imports, no I/O. The seat catalog, the\n * session engine, the adapters and the UI all compute thresholds through this\n * one module, so \"compacts at 367k\" can never mean two different numbers in\n * two places. docs/VERSE-CONTEXT.md is the prose authority for every constant.\n *\n * Where each formula comes from (all read from the CLIs themselves, 2026-09-23):\n *\n * Claude Code (2.1.257 and 2.1.280 binaries): the auto-compaction window is\n * `min(--autocompact | autoCompactWindow | auto, model window)`. From it the\n * CLI reserves `min(max output, 20_000)` for the reply and compacts a\n * further 13_000 below that. On a 1M model at `auto` that is 967_000 — the\n * `pre_tokens` observed on real compactions (967_391).\n * Codex (0.136 – 0.155 rollouts): the window the CLI measures against is\n * `context_window × effective_context_window_percent / 100` = 258_400 for\n * every 272k model; auto-compaction triggers at 90% of the RAW window\n * (244_800). The largest uncompacted call across 62,104 was 243_204.\n * Grok (0.2.118 catalog): compacts at `auto_compact_threshold_percent` (80)\n * of `context_window` (500_000) = 400_000.\n * Local seats run the Claude Code binary against Ollama, so they compact by\n * the Claude formula over the window Verse passes in\n * `CLAUDE_CODE_MAX_CONTEXT_TOKENS`.\n */\n\nimport type {\n VerseContextBudget,\n VerseContextMode,\n VerseEngine,\n VerseFitVerdict,\n VerseModelOption,\n VerseSession,\n VerseUsage,\n} from './types.js';\nimport {\n CLAUDE_COMPACT_BUFFER,\n CLAUDE_OUTPUT_RESERVE_CAP,\n CODEX_EFFECTIVE_WINDOW_PERCENT,\n positiveInt,\n} from './compaction-point.js';\n\n// The runtime compaction-point formulas live in compaction-point.ts (the\n// browser's chat first-paint path needs them without the rest of this\n// module); re-exported so every existing importer keeps one entry point.\nexport {\n CLAUDE_COMPACT_BUFFER,\n CLAUDE_OUTPUT_RESERVE_CAP,\n CODEX_AUTO_COMPACT_FRACTION,\n CODEX_EFFECTIVE_WINDOW_PERCENT,\n claudeAutoCompactAt,\n codexAutoCompactAt,\n reconcileAutoCompactAt,\n} from './compaction-point.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/**\n * Standard-mode compaction window for 1M-context Claude models.\n *\n * WHY 400k and not the CLI's ~967k: every turn re-sends the whole prefix, so a\n * session held near 900k costs ~2.3× per call what one held under 400k does,\n * and long-context recall degrades with length on every published benchmark\n * (docs/VERSE-CONTEXT.md §2). 400k keeps a large working set — far above the\n * 150k Anthropic's own API compacts at by default — while leaving the full\n * window one click away in `expansive` mode. Grok's native budget is also\n * 400k, so the two frontier engines share one standard ceiling.\n */\nexport const CLAUDE_STANDARD_AUTOCOMPACT_WINDOW = 400_000;\n\n/** Claude Code clamps `--autocompact` to [100k, 1M]. */\nexport const CLAUDE_AUTOCOMPACT_MIN = 100_000;\nexport const CLAUDE_AUTOCOMPACT_MAX = 1_000_000;\n\n/** Grok: `auto_compact_threshold_percent` in the 0.2.118 catalog. */\nexport const GROK_AUTO_COMPACT_PERCENT = 80;\n\n/**\n * How long a provider keeps a conversation's prompt cache warm while idle.\n * Claude Code on a subscription: 1h (5 min without it). Past this, the next\n * turn re-reads the whole context at full price — the single most expensive\n * thing an idle long session can do.\n */\nexport const CACHE_IDLE_TTL_MS = 60 * 60 * 1000;\n\n/**\n * Fixed prompt overhead (system prompt + tool definitions) a FRESH session\n * already occupies before any work, per engine.\n *\n * local 15k — measured: two real turns through Claude Code 2.1.280 against\n * Ollama with `--exclude-dynamic-system-prompt-sections`\n * reported 14,695 and 14,942 context tokens for a one-word reply.\n * claude 25k — the same CLI without that flag measured 17.8k–23.3k on local\n * seats; rounded up. An ESTIMATE, never shown as a measurement.\n * codex 15k / grok 20k — estimates; neither CLI reports its base prompt.\n *\n * Only used by the fit verdicts, which are labelled as estimates in the UI.\n */\nexport const SESSION_BASE_OVERHEAD_BY_ENGINE: Readonly<Record<VerseEngine, number>> = {\n claude: 25_000,\n codex: 15_000,\n grok: 20_000,\n local: 15_000,\n // 3.15: Devin runs remotely (or behind ACP) and never reports a window or a\n // base prompt; the fit verdicts have nothing to measure against.\n devin: 0,\n};\n\n/** Fallback overhead when the engine is unknown (the largest estimate). */\nexport const SESSION_BASE_OVERHEAD_TOKENS = 25_000;\n\nexport function sessionOverheadTokens(engine: VerseEngine | null | undefined): number {\n return engine ? SESSION_BASE_OVERHEAD_BY_ENGINE[engine] ?? SESSION_BASE_OVERHEAD_TOKENS : SESSION_BASE_OVERHEAD_TOKENS;\n}\n\n/**\n * Smallest local window worth offering as a seat. Local turns run Claude Code\n * with `CLAUDE_CODE_MAX_CONTEXT_TOKENS=<window>`, which compacts at\n * `window − 20k − 13k`; below this the compaction point leaves under 8k of\n * working room above the ~15k base prompt, so every turn would compact.\n */\nexport const LOCAL_MIN_WORKING_TOKENS = 8_000;\nexport const LOCAL_MIN_USABLE_WINDOW =\n SESSION_BASE_OVERHEAD_BY_ENGINE.local + LOCAL_MIN_WORKING_TOKENS + CLAUDE_OUTPUT_RESERVE_CAP + CLAUDE_COMPACT_BUFFER;\n\n/** True when a local window leaves real working room under Claude Code's compaction rule. */\nexport function localWindowUsable(window: number | null | undefined): boolean {\n return typeof window === 'number' && Number.isFinite(window) && window >= LOCAL_MIN_USABLE_WINDOW;\n}\n\n/** chars → tokens estimator used everywhere a count is estimated rather than measured. */\nexport const CHARS_PER_TOKEN = 4;\n\n// ---------------------------------------------------------------------------\n// Per-engine formulas\n// ---------------------------------------------------------------------------\n\n/** Codex: the window the CLI measures occupancy against. */\nexport function codexEffectiveWindow(rawWindow: number, percent: number | null = null): number {\n const pct = positiveInt(percent) !== null && (percent as number) <= 100 ? (percent as number) : CODEX_EFFECTIVE_WINDOW_PERCENT;\n return Math.floor((rawWindow * pct) / 100);\n}\n\n/** Grok: where auto-compaction fires. */\nexport function grokAutoCompactAt(window: number, percent: number | null = null): number {\n const pct = positiveInt(percent) !== null && (percent as number) <= 100 ? (percent as number) : GROK_AUTO_COMPACT_PERCENT;\n return Math.floor((window * pct) / 100);\n}\n\n// ---------------------------------------------------------------------------\n// Model ids\n// ---------------------------------------------------------------------------\n\n/**\n * Ids Verse once shipped that the CLI does NOT resolve to the model the label\n * promised. `claude-opus-5.5` is parsed by Claude Code as a fuzzy match for\n * `claude-opus-5` (its normaliser rejects the `.5` suffix and falls back to\n * `includes('claude-opus-5')`), so every \"Opus 5.5\" turn actually ran Opus 5.\n * Old session records keep their stored id; adapters send the canonical one.\n */\nexport const VERSE_MODEL_ID_ALIASES: Readonly<Record<string, string>> = {\n 'claude-opus-5.5': 'claude-opus-5-5',\n};\n\nexport function canonicalModelId(id: string): string {\n return VERSE_MODEL_ID_ALIASES[id] ?? id;\n}\n\n// ---------------------------------------------------------------------------\n// Budgets and occupancy\n// ---------------------------------------------------------------------------\n\n/** The budget a model runs with in a mode, or null when that mode does not exist for it. */\nexport function budgetFor(option: VerseModelOption | null | undefined, mode: VerseContextMode): VerseContextBudget | null {\n if (!option) return null;\n if (mode === 'expansive') return option.expansive ?? null;\n const window = positiveInt(option.contextWindow);\n if (window === null) return null;\n return { contextWindow: window, autoCompactAt: positiveInt(option.autoCompactAt ?? null) };\n}\n\n/** True when this model has a genuine expansive budget larger than its standard one. */\nexport function hasExpansiveMode(option: VerseModelOption | null | undefined): boolean {\n const standard = budgetFor(option, 'standard');\n const expansive = budgetFor(option, 'expansive');\n if (!expansive) return false;\n if (!standard) return true;\n return (expansive.autoCompactAt ?? expansive.contextWindow) > (standard.autoCompactAt ?? standard.contextWindow);\n}\n\n/**\n * The `--autocompact` value Verse passes to Claude Code for a model in a mode,\n * or null for \"let the CLI use `auto`\". Only 1M-native models are capped in\n * standard mode; a 200k model already compacts near 167k natively.\n */\nexport function claudeAutocompactFlag(option: VerseModelOption | null | undefined, mode: VerseContextMode): number | null {\n if (mode === 'expansive') return null;\n const window = positiveInt(option?.contextWindow ?? null);\n return window !== null && window > CLAUDE_STANDARD_AUTOCOMPACT_WINDOW && hasExpansiveMode(option)\n ? CLAUDE_STANDARD_AUTOCOMPACT_WINDOW\n : null;\n}\n\nexport type VerseOccupancyTone = 'unknown' | 'ok' | 'warn' | 'danger' | 'over';\n\nexport interface VerseOccupancy {\n tokens: number;\n window: number | null;\n autoCompactAt: number | null;\n /** tokens / window, unclamped; null when the window is unknown. */\n ofWindow: number | null;\n /** tokens / autoCompactAt, unclamped; null when the compaction point is unknown. */\n ofCompaction: number | null;\n /** Tokens left before auto-compaction (≥ 0), null when unknown. */\n untilCompaction: number | null;\n tone: VerseOccupancyTone;\n /** False when `tokens` is an upper bound (codex before its rollout is readable). */\n exact: boolean;\n}\n\n/** Warn at 80% of the compaction point, danger from 95% — BEFORE the CLI compacts, not after. */\nexport const OCCUPANCY_WARN = 0.8;\nexport const OCCUPANCY_DANGER = 0.95;\n\nexport function occupancy(usage: Pick<VerseUsage, 'contextTokens' | 'contextWindow' | 'autoCompactAt' | 'contextTokensExact'>): VerseOccupancy {\n const tokens = Math.max(0, Math.floor(usage.contextTokens || 0));\n const window = positiveInt(usage.contextWindow);\n const compactAt = positiveInt(usage.autoCompactAt ?? null);\n const ofWindow = window !== null ? tokens / window : null;\n const ofCompaction = compactAt !== null ? tokens / compactAt : null;\n const gauge = ofCompaction ?? ofWindow;\n const exact = usage.contextTokensExact !== false;\n let tone: VerseOccupancyTone = 'unknown';\n if (!exact && gauge !== null && gauge >= 1) {\n // An UPPER BOUND past the compaction point says nothing about the real\n // prompt: codex's turn total sums every model call (median 29× the last\n // one). Claiming \"over the window\" from it would be invented precision.\n tone = 'unknown';\n } else if (window !== null && tokens > window) tone = 'over';\n else if (gauge !== null) tone = gauge >= OCCUPANCY_DANGER ? 'danger' : gauge >= OCCUPANCY_WARN ? 'warn' : 'ok';\n return {\n tokens,\n window,\n autoCompactAt: compactAt,\n ofWindow,\n ofCompaction,\n untilCompaction: compactAt !== null ? Math.max(0, compactAt - tokens) : null,\n tone,\n exact,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Efficiency\n// ---------------------------------------------------------------------------\n\n/**\n * Share of prompt tokens served from cache: cacheRead / (input + cacheRead +\n * cacheCreation). Adapters already report `inputTokens` EXCLUDING cached\n * tokens (codex's turn total is split by its adapter), so the buckets are\n * disjoint. Null when nothing has been read yet.\n */\nexport function cacheHitRatio(usage: Pick<VerseUsage, 'inputTokens' | 'cacheReadTokens' | 'cacheCreationTokens'>): number | null {\n const denominator = usage.inputTokens + usage.cacheReadTokens + usage.cacheCreationTokens;\n return denominator > 0 ? usage.cacheReadTokens / denominator : null;\n}\n\nexport function estimateTokensFromChars(chars: number): number {\n return Math.ceil(Math.max(0, chars) / CHARS_PER_TOKEN);\n}\n\n// ---------------------------------------------------------------------------\n// Advice (pure; the UI decides how to show it, nothing here spends)\n// ---------------------------------------------------------------------------\n\n/**\n * Would this working set fit one context on this model?\n *\n * fits — working set + fixed overhead ≤ 60% of the standard compaction point\n * tight — ≤ 100% of it: it fits, but the session will compact soon\n * expansive — only the expansive budget holds it\n * split — no single context holds it; fan the work out instead\n *\n * Null when the model's budget is unknown (never guessed). Pass the engine's\n * `sessionOverheadTokens(engine)`; the default is the largest estimate.\n */\nexport function fitVerdict(\n workingSetTokens: number,\n option: VerseModelOption | null | undefined,\n overheadTokens: number = SESSION_BASE_OVERHEAD_TOKENS,\n): VerseFitVerdict | null {\n const standard = budgetFor(option, 'standard');\n if (!standard) return null;\n const need = Math.max(0, workingSetTokens) + Math.max(0, overheadTokens);\n const standardCap = standard.autoCompactAt ?? standard.contextWindow;\n if (need <= standardCap * 0.6) return 'fits';\n if (need <= standardCap) return 'tight';\n const expansive = budgetFor(option, 'expansive');\n if (expansive && need <= (expansive.autoCompactAt ?? expansive.contextWindow)) return 'expansive';\n return 'split';\n}\n\nexport type VerseAdviceLevel = 'none' | 'suggest' | 'urge';\n\nexport interface VerseHandoffAdvice {\n level: VerseAdviceLevel;\n /** Plain sentences, most important first. Empty when level is 'none'. */\n reasons: string[];\n}\n\n/** Compactions after which early-turn detail is mostly summaries. */\nexport const HANDOFF_COMPACTION_THRESHOLD = 2;\n/** Below this, an expired cache is cheap to re-read and not worth a handoff. */\nexport const HANDOFF_IDLE_MIN_TOKENS = 100_000;\n\nfunction compactTokens(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(n % 1_000_000 === 0 ? 0 : 1)}M`;\n if (n >= 1_000) return `${Math.round(n / 1_000)}k`;\n return String(n);\n}\n\n/**\n * Should the operator continue in a fresh session? Pure: `now` and\n * `lastActivityAt` are passed in, so the verdict is reproducible in tests.\n */\nexport function handoffAdvice(input: {\n usage: VerseUsage;\n compactionCount?: number;\n lastActivityAt?: string | null;\n now: number;\n}): VerseHandoffAdvice {\n const occ = occupancy(input.usage);\n const reasons: string[] = [];\n let level: VerseAdviceLevel = 'none';\n const bump = (to: VerseAdviceLevel): void => {\n // (level only ever rises)\n if (to === 'urge' || (to === 'suggest' && level === 'none')) level = to;\n };\n\n if (!occ.exact) {\n // An upper bound cannot justify \"you are near compaction\"; wait for a reading.\n } else if (occ.tone === 'over') {\n bump('urge');\n reasons.push(`Context (${compactTokens(occ.tokens)}) is past the ${compactTokens(occ.window ?? 0)} window.`);\n } else if (occ.ofCompaction !== null && occ.ofCompaction >= OCCUPANCY_WARN) {\n bump('suggest');\n reasons.push(`About ${compactTokens(occ.untilCompaction ?? 0)} tokens left before the CLI auto-compacts.`);\n }\n\n const compactions = input.compactionCount ?? 0;\n if (compactions >= HANDOFF_COMPACTION_THRESHOLD) {\n bump('suggest');\n reasons.push(`Compacted ${compactions} times — early turns now survive only as summaries.`);\n }\n\n if (input.lastActivityAt) {\n const idle = input.now - Date.parse(input.lastActivityAt);\n if (occ.exact && Number.isFinite(idle) && idle >= CACHE_IDLE_TTL_MS && occ.tokens >= HANDOFF_IDLE_MIN_TOKENS) {\n bump('suggest');\n reasons.push(`Idle over an hour: the prompt cache has likely expired, so the next turn re-reads ~${compactTokens(occ.tokens)} tokens at full cost.`);\n }\n }\n return { level, reasons };\n}\n\nexport interface VerseExpansiveAdvice {\n suggest: boolean;\n reason: string | null;\n}\n\n/**\n * Suggest — never switch on — expansive mode. Only for a session in standard\n * mode whose model has a real expansive budget, and only on evidence: it has\n * already compacted repeatedly, or its working set only fits expansive.\n */\nexport function expansiveAdvice(input: {\n session: Pick<VerseSession, 'contextMode' | 'compactionCount'>;\n option: VerseModelOption | null | undefined;\n workingSetTokens?: number | null;\n}): VerseExpansiveAdvice {\n if ((input.session.contextMode ?? 'standard') !== 'standard' || !hasExpansiveMode(input.option)) {\n return { suggest: false, reason: null };\n }\n const compactions = input.session.compactionCount ?? 0;\n if (compactions >= HANDOFF_COMPACTION_THRESHOLD) {\n return { suggest: true, reason: `This session has compacted ${compactions} times; expansive mode keeps more of it in view.` };\n }\n if (typeof input.workingSetTokens === 'number' && fitVerdict(input.workingSetTokens, input.option) === 'expansive') {\n return { suggest: true, reason: `The reachable code (~${compactTokens(input.workingSetTokens)} tokens) only fits the expansive budget.` };\n }\n return { suggest: false, reason: null };\n}\n\n/** Engines whose CLIs can be told a compaction budget per invocation. */\nexport function engineSupportsModes(engine: VerseEngine): boolean {\n return engine === 'claude' || engine === 'codex';\n}\n","/**\n * The ONE tier model every resource surface shares (3.15, \"equal partners\").\n *\n * Mason, 2026-09-27: Claude, Codex and Devin are all elite and all a\n * commodity — different models for different things, but none of them is the\n * house favourite. Local models are the most free. So resources are ranked by\n * TIER, never by provider:\n *\n * elite Claude Code, Codex (every account), Devin (cloud and CLI), and\n * the local Qwen 3.8 27B (elite quality at no cost — Mason's call)\n * fast Grok, and Devin's SWE models (free on the Devin plan)\n * free every other local model (Ollama / LM Studio / llama-server)\n *\n * A seat's tier is per MODEL: the same Devin CLI seat is elite on its default\n * model and fast on SWE, and a local seat is elite only while it runs Qwen\n * 3.8 27B. Cost basis is a separate axis — a tier says how strong, the cost\n * basis says what one more turn costs.\n *\n * Inside a tier nothing here prefers one provider over another: the seat\n * router (router.ts) orders a tier by headroom, marginal cost and latency, and\n * the Resources drawer orders it by status. Reserves and budget modes stay per\n * SEAT (policy.ts) — Mason's reserve on Claude is a configured reserve, not a\n * provider preference.\n *\n * Cost basis is what one more turn costs:\n * subscription a flat plan; a turn only spends its usage window\n * credits a metered balance (Claude cloud credits, Devin ACUs)\n * per-token billed per token by an API key\n * free nothing (local models, a plan's included free model)\n *\n * BROWSER-SAFE and PURE: plain consts and type-only imports. The router, the\n * Auto seat (in the browser), the New chat picker and the Resources drawer all\n * read the same table, so they can never disagree about a seat's tier.\n */\n\nexport type ResourceTier = 'elite' | 'fast' | 'free';\n\n/** Best-first. The router's QUALITY order; CHEAP order is its reverse. */\nexport const RESOURCE_TIERS: readonly ResourceTier[] = ['elite', 'fast', 'free'];\n\nexport const TIER_LABELS: Readonly<Record<ResourceTier, string>> = Object.freeze({\n elite: 'Elite',\n fast: 'Fast',\n free: 'Free · local',\n});\n\n/** One line per tier, for the drawer's group headings and tooltips. */\nexport const TIER_BLURBS: Readonly<Record<ResourceTier, string>> = Object.freeze({\n elite: 'Claude Code, Codex, Devin and local Qwen 3.8 27B — equal partners. Routing picks among them by fit, headroom, cost and latency.',\n fast: 'Quick, cheap turns: Grok and Devin’s free SWE models.',\n free: 'Other local models on this Mac — no usage, nothing leaves the machine; slower and not as strong.',\n});\n\nexport type CostBasis = 'subscription' | 'credits' | 'per-token' | 'free';\n\nexport const COST_BASIS_LABELS: Readonly<Record<CostBasis, string>> = Object.freeze({\n subscription: 'subscription',\n credits: 'credits',\n 'per-token': 'per token',\n free: 'free',\n});\n\n/**\n * Marginal cost rank of one more turn, 0 = nothing. A subscription turn\n * spends a window that refills; credits and per-token turns spend money.\n * Used by the router only INSIDE a tier, as a tie-breaker below headroom.\n */\nexport const COST_BASIS_RANK: Readonly<Record<CostBasis, number>> = Object.freeze({\n free: 0,\n subscription: 0,\n credits: 1,\n 'per-token': 1,\n});\n\n/**\n * Where a seat's model catalog can say \"this model is free / fast\" (the Devin\n * model list, `devin models list`, is owned by core/devin; until it supplies\n * one, `defaultModelTier` is the fallback). Returns null when it has no\n * opinion about a model.\n */\nexport interface ModelTierSource {\n tierOf(engine: string, modelId: string): ResourceTier | null;\n}\n\n/**\n * Devin's SWE family (`swe`, `swe-2`, `swe-1.5`, …) is included free on the\n * Devin plan and tuned for fast turns — the fast tier, not elite.\n */\nconst DEVIN_FAST_MODEL_RE = /^swe(?:$|[-_.\\d])/i;\n\n/**\n * Local models Mason counts as ELITE (2026-09-27): Qwen 3.8 27B — the house\n * default `qwen3.8:27b-ctx64k` and any other context build of it. Still free\n * and still local (cost basis `free`); it simply competes for elite work\n * instead of waiting behind it. Other local tags stay in the free tier.\n */\nconst ELITE_LOCAL_MODEL_RE = /(?:^|[/:])qwen3\\.8[^/]*?[:_-]27b(?:$|[^0-9])/i;\n\n/** True when a local model tag is on the elite list. */\nexport function isEliteLocalModel(modelId: string | null | undefined): boolean {\n return typeof modelId === 'string' && ELITE_LOCAL_MODEL_RE.test(`:${modelId.trim()}`);\n}\n\n/** The built-in answer for a model; null = the engine's own tier. */\nexport function defaultModelTier(engine: string, modelId: string | null | undefined): ResourceTier | null {\n if (typeof modelId !== 'string') return null;\n if (engine === 'devin' && DEVIN_FAST_MODEL_RE.test(modelId.trim())) return 'fast';\n if (engine === 'local' && isEliteLocalModel(modelId)) return 'elite';\n return null;\n}\n\n/** The tier an engine sits in with its default model. Unknown engines are elite-class (never assumed free). */\nexport function engineTier(engine: string): ResourceTier {\n if (engine === 'local') return 'free';\n if (engine === 'grok') return 'fast';\n return 'elite';\n}\n\n/** A seat's tier for one model: the model's own tier when it has one, else the engine's. */\nexport function seatTier(engine: string, modelId?: string | null, source?: ModelTierSource | null): ResourceTier {\n if (typeof modelId === 'string' && modelId.length > 0) {\n const fromSource = source?.tierOf(engine, modelId) ?? null;\n if (fromSource) return fromSource;\n const builtIn = defaultModelTier(engine, modelId);\n if (builtIn) return builtIn;\n }\n return engineTier(engine);\n}\n\n/**\n * Engines that expose NO usage window by design (Devin meters in ACUs and\n * plan usage). Interactive ranking treats their headroom as neutral, never\n * as the worst; autonomy still treats unknown usage as no headroom.\n */\nexport function isWindowlessEngine(engine: string): boolean {\n return engine === 'devin';\n}\n\n/** 0 = best tier. */\nexport function tierRank(tier: ResourceTier): number {\n return RESOURCE_TIERS.indexOf(tier);\n}\n\nexport interface CostBasisHints {\n /** The seat runs in a hosted cloud lane on a credit balance (Claude cloud, Devin cloud ACUs). */\n cloud?: boolean;\n /** An API-key seat billed per token. */\n apiKey?: boolean;\n modelId?: string | null;\n}\n\n/** What one more turn on this seat costs. */\nexport function costBasisOf(engine: string, hints: CostBasisHints = {}): CostBasis {\n if (engine === 'local') return 'free';\n if (hints.apiKey) return 'per-token';\n if (hints.cloud) return 'credits';\n // A plan's included free model (Devin SWE) costs nothing more than the plan.\n if (engine === 'devin' && seatTier(engine, hints.modelId) === 'fast') return 'free';\n return 'subscription';\n}\n\n/**\n * Seat order for pickers: tier first, then the caller's order (discovery,\n * which already lists the operator's preferred local tags first). Stable —\n * two seats of one tier never swap because of their provider.\n */\nexport function orderByTier<T>(items: readonly T[], tierOfItem: (item: T) => ResourceTier): T[] {\n return items\n .map((item, index) => ({ item, index, rank: tierRank(tierOfItem(item)) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((x) => x.item);\n}\n","/**\n * routes/verse/verse-readouts.ts — display derivations the chat's lazy\n * surfaces (workspace, transcript, context meter, composer, usage panels)\n * read from a session's events and usage.\n *\n * Split from verse-store.ts because the store is on the chat first-paint\n * path and these are not: a value exported from the store rides in its\n * first-paint chunk whoever imports it.\n */\nimport type { VerseEvent } from '../../data/api-types.js';\n\n/**\n * When this chat last talked to its provider — the newest `usage`,\n * `turn-done`, `cancelled` or TURN-attributed `context` event — or null when\n * the log holds none (no turn yet, or the log is not loaded).\n *\n * WHY NOT `session.updatedAt`: the idle-cache advice (\"the prompt cache has\n * likely expired\") asks how long the PROVIDER has gone without a request,\n * and `updatedAt` moves on things that never reach a provider: a rename, a\n * context-mode switch (whose `context` event has `turnId: null`), a reload's\n * record save. Measured from `updatedAt`, one rename silenced the warning\n * for another hour while the cache stayed cold.\n */\nexport function lastTurnActivityAt(events: readonly VerseEvent[]): string | null {\n let latest: string | null = null;\n for (const e of events) {\n const turnActivity = e.type === 'usage' || e.type === 'turn-done' || e.type === 'cancelled' ||\n (e.type === 'context' && e.turnId !== null);\n if (turnActivity && typeof e.at === 'string' && (latest === null || e.at > latest)) latest = e.at;\n }\n return latest;\n}\n\n/**\n * \"123k\" / \"1.2M\" — compact token counts for the meter and usage rows.\n *\n * The unit is chosen AFTER rounding: choosing it first printed 999,500–\n * 999,999 as \"1000k\" (and 999.5–999.9 as \"1000\"), a band a 1M Claude chat in\n * Expansive can actually reach.\n */\nexport function formatTokens(n: number | null | undefined): string {\n if (n === null || n === undefined || !Number.isFinite(n)) return '—';\n if (Math.round(n) < 1000) return String(Math.round(n));\n if (Math.round(n / 1000) < 1000) return `${Math.round(n / 1000)}k`;\n return `${(n / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n}\n","/**\n * routes/verse/verse-model.ts — small pure helpers shared by the Verse\n * components (labels, grouping, health → tone). No React, no I/O.\n */\nimport type { VerseEngine, VerseModelOption, VerseProject, VerseSeat, VerseSeatHealth, VerseSession } from '../../data/api-types.js';\nimport type { VerseContextMode, VerseWindowSource } from '../../../core/verse/types.js';\nimport type { Tone } from '../../components/primitives/StatusBadge.js';\n// context-math is PURE and browser-safe by contract (its only import is\n// type-only), so a value import here does not drag node into the bundle.\nimport { budgetFor, canonicalModelId, claudeAutocompactFlag, reconcileAutoCompactAt } from '../../../core/verse/context-math.js';\nimport { engineTier, orderByTier, seatTier } from '../../../core/routing/tiers.js';\nimport { usedPercentText } from './percent-text.js';\nimport { formatTokens } from './verse-readouts.js';\n\n/**\n * Engines in TIER order (routing/tiers.ts, 3.15): the elite partners —\n * Claude, Codex, Devin, alphabetically, because none of them outranks the\n * others — then fast (Grok), then local. Pickers, the handoff menu and the\n * default seat all read this; it is never a provider preference.\n */\nexport const ENGINE_ORDER: readonly VerseEngine[] = orderByTier(\n ['claude', 'codex', 'devin', 'grok', 'local'] as const satisfies readonly VerseEngine[],\n (engine) => engineTier(engine),\n);\n\n/** Seats in tier order (per seat's default model), keeping the server's order inside a tier. */\nexport function orderSeatsByTier<T extends Pick<VerseSeat, 'engine' | 'models'>>(seats: readonly T[]): T[] {\n return orderByTier(seats, (seat) => seatTierOf(seat));\n}\n\nfunction seatTierOf(seat: Pick<VerseSeat, 'engine' | 'models'>) {\n const model = seat.models.find((m) => !m.unavailableReason) ?? seat.models[0];\n return seatTier(seat.engine, model?.id ?? null);\n}\n\nexport const ENGINE_LABEL: Record<VerseEngine, string> = {\n claude: 'Claude',\n codex: 'Codex',\n grok: 'Grok',\n local: 'Local',\n devin: 'Devin',\n};\n\nexport function isVerseEngine(value: string): value is VerseEngine {\n return (ENGINE_ORDER as readonly string[]).includes(value);\n}\n\nexport function projectName(path: string, projects: readonly VerseProject[] = []): string {\n const known = projects.find((p) => p.path === path);\n if (known) return known.name;\n return path.split(/[\\\\/]/).filter(Boolean).at(-1) ?? path;\n}\n\nexport function seatById(seats: readonly VerseSeat[], seatId: string): VerseSeat | undefined {\n return seats.find((s) => s.id === seatId);\n}\n\nexport function seatLabel(seats: readonly VerseSeat[], session: Pick<VerseSession, 'seatId' | 'engine'>): string {\n return seatById(seats, session.seatId)?.label ?? ENGINE_LABEL[session.engine];\n}\n\nexport function modelLabel(seats: readonly VerseSeat[], session: Pick<VerseSession, 'seatId' | 'model'>): string {\n const seat = seatById(seats, session.seatId);\n return seat?.models.find((m) => m.id === session.model)?.label ?? session.model;\n}\n\n/**\n * 3.15: what the session's model costs, when its seat lists a price (the\n * Devin CLI catalog: \"Free\", \"$4 in · $20 out per 1M\"); null otherwise.\n */\nexport function modelPriceNote(seats: readonly VerseSeat[], session: Pick<VerseSession, 'seatId' | 'model'>): string | null {\n const price = modelOptionFor(seats, session)?.priceNote;\n return typeof price === 'string' && price ? price : null;\n}\n\n/**\n * The seat's catalog entry for a session's model. Exact id first; then the\n * canonical form, because a session created before the alias fix stores\n * `claude-opus-5.5` while today's catalog lists `claude-opus-5-5` (context-math\n * `VERSE_MODEL_ID_ALIASES`) — the record keeps its id, the lookup must not miss.\n */\nexport function modelOptionFor(seats: readonly VerseSeat[], session: Pick<VerseSession, 'seatId' | 'model'>): VerseModelOption | null {\n const seat = seatById(seats, session.seatId);\n if (!seat) return null;\n const exact = seat.models.find((m) => m.id === session.model);\n if (exact) return exact;\n const canonical = canonicalModelId(session.model);\n return seat.models.find((m) => canonicalModelId(m.id) === canonical) ?? null;\n}\n\n/** Everything the meter, the composer's cost hint and the advice banners read. */\nexport interface SessionContextBudget {\n /** Live occupancy as stored — UNCLAMPED; only the drawing clamps. */\n contextTokens: number;\n contextWindow: number | null;\n autoCompactAt: number | null;\n /** False when `contextTokens` is an upper bound (codex before its rollout is read). */\n exact: boolean;\n /** Where `contextWindow` came from; null when nothing on the record says. */\n source: VerseWindowSource | null;\n mode: VerseContextMode;\n /** The catalog option the session's model maps to on its seat, when listed. */\n option: VerseModelOption | null;\n}\n\nfunction positive(value: number | null | undefined): number | null {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : null;\n}\n\n/**\n * The window a session is measured against, and where it compacts.\n *\n * Precedence (docs/VERSE-CONTEXT.md, \"honesty rules\"):\n *\n * 0. LOCAL — the window STORED on the record, whatever its source. Verse\n * SETS a local seat's window: the claude adapter passes the stored\n * `usage.contextWindow` as `CLAUDE_CODE_MAX_CONTEXT_TOKENS`, and the\n * engine refreshes that stored value from live discovery before each\n * turn. The seat's CURRENT option can differ (another dispatch lane,\n * another resident num_ctx), and drawing it measured the chat against a\n * window the CLI was never told — \"past the 66k window\" for a chat the\n * CLI compacts at 229k. The meter and the CLI must quote one number.\n * 1. RUNTIME — the CLI reported the window for this session's last turn\n * (`usage.contextWindowSource === 'runtime'`). Nothing outranks what the\n * CLI said it is actually running with (e.g. Claude Code clamping a 1M\n * model to 200k when long-context credit runs out).\n * 2. CATALOG — the seat's CURRENT option for the session's model, in the\n * session's mode. Current rather than stored so a corrected catalog (a\n * fixed window table, a mode switch) shows up without waiting for a turn.\n * 3. STORED — whatever the record carries (every pre-3.9 session).\n * 4. The seat's default window, marked `fallback`.\n *\n * A compaction point is only ever DERIVED from a window it belongs to: a\n * runtime window without a stored point is reconciled with context-math's\n * per-engine formula, never paired with a catalog point for another window.\n */\nexport function sessionContextBudget(\n seats: readonly VerseSeat[],\n session: Pick<VerseSession, 'seatId' | 'model' | 'usage' | 'engine' | 'contextMode'>,\n): SessionContextBudget {\n const usage = session.usage;\n // No UI-side legacy rule: the engine materialises a pre-3.9 Claude\n // record's mode (and its budget) on startup and on every touch, so every\n // record reaching the browser already names the mode it runs in.\n const mode: VerseContextMode = session.contextMode ?? 'standard';\n const option = modelOptionFor(seats, session);\n const base = {\n contextTokens: typeof usage.contextTokens === 'number' && Number.isFinite(usage.contextTokens) ? Math.max(0, usage.contextTokens) : 0,\n exact: usage.contextTokensExact !== false,\n mode,\n option,\n };\n const catalog = budgetFor(option, mode);\n\n const stored = positive(usage.contextWindow);\n if (stored !== null && (session.engine === 'local' || usage.contextWindowSource === 'runtime')) {\n const storedPoint = positive(usage.autoCompactAt ?? null);\n const autoCompactAt = storedPoint ?? reconcileAutoCompactAt({\n engine: session.engine,\n runtimeWindow: stored,\n // A local window is the whole budget (no --autocompact); pairing it\n // with the seat's current option would borrow another window's point.\n budget: session.engine === 'local' ? null : catalog,\n autocompactWindow: session.engine === 'claude' ? claudeAutocompactFlag(option, mode) : null,\n maxOutputTokens: option?.maxOutputTokens ?? null,\n });\n const source = session.engine === 'local' ? usage.contextWindowSource ?? null : 'runtime';\n return { ...base, contextWindow: stored, autoCompactAt, source };\n }\n if (catalog) {\n return { ...base, contextWindow: catalog.contextWindow, autoCompactAt: catalog.autoCompactAt, source: option?.windowSource ?? 'fallback' };\n }\n if (stored !== null) {\n return { ...base, contextWindow: stored, autoCompactAt: positive(usage.autoCompactAt ?? null), source: usage.contextWindowSource ?? null };\n }\n const seatWindow = positive(seatById(seats, session.seatId)?.contextWindow ?? null);\n return { ...base, contextWindow: seatWindow, autoCompactAt: null, source: seatWindow !== null ? 'fallback' : null };\n}\n\n/** Context window for a session — see {@link sessionContextBudget} for the precedence. */\nexport function contextWindowFor(\n seats: readonly VerseSeat[],\n session: Pick<VerseSession, 'seatId' | 'model' | 'usage' | 'engine' | 'contextMode'>,\n): number | null {\n return sessionContextBudget(seats, session).contextWindow;\n}\n\n/** Plain words for a window's provenance — the meter's tooltip and the resources panel share them. */\nexport const WINDOW_SOURCE_TEXT: Record<VerseWindowSource, string> = {\n runtime: 'reported by the CLI on the last turn',\n 'provider-catalog': \"from this seat's own model catalog\",\n 'cli-catalog': \"from the pinned CLI's built-in model table\",\n documented: \"from the provider's published model table\",\n fallback: 'a default estimate — the CLI has not reported the real window yet',\n};\n\n/**\n * The same provenance, per engine. On a LOCAL seat nothing is \"reported by\n * the CLI\": Verse measures the window from the model server (llama-server\n * slot, Ollama residency/defaults) and TELLS Claude Code to use it, so the\n * sentence names both halves.\n */\nexport function windowSourceText(source: VerseWindowSource, engine: VerseEngine | null | undefined): string {\n if (engine !== 'local') return WINDOW_SOURCE_TEXT[source];\n const from = source === 'runtime' ? 'measured from the local model server'\n : source === 'fallback' ? 'a default estimate — the model server did not report one'\n : WINDOW_SOURCE_TEXT[source];\n return `${from}; Verse passes this window to Claude Code for this chat`;\n}\n\n/**\n * The one sentence about Codex's surcharge above its standard window, for\n * every surface that prices Expansive on codex (the mode menu, the\n * \"Expansive could help\" chip, the new-chat mode selector, the handoff\n * dialog). Worded as REPORTED because that is all it is: the sources\n * docs/VERSE-CONTEXT.md §2.3 cites say GPT-5.6-class requests above 272k\n * count about 2× against plan limits, and Verse has no reading of its own\n * that confirms the multiplier. It multiplies the size ratio the copy quotes\n * (the ratio of the two compaction points), which is why it says \"twice that\".\n */\nexport const CODEX_EXPANSIVE_METERING_NOTE =\n 'OpenAI reportedly also counts requests above 272k tokens at about 2× against plan limits, so a turn near the expansive limit may cost roughly twice that.';\n\n/** The first model on a seat that can actually run (skips ones listed with an `unavailableReason`). */\nexport function firstRunnableModel(seat: VerseSeat): VerseModelOption | null {\n return seat.models.find((m) => !m.unavailableReason) ?? null;\n}\n\nexport function healthTone(state: VerseSeatHealth['state']): Tone {\n switch (state) {\n case 'ready':\n return 'success';\n case 'degraded':\n return 'warning';\n case 'unavailable':\n return 'danger';\n default:\n return 'unknown';\n }\n}\n\nexport function seatUnavailableReason(seat: VerseSeat): string | null {\n if (seat.health.state !== 'unavailable') return null;\n return seat.health.summary ?? 'seat unavailable';\n}\n\n// ---------------------------------------------------------------------------\n// Seat capacity — \"which account can I actually use right now\", at the point\n// the choice is made\n// ---------------------------------------------------------------------------\n\n/**\n * The four answers a picker needs. Same vocabulary as the Usage section's\n * `CapacityClass` so the two surfaces never use different words for one state.\n */\nexport type SeatCapacityClass = 'ready' | 'tight' | 'blocked' | 'unread';\n\n/** Word, never colour alone (DESIGN-V2 §6). */\nexport const SEAT_CAPACITY_WORD: Record<SeatCapacityClass, string> = {\n ready: 'usable',\n tight: 'tight',\n blocked: 'blocked',\n unread: 'no reading',\n};\n\n/** Above this share of the binding window a seat is worth flagging. */\nconst TIGHT_PERCENT = 85;\n\nexport interface SeatCapacityNote {\n cls: SeatCapacityClass;\n /**\n * The binding window's percent when it is a real measurement. Null for an\n * unread seat AND at the 100 ceiling, where the upstream value may be the\n * provider's \"limit reached\" sentinel rather than a reading\n * (docs/VERSE-TELEMETRY-V2.md) — and \"limit reached\" is true under either.\n */\n usedPercent: number | null;\n /** One short phrase for an option label, a pill title, a menu row. */\n text: string;\n}\n\n/** `seven_day_fable` → `weekly (fable)`; `five_hour` → `5-hour`. */\nexport function seatWindowLabel(id: string): string {\n const known: Record<string, string> = {\n five_hour: '5-hour window',\n seven_day: 'weekly window',\n codex: 'weekly window',\n };\n if (known[id]) return known[id];\n const perModel = /^seven_day_(.+)$/.exec(id);\n if (perModel) return `weekly ${perModel[1]!.replace(/_/g, ' ')} window`;\n return `${id.replace(/_/g, ' ')} window`;\n}\n\n/**\n * What a seat's own health says about whether a turn sent to it will land.\n *\n * This exists because the seat picker showed NOTHING: it annotated an option\n * only when `health.state === 'unavailable'`, and Claude's `health` is\n * `unknown` by construction (docs/VERSE-TELEMETRY-V2.md). So a Claude seat\n * whose binding weekly window reads 100% used appeared as an ordinary,\n * enabled, unannotated choice, and the exhaustion was discovered at turn time\n * — exactly the failure the Usage section was built to prevent.\n *\n * A `blocked` seat is MARKED, never disabled: a used-up window can coexist\n * with a spendable credit balance, so refusing the choice would be a stronger\n * claim than the data supports.\n */\nexport function seatCapacity(seat: VerseSeat): SeatCapacityNote {\n const reason = seatUnavailableReason(seat);\n if (reason !== null) return { cls: 'blocked', usedPercent: null, text: reason };\n\n const measured = seat.health.windows.filter(\n (w): w is { id: string; usedPercent: number; resetsAt: string | null } =>\n typeof w.usedPercent === 'number' && Number.isFinite(w.usedPercent),\n );\n // No window reported a number. That is an unanswered question, not a zero —\n // an empty meter would read \"plenty left\".\n if (measured.length === 0) return { cls: 'unread', usedPercent: null, text: 'no capacity reading' };\n\n const binding = measured.reduce((a, b) => (b.usedPercent > a.usedPercent ? b : a));\n const pct = Math.max(0, Math.min(100, binding.usedPercent));\n const where = seatWindowLabel(binding.id);\n if (pct >= 100) return { cls: 'blocked', usedPercent: null, text: `${where} limit reached` };\n return {\n cls: pct >= TIGHT_PERCENT ? 'tight' : 'ready',\n usedPercent: pct,\n text: `${usedPercentText(pct)} of ${where} used`,\n };\n}\n\n/** Seats grouped in the fixed engine order; empty engines are omitted. */\nexport function groupSeats(seats: readonly VerseSeat[]): Array<{ engine: VerseEngine; seats: VerseSeat[] }> {\n return ENGINE_ORDER.map((engine) => ({ engine, seats: seats.filter((s) => s.engine === engine) })).filter((g) => g.seats.length > 0);\n}\n\nexport interface SessionGroup {\n projectPath: string;\n name: string;\n enrolled: boolean;\n sessions: VerseSession[];\n}\n\n/** Sidebar grouping: by project, most recently touched project first, sessions newest first. */\nexport function groupSessions(sessions: readonly VerseSession[], projects: readonly VerseProject[], query = ''): SessionGroup[] {\n const q = query.trim().toLowerCase();\n const filtered = q\n ? sessions.filter((s) =>\n s.title.toLowerCase().includes(q) ||\n s.projectPath.toLowerCase().includes(q) ||\n s.model.toLowerCase().includes(q) ||\n s.seatId.toLowerCase().includes(q))\n : [...sessions];\n const byProject = new Map<string, VerseSession[]>();\n for (const s of filtered) {\n const list = byProject.get(s.projectPath) ?? [];\n list.push(s);\n byProject.set(s.projectPath, list);\n }\n const groups: SessionGroup[] = [];\n for (const [projectPath, list] of byProject) {\n list.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));\n groups.push({\n projectPath,\n name: projectName(projectPath, projects),\n enrolled: projects.find((p) => p.path === projectPath)?.enrolled ?? false,\n sessions: list,\n });\n }\n groups.sort((a, b) => b.sessions[0]!.updatedAt.localeCompare(a.sessions[0]!.updatedAt));\n return groups;\n}\n\nexport function formatElapsed(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return '0s';\n const s = Math.floor(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ${s % 60}s`;\n const h = Math.floor(m / 60);\n return `${h}h ${m % 60}m`;\n}\n\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return '—';\n if (ms < 1000) return `${Math.round(ms)}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n return formatElapsed(ms);\n}\n\n/**\n * Sidebar rows carry a right-aligned relative time. Short by design — the\n * row has ~5ch for it — and it degrades to a date rather than \"412d\".\n * `now` is injectable so the format is testable without faking the clock.\n */\nexport function formatRelative(iso: string, now: number = Date.now()): string {\n const then = Date.parse(iso);\n if (!Number.isFinite(then)) return '';\n const seconds = Math.round((now - then) / 1000);\n if (seconds < 0) return 'now';\n if (seconds < 60) return 'now';\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n return new Date(then).toLocaleDateString([], { month: 'short', day: 'numeric' });\n}\n\nexport function formatClock(iso: string): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return '';\n return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n}\n\n/** One-line description of a tool call for a collapsed card header. */\nexport function summarizeToolInput(input: unknown): string {\n if (input === null || input === undefined) return '';\n if (typeof input === 'string') return truncate(input, 96);\n if (typeof input !== 'object') return truncate(String(input), 96);\n const record = input as Record<string, unknown>;\n const preferred = ['command', 'cmd', 'file_path', 'path', 'pattern', 'query', 'url', 'description', 'prompt', 'text'];\n for (const key of preferred) {\n const v = record[key];\n if (typeof v === 'string' && v.trim()) return truncate(v.trim().replace(/\\s+/g, ' '), 96);\n }\n const keys = Object.keys(record);\n if (keys.length === 0) return '';\n const first = record[keys[0]!];\n const rendered = typeof first === 'string' ? first : JSON.stringify(first);\n return truncate(`${keys[0]}: ${rendered ?? ''}`.replace(/\\s+/g, ' '), 96);\n}\n\nexport function truncate(value: string, max: number): string {\n return value.length > max ? `${value.slice(0, max - 1)}…` : value;\n}\n\n/** Pretty JSON for tool cards; falls back to String() for non-serializable input. */\nexport function prettyJson(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value, null, 2) ?? '';\n } catch {\n return String(value);\n }\n}\n\n/**\n * Accepts POSIX/Windows absolute paths and `~/...`. The server rewrites the\n * home directory as `~` in every outbound payload (sanitizePublicJson) and\n * expands it again on the way in, so a `~/` project from bootstrap is valid.\n */\nexport function isAbsolutePath(value: string): boolean {\n return /^(?:\\/|~(?:\\/|$)|[a-zA-Z]:[\\\\/]|\\\\\\\\)/.test(value) &&\n ![...value].some((c) => c.charCodeAt(0) < 32 || (c.charCodeAt(0) >= 127 && c.charCodeAt(0) <= 159));\n}\n\n/**\n * Seat pill text: \"<seat> · <model>\", collapsing to just the seat when the\n * model label is already contained in it (local seats expose one model whose\n * name is the seat name), so the pill never reads \"Qwen3-Coder · Qwen3-Coder\".\n */\nexport function seatPillLabel(seats: readonly VerseSeat[], ref: Pick<VerseSession, 'seatId' | 'engine' | 'model'>): string {\n const seat = seatLabel(seats, ref);\n const model = modelLabel(seats, ref);\n if (!model || seat.toLowerCase().includes(model.toLowerCase())) return seat;\n return `${seat} · ${model}`;\n}\n\n/**\n * The ONE spelling of a context WINDOW's size, for every surface that prints\n * one (New chat's picker, the context meter, Usage, Resources, Fleet).\n *\n * There used to be two: decimal (`formatTokens`, 65536 → \"66k\") in the\n * picker and meter, binary (65536 → \"64k\") in Usage / Resources / Fleet, so\n * one local model read \"66k ctx\" in New chat and \"64k\" in Resources. Now:\n *\n * - an exact multiple of 1024 is quoted in binary k, the way its model card\n * and a `ctx64k` tag say it: 65536 → \"64k\", 262144 → \"256k\", 1048576 → \"1M\";\n * - anything else stays decimal: 200000 → \"200k\", 272000 → \"272k\", 1000000 → \"1M\".\n *\n * Token COUNTS (what a chat holds, where it compacts) are not windows and\n * keep `formatTokens`. Lives in this (lazy, already shared) module rather\n * than one of its own: a new module became one more chunk name in the\n * first-paint files' preload tables, and verse-store.ts is first-paint code.\n */\nexport function formatContextWindow(n: number | null | undefined): string {\n if (n === null || n === undefined || !Number.isInteger(n) || n < 1024 || n % 1024 !== 0) return formatTokens(n);\n return n < 1_048_576 ? `${n / 1024}k` : `${(n / 1_048_576).toFixed(1).replace(/\\.0$/, '')}M`;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/surface-prefetch-jMaLNI6z.js","assets/queries-C0Bs3TOo.js","assets/budget-queries-t-Bdoly3.js","assets/cloud-queries-DrR_QeUK.js","assets/types-IYKrYLku.js","assets/surface-data-NFl_uS--.js","assets/control-queries-C5uQTzJi.js","assets/mutations-B9AZoqNR.js","assets/overnight-queries-Dc46kMfg.js","assets/format-V6IiIMAL.js","assets/format-D7nBg2bn.js","assets/verse-model-DAOz9LrY.js","assets/compaction-point-VL9oegWS.js","assets/seat-readiness-a5B9iqP-.js","assets/thread-data-C8z55msn.js","assets/leader-thread-types-CDb-VPPO.js","assets/fleet-control-queries-DZEa-aFz.js","assets/global-1SED_aTT.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./index-_izD07R9.js";import{T as t,b as n}from"./VerseConsoleApp-DO84Xscn.js";var r=[`pointerdown`,`keydown`,`wheel`,`touchstart`],i={capture:!0,passive:!0};function a(e={}){let t=e.win??window,n=e.doc??document,a=e.now??(()=>Date.now()),o=e.quietMs??2e3,s=Math.max(1,e.pollMs??250),c=e.busy??(()=>!1),l=e.timeoutMs??3e3,u=!1,d=a(),f=new Set,p=()=>{d=a()};for(let e of r)n.addEventListener(e,p,i);let m=()=>d+o-a(),h=()=>n.visibilityState!==`hidden`&&m()<=0&&!c();function g(){return u?Promise.resolve(!1):new Promise(e=>{let r=()=>void 0,i=()=>{r(),e(!1)},o=()=>{f.delete(i),e(!0)};f.add(i);let u=()=>{if(r=()=>void 0,n.visibilityState===`hidden`){let e=()=>{n.visibilityState!==`hidden`&&(n.removeEventListener(`visibilitychange`,e),d=a(),u())};n.addEventListener(`visibilitychange`,e),r=()=>n.removeEventListener(`visibilitychange`,e);return}let e=m();if(e>0||c()){let n=t.setTimeout(u,e>0?e:s);r=()=>t.clearTimeout(n);return}if(typeof t.requestIdleCallback==`function`){let e=t.requestIdleCallback(()=>h()?o():u(),{timeout:l});r=()=>t.cancelIdleCallback?.(e);return}o()};u()})}function _(e){return u?Promise.resolve(!1):new Promise(n=>{let r=0,i=()=>{t.clearTimeout(r),n(!1)};r=t.setTimeout(()=>{f.delete(i),n(!0)},e),f.add(i)})}function v(){if(!u){u=!0;for(let e of r)n.removeEventListener(e,p,i);for(let e of[...f])e();f.clear()}}return{wait:g,pause:_,cancel:v}}function o(e,t={}){let n=a(t),r=t.gapMs??400;return(async()=>{for(let[t,i]of e.entries()){if(t>0&&r>0&&!await n.pause(r)||!await n.wait())return;try{await i(n)}catch{}}n.cancel()})(),n.cancel}var s=()=>e(()=>import(`./surface-prefetch-jMaLNI6z.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]));function c(e,r={}){let i=e=>async()=>{await e()},a=n=>async r=>{if(t().mounted.includes(n))return;await e.loadSection(n);let{prefetchSurfaceData:i}=await s();await i(n,{beforeEach:()=>r.wait()})};return o([...e.overlays.map(i),...n.map(e=>a(e.id))],{busy:e.readsInFlight,...r})}export{c as warmUpAfterFirstPaint};
|
|
3
|
+
//# sourceMappingURL=warmup-B2DWWeeC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../../../src/web-ui/routes/verse/shell/idle-prefetch.ts","../../../../../../src/web-ui/routes/verse/shell/warmup.ts"],"sourcesContent":["/**\n * routes/verse/shell/idle-prefetch.ts — run warm-up work in the gaps the\n * operator leaves, never in front of them (unit C1; review 3.10.1).\n *\n * createIdleGate() \"is the operator idle?\" as a promise: the window\n * is shown, no input for `quietMs`, none of the\n * operator's reads in flight (`busy`), and — where\n * the browser can tell — an idle callback;\n * runIdleSteps(steps) the steps one at a time: each waits for the gate,\n * and the next starts only after the previous one\n * has FINISHED (its promise settled) plus `gapMs`.\n *\n * WHY A GATE AND NOT A TIMER. WebKit — so the desktop app's WKWebView — has\n * no requestIdleCallback. 3.10.1 first fell back to fixed timers there (1.5 s,\n * then a step every 400 ms counted from each step's kickoff, not its end), so\n * the warm-up started ~9 reads in about a second whatever the operator was\n * doing, and a chat opened two seconds after launch queued behind the 90-day\n * history and the reasoning digest. The gate instead measures the two things\n * that matter: the operator's hands (pointer, keys, wheel, touch — observed\n * in the capture phase, passively, never delayed) and the operator's reads\n * (the caller's `busy`, which the shell wires to the query cache's gate).\n * Every wait re-checks both, so warm-up work yields the moment the operator\n * does something and resumes only after a fresh quiet period.\n *\n * A HIDDEN document runs nothing: a wait parks on `visibilitychange`, and\n * coming back counts as input (a fresh quiet period — the operator is about\n * to act). Cancel stops everything still pending — timers, idle callbacks,\n * the visibility and input listeners — and resolves every open wait `false`;\n * a step already running finishes on its own. The runner cancels its gate\n * when the last step is done, so a finished warm-up listens to nothing.\n *\n * LAZY ONLY. Framework- and dependency-free, and never imported statically by\n * VerseApp: shell/warmup.ts (itself loaded with import()) is its only user,\n * so none of this costs chat first-paint bytes (VerseApp.first-paint.test.ts).\n */\n\ntype IdleWindow = Pick<Window, 'setTimeout' | 'clearTimeout'> & {\n requestIdleCallback?: (cb: () => void, options?: { timeout: number }) => number;\n cancelIdleCallback?: (id: number) => void;\n};\n\ntype GateDocument = Pick<Document, 'visibilityState' | 'addEventListener' | 'removeEventListener'>;\n\nexport interface IdleGateOptions {\n /** No operator input for this long before anything runs. */\n quietMs?: number;\n /** How often a wait re-checks `busy` once the quiet period is met. */\n pollMs?: number;\n /** True while the operator's own work is in flight (the shell: the query cache's gate). */\n busy?: () => boolean;\n /** requestIdleCallback's deadline, where it exists. */\n timeoutMs?: number;\n /** Test seams. */\n win?: IdleWindow;\n doc?: GateDocument;\n now?: () => number;\n}\n\nexport interface IdleGate {\n /** Resolves true once the operator is idle; false if the gate is (or gets) cancelled first. */\n wait(): Promise<boolean>;\n /** A plain pause that cancel also ends (false). */\n pause(ms: number): Promise<boolean>;\n cancel(): void;\n}\n\nexport const IDLE_QUIET_MS = 2_000;\nexport const IDLE_POLL_MS = 250;\nexport const IDLE_TIMEOUT_MS = 3_000;\nexport const IDLE_STEP_GAP_MS = 400;\n\n/** What counts as the operator doing something. */\nexport const IDLE_INPUT_EVENTS = ['pointerdown', 'keydown', 'wheel', 'touchstart'] as const;\n\nconst LISTEN = { capture: true, passive: true } as const;\n\nexport function createIdleGate(options: IdleGateOptions = {}): IdleGate {\n const win = options.win ?? (window as IdleWindow);\n const doc = options.doc ?? document;\n const now = options.now ?? (() => Date.now());\n const quietMs = options.quietMs ?? IDLE_QUIET_MS;\n const pollMs = Math.max(1, options.pollMs ?? IDLE_POLL_MS);\n const busy = options.busy ?? (() => false);\n const timeoutMs = options.timeoutMs ?? IDLE_TIMEOUT_MS;\n\n let cancelled = false;\n // The gate is created at first paint: the quiet period counts from there.\n let lastInput = now();\n /** One abort per open wait / pause: disarms what it armed and settles it `false`. */\n const open = new Set<() => void>();\n\n const onInput = (): void => {\n lastInput = now();\n };\n for (const type of IDLE_INPUT_EVENTS) doc.addEventListener(type, onInput, LISTEN);\n\n const quietLeft = (): number => lastInput + quietMs - now();\n const idleNow = (): boolean => doc.visibilityState !== 'hidden' && quietLeft() <= 0 && !busy();\n\n function wait(): Promise<boolean> {\n if (cancelled) return Promise.resolve(false);\n return new Promise<boolean>((resolve) => {\n let disarm = (): void => undefined;\n const abort = (): void => {\n disarm();\n resolve(false);\n };\n const done = (): void => {\n open.delete(abort);\n resolve(true);\n };\n open.add(abort);\n\n const check = (): void => {\n disarm = () => undefined;\n if (doc.visibilityState === 'hidden') {\n const onShown = (): void => {\n if (doc.visibilityState === 'hidden') return;\n doc.removeEventListener('visibilitychange', onShown);\n lastInput = now();\n check();\n };\n doc.addEventListener('visibilitychange', onShown);\n disarm = () => doc.removeEventListener('visibilitychange', onShown);\n return;\n }\n const left = quietLeft();\n if (left > 0 || busy()) {\n const id = win.setTimeout(check, left > 0 ? left : pollMs);\n disarm = () => win.clearTimeout(id);\n return;\n }\n if (typeof win.requestIdleCallback === 'function') {\n // Input or a read may have started while the browser was busy: re-check on the way out.\n const id = win.requestIdleCallback(() => (idleNow() ? done() : check()), { timeout: timeoutMs });\n disarm = () => win.cancelIdleCallback?.(id);\n return;\n }\n done();\n };\n check();\n });\n }\n\n function pause(ms: number): Promise<boolean> {\n if (cancelled) return Promise.resolve(false);\n return new Promise<boolean>((resolve) => {\n let id = 0;\n const abort = (): void => {\n win.clearTimeout(id);\n resolve(false);\n };\n id = win.setTimeout(() => {\n open.delete(abort);\n resolve(true);\n }, ms);\n open.add(abort);\n });\n }\n\n function cancel(): void {\n if (cancelled) return;\n cancelled = true;\n for (const type of IDLE_INPUT_EVENTS) doc.removeEventListener(type, onInput, LISTEN);\n for (const abort of [...open]) abort();\n open.clear();\n }\n\n return { wait, pause, cancel };\n}\n\nexport type IdleStep = (gate: IdleGate) => void | Promise<void>;\n\nexport interface IdleStepsOptions extends IdleGateOptions {\n /** Pause after one step has finished before the next waits for the gate. */\n gapMs?: number;\n}\n\n/**\n * Run `steps` in order, each once the operator is idle and only after the\n * previous one has settled (plus `gapMs`). A step receives the gate so it can\n * wait again between its own pieces of work. A step that throws or rejects is\n * skipped, never fatal. Returns a cancel that stops every step not yet started\n * and every wait a running step is parked on.\n */\nexport function runIdleSteps(steps: readonly IdleStep[], options: IdleStepsOptions = {}): () => void {\n const gate = createIdleGate(options);\n const gapMs = options.gapMs ?? IDLE_STEP_GAP_MS;\n void (async () => {\n for (const [index, step] of steps.entries()) {\n if (index > 0 && gapMs > 0 && !(await gate.pause(gapMs))) return;\n if (!(await gate.wait())) return;\n try {\n await step(gate);\n } catch {\n // Warm-up only: a step that fails costs the operator a skeleton later, nothing more.\n }\n }\n gate.cancel();\n })();\n return gate.cancel;\n}\n","/**\n * routes/verse/shell/warmup.ts — what the shell warms after first paint, in\n * what order, and when (unit C1; review 3.10.1).\n *\n * 1. the overlay chunks, one at a time, so the first ⌘K / ⌘J / ⌘/ never\n * waits on the network;\n * 2. each rail surface not yet open, in rail order — its chunk (VerseApp's\n * one-per-tab load, so the first visit mounts it directly) and then the\n * reads it opens with (shell/surface-prefetch.ts, one read at a time).\n * A first visit then paints from cache instead of a skeleton.\n *\n * WHEN: every chunk and every read waits for the idle gate\n * (shell/idle-prefetch.ts): window shown, no operator input for a quiet\n * period, and NOTHING in the query cache's gate — no read of the operator's\n * running or queued. The warm-up therefore holds at most one of the gate's\n * four slots, never while the operator's own reads wait, and never in front\n * of the chat's first actions: a click or ⌘N restarts the quiet period, and\n * the reads it causes are waited out before the next warm-up read starts.\n *\n * LAZY ONLY. VerseApp loads this module with import() from a mount effect,\n * so neither the scheduler nor the surface table costs chat first-paint\n * bytes; the surface table is a further import() from here, at the first\n * surface step (VerseApp.first-paint.test.ts pins both).\n */\nimport { getVerseUiState, RAIL_SECTIONS, type VerseSectionId } from '../verse-ui-store.js';\nimport { runIdleSteps, type IdleGate, type IdleStep, type IdleStepsOptions } from './idle-prefetch.js';\n\nexport type WarmupOptions = IdleStepsOptions;\n\nexport interface WarmupDeps {\n /** VerseApp's one load per section (its lazy component shares it). */\n loadSection: (id: VerseSectionId) => Promise<unknown>;\n /** The overlay chunks, in the order they are worth having. */\n overlays: ReadonlyArray<() => Promise<unknown>>;\n /**\n * True while any read is running or queued in the query cache's gate\n * (VerseApp reads `queryGateStats`). Injected rather than imported: a\n * static data/cache.ts import from this chunk made the bundler split the\n * cache out of its shared first-paint chunk (+1.2 KB of chat critical JS,\n * more than moving the scheduler out saved).\n */\n readsInFlight: () => boolean;\n}\n\nconst importSurfacePrefetch = () => import('./surface-prefetch.js');\n\n/** Start the warm-up. Returns a cancel (VerseApp calls it on unmount). */\nexport function warmUpAfterFirstPaint(deps: WarmupDeps, options: WarmupOptions = {}): () => void {\n const overlay = (load: () => Promise<unknown>): IdleStep => async () => {\n await load();\n };\n const surface = (id: VerseSectionId): IdleStep => async (gate: IdleGate) => {\n // Already open: its reads are live, and its chunk is in.\n if (getVerseUiState().mounted.includes(id)) return;\n await deps.loadSection(id);\n const { prefetchSurfaceData } = await importSurfacePrefetch();\n await prefetchSurfaceData(id, { beforeEach: () => gate.wait() });\n };\n return runIdleSteps([...deps.overlays.map(overlay), ...RAIL_SECTIONS.map((s) => surface(s.id))], {\n busy: deps.readsInFlight,\n ...options,\n });\n}\n"],"file":"warmup-B2DWWeeC.js"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./seat-readiness-a5B9iqP-.js";import{n as t}from"./format-V6IiIMAL.js";var n=new Set([`headroom`,`switched-off`,`signed-out`,`unreachable`,`spent`,`reserve`,`session-ceiling`,`unknown-usage`,`spend-cap`,`model-window`,`context`,`grant`,`lane`,`demoted`,`other`]);function r(e){return e.map(t).filter(Boolean).join(` `)}function i(e){return e.length<=1?e[0]??``:`${e.slice(0,-1).join(`, `)} and ${e[e.length-1]}`}var a=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/,o=/\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:?\d{2})?(?![\w:])/g;function s(t,n=Date.now()){return t.replace(o,t=>e(t,n)??t)}function c(e){return typeof e==`string`&&a.test(e)&&Number.isFinite(Date.parse(e))}function l(e){return/^autonomy is switched off/i.test(e)?`switched-off`:/^signed out/i.test(e)?`signed-out`:/not reachable/i.test(e)?`unreachable`:/limits that model only/.test(e)?`model-window`:/ is spent — /.test(e)?`spent`:/is kept for you, so autonomy stops at/.test(e)?`reserve`:/used; autonomy stops at .* to protect your live session/.test(e)?`session-ceiling`:/unknown usage is not headroom|too stale to spend against|too uncertain to spend against/.test(e)?`unknown-usage`:/daily cap/.test(e)?`spend-cap`:/tokens of context/.test(e)?`context`:/is demoted/.test(e)?`demoted`:/\bgrant\b/i.test(e)?`grant`:/\blanes?\b|\bslots?\b|producer slice is held|stays off until the Leader/i.test(e)?`lane`:`other`}var u={"grok-cli":`Grok`,"claude-cli":`Claude`,codex:`Codex`},d=[/^(The Leader set \d+ )(grok-cli)( lanes?\.)$/,/^(No )(grok-cli|claude-cli|codex)( seat has the producer role in the grant\.)$/,/^(The grant's current (?:rollout )?stage does not include )(grok-cli|claude-cli|codex)(\.)$/,/^(The )(grok-cli|claude-cli|codex)( lane has no slots this tick\.)$/,/^(No )(grok-cli|claude-cli|codex)( engine is installed and allowed in this build\.)$/,/^(No )(grok-cli|claude-cli|codex)( seat is known, so no usage can be checked\.)$/];function f(e){let t=e.trim();t=t.replace(/^Codex lanes stay off until the Leader enables them after the usage reset \(a class-B action\)\.$/,`Codex stays off until the Leader turns it on after the usage reset (you can veto it).`),t=t.replace(/\b(\d+)((?:\s+[A-Za-z-]+)*?)\s+([A-Za-z]+)\(s\)/g,(e,t,n,r)=>`${t}${n} ${r}${Number(t)===1?``:`s`}`);for(let e of d)t=t.replace(e,(e,t,n,r)=>`${t}${u[n]??n}${r}`);return t}function p(e){let t=e.trim(),n=/^([\s\S]*?) \(resets ([\s\S]+)\)\.?$/.exec(t),r=n?`${n[1]}.`:t,i=n?n[2].trim():null,a=c(i)?i:null,o=/ is demoted until (\S+): /.exec(r);return o&&c(o[1])&&(a=o[1],r=r.replace(` until ${o[1]}:`,`:`)),{kind:l(r),text:r,resetsAt:a,resetDescription:i!==null&&!c(i)?i:null}}function m(e){return Array.isArray(e.details)&&(e.details.length>0||e.reasons.length===0)?e.details.map(e=>n.has(e.kind)?e:{...e,kind:`other`}):e.reasons.map(p)}function h(e){return r(m(e).filter(e=>e.kind!==`headroom`).map(e=>e.kind===`lane`?f(e.text):e.text))}var g={"switched-off":`you switch autonomy on for this seat`,"signed-out":`you reconnect this account`,unreachable:`it is reachable again`,"unknown-usage":`a fresh usage reading arrives`,"spend-cap":`its daily spend cap resets`,grant:`the standing grant allows it`,lane:`its lane has a free slot`},_=new Set([`spent`,`reserve`,`session-ceiling`,`demoted`]);function v(e){return e.trim().replace(/^resets\s+/i,``)}function y(e){let t=[],n=[],r=null,i=!1,a=null;for(let o of m(e)){if(o.kind===`context`){a=`not for this task — it needs a larger context window than this seat has`;continue}let e=g[o.kind];if(e&&!t.includes(e)&&t.push(e),_.has(o.kind)){if(c(o.resetsAt))(r===null||Date.parse(o.resetsAt)>Date.parse(r))&&(r=o.resetsAt);else if(o.resetDescription){let e=v(o.resetDescription);n.includes(e)||n.push(e)}else i=!0}}return r===null&&n.length===0&&c(e.nextEligibleAt)&&(r=e.nextEligibleAt,i=!1),{conditions:t,at:r,prose:n,timeUnknown:i,never:a}}function b(t,n=Date.now()){if(t.never)return t.never;let r=[...t.at?[e(t.at,n)??t.at]:[],...t.prose],a=r.length>0?r.join(` and `):null,o=t.conditions.length>0?`when ${i(t.conditions)}`:null;return o&&a?`${o}, not before ${a}`:o||a||`unknown`}var x=/^Routed (?:autonomous )?[\w-]+-difficulty \w+ work to (.+?) \(([^()]+)\)(?: with (\d+)% of its (5-hour|weekly) window left for autonomy| (at no cost))?: ([\w-]+) mode prefers (.+?) first for this work(?:; held back [\s\S]*)?\.$/,S=/^(No seat (?:the grant lets produce )?can take [\s\S]*?) \([\s\S]*\)(?:; the earliest known reopening is \S+)?\.$/;function C(e){let t=e.trim(),n=x.exec(t);if(n){let[,e,,t,r,i,a,o]=n,s=t?` — ${t}% of its ${r} window left`:i?` — free, no usage window`:``;return s?`${e}${s}; ${a} mode prefers ${o} for this work.`:`${e} — ${a} mode prefers ${o} for this work.`}let r=S.exec(t);return r?`${r[1]}.`:t}function w(e){let n=t(e.summary??C(e.why)),r=e.exclusions.length;return r===0?n:`${n} ${r===1?`1 seat`:`${r} seats`} held back.`}export{f as a,h as i,b as n,s as o,y as r,p as s,w as t};
|
|
2
|
+
//# sourceMappingURL=why-seat-model-Bn6O26JJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"why-seat-model-Bn6O26JJ.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/fleet/why-seat-model.ts"],"sourcesContent":["/**\n * routes/verse/fleet/why-seat-model.ts — \"Why this seat\" in words (3.10.1).\n *\n * The card used to print the router's log sentence verbatim — one run-on with\n * every held-back seat's first reason in nested parentheses and a literal\n * \"…\" — and each HELD BACK entry as `reasons.join('; ')` (hence \".;\"), with\n * raw UTC instants and \"eligible again: unknown\" for seats whose reset was\n * known all along. Now:\n *\n * - the headline is one short sentence (`SeatDecision.summary`, or the\n * same words recovered from a 3.10.0 `why`) plus \"N seats held back.\";\n * - each held-back seat lists its reasons as prose sentences, without the\n * reset clauses — those move to \"eligible again\";\n * - \"eligible again\" is derived from the reasons AS DATA: every condition\n * that must change first (\"when you switch autonomy on for this seat\")\n * and the time every time-bound blocker has lifted, in the viewer's zone\n * (\"Fri 11:46 PM\") or, for Claude, the provider's own words verbatim.\n * \"unknown\" only when nothing says.\n *\n * Records written before 3.10.1 carry only sentences; `parseLegacyReason`\n * recovers the same data from them.\n *\n * Framework-free; tested directly.\n */\nimport type { SeatDecision, SeatExclusion, SeatReason, SeatReasonKind } from '../../../../core/routing/types.js';\nimport { describeResetAt } from '../../../../core/verse/seat-readiness.js';\nimport { asSentence } from '../autonomy/format.js';\n\nconst KINDS: ReadonlySet<string> = new Set<SeatReasonKind>([\n 'headroom', 'switched-off', 'signed-out', 'unreachable', 'spent', 'reserve', 'session-ceiling',\n 'unknown-usage', 'spend-cap', 'model-window', 'context', 'grant', 'lane', 'demoted', 'other',\n]);\n\n// ---------------------------------------------------------------------------\n// Sentences\n// ---------------------------------------------------------------------------\n\n// `asSentence` lives with the other shared prose helpers (autonomy/format.ts);\n// re-exported here so this module's callers keep one import.\nexport { asSentence };\n\n/** Sentences as prose — \"A. B.\" — never \"A.; B\" and never \"A.. B\". */\nexport function joinSentences(texts: readonly string[]): string {\n return texts.map(asSentence).filter(Boolean).join(' ');\n}\n\n/** \"a\", \"a and b\", \"a, b and c\". */\nfunction listWords(words: readonly string[]): string {\n if (words.length <= 1) return words[0] ?? '';\n return `${words.slice(0, -1).join(', ')} and ${words[words.length - 1]}`;\n}\n\n// ---------------------------------------------------------------------------\n// Reasons as data\n// ---------------------------------------------------------------------------\n\nconst ISO_INSTANT = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nconst ISO_IN_TEXT = /\\b\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,9})?)?(?:Z|[+-]\\d{2}:?\\d{2})?(?![\\w:])/g;\n\n/**\n * Server prose with every ISO instant in it shown in the viewer's zone (\"the\n * earliest known reopening is Fri 2:25 PM\") — for sentences the server keeps\n * machine-exact for its logs, like a park hold's reason.\n */\nexport function localTimes(text: string, now: number = Date.now()): string {\n return text.replace(ISO_IN_TEXT, (iso) => describeResetAt(iso, now) ?? iso);\n}\n\nfunction isInstant(text: string | null | undefined): text is string {\n return typeof text === 'string' && ISO_INSTANT.test(text) && Number.isFinite(Date.parse(text));\n}\n\nfunction legacyKind(text: string): SeatReasonKind {\n if (/^autonomy is switched off/i.test(text)) return 'switched-off';\n if (/^signed out/i.test(text)) return 'signed-out';\n if (/not reachable/i.test(text)) return 'unreachable';\n if (/limits that model only/.test(text)) return 'model-window';\n if (/ is spent — /.test(text)) return 'spent';\n if (/is kept for you, so autonomy stops at/.test(text)) return 'reserve';\n if (/used; autonomy stops at .* to protect your live session/.test(text)) return 'session-ceiling';\n if (/unknown usage is not headroom|too stale to spend against|too uncertain to spend against/.test(text)) return 'unknown-usage';\n if (/daily cap/.test(text)) return 'spend-cap';\n if (/tokens of context/.test(text)) return 'context';\n if (/is demoted/.test(text)) return 'demoted';\n if (/\\bgrant\\b/i.test(text)) return 'grant';\n // A lane cap, as 3.10.0's router wrote it into exclusions: \"Codex lanes\n // stay off until…\", \"The Leader set 0 grok-cli lanes.\", \"The local runtime\n // serves 0 slot(s).\", \"…the Claude producer slice is held for your own\n // session.\" (3.10.1 sends these as `kind: 'lane'`.)\n // The plain-words router says \"Codex stays off until the Leader…\".\n if (/\\blanes?\\b|\\bslots?\\b|producer slice is held|stays off until the Leader/i.test(text)) return 'lane';\n return 'other';\n}\n\n// ---------------------------------------------------------------------------\n// Lane cap reasons in operator words\n// ---------------------------------------------------------------------------\n\nconst LEGACY_LANE_LABEL: Readonly<Record<string, string>> = { 'grok-cli': 'Grok', 'claude-cli': 'Claude', codex: 'Codex' };\n\n/**\n * The exact sentence shapes the pre-plain-words router (≤ 3.11) wrote with a\n * lane id where the lane's name belongs. Only these are rewritten: a lane id\n * elsewhere is left alone (\"grok-cli is not in foundry.allowedBackends.\" names\n * the config value to change, and a seat id like `codex-cmp` is never a lane).\n */\nconst LEGACY_LANE_SHAPES: readonly RegExp[] = [\n /^(The Leader set \\d+ )(grok-cli)( lanes?\\.)$/,\n /^(No )(grok-cli|claude-cli|codex)( seat has the producer role in the grant\\.)$/,\n /^(The grant's current (?:rollout )?stage does not include )(grok-cli|claude-cli|codex)(\\.)$/,\n /^(The )(grok-cli|claude-cli|codex)( lane has no slots this tick\\.)$/,\n /^(No )(grok-cli|claude-cli|codex)( engine is installed and allowed in this build\\.)$/,\n /^(No )(grok-cli|claude-cli|codex)( seat is known, so no usage can be checked\\.)$/,\n];\n\n/**\n * A lane cap reason (the router's `capReason`, also a held-back seat's lane\n * reason) as the operator reads it. The server writes these in plain words at\n * the source (dispatch-router.ts `planLanes`, tick-hooks-live.ts), and they\n * pass through trimmed.\n *\n * OLDER WORDING STILL ARRIVES: the daemon runs its own compiled build until it\n * restarts, and the fleet runtime journal keeps each run's seat decision with\n * the words of the router that made it. Those older sentences (\"2 slot(s)\",\n * \"(a class-B action)\", \"grok-cli\") are rewritten into the same plain words;\n * every rule matches only the old wording, so a current sentence is unchanged.\n */\nexport function laneReasonText(reason: string): string {\n let text = reason.trim();\n text = text.replace(\n /^Codex lanes stay off until the Leader enables them after the usage reset \\(a class-B action\\)\\.$/,\n 'Codex stays off until the Leader turns it on after the usage reset (you can veto it).',\n );\n // \"2 slot(s)\" → \"2 slots\"; \"1 local slot(s)\" → \"1 local slot\".\n text = text.replace(/\\b(\\d+)((?:\\s+[A-Za-z-]+)*?)\\s+([A-Za-z]+)\\(s\\)/g,\n (_m, n: string, mid: string, word: string) => `${n}${mid} ${word}${Number(n) === 1 ? '' : 's'}`);\n for (const shape of LEGACY_LANE_SHAPES) {\n text = text.replace(shape, (_m, head: string, id: string, tail: string) => `${head}${LEGACY_LANE_LABEL[id] ?? id}${tail}`);\n }\n return text;\n}\n\n/**\n * A pre-3.10.1 reason sentence, back into data: the \" (resets …)\" clause the\n * server appended is split off (an instant → `resetsAt`, Claude's prose →\n * `resetDescription`), as is a demotion's \"until <instant>\".\n */\nexport function parseLegacyReason(sentence: string): SeatReason {\n const trimmed = sentence.trim();\n const clause = /^([\\s\\S]*?) \\(resets ([\\s\\S]+)\\)\\.?$/.exec(trimmed);\n let text = clause ? `${clause[1]}.` : trimmed;\n const reset = clause ? clause[2]!.trim() : null;\n let resetsAt: string | null = isInstant(reset) ? reset : null;\n const demoted = / is demoted until (\\S+): /.exec(text);\n if (demoted && isInstant(demoted[1])) {\n resetsAt = demoted[1];\n text = text.replace(` until ${demoted[1]}:`, ':');\n }\n return {\n kind: legacyKind(text),\n text,\n resetsAt,\n resetDescription: reset !== null && !isInstant(reset) ? reset : null,\n };\n}\n\n/** An exclusion's reasons as data: its 3.10.1 `details`, or its sentences parsed. */\nexport function exclusionReasons(x: SeatExclusion): SeatReason[] {\n if (Array.isArray(x.details) && (x.details.length > 0 || x.reasons.length === 0)) {\n // A newer server may add kinds; anything unrecognised reads as `other`.\n return x.details.map((r) => (KINDS.has(r.kind) ? r : { ...r, kind: 'other' as const }));\n }\n return x.reasons.map(parseLegacyReason);\n}\n\n/** The reasons a HELD BACK row prints: blockers and notes, never the \"N% left\" line; lane caps in plain words. */\nexport function heldBackText(x: SeatExclusion): string {\n return joinSentences(exclusionReasons(x).filter((r) => r.kind !== 'headroom').map((r) => (r.kind === 'lane' ? laneReasonText(r.text) : r.text)));\n}\n\n// ---------------------------------------------------------------------------\n// Eligible again\n// ---------------------------------------------------------------------------\n\n/** What must change before the seat can take this work again. */\nexport interface EligibleAgain {\n /** Conditions a person or the fleet must meet first, in words. */\n conditions: string[];\n /** The instant every time-bound blocker has lifted (the LATEST reset among them); null when none is known. */\n at: string | null;\n /** Provider reset wording with no instant (Claude), verbatim. */\n prose: string[];\n /** A time-bound blocker whose lift time nobody reported. */\n timeUnknown: boolean;\n /** Set when the seat can never take THIS work (it does not fit). */\n never: string | null;\n}\n\nconst CONDITION: Partial<Record<SeatReasonKind, string>> = {\n 'switched-off': 'you switch autonomy on for this seat',\n 'signed-out': 'you reconnect this account',\n unreachable: 'it is reachable again',\n 'unknown-usage': 'a fresh usage reading arrives',\n 'spend-cap': 'its daily spend cap resets',\n grant: 'the standing grant allows it',\n lane: 'its lane has a free slot',\n};\n\n/** Blockers that lift on their own at a time: a window reset, a demotion's end. */\nconst TIMED: ReadonlySet<SeatReasonKind> = new Set<SeatReasonKind>(['spent', 'reserve', 'session-ceiling', 'demoted']);\n\n/** Claude's wording, without the \"resets\" some sources lead with. */\nfunction resetWords(text: string): string {\n return text.trim().replace(/^resets\\s+/i, '');\n}\n\nexport function eligibleAgain(x: SeatExclusion): EligibleAgain {\n const conditions: string[] = [];\n const prose: string[] = [];\n let at: string | null = null;\n let timeUnknown = false;\n let never: string | null = null;\n for (const r of exclusionReasons(x)) {\n if (r.kind === 'context') {\n never = 'not for this task — it needs a larger context window than this seat has';\n continue;\n }\n const condition = CONDITION[r.kind];\n if (condition && !conditions.includes(condition)) conditions.push(condition);\n if (!TIMED.has(r.kind)) continue;\n // The seat is free only once EVERY time-bound blocker has lifted.\n if (isInstant(r.resetsAt)) {\n if (at === null || Date.parse(r.resetsAt) > Date.parse(at)) at = r.resetsAt;\n } else if (r.resetDescription) {\n const words = resetWords(r.resetDescription);\n if (!prose.includes(words)) prose.push(words);\n } else {\n timeUnknown = true;\n }\n }\n // The server's own estimate, when the reasons themselves carried no time.\n if (at === null && prose.length === 0 && isInstant(x.nextEligibleAt)) {\n at = x.nextEligibleAt;\n timeUnknown = false;\n }\n return { conditions, at, prose, timeUnknown, never };\n}\n\n/**\n * \"Fri 11:46 PM\"; \"when you switch autonomy on for this seat, not before Fri\n * 11:46 PM\"; \"Sep 25 at 6:59pm (America/New_York)\" (Claude's words); and\n * \"unknown\" only when nothing says.\n */\nexport function describeEligibleAgain(e: EligibleAgain, now: number = Date.now()): string {\n if (e.never) return e.never;\n const times = [...(e.at ? [describeResetAt(e.at, now) ?? e.at] : []), ...e.prose];\n const time = times.length > 0 ? times.join(' and ') : null;\n const when = e.conditions.length > 0 ? `when ${listWords(e.conditions)}` : null;\n if (when && time) return `${when}, not before ${time}`;\n if (when) return when;\n if (time) return time;\n return 'unknown';\n}\n\n// ---------------------------------------------------------------------------\n// Headline\n// ---------------------------------------------------------------------------\n\nconst ROUTED = /^Routed (?:autonomous )?[\\w-]+-difficulty \\w+ work to (.+?) \\(([^()]+)\\)(?: with (\\d+)% of its (5-hour|weekly) window left for autonomy| (at no cost))?: ([\\w-]+) mode prefers (.+?) first for this work(?:; held back [\\s\\S]*)?\\.$/;\nconst NOTHING = /^(No seat (?:the grant lets produce )?can take [\\s\\S]*?) \\([\\s\\S]*\\)(?:; the earliest known reopening is \\S+)?\\.$/;\n\n/**\n * The short headline recovered from a 3.10.0 `why` — the same words a 3.10.1\n * router writes as `summary` (\"Grok — 94% of its weekly window left; balanced\n * mode prefers Grok for this work.\"). Anything unrecognised is returned as is.\n */\nexport function legacySummary(why: string): string {\n const text = why.trim();\n const routed = ROUTED.exec(text);\n if (routed) {\n const [, label, , room, windowWord, free, mode, engine] = routed;\n const lead = room ? ` — ${room}% of its ${windowWord} window left` : free ? ' — free, no usage window' : '';\n return lead ? `${label}${lead}; ${mode} mode prefers ${engine} for this work.` : `${label} — ${mode} mode prefers ${engine} for this work.`;\n }\n const nothing = NOTHING.exec(text);\n if (nothing) return `${nothing[1]}.`;\n return text;\n}\n\n/** The card's one-line headline: the choice and why, then how many seats were held back. */\nexport function decisionSummary(d: SeatDecision): string {\n const lead = asSentence(d.summary ?? legacySummary(d.why));\n const n = d.exclusions.length;\n return n === 0 ? lead : `${lead} ${n === 1 ? '1 seat' : `${n} seats`} held back.`;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-hePW80VL.js";import{I as t}from"./VerseConsoleApp-DO84Xscn.js";var n=e({REQUEST_TTL_MS:()=>r,getWikiFocus:()=>l,isWikiFocusLive:()=>u,requestWikiFocus:()=>c,subscribeWikiFocus:()=>f,takeWikiFocus:()=>d}),r=2e4,i=null,a=0,o=new Set;function s(){for(let e of[...o])e()}function c(e){a+=1,i={...e,seq:a,at:Date.now()},t(`wiki`),s()}function l(){return i}function u(e,t=Date.now()){return t-e.at<=r}function d(e){i?.seq===e&&(i=null,s())}function f(e){return o.add(e),()=>o.delete(e)}export{n as a,d as i,u as n,f as r,l as t};
|
|
2
|
+
//# sourceMappingURL=wiki-focus-CwC-yoT9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-focus-CwC-yoT9.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/wiki/wiki-focus.ts"],"sourcesContent":["/**\n * routes/verse/wiki/wiki-focus.ts — \"take me to the repo wiki\": the hand-off\n * from ⌘K (\"Open repo wiki…\", \"Ask the codebase…\") to the lazily mounted Wiki\n * section, the same shape as leader/leader-focus.ts.\n *\n * requestWikiFocus({ kind: 'repo', projectPath }) Wiki, that repo selected\n * requestWikiFocus({ kind: 'ask', projectPath }) Wiki, Ask box focused\n *\n * A store, not a parked command: the section is its own chunk; a request\n * here waits (up to REQUEST_TTL_MS) until it mounts and takes it. Tiny and\n * framework-free: the shell's palette handler imports it on demand.\n */\nimport { setVerseSection } from '../verse-ui-store.js';\n\nexport type WikiFocusTarget = { kind: 'repo' | 'ask'; projectPath: string | null };\nexport type WikiFocusRequest = WikiFocusTarget & { seq: number; at: number };\n\nexport const REQUEST_TTL_MS = 20_000;\n\nlet current: WikiFocusRequest | null = null;\nlet seq = 0;\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const l of [...listeners]) l();\n}\n\nexport function requestWikiFocus(target: WikiFocusTarget): void {\n seq += 1;\n current = { ...target, seq, at: Date.now() };\n setVerseSection('wiki');\n emit();\n}\n\nexport function getWikiFocus(): WikiFocusRequest | null {\n return current;\n}\n\nexport function isWikiFocusLive(request: WikiFocusRequest, now: number = Date.now()): boolean {\n return now - request.at <= REQUEST_TTL_MS;\n}\n\n/** Clear request `requestSeq` (only that one — a newer ask survives). */\nexport function takeWikiFocus(requestSeq: number): void {\n if (current?.seq !== requestSeq) return;\n current = null;\n emit();\n}\n\nexport function subscribeWikiFocus(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\n/** Test hygiene. */\nexport function resetWikiFocus(): void {\n current = null;\n emit();\n}\n"],"mappings":"kPAiBa,EAAiB,IAE1B,EAAmC,KACnC,EAAM,EACJ,EAAY,IAAI,IAEtB,SAAS,GAAa,CACpB,IAAK,IAAM,IAAK,CAAC,GAAG,CAAS,EAAG,EAAE,CACpC,CAEA,SAAgB,EAAiB,EAA+B,CAC9D,GAAO,EACP,EAAU,CAAE,GAAG,EAAQ,MAAK,GAAI,KAAK,IAAI,CAAE,EAC3C,EAAgB,MAAM,EACtB,EAAK,CACP,CAEA,SAAgB,GAAwC,CACtD,OAAO,CACT,CAEA,SAAgB,EAAgB,EAA2B,EAAc,KAAK,IAAI,EAAY,CAC5F,OAAO,EAAM,EAAQ,IAAM,CAC7B,CAGA,SAAgB,EAAc,EAA0B,CAClD,GAAS,MAAQ,IACrB,EAAU,KACV,EAAK,EACP,CAEA,SAAgB,EAAmB,EAAkC,CAEnE,OADA,EAAU,IAAI,CAAQ,MACT,EAAU,OAAO,CAAQ,CACxC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as e}from"./verse-model-DAOz9LrY.js";function t(e){if(e.git===null)return null;let t=[e.git.branch];return t.push(e.git.dirty===0?`clean`:`${e.git.dirty} changed`),e.git.ahead>0&&t.push(`${e.git.ahead} ahead`),e.git.behind>0&&t.push(`${e.git.behind} behind`),t.join(` · `)}function n(e){return e.exists?e.reachable?e.primary?`primary`:`extra`:`unreachable`:`missing`}function r(e){return e.exists?e.reachable?e.enrolled?null:`not enrolled — autonomous lane refuses it`:`this engine cannot reach it`:`missing on disk`}var i={critical:`Critical`,high:`High`,normal:`Normal`,low:`Low`},a=[`critical`,`high`,`normal`,`low`],o=`Priority orders the repositories the fleet already has. It never adds one — a repository that is not enrolled stays out of reach at every priority.`;function s(e,t){return t?.[e]??`normal`}function c(t,n){let r=t.trim();if(r.length===0)return{ok:!1,error:`Pick a primary folder.`,roots:[]};if(!e(r))return{ok:!1,error:`The primary folder must be an absolute path on this machine.`,roots:[]};let i=[r];for(let t of n){let n=t.trim();if(n.length!==0){if(!e(n))return{ok:!1,error:`Not an absolute path: ${n}`,roots:[]};i.includes(n)||i.push(n)}}return i.length>8?{ok:!1,error:`A workspace holds at most 8 folders.`,roots:[]}:{ok:!0,error:null,roots:i}}function l(e){return(e.roots.find(e=>e.primary)??e.roots[0])?.path??null}function u(e){return e.roots.length-1<=0?`1 folder`:`${e.roots.length} folders`}function d(e){let t=e.roots.find(e=>e.primary);return t?[t,...e.roots.filter(e=>e!==t)]:[...e.roots]}function f(e){return d(e).map(e=>e.path)}function p(e){return e==null||e===`claude`||e===`codex`||e===`local`}var m=`This seat’s CLI takes no additional-directory flag, so it will reach only the primary folder. The other folders will be unreachable — pick a Claude, Codex or local seat to use more than one.`;function h(e,t){return t<=1||p(e)?null:m}function g(e,t){return t<=1?null:h(e,t)??`The agent can read and write these folders for the life of this chat. Enrolment is separate — an unenrolled folder stays out of reach of the autonomous lane.`}var _=`Claude, Codex and local seats reach every folder here. A Grok seat reaches only the primary one.`;function v(e){let t=e.trim().replace(/[/\\]+$/,``),n=t.split(/[/\\]/).pop()??``;return n.length>0?n:t}function y(e,t){let[n=``,...r]=t,i=c(n,r);if(!i.ok)return{ok:!1,error:i.error,name:``,roots:[]};let a=e.trim(),o=a.length>0?a:v(i.roots[0]);return o.length===0?{ok:!1,error:`Give this project a name.`,name:``,roots:[]}:{ok:!0,error:null,name:o,roots:i.roots}}function b(e,t,n){let r=[...e],i=n===`up`?t-1:t+1;if(t<0||t>=r.length||i<0||i>=r.length)return r;let a=r[t];return r[t]=r[i],r[i]=a,r}function x(e){return e===0?`Primary folder`:`Folder ${e+1}`}export{f as _,v as a,b as c,t as d,x as f,l as g,y as h,a as i,s as l,c as m,i as n,h as o,n as p,o as r,g as s,_ as t,r as u,u as v};
|
|
2
|
+
//# sourceMappingURL=workspace-model-C-q_I8xN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-model-C-q_I8xN.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/workspace-model.ts"],"sourcesContent":["/**\n * routes/verse/workspace-model.ts — pure helpers for multi-root sessions.\n * No React, no I/O, so every rule below is testable without a DOM.\n *\n * The honesty rules these encode, and why each exists:\n *\n * - A root with no git repo shows \"not a git repo\", never a blank space where\n * a branch would be. An empty slot reads as \"clean on the default branch\".\n * - `dirty` is a COUNT of changed entries, so it is rendered as a count.\n * \"modified\" alone hides whether that is one file or forty.\n * - An unenrolled root says the autonomous lane refuses it, rather than\n * showing a warning that could be read as \"this chat cannot use it\" — it\n * can, and does.\n * - An unreachable root (a Grok seat, which has no additional-directory flag)\n * is listed and marked, never hidden. Hiding it would misrepresent the\n * workspace the operator chose.\n */\nimport type {\n VerseEngine,\n VerseRootPriority,\n VerseRootStatus,\n VerseSession,\n VerseWorkspace,\n VerseWorkspaceRoot,\n} from '../../data/api-types.js';\nimport { isAbsolutePath } from './verse-model.js';\n\n/** Hard cap, mirroring VERSE_MAX_WORKSPACE_ROOTS on the server. */\nexport const MAX_WORKSPACE_ROOTS = 8;\n\n/** Every root a session can reach, primary first. Mirrors `verseSessionRoots`. */\nexport function sessionRootPaths(session: Pick<VerseSession, 'projectPath' | 'extraRoots'>): string[] {\n const out = [session.projectPath];\n for (const root of session.extraRoots ?? []) {\n if (typeof root === 'string' && root.length > 0 && !out.includes(root)) out.push(root);\n }\n return out;\n}\n\n/** True when this session reaches more than its primary folder. */\nexport function isMultiRoot(session: Pick<VerseSession, 'projectPath' | 'extraRoots'>): boolean {\n return sessionRootPaths(session).length > 1;\n}\n\n/**\n * Short label for a session's folder scope: the primary's name, plus how many\n * more it carries. Used where only one line fits (a sidebar row, a pill).\n */\nexport function rootScopeLabel(\n session: Pick<VerseSession, 'projectPath' | 'extraRoots'>,\n primaryName: string,\n): string {\n const extra = sessionRootPaths(session).length - 1;\n return extra > 0 ? `${primaryName} +${extra}` : primaryName;\n}\n\n/**\n * One line of git identity for a root.\n *\n * Returns null when the root is not a repo, so the caller renders the \"not a\n * git repo\" wording ONCE rather than each caller inventing its own.\n */\nexport function rootGitLine(root: VerseRootStatus): string | null {\n if (root.git === null) return null;\n const parts = [root.git.branch];\n parts.push(root.git.dirty === 0 ? 'clean' : `${root.git.dirty} changed`);\n if (root.git.ahead > 0) parts.push(`${root.git.ahead} ahead`);\n if (root.git.behind > 0) parts.push(`${root.git.behind} behind`);\n return parts.join(' · ');\n}\n\nexport type RootTone = 'primary' | 'extra' | 'unreachable' | 'missing';\n\n/** Which visual treatment a root row gets. Missing beats unreachable. */\nexport function rootTone(root: VerseRootStatus): RootTone {\n if (!root.exists) return 'missing';\n if (!root.reachable) return 'unreachable';\n return root.primary ? 'primary' : 'extra';\n}\n\n/**\n * The plain-language caveat for one root, or null when there is nothing to\n * say. Word, never colour alone (DESIGN-V2 §6).\n */\nexport function rootCaveat(root: VerseRootStatus): string | null {\n if (!root.exists) return 'missing on disk';\n if (!root.reachable) return 'this engine cannot reach it';\n if (!root.enrolled) return 'not enrolled — autonomous lane refuses it';\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Priority\n// ---------------------------------------------------------------------------\n\nexport const ROOT_PRIORITY_LABEL: Record<VerseRootPriority, string> = {\n critical: 'Critical',\n high: 'High',\n normal: 'Normal',\n low: 'Low',\n};\n\nexport const ROOT_PRIORITY_ORDER: readonly VerseRootPriority[] =\n ['critical', 'high', 'normal', 'low'];\n\n/**\n * How a priority must be explained wherever it is offered.\n *\n * Priority orders what the autonomous lane already reaches. It is NOT a grant,\n * and the copy has to say so at the point of the choice — otherwise ranking a\n * repo `critical` reads as turning it on.\n */\nexport const ROOT_PRIORITY_NOTE =\n 'Priority orders the repositories the fleet already has. It never adds one — a repository that is not enrolled stays out of reach at every priority.';\n\n/**\n * Sort weight; lower sorts first. Mirrors `VERSE_ROOT_PRIORITY_RANK` on the\n * server so the list the operator re-ranks here and the list the autonomous\n * lane walks cannot be ordered differently.\n */\nexport const ROOT_PRIORITY_RANK: Record<VerseRootPriority, number> = {\n critical: 0,\n high: 1,\n normal: 2,\n low: 3,\n};\n\n/** A path's priority, treating an absent key as `normal` (as the server does). */\nexport function priorityOf(\n path: string,\n priorities: Readonly<Record<string, VerseRootPriority>> | undefined,\n): VerseRootPriority {\n return priorities?.[path] ?? 'normal';\n}\n\n/**\n * Paths most-important-first.\n *\n * STABLE: two paths at the same priority keep the order they were given, so\n * re-ranking one repo never silently shuffles the rest. Ordering only — this\n * neither adds nor removes a path.\n */\nexport function rankPathsByPriority(\n paths: readonly string[],\n priorities: Readonly<Record<string, VerseRootPriority>> | undefined,\n): string[] {\n return paths\n .map((path, index) => ({ path, index, rank: ROOT_PRIORITY_RANK[priorityOf(path, priorities)] }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((entry) => entry.path);\n}\n\n// ---------------------------------------------------------------------------\n// Root-set editing (the new-chat dialog and the workspace editor share this)\n// ---------------------------------------------------------------------------\n\nexport interface RootSetValidation {\n ok: boolean;\n /** One message, or null when the set is usable. */\n error: string | null;\n /** The set as it would be sent: trimmed, de-duplicated, primary first. */\n roots: string[];\n}\n\n/**\n * Validate a root set typed by hand.\n *\n * COURTESY ONLY. The server re-checks every path against the same deny roots\n * the enrollment registry uses, and it is the authority — this cannot know the\n * real home directory behind a `~`, and it must not pretend to.\n */\nexport function validateRootSet(primary: string, extras: readonly string[]): RootSetValidation {\n const trimmedPrimary = primary.trim();\n if (trimmedPrimary.length === 0) {\n return { ok: false, error: 'Pick a primary folder.', roots: [] };\n }\n if (!isAbsolutePath(trimmedPrimary)) {\n return { ok: false, error: 'The primary folder must be an absolute path on this machine.', roots: [] };\n }\n const roots = [trimmedPrimary];\n for (const raw of extras) {\n const root = raw.trim();\n if (root.length === 0) continue;\n if (!isAbsolutePath(root)) {\n return { ok: false, error: `Not an absolute path: ${root}`, roots: [] };\n }\n if (roots.includes(root)) continue;\n roots.push(root);\n }\n if (roots.length > MAX_WORKSPACE_ROOTS) {\n return { ok: false, error: `A workspace holds at most ${MAX_WORKSPACE_ROOTS} folders.`, roots: [] };\n }\n return { ok: true, error: null, roots };\n}\n\n/** The primary root of a stored workspace (the one a session uses as its cwd). */\nexport function workspacePrimary(workspace: VerseWorkspace): string | null {\n return (workspace.roots.find((r) => r.primary) ?? workspace.roots[0])?.path ?? null;\n}\n\n/** \"service +2 folders\" — how a workspace reads in a picker. */\nexport function workspaceSummary(workspace: VerseWorkspace): string {\n const extra = workspace.roots.length - 1;\n if (extra <= 0) return '1 folder';\n return `${workspace.roots.length} folders`;\n}\n\n/**\n * A workspace's roots in SEND order: the primary first, then the rest as\n * stored.\n *\n * `VerseWorkspace.roots` is documented primary-first, but the flag is the\n * authority and an update replaces the set wholesale with \"first entry is\n * primary\". Normalising here means a reorder can never accidentally demote\n * the primary because a stored record listed it second.\n */\nexport function orderedWorkspaceRoots(workspace: VerseWorkspace): VerseWorkspaceRoot[] {\n const primary = workspace.roots.find((r) => r.primary);\n if (!primary) return [...workspace.roots];\n return [primary, ...workspace.roots.filter((r) => r !== primary)];\n}\n\n/** The same order, as the bare paths `updateVerseWorkspace` takes. */\nexport function workspaceRootPaths(workspace: VerseWorkspace): string[] {\n return orderedWorkspaceRoots(workspace).map((r) => r.path);\n}\n\n// ---------------------------------------------------------------------------\n// Which engines reach more than the primary folder\n// ---------------------------------------------------------------------------\n\n/**\n * Whether this engine's CLI takes an additional-directory flag.\n *\n * Mirrors `engineSupportsExtraRoots` in src/core/verse/workspaces.ts. Grok\n * exposes no such flag at all (checked on grok 0.2.118), so a Grok seat gets\n * its primary root and nothing else — and the UI has to SAY that at the point\n * the seat is chosen rather than let the operator discover it from a diff that\n * never applies.\n *\n * `null` (no seat picked yet) reaches everything: there is nothing to warn\n * about until a seat exists.\n */\nexport function engineReachesExtraRoots(engine: VerseEngine | null | undefined): boolean {\n if (engine === null || engine === undefined) return true;\n return engine === 'claude' || engine === 'codex' || engine === 'local';\n}\n\nexport const EXTRA_ROOTS_REACHABLE_NOTE =\n 'The agent can read and write these folders for the life of this chat. Enrolment is separate — an unenrolled folder stays out of reach of the autonomous lane.';\n\nexport const EXTRA_ROOTS_UNREACHABLE_NOTE =\n 'This seat’s CLI takes no additional-directory flag, so it will reach only the primary folder. The other folders will be unreachable — pick a Claude, Codex or local seat to use more than one.';\n\n/**\n * The caveat for handing `rootCount` folders to a seat, or null when there is\n * nothing to warn about. Only ever the BAD news, so a caller can render it as\n * a warning without having to decide which sentence it got.\n */\nexport function extraRootsCaveat(\n engine: VerseEngine | null | undefined,\n rootCount: number,\n): string | null {\n if (rootCount <= 1) return null;\n return engineReachesExtraRoots(engine) ? null : EXTRA_ROOTS_UNREACHABLE_NOTE;\n}\n\n/** The full note for a multi-folder set: the caveat when there is one, the\n * enrolment reminder otherwise. Null when only one folder is in play. */\nexport function extraRootsNote(\n engine: VerseEngine | null | undefined,\n rootCount: number,\n): string | null {\n if (rootCount <= 1) return null;\n return extraRootsCaveat(engine, rootCount) ?? EXTRA_ROOTS_REACHABLE_NOTE;\n}\n\n/** Said once wherever a multi-folder project is DEFINED, where no seat is\n * chosen yet and so no per-seat caveat can be given. */\nexport const MULTI_ROOT_ENGINE_NOTE =\n 'Claude, Codex and local seats reach every folder here. A Grok seat reaches only the primary one.';\n\n// ---------------------------------------------------------------------------\n// Saved projects (the create/edit form behind the workspace routes)\n// ---------------------------------------------------------------------------\n\n/** The folder's own name, used when the operator names nothing. */\nexport function defaultWorkspaceName(primaryPath: string): string {\n const trimmed = primaryPath.trim().replace(/[/\\\\]+$/, '');\n const base = trimmed.split(/[/\\\\]/).pop() ?? '';\n return base.length > 0 ? base : trimmed;\n}\n\nexport interface WorkspaceDraftValidation {\n ok: boolean;\n /** One message, or null when the draft is sendable. */\n error: string | null;\n /** The name as it would be sent — never empty when `ok`. */\n name: string;\n /** Trimmed, de-duplicated, primary first. */\n roots: string[];\n}\n\n/**\n * Validate a saved project before it is sent.\n *\n * COURTESY ONLY, exactly like `validateRootSet`: the server re-checks every\n * path against the enrollment registry's deny roots and is the authority.\n */\nexport function validateWorkspaceDraft(\n name: string,\n roots: readonly string[],\n): WorkspaceDraftValidation {\n const [primary = '', ...extras] = roots;\n const set = validateRootSet(primary, extras);\n if (!set.ok) return { ok: false, error: set.error, name: '', roots: [] };\n const trimmed = name.trim();\n const resolved = trimmed.length > 0 ? trimmed : defaultWorkspaceName(set.roots[0]!);\n if (resolved.length === 0) {\n return { ok: false, error: 'Give this project a name.', name: '', roots: [] };\n }\n return { ok: true, error: null, name: resolved, roots: set.roots };\n}\n\n/**\n * Move one entry up or down by one place.\n *\n * Returns a NEW array, and returns the order unchanged when the move would\n * fall off either end — so a caller can wire it to a button that is disabled\n * at the ends without the two disagreeing.\n */\nexport function moveRoot<T>(roots: readonly T[], index: number, direction: 'up' | 'down'): T[] {\n const next = [...roots];\n const target = direction === 'up' ? index - 1 : index + 1;\n if (index < 0 || index >= next.length || target < 0 || target >= next.length) return next;\n const moved = next[index]!;\n next[index] = next[target]!;\n next[target] = moved;\n return next;\n}\n\n/**\n * How the first row must be described. The first root IS the primary — it is\n * the session's cwd and the only folder a Grok seat reaches — so the reorder\n * control is not cosmetic and the label has to say what it does.\n */\nexport function rootRowLabel(index: number): string {\n return index === 0 ? 'Primary folder' : `Folder ${index + 1}`;\n}\n"],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
<meta name="color-scheme" content="light dark" />
|
|
7
7
|
<title>Ashlrverse — operator console</title>
|
|
8
8
|
<meta name="referrer" content="no-referrer" />
|
|
9
|
-
<script type="module" crossorigin src="/next/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/next/assets/index-_izD07R9.js"></script>
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/next/assets/rolldown-runtime-hePW80VL.js">
|
|
10
11
|
</head>
|
|
11
12
|
<body>
|
|
12
13
|
<div id="root"></div>
|
|
@@ -32,6 +32,8 @@ const AGENT_ID = /^ag_[a-z0-9]{8,32}$/;
|
|
|
32
32
|
const QUEUE_ID = /^[0-9a-f]{12}$/;
|
|
33
33
|
const HEAD_SHA = /^[0-9a-f]{40}$/;
|
|
34
34
|
const REPO = /^[A-Za-z0-9][A-Za-z0-9-]{0,38}\/[A-Za-z0-9._-]{1,100}$/;
|
|
35
|
+
// Match the opaque cursor emitted by the activity route without accepting arbitrary query strings.
|
|
36
|
+
const ACTIVITY_CURSOR = /^v1\.[0-9a-f]{8}\.[et]\.\d{1,15}$/;
|
|
35
37
|
function exactParams(params, shape) {
|
|
36
38
|
const keys = [...params.keys()];
|
|
37
39
|
return keys.length === Object.keys(shape).length
|
|
@@ -109,6 +111,9 @@ export function classifyRemoteRoute(method, rawTarget) {
|
|
|
109
111
|
if (query === undefined)
|
|
110
112
|
return { kind: 'deny' };
|
|
111
113
|
const params = new URLSearchParams(query);
|
|
114
|
+
if (path === '/api/verse/activity'
|
|
115
|
+
&& exactParams(params, { since: (v) => ACTIVITY_CURSOR.test(v) }))
|
|
116
|
+
return { kind: 'read', path };
|
|
112
117
|
if (path === '/api/verse/authority/ledger'
|
|
113
118
|
&& exactParams(params, { view: (v) => v === 'decisions', limit: (v) => v === '40' }))
|
|
114
119
|
return { kind: 'read', path };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-gateway-policy.js","sourceRoot":"","sources":["../../../src/core/web/remote-gateway-policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-gateway-policy.js","sourceRoot":"","sources":["../../../src/core/web/remote-gateway-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* - Vite's content-hashed chunks under /next/assets/ (`name-<8 char hash>.ext`)
|
|
19
19
|
* are served `public, max-age=31536000, immutable`: their bytes can never
|
|
20
20
|
* change under that name, so a relaunch re-downloads nothing and WebKit's
|
|
21
|
-
* bytecode cache can keep them.
|
|
22
|
-
*
|
|
23
|
-
* bodyless
|
|
21
|
+
* bytecode cache can keep them. HTML is `no-store` and always returns its
|
|
22
|
+
* body, so an old shell cannot refer to chunks removed by a new install.
|
|
23
|
+
* Other stable paths stay `no-cache` with a strong ETag for bodyless 304s.
|
|
24
24
|
* - Text assets are sent brotli- or gzip-encoded per Accept-Encoding. The
|
|
25
25
|
* compression runs on the libuv threadpool (never the request thread): the
|
|
26
26
|
* first request for a file is served identity-encoded while the encoded
|
|
@@ -31,6 +31,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
|
31
31
|
/** Where the /verse/m service worker is served (see serveStatic's path map). */
|
|
32
32
|
export declare const VERSE_MOBILE_SW_PATH = "/verse/m/sw.js";
|
|
33
33
|
export declare const IMMUTABLE_CACHE_CONTROL = "public, max-age=31536000, immutable";
|
|
34
|
+
export declare const HTML_CACHE_CONTROL = "no-store";
|
|
34
35
|
export declare const REVALIDATE_CACHE_CONTROL = "no-cache";
|
|
35
36
|
/** Only content-hashed build output is immutable; a stable name never is. */
|
|
36
37
|
export declare function isImmutableAssetPath(pathname: string): boolean;
|
package/dist/core/web/static.js
CHANGED
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* - Vite's content-hashed chunks under /next/assets/ (`name-<8 char hash>.ext`)
|
|
19
19
|
* are served `public, max-age=31536000, immutable`: their bytes can never
|
|
20
20
|
* change under that name, so a relaunch re-downloads nothing and WebKit's
|
|
21
|
-
* bytecode cache can keep them.
|
|
22
|
-
*
|
|
23
|
-
* bodyless
|
|
21
|
+
* bytecode cache can keep them. HTML is `no-store` and always returns its
|
|
22
|
+
* body, so an old shell cannot refer to chunks removed by a new install.
|
|
23
|
+
* Other stable paths stay `no-cache` with a strong ETag for bodyless 304s.
|
|
24
24
|
* - Text assets are sent brotli- or gzip-encoded per Accept-Encoding. The
|
|
25
25
|
* compression runs on the libuv threadpool (never the request thread): the
|
|
26
26
|
* first request for a file is served identity-encoded while the encoded
|
|
@@ -64,6 +64,7 @@ function contentTypeFor(filePath) {
|
|
|
64
64
|
/** Where the /verse/m service worker is served (see serveStatic's path map). */
|
|
65
65
|
export const VERSE_MOBILE_SW_PATH = '/verse/m/sw.js';
|
|
66
66
|
export const IMMUTABLE_CACHE_CONTROL = 'public, max-age=31536000, immutable';
|
|
67
|
+
export const HTML_CACHE_CONTROL = 'no-store';
|
|
67
68
|
export const REVALIDATE_CACHE_CONTROL = 'no-cache';
|
|
68
69
|
/** Vite's default chunk/asset naming: `<name>-<8 url-safe base64 chars>.<ext>`. */
|
|
69
70
|
const HASHED_ASSET_RE = /^\/next\/assets\/[^/]+-[A-Za-z0-9_-]{8}\.[A-Za-z0-9]+$/;
|
|
@@ -274,7 +275,9 @@ export function serveStatic(req, res, dir, beforeDescriptorOpen = undefined) {
|
|
|
274
275
|
openedAfter.ctimeMs !== namedAfter.ctimeMs)
|
|
275
276
|
return false;
|
|
276
277
|
const contentType = contentTypeFor(candidate);
|
|
277
|
-
const
|
|
278
|
+
const isHtml = extname(candidate).toLowerCase() === '.html';
|
|
279
|
+
const cacheControl = isHtml ? HTML_CACHE_CONTROL
|
|
280
|
+
: isImmutableAssetPath(pathname) ? IMMUTABLE_CACHE_CONTROL : REVALIDATE_CACHE_CONTROL;
|
|
278
281
|
const etag = etagFor(openedAfter);
|
|
279
282
|
const compressible = COMPRESSIBLE_EXTENSIONS.has(extname(candidate).toLowerCase()) &&
|
|
280
283
|
body.byteLength >= MIN_COMPRESS_BYTES && body.byteLength <= MAX_COMPRESS_INPUT_BYTES;
|
|
@@ -288,7 +291,7 @@ export function serveStatic(req, res, dir, beforeDescriptorOpen = undefined) {
|
|
|
288
291
|
headers['Vary'] = 'Accept-Encoding';
|
|
289
292
|
const reqHeaders = req.headers ?? {};
|
|
290
293
|
res.setHeader('Content-Type', contentType);
|
|
291
|
-
if (ifNoneMatchHits(reqHeaders['if-none-match'], etag)) {
|
|
294
|
+
if (!isHtml && ifNoneMatchHits(reqHeaders['if-none-match'], etag)) {
|
|
292
295
|
res.writeHead(304, headers);
|
|
293
296
|
res.end();
|
|
294
297
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../../src/core/web/static.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../../src/core/web/static.ts"],"names":[],"mappings":"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"}
|