@ashlr/hub 3.22.0 → 3.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +5 -5
- package/dist/authority-surface.json +16 -11
- package/dist/build-identity.json +2 -2
- package/dist/cli/verify-safety-sources.d.ts +4 -0
- package/dist/cli/verify-safety-sources.js +41 -0
- package/dist/cli/verify-safety-sources.js.map +1 -0
- package/dist/cli/verify-safety.js +16 -1
- package/dist/cli/verify-safety.js.map +1 -1
- package/dist/core/decide/needs-you.d.ts +3 -1
- package/dist/core/decide/needs-you.js +52 -28
- package/dist/core/decide/needs-you.js.map +1 -1
- package/dist/core/fleet/fleet-control-model.d.ts +2 -1
- package/dist/core/fleet/fleet-control-model.js +5 -0
- package/dist/core/fleet/fleet-control-model.js.map +1 -1
- package/dist/core/fleet/fleet-control-types.d.ts +11 -1
- package/dist/core/fleet/fleet-control.d.ts +4 -0
- package/dist/core/fleet/fleet-control.js +23 -1
- package/dist/core/fleet/fleet-control.js.map +1 -1
- package/dist/core/fleet/quota.js +1 -1
- package/dist/core/fleet/quota.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +4 -2
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +3 -1
- package/dist/core/web/public/next/assets/ActionMenu-Z14OhnFI.js +2 -0
- package/dist/core/web/public/next/assets/ActionMenu-Z14OhnFI.js.map +1 -0
- package/dist/core/web/public/next/assets/Advanced-fUyq-fpH.js +2 -0
- package/dist/core/web/public/next/assets/Advanced-fUyq-fpH.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentDetailScreen-C8h--Nah.js +2 -0
- package/dist/core/web/public/next/assets/AgentDetailScreen-C8h--Nah.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentToolsSheet-BP3h-UbZ.js +2 -0
- package/dist/core/web/public/next/assets/AgentToolsSheet-BP3h-UbZ.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentToolsStrip--hf18knJ.js +2 -0
- package/dist/core/web/public/next/assets/AgentToolsStrip--hf18knJ.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentsScreen-BR-j0Fzd.js +2 -0
- package/dist/core/web/public/next/assets/AgentsScreen-BR-j0Fzd.js.map +1 -0
- package/dist/core/web/public/next/assets/AgentsSection-OKKOuYed.js +3 -0
- package/dist/core/web/public/next/assets/AgentsSection-OKKOuYed.js.map +1 -0
- package/dist/core/web/public/next/assets/App-ttVrZYp5.js +8 -0
- package/dist/core/web/public/next/assets/App-ttVrZYp5.js.map +1 -0
- package/dist/core/web/public/next/assets/AppsSection-sqsXqENO.js +2 -0
- package/dist/core/web/public/next/assets/AppsSection-sqsXqENO.js.map +1 -0
- package/dist/core/web/public/next/assets/AreaTrend-LVgaB49b.js +2 -0
- package/dist/core/web/public/next/assets/AreaTrend-LVgaB49b.js.map +1 -0
- package/dist/core/web/public/next/assets/AutomationsSection-BITmxjuB.js +2 -0
- package/dist/core/web/public/next/assets/AutomationsSection-BITmxjuB.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-nO9lIcCv.js +3 -0
- package/dist/core/web/public/next/assets/AutonomyOffState-nO9lIcCv.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-DWYUPDP6.js +2 -0
- package/dist/core/web/public/next/assets/AutonomySection-DWYUPDP6.js.map +1 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-C4Yp1JTY.js +2 -0
- package/dist/core/web/public/next/assets/AutonomyStatus-C4Yp1JTY.js.map +1 -0
- package/dist/core/web/public/next/assets/BranchBar-CkiZSNqB.js +2 -0
- package/dist/core/web/public/next/assets/BranchBar-CkiZSNqB.js.map +1 -0
- package/dist/core/web/public/next/assets/BrowserPanel-CECVGJBS.js +7 -0
- package/dist/core/web/public/next/assets/BrowserPanel-CECVGJBS.js.map +1 -0
- package/dist/core/web/public/next/assets/BudgetControl-De1TPzvX.js +2 -0
- package/dist/core/web/public/next/assets/BudgetControl-De1TPzvX.js.map +1 -0
- package/dist/core/web/public/next/assets/Button-CstSJwha.js +2 -0
- package/dist/core/web/public/next/assets/Button-CstSJwha.js.map +1 -0
- package/dist/core/web/public/next/assets/CapacityStrip-nIJcB_lA.js +2 -0
- package/dist/core/web/public/next/assets/CapacityStrip-nIJcB_lA.js.map +1 -0
- package/dist/core/web/public/next/assets/ChangesPaneHost-Bnj_NcRa.js +16 -0
- package/dist/core/web/public/next/assets/ChangesPaneHost-Bnj_NcRa.js.map +1 -0
- package/dist/core/web/public/next/assets/ChartFrame-Dljee9y6.js +2 -0
- package/dist/core/web/public/next/assets/ChartFrame-Dljee9y6.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatPanes-x_ySUIyR.js +2 -0
- package/dist/core/web/public/next/assets/ChatPanes-x_ySUIyR.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-CXJa8QOi.js +3 -0
- package/dist/core/web/public/next/assets/ChatSection-CXJa8QOi.js.map +1 -0
- package/dist/core/web/public/next/assets/ChecksPanel-D9r8koxq.js +5 -0
- package/dist/core/web/public/next/assets/ChecksPanel-D9r8koxq.js.map +1 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-D5ajpoMe.js +2 -0
- package/dist/core/web/public/next/assets/CloudBudgetForm-D5ajpoMe.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandPalette-ONyqYZzt.js +3 -0
- package/dist/core/web/public/next/assets/CommandPalette-ONyqYZzt.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandSection-DxNIibnI.js +3 -0
- package/dist/core/web/public/next/assets/CommandSection-DxNIibnI.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandWorkflowForm-Bz3PuZXH.js +9 -0
- package/dist/core/web/public/next/assets/CommandWorkflowForm-Bz3PuZXH.js.map +1 -0
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-COVyeer0.js +3 -0
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-COVyeer0.js.map +1 -0
- package/dist/core/web/public/next/assets/CompareDialog-PVqv0Tx9.js +4 -0
- package/dist/core/web/public/next/assets/CompareDialog-PVqv0Tx9.js.map +1 -0
- package/dist/core/web/public/next/assets/ComputerControl-DkSIUrYm.js +2 -0
- package/dist/core/web/public/next/assets/ComputerControl-DkSIUrYm.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-CdCzzk0I.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-CdCzzk0I.js.map +1 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-BTzOgqho.js +2 -0
- package/dist/core/web/public/next/assets/DeleteChatDialog-BTzOgqho.js.map +1 -0
- package/dist/core/web/public/next/assets/DevinStopDialog-CGsDqfan.js +2 -0
- package/dist/core/web/public/next/assets/DevinStopDialog-CGsDqfan.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-DDHg9cuT.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-DDHg9cuT.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffPane-BR3HU7pC.js +2 -0
- package/dist/core/web/public/next/assets/DiffPane-BR3HU7pC.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-hJK75qko.js +2 -0
- package/dist/core/web/public/next/assets/DiffViewer-hJK75qko.js.map +1 -0
- package/dist/core/web/public/next/assets/DockHost-DhOosHbo.js +2 -0
- package/dist/core/web/public/next/assets/DockHost-DhOosHbo.js.map +1 -0
- package/dist/core/web/public/next/assets/EmptyState-CGVr0VO2.js +2 -0
- package/dist/core/web/public/next/assets/EmptyState-CGVr0VO2.js.map +1 -0
- package/dist/core/web/public/next/assets/Epistemic-tp0ZNAKZ.js +2 -0
- package/dist/core/web/public/next/assets/Epistemic-tp0ZNAKZ.js.map +1 -0
- package/dist/core/web/public/next/assets/EvidenceTimeline-YmKIoxNx.js +2 -0
- package/dist/core/web/public/next/assets/EvidenceTimeline-YmKIoxNx.js.map +1 -0
- package/dist/core/web/public/next/assets/FilesPane-CoNjfkPP.js +2 -0
- package/dist/core/web/public/next/assets/FilesPane-CoNjfkPP.js.map +1 -0
- package/dist/core/web/public/next/assets/FleetScreen-CstwycnB.js +2 -0
- package/dist/core/web/public/next/assets/FleetScreen-CstwycnB.js.map +1 -0
- package/dist/core/web/public/next/assets/FleetSection-D0xk0s5J.js +5 -0
- package/dist/core/web/public/next/assets/FleetSection-D0xk0s5J.js.map +1 -0
- package/dist/core/web/public/next/assets/Funnel-UPrk7fcy.js +2 -0
- package/dist/core/web/public/next/assets/Funnel-UPrk7fcy.js.map +1 -0
- package/dist/core/web/public/next/assets/GearTray-BSjga1J_.js +2 -0
- package/dist/core/web/public/next/assets/GearTray-BSjga1J_.js.map +1 -0
- package/dist/core/web/public/next/assets/GitDialogs-ekwzxl76.js +2 -0
- package/dist/core/web/public/next/assets/GitDialogs-ekwzxl76.js.map +1 -0
- package/dist/core/web/public/next/assets/GrowthSection-Dh-gnkgc.js +3 -0
- package/dist/core/web/public/next/assets/GrowthSection-Dh-gnkgc.js.map +1 -0
- package/dist/core/web/public/next/assets/HandoffDialog-BDiyA3u-.js +2 -0
- package/dist/core/web/public/next/assets/HandoffDialog-BDiyA3u-.js.map +1 -0
- package/dist/core/web/public/next/assets/HomeBody-Ce3HBIEb.js +3 -0
- package/dist/core/web/public/next/assets/HomeBody-Ce3HBIEb.js.map +1 -0
- package/dist/core/web/public/next/assets/HomeSeats-BFLCWCFp.js +2 -0
- package/dist/core/web/public/next/assets/HomeSeats-BFLCWCFp.js.map +1 -0
- package/dist/core/web/public/next/assets/Input-Cpn9uYj2.js +2 -0
- package/dist/core/web/public/next/assets/Input-Cpn9uYj2.js.map +1 -0
- package/dist/core/web/public/next/assets/LaunchDialog-CrPEf652.js +9 -0
- package/dist/core/web/public/next/assets/LaunchDialog-CrPEf652.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderCard-Dhq-w_Mf.js +2 -0
- package/dist/core/web/public/next/assets/LeaderCard-Dhq-w_Mf.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderConversation-CiWqhsoa.js +3 -0
- package/dist/core/web/public/next/assets/LeaderConversation-CiWqhsoa.js.map +1 -0
- package/dist/core/web/public/next/assets/LeaderScreen-Z5KPjxBV.js +2 -0
- package/dist/core/web/public/next/assets/LeaderScreen-Z5KPjxBV.js.map +1 -0
- package/dist/core/web/public/next/assets/LessonsPanel-B6XVKAPE.js +2 -0
- package/dist/core/web/public/next/assets/LessonsPanel-B6XVKAPE.js.map +1 -0
- package/dist/core/web/public/next/assets/LiveTimer-B8t2iX5h.js +2 -0
- package/dist/core/web/public/next/assets/LiveTimer-B8t2iX5h.js.map +1 -0
- package/dist/core/web/public/next/assets/LocalSeatBadge-HMxIrMiL.js +2 -0
- package/dist/core/web/public/next/assets/LocalSeatBadge-HMxIrMiL.js.map +1 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-BlFI5oao.js +2 -0
- package/dist/core/web/public/next/assets/MatrixHeatmap-BlFI5oao.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-snZNKexW.js +2 -0
- package/dist/core/web/public/next/assets/McpSection-snZNKexW.js.map +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-CS0mAtSs.js +3 -0
- package/dist/core/web/public/next/assets/MessageMarkdown-CS0mAtSs.js.map +1 -0
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-D5R-zr-W.js +72 -0
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-D5R-zr-W.js.map +1 -0
- package/dist/core/web/public/next/assets/Meter-VXI75VNe.js +2 -0
- package/dist/core/web/public/next/assets/Meter-VXI75VNe.js.map +1 -0
- package/dist/core/web/public/next/assets/MicButton-DORAXsUU.js +2 -0
- package/dist/core/web/public/next/assets/MicButton-DORAXsUU.js.map +1 -0
- package/dist/core/web/public/next/assets/MindSection-DZLHz29Q.js +3 -0
- package/dist/core/web/public/next/assets/MindSection-DZLHz29Q.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileComposer-B8nWsIJO.js +2 -0
- package/dist/core/web/public/next/assets/MobileComposer-B8nWsIJO.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileGuardSheet-BRwOfD9o.js +2 -0
- package/dist/core/web/public/next/assets/MobileGuardSheet-BRwOfD9o.js.map +1 -0
- package/dist/core/web/public/next/assets/MobileRuntime-kMob_MjB.js +3 -0
- package/dist/core/web/public/next/assets/MobileRuntime-kMob_MjB.js.map +1 -0
- package/dist/core/web/public/next/assets/MoreScreen-92dC6Bj7.js +2 -0
- package/dist/core/web/public/next/assets/MoreScreen-92dC6Bj7.js.map +1 -0
- package/dist/core/web/public/next/assets/MultiModelBar-BhAUUQOq.js +7 -0
- package/dist/core/web/public/next/assets/MultiModelBar-BhAUUQOq.js.map +1 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DlY2VLVh.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DlY2VLVh.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BH0ffbht.js +3 -0
- package/dist/core/web/public/next/assets/NeedsYouDrawer-BH0ffbht.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CI_Dy-hi.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouList-CI_Dy-hi.js.map +1 -0
- package/dist/core/web/public/next/assets/NeedsYouScreen-CvDiEphJ.js +2 -0
- package/dist/core/web/public/next/assets/NeedsYouScreen-CvDiEphJ.js.map +1 -0
- package/dist/core/web/public/next/assets/NewAgentScreen-BpTRKp9z.js +2 -0
- package/dist/core/web/public/next/assets/NewAgentScreen-BpTRKp9z.js.map +1 -0
- package/dist/core/web/public/next/assets/NewChatDialog-O1LwwBc4.js +4 -0
- package/dist/core/web/public/next/assets/NewChatDialog-O1LwwBc4.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-uMNBVHvK.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingFlow-uMNBVHvK.js.map +1 -0
- package/dist/core/web/public/next/assets/OnboardingGate-sdzxSPZF.js +3 -0
- package/dist/core/web/public/next/assets/OnboardingGate-sdzxSPZF.js.map +1 -0
- package/dist/core/web/public/next/assets/PlaybooksSection-CnWfwZv8.js +9 -0
- package/dist/core/web/public/next/assets/PlaybooksSection-CnWfwZv8.js.map +1 -0
- package/dist/core/web/public/next/assets/PreviewPane-D1WaefIG.js +2 -0
- package/dist/core/web/public/next/assets/PreviewPane-D1WaefIG.js.map +1 -0
- package/dist/core/web/public/next/assets/ProviderLogo-g2YWCmNY.js +2 -0
- package/dist/core/web/public/next/assets/ProviderLogo-g2YWCmNY.js.map +1 -0
- package/dist/core/web/public/next/assets/RailStatus-OrvAuyzs.js +2 -0
- package/dist/core/web/public/next/assets/RailStatus-OrvAuyzs.js.map +1 -0
- package/dist/core/web/public/next/assets/ReasoningPane-BARDPl4-.js +2 -0
- package/dist/core/web/public/next/assets/ReasoningPane-BARDPl4-.js.map +1 -0
- package/dist/core/web/public/next/assets/ReasoningSheet-rPTXyt-b.js +2 -0
- package/dist/core/web/public/next/assets/ReasoningSheet-rPTXyt-b.js.map +1 -0
- package/dist/core/web/public/next/assets/RefreshIndicator-D96C9qiH.js +2 -0
- package/dist/core/web/public/next/assets/RefreshIndicator-D96C9qiH.js.map +1 -0
- package/dist/core/web/public/next/assets/RemoteMobileApp-DfDjiBTR.js +2 -0
- package/dist/core/web/public/next/assets/RemoteMobileApp-DfDjiBTR.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CcfULh_p.js +7 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CcfULh_p.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-DuEa7WOo.css +1 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-e9ifgnWf.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesChrome-e9ifgnWf.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DOv_mxpe.js +3 -0
- package/dist/core/web/public/next/assets/ResourcesDrawer-DOv_mxpe.js.map +1 -0
- package/dist/core/web/public/next/assets/ReviewMenu-Ba3saQlX.js +2 -0
- package/dist/core/web/public/next/assets/ReviewMenu-Ba3saQlX.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BaJ1ZePy.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BaJ1ZePy.js.map +1 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-DRSX84Jy.js +2 -0
- package/dist/core/web/public/next/assets/RunInCloudAction-DRSX84Jy.js.map +1 -0
- package/dist/core/web/public/next/assets/RunInDevinAction-BMji-YN2.js +2 -0
- package/dist/core/web/public/next/assets/RunInDevinAction-BMji-YN2.js.map +1 -0
- package/dist/core/web/public/next/assets/SchedulingEvidence-xxjV6HF_.js +2 -0
- package/dist/core/web/public/next/assets/SchedulingEvidence-xxjV6HF_.js.map +1 -0
- package/dist/core/web/public/next/assets/ScreenHost-Dv6z76Ta.js +3 -0
- package/dist/core/web/public/next/assets/ScreenHost-Dv6z76Ta.js.map +1 -0
- package/dist/core/web/public/next/assets/SeatSelector-YRNdNpP8.js +3 -0
- package/dist/core/web/public/next/assets/SeatSelector-YRNdNpP8.js.map +1 -0
- package/dist/core/web/public/next/assets/Segmented-BA8RmKYq.js +2 -0
- package/dist/core/web/public/next/assets/Segmented-BA8RmKYq.js.map +1 -0
- package/dist/core/web/public/next/assets/Select-B8GqZOX9.js +2 -0
- package/dist/core/web/public/next/assets/Select-B8GqZOX9.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionGate-CnASHl7g.js +2 -0
- package/dist/core/web/public/next/assets/SessionGate-CnASHl7g.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-DIKfih6i.js +2 -0
- package/dist/core/web/public/next/assets/SessionInsightChip-DIKfih6i.js.map +1 -0
- package/dist/core/web/public/next/assets/SessionSearch-K6lvMlji.js +2 -0
- package/dist/core/web/public/next/assets/SessionSearch-K6lvMlji.js.map +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-C-c3f_6J.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-C-c3f_6J.js.map +1 -0
- package/dist/core/web/public/next/assets/SetupChecklist-DAbAdrX4.js +2 -0
- package/dist/core/web/public/next/assets/SetupChecklist-DAbAdrX4.js.map +1 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-C41uRSw4.js +3 -0
- package/dist/core/web/public/next/assets/ShadowDecisions-C41uRSw4.js.map +1 -0
- package/dist/core/web/public/next/assets/Sheet-Bk64-Hlt.js +2 -0
- package/dist/core/web/public/next/assets/Sheet-Bk64-Hlt.js.map +1 -0
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CcP96zqy.js +2 -0
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CcP96zqy.js.map +1 -0
- package/dist/core/web/public/next/assets/Sidebar-sSNKd57n.js +3 -0
- package/dist/core/web/public/next/assets/Sidebar-sSNKd57n.js.map +1 -0
- package/dist/core/web/public/next/assets/SkipToContent-BynsXs9i.js +2 -0
- package/dist/core/web/public/next/assets/SkipToContent-BynsXs9i.js.map +1 -0
- package/dist/core/web/public/next/assets/Slider-DS5HrVzl.js +2 -0
- package/dist/core/web/public/next/assets/Slider-DS5HrVzl.js.map +1 -0
- package/dist/core/web/public/next/assets/SourcesPane-QffcyDfA.js +2 -0
- package/dist/core/web/public/next/assets/SourcesPane-QffcyDfA.js.map +1 -0
- package/dist/core/web/public/next/assets/SourcesPanel-DlttePk7.js +2 -0
- package/dist/core/web/public/next/assets/SourcesPanel-DlttePk7.js.map +1 -0
- package/dist/core/web/public/next/assets/StatTile-mYm1GPj7.js +2 -0
- package/dist/core/web/public/next/assets/StatTile-mYm1GPj7.js.map +1 -0
- package/dist/core/web/public/next/assets/StatusBadge-Yz7S3kZ2.js +2 -0
- package/dist/core/web/public/next/assets/StatusBadge-Yz7S3kZ2.js.map +1 -0
- package/dist/core/web/public/next/assets/StepBand-Bdkv7iGd.js +2 -0
- package/dist/core/web/public/next/assets/StepBand-Bdkv7iGd.js.map +1 -0
- package/dist/core/web/public/next/assets/Surface-DVOAKl2g.js +2 -0
- package/dist/core/web/public/next/assets/Surface-DVOAKl2g.js.map +1 -0
- package/dist/core/web/public/next/assets/Swimlane-CeMBD_FC.js +2 -0
- package/dist/core/web/public/next/assets/Swimlane-CeMBD_FC.js.map +1 -0
- package/dist/core/web/public/next/assets/Switch-Cqc_bSoh.js +2 -0
- package/dist/core/web/public/next/assets/Switch-Cqc_bSoh.js.map +1 -0
- package/dist/core/web/public/next/assets/Tag-BvOxSxYi.js +2 -0
- package/dist/core/web/public/next/assets/Tag-BvOxSxYi.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-D3f02aI4.js +3 -0
- package/dist/core/web/public/next/assets/TerminalPane-D3f02aI4.js.map +1 -0
- package/dist/core/web/public/next/assets/TerminalPane-XZ5n3Pns.js +26 -0
- package/dist/core/web/public/next/assets/TerminalPane-XZ5n3Pns.js.map +1 -0
- package/dist/core/web/public/next/assets/ThinkingBlock-DZNlOGaV.js +2 -0
- package/dist/core/web/public/next/assets/ThinkingBlock-DZNlOGaV.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-CzBI6Upl.js +2 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-CzBI6Upl.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseView-Dsi3Kk8o.js +9 -0
- package/dist/core/web/public/next/assets/UniverseView-Dsi3Kk8o.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-rVvLat9z.js +3 -0
- package/dist/core/web/public/next/assets/UsageSection-rVvLat9z.js.map +1 -0
- package/dist/core/web/public/next/assets/UsePlaybookAction-B4XAzSeI.js +2 -0
- package/dist/core/web/public/next/assets/UsePlaybookAction-B4XAzSeI.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-BmckthwC.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DjPpZLo1.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DjPpZLo1.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseMobileApp-ePNuVERe.js +3 -0
- package/dist/core/web/public/next/assets/VerseMobileApp-ePNuVERe.js.map +1 -0
- package/dist/core/web/public/next/assets/VerseShared-Bf-XTHCh.js +2 -0
- package/dist/core/web/public/next/assets/VerseShared-Bf-XTHCh.js.map +1 -0
- package/dist/core/web/public/next/assets/VoiceHud-BG5FV2h0.js +2 -0
- package/dist/core/web/public/next/assets/VoiceHud-BG5FV2h0.js.map +1 -0
- package/dist/core/web/public/next/assets/VoiceInput-k3vB_FxV.js +2 -0
- package/dist/core/web/public/next/assets/VoiceInput-k3vB_FxV.js.map +1 -0
- package/dist/core/web/public/next/assets/WikiSection-DeBKNqd6.js +2 -0
- package/dist/core/web/public/next/assets/WikiSection-DeBKNqd6.js.map +1 -0
- package/dist/core/web/public/next/assets/Workspace-CvwS2-RN.js +6 -0
- package/dist/core/web/public/next/assets/Workspace-CvwS2-RN.js.map +1 -0
- package/dist/core/web/public/next/assets/actions-Dg6UJTLn.js +2 -0
- package/dist/core/web/public/next/assets/actions-Dg6UJTLn.js.map +1 -0
- package/dist/core/web/public/next/assets/agent-tools-client-DmJq7zlr.js +2 -0
- package/dist/core/web/public/next/assets/agent-tools-client-DmJq7zlr.js.map +1 -0
- package/dist/core/web/public/next/assets/agents-focus-B1LKhUVg.js +2 -0
- package/dist/core/web/public/next/assets/agents-focus-B1LKhUVg.js.map +1 -0
- package/dist/core/web/public/next/assets/app-version-Cb1z8iCO.js +2 -0
- package/dist/core/web/public/next/assets/app-version-Cb1z8iCO.js.map +1 -0
- package/dist/core/web/public/next/assets/apps-model-_chbcQeN.js +2 -0
- package/dist/core/web/public/next/assets/apps-model-_chbcQeN.js.map +1 -0
- package/dist/core/web/public/next/assets/ask-seat-O60AydbV.js +2 -0
- package/dist/core/web/public/next/assets/ask-seat-O60AydbV.js.map +1 -0
- package/dist/core/web/public/next/assets/authority-model-BeDDHF22.js +2 -0
- package/dist/core/web/public/next/assets/authority-model-BeDDHF22.js.map +1 -0
- package/dist/core/web/public/next/assets/automations-focus-BXaRZ8nX.js +2 -0
- package/dist/core/web/public/next/assets/automations-focus-BXaRZ8nX.js.map +1 -0
- package/dist/core/web/public/next/assets/budget-queries-Nvx0H2XE.js +2 -0
- package/dist/core/web/public/next/assets/budget-queries-Nvx0H2XE.js.map +1 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-CBMJ2U-w.js +2 -0
- package/dist/core/web/public/next/assets/capacity-strip-model-CBMJ2U-w.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-DT9PYS49.js +2 -0
- package/dist/core/web/public/next/assets/charts-DT9PYS49.js.map +1 -0
- package/dist/core/web/public/next/assets/chat-pane-data-CfbpeAYX.js +2 -0
- package/dist/core/web/public/next/assets/chat-pane-data-CfbpeAYX.js.map +1 -0
- package/dist/core/web/public/next/assets/checkpoint-queries-BKD2evmX.js +2 -0
- package/dist/core/web/public/next/assets/checkpoint-queries-BKD2evmX.js.map +1 -0
- package/dist/core/web/public/next/assets/cloud-queries-CsU54eNn.js +2 -0
- package/dist/core/web/public/next/assets/cloud-queries-CsU54eNn.js.map +1 -0
- package/dist/core/web/public/next/assets/command-catalog-B0ApAGD0.js +2 -0
- package/dist/core/web/public/next/assets/command-catalog-B0ApAGD0.js.map +1 -0
- package/dist/core/web/public/next/assets/composer-queries-D1H4E0Ye.js +2 -0
- package/dist/core/web/public/next/assets/composer-queries-D1H4E0Ye.js.map +1 -0
- package/dist/core/web/public/next/assets/connectivity-xQ0Nh0j3.js +2 -0
- package/dist/core/web/public/next/assets/connectivity-xQ0Nh0j3.js.map +1 -0
- package/dist/core/web/public/next/assets/context-queries-bnI3P0Wt.js +2 -0
- package/dist/core/web/public/next/assets/context-queries-bnI3P0Wt.js.map +1 -0
- package/dist/core/web/public/next/assets/control-queries-BG53otwz.js +2 -0
- package/dist/core/web/public/next/assets/control-queries-BG53otwz.js.map +1 -0
- package/dist/core/web/public/next/assets/copy-setup-COMDnur3.js +2 -0
- package/dist/core/web/public/next/assets/copy-setup-COMDnur3.js.map +1 -0
- package/dist/core/web/public/next/assets/deep-link-CqOP-JEm.js +2 -0
- package/dist/core/web/public/next/assets/deep-link-CqOP-JEm.js.map +1 -0
- package/dist/core/web/public/next/assets/device-permissions-DpsJJcUW.js +2 -0
- package/dist/core/web/public/next/assets/device-permissions-DpsJJcUW.js.map +1 -0
- package/dist/core/web/public/next/assets/devin-queries-BSEOfLuZ.js +2 -0
- package/dist/core/web/public/next/assets/devin-queries-BSEOfLuZ.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-icons-DK7QcBXJ.js +2 -0
- package/dist/core/web/public/next/assets/dock-icons-DK7QcBXJ.js.map +1 -0
- package/dist/core/web/public/next/assets/dock-panes-DvQ6t4Nl.js +2 -0
- package/dist/core/web/public/next/assets/dock-panes-DvQ6t4Nl.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-control-queries-BL-Vlf85.js +2 -0
- package/dist/core/web/public/next/assets/fleet-control-queries-BL-Vlf85.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-queries-eacERnLm.js +2 -0
- package/dist/core/web/public/next/assets/fleet-queries-eacERnLm.js.map +1 -0
- package/dist/core/web/public/next/assets/fleet-state-DfKcuo4A.js +3 -0
- package/dist/core/web/public/next/assets/fleet-state-DfKcuo4A.js.map +1 -0
- package/dist/core/web/public/next/assets/focus-trap-BZeH0rVB.js +2 -0
- package/dist/core/web/public/next/assets/focus-trap-BZeH0rVB.js.map +1 -0
- package/dist/core/web/public/next/assets/git-model-C1I4z_iQ.js +5 -0
- package/dist/core/web/public/next/assets/git-model-C1I4z_iQ.js.map +1 -0
- package/dist/core/web/public/next/assets/global-w7KDTTi0.js +3 -0
- package/dist/core/web/public/next/assets/global-w7KDTTi0.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-action-J9umcJgI.js +3 -0
- package/dist/core/web/public/next/assets/guarded-action-J9umcJgI.js.map +1 -0
- package/dist/core/web/public/next/assets/guarded-runners-Da5yA9Im.js +2 -0
- package/dist/core/web/public/next/assets/guarded-runners-Da5yA9Im.js.map +1 -0
- package/dist/core/web/public/next/assets/health-queries-D3HgrdU_.js +2 -0
- package/dist/core/web/public/next/assets/health-queries-D3HgrdU_.js.map +1 -0
- package/dist/core/web/public/next/assets/icons-C3G-y5j2.js +2 -0
- package/dist/core/web/public/next/assets/icons-C3G-y5j2.js.map +1 -0
- package/dist/core/web/public/next/assets/index-BC5Uslm5.js +11 -0
- package/dist/core/web/public/next/assets/index-BC5Uslm5.js.map +1 -0
- package/dist/core/web/public/next/assets/jev-queries-D6JNU-s6.js +2 -0
- package/dist/core/web/public/next/assets/jev-queries-D6JNU-s6.js.map +1 -0
- package/dist/core/web/public/next/assets/ladder-queries-BnYWjJoi.js +2 -0
- package/dist/core/web/public/next/assets/ladder-queries-BnYWjJoi.js.map +1 -0
- package/dist/core/web/public/next/assets/leader-focus-C6LVWgYI.js +2 -0
- package/dist/core/web/public/next/assets/leader-focus-C6LVWgYI.js.map +1 -0
- package/dist/core/web/public/next/assets/live-model-BPyZCTr1.js +2 -0
- package/dist/core/web/public/next/assets/live-model-BPyZCTr1.js.map +1 -0
- package/dist/core/web/public/next/assets/mobile-actions-avKNGddD.js +2 -0
- package/dist/core/web/public/next/assets/mobile-actions-avKNGddD.js.map +1 -0
- package/dist/core/web/public/next/assets/mobile-toast-BqSzGmw1.js +2 -0
- package/dist/core/web/public/next/assets/mobile-toast-BqSzGmw1.js.map +1 -0
- package/dist/core/web/public/next/assets/multimodel-flows-DOHsEKUG.js +7 -0
- package/dist/core/web/public/next/assets/multimodel-flows-DOHsEKUG.js.map +1 -0
- package/dist/core/web/public/next/assets/multimodel-queries-xmBBUT6n.js +2 -0
- package/dist/core/web/public/next/assets/multimodel-queries-xmBBUT6n.js.map +1 -0
- package/dist/core/web/public/next/assets/mutations-CdLi0erM.js +2 -0
- package/dist/core/web/public/next/assets/mutations-CdLi0erM.js.map +1 -0
- package/dist/core/web/public/next/assets/nav-CUXtg-Iw.js +2 -0
- package/dist/core/web/public/next/assets/nav-CUXtg-Iw.js.map +1 -0
- package/dist/core/web/public/next/assets/needs-you-actions-B2tjWO-0.js +2 -0
- package/dist/core/web/public/next/assets/needs-you-actions-B2tjWO-0.js.map +1 -0
- package/dist/core/web/public/next/assets/needs-you-model-DL9EEd2L.js +2 -0
- package/dist/core/web/public/next/assets/needs-you-model-DL9EEd2L.js.map +1 -0
- package/dist/core/web/public/next/assets/open-terminal-BfbxGoYQ.js +2 -0
- package/dist/core/web/public/next/assets/open-terminal-BfbxGoYQ.js.map +1 -0
- package/dist/core/web/public/next/assets/open-terminal-request-BT1UE0fz.js +2 -0
- package/dist/core/web/public/next/assets/open-terminal-request-BT1UE0fz.js.map +1 -0
- package/dist/core/web/public/next/assets/overnight-queries-cjjogTzn.js +2 -0
- package/dist/core/web/public/next/assets/overnight-queries-cjjogTzn.js.map +1 -0
- package/dist/core/web/public/next/assets/palette-handoff-XL2WWc9I.js +2 -0
- package/dist/core/web/public/next/assets/palette-handoff-XL2WWc9I.js.map +1 -0
- package/dist/core/web/public/next/assets/panes-5GU8cuI9.js +3 -0
- package/dist/core/web/public/next/assets/panes-5GU8cuI9.js.map +1 -0
- package/dist/core/web/public/next/assets/path-display-ZSzKoo8T.js +2 -0
- package/dist/core/web/public/next/assets/path-display-ZSzKoo8T.js.map +1 -0
- package/dist/core/web/public/next/assets/playbook-composer-D04tqOmU.js +2 -0
- package/dist/core/web/public/next/assets/playbook-composer-D04tqOmU.js.map +1 -0
- package/dist/core/web/public/next/assets/playbook-focus-DD1VIfkd.js +2 -0
- package/dist/core/web/public/next/assets/playbook-focus-DD1VIfkd.js.map +1 -0
- package/dist/core/web/public/next/assets/playbooks-queries-X7NGzpIn.js +2 -0
- package/dist/core/web/public/next/assets/playbooks-queries-X7NGzpIn.js.map +1 -0
- package/dist/core/web/public/next/assets/preloaded-6hKNGuRp.js +2 -0
- package/dist/core/web/public/next/assets/preloaded-6hKNGuRp.js.map +1 -0
- package/dist/core/web/public/next/assets/primitives-6nAFZkcg.js +1 -0
- package/dist/core/web/public/next/assets/pwa-BzXJXtDt.js +2 -0
- package/dist/core/web/public/next/assets/pwa-BzXJXtDt.js.map +1 -0
- package/dist/core/web/public/next/assets/queries-PgZlvFqO.js +2 -0
- package/dist/core/web/public/next/assets/queries-PgZlvFqO.js.map +1 -0
- package/dist/core/web/public/next/assets/reasoning-pref-BS0PSZ8d.js +2 -0
- package/dist/core/web/public/next/assets/reasoning-pref-BS0PSZ8d.js.map +1 -0
- package/dist/core/web/public/next/assets/remote-session-Bu-dtRcS.js +3 -0
- package/dist/core/web/public/next/assets/remote-session-Bu-dtRcS.js.map +1 -0
- package/dist/core/web/public/next/assets/resolved-store-UYN2k9My.js +2 -0
- package/dist/core/web/public/next/assets/resolved-store-UYN2k9My.js.map +1 -0
- package/dist/core/web/public/next/assets/resources-queries-XfQ8w9In.js +2 -0
- package/dist/core/web/public/next/assets/resources-queries-XfQ8w9In.js.map +1 -0
- package/dist/core/web/public/next/assets/reveal-anchor-3ZUTtB8Q.js +2 -0
- package/dist/core/web/public/next/assets/reveal-anchor-3ZUTtB8Q.js.map +1 -0
- package/dist/core/web/public/next/assets/sheet-DP8ByDWU.js +2 -0
- package/dist/core/web/public/next/assets/sheet-DP8ByDWU.js.map +1 -0
- package/dist/core/web/public/next/assets/slots-DWlj_c7i.js +3 -0
- package/dist/core/web/public/next/assets/slots-DWlj_c7i.js.map +1 -0
- package/dist/core/web/public/next/assets/sources-queries-Cjk1rpDU.js +4 -0
- package/dist/core/web/public/next/assets/sources-queries-Cjk1rpDU.js.map +1 -0
- package/dist/core/web/public/next/assets/sse-Z3U8XhDI.js +2 -0
- package/dist/core/web/public/next/assets/sse-Z3U8XhDI.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-data-hufdOfpz.js +2 -0
- package/dist/core/web/public/next/assets/surface-data-hufdOfpz.js.map +1 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CFtP8imB.js +2 -0
- package/dist/core/web/public/next/assets/surface-prefetch-CFtP8imB.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-client-CCSvMeEv.js +2 -0
- package/dist/core/web/public/next/assets/terminal-client-CCSvMeEv.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-icons-Dx6neM-J.js +2 -0
- package/dist/core/web/public/next/assets/terminal-icons-Dx6neM-J.js.map +1 -0
- package/dist/core/web/public/next/assets/terminal-view-BSieiQvi.js +6 -0
- package/dist/core/web/public/next/assets/terminal-view-BSieiQvi.js.map +1 -0
- package/dist/core/web/public/next/assets/thread-data-Cd2DZffn.js +2 -0
- package/dist/core/web/public/next/assets/thread-data-Cd2DZffn.js.map +1 -0
- package/dist/core/web/public/next/assets/ui-parts-wvov2ktB.js +2 -0
- package/dist/core/web/public/next/assets/ui-parts-wvov2ktB.js.map +1 -0
- package/dist/core/web/public/next/assets/usage-queries-nZjJ1aky.js +2 -0
- package/dist/core/web/public/next/assets/usage-queries-nZjJ1aky.js.map +1 -0
- package/dist/core/web/public/next/assets/use-chat-activity-_tBmEPPN.js +2 -0
- package/dist/core/web/public/next/assets/use-chat-activity-_tBmEPPN.js.map +1 -0
- package/dist/core/web/public/next/assets/use-guarded-action-DKKjhPKG.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-DKKjhPKG.js.map +1 -0
- package/dist/core/web/public/next/assets/use-ticker-w1c3SOqK.js +2 -0
- package/dist/core/web/public/next/assets/use-ticker-w1c3SOqK.js.map +1 -0
- package/dist/core/web/public/next/assets/use-token-gate-h5QAERLT.js +2 -0
- package/dist/core/web/public/next/assets/use-token-gate-h5QAERLT.js.map +1 -0
- package/dist/core/web/public/next/assets/useAutoSeat-Dpbn0XUv.js +2 -0
- package/dist/core/web/public/next/assets/useAutoSeat-Dpbn0XUv.js.map +1 -0
- package/dist/core/web/public/next/assets/useOnboarding-VoV1LcuJ.js +2 -0
- package/dist/core/web/public/next/assets/useOnboarding-VoV1LcuJ.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatHealth-DuSaKdIs.js +2 -0
- package/dist/core/web/public/next/assets/useSeatHealth-DuSaKdIs.js.map +1 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-DFaR1jSz.js +2 -0
- package/dist/core/web/public/next/assets/useSeatsRefresh-DFaR1jSz.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseSession-BOsgJzT5.js +2 -0
- package/dist/core/web/public/next/assets/useVerseSession-BOsgJzT5.js.map +1 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BN_fMz6x.js +2 -0
- package/dist/core/web/public/next/assets/useVerseTranscript-BN_fMz6x.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-bootstrap-query-B3vFD9XK.js +2 -0
- package/dist/core/web/public/next/assets/verse-bootstrap-query-B3vFD9XK.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-icons-vSkflmRB.js +2 -0
- package/dist/core/web/public/next/assets/verse-icons-vSkflmRB.js.map +1 -0
- package/dist/core/web/public/next/assets/warmup-D9MjYs5S.js +3 -0
- package/dist/core/web/public/next/assets/warmup-D9MjYs5S.js.map +1 -0
- package/dist/core/web/public/next/assets/wiki-focus-De8-E48Z.js +2 -0
- package/dist/core/web/public/next/assets/wiki-focus-De8-E48Z.js.map +1 -0
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/ActionMenu-CebJFKYy.js +0 -2
- package/dist/core/web/public/next/assets/ActionMenu-CebJFKYy.js.map +0 -1
- package/dist/core/web/public/next/assets/Advanced-Dr9aVbXV.js +0 -2
- package/dist/core/web/public/next/assets/Advanced-Dr9aVbXV.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentDetailScreen-DCVf81Vo.js +0 -2
- package/dist/core/web/public/next/assets/AgentDetailScreen-DCVf81Vo.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentToolsSheet-C3SbvEiV.js +0 -2
- package/dist/core/web/public/next/assets/AgentToolsSheet-C3SbvEiV.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentToolsStrip-CZNxj_Iv.js +0 -2
- package/dist/core/web/public/next/assets/AgentToolsStrip-CZNxj_Iv.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentsScreen-zLj4gzPR.js +0 -2
- package/dist/core/web/public/next/assets/AgentsScreen-zLj4gzPR.js.map +0 -1
- package/dist/core/web/public/next/assets/AgentsSection-CIo_nRmi.js +0 -3
- package/dist/core/web/public/next/assets/AgentsSection-CIo_nRmi.js.map +0 -1
- package/dist/core/web/public/next/assets/App-CPKNuUdC.js +0 -8
- package/dist/core/web/public/next/assets/App-CPKNuUdC.js.map +0 -1
- package/dist/core/web/public/next/assets/AppsSection-D2F2CM-E.js +0 -2
- package/dist/core/web/public/next/assets/AppsSection-D2F2CM-E.js.map +0 -1
- package/dist/core/web/public/next/assets/AreaTrend-DiZu8bjc.js +0 -2
- package/dist/core/web/public/next/assets/AreaTrend-DiZu8bjc.js.map +0 -1
- package/dist/core/web/public/next/assets/AutomationsSection-B4rBNUyo.js +0 -2
- package/dist/core/web/public/next/assets/AutomationsSection-B4rBNUyo.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomyOffState-DEznxI-Q.js +0 -3
- package/dist/core/web/public/next/assets/AutonomyOffState-DEznxI-Q.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-Dq5n3gs7.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-Dq5n3gs7.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomyStatus-Uydy6-pZ.js +0 -2
- package/dist/core/web/public/next/assets/AutonomyStatus-Uydy6-pZ.js.map +0 -1
- package/dist/core/web/public/next/assets/BranchBar-BzUmUM_j.js +0 -2
- package/dist/core/web/public/next/assets/BranchBar-BzUmUM_j.js.map +0 -1
- package/dist/core/web/public/next/assets/BrowserPanel-C_VI6Awi.js +0 -7
- package/dist/core/web/public/next/assets/BrowserPanel-C_VI6Awi.js.map +0 -1
- package/dist/core/web/public/next/assets/BudgetControl-B23rNAuC.js +0 -2
- package/dist/core/web/public/next/assets/BudgetControl-B23rNAuC.js.map +0 -1
- package/dist/core/web/public/next/assets/Button-DJY_Pu5B.js +0 -2
- package/dist/core/web/public/next/assets/Button-DJY_Pu5B.js.map +0 -1
- package/dist/core/web/public/next/assets/CapacityStrip-B5Yj2PhZ.js +0 -2
- package/dist/core/web/public/next/assets/CapacityStrip-B5Yj2PhZ.js.map +0 -1
- package/dist/core/web/public/next/assets/ChangesPaneHost-LsUonc7P.js +0 -16
- package/dist/core/web/public/next/assets/ChangesPaneHost-LsUonc7P.js.map +0 -1
- package/dist/core/web/public/next/assets/ChartFrame-CakjKkPx.js +0 -2
- package/dist/core/web/public/next/assets/ChartFrame-CakjKkPx.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatPanes-DgKskpXb.js +0 -2
- package/dist/core/web/public/next/assets/ChatPanes-DgKskpXb.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DXpzV1NW.js +0 -3
- package/dist/core/web/public/next/assets/ChatSection-DXpzV1NW.js.map +0 -1
- package/dist/core/web/public/next/assets/ChecksPanel-BeCJVOJC.js +0 -5
- package/dist/core/web/public/next/assets/ChecksPanel-BeCJVOJC.js.map +0 -1
- package/dist/core/web/public/next/assets/CloudBudgetForm-4SWIGJLs.js +0 -2
- package/dist/core/web/public/next/assets/CloudBudgetForm-4SWIGJLs.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandPalette-B4QaFGY5.js +0 -3
- package/dist/core/web/public/next/assets/CommandPalette-B4QaFGY5.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandSection-8TFjYitt.js +0 -3
- package/dist/core/web/public/next/assets/CommandSection-8TFjYitt.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandWorkflowForm-B2ooVjof.js +0 -9
- package/dist/core/web/public/next/assets/CommandWorkflowForm-B2ooVjof.js.map +0 -1
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-C09vJiUG.js +0 -3
- package/dist/core/web/public/next/assets/CommandWorkflowPicker-C09vJiUG.js.map +0 -1
- package/dist/core/web/public/next/assets/CompareDialog-CaopnGI0.js +0 -4
- package/dist/core/web/public/next/assets/CompareDialog-CaopnGI0.js.map +0 -1
- package/dist/core/web/public/next/assets/ComputerControl-BflC6wd1.js +0 -2
- package/dist/core/web/public/next/assets/ComputerControl-BflC6wd1.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-CTeMFavv.js +0 -2
- package/dist/core/web/public/next/assets/ConfirmDialog-CTeMFavv.js.map +0 -1
- package/dist/core/web/public/next/assets/DeleteChatDialog-B2bUTuZ9.js +0 -2
- package/dist/core/web/public/next/assets/DeleteChatDialog-B2bUTuZ9.js.map +0 -1
- package/dist/core/web/public/next/assets/DevinStopDialog-DPP34cna.js +0 -2
- package/dist/core/web/public/next/assets/DevinStopDialog-DPP34cna.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-r4j4R4b6.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-r4j4R4b6.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffPane-CKnpzqaU.js +0 -2
- package/dist/core/web/public/next/assets/DiffPane-CKnpzqaU.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-BzQ7245p.js +0 -2
- package/dist/core/web/public/next/assets/DiffViewer-BzQ7245p.js.map +0 -1
- package/dist/core/web/public/next/assets/DockHost-BCZtC_lm.js +0 -2
- package/dist/core/web/public/next/assets/DockHost-BCZtC_lm.js.map +0 -1
- package/dist/core/web/public/next/assets/EmptyState-Cwpga8L9.js +0 -2
- package/dist/core/web/public/next/assets/EmptyState-Cwpga8L9.js.map +0 -1
- package/dist/core/web/public/next/assets/Epistemic-BBwXv-C1.js +0 -2
- package/dist/core/web/public/next/assets/Epistemic-BBwXv-C1.js.map +0 -1
- package/dist/core/web/public/next/assets/EvidenceTimeline-hAENJQCa.js +0 -2
- package/dist/core/web/public/next/assets/EvidenceTimeline-hAENJQCa.js.map +0 -1
- package/dist/core/web/public/next/assets/FilesPane-CrPN5zlx.js +0 -2
- package/dist/core/web/public/next/assets/FilesPane-CrPN5zlx.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetScreen-Cz9HQ-st.js +0 -2
- package/dist/core/web/public/next/assets/FleetScreen-Cz9HQ-st.js.map +0 -1
- package/dist/core/web/public/next/assets/FleetSection-CmZKQ1rr.js +0 -5
- package/dist/core/web/public/next/assets/FleetSection-CmZKQ1rr.js.map +0 -1
- package/dist/core/web/public/next/assets/Funnel-Cfg55EZp.js +0 -2
- package/dist/core/web/public/next/assets/Funnel-Cfg55EZp.js.map +0 -1
- package/dist/core/web/public/next/assets/GearTray-D-Mhc8TJ.js +0 -2
- package/dist/core/web/public/next/assets/GearTray-D-Mhc8TJ.js.map +0 -1
- package/dist/core/web/public/next/assets/GitDialogs-e-7RQEGv.js +0 -2
- package/dist/core/web/public/next/assets/GitDialogs-e-7RQEGv.js.map +0 -1
- package/dist/core/web/public/next/assets/GrowthSection-DsIrdTDd.js +0 -3
- package/dist/core/web/public/next/assets/GrowthSection-DsIrdTDd.js.map +0 -1
- package/dist/core/web/public/next/assets/HandoffDialog-1MB2fmT1.js +0 -2
- package/dist/core/web/public/next/assets/HandoffDialog-1MB2fmT1.js.map +0 -1
- package/dist/core/web/public/next/assets/HomeBody-n_t3A58_.js +0 -3
- package/dist/core/web/public/next/assets/HomeBody-n_t3A58_.js.map +0 -1
- package/dist/core/web/public/next/assets/HomeSeats-DA66aOWC.js +0 -2
- package/dist/core/web/public/next/assets/HomeSeats-DA66aOWC.js.map +0 -1
- package/dist/core/web/public/next/assets/Input-Bt6fp051.js +0 -2
- package/dist/core/web/public/next/assets/Input-Bt6fp051.js.map +0 -1
- package/dist/core/web/public/next/assets/LaunchDialog-BCd7XqCv.js +0 -9
- package/dist/core/web/public/next/assets/LaunchDialog-BCd7XqCv.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderCard-DFAFcyfZ.js +0 -2
- package/dist/core/web/public/next/assets/LeaderCard-DFAFcyfZ.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderConversation-LSenfZzT.js +0 -3
- package/dist/core/web/public/next/assets/LeaderConversation-LSenfZzT.js.map +0 -1
- package/dist/core/web/public/next/assets/LeaderScreen-B2UxRWUm.js +0 -2
- package/dist/core/web/public/next/assets/LeaderScreen-B2UxRWUm.js.map +0 -1
- package/dist/core/web/public/next/assets/LessonsPanel-D86ZT0we.js +0 -2
- package/dist/core/web/public/next/assets/LessonsPanel-D86ZT0we.js.map +0 -1
- package/dist/core/web/public/next/assets/LiveTimer-AtG5hPwV.js +0 -2
- package/dist/core/web/public/next/assets/LiveTimer-AtG5hPwV.js.map +0 -1
- package/dist/core/web/public/next/assets/LocalSeatBadge-XfGRZCA3.js +0 -2
- package/dist/core/web/public/next/assets/LocalSeatBadge-XfGRZCA3.js.map +0 -1
- package/dist/core/web/public/next/assets/MatrixHeatmap-PSnyMJ2h.js +0 -2
- package/dist/core/web/public/next/assets/MatrixHeatmap-PSnyMJ2h.js.map +0 -1
- package/dist/core/web/public/next/assets/McpSection-BG2FSkgH.js +0 -2
- package/dist/core/web/public/next/assets/McpSection-BG2FSkgH.js.map +0 -1
- package/dist/core/web/public/next/assets/MessageMarkdown-CQEqoMvf.js +0 -3
- package/dist/core/web/public/next/assets/MessageMarkdown-CQEqoMvf.js.map +0 -1
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DU-VLDhb.js +0 -72
- package/dist/core/web/public/next/assets/MessageMarkdownRenderer-DU-VLDhb.js.map +0 -1
- package/dist/core/web/public/next/assets/Meter-BfaE-BjY.js +0 -2
- package/dist/core/web/public/next/assets/Meter-BfaE-BjY.js.map +0 -1
- package/dist/core/web/public/next/assets/MicButton-BbGB7y_9.js +0 -2
- package/dist/core/web/public/next/assets/MicButton-BbGB7y_9.js.map +0 -1
- package/dist/core/web/public/next/assets/MindSection-CX0VaHo1.js +0 -3
- package/dist/core/web/public/next/assets/MindSection-CX0VaHo1.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileComposer-CFeLWUCz.js +0 -2
- package/dist/core/web/public/next/assets/MobileComposer-CFeLWUCz.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileGuardSheet-cGW9RCTr.js +0 -2
- package/dist/core/web/public/next/assets/MobileGuardSheet-cGW9RCTr.js.map +0 -1
- package/dist/core/web/public/next/assets/MobileRuntime-BWTZ_QLr.js +0 -3
- package/dist/core/web/public/next/assets/MobileRuntime-BWTZ_QLr.js.map +0 -1
- package/dist/core/web/public/next/assets/MoreScreen-BcHZhVrR.js +0 -2
- package/dist/core/web/public/next/assets/MoreScreen-BcHZhVrR.js.map +0 -1
- package/dist/core/web/public/next/assets/MultiModelBar-COxIRv7m.js +0 -7
- package/dist/core/web/public/next/assets/MultiModelBar-COxIRv7m.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dnf_rcnc.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-Dnf_rcnc.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouDrawer-COrUlnd0.js +0 -3
- package/dist/core/web/public/next/assets/NeedsYouDrawer-COrUlnd0.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouList-AXzOe4EL.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouList-AXzOe4EL.js.map +0 -1
- package/dist/core/web/public/next/assets/NeedsYouScreen-HSXybHgd.js +0 -2
- package/dist/core/web/public/next/assets/NeedsYouScreen-HSXybHgd.js.map +0 -1
- package/dist/core/web/public/next/assets/NewAgentScreen-BI849ZsG.js +0 -2
- package/dist/core/web/public/next/assets/NewAgentScreen-BI849ZsG.js.map +0 -1
- package/dist/core/web/public/next/assets/NewChatDialog-BHoCnP6Q.js +0 -4
- package/dist/core/web/public/next/assets/NewChatDialog-BHoCnP6Q.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingFlow-BVljU2uy.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingFlow-BVljU2uy.js.map +0 -1
- package/dist/core/web/public/next/assets/OnboardingGate-DlI4L7Ki.js +0 -3
- package/dist/core/web/public/next/assets/OnboardingGate-DlI4L7Ki.js.map +0 -1
- package/dist/core/web/public/next/assets/PlaybooksSection-hhNpXnsR.js +0 -9
- package/dist/core/web/public/next/assets/PlaybooksSection-hhNpXnsR.js.map +0 -1
- package/dist/core/web/public/next/assets/PreviewPane-BbXr63u2.js +0 -2
- package/dist/core/web/public/next/assets/PreviewPane-BbXr63u2.js.map +0 -1
- package/dist/core/web/public/next/assets/ProviderLogo-BliSWEMw.js +0 -2
- package/dist/core/web/public/next/assets/ProviderLogo-BliSWEMw.js.map +0 -1
- package/dist/core/web/public/next/assets/RailStatus-SnrVxLnp.js +0 -2
- package/dist/core/web/public/next/assets/RailStatus-SnrVxLnp.js.map +0 -1
- package/dist/core/web/public/next/assets/ReasoningPane-C04_bOAi.js +0 -2
- package/dist/core/web/public/next/assets/ReasoningPane-C04_bOAi.js.map +0 -1
- package/dist/core/web/public/next/assets/ReasoningSheet-BvNFwtuX.js +0 -2
- package/dist/core/web/public/next/assets/ReasoningSheet-BvNFwtuX.js.map +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-BNptNJiV.js +0 -2
- package/dist/core/web/public/next/assets/RefreshIndicator-BNptNJiV.js.map +0 -1
- package/dist/core/web/public/next/assets/RemoteMobileApp-osaSEvnm.js +0 -2
- package/dist/core/web/public/next/assets/RemoteMobileApp-osaSEvnm.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-LO31zjUR.js +0 -7
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-LO31zjUR.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-ByZE532G.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesChrome-ByZE532G.js.map +0 -1
- package/dist/core/web/public/next/assets/ResourcesChrome-p_VCkMZH.css +0 -1
- package/dist/core/web/public/next/assets/ResourcesDrawer-BH9uwNE8.js +0 -3
- package/dist/core/web/public/next/assets/ResourcesDrawer-BH9uwNE8.js.map +0 -1
- package/dist/core/web/public/next/assets/ReviewMenu-B2A_YDPi.js +0 -2
- package/dist/core/web/public/next/assets/ReviewMenu-B2A_YDPi.js.map +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CVabFM97.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CVabFM97.js.map +0 -1
- package/dist/core/web/public/next/assets/RunInCloudAction-BpNHE7m8.js +0 -2
- package/dist/core/web/public/next/assets/RunInCloudAction-BpNHE7m8.js.map +0 -1
- package/dist/core/web/public/next/assets/RunInDevinAction-Bkf5Gb3a.js +0 -2
- package/dist/core/web/public/next/assets/RunInDevinAction-Bkf5Gb3a.js.map +0 -1
- package/dist/core/web/public/next/assets/SchedulingEvidence-B08-qhhm.js +0 -2
- package/dist/core/web/public/next/assets/SchedulingEvidence-B08-qhhm.js.map +0 -1
- package/dist/core/web/public/next/assets/ScreenHost-BGSxFyWK.js +0 -3
- package/dist/core/web/public/next/assets/ScreenHost-BGSxFyWK.js.map +0 -1
- package/dist/core/web/public/next/assets/SeatSelector-B4lRZl0K.js +0 -3
- package/dist/core/web/public/next/assets/SeatSelector-B4lRZl0K.js.map +0 -1
- package/dist/core/web/public/next/assets/Segmented-Dokzywy8.js +0 -2
- package/dist/core/web/public/next/assets/Segmented-Dokzywy8.js.map +0 -1
- package/dist/core/web/public/next/assets/Select-tf4lNvWD.js +0 -2
- package/dist/core/web/public/next/assets/Select-tf4lNvWD.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionGate-Bab2qO29.js +0 -2
- package/dist/core/web/public/next/assets/SessionGate-Bab2qO29.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionInsightChip-C-fj8h4A.js +0 -2
- package/dist/core/web/public/next/assets/SessionInsightChip-C-fj8h4A.js.map +0 -1
- package/dist/core/web/public/next/assets/SessionSearch-CqjjwOW2.js +0 -2
- package/dist/core/web/public/next/assets/SessionSearch-CqjjwOW2.js.map +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-DfOsHzl6.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-DfOsHzl6.js.map +0 -1
- package/dist/core/web/public/next/assets/SetupChecklist-BsxCTcYY.js +0 -2
- package/dist/core/web/public/next/assets/SetupChecklist-BsxCTcYY.js.map +0 -1
- package/dist/core/web/public/next/assets/ShadowDecisions-B1ZPv7K-.js +0 -3
- package/dist/core/web/public/next/assets/ShadowDecisions-B1ZPv7K-.js.map +0 -1
- package/dist/core/web/public/next/assets/Sheet-DLlZ00Lu.js +0 -2
- package/dist/core/web/public/next/assets/Sheet-DLlZ00Lu.js.map +0 -1
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CDwQdpGV.js +0 -2
- package/dist/core/web/public/next/assets/ShortcutsOverlay-CDwQdpGV.js.map +0 -1
- package/dist/core/web/public/next/assets/Sidebar-H5WNri2S.js +0 -3
- package/dist/core/web/public/next/assets/Sidebar-H5WNri2S.js.map +0 -1
- package/dist/core/web/public/next/assets/SkipToContent-BjJE6yOo.js +0 -2
- package/dist/core/web/public/next/assets/SkipToContent-BjJE6yOo.js.map +0 -1
- package/dist/core/web/public/next/assets/Slider-C68TumXj.js +0 -2
- package/dist/core/web/public/next/assets/Slider-C68TumXj.js.map +0 -1
- package/dist/core/web/public/next/assets/SourcesPane-DHYs4YIg.js +0 -2
- package/dist/core/web/public/next/assets/SourcesPane-DHYs4YIg.js.map +0 -1
- package/dist/core/web/public/next/assets/SourcesPanel-DFyLfYBO.js +0 -2
- package/dist/core/web/public/next/assets/SourcesPanel-DFyLfYBO.js.map +0 -1
- package/dist/core/web/public/next/assets/StatTile-CTUuhOLS.js +0 -2
- package/dist/core/web/public/next/assets/StatTile-CTUuhOLS.js.map +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-DrVbi5dF.js +0 -2
- package/dist/core/web/public/next/assets/StatusBadge-DrVbi5dF.js.map +0 -1
- package/dist/core/web/public/next/assets/StepBand-CXDpnu2R.js +0 -2
- package/dist/core/web/public/next/assets/StepBand-CXDpnu2R.js.map +0 -1
- package/dist/core/web/public/next/assets/Surface-DCL7uORg.js +0 -2
- package/dist/core/web/public/next/assets/Surface-DCL7uORg.js.map +0 -1
- package/dist/core/web/public/next/assets/Swimlane-BAEjfoVU.js +0 -2
- package/dist/core/web/public/next/assets/Swimlane-BAEjfoVU.js.map +0 -1
- package/dist/core/web/public/next/assets/Switch-Z7RmRjWE.js +0 -2
- package/dist/core/web/public/next/assets/Switch-Z7RmRjWE.js.map +0 -1
- package/dist/core/web/public/next/assets/Tag-Ciht3C94.js +0 -2
- package/dist/core/web/public/next/assets/Tag-Ciht3C94.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-BdIyhtzJ.js +0 -26
- package/dist/core/web/public/next/assets/TerminalPane-BdIyhtzJ.js.map +0 -1
- package/dist/core/web/public/next/assets/TerminalPane-DJKT600N.js +0 -3
- package/dist/core/web/public/next/assets/TerminalPane-DJKT600N.js.map +0 -1
- package/dist/core/web/public/next/assets/ThinkingBlock-CHRZX_fJ.js +0 -2
- package/dist/core/web/public/next/assets/ThinkingBlock-CHRZX_fJ.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-QSoaY_Fk.js +0 -2
- package/dist/core/web/public/next/assets/UniverseConsoleApp-QSoaY_Fk.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseView-ZXAOJ0Rq.js +0 -9
- package/dist/core/web/public/next/assets/UniverseView-ZXAOJ0Rq.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-BEAa-W_q.js +0 -3
- package/dist/core/web/public/next/assets/UsageSection-BEAa-W_q.js.map +0 -1
- package/dist/core/web/public/next/assets/UsePlaybookAction-S7Yky_M8.js +0 -2
- package/dist/core/web/public/next/assets/UsePlaybookAction-S7Yky_M8.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cj6yPJo3.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cj6yPJo3.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-n6qr3lCF.css +0 -1
- package/dist/core/web/public/next/assets/VerseMobileApp-BRayqF_2.js +0 -3
- package/dist/core/web/public/next/assets/VerseMobileApp-BRayqF_2.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseShared-CH8mV5ew.js +0 -2
- package/dist/core/web/public/next/assets/VerseShared-CH8mV5ew.js.map +0 -1
- package/dist/core/web/public/next/assets/VoiceHud-CO4yGRlr.js +0 -2
- package/dist/core/web/public/next/assets/VoiceHud-CO4yGRlr.js.map +0 -1
- package/dist/core/web/public/next/assets/VoiceInput-fSLnbGJ4.js +0 -2
- package/dist/core/web/public/next/assets/VoiceInput-fSLnbGJ4.js.map +0 -1
- package/dist/core/web/public/next/assets/WikiSection-CN-HansV.js +0 -2
- package/dist/core/web/public/next/assets/WikiSection-CN-HansV.js.map +0 -1
- package/dist/core/web/public/next/assets/Workspace-dufi6DmW.js +0 -6
- package/dist/core/web/public/next/assets/Workspace-dufi6DmW.js.map +0 -1
- package/dist/core/web/public/next/assets/actions-gBplqbpY.js +0 -2
- package/dist/core/web/public/next/assets/actions-gBplqbpY.js.map +0 -1
- package/dist/core/web/public/next/assets/agent-tools-client-ClFut2J1.js +0 -2
- package/dist/core/web/public/next/assets/agent-tools-client-ClFut2J1.js.map +0 -1
- package/dist/core/web/public/next/assets/agents-focus-DjBz83BQ.js +0 -2
- package/dist/core/web/public/next/assets/agents-focus-DjBz83BQ.js.map +0 -1
- package/dist/core/web/public/next/assets/app-version-B0FcXqqB.js +0 -2
- package/dist/core/web/public/next/assets/app-version-B0FcXqqB.js.map +0 -1
- package/dist/core/web/public/next/assets/apps-model-C-SdWY0N.js +0 -2
- package/dist/core/web/public/next/assets/apps-model-C-SdWY0N.js.map +0 -1
- package/dist/core/web/public/next/assets/ask-seat-DhGxiGSd.js +0 -2
- package/dist/core/web/public/next/assets/ask-seat-DhGxiGSd.js.map +0 -1
- package/dist/core/web/public/next/assets/authority-model-CoXAS-Z6.js +0 -2
- package/dist/core/web/public/next/assets/authority-model-CoXAS-Z6.js.map +0 -1
- package/dist/core/web/public/next/assets/automations-focus-CeneF7lP.js +0 -2
- package/dist/core/web/public/next/assets/automations-focus-CeneF7lP.js.map +0 -1
- package/dist/core/web/public/next/assets/budget-queries-DCZevH2S.js +0 -2
- package/dist/core/web/public/next/assets/budget-queries-DCZevH2S.js.map +0 -1
- package/dist/core/web/public/next/assets/capacity-strip-model-Wna9o0dS.js +0 -2
- package/dist/core/web/public/next/assets/capacity-strip-model-Wna9o0dS.js.map +0 -1
- package/dist/core/web/public/next/assets/charts-CzqC55eL.js +0 -2
- package/dist/core/web/public/next/assets/charts-CzqC55eL.js.map +0 -1
- package/dist/core/web/public/next/assets/chat-pane-data-BBA55Pw-.js +0 -2
- package/dist/core/web/public/next/assets/chat-pane-data-BBA55Pw-.js.map +0 -1
- package/dist/core/web/public/next/assets/checkpoint-queries-gP6Vh70H.js +0 -2
- package/dist/core/web/public/next/assets/checkpoint-queries-gP6Vh70H.js.map +0 -1
- package/dist/core/web/public/next/assets/cloud-queries-Bsqo7wye.js +0 -2
- package/dist/core/web/public/next/assets/cloud-queries-Bsqo7wye.js.map +0 -1
- package/dist/core/web/public/next/assets/command-catalog-Dnx-iMLX.js +0 -2
- package/dist/core/web/public/next/assets/command-catalog-Dnx-iMLX.js.map +0 -1
- package/dist/core/web/public/next/assets/composer-queries-DHGJlnFJ.js +0 -2
- package/dist/core/web/public/next/assets/composer-queries-DHGJlnFJ.js.map +0 -1
- package/dist/core/web/public/next/assets/connectivity-BViMMNcD.js +0 -2
- package/dist/core/web/public/next/assets/connectivity-BViMMNcD.js.map +0 -1
- package/dist/core/web/public/next/assets/context-queries-Bsl-w0q-.js +0 -2
- package/dist/core/web/public/next/assets/context-queries-Bsl-w0q-.js.map +0 -1
- package/dist/core/web/public/next/assets/control-queries-CUNa6TAx.js +0 -2
- package/dist/core/web/public/next/assets/control-queries-CUNa6TAx.js.map +0 -1
- package/dist/core/web/public/next/assets/copy-setup-C2goNcTZ.js +0 -2
- package/dist/core/web/public/next/assets/copy-setup-C2goNcTZ.js.map +0 -1
- package/dist/core/web/public/next/assets/deep-link-Dg_zaqAl.js +0 -2
- package/dist/core/web/public/next/assets/deep-link-Dg_zaqAl.js.map +0 -1
- package/dist/core/web/public/next/assets/device-permissions-CEXY0Vor.js +0 -2
- package/dist/core/web/public/next/assets/device-permissions-CEXY0Vor.js.map +0 -1
- package/dist/core/web/public/next/assets/devin-queries-Cu_YYhw2.js +0 -2
- package/dist/core/web/public/next/assets/devin-queries-Cu_YYhw2.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-icons-DGZoDN6N.js +0 -2
- package/dist/core/web/public/next/assets/dock-icons-DGZoDN6N.js.map +0 -1
- package/dist/core/web/public/next/assets/dock-panes-BgSO9q_f.js +0 -2
- package/dist/core/web/public/next/assets/dock-panes-BgSO9q_f.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-control-queries-clsJWanE.js +0 -2
- package/dist/core/web/public/next/assets/fleet-control-queries-clsJWanE.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-queries-DX1AwHEt.js +0 -2
- package/dist/core/web/public/next/assets/fleet-queries-DX1AwHEt.js.map +0 -1
- package/dist/core/web/public/next/assets/fleet-state-EgNiSDxu.js +0 -3
- package/dist/core/web/public/next/assets/fleet-state-EgNiSDxu.js.map +0 -1
- package/dist/core/web/public/next/assets/focus-trap-B1vuEhZX.js +0 -2
- package/dist/core/web/public/next/assets/focus-trap-B1vuEhZX.js.map +0 -1
- package/dist/core/web/public/next/assets/git-model-Bu59fz1m.js +0 -5
- package/dist/core/web/public/next/assets/git-model-Bu59fz1m.js.map +0 -1
- package/dist/core/web/public/next/assets/global-BJ_kVFpD.js +0 -3
- package/dist/core/web/public/next/assets/global-BJ_kVFpD.js.map +0 -1
- package/dist/core/web/public/next/assets/guarded-action-CzvG7Qgc.js +0 -3
- package/dist/core/web/public/next/assets/guarded-action-CzvG7Qgc.js.map +0 -1
- package/dist/core/web/public/next/assets/guarded-runners-BPM0KdoQ.js +0 -2
- package/dist/core/web/public/next/assets/guarded-runners-BPM0KdoQ.js.map +0 -1
- package/dist/core/web/public/next/assets/health-queries-CMxSsJKS.js +0 -2
- package/dist/core/web/public/next/assets/health-queries-CMxSsJKS.js.map +0 -1
- package/dist/core/web/public/next/assets/icons-MYfI6vZr.js +0 -2
- package/dist/core/web/public/next/assets/icons-MYfI6vZr.js.map +0 -1
- package/dist/core/web/public/next/assets/index-DOAOxiKl.js +0 -11
- package/dist/core/web/public/next/assets/index-DOAOxiKl.js.map +0 -1
- package/dist/core/web/public/next/assets/jev-queries-CS2A5uWe.js +0 -2
- package/dist/core/web/public/next/assets/jev-queries-CS2A5uWe.js.map +0 -1
- package/dist/core/web/public/next/assets/ladder-queries-CBoG3heV.js +0 -2
- package/dist/core/web/public/next/assets/ladder-queries-CBoG3heV.js.map +0 -1
- package/dist/core/web/public/next/assets/leader-focus-DDQlv0TB.js +0 -2
- package/dist/core/web/public/next/assets/leader-focus-DDQlv0TB.js.map +0 -1
- package/dist/core/web/public/next/assets/live-model-CCjYFk48.js +0 -2
- package/dist/core/web/public/next/assets/live-model-CCjYFk48.js.map +0 -1
- package/dist/core/web/public/next/assets/mobile-actions-XqB_h7a8.js +0 -2
- package/dist/core/web/public/next/assets/mobile-actions-XqB_h7a8.js.map +0 -1
- package/dist/core/web/public/next/assets/mobile-toast-eIrghd9o.js +0 -2
- package/dist/core/web/public/next/assets/mobile-toast-eIrghd9o.js.map +0 -1
- package/dist/core/web/public/next/assets/multimodel-flows-CzI-yHg5.js +0 -7
- package/dist/core/web/public/next/assets/multimodel-flows-CzI-yHg5.js.map +0 -1
- package/dist/core/web/public/next/assets/multimodel-queries-DxIT9AZY.js +0 -2
- package/dist/core/web/public/next/assets/multimodel-queries-DxIT9AZY.js.map +0 -1
- package/dist/core/web/public/next/assets/mutations-BlGALvmG.js +0 -2
- package/dist/core/web/public/next/assets/mutations-BlGALvmG.js.map +0 -1
- package/dist/core/web/public/next/assets/nav-ByibvQW1.js +0 -2
- package/dist/core/web/public/next/assets/nav-ByibvQW1.js.map +0 -1
- package/dist/core/web/public/next/assets/needs-you-actions-Dp5UxM3X.js +0 -2
- package/dist/core/web/public/next/assets/needs-you-actions-Dp5UxM3X.js.map +0 -1
- package/dist/core/web/public/next/assets/needs-you-model-DYsqHMqy.js +0 -2
- package/dist/core/web/public/next/assets/needs-you-model-DYsqHMqy.js.map +0 -1
- package/dist/core/web/public/next/assets/open-terminal-dOVyLFvn.js +0 -2
- package/dist/core/web/public/next/assets/open-terminal-dOVyLFvn.js.map +0 -1
- package/dist/core/web/public/next/assets/open-terminal-request-BIhvirIl.js +0 -2
- package/dist/core/web/public/next/assets/open-terminal-request-BIhvirIl.js.map +0 -1
- package/dist/core/web/public/next/assets/overnight-queries-KxqH6BRN.js +0 -2
- package/dist/core/web/public/next/assets/overnight-queries-KxqH6BRN.js.map +0 -1
- package/dist/core/web/public/next/assets/palette-handoff-69pw9oBv.js +0 -2
- package/dist/core/web/public/next/assets/palette-handoff-69pw9oBv.js.map +0 -1
- package/dist/core/web/public/next/assets/panes-CHt3427X.js +0 -3
- package/dist/core/web/public/next/assets/panes-CHt3427X.js.map +0 -1
- package/dist/core/web/public/next/assets/path-display-DuIZF5G3.js +0 -2
- package/dist/core/web/public/next/assets/path-display-DuIZF5G3.js.map +0 -1
- package/dist/core/web/public/next/assets/playbook-composer-DipWgX7t.js +0 -2
- package/dist/core/web/public/next/assets/playbook-composer-DipWgX7t.js.map +0 -1
- package/dist/core/web/public/next/assets/playbook-focus-EXJPMBBI.js +0 -2
- package/dist/core/web/public/next/assets/playbook-focus-EXJPMBBI.js.map +0 -1
- package/dist/core/web/public/next/assets/playbooks-queries-BlpGBpOV.js +0 -2
- package/dist/core/web/public/next/assets/playbooks-queries-BlpGBpOV.js.map +0 -1
- package/dist/core/web/public/next/assets/preloaded-TmpzuCEi.js +0 -2
- package/dist/core/web/public/next/assets/preloaded-TmpzuCEi.js.map +0 -1
- package/dist/core/web/public/next/assets/primitives-CDKCUR2v.js +0 -1
- package/dist/core/web/public/next/assets/pwa-CTGMm-wR.js +0 -2
- package/dist/core/web/public/next/assets/pwa-CTGMm-wR.js.map +0 -1
- package/dist/core/web/public/next/assets/queries--mGK10fL.js +0 -2
- package/dist/core/web/public/next/assets/queries--mGK10fL.js.map +0 -1
- package/dist/core/web/public/next/assets/reasoning-pref-CWGL9MD2.js +0 -2
- package/dist/core/web/public/next/assets/reasoning-pref-CWGL9MD2.js.map +0 -1
- package/dist/core/web/public/next/assets/remote-session-I4RXlsas.js +0 -3
- package/dist/core/web/public/next/assets/remote-session-I4RXlsas.js.map +0 -1
- package/dist/core/web/public/next/assets/resolved-store-DwGn9hb_.js +0 -2
- package/dist/core/web/public/next/assets/resolved-store-DwGn9hb_.js.map +0 -1
- package/dist/core/web/public/next/assets/resources-queries-T6ER_hPN.js +0 -2
- package/dist/core/web/public/next/assets/resources-queries-T6ER_hPN.js.map +0 -1
- package/dist/core/web/public/next/assets/reveal-anchor-CHtvhrYm.js +0 -2
- package/dist/core/web/public/next/assets/reveal-anchor-CHtvhrYm.js.map +0 -1
- package/dist/core/web/public/next/assets/sheet-BlzGO1wo.js +0 -2
- package/dist/core/web/public/next/assets/sheet-BlzGO1wo.js.map +0 -1
- package/dist/core/web/public/next/assets/slots-40edgV7X.js +0 -3
- package/dist/core/web/public/next/assets/slots-40edgV7X.js.map +0 -1
- package/dist/core/web/public/next/assets/sources-queries-BrM41X16.js +0 -4
- package/dist/core/web/public/next/assets/sources-queries-BrM41X16.js.map +0 -1
- package/dist/core/web/public/next/assets/sse-CAFwslNC.js +0 -2
- package/dist/core/web/public/next/assets/sse-CAFwslNC.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-data-D_oFOgkh.js +0 -2
- package/dist/core/web/public/next/assets/surface-data-D_oFOgkh.js.map +0 -1
- package/dist/core/web/public/next/assets/surface-prefetch-wqfiATYQ.js +0 -2
- package/dist/core/web/public/next/assets/surface-prefetch-wqfiATYQ.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-client-iL4DagCN.js +0 -2
- package/dist/core/web/public/next/assets/terminal-client-iL4DagCN.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-icons-BakeOpKV.js +0 -2
- package/dist/core/web/public/next/assets/terminal-icons-BakeOpKV.js.map +0 -1
- package/dist/core/web/public/next/assets/terminal-view-D6AAh08q.js +0 -6
- package/dist/core/web/public/next/assets/terminal-view-D6AAh08q.js.map +0 -1
- package/dist/core/web/public/next/assets/thread-data-CSDZ514s.js +0 -2
- package/dist/core/web/public/next/assets/thread-data-CSDZ514s.js.map +0 -1
- package/dist/core/web/public/next/assets/ui-parts-DubQJIoq.js +0 -2
- package/dist/core/web/public/next/assets/ui-parts-DubQJIoq.js.map +0 -1
- package/dist/core/web/public/next/assets/usage-queries-BONqdout.js +0 -2
- package/dist/core/web/public/next/assets/usage-queries-BONqdout.js.map +0 -1
- package/dist/core/web/public/next/assets/use-chat-activity-BZjdPPNP.js +0 -2
- package/dist/core/web/public/next/assets/use-chat-activity-BZjdPPNP.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-xJ4rxyVo.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-xJ4rxyVo.js.map +0 -1
- package/dist/core/web/public/next/assets/use-ticker-Bsu0cMvl.js +0 -2
- package/dist/core/web/public/next/assets/use-ticker-Bsu0cMvl.js.map +0 -1
- package/dist/core/web/public/next/assets/use-token-gate-E-xzEAu6.js +0 -2
- package/dist/core/web/public/next/assets/use-token-gate-E-xzEAu6.js.map +0 -1
- package/dist/core/web/public/next/assets/useAutoSeat-CXC9e4vx.js +0 -2
- package/dist/core/web/public/next/assets/useAutoSeat-CXC9e4vx.js.map +0 -1
- package/dist/core/web/public/next/assets/useOnboarding-Csw_AXrj.js +0 -2
- package/dist/core/web/public/next/assets/useOnboarding-Csw_AXrj.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatHealth-B6AXxre9.js +0 -2
- package/dist/core/web/public/next/assets/useSeatHealth-B6AXxre9.js.map +0 -1
- package/dist/core/web/public/next/assets/useSeatsRefresh-BIAa7Exn.js +0 -2
- package/dist/core/web/public/next/assets/useSeatsRefresh-BIAa7Exn.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseSession-BOyvOEDi.js +0 -2
- package/dist/core/web/public/next/assets/useVerseSession-BOyvOEDi.js.map +0 -1
- package/dist/core/web/public/next/assets/useVerseTranscript-BOhcfdp7.js +0 -2
- package/dist/core/web/public/next/assets/useVerseTranscript-BOhcfdp7.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-bootstrap-query-D-fU89IT.js +0 -2
- package/dist/core/web/public/next/assets/verse-bootstrap-query-D-fU89IT.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-icons-UKbUG3gv.js +0 -2
- package/dist/core/web/public/next/assets/verse-icons-UKbUG3gv.js.map +0 -1
- package/dist/core/web/public/next/assets/warmup-CZ-IBU5L.js +0 -3
- package/dist/core/web/public/next/assets/warmup-CZ-IBU5L.js.map +0 -1
- package/dist/core/web/public/next/assets/wiki-focus-DhAvbMnX.js +0 -2
- package/dist/core/web/public/next/assets/wiki-focus-DhAvbMnX.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalPane-D3f02aI4.js","names":[],"sources":["../../../../../../src/web-ui/routes/verse/dock/terminal/TerminalPane.module.css","../../../../../../src/web-ui/routes/verse/dock/terminal/TerminalPane.tsx"],"sourcesContent":["/*\n * dock/terminal/TerminalPane.module.css — the Terminal pane (unit C4).\n * Tokens only (design/style-scan-310: no raw hex, no px font sizes).\n *\n * THE TERMINAL PALETTE. xterm needs concrete colours, so the pane declares\n * them here as custom properties mapped onto design tokens, and\n * terminal-view.ts resolves them at runtime (and again on a theme change).\n * The ANSI colours reuse the status inks (red/green/yellow), the quantity\n * azure (blue) and categorical inks (magenta/cyan) — never the accent, which\n * is interaction only; the accent appears only as the selection, which IS\n * interaction. The neutral ramp inverts between themes, so black/white are\n * re-pointed in dark mode to stay dark/light.\n */\n\n.pane {\n --term-bg: var(--bg-code);\n --term-fg: var(--text-primary);\n --term-cursor: var(--text-primary);\n --term-selection: color-mix(in srgb, var(--accent-500) 26%, transparent);\n --term-selection-inactive: var(--bg-selected);\n --term-scrollbar: color-mix(in srgb, var(--text-tertiary) 30%, transparent);\n --term-scrollbar-hover: color-mix(in srgb, var(--text-tertiary) 55%, transparent);\n /* Light: the normal hues are the dark text inks; \"bright\" ones are the\n stronger fills where those still read on --bg-code (≥ 3:1, tested). */\n --term-black: var(--gray-800);\n --term-red: var(--status-danger-fg);\n --term-green: var(--status-success-fg);\n --term-yellow: var(--status-running-fg);\n --term-blue: var(--data-seq-6);\n --term-magenta: var(--data-cat-4);\n --term-cyan: var(--data-cat-1);\n --term-white: var(--gray-300);\n --term-bright-black: var(--gray-500);\n --term-bright-red: var(--status-danger-solid);\n --term-bright-green: var(--data-cat-5);\n --term-bright-yellow: var(--status-warning-fg);\n --term-bright-blue: var(--status-info-solid);\n --term-bright-magenta: var(--data-cat-6);\n --term-bright-cyan: var(--data-cat-1);\n --term-bright-white: var(--gray-100);\n\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--term-bg);\n color: var(--text-primary);\n}\n\n/* Dark: the solids read well on the near-black background and the -fg inks\n are the brighter set; the neutral ramp inverts (gray-800 is light here). */\n:global(:root[data-theme='dark']) .pane {\n --term-black: var(--gray-300);\n --term-red: var(--status-danger-solid);\n --term-green: var(--status-success-solid);\n --term-yellow: var(--status-running-solid);\n --term-blue: var(--data-seq-5);\n --term-magenta: var(--data-cat-4);\n --term-cyan: var(--data-cat-1);\n --term-white: var(--gray-800);\n --term-bright-black: var(--gray-500);\n --term-bright-red: var(--status-danger-fg);\n --term-bright-green: var(--status-success-fg);\n --term-bright-yellow: var(--status-running-fg);\n --term-bright-blue: var(--data-seq-6);\n --term-bright-magenta: var(--data-cat-6);\n --term-bright-cyan: var(--data-cat-1);\n --term-bright-white: var(--gray-900);\n}\n@media (prefers-color-scheme: dark) {\n :global(:root:not([data-theme='light'])) .pane {\n --term-black: var(--gray-300);\n --term-red: var(--status-danger-solid);\n --term-green: var(--status-success-solid);\n --term-yellow: var(--status-running-solid);\n --term-blue: var(--data-seq-5);\n --term-magenta: var(--data-cat-4);\n --term-cyan: var(--data-cat-1);\n --term-white: var(--gray-800);\n --term-bright-black: var(--gray-500);\n --term-bright-red: var(--status-danger-fg);\n --term-bright-green: var(--status-success-fg);\n --term-bright-yellow: var(--status-running-fg);\n --term-bright-blue: var(--data-seq-6);\n --term-bright-magenta: var(--data-cat-6);\n --term-bright-cyan: var(--data-cat-1);\n --term-bright-white: var(--gray-900);\n }\n}\n\n.loading {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n padding: var(--card-pad);\n}\n\n/* ---- tab strip ------------------------------------------------------------ */\n\n.strip {\n display: flex;\n align-items: stretch;\n flex: none;\n min-height: var(--control-h-sm);\n border-bottom: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n}\n\n.tabs {\n display: flex;\n align-items: stretch;\n min-width: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.tabs::-webkit-scrollbar { display: none; }\n\n.tab {\n position: relative;\n display: flex;\n align-items: center;\n flex: none;\n max-width: 200px;\n border-right: 1px solid var(--border-subtle);\n color: var(--text-secondary);\n}\n.tab[data-selected] {\n color: var(--text-primary);\n background: var(--term-bg);\n}\n/* The selected tab's 2px underline: interaction, so the accent. */\n.tab[data-selected]::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: -1px;\n height: 2px;\n background: var(--accent-500);\n}\n\n.tabButton {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n min-width: 0;\n height: 100%;\n padding: 0 var(--space-1) 0 var(--space-3);\n border: 0;\n background: transparent;\n color: inherit;\n font-family: var(--font-mono);\n font-size: var(--text-xs-size);\n line-height: var(--text-xs-line);\n cursor: pointer;\n}\n.tabButton:hover { color: var(--text-primary); }\n.tabButton:focus-visible,\n.tabClose:focus-visible,\n.noticeClose:focus-visible {\n outline: none;\n box-shadow: var(--shadow-focus-ring);\n}\n\n.tabTitle {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.tabExited {\n flex: none;\n font-family: var(--font-ui);\n font-size: var(--text-2xs-size);\n line-height: var(--text-2xs-line);\n color: var(--text-tertiary);\n}\n\n/* Unseen output in a background tab: a dot WITH an accessible name. */\n.unseen {\n flex: none;\n width: 6px;\n height: 6px;\n border-radius: var(--radius-full);\n background: var(--status-info-solid);\n}\n\n.tabClose {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n /* One step under the xs control: 20px comfortable, 16px compact. A literal\n 20px stayed comfortable when Density went compact and outgrew the\n shrunken tab row (control-density.test.ts, DESIGN-V2 §2). */\n width: calc(var(--control-h-xs) - var(--space-1));\n height: calc(var(--control-h-xs) - var(--space-1));\n margin-right: var(--space-1);\n border: 0;\n border-radius: var(--radius-xs);\n background: transparent;\n color: var(--text-tertiary);\n cursor: pointer;\n opacity: 0;\n transition: opacity var(--duration-fast) var(--ease-standard);\n}\n.tab:hover .tabClose,\n.tab[data-selected] .tabClose,\n.tabClose:focus-visible { opacity: 1; }\n.tabClose:hover { background: var(--bg-hover); color: var(--text-primary); }\n@media (hover: none) {\n .tabClose { opacity: 1; }\n}\n\n.stripActions {\n display: flex;\n align-items: center;\n gap: var(--space-1);\n flex: none;\n padding: 0 var(--space-1);\n}\n\n/* ---- header --------------------------------------------------------------- */\n/* Height, padding, border and surface come from ../pane-chrome.module.css\n (the row every dock pane shares); only what is terminal-specific is here. */\n\n.cwd { font-family: var(--font-mono); }\n\n.headerStatus {\n flex: none;\n font-size: var(--text-xs-size);\n color: var(--text-tertiary);\n}\n.headerStatus:empty { display: none; }\n\n/* ---- notices -------------------------------------------------------------- */\n\n.notice {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n flex: none;\n padding: var(--space-2) var(--space-3);\n border-bottom: 1px solid var(--border-subtle);\n font-size: var(--text-sm-size);\n line-height: var(--text-sm-line);\n background: var(--status-info-bg);\n color: var(--status-info-fg);\n}\n.notice[data-tone='error'] {\n background: var(--status-danger-bg);\n color: var(--status-danger-fg);\n}\n.notice > span { flex: 1; }\n\n.noticeClose {\n display: inline-flex;\n flex: none;\n padding: var(--space-1);\n border: 0;\n border-radius: var(--radius-xs);\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n.inlineNotice {\n margin: 0 var(--card-pad) var(--card-pad);\n font-size: var(--text-sm-size);\n color: var(--text-secondary);\n}\n\n/* ---- terminal body -------------------------------------------------------- */\n\n.body {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n font-family: var(--font-mono);\n font-size: var(--text-sm-size);\n}\n\n.panel {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n}\n.panel[hidden] { display: none; }\n\n/* Padding lives on the viewport; xterm's fit reads the HOST's box. */\n.viewport {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n padding: var(--space-2) var(--space-1) var(--space-1) var(--space-3);\n}\n\n.host {\n width: 100%;\n height: 100%;\n font-family: var(--font-mono);\n font-size: var(--text-sm-size);\n}\n\n/* xterm's own scroll area follows the pane's background, not xterm's default black. */\n.host :global(.xterm),\n.host :global(.xterm-viewport) {\n background-color: var(--term-bg) !important;\n}\n.host :global(.xterm-viewport) {\n scrollbar-width: thin;\n scrollbar-color: var(--term-scrollbar) transparent;\n}\n\n.viewLoading {\n position: absolute;\n inset: var(--space-3);\n}\n\n.exitBar {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n flex: none;\n padding: var(--space-2) var(--space-3);\n border-top: 1px solid var(--border-subtle);\n background: var(--bg-surface);\n font-family: var(--font-ui);\n font-size: var(--text-sm-size);\n color: var(--text-secondary);\n}\n.exitBar > span { flex: 1; min-width: 0; }\n\n/* ---- compact (375) -------------------------------------------------------- */\n\n.pane[data-compact] .tab { max-width: 140px; }\n.pane[data-compact] .header { padding-left: var(--space-2); }\n.pane[data-compact] .viewport { padding-left: var(--space-2); }\n\n@media (prefers-reduced-motion: reduce) {\n .tabClose { transition: none; }\n}\n","/**\n * dock/terminal/TerminalPane.tsx — the chat dock's Terminal (unit C4;\n * SPEC-310C §3). Rendered by C2's Dock through C0's `terminal-pane` slot, so\n * this file (and xterm with it) loads only when a terminal is first opened.\n *\n * WHAT IT IS\n * - One tab per shell, each a LOGIN shell the sidecar runs on a real PTY\n * (core/verse/terminal.ts), opened in one of this chat's roots. Tabs\n * live on the server: a page reload reattaches to them and replays their\n * scrollback. The tab title follows the shell's own OSC title.\n * - Header: the working directory, \"Send selection to chat\" (as a fenced\n * block), a screen-reader mode, and \"Open in Terminal.app\".\n * - Selecting text copies it (the ⌘C you would otherwise type next).\n * - Under Node (no PTY) the pane says the terminal needs the desktop app\n * and still offers Terminal.app.\n *\n * WIRING\n * - Output: ONE live stream, the visible tab's (terminal-stream.ts). A\n * background tab catches up from its last seq when shown again; the\n * list poll (every 3 s, only while visible) marks unseen output with a dot.\n * - Input: keystrokes go through a single-flight queue (input-queue.ts) so\n * they reach the shell in the order they were typed.\n * - Keys: xterm owns the keyboard while focused, EXCEPT the app's own\n * chords (⌘K, ⌘J, ⌘1–5, ⌃`, ⌃Tab …, from command-catalog.ts), which it\n * passes to the page. ⌃C, ⌃R, Esc and ⌥-word motions stay in the shell.\n * - Requests from the dock (`request`, one per nonce): focus or open a tab\n * at a root, force a new one (⌃⇧`), paste a command WITHOUT running it\n * (\"Run in terminal\"), launch an app or start a dev server (the server\n * types that command — built from its own catalog, never from the page).\n */\nimport { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport type { VerseTerminalFrame, VerseTerminalListResponse, VerseTerminalTab } from '../../../../data/api-types.js';\nimport { ApiError } from '../../../../data/client.js';\nimport { Button, IconButton } from '../../../../components/primitives/Button.js';\nimport { EmptyState } from '../../../../components/primitives/EmptyState.js';\nimport { SkeletonLine } from '../../../../components/primitives/Skeleton.js';\nimport { IconExternalLink, IconPlus, IconSend, IconX } from '../../../../components/primitives/icons.js';\nimport { asSentence } from '../../autonomy/format.js';\nimport { ActionMenu, anchorBelow, type MenuAnchor } from '../../chat/ActionMenu.js';\nimport { detectKeyPlatform, eventKeyName, findCommand, formatChord, matchCommand, type KeyPlatform } from '../../shell/command-catalog.js';\nimport { usePollWhileVisible, useSectionVisible } from '../../shell/section-visibility.js';\nimport type { VerseTerminalLaunchVia } from '../../../../../core/verse/workbench-types.js';\nimport type { TerminalPaneProps } from '../../shell/slots.js';\nimport type { TerminalRequest } from '../dock-store.js';\nimport { useViewport } from '../../shell/viewport.js';\nimport { projectName } from '../../verse-model.js';\nimport { createInputQueue, type InputQueue } from './input-queue.js';\nimport { base64ToBytes, fenceSelection, terminalApi, TerminalLockedError, type TerminalApi } from './terminal-client.js';\nimport { openTerminalStream, type TerminalStreamState } from './terminal-stream.js';\nimport {\n createXtermView,\n resolveTerminalFont,\n resolveTerminalTheme,\n watchThemeChanges,\n type TerminalView,\n type TerminalViewFactory,\n} from './terminal-view.js';\nimport { ChevronDownGlyph, ScreenReaderGlyph, TerminalGlyph } from './terminal-icons.js';\nimport chrome from '../pane-chrome.module.css';\nimport styles from './TerminalPane.module.css';\n\n// ---------------------------------------------------------------------------\n// Seams\n// ---------------------------------------------------------------------------\n\nexport interface TerminalPaneDeps {\n api: TerminalApi;\n createView: TerminalViewFactory;\n openStream: typeof openTerminalStream;\n platform: KeyPlatform;\n writeClipboard: (text: string) => Promise<void>;\n}\n\nconst DEFAULT_DEPS: TerminalPaneDeps = {\n api: terminalApi,\n createView: createXtermView,\n openStream: openTerminalStream,\n platform: detectKeyPlatform(),\n writeClipboard: async (text) => {\n await navigator.clipboard.writeText(text);\n },\n};\n\n/** How often the tab list is refreshed while the pane is on screen. */\nexport const TERMINAL_LIST_POLL_MS = 3_000;\nconst SCREEN_READER_PREF_KEY = 'ashlr.verse.terminal.screenReader';\n/** Requests already handled, across remounts (the dock keeps its last request around). */\nlet lastHandledNonce = 0;\n\n/** Test hygiene. */\nexport function resetTerminalPaneForTest(): void {\n lastHandledNonce = 0;\n}\n\nfunction readScreenReaderPref(): boolean {\n try {\n return localStorage.getItem(SCREEN_READER_PREF_KEY) === '1';\n } catch {\n return false;\n }\n}\n\nfunction writeScreenReaderPref(on: boolean): void {\n try {\n localStorage.setItem(SCREEN_READER_PREF_KEY, on ? '1' : '0');\n } catch {\n /* storage unavailable: the choice lasts for this page only */\n }\n}\n\n/**\n * Keys the PAGE handles even while the terminal has focus: a catalog command\n * whose chord uses ⌘ (macOS), or ⌃` / ⌃Tab. Everything else — ⌃C, ⌃R, Esc,\n * ⌥← — belongs to the shell. Off macOS `mod` is Ctrl, so only Ctrl+Shift\n * chords and ⌃` / ⌃Tab pass (Ctrl+K must still kill a line).\n */\nexport function keyPassesToPage(event: KeyboardEvent, platform: KeyPlatform): boolean {\n if (event.type !== 'keydown') return false;\n if (!matchCommand(event, ['chat', 'global'], platform)) return false;\n const key = eventKeyName(event);\n const shellChord = event.ctrlKey && (key === '`' || key === 'tab');\n if (platform === 'mac') return event.metaKey || shellChord;\n return shellChord || (event.ctrlKey && event.shiftKey);\n}\n\nfunction errorText(err: unknown, fallback: string): string {\n if (err instanceof TerminalLockedError) return err.message;\n if (err instanceof ApiError) {\n if (err.status === 401) return 'Unlock actions with the mutation token to use the terminal.';\n if (err.detail) return asSentence(err.detail);\n }\n return fallback;\n}\n\ninterface ViewRecord {\n view: TerminalView;\n host: HTMLDivElement;\n lastSeq: number;\n queue: InputQueue;\n disposers: Array<{ dispose(): void }>;\n}\n\ntype Notice = { tone: 'error' | 'info'; text: string };\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function TerminalPane({ sessionId, roots, request, onSendToChat, visible, deps: depsOverride }: TerminalPaneProps & { deps?: Partial<TerminalPaneDeps> }) {\n const deps = useMemo<TerminalPaneDeps>(() => ({ ...DEFAULT_DEPS, ...depsOverride }), [depsOverride]);\n const sectionVisible = useSectionVisible();\n const shown = visible && sectionVisible;\n const compact = useViewport().compact;\n\n const [list, setList] = useState<VerseTerminalListResponse | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [notice, setNotice] = useState<Notice | null>(null);\n const [creating, setCreating] = useState(false);\n const [streamState, setStreamState] = useState<TerminalStreamState | null>(null);\n const [hasSelection, setHasSelection] = useState(false);\n const [copied, setCopied] = useState(false);\n const [screenReader, setScreenReader] = useState(readScreenReaderPref);\n const [viewFailed, setViewFailed] = useState(false);\n const [readyIds, setReadyIds] = useState<ReadonlySet<string>>(() => new Set());\n const [rootMenu, setRootMenu] = useState<{ anchor: MenuAnchor; from: HTMLElement } | null>(null);\n const [seen, setSeen] = useState<ReadonlyMap<string, string>>(() => new Map());\n\n const views = useRef(new Map<string, ViewRecord>());\n const hosts = useRef(new Map<string, HTMLDivElement>());\n const creatingViews = useRef(new Set<string>());\n const autoCreated = useRef(false);\n const pendingPaste = useRef<{ tabId: string; text: string } | null>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const tabRefs = useRef(new Map<string, HTMLButtonElement>());\n const resizeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const copyTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const selectionTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const mounted = useRef(true);\n /**\n * True while a shell the operator CLICKED for is opening (New terminal, the\n * folder menu). Any other open — the automatic first one, a dock request —\n * shows the pane opening instead of \"No terminal open\"; a click keeps the\n * empty state (and the focused, busy button) where it is.\n */\n const manualOpen = useRef(false);\n\n const allTabs = useMemo(() => list?.tabs ?? [], [list]);\n const exitedIds = useRef(new Set<string>());\n exitedIds.current = new Set(allTabs.filter((t) => t.exited).map((t) => t.id));\n const tabs = useMemo(() => allTabs.filter((t) => t.sessionId === sessionId), [allTabs, sessionId]);\n const active = tabs.find((t) => t.id === activeId) ?? null;\n const otherChats = allTabs.length - tabs.length;\n\n // -------------------------------------------------------------------------\n // The tab list\n // -------------------------------------------------------------------------\n\n const refresh = useCallback(async () => {\n try {\n const next = await deps.api.list();\n if (!mounted.current) return;\n setList(next);\n setLoadError(null);\n } catch (err) {\n if (!mounted.current) return;\n setLoadError(errorText(err, 'The terminal list could not be loaded.'));\n }\n }, [deps.api]);\n\n useEffect(() => {\n mounted.current = true;\n void refresh();\n return () => { mounted.current = false; };\n }, [refresh]);\n\n usePollWhileVisible(() => { void refresh(); }, TERMINAL_LIST_POLL_MS, { enabled: visible });\n\n // Keep the active tab valid: the first of this chat's tabs when it vanished.\n useEffect(() => {\n if (!list) return;\n if (activeId && tabs.some((t) => t.id === activeId)) return;\n setActiveId(tabs.at(-1)?.id ?? null);\n }, [list, tabs, activeId]);\n\n // Forget views of tabs that no longer exist (killed elsewhere, idle-closed).\n useEffect(() => {\n if (!list) return;\n const live = new Set(list.tabs.map((t) => t.id));\n for (const [id, rec] of views.current) {\n if (live.has(id)) continue;\n disposeRecord(rec);\n views.current.delete(id);\n setReadyIds((prev) => { const next = new Set(prev); next.delete(id); return next; });\n }\n }, [list]);\n\n // The active tab's output is seen as it arrives.\n useEffect(() => {\n if (!active || !shown) return;\n setSeen((prev) => (prev.get(active.id) === active.lastActivityAt ? prev : new Map(prev).set(active.id, active.lastActivityAt)));\n }, [active, shown]);\n\n // Dispose everything on unmount (the SERVER keeps the shells).\n useEffect(() => () => {\n for (const rec of views.current.values()) disposeRecord(rec);\n views.current.clear();\n for (const t of [resizeTimer, copyTimer, selectionTimer]) if (t.current) clearTimeout(t.current);\n }, []);\n\n function disposeRecord(rec: ViewRecord): void {\n rec.queue.dispose();\n for (const d of rec.disposers) {\n try { d.dispose(); } catch { /* already gone */ }\n }\n try { rec.view.dispose(); } catch { /* already gone */ }\n }\n\n // -------------------------------------------------------------------------\n // Creating, closing, restarting tabs\n // -------------------------------------------------------------------------\n\n const sizeHint = useCallback((): { cols: number; rows: number } => {\n for (const rec of views.current.values()) {\n if (rec.view.cols > 1 && rec.view.rows > 1) return { cols: rec.view.cols, rows: rec.view.rows };\n }\n return { cols: 80, rows: 24 };\n }, []);\n\n const createTab = useCallback(async (opts: { root?: string; appId?: string; via?: VerseTerminalLaunchVia; model?: string; devServerId?: string } = {}): Promise<VerseTerminalTab | null> => {\n setCreating(true);\n setNotice(null);\n try {\n const tab = await deps.api.create({\n sessionId,\n ...(opts.root ? { root: opts.root } : {}),\n ...(opts.appId ? { appId: opts.appId } : {}),\n // How the app launches (Ollama, a local model): only with an app — the server refuses them alone.\n ...(opts.appId && opts.via ? { via: opts.via } : {}),\n ...(opts.appId && opts.model ? { model: opts.model } : {}),\n ...(opts.devServerId ? { devServerId: opts.devServerId } : {}),\n ...sizeHint(),\n });\n if (!mounted.current) return tab;\n setList((prev) => (prev ? { ...prev, tabs: [...prev.tabs.filter((t) => t.id !== tab.id), tab] } : prev));\n setActiveId(tab.id);\n return tab;\n } catch (err) {\n if (mounted.current) setNotice({ tone: 'error', text: errorText(err, 'The terminal could not be opened.') });\n return null;\n } finally {\n if (mounted.current) setCreating(false);\n }\n }, [deps.api, sessionId, sizeHint]);\n\n const closeTab = useCallback(async (tab: VerseTerminalTab) => {\n try {\n await deps.api.kill(tab.id);\n } catch (err) {\n // Already gone on the server is as good as closed.\n if (!(err instanceof ApiError && err.status === 404)) {\n setNotice({ tone: 'error', text: errorText(err, 'The terminal could not be closed.') });\n return;\n }\n }\n const rec = views.current.get(tab.id);\n if (rec) {\n disposeRecord(rec);\n views.current.delete(tab.id);\n }\n setList((prev) => (prev ? { ...prev, tabs: prev.tabs.filter((t) => t.id !== tab.id) } : prev));\n if (activeId === tab.id) {\n const index = tabs.findIndex((t) => t.id === tab.id);\n const neighbour = tabs[index + 1] ?? tabs[index - 1] ?? null;\n setActiveId(neighbour?.id ?? null);\n }\n }, [activeId, deps.api, tabs]);\n\n const restartTab = useCallback(async (tab: VerseTerminalTab) => {\n const next = await createTab({ root: tab.root });\n if (next) await closeTab(tab);\n }, [closeTab, createTab]);\n\n // Another chat (the dock keeps this pane mounted across chats): its own\n // first look may open a shell again.\n const autoCreatedFor = useRef(sessionId);\n if (autoCreatedFor.current !== sessionId) {\n autoCreatedFor.current = sessionId;\n autoCreated.current = false;\n }\n\n // First look at an empty pane: open a shell in the chat's primary root.\n useEffect(() => {\n if (!list || !list.available || !shown || autoCreated.current || creating) return;\n if (request && request.nonce > lastHandledNonce) return; // the request decides\n autoCreated.current = true;\n if (tabs.length === 0) void createTab({});\n }, [list, shown, tabs.length, creating, createTab, request]);\n\n // -------------------------------------------------------------------------\n // Views (xterm) — one per tab, created when its panel mounts\n // -------------------------------------------------------------------------\n\n const attachView = useCallback(async (tabId: string, host: HTMLDivElement) => {\n if (views.current.has(tabId) || creatingViews.current.has(tabId)) return;\n creatingViews.current.add(tabId);\n try {\n const view = await deps.createView({ ...resolveTerminalFont(host), theme: resolveTerminalTheme(host), screenReaderMode: readScreenReaderPref() });\n if (!mounted.current || !hosts.current.has(tabId)) {\n view.dispose();\n return;\n }\n view.open(host);\n const queue = createInputQueue((b64) => deps.api.input(tabId, b64), {\n onError: (err) => {\n if (mounted.current) setNotice({ tone: 'error', text: errorText(err, 'That input did not reach the shell.') });\n },\n });\n const rec: ViewRecord = { view, host, lastSeq: 0, queue, disposers: [] };\n // Keystrokes into a shell that has exited go nowhere (the exit bar offers Restart).\n rec.disposers.push(view.onData((data) => { if (!exitedIds.current.has(tabId)) queue.pushText(data); }));\n rec.disposers.push(view.onBinary((data) => { if (!exitedIds.current.has(tabId)) queue.pushBinary(data); }));\n rec.disposers.push(view.onSelectionChange(() => {\n const selected = view.hasSelection();\n setHasSelection(selected);\n if (!selected) return;\n // Copy on select, once the drag settles.\n if (selectionTimer.current) clearTimeout(selectionTimer.current);\n selectionTimer.current = setTimeout(() => {\n const text = view.getSelection();\n if (!text) return;\n deps.writeClipboard(text).then(() => {\n if (!mounted.current) return;\n setCopied(true);\n if (copyTimer.current) clearTimeout(copyTimer.current);\n copyTimer.current = setTimeout(() => setCopied(false), 1_200);\n }, () => { /* clipboard refused (no user gesture): the selection still works with ⌘C */ });\n }, 150);\n }));\n view.setKeyFilter((event) => !keyPassesToPage(event, deps.platform));\n views.current.set(tabId, rec);\n setViewFailed(false);\n setReadyIds((prev) => new Set(prev).add(tabId));\n } catch (err) {\n console.error('[verse] terminal view failed to load', err);\n if (mounted.current) setViewFailed(true);\n } finally {\n creatingViews.current.delete(tabId);\n }\n }, [deps]);\n\n // One stable ref callback per tab: a fresh closure each render would make\n // React detach and re-attach the host on every render.\n const attachRef = useRef(attachView);\n attachRef.current = attachView;\n const hostRefs = useRef(new Map<string, (node: HTMLDivElement | null) => void>());\n const hostRef = (tabId: string) => {\n let ref = hostRefs.current.get(tabId);\n if (!ref) {\n ref = (node) => {\n if (node) {\n hosts.current.set(tabId, node);\n void attachRef.current(tabId, node);\n } else {\n hosts.current.delete(tabId);\n hostRefs.current.delete(tabId);\n }\n };\n hostRefs.current.set(tabId, ref);\n }\n return ref;\n };\n\n // Fit the visible view to its panel and tell the shell its size.\n const fitActive = useCallback(() => {\n if (!activeId) return;\n const rec = views.current.get(activeId);\n if (!rec) return;\n const before = { cols: rec.view.cols, rows: rec.view.rows };\n const size = rec.view.fit();\n if (!size || (size.cols === before.cols && size.rows === before.rows && active && active.cols === size.cols && active.rows === size.rows)) return;\n if (resizeTimer.current) clearTimeout(resizeTimer.current);\n const id = activeId;\n resizeTimer.current = setTimeout(() => {\n deps.api.resize(id, size.cols, size.rows).catch(() => { /* the next fit retries */ });\n }, 100);\n }, [active, activeId, deps.api]);\n\n useEffect(() => {\n if (!shown || !activeId || !readyIds.has(activeId)) return;\n fitActive();\n const body = bodyRef.current;\n if (!body || typeof ResizeObserver === 'undefined') return;\n let frame = 0;\n const observer = new ResizeObserver(() => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(fitActive);\n });\n observer.observe(body);\n return () => {\n cancelAnimationFrame(frame);\n observer.disconnect();\n };\n }, [shown, activeId, readyIds, fitActive]);\n\n // Theme follows the app (explicit toggle or OS appearance).\n useEffect(() => watchThemeChanges(() => {\n for (const rec of views.current.values()) rec.view.setTheme(resolveTerminalTheme(rec.host));\n }), []);\n\n // -------------------------------------------------------------------------\n // The live stream (visible tab only)\n // -------------------------------------------------------------------------\n\n const applyPaste = useCallback((tabId: string) => {\n const pending = pendingPaste.current;\n if (!pending || pending.tabId !== tabId) return;\n const rec = views.current.get(tabId);\n if (!rec) return;\n pendingPaste.current = null;\n const text = pending.text.replace(/[\\r\\n]+$/, '');\n if (text.includes('\\n') && !rec.view.bracketedPaste()) {\n // Without bracketed paste a shell would RUN each line as it arrives.\n deps.writeClipboard(text).then(\n () => setNotice({ tone: 'info', text: 'That command has several lines, so it was copied instead: paste it with ⌘V.' }),\n () => setNotice({ tone: 'error', text: 'That command has several lines and could not be pasted safely.' }),\n );\n } else {\n rec.view.paste(text);\n }\n rec.view.focus();\n }, [deps]);\n\n useEffect(() => {\n if (!shown || !activeId || !readyIds.has(activeId)) {\n setStreamState(null);\n return;\n }\n const rec = views.current.get(activeId);\n if (!rec) return;\n const tabId = activeId;\n let firstOutput = true;\n const onFrame = (frame: VerseTerminalFrame) => {\n if (frame.type === 'output') {\n if (frame.seq <= rec.lastSeq) return;\n // A gap means the scrollback ring dropped frames this view never got:\n // start over from what the server still has rather than draw a torn screen.\n if (rec.lastSeq > 0 && frame.seq > rec.lastSeq + 1) rec.view.reset();\n rec.view.write(base64ToBytes(frame.dataBase64));\n rec.lastSeq = frame.seq;\n if (firstOutput) {\n firstOutput = false;\n if (pendingPaste.current?.tabId === tabId) setTimeout(() => applyPaste(tabId), 120);\n }\n return;\n }\n setList((prev) => {\n if (!prev) return prev;\n return {\n ...prev,\n tabs: prev.tabs.map((t) => {\n if (t.id !== tabId) return t;\n if (frame.type === 'title') return t.title === frame.title ? t : { ...t, title: frame.title };\n return { ...t, exited: { code: frame.code, signal: frame.signal, at: new Date().toISOString() } };\n }),\n };\n });\n };\n const stream = deps.openStream(tabId, () => rec.lastSeq, {\n onFrame,\n onState: (state) => {\n if (!mounted.current) return;\n setStreamState(state);\n if (state === 'gone') void refresh();\n },\n });\n // An existing tab that already has output can take a paste right away.\n if (pendingPaste.current?.tabId === tabId && rec.lastSeq > 0) setTimeout(() => applyPaste(tabId), 0);\n return () => stream.close();\n }, [shown, activeId, readyIds, deps, refresh, applyPaste]);\n\n // -------------------------------------------------------------------------\n // Requests from the dock\n // -------------------------------------------------------------------------\n\n const handleRequest = useCallback(async (req: TerminalRequest) => {\n const root = req.root ?? active?.root ?? roots[0];\n const wantsNew = req.newTab === true || Boolean(req.appId) || Boolean(req.devServerId);\n let target: VerseTerminalTab | null = null;\n if (!wantsNew) {\n target = (active && !active.exited && (!req.root || active.root === req.root) ? active : null)\n ?? tabs.find((t) => !t.exited && (!req.root || t.root === req.root)) ?? null;\n }\n if (target) {\n setActiveId(target.id);\n } else {\n target = await createTab({\n ...(root ? { root } : {}),\n ...(req.appId ? { appId: req.appId } : {}),\n ...(req.via ? { via: req.via } : {}),\n ...(req.model ? { model: req.model } : {}),\n ...(req.devServerId ? { devServerId: req.devServerId } : {}),\n });\n }\n if (!target) return;\n if (req.paste) {\n pendingPaste.current = { tabId: target.id, text: req.paste };\n const rec = views.current.get(target.id);\n if (rec && rec.lastSeq > 0) applyPaste(target.id);\n } else {\n views.current.get(target.id)?.view.focus();\n }\n }, [active, applyPaste, createTab, roots, tabs]);\n\n useEffect(() => {\n if (!request || !list || request.nonce <= lastHandledNonce) return;\n lastHandledNonce = request.nonce;\n autoCreated.current = true;\n if (!list.available) return;\n void handleRequest(request);\n }, [request, list, handleRequest]);\n\n // Focus the terminal when its tab becomes the visible one.\n useEffect(() => {\n if (!shown || !activeId || !readyIds.has(activeId)) return;\n views.current.get(activeId)?.view.focus();\n }, [shown, activeId, readyIds]);\n\n // -------------------------------------------------------------------------\n // Header actions\n // -------------------------------------------------------------------------\n\n const sendSelection = () => {\n if (!activeId) return;\n const text = views.current.get(activeId)?.view.getSelection() ?? '';\n if (!text.trim()) return;\n onSendToChat(fenceSelection(text));\n };\n\n const toggleScreenReader = () => {\n const next = !screenReader;\n setScreenReader(next);\n writeScreenReaderPref(next);\n for (const rec of views.current.values()) rec.view.setScreenReaderMode(next);\n };\n\n const openExternal = async () => {\n try {\n await deps.api.openExternal(sessionId, active?.root ?? roots[0]);\n setNotice({ tone: 'info', text: 'Opened in Terminal.' });\n } catch (err) {\n setNotice({ tone: 'error', text: errorText(err, 'Terminal could not be opened.') });\n }\n };\n\n const openByClick = (opts: { root?: string }) => {\n manualOpen.current = true;\n void createTab(opts).finally(() => { manualOpen.current = false; });\n };\n\n const onNewTabClick = () => {\n openByClick(active?.root ? { root: active.root } : {});\n };\n\n // Tabs: ←/→ move and activate, Home/End jump (WAI-ARIA tabs, automatic activation).\n const onTabKeyDown = (event: ReactKeyboardEvent<HTMLButtonElement>, index: number) => {\n let next = -1;\n if (event.key === 'ArrowRight') next = (index + 1) % tabs.length;\n else if (event.key === 'ArrowLeft') next = (index - 1 + tabs.length) % tabs.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = tabs.length - 1;\n if (next < 0) return;\n event.preventDefault();\n const tab = tabs[next]!;\n setActiveId(tab.id);\n tabRefs.current.get(tab.id)?.focus();\n };\n\n // -------------------------------------------------------------------------\n // Render\n // -------------------------------------------------------------------------\n\n if (!list) {\n if (loadError) {\n return (\n <div className={styles.pane}>\n <EmptyState compact tone=\"error\" title=\"Terminal is not reachable\" body={loadError}\n action={<Button size=\"sm\" variant=\"subtle\" onClick={() => void refresh()}>Try again</Button>} />\n </div>\n );\n }\n return (\n <div className={styles.pane} aria-busy=\"true\">\n {/* The strip's row is held from the first frame so the chrome does not drop in under the dock's tabs. */}\n <div className={styles.strip} aria-hidden=\"true\" />\n <div className={styles.loading}>\n <SkeletonLine width=\"40%\" />\n <SkeletonLine width=\"70%\" />\n </div>\n </div>\n );\n }\n\n if (!list.available) {\n return (\n <div className={styles.pane}>\n <EmptyState\n compact\n icon={<TerminalGlyph size={20} />}\n title=\"Terminal needs the desktop app\"\n body=\"This Verse server has no built-in terminal. Open the project in Terminal instead, or use the Ashlr desktop app.\"\n action={deps.platform === 'mac' ? (\n <Button size=\"sm\" variant=\"subtle\" icon={<IconExternalLink />} onClick={() => void openExternal()}>Open in Terminal</Button>\n ) : undefined}\n />\n {notice ? <p className={styles.inlineNotice} role={notice.tone === 'error' ? 'alert' : 'status'}>{notice.text}</p> : null}\n </div>\n );\n }\n\n const canChooseRoot = roots.length > 1;\n const newTabChord = findCommand('dock.terminal-new')?.keys[0];\n const newTabKey = newTabChord ? formatChord(newTabChord, deps.platform) : null;\n // Before a chat's first shell is open — the automatic one on first sight,\n // or one a dock request asked for — the pane shows it opening instead of\n // flashing \"No terminal open\" for the moment the request takes.\n const opening = tabs.length === 0 && !viewFailed && (!autoCreated.current || (creating && !manualOpen.current));\n // The folder the header names: the visible tab's (or, for the render before\n // the active tab is chosen, the one that will be), or while the first shell\n // opens the chat's primary folder, where it opens — so the row does not\n // appear, or change, when the tab lands.\n const headerRoot = active?.root ?? tabs.at(-1)?.root ?? (opening ? roots[0] ?? null : null);\n\n return (\n <div className={styles.pane} data-compact={compact || undefined}>\n <div className={styles.strip}>\n <div className={styles.tabs} role=\"tablist\" aria-label=\"Terminals\">\n {tabs.map((tab, index) => {\n const selected = tab.id === activeId;\n const unseen = !selected && (seen.get(tab.id) ?? tab.createdAt) < tab.lastActivityAt;\n return (\n <div key={tab.id} className={styles.tab} data-selected={selected || undefined} role=\"presentation\">\n <button\n ref={(node) => { if (node) tabRefs.current.set(tab.id, node); else tabRefs.current.delete(tab.id); }}\n type=\"button\"\n role=\"tab\"\n id={`terminal-tab-${tab.id}`}\n aria-selected={selected}\n aria-controls={`terminal-panel-${tab.id}`}\n tabIndex={selected ? 0 : -1}\n className={styles.tabButton}\n title={`${tab.title} — ${tab.root}`}\n onClick={() => setActiveId(tab.id)}\n onKeyDown={(event) => onTabKeyDown(event, index)}\n >\n <span className={styles.tabTitle}>{tab.title}</span>\n {tab.exited ? <span className={styles.tabExited}>exited</span> : null}\n {unseen && !tab.exited ? <span className={styles.unseen} aria-label=\"new output\" role=\"img\" /> : null}\n </button>\n <button type=\"button\" className={styles.tabClose} aria-label={`Close terminal ${tab.title}`}\n title=\"Close terminal\" onClick={() => void closeTab(tab)}>\n <IconX size={12} />\n </button>\n </div>\n );\n })}\n </div>\n <div className={styles.stripActions}>\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconPlus />} aria-label=\"New terminal tab\"\n title={newTabKey ? `New terminal tab (${newTabKey})` : 'New terminal tab'}\n busy={creating} onClick={onNewTabClick} />\n {canChooseRoot ? (\n <IconButton variant=\"ghost\" size=\"sm\" icon={<ChevronDownGlyph />} aria-label=\"New terminal in…\" aria-haspopup=\"menu\"\n aria-expanded={rootMenu !== null} title=\"Choose the folder\"\n onClick={(event) => setRootMenu({ anchor: anchorBelow(event.currentTarget), from: event.currentTarget })} />\n ) : null}\n </div>\n </div>\n\n {headerRoot !== null ? (\n <div className={`${chrome.header} ${styles.header}`}>\n {/* The folder's NAME; the full path (a home or temp path) is the tooltip. */}\n <span className={`${chrome.title} ${styles.cwd}`} title={headerRoot}>{projectName(headerRoot)}</span>\n <span className={styles.headerStatus} role=\"status\" aria-live=\"polite\">\n {streamState === 'reconnecting' ? 'Reconnecting…' : streamState === 'expired' ? 'Session expired — reload to reconnect' : copied ? 'Copied' : ''}\n </span>\n <div className={chrome.actions}>\n <Button variant=\"ghost\" size=\"sm\" icon={<IconSend />} disabled={!hasSelection} aria-label=\"Send selection to chat\"\n title={hasSelection ? 'Send the selected text to the chat as a code block' : 'Select text in the terminal first'}\n onClick={sendSelection}>\n {compact ? null : 'Send to chat'}\n </Button>\n <IconButton variant=\"ghost\" size=\"sm\" icon={<ScreenReaderGlyph />} aria-label=\"Screen reader mode\" aria-pressed={screenReader}\n title={screenReader ? 'Screen reader mode is on' : 'Screen reader mode'} onClick={toggleScreenReader} />\n {deps.platform === 'mac' ? (\n <IconButton variant=\"ghost\" size=\"sm\" icon={<IconExternalLink />} aria-label=\"Open in Terminal.app\"\n title=\"Open this folder in Terminal.app\" onClick={() => void openExternal()} />\n ) : null}\n </div>\n </div>\n ) : null}\n\n {notice ? (\n <div className={styles.notice} data-tone={notice.tone} role={notice.tone === 'error' ? 'alert' : 'status'}>\n <span>{notice.text}</span>\n <button type=\"button\" className={styles.noticeClose} aria-label=\"Dismiss\" title=\"Dismiss\" onClick={() => setNotice(null)}>\n <IconX size={12} />\n </button>\n </div>\n ) : null}\n\n <div className={styles.body} ref={bodyRef}>\n {viewFailed ? (\n <EmptyState compact tone=\"error\" title=\"The terminal could not load\" body=\"The rest of the chat still works.\"\n action={<Button size=\"sm\" variant=\"subtle\" onClick={() => {\n setViewFailed(false);\n for (const [id, host] of hosts.current) void attachView(id, host);\n }}>Try again</Button>} />\n ) : null}\n {opening ? (\n <div className={styles.loading} role=\"status\" aria-label=\"Opening a shell\">\n <SkeletonLine width=\"30%\" />\n </div>\n ) : null}\n {tabs.length === 0 && !viewFailed && !opening ? (\n <EmptyState compact icon={<TerminalGlyph size={20} />} title=\"No terminal open\"\n body={`Click New terminal${newTabKey ? ` or press ${newTabKey}` : ''} to open a login shell in this chat's folder.${otherChats > 0 ? ` ${otherChats} ${otherChats === 1 ? 'terminal is' : 'terminals are'} open in other chats.` : ''}`}\n action={<Button size=\"sm\" variant=\"subtle\" icon={<IconPlus />} busy={creating} onClick={onNewTabClick}>New terminal</Button>} />\n ) : null}\n {tabs.map((tab) => {\n const selected = tab.id === activeId;\n return (\n <div\n key={tab.id}\n id={`terminal-panel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`terminal-tab-${tab.id}`}\n className={styles.panel}\n hidden={!selected}\n >\n <div className={styles.viewport}>\n <div className={styles.host} ref={hostRef(tab.id)} data-testid={`terminal-host-${tab.id}`} />\n {!readyIds.has(tab.id) && !viewFailed ? (\n <div className={styles.viewLoading} aria-hidden=\"true\"><SkeletonLine width=\"30%\" /></div>\n ) : null}\n </div>\n {tab.exited ? (\n <div className={styles.exitBar} role=\"status\">\n <span>\n {tab.exited.signal && tab.exited.code === null\n ? `Shell ended (${tab.exited.signal}).`\n : `Shell exited${tab.exited.code === null ? '' : ` with code ${tab.exited.code}`}.`}\n </span>\n <Button size=\"sm\" variant=\"subtle\" onClick={() => void restartTab(tab)}>Restart</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => void closeTab(tab)}>Close</Button>\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n\n {rootMenu ? (\n <ActionMenu\n label=\"New terminal in\"\n anchor={rootMenu.anchor}\n returnFocus={rootMenu.from}\n onClose={() => setRootMenu(null)}\n items={roots.map((root) => ({\n id: root,\n label: projectName(root),\n description: root,\n onSelect: () => { openByClick({ root }); },\n }))}\n />\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-B1njb2Cr.css","assets/VoiceInput-k3vB_FxV.js","assets/web-speech-q3gDv2ax.js","assets/palette-handoff-XL2WWc9I.js","assets/global-1SED_aTT.css","assets/RouteErrorBoundary-DdxhTdZ6.css","assets/SkipToContent-c02H5dmz.css","assets/VerseConsoleApp-BmckthwC.css","assets/VoiceInput-Do-EiHxj.css","assets/CompareDialog-PVqv0Tx9.js","assets/MessageMarkdown-CS0mAtSs.js","assets/Transcript.module-DD0MFIIy.js","assets/multimodel.module-ZpbCvfp1.js","assets/Dialog-tQ8kFulD.css","assets/Transcript-DZ96MnR7.css","assets/multimodel-CqUj4iU0.css","assets/LaunchDialog-CrPEf652.js","assets/Button-DrnKsvnQ.css","assets/EmptyState-B3YUPGaa.css","assets/CommandWorkflowPicker-COVyeer0.js","assets/playbooks-queries-X7NGzpIn.js","assets/CommandWorkflowForm-Bz3PuZXH.js","assets/Input-Cpn9uYj2.js","assets/Playbooks.module-Due8zOPq.js","assets/Input-BQ3PR065.css","assets/Playbooks-DhLVI9YG.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,o as n,s as r,t as i}from"./index-BC5Uslm5.js";import{C as a,D as o,M as s,a as c,i as l,t as u,w as d}from"./global-w7KDTTi0.js";import{t as f}from"./focus-trap-BZeH0rVB.js";import{t as p}from"./Dialog-DDHg9cuT.js";import{i as m}from"./SkipToContent-BynsXs9i.js";import{Bt as h,Gt as g,Vt as _,X as v,g as y,gt as b}from"./VerseConsoleApp-DjPpZLo1.js";import{M as x,at as S,ct as C,j as ee,lt as w,nt as T,ot as E,rt as D,st as O,tt as k}from"./VerseShared-Bf-XTHCh.js";import{b as te}from"./verse-model-DAOz9LrY.js";import{i as ne}from"./verse-store-DAqqNIyD.js";import{n as re}from"./format-V6IiIMAL.js";import{n as ie,t as A}from"./Button-CstSJwha.js";import{n as ae,t as oe}from"./ActionMenu-Z14OhnFI.js";import{s as se}from"./tool-semantics-xF0Fw2Ck.js";import{T as ce,a as le,b as ue,i as de,l as fe,o as pe,s as me,v as he,x as ge}from"./icons-C3G-y5j2.js";import{c as _e}from"./verse-icons-vSkflmRB.js";import{s as ve}from"./composer-queries-D1H4E0Ye.js";import{t as ye}from"./EmptyState-CGVr0VO2.js";import{t as be}from"./ansi-B9NbRwnU.js";import{t as xe}from"./useVerseTranscript-BN_fMz6x.js";import{t as j}from"./agent-tools-client-DmJq7zlr.js";import{n as Se}from"./chat-pane-data-CfbpeAYX.js";import{t as Ce}from"./multimodel-flows-DOHsEKUG.js";import{n as M,r as we,t as Te}from"./ask-seat-O60AydbV.js";import{f as Ee,r as De}from"./terminal-icons-Dx6neM-J.js";import{a as Oe,n as ke,o as Ae,t as je}from"./terminal-client-CCSvMeEv.js";import{i as Me,n as Ne,o as Pe,r as Fe,s as Ie}from"./terminal-view-BSieiQvi.js";import{i as Le}from"./useAutoSeat-Dpbn0XUv.js";import{t as N}from"./CommandPalette.module-DqfCnLbZ.js";var P=e(r(),1),F=t(),I={agentBadge:`_agentBadge_1qgqm_10`,pulse:`_pulse_1qgqm_1`,stickyRun:`_stickyRun_1qgqm_42`,stickyCommand:`_stickyCommand_1qgqm_60`,stickyMeta:`_stickyMeta_1qgqm_69`,bar:`_bar_1qgqm_75`,barLabel:`_barLabel_1qgqm_88`,barSpacer:`_barSpacer_1qgqm_89`,chip:`_chip_1qgqm_91`,chipCode:`_chipCode_1qgqm_109`,chipVerb:`_chipVerb_1qgqm_116`,fixes:`_fixes_1qgqm_119`,fixRow:`_fixRow_1qgqm_129`,fixWhy:`_fixWhy_1qgqm_135`,listTools:`_listTools_1qgqm_142`,runningTop:`_runningTop_1qgqm_160`,selected:`_selected_1qgqm_167`,bookmarked:`_bookmarked_1qgqm_172`,filterRow:`_filterRow_1qgqm_174`,filterInput:`_filterInput_1qgqm_182`,filterCount:`_filterCount_1qgqm_196`,launchList:`_launchList_1qgqm_200`,launchItem:`_launchItem_1qgqm_208`,launchHead:`_launchHead_1qgqm_216`,launchName:`_launchName_1qgqm_221`,launchPanes:`_launchPanes_1qgqm_222`,launchError:`_launchError_1qgqm_230`},L=[`active`,`injected`,`off`];function Re(e){let t=e;return!!t&&typeof t==`object`&&typeof t.id==`string`&&/^b-\d+$/.test(t.id)&&typeof t.command==`string`&&(t.state===`running`||t.state===`done`)&&typeof t.startSeq==`number`&&typeof t.ordinal==`number`&&typeof t.startedAt==`string`}function R(e){let t=``;for(let n of e.split(`
|
|
3
|
+
`))n.startsWith(`data:`)&&(t+=n.slice(n.startsWith(`data: `)?6:5));return t}function ze(e){let t=Pe(e);if(t)return t;let n=R(e);if(!n)return null;let r;try{r=JSON.parse(n)}catch{return null}return Be(r)}function Be(e){let t=e;return!t||typeof t!=`object`?null:t.type===`block`&&Re(t.block)?{type:`block`,block:t.block}:t.type===`cwd`&&typeof t.cwd==`string`?{type:`cwd`,cwd:t.cwd}:t.type===`integration`&&L.includes(t.state)?{type:`integration`,state:t.state}:null}function Ve(e){return Math.min(250*2**e,8e3)}var He=(e,t,n,r={})=>{let i=r.fetch??((e,t)=>fetch(e,t)),a=r.renew??o,s=r.proof??d,c=r.backoffMs??Ve,l=!1,u=null,f=null,p=0,m=!1,h=e=>{(!l||e===`closed`)&&n.onState?.(e)},g=()=>{l||(h(`reconnecting`),f=setTimeout(()=>{f=null,_()},c(p++)))};async function _(){if(l)return;u=new AbortController;let r;try{r=await i(Ae(e,t()),{method:`GET`,credentials:`same-origin`,headers:{"x-ashlr-read-client":s(),Accept:`text/event-stream`},signal:u.signal,cache:`no-store`})}catch{g();return}if(l)return;if(r.status===404){h(`gone`),l=!0;return}if(r.status===401){if(!m&&await a().catch(()=>!1)){m=!0,_();return}h(`expired`),l=!0;return}if(!r.ok||!r.body){g();return}m=!1,h(`open`);let o=r.body.getReader(),c=new TextDecoder,d=``;try{for(;;){let{value:e,done:t}=await o.read();if(t)break;p=0,d+=c.decode(e,{stream:!0});let r;for(;(r=d.indexOf(`
|
|
4
|
+
|
|
5
|
+
`))!==-1;){let e=d.slice(0,r);d=d.slice(r+2);let t=ze(e);t&&!l&&n.onFrame(t)}}}catch{}g()}return h(`connecting`),_(),{close(){l||(l=!0,f&&clearTimeout(f),u?.abort(),n.onState?.(`closed`))}}};function Ue(e){let t=R(e);if(!t)return null;let n;try{n=JSON.parse(t)}catch{return null}let r=n;if(!r||typeof r!=`object`||typeof r.tab!=`string`||!/^t-[a-z0-9]{1,32}$/.test(r.tab))return null;let i=r.tab;if(r.type===`gone`)return{tab:i,frame:{type:`gone`}};let a=Pe(`data: ${t}`);if(a)return{tab:i,frame:a};let o=Be(r);return o?{tab:i,frame:o}:null}function z(e){let t=e.map(([e,t])=>Number.isSafeInteger(t)&&t>0?`${e}:${t}`:e).join(`,`);return`${w}?tabs=${encodeURIComponent(t)}`}function We(e={}){let t=e.fetch??((e,t)=>fetch(e,t)),n=e.renew??o,r=e.proof??d,i=e.backoffMs??Ve,a=e.batch??(e=>{setTimeout(e,0)}),s=e.openSingle??((t,n,r)=>He(t,n,r,e)),c=new Map,l=!1,u=!1,f=null,p=0,m=null,h=null,g=!1,_=0,v=!1,y=(e,t)=>{if(e.state!==t){e.state=t;try{e.handlers.onState?.(t)}catch{}}},b=()=>[...c.keys()].sort().join(`,`);function x(){p+=1,m=null,f?.abort(),f=null,h&&=(clearTimeout(h),null)}function S(){u=!0,x();for(let[e,t]of c)t.single||=s(e,t.after,t.handlers)}function C(e){if(!(l||e!==p)){m=null;for(let e of c.values())y(e,`reconnecting`);h=setTimeout(()=>{h=null,e===p&&E()},i(_++))}}function ee(){if(g=!1,l||u)return;let e=b();if(e===``){x();return}e!==m&&E()}function w(){g||l||(g=!0,a(ee))}function T(e){let t=c.get(e.tab);if(t){if(e.frame.type===`gone`){c.delete(e.tab),y(t,`gone`);return}try{t.handlers.onFrame(e.frame)}catch{}}}async function E(){if(x(),l||u||c.size===0)return;let e=p,i=[...c.keys()].sort();m=i.join(`,`);let a=new AbortController;f=a;for(let e of c.values())e.state!==`open`&&y(e,`connecting`);let o;try{o=await t(z(i.map(e=>[e,c.get(e).after()])),{method:`GET`,credentials:`same-origin`,headers:{"x-ashlr-read-client":r(),Accept:`text/event-stream`},signal:a.signal,cache:`no-store`})}catch{C(e);return}if(l||e!==p){try{o.body?.cancel().catch(()=>{})}catch{}return}if(o.status===404||o.status===400){S();return}if(o.status===401){if(!v&&await n().catch(()=>!1)){v=!0,e===p&&E();return}for(let e of c.values())y(e,`expired`);x();return}if(!o.ok||!o.body){C(e);return}v=!1;for(let e of c.values())y(e,`open`);let s=o.body.getReader(),d=new TextDecoder,h=``;try{for(;;){let{value:t,done:n}=await s.read();if(n||e!==p)break;_=0,h+=d.decode(t,{stream:!0});let r;for(;e===p&&(r=h.indexOf(`
|
|
6
|
+
|
|
7
|
+
`))!==-1;){let e=h.slice(0,r);h=h.slice(r+2);let t=Ue(e);t&&T(t)}}}catch{}if(!(e!==p||l)){if(c.size===0){m=null;return}C(e)}}return{subscribe(e,t,n){let r={after:t,handlers:n,single:null,state:null};c.get(e)?.single?.close(),c.set(e,r),l?y(r,`closed`):u?r.single=s(e,t,n):(y(r,`connecting`),w());let i=!1;return{close(){i||(i=!0,c.get(e)===r&&(c.delete(e),r.single?r.single.close():y(r,`closed`),w()))}}},tabs:()=>[...c.keys()],close(){if(!l){l=!0,x();for(let e of c.values())e.single?e.single.close():y(e,`closed`);c.clear()}}}}var B=null,V=(e,t,n)=>(B??=We(),B.subscribe(e,t,n)),Ge=[`black`,`red`,`green`,`yellow`,`blue`,`magenta`,`cyan`,`white`];function H(e,t){let n=Ge[e];return`var(--term-${t?`bright-`:``}${n})`}function Ke(e){if(e<8)return H(e,!1);if(e<16)return H(e-8,!0);if(e<232){let t=e-16,n=[0,95,135,175,215,255];return`rgb(${n[Math.floor(t/36)]}, ${n[Math.floor(t/6)%6]}, ${n[t%6]})`}let t=8+(e-232)*10;return`rgb(${t}, ${t}, ${t})`}function qe(e){return Math.max(0,Math.min(255,Number.isFinite(e)?Math.round(e):0))}function Je(e,t){let n={...e},r=t.length===0?[0]:t;for(let e=0;e<r.length;e++){let t=r[e];if(t===0)for(let e of Object.keys(n))delete n[e];else if(t===1)n.bold=!0;else if(t===2)n.dim=!0;else if(t===3)n.italic=!0;else if(t===4)n.underline=!0;else if(t===7)n.inverse=!0;else if(t===9)n.strike=!0;else if(t===22)delete n.bold,delete n.dim;else if(t===23)delete n.italic;else if(t===24)delete n.underline;else if(t===27)delete n.inverse;else if(t===29)delete n.strike;else if(t>=30&&t<=37)n.fg=H(t-30,!1);else if(t===39)delete n.fg;else if(t>=40&&t<=47)n.bg=H(t-40,!1);else if(t===49)delete n.bg;else if(t>=90&&t<=97)n.fg=H(t-90,!0);else if(t>=100&&t<=107)n.bg=H(t-100,!0);else if(t===38||t===48){let i=t===38?`fg`:`bg`;r[e+1]===5&&r[e+2]!==void 0?(n[i]=Ke(qe(r[e+2])),e+=2):r[e+1]===2&&(n[i]=`rgb(${qe(r[e+2])}, ${qe(r[e+3])}, ${qe(r[e+4])})`,e+=4)}}return n}function Ye(e){if(!e.includes(`\r`))return e;let t=e.split(`\r`);for(let e=t.length-1;e>=0;e--)if(t[e].replace(U,``).trim().length>0)return t[e];return``}var U=/\x1b\[[0-?]*[ -/]*[@-~]|\x1b\][\s\S]*?(?:\x07|\x1b\\)/g,Xe=/\x1b\[([0-?]*)([ -/]*)([@-~])|\x1b\][\s\S]*?(?:\x07|\x1b\\|$)|\x1b[()][A-Za-z0-9]|\x1b[^[\]]/g;function W(e){let t=(e.length>2e5?e.slice(-2e5):e).replace(/\r\n/g,`
|
|
8
|
+
`).split(`
|
|
9
|
+
`).map(Ye).join(`
|
|
10
|
+
`),n=[],r={},i=0,a=e=>{let t=e.replace(/[^\n\t]\x08/g,``).replace(/[\x00-\x08\x0b-\x1f\x7f]/g,``);if(!t)return;let i=n[n.length-1];i&&G(i.style,r)?i.text+=t:n.push({text:t,style:r})};for(let e of t.matchAll(Xe))if(a(t.slice(i,e.index)),i=e.index+e[0].length,e[3]===`m`&&e[2]===``){let t=(e[1]??``).split(/[;:]/).filter(e=>e!==``).map(e=>Number.parseInt(e,10)).filter(e=>Number.isFinite(e));r=Je(r,t)}a(t.slice(i));let o=n[n.length-1];return o&&(o.text=o.text.replace(/\s+$/,``),o.text||n.pop()),n}function G(e,t){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>e[n]===t[n])}function Ze(e){let t={},n=e.fg,r=e.bg;e.inverse&&([n,r]=[r??`var(--term-bg)`,n??`var(--term-fg)`]),n&&(t.color=n),r&&(t.backgroundColor=r),e.bold&&(t.fontWeight=`600`),e.dim&&(t.opacity=`0.7`),e.italic&&(t.fontStyle=`italic`);let i=[e.underline?`underline`:``,e.strike?`line-through`:``].filter(Boolean).join(` `);return i&&(t.textDecoration=i),t}function Qe(e,t,n=500){let r=e.findIndex(e=>e.id===t.id);if(r>=0){let n=e.slice();return n[r]=t,n}let i=[...e,t];return i.sort((e,t)=>$e(e.id)-$e(t.id)),i.length>n?i.slice(i.length-n):i}function $e(e){let t=Number.parseInt(e.slice(2),10);return Number.isFinite(t)?t:0}function et(e){return{id:e.id,source:`terminal`,command:e.command,cwd:e.cwd,startedAt:e.startedAt,durationMs:e.durationMs,exitCode:e.exitCode,failed:e.exitCode!==null&&e.exitCode!==0,running:e.state===`running`,output:null,truncated:e.truncated||e.evicted,fullscreen:e.fullscreen,...e.localUrls&&e.localUrls.length>0?{localUrls:e.localUrls}:{}}}function tt(e,t){return`${e}:${t}`}function K(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function q(e){let t=[];for(let n of e){if(n.kind!==`tool`)continue;let e=se({name:n.name,input:n.input,result:n.result});if(!e.command)continue;let r=K(n.input),i=typeof r?.cwd==`string`?r.cwd:typeof r?.workdir==`string`?r.workdir:null,a=n.result===null,o=e.command.exitCode;t.push({id:n.toolUseId,source:`agent`,command:e.command.command,cwd:i,startedAt:n.at,durationMs:n.durationMs,exitCode:o,failed:n.result?.isError===!0||o!==null&&o!==0,running:a,output:n.result?.output??null,truncated:!1,fullscreen:!1,tool:n.name})}return t}function nt(e){if(e===null||!Number.isFinite(e))return``;if(e<1e3)return`${Math.max(0,Math.round(e))} ms`;if(e<6e4)return`${(e/1e3).toFixed(+(e<1e4))} s`;let t=Math.floor(e/6e4),n=Math.round(e%6e4/1e3);return t<60?n>0?`${t} m ${n} s`:`${t} m`:`${Math.floor(t/60)} h ${t%60} m`}function J(e){return e.running?{tone:`running`,label:`Running`}:e.exitCode===0?{tone:`ok`,label:`Exit 0`}:e.exitCode===null?e.failed?{tone:`error`,label:`Failed`}:{tone:`unknown`,label:`Done`}:{tone:`error`,label:`Exit ${e.exitCode}`}}function rt(e){let t=Math.max(0,...Array.from(e.matchAll(/`+/g),e=>e[0].length));return"`".repeat(Math.max(3,t+1))}function it(e){let t=e.replace(/\s+$/,``),n=!1,r=t.split(`
|
|
11
|
+
`);if(r.length>200&&(t=r.slice(-200).join(`
|
|
12
|
+
`),n=!0),t.length>12e3){t=t.slice(-12e3);let e=t.indexOf(`
|
|
13
|
+
`);e>=0&&e<200&&(t=t.slice(e+1)),n=!0}return{text:t,cut:n}}function at(e,t,n,r){let{text:i,cut:a}=it(n),o=`$ ${t}${i?`\n${i}`:``}`,s=rt(o),c=e.running?`still running`:e.exitCode===null?e.failed?`failed`:`finished`:`exit ${e.exitCode}`,l=e.cwd?` in \`${e.cwd}\``:``,u=e.source===`agent`?`An agent ran this command`:`I ran this in my terminal`,d=[];return r===`explain`?d.push(`${u}${l} (${c}). Explain what went wrong and how to fix it — propose the fix, don't run anything yet.`):d.push(`${u}${l} (${c}):`),d.push(``,`${s}console`,o,s),a&&d.push(``,`_(output cut to its last lines)_`),d.join(`
|
|
14
|
+
`)}var Y={pattern:``,regex:!1,invert:!1,caseSensitive:!1},ot=/\x1b\[[0-9;:]*m/g;function st(e,t){let n=e.split(`
|
|
15
|
+
`);if(!t.pattern)return{text:e,shown:n.length,total:n.length,error:null};let r;if(t.regex){let i;try{i=new RegExp(t.pattern,t.caseSensitive?``:`i`)}catch(t){return{text:e,shown:n.length,total:n.length,error:t instanceof Error?t.message:`invalid regular expression`}}r=e=>i.test(e)}else{let e=t.caseSensitive?t.pattern:t.pattern.toLowerCase();r=n=>(t.caseSensitive?n:n.toLowerCase()).includes(e)}let i=n.filter(e=>r(e.replace(ot,``))!==t.invert);return{text:i.join(`
|
|
16
|
+
`),shown:i.length,total:n.length,error:null}}var ct={ids:new Set,anchor:null};function lt(e,t,n,r){if(r.range){let i=e.anchor===null?-1:t.indexOf(e.anchor),a=t.indexOf(n);if(a<0)return e;if(i<0)return{ids:new Set([n]),anchor:n};let[o,s]=i<=a?[i,a]:[a,i],c=new Set(r.toggle?e.ids:[]);for(let e of t.slice(o,s+1))c.add(e);return{ids:c,anchor:e.anchor}}if(r.toggle){let t=new Set(e.ids);return t.has(n)?t.delete(n):t.add(n),{ids:t,anchor:n}}return null}function ut(e,t){let n=new Set(t);return[...e.ids].every(e=>n.has(e))&&(e.anchor===null||n.has(e.anchor))?e:{ids:new Set([...e.ids].filter(e=>n.has(e))),anchor:e.anchor!==null&&n.has(e.anchor)?e.anchor:null}}function dt(e,t){if(e.length===1)return at(e[0].block,e[0].command,e[0].output,t);let n=e.some(({block:e})=>e.failed||e.exitCode!==null&&e.exitCode!==0),r=[t===`explain`?`I ran these ${e.length} commands in my terminal${n?` and something failed`:``}. Explain what went wrong and how to fix it — propose the fix, don't run anything yet.`:`I ran these ${e.length} commands in my terminal:`];for(let{block:t,command:n,output:i}of e){let{text:e,cut:a}=it(i.length>4e3?i.slice(-4e3):i),o=t.running?`still running`:t.exitCode===null?t.failed?`failed`:`finished`:`exit ${t.exitCode}`,s=`$ ${n}${e?`\n${e}`:``}`,c=rt(s);r.push(``,`${t.cwd?`In \`${t.cwd}\``:`Command`} (${o})${a||i.length>4e3?` — last lines only`:``}:`,`${c}console`,s,c)}return r.join(`
|
|
17
|
+
`)}var X=/^t-[a-z0-9]{1,32}$/,ft=/^b-\d{1,9}$/;function pt(e,t){return!X.test(e)||t&&!ft.test(t)?null:`verse://terminal/${e}${t?`/${t}`:``}`}function mt(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${String(t%60).padStart(2,`0`)}s`:`${Math.floor(n/60)}h ${String(n%60).padStart(2,`0`)}m`}function ht(e){return e.replace(/^https?:\/\//i,``).replace(/\/$/,``)}var gt=`ashlr.verse.terminal.bookmarks.v1`,_t=64;function vt(e){try{let t=e?.getItem(gt);if(!t)return{};let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n))X.test(e)&&Array.isArray(t)&&(r[e]=t.filter(e=>typeof e==`string`&&ft.test(e)));return r}catch{return{}}}function yt(e,t,n){let r=vt(e),i=r[t]??[],a=i.includes(n)?i.filter(e=>e!==n):[...i,n];a.length>0?(delete r[t],r[t]=a):delete r[t];let o=Object.keys(r);for(let e of o.slice(0,Math.max(0,o.length-_t)))delete r[e];try{e?.setItem(gt,JSON.stringify(r))}catch{}return r}var bt=`ashlr.verse.terminal.fixChips.v1`;function xt(e){try{return e?.getItem(bt)!==`0`}catch{return!0}}function St(e,t){try{e?.setItem(bt,t?`1`:`0`)}catch{}}function Ct({size:e=14,children:t}){return(0,F.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,children:t})}function wt({filled:e=!1,size:t}){return(0,F.jsx)(Ct,{...t?{size:t}:{},children:(0,F.jsx)(`path`,{d:`M8 2.2l1.75 3.55 3.9.57-2.82 2.75.67 3.88L8 11.12l-3.5 1.83.67-3.88L2.35 6.32l3.9-.57z`,fill:e?`currentColor`:`none`})})}function Tt({size:e}){return(0,F.jsxs)(Ct,{...e?{size:e}:{},children:[(0,F.jsx)(`path`,{d:`M2.75 3.75h10.5v7h-5.5l-3 2.5v-2.5h-2z`}),(0,F.jsx)(`path`,{d:`M6.6 5.9a1.45 1.45 0 1 1 1.9 1.38c-.35.12-.5.36-.5.72`}),(0,F.jsx)(`path`,{d:`M8 9.35v.05`})]})}function Et({size:e}){return(0,F.jsxs)(Ct,{...e?{size:e}:{},children:[(0,F.jsx)(`path`,{d:`M6.75 9.25l2.5-2.5`}),(0,F.jsx)(`path`,{d:`M7.5 4.75l1-1a2.47 2.47 0 0 1 3.5 3.5l-1 1`}),(0,F.jsx)(`path`,{d:`M8.5 11.25l-1 1a2.47 2.47 0 0 1-3.5-3.5l1-1`})]})}function Dt({size:e}){return(0,F.jsx)(Ct,{...e?{size:e}:{},children:(0,F.jsx)(`path`,{d:`M2.5 3.5h11l-4.25 5v4l-2.5-1.25V8.5z`})})}function Ot({size:e}){return(0,F.jsxs)(Ct,{...e?{size:e}:{},children:[(0,F.jsx)(`path`,{d:`M12.75 8a4.75 4.75 0 1 1-1.4-3.36`}),(0,F.jsx)(`path`,{d:`M12.25 2.5v2.5h-2.5`})]})}function kt({size:e}){return(0,F.jsxs)(Ct,{...e?{size:e}:{},children:[(0,F.jsx)(`rect`,{x:`1.75`,y:`2.75`,width:`12.5`,height:`10.5`,rx:`1.5`}),(0,F.jsx)(`path`,{d:`M1.75 5.75h12.5`})]})}function At({load:e,onPaste:t,askTargets:n,onAsk:r,onAskMore:i,variant:a,onDismiss:o}){let[s,c]=(0,P.useState)(e?{kind:`loading`}:{kind:`off`});(0,P.useEffect)(()=>{if(!e){c({kind:`off`});return}let t=!1;return c({kind:`loading`}),e().then(e=>{t||c({kind:`done`,suggestions:e.suggestions})},()=>{t||c({kind:`failed`})}),()=>{t=!0}},[e]);let l=s.kind===`done`?s.suggestions:[];if(n.length===0&&!i&&(s.kind===`off`||s.kind===`failed`||s.kind===`done`&&l.length===0))return null;let u=(0,F.jsxs)(F.Fragment,{children:[n.map(e=>(0,F.jsxs)(`button`,{type:`button`,className:I.chip,"data-kind":`ask`,onClick:()=>r(e.seatId),title:`Send this failed command and its output (secrets removed) to ${e.label}`,children:[`Ask `,e.label]},e.seatId)),i?(0,F.jsx)(`button`,{type:`button`,className:I.chip,"data-kind":`ask`,"aria-haspopup":`menu`,onClick:e=>i(e.currentTarget),title:`Ask another seat, or every ready seat side by side`,children:`Ask…`}):null]}),d=l.map(e=>(0,F.jsxs)(`button`,{type:`button`,className:I.chip,onClick:()=>t(e.command),title:`${e.why?`${e.why} — `:``}Paste at the prompt (it does not run until you press Enter)`,"aria-label":`Paste ${e.command}`,children:[(0,F.jsx)(`span`,{className:I.chipCode,children:e.command}),(0,F.jsx)(`span`,{className:I.chipVerb,"aria-hidden":`true`,children:`Paste`})]},e.command));return a===`bar`?(0,F.jsxs)(`div`,{className:I.bar,role:`group`,"aria-label":`Fix this error`,children:[(0,F.jsx)(`span`,{className:I.barLabel,children:s.kind===`loading`?`Looking for a fix…`:l.length>0?`Try:`:`Fix it:`}),d,u,(0,F.jsx)(`span`,{className:I.barSpacer}),o?(0,F.jsx)(`button`,{type:`button`,className:I.chip,"aria-label":`Dismiss fix suggestions`,title:`Dismiss`,onClick:o,children:(0,F.jsx)(ce,{size:10})}):null]}):(0,F.jsxs)(`div`,{className:I.fixes,role:`group`,"aria-label":`Fix this error`,children:[s.kind===`loading`?(0,F.jsx)(`span`,{role:`status`,children:`Looking for a fix with the local model…`}):null,l.map((e,t)=>(0,F.jsxs)(`div`,{className:I.fixRow,children:[d[t],e.why?(0,F.jsx)(`span`,{className:I.fixWhy,children:e.why}):null]},e.command)),n.length>0||i?(0,F.jsx)(`div`,{className:I.fixRow,children:u}):null]})}var Z={panel:`_panel_mgkmu_13`,loading:`_loading_mgkmu_85`,strip:`_strip_mgkmu_94`,tabs:`_tabs_mgkmu_103`,tab:`_tab_mgkmu_103`,tabButton:`_tabButton_mgkmu_135`,tabClose:`_tabClose_mgkmu_152`,iconBtn:`_iconBtn_mgkmu_153`,blockHead:`_blockHead_mgkmu_154`,noticeClose:`_noticeClose_mgkmu_155`,tabTitle:`_tabTitle_mgkmu_160`,tabMeta:`_tabMeta_mgkmu_166`,unseen:`_unseen_mgkmu_174`,stripActions:`_stripActions_mgkmu_206`,header:`_header_mgkmu_217`,cwd:`_cwd_mgkmu_229`,headerStatus:`_headerStatus_mgkmu_241`,headerActions:`_headerActions_mgkmu_248`,segmented:`_segmented_mgkmu_257`,notice:`_notice_mgkmu_155`,body:`_body_mgkmu_318`,group:`_group_mgkmu_328`,leaf:`_leaf_mgkmu_345`,viewport:`_viewport_mgkmu_372`,voiceSlot:`_voiceSlot_mgkmu_381`,host:`_host_mgkmu_393`,viewLoading:`_viewLoading_mgkmu_408`,exitBar:`_exitBar_mgkmu_413`,inputDock:`_inputDock_mgkmu_429`,inputHint:`_inputHint_mgkmu_439`,inputRow:`_inputRow_mgkmu_448`,inputPrompt:`_inputPrompt_mgkmu_455`,inputEditor:`_inputEditor_mgkmu_465`,blockDot:`_blockDot_mgkmu_507`,find:`_find_mgkmu_531`,findInput:`_findInput_mgkmu_546`,findCount:`_findCount_mgkmu_561`,toggle:`_toggle_mgkmu_569`,blocks:`_blocks_mgkmu_600`,blockList:`_blockList_mgkmu_609`,block:`_block_mgkmu_154`,blockTop:`_blockTop_mgkmu_630`,chevron:`_chevron_mgkmu_651`,prompt:`_prompt_mgkmu_659`,command:`_command_mgkmu_666`,meta:`_meta_mgkmu_679`,status:`_status_mgkmu_690`,blockActions:`_blockActions_mgkmu_705`,output:`_output_mgkmu_712`,outputNote:`_outputNote_mgkmu_727`,blocksEmpty:`_blocksEmpty_mgkmu_735`},jt=3,Mt=1500;function Nt(e,t){let n=Date.parse(e);if(!Number.isFinite(n))return``;let r=Math.max(0,Math.round((t-n)/1e3));if(r<60)return`${r}s ago`;let i=Math.round(r/60);if(i<60)return`${i}m ago`;let a=Math.round(i/60);return a<24?`${a}h ago`:new Date(n).toLocaleDateString()}function Pt(e){if(!e)return null;let t=e.replace(/\/+$/,``);return t.split(`/`).pop()||t}var Ft=(0,P.memo)(function({text:e}){let t=(0,P.useMemo)(()=>W(e),[e]);return(0,F.jsx)(F.Fragment,{children:t.map((e,t)=>{let n=Ze(e.style);return Object.keys(n).length===0?(0,F.jsx)(`span`,{children:e.text},t):(0,F.jsx)(`span`,{style:n,children:e.text},t)})})}),It=(0,P.memo)(function({block:e,open:t,onToggle:n,loadOutput:r,onAction:i,actions:a,highlighted:o,now:s,extras:c,selected:l,bookmarked:u}){let[d,f]=(0,P.useState)(null),[p,m]=(0,P.useState)(!1),[h,g]=(0,P.useState)(!1),[_,v]=(0,P.useState)(Y),y=(0,P.useRef)(null),b=J(e),x=e.output??d?.text??null,S=`${e.running?`run`:`done`}:${e.durationMs??``}`;(0,P.useEffect)(()=>{if(!t||e.output!==null||!r||e.fullscreen)return;let n=!1,i=()=>{r(e).then(e=>{n||(f({text:e,at:S}),m(!1))},()=>{n||m(!0)})};d?.at!==S&&i();let a=e.running?setInterval(i,Mt):null;return()=>{n=!0,a&&clearInterval(a)}},[t,S,e.id,r]),(0,P.useEffect)(()=>{o&&y.current?.scrollIntoView({block:`nearest`})},[o]);let C=(0,P.useMemo)(()=>x!==null&&_.pattern?st(x,_):null,[x,_]),ee=c?.loadFix??null,w=(0,P.useRef)(e);w.current=e;let T=(0,P.useMemo)(()=>ee?()=>ee(w.current):null,[ee,e.id,e.exitCode]),E=Pt(e.cwd),D=a.includes(`explain`)&&b.tone===`error`,O=e.source===`terminal`&&c!==void 0,k=t=>{if(c&&(t.shiftKey||t.metaKey||t.ctrlKey)){t.preventDefault(),c.onSelect(e.id,{range:t.shiftKey,toggle:t.metaKey||t.ctrlKey});return}n(e.id)},te=e.localUrls??[];return(0,F.jsxs)(`li`,{ref:y,className:`${Z.block}${l?` ${I.selected}`:``}`,"data-tone":b.tone,"data-highlight":o||void 0,"data-selected":l||void 0,"data-testid":`block-${e.id}`,"aria-selected":c?l:void 0,children:[(0,F.jsxs)(`div`,{className:`${Z.blockTop}${e.running&&O?` ${I.runningTop}`:``}`,children:[(0,F.jsxs)(`button`,{type:`button`,className:Z.blockHead,"aria-expanded":t,onClick:k,title:c?`${e.command||`Command`} — ⇧-click or ⌘-click to select several`:e.command||`Command`,children:[(0,F.jsx)(`span`,{className:Z.chevron,"aria-hidden":`true`,children:(0,F.jsx)(le,{size:12})}),(0,F.jsx)(`span`,{className:Z.prompt,"aria-hidden":`true`,children:`$`}),(0,F.jsx)(`span`,{className:Z.command,"data-empty":!e.command||void 0,children:e.command||`command`}),(0,F.jsxs)(`span`,{className:Z.meta,children:[u?(0,F.jsx)(`span`,{className:I.bookmarked,"aria-label":`Bookmarked`,children:(0,F.jsx)(wt,{filled:!0,size:12})}):null,E?(0,F.jsx)(`span`,{title:e.cwd??void 0,children:E}):null,e.durationMs===null?null:(0,F.jsx)(`span`,{children:nt(e.durationMs)}),(0,F.jsx)(`span`,{children:Nt(e.startedAt,s)}),(0,F.jsx)(`span`,{className:Z.status,"data-tone":b.tone,children:b.label})]})]}),(0,F.jsxs)(`div`,{className:Z.blockActions,children:[a.includes(`copy-output`)?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Copy output`,title:`Copy output`,disabled:e.fullscreen,onClick:()=>i(`copy-output`,e),children:(0,F.jsx)(me,{size:14})}):null,a.includes(`copy-command`)&&e.command?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Copy command`,title:`Copy the command`,onClick:()=>i(`copy-command`,e),children:(0,F.jsx)(`span`,{"aria-hidden":`true`,className:Z.prompt,children:`$`})}):null,a.includes(`send`)?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Send to chat`,title:`Send this block to the chat`,onClick:()=>i(`send`,e),children:(0,F.jsx)(ge,{size:14})}):null,a.includes(`ask`)?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Ask a seat about this command`,"aria-haspopup":`menu`,title:`Ask… — Claude Code, Codex, Devin, Grok, a local model, or all of them side by side`,onClick:t=>i(`ask`,e,{anchor:t.currentTarget}),children:(0,F.jsx)(Tt,{})}):null,D?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Explain and fix this error`,title:`Ask the chat to explain and fix this error`,onClick:()=>i(`explain`,e),children:(0,F.jsx)(`span`,{"aria-hidden":`true`,style:{fontSize:`var(--text-2xs-size)`,fontWeight:600},children:`Fix`})}):null,a.includes(`rerun`)&&c?.canRerun&&e.command&&!e.running?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Re-run this command`,title:`Re-run: type it at the prompt and press Enter`,onClick:()=>i(`rerun`,e),children:(0,F.jsx)(Ot,{})}):null,a.includes(`bookmark`)?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-pressed":u,"aria-label":u?`Remove bookmark`:`Bookmark this block`,title:u?`Remove bookmark`:`Bookmark`,onClick:()=>i(`bookmark`,e),children:(0,F.jsx)(wt,{filled:u})}):null,a.includes(`copy-link`)?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Copy link to this block`,title:`Copy a verse://terminal link to this block`,onClick:()=>i(`copy-link`,e),children:(0,F.jsx)(Et,{})}):null,a.includes(`jump`)?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Show in terminal`,title:`Show in terminal`,onClick:()=>i(`jump`,e),children:(0,F.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})}):null,a.includes(`paste`)&&e.command?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Paste command in terminal`,title:`Paste the command at a terminal prompt (it does not run)`,onClick:()=>i(`paste`,e),children:(0,F.jsx)(Rt,{})}):null,O&&t&&x!==null&&x.trim().length>0?(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-pressed":h,"aria-label":`Filter output lines`,title:`Filter the output's lines`,onClick:()=>{g(e=>!e),h&&v(Y)},children:(0,F.jsx)(Dt,{})}):null]})]}),O&&te.length>0?(0,F.jsx)(`div`,{className:I.bar,children:te.map(t=>(0,F.jsxs)(`button`,{type:`button`,className:I.chip,onClick:()=>i(`open-url`,e,{url:t}),title:`Open ${t} in the Browser pane`,children:[(0,F.jsx)(kt,{size:12}),(0,F.jsx)(`span`,{className:I.chipCode,children:ht(t)}),(0,F.jsx)(`span`,{className:I.chipVerb,children:`Open in Browser`})]},t))}):null,t&&h?(0,F.jsxs)(`div`,{className:I.filterRow,role:`search`,"aria-label":`Filter output`,children:[(0,F.jsx)(`input`,{className:I.filterInput,"aria-label":`Filter lines`,placeholder:_.regex?`Regular expression`:`Text to match`,value:_.pattern,autoFocus:!0,"aria-invalid":C?.error?!0:void 0,onChange:e=>v(t=>({...t,pattern:e.target.value})),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),v(Y),g(!1))}}),(0,F.jsx)(`button`,{type:`button`,className:Z.toggle,"aria-pressed":_.regex,"aria-label":`Regular expression`,title:`Regular expression`,onClick:()=>v(e=>({...e,regex:!e.regex})),children:`.*`}),(0,F.jsx)(`button`,{type:`button`,className:Z.toggle,"aria-pressed":_.caseSensitive,"aria-label":`Match case`,title:`Match case`,onClick:()=>v(e=>({...e,caseSensitive:!e.caseSensitive})),children:`Aa`}),(0,F.jsx)(`button`,{type:`button`,className:Z.toggle,"aria-pressed":_.invert,"aria-label":`Invert: hide matching lines`,title:`Invert: show the lines that do NOT match`,onClick:()=>v(e=>({...e,invert:!e.invert})),children:`!`}),(0,F.jsx)(`span`,{className:I.filterCount,"aria-live":`polite`,children:C?.error?`Invalid pattern`:C?`${C.shown} of ${C.total} lines`:``})]}):null,t?e.fullscreen?(0,F.jsx)(`p`,{className:Z.outputNote,children:`A full-screen program (an editor, a pager): its screen is not kept as output.`}):x===null?(0,F.jsx)(`p`,{className:Z.outputNote,role:p?`alert`:`status`,children:p?`The output could not be loaded.`:`Loading output…`}):x.trim().length===0?(0,F.jsx)(`p`,{className:Z.outputNote,children:e.running?`No output yet.`:`No output.`}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`pre`,{className:Z.output,tabIndex:0,"aria-label":`Output of ${e.command||`the command`}`,children:(0,F.jsx)(Ft,{text:C&&!C.error?C.text:x})}),e.truncated?(0,F.jsx)(`p`,{className:Z.outputNote,children:`Only the last part of this output is kept.`}):null]}):null,O&&b.tone===`error`&&e.exitCode!==null&&t?(0,F.jsx)(At,{variant:`card`,load:T,askTargets:c.askTargets,onPaste:t=>i(`paste-text`,e,{text:t}),onAsk:t=>i(`ask-seat`,e,{seatId:t}),onAskMore:t=>i(`ask`,e,{anchor:t})}):null]})});function Lt({blocks:e,loadOutput:t,onAction:n,actions:r,emptyTitle:i,emptyBody:a,highlightId:o=null,label:s,extras:c}){let[l,u]=(0,P.useState)(()=>new Map),[d,f]=(0,P.useState)(!1),p=(0,P.useRef)(null),m=(0,P.useRef)(!0),[h,g]=(0,P.useState)(()=>Date.now());(0,P.useEffect)(()=>{let e=setInterval(()=>g(Date.now()),3e4);return()=>clearInterval(e)},[]);let _=(0,P.useMemo)(()=>d&&c?e.filter(e=>c.bookmarks.has(e.id)):e,[e,d,c]),v=(0,P.useCallback)(t=>{u(n=>{let r=new Map(n),i=e.findIndex(e=>e.id===t),a=n.get(t)??zt(e,i);return r.set(t,!a),r})},[e]);if((0,P.useEffect)(()=>{let e=p.current;e&&m.current&&!o&&(e.scrollTop=e.scrollHeight)},[e,o]),e.length===0)return(0,F.jsx)(`div`,{className:Z.blocksEmpty,children:(0,F.jsx)(ye,{compact:!0,title:i,body:a})});let y=c?c.selection.ids.size:0,b=c?e.filter(e=>c.bookmarks.has(e.id)).length:0;return(0,F.jsxs)(`div`,{className:Z.blocks,ref:p,onScroll:e=>{let t=e.currentTarget;m.current=t.scrollHeight-t.scrollTop-t.clientHeight<24},children:[c&&(y>0||b>0)?(0,F.jsxs)(`div`,{className:I.listTools,role:`toolbar`,"aria-label":y>0?`Selected blocks`:`Blocks`,children:[y>0?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)(`span`,{"aria-live":`polite`,children:[y,` selected`]}),(0,F.jsx)(`button`,{type:`button`,className:I.chip,onClick:()=>c.onSelectionAction(`copy-output`),children:`Copy outputs`}),(0,F.jsx)(`button`,{type:`button`,className:I.chip,onClick:()=>c.onSelectionAction(`send`),children:`Send to chat`}),(0,F.jsx)(`button`,{type:`button`,className:I.chip,"aria-haspopup":`menu`,onClick:e=>c.onSelectionAction(`ask`,e.currentTarget),children:`Ask…`}),(0,F.jsx)(`button`,{type:`button`,className:I.chip,"aria-label":`Clear selection`,title:`Clear selection`,onClick:c.onClearSelection,children:(0,F.jsx)(ce,{size:10})})]}):(0,F.jsx)(`span`,{children:`⇧/⌘-click blocks to select several`}),(0,F.jsx)(`span`,{className:I.barSpacer}),b>0?(0,F.jsxs)(`button`,{type:`button`,className:Z.toggle,"aria-pressed":d,title:`Show only bookmarked blocks`,onClick:()=>f(e=>!e),children:[(0,F.jsx)(wt,{filled:d,size:12}),` `,b]}):null]}):null,(0,F.jsx)(`ol`,{className:Z.blockList,"aria-label":s,"aria-multiselectable":c?!0:void 0,children:_.map(i=>{let a=e.indexOf(i);return(0,F.jsx)(It,{block:i,open:l.get(i.id)??zt(e,a),onToggle:v,...t?{loadOutput:t}:{},onAction:n,actions:r,highlighted:o===i.id,now:h,...c?{extras:c}:{},selected:c?.selection.ids.has(i.id)??!1,bookmarked:c?.bookmarks.has(i.id)??!1},i.id)})})]})}function Rt(){return(0,F.jsxs)(`svg`,{width:14,height:14,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,children:[(0,F.jsx)(`path`,{d:`M13 3.5v4.25a1.5 1.5 0 0 1-1.5 1.5H3.5`}),(0,F.jsx)(`path`,{d:`m6 6.5-2.5 2.75L6 12`})]})}function zt(e,t){let n=e[t];return n?t>=e.length-jt||n.running||J(n).tone===`error`:!1}var Bt=[`copy-output`,`copy-command`,`send`,`explain`,`paste`];function Vt({sessionId:e,onAction:t,highlightId:n=null}){let r=xe(e),i=(0,P.useMemo)(()=>q(r.items),[r.items]),a=i.some(e=>e.running);return(0,F.jsxs)(`div`,{className:Z.leaf,"data-testid":`agent-terminal`,children:[(0,F.jsxs)(`div`,{className:Z.header,children:[(0,F.jsx)(`span`,{className:Z.cwd,children:`What the agents ran in this chat`}),(0,F.jsx)(`span`,{className:Z.headerStatus,role:`status`,"aria-live":`polite`,children:a?`A command is running…`:i.length>0?`${i.length} ${i.length===1?`command`:`commands`}`:``})]}),(0,F.jsx)(Lt,{blocks:i,onAction:t,actions:Bt,highlightId:n,label:`Commands the agents ran`,emptyTitle:`No agent commands yet`,emptyBody:`When an agent in this chat runs a shell command, it appears here as a read-only block: the command, its output and how it ended.`})]})}var Ht=`agent`,Ut=[`row`,`column`,`grid`],Wt={groups:[],active:null,modes:{}},Gt=0;function Kt(){return Gt+=1,`g-${Date.now().toString(36)}-${Gt}`}function qt(e,t){let n=new Set(t),r=new Set,i=[];for(let t of e.groups){let e=t.panes.filter(e=>n.has(e)&&!r.has(e)).slice(0,6);for(let t of e)r.add(t);if(e.length===0)continue;let a=e.includes(t.focused)?t.focused:e[0],o=Ut.includes(t.direction)?t.direction:`row`,s=t.zoomed&&e.length>1&&e.includes(t.zoomed)?t.zoomed:null;i.push({id:t.id,panes:e,direction:o,focused:a,...s?{zoomed:s}:{}})}for(let e of t)r.has(e)||(r.add(e),i.push({id:Kt(),panes:[e],direction:`row`,focused:e}));let a={};for(let[t,r]of Object.entries(e.modes))n.has(t)&&(r===`terminal`||r===`blocks`)&&(a[t]=r);let o=e.active;return o!==`agent`&&!i.some(e=>e.id===o)&&(o=i.at(-1)?.id??null),o===e.active&&i.length===e.groups.length&&i.every((t,n)=>{let r=e.groups[n];return r.id===t.id&&r.focused===t.focused&&r.direction===t.direction&&r.panes.join()===t.panes.join()&&(r.zoomed??null)===(t.zoomed??null)})&&Object.keys(a).length===Object.keys(e.modes).length?e:{groups:i,active:o,modes:a}}function Jt(e,t){let n={id:Kt(),panes:[t],direction:`row`,focused:t};return{...e,groups:[...e.groups.filter(e=>!e.panes.includes(t)),n],active:n.id}}function Yt(e,t,n){return t<=1?n:e===`grid`||e===n?e:`grid`}function Xt(e,t,n,r){let i=e.groups.find(e=>e.id===t);if(!i||i.panes.length>=6)return null;let a=i.panes.indexOf(i.focused),o=[...i.panes];o.splice(a+1,0,n);let s={id:i.id,panes:o,direction:Yt(i.direction,i.panes.length,r),focused:n};return{...e,groups:e.groups.filter(e=>!e.panes.includes(n)||e.id===t).map(e=>e.id===t?s:e),active:t}}function Zt(e,t){let n=[],r=-1;e.groups.forEach((e,i)=>{if(!e.panes.includes(t)){n.push(e);return}let a=e.panes.filter(e=>e!==t);if(a.length===0){r=i;return}let{zoomed:o,...s}=e,c=o&&o!==t&&a.length>1;n.push({...s,panes:a,focused:e.focused===t?a[0]:e.focused,...c?{zoomed:o}:{}})});let i={...e.modes};delete i[t];let a=e.active;return r>=0&&e.groups[r].id===a&&(a=(n[r]??n[r-1]??null)?.id??null),{groups:n,active:a,modes:i}}function Qt(e,t,n){let r=e.groups.find(e=>e.id===t);return!r||!r.panes.includes(n)||r.focused===n&&e.active===t?e:{...e,active:t,groups:e.groups.map(e=>e.id===t?{...e,focused:n}:e)}}function $t(e,t,n){let r=e.groups.find(e=>e.id===t);return!r||r.direction===n?e:{...e,groups:e.groups.map(e=>e.id===t?{...e,direction:n}:e)}}function en(e,t){let n=e.groups.find(e=>e.id===t);if(!n)return e;let r=n.zoomed?null:n.panes.length>1?n.focused:null;return(n.zoomed??null)===r?e:{...e,groups:e.groups.map(e=>{if(e.id!==t)return e;let{zoomed:n,...i}=e;return r?{...i,zoomed:r}:i})}}function tn(e){let t=Math.max(1,Math.ceil(Math.sqrt(e)));return{cols:t,rows:Math.max(1,Math.ceil(e/t))}}function nn(e){let t=e.panes.length;if(e.direction===`row`)return e.panes.map((e,t)=>({id:e,row:0,col:t,span:1}));if(e.direction===`column`)return e.panes.map((e,t)=>({id:e,row:t,col:0,span:1}));let{cols:n}=tn(t);return e.panes.map((e,r)=>{let i=Math.floor(r/n),a=r%n;return{id:e,row:i,col:a,span:r===t-1?n-a:1}})}function rn(e,t,n){let r=nn(e),i=r.find(e=>e.id===t);if(!i)return null;let a=e=>e.col+e.span/2,o=null;for(let e of r){if(e.id===t)continue;let r,s=0;if(n===`left`||n===`right`){if(e.row!==i.row)continue;r=n===`left`?i.col-e.col:e.col-i.col}else r=n===`up`?i.row-e.row:e.row-i.row,s=Math.abs(a(e)-a(i));r<=0||(!o||r<o.primary||r===o.primary&&s<o.secondary)&&(o={id:e.id,primary:r,secondary:s})}return o?.id??null}function an(e,t,n){return(e.modes[t]??`terminal`)===n?e:{...e,modes:{...e.modes,[t]:n}}}var on=`ashlr.verse.terminal.layout.v1:`;function sn(e){return`${on}${e}`}function cn(e){let t=e;return!!t&&typeof t.id==`string`&&Array.isArray(t.panes)&&t.panes.every(e=>typeof e==`string`)&&typeof t.focused==`string`&&Ut.includes(t.direction)&&(t.zoomed===void 0||t.zoomed===null||typeof t.zoomed==`string`)}function ln(e){if(!e)return Wt;try{let t=JSON.parse(e);return!t||typeof t!=`object`?Wt:{groups:Array.isArray(t.groups)?t.groups.filter(cn).slice(0,32):[],active:typeof t.active==`string`?t.active:null,modes:t.modes&&typeof t.modes==`object`?t.modes:{}}}catch{return Wt}}function un(e,t=fn()){try{return ln(t?.getItem(sn(e))??null)}catch{return Wt}}function dn(e,t,n=fn()){try{t.groups.length===0?n?.removeItem(sn(e)):n?.setItem(sn(e),JSON.stringify(t))}catch{}}function fn(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function pn(e){return e===`auto`?`Local model first. If it is unavailable, your request, current folder, and recent command/output may be sent to Grok.`:e===`off`?`Plain-English commands are off.`:`Your request, current folder, and recent command/output go only to the configured local model.`}function mn(e){return e===`auto`?`Asking the local model; Grok may answer if it is unavailable…`:`Asking the local model…`}function hn(e,t){switch(t.split(`;`,1)[0]){case`A`:return`prompt`;case`B`:return`input`;case`C`:return`running`;case`D`:return`done`;default:return e}}function gn(e){return e.integration&&e.phase===`input`&&!e.alternateScreen&&!e.exited&&!e.raw&&!e.handedOff&&e.terminalMode}var _n=/^(?:\x1b\[\??[\d;]*[Rcn]|\x1b\[[IO]|\x1b\][\s\S]*(?:\x07|\x1b\\)|\x1bP[\s\S]*\x1b\\)+$/;function vn(e){return e.length>0&&!_n.test(e)}var yn=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g;function bn(e,t){let n=e.replace(/\r\n?/g,`
|
|
18
|
+
`).replace(yn,``).replace(/\n+$/,``);return n.includes(`
|
|
19
|
+
`)?t?`\x1b[200~${n}\x1b[201~\r`:`${n.replace(/\n/g,`\r`)}\r`:`${n}\r`}function xn(e,t){let n=e.replace(/\r\n?/g,`
|
|
20
|
+
`).replace(yn,``);return n?`${n.includes(`
|
|
21
|
+
`)?`\x1b[200~${n}\x1b[201~`:n}${t}`:t}function Sn(e,t){if(e.trim().length===0||e.includes(`
|
|
22
|
+
`))return null;for(let n of t)if(n.length>e.length&&n.startsWith(e))return n;return null}var Cn=class{source;index=-1;draft=``;matches=[];constructor(e){this.source=e}get active(){return this.index>=0}reset(){this.index=-1,this.draft=``,this.matches=[]}prev(e){if(this.index<0){this.draft=e;let t=e.trim(),n=this.source();this.matches=t?n.filter(n=>n.startsWith(t)&&n!==e):[...n]}return this.index+1>=this.matches.length?null:(this.index+=1,this.matches[this.index])}next(){return this.index<0?null:(--this.index,this.index<0?this.draft:this.matches[this.index])}};function wn(e){let t=/^\s*#\s*([\s\S]*)$/.exec(e);if(!t)return null;let n=t[1].trim();return n.length>0?n:null}function Tn(e,t){let n=e.slice(0,t),r=n.length;for(;r>0;){let e=n[r-1];if(/[\s;|&<>()`'"=]/.test(e)&&n[r-2]!==`\\`)break;--r}let i=n.slice(r);return!i||!(i.includes(`/`)||i.startsWith(`.`)||i.startsWith(`~`))?null:{from:r,token:i}}function En(e){return e.split(`/`).filter(e=>e.length>0&&e!==`.`)}function Dn(e,t){let n=En(e),r=En(t),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i+=1;let a=n.length-i,o=r.slice(i);return[...Array.from({length:a},()=>`..`),...o].join(`/`)||`.`}function On(e,t){return`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}function kn(e,t,n,r=30){let i=new Set,a=e.startsWith(`/`)||e.startsWith(`~`);for(let o of n){let n=On(o.root,o.path),s;if(a){if(s=e.startsWith(`~`)&&n.startsWith(`~`)||e.startsWith(`/`)&&n.startsWith(`/`)?n:``,!s)continue}else{if(!t)continue;s=Dn(t,n),e.startsWith(`./`)&&!s.startsWith(`.`)&&(s=`./${s}`)}if(!s.startsWith(e))continue;let c=s.slice(e.length).indexOf(`/`);if(i.add(c>=0?s.slice(0,e.length+c+1):s),i.size>=r)break}return[...i].sort((e,t)=>Number(t.endsWith(`/`))-Number(e.endsWith(`/`))||e.length-t.length||e.localeCompare(t))}function An(e){return e.split(`/`).filter(e=>e&&e!==`.`&&e!==`..`&&e!==`~`).join(`/`)}var jn=new Map,Mn=15e3,Nn=300;function Pn(){jn.clear()}var Fn=(0,P.forwardRef)(function(e,t){let{visible:n,focusWanted:r,cwd:i}=e,a=(0,P.useRef)(null),o=(0,P.useRef)(null),s=(0,P.useRef)(e);s.current=e;let[c,l]=(0,P.useState)(!1),[d,f]=(0,P.useState)(!1),[p,m]=(0,P.useState)(!1),[h,g]=(0,P.useState)({state:`idle`,result:null,error:null}),_=(0,P.useRef)(null),[v,y]=(0,P.useState)(!1),b=(0,P.useRef)({ranked:[],recent:[]}),x=(0,P.useRef)(new Cn(()=>b.current.recent)),S=i??``,C=(0,P.useCallback)(async(e=!1)=>{let t=s.current.api;if(!t.history)return;let n=jn.get(S);if(n&&!e&&Date.now()-n.at<Mn){b.current=n;return}try{let e=await t.history({cwd:S||null,limit:Nn}),n=e.entries.map(e=>e.cmd),r=[...e.entries].sort((e,t)=>Date.parse(t.ts)-Date.parse(e.ts)).map(e=>e.cmd),i={at:Date.now(),ranked:n,recent:r};jn.set(S,i),b.current=i}catch{}},[S]),ee=(0,P.useCallback)(e=>{let t=e.trim();if(!t)return;let n=e=>[t,...e.filter(e=>e!==t)],r={at:jn.get(S)?.at??0,ranked:n(b.current.ranked),recent:n(b.current.recent)};b.current=r,jn.set(S,{...r,at:0})},[S]),w=(0,P.useCallback)(e=>{let t=o.current;t&&t.setGhost(wn(e)===null?Sn(e,b.current.ranked):null)},[]),T=(0,P.useCallback)(async e=>{let t=s.current;if(!t.api.assist){t.onError(`This server cannot generate commands.`);return}m(!0),g({state:`loading`,result:null,error:null});try{let n=await t.api.assist({request:e,tabId:t.tabId,...t.cwd?{cwd:t.cwd}:{},...t.assistMode===`auto`?{cloudAllowed:!0}:{}});g({state:`done`,result:n,error:null}),_.current=n.risky?n.command:null,y(!1),o.current?.setText(n.command),o.current?.focus()}catch(e){let t=e instanceof u&&e.status===401?`Unlock actions with the mutation token to generate commands.`:e instanceof u&&e.detail?e.detail:`The command could not be generated.`;g({state:`error`,result:null,error:t})}},[]),E=(0,P.useCallback)(()=>{m(!1),g({state:`idle`,result:null,error:null}),_.current=null,y(!1)},[]),D=(0,P.useCallback)(e=>{let t=o.current,n=s.current;if(!t)return!1;let r=t.getText();switch(e){case`submit`:{let e=wn(r);return e===null?r.trim().length>0&&_.current!==null&&_.current===r?(_.current=null,y(!0),!0):(n.send(bn(r,n.bracketedPaste())),ee(r),x.current.reset(),t.setText(``),E(),!0):(T(e),!0)}case`history-prev`:{let e=x.current.prev(r);return e!==null&&t.setText(e),!0}case`history-next`:{let e=x.current.next();return e!==null&&(t.setText(e),!0)}case`history-search`:return n.onHistorySearch(r),!0;case`assist`:{let e=wn(r)??(r.trim()?r.trim():null);return e?T(e):(m(!0),t.setText(`# `)),!0}case`interrupt`:return r.length>0?(t.setText(``),x.current.reset(),E()):n.send(``),!0;case`eof`:return n.send(``),!0;case`clear-screen`:return n.send(`\f`),!0;case`hand-off`:return p&&h.state!==`idle`?(E(),!0):(r.length>0&&n.send(xn(r,``)),t.setText(``),n.onHandOff(),!0);case`tab`:return n.send(xn(r,` `)),t.setText(``),n.onHandOff(),!0}},[h.state,p,ee,E,T]),O=(0,P.useRef)(D);if(O.current=D,(0,P.useEffect)(()=>{if(!n||o.current||d)return;let e=a.current;if(!e)return;let t=!1;return s.current.createEditor({host:e,initial:``,label:`Command`,placeholder:Q(s.current.platform),onChange:e=>{w(e),m(wn(e)!==null||e.trimStart().startsWith(`#`)),_.current!==null&&e!==_.current&&(_.current=null),y(!1)},onKey:e=>O.current(e),completePaths:async(e,t)=>{let n=s.current,r=Tn(e,t);if(!r||!n.sessionId||!n.api.files)return null;let i=await n.api.files(n.sessionId,An(r.token));return{from:r.from,options:kn(r.token,n.cwd,i)}}}).then(e=>{if(t){e.dispose();return}o.current=e,l(!0)},e=>{console.error(`[verse] the command editor failed to load`,e),t||f(!0)}),()=>{t=!0}},[n,d,w]),(0,P.useEffect)(()=>()=>{o.current?.dispose(),o.current=null},[]),(0,P.useEffect)(()=>{n&&c&&(x.current.reset(),C().then(()=>w(o.current?.getText()??``)),r&&o.current?.focus())},[n,c,r,C,w]),(0,P.useImperativeHandle)(t,()=>({focus:()=>o.current?.focus(),getText:()=>o.current?.getText()??``,insert:e=>{let t=o.current;t&&(t.setText(e.replace(/[\r\n]+$/,``)),t.focus())},openAssist:()=>{O.current(`assist`)}}),[]),d)return null;let k=h.state===`loading`?mn(e.assistMode):h.state===`error`?h.error:v?`This command changes or deletes things. Press Return again to run it.`:h.state===`done`&&h.result?[h.result.explanation,`Review, then Return to run · from ${h.result.provider}`].filter(Boolean).join(` · `):p?`Describe what you want, then Return. ${pn(e.assistMode)} The command comes back to review; nothing runs on its own.`:null;return(0,F.jsxs)(`div`,{className:Z.inputDock,hidden:!n,"data-testid":`command-input-${e.tabId}`,"data-assist":p||void 0,onKeyDownCapture:t=>{e.onPanelKey?.(t.nativeEvent)&&t.stopPropagation()},children:[k?(0,F.jsx)(`div`,{className:Z.inputHint,role:h.state===`error`||v?`alert`:`status`,"data-tone":h.state===`error`||v||h.result?.risky&&h.state===`done`?`warn`:void 0,children:k}):null,(0,F.jsxs)(`div`,{className:Z.inputRow,children:[(0,F.jsx)(`span`,{className:Z.inputPrompt,"aria-hidden":`true`,children:p?`#`:`$`}),(0,F.jsx)(`div`,{ref:a,className:Z.inputEditor})]})]})});function Q(e){return`Type a command · # or ${e===`mac`?`⌘I`:`Ctrl+Shift+Alt+I`} to describe it in words · Ctrl+R history · Esc hands off to the shell`}var In=e(n(),1),Ln={command:`_command_1jzol_6`,wrap:`_wrap_1jzol_7`},Rn=70;function zn(e,t=Date.now()){let n=t-Date.parse(e);if(!Number.isFinite(n)||n<0)return``;let r=Math.round(n/6e4);if(r<1)return`just now`;if(r<60)return`${r} min ago`;let i=Math.round(r/60);if(i<24)return`${i} h ago`;let a=Math.round(i/24);return a<30?`${a} d ago`:new Date(e).toLocaleDateString()}function Bn(e){let t=[];e.here?t.push(`here`):e.sameRepo&&t.push(`this repo`),e.exit!==null&&e.exit!==0&&t.push(`exit ${e.exit}`),e.count>1&&t.push(`${e.count}×`);let n=zn(e.ts);return n&&t.push(n),t.join(` · `)}function Vn(e){if(e instanceof u){if(e.status===401)return`Unlock actions with the mutation token to generate commands.`;if(e.detail)return e.detail}return`The command could not be generated.`}function Hn({mode:e,assistMode:t,api:n,tabId:r,cwd:i,initialQuery:a,onPick:o,onPassThrough:s,onClose:c,onEnableHistory:l}){let[u,d]=(0,P.useState)(a),[p,m]=(0,P.useState)([]),[h,g]=(0,P.useState)(!0),[_,v]=(0,P.useState)(!1),[y,b]=(0,P.useState)(0),[x,S]=(0,P.useState)({state:`idle`,result:null,error:null}),C=(0,P.useRef)(null),ee=(0,P.useRef)(null),w=(0,P.useRef)(null),T=(0,P.useId)(),E=(0,P.useId)(),D=(0,P.useRef)(!0);(0,P.useEffect)(()=>()=>{D.current=!1},[]),f({open:!0,containerRef:C,onClose:c,initialFocusRef:ee}),(0,P.useEffect)(()=>{if(e!==`history`||!n.history)return;let t=new AbortController,r=setTimeout(()=>{v(!0),n.history({q:u,cwd:i,limit:100},t.signal).then(e=>{D.current&&!t.signal.aborted&&(m(e.entries),g(e.enabled),b(0))},()=>{}).finally(()=>{D.current&&!t.signal.aborted&&v(!1)})},Rn);return()=>{clearTimeout(r),t.abort()}},[n,i,e,u]),(0,P.useEffect)(()=>{w.current?.querySelector(`[data-index="${y}"]`)?.scrollIntoView?.({block:`nearest`})},[y]);let O=(0,P.useCallback)(async e=>{if(n.assist&&e.trim()){S({state:`loading`,result:null,error:null});try{let a=await n.assist({request:e.trim(),...r?{tabId:r}:{},...i?{cwd:i}:{},...t===`auto`?{cloudAllowed:!0}:{}});D.current&&S({state:`done`,result:a,error:null})}catch(e){D.current&&S({state:`error`,result:null,error:Vn(e)})}}},[n,t,i,r]),k=e=>{c(),o(e)},te=t=>{let n=e===`history`?p.length:+!!x.result;if(t.ctrlKey&&!t.metaKey&&t.key.toLowerCase()===`r`){t.preventDefault(),e===`history`&&s&&(c(),s(u));return}switch(t.key){case`ArrowDown`:t.preventDefault(),n>0&&b(e=>(e+1)%n);return;case`ArrowUp`:t.preventDefault(),n>0&&b(e=>(e-1+n)%n);return;case`Enter`:if(t.preventDefault(),e===`history`){let e=p[y];e&&k(e.cmd);return}x.state===`done`&&x.result&&!t.shiftKey?k(x.result.command):x.state!==`loading`&&O(u);return;case`Escape`:t.preventDefault(),t.stopPropagation(),c();return;default:return}},ne=e===`history`?`Command history`:`Generate a command`,re=e===`history`?`Search commands you ran`:`Describe what you want to do, in plain words`,ie=(e===`history`?p[y]:x.result)?`${T}-${y}`:void 0;return(0,In.createPortal)((0,F.jsx)(`div`,{className:N.backdrop,onMouseDown:e=>e.target===e.currentTarget&&c(),children:(0,F.jsxs)(`div`,{ref:C,className:N.panel,role:`dialog`,"aria-modal":`true`,"aria-labelledby":E,"data-verse-overlay":`terminal-${e}`,children:[(0,F.jsx)(`h2`,{id:E,className:`visually-hidden`,children:ne}),(0,F.jsxs)(`div`,{className:N.field,children:[(0,F.jsxs)(`span`,{className:N.crumb,children:[e===`history`?`History`:`Command`,(0,F.jsx)(`span`,{"aria-hidden":`true`,children:` ›`})]}),(0,F.jsx)(`input`,{ref:ee,className:N.input,value:u,placeholder:re,"aria-label":re,role:`combobox`,"aria-expanded":`true`,"aria-controls":T,"aria-autocomplete":`list`,"aria-activedescendant":ie,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,onChange:t=>{d(t.target.value),e===`assist`&&x.state!==`loading`&&S({state:`idle`,result:null,error:null})},onKeyDown:te})]}),(0,F.jsx)(`div`,{ref:w,id:T,className:N.list,role:`listbox`,"aria-label":ne,"aria-busy":_||x.state===`loading`||void 0,children:e===`history`?h?p.length===0?(0,F.jsx)(`p`,{className:N.empty,children:_?`Searching…`:u?`No command matches “${u}”.`:`Commands you run in the terminal appear here.`}):(0,F.jsx)(`div`,{role:`group`,"aria-label":`Commands`,className:N.group,children:p.map((e,t)=>(0,F.jsxs)(`div`,{id:`${T}-${t}`,"data-index":t,role:`option`,"aria-selected":t===y,className:N.item,"data-tone":e.exit!==null&&e.exit!==0?`warn`:void 0,onMouseMove:()=>t!==y&&b(t),onMouseDown:e=>e.preventDefault(),onClick:()=>k(e.cmd),children:[(0,F.jsx)(`span`,{className:N.lead,"aria-hidden":`true`,children:(0,F.jsx)(`span`,{className:N.bullet,"data-kind":e.here?`running`:`command`})}),(0,F.jsxs)(`span`,{className:N.text,children:[(0,F.jsx)(`span`,{className:`${N.title} ${Ln.command}`,children:e.cmd}),(0,F.jsx)(`span`,{className:N.subtitle,children:Bn(e)})]})]},e.cmd))}):(0,F.jsxs)(`p`,{className:N.empty,children:[`Command history is off.`,` `,l?(0,F.jsx)(A,{size:`sm`,variant:`subtle`,onClick:l,children:`Turn it on`}):null]}):x.state===`loading`?(0,F.jsx)(`p`,{className:N.empty,role:`status`,children:mn(t)}):x.state===`error`?(0,F.jsx)(`p`,{className:N.empty,role:`alert`,children:x.error}):x.result?(0,F.jsx)(`div`,{role:`group`,"aria-label":`Suggested command`,className:N.group,children:(0,F.jsxs)(`div`,{id:`${T}-0`,"data-index":0,role:`option`,"aria-selected":`true`,className:N.item,"data-tone":x.result.risky?`danger`:void 0,onMouseDown:e=>e.preventDefault(),onClick:()=>k(x.result.command),children:[(0,F.jsx)(`span`,{className:N.lead,"aria-hidden":`true`,children:(0,F.jsx)(`span`,{className:N.bullet,"data-kind":`command`})}),(0,F.jsxs)(`span`,{className:N.text,children:[(0,F.jsx)(`span`,{className:`${N.title} ${Ln.command} ${Ln.wrap}`,children:x.result.command}),(0,F.jsx)(`span`,{className:N.subtitle,children:[x.result.risky?`Changes or deletes things — read it before running`:null,x.result.explanation,`from ${x.result.provider}`].filter(Boolean).join(` · `)})]})]})}):(0,F.jsx)(`p`,{className:N.empty,children:n.assist?`Press Return to ask. ${pn(t)} The command comes back for you to review; nothing runs until you run it.`:`This server cannot generate commands.`})}),(0,F.jsxs)(`div`,{className:N.foot,"aria-hidden":`true`,children:[(0,F.jsxs)(`span`,{children:[(0,F.jsx)(`kbd`,{className:N.key,children:`↑↓`}),` move`]}),e===`history`?(0,F.jsxs)(`span`,{children:[(0,F.jsx)(`kbd`,{className:N.key,children:(0,F.jsx)(_e,{})}),` insert (does not run)`]}):(0,F.jsxs)(`span`,{children:[(0,F.jsx)(`kbd`,{className:N.key,children:(0,F.jsx)(_e,{})}),` `,x.state===`done`?`insert for review`:`generate`]}),e===`history`&&s?(0,F.jsxs)(`span`,{children:[(0,F.jsx)(`kbd`,{className:N.key,children:`Ctrl+R`}),` shell’s own search`]}):null,(0,F.jsxs)(`span`,{children:[(0,F.jsx)(`kbd`,{className:N.key,children:`esc`}),` close`]})]}),(0,F.jsx)(`p`,{className:`visually-hidden`,role:`status`,"aria-live":`polite`,children:e===`history`?p.length===1?`1 command`:`${p.length} commands`:x.state===`done`?`Command ready`:``})]})}),document.body)}var Un=null,Wn=async e=>(Un||(Un=i(()=>import(`./command-editor-1jPM4Hl-.js`),[]),Un.catch(()=>{Un=null})),(await Un).createCommandEditor(e));function Gn(){Un||(Un=i(()=>import(`./command-editor-1jPM4Hl-.js`),[]),Un.catch(()=>{Un=null}))}async function Kn(e,t){let n=a();if(!n)throw new je;let r=await c(e,t,n);return s(),r}var qn=e=>`${E}/${encodeURIComponent(e)}`;function Jn(e){let t=new URLSearchParams;e.q&&t.set(`q`,e.q),e.cwd&&t.set(`cwd`,e.cwd),e.limit!==void 0&&t.set(`limit`,String(e.limit));let n=t.toString();return n?`${D}?${n}`:D}var Yn={...Oe,blocks:e=>l(`${qn(e)}/blocks`),blockOutput:(e,t,n)=>l(`${qn(e)}/blocks/${encodeURIComponent(t)}?format=${n}`),redact:async e=>(await Kn(O,{text:e})).text,openFile:async(e,t)=>{await Kn(`${qn(e)}/open-file`,t)},history:(e,t)=>l(Jn(e),t),clearHistory:async()=>{await Kn(T,{})},settings:()=>l(C),updateSettings:e=>Kn(C,e),assist:e=>Kn(k,e),files:async(e,t,n)=>(await ve(e,t,n)).files,fix:(e,t)=>Kn(`${qn(e)}/blocks/${encodeURIComponent(t)}/fix`,{}),launchList:e=>l(`${S}?sessionId=${encodeURIComponent(e)}`),launch:e=>Kn(S,e)};function Xn(e,t){if(e.type!==`keydown`||!g(e,[`chat`,`global`],t))return!1;let n=_(e),r=e.ctrlKey&&(n==="`"||n===`tab`);return t===`mac`?e.metaKey||r:r||e.ctrlKey&&e.shiftKey}var Zn={arrowleft:`focus-left`,arrowright:`focus-right`,arrowup:`focus-up`,arrowdown:`focus-down`};function Qn(e,t){if(e.type!==`keydown`)return null;let n=_(e);return t===`mac`?!e.metaKey||e.ctrlKey?null:e.altKey&&!e.shiftKey&&Zn[n]?Zn[n]:n===`f`&&!e.shiftKey&&!e.altKey?`find`:n===`d`&&!e.shiftKey?e.altKey?`split-down`:`split-right`:n===`arrowup`&&!e.shiftKey&&!e.altKey?`prev-block`:n===`arrowdown`&&!e.shiftKey&&!e.altKey?`next-block`:n===`k`&&e.shiftKey&&!e.altKey?`toggle-blocks`:n===`enter`&&e.shiftKey&&!e.altKey?`zoom-pane`:n===`i`&&!e.shiftKey&&!e.altKey?`assist`:null:!e.ctrlKey||!e.shiftKey||e.metaKey?null:e.altKey&&Zn[n]?Zn[n]:n===`f`&&!e.altKey?`find`:n===`arrowup`&&!e.altKey?`prev-block`:n===`arrowdown`&&!e.altKey?`next-block`:n===`k`&&e.altKey?`toggle-blocks`:n===`enter`&&!e.altKey?`zoom-pane`:n===`i`&&e.altKey?`assist`:null}function $n(e,t){let n=t===`mac`;switch(e){case`find`:return n?`⌘F`:`Ctrl+Shift+F`;case`split-right`:return n?`⌘D`:``;case`split-down`:return n?`⌥⌘D`:``;case`prev-block`:return n?`⌘↑`:`Ctrl+Shift+↑`;case`next-block`:return n?`⌘↓`:`Ctrl+Shift+↓`;case`toggle-blocks`:return n?`⇧⌘K`:`Ctrl+Shift+Alt+K`;case`focus-left`:return n?`⌥⌘←`:`Ctrl+Shift+Alt+←`;case`focus-right`:return n?`⌥⌘→`:`Ctrl+Shift+Alt+→`;case`focus-up`:return n?`⌥⌘↑`:`Ctrl+Shift+Alt+↑`;case`focus-down`:return n?`⌥⌘↓`:`Ctrl+Shift+Alt+↓`;case`zoom-pane`:return n?`⇧⌘Return`:`Ctrl+Shift+Enter`;case`assist`:return n?`⌘I`:`Ctrl+Shift+Alt+I`}}var er=String.raw`(?:~|\.{1,2})?\/?(?:[\w.@+\-]+\/)*[\w.@+\-]*[\w@+\-]\.[A-Za-z0-9]{1,12}`,tr=new RegExp(String.raw`(?<![\w/.~:\-@])(${er})(?::(\d{1,7})(?::(\d{1,5}))?|\((\d{1,7}),(\d{1,5})\))?(?![\w/])`,`g`),nr=/File "([^"\n]{1,1024})", line (\d{1,7})/g;function rr(e,t){let n=t;for(;n>0&&!/[\s"'`(<[]/.test(e[n-1]);)n--;return/^[a-z][a-z0-9+.-]*:\/\//i.test(e.slice(n,t+1))||/^[a-z][a-z0-9+.-]*:\/\//i.test(e.slice(n))}function ir(e){let t=[];if(e.length===0||e.length>4096)return t;for(let n of e.matchAll(nr))t.push({path:n[1],line:Number(n[2]),column:null,start:n.index,end:n.index+n[0].length});for(let n of e.matchAll(tr)){let r=n.index,i=r+n[0].length;if(t.some(e=>r<e.end&&i>e.start))continue;let a=n[1],o=n[2]??n[4],s=n[3]??n[5];(o!==void 0||a.includes(`/`))&&(/^v?\d+(?:\.\d+)+$/.test(a)||rr(e,r)||t.push({path:a,line:o===void 0?null:Number(o),column:s===void 0?null:Number(s),start:r,end:i}))}return t.sort((e,t)=>e.start-t.start)}var ar=`<!--,===,!==,<=>,>>=,<<=,||=,&&=,??=,...,-->,->>,<<-,|||,::=,=>,->,<-,==,!=,<=,>=,::,:=,&&,||,??,++,//,/*,*/,</,/>,<>,|>,<|,..,=~,!~,>>,<<,#{,#[,0x`.split(`,`).sort((e,t)=>t.length-e.length);function or(e){return e.replace(/[.*+?^${}()|[\]\\/]/g,`\\$&`)}var sr=new RegExp(ar.map(or).join(`|`),`g`);function cr(e){let t=[];if(e.length<2)return t;for(let n of e.matchAll(sr))(n[0]!==`0x`||/[0-9a-fA-F]/.test(e[n.index+2]??``))&&t.push([n.index,n.index+n[0].length]);return t}var lr=1e4,ur=null;function dr(){return ur||(ur=Promise.all([i(()=>import(`./xterm-ScmBfeDI.js`),[]),i(()=>import(`./addon-fit-DIOBYJe3.js`),[]),i(()=>import(`./addon-unicode11-CuS-nuun.js`),[]),i(()=>import(`./addon-web-links-CY_cVoZj.js`),[]),i(()=>Promise.resolve({}),__vite__mapDeps([0]))]).then(([e,t,n,r])=>[e,t,n,r]),ur.catch(()=>{ur=null})),ur}function fr(e,t){return t?e.metaKey:e.ctrlKey}function pr(){try{return typeof document>`u`||typeof window>`u`||!(`WebGL2RenderingContext`in window)?!1:document.createElement(`canvas`).getContext(`webgl2`)!==null}catch{return!1}}var mr=async e=>{let[{Terminal:t},{FitAddon:n},{Unicode11Addon:r},{WebLinksAddon:a}]=await dr(),o=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent||``),s=new t({fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:1.2,cursorBlink:!0,cursorStyle:`bar`,scrollback:lr,theme:e.theme,screenReaderMode:e.screenReaderMode,macOptionIsMeta:!0,minimumContrastRatio:3,allowProposedApi:!0,overviewRuler:{width:8},rescaleOverlappingGlyphs:!0}),c=new n;s.loadAddon(c),s.loadAddon(new r),s.unicode.activeVersion=`11`;let l=`dom`,u=null,d=null,f=null,p=null,m=null,h=new Set,g=!1,_=e=>{e&&d===null?d=s.registerCharacterJoiner(cr):!e&&d!==null&&(s.deregisterCharacterJoiner(d),d=null)};async function v(){if(e.gpu&&pr())try{let{WebglAddon:e}=await i(async()=>{let{WebglAddon:e}=await import(`./addon-webgl-BQImtbV0.js`);return{WebglAddon:e}},[]),t=new e;t.onContextLoss(()=>{t.dispose(),u=null,l=`dom`}),s.loadAddon(t),u=t,l=`webgl`}catch{l=`dom`}}async function y(){return p||(m||(m=i(async()=>{let{SearchAddon:e}=await import(`./addon-search-DY9H_MDg.js`);return{SearchAddon:e}},[]).then(({SearchAddon:e})=>{let t=new e;return s.loadAddon(t),t.onDidChangeResults(e=>{for(let t of h)t({index:e.resultIndex,count:e.resultCount})}),p=t,t}),m.catch(()=>{m=null})),m)}return{get cols(){return s.cols},get rows(){return s.rows},get renderer(){return l},async open(t){g||(g=!0,s.open(t),await v(),_(e.ligatures),s.loadAddon(new a((e,t)=>{f&&fr(e,o)&&f.openUrl(t)})),s.registerLinkProvider({provideLinks(e,t){let n=s.buffer.active.getLine(e-1);if(!n)return t(void 0);let r=ir(n.translateToString(!0));if(r.length===0)return t(void 0);t(r.map(t=>({range:{start:{x:t.start+1,y:e},end:{x:t.end,y:e}},text:n.translateToString(!0).slice(t.start,t.end),decorations:{underline:!0,pointerCursor:!0},activate:n=>{f&&fr(n,o)&&f.openFile(t,e-1)}})))}}))},write(e,t){s.write(e,t)},reset(){s.reset()},clear(){s.clear()},focus(){s.focus()},fit(){let e=c.proposeDimensions();if(!e||!Number.isFinite(e.cols)||!Number.isFinite(e.rows)||e.cols<2||e.rows<2)return null;let t=e.cols!==s.cols||e.rows!==s.rows;return c.fit(),t&&s.refresh(0,s.rows-1),{cols:s.cols,rows:s.rows}},refresh(){s.clearTextureAtlas(),s.refresh(0,s.rows-1)},onData:e=>s.onData(e),onBinary:e=>s.onBinary(e),onSelectionChange:e=>s.onSelectionChange(e),hasSelection:()=>s.hasSelection(),getSelection:()=>s.getSelection(),paste(e){s.paste(e)},bracketedPaste:()=>s.modes.bracketedPasteMode,setTheme(e){s.options.theme=e},setScreenReaderMode(e){s.options.screenReaderMode=e},setKeyFilter(e){s.attachCustomKeyEventHandler(e)},setLigatures:_,setLinkHandlers(e){f=e},onShellMark(e){return s.parser.registerOscHandler(133,t=>{try{e(t)}catch{}return!1})},markCursorLine(){return s.buffer.active.type===`normal`?s.registerMarker(0)??null:null},decorate(e,t){let n=s.registerDecoration({marker:e,anchor:`right`,x:0,width:2,...t.overviewColor?{overviewRulerOptions:{color:t.overviewColor,position:`right`}}:{}});return n?(n.onRender(e=>t.render(e)),n):null},scrollToLine(e){s.scrollToLine(Math.max(0,e))},scrollToBottom(){s.scrollToBottom()},viewportY:()=>s.buffer.active.viewportY,selectLines(e,t){s.selectLines(e,t)},async find(t,n={}){let r=await y(),i={caseSensitive:n.caseSensitive??!1,regex:n.regex??!1,wholeWord:n.wholeWord??!1,...e.findColors?{decorations:{matchBackground:e.findColors.match,activeMatchBackground:e.findColors.active,matchOverviewRuler:e.findColors.match,activeMatchColorOverviewRuler:e.findColors.active}}:{}};return n.backwards?r.findPrevious(t,i):r.findNext(t,{...i,incremental:!0})},clearFind(){p?.clearDecorations(),s.clearSelection()},onFindResults(e){return h.add(e),{dispose:()=>{h.delete(e)}}},onBufferChange:e=>s.buffer.onBufferChange(t=>e(t.type===`alternate`)),isAlternateScreen:()=>s.buffer.active.type===`alternate`,dispose(){h.clear();try{u?.dispose()}catch{}s.dispose()}}};function hr(e){let t=/^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})/.exec(e.trim());return t?`#${[t[1],t[2],t[3]].map(e=>Math.min(255,Number(e)).toString(16).padStart(2,`0`)).join(``)}`:null}function gr(e){let t=Fe(e);return{ok:t.green??`green`,error:t.red??`red`,running:t.yellow??`orange`,match:t.selectionBackground?hr(t.selectionBackground):null,active:t.yellow?hr(t.yellow):null}}var _r=(0,P.lazy)(()=>i(()=>import(`./VoiceInput-k3vB_FxV.js`).then(e=>e.r),__vite__mapDeps([1,2,3,4,5,6,7,8]))),vr=(0,P.forwardRef)(function(e,t){let{tab:n,deps:r,shown:i,focused:a,mode:o,prefs:s}=e,c=(0,P.useRef)(null),l=(0,P.useRef)(null),u=(0,P.useRef)(null),d=(0,P.useRef)(null),f=(0,P.useRef)(0),p=(0,P.useRef)([]),[h,g]=(0,P.useState)(!1),[_,v]=(0,P.useState)(!1),[y,b]=(0,P.useState)([]),[x,S]=(0,P.useState)(null),[C,ee]=(0,P.useState)(!1),[w,T]=(0,P.useState)({open:!1,term:``,caseSensitive:!1,regex:!1,index:-1,count:0}),E=(0,P.useRef)(null),D=(0,P.useRef)(!1);D.current=w.open;let O=(0,P.useRef)(n.exited!==null);O.current=n.exited!==null;let k=(0,P.useRef)(e);k.current=e;let[te,ne]=(0,P.useState)(ct),[re,ie]=(0,P.useState)(()=>new Set),[ae,oe]=(0,P.useState)(()=>Date.now()),[se,le]=(0,P.useState)(`unknown`),[ue,fe]=(0,P.useState)(!1),[me,he]=(0,P.useState)(!1),ge=(0,P.useRef)(null),_e=!!r.createInputEditor&&s.inputEditor&&gn({phase:se,integration:n.shellIntegration===`active`,alternateScreen:ue,exited:n.exited!==null,raw:e.raw===!0,handedOff:me,terminalMode:o===`terminal`}),ve=(0,P.useRef)(_e);ve.current=_e;let ye=(0,P.useRef)([]),be=(0,P.useRef)(new Map),xe=(0,P.useRef)(null),j=(0,P.useRef)(0),Se=(0,P.useRef)(new Map),Ce=(0,P.useRef)(new Map),M=(0,P.useRef)([]);M.current=y;let we=(0,P.useCallback)(e=>{let t=u.current,r=c.current;if(!t||!r)return;let i=Ce.current.get(tt(e.startSeq,e.ordinal));if(!i||i.mark.isDisposed)return;let a=J(et(e));if(i.tone===a.tone)return;i.deco?.dispose();let o=gr(r),s=a.tone===`ok`?o.ok:a.tone===`error`?o.error:a.tone===`running`?o.running:void 0;i.tone=a.tone,i.deco=t.decorate(i.mark,{...s?{overviewColor:s}:{},render:t=>{t.classList.add(Z.blockDot),t.style.left=`auto`,t.style.right=`0px`,t.dataset.tone=a.tone,t.title=`${e.command||`command`} — ${a.label}`,t.setAttribute(`role`,`button`),t.setAttribute(`aria-label`,`Command block: ${e.command||`command`}, ${a.label}`),t.onclick=r=>{r.preventDefault(),r.stopPropagation();let i=M.current.find(t=>t.id===e.id)??e;k.current.onBlockMenu(n.id,et(i),t)},t.oncontextmenu=t.onclick}})},[n.id]),Te=(0,P.useCallback)(()=>{for(let e of Ce.current.values())e.deco?.dispose(),e.mark.dispose();Ce.current.clear(),xe.current?.dispose(),xe.current=null,be.current.clear(),Se.current.clear(),ye.current=[]},[]),Ee=(0,P.useRef)(e=>{let t=u.current;if(!t)return;let n=[...Ce.current.values()].filter(e=>!e.mark.isDisposed).map(e=>e.mark.line).sort((e,t)=>e-t),r=t.viewportY(),i=e<0?[...n].reverse().find(e=>e<r):n.find(e=>e>r);i===void 0?e>0&&t.scrollToBottom():t.scrollToLine(i)}),De=(0,P.useRef)((e,t)=>{let n=Qn(e,k.current.deps.platform);return!n||!t&&n===`assist`?!1:(e.preventDefault(),n===`prev-block`||n===`next-block`?Ee.current(n===`prev-block`?-1:1):k.current.onKeyAction(k.current.tab.id,n),!0)}),Oe=(0,P.useCallback)(async()=>{let e=c.current;if(e&&!u.current)try{let t=gr(e),i=await r.createView({...Ne(e),theme:Fe(e),screenReaderMode:s.screenReader,ligatures:s.ligatures,gpu:s.gpu,...t.match&&t.active?{findColors:{match:t.match,active:t.active}}:{}});if(!c.current){i.dispose();return}await i.open(e),u.current=i;let a=Ie(e=>r.api.input(n.id,e),{onError:e=>k.current.onNotice({tone:`error`,text:k.current.onError(e,`That input did not reach the shell.`)})});d.current=a;let o=p.current;o.push(i.onData(e=>{O.current||(ve.current&&vn(e)&&he(!0),a.pushText(e))})),i.onBufferChange&&o.push(i.onBufferChange(e=>fe(e))),o.push(i.onBinary(e=>{O.current||a.pushBinary(e)})),o.push(i.onSelectionChange(()=>{let e=i.hasSelection();k.current.onSelection(n.id,e,e&&!D.current?i.getSelection():``)})),o.push(i.onShellMark(e=>{let t=ye.current[0],n=e.split(`;`,1)[0];if(le(t=>hn(t,e)),n===`A`&&he(!1),n===`A`)xe.current?.dispose(),xe.current=i.markCursorLine();else if(n===`C`&&t!==void 0){let e=be.current.get(t)??0;be.current.set(t,e+1);let n=xe.current&&!xe.current.isDisposed?xe.current:i.markCursorLine();if(xe.current=null,!n)return;let r=tt(t,e);Ce.current.get(r)?.mark.dispose(),Ce.current.set(r,{mark:n,deco:null,tone:null});let a=M.current.find(n=>n.startSeq===t&&n.ordinal===e);a&&we(a)}})),o.push(i.onFindResults(e=>T(t=>({...t,index:e.index,count:e.count})))),i.setLinkHandlers({openUrl:e=>r.openUrl(e),openFile:(e,t)=>{let i=k.current.tab.cwd??null,a=-1;for(let e of M.current){let n=Ce.current.get(tt(e.startSeq,e.ordinal));!n||n.mark.isDisposed||n.mark.line>t||n.mark.line<a||(a=n.mark.line,i=e.cwd??i)}r.api.openFile(n.id,{path:e.path,...e.line===null?{}:{line:e.line},...e.column===null?{}:{column:e.column},...i?{cwd:i}:{}}).catch(e=>k.current.onNotice({tone:`error`,text:k.current.onError(e,`That file could not be opened.`)}))}}),i.setKeyFilter(e=>!De.current(e,!0)&&!Xn(e,r.platform)),v(!1),g(!0)}catch(e){console.error(`[verse] terminal view failed to load`,e),v(!0)}},[r,s.gpu,s.ligatures,s.screenReader,n.id,we]);(0,P.useEffect)(()=>(Oe(),()=>{d.current?.dispose(),d.current=null;for(let e of p.current)try{e.dispose()}catch{}p.current=[],Te();try{u.current?.dispose()}catch{}u.current=null}),[]),(0,P.useEffect)(()=>{u.current?.setScreenReaderMode(s.screenReader)},[s.screenReader]),(0,P.useEffect)(()=>{u.current?.setLigatures(s.ligatures)},[s.ligatures]),(0,P.useEffect)(()=>Me(()=>{let e=c.current;if(e){u.current?.setTheme(Fe(e));for(let e of Ce.current.values())e.tone=null;for(let e of M.current)we(e)}}),[we]);let Ae=(0,P.useRef)(null),je=(0,P.useCallback)(()=>{let e=u.current;if(!e)return;let t={cols:e.cols,rows:e.rows},i=e.fit();i&&(i.cols!==t.cols||i.rows!==t.rows||i.cols!==n.cols||i.rows!==n.rows)&&(Ae.current&&clearTimeout(Ae.current),Ae.current=setTimeout(()=>{r.api.resize(n.id,i.cols,i.rows).catch(()=>{})},80))},[r.api,n.id,n.cols,n.rows]);(0,P.useEffect)(()=>{if(!i||!h||o!==`terminal`)return;je(),u.current?.refresh();let e=c.current?.parentElement;if(!e||typeof ResizeObserver>`u`)return;let t=0,n=new ResizeObserver(()=>{cancelAnimationFrame(t),t=requestAnimationFrame(je)});n.observe(e),(typeof document<`u`?document.fonts:void 0)?.ready?.then(()=>requestAnimationFrame(je));let r=typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`):null,a=()=>requestAnimationFrame(je);return r?.addEventListener?.(`change`,a),()=>{cancelAnimationFrame(t),n.disconnect(),r?.removeEventListener?.(`change`,a)}},[i,h,o,je]),(0,P.useEffect)(()=>()=>{Ae.current&&clearTimeout(Ae.current)},[]),(0,P.useEffect)(()=>{if(!i||!h){k.current.onStreamState(n.id,null);return}let e=u.current;if(!e)return;let t=n.id,a=r.openStream(t,()=>f.current,{onFrame:n=>{switch(n.type!==`output`&&ee(!0),n.type){case`output`:{if(n.seq<=f.current)return;f.current>0&&n.seq>f.current+1&&(e.reset(),Te());let t=n.seq;ye.current.push(t),e.write(ke(n.dataBase64),()=>{ye.current[0]===t&&ye.current.shift(),be.current.delete(t),j.current=Math.max(j.current,t);for(let[e,t]of Se.current)t.startSeq>j.current||(Se.current.delete(e),we(t))}),f.current=t;return}case`block`:M.current=Qe(M.current,n.block),b(M.current),n.block.startSeq<=j.current?we(n.block):Se.current.set(n.block.id,n.block);return;default:k.current.onMeta(t,n)}},onState:e=>k.current.onStreamState(t,e)});return()=>a.close()},[i,h,n.id,r,we,Te]),(0,P.useEffect)(()=>{i&&a&&h&&o===`terminal`&&(_e?ge.current?.focus():u.current?.focus())},[i,a,h,o,_e]),(0,P.useEffect)(()=>{n.shellIntegration===`active`&&s.inputEditor&&!e.raw&&r.preloadInputEditor?.()},[n.shellIntegration,s.inputEditor,e.raw,r]);let Pe=(0,P.useCallback)((e,t)=>{let n=u.current;if(n){if(!e){n.clearFind(),T(e=>({...e,index:-1,count:0}));return}n.find(e,{caseSensitive:t.caseSensitive,regex:t.regex,...t.backwards?{backwards:!0}:{}}).catch(()=>{})}},[]),Le=(0,P.useCallback)(()=>{u.current?.clearFind(),T(e=>({...e,open:!1,index:-1,count:0})),u.current?.focus()},[]),N=(0,P.useCallback)(e=>{let t=M.current.find(t=>t.id===e),n=u.current;if(!t||!n)return;let r=Ce.current.get(tt(t.startSeq,t.ordinal));r&&!r.mark.isDisposed&&(n.scrollToLine(Math.max(0,r.mark.line-1)),n.selectLines(r.mark.line,r.mark.line)),S(e)},[]),L=(0,P.useCallback)(e=>{O.current||d.current?.pushText(e)},[]),Re=(0,P.useCallback)(e=>{let t=u.current;if(!t)return;let n=e.replace(/[\r\n]+$/,``);n.includes(`
|
|
23
|
+
`)&&!t.bracketedPaste()?r.writeClipboard(n).then(()=>k.current.onNotice({tone:`info`,text:`That command has several lines, so it was copied instead: paste it with ⌘V.`}),()=>k.current.onNotice({tone:`error`,text:`That command has several lines and could not be pasted safely.`})):t.paste(n),t.focus()},[r]),R=(0,P.useCallback)(e=>{ve.current&&ge.current?ge.current.insert(e):Re(e)},[Re]),ze=(0,P.useCallback)(e=>R(e.replace(/\s*[\r\n]+\s*/g,` `).trim()),[R]);(0,P.useImperativeHandle)(t,()=>({focus:()=>{ve.current?ge.current?.focus():u.current?.focus()},getSelection:()=>u.current?.getSelection()??``,clear:()=>{u.current?.clear()},openFind:()=>{T(e=>({...e,open:!0})),setTimeout(()=>E.current?.select(),0)},jumpTo:N,size:()=>u.current&&u.current.cols>1?{cols:u.current.cols,rows:u.current.rows}:null,hasOutput:()=>j.current>0,blocks:()=>M.current.map(et),paste:R,inputActive:()=>ve.current,insertCommand:R,openAssist:()=>!ve.current||!ge.current?!1:(ge.current.openAssist(),!0),sendText:L}),[N,R,L]);let Be=(0,P.useMemo)(()=>y.map(et),[y]),Ve=(0,P.useCallback)(async e=>(await r.api.blockOutput(n.id,e.id,`ansi`)).output,[r.api,n.id]),He=(0,P.useCallback)((e,t,r)=>{k.current.onBlockAction(n.id,e,t,r)},[n.id]),Ue=(0,P.useMemo)(()=>Be.map(e=>e.id),[Be]);(0,P.useEffect)(()=>{ne(e=>ut(e,Ue))},[Ue]);let z=e.extras,We=(0,P.useMemo)(()=>{if(!z)return;let e=z.loadFix;return{selection:te,onSelect:(e,t)=>ne(n=>lt(n,Ue,e,t)??n),onClearSelection:()=>ne(ct),onSelectionAction:(e,t)=>{let r=Be.filter(e=>te.ids.has(e.id));r.length>0&&z.onSelectionAction(n.id,e,r,t)},bookmarks:z.bookmarks,loadFix:e?t=>e(n.id,t):null,askTargets:z.askTargets,canRerun:!n.exited&&!n.agent&&!Be.some(e=>e.running)}},[z,te,Ue,Be,n.id,n.exited,n.agent]),B=Be.at(-1)??null,V=B&&B.running&&!B.fullscreen&&!n.agent?B:null;(0,P.useEffect)(()=>{if(!V||!i||o!==`terminal`)return;oe(Date.now());let e=setInterval(()=>oe(Date.now()),1e3);return()=>clearInterval(e)},[V,i,o]);let Ge=!1;if(V&&h){let e=M.current.find(e=>e.id===V.id),t=e?Ce.current.get(tt(e.startSeq,e.ordinal)):void 0,n=u.current;Ge=!!(t&&!t.mark.isDisposed&&n&&t.mark.line<n.viewportY())}let H=z&&B&&(B.localUrls?.length??0)>0&&!re.has(`url:${B.id}`)?B:null,Ke=z&&B&&!B.running&&B.exitCode!==null&&B.exitCode!==0&&!n.agent&&!re.has(`fix:${B.id}`)?B:null,qe=z?.loadFix??null,Je=(0,P.useRef)(Ke);Je.current=Ke;let Ye=Ke?.id??null,U=(0,P.useMemo)(()=>qe&&Ye?()=>qe(n.id,Je.current):null,[qe,Ye,n.id]),Xe=e=>ie(t=>new Set(t).add(e)),W=$n(`find`,r.platform),G=n.exited;return(0,F.jsxs)(`div`,{ref:l,className:Z.leaf,hidden:e.concealed||void 0,"data-span":e.gridSpan&&e.gridSpan>1?e.gridSpan:void 0,"data-focused":a||void 0,"data-testid":`terminal-leaf-${n.id}`,onMouseDown:()=>{a||e.onFocus()},onFocusCapture:()=>{a||e.onFocus()},children:[w.open?(0,F.jsxs)(`div`,{className:Z.find,role:`search`,"aria-label":`Find in terminal`,children:[(0,F.jsx)(`input`,{ref:E,className:Z.findInput,"aria-label":`Find`,placeholder:`Find`,value:w.term,autoFocus:!0,onChange:e=>{let t=e.target.value;T(e=>({...e,term:t})),Pe(t,{caseSensitive:w.caseSensitive,regex:w.regex})},onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),Le()),e.key===`Enter`&&(e.preventDefault(),Pe(w.term,{caseSensitive:w.caseSensitive,regex:w.regex,backwards:e.shiftKey}))}}),(0,F.jsx)(`span`,{className:Z.findCount,"aria-live":`polite`,children:w.term?w.count===0?`No results`:w.index>=0?`${w.index+1} of ${w.count}`:`${w.count}+`:``}),(0,F.jsx)(`button`,{type:`button`,className:Z.toggle,"aria-pressed":w.caseSensitive,title:`Match case`,"aria-label":`Match case`,onClick:()=>{let e=!w.caseSensitive;T(t=>({...t,caseSensitive:e})),Pe(w.term,{caseSensitive:e,regex:w.regex})},children:`Aa`}),(0,F.jsx)(`button`,{type:`button`,className:Z.toggle,"aria-pressed":w.regex,title:`Regular expression`,"aria-label":`Regular expression`,onClick:()=>{let e=!w.regex;T(t=>({...t,regex:e})),Pe(w.term,{caseSensitive:w.caseSensitive,regex:e})},children:`.*`}),(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Previous match`,title:`Previous match (⇧Enter)`,onClick:()=>Pe(w.term,{caseSensitive:w.caseSensitive,regex:w.regex,backwards:!0}),children:(0,F.jsx)(pe,{size:14})}),(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Next match`,title:`Next match (Enter)`,onClick:()=>Pe(w.term,{caseSensitive:w.caseSensitive,regex:w.regex}),children:(0,F.jsx)(de,{size:14})}),(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Close find`,title:`Close (Esc) — open with ${W}`,onClick:Le,children:(0,F.jsx)(ce,{size:12})})]}):null,(0,F.jsxs)(`div`,{className:Z.viewport,hidden:o!==`terminal`,onMouseUp:e=>{e.target?.closest?.(`button, a, input, [role="button"]`)||ve.current&&!u.current?.hasSelection()&&setTimeout(()=>ge.current?.focus(),0)},children:[V&&Ge?(0,F.jsxs)(`div`,{className:I.stickyRun,role:`status`,"aria-label":`Running: ${V.command||`command`}`,children:[(0,F.jsx)(`span`,{className:Z.prompt,"aria-hidden":`true`,children:`$`}),(0,F.jsx)(`span`,{className:I.stickyCommand,children:V.command||`command`}),(0,F.jsx)(`span`,{className:I.stickyMeta,children:mt(ae-Date.parse(V.startedAt))}),(0,F.jsx)(`button`,{type:`button`,className:Z.iconBtn,"aria-label":`Jump to the running command`,title:`Jump to where it started`,onClick:()=>N(V.id),children:`↑`})]}):null,(0,F.jsx)(`div`,{className:Z.host,ref:c,"data-testid":`terminal-host-${n.id}`}),h&&!G?(0,F.jsx)(`span`,{className:Z.voiceSlot,children:(0,F.jsx)(P.Suspense,{fallback:null,children:(0,F.jsx)(_r,{surface:`terminal`,mode:`verbatim`,targetRef:l,onInsert:ze})})}):null,!h&&!_?(0,F.jsx)(`div`,{className:Z.viewLoading,"aria-hidden":`true`,children:(0,F.jsx)(m,{width:`30%`})}):null,_?(0,F.jsxs)(`div`,{className:Z.viewLoading,role:`alert`,children:[(0,F.jsx)(`p`,{children:`The terminal could not load. The rest of the chat still works.`}),(0,F.jsx)(A,{size:`sm`,variant:`subtle`,onClick:()=>{v(!1),Oe()},children:`Try again`})]}):null]}),r.createInputEditor&&s.inputEditor&&!e.raw&&n.shellIntegration===`active`?(0,F.jsx)(Fn,{ref:ge,tabId:n.id,sessionId:n.sessionId,cwd:n.cwd??n.root,visible:_e,focusWanted:i&&a,api:r.api,assistMode:e.assistMode,createEditor:r.createInputEditor,platform:r.platform,bracketedPaste:()=>u.current?.bracketedPaste()??!1,send:L,onHandOff:()=>{he(!0),u.current?.focus()},onHistorySearch:e=>k.current.onHistorySearch?.(n.id,e),onError:e=>k.current.onNotice({tone:`error`,text:e}),onPanelKey:e=>De.current(e,!1)}):null,o===`terminal`&&H?(0,F.jsxs)(`div`,{className:I.bar,role:`group`,"aria-label":`A local server is up`,children:[(0,F.jsx)(`span`,{className:I.barLabel,children:`Serving`}),(H.localUrls??[]).map(e=>(0,F.jsxs)(`button`,{type:`button`,className:I.chip,onClick:()=>z.onOpenUrl(e),title:`Open ${e} in the Browser pane`,children:[(0,F.jsx)(kt,{size:12}),(0,F.jsx)(`span`,{className:I.chipCode,children:ht(e)}),(0,F.jsx)(`span`,{className:I.chipVerb,children:`Open in Browser`})]},e)),(0,F.jsx)(`span`,{className:I.barSpacer}),(0,F.jsx)(`button`,{type:`button`,className:I.chip,"aria-label":`Dismiss`,title:`Dismiss`,onClick:()=>Xe(`url:${H.id}`),children:(0,F.jsx)(ce,{size:10})})]}):null,o===`terminal`&&Ke?(0,F.jsx)(At,{variant:`bar`,load:U,askTargets:z.askTargets,onPaste:t=>e.onBlockAction(n.id,`paste-text`,Ke,{text:t}),onAsk:t=>e.onBlockAction(n.id,`ask-seat`,Ke,{seatId:t}),onAskMore:t=>e.onBlockAction(n.id,`ask`,Ke,{anchor:t}),onDismiss:()=>Xe(`fix:${Ke.id}`)},Ke.id):null,o===`blocks`&&!C&&Be.length===0?(0,F.jsxs)(`div`,{className:Z.loading,role:`status`,"aria-label":`Loading commands`,children:[(0,F.jsx)(m,{width:`60%`}),(0,F.jsx)(m,{width:`40%`})]}):o===`blocks`?(0,F.jsx)(Lt,{blocks:Be,loadOutput:Ve,onAction:He,actions:z?[`copy-output`,`send`,`ask`,`explain`,`rerun`,`bookmark`,`copy-link`,`jump`,`paste`]:[`copy-output`,`send`,`explain`,`jump`,`paste`],...We?{extras:We}:{},highlightId:x,label:`Commands in ${n.title}`,emptyTitle:n.shellIntegration===`off`?`No command blocks for this shell`:`No commands yet`,emptyBody:n.shellIntegration===`off`?`Blocks need zsh, bash or fish. This shell still works as a plain terminal.`:`Each command you run here appears as a block: its output, how long it took and how it ended.`}):null,G?(0,F.jsxs)(`div`,{className:Z.exitBar,role:`status`,children:[(0,F.jsx)(`span`,{children:G.signal&&G.code===null?`Shell ended (${G.signal}).`:`Shell exited${G.code===null?``:` with code ${G.code}`}.`}),(0,F.jsx)(A,{size:`sm`,variant:`subtle`,onClick:()=>e.onRestart(n),children:`Restart`}),(0,F.jsx)(A,{size:`sm`,variant:`ghost`,onClick:()=>e.onClose(n),children:`Close`})]}):null]})}),yr=(0,P.lazy)(async()=>({default:(await i(async()=>{let{CompareDialog:e}=await import(`./CompareDialog-PVqv0Tx9.js`);return{CompareDialog:e}},__vite__mapDeps([9,10,11,12,13,14,4,5,6,7,15]))).CompareDialog})),br=(0,P.lazy)(async()=>({default:(await i(async()=>{let{LaunchDialog:e}=await import(`./LaunchDialog-CrPEf652.js`);return{LaunchDialog:e}},__vite__mapDeps([16,13,6,17,18]))).LaunchDialog})),xr=(0,P.lazy)(async()=>({default:(await i(async()=>{let{CommandWorkflowPicker:e}=await import(`./CommandWorkflowPicker-COVyeer0.js`);return{CommandWorkflowPicker:e}},__vite__mapDeps([19,20,21,22,23,4,6,5,7,17,24,25]))).CommandWorkflowPicker})),Sr=[`claude`,`codex`,`devin`];function Cr(e){if(!e)return null;let t=e.agent===`claude-code`?`Claude Code`:e.agent===`codex`?`Codex`:e.agent===`devin`?`Devin`:`Grok`,n=e.channel===`hooks`?`from its hooks`:`read from its output`;return e.state===`needs-you`?{state:`needs-you`,label:`needs you`,title:`${t} needs you${e.message?`: ${e.message}`:``} (${n})`}:e.state===`running`?{state:`running`,label:`working`,title:`${t} is working (${n})`}:{state:`idle`,label:`idle`,title:`${t} is idle (${n})`}}function wr(e){let t={"needs-you":3,running:2,idle:1},n=null;for(let r of e)r&&(!n||t[r.state]>t[n.state])&&(n=r);return n}function Tr(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}var Er={api:Yn,agentTools:j,createView:mr,openStream:V,createInputEditor:Wn,preloadInputEditor:Gn,platform:h(),writeClipboard:async e=>{await navigator.clipboard.writeText(e)},openUrl:e=>{/^https?:\/\//i.test(e)&&window.open(e,`_blank`,`noopener,noreferrer`)},storage:Tr()},Dr=3e3,Or=`ashlr.verse.terminal.prefs.v1`,kr=`ashlr.verse.terminal.raw.v1:`,Ar=`ashlr.verse.terminal.screenReader`,jr=0;function Mr(e){let t={screenReader:!1,ligatures:!0,gpu:!0,inputEditor:!0};try{let n=e?.getItem(Or);if(n){let e=JSON.parse(n);typeof e.ligatures==`boolean`&&(t.ligatures=e.ligatures),typeof e.gpu==`boolean`&&(t.gpu=e.gpu),typeof e.inputEditor==`boolean`&&(t.inputEditor=e.inputEditor)}t.screenReader=e?.getItem(Ar)===`1`}catch{}return t}function Nr(e,t){try{e?.setItem(Or,JSON.stringify({ligatures:t.ligatures,gpu:t.gpu,inputEditor:t.inputEditor})),e?.setItem(Ar,t.screenReader?`1`:`0`)}catch{}}function Pr(e,t){try{let n=JSON.parse(e?.getItem(`${kr}${t}`)??`[]`);return new Set(Array.isArray(n)?n.filter(e=>typeof e==`string`).slice(0,64):[])}catch{return new Set}}function Fr(e,t,n){try{n.size===0?e?.removeItem(`${kr}${t}`):e?.setItem(`${kr}${t}`,JSON.stringify([...n]))}catch{}}var Ir={auto:`Local model, then cloud Grok (shares terminal context)`,local:`Local model only`,off:`Off`};function $(e,t){if(e instanceof je)return e.message;if(e instanceof u){if(e.status===401)return`Unlock actions with the mutation token to use the terminal.`;if(e.detail)return re(e.detail)}return t}function Lr({sessionId:e,roots:t,request:n,onSendToChat:r,onAskChat:i,visible:a,session:o,seats:s=[],onOpenSession:c,deps:l}){let d=(0,P.useMemo)(()=>({...Er,...l}),[l]),f=x(),h=a&&f,g=b().compact,[_,S]=(0,P.useState)(null),[C,w]=(0,P.useState)(null),[T,E]=(0,P.useState)(()=>un(e,d.storage)),[D,O]=(0,P.useState)(null),[k,re]=(0,P.useState)(new Map),[se,le]=(0,P.useState)(!1),[de,pe]=(0,P.useState)(()=>new Map),[me,_e]=(0,P.useState)(null),[ve,xe]=(0,P.useState)(null),[j,Se]=(0,P.useState)(()=>Mr(d.storage)),[Oe,ke]=(0,P.useState)(null),[Ae,je]=(0,P.useState)(()=>new Map),[Me,Ne]=(0,P.useState)(null),[Pe,Fe]=(0,P.useState)(0),[Ie,N]=(0,P.useState)(()=>Pr(d.storage,e)),[L,Re]=(0,P.useState)(null),[R,ze]=(0,P.useState)(null),[Be,Ve]=(0,P.useState)(!1),[He,Ue]=(0,P.useState)(()=>vt(d.storage)),[z,We]=(0,P.useState)(()=>xt(d.storage)),[B,V]=(0,P.useState)(null),[Ge,H]=(0,P.useState)(!1),[Ke,qe]=(0,P.useState)(!1),[Je,Ye]=(0,P.useState)(null),U=(0,P.useRef)(new Map),Xe=(0,P.useRef)(new Map),W=(0,P.useRef)(!0),G=(0,P.useRef)(!1),Ze=(0,P.useRef)(null),Qe=(0,P.useRef)(new Map),$e=(0,P.useRef)(null);(0,P.useEffect)(()=>(W.current=!0,()=>{W.current=!1,$e.current&&clearTimeout($e.current)}),[]);let et=(0,P.useRef)(e);et.current!==e&&(et.current=e,G.current=!1),(0,P.useEffect)(()=>{E(un(e,d.storage)),N(Pr(d.storage,e))},[e,d.storage]);let tt=(0,P.useMemo)(()=>_?.tabs??[],[_]),K=(0,P.useMemo)(()=>tt.filter(t=>t.sessionId===e),[tt,e]),q=(0,P.useMemo)(()=>new Map(K.map(e=>[e.id,e])),[K]),nt=K.map(e=>e.id).join(`,`);(0,P.useEffect)(()=>{_&&E(e=>qt(e,nt?nt.split(`,`):[]))},[_,nt]),(0,P.useEffect)(()=>{_&&dn(e,T,d.storage)},[T,_,e,d.storage]),(0,P.useEffect)(()=>{if(!_)return;let t=new Set(nt?nt.split(`,`):[]);N(n=>{let r=new Set([...n].filter(e=>t.has(e)));return r.size===n.size?n:(Fr(d.storage,e,r),r)})},[_,nt,e,d.storage]);let J=T.active===`agent`?null:T.groups.find(e=>e.id===T.active)??null,it=T.active===`agent`||_!==null&&!_.available&&T.groups.length===0,Y=J?q.get(J.focused)??null:null,ot=Y?T.modes[Y.id]??`terminal`:`terminal`,st=(0,P.useCallback)(async()=>{try{let e=await d.api.list();if(!W.current)return;S(e),w(null)}catch(e){W.current&&w($(e,`The terminal list could not be loaded.`))}if(d.agentTools)try{let{tabs:e}=await d.agentTools.tabs();W.current&&re(new Map(e.map(e=>[e.tabId,e])))}catch{}},[d.api,d.agentTools]);(0,P.useEffect)(()=>{st()},[st]),ee(()=>{st()},Dr,{enabled:a}),(0,P.useEffect)(()=>{h&&J&&je(e=>{let t=null;for(let n of J.panes){let r=q.get(n);r&&e.get(n)!==r.lastActivityAt&&(t??=new Map(e),t.set(n,r.lastActivityAt))}return t??e})},[h,J,q]);let ct=(0,P.useCallback)((e,t)=>{S(n=>n&&{...n,tabs:n.tabs.map(n=>n.id===e?t(n):n)})},[]),lt=(0,P.useCallback)(()=>{for(let e of U.current.values()){let t=e.size();if(t)return t}return{cols:80,rows:24}},[]),ut=(0,P.useCallback)(async t=>{le(!0),O(null);try{let n=await d.api.create({sessionId:e,...t.root?{root:t.root}:{},...t.cwd?{cwd:t.cwd}:{},...t.appId?{appId:t.appId}:{},...t.appId&&t.via?{via:t.via}:{},...t.appId&&t.model?{model:t.model}:{},...t.devServerId?{devServerId:t.devServerId}:{},...t.size??lt()});return W.current&&S(e=>e&&{...e,tabs:[...e.tabs.filter(e=>e.id!==n.id),n]}),n}catch(e){return W.current&&O({tone:`error`,text:$(e,`The terminal could not be opened.`)}),null}finally{W.current&&le(!1)}},[d.api,e,lt]),X=(0,P.useCallback)(async e=>{let t=await ut(e);return t&&W.current&&E(e=>Jt(e,t.id)),t},[ut]),ft=(0,P.useCallback)(()=>Y?{root:Y.root,...Y.cwd?{cwd:Y.cwd}:{}}:{},[Y]),mt=(0,P.useCallback)(async e=>{if(!J)return;if(J.panes.length>=6){O({tone:`info`,text:`A tab holds 6 terminals at most. Open a new tab instead.`});return}let t=J.id,n=Y?U.current.get(Y.id)?.size()??null:null,r=n?e===`row`?{cols:Math.max(20,Math.floor((n.cols-1)/2)),rows:n.rows}:{cols:n.cols,rows:Math.max(5,Math.floor((n.rows-1)/2))}:void 0,i=await ut({...ft(),...r?{size:r}:{}});if(!i&&Y?.cwd&&(i=await ut({root:Y.root,...r?{size:r}:{}})),!i||!W.current)return;let a=i;E(n=>Xt(n,t,a.id,e)??Jt(n,a.id))},[J,ut,ft,Y]),ht=(0,P.useCallback)(async e=>{try{await d.api.kill(e.id)}catch(e){if(!(e instanceof u&&e.status===404)){O({tone:`error`,text:$(e,`The terminal could not be closed.`)});return}}S(t=>t&&{...t,tabs:t.tabs.filter(t=>t.id!==e.id)}),E(t=>Zt(t,e.id))},[d.api]),gt=(0,P.useCallback)(async e=>{for(let t of[...e.panes]){let e=q.get(t);e&&await ht(e)}},[ht,q]),_t=(0,P.useCallback)(async e=>{let t=await ut({root:e.root});if(t){E(n=>{let r=n.groups.find(t=>t.panes.includes(e.id));return r?{...n,groups:n.groups.map(n=>n.id===r.id?{...n,panes:n.panes.map(n=>n===e.id?t.id:n),focused:n.focused===e.id?t.id:n.focused}:n)}:Jt(n,t.id)});try{await d.api.kill(e.id)}catch{}S(t=>t&&{...t,tabs:t.tabs.filter(t=>t.id!==e.id)})}},[ut,d.api]);(0,P.useEffect)(()=>{_&&_.available&&h&&!G.current&&!se&&(n&&n.nonce>jr||(G.current=!0,K.length===0&&T.active!==`agent`&&X({})))},[_,h,K.length,se,n,T.active,X]);let bt=(0,P.useRef)(T);bt.current=T;let Ct=(0,P.useCallback)((e,t)=>{let n=bt.current.groups.find(t=>t.panes.includes(e));if(!n||n.zoomed)return;let r=rn(n,e,t);r&&(E(e=>Qt(e,n.id,r)),U.current.get(r)?.focus())},[]),wt=(0,P.useCallback)(e=>{(e?U.current.get(e):void 0)?.openAssist()||Re({mode:`assist`,tabId:e,draft:``})},[]),Tt=(0,P.useCallback)((e,t)=>{Re({mode:`history`,tabId:e,draft:t})},[]),Et=(0,P.useCallback)((e,t)=>Tt(e,t),[Tt]),Dt=(0,P.useCallback)((t,n)=>{N(r=>{if(r.has(t)===n)return r;let i=new Set(r);return n?i.add(t):i.delete(t),Fr(d.storage,e,i),i}),setTimeout(()=>U.current.get(t)?.focus(),0)},[d.storage,e]),Ot=(0,P.useCallback)(async()=>{if(d.api.settings)try{let e=await d.api.settings();W.current&&ze(e)}catch{}},[d.api]),kt=(0,P.useCallback)(async e=>{if(d.api.updateSettings)try{let t=await d.api.updateSettings(e);if(!W.current)return;ze(t),e.history!==void 0&&(Pn(),O({tone:`info`,text:t.history?`Command history is on: commands you finish are remembered (secrets removed).`:`Command history is off: nothing new is recorded.`}))}catch(e){O({tone:`error`,text:$(e,`That setting could not be changed.`)})}},[d.api]),At=(0,P.useCallback)(async()=>{if(Ve(!1),d.api.clearHistory)try{await d.api.clearHistory(),Pn(),O({tone:`info`,text:`Command history cleared.`})}catch(e){O({tone:`error`,text:$(e,`The history could not be cleared.`)})}},[d.api]),jt=(0,P.useCallback)((e,t)=>{Ze.current={tabId:e,text:t},Fe(e=>e+1)},[]),Mt=(0,P.useCallback)(async e=>{if(e.agent){E(e=>({...e,active:Ht}));return}if(e.assist||e.history){let t=Y&&!Y.exited?Y:K.find(e=>!e.exited)??null;e.assist?wt(t?.id??null):Tt(t?.id??null,``);return}if(e.launch){H(!0);return}if(e.tabId){let t=e.tabId,n=T.groups.find(e=>e.panes.includes(t));if(!n||!q.has(t)){O({tone:`info`,text:`That terminal is no longer open.`});return}E(e=>Qt(e,n.id,t));let r=e.blockId;r?(E(e=>an(e,t,`blocks`)),setTimeout(()=>U.current.get(t)?.jumpTo(r),0)):setTimeout(()=>U.current.get(t)?.focus(),0);return}let n=e.newTab===!0||!!e.appId||!!e.devServerId,r=null;if(!n){let t=K.filter(t=>!t.exited&&(!e.root||t.root===e.root));r=(Y&&t.includes(Y)?Y:null)??t.at(-1)??null}if(r){let e=T.groups.find(e=>e.panes.includes(r.id));e&&E(t=>({...Qt(t,e.id,r.id),modes:{...t.modes,[r.id]:`terminal`}}))}else r=await X({...e.root??Y?.root??t[0]?{root:e.root??Y?.root??t[0]}:{},...e.appId?{appId:e.appId}:{},...e.via?{via:e.via}:{},...e.model?{model:e.model}:{},...e.devServerId?{devServerId:e.devServerId}:{}});r&&(e.paste?jt(r.id,e.paste):U.current.get(r.id)?.focus())},[Y,T.groups,wt,Tt,X,jt,t,K,q]);(0,P.useEffect)(()=>{!n||!_||n.nonce<=jr||(jr=n.nonce,G.current=!0,(_.available||n.agent)&&Mt(n))},[n,_,Mt]);let Nt=(0,P.useCallback)(()=>o??ne(e).session??null,[o,e]),Pt=(0,P.useMemo)(()=>M(s),[s]),Ft=(0,P.useCallback)(async(e,t,n)=>{let i=Nt();if(!i){r(t),O({tone:`info`,text:`Added to the chat’s message box.`});return}Ye({text:`Asking ${e.label}…`,sessionId:null});try{let r=await Te(Ce,{source:i,target:e,text:t,title:n,relation:`compare`});if(!W.current)return;Ye({text:r.created?`Sent to ${r.label} in a new chat.`:`Sent to ${r.label} in this chat.`,sessionId:r.created?r.sessionId:null})}catch(t){if(!W.current)return;Ye(null),O({tone:`error`,text:$(t,`${e.label} could not be asked.`)})}},[Nt,r]),It=(0,P.useCallback)((e,t)=>{if(t===`explain`&&i){i(e),O({tone:`info`,text:`Sent to the chat.`});return}let n=t===`explain`?Nt():null;if(n){let t=Pt.find(e=>e.seatId===n.seatId)??{seatId:n.seatId,model:n.model,label:`this chat’s seat`,engine:n.engine};Ft(t,e,n.title);return}r(e),O({tone:`info`,text:`Added to the chat’s message box.`})},[Pt,Nt,i,r,Ft]),Lt=(0,P.useCallback)(e=>{xe(e),$e.current&&clearTimeout($e.current),$e.current=setTimeout(()=>{W.current&&xe(null)},1400)},[]),Rt=(0,P.useCallback)(async(e,t,n)=>{let r=await d.api.blockOutput(e,t.id,n);return{command:r.command,output:r.output}},[d.api]),zt=(0,P.useCallback)(async(e,t)=>dt(await Promise.all(e.blocks.map(async t=>{if(t.source===`agent`||e.tabId===null)return{block:t,command:t.command,output:be(t.output??``)};let{command:n,output:r}=await Rt(e.tabId,t,`chat`);return{block:t,command:n,output:r}})),t),[Rt]),Bt=(0,P.useCallback)(async(e,t)=>{try{let n=await zt(e,`explain`),r=e.blocks[0];await Ft(t,n,`Terminal · ${(r?.command||`command`).slice(0,60)}`)}catch(e){O({tone:`error`,text:$(e,`That did not work.`)})}},[zt,Ft]),Ut=(0,P.useCallback)(async e=>{try{V({prompt:await zt(e,`explain`)})}catch(e){O({tone:`error`,text:$(e,`That did not work.`)})}},[zt]),Wt=(0,P.useCallback)((e,t)=>{let n=Nt()!==null,r=Pt.filter(e=>e.ready),i=Pt.map(e=>({id:`ask:${e.seatId}`,label:`Ask ${e.label}`,description:e.ready?Nt()?.seatId===e.seatId?`In this chat.`:`In a new chat on the same folders.`:`May be busy or signed out.`,onSelect:()=>void Bt(t,e),disabled:!n,reason:n?null:`Open a chat first.`}));i.push({id:`ask-all`,label:`Ask all ready seats (${r.length})`,description:`Their proposed fixes side by side (Compare). Nothing is sent until you confirm.`,onSelect:()=>void Ut(t),disabled:!n||r.length<2,reason:r.length<2?`Needs at least two ready seats.`:n?null:`Open a chat first.`,separated:!0}),Pt.length===0&&i.unshift({id:`none`,label:`No seats are connected`,onSelect:()=>void 0,disabled:!0,reason:`Connect an account in Apps & Accounts.`}),ke({kind:`block`,anchor:ae(e,`end`),from:e,items:i,label:t.blocks.length>1?`Ask about ${t.blocks.length} commands`:`Ask a seat`})},[Bt,Ut,Pt,Nt]),Gt=(0,P.useCallback)(async(e,t,n,r)=>{try{switch(t){case`ask`:r?.anchor&&Wt(r.anchor,{tabId:e,blocks:[n]});return;case`ask-seat`:{let t=Pt.find(e=>e.seatId===r?.seatId);t&&await Bt({tabId:e,blocks:[n]},t);return}case`rerun`:{let t=e?q.get(e):null;if(!t||t.exited||!n.command)return;let r=new TextEncoder().encode(`${n.command.replace(/[\r\n]+/g,` `)}\r`),i=``;for(let e of r)i+=String.fromCharCode(e);await d.api.input(t.id,btoa(i)),E(e=>an(e,t.id,`terminal`));return}case`bookmark`:e&&Ue(yt(d.storage,e,n.id));return;case`copy-link`:{let t=e?pt(e,n.id):null;if(!t)return;await d.writeClipboard(t),Lt(`Link copied`);return}case`open-url`:r?.url&&/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(:\d+)?(\/|$)/i.test(r.url)&&v({url:r.url});return;case`paste-text`:if(e&&r?.text){let t=T.groups.find(t=>t.panes.includes(e));t&&E(n=>an(Qt(n,t.id,e),e,`terminal`)),jt(e,r.text)}return;case`copy-command`:await d.writeClipboard(n.command),Lt(`Command copied`);return;case`copy-output`:{let t=n.source===`agent`||e===null?be(n.output??``):(await Rt(e,n,`text`)).output;await d.writeClipboard(t),Lt(`Output copied`);return}case`send`:case`explain`:{let r=t;if(n.source===`agent`||e===null)It(at(n,n.command,be(n.output??``),r),r);else{let{command:t,output:i}=await Rt(e,n,`chat`);It(at(n,t,i,r),r)}return}case`jump`:if(!e)return;E(t=>an(t,e,`terminal`)),setTimeout(()=>U.current.get(e)?.jumpTo(n.id),0);return;case`paste`:{let e=Y&&!Y.exited?Y:K.find(e=>!e.exited)??null;if(e){let t=T.groups.find(t=>t.panes.includes(e.id));t&&E(n=>an(Qt(n,t.id,e.id),e.id,`terminal`)),jt(e.id,n.command)}else{let e=await X({});e&&jt(e.id,n.command)}return}}}catch(e){O({tone:`error`,text:$(e,`That did not work.`)})}},[Bt,Pt,It,d,Lt,Y,T.groups,Wt,X,jt,q,K,Rt]),Kt=(0,P.useCallback)(async(e,t,n,i)=>{let a={tabId:e,blocks:n};try{if(t===`ask`){i&&Wt(i,a);return}if(t===`send`){r(await zt(a,`send`)),O({tone:`info`,text:`${n.length} commands added to the chat’s message box.`});return}let o=await Promise.all(n.map(async t=>`$ ${t.command}\n${(await Rt(e,t,`text`)).output}`));await d.writeClipboard(o.join(`
|
|
24
|
+
|
|
25
|
+
`)),Lt(`${n.length} outputs copied`)}catch(e){O({tone:`error`,text:$(e,`That did not work.`)})}},[zt,d,Lt,r,Wt,Rt]),Yt=(0,P.useMemo)(()=>we(s,Sr).map(e=>({seatId:e.seatId,label:e.label})),[s]),on=(0,P.useMemo)(()=>new Map(Object.entries(He).map(([e,t])=>[e,new Set(t)])),[He]),sn=(0,P.useMemo)(()=>new Set,[]),cn=d.api.fix,ln=(0,P.useMemo)(()=>z&&cn?(e,t)=>cn(e,t.id):null,[z,cn]),fn=(0,P.useCallback)(e=>({bookmarks:on.get(e)??sn,loadFix:ln,askTargets:Yt,onOpenUrl:e=>v({url:e}),onSelectionAction:(e,t,n,r)=>void Kt(e,t,n,r)}),[on,sn,Yt,ln,Kt]),pn=(0,P.useMemo)(()=>new Map(K.map(e=>[e.id,fn(e.id)])),[K,fn]);y(`terminal.launch`,()=>(H(!0),!0),h&&!!_?.available),y(`terminal.workflows`,()=>(qe(!0),!0),h);let mn=(0,P.useCallback)(async e=>{let t=Y&&!Y.exited?Y:K.find(e=>!e.exited)??null;if(t){let n=T.groups.find(e=>e.panes.includes(t.id));n&&E(e=>an(Qt(e,n.id,t.id),t.id,`terminal`)),jt(t.id,e);return}let n=await X({});n&&jt(n.id,e)},[Y,T.groups,X,jt,K]),hn=(0,P.useCallback)(async()=>{if(!d.api.launchList)throw Error(`Launch configurations need a newer server.`);return d.api.launchList(e)},[d.api,e]),gn=(0,P.useCallback)(async t=>{if(!d.api.launch)throw Error(`Launch configurations need a newer server.`);let n;try{n=await d.api.launch({sessionId:e,root:t.root,name:t.name,digest:t.digest,...lt()})}catch(e){throw Error($(e,`That configuration could not be launched.`))}if(!W.current)return;let r=n.groups.flatMap(e=>e.tabs);S(e=>e&&{...e,tabs:[...e.tabs.filter(e=>!r.some(t=>t.id===e.id)),...r]}),E(e=>{let t=e;for(let e of n.groups){let[n,r]=e.tabs;if(!n)continue;t=Jt(t,n.id);let i=t.groups.find(e=>e.panes.includes(n.id));r&&i&&(t=Xt(t,i.id,r.id,e.split===`down`?`column`:`row`)??Jt(t,r.id))}return t}),n.errors.length>0?O({tone:`error`,text:`Launched with problems: ${n.errors.join(`; `)}`}):O({tone:`info`,text:`Launched “${t.name}”.`})},[d.api,e,lt]),_n=(0,P.useCallback)(async()=>{let e=me?.tabId??Y?.id;if(!e)return;let t=(U.current.get(e)?.getSelection()??me?.text??``).replace(/\s+$/,``);if(t.trim())try{let e=await d.api.redact(t),n=rt(e);r(`${n}\n${e}\n${n}`),O({tone:`info`,text:`Added to the chat’s message box.`})}catch(e){O({tone:`error`,text:$(e,`The selection could not be sent.`)})}},[d.api,Y,r,me]),vn=(0,P.useCallback)((e,t)=>{ct(e,e=>{switch(t.type){case`title`:return e.title===t.title?e:{...e,title:t.title};case`exit`:return{...e,exited:{code:t.code,signal:t.signal,at:new Date().toISOString()}};case`cwd`:return e.cwd===t.cwd?e:{...e,cwd:t.cwd};case`integration`:return e.shellIntegration===t.state?e:{...e,shellIntegration:t.state};case`agent-state`:return{...e,agentState:t.agentState};default:return e}})},[ct]),yn=(0,P.useCallback)((e,t)=>{switch(t){case`find`:U.current.get(e)?.openFind();return;case`split-right`:mt(`row`);return;case`split-down`:mt(`column`);return;case`prev-block`:case`next-block`:return;case`toggle-blocks`:E(t=>an(t,e,(t.modes[e]??`terminal`)===`terminal`?`blocks`:`terminal`));return;case`focus-left`:case`focus-right`:case`focus-up`:case`focus-down`:Ct(e,t.slice(6));return;case`zoom-pane`:{let t=bt.current.groups.find(t=>t.panes.includes(e));t&&E(n=>en(Qt(n,t.id,e),t.id));return}case`assist`:wt(e);return}},[mt,Ct,wt]),bn=(0,P.useCallback)((e,t,n)=>{_e(t?{tabId:e,text:n}:null),t&&n&&d.writeClipboard(n).then(()=>{W.current&&Lt(`Copied`)},()=>{})},[d,Lt]),xn=(0,P.useCallback)((e,t)=>{pe(n=>{if((n.get(e)??null)===t)return n;let r=new Map(n);return t===null?r.delete(e):r.set(e,t),r}),t===`gone`&&st()},[st]),Sn=(0,P.useCallback)((e,t,n)=>{let r=t.failed||t.exitCode!==null&&t.exitCode!==0,a=[{id:`copy-output`,label:`Copy output`,onSelect:()=>void Gt(e,`copy-output`,t),disabled:t.fullscreen,reason:t.fullscreen?`A full-screen program keeps no output.`:null},{id:`send`,label:`Send to chat`,description:`Adds the command and its output to the message box (secrets removed).`,onSelect:()=>void Gt(e,`send`,t)},...r?[{id:`explain`,label:`Explain and fix this error`,description:i?`Sends it to this chat’s seat.`:`Drafts the question in the message box.`,onSelect:()=>void Gt(e,`explain`,t)}]:[],{id:`ask`,label:`Ask…`,description:`Any seat — Claude Code, Codex, Devin, Grok, a local model — or all of them side by side.`,onSelect:()=>setTimeout(()=>Wt(n,{tabId:e,blocks:[t]}),0)},{id:`copy-command`,label:`Copy command`,onSelect:()=>void Gt(e,`copy-command`,t),disabled:!t.command},{id:`copy-link`,label:`Copy link`,description:`A verse://terminal link to this block.`,onSelect:()=>void Gt(e,`copy-link`,t)},{id:`bookmark`,label:on.get(e)?.has(t.id)?`Remove bookmark`:`Bookmark`,onSelect:()=>void Gt(e,`bookmark`,t)},{id:`blocks`,label:`Show in Blocks`,onSelect:()=>E(t=>an(t,e,`blocks`))}];ke({kind:`block`,anchor:ae(n,`end`),from:null,items:a,label:`Command: ${t.command||`command`}`})},[on,i,Wt,Gt]),Cn=e=>{let t=Xe.current.get(e);return t||(t=t=>{t?U.current.set(e,t):(U.current.delete(e),Xe.current.delete(e))},Xe.current.set(e,t)),t};(0,P.useEffect)(()=>{if(Pe===0)return;let e=()=>{let e=Ze.current;if(!e)return!0;let t=U.current.get(e.tabId);return!t?.size()||!t.hasOutput()?!1:(Ze.current=null,setTimeout(()=>t.paste(e.text),120),!0)};if(e())return;let t=setInterval(()=>{e()&&clearInterval(t)},200),n=setTimeout(()=>clearInterval(t),1e4);return()=>{clearInterval(t),clearTimeout(n)}},[Pe]);let wn=e=>{Se(t=>{let n={...t,...e};return Nr(d.storage,n),n})},Tn=async()=>{try{await d.api.openExternal(e,Y?.root??t[0]),O({tone:`info`,text:`Opened in Terminal.`})}catch(e){O({tone:`error`,text:$(e,`Terminal could not be opened.`)})}},En=e=>{Ot();let t=J,n=t&&t.panes.length>1?[...[`row`,`column`,`grid`].map(e=>({id:`layout-${e}`,...e===`row`?{separated:!0}:{},label:`${e===t.direction?`✓ `:``}${e===`row`?`Side by side`:e===`column`?`Stacked`:`Grid`}`,onSelect:()=>E(n=>$t(n,t.id,e))})),{id:`zoom`,label:`${t.zoomed?`Show every pane`:`Zoom this pane`} (${$n(`zoom-pane`,d.platform)})`,onSelect:()=>E(e=>en(e,t.id))}]:[],r=R?.history??!0,i=R?.assist??`local`,a=Y?Ie.has(Y.id):!1,o=[{id:`find`,label:`Find… (${$n(`find`,d.platform)})`,onSelect:()=>Y&&U.current.get(Y.id)?.openFind(),disabled:!Y},{id:`history`,label:`Command history… (Ctrl+R)`,description:`Search what you ran; Return puts it at the prompt without running it.`,onSelect:()=>Tt(Y?.id??null,``)},{id:`assist`,label:`Generate a command… (${$n(`assist`,d.platform)})`,description:i===`auto`?`Local model first; Grok may receive the request and recent terminal context.`:`Describe it in words; the configured local model writes it for you to review.`,onSelect:()=>wt(Y?.id??null),disabled:i===`off`,reason:i===`off`?`Plain-English commands are turned off below.`:null},...n,{id:`raw`,separated:!0,label:a?`Use the input editor in this shell`:`Raw input for this shell`,description:a?`Back to the editor at each prompt: history, completion, plain words.`:`Keys go straight to the shell: your zsh-autosuggestions, fzf and prompt, untouched.`,onSelect:()=>Y&&Dt(Y.id,!a),disabled:!Y||!j.inputEditor},{id:`input-editor`,label:j.inputEditor?`Turn the input editor off`:`Turn the input editor on`,description:`For every shell: a prompt editor with history, completion and plain words.`,onSelect:()=>wn({inputEditor:!j.inputEditor})},{id:`history-toggle`,separated:!0,label:r?`Stop recording command history`:`Record command history`,description:`Kept in ~/.ashlr/verse on this Mac, secrets removed.`,onSelect:()=>void kt({history:!r}),disabled:!d.api.updateSettings},{id:`history-clear`,label:`Clear command history…`,danger:!0,onSelect:()=>Ve(!0),disabled:!d.api.clearHistory},...[`auto`,`local`,`off`].map(e=>({id:`assist-${e}`,label:`${e===i?`✓ `:``}Plain-English commands: ${Ir[e]}`,onSelect:()=>void kt({assist:e}),disabled:!d.api.updateSettings})),{id:`clear`,separated:!0,label:`Clear screen and scrollback`,onSelect:()=>Y&&U.current.get(Y.id)?.clear(),disabled:!Y},{id:`ligatures`,label:j.ligatures?`Turn ligatures off`:`Turn ligatures on`,description:`For fonts that have them (Fira Code, JetBrains Mono…), with GPU rendering.`,onSelect:()=>wn({ligatures:!j.ligatures})},{id:`gpu`,label:j.gpu?`Turn GPU rendering off`:`Turn GPU rendering on`,description:`Applies to terminals opened from now on.`,onSelect:()=>wn({gpu:!j.gpu})},{id:`sr`,label:j.screenReader?`Turn screen reader mode off`:`Turn screen reader mode on`,onSelect:()=>wn({screenReader:!j.screenReader})},...d.platform===`mac`?[{id:`external`,label:`Open in Terminal.app`,onSelect:()=>void Tn()}]:[],...Dn(),{id:`launch`,label:`Launch configuration…`,separated:!0,description:`Tabs, splits and commands from .ashlr/verse/launch.json — typed only when you launch one.`,onSelect:()=>H(!0),disabled:!_?.available||!d.api.launchList},{id:`workflows`,label:`Command workflow…`,description:`Fill a saved command’s parameters and paste it at the prompt (it does not run).`,onSelect:()=>qe(!0),disabled:!_?.available},{id:`fix-chips`,label:z?`Stop suggesting fixes`:`Suggest fixes with the local model`,description:`When a command fails, the local model offers up to three commands to paste. Free, and nothing leaves this Mac.`,onSelect:()=>{St(d.storage,!z),We(!z)}}];ke({kind:`more`,anchor:ae(e),from:e,items:o,label:`Terminal`})},Dn=()=>{let t=d.agentTools;if(!t||!Y||Y.agent||Y.appId||Y.sessionId!==e)return[];let n=k.get(Y.id)?.kind===`shared`;return[{id:`share-agent`,label:n?`Stop sharing this shell with the agent`:`Share this shell with the agent…`,description:n?`The agent can no longer type here or read this shell.`:`The chat's agent may run commands here and read the output. Typing yourself pauses it.`,onSelect:()=>{t.share(e,Y.id,!n).then(()=>{O({tone:`info`,text:n?`This shell is yours alone again.`:`Shared with this chat's agent. Type in it to take it back over.`}),st()},e=>O({tone:`error`,text:$(e,`Switch this chat's Agent tools to "Share my shells" first (Chat actions → Agent tools).`)}))}}]},On=e=>{d.agentTools?.resume(e).then(()=>{O({tone:`info`,text:`Handed back to the agent.`}),st()},e=>O({tone:`error`,text:$(e,`The terminal could not be handed back.`)}))},kn=e=>{ke({kind:`root`,anchor:ae(e),from:e,label:`New terminal in`,items:t.map(e=>({id:e,label:te(e),description:e,onSelect:()=>void X({root:e})}))})},An=[...T.groups.map(e=>e.id),Ht],jn=(e,t)=>{let n=-1;if(e.key===`ArrowRight`?n=(t+1)%An.length:e.key===`ArrowLeft`?n=(t-1+An.length)%An.length:e.key===`Home`?n=0:e.key===`End`&&(n=An.length-1),n<0)return;e.preventDefault();let r=An[n];E(e=>({...e,active:r})),Qe.current.get(r)?.focus()};if(!_)return C?(0,F.jsx)(`div`,{className:Z.panel,children:(0,F.jsx)(ye,{compact:!0,tone:`error`,title:`Terminal is not reachable`,body:C,action:(0,F.jsx)(A,{size:`sm`,variant:`subtle`,onClick:()=>void st(),children:`Try again`})})}):(0,F.jsxs)(`div`,{className:Z.panel,"aria-busy":`true`,children:[(0,F.jsx)(`div`,{className:Z.strip,"aria-hidden":`true`}),(0,F.jsxs)(`div`,{className:Z.loading,children:[(0,F.jsx)(m,{width:`40%`}),(0,F.jsx)(m,{width:`70%`})]})]});let Mn=K.length===0&&!it&&(!G.current||se),Nn=Y?de.get(Y.id)??null:null,Fn=Nn===`reconnecting`?`Reconnecting…`:Nn===`expired`?`Session expired — reload to reconnect`:ve??``,Q=it;return(0,F.jsxs)(`div`,{className:Z.panel,"data-compact":g||void 0,children:[(0,F.jsxs)(`div`,{className:Z.strip,children:[(0,F.jsxs)(`div`,{className:Z.tabs,role:`tablist`,"aria-label":`Terminals`,children:[T.groups.map((e,t)=>{let n=!Q&&e.id===T.active,r=q.get(e.panes[0]);if(!r)return null;let i=e.panes.length>1?`${r.title} +${e.panes.length-1}`:r.title,a=e.panes.every(e=>q.get(e)?.exited),o=!n&&e.panes.some(e=>{let t=q.get(e);return t&&!t.exited&&(Ae.get(e)??t.createdAt)<t.lastActivityAt});return(0,F.jsxs)(`div`,{className:Z.tab,"data-selected":n||void 0,role:`presentation`,children:[(0,F.jsxs)(`button`,{ref:t=>{t?Qe.current.set(e.id,t):Qe.current.delete(e.id)},type:`button`,role:`tab`,id:`terminal-tab-${e.id}`,"aria-selected":n,"aria-controls":`terminal-group-${e.id}`,tabIndex:n?0:-1,className:Z.tabButton,title:`${i} — ${r.cwd??r.root}`,onClick:()=>E(t=>({...t,active:e.id})),onKeyDown:e=>jn(e,t),children:[(0,F.jsx)(`span`,{className:Z.tabTitle,children:i}),(()=>{let t=Cr(wr(e.panes.map(e=>q.get(e)?.agentState)));return t?(0,F.jsx)(`span`,{className:I.agentBadge,"data-state":t.state,title:t.title,"aria-label":t.title,children:t.label}):r.agent?(0,F.jsx)(`span`,{className:Z.tabMeta,children:`agent`}):null})(),k.get(r.id)?.kind===`shared`?(0,F.jsx)(`span`,{className:Z.tabMeta,children:`shared`}):null,k.get(r.id)?.takenOverAt?(0,F.jsx)(`span`,{className:Z.tabMeta,children:`you have it`}):null,a?(0,F.jsx)(`span`,{className:Z.tabMeta,children:`exited`}):null,o?(0,F.jsx)(`span`,{className:Z.unseen,"aria-label":`new output`,role:`img`}):null]}),(0,F.jsx)(`button`,{type:`button`,className:Z.tabClose,"aria-label":`Close terminal ${i}`,title:`Close terminal`,onClick:()=>void gt(e),children:(0,F.jsx)(ce,{size:12})})]},e.id)}),(0,F.jsx)(`div`,{className:Z.tab,"data-selected":Q||void 0,role:`presentation`,children:(0,F.jsxs)(`button`,{ref:e=>{e?Qe.current.set(Ht,e):Qe.current.delete(Ht)},type:`button`,role:`tab`,id:`terminal-tab-agent`,"aria-selected":Q,"aria-controls":`terminal-group-agent`,tabIndex:Q?0:-1,className:Z.tabButton,title:`Commands this chat's agents ran (read-only)`,onClick:()=>E(e=>({...e,active:Ht})),onKeyDown:e=>jn(e,An.length-1),children:[(0,F.jsx)(`span`,{className:Z.tabTitle,children:`Agent`}),(0,F.jsx)(`span`,{className:Z.tabMeta,children:`read-only`})]})})]}),(0,F.jsx)(`div`,{className:Z.stripActions,children:_.available?(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(he,{}),"aria-label":`New terminal tab`,title:`New terminal tab`,busy:se,onClick:()=>void X(ft())}),t.length>1?(0,F.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(De,{}),"aria-label":`New terminal in…`,"aria-haspopup":`menu`,"aria-expanded":Oe?.kind===`root`,title:`Choose the folder`,onClick:e=>kn(e.currentTarget)}):null]}):null})]}),!Q&&Y?(0,F.jsxs)(`div`,{className:Z.header,children:[(0,F.jsx)(`span`,{className:Z.cwd,title:Y.cwd??Y.root,children:te(Y.cwd??Y.root)}),(0,F.jsx)(`span`,{className:Z.headerStatus,role:`status`,"aria-live":`polite`,children:Fn}),(0,F.jsxs)(`div`,{className:Z.headerActions,children:[(0,F.jsxs)(`div`,{className:Z.segmented,role:`group`,"aria-label":`View`,children:[(0,F.jsx)(`button`,{type:`button`,"aria-pressed":ot===`terminal`,onClick:()=>E(e=>an(e,Y.id,`terminal`)),children:`Terminal`}),(0,F.jsx)(`button`,{type:`button`,"aria-pressed":ot===`blocks`,title:`Commands as blocks (${$n(`toggle-blocks`,d.platform)})`,onClick:()=>E(e=>an(e,Y.id,`blocks`)),children:`Blocks`})]}),g?null:(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(Rr,{direction:`row`}),"aria-label":`Split right`,title:`Split right${d.platform===`mac`?` (${$n(`split-right`,d.platform)})`:``}`,disabled:(J?.panes.length??0)>=6,onClick:()=>void mt(`row`)}),(0,F.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(Rr,{direction:`column`}),"aria-label":`Split down`,title:`Split down${d.platform===`mac`?` (${$n(`split-down`,d.platform)})`:``}`,disabled:(J?.panes.length??0)>=6,onClick:()=>void mt(`column`)})]}),(0,F.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(ue,{}),"aria-label":`Find in terminal`,title:`Find (${$n(`find`,d.platform)})`,onClick:()=>U.current.get(Y.id)?.openFind()}),(0,F.jsx)(A,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(ge,{}),disabled:!me,"aria-label":`Send selection to chat`,title:me?`Send the selected text to the chat as a code block (secrets removed)`:`Select text in the terminal first`,onClick:()=>void _n(),children:g?null:`Send to chat`}),(0,F.jsx)(ie,{variant:`ghost`,size:`sm`,icon:(0,F.jsx)(zr,{}),"aria-label":`More terminal options`,"aria-haspopup":`menu`,"aria-expanded":Oe?.kind===`more`,title:`More`,onClick:e=>En(e.currentTarget)})]})]}):null,!Q&&Y&&k.get(Y.id)?.takenOverAt?(0,F.jsxs)(`div`,{className:Z.notice,"data-tone":`info`,role:`status`,"data-testid":`terminal-takeover`,children:[(0,F.jsx)(`span`,{children:`You took over this terminal, so the agent is paused here.`}),(0,F.jsx)(A,{size:`sm`,variant:`subtle`,onClick:()=>On(Y.id),children:`Resume agent`})]}):null,D?(0,F.jsxs)(`div`,{className:Z.notice,"data-tone":D.tone,role:D.tone===`error`?`alert`:`status`,children:[(0,F.jsx)(`span`,{children:D.text}),(0,F.jsx)(`button`,{type:`button`,className:Z.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:()=>O(null),children:(0,F.jsx)(ce,{size:12})})]}):null,Be?(0,F.jsxs)(`div`,{className:Z.notice,role:`alertdialog`,"aria-label":`Clear command history`,children:[(0,F.jsx)(`span`,{children:`Clear every command in the history? This cannot be undone.`}),(0,F.jsx)(A,{size:`sm`,variant:`subtle`,onClick:()=>void At(),children:`Clear`}),(0,F.jsx)(A,{size:`sm`,variant:`ghost`,onClick:()=>Ve(!1),children:`Cancel`})]}):null,Je?(0,F.jsxs)(`div`,{className:Z.notice,role:`status`,children:[(0,F.jsx)(`span`,{children:Je.text}),Je.sessionId&&c?(0,F.jsx)(A,{size:`sm`,variant:`ghost`,onClick:()=>{let e=Je.sessionId;Ye(null),c(e)},children:`Open chat`}):null,(0,F.jsx)(`button`,{type:`button`,className:Z.noticeClose,"aria-label":`Dismiss`,title:`Dismiss`,onClick:()=>Ye(null),children:(0,F.jsx)(ce,{size:12})})]}):null,(0,F.jsxs)(`div`,{className:Z.body,children:[!_.available&&!Q?(0,F.jsx)(ye,{compact:!0,icon:(0,F.jsx)(Ee,{size:20}),title:`Terminal needs the desktop app`,body:`This Verse server has no built-in terminal. The Agent tab still shows what this chat's agents ran.`,action:d.platform===`mac`?(0,F.jsx)(A,{size:`sm`,variant:`subtle`,icon:(0,F.jsx)(fe,{}),onClick:()=>void Tn(),children:`Open in Terminal`}):void 0}):null,Mn&&_.available?(0,F.jsx)(`div`,{className:Z.loading,role:`status`,"aria-label":`Opening a shell`,children:(0,F.jsx)(m,{width:`30%`})}):null,_.available&&K.length===0&&!Mn&&!Q?(0,F.jsx)(ye,{compact:!0,icon:(0,F.jsx)(Ee,{size:20}),title:`No terminal open`,body:`Open a login shell in this chat's folder. Each command you run becomes a block you can copy, send to the chat, or ask it to fix.`,action:(0,F.jsx)(A,{size:`sm`,variant:`subtle`,icon:(0,F.jsx)(he,{}),busy:se,onClick:()=>void X({}),children:`New terminal`})}):null,T.groups.map(e=>{let t=!Q&&e.id===T.active,n=new Map(nn(e).map(e=>[e.id,e])),r=e.zoomed&&e.panes.includes(e.zoomed)?e.zoomed:null;return(0,F.jsx)(`div`,{id:`terminal-group-${e.id}`,role:`tabpanel`,"aria-labelledby":`terminal-tab-${e.id}`,className:Z.group,"data-direction":r?`row`:e.direction,"data-cols":e.direction===`grid`&&!r?tn(e.panes.length).cols:void 0,"data-split":e.panes.length>1&&!r||void 0,"data-zoomed":r?!0:void 0,hidden:!t,children:e.panes.map(i=>{let a=q.get(i);if(!a)return null;let o=r!==null&&r!==i;return(0,F.jsx)(vr,{ref:Cn(i),tab:a,deps:d,shown:h&&t&&!o,concealed:o,gridSpan:e.direction===`grid`&&!r?n.get(i)?.span??1:1,raw:Ie.has(i),onHistorySearch:Et,focused:e.focused===i,mode:T.modes[i]??`terminal`,prefs:j,assistMode:R?.assist??`local`,onFocus:()=>E(t=>Qt(t,e.id,i)),onMeta:vn,onBlockAction:(e,t,n,r)=>void Gt(e,t,n,r),...pn.get(i)?{extras:pn.get(i)}:{},onBlockMenu:Sn,onKeyAction:yn,onSelection:bn,onNotice:O,onStreamState:xn,onRestart:e=>void _t(e),onClose:e=>void ht(e),onError:$},i)})},e.id)}),(0,F.jsx)(`div`,{id:`terminal-group-agent`,role:`tabpanel`,"aria-labelledby":`terminal-tab-agent`,className:Z.group,hidden:!Q,children:Q?(0,F.jsx)(Vt,{sessionId:e,highlightId:Me,onAction:(e,t)=>{Ne(t.id),Gt(null,e,t)}}):null})]}),Oe?(0,F.jsx)(oe,{label:Oe.label,anchor:Oe.anchor,returnFocus:Oe.from,onClose:()=>ke(null),items:Oe.items}):null,L?(0,F.jsx)(Hn,{mode:L.mode,assistMode:R?.assist??`local`,api:d.api,tabId:L.tabId,cwd:(L.tabId?q.get(L.tabId)?.cwd??q.get(L.tabId)?.root:null)??null,initialQuery:L.draft,onClose:()=>Re(null),onPick:e=>{let t=L.tabId??Y?.id??null,n=t?U.current.get(t):void 0;n?setTimeout(()=>n.insertCommand(e),0):X({}).then(t=>{t&&jt(t.id,e)})},...L.mode===`history`&&L.tabId?{onPassThrough:e=>{let t=U.current.get(L.tabId);t&&(t.sendText(`\x12${e}`),setTimeout(()=>t.focus(),0))}}:{},...R?.history===!1||d.api.updateSettings?{onEnableHistory:()=>void kt({history:!0})}:{}}):null,B&&Nt()?(0,F.jsx)(P.Suspense,{fallback:null,children:(0,F.jsx)(yr,{mode:`compare`,prompt:B.prompt,selectAll:!0,maxSeats:Pt.filter(e=>e.ready).length,source:Nt(),seats:s,advisorSeats:Le(s.filter(e=>e.health.state===`ready`)),advice:null,onStarted:()=>void 0,onClose:()=>V(null)})}):null,Ge?(0,F.jsx)(P.Suspense,{fallback:null,children:(0,F.jsx)(br,{load:hn,onLaunch:gn,onClose:()=>H(!1)})}):null,Ke?(0,F.jsx)(p,{open:!0,onClose:()=>qe(!1),titleId:`terminal-workflows-title`,title:`Command workflows`,description:`Fill the parameters; the command is pasted at the prompt and runs only when you press Enter.`,children:(0,F.jsx)(P.Suspense,{fallback:(0,F.jsx)(m,{width:`50%`}),children:(0,F.jsx)(xr,{onPaste:e=>void mn(e),onClose:()=>qe(!1)})})}):null]})}function Rr({direction:e}){return(0,F.jsxs)(`svg`,{width:16,height:16,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,children:[(0,F.jsx)(`rect`,{x:`1.75`,y:`2.75`,width:`12.5`,height:`10.5`,rx:`1.5`}),e===`row`?(0,F.jsx)(`path`,{d:`M8 2.75v10.5`}):(0,F.jsx)(`path`,{d:`M1.75 8h12.5`})]})}function zr(){return(0,F.jsxs)(`svg`,{width:16,height:16,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:[(0,F.jsx)(`circle`,{cx:`3.5`,cy:`8`,r:`1.25`}),(0,F.jsx)(`circle`,{cx:`8`,cy:`8`,r:`1.25`}),(0,F.jsx)(`circle`,{cx:`12.5`,cy:`8`,r:`1.25`})]})}function Br({sessionId:e,session:t,roots:n,requests:r,host:i,visible:a}){let{seats:o}=Se();return e?(0,F.jsx)(Lr,{sessionId:e,roots:n,request:r.terminal,onSendToChat:i.sendToChat,visible:a,session:t,seats:o,onOpenSession:i.openSession}):(0,F.jsx)(ye,{compact:!0,icon:(0,F.jsx)(Ee,{size:20}),title:`Open a chat to use the terminal`,body:`Each chat has its own shells, command blocks and a read-only view of what its agents ran.`})}export{Br as TerminalRegistryPane,I as t};
|
|
26
|
+
//# sourceMappingURL=TerminalPane-XZ5n3Pns.js.map
|