@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":"ChangesPaneHost-CS5qGjwM.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/changes/review-comments.ts","../../../../../../src/web-ui/routes/verse/changes/ChangesPanel.module.css","../../../../../../src/web-ui/routes/verse/changes/ReviewThread.tsx","../../../../../../src/web-ui/routes/verse/changes/HunkPatch.tsx","../../../../../../src/web-ui/routes/verse/changes/ReReviewMenu.tsx","../../../../../../src/web-ui/routes/verse/changes/UndoDialog.tsx","../../../../../../src/web-ui/routes/verse/changes/ChangesPanel.tsx","../../../../../../src/web-ui/routes/verse/changes/ChangesPaneHost.tsx"],"sourcesContent":["/**\n * routes/verse/changes/review-comments.ts — review comments on a turn's\n * changes, sent back to a seat (3.15). Pure: anchors, the two messages, and\n * the draft store. No React.\n *\n * Send N comments ONE turn to the chat's own seat: `path:line — comment`\n * per comment, each thread followed by a short fenced\n * excerpt of the diff lines it is anchored to.\n * Re-review with… a read-only review request to ANOTHER seat: the\n * turn's diff (fenced) plus the drafted comments as\n * context, in core/verse/multimodel/compare.ts\n * `reviewPrompt`'s words.\n *\n * ANCHORS are captured when a comment is written — the hunk's header core,\n * the line and its side, and the excerpt itself — so a draft still reads\n * right after the diff moves on (a later turn, a reload, a Reject).\n *\n * DRAFTS persist per chat + turn in localStorage (every access guarded: a\n * private window or a full quota only loses persistence, never the pane) and\n * are cleared once sent.\n *\n * SIZE. Both messages are capped at MESSAGE_MAX_BYTES (UTF-8). Excerpts go\n * first (full → the anchored line → none); comments that still do not fit are\n * left as drafts and reported, never silently dropped.\n */\nimport { reviewPrompt } from '../../../../core/verse/multimodel/compare.js';\nimport type { DiffLine } from '../../inbox/diff-parser.js';\n\nexport type CommentSide = 'new' | 'old';\n\nexport interface CommentAnchor {\n path: string;\n /** The hunk's header core, `@@ -a,b +c,d @@` — stable while the hunk is. */\n hunk: string;\n /** The file line; null = the whole hunk. */\n line: number | null;\n /** `old` only for a removed line (its number is the OLD file's). */\n side: CommentSide;\n /** The anchored diff lines, each prefixed ` `, `+` or `-`, captured when written. */\n excerpt: string[];\n /** Index into `excerpt` of the anchored line itself (-1 for a whole hunk). */\n excerptAt: number;\n}\n\nexport interface ReviewComment extends CommentAnchor {\n id: string;\n body: string;\n /** ISO time the comment was written (sort tie-breaker). */\n at: string;\n}\n\n/** 24 KB: roomy for a review, far below any seat's context, quick to send. */\nexport const MESSAGE_MAX_BYTES = 24 * 1024;\n/** A comment's own cap (the textarea's maxLength). */\nexport const COMMENT_MAX_CHARS = 4_000;\n/** Context lines either side of an anchored line. */\nconst EXCERPT_CONTEXT = 2;\n/** Lines of a whole-hunk excerpt. */\nconst EXCERPT_HUNK_LINES = 12;\n/** Characters kept of one excerpt line. */\nconst EXCERPT_LINE_CHARS = 240;\n\n// ---------------------------------------------------------------------------\n// Anchors\n// ---------------------------------------------------------------------------\n\nconst HEADER_CORE = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/;\n\n/** `@@ -1,3 +1,4 @@` of a full hunk header (section text dropped); the header itself when it does not parse. */\nexport function hunkCore(header: string): string {\n return HEADER_CORE.exec(header)?.[0] ?? header;\n}\n\n/** A diff line's own anchor: the NEW line number, the OLD one for a removed line. */\nexport function lineAnchor(line: DiffLine): { line: number | null; side: CommentSide } {\n return line.kind === 'del' ? { line: line.oldLineNo, side: 'old' } : { line: line.newLineNo, side: 'new' };\n}\n\n/** Stable key of a line within a file: `new:42`, `old:17`. */\nexport function lineKey(anchor: { line: number | null; side: CommentSide }): string {\n return anchor.line === null ? 'hunk' : `${anchor.side}:${anchor.line}`;\n}\n\n/** Comments on the same hunk + line form one thread. */\nexport function threadKey(c: Pick<CommentAnchor, 'path' | 'hunk' | 'line' | 'side'>): string {\n return `${c.path}\\u0000${c.hunk}\\u0000${lineKey(c)}`;\n}\n\nfunction prefixed(line: DiffLine): string {\n const mark = line.kind === 'add' ? '+' : line.kind === 'del' ? '-' : ' ';\n const text = line.text.length > EXCERPT_LINE_CHARS ? `${line.text.slice(0, EXCERPT_LINE_CHARS)}…` : line.text;\n return `${mark}${text}`;\n}\n\n/**\n * The excerpt for an anchor inside `lines` (one hunk's lines): the anchored\n * line with EXCERPT_CONTEXT lines either side, or — for the whole hunk\n * (`index` null) — its first EXCERPT_HUNK_LINES lines.\n */\nexport function excerptFor(lines: readonly DiffLine[], index: number | null): { excerpt: string[]; excerptAt: number } {\n if (index === null || index < 0 || index >= lines.length) {\n const shown = lines.slice(0, EXCERPT_HUNK_LINES).map(prefixed);\n if (lines.length > EXCERPT_HUNK_LINES) shown.push(` … ${lines.length - EXCERPT_HUNK_LINES} more lines`);\n return { excerpt: shown, excerptAt: -1 };\n }\n const from = Math.max(0, index - EXCERPT_CONTEXT);\n const to = Math.min(lines.length, index + EXCERPT_CONTEXT + 1);\n return { excerpt: lines.slice(from, to).map(prefixed), excerptAt: index - from };\n}\n\n/** `+20,3` of a header as a line range on the new side (the old side for a pure removal). */\nfunction hunkRange(hunk: string): string | null {\n const m = HEADER_CORE.exec(hunk);\n if (!m) return null;\n const newStart = Number(m[3]);\n const newLines = m[4] === undefined ? 1 : Number(m[4]);\n if (newLines === 0) {\n const oldStart = Number(m[1]);\n const oldLines = m[2] === undefined ? 1 : Number(m[2]);\n return oldLines <= 1 ? `${oldStart} (removed)` : `${oldStart}-${oldStart + oldLines - 1} (removed)`;\n }\n return newLines <= 1 ? `${newStart}` : `${newStart}-${newStart + newLines - 1}`;\n}\n\n/** `src/a.ts:42`, `src/a.ts:17 (removed line)`, `src/a.ts:20-22` for a whole hunk. */\nexport function anchorLabel(c: Pick<CommentAnchor, 'path' | 'hunk' | 'line' | 'side'>): string {\n if (c.line === null) {\n const range = hunkRange(c.hunk);\n return range ? `${c.path}:${range}` : c.path;\n }\n return `${c.path}:${c.line}${c.side === 'old' ? ' (removed line)' : ''}`;\n}\n\n/** Short human \"where\" for the thread header: `Line 42`, `Removed line 17`, `Lines 20-22`. */\nexport function anchorWhere(c: Pick<CommentAnchor, 'hunk' | 'line' | 'side'>): string {\n if (c.line === null) {\n const range = hunkRange(c.hunk);\n return range ? `Lines ${range}` : 'Whole change';\n }\n return `${c.side === 'old' ? 'Removed line' : 'Line'} ${c.line}`;\n}\n\n/** File order, then line order (a whole-hunk comment at its hunk's start), then time. */\nexport function sortComments(comments: readonly ReviewComment[]): ReviewComment[] {\n const pos = (c: ReviewComment) => {\n if (c.line !== null) return c.line;\n const m = HEADER_CORE.exec(c.hunk);\n return m ? Number(m[3]) - 0.5 : 0;\n };\n return [...comments].sort((a, b) => {\n if (a.path !== b.path) return a.path < b.path ? -1 : 1;\n const d = pos(a) - pos(b);\n if (d !== 0) return d;\n return a.at < b.at ? -1 : a.at > b.at ? 1 : 0;\n });\n}\n\n/** Threads in display order, each with its comments oldest first. */\nexport function groupThreads(comments: readonly ReviewComment[]): ReviewComment[][] {\n const out = new Map<string, ReviewComment[]>();\n for (const c of sortComments(comments)) {\n const k = threadKey(c);\n const t = out.get(k);\n if (t) t.push(c);\n else out.set(k, [c]);\n }\n return [...out.values()];\n}\n\n// ---------------------------------------------------------------------------\n// Text helpers\n// ---------------------------------------------------------------------------\n\nconst encoder = new TextEncoder();\n\nexport function utf8Bytes(text: string): number {\n return encoder.encode(text).length;\n}\n\n/** A fence one backtick longer than any backtick run inside (at least three), so the body cannot close it. */\nexport function fenceFor(body: string): string {\n let longest = 0;\n for (const m of body.matchAll(/`+/g)) longest = Math.max(longest, m[0].length);\n return '`'.repeat(Math.max(3, longest + 1));\n}\n\nexport function fenced(body: string, lang = ''): string {\n const ticks = fenceFor(body);\n return `${ticks}${lang}\\n${body.replace(/\\s+$/, '')}\\n${ticks}`;\n}\n\n/** `anchor — first line`, later lines indented under it so a comment stays one block. */\nfunction commentLine(anchor: string, body: string): string {\n const [first, ...rest] = body.trim().split('\\n');\n return [`${anchor} — ${first ?? ''}`, ...rest.map((l) => ` ${l}`)].join('\\n');\n}\n\ntype ExcerptMode = 'full' | 'line' | 'none';\n\nfunction threadBlock(thread: readonly ReviewComment[], mode: ExcerptMode): string {\n const head = thread[0]!;\n const anchor = anchorLabel(head);\n const parts = thread.map((c) => commentLine(anchor, c.body));\n const excerpt = mode === 'full' ? head.excerpt : mode === 'line' && head.excerptAt >= 0 ? [head.excerpt[head.excerptAt] ?? ''] : [];\n if (excerpt.length > 0) parts.push(fenced(excerpt.join('\\n'), 'diff'));\n return parts.join('\\n');\n}\n\nexport interface BuiltMessage {\n text: string;\n /** Ids of the comments the text carries. */\n included: string[];\n /** Comments that did not fit and stay drafted. */\n omitted: number;\n}\n\n/**\n * Pack threads under `head` within `budget` bytes: every excerpt mode is\n * tried in turn; in the last, threads that still overflow are left out.\n */\nfunction pack(head: string, threads: readonly ReviewComment[][], budget: number): BuiltMessage {\n for (const mode of ['full', 'line'] as const) {\n const text = [head, ...threads.map((t) => threadBlock(t, mode))].join('\\n\\n');\n if (utf8Bytes(text) <= budget) return { text, included: threads.flatMap((t) => t.map((c) => c.id)), omitted: 0 };\n }\n const blocks: string[] = [head];\n const included: string[] = [];\n let used = utf8Bytes(head);\n let omitted = 0;\n for (const t of threads) {\n const block = threadBlock(t, 'none');\n const cost = utf8Bytes(block) + 2;\n if (used + cost > budget) {\n omitted += t.length;\n continue;\n }\n blocks.push(block);\n used += cost;\n included.push(...t.map((c) => c.id));\n }\n return { text: blocks.join('\\n\\n'), included, omitted };\n}\n\n// ---------------------------------------------------------------------------\n// Send N comments → the chat's own seat\n// ---------------------------------------------------------------------------\n\nexport function buildCommentsMessage(\n comments: readonly ReviewComment[],\n opts: { turnLabel: string; maxBytes?: number },\n): BuiltMessage {\n const threads = groupThreads(comments);\n const n = comments.length;\n const head = [\n `Review comments on your changes in ${opts.turnLabel} (${n} ${n === 1 ? 'comment' : 'comments'}, anchored as path:line).`,\n 'Address each one in the code, then reply with one line per comment saying what you changed — or why you did not.',\n ].join(' ');\n return pack(head, threads, opts.maxBytes ?? MESSAGE_MAX_BYTES);\n}\n\n// ---------------------------------------------------------------------------\n// Re-review with… → another seat, read-only\n// ---------------------------------------------------------------------------\n\nexport interface ReviewFilePatch {\n path: string;\n /** The file's unified diff (`diff --git …`). */\n text: string;\n}\n\nexport interface ReReviewInput {\n /** Who made the changes (\"Claude Code\"). */\n authorLabel: string;\n /** \"turn 3\" / \"turn 3 and everything after it\". */\n scopeLabel: string;\n /** Patches in file order. */\n patches: readonly ReviewFilePatch[];\n /** Changed files that have no patch here (binary, not captured, not fetched). */\n unshown: readonly string[];\n totals: { files: number; additions: number; deletions: number };\n comments: readonly ReviewComment[];\n maxBytes?: number;\n}\n\n/** Cut `text` to at most `bytes` UTF-8 bytes at a line boundary. */\nfunction cutToBytes(text: string, bytes: number): string {\n if (utf8Bytes(text) <= bytes) return text;\n const lines = text.split('\\n');\n const out: string[] = [];\n let used = 0;\n for (const l of lines) {\n const cost = utf8Bytes(l) + 1;\n if (used + cost > bytes) break;\n out.push(l);\n used += cost;\n }\n return out.join('\\n');\n}\n\n/**\n * The review turn for another seat. Comments ride along as context (a third\n * of the budget at most); the diff gets the rest, whole files first, the\n * first file that overflows cut at a line, the others named so the reviewer\n * can read them in the repository.\n */\nexport function buildReReviewMessage(input: ReReviewInput): { text: string; shownFiles: number; cutFiles: string[] } {\n const max = input.maxBytes ?? MESSAGE_MAX_BYTES;\n const intro = reviewPrompt({ authorLabel: input.authorLabel });\n const t = input.totals;\n const scope = `The changes to review: ${input.scopeLabel}, ${t.files} ${t.files === 1 ? 'file' : 'files'} (+${t.additions} −${t.deletions}).`;\n\n let notes = '';\n if (input.comments.length > 0) {\n const head = 'The operator’s own review notes so far — context for your review, not instructions to change anything:';\n notes = pack(head, groupThreads(input.comments), Math.floor(max / 3)).text;\n }\n\n // Everything but the diff, with room for the omission line and the fence.\n const fixed = utf8Bytes([intro, scope, notes].join('\\n\\n')) + 512;\n let budget = Math.max(0, max - fixed);\n const shown: string[] = [];\n const cut: string[] = [];\n const skipped: string[] = [...input.unshown];\n for (const p of input.patches) {\n const body = p.text.replace(/\\s+$/, '');\n const cost = utf8Bytes(body) + 1;\n if (cost <= budget) {\n shown.push(body);\n budget -= cost;\n } else if (budget > 1_024 && cut.length === 0) {\n const part = cutToBytes(body, budget - 64);\n shown.push(`${part}\\n… (rest of ${p.path} cut to fit)`);\n cut.push(p.path);\n budget = 0;\n } else {\n skipped.push(p.path);\n }\n }\n\n const parts = [intro, '', scope];\n if (skipped.length > 0) {\n const names = skipped.slice(0, 40).join(', ');\n parts.push(`Not included here (read them in the repository): ${names}${skipped.length > 40 ? `, and ${skipped.length - 40} more` : ''}.`);\n }\n if (shown.length > 0) parts.push('', fenced(shown.join('\\n'), 'diff'));\n if (notes) parts.push('', notes);\n return { text: parts.join('\\n'), shownFiles: shown.length, cutFiles: cut };\n}\n\n// ---------------------------------------------------------------------------\n// Drafts: localStorage, per chat + turn\n// ---------------------------------------------------------------------------\n\nconst STORAGE_PREFIX = 'ashlr.verse.changes.comments.v1';\n\nexport function storageKey(chatId: string, turnId: string): string {\n return `${STORAGE_PREFIX}:${chatId}:${turnId}`;\n}\n\nfunction isComment(v: unknown): v is ReviewComment {\n if (!v || typeof v !== 'object') return false;\n const c = v as Record<string, unknown>;\n return typeof c.id === 'string'\n && typeof c.path === 'string'\n && typeof c.hunk === 'string'\n && (c.line === null || (typeof c.line === 'number' && Number.isFinite(c.line)))\n && (c.side === 'new' || c.side === 'old')\n && Array.isArray(c.excerpt) && c.excerpt.every((l) => typeof l === 'string')\n && typeof c.excerptAt === 'number'\n && typeof c.body === 'string'\n && typeof c.at === 'string';\n}\n\n/** The drafted comments for a chat's turn; [] when none, unreadable, or storage is off. */\nexport function loadComments(chatId: string, turnId: string): ReviewComment[] {\n try {\n const raw = localStorage.getItem(storageKey(chatId, turnId));\n if (!raw) return [];\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed.filter(isComment) : [];\n } catch {\n return [];\n }\n}\n\n/** Persist (an empty list removes the key). False when storage refused — the drafts still live in memory. */\nexport function saveComments(chatId: string, turnId: string, comments: readonly ReviewComment[]): boolean {\n try {\n if (comments.length === 0) localStorage.removeItem(storageKey(chatId, turnId));\n else localStorage.setItem(storageKey(chatId, turnId), JSON.stringify(comments));\n return true;\n } catch {\n return false;\n }\n}\n\nlet seq = 0;\nexport function newCommentId(now: number = Date.now()): string {\n seq = (seq + 1) % 1_000_000;\n return `rc-${now.toString(36)}-${seq.toString(36)}-${Math.random().toString(36).slice(2, 6)}`;\n}\n","/*\n * Changes pane (3.15). The patch grid, file list, tints and container query\n * come from ../git/DiffPane.module.css (so a change looks the same here and\n * in Review); this file adds only the pane's own pieces: the review\n * toolbar, per-file and per-hunk Accept/Reject, and the Undo dialog.\n * Tokens only (style-scan-310).\n */\n.panel { position: relative; }\n\n.head { flex-wrap: wrap; }\n.select {\n min-height: var(--control-h-sm);\n max-width: 28ch;\n padding: 0 var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-input);\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-sm-size);\n}\n.select:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }\n.select:disabled { color: var(--text-tertiary); }\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n\n/* ---- toolbar: totals on the left, the turn's actions on the right --------- */\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n padding-right: var(--space-2);\n border-bottom: 1px solid var(--border-subtle);\n}\n.toolbarActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-1);\n padding: var(--space-1) 0 var(--space-1) var(--space-2);\n}\n\n.banner,\n.notice {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n border-bottom: 1px solid var(--border-subtle);\n}\n.banner { background: var(--status-warning-bg); color: var(--status-warning-fg); }\n.notice { color: var(--text-secondary); }\n.notice[data-tone='error'] { color: var(--status-danger-fg); background: var(--status-danger-bg); }\n\n.body { flex: 1 1 auto; }\n\n/* ---- files ------------------------------------------------------------------ */\n\n.badge {\n flex: none;\n padding: 0 var(--space-1);\n border-radius: var(--radius-xs);\n background: var(--status-warning-bg);\n color: var(--status-warning-fg);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n white-space: nowrap;\n}\n\n.fileActions {\n flex: none;\n display: inline-flex;\n gap: var(--space-1);\n}\n.iconAction {\n display: inline-grid;\n place-items: center;\n min-width: var(--control-h-xs);\n height: var(--control-h-xs);\n padding: 0 var(--space-1);\n border: 1px solid transparent;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--text-secondary);\n font: inherit;\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n.iconAction:hover:not(:disabled) { background: var(--bg-hover); color: var(--text-primary); border-color: var(--border-default); }\n.iconAction:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }\n.iconAction:disabled { cursor: default; opacity: 0.5; }\n.iconAction[data-tone='danger']:hover:not(:disabled) { color: var(--status-danger-fg); }\n.iconAction[data-armed='true'] {\n color: var(--status-danger-fg);\n border-color: var(--status-danger-fg);\n background: var(--status-danger-bg);\n}\n/* An accepted file reads as done: dimmed, still selectable. */\n[data-accepted='true'] > [class] { opacity: 0.72; }\n\n/* ---- hunks -------------------------------------------------------------------- */\n\n.hunk[data-accepted='true'] td { opacity: 0.72; }\n.hunkBar {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n min-height: var(--control-h-xs);\n}\n.hunkLabel {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.reviewed {\n flex: none;\n font-family: var(--font-display);\n color: var(--status-success-fg);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n letter-spacing: var(--tracking-label);\n text-transform: uppercase;\n}\n.hunkActions { flex: none; display: inline-flex; gap: var(--space-1); }\n.hunkButton {\n height: var(--control-h-xs);\n padding: 0 var(--space-2);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-sm);\n background: var(--bg-canvas);\n color: var(--text-primary);\n font-family: var(--font-ui);\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n.hunkButton:hover:not(:disabled) { background: var(--bg-hover); }\n.hunkButton[data-tone='danger']:hover:not(:disabled) { color: var(--status-danger-fg); border-color: var(--status-danger-fg); }\n.hunkButton:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }\n.hunkButton:disabled { cursor: default; opacity: 0.55; }\n\n/* ---- Undo / Redo dialog ----------------------------------------------------------- */\n\n.undoDialog { width: min(52rem, calc(100vw - 2 * var(--space-4))); max-width: none; }\n.undoBody {\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n}\n.facts {\n list-style: none;\n margin: 0;\n padding: var(--space-3);\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-md);\n background: var(--bg-surface);\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n.facts [data-tone='warning'] { color: var(--status-warning-fg); }\n.facts strong { color: var(--text-primary); font-weight: var(--font-weight-semibold); }\n\n.rootNote { margin: 0; color: var(--text-secondary); font-size: var(--text-sm-size); }\n.undoRoot { display: flex; flex-direction: column; gap: var(--space-2); }\n.undoRootName {\n margin: 0;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n font-weight: var(--font-weight-semibold);\n}\n.undoList summary {\n cursor: pointer;\n color: var(--text-secondary);\n font-size: var(--text-sm-size);\n}\n.undoList ul {\n margin: var(--space-1) 0 0;\n padding-left: var(--space-4);\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n font-size: var(--text-xs-size);\n}\n.undoList code { font-family: var(--font-mono); overflow-wrap: anywhere; }\n.undoList li { display: flex; gap: var(--space-2); align-items: baseline; }\n\n.conflict {\n margin: 0;\n padding: var(--space-3);\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n border: 1px solid var(--status-warning-fg);\n border-radius: var(--radius-md);\n min-width: 0;\n}\n.conflict[data-decided='true'] { border-color: var(--border-default); }\n.conflictPath {\n display: flex;\n gap: var(--space-2);\n align-items: baseline;\n padding: 0 var(--space-1);\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n font-weight: var(--font-weight-semibold);\n overflow-wrap: anywhere;\n}\n.conflictWhy { margin: 0; color: var(--text-secondary); font-size: var(--text-sm-size); }\n.conflictTabs { display: flex; gap: var(--space-1); }\n.tab {\n padding: var(--space-1) var(--space-2);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--text-secondary);\n font: inherit;\n font-size: var(--text-xs-size);\n cursor: pointer;\n}\n.tab[aria-selected='true'] { background: var(--bg-selected); color: var(--text-primary); border-color: var(--border-default); }\n.tab:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }\n.conflictText {\n margin: 0;\n max-height: 16rem;\n overflow: auto;\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-sm);\n background: var(--bg-code);\n color: var(--text-primary);\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line-relaxed);\n white-space: pre;\n}\n.conflictText:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); }\n.choices { display: flex; flex-wrap: wrap; gap: var(--space-3); }\n.choice {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-size: var(--text-sm-size);\n cursor: pointer;\n}\n.choice[data-disabled='true'] { color: var(--text-tertiary); cursor: default; }\n\n.error { margin: 0; color: var(--status-danger-fg); font-size: var(--text-sm-size); }\n.hint { margin-right: auto; color: var(--text-secondary); font-size: var(--text-xs-size); }\n.dialogActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n /* Sticks to the bottom of the dialog's own scroll box (its padding included). */\n position: sticky;\n bottom: calc(var(--space-5) * -1);\n margin-bottom: calc(var(--space-5) * -1);\n padding: var(--space-3) 0 var(--space-5);\n border-top: 1px solid var(--border-subtle);\n background: var(--bg-surface-raised);\n}\n\n/* ---- the pane host: Turns | Git over one body -------------------------------- */\n\n.host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.hostBar {\n flex: none;\n display: flex;\n align-items: center;\n padding: var(--space-1) var(--space-3);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n.hostBody {\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* ---- review comments: threads in the patch, the drafts bar, Re-review menu ---- */\n\n.thread + .thread,\n.thread + .commentEditor { margin-top: var(--space-2); padding-top: var(--space-2); border-top: 1px solid var(--border-subtle); }\n.threadComment { grid-template-columns: auto 1fr auto; }\n.commentActions { display: inline-flex; gap: var(--space-1); }\n.replyButton { margin-top: var(--space-1); }\n.commentEditor { max-width: 72ch; }\n.thread [data-tone='danger'],\n.drafts [data-tone='danger'] { color: var(--status-danger-fg); }\n.picker {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-2);\n}\n.picker .select { max-width: min(60ch, 100%); font-family: var(--font-mono); font-size: var(--text-xs-size); }\n\n.orphans {\n margin: 0;\n padding: var(--space-2) var(--space-3);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n.orphansTitle {\n margin: 0 0 var(--space-1);\n color: var(--text-secondary);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n}\n\n.drafts {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n}\n.draftList { flex: 1 1 20rem; min-width: 0; }\n.draftList summary { cursor: pointer; color: var(--text-secondary); }\n.draftList summary:focus-visible { outline: none; box-shadow: var(--shadow-focus-ring); border-radius: var(--radius-xs); }\n.draftList ul {\n list-style: none;\n margin: var(--space-1) 0 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n}\n.draftList li { display: flex; align-items: baseline; gap: var(--space-2); min-width: 0; }\n.draftList code { font-family: var(--font-mono); font-size: var(--text-xs-size); }\n.draftBody {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--text-primary);\n}\n\n.menuWrap { position: relative; }\n.menu {\n position: absolute;\n right: 0;\n top: calc(100% + var(--space-1));\n z-index: var(--z-dropdown);\n min-width: 15rem;\n max-width: min(20rem, calc(100vw - var(--space-8)));\n padding: var(--space-1);\n display: flex;\n flex-direction: column;\n background: var(--bg-surface-raised);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-menu);\n}\n.menu:focus { outline: none; }\n.menuItem {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n width: 100%;\n padding: var(--space-2) var(--space-3);\n border: 0;\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--text-primary);\n font: inherit;\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n text-align: left;\n cursor: pointer;\n}\n.menuItem:hover,\n.menuItem:focus-visible { background: var(--bg-hover); outline: none; }\n.menuLabel { font-weight: var(--font-weight-medium); }\n.menuNote { font-size: var(--text-xs-size); line-height: var(--text-xs-line); color: var(--text-tertiary); }\n","/**\n * routes/verse/changes/ReviewThread.tsx — the inline pieces of review\n * comments in the Changes pane (3.15): a thread of drafted comments on one\n * line or hunk (each editable and deletable until sent), and the comment\n * editor. HunkPatch places them in the patch grid; review-comments.ts holds\n * the anchors, the messages and the draft store.\n *\n * Styles are the Review pane's comment styles (../git/DiffPane.module.css),\n * so a comment looks the same in both panes.\n *\n * KEYBOARD. In the editor ⌘/Ctrl+Enter saves and Escape cancels; focus goes\n * back to whatever opened it. Every action is a labelled button.\n */\nimport { useEffect, useId, useRef, useState, type ReactNode } from 'react';\nimport { anchorWhere, COMMENT_MAX_CHARS, type ReviewComment } from './review-comments.js';\nimport review from '../git/DiffPane.module.css';\nimport styles from './ChangesPanel.module.css';\n\nexport interface CommentEditorProps {\n /** The visible label of the text box (\"Comment on line 42\"). */\n label: string;\n initial?: string;\n submitLabel: string;\n /** Rendered above the text box (the line picker). */\n picker?: ReactNode;\n onSave: (body: string) => void;\n onCancel: () => void;\n}\n\nexport function CommentEditor({ label, initial = '', submitLabel, picker, onSave, onCancel }: CommentEditorProps) {\n const [body, setBody] = useState(initial);\n const ref = useRef<HTMLTextAreaElement>(null);\n const id = useId();\n // Where focus was when the editor opened, so closing it returns there.\n const opener = useRef<Element | null>(typeof document !== 'undefined' ? document.activeElement : null);\n\n useEffect(() => {\n ref.current?.focus();\n }, []);\n\n const restore = () => {\n const el = opener.current;\n if (el instanceof HTMLElement && el.isConnected) el.focus();\n };\n const save = () => {\n const text = body.trim();\n if (!text) return;\n onSave(text);\n restore();\n };\n const cancel = () => {\n onCancel();\n restore();\n };\n\n return (\n <div className={`${review.editor} ${styles.commentEditor}`}>\n {picker}\n <label htmlFor={id} className={review.editorLabel}>{label}</label>\n <textarea\n id={id}\n ref={ref}\n className={review.editorInput}\n rows={2}\n value={body}\n maxLength={COMMENT_MAX_CHARS}\n placeholder=\"What should change here?\"\n onChange={(e) => setBody(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n save();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n cancel();\n }\n }}\n />\n <div className={review.editorActions}>\n <span className={review.editorHint}>⌘Enter saves · Esc cancels · drafts are kept until you send them</span>\n <button type=\"button\" className={review.linkButton} onClick={cancel}>Cancel</button>\n <button type=\"button\" className={review.saveButton} onClick={save} disabled={!body.trim()}>{submitLabel}</button>\n </div>\n </div>\n );\n}\n\nexport interface ThreadActions {\n onEdit: (id: string, body: string) => void;\n onDelete: (id: string) => void;\n /** Add another comment on the same anchor. */\n onReply: (head: ReviewComment) => void;\n}\n\n/** One anchor's comments, oldest first. */\nexport function ReviewThread({ path, comments, actions, replying }: { path: string; comments: readonly ReviewComment[]; actions: ThreadActions; replying: boolean }) {\n const [editing, setEditing] = useState<string | null>(null);\n const head = comments[0];\n if (!head) return null;\n const where = anchorWhere(head);\n return (\n <div className={styles.thread} role=\"group\" aria-label={`Review comments on ${where} of ${path}`}>\n {comments.map((c, i) => (\n editing === c.id ? (\n <CommentEditor\n key={c.id}\n label={`Edit the comment on ${where.toLowerCase()}`}\n initial={c.body}\n submitLabel=\"Save\"\n onCancel={() => setEditing(null)}\n onSave={(body) => {\n actions.onEdit(c.id, body);\n setEditing(null);\n }}\n />\n ) : (\n <div key={c.id} className={`${review.comment} ${styles.threadComment}`}>\n <span className={review.commentWhere}>{i === 0 ? where : 'Reply'}</span>\n <p className={review.commentText}>{c.body}</p>\n <span className={styles.commentActions}>\n <button type=\"button\" className={review.linkButton} onClick={() => setEditing(c.id)}\n aria-label={`Edit the comment on ${where.toLowerCase()} of ${path}`}>Edit</button>\n <button type=\"button\" className={review.linkButton} data-tone=\"danger\" onClick={() => actions.onDelete(c.id)}\n aria-label={`Delete the comment on ${where.toLowerCase()} of ${path}`}>Delete</button>\n </span>\n </div>\n )\n ))}\n {!replying && editing === null ? (\n <button type=\"button\" className={`${review.linkButton} ${styles.replyButton}`} onClick={() => actions.onReply(head)}\n aria-label={`Add another comment on ${where.toLowerCase()} of ${path}`}>Add a comment</button>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/changes/HunkPatch.tsx — one file's changes in the Changes pane:\n * unified or side-by-side, syntax-highlighted, with WORD-level emphasis, and\n * an Accept / Reject bar on every hunk.\n *\n * Reuses the inbox parser (`parseUnifiedDiff`, `toSplitRows`) and highlighter\n * (`tokenizeLine`) and the Review pane's table styles, so a change looks the\n * same here, in Review, and in the transcript.\n *\n * Hunks are matched to the server's by position AND header: the server hashes\n * each hunk and a Reject names that hash, so a hunk that moved since the diff\n * was read is refused by the server instead of misapplied.\n *\n * REVIEW COMMENTS (optional `review`): \"Comment\" on a hunk's bar opens an\n * editor with a line picker (keyboard path); the pointer gets a \"+\" in the\n * gutter of the hovered line. Threads render under their line (or the hunk\n * bar for a whole-hunk comment); comments whose hunk is no longer in this\n * diff are listed above it, still editable.\n */\nimport { Fragment, useEffect, useId, useMemo, useState, type ReactNode } from 'react';\nimport type { VerseCheckpointDecision, VerseCheckpointHunkInfo } from '../../../../core/verse/checkpoint-types.js';\nimport { parseUnifiedDiff, toSplitRows, type DiffLine } from '../../inbox/diff-parser.js';\nimport { languageForPath, tokenizeLine, type LangFamily } from '../../inbox/highlight.js';\nimport { wordDiff, type Span } from './changes-model.js';\nimport { CommentEditor, ReviewThread, type ThreadActions } from './ReviewThread.js';\nimport {\n anchorWhere,\n excerptFor,\n groupThreads,\n hunkCore,\n lineAnchor,\n lineKey,\n type CommentAnchor,\n type ReviewComment,\n} from './review-comments.js';\nimport review from '../git/DiffPane.module.css';\nimport styles from './ChangesPanel.module.css';\n\nexport type PatchLayout = 'unified' | 'split';\n\n/** Rows rendered before \"Show all\" (every row is DOM). */\nexport const HUNK_ROW_LIMIT = 3_000;\n\nexport interface HunkPatchProps {\n path: string;\n text: string;\n truncated: boolean;\n binary: boolean;\n hunks: readonly VerseCheckpointHunkInfo[];\n layout: PatchLayout;\n /** Accept/Reject are offered (a `since` view with no turn running). */\n actionable: boolean;\n /** The hunk hash whose action is in flight. */\n busyHunk: string | null;\n onHunk: (hash: string, decision: VerseCheckpointDecision) => void;\n /** Review comments on this file; absent = no commenting. */\n review?: HunkReview;\n}\n\nexport interface HunkReview {\n /** This file's drafted comments. */\n comments: readonly ReviewComment[];\n onAdd: (anchor: CommentAnchor, body: string) => void;\n onEdit: (id: string, body: string) => void;\n onDelete: (id: string) => void;\n}\n\n/** An open \"new comment\" editor: where it is drawn, and what it is anchored to. */\ntype Composer =\n /** From the hunk bar or a gutter \"+\": the line is picked (null = the whole hunk). */\n | { kind: 'new'; hunk: string; at: string; index: number | null }\n /** \"Add a comment\" under a thread: the thread's own anchor. */\n | { kind: 'reply'; at: string; anchor: CommentAnchor };\n\ninterface HunkView {\n key: string;\n label: string;\n /** Header core, the comment anchor. */\n core: string;\n lines: DiffLine[];\n info: VerseCheckpointHunkInfo | null;\n unified: Array<{ key: string; line: DiffLine; spans: Span[] }>;\n split: Array<{ key: string; left: DiffLine | null; right: DiffLine | null; leftSpans: Span[]; rightSpans: Span[] }>;\n}\n\nconst HEADER_CORE = /^@@ -\\d+(?:,\\d+)? \\+\\d+(?:,\\d+)? @@/;\n\nfunction hunkLabel(header: string, index: number): string {\n const section = header.replace(/^@@[^@]*@@/, '').trim();\n const m = /^@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/.exec(header);\n const where = m ? `Line ${m[2]}` : `Hunk ${index + 1}`;\n return section ? `${where} · ${section}` : where;\n}\n\nfunction build(text: string, infos: readonly VerseCheckpointHunkInfo[]): { hunks: HunkView[]; notice: string | null; status: string } {\n const file = parseUnifiedDiff(text).files[0];\n if (!file) return { hunks: [], notice: null, status: 'modified' };\n const hunks = file.hunks.map((hunk, h): HunkView => {\n const candidate = infos[h];\n const core = HEADER_CORE.exec(hunk.header)?.[0];\n const info = candidate && core && candidate.header.startsWith(core) ? candidate : null;\n const pairs = toSplitRows(hunk.lines);\n const spansOf = new Map<DiffLine, Span[]>();\n for (const p of pairs) {\n if (p.left && p.right && p.left.kind === 'del' && p.right.kind === 'add') {\n const w = wordDiff(p.left.text, p.right.text);\n if (w) {\n spansOf.set(p.left, w.old);\n spansOf.set(p.right, w.new);\n }\n }\n }\n return {\n key: `h${h}`,\n label: hunkLabel(hunk.header, h),\n core: hunkCore(hunk.header),\n lines: hunk.lines,\n info,\n unified: hunk.lines.map((line, i) => ({ key: `h${h}l${i}`, line, spans: spansOf.get(line) ?? [] })),\n split: pairs.map((p, i) => ({\n key: `h${h}p${i}`,\n left: p.left,\n right: p.right,\n leftSpans: p.left ? spansOf.get(p.left) ?? [] : [],\n rightSpans: p.right ? spansOf.get(p.right) ?? [] : [],\n })),\n };\n });\n return { hunks, notice: file.unparsedNotice, status: file.status };\n}\n\nexport function HunkPatch({ path, text, truncated, binary, hunks, layout, actionable, busyHunk, onHunk, review: commenting }: HunkPatchProps) {\n const lang = languageForPath(path);\n const built = useMemo(() => build(text, hunks), [text, hunks]);\n const [showAll, setShowAll] = useState(false);\n const [composer, setComposer] = useState<Composer | null>(null);\n const pickerId = useId();\n\n // A new layout or a new diff redraws every row: an open editor would point nowhere.\n useEffect(() => setComposer(null), [layout, text]);\n\n /** Where each thread is drawn: under its line's row, else its hunk's bar; else above the grid (its hunk is gone). */\n const placed = useMemo(() => {\n const at = new Map<string, ReviewComment[][]>();\n const orphans: ReviewComment[][] = [];\n if (!commenting) return { at, orphans };\n const byCore = new Map<string, HunkView>();\n for (const h of built.hunks) if (!byCore.has(h.core)) byCore.set(h.core, h);\n for (const thread of groupThreads(commenting.comments)) {\n const head = thread[0]!;\n const hunk = byCore.get(head.hunk);\n if (!hunk) {\n orphans.push(thread);\n continue;\n }\n let loc = barKey(hunk);\n if (head.line !== null) {\n const want = lineKey(head);\n const row = layout === 'split'\n ? hunk.split.find((r) => (r.right && lineKey(lineAnchor(r.right)) === want) || (r.left && lineKey(lineAnchor(r.left)) === want))\n : hunk.unified.find((r) => lineKey(lineAnchor(r.line)) === want);\n if (row) loc = row.key;\n }\n at.set(loc, [...(at.get(loc) ?? []), thread]);\n }\n return { at, orphans };\n }, [built, commenting, layout]);\n\n if (binary) return <p className={review.patchNotice}>Binary file — accept or reject it as a whole.</p>;\n if (built.hunks.length === 0) {\n if (built.notice) return <p className={review.patchNotice}>{built.notice}</p>;\n return (\n <p className={review.patchNotice}>\n {built.status === 'renamed' ? 'Renamed with no content changes.' : 'No line changes (a mode or permission change).'}\n </p>\n );\n }\n\n let budget = showAll ? Number.POSITIVE_INFINITY : HUNK_ROW_LIMIT;\n let cut = false;\n const totalRows = built.hunks.reduce((n, h) => n + (layout === 'split' ? h.split.length : h.unified.length), 0);\n\n const close = () => setComposer(null);\n const startAt = (hunk: HunkView, at: string, index: number | null) => setComposer({ kind: 'new', hunk: hunk.key, at, index });\n\n const actionsAt = (loc: string): ThreadActions | null => (commenting\n ? {\n onEdit: commenting.onEdit,\n onDelete: commenting.onDelete,\n onReply: (head) => setComposer({ kind: 'reply', at: loc, anchor: anchorOf(head) }),\n }\n : null);\n\n const editorAt = (hunk: HunkView, loc: string): ReactNode => {\n if (!commenting || !composer || composer.at !== loc) return null;\n if (composer.kind === 'reply') {\n const anchor = composer.anchor;\n return (\n <CommentEditor\n label={`Another comment on ${anchorWhere(anchor).toLowerCase()} of ${path}`}\n submitLabel=\"Add comment\"\n onCancel={close}\n onSave={(body) => {\n commenting.onAdd(anchor, body);\n close();\n }}\n />\n );\n }\n if (composer.hunk !== hunk.key) return null;\n const index = composer.index;\n const line = index === null ? null : hunk.lines[index] ?? null;\n const anchor = line ? lineAnchor(line) : { line: null, side: 'new' as const };\n const where = anchorWhere({ hunk: hunk.core, ...anchor });\n const picker = (\n <div className={styles.picker}>\n <label htmlFor={pickerId} className={review.editorLabel}>Anchor</label>\n <select\n id={pickerId}\n className={styles.select}\n value={line ? String(index) : ''}\n onChange={(e) => setComposer({ ...composer, index: e.target.value === '' ? null : Number(e.target.value) })}\n >\n <option value=\"\">Whole change · {anchorWhere({ hunk: hunk.core, line: null, side: 'new' })}</option>\n {hunk.lines.map((l, i) => {\n const a = lineAnchor(l);\n if (a.line === null) return null;\n return (\n <option key={i} value={i}>\n {anchorWhere({ hunk: hunk.core, ...a })}: {l.kind === 'add' ? '+' : l.kind === 'del' ? '−' : ' '}{l.text.trim().slice(0, 60)}\n </option>\n );\n })}\n </select>\n </div>\n );\n return (\n <CommentEditor\n label={`Comment on ${where.toLowerCase()} of ${path}`}\n submitLabel=\"Add comment\"\n picker={picker}\n onCancel={close}\n onSave={(body) => {\n commenting.onAdd({ path, hunk: hunk.core, line: anchor.line, side: anchor.side, ...excerptFor(hunk.lines, line ? index : null) }, body);\n close();\n }}\n />\n );\n };\n\n /** The row under a line (or a hunk bar) holding its threads and any open editor. */\n const threadRow = (hunk: HunkView, loc: string): ReactNode => {\n const actions = actionsAt(loc);\n if (!actions) return null;\n const threads = placed.at.get(loc) ?? [];\n const editor = editorAt(hunk, loc);\n if (threads.length === 0 && !editor) return null;\n return (\n <tr className={review.threadRow}>\n <td colSpan={5}>\n {threads.map((t) => (\n <ReviewThread\n key={t[0]!.id}\n path={path}\n comments={t}\n actions={actions}\n replying={composer?.kind === 'reply' && composer.at === loc && sameAnchor(composer.anchor, t[0]!)}\n />\n ))}\n {editor}\n </td>\n </tr>\n );\n };\n\n const gutter = (hunk: HunkView, rowKey: string, line: DiffLine | null): ReactNode => {\n const a = line ? lineAnchor(line) : null;\n if (!commenting || !line || !a || a.line === null) return <td className={review.gutter} aria-hidden=\"true\" />;\n const where = anchorWhere({ hunk: hunk.core, ...a }).toLowerCase();\n return (\n <td className={review.gutter}>\n {/* The pointer's path. One tab stop per line would bury the keyboard; the hunk bar's Comment is its path. */}\n <button\n type=\"button\"\n className={review.gutterAdd}\n tabIndex={-1}\n onClick={() => startAt(hunk, rowKey, hunk.lines.indexOf(line))}\n aria-label={`Comment on ${where} of ${path}`}\n title={`Comment on ${where}`}\n >\n +\n </button>\n </td>\n );\n };\n\n const orphanActions = actionsAt('orphans');\n return (\n <div className={review.patch}>\n {truncated ? (\n <p className={review.truncated} role=\"note\">\n Showing the first 256 KB of this file’s changes. Reject it as a whole, or open it in your editor for the rest.\n </p>\n ) : null}\n {orphanActions && placed.orphans.length > 0 ? (\n <div className={styles.orphans}>\n <p className={styles.orphansTitle}>Comments on changes no longer in this diff</p>\n {placed.orphans.map((t) => (\n <ReviewThread key={t[0]!.id} path={path} comments={t} actions={orphanActions} replying />\n ))}\n </div>\n ) : null}\n <table className={review.grid} data-layout={layout} aria-label={`Changes in ${path}`}>\n {built.hunks.map((hunk) => {\n if (budget <= 0) {\n cut = true;\n return null;\n }\n const rows = layout === 'split' ? hunk.split : hunk.unified;\n const shown = rows.slice(0, Math.max(0, budget));\n budget -= shown.length;\n if (shown.length < rows.length) cut = true;\n const accepted = hunk.info?.accepted ?? false;\n const busy = hunk.info !== null && busyHunk === hunk.info.hash;\n return (\n <tbody key={hunk.key} className={styles.hunk} data-accepted={accepted ? 'true' : undefined}>\n <tr className={review.hunkRow}>\n <td colSpan={5}>\n <div className={styles.hunkBar}>\n <span className={styles.hunkLabel}>{hunk.label}</span>\n {accepted ? <span className={styles.reviewed}>Accepted</span> : null}\n {commenting ? (\n <button\n type=\"button\"\n className={styles.hunkButton}\n onClick={() => startAt(hunk, barKey(hunk), null)}\n aria-label={`Comment on the change at ${hunk.label} in ${path}`}\n >\n Comment\n </button>\n ) : null}\n {actionable && hunk.info ? (\n <span className={styles.hunkActions}>\n {!accepted ? (\n <button\n type=\"button\"\n className={styles.hunkButton}\n disabled={busyHunk !== null}\n onClick={() => onHunk(hunk.info!.hash, 'accept')}\n aria-label={`Accept the change at ${hunk.label} in ${path}`}\n >\n Accept\n </button>\n ) : null}\n <button\n type=\"button\"\n className={styles.hunkButton}\n data-tone=\"danger\"\n disabled={busyHunk !== null}\n aria-busy={busy || undefined}\n onClick={() => onHunk(hunk.info!.hash, 'reject')}\n aria-label={`Reject the change at ${hunk.label} in ${path} (restore it from the checkpoint)`}\n >\n {busy ? 'Restoring…' : 'Reject'}\n </button>\n </span>\n ) : null}\n </div>\n </td>\n </tr>\n {threadRow(hunk, barKey(hunk))}\n {layout === 'unified'\n ? (shown as HunkView['unified']).map((row) => (\n <Fragment key={row.key}>\n <tr className={review.lineRow} data-kind={row.line.kind}>\n <td className={review.no} aria-hidden=\"true\">{row.line.oldLineNo ?? ''}</td>\n <td className={review.no} aria-hidden=\"true\">{row.line.newLineNo ?? ''}</td>\n {gutter(hunk, row.key, row.line)}\n <td className={review.marker} aria-hidden=\"true\">\n {row.line.kind === 'add' ? '+' : row.line.kind === 'del' ? '−' : ''}\n </td>\n <td className={review.code} aria-label={lineLabel(row.line)}>\n <Code text={row.line.text} lang={lang} spans={row.line.kind === 'context' ? [] : row.spans} />\n </td>\n </tr>\n {threadRow(hunk, row.key)}\n </Fragment>\n ))\n : (shown as HunkView['split']).map((row) => (\n <Fragment key={row.key}>\n <tr className={review.lineRow} data-kind=\"pair\">\n <td className={review.no} aria-hidden=\"true\">{row.left?.oldLineNo ?? ''}</td>\n <td className={review.half} data-kind={row.left?.kind ?? 'empty'} aria-label={row.left ? lineLabel(row.left) : undefined}>\n {row.left ? <Code text={row.left.text} lang={lang} spans={row.left.kind === 'context' ? [] : row.leftSpans} /> : null}\n </td>\n {gutter(hunk, row.key, row.right ?? row.left)}\n <td className={review.no} aria-hidden=\"true\">{row.right?.newLineNo ?? ''}</td>\n <td className={review.half} data-kind={row.right?.kind ?? 'empty'} aria-label={row.right && row.right !== row.left ? lineLabel(row.right) : undefined}>\n {row.right ? <Code text={row.right.text} lang={lang} spans={row.right.kind === 'context' ? [] : row.rightSpans} /> : null}\n </td>\n </tr>\n {threadRow(hunk, row.key)}\n </Fragment>\n ))}\n </tbody>\n );\n })}\n </table>\n {cut ? (\n <button type=\"button\" className={review.showAll} onClick={() => setShowAll(true)}>\n Show all {totalRows.toLocaleString('en-US')} lines\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction barKey(hunk: HunkView): string {\n return `${hunk.key}:bar`;\n}\n\nfunction anchorOf(c: CommentAnchor): CommentAnchor {\n return { path: c.path, hunk: c.hunk, line: c.line, side: c.side, excerpt: c.excerpt, excerptAt: c.excerptAt };\n}\n\nfunction sameAnchor(a: CommentAnchor, b: CommentAnchor): boolean {\n return a.path === b.path && a.hunk === b.hunk && lineKey(a) === lineKey(b);\n}\n\nfunction lineLabel(line: DiffLine): string {\n const n = line.kind === 'del' ? line.oldLineNo : line.newLineNo;\n const what = line.kind === 'add' ? 'added' : line.kind === 'del' ? 'removed' : 'unchanged';\n return `Line ${n ?? '—'}, ${what}: ${line.text}`;\n}\n\n/** Highlighted tokens, cut at the word-diff spans so highlighting and emphasis compose. */\nfunction Code({ text, lang, spans }: { text: string; lang: LangFamily; spans: readonly Span[] }) {\n const tokens = tokenizeLine(text, lang);\n if (spans.length === 0) {\n return (\n <code className={review.codeText}>\n {tokens.map((t, i) => (\n <span key={i} className={review[`tok_${t.kind}`]}>{t.text}</span>\n ))}\n </code>\n );\n }\n const inSpan = (at: number) => spans.some(([a, b]) => at >= a && at < b);\n const cuts = new Set<number>([0, text.length]);\n for (const [a, b] of spans) {\n cuts.add(a);\n cuts.add(b);\n }\n const parts: Array<{ text: string; kind: string; em: boolean }> = [];\n let at = 0;\n for (const t of tokens) {\n const start = at;\n const end = at + t.text.length;\n const points = [start, ...[...cuts].filter((c) => c > start && c < end).sort((x, y) => x - y), end];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i]!;\n const b = points[i + 1]!;\n if (b > a) parts.push({ text: text.slice(a, b), kind: t.kind, em: inSpan(a) });\n }\n at = end;\n }\n return (\n <code className={review.codeText}>\n {parts.map((p, i) => (\n <span key={i} className={`${review[`tok_${p.kind}`] ?? ''} ${p.em ? review.em : ''}`} data-em={p.em ? 'true' : undefined}>{p.text}</span>\n ))}\n </code>\n );\n}\n","/**\n * routes/verse/changes/ReReviewMenu.tsx — \"Re-review with…\": the Changes\n * pane's menu of OTHER seats that can review a turn's diff (3.15).\n *\n * WAI-ARIA menu button, as git/ActionMenu.tsx: Enter / Space / ↓ open on the\n * first seat, ↑ on the last; ↑ ↓ Home End move; Enter or Space picks;\n * Escape closes and returns focus to the button; Tab or a click outside\n * closes. A seat whose health is not `ready` stays pickable (the server's\n * readiness gate is the authority) and says so under its name.\n */\nimport { useCallback, useEffect, useId, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { IconChevronDown } from '../../../components/primitives/icons.js';\nimport type { FlowTarget } from '../multimodel/multimodel-flows.js';\nimport styles from './ChangesPanel.module.css';\n\nexport interface ReReviewMenuProps {\n seats: ReadonlyArray<FlowTarget & { ready: boolean }>;\n onPick: (seat: FlowTarget) => void;\n disabled?: boolean;\n busy?: boolean;\n /** Why the menu is off (shown as the button's title). */\n disabledReason?: string;\n}\n\nexport function ReReviewMenu({ seats, onPick, disabled = false, busy = false, disabledReason }: ReReviewMenuProps) {\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const menuId = useId();\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const close = useCallback((refocus: boolean) => {\n setOpen(false);\n if (refocus) buttonRef.current?.focus();\n }, []);\n\n const openAt = (which: 'first' | 'last') => {\n if (seats.length === 0) return;\n setActive(which === 'first' ? 0 : seats.length - 1);\n setOpen(true);\n };\n\n useEffect(() => {\n if (open) itemRefs.current[active]?.focus();\n }, [open, active]);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n const t = e.target as Node;\n if (menuRef.current?.contains(t) || buttonRef.current?.contains(t)) return;\n close(false);\n };\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [open, close]);\n\n const onButtonKey = (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n openAt('first');\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n openAt('last');\n }\n };\n\n const onMenuKey = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n const n = seats.length;\n if (n === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setActive((a) => (a + 1) % n);\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActive((a) => (a - 1 + n) % n);\n break;\n case 'Home':\n e.preventDefault();\n setActive(0);\n break;\n case 'End':\n e.preventDefault();\n setActive(n - 1);\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n close(true);\n break;\n case 'Tab':\n close(false);\n break;\n default:\n break;\n }\n };\n\n const pick = (seat: FlowTarget) => {\n close(true);\n onPick(seat);\n };\n\n const off = disabled || seats.length === 0;\n return (\n <div className={styles.menuWrap}>\n <Button\n ref={buttonRef}\n size=\"sm\"\n variant=\"ghost\"\n trailingIcon={<IconChevronDown width={14} height={14} aria-hidden=\"true\" />}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n disabled={off}\n busy={busy}\n title={off ? (disabledReason ?? (seats.length === 0 ? 'No other seat is available to review' : undefined)) : 'Ask another seat to review these changes (read-only, in a new chat)'}\n onClick={() => (open ? close(false) : openAt('first'))}\n onKeyDown={onButtonKey}\n >\n Re-review with…\n </Button>\n {open ? (\n <div ref={menuRef} id={menuId} role=\"menu\" aria-label=\"Re-review with\" className={styles.menu} tabIndex={-1} onKeyDown={onMenuKey}>\n {seats.map((seat, i) => (\n <button\n key={seat.seatId}\n ref={(el) => { itemRefs.current[i] = el; }}\n type=\"button\"\n role=\"menuitem\"\n className={styles.menuItem}\n tabIndex={i === active ? 0 : -1}\n onClick={() => pick(seat)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n pick(seat);\n }\n }}\n >\n <span className={styles.menuLabel}>{seat.label}</span>\n {seat.ready ? null : <span className={styles.menuNote}>Not reported ready — it may decline</span>}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","/**\n * routes/verse/changes/UndoDialog.tsx — the confirmation for Undo turn and\n * Redo: what will be restored, what will be removed, what is left alone, and\n * — for every file someone edited after the agent — a three-way preview and\n * a decision (keep what is there / take the checkpoint / merge both).\n *\n * The confirm button stays disabled until every conflict has a decision. A\n * conflict that merges cleanly starts on \"merge\" (it keeps the later edit and\n * reverts the agent's); every other one starts undecided. Nothing here writes\n * a file: the server applies the plan, and refuses if anything moved since\n * this preview was taken.\n */\nimport { useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { VerseCheckpointPlanConflict, VerseCheckpointPreviewResponse, VerseCheckpointResolution } from '../../../../core/verse/checkpoint-types.js';\nimport { Button } from '../../../components/primitives/Button.js';\nimport { Dialog } from '../../../components/primitives/Dialog.js';\nimport { initialResolutions, planCounts, plural, undecided, type Resolutions } from './changes-model.js';\nimport styles from './ChangesPanel.module.css';\n\nexport interface UndoDialogProps {\n open: boolean;\n preview: VerseCheckpointPreviewResponse | null;\n /** \"Turn 3\" — what the operator is undoing. */\n turnLabel: string;\n /** rootId → display name. */\n rootNames: Readonly<Record<string, string>>;\n busy: boolean;\n error: string | null;\n onClose: () => void;\n onConfirm: (resolutions: Resolutions) => void;\n}\n\nconst CHOICES: ReadonlyArray<{ value: VerseCheckpointResolution; label: string; hint: string }> = [\n { value: 'merge', label: 'Merge both', hint: 'Keep the later edits and revert the agent’s' },\n { value: 'keep', label: 'Keep current', hint: 'Leave the file exactly as it is on disk' },\n { value: 'checkpoint', label: 'Use checkpoint', hint: 'Overwrite with the checkpoint (later edits are lost; Redo brings them back)' },\n];\n\nexport function UndoDialog({ open, preview, turnLabel, rootNames, busy, error, onClose, onConfirm }: UndoDialogProps) {\n const titleId = useId();\n const confirmRef = useRef<HTMLButtonElement>(null);\n const [resolutions, setResolutions] = useState<Resolutions>({});\n useEffect(() => {\n if (preview) setResolutions(initialResolutions(preview));\n }, [preview]);\n\n const counts = useMemo(() => (preview ? planCounts(preview) : null), [preview]);\n const missing = preview ? undecided(preview, resolutions) : [];\n const redo = preview?.kind === 'redo';\n const multiRoot = (preview?.roots.length ?? 0) > 1;\n const nothing = counts !== null && counts.restore + counts.remove + counts.conflicts === 0;\n\n const choose = (rootId: string, path: string, value: VerseCheckpointResolution) => {\n setResolutions((prev) => ({ ...prev, [rootId]: { ...(prev[rootId] ?? {}), [path]: value } }));\n };\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n titleId={titleId}\n title={redo ? `Redo ${turnLabel}` : `Undo ${turnLabel}`}\n description={\n redo\n ? 'Puts back the files exactly as they were before the undo.'\n : 'Restores the files to the checkpoint taken before this turn (and undoes every turn after it). The current state is kept, so you can redo.'\n }\n initialFocusRef={confirmRef}\n widthClassName={styles.undoDialog}\n >\n {!preview || !counts ? null : (\n <div className={styles.undoBody}>\n <ul className={styles.facts} aria-label=\"What this will do\">\n {counts.restore > 0 ? <li>Restores {plural(counts.restore, 'file')}.</li> : null}\n {counts.remove > 0 ? <li>Removes {plural(counts.remove, 'file')} the {redo ? 'undo' : 'agent'} created.</li> : null}\n {counts.conflicts > 0 ? (\n <li data-tone=\"warning\">\n <strong>{plural(counts.conflicts, 'file')}</strong> changed again after the {redo ? 'undo' : 'agent'} — choose for each below.\n </li>\n ) : null}\n {counts.kept > 0 ? <li>Leaves {plural(counts.kept, 'file')} alone: only you changed {counts.kept === 1 ? 'it' : 'them'} since.</li> : null}\n {counts.uncaptured > 0 ? (\n <li data-tone=\"warning\">{plural(counts.uncaptured, 'file')} {counts.uncaptured === 1 ? 'was' : 'were'} too large to checkpoint and will not be touched.</li>\n ) : null}\n {nothing ? <li>Nothing to restore: the files already match.</li> : null}\n </ul>\n\n {preview.roots.map((root) => {\n const name = rootNames[root.rootId] ?? 'repository';\n if (root.unavailable) {\n return (\n <p key={root.rootId} className={styles.rootNote} role=\"note\">\n <strong>{name}</strong>: {root.unavailable}\n </p>\n );\n }\n const empty = root.apply.length + root.conflicts.length + root.kept.length + root.uncaptured.length === 0;\n if (empty) return null;\n return (\n <section key={root.rootId} className={styles.undoRoot} aria-label={multiRoot ? name : undefined}>\n {multiRoot ? <h3 className={styles.undoRootName}>{name}</h3> : null}\n {root.apply.length > 0 ? (\n <details className={styles.undoList} open={root.apply.length <= 12}>\n <summary>{plural(root.apply.length, 'file')} to {redo ? 'put back' : 'restore'}</summary>\n <ul>\n {root.apply.map((f) => (\n <li key={f.path}>\n <code>{f.path}</code>\n {f.action === 'delete' ? <span className={styles.badge}>removed</span> : null}\n </li>\n ))}\n </ul>\n </details>\n ) : null}\n {root.conflicts.map((c) => (\n <ConflictCard\n key={c.path}\n conflict={c}\n value={resolutions[root.rootId]?.[c.path] ?? null}\n onChoose={(v) => choose(root.rootId, c.path, v)}\n />\n ))}\n {root.kept.length > 0 ? (\n <details className={styles.undoList}>\n <summary>{plural(root.kept.length, 'file')} left as {root.kept.length === 1 ? 'is' : 'they are'}</summary>\n <ul>{root.kept.map((p) => <li key={p}><code>{p}</code></li>)}</ul>\n </details>\n ) : null}\n {root.uncaptured.length > 0 ? (\n <details className={styles.undoList}>\n <summary>{plural(root.uncaptured.length, 'file')} not captured</summary>\n <ul>{root.uncaptured.map((p) => <li key={p}><code>{p}</code></li>)}</ul>\n </details>\n ) : null}\n </section>\n );\n })}\n\n {error ? <p role=\"alert\" className={styles.error}>{error}</p> : null}\n <div className={styles.dialogActions}>\n {missing.length > 0 ? (\n <span className={styles.hint} role=\"status\">\n Choose what to do with {plural(missing.length, 'file')} first.\n </span>\n ) : null}\n <Button variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n ref={confirmRef}\n variant={redo ? 'primary' : 'danger'}\n busy={busy}\n disabled={missing.length > 0 || nothing}\n onClick={() => onConfirm(resolutions)}\n >\n {redo ? 'Redo' : `Undo ${turnLabel.toLowerCase()}`}\n </Button>\n </div>\n </div>\n )}\n </Dialog>\n );\n}\n\nfunction ConflictCard({\n conflict,\n value,\n onChoose,\n}: {\n conflict: VerseCheckpointPlanConflict;\n value: VerseCheckpointResolution | null;\n onChoose: (v: VerseCheckpointResolution) => void;\n}) {\n const group = useId();\n const [view, setView] = useState<'merge' | 'diff'>(conflict.merge.text !== null ? 'merge' : 'diff');\n const why = conflict.kind === 'unverified'\n ? 'There is no after-turn checkpoint to tell the agent’s edits from later ones.'\n : conflict.merge.text === null\n ? 'Edited after the agent; a line merge is not possible here (binary, too large, or deleted on one side).'\n : conflict.merge.clean\n ? 'Edited after the agent. The edits do not overlap, so both can be kept.'\n : `Edited after the agent, in the same lines (${plural(conflict.merge.conflicts, 'conflict')}).`;\n return (\n <fieldset className={styles.conflict} data-decided={value ? 'true' : undefined}>\n <legend className={styles.conflictPath}>\n <code>{conflict.path}</code>\n {conflict.action === 'delete' ? <span className={styles.badge}>the checkpoint has no such file</span> : null}\n </legend>\n <p className={styles.conflictWhy}>{why}</p>\n <div className={styles.conflictTabs} role=\"tablist\" aria-label={`Preview for ${conflict.path}`}>\n {conflict.merge.text !== null ? (\n <button type=\"button\" role=\"tab\" aria-selected={view === 'merge'} className={styles.tab} onClick={() => setView('merge')}>\n {conflict.merge.clean ? 'Merged result' : 'Three-way (with markers)'}\n </button>\n ) : null}\n <button type=\"button\" role=\"tab\" aria-selected={view === 'diff'} className={styles.tab} onClick={() => setView('diff')}>\n Disk now → checkpoint\n </button>\n </div>\n <pre className={styles.conflictText} tabIndex={0} aria-label={view === 'merge' ? 'Merge preview' : 'Diff from the file on disk to the checkpoint'}>\n {view === 'merge' ? conflict.merge.text : conflict.diff || 'No text diff (binary file).'}\n </pre>\n <div className={styles.choices} role=\"radiogroup\" aria-label={`What to do with ${conflict.path}`}>\n {CHOICES.map((c) => {\n const disabled = c.value === 'merge' && !conflict.merge.clean;\n return (\n <label key={c.value} className={styles.choice} data-disabled={disabled ? 'true' : undefined} title={c.hint}>\n <input\n type=\"radio\"\n name={group}\n value={c.value}\n checked={value === c.value}\n disabled={disabled}\n onChange={() => onChoose(c.value)}\n />\n <span>{c.label}</span>\n </label>\n );\n })}\n </div>\n </fieldset>\n );\n}\n","/**\n * routes/verse/changes/ChangesPanel.tsx — the Changes pane: what the agent\n * changed, turn by turn, reviewed and undone in place (3.15; server:\n * core/verse/checkpoints-api.ts).\n *\n * [Turn 3 · 4 files · 2:14 PM ▾] [repo ▾] This turn | Since turn | All turns Unified|Split ⟳\n * 4 files · +120 −8 [Undo turn…] [Redo] [Commit…] [Open PR…]\n * ┌ files, grouped by folder (accept · reject) ┬ patch: syntax, word diff, Accept/Reject per hunk ┐\n *\n * VIEWS\n * This turn the turn's own changes: its `pre` checkpoint → its `post`.\n * The historical record; nothing to accept or reject.\n * Since turn `pre` of the turn → the files on disk now. Accept marks a file\n * or hunk reviewed; Reject restores it from the checkpoint.\n * All turns the same, from the chat's FIRST checkpoint: everything the\n * chat changed.\n *\n * SAFETY. Every write (reject, undo, redo, commit, PR) goes through the\n * mutation token, is refused by the server while a turn runs, and Undo/Redo\n * always opens a preview first (UndoDialog) — later edits are never silently\n * overwritten. A file reject asks for a second click.\n *\n * REVIEW COMMENTS. Comment on a hunk or a line (HunkPatch + ReviewThread);\n * drafts persist per chat + turn (review-comments.ts). \"Send N comments\" is\n * ONE turn to this chat's own seat with `path:line — comment` anchors and\n * short excerpts; \"Re-review with…\" asks ANOTHER seat for a read-only review\n * of the diff (plus the drafts as context) in a new, linked chat. Both go\n * through ask-seat.ts, so the spend chokepoint, readiness gate and mutation\n * token apply exactly as to a typed message.\n *\n * Self-contained: it needs only the chat id (sending needs the chat record\n * and seats too). register.ts registers it with the pane registry (⇧⌘D)\n * through ChangesPaneHost.\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport type {\n VerseCheckpointDecision,\n VerseCheckpointDiffFile,\n VerseCheckpointDiffResponse,\n VerseCheckpointListResponse,\n VerseCheckpointPreviewResponse,\n VerseCheckpointTurn,\n} from '../../../../core/verse/checkpoint-types.js';\nimport { MutationTokenDialog } from '../../../components/auth/MutationTokenDialog.js';\nimport { Button, IconButton } from '../../../components/primitives/Button.js';\nimport { EmptyState } from '../../../components/primitives/EmptyState.js';\nimport { Segmented } from '../../../components/primitives/Segmented.js';\nimport { SkeletonLine } from '../../../components/primitives/Skeleton.js';\nimport { IconCheck, IconRefresh, IconX } from '../../../components/primitives/icons.js';\nimport type { VerseSeat, VerseSession } from '../../../data/api-types.js';\nimport { describeContextError, useTokenGate } from '../context/use-token-gate.js';\nimport { askableSeats, askSeat, type AskSeatResult } from '../multimodel/ask-seat.js';\nimport { DEFAULT_FLOW_API, type FlowTarget } from '../multimodel/multimodel-flows.js';\nimport type { ThreadRelation } from '../../../../core/verse/multimodel/types.js';\nimport { CommitDialog, CreatePrDialog } from '../git/GitDialogs.js';\nimport { describeGitError, type GitStatusView } from '../git/git-model.js';\nimport { commitGit, fetchGitStatus, openGitPr } from '../git/git-queries.js';\nimport {\n STATUS_WORD,\n groupByDirectory,\n plural,\n totals,\n turnCheckpointError,\n turnHasCheckpoint,\n turnLabel,\n type Resolutions,\n} from './changes-model.js';\nimport { checkpointClient, describeCheckpointError, errorCode, type CheckpointClient } from './checkpoint-queries.js';\nimport { HunkPatch, type HunkReview, type PatchLayout } from './HunkPatch.js';\nimport { ReReviewMenu } from './ReReviewMenu.js';\nimport {\n MESSAGE_MAX_BYTES,\n anchorLabel,\n buildCommentsMessage,\n buildReReviewMessage,\n loadComments,\n newCommentId,\n saveComments,\n sortComments,\n utf8Bytes,\n type CommentAnchor,\n type ReviewComment,\n type ReviewFilePatch,\n} from './review-comments.js';\nimport { UndoDialog } from './UndoDialog.js';\nimport chrome from '../dock/pane-chrome.module.css';\nimport review from '../git/DiffPane.module.css';\nimport styles from './ChangesPanel.module.css';\n\nexport type ChangesView = 'turn' | 'since' | 'all';\n\nexport interface ChangesPanelProps {\n /** The chat whose turns are reviewed. */\n sessionId: string;\n /** False while the pane is a background tab: nothing is fetched until shown. */\n visible?: boolean;\n /** Test seams. */\n client?: CheckpointClient;\n git?: {\n status: typeof fetchGitStatus;\n commit: typeof commitGit;\n openPr: typeof openGitPr;\n };\n /** Poll interval while a turn runs (ms). */\n pollMs?: number;\n /** The chat's record — needed to send review comments (its seat, folders, title). */\n session?: VerseSession | null;\n /** The bootstrap's seats: labels, and the \"Re-review with…\" menu. */\n seats?: readonly VerseSeat[];\n /** Open another chat (the reviewer's) — PaneHost.openSession. */\n onOpenSession?: (sessionId: string) => void;\n /** Test seam: sends a message to a seat (default: ask-seat.ts over the real session calls). */\n ask?: AskFn;\n}\n\nexport type AskFn = (input: { source: VerseSession; target: FlowTarget; text: string; title?: string; relation?: ThreadRelation }) => Promise<AskSeatResult>;\n\nconst defaultAsk: AskFn = (input) => askSeat(DEFAULT_FLOW_API, input);\n\nconst NO_SEATS: readonly VerseSeat[] = [];\nconst NO_COMMENTS: readonly ReviewComment[] = [];\n/** Files fetched for one \"Re-review with…\" before the rest are only named. */\nconst REVIEW_MAX_FILES = 60;\n\ntype Load<T> = { state: 'idle' } | { state: 'loading' } | { state: 'ready'; data: T } | { state: 'error'; message: string; code: string | null };\n\ntype UndoState = {\n kind: 'undo' | 'redo';\n turnLabel: string;\n preview: VerseCheckpointPreviewResponse | null;\n busy: boolean;\n error: string | null;\n} | null;\n\ntype GitDialog = { kind: 'commit' | 'pr'; root: string; status: GitStatusView } | null;\n\nconst DEFAULT_GIT = { status: fetchGitStatus, commit: commitGit, openPr: openGitPr };\n\nexport function ChangesPanel({\n sessionId,\n visible = true,\n client = checkpointClient,\n git = DEFAULT_GIT,\n pollMs = 3_000,\n session = null,\n seats = NO_SEATS,\n onOpenSession,\n ask = defaultAsk,\n}: ChangesPanelProps) {\n const [list, setList] = useState<Load<VerseCheckpointListResponse>>({ state: 'idle' });\n const [turnId, setTurnId] = useState<string | null>(null);\n const [rootId, setRootId] = useState<string | null>(null);\n const [view, setView] = useState<ChangesView>('since');\n const [layout, setLayout] = useState<PatchLayout>('unified');\n const [diff, setDiff] = useState<Load<VerseCheckpointDiffResponse>>({ state: 'idle' });\n const [file, setFile] = useState<string | null>(null);\n const [patch, setPatch] = useState<Load<VerseCheckpointDiffResponse>>({ state: 'idle' });\n const [reload, setReload] = useState(0);\n const [busy, setBusy] = useState<{ file: string; hunk: string | null } | null>(null);\n const [armed, setArmed] = useState<string | null>(null);\n const [notice, setNotice] = useState<{ text: string; tone: 'ok' | 'error'; open?: { sessionId: string; label: string } } | null>(null);\n /** Drafted review comments, tagged with the turn they belong to (loaded from storage on a turn change). */\n const [drafts, setDrafts] = useState<{ turnId: string | null; list: readonly ReviewComment[] }>({ turnId: null, list: NO_COMMENTS });\n const [sending, setSending] = useState<'comments' | 'review' | null>(null);\n const [undo, setUndo] = useState<UndoState>(null);\n const [gitDialog, setGitDialog] = useState<GitDialog>(null);\n const [gitBusy, setGitBusy] = useState(false);\n const [gitError, setGitError] = useState<string | null>(null);\n const gate = useTokenGate();\n const turnSelectId = useId();\n const rootSelectId = useId();\n const listRef = useRef<HTMLUListElement>(null);\n const followLatest = useRef(true);\n\n const refresh = useCallback(() => setReload((n) => n + 1), []);\n\n // ---- the chat's turns ----------------------------------------------------\n\n useEffect(() => {\n if (!visible) return;\n const ctl = new AbortController();\n setList((prev) => (prev.state === 'ready' ? prev : { state: 'loading' }));\n client.list(sessionId, ctl.signal).then(\n (data) => setList({ state: 'ready', data }),\n (err: unknown) => {\n if (ctl.signal.aborted) return;\n setList({ state: 'error', message: describeCheckpointError(err), code: errorCode(err) });\n },\n );\n return () => ctl.abort();\n }, [client, sessionId, visible, reload]);\n\n const data = list.state === 'ready' ? list.data : null;\n const running = data?.running ?? false;\n\n // While a turn runs, watch for its end (a light list read).\n useEffect(() => {\n if (!visible || !running) return;\n const t = setInterval(refresh, pollMs);\n return () => clearInterval(t);\n }, [visible, running, pollMs, refresh]);\n\n const turns = useMemo(() => data?.turns ?? [], [data]);\n const withCheckpoint = useMemo(() => turns.filter(turnHasCheckpoint), [turns]);\n\n // Follow the newest turn until the operator picks one.\n useEffect(() => {\n if (turns.length === 0) {\n setTurnId(null);\n return;\n }\n const latest = turns[turns.length - 1]!;\n if (turnId === null || !turns.some((t) => t.turnId === turnId) || followLatest.current) setTurnId(latest.turnId);\n }, [turns, turnId]);\n\n const turn: VerseCheckpointTurn | null = turns.find((t) => t.turnId === turnId) ?? null;\n const baseTurn: VerseCheckpointTurn | null = view === 'all' ? withCheckpoint[0] ?? null : turn;\n const rootsForTurn = useMemo(\n () => (baseTurn ? baseTurn.roots.filter((r) => r.pre?.commit).map((r) => r.rootId) : []),\n [baseTurn],\n );\n const rootNames = useMemo(() => Object.fromEntries((data?.roots ?? []).map((r) => [r.rootId, r.name])), [data]);\n const rootPath = (id: string | null) => data?.roots.find((r) => r.rootId === id)?.path ?? null;\n\n useEffect(() => {\n if (rootId === null || !rootsForTurn.includes(rootId)) setRootId(rootsForTurn[0] ?? null);\n }, [rootsForTurn, rootId]);\n\n // ---- the file list ---------------------------------------------------------\n\n const mode = view === 'turn' ? 'turn' : 'since';\n useEffect(() => {\n if (!visible || !baseTurn || !rootId || !rootsForTurn.includes(rootId)) {\n setDiff({ state: 'idle' });\n return;\n }\n const ctl = new AbortController();\n setDiff((prev) => (prev.state === 'ready' ? prev : { state: 'loading' }));\n client.diff({ chatId: sessionId, turnId: baseTurn.turnId, rootId, mode }, ctl.signal).then(\n (d) => setDiff({ state: 'ready', data: d }),\n (err: unknown) => {\n if (ctl.signal.aborted) return;\n setDiff({ state: 'error', message: describeCheckpointError(err), code: errorCode(err) });\n },\n );\n return () => ctl.abort();\n }, [client, sessionId, baseTurn, rootId, rootsForTurn, mode, visible, reload]);\n\n const files = useMemo(() => (diff.state === 'ready' ? diff.data.files : []), [diff]);\n const groups = useMemo(() => groupByDirectory(files), [files]);\n const flat = useMemo(() => groups.flatMap((g) => g.files.map((f) => f.path)), [groups]);\n const actionable = diff.state === 'ready' && diff.data.actionable && !running;\n\n useEffect(() => {\n if (file === null || !flat.includes(file)) setFile(flat[0] ?? null);\n }, [flat, file]);\n\n // ---- the selected file's patch ---------------------------------------------\n\n useEffect(() => {\n if (!visible || !baseTurn || !rootId || file === null || diff.state !== 'ready') {\n setPatch({ state: 'idle' });\n return;\n }\n const ctl = new AbortController();\n setPatch((prev) => (prev.state === 'ready' && prev.data.patch?.path === file ? prev : { state: 'loading' }));\n client.diff({ chatId: sessionId, turnId: baseTurn.turnId, rootId, mode, file }, ctl.signal).then(\n (d) => setPatch({ state: 'ready', data: d }),\n (err: unknown) => {\n if (ctl.signal.aborted) return;\n setPatch({ state: 'error', message: describeCheckpointError(err), code: errorCode(err) });\n },\n );\n return () => ctl.abort();\n }, [client, sessionId, baseTurn, rootId, mode, file, diff, visible]);\n\n // ---- actions -----------------------------------------------------------------\n\n const say = (text: string, tone: 'ok' | 'error' = 'ok') => setNotice({ text, tone });\n\n const reviewAction = async (target: { file: string; hunk?: string }, decision: VerseCheckpointDecision) => {\n if (!baseTurn || !rootId) return;\n setBusy({ file: target.file, hunk: target.hunk ?? null });\n setArmed(null);\n setNotice(null);\n try {\n const reason = decision === 'reject'\n ? `Restore ${target.hunk ? 'one change in ' : ''}${target.file} from the checkpoint before ${turnLabelShort(baseTurn)}.`\n : `Mark ${target.file} reviewed.`;\n const result = await gate.run(reason, () => client.review({ chatId: sessionId, turnId: baseTurn.turnId, rootId, file: target.file, ...(target.hunk ? { hunk: target.hunk } : {}), decision }));\n if (result === null) return;\n say(decision === 'accept'\n ? `Accepted ${target.hunk ? 'the change in ' : ''}${target.file}.`\n : `Restored ${target.hunk ? 'the change in ' : ''}${target.file} from the checkpoint.`);\n refresh();\n } catch (err) {\n say(describeCheckpointError(err), 'error');\n if (errorCode(err) === 'VERSE_CHECKPOINT_STALE') refresh();\n } finally {\n setBusy(null);\n }\n };\n\n const rejectFile = (path: string) => {\n if (armed !== path) {\n setArmed(path);\n return;\n }\n void reviewAction({ file: path }, 'reject');\n };\n\n useEffect(() => {\n if (armed === null) return;\n const t = setTimeout(() => setArmed(null), 5_000);\n return () => clearTimeout(t);\n }, [armed]);\n\n const openUndo = async (kind: 'undo' | 'redo') => {\n const target = kind === 'undo' ? turn : turns.find((t) => t.turnId === data?.redo?.turnId) ?? null;\n if (!target) return;\n const label = turnLabelShort(target);\n setUndo({ kind, turnLabel: label, preview: null, busy: true, error: null });\n try {\n const preview = await gate.run(\n kind === 'undo' ? `Prepare to undo ${label}: take a snapshot and compare it with the checkpoint.` : `Prepare to redo ${label}.`,\n () => (kind === 'undo' ? client.previewUndo(sessionId, target.turnId) : client.previewRedo(sessionId)),\n );\n if (preview === null) {\n setUndo(null);\n return;\n }\n setUndo({ kind, turnLabel: label, preview, busy: false, error: null });\n } catch (err) {\n setUndo(null);\n say(describeCheckpointError(err), 'error');\n }\n };\n\n const confirmUndo = async (resolutions: Resolutions) => {\n if (!undo?.preview) return;\n const { preview, kind, turnLabel: label } = undo;\n setUndo({ ...undo, busy: true, error: null });\n try {\n const result = await gate.run(kind === 'undo' ? `Undo ${label}.` : `Redo ${label}.`, () => client.apply(sessionId, preview.previewId, resolutions));\n if (result === null) {\n setUndo((u) => (u ? { ...u, busy: false } : u));\n return;\n }\n const written = result.roots.reduce((n, r) => n + r.written.length + r.deleted.length + r.merged.length, 0);\n setUndo(null);\n say(kind === 'undo' ? `Undid ${label}: ${plural(written, 'file')} restored. Redo puts them back.` : `Redid ${label}: ${plural(written, 'file')} put back.`);\n refresh();\n } catch (err) {\n const stale = errorCode(err) === 'VERSE_CHECKPOINT_STALE';\n setUndo((u) => (u ? { ...u, busy: false, error: describeCheckpointError(err) + (stale ? ' Close this and open Undo again to review the new state.' : '') } : u));\n }\n };\n\n const openGit = async (kind: 'commit' | 'pr') => {\n const root = rootPath(rootId);\n if (!root) return;\n setGitError(null);\n try {\n const status = await git.status(root);\n setGitDialog({ kind, root, status });\n } catch (err) {\n say(describeGitError(err), 'error');\n }\n };\n\n const runGit = async (reason: string, action: () => Promise<{ status: GitStatusView; pr?: { number: number } | null }>, done: (r: { status: GitStatusView; pr?: { number: number } | null }) => string) => {\n setGitBusy(true);\n setGitError(null);\n try {\n const result = await gate.run(reason, action);\n if (result === null) return;\n setGitDialog(null);\n say(done(result));\n refresh();\n } catch (err) {\n setGitError(describeGitError(err));\n } finally {\n setGitBusy(false);\n }\n };\n\n // ---- review comments -----------------------------------------------------------\n\n useEffect(() => {\n if (turnId === null || drafts.turnId === turnId) return;\n setDrafts({ turnId, list: loadComments(sessionId, turnId) });\n }, [sessionId, turnId, drafts.turnId]);\n\n const comments = turnId !== null && drafts.turnId === turnId ? drafts.list : NO_COMMENTS;\n\n /**\n * Change the drafts of turn `t` — the one on screen or, after a send that\n * outlived a turn switch, the one that was: its stored list is edited then.\n */\n const updateDrafts = useCallback((t: string, fn: (list: readonly ReviewComment[]) => readonly ReviewComment[]) => {\n setDrafts((prev) => {\n const base = prev.turnId === t ? prev.list : loadComments(sessionId, t);\n const next = fn(base);\n // A refused write (private window, full quota) only loses persistence.\n saveComments(sessionId, t, next);\n return prev.turnId === t ? { turnId: t, list: next } : prev;\n });\n }, [sessionId]);\n\n const hunkReview = (path: string): HunkReview | undefined => {\n if (turnId === null) return undefined;\n const t = turnId;\n return {\n comments: comments.filter((c) => c.path === path),\n onAdd: (anchor: CommentAnchor, body: string) =>\n updateDrafts(t, (list) => [...list, { ...anchor, id: newCommentId(), body, at: new Date().toISOString() }]),\n onEdit: (id, body) => updateDrafts(t, (list) => list.map((c) => (c.id === id ? { ...c, body } : c))),\n onDelete: (id) => updateDrafts(t, (list) => list.filter((c) => c.id !== id)),\n };\n };\n\n const ownLabel = (session ? seats.find((s) => s.id === session.seatId)?.label : null) ?? 'this chat’s agent';\n const reviewers = useMemo(\n () => (session ? askableSeats(seats).filter((s) => s.seatId !== session.seatId) : []),\n [seats, session],\n );\n\n const sendComments = async () => {\n if (!session || turnId === null || comments.length === 0) return;\n const t = turnId;\n const built = buildCommentsMessage(comments, { turnLabel: turn ? turnLabelShort(turn) : 'the last turn' });\n if (built.included.length === 0) {\n say('These comments are too long to send in one message. Shorten them and send again.', 'error');\n return;\n }\n // The chat's own seat: a turn cannot change seats, so this is the next turn of this chat.\n const target: FlowTarget = { seatId: session.seatId, model: session.model || null, label: ownLabel, engine: session.engine };\n const n = built.included.length;\n setSending('comments');\n setNotice(null);\n try {\n const result = await gate.run(\n `Send ${plural(n, 'review comment')} to ${ownLabel} as the next turn in this chat.`,\n () => ask({ source: session, target, text: built.text }),\n );\n if (result === null) return;\n const sent = new Set(built.included);\n updateDrafts(t, (list) => list.filter((c) => !sent.has(c.id)));\n say(built.omitted > 0\n ? `Sent ${plural(n, 'comment')} to ${ownLabel}. ${plural(built.omitted, 'comment')} did not fit in one message and ${built.omitted === 1 ? 'is' : 'are'} still drafted — send again for the rest.`\n : `Sent ${plural(n, 'comment')} to ${ownLabel}.`);\n refresh();\n } catch (err) {\n say(describeContextError(err), 'error');\n } finally {\n setSending(null);\n }\n };\n\n const reReview = async (target: FlowTarget) => {\n if (!session || !baseTurn || !rootId || diff.state !== 'ready') return;\n const scope = view === 'turn'\n ? turnLabelShort(baseTurn)\n : view === 'all' ? 'everything this chat changed' : `everything since before ${turnLabelShort(baseTurn)}`;\n setSending('review');\n setNotice(null);\n // The diff, file by file in list order, until the message budget is spent;\n // the rest are only named (the reviewer is on the same folders).\n const patches: ReviewFilePatch[] = [];\n const unshown: string[] = [];\n try {\n let bytes = 0;\n const byPath = new Map(files.map((f) => [f.path, f]));\n for (const path of flat) {\n const f = byPath.get(path);\n if (!f) continue;\n if (f.binary || !f.captured || bytes > MESSAGE_MAX_BYTES || patches.length >= REVIEW_MAX_FILES) {\n unshown.push(path);\n continue;\n }\n const cached = patch.state === 'ready' && patch.data.patch?.path === path ? patch.data.patch : null;\n const p = cached ?? (await client.diff({ chatId: sessionId, turnId: baseTurn.turnId, rootId, mode, file: path })).patch;\n if (!p || p.binary || !p.text.trim()) {\n unshown.push(path);\n continue;\n }\n patches.push({ path, text: p.text });\n bytes += utf8Bytes(p.text);\n }\n } catch (err) {\n say(describeCheckpointError(err), 'error');\n setSending(null);\n return;\n }\n const built = buildReReviewMessage({ authorLabel: ownLabel, scopeLabel: scope, patches, unshown, totals: totals(files), comments });\n try {\n const title = `Review · ${session.title.trim().slice(0, 80) || scope}`;\n const result = await gate.run(\n `Ask ${target.label} for a read-only review of ${scope}, in a new chat on the same folders.`,\n () => ask({ source: session, target, text: built.text, relation: 'review', title }),\n );\n if (result === null) return;\n const partial = built.shownFiles < files.length ? ` (${plural(built.shownFiles, 'file')} of ${files.length} in the message; it can read the rest)` : '';\n setNotice({\n text: `Asked ${result.label} to review ${scope} in a new chat${partial}.`,\n tone: 'ok',\n open: { sessionId: result.sessionId, label: result.label },\n });\n } catch (err) {\n say(describeContextError(err), 'error');\n } finally {\n setSending(null);\n }\n };\n\n // ---- keyboard: ↑ ↓ Home End walk the file list --------------------------------\n\n const onListKey = (e: ReactKeyboardEvent<HTMLUListElement>) => {\n if (flat.length === 0) return;\n const at = file === null ? -1 : flat.indexOf(file);\n const go = (i: number) => {\n e.preventDefault();\n const next = flat[Math.max(0, Math.min(flat.length - 1, i))]!;\n setFile(next);\n listRef.current?.querySelector<HTMLElement>(`[data-path=\"${CSS.escape(next)}\"]`)?.scrollIntoView?.({ block: 'nearest' });\n };\n if (e.key === 'ArrowDown') go(at + 1);\n else if (e.key === 'ArrowUp') go(at - 1);\n else if (e.key === 'Home') go(0);\n else if (e.key === 'End') go(flat.length - 1);\n };\n\n // ---- render -------------------------------------------------------------------\n\n if (list.state === 'error') {\n return (\n <section className={`${review.pane} ${styles.panel}`} aria-label=\"Changes\">\n <EmptyState\n compact\n tone=\"error\"\n title=\"Changes are unavailable\"\n body={list.message}\n action={<Button size=\"sm\" variant=\"subtle\" onClick={refresh}>Try again</Button>}\n />\n </section>\n );\n }\n\n if (list.state !== 'ready' || !data) {\n return (\n <section className={`${review.pane} ${styles.panel}`} aria-label=\"Changes\" aria-busy=\"true\">\n <div className={review.skeleton}><SkeletonLine /><SkeletonLine /><SkeletonLine /></div>\n </section>\n );\n }\n\n if (turns.length === 0) {\n return (\n <section className={`${review.pane} ${styles.panel}`} aria-label=\"Changes\">\n <EmptyState\n compact\n title=\"No checkpoints yet\"\n body=\"Before every turn Verse takes a checkpoint of this chat’s repositories. Send a message and the agent’s changes appear here, ready to review or undo.\"\n />\n </section>\n );\n }\n\n const stats = totals(files);\n const selected: VerseCheckpointDiffFile | null = files.find((f) => f.path === file) ?? null;\n const patchData = patch.state === 'ready' ? patch.data.patch : null;\n const canUndo = !running && turn !== null && turnHasCheckpoint(turn);\n const redoTurn = data.redo ? turns.find((t) => t.turnId === data.redo!.turnId) ?? null : null;\n const noCheckpoint = baseTurn && !turnHasCheckpoint(baseTurn) ? turnCheckpointError(baseTurn) ?? 'No checkpoint was taken before this turn.' : null;\n\n return (\n <section className={`${review.pane} ${styles.panel}`} aria-label=\"Changes\">\n <div className={`${chrome.header} ${styles.head}`}>\n <label className={styles.visuallyHidden} htmlFor={turnSelectId}>Turn</label>\n <select\n id={turnSelectId}\n className={styles.select}\n value={turnId ?? ''}\n disabled={view === 'all'}\n onChange={(e) => {\n followLatest.current = e.target.value === turns[turns.length - 1]?.turnId;\n setTurnId(e.target.value);\n }}\n >\n {[...turns].reverse().map((t) => (\n <option key={t.turnId} value={t.turnId}>{turnLabel(t)}</option>\n ))}\n </select>\n {rootsForTurn.length > 1 ? (\n <>\n <label className={styles.visuallyHidden} htmlFor={rootSelectId}>Repository</label>\n <select id={rootSelectId} className={styles.select} value={rootId ?? ''} onChange={(e) => setRootId(e.target.value)}>\n {rootsForTurn.map((id) => <option key={id} value={id}>{rootNames[id] ?? id}</option>)}\n </select>\n </>\n ) : rootId ? <span className={chrome.title} title={rootPath(rootId) ?? undefined}>{rootNames[rootId]}</span> : null}\n <Segmented<ChangesView>\n size=\"sm\"\n aria-label=\"Which changes\"\n value={view}\n onChange={setView}\n options={[\n { value: 'turn', label: 'This turn' },\n { value: 'since', label: 'Since turn' },\n { value: 'all', label: 'All turns' },\n ]}\n />\n <div className={chrome.actions}>\n <Segmented<PatchLayout>\n size=\"sm\"\n aria-label=\"Diff layout\"\n value={layout}\n onChange={setLayout}\n options={[\n { value: 'unified', label: 'Unified' },\n { value: 'split', label: 'Split' },\n ]}\n />\n <IconButton size=\"sm\" variant=\"ghost\" icon={<IconRefresh />} aria-label=\"Refresh changes\" onClick={refresh} />\n </div>\n </div>\n\n <div className={styles.toolbar}>\n <p className={review.summary} aria-live=\"polite\">\n {diff.state === 'ready' ? (\n <>\n {plural(stats.files, 'file')} · <span className={review.add}>+{stats.additions.toLocaleString('en-US')}</span>{' '}\n <span className={review.del}>−{stats.deletions.toLocaleString('en-US')}</span>\n <span className={review.muted}>\n {view === 'turn' ? ` in ${turn ? turnLabelShort(turn) : 'this turn'}` : ` since ${baseTurn ? `before ${turnLabelShort(baseTurn)}` : 'the checkpoint'}`}\n </span>\n </>\n ) : null}\n </p>\n <div className={styles.toolbarActions}>\n <Button size=\"sm\" variant=\"subtle\" disabled={!canUndo} onClick={() => void openUndo('undo')}\n title={running ? 'Wait for the running turn to finish' : undefined}>\n {turn && turn.index < turns.length ? `Rewind to before ${turnLabelShort(turn)}…` : 'Undo turn…'}\n </Button>\n {redoTurn ? (\n <Button size=\"sm\" variant=\"subtle\" disabled={running} onClick={() => void openUndo('redo')}>\n Redo {turnLabelShort(redoTurn)}\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" disabled={running || !rootId} onClick={() => void openGit('commit')}>Commit…</Button>\n <Button size=\"sm\" variant=\"ghost\" disabled={running || !rootId} onClick={() => void openGit('pr')}>Open PR…</Button>\n {session ? (\n <ReReviewMenu\n seats={reviewers}\n onPick={(seat) => void reReview(seat)}\n disabled={sending !== null || diff.state !== 'ready' || files.length === 0}\n busy={sending === 'review'}\n disabledReason={reviewers.length === 0 ? 'No other seat is available to review' : files.length === 0 ? 'No changes to review' : undefined}\n />\n ) : null}\n </div>\n </div>\n\n {running ? (\n <p className={styles.banner} role=\"status\">A turn is running. Changes update when it ends; restoring waits until then.</p>\n ) : null}\n {notice ? (\n <p className={styles.notice} role={notice.tone === 'error' ? 'alert' : 'status'} data-tone={notice.tone}>\n {notice.text}\n {notice.open && onOpenSession ? (\n <>\n {' '}\n <button type=\"button\" className={review.linkButton} onClick={() => onOpenSession(notice.open!.sessionId)}>\n Open {notice.open.label}’s review\n </button>\n </>\n ) : null}\n </p>\n ) : null}\n {comments.length > 0 ? (\n <div className={styles.drafts} role=\"region\" aria-label=\"Draft review comments\">\n <details className={styles.draftList}>\n <summary>{plural(comments.length, 'draft comment')}{turn ? ` on ${turnLabelShort(turn)}` : ''}</summary>\n <ul>\n {sortComments(comments).map((c) => (\n <li key={c.id}>\n <button type=\"button\" className={review.linkButton} disabled={!flat.includes(c.path)}\n onClick={() => setFile(c.path)} aria-label={`Show ${anchorLabel(c)}`} title={flat.includes(c.path) ? undefined : 'Not in this view'}>\n <code>{anchorLabel(c)}</code>\n </button>\n <span className={styles.draftBody}>{c.body}</span>\n <button type=\"button\" className={review.linkButton} data-tone=\"danger\"\n onClick={() => turnId !== null && updateDrafts(turnId, (list) => list.filter((x) => x.id !== c.id))}\n aria-label={`Delete the comment at ${anchorLabel(c)}`}>Delete</button>\n </li>\n ))}\n </ul>\n </details>\n <Button\n size=\"sm\"\n variant=\"primary\"\n disabled={!session || running || sending !== null}\n busy={sending === 'comments'}\n title={!session ? 'Open the chat to send comments' : running ? 'Wait for the running turn to finish' : `Send them to ${ownLabel} as the next turn`}\n onClick={() => void sendComments()}\n >\n Send {plural(comments.length, 'comment')}\n </Button>\n </div>\n ) : null}\n\n {noCheckpoint ? (\n <EmptyState compact title=\"No checkpoint for this turn\" body={noCheckpoint} />\n ) : diff.state === 'error' ? (\n <EmptyState compact tone=\"error\" title=\"Could not read the changes\" body={diff.message}\n action={<Button size=\"sm\" variant=\"subtle\" onClick={refresh}>Try again</Button>} />\n ) : diff.state !== 'ready' ? (\n <div className={review.skeleton}><SkeletonLine /><SkeletonLine /></div>\n ) : files.length === 0 ? (\n <EmptyState compact title=\"No changes\" body={view === 'turn' ? 'This turn did not change any files.' : 'The files match the checkpoint.'} />\n ) : (\n <div className={`${review.body} ${styles.body}`}>\n <nav className={review.files} aria-label=\"Changed files\">\n <ul ref={listRef} className={review.fileList} role=\"listbox\" aria-label=\"Changed files\" tabIndex={0} onKeyDown={onListKey}\n aria-activedescendant={file ? `cf-${cssId(file)}` : undefined}>\n {groups.map((g) => (\n <li key={g.dir || '.'} role=\"presentation\" className={review.group}>\n {g.dir ? <span className={review.dir} aria-hidden=\"true\" title={g.dir}>{g.dir}</span> : null}\n <ul role=\"presentation\" className={review.groupFiles}>\n {g.files.map((f) => (\n <li\n key={f.path}\n id={`cf-${cssId(f.path)}`}\n role=\"option\"\n aria-selected={f.path === file}\n data-path={f.path}\n data-status={f.status}\n data-accepted={f.accepted ? 'true' : undefined}\n className={review.file}\n onClick={() => setFile(f.path)}\n aria-label={`${f.path}, ${STATUS_WORD[f.status]}, ${f.additions} added, ${f.deletions} removed${f.editedAfterTurn ? ', edited after the agent' : ''}${f.accepted ? ', accepted' : ''}`}\n >\n <span className={review.fileStatus} aria-hidden=\"true\">{f.status}</span>\n <span className={review.fileName} title={f.oldPath ? `${f.oldPath} → ${f.path}` : f.path}>{f.name}</span>\n {f.editedAfterTurn ? <span className={styles.badge} title=\"Edited after the agent's turn\">edited</span> : null}\n {!f.captured ? <span className={styles.badge} title=\"Too large to checkpoint\">not captured</span> : null}\n <span className={review.fileCounts} aria-hidden=\"true\">\n {f.binary ? 'bin' : <><span className={review.add}>+{f.additions}</span> <span className={review.del}>−{f.deletions}</span></>}\n </span>\n {actionable && f.captured ? (\n <span className={styles.fileActions}>\n {!f.accepted ? (\n <button type=\"button\" className={styles.iconAction} disabled={busy !== null}\n onClick={(e) => { e.stopPropagation(); void reviewAction({ file: f.path }, 'accept'); }}\n aria-label={`Accept ${f.path}`} title=\"Accept (mark reviewed)\"><IconCheck /></button>\n ) : null}\n <button type=\"button\" className={styles.iconAction} data-tone=\"danger\" data-armed={armed === f.path ? 'true' : undefined}\n disabled={busy !== null}\n onClick={(e) => { e.stopPropagation(); rejectFile(f.path); }}\n aria-label={armed === f.path ? `Confirm: restore ${f.path} from the checkpoint` : `Reject ${f.path} (restore it from the checkpoint)`}\n title={armed === f.path ? 'Click again to restore this file from the checkpoint' : 'Reject (restore from the checkpoint)'}>\n {armed === f.path ? 'Restore?' : <IconX />}\n </button>\n </span>\n ) : null}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n </nav>\n <div className={review.patchArea}>\n {selected ? (\n <p className={review.patchPath}>\n <code>{selected.oldPath && selected.oldPath !== selected.path ? `${selected.oldPath} → ${selected.path}` : selected.path}</code>\n <span className={review.muted}> · {STATUS_WORD[selected.status]}</span>\n </p>\n ) : null}\n {patch.state === 'error' ? (\n <p className={review.patchError} role=\"alert\">{patch.message}</p>\n ) : patch.state !== 'ready' || !patchData ? (\n <div className={review.skeleton}><SkeletonLine /><SkeletonLine /><SkeletonLine /></div>\n ) : !selected?.captured ? (\n <p className={review.patchNotice}>This file was too large to checkpoint, so there is no diff and it cannot be restored.</p>\n ) : (\n <HunkPatch\n path={patchData.path}\n text={patchData.text}\n truncated={patchData.truncated}\n binary={patchData.binary}\n hunks={patchData.hunks}\n layout={layout}\n actionable={actionable}\n busyHunk={busy && busy.file === patchData.path ? busy.hunk : null}\n onHunk={(hash, decision) => void reviewAction({ file: patchData.path, hunk: hash }, decision)}\n review={hunkReview(patchData.path)}\n />\n )}\n </div>\n </div>\n )}\n\n <UndoDialog\n open={undo !== null && undo.preview !== null}\n preview={undo?.preview ?? null}\n turnLabel={undo?.turnLabel ?? ''}\n rootNames={rootNames}\n busy={undo?.busy ?? false}\n error={undo?.error ?? null}\n onClose={() => setUndo(null)}\n onConfirm={(r) => void confirmUndo(r)}\n />\n {gitDialog?.kind === 'commit' ? (\n <CommitDialog\n open\n status={gitDialog.status}\n busy={gitBusy}\n error={gitError}\n onClose={() => setGitDialog(null)}\n onSubmit={(message) =>\n void runGit(`Commit ${gitDialog.status.dirty} changed files on ${gitDialog.status.branch ?? 'this branch'}.`,\n () => git.commit({ root: gitDialog.root, message }),\n (r) => `Committed on ${r.status.branch ?? 'the branch'}.`)\n }\n />\n ) : null}\n {gitDialog?.kind === 'pr' ? (\n <CreatePrDialog\n open\n draft={false}\n status={gitDialog.status}\n busy={gitBusy}\n error={gitError}\n onClose={() => setGitDialog(null)}\n onSubmit={(req) =>\n void runGit(`Push ${gitDialog.status.branch ?? 'this branch'} and open a pull request into ${req.base}.`,\n () => git.openPr({ root: gitDialog.root, title: req.title, base: req.base, ...(req.body.trim() ? { body: req.body } : {}), ...(req.draft ? { draft: true } : {}) }),\n (r) => (r.pr ? `Opened #${r.pr.number}.` : 'Opened the pull request.'))\n }\n />\n ) : null}\n <MutationTokenDialog {...gate.dialog} tokenLabel=\"Mutation token\" tokenHelp=\"the mutation token ashlr verse printed\" />\n </section>\n );\n}\n\nfunction turnLabelShort(t: VerseCheckpointTurn): string {\n return `turn ${t.index}`;\n}\n\nfunction cssId(path: string): string {\n let h = 0;\n for (let i = 0; i < path.length; i++) h = (h * 31 + path.charCodeAt(i)) | 0;\n return `${(h >>> 0).toString(36)}-${path.length}`;\n}\n","/**\n * routes/verse/changes/ChangesPaneHost.tsx — what the dock mounts for the\n * Changes pane (⇧⌘D), registered through ./register.ts.\n *\n * Two views under one tab, so replacing the first-party pane loses nothing:\n *\n * Turns ChangesPanel — per-turn checkpoints: review, accept/reject per\n * file or hunk, Undo turn / Redo, Commit…, Open PR…, review\n * comments sent back to the seat, \"Re-review with…\" another seat.\n * Git the existing Review pane (uncommitted / branch diff with line\n * notes you add to the message), through its slot.\n *\n * A diff request from elsewhere (the branch bar's ± counts, a transcript\n * link — `requests.diff`) is a request for the Git view, so it switches there.\n */\nimport { useEffect, useRef, useState } from 'react';\nimport { EmptyState } from '../../../components/primitives/EmptyState.js';\nimport { Segmented } from '../../../components/primitives/Segmented.js';\nimport { ChangesPaneBody } from '../panes/builtin/SlotPanes.js';\nimport { useChatPaneData } from '../panes/chat-pane-data.js';\nimport type { PaneProps } from '../panes/pane-registry.js';\nimport { ChangesPanel } from './ChangesPanel.js';\nimport styles from './ChangesPanel.module.css';\n\nexport type ChangesHostView = 'turns' | 'git';\n\nexport function ChangesPaneHost(props: PaneProps & { initialView?: ChangesHostView }) {\n const { sessionId, session, visible, requests, host, initialView = 'turns' } = props;\n // The dock's seats (DockHost provides them): labels and the \"Re-review with…\" menu.\n const { seats } = useChatPaneData();\n const [view, setView] = useState<ChangesHostView>(initialView);\n const handledNonce = useRef<number | null>(requests?.diff?.nonce ?? null);\n\n useEffect(() => {\n const req = requests?.diff;\n if (!req || handledNonce.current === req.nonce) return;\n handledNonce.current = req.nonce;\n setView('git');\n }, [requests?.diff]);\n\n if (!sessionId) {\n return <EmptyState compact title=\"No chat open\" body=\"Open a chat to review what its agent changed, turn by turn.\" />;\n }\n\n return (\n <div className={styles.host}>\n <div className={styles.hostBar}>\n <Segmented<ChangesHostView>\n size=\"sm\"\n aria-label=\"Changes view\"\n value={view}\n onChange={setView}\n options={[\n { value: 'turns', label: 'Turns' },\n { value: 'git', label: 'Git' },\n ]}\n />\n </div>\n <div className={styles.hostBody}>\n {view === 'turns' ? (\n <ChangesPanel\n key={sessionId}\n sessionId={sessionId}\n visible={visible}\n session={session && session.id === sessionId ? session : null}\n seats={seats}\n onOpenSession={(id) => host.openSession(id)}\n />\n ) : (\n <ChangesPaneBody {...props} />\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,s as n}from"./index-_izD07R9.js";import{d as r,f as i}from"./colors-DvK0wMHH.js";import{t as a}from"./ProviderLogo-DIfJXNWf.js";import{n as o,o as s,s as c,u as l}from"./format-D7nBg2bn.js";var u=e(n(),1),d=t(),f={plotWrap:`_plotWrap_sf833_3`,svg:`_svg_sf833_9`,grid:`_grid_sf833_18`,axis:`_axis_sf833_24`,tick:`_tick_sf833_30`,label:`_label_sf833_37`,labelStrong:`_labelStrong_sf833_43`,line:`_line_sf833_50`,wash:`_wash_sf833_57`,reference:`_reference_sf833_62`,projection:`_projection_sf833_69`,marker:`_marker_sf833_76`,crosshair:`_crosshair_sf833_81`,area:`_area_sf833_89`,hoverBand:`_hoverBand_sf833_94`,reserveBand:`_reserveBand_sf833_102`,now:`_now_sf833_108`,endDot:`_endDot_sf833_117`,hit:`_hit_sf833_122`,focusable:`_focusable_sf833_136`,track:`_track_sf833_146`,trackEmpty:`_trackEmpty_sf833_160`,noData:`_noData_sf833_164`,tooltip:`_tooltip_sf833_171`,"chart-tooltip-in":`_chart-tooltip-in_sf833_1`,tooltipRight:`_tooltipRight_sf833_193`,tooltipLeft:`_tooltipLeft_sf833_197`,tooltipTitle:`_tooltipTitle_sf833_210`,tooltipRow:`_tooltipRow_sf833_216`,tooltipLabel:`_tooltipLabel_sf833_223`,tooltipTotal:`_tooltipTotal_sf833_228`,tooltipKey:`_tooltipKey_sf833_239`,tooltipKeyLine:`_tooltipKeyLine_sf833_247`,tooltipValue:`_tooltipValue_sf833_254`,tooltipMuted:`_tooltipMuted_sf833_261`,legend:`_legend_sf833_266`,legendItem:`_legendItem_sf833_277`,swatch:`_swatch_sf833_283`,swatchLine:`_swatchLine_sf833_290`,swatchEmpty:`_swatchEmpty_sf833_296`,note:`_note_sf833_304`,srOnly:`_srOnly_sf833_310`,draw:`_draw_sf833_334`,"chart-draw":`_chart-draw_sf833_1`,fadeIn:`_fadeIn_sf833_339`,"chart-fade":`_chart-fade_sf833_1`,rise:`_rise_sf833_345`,"chart-rise":`_chart-rise_sf833_1`,grow:`_grow_sf833_353`,"chart-grow":`_chart-grow_sf833_1`,skeleton:`_skeleton_sf833_405`,"chart-skeleton-pulse":`_chart-skeleton-pulse_sf833_1`,skeletonMark:`_skeletonMark_sf833_428`,skeletonTrack:`_skeletonTrack_sf833_432`,skeletonGrid:`_skeletonGrid_sf833_436`,monogram:`_monogram_sf833_454`,unknownMark:`_unknownMark_sf833_464`,swatchHatch:`_swatchHatch_sf833_470`,halo:`_halo_sf833_481`};function p({items:e,min:t=2}){return e.length<t?null:(0,d.jsx)(`ul`,{className:f.legend,children:e.map(e=>(0,d.jsxs)(`li`,{className:f.legendItem,children:[(0,d.jsx)(`span`,{"aria-hidden":`true`,className:e.kind===`line`?f.swatchLine:e.kind===`empty`?f.swatchEmpty:e.kind===`hatch`?f.swatchHatch:f.swatch,style:e.kind===`empty`||e.kind===`hatch`?void 0:{background:e.color}}),e.label]},e.label))})}function m({left:e,top:t,title:n,rows:r,side:i}){let a=i===`right`?`${f.tooltip} ${f.tooltipRight}`:i===`left`?`${f.tooltip} ${f.tooltipLeft}`:f.tooltip;return(0,d.jsxs)(`div`,{className:a,style:{left:e,top:t},role:`presentation`,"data-chart-tooltip":i??`above`,children:[(0,d.jsx)(`div`,{className:f.tooltipTitle,children:n}),r.map(e=>(0,d.jsxs)(`div`,{className:e.total?`${f.tooltipRow} ${f.tooltipTotal}`:f.tooltipRow,children:[e.color?(0,d.jsx)(`span`,{className:e.kind===`line`?f.tooltipKeyLine:f.tooltipKey,style:{background:e.color},"aria-hidden":`true`}):null,(0,d.jsx)(`span`,{className:f.tooltipLabel,children:e.label}),e.value===null?(0,d.jsx)(`span`,{className:`${f.tooltipValue} ${f.tooltipMuted}`,children:`no data`}):(0,d.jsx)(`span`,{className:f.tooltipValue,children:e.value})]},e.key))]})}var h=172,g=12;function _(e,t,n=h){if(e+g+n<=t)return`right`;if(e-g-n>=0)return`left`}function v(e,t,n=70){return Math.min(Math.max(e,Math.min(n,t/2)),Math.max(t-n,t/2))}function y({id:e}){let{size:t,angle:n,strokeWidth:i,stroke:a}=r;return(0,d.jsx)(`pattern`,{id:e,width:t,height:t,patternUnits:`userSpaceOnUse`,patternTransform:`rotate(${n})`,children:(0,d.jsx)(`line`,{x1:0,y1:0,x2:0,y2:t,stroke:a,strokeWidth:i})})}function ee({engine:e,x:t,y:n,height:r}){return(0,d.jsxs)(`g`,{"data-engine":e,"aria-hidden":`true`,children:[(0,d.jsx)(`rect`,{x:t,y:n,width:2,height:r,rx:1,fill:i(e)}),(0,d.jsx)(a,{engine:e,x:t+5,y:n+r/2-6,size:12,className:f.monogram})]})}function te(){return(0,d.jsxs)(`svg`,{width:16,height:16,viewBox:`0 0 16 16`,"aria-hidden":`true`,focusable:`false`,children:[(0,d.jsx)(`circle`,{cx:3.5,cy:8,r:1.4,fill:`currentColor`}),(0,d.jsx)(`circle`,{cx:8,cy:8,r:1.4,fill:`currentColor`}),(0,d.jsx)(`circle`,{cx:12.5,cy:8,r:1.4,fill:`currentColor`})]})}function b({id:e,color:t,top:n,bottom:r,from:i=.22}){return(0,d.jsxs)(`linearGradient`,{id:e,gradientUnits:`userSpaceOnUse`,x1:0,x2:0,y1:n,y2:r,"data-area-gradient":``,children:[(0,d.jsx)(`stop`,{offset:`0%`,style:{stopColor:t,stopOpacity:i}}),(0,d.jsx)(`stop`,{offset:`65%`,style:{stopColor:t,stopOpacity:i*.3}}),(0,d.jsx)(`stop`,{offset:`100%`,style:{stopColor:t,stopOpacity:0}})]})}var x=[.42,.58,.35,.7,.52,.8,.46,.64,.55,.74,.5,.62],S=[.55,.6,.48,.52,.4,.46,.36,.42,.3,.34,.28],C=600;function ne(e,t){let n=C,r=[.25,.5,.75].map(e=>(0,d.jsx)(`line`,{className:f.skeletonGrid,x1:0,x2:n,y1:t*e,y2:t*e},`g${e}`));switch(e){case`bars`:{let e=n/x.length;return(0,d.jsxs)(d.Fragment,{children:[r,x.map((n,r)=>(0,d.jsx)(`rect`,{className:f.skeletonMark,x:r*e+e*.25,width:e*.5,y:t-t*n*.9,height:t*n*.9,rx:3},r))]})}case`lanes`:{let e=Math.max(2,Math.min(6,Math.floor(t/32))),n=t/e;return Array.from({length:e},(e,t)=>(0,d.jsxs)(`g`,{children:[(0,d.jsx)(`rect`,{className:f.skeletonMark,x:0,y:t*n+n*.3,width:90,height:n*.4,rx:3}),(0,d.jsx)(`rect`,{className:f.skeletonMark,x:130+t*97%180,y:t*n+n*.25,width:120+t*53%200,height:n*.5,rx:3})]},t))}case`funnel`:{let e=t/5;return Array.from({length:5},(t,n)=>(0,d.jsxs)(`g`,{children:[(0,d.jsx)(`rect`,{className:f.skeletonTrack,x:140,y:n*e+e*.2,width:360,height:e*.6,rx:4}),(0,d.jsx)(`rect`,{className:f.skeletonMark,x:140,y:n*e+e*.2,width:360*(1-n*.18),height:e*.6,rx:4})]},n))}case`heat`:{let e=n/20,r=t/7;return Array.from({length:140},(t,n)=>(0,d.jsx)(`rect`,{className:n*7%5==0?f.skeletonMark:f.skeletonTrack,x:n%20*e+1.5,y:Math.floor(n/20)*r+1.5,width:27,height:r-3,rx:2},n))}case`gauge`:return(0,d.jsx)(`circle`,{className:f.skeletonMark,cx:n/2,cy:t/2,r:t/2});default:{let e=n/(S.length-1),i=S.map((n,r)=>`${r===0?`M`:`L`}${r*e},${t*n}`).join(` `);return(0,d.jsxs)(d.Fragment,{children:[r,(0,d.jsx)(`path`,{className:f.skeletonMark,d:`${i} L${n},${t} L0,${t} Z`})]})}}}function w({shape:e=`line`,height:t=200}){let n=Math.max(48,t);return(0,d.jsx)(`svg`,{className:f.skeleton,"data-chart-skeleton":e,width:`100%`,height:n,viewBox:`0 0 ${C} ${n}`,preserveAspectRatio:e===`gauge`?`xMidYMid meet`:`none`,"aria-hidden":`true`,focusable:`false`,children:ne(e,n)})}function T(e,t,n=4,r={}){if(!Number.isFinite(e)||!Number.isFinite(t))return[0];if(t<e&&([e,t]=[t,e]),t===e){if(t===0)return[0,1];let i=Math.abs(t)*.5;return T(Math.min(0,e-i),t+i,n,r)}let i=(t-e)/Math.max(1,n),a=10**Math.floor(Math.log10(i)),o=i/a,s=(o<=1?1:o<=2?2:o<=2.5?a>=10?2.5:2:o<=5?5:10)*a;r.integer&&s<1&&(s=1),r.minStep!==void 0&&Number.isFinite(r.minStep)&&s<r.minStep&&(s=r.minStep);let c=Math.floor(e/s)*s,l=Math.ceil(t/s)*s,u=Math.round((l-c)/s),d=Math.max(0,-Math.floor(Math.log10(s))+1),f=[];for(let e=0;e<=u;e++)f.push(Number((c+e*s).toFixed(d))||0);return f}function re(e){return e.every(e=>Number.isInteger(e))}function E(e,t){return new Set(t).size===t.length&&e.every((e,n)=>{if(e===0)return!0;let r=/\d[\d,]*(?:\.\d+)?/.exec(t[n]??``);if(!r)return!0;let i=Number(r[0].replace(/,/g,``));if(!Number.isFinite(i)||i===0)return!1;let a=i/Math.abs(e),o=10**Math.round(Math.log10(a));return Math.abs(a/o-1)<1e-6})}function D(e,t,n={}){let r=Math.max(1,n.count??4),i=n.integer===!0,a=n.format,o=(n,r,i)=>{let o=T(e,t,n,{integer:r,minStep:i}),c=o.length>1?o[1]-o[0]:1;if(a)return{ticks:o,labels:o.map(e=>a(e)),step:c};let u=l(o,c);return{ticks:o,labels:o.map(e=>s(e,c,u)),step:c}},c=o(r,i);if(!n.format||E(c.ticks,c.labels)||!Number.isFinite(e)||!Number.isFinite(t)||!(c.step>0))return c;let u=(e,t)=>{for(let n=r;n>=1;n--){let r=o(n,e,t);if(E(r.ticks,r.labels))return r}return null},d=u(i);if(d)return d;let f=Math.max(Math.abs(e),Math.abs(t),1);for(let e=Math.floor(Math.log10(c.step))+1;10**e<=f*10;e++){let t=u(i,Number((10**e).toPrecision(1)));if(t)return t}return u(!0)??c}function O(e){let t=t=>{let n=e(t).trim();if(!n.endsWith(`%`))return null;let r=Number(n.slice(0,-1).replace(/[,\s+]/g,``));return Number.isFinite(r)?r:null};return t(50)===50?100:t(.5)===50?1:null}function k(e){return Number.isFinite(e)&&e>=9466848e5}function A(e){return e.some(k)}function ie(e){return A(e)?k:Number.isFinite}var ae=6e5;function oe(e,t,n,r=`center`){if(t<e&&([e,t]=[t,e]),t-e>=n)return[e,t];if(r===`end`)return[t-n,t];let i=(e+t)/2;return[i-n/2,i+n/2]}var j=12*.6;function M(e){return Number.isFinite(e)&&e>0?e:1}function se(e=1){return j*M(e)}function ce(e,t=j){return e.length*t}var le=7;function ue(e,t,n,r=1){let i=M(r),a=Math.max(0,...e.map(e=>e.length));return Math.min(n*i,Math.max(t,a*le*i+10))}function de(e,t,n){let r=n.gap??8,i=e.map((e,t)=>({s:e,i:t})).sort((e,t)=>t.s.priority-e.s.priority||e.i-t.i),a=[];for(let{s:e,i:o}of i){let i=e.variants[Math.min(t,e.variants.length-1)]??``;if(!i)continue;let s=ce(i,n.charPx);if(s>n.max-n.min)continue;let c=e.anchor===`start`?e.x:e.anchor===`end`?e.x-s:e.x-s/2,l=e.x,u=e.anchor;c<n.min?(c=n.min,l=n.min,u=`start`):c+s>n.max&&(c=n.max-s,l=n.max,u=`end`);let d=c+s;a.some(e=>e.text===i||c<e.right+r&&e.left<d+r)||a.push({left:c,right:d,text:i,i:o,label:{key:e.key,text:i,x:l,anchor:u}})}return a.sort((e,t)=>e.i-t.i).map(e=>e.label)}function fe(e,t){if(e.length===0)return[];let n=Math.max(1,...e.map(e=>e.variants.length)),r=new Set(e.filter(e=>e.required!==!1).map(e=>e.key)),i=[],a=-1;for(let o=0;o<n;o++){let n=de(e,o,t),s=n.filter(e=>r.has(e.key)).length;if(s>a&&(i=n,a=s),a===r.size)break}return i}function pe(e,t,n,r){if(e.length===0)return new Map;if((e.length-1)*t>r-n+1e-9)return null;let i=e.map((e,t)=>({...e,i:t})).sort((e,t)=>e.y-t.y||e.i-t.i),a=e=>{let i=e.reduce((e,t)=>e+t.y,0)/e.length,a=(e.length-1)*t;return{members:e,top:P(i-a/2,n,r-a)}},o=i.map(e=>a([e]));for(let e=!0;e;){e=!1;for(let n=0;n+1<o.length;n++){let r=o[n],i=o[n+1];if(r.top+r.members.length*t>i.top+1e-9){o=[...o.slice(0,n),a([...r.members,...i.members]),...o.slice(n+2)],e=!0;break}}}let s=new Map;for(let e of o)e.members.forEach((n,r)=>s.set(n.key,e.top+r*t));return s}function me(e,t,n,r){let i=t-e;return i===0?()=>(n+r)/2:t=>n+(t-e)/i*(r-n)}function N(e,t){if(e<=0)return[];if(t<=1)return[e-1];if(e<=t)return Array.from({length:e},(e,t)=>t);let n=Math.ceil((e-1)/(t-1)),r=[];for(let t=e-1;t>=0;t-=n)r.push(t);return r.reverse()}function P(e,t,n){return Math.min(n,Math.max(t,e))}function F(e){let t=[],n=[];for(let r of e){if(r.y===null||!Number.isFinite(r.y)){n.length&&t.push(n),n=[];continue}n.push({x:r.x,y:r.y})}return n.length&&t.push(n),t}function I(e){return e.map((e,t)=>`${t===0?`M`:`L`}${L(e.x)},${L(e.y)}`).join(` `)}function L(e){return Math.round(e*10)/10}function R(e){return Math.floor(e)+.5}function z(e){return e<0?-1:1}function he(e,t,n){let r=t.x-e.x,i=n.x-t.x;if(r===0||i===0)return 0;let a=(t.y-e.y)/r,o=(n.y-t.y)/i,s=(a*i+o*r)/(r+i);return(z(a)+z(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function B(e,t,n){let r=t.x-e.x;return r?(3*(t.y-e.y)/r-n)/2:n}function V(e){let t=e.length;if(t<2)return[];if(t===2){let[t,n]=[e[0],e[1]];return[{from:t,c1:{x:t.x+(n.x-t.x)/3,y:t.y+(n.y-t.y)/3},c2:{x:n.x-(n.x-t.x)/3,y:n.y-(n.y-t.y)/3},to:n}]}let n=Array(t).fill(0);for(let r=1;r<t-1;r++)n[r]=he(e[r-1],e[r],e[r+1]);n[0]=B(e[0],e[1],n[1]),n[t-1]=B(e[t-1],e[t-2],n[t-2]);let r=[];for(let i=0;i<t-1;i++){let t=e[i],a=e[i+1],o=(a.x-t.x)/3;r.push({from:t,c1:{x:t.x+o,y:t.y+o*n[i]},c2:{x:a.x-o,y:a.y-o*n[i+1]},to:a})}return r}function H(e){return`${L(e.x)},${L(e.y)}`}function U(e){return e.length===0?``:`M${H(e[0])}`+V(e).map(e=>` C${H(e.c1)} ${H(e.c2)} ${H(e.to)}`).join(``)}function ge(e,t){if(e.length===0)return``;let n=V(t).reverse(),r=n.length?`L${H(n[0].to)}`+n.map(e=>` C${H(e.c2)} ${H(e.c1)} ${H(e.from)}`).join(``):t.length?`L${H(t[0])}`:``;return`${U(e)} ${r} Z`}function _e(e){let t=0,n=!1,r=0,i=[];return e.forEach((e,a)=>{if(e===null||!Number.isFinite(e)){n=!0;return}r++;let o=Math.max(0,e);o>0&&i.push({index:a,value:o,y0:t,y1:t+o}),t+=o}),{segments:i,total:t,incomplete:n,unknown:r===0&&e.length>0}}function ve(e,t,n,r,i=4){if(r<=0||n<=0)return``;let a=Math.max(0,Math.min(i,n/2,r));return[`M${L(e)},${L(t+r)}`,`L${L(e)},${L(t+a)}`,`Q${L(e)},${L(t)} ${L(e+a)},${L(t)}`,`L${L(e+n-a)},${L(t)}`,`Q${L(e+n)},${L(t)} ${L(e+n)},${L(t+a)}`,`L${L(e+n)},${L(t+r)}`,`Z`].join(` `)}function ye(e,t,n,r,i=4){if(r<=0||n<=0)return``;let a=Math.max(0,Math.min(i,r/2,n));return[`M${L(e)},${L(t)}`,`L${L(e+n-a)},${L(t)}`,`Q${L(e+n)},${L(t)} ${L(e+n)},${L(t+a)}`,`L${L(e+n)},${L(t+r-a)}`,`Q${L(e+n)},${L(t+r)} ${L(e+n-a)},${L(t+r)}`,`L${L(e)},${L(t+r)}`,`Z`].join(` `)}function be(e){let t=e[0]??null;return e.map((n,r)=>{let i=r>0?e[r-1]??null:null;return{value:n,ofFirst:n!==null&&t!==null&&t>0?n/t:null,ofPrevious:r>0&&n!==null&&i!==null&&i>0?n/i:null}})}var xe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Se(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;let t=Date.parse(`${e}T00:00:00Z`);return Number.isFinite(t)&&new Date(t).toISOString().slice(0,10)===e?t:null}function Ce(e,t=1){let n=new Map,r=1/0,i=-1/0;for(let t of e){let e=Se(t.day);e===null||e<9466848e5||(n.set(t.day,t.value),r=Math.min(r,e),i=Math.max(i,e))}if(!Number.isFinite(r))return{cells:[],weeks:0,months:[]};let a=864e5,o=(new Date(r).getUTCDay()-t+7)%7,s=r-o*a,c=(new Date(i).getUTCDay()-t+7)%7,l=i+(6-c)*a,u=[],d=[],f=-1;for(let e=s,t=0;e<=l;e+=a,t++){let a=new Date(e).toISOString().slice(0,10),o=Math.floor(t/7),s=t%7,c=e<r||e>i;u.push({day:a,value:c?null:n.has(a)?n.get(a):null,week:o,weekday:s,outside:c});let l=new Date(e).getUTCMonth();!c&&l!==f&&(d.push({week:o,label:xe[l]}),f=l)}return{cells:u,weeks:Math.floor((l-s)/a/7)+1,months:d}}function we(e,t,n=4){return e===null||!Number.isFinite(e)?null:e<=0||t<=0?0:P(Math.ceil(e/t*n),1,n)}function Te(e,t,n={}){let r=t!==null&&Number.isFinite(t)?t:null,i=e.filter(e=>e.remaining!==null&&Number.isFinite(e.remaining)&&Number.isFinite(e.t)).sort((e,t)=>e.t-t.t),a=i.length?i[i.length-1]:null,o=i.slice(-(n.window??6));if(!a||o.length<2)return{slopePerMs:null,exhaustAt:null,reserveAt:null,remainingAtReset:null,from:a};let s=o.length,c=o.reduce((e,t)=>e+t.t,0)/s,l=o.reduce((e,t)=>e+t.remaining,0)/s,u=0,d=0;for(let e of o)u+=(e.t-c)*(e.remaining-l),d+=(e.t-c)**2;let f=d===0?0:u/d,p=e=>{if(a.remaining<=e)return a.t;if(f>=0||r===null)return null;let t=a.t+(e-a.remaining)/f;return t<=r?t:null},m=n.reserve??null;return{slopePerMs:f,exhaustAt:p(0),reserveAt:m===null?null:p(m),remainingAtReset:r===null?null:Math.max(0,a.remaining+f*Math.max(0,r-a.t)),from:a}}function W(e,t,n,r){return{x:e+n*Math.cos(r),y:t-n*Math.sin(r)}}function Ee(e,t,n,r,i){let a=P(r,0,1),o=P(i,0,1);if(o<=a)return``;let s=W(e,t,n,Math.PI*(1-a)),c=W(e,t,n,Math.PI*(1-o));return`M${L(s.x)},${L(s.y)} A${n},${n} 0 0 1 ${L(c.x)},${L(c.y)}`}function De(e,t,n){return e===null||!Number.isFinite(e)?`unknown`:e>=n?`danger`:e>=t?`warn`:`ok`}function Oe(){if(typeof document<`u`){let e=document.documentElement.getAttribute(`data-motion`);if(e===`reduce`)return!0;if(e===`full`)return!1}if(typeof window>`u`||typeof window.matchMedia!=`function`)return!1;try{return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}catch{return!1}}function ke(){let[e]=(0,u.useState)(()=>Oe()?`static`:`enter`);return e}function Ae(e,t,n=640){let[r,i]=(0,u.useState)(null),[a,o]=(0,u.useState)(null);return(0,u.useLayoutEffect)(()=>{e.current!==a&&o(e.current)}),(0,u.useLayoutEffect)(()=>{if(t!==void 0)return;let e=a;if(!e)return;let n=()=>{let t=Math.floor(e.getBoundingClientRect().width);t>0&&i(e=>e===t?e:t)};if(n(),typeof ResizeObserver>`u`)return;let r=0,o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=requestAnimationFrame(n)});return o.observe(e),()=>{cancelAnimationFrame(r),o.disconnect()}},[a,t]),Math.max(280,t??r??n)}function G(e=typeof document>`u`?null:document.documentElement){return!e||typeof getComputedStyle!=`function`?1:M(Number.parseFloat(getComputedStyle(e).getPropertyValue(`--ui-text-scale`)))}var K=new Set,q=null,J=null;function Y(){let e=G();if(e!==q){q=e;for(let e of K)e()}}function je(){q=G();let e=document.documentElement,t=typeof MutationObserver>`u`?null:new MutationObserver(Y);t?.observe(e,{attributes:!0,attributeFilter:[`data-ui-scale`,`style`]});let n=typeof requestAnimationFrame==`function`,r=0,i=()=>{if(!n)return Y();cancelAnimationFrame(r),r=requestAnimationFrame(Y)};return window.addEventListener(`resize`,i),()=>{t?.disconnect(),n&&cancelAnimationFrame(r),window.removeEventListener(`resize`,i)}}function Me(e){return K.add(e),K.size===1&&typeof document<`u`&&(J=je()),()=>{K.delete(e),!(K.size>0)&&(J?.(),J=null,q=null)}}function Ne(){return q??G()}function X(){return(0,u.useSyncExternalStore)(Me,Ne,()=>1)}var Z={table:`_table_x2yvy_1`,numeric:`_numeric_x2yvy_22`,empty:`_empty_x2yvy_27`};function Pe({caption:e,columns:t,rows:n,rowKey:r,emptyMessage:i=`No rows.`}){return(0,d.jsxs)(`table`,{className:Z.table,children:[(0,d.jsx)(`caption`,{className:`visually-hidden`,children:e}),(0,d.jsx)(`thead`,{children:(0,d.jsx)(`tr`,{children:t.map(e=>(0,d.jsx)(`th`,{scope:`col`,className:e.numeric?Z.numeric:void 0,children:e.label},e.key))})}),(0,d.jsxs)(`tbody`,{children:[n.length===0?(0,d.jsx)(`tr`,{children:(0,d.jsx)(`td`,{colSpan:Math.max(1,t.length),className:Z.empty,children:i})}):null,n.map((e,n)=>(0,d.jsx)(`tr`,{children:t.map(t=>(0,d.jsx)(`td`,{className:t.numeric?Z.numeric:void 0,children:t.render(e)},t.key))},r(e,n)))]})]})}var Q={frame:`_frame_4uyc2_1`,header:`_header_4uyc2_11`,actions:`_actions_4uyc2_23`,menuWrap:`_menuWrap_4uyc2_31`,more:`_more_4uyc2_37`,menu:`_menu_4uyc2_31`,menuItem:`_menuItem_4uyc2_78`,check:`_check_4uyc2_100`,hint:`_hint_4uyc2_105`,heading:`_heading_4uyc2_17`,title:`_title_4uyc2_123`,description:`_description_4uyc2_129`,plot:`_plot_4uyc2_134`,table:`_table_4uyc2_140`,caveat:`_caveat_4uyc2_145`,state:`_state_4uyc2_155`,loading:`_loading_4uyc2_164`,dark:`_dark_4uyc2_170`,darkTitle:`_darkTitle_4uyc2_177`,darkBody:`_darkBody_4uyc2_183`,unknown:`_unknown_4uyc2_189`};function Fe(e){if(/^\d{4}-\d{2}-\d{2}$/.test(e))return o(e);let t=Date.parse(e);return Number.isFinite(t)?c(t):o(e.slice(0,10))}function Ie({status:e,skeleton:t,skeletonHeight:n}){switch(e.kind){case`loading`:return(0,d.jsxs)(`div`,{className:Q.loading,role:`status`,"aria-busy":`true`,children:[(0,d.jsx)(w,{shape:t,height:n}),(0,d.jsx)(`span`,{className:`visually-hidden`,children:`Loading…`})]});case`empty`:return(0,d.jsx)(`p`,{className:Q.state,children:e.message??`Nothing happened in this window.`});case`dark`:return(0,d.jsxs)(`div`,{className:`${Q.state} ${Q.dark}`,children:[(0,d.jsxs)(`p`,{className:Q.darkTitle,children:[e.subject??`Fleet`,` dark since `,Fe(e.since)]}),(0,d.jsx)(`p`,{className:Q.darkBody,children:e.detail??`No runs or proposals have been recorded since then.`})]});case`unknown`:return(0,d.jsxs)(`p`,{className:`${Q.state} ${Q.unknown}`,role:`note`,children:[`Unknown — `,e.reason??`the data source could not be read.`,` Nothing is shown rather than a guess.`]})}}function Le(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||e.isContentEditable}var $=[{view:`chart`,label:`Show as chart`,hint:null},{view:`table`,label:`Show as table`,hint:`T`}];function Re({title:e,view:t,onPick:n}){let[r,i]=(0,u.useState)(!1),[a,o]=(0,u.useState)(0),s=(0,u.useRef)(null),c=(0,u.useRef)(null),l=(0,u.useId)(),f=(0,u.useCallback)(e=>{i(!1),e&&s.current?.focus()},[]);(0,u.useEffect)(()=>{if(!r)return;let e=e=>{let t=e.target;t&&(c.current?.contains(t)||s.current?.contains(t))||i(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[r]),(0,u.useEffect)(()=>{r&&c.current?.querySelectorAll(`[role="menuitemradio"]`)[a]?.focus()},[r,a]);function p(e){o(e),i(!0)}function m(e){(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),p(e.key===`ArrowUp`?$.length-1:0))}function h(e){e.key===`ArrowDown`?(e.preventDefault(),o(e=>(e+1)%$.length)):e.key===`ArrowUp`?(e.preventDefault(),o(e=>(e-1+$.length)%$.length)):e.key===`Home`?(e.preventDefault(),o(0)):e.key===`End`?(e.preventDefault(),o($.length-1)):e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),f(!0)):e.key===`Tab`&&f(!1)}return(0,d.jsxs)(`span`,{className:Q.menuWrap,children:[(0,d.jsx)(`button`,{ref:s,type:`button`,className:Q.more,"aria-label":`${e}: view options`,"aria-haspopup":`menu`,"aria-expanded":r,"aria-controls":r?l:void 0,title:`View options (T toggles the table)`,onClick:()=>r?f(!1):p(Math.max(0,$.findIndex(e=>e.view===t))),onKeyDown:m,children:(0,d.jsx)(te,{})}),r?(0,d.jsx)(`div`,{ref:c,id:l,role:`menu`,"aria-label":`${e} view`,className:Q.menu,onKeyDown:h,children:$.map((e,r)=>(0,d.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":t===e.view,tabIndex:r===a?0:-1,className:Q.menuItem,onClick:()=>{n(e.view),f(!0)},children:[(0,d.jsx)(`span`,{className:Q.check,"aria-hidden":`true`,children:t===e.view?`✓`:``}),(0,d.jsx)(`span`,{children:e.label}),e.hint?(0,d.jsx)(`kbd`,{className:Q.hint,children:e.hint}):null]},e.view))}):null]})}function ze({title:e,description:t,caveat:n,status:r={kind:`ready`},defaultView:i=`chart`,hideToggle:a=!1,actions:o,children:s,table:c,footer:l,skeleton:f,skeletonHeight:p}){let[m,h]=(0,u.useState)(i),g=(0,u.useId)(),_=r.kind===`ready`,v=_&&!a;function y(e){v&&!e.defaultPrevented&&(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.key.toLowerCase()!==`t`||Le(e.target)||(e.preventDefault(),h(e=>e===`chart`?`table`:`chart`)))}return(0,d.jsxs)(`figure`,{className:Q.frame,"aria-labelledby":g,"data-chart-card":``,"data-view":m,onKeyDown:y,children:[(0,d.jsxs)(`figcaption`,{className:Q.header,children:[(0,d.jsxs)(`span`,{className:Q.heading,children:[(0,d.jsx)(`span`,{id:g,className:Q.title,children:e}),t?(0,d.jsx)(`span`,{className:Q.description,children:t}):null]}),o||v?(0,d.jsxs)(`span`,{className:Q.actions,children:[o,v?(0,d.jsx)(Re,{title:e,view:m,onPick:h}):null]}):null]}),n?(0,d.jsx)(`p`,{className:Q.caveat,role:`note`,children:n}):null,_?m===`table`?(0,d.jsx)(`div`,{className:Q.table,children:c}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`div`,{className:Q.plot,children:s}),l]}):(0,d.jsx)(Ie,{status:r,skeleton:f,skeletonHeight:p})]})}export{U as A,ee as B,T as C,ye as D,Te as E,ie as F,v as H,b as I,p as L,_e as M,N,ve as O,ue as P,w as R,me as S,W as T,_ as U,y as V,f as W,k as _,ke as a,fe as b,D as c,pe as d,oe as f,we as g,De as h,Ae as i,F as j,ge as k,Ce as l,Ee as m,Pe as n,ae as o,be as p,X as r,re as s,ze as t,R as u,A as v,O as w,I as x,se as y,m as z};
|
|
2
|
+
//# sourceMappingURL=ChartFrame-sZTnZkVd.js.map
|